diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ae54258 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,235 @@ +root = true +# Remove the line below if you want to inherit .editorconfig settings from higher directories + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +indent_style = space +tab_width = 4 + +# New line preferences +end_of_line = crlf +insert_final_newline = false +max_line_length = 420 + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = true + +# this. and Me. preferences +dotnet_style_qualification_for_event = false +dotnet_style_qualification_for_field = false +dotnet_style_qualification_for_method = false +dotnet_style_qualification_for_property = false + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members + +# Expression-level preferences +dotnet_style_coalesce_expression = true +dotnet_style_collection_initializer = true +dotnet_style_explicit_tuple_names = true +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true +dotnet_style_object_initializer = true +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true +dotnet_style_prefer_compound_assignment = true +dotnet_style_prefer_conditional_expression_over_assignment = true +dotnet_style_prefer_conditional_expression_over_return = true +dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed +dotnet_style_prefer_inferred_anonymous_type_member_names = true +dotnet_style_prefer_inferred_tuple_names = true +dotnet_style_prefer_is_null_check_over_reference_equality_method = true +dotnet_style_prefer_simplified_boolean_expressions = true +dotnet_style_prefer_simplified_interpolation = true + +# Field preferences +dotnet_style_readonly_field = true + +# Parameter preferences +dotnet_code_quality_unused_parameters = all + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = none + +# New line preferences +dotnet_style_allow_multiple_blank_lines_experimental = true +dotnet_style_allow_statement_immediately_after_block_experimental = true + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_elsewhere = true +csharp_style_var_for_built_in_types = true +csharp_style_var_when_type_is_apparent = true + +# Expression-bodied members +csharp_style_expression_bodied_accessors = true +csharp_style_expression_bodied_constructors = false +csharp_style_expression_bodied_indexers = true +csharp_style_expression_bodied_lambdas = true +csharp_style_expression_bodied_local_functions = false +csharp_style_expression_bodied_methods = false +csharp_style_expression_bodied_operators = false +csharp_style_expression_bodied_properties = true + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true +csharp_style_pattern_matching_over_is_with_cast_check = true +csharp_style_prefer_extended_property_pattern = true +csharp_style_prefer_not_pattern = true +csharp_style_prefer_pattern_matching = true +csharp_style_prefer_switch_expression = true + +# Null-checking preferences +csharp_style_conditional_delegate_call = true + +# Modifier preferences +csharp_prefer_static_local_function = true +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async +csharp_style_prefer_readonly_struct = true +csharp_style_prefer_readonly_struct_member = true + +# Code-block preferences +csharp_prefer_braces = true +csharp_prefer_simple_using_statement = true +csharp_style_namespace_declarations = file_scoped:warning +csharp_style_prefer_method_group_conversion = true +csharp_style_prefer_primary_constructors = true +csharp_style_prefer_top_level_statements = true + +# Expression-level preferences +csharp_prefer_simple_default_expression = true +csharp_style_deconstructed_variable_declaration = true +csharp_style_implicit_object_creation_when_type_is_apparent = true +csharp_style_inlined_variable_declaration = true +csharp_style_prefer_index_operator = true +csharp_style_prefer_local_over_anonymous_function = true +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_range_operator = true +csharp_style_prefer_tuple_swap = true +csharp_style_prefer_utf8_string_literals = true +csharp_style_throw_expression = true +csharp_style_unused_value_assignment_preference = discard_variable +csharp_style_unused_value_expression_statement_preference = discard_variable + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace + +# New line preferences +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true +csharp_style_allow_embedded_statements_on_same_line_experimental = true + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +# ReSharper properties +resharper_max_array_initializer_elements_on_line = 50 +resharper_max_initializer_elements_on_line = 1 +resharper_wrap_array_initializer_style = chop_if_long diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..78a907e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,58 @@ +--- +name: Bug report +about: Create a bug report to help us improve +title: "" +type: Bug +assignees: '' + +--- + +## Description +A clear and concise description of what the bug is. Please include any error messages or codes here. + +## Steps to Reproduce +To help us identify the issue more quickly, please follow these guidelines: + +1. **Detailed Steps**: Provide a step-by-step description of what leads to the bug. Be as specific as possible. + +2. **Code Snippets**: If the issue involves code (e.g., JavaScript error, server request failure), include the relevant snippets where the issue occurs. + +3. **Attachments**: + - **Workflow JSON**: If your issue is reproducible with a specific workflow, please attach the workflow's JSON file. This will help us understand the exact process that leads to the problem. + - **Sample Project**: If possible, attach a minimal sample project or code that reproduces the issue. This could be a simplified version of your project that isolates and demonstrates the bug. + +4. **Reproduction Rate**: Indicate how often the bug occurs when following these steps (e.g., "every time", "intermittently: about 50% of the time"). + +5. **Video/Screenshots**: Sometimes, complex behaviors are better shown than described. If you think a video or screenshots would help clarify the issue, please include them. + +6. **Additional Configuration**: + - Mention any specific settings, features, or configurations that need to be enabled or present to reproduce the issue. + +Providing a comprehensive and clear description will greatly assist in diagnosing the problem quickly and accurately. If you're unable to share some of the requested information publicly, please note that, and we can arrange for secure information transfer. + + +## Expected Behavior +Describe what you expected to happen. + +## Actual Behavior +Describe what actually happened. Include screenshots, if applicable. + +## Screenshots +If possible, add screenshots or screen recordings to help explain the problem. + +## Environment +- **Elsa Package Version**: Specify the version. If you've cloned the repo, mention if you are using the latest source code from the main branch. +- **Operating System**: Include your OS version (e.g., Windows 10, macOS Big Sur, Ubuntu 18.04). +- **Browser and Version**: If applicable, include your browser and version (e.g., Chrome 92). + +## Log Output +Include any relevant log output or error messages that might help diagnose the issue. + +## Troubleshooting Attempts +Describe any steps you have taken to troubleshoot or resolve the issue yourself. + +## Additional Context +Add any other context about the problem here. This could include the frequency of the issue (e.g., intermittent, every time), conditions under which the issue appears, etc. + +## Related Issues +Link to any related issues here. diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md new file mode 100644 index 0000000..96e21f1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -0,0 +1,30 @@ +--- +name: Documentation +about: Suggest improvements to the documentation for this project +title: "" +Type: Documentation +assignees: '' + +--- + +## Documentation Improvement Request + +### Documentation Issue Overview +**Is your documentation issue related to a specific problem? Please describe.** +Provide a detailed explanation of what is lacking or incorrect in the current documentation. For example, "The installation guide lacks details on how to set up the environment on Windows systems..." + +### Proposed Documentation Changes +**Describe the changes or additions you'd like** +Detail what changes or additions are needed in the documentation. Explain how these changes would improve the clarity, completeness, or accuracy of the existing documents. + +### Affected Sections +**Identify which sections of the documentation are affected** +Specify which parts of the documentation need updating. This could include README files, API docs, user manuals, or setup guides. + +### Impact of Changes +**Explain the potential impact** +Discuss how these documentation changes will improve usability, understanding, or adoption of the project. Detailing the benefits can help stakeholders prioritize documentation improvements. + +### Additional Context +**Add any other context or visuals** +Include any other information, links, or visuals that might help clarify your request. Visuals can be particularly useful in documentation to explain complex processes or configurations. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..9a4ea5f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,38 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "" +type: Feature +assignees: '' + +--- + +## Feature Request + +### Problem Overview +**Is your feature request related to a problem? Please describe.** +Provide a detailed explanation of the problem you are experiencing or the limitation you've encountered. This could be something that slows down your workflow, a capability that the product lacks, or any issue that this feature would address. For example, "I find it time-consuming to manually compile reports because..." + +### Proposed Solution +**Describe the solution you'd like** +Explain in detail what you would like to see implemented. Describe how this feature would work, and why it would be a beneficial addition to the software. If possible, include any specific requirements or functionality you envision for this feature. + +### Alternative Solutions +**Describe alternatives you've considered** +Have you found any workarounds or other software that accomplishes the same thing? Please share your findings, including why they might not have been a perfect fit. This helps us understand your needs better and evaluate the uniqueness of your request. + +### Use Cases +**Identify potential use cases** +Who will benefit from this feature? Describe specific scenarios in which this feature would be used. This will help us understand the feature's impact and prioritize its development. + +### Impact of Feature +**Explain the potential impact** +How would this feature improve your workflow, productivity, or product experience? Detailing the anticipated benefits can help stakeholders understand the value of the feature. + +### Visuals and Mockups +**Provide any visuals** +If you have sketches, wireframes, screenshots, or any visual representation of your proposed feature, please attach them. Visuals can be very helpful in conveying your idea more clearly. + +### Additional Context +**Add any other context** +Include any other information that might help clarify your request. This could be links to similar features in other products, technical considerations, or any other details that could inform the development process. diff --git a/.github/ISSUE_TEMPLATE/improvement.md b/.github/ISSUE_TEMPLATE/improvement.md new file mode 100644 index 0000000..e72b486 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/improvement.md @@ -0,0 +1,38 @@ +--- +name: Improvement +about: Suggest an enhancement to an existing feature for this project +title: "" +type: Improvement +assignees: '' + +--- + +## Enhancement Request + +### Enhancement Overview +**Is your enhancement request related to a problem? Please describe.** +Provide a detailed explanation of the limitation or the inefficiency you are experiencing with the current feature. Describe the context and specific scenarios where the feature falls short. For example, "The current search functionality does not support filtering by date, which makes it difficult to..." + +### Proposed Enhancement +**Describe the enhancement you'd like** +Explain in detail how you would like to enhance the existing feature. Describe what changes or additions you propose and how they would work. Discuss why this enhancement would be beneficial to the software and its users. If applicable, include any specific functionalities or improvements you envision. + +### Alternative Solutions +**Describe alternatives you've considered** +Have you explored any workarounds or other features that provide similar functionality? Please share your findings, including why these alternatives do not meet your needs fully. This helps us understand the unique value of your proposed enhancement. + +### Use Cases +**Identify potential use cases** +Who will benefit from this enhancement? Describe specific scenarios in which the enhanced feature would be used. This will help us gauge the enhancement's impact and prioritize its development accordingly. + +### Impact of Enhancement +**Explain the potential impact** +How would this enhancement improve workflows, productivity, or user experience? Detailing the expected benefits can help stakeholders understand the importance of the enhancement and support its implementation. + +### Visuals and Mockups +**Provide any visuals** +If you have sketches, wireframes, mockups, or any visual representation of your proposed enhancement, please attach them. Visuals can help convey your ideas more clearly and can be very persuasive in the evaluation process. + +### Additional Context +**Add any other context** +Include any other information that might help clarify your request. This could be links to similar features in other products, insights from user feedback, technical considerations, or any other details that could influence the enhancement process. diff --git a/.github/ISSUE_TEMPLATE/performance.md b/.github/ISSUE_TEMPLATE/performance.md new file mode 100644 index 0000000..f66241a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/performance.md @@ -0,0 +1,38 @@ +--- +name: Performance +about: Suggest a performance enhancement for this project +title: "" +type: Performance +assignees: '' + +--- + +## Performance Improvement Request + +### Performance Issue Overview +**Is your performance issue related to a specific functionality? Please describe.** +Provide a detailed explanation of the performance issue you are experiencing. Describe the context in which the problem occurs, such as during specific operations or under certain conditions. For example, "The application takes a long time to load images on low-end devices..." + +### Proposed Enhancement +**Describe the enhancement you'd like** +Explain in detail what you would like to see improved in terms of performance. Describe how this enhancement should work and why it would be a beneficial addition to the software. If possible, include any specific metrics (like time complexity, memory usage) you envision for this enhancement. + +### Alternative Solutions +**Describe alternatives you've considered** +Have you identified any potential fixes or tweaks yourself? Please share your findings, including why they might not have been a perfect or complete solution. This helps us understand the issue better and consider all possible solutions. + +### Affected Use Cases +**Identify affected use cases** +Who is most affected by this performance issue? Describe specific scenarios in which this issue impacts usability or efficiency. This will help us understand the importance of the performance enhancement and prioritize its development. + +### Impact of Enhancement +**Explain the potential impact** +How would this enhancement improve performance, efficiency, or user satisfaction? Detailing the anticipated improvements can help stakeholders understand the significance of the enhancement. + +### Benchmarks and Metrics +**Provide any relevant benchmarks or metrics** +If you have conducted performance tests, or if there are specific benchmarks that highlight the issue, please include them. Data can be very helpful in illustrating the scope and severity of performance issues. + +### Additional Context +**Add any other context** +Include any other information that might help clarify your enhancement request. This could be links to relevant literature, technical considerations, or any other details that could inform the enhancement process. diff --git a/.github/ISSUE_TEMPLATE/task.md b/.github/ISSUE_TEMPLATE/task.md new file mode 100644 index 0000000..430bf66 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/task.md @@ -0,0 +1,30 @@ +--- +name: Task +about: Suggest a task for this project +title: "" +type: Task +assignees: '' + +--- + +## Task Request + +### Task Overview +**What maintenance task do you propose? Please describe.** +Provide a detailed explanation of the maintenance task. This could be upgrading dependencies, refactoring code, improving build processes, or other similar tasks that help keep the project healthy but don't directly add new features or fix bugs. + +### Purpose of the Task +**Explain why this task is necessary** +Describe the reasons for the maintenance task and its expected benefits, such as improved performance, security enhancements, better developer experience, or future-proofing the project. + +### Potential Issues +**Identify any potential issues that might arise from this task** +Discuss any challenges or potential disruptions that could occur as a result of this maintenance task. This will help prepare for and mitigate any negative impacts. + +### Impact of Task +**Explain the potential impact** +Detail how this maintenance task will positively affect the project, such as making it easier to maintain, reducing technical debt, or improving system stability. + +### Additional Context +**Add any other context** +Include any other information that might help clarify your request. This could be links to similar tasks performed in other projects, specific dependency versions, or technical considerations. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d8b5df8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "NuGet" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/bounty.yml b/.github/workflows/bounty.yml new file mode 100644 index 0000000..dba858f --- /dev/null +++ b/.github/workflows/bounty.yml @@ -0,0 +1,32 @@ +name: Append Footer to Issue with Bounty Label + +on: + issues: + types: [labeled] + +jobs: + append-footer: + if: github.event.label.name == 'bounty' + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Read Footer Content + id: footer + uses: jaywcjlove/github-action-read-file@main + with: + path: docs/bounty-footer.md + + - name: Append Footer to Issue + uses: actions/github-script@v7 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const issueComment = `${{ steps.footer.outputs.content }}`; + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: issueComment + }); diff --git a/.github/workflows/elsa-server-and-studio.yml b/.github/workflows/elsa-server-and-studio.yml new file mode 100644 index 0000000..ba0db78 --- /dev/null +++ b/.github/workflows/elsa-server-and-studio.yml @@ -0,0 +1,61 @@ +name: Build and deploy Elsa Server + Studio reference application as Docker image +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: all + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: | + elsaworkflows/elsa-server-and-studio-v3-5-0-preview + flavor: | + latest=true + # generate Docker tags based on the following events/attributes + tags: | + type=sha + + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: . + file: ./docker/ElsaServerAndStudio.Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.github/workflows/elsa-server.yml b/.github/workflows/elsa-server.yml new file mode 100644 index 0000000..6dfe947 --- /dev/null +++ b/.github/workflows/elsa-server.yml @@ -0,0 +1,61 @@ +name: Build and deploy Elsa Server reference application as Docker image +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: all + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: | + elsaworkflows/elsa-server-v3-5-0-preview + flavor: | + latest=true + # generate Docker tags based on the following events/attributes + tags: | + type=sha + + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: . + file: ./docker/ElsaServer.Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.github/workflows/elsa-studio.yml b/.github/workflows/elsa-studio.yml new file mode 100644 index 0000000..d3c8ac0 --- /dev/null +++ b/.github/workflows/elsa-studio.yml @@ -0,0 +1,61 @@ +name: Build and deploy Elsa Studio reference application as Docker image +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: all + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: | + elsaworkflows/elsa-studio-v3-5-0-preview + flavor: | + latest=true + # generate Docker tags based on the following events/attributes + tags: | + type=sha + + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: . + file: ./docker/ElsaStudio.Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml new file mode 100644 index 0000000..ec55bf7 --- /dev/null +++ b/.github/workflows/packages.yml @@ -0,0 +1,122 @@ +name: Elsa 3 Packages +on: + workflow_dispatch: + push: + branches: + - 'main' + - 'bug/*' + - 'perf/*' + - 'patch/*' + - 'feat/*' + - 'enh/*' + - 'rc/*' + - 'develop/*' + - 'codex/*' + release: + types: [ prereleased, published ] +env: + base_version: '3.5.0' + feedz_feed_source: 'https://f.feedz.io/elsa-workflows/elsa-3/nuget/index.json' + nuget_feed_source: 'https://api.nuget.org/v3/index.json' + +jobs: + build: + name: Build packages + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Extract branch name + run: | + BRANCH_NAME=${{ github.ref }} # e.g., refs/heads/main + BRANCH_NAME=${BRANCH_NAME#refs/heads/} # remove the refs/heads/ prefix + # Extract the last part after the last slash of the branch name, if any, e.g., feature/issue-123 -> issue-123 and use it as the version prefix. + PACKAGE_PREFIX=$(echo $BRANCH_NAME | rev | cut -d/ -f1 | rev | tr '_' '-') + + # If the branch name is main, use the preview version. Otherwise, use the branch name as the version prefix. + if [[ "${BRANCH_NAME}" == "main" || "${BRANCH_NAME}" =~ ^develop/ ]]; then + PACKAGE_PREFIX="preview" + fi + + echo "Ref: ${{ github.ref }}" + echo "Branch name: ${BRANCH_NAME}" + echo "Package prefix: ${PACKAGE_PREFIX}" + echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV + echo "PACKAGE_PREFIX=${PACKAGE_PREFIX}" >> $GITHUB_ENV + - name: Checkout + uses: actions/checkout@v4 + - name: Verify commit exists in branch + run: | + if [[ "${{ github.ref }}" == refs/tags/* && "${{ github.event_name }}" == "release" && ("${{ github.event.action }}" == "published" || "${{ github.event.action }}" == "prereleased")]]; then + git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/* + git branch --remote --contains | grep origin/develop/3.5.0 + else + git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/* + git branch --remote --contains | grep origin/${BRANCH_NAME} + fi + - name: Set VERSION variable + run: | + if [[ "${{ github.ref }}" == refs/tags/* && "${{ github.event_name }}" == "release" && ("${{ github.event.action }}" == "published" || "${{ github.event.action }}" == "prereleased") ]]; then + TAG_NAME=${{ github.ref }} # e.g., refs/tags/3.0.0 + TAG_NAME=${TAG_NAME#refs/tags/} # remove the refs/tags/ prefix + echo "VERSION=${TAG_NAME}" >> $GITHUB_ENV + else + echo "VERSION=${{env.base_version}}-${PACKAGE_PREFIX}.${{github.run_number}}" >> $GITHUB_ENV + fi + # - name: Set up JDK 17 + # uses: actions/setup-java@v2 + # with: + # java-version: '17' + # distribution: 'adopt' + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.x + # - name: Install SonarScanner for .NET + # run: dotnet tool install --global dotnet-sonarscanner + # - name: Install Coverlet for code coverage + # run: dotnet tool install --global coverlet.console + # - name: Begin SonarCloud analysis + # env: + # SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + # run: dotnet sonarscanner begin /k:"elsa-workflows_elsa-core" /o:"elsa-workflows" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.exclusions=**/obj/**,**/*.dll,build/**,samples/**,src/apps/** /d:"sonar.verbose=true" /d:sonar.cs.opencover.reportsPaths=**/testresults/**/coverage.opencover.xml + - name: Compile+Test+Pack + run: ./build.sh Compile+Test+Pack --version ${VERSION} --analyseCode true + # - name: End SonarCloud analysis + # env: + # SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + # run: dotnet sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: elsa-nuget-packages + path: packages/*nupkg + if: ${{ github.event_name == 'release' || github.event_name == 'push'}} + + publish_preview_feedz: + name: Publish to feedz.io + needs: build + runs-on: ubuntu-latest + timeout-minutes: 10 + if: ${{ github.event_name == 'release' || github.event_name == 'push'}} + steps: + - name: Download Packages + uses: actions/download-artifact@v4.1.7 + with: + name: elsa-nuget-packages + + - name: Publish to feedz.io + run: dotnet nuget push *.nupkg -k ${{ secrets.FEEDZ_API_KEY }} -s ${{ env.feedz_feed_source }} --skip-duplicate + + publish_nuget: + name: Publish release to nuget.org + needs: build + runs-on: ubuntu-latest + timeout-minutes: 10 + if: ${{ github.event.action == 'published' }} + steps: + - name: Download Packages + uses: actions/download-artifact@v4.1.7 + with: + name: elsa-nuget-packages + + - name: Publish to nuget.org + run: dotnet nuget push *.nupkg -k ${{ secrets.NUGET_API_KEY }} -s ${{ env.nuget_feed_source }} --skip-duplicate diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..d99b63e --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------ +# +# +# This code was generated. +# +# - To turn off auto-generation set: +# +# [CustomGitHubActions (AutoGenerate = false)] +# +# - To trigger manual generation invoke: +# +# nuke --generate-configuration GitHubActions_pr --host GitHubActions +# +# +# ------------------------------------------------------------------------------ + +name: pr + +on: + pull_request: + branches: + - main + paths: + - '**/*' + +concurrency: + group: ${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + ubuntu-latest: + name: ubuntu-latest + runs-on: ubuntu-latest + steps: + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 9.x + - uses: actions/checkout@v4 + - name: 'Run: Compile, Test, Pack' + run: ./build.cmd Compile Test Pack diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..37df710 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,16 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + stale-issue-message: 'Hi there! This issue has been marked as stale due to inactivity. If this is still relevant or needs further discussion, please let us know. Otherwise, it will be closed in 7 days. Thank you for your understanding.' + close-issue-message: 'This issue has been automatically closed due to prolonged inactivity. If you still encounter this problem or have further questions, please feel free to reopen the issue or create a new one. Thank you for your contributions!' + days-before-stale: 30 + days-before-close: 7 + any-of-labels: 'awaiting-feedback,awaiting-answers,needs-more-info,needs-demo,needs-repro' \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..68a650b --- /dev/null +++ b/.gitignore @@ -0,0 +1,82 @@ +# Ignore thumbnails created by Windows +Thumbs.db + +# Ignore files built by Visual Studio +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +.vs/ + +# VS Code/Omnisharp crash dumps +mono_crash.mem*.blob + +# Nuget packages folder +packages/ + +# Ignore git-related files +*.orig + +# Rider +.idea +.run + +# wwwroot +wwwroot/ + +# npm +node_modules/ +.babelrc +.stylelintrc.yml +.eslintrc.yml + +# volatile +App_Data/ +*.db +*.db-journal +*.db-shm +*.db-wal +.DS_Store + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# Elsa Stencil Components +src/designer/elsa-workflows-designer/dist +src/designer/elsa-workflows-designer/www +src/designer/elsa-workflows-designer/loader + +# Created by developers using GNU/Linux +.directory + +src/modules/Elsa.Workflows.Designer/package-lock.json + +unlist.sh + +# build artifacts +/artifacts + +/docker/data/ +/docker/azurite-data/ +docker/docker-compose-datadog.yml diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json new file mode 100644 index 0000000..8391009 --- /dev/null +++ b/.nuke/build.schema.json @@ -0,0 +1,132 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "definitions": { + "Host": { + "type": "string", + "enum": [ + "AppVeyor", + "AzurePipelines", + "Bamboo", + "Bitbucket", + "Bitrise", + "GitHubActions", + "GitLab", + "Jenkins", + "Rider", + "SpaceAutomation", + "TeamCity", + "Terminal", + "TravisCI", + "VisualStudio", + "VSCode" + ] + }, + "ExecutableTarget": { + "type": "string", + "enum": [ + "Clean", + "Compile", + "Pack", + "Restore", + "Test" + ] + }, + "Verbosity": { + "type": "string", + "description": "", + "enum": [ + "Verbose", + "Normal", + "Minimal", + "Quiet" + ] + }, + "NukeBuild": { + "properties": { + "Continue": { + "type": "boolean", + "description": "Indicates to continue a previously failed build attempt" + }, + "Help": { + "type": "boolean", + "description": "Shows the help text for this build assembly" + }, + "Host": { + "description": "Host for execution. Default is 'automatic'", + "$ref": "#/definitions/Host" + }, + "NoLogo": { + "type": "boolean", + "description": "Disables displaying the NUKE logo" + }, + "Partition": { + "type": "string", + "description": "Partition to use on CI" + }, + "Plan": { + "type": "boolean", + "description": "Shows the execution plan (HTML)" + }, + "Profile": { + "type": "array", + "description": "Defines the profiles to load", + "items": { + "type": "string" + } + }, + "Root": { + "type": "string", + "description": "Root directory during build execution" + }, + "Skip": { + "type": "array", + "description": "List of targets to be skipped. Empty list skips all dependencies", + "items": { + "$ref": "#/definitions/ExecutableTarget" + } + }, + "Target": { + "type": "array", + "description": "List of targets to be invoked. Default is '{default_target}'", + "items": { + "$ref": "#/definitions/ExecutableTarget" + } + }, + "Verbosity": { + "description": "Logging verbosity during build execution. Default is 'Normal'", + "$ref": "#/definitions/Verbosity" + } + } + } + }, + "allOf": [ + { + "properties": { + "AnalyseCode": { + "type": "boolean" + }, + "Configuration": { + "type": "string", + "enum": [ + "Debug", + "Release" + ] + }, + "IgnoreFailedSources": { + "type": "boolean", + "description": "Ignore unreachable sources during Restore" + }, + "Solution": { + "type": "string", + "description": "Path to a solution file that is automatically loaded" + }, + "Version": { + "type": "string" + } + } + }, + { + "$ref": "#/definitions/NukeBuild" + } + ] +} diff --git a/.nuke/parameters.json b/.nuke/parameters.json new file mode 100644 index 0000000..8535901 --- /dev/null +++ b/.nuke/parameters.json @@ -0,0 +1,4 @@ +{ + "$schema": "./build.schema.json", + "Solution": "Elsa.sln" +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..ed392a7 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,47 @@ +# Contributing to Elsa +We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features +- Becoming a maintainer + +## We Develop with Github +We use github to host code, to track issues and feature requests, as well as accept pull requests. + +## We Use [Trunk Based Development]([https://guides.github.com/introduction/flow/index.html](https://trunkbaseddevelopment.com/)), And All Code Changes Happen Through Pull Requests +Pull requests are the best way to propose changes to the codebase (we use [Trunk Based Development]([https://guides.github.com/introduction/flow/index.html](https://trunkbaseddevelopment.com/))). We actively welcome your pull requests: + +1. Fork the repo and create your branch from `main`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Issue that pull request! + +## Any contributions you make will be under the MIT Software License +In short, when you submit code changes, your submissions are understood to be under the same [MIT License](http://choosealicense.com/licenses/mit/) that covers the project. Feel free to contact the maintainers if that's a concern. + +## Report bugs using Github's [issues](https://github.com/elsa-workflows/elsa-core/issues) +We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/elsa-workflows/elsa-core/issues/new); it's that easy! + +## Write bug reports with detail, background, and sample code + + +**Great Bug Reports** tend to have: + +- A quick summary and/or background +- Steps to reproduce + - Be specific! + - Give sample code if you can. +- What you expected would happen +- What actually happens +- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) + +People *love* thorough bug reports. I'm not even kidding. + +## License +By contributing, you agree that your contributions will be licensed under its MIT License. + +## References +This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md) diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..79b1b16 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,39 @@ + + + Elsa Workflows Community + 2024 + + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core + git + + latest + enable + enable + + MIT + icon.png + + + https://v3.elsaworkflows.io/nuget-icon.png + + true + Default + latest + + enable + all + + + true + snupkg + true + + false + + + $(NoWarn);CS0162;CS1591 + + $(NoWarn);IL2026;IL2046;IL2057;IL2067;IL2070;IL2072;IL2075;IL2087;IL2091 + + \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..8b65fbf --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,174 @@ + + + true + true + + + 3.5.0-preview.1092 + 9.0.7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Elsa.sln b/Elsa.sln new file mode 100644 index 0000000..29feedd --- /dev/null +++ b/Elsa.sln @@ -0,0 +1,1024 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34003.232 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{61017E64-6D00-49CB-9E81-5002DC8F7D5F}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{C6658DE0-2B2F-47F0-BB61-2CA66D435C09}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{7D21EB5E-D6B4-48A5-A9BC-A26387A65F0B}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .gitignore = .gitignore + Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props + icon.png = icon.png + NuGet.Config = NuGet.Config + README.md = README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{0354F050-3992-4DD4-B0EE-5FBA04AC72B6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz", "src\modules\Elsa.Quartz\Elsa.Quartz.csproj", "{7D5A49B4-9A9B-496E-803B-DEB85B2C3132}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Http", "src\modules\Elsa.Http\Elsa.Http.csproj", "{82E26BF9-5F3A-4365-899A-AB1FFD54AA45}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scheduling", "src\modules\Elsa.Scheduling\Elsa.Scheduling.csproj", "{ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.JavaScript", "src\modules\Elsa.JavaScript\Elsa.JavaScript.csproj", "{D31581AB-A6C1-4B73-AB63-45667F6C82AE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Hangfire", "src\modules\Elsa.Hangfire\Elsa.Hangfire.csproj", "{0601A2A6-2C62-418B-9104-8CDE497E5283}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowContexts", "src\modules\Elsa.WorkflowContexts\Elsa.WorkflowContexts.csproj", "{302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MassTransit", "src\modules\Elsa.MassTransit\Elsa.MassTransit.csproj", "{BB983D0B-A939-4008-B9E3-C7C172BCF83A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Labels", "src\modules\Elsa.Labels\Elsa.Labels.csproj", "{80FF5821-E831-450D-AA0C-C76D07D878F4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Liquid", "src\modules\Elsa.Liquid\Elsa.Liquid.csproj", "{8E5BD3D9-3529-48BC-B741-CFB7A69DB233}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime.ProtoActor", "src\modules\Elsa.Workflows.Runtime.ProtoActor\Elsa.Workflows.Runtime.ProtoActor.csproj", "{B2049499-D384-46DF-8837-F1180107DD54}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Dsl", "src\modules\Elsa.Dsl\Elsa.Dsl.csproj", "{78DAB791-8595-4612-8E9E-2248AF5B1862}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Api", "src\modules\Elsa.Workflows.Api\Elsa.Workflows.Api.csproj", "{C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Core", "src\modules\Elsa.Workflows.Core\Elsa.Workflows.Core.csproj", "{169E2C9B-6687-427F-A278-30BF849BFEDC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Management", "src\modules\Elsa.Workflows.Management\Elsa.Workflows.Management.csproj", "{2DD5D66B-85E9-4AF9-911C-C9F963234159}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime", "src\modules\Elsa.Workflows.Runtime\Elsa.Workflows.Runtime.csproj", "{8A050229-DB79-4E0B-9AFF-7565E87F2954}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Features", "src\common\Elsa.Features\Elsa.Features.csproj", "{C237BA1A-3A7D-4AB2-BE09-2696F3C082A4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Expressions", "src\modules\Elsa.Expressions\Elsa.Expressions.csproj", "{80529478-A383-4FEA-B744-C71264969E9A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Api.Common", "src\common\Elsa.Api.Common\Elsa.Api.Common.csproj", "{39CD855E-83B1-4A96-93F7-01608211EBE3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Identity", "src\modules\Elsa.Identity\Elsa.Identity.csproj", "{30B49E42-AE61-4F7C-981F-923F07BB3986}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Common", "src\modules\Elsa.Common\Elsa.Common.csproj", "{D229105F-6879-4452-9189-75DE060C0F4C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore", "src\modules\Elsa.EntityFrameworkCore\Elsa.EntityFrameworkCore.csproj", "{7CC95512-7F44-45C3-A669-95B7048D4730}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Email", "src\modules\Elsa.Email\Elsa.Email.csproj", "{1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{986E5482-0482-448C-B9E4-EC67A9474B85}" + ProjectSection(SolutionItems) = preProject + docker\.dockerignore = docker\.dockerignore + docker\docker-compose.yml = docker\docker-compose.yml + docker\ElsaServer-Datadog.Dockerfile = docker\ElsaServer-Datadog.Dockerfile + docker\ElsaServer.Dockerfile = docker\ElsaServer.Dockerfile + docker\ElsaServerAndStudio.Dockerfile = docker\ElsaServerAndStudio.Dockerfile + docker\ElsaStudio.Dockerfile = docker\ElsaStudio.Dockerfile + docker\otel-collector-config.yaml = docker\otel-collector-config.yaml + docker\init-db-postgres.sh = docker\init-db-postgres.sh + docker\docker-compose-datadog+otel-collector.yml = docker\docker-compose-datadog+otel-collector.yml + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Elasticsearch", "src\modules\Elsa.Elasticsearch\Elsa.Elasticsearch.csproj", "{3246883E-2FA7-4B4A-BDC5-99039A2869BC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Webhooks", "src\modules\Elsa.Webhooks\Elsa.Webhooks.csproj", "{2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unit", "unit", "{18453B51-25EB-4317-A4B3-B10518252E92}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integration", "integration", "{1B8D5897-902E-4632-8698-E89CAF3DDF54}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "component", "component", "{08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C}" + ProjectSection(SolutionItems) = preProject + test\component\Directory.Build.props = test\component\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.IntegrationTests", "test\integration\Elsa.Workflows.IntegrationTests\Elsa.Workflows.IntegrationTests.csproj", "{E9652738-2B3D-4357-B84B-54F0EA161382}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{89608AA5-5ADE-4832-AC7B-871C4AE64210}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Api.Client", "src\clients\Elsa.Api.Client\Elsa.Api.Client.csproj", "{1FCB2200-28B8-4703-8E89-73241AAED047}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Environments", "src\modules\Elsa.Environments\Elsa.Environments.csproj", "{B5CDF747-8066-40D5-9BAE-CBE397BC9B51}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "persistence", "persistence", "{9B4F139F-7D26-435C-A561-89E65A67A8E5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripting", "scripting", "{6EF07978-A6D2-40EB-891D-7D70C5F37E76}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "servicebus", "servicebus", "{DD089B8B-DA73-492A-9010-F772D1C178DA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "security", "security", "{5948B0A5-7873-4DBB-BA03-EB283D6EA91B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{B08B4E00-C2AB-48F3-8389-449F42AEF179}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "timers", "timers", "{AB797AF0-C12C-46DE-A157-7E25625C6200}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runtimes", "runtimes", "{58C59255-281C-4595-8732-808158F1DC6E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Dapper", "src\modules\Elsa.Dapper\Elsa.Dapper.csproj", "{4D8F3BB2-709D-481A-8FD3-0DA9762B366D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Dapper.Migrations", "src\modules\Elsa.Dapper.Migrations\Elsa.Dapper.Migrations.csproj", "{A86DF0F0-24E9-470E-984B-9E7332544972}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowProviders.BlobStorage", "src\modules\Elsa.WorkflowProviders.BlobStorage\Elsa.WorkflowProviders.BlobStorage.csproj", "{A702DD84-B55C-4807-9C28-D8F5AC3CCA78}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MongoDb", "src\modules\Elsa.MongoDb\Elsa.MongoDb.csproj", "{3A377A6A-F735-4010-9E00-72E8BEB8F1F2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Mediator", "src\common\Elsa.Mediator\Elsa.Mediator.csproj", "{28818676-F6AF-4203-8B65-BD33A50CB9A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Core.UnitTests", "test\unit\Elsa.Workflows.Core.UnitTests\Elsa.Workflows.Core.UnitTests.csproj", "{DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DropIns.Core", "src\common\Elsa.DropIns.Core\Elsa.DropIns.Core.csproj", "{1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DropIns", "src\common\Elsa.DropIns\Elsa.DropIns.csproj", "{4E7F15D1-729E-4DA7-992A-C3A2C6054B37}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.SasTokens", "src\modules\Elsa.SasTokens\Elsa.SasTokens.csproj", "{3095C95A-F1F9-487A-A983-1B100A33E4C7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "alterations", "alterations", "{CF3DA5F1-F98D-49C9-A980-27E570B38B8D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations.Core", "src\modules\Elsa.Alterations.Core\Elsa.Alterations.Core.csproj", "{8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations", "src\modules\Elsa.Alterations\Elsa.Alterations.csproj", "{CC7DE119-736D-4FC5-85DC-70A6770749F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.Sqlite", "src\modules\Elsa.EntityFrameworkCore.Sqlite\Elsa.EntityFrameworkCore.Sqlite.csproj", "{EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.SqlServer", "src\modules\Elsa.EntityFrameworkCore.SqlServer\Elsa.EntityFrameworkCore.SqlServer.csproj", "{1C84408D-A0A7-4513-AD9A-1BA137ABE62C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.MySql", "src\modules\Elsa.EntityFrameworkCore.MySql\Elsa.EntityFrameworkCore.MySql.csproj", "{E4300D97-1D53-4029-9435-483FB7EC9621}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.EntityFrameworkCore.PostgreSql\Elsa.EntityFrameworkCore.PostgreSql.csproj", "{84AB9951-3DBF-43A4-8F5D-AEED1102CE88}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations.MassTransit", "src\modules\Elsa.Alterations.MassTransit\Elsa.Alterations.MassTransit.csproj", "{1F621382-08FB-45EA-B94C-96A7FECB9489}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.Common", "src\modules\Elsa.EntityFrameworkCore.Common\Elsa.EntityFrameworkCore.Common.csproj", "{FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Quartz.EntityFrameworkCore.Sqlite\Elsa.Quartz.EntityFrameworkCore.Sqlite.csproj", "{A71557F2-D5FB-4772-9391-F7D18A3B6C44}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.SqlServer", "src\modules\Elsa.Quartz.EntityFrameworkCore.SqlServer\Elsa.Quartz.EntityFrameworkCore.SqlServer.csproj", "{05F3B23E-CF28-467B-AD3C-595EA4ED6B96}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.MySql", "src\modules\Elsa.Quartz.EntityFrameworkCore.MySql\Elsa.Quartz.EntityFrameworkCore.MySql.csproj", "{74ACD9D0-8B4C-42FA-A582-E93BF0075023}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.Quartz.EntityFrameworkCore.PostgreSql\Elsa.Quartz.EntityFrameworkCore.PostgreSql.csproj", "{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.EntityFrameworkCore.Oracle", "src\modules\Elsa.EntityFrameworkCore.Oracle\Elsa.EntityFrameworkCore.Oracle.csproj", "{49D8D2CF-AF68-40FA-951F-018247C97443}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.FileStorage", "src\modules\Elsa.FileStorage\Elsa.FileStorage.csproj", "{732BF088-6AD7-4C4D-9A48-8074253596D4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "storage", "storage", "{B818988E-639C-4E6E-85C1-B231BCAD9DAB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Tenants", "src\modules\Elsa.Tenants\Elsa.Tenants.csproj", "{29638A67-E79F-44FE-AC05-DA499EBA929E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.CSharp", "src\modules\Elsa.CSharp\Elsa.CSharp.csproj", "{24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Python", "src\modules\Elsa.Python\Elsa.Python.csproj", "{790E94F2-5393-47DF-AC52-D9247F5B243A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MassTransit.RabbitMq", "src\modules\Elsa.MassTransit.RabbitMq\Elsa.MassTransit.RabbitMq.csproj", "{169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pipelines", "pipelines", "{B789B743-0FBE-4BBC-9F45-84C20C8D4814}" + ProjectSection(SolutionItems) = preProject + .github\workflows\bounty.yml = .github\workflows\bounty.yml + .github\workflows\elsa-server-and-studio.yml = .github\workflows\elsa-server-and-studio.yml + .github\workflows\elsa-server.yml = .github\workflows\elsa-server.yml + .github\workflows\elsa-studio.yml = .github\workflows\elsa-studio.yml + .github\workflows\packages.yml = .github\workflows\packages.yml + .github\workflows\pr.yml = .github\workflows\pr.yml + .github\workflows\stale.yml = .github\workflows\stale.yml + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{99F2B1DA-2F69-4D70-A2A3-AC985AD91EC4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.MassTransit.AzureServiceBus", "src\modules\Elsa.MassTransit.AzureServiceBus\Elsa.MassTransit.AzureServiceBus.csproj", "{AFEB799E-82C3-4D02-9D5C-766BB8DEF004}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{C80C8231-D35C-4ACC-9ED6-9F3DB221535E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Alterations.IntegrationTests", "test\integration\Elsa.Alterations.IntegrationTests\Elsa.Alterations.IntegrationTests.csproj", "{F50336DA-42D1-4DD1-A107-67AFEB8A33EE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hosting", "hosting", "{A516931E-EDBB-4FC3-BB94-1BB824D5BC61}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Hosting.Management", "src\modules\Elsa.Hosting.Management\Elsa.Hosting.Management.csproj", "{BBCE36D1-6767-4ED1-B3E8-84D2567A962A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.KeyValues", "src\modules\Elsa.KeyValues\Elsa.KeyValues.csproj", "{73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime.UnitTests", "test\unit\Elsa.Workflows.Runtime.UnitTests\Elsa.Workflows.Runtime.UnitTests.csproj", "{B0946844-DE0E-4C59-9391-C0EB649DBF4E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching", "src\modules\Elsa.Caching\Elsa.Caching.csproj", "{A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "caching", "caching", "{EB3A7401-0DE3-476F-9E6F-057F1F4590FB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching.Distributed.MassTransit", "src\modules\Elsa.Caching.Distributed.MassTransit\Elsa.Caching.Distributed.MassTransit.csproj", "{BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching.Distributed", "src\modules\Elsa.Caching.Distributed\Elsa.Caching.Distributed.csproj", "{7EB0CFB8-B668-4F3F-898D-80411095BC2F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.ComponentTests", "test\component\Elsa.Workflows.ComponentTests\Elsa.Workflows.ComponentTests.csproj", "{34BC9836-681D-43A5-BC39-E4FEE17FC528}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "performance", "performance", "{CBB515F3-A0EF-43B5-A907-FD4E652DD66E}" + ProjectSection(SolutionItems) = preProject + test\performance\Directory.Build.props = test\performance\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.PerformanceTests", "test\performance\Elsa.Workflows.PerformanceTests\Elsa.Workflows.PerformanceTests.csproj", "{90CD37A9-C866-4D90-A3B1-8C87F53B845E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "retention", "retention", "{3F20899B-C5E1-485F-808B-ADB1877EB3FD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Retention", "src\modules\Elsa.Retention\Elsa.Retention.csproj", "{3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.MongoDb.UnitTests", "test\unit\Elsa.MongoDb.UnitTests\Elsa.MongoDb.UnitTests.csproj", "{56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Workflows.Runtime.Distributed", "src\modules\Elsa.Workflows.Runtime.Distributed\Elsa.Workflows.Runtime.Distributed.csproj", "{0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared", "src\common\Elsa.Testing.Shared\Elsa.Testing.Shared.csproj", "{5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared.Integration", "src\common\Elsa.Testing.Shared.Integration\Elsa.Testing.Shared.Integration.csproj", "{94A61AD7-2A2B-40DB-81F3-C59D596958A8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared.Component", "src\common\Elsa.Testing.Shared.Component\Elsa.Testing.Shared.Component.csproj", "{4B598AF7-BD7D-4544-A274-2CDDD98F4167}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.IntegrationTests", "test\integration\Elsa.Activities.IntegrationTests\Elsa.Activities.IntegrationTests.csproj", "{99B171E6-0248-4402-836D-98947CD63772}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.JavaScript.IntegrationTests", "test\integration\Elsa.JavaScript.IntegrationTests\Elsa.JavaScript.IntegrationTests.csproj", "{4332A6BC-434A-4AF5-A075-F1BBCDD28F5D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Resilience.IntegrationTests", "test\integration\Elsa.Resilience.IntegrationTests\Elsa.Resilience.IntegrationTests.csproj", "{832675FA-C597-4554-AE6B-18F189198A1F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apps", "apps", "{D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1}" + ProjectSection(SolutionItems) = preProject + src\apps\Directory.Build.props = src\apps\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Server.Web", "src\apps\Elsa.Server.Web\Elsa.Server.Web.csproj", "{5ADDDFB1-E59B-4097-97B7-8C24E2D60463}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa", "src\modules\Elsa\Elsa.csproj", "{97C7E531-9D5F-43FD-AA19-BF24DA13B612}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Server.LoadBalancer", "src\apps\Elsa.Server.LoadBalancer\Elsa.Server.LoadBalancer.csproj", "{65F2AD97-3ECF-4BA6-8AAA-1E5882FDCE68}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaStudioWebAssembly", "src\apps\ElsaStudioWebAssembly\ElsaStudioWebAssembly.csproj", "{690B0274-291F-4D9E-BA76-54EFF7D3E4BC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.ServerAndStudio.Web", "src\apps\Elsa.ServerAndStudio.Web\Elsa.ServerAndStudio.Web.csproj", "{060FD0BA-BD78-48E1-A8A7-4906A5AD5E39}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Studio.Web", "src\apps\Elsa.Studio.Web\Elsa.Studio.Web.csproj", "{169A82A5-2DB3-40EA-801E-14C08D743DF7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.OpenTelemetry", "src\modules\Elsa.OpenTelemetry\Elsa.OpenTelemetry.csproj", "{2CDF3E1C-267D-4198-B1C7-7E1F548FC120}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.ProtoActor.Core", "src\modules\Elsa.ProtoActor.Core\Elsa.ProtoActor.Core.csproj", "{01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Caching.Distributed.ProtoActor", "src\modules\Elsa.Caching.Distributed.ProtoActor\Elsa.Caching.Distributed.ProtoActor.csproj", "{47FBCB04-0C2D-453C-BE2F-7052CAC22524}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "k8s", "k8s", "{B32DB9B2-AD6C-48A5-8682-4373CB045185}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa-server", "elsa-server", "{454652D5-E1BB-4D4B-9B21-9CEFC900C4FB}" + ProjectSection(SolutionItems) = preProject + scripts\k8s\elsa-server\deployment.yaml = scripts\k8s\elsa-server\deployment.yaml + scripts\k8s\elsa-server\role-binding.yaml = scripts\k8s\elsa-server\role-binding.yaml + scripts\k8s\elsa-server\role.yaml = scripts\k8s\elsa-server\role.yaml + scripts\k8s\elsa-server\service-account.yml = scripts\k8s\elsa-server\service-account.yml + scripts\k8s\elsa-server\service.yaml = scripts\k8s\elsa-server\service.yaml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "postgres", "postgres", "{31089E79-694B-4F45-97AF-86D34A7B231E}" + ProjectSection(SolutionItems) = preProject + scripts\k8s\postgres\config-map.yaml = scripts\k8s\postgres\config-map.yaml + scripts\k8s\postgres\deployment.yaml = scripts\k8s\postgres\deployment.yaml + scripts\k8s\postgres\service.yml = scripts\k8s\postgres\service.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "plant-uml", "plant-uml", "{6DDB9ECF-D454-4894-A262-A6BB3026E61E}" + ProjectSection(SolutionItems) = preProject + scripts\k8s\plant-uml\deployment.yaml = scripts\k8s\plant-uml\deployment.yaml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "trace-lens", "trace-lens", "{16B570BC-E293-4A19-B20E-5C97BAF8476B}" + ProjectSection(SolutionItems) = preProject + scripts\k8s\trace-lens\deployment.yaml = scripts\k8s\trace-lens\deployment.yaml + scripts\k8s\trace-lens\service.yaml = scripts\k8s\trace-lens\service.yaml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integrations", "integrations", "{EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Core", "src\modules\Elsa.Secrets.Core\Elsa.Secrets.Core.csproj", "{34FAB60D-7259-47B9-B50E-B533C7C3CFEC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "secrets", "secrets", "{8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Management", "src\modules\Elsa.Secrets.Management\Elsa.Secrets.Management.csproj", "{19329441-2A59-4BAC-A1BE-BBAB70C93CA0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Api", "src\modules\Elsa.Secrets.Api\Elsa.Secrets.Api.csproj", "{37D16EAF-ACD8-4105-8BD3-B2745819CFF8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{3666CF13-1353-4620-9472-506670214A6A}" + ProjectSection(SolutionItems) = preProject + scripts\migrations\efcore-3.0.sh = scripts\migrations\efcore-3.0.sh + scripts\migrations\efcore-3.1-sql.sh = scripts\migrations\efcore-3.1-sql.sh + scripts\migrations\efcore-3.1.sh = scripts\migrations\efcore-3.1.sh + scripts\migrations\efcore-3.2.sh = scripts\migrations\efcore-3.2.sh + scripts\migrations\efcore-3.3.sh = scripts\migrations\efcore-3.3.sh + scripts\migrations\README.md = scripts\migrations\README.md + scripts\migrations\efcore-3.4.sh = scripts\migrations\efcore-3.4.sh + scripts\migrations\efcore-3.5.sh = scripts\migrations\efcore-3.5.sh + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{AA5ACF15-8647-4AC9-B9F5-73FCB92BE7E3}" + ProjectSection(SolutionItems) = preProject + scripts\docker\build-and-run-all-in-one-web-docker.sh = scripts\docker\build-and-run-all-in-one-web-docker.sh + scripts\docker\docker-compose.yml = scripts\docker\docker-compose.yml + scripts\docker\docker-run-all-in-one-web.ps1 = scripts\docker\docker-run-all-in-one-web.ps1 + scripts\docker\docker-compose-citus.yml = scripts\docker\docker-compose-citus.yml + scripts\docker\docker-compose-yugabyte.yml = scripts\docker\docker-compose-yugabyte.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa-studio", "elsa-studio", "{DFFE6199-B5A7-4BA8-A5E1-77D0426C6468}" + ProjectSection(SolutionItems) = preProject + scripts\k8s\elsa-studio\deployment.yaml = scripts\k8s\elsa-studio\deployment.yaml + scripts\k8s\elsa-studio\service.yaml = scripts\k8s\elsa-studio\service.yaml + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore\Elsa.Secrets.Persistence.EntityFrameworkCore.csproj", "{9A6D67DE-51B1-456D-B25D-19E0356C8F60}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite\Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite.csproj", "{44A03CF6-4EB6-434C-90D1-FF8142FE394E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Models", "src\modules\Elsa.Secrets.Models\Elsa.Secrets.Models.csproj", "{29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Scripting", "src\modules\Elsa.Secrets.Scripting\Elsa.Secrets.Scripting.csproj", "{6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.JavaScript.Libraries", "src\modules\Elsa.JavaScript.Libraries\Elsa.JavaScript.Libraries.csproj", "{5F80663C-B072-49DE-9A67-FD804BAD787E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql\Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql.csproj", "{630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer\Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer.csproj", "{59E7614A-3630-4C39-9C7F-9E12BC95D37E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multitenancy", "multitenancy", "{2F3E1026-5054-4E1F-899B-F1A7F70F9912}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Tenants.AspNetCore", "src\modules\Elsa.Tenants.AspNetCore\Elsa.Tenants.AspNetCore.csproj", "{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Kafka", "src\modules\Elsa.Kafka\Elsa.Kafka.csproj", "{BF934627-F531-44FB-BEC2-ECA801FF31E7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Sql", "src\modules\Elsa.Sql\Elsa.Sql.csproj", "{FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Sql.MySql", "src\modules\Elsa.Sql.MySql\Elsa.Sql.MySql.csproj", "{3BED411B-79B5-4CCC-BD46-9549A427B908}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Sql.PostgreSql", "src\modules\Elsa.Sql.PostgreSql\Elsa.Sql.PostgreSql.csproj", "{6CC5FBC7-D3D7-4FE3-AD08-C67939BDB24D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Sql.Sqlite", "src\modules\Elsa.Sql.Sqlite\Elsa.Sql.Sqlite.csproj", "{FA5E857F-B173-4B5D-8049-B817A210DEF5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Sql.SqlServer", "src\modules\Elsa.Sql.SqlServer\Elsa.Sql.SqlServer.csproj", "{A51F9683-DA9F-45E7-82DE-1E261ACD6D68}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oracle-setup", "oracle-setup", "{66E2E2CF-967F-4564-89E8-F46FA973C99B}" + ProjectSection(SolutionItems) = preProject + docker\oracle-setup\setup.sql = docker\oracle-setup\setup.sql + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "connections", "connections", "{9DF81143-2F39-4CFB-9DA3-902279010622}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Models", "src\modules\Elsa.Connections.Models\Elsa.Connections.Models.csproj", "{75E08B0E-A41A-425C-9DCA-155505CE41CD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Api", "src\modules\Elsa.Connections.Api\Elsa.Connections.Api.csproj", "{BD120D97-4862-469E-B2CF-4109F7F21C20}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Core", "src\modules\Elsa.Connections.Core\Elsa.Connections.Core.csproj", "{8A3443F3-D40E-44B9-9805-B4CB7A3F022C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Persistence", "src\modules\Elsa.Connections.Persistence\Elsa.Connections.Persistence.csproj", "{FA2B2B44-7E3E-444B-A157-7526B376E9CA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Persistence.EntityFrameworkCore", "src\modules\Elsa.Connections.Persistence.EntityFrameworkCore\Elsa.Connections.Persistence.EntityFrameworkCore.csproj", "{DF0CA7E2-F5DF-40ED-91B6-748767084FC7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite\Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.csproj", "{DB20B168-CD90-41F2-BE08-3D8C6F142459}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "adr", "adr", "{0A04B1FD-06C0-4271-A910-A08C263DBC44}" + ProjectSection(SolutionItems) = preProject + doc\adr\0001-record-architecture-decisions.md = doc\adr\0001-record-architecture-decisions.md + doc\adr\0002-fault-propagation-from-child-to-parent-activities.md = doc\adr\0002-fault-propagation-from-child-to-parent-activities.md + doc\adr\toc.md = doc\adr\toc.md + doc\adr\graph.dot = doc\adr\graph.dot + doc\adr\0003-direct-bookmark-management-in-workflowexecutioncontext.md = doc\adr\0003-direct-bookmark-management-in-workflowexecutioncontext.md + doc\adr\0004-activity-execution-snapshots.md = doc\adr\0004-activity-execution-snapshots.md + doc\adr\0005-tenant-deleted-event.md = doc\adr\0005-tenant-deleted-event.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "bounty", "bounty", "{9B80A705-2E31-4012-964A-83963DCDB384}" + ProjectSection(SolutionItems) = preProject + doc\bounty\bounty-announcement-template.md = doc\bounty\bounty-announcement-template.md + doc\bounty\bounty-footer.md = doc\bounty\bounty-footer.md + doc\bounty\bounty-quality-standards.md = doc\bounty\bounty-quality-standards.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resilience", "resilience", "{CD7DC0D1-FFDC-417A-89BE-7F32408F583E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Resilience.Core", "src\modules\Elsa.Resilience.Core\Elsa.Resilience.Core.csproj", "{70593549-8B26-4D63-9857-6BA8BB3E31DB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Resilience", "src\modules\Elsa.Resilience\Elsa.Resilience.csproj", "{E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "io", "io", "{7FD1FD1E-5778-4065-AAA5-1F878129EF77}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.IO", "src\modules\Elsa.IO\Elsa.IO.csproj", "{EB24F9FE-D7BD-4FCC-907E-AE400288C2A5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.IO.Compression", "src\modules\Elsa.IO.Compression\Elsa.IO.Compression.csproj", "{9CA02818-F7EB-4A0B-B27B-BC74ACD499C9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.IO.Http", "src\modules\Elsa.IO.Http\Elsa.IO.Http.csproj", "{C583AF05-D517-4B7F-8955-6B61500ED3D8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D5A49B4-9A9B-496E-803B-DEB85B2C3132}.Release|Any CPU.Build.0 = Release|Any CPU + {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82E26BF9-5F3A-4365-899A-AB1FFD54AA45}.Release|Any CPU.Build.0 = Release|Any CPU + {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E}.Release|Any CPU.Build.0 = Release|Any CPU + {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D31581AB-A6C1-4B73-AB63-45667F6C82AE}.Release|Any CPU.Build.0 = Release|Any CPU + {0601A2A6-2C62-418B-9104-8CDE497E5283}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0601A2A6-2C62-418B-9104-8CDE497E5283}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0601A2A6-2C62-418B-9104-8CDE497E5283}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0601A2A6-2C62-418B-9104-8CDE497E5283}.Release|Any CPU.Build.0 = Release|Any CPU + {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67}.Release|Any CPU.Build.0 = Release|Any CPU + {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Release|Any CPU.Build.0 = Release|Any CPU + {80FF5821-E831-450D-AA0C-C76D07D878F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80FF5821-E831-450D-AA0C-C76D07D878F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80FF5821-E831-450D-AA0C-C76D07D878F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80FF5821-E831-450D-AA0C-C76D07D878F4}.Release|Any CPU.Build.0 = Release|Any CPU + {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E5BD3D9-3529-48BC-B741-CFB7A69DB233}.Release|Any CPU.Build.0 = Release|Any CPU + {B2049499-D384-46DF-8837-F1180107DD54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2049499-D384-46DF-8837-F1180107DD54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2049499-D384-46DF-8837-F1180107DD54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2049499-D384-46DF-8837-F1180107DD54}.Release|Any CPU.Build.0 = Release|Any CPU + {78DAB791-8595-4612-8E9E-2248AF5B1862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78DAB791-8595-4612-8E9E-2248AF5B1862}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78DAB791-8595-4612-8E9E-2248AF5B1862}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78DAB791-8595-4612-8E9E-2248AF5B1862}.Release|Any CPU.Build.0 = Release|Any CPU + {C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9539BD8-D2AE-4A8D-8281-71A05B3FBF31}.Release|Any CPU.Build.0 = Release|Any CPU + {169E2C9B-6687-427F-A278-30BF849BFEDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {169E2C9B-6687-427F-A278-30BF849BFEDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {169E2C9B-6687-427F-A278-30BF849BFEDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {169E2C9B-6687-427F-A278-30BF849BFEDC}.Release|Any CPU.Build.0 = Release|Any CPU + {2DD5D66B-85E9-4AF9-911C-C9F963234159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DD5D66B-85E9-4AF9-911C-C9F963234159}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DD5D66B-85E9-4AF9-911C-C9F963234159}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DD5D66B-85E9-4AF9-911C-C9F963234159}.Release|Any CPU.Build.0 = Release|Any CPU + {8A050229-DB79-4E0B-9AFF-7565E87F2954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A050229-DB79-4E0B-9AFF-7565E87F2954}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A050229-DB79-4E0B-9AFF-7565E87F2954}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A050229-DB79-4E0B-9AFF-7565E87F2954}.Release|Any CPU.Build.0 = Release|Any CPU + {C237BA1A-3A7D-4AB2-BE09-2696F3C082A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C237BA1A-3A7D-4AB2-BE09-2696F3C082A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C237BA1A-3A7D-4AB2-BE09-2696F3C082A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C237BA1A-3A7D-4AB2-BE09-2696F3C082A4}.Release|Any CPU.Build.0 = Release|Any CPU + {80529478-A383-4FEA-B744-C71264969E9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80529478-A383-4FEA-B744-C71264969E9A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80529478-A383-4FEA-B744-C71264969E9A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80529478-A383-4FEA-B744-C71264969E9A}.Release|Any CPU.Build.0 = Release|Any CPU + {39CD855E-83B1-4A96-93F7-01608211EBE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39CD855E-83B1-4A96-93F7-01608211EBE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39CD855E-83B1-4A96-93F7-01608211EBE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39CD855E-83B1-4A96-93F7-01608211EBE3}.Release|Any CPU.Build.0 = Release|Any CPU + {30B49E42-AE61-4F7C-981F-923F07BB3986}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30B49E42-AE61-4F7C-981F-923F07BB3986}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30B49E42-AE61-4F7C-981F-923F07BB3986}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30B49E42-AE61-4F7C-981F-923F07BB3986}.Release|Any CPU.Build.0 = Release|Any CPU + {D229105F-6879-4452-9189-75DE060C0F4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D229105F-6879-4452-9189-75DE060C0F4C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D229105F-6879-4452-9189-75DE060C0F4C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D229105F-6879-4452-9189-75DE060C0F4C}.Release|Any CPU.Build.0 = Release|Any CPU + {7CC95512-7F44-45C3-A669-95B7048D4730}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CC95512-7F44-45C3-A669-95B7048D4730}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CC95512-7F44-45C3-A669-95B7048D4730}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CC95512-7F44-45C3-A669-95B7048D4730}.Release|Any CPU.Build.0 = Release|Any CPU + {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Release|Any CPU.Build.0 = Release|Any CPU + {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3246883E-2FA7-4B4A-BDC5-99039A2869BC}.Release|Any CPU.Build.0 = Release|Any CPU + {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF}.Release|Any CPU.Build.0 = Release|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Release|Any CPU.Build.0 = Release|Any CPU + {1FCB2200-28B8-4703-8E89-73241AAED047}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1FCB2200-28B8-4703-8E89-73241AAED047}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FCB2200-28B8-4703-8E89-73241AAED047}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1FCB2200-28B8-4703-8E89-73241AAED047}.Release|Any CPU.Build.0 = Release|Any CPU + {B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5CDF747-8066-40D5-9BAE-CBE397BC9B51}.Release|Any CPU.Build.0 = Release|Any CPU + {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D8F3BB2-709D-481A-8FD3-0DA9762B366D}.Release|Any CPU.Build.0 = Release|Any CPU + {A86DF0F0-24E9-470E-984B-9E7332544972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A86DF0F0-24E9-470E-984B-9E7332544972}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A86DF0F0-24E9-470E-984B-9E7332544972}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A86DF0F0-24E9-470E-984B-9E7332544972}.Release|Any CPU.Build.0 = Release|Any CPU + {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A702DD84-B55C-4807-9C28-D8F5AC3CCA78}.Release|Any CPU.Build.0 = Release|Any CPU + {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A377A6A-F735-4010-9E00-72E8BEB8F1F2}.Release|Any CPU.Build.0 = Release|Any CPU + {28818676-F6AF-4203-8B65-BD33A50CB9A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28818676-F6AF-4203-8B65-BD33A50CB9A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28818676-F6AF-4203-8B65-BD33A50CB9A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28818676-F6AF-4203-8B65-BD33A50CB9A2}.Release|Any CPU.Build.0 = Release|Any CPU + {DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC9CCAD0-7363-4691-B964-FF5B3AEA3F95}.Release|Any CPU.Build.0 = Release|Any CPU + {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5}.Release|Any CPU.Build.0 = Release|Any CPU + {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E7F15D1-729E-4DA7-992A-C3A2C6054B37}.Release|Any CPU.Build.0 = Release|Any CPU + {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3095C95A-F1F9-487A-A983-1B100A33E4C7}.Release|Any CPU.Build.0 = Release|Any CPU + {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4}.Release|Any CPU.Build.0 = Release|Any CPU + {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC7DE119-736D-4FC5-85DC-70A6770749F6}.Release|Any CPU.Build.0 = Release|Any CPU + {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0}.Release|Any CPU.Build.0 = Release|Any CPU + {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C84408D-A0A7-4513-AD9A-1BA137ABE62C}.Release|Any CPU.Build.0 = Release|Any CPU + {E4300D97-1D53-4029-9435-483FB7EC9621}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4300D97-1D53-4029-9435-483FB7EC9621}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4300D97-1D53-4029-9435-483FB7EC9621}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4300D97-1D53-4029-9435-483FB7EC9621}.Release|Any CPU.Build.0 = Release|Any CPU + {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84AB9951-3DBF-43A4-8F5D-AEED1102CE88}.Release|Any CPU.Build.0 = Release|Any CPU + {1F621382-08FB-45EA-B94C-96A7FECB9489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F621382-08FB-45EA-B94C-96A7FECB9489}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F621382-08FB-45EA-B94C-96A7FECB9489}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F621382-08FB-45EA-B94C-96A7FECB9489}.Release|Any CPU.Build.0 = Release|Any CPU + {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755}.Release|Any CPU.Build.0 = Release|Any CPU + {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A71557F2-D5FB-4772-9391-F7D18A3B6C44}.Release|Any CPU.Build.0 = Release|Any CPU + {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05F3B23E-CF28-467B-AD3C-595EA4ED6B96}.Release|Any CPU.Build.0 = Release|Any CPU + {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74ACD9D0-8B4C-42FA-A582-E93BF0075023}.Release|Any CPU.Build.0 = Release|Any CPU + {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Release|Any CPU.Build.0 = Release|Any CPU + {49D8D2CF-AF68-40FA-951F-018247C97443}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {49D8D2CF-AF68-40FA-951F-018247C97443}.Debug|Any CPU.Build.0 = Debug|Any CPU + {49D8D2CF-AF68-40FA-951F-018247C97443}.Release|Any CPU.ActiveCfg = Release|Any CPU + {49D8D2CF-AF68-40FA-951F-018247C97443}.Release|Any CPU.Build.0 = Release|Any CPU + {732BF088-6AD7-4C4D-9A48-8074253596D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {732BF088-6AD7-4C4D-9A48-8074253596D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {732BF088-6AD7-4C4D-9A48-8074253596D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {732BF088-6AD7-4C4D-9A48-8074253596D4}.Release|Any CPU.Build.0 = Release|Any CPU + {29638A67-E79F-44FE-AC05-DA499EBA929E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29638A67-E79F-44FE-AC05-DA499EBA929E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29638A67-E79F-44FE-AC05-DA499EBA929E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29638A67-E79F-44FE-AC05-DA499EBA929E}.Release|Any CPU.Build.0 = Release|Any CPU + {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC}.Release|Any CPU.Build.0 = Release|Any CPU + {790E94F2-5393-47DF-AC52-D9247F5B243A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {790E94F2-5393-47DF-AC52-D9247F5B243A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {790E94F2-5393-47DF-AC52-D9247F5B243A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {790E94F2-5393-47DF-AC52-D9247F5B243A}.Release|Any CPU.Build.0 = Release|Any CPU + {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6}.Release|Any CPU.Build.0 = Release|Any CPU + {99F2B1DA-2F69-4D70-A2A3-AC985AD91EC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99F2B1DA-2F69-4D70-A2A3-AC985AD91EC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFEB799E-82C3-4D02-9D5C-766BB8DEF004}.Release|Any CPU.Build.0 = Release|Any CPU + {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F50336DA-42D1-4DD1-A107-67AFEB8A33EE}.Release|Any CPU.Build.0 = Release|Any CPU + {BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BBCE36D1-6767-4ED1-B3E8-84D2567A962A}.Release|Any CPU.Build.0 = Release|Any CPU + {73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Release|Any CPU.Build.0 = Release|Any CPU + {B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0946844-DE0E-4C59-9391-C0EB649DBF4E}.Release|Any CPU.Build.0 = Release|Any CPU + {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16}.Release|Any CPU.Build.0 = Release|Any CPU + {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F}.Release|Any CPU.Build.0 = Release|Any CPU + {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EB0CFB8-B668-4F3F-898D-80411095BC2F}.Release|Any CPU.Build.0 = Release|Any CPU + {34BC9836-681D-43A5-BC39-E4FEE17FC528}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34BC9836-681D-43A5-BC39-E4FEE17FC528}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34BC9836-681D-43A5-BC39-E4FEE17FC528}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34BC9836-681D-43A5-BC39-E4FEE17FC528}.Release|Any CPU.Build.0 = Release|Any CPU + {90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90CD37A9-C866-4D90-A3B1-8C87F53B845E}.Release|Any CPU.Build.0 = Release|Any CPU + {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE}.Release|Any CPU.Build.0 = Release|Any CPU + {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1}.Release|Any CPU.Build.0 = Release|Any CPU + {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD}.Release|Any CPU.Build.0 = Release|Any CPU + {5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4}.Release|Any CPU.Build.0 = Release|Any CPU + {94A61AD7-2A2B-40DB-81F3-C59D596958A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94A61AD7-2A2B-40DB-81F3-C59D596958A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94A61AD7-2A2B-40DB-81F3-C59D596958A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94A61AD7-2A2B-40DB-81F3-C59D596958A8}.Release|Any CPU.Build.0 = Release|Any CPU + {4B598AF7-BD7D-4544-A274-2CDDD98F4167}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B598AF7-BD7D-4544-A274-2CDDD98F4167}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B598AF7-BD7D-4544-A274-2CDDD98F4167}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B598AF7-BD7D-4544-A274-2CDDD98F4167}.Release|Any CPU.Build.0 = Release|Any CPU + {99B171E6-0248-4402-836D-98947CD63772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99B171E6-0248-4402-836D-98947CD63772}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99B171E6-0248-4402-836D-98947CD63772}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99B171E6-0248-4402-836D-98947CD63772}.Release|Any CPU.Build.0 = Release|Any CPU + {4332A6BC-434A-4AF5-A075-F1BBCDD28F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4332A6BC-434A-4AF5-A075-F1BBCDD28F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4332A6BC-434A-4AF5-A075-F1BBCDD28F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4332A6BC-434A-4AF5-A075-F1BBCDD28F5D}.Release|Any CPU.Build.0 = Release|Any CPU + {832675FA-C597-4554-AE6B-18F189198A1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {832675FA-C597-4554-AE6B-18F189198A1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {832675FA-C597-4554-AE6B-18F189198A1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {832675FA-C597-4554-AE6B-18F189198A1F}.Release|Any CPU.Build.0 = Release|Any CPU + {5ADDDFB1-E59B-4097-97B7-8C24E2D60463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5ADDDFB1-E59B-4097-97B7-8C24E2D60463}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5ADDDFB1-E59B-4097-97B7-8C24E2D60463}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5ADDDFB1-E59B-4097-97B7-8C24E2D60463}.Release|Any CPU.Build.0 = Release|Any CPU + {97C7E531-9D5F-43FD-AA19-BF24DA13B612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97C7E531-9D5F-43FD-AA19-BF24DA13B612}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97C7E531-9D5F-43FD-AA19-BF24DA13B612}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97C7E531-9D5F-43FD-AA19-BF24DA13B612}.Release|Any CPU.Build.0 = Release|Any CPU + {65F2AD97-3ECF-4BA6-8AAA-1E5882FDCE68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65F2AD97-3ECF-4BA6-8AAA-1E5882FDCE68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {65F2AD97-3ECF-4BA6-8AAA-1E5882FDCE68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65F2AD97-3ECF-4BA6-8AAA-1E5882FDCE68}.Release|Any CPU.Build.0 = Release|Any CPU + {690B0274-291F-4D9E-BA76-54EFF7D3E4BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {690B0274-291F-4D9E-BA76-54EFF7D3E4BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {690B0274-291F-4D9E-BA76-54EFF7D3E4BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {690B0274-291F-4D9E-BA76-54EFF7D3E4BC}.Release|Any CPU.Build.0 = Release|Any CPU + {060FD0BA-BD78-48E1-A8A7-4906A5AD5E39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {060FD0BA-BD78-48E1-A8A7-4906A5AD5E39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {060FD0BA-BD78-48E1-A8A7-4906A5AD5E39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {060FD0BA-BD78-48E1-A8A7-4906A5AD5E39}.Release|Any CPU.Build.0 = Release|Any CPU + {169A82A5-2DB3-40EA-801E-14C08D743DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {169A82A5-2DB3-40EA-801E-14C08D743DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {169A82A5-2DB3-40EA-801E-14C08D743DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {169A82A5-2DB3-40EA-801E-14C08D743DF7}.Release|Any CPU.Build.0 = Release|Any CPU + {2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CDF3E1C-267D-4198-B1C7-7E1F548FC120}.Release|Any CPU.Build.0 = Release|Any CPU + {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA}.Release|Any CPU.Build.0 = Release|Any CPU + {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Release|Any CPU.Build.0 = Release|Any CPU + {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Release|Any CPU.Build.0 = Release|Any CPU + {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19329441-2A59-4BAC-A1BE-BBAB70C93CA0}.Release|Any CPU.Build.0 = Release|Any CPU + {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Release|Any CPU.Build.0 = Release|Any CPU + {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Release|Any CPU.Build.0 = Release|Any CPU + {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Release|Any CPU.Build.0 = Release|Any CPU + {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Release|Any CPU.Build.0 = Release|Any CPU + {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}.Release|Any CPU.Build.0 = Release|Any CPU + {5F80663C-B072-49DE-9A67-FD804BAD787E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F80663C-B072-49DE-9A67-FD804BAD787E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F80663C-B072-49DE-9A67-FD804BAD787E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F80663C-B072-49DE-9A67-FD804BAD787E}.Release|Any CPU.Build.0 = Release|Any CPU + {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9}.Release|Any CPU.Build.0 = Release|Any CPU + {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59E7614A-3630-4C39-9C7F-9E12BC95D37E}.Release|Any CPU.Build.0 = Release|Any CPU + {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Release|Any CPU.Build.0 = Release|Any CPU + {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Release|Any CPU.Build.0 = Release|Any CPU + {FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348}.Release|Any CPU.Build.0 = Release|Any CPU + {3BED411B-79B5-4CCC-BD46-9549A427B908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3BED411B-79B5-4CCC-BD46-9549A427B908}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3BED411B-79B5-4CCC-BD46-9549A427B908}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3BED411B-79B5-4CCC-BD46-9549A427B908}.Release|Any CPU.Build.0 = Release|Any CPU + {6CC5FBC7-D3D7-4FE3-AD08-C67939BDB24D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6CC5FBC7-D3D7-4FE3-AD08-C67939BDB24D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6CC5FBC7-D3D7-4FE3-AD08-C67939BDB24D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6CC5FBC7-D3D7-4FE3-AD08-C67939BDB24D}.Release|Any CPU.Build.0 = Release|Any CPU + {FA5E857F-B173-4B5D-8049-B817A210DEF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA5E857F-B173-4B5D-8049-B817A210DEF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA5E857F-B173-4B5D-8049-B817A210DEF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA5E857F-B173-4B5D-8049-B817A210DEF5}.Release|Any CPU.Build.0 = Release|Any CPU + {A51F9683-DA9F-45E7-82DE-1E261ACD6D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A51F9683-DA9F-45E7-82DE-1E261ACD6D68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A51F9683-DA9F-45E7-82DE-1E261ACD6D68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A51F9683-DA9F-45E7-82DE-1E261ACD6D68}.Release|Any CPU.Build.0 = Release|Any CPU + {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75E08B0E-A41A-425C-9DCA-155505CE41CD}.Release|Any CPU.Build.0 = Release|Any CPU + {BD120D97-4862-469E-B2CF-4109F7F21C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD120D97-4862-469E-B2CF-4109F7F21C20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD120D97-4862-469E-B2CF-4109F7F21C20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD120D97-4862-469E-B2CF-4109F7F21C20}.Release|Any CPU.Build.0 = Release|Any CPU + {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A3443F3-D40E-44B9-9805-B4CB7A3F022C}.Release|Any CPU.Build.0 = Release|Any CPU + {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA2B2B44-7E3E-444B-A157-7526B376E9CA}.Release|Any CPU.Build.0 = Release|Any CPU + {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF0CA7E2-F5DF-40ED-91B6-748767084FC7}.Release|Any CPU.Build.0 = Release|Any CPU + {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB20B168-CD90-41F2-BE08-3D8C6F142459}.Release|Any CPU.Build.0 = Release|Any CPU + {70593549-8B26-4D63-9857-6BA8BB3E31DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70593549-8B26-4D63-9857-6BA8BB3E31DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70593549-8B26-4D63-9857-6BA8BB3E31DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70593549-8B26-4D63-9857-6BA8BB3E31DB}.Release|Any CPU.Build.0 = Release|Any CPU + {E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7137FB0-1988-4562-AD8D-D0D9D2EE85F6}.Release|Any CPU.Build.0 = Release|Any CPU + {EB24F9FE-D7BD-4FCC-907E-AE400288C2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB24F9FE-D7BD-4FCC-907E-AE400288C2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB24F9FE-D7BD-4FCC-907E-AE400288C2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB24F9FE-D7BD-4FCC-907E-AE400288C2A5}.Release|Any CPU.Build.0 = Release|Any CPU + {9CA02818-F7EB-4A0B-B27B-BC74ACD499C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CA02818-F7EB-4A0B-B27B-BC74ACD499C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CA02818-F7EB-4A0B-B27B-BC74ACD499C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CA02818-F7EB-4A0B-B27B-BC74ACD499C9}.Release|Any CPU.Build.0 = Release|Any CPU + {C583AF05-D517-4B7F-8955-6B61500ED3D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C583AF05-D517-4B7F-8955-6B61500ED3D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C583AF05-D517-4B7F-8955-6B61500ED3D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C583AF05-D517-4B7F-8955-6B61500ED3D8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} + {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} + {7D5A49B4-9A9B-496E-803B-DEB85B2C3132} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {82E26BF9-5F3A-4365-899A-AB1FFD54AA45} = {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59} + {ACD65CE5-3CC2-47B1-BFAC-72443D764F6E} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {D31581AB-A6C1-4B73-AB63-45667F6C82AE} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {0601A2A6-2C62-418B-9104-8CDE497E5283} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {302BFC43-ED2F-43AE-8AD4-FCD481B0AC67} = {B08B4E00-C2AB-48F3-8389-449F42AEF179} + {BB983D0B-A939-4008-B9E3-C7C172BCF83A} = {DD089B8B-DA73-492A-9010-F772D1C178DA} + {80FF5821-E831-450D-AA0C-C76D07D878F4} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {8E5BD3D9-3529-48BC-B741-CFB7A69DB233} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {B2049499-D384-46DF-8837-F1180107DD54} = {58C59255-281C-4595-8732-808158F1DC6E} + {78DAB791-8595-4612-8E9E-2248AF5B1862} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {C9539BD8-D2AE-4A8D-8281-71A05B3FBF31} = {B08B4E00-C2AB-48F3-8389-449F42AEF179} + {169E2C9B-6687-427F-A278-30BF849BFEDC} = {B08B4E00-C2AB-48F3-8389-449F42AEF179} + {2DD5D66B-85E9-4AF9-911C-C9F963234159} = {B08B4E00-C2AB-48F3-8389-449F42AEF179} + {C237BA1A-3A7D-4AB2-BE09-2696F3C082A4} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {80529478-A383-4FEA-B744-C71264969E9A} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {39CD855E-83B1-4A96-93F7-01608211EBE3} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {30B49E42-AE61-4F7C-981F-923F07BB3986} = {5948B0A5-7873-4DBB-BA03-EB283D6EA91B} + {D229105F-6879-4452-9189-75DE060C0F4C} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {7CC95512-7F44-45C3-A669-95B7048D4730} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF} = {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59} + {3246883E-2FA7-4B4A-BDC5-99039A2869BC} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {2BBFDE36-28A7-4875-8EBE-CC25C76B97FF} = {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59} + {18453B51-25EB-4317-A4B3-B10518252E92} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {1B8D5897-902E-4632-8698-E89CAF3DDF54} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {E9652738-2B3D-4357-B84B-54F0EA161382} = {1B8D5897-902E-4632-8698-E89CAF3DDF54} + {89608AA5-5ADE-4832-AC7B-871C4AE64210} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} + {1FCB2200-28B8-4703-8E89-73241AAED047} = {89608AA5-5ADE-4832-AC7B-871C4AE64210} + {B5CDF747-8066-40D5-9BAE-CBE397BC9B51} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {9B4F139F-7D26-435C-A561-89E65A67A8E5} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {6EF07978-A6D2-40EB-891D-7D70C5F37E76} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {DD089B8B-DA73-492A-9010-F772D1C178DA} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {5948B0A5-7873-4DBB-BA03-EB283D6EA91B} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {B08B4E00-C2AB-48F3-8389-449F42AEF179} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {AB797AF0-C12C-46DE-A157-7E25625C6200} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {58C59255-281C-4595-8732-808158F1DC6E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {4D8F3BB2-709D-481A-8FD3-0DA9762B366D} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {A86DF0F0-24E9-470E-984B-9E7332544972} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {A702DD84-B55C-4807-9C28-D8F5AC3CCA78} = {B08B4E00-C2AB-48F3-8389-449F42AEF179} + {3A377A6A-F735-4010-9E00-72E8BEB8F1F2} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {28818676-F6AF-4203-8B65-BD33A50CB9A2} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {DC9CCAD0-7363-4691-B964-FF5B3AEA3F95} = {18453B51-25EB-4317-A4B3-B10518252E92} + {1B794B9C-9B8A-4D5A-9848-B51274BD1FC5} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {4E7F15D1-729E-4DA7-992A-C3A2C6054B37} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {3095C95A-F1F9-487A-A983-1B100A33E4C7} = {5948B0A5-7873-4DBB-BA03-EB283D6EA91B} + {CF3DA5F1-F98D-49C9-A980-27E570B38B8D} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {8DBEC8F3-908D-46B3-95CA-47EA138AB1A4} = {CF3DA5F1-F98D-49C9-A980-27E570B38B8D} + {CC7DE119-736D-4FC5-85DC-70A6770749F6} = {CF3DA5F1-F98D-49C9-A980-27E570B38B8D} + {EFE4A814-F58D-4C19-8F7F-B95F4EE343F0} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {1C84408D-A0A7-4513-AD9A-1BA137ABE62C} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {E4300D97-1D53-4029-9435-483FB7EC9621} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {84AB9951-3DBF-43A4-8F5D-AEED1102CE88} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {1F621382-08FB-45EA-B94C-96A7FECB9489} = {CF3DA5F1-F98D-49C9-A980-27E570B38B8D} + {FBA14F8A-9F14-4364-ABDB-B8AE81A0D755} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {A71557F2-D5FB-4772-9391-F7D18A3B6C44} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {05F3B23E-CF28-467B-AD3C-595EA4ED6B96} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {74ACD9D0-8B4C-42FA-A582-E93BF0075023} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D} = {AB797AF0-C12C-46DE-A157-7E25625C6200} + {49D8D2CF-AF68-40FA-951F-018247C97443} = {9B4F139F-7D26-435C-A561-89E65A67A8E5} + {732BF088-6AD7-4C4D-9A48-8074253596D4} = {B818988E-639C-4E6E-85C1-B231BCAD9DAB} + {B818988E-639C-4E6E-85C1-B231BCAD9DAB} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {29638A67-E79F-44FE-AC05-DA499EBA929E} = {2F3E1026-5054-4E1F-899B-F1A7F70F9912} + {24331E82-D7AF-45B1-ACF0-CA6C3B0B77DC} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {790E94F2-5393-47DF-AC52-D9247F5B243A} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {169BEA3D-2A81-47EE-A6C1-3F8719EEC1F6} = {DD089B8B-DA73-492A-9010-F772D1C178DA} + {AFEB799E-82C3-4D02-9D5C-766BB8DEF004} = {DD089B8B-DA73-492A-9010-F772D1C178DA} + {F50336DA-42D1-4DD1-A107-67AFEB8A33EE} = {1B8D5897-902E-4632-8698-E89CAF3DDF54} + {A516931E-EDBB-4FC3-BB94-1BB824D5BC61} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {BBCE36D1-6767-4ED1-B3E8-84D2567A962A} = {A516931E-EDBB-4FC3-BB94-1BB824D5BC61} + {73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {B0946844-DE0E-4C59-9391-C0EB649DBF4E} = {18453B51-25EB-4317-A4B3-B10518252E92} + {A1FE2CA0-8EF3-4EDB-9055-DD282E374E16} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB} + {EB3A7401-0DE3-476F-9E6F-057F1F4590FB} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {BF4CDE28-F0CC-482D-8392-C1C9BB4C368F} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB} + {7EB0CFB8-B668-4F3F-898D-80411095BC2F} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB} + {34BC9836-681D-43A5-BC39-E4FEE17FC528} = {08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C} + {CBB515F3-A0EF-43B5-A907-FD4E652DD66E} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {90CD37A9-C866-4D90-A3B1-8C87F53B845E} = {CBB515F3-A0EF-43B5-A907-FD4E652DD66E} + {3F20899B-C5E1-485F-808B-ADB1877EB3FD} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {3D42FCA2-5BD0-4624-9FCA-F4BF935B27AE} = {3F20899B-C5E1-485F-808B-ADB1877EB3FD} + {56CAA9F2-1882-4EFA-BAC0-9C3D804553F1} = {18453B51-25EB-4317-A4B3-B10518252E92} + {0D4A88A1-8AEE-49ED-BC2E-ED68C96F60AD} = {58C59255-281C-4595-8732-808158F1DC6E} + {5CBCBEA4-6038-48CA-B45D-C1D0F6B4ACA4} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {94A61AD7-2A2B-40DB-81F3-C59D596958A8} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {4B598AF7-BD7D-4544-A274-2CDDD98F4167} = {C6658DE0-2B2F-47F0-BB61-2CA66D435C09} + {99B171E6-0248-4402-836D-98947CD63772} = {1B8D5897-902E-4632-8698-E89CAF3DDF54} + {4332A6BC-434A-4AF5-A075-F1BBCDD28F5D} = {1B8D5897-902E-4632-8698-E89CAF3DDF54} + {832675FA-C597-4554-AE6B-18F189198A1F} = {1B8D5897-902E-4632-8698-E89CAF3DDF54} + {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} + {5ADDDFB1-E59B-4097-97B7-8C24E2D60463} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1} + {97C7E531-9D5F-43FD-AA19-BF24DA13B612} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {65F2AD97-3ECF-4BA6-8AAA-1E5882FDCE68} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1} + {690B0274-291F-4D9E-BA76-54EFF7D3E4BC} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1} + {060FD0BA-BD78-48E1-A8A7-4906A5AD5E39} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1} + {169A82A5-2DB3-40EA-801E-14C08D743DF7} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1} + {2CDF3E1C-267D-4198-B1C7-7E1F548FC120} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {01B96BB9-35E8-4364-ACB8-6D12A14D8DBA} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {47FBCB04-0C2D-453C-BE2F-7052CAC22524} = {EB3A7401-0DE3-476F-9E6F-057F1F4590FB} + {B32DB9B2-AD6C-48A5-8682-4373CB045185} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E} + {454652D5-E1BB-4D4B-9B21-9CEFC900C4FB} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} + {31089E79-694B-4F45-97AF-86D34A7B231E} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} + {6DDB9ECF-D454-4894-A262-A6BB3026E61E} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} + {16B570BC-E293-4A19-B20E-5C97BAF8476B} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} + {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {34FAB60D-7259-47B9-B50E-B533C7C3CFEC} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {19329441-2A59-4BAC-A1BE-BBAB70C93CA0} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {37D16EAF-ACD8-4105-8BD3-B2745819CFF8} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {3666CF13-1353-4620-9472-506670214A6A} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E} + {AA5ACF15-8647-4AC9-B9F5-73FCB92BE7E3} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E} + {DFFE6199-B5A7-4BA8-A5E1-77D0426C6468} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} + {9A6D67DE-51B1-456D-B25D-19E0356C8F60} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {44A03CF6-4EB6-434C-90D1-FF8142FE394E} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {5F80663C-B072-49DE-9A67-FD804BAD787E} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} + {630E2D93-7F7D-4A8A-BB52-D8095A1F24D9} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {59E7614A-3630-4C39-9C7F-9E12BC95D37E} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} + {2F3E1026-5054-4E1F-899B-F1A7F70F9912} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C} = {2F3E1026-5054-4E1F-899B-F1A7F70F9912} + {BF934627-F531-44FB-BEC2-ECA801FF31E7} = {DD089B8B-DA73-492A-9010-F772D1C178DA} + {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348} = {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} + {3BED411B-79B5-4CCC-BD46-9549A427B908} = {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} + {6CC5FBC7-D3D7-4FE3-AD08-C67939BDB24D} = {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} + {FA5E857F-B173-4B5D-8049-B817A210DEF5} = {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} + {A51F9683-DA9F-45E7-82DE-1E261ACD6D68} = {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} + {66E2E2CF-967F-4564-89E8-F46FA973C99B} = {986E5482-0482-448C-B9E4-EC67A9474B85} + {9DF81143-2F39-4CFB-9DA3-902279010622} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {75E08B0E-A41A-425C-9DCA-155505CE41CD} = {9DF81143-2F39-4CFB-9DA3-902279010622} + {BD120D97-4862-469E-B2CF-4109F7F21C20} = {9DF81143-2F39-4CFB-9DA3-902279010622} + {8A3443F3-D40E-44B9-9805-B4CB7A3F022C} = {9DF81143-2F39-4CFB-9DA3-902279010622} + {FA2B2B44-7E3E-444B-A157-7526B376E9CA} = {9DF81143-2F39-4CFB-9DA3-902279010622} + {DF0CA7E2-F5DF-40ED-91B6-748767084FC7} = {9DF81143-2F39-4CFB-9DA3-902279010622} + {DB20B168-CD90-41F2-BE08-3D8C6F142459} = {9DF81143-2F39-4CFB-9DA3-902279010622} + {8A050229-DB79-4E0B-9AFF-7565E87F2954} = {B08B4E00-C2AB-48F3-8389-449F42AEF179} + {0A04B1FD-06C0-4271-A910-A08C263DBC44} = {0354F050-3992-4DD4-B0EE-5FBA04AC72B6} + {9B80A705-2E31-4012-964A-83963DCDB384} = {0354F050-3992-4DD4-B0EE-5FBA04AC72B6} + {CD7DC0D1-FFDC-417A-89BE-7F32408F583E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {70593549-8B26-4D63-9857-6BA8BB3E31DB} = {CD7DC0D1-FFDC-417A-89BE-7F32408F583E} + {E7137FB0-1988-4562-AD8D-D0D9D2EE85F6} = {CD7DC0D1-FFDC-417A-89BE-7F32408F583E} + {7FD1FD1E-5778-4065-AAA5-1F878129EF77} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} + {EB24F9FE-D7BD-4FCC-907E-AE400288C2A5} = {7FD1FD1E-5778-4065-AAA5-1F878129EF77} + {9CA02818-F7EB-4A0B-B27B-BC74ACD499C9} = {7FD1FD1E-5778-4065-AAA5-1F878129EF77} + {C583AF05-D517-4B7F-8955-6B61500ED3D8} = {7FD1FD1E-5778-4065-AAA5-1F878129EF77} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D4B5CEAA-7D70-4FCB-A68E-B03FBE5E0E5E} + EndGlobalSection +EndGlobal diff --git a/Elsa.sln.DotSettings b/Elsa.sln.DotSettings new file mode 100644 index 0000000..0895687 --- /dev/null +++ b/Elsa.sln.DotSettings @@ -0,0 +1,29 @@ + + False + 1000 + 1 + False + True + IV + UI + True + True + True + True + EF + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ed7211f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Elsa Workflows + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 0000000..39a5a3a --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/NuGet.rar b/NuGet.rar new file mode 100644 index 0000000..228c610 Binary files /dev/null and b/NuGet.rar differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..eefa67e --- /dev/null +++ b/README.md @@ -0,0 +1,185 @@ +# ELSA 3.0 + +![Elsa Workflows](./design/artwork/elsa-v3-avatar.png) + +[![Elsa 3 Prerelease](https://github.com/elsa-workflows/elsa-core/actions/workflows/packages.yml/badge.svg)](https://github.com/elsa-workflows/elsa-core/actions/workflows/packages.yml) +[![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Elsa)](https://www.nuget.org/packages/Elsa/) +[![feedz.io](https://img.shields.io/badge/endpoint.svg?url=https%3A%2F%2Ff.feedz.io%2Felsa-workflows%2Felsa-3%2Fshield%2FElsa%2Flatest)](https://f.feedz.io/elsa-workflows/elsa-3/nuget/index.json) +[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/elsaworkflows/elsa-v3?label=docker&logo=docker)](https://hub.docker.com/repository/docker/elsaworkflows/elsa-v3) +[![Discord](https://img.shields.io/discord/814605913783795763?label=discord&logo=discord)](https://discord.gg/hhChk5H472) +[![Stack Overflow questions](https://img.shields.io/badge/stackoverflow-elsa_workflows-orange.svg)]( http://stackoverflow.com/questions/tagged/elsa-workflows ) +[![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20Elsa%20Guru-006BFF)](https://gurubase.io/g/elsa) + +### [For Elsa 2, Click Here](https://github.com/elsa-workflows/elsa-core/tree/2.x) + +## Introduction +Elsa is a powerful workflow library that enables workflow execution within any .NET application. Elsa allows you to define workflows in various ways, including: + +- Writing C# code +- Using a visual designer +- Specifying workflows in JSON + +![Elsa ships with a powerful visual designer](./design/screenshots/http-hello-world-workflow-designer.png) + +### Try with Docker + +To give the Elsa Studio + Elsa Server a quick spin, you can run the following command to start the Elsa Docker container: + +```shell +docker pull elsaworkflows/elsa-server-and-studio-v3:latest +docker run -t -i -e ASPNETCORE_ENVIRONMENT='Development' -e HTTP_PORTS=8080 -e HTTP__BASEURL=http://localhost:13000 -p 13000:8080 elsaworkflows/elsa-server-and-studio-v3:latest +``` + +> This Docker image is based on a reference ASP.NET application that hosts both the workflow server and designer and is not intended for production use. + +By default, you can access http://localhost:13000 and log in with: + +``` + Username: admin + Password: password +``` + +## Table of Contents + +- [Documentation](#documentation) +- [Known Issues and Limitations](#known-issues-and-limitations) +- [Features](#features) +- [Roadmap](#roadmap) +- [Use Cases](#use-cases) +- [Programmatic Workflows](#programmatic-workflows) +- [Designed Workflows](#designed-workflows) +- [Contributing](#contributing) +- [Support](#support) + - [Community Support](#community-support) + - [Enterprise Support](#enterprise-support) + +## Documentation + +[Elsa Documentation Website](https://docs.elsaworkflows.io/). + +## Known Issues and Limitations + +Elsa is continually evolving, and while it offers powerful capabilities, there are some known limitations and ongoing work: + +- Documentation is still a work in progress. +- Input/Output is not yet implemented in the Workflow Instance Viewer. +- Starting workflows from the designer is currently supported only for workflows that do not require input and do not start with a trigger; this is planned for a future release. +- The designer currently only supports Flowchart activities. Support for Sequence and StateMachine activities is planned for a future release. +- UI input validation is not yet implemented. + +## Features + +Elsa offers a wide range of features for building and executing workflows, including: + +- Execution of workflows in any .NET application with support for .NET 6 and beyond. +- Support for both short-running and long-running workflows. +- A programming model loosely inspired by Windows Workflow Foundation. +- A web-based drag & drop designer with support for custom activities. +- Native support for activity composition, including activities like `Sequence`, `Flowchart`, and `ForEach`. +- Parallel execution of activities. +- Built-in activities for common scenarios, such as sending emails, making HTTP calls, scheduling tasks, sending and receiving messages, and more. +- Workflow versioning and migration via API. +- Easy integration with external applications via HTTP, message queues, and more. +- Actor model for increased workflow throughput. +- Dynamic expressions with support for C#, JavaScript, Python, and Liquid. +- Persistence agnostic, with support for Entity Framework Core, MongoDB, and Dapper out of the box. +- [Elsa Studio](https://github.com/elsa-workflows/elsa-studio): a modular Blazor dashboard app for managing and designing workflows. + +## Roadmap + +See #3232 + +## Use Cases + +Elsa can be used in a variety of scenarios, including: + +- Long-running workflows such as order fulfillment and product approval. +- Short-running workflows such as sending emails and generating PDFs. +- Scheduled workflows such as sending daily reports. +- Event-driven workflows such as sending welcome emails when a user signs up. + +## Coding Workflows + +Elsa allows you to define workflows in code using C#. The following example shows how to receive HTTP requests and send an email in response: + +```csharp +public class SendEmailWorkflow : WorkflowBase +{ + protected override void Build(IWorkflowBuilder builder) + { + builder.Root = new Sequence + { + Activities = + { + new HttpEndpoint + { + Path = new("/send-email"), + SupportedMethods = new(new[] { HttpMethods.Post }), + CanStartWorkflow = true + }, + new SendEmail + { + From = new("alic@acme.com"), + To = new(new[]{ "bob@acme.com" }), + Subject = new("Your workflow has been triggered!"), + Body = new("Hello!") + } + } + }; + } +} +``` + +## Designing Workflows + +Elsa allows you to define workflows using a visual designer. The following example shows how to receive HTTP requests and send an email in response: + +![Elsa ships with a powerful visual designer](./design/screenshots/http-send-email-workflow-designer.png) + +## Contributing + +We welcome contributions from the community and are pleased that you are interested in helping to improve the Elsa Workflow project! Here are the steps to contribute to our project: + +### 1. Fork and Clone the Repo +To get started, you'll need to fork the repository to your own GitHub account. You can do this by navigating to the [Elsa Workflow GitHub repository](https://github.com/elsa-workflows/elsa-core) and clicking the "Fork" button in the top-right corner of the page. Once you have forked the repo, you can clone it to your local machine using the following command: + +```bash +git clone https://github.com/YOUR_USERNAME/elsa-core.git +``` +Replace `YOUR_USERNAME` with your GitHub username. For more information on forking a repo, check out the GitHub documentation [here](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo). + +Incorporating the details about the "apps" folder and its projects into the second point about opening the `Elsa.sln` using your favorite IDE, we can expand the instructions to guide developers on where to start and what projects they might want to explore first. Here's an updated version of that section with the additional information: + +### 2. Open `Elsa.sln` Using Your Favorite IDE +After cloning the repository, navigate to the cloned directory and open the `Elsa.sln` solution file with your preferred IDE that supports .NET development, such as Visual Studio, JetBrains Rider, or Visual Studio Code with the appropriate extensions. + +Within the solution, you will find an "apps" folder containing three projects designed to help you get started and explore the capabilities of Elsa Workflow: + +- **Elsa.Server.Web**: This project is a reference ASP.NET Core application that acts as a workflow server. It's a great starting point if you want to understand how Elsa functions as a server-side workflow engine. + +- **Elsa.ServerAndStudio.Web**: This project serves a dual purpose. Like `Elsa.Server.Web`, it acts as a workflow server. Additionally, it hosts the Elsa Studio Blazor WebAssembly app. This is the perfect project to run if you want to see the full capabilities of Elsa, including both the server aspects and the client-side studio experience in one application. + +- **Elsa.Studio.Web**: This project is a reference Blazor WebAssembly application that solely hosts the Elsa Studio Blazor WebAssembly app. It requires a running Elsa server application to connect to. Use this project if you're interested in focusing on the Elsa Studio UI and its interactions with an Elsa workflow server. + +### 3. Submit a PR with Your Changes +Once you have made your changes, commit them and push them back to your fork. Then, navigate to the original Elsa Workflow repository and create a new Pull Request. Ensure your PR description clearly describes the changes and any relevant information that will help the reviewers understand your contributions. For a detailed guide on creating a pull request, visit [Creating a pull request from a fork](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork). + +### 4. Open an Issue First +Before you start working on your changes or submit a pull request, please open an issue to discuss what you would like to do. This step is crucial as it ensures you don't spend time working on something that might not align with the project's goals or might already be under development by someone else. You can open an issue [here](https://github.com/elsa-workflows/elsa-core/issues). + +This approach helps us streamline contributions and ensures that your efforts are aligned with the project's needs and priorities. We look forward to your contributions and are here to support you throughout the process. Thank you for contributing to the Elsa Workflow project! + +## Support + +There are various ways to get support for Elsa Workflows, ranging from community-driven channels to enterprise-level services. + +### Community Support + +Elsa has an active and helpful community where you can find support through multiple channels: +- [GitHub Issues](https://github.com/elsa-workflows/elsa-core/issues) for bug reports and feature requests. +- [GitHub Discussions](https://github.com/elsa-workflows/elsa-core/discussions) for open-ended conversations, questions, and community-driven support. +- [Discord](https://discord.gg/hhChk5H472) for real-time support and interaction with the Elsa community. +- [StackOverflow](https://stackoverflow.com/questions/tagged/elsa-workflows) for searching or asking technical questions. + +### Enterprise Support +For organizations requiring professional support and long-term commitment, [ELSA-X](https://elsa-x.io) offers enterprise-level services and ensures continuity and future development of the Elsa framework, provides custom solutions, and develops commercial extensions tailored to enterprise needs. diff --git a/build.cmd b/build.cmd new file mode 100644 index 0000000..b08cc59 --- /dev/null +++ b/build.cmd @@ -0,0 +1,7 @@ +:; set -eo pipefail +:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) +:; ${SCRIPT_DIR}/build.sh "$@" +:; exit $? + +@ECHO OFF +powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %* diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..4634dc0 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,74 @@ +[CmdletBinding()] +Param( + [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] + [string[]]$BuildArguments +) + +Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)" + +Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 } +$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent + +########################################################################### +# CONFIGURATION +########################################################################### + +$BuildProjectFile = "$PSScriptRoot\build\_build.csproj" +$TempDirectory = "$PSScriptRoot\\.nuke\temp" + +$DotNetGlobalFile = "$PSScriptRoot\\global.json" +$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1" +$DotNetChannel = "STS" + +$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1 +$env:DOTNET_NOLOGO = 1 + +########################################################################### +# EXECUTION +########################################################################### + +function ExecSafe([scriptblock] $cmd) { + & $cmd + if ($LASTEXITCODE) { exit $LASTEXITCODE } +} + +# If dotnet CLI is installed globally and it matches requested version, use for execution +if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and ` + $(dotnet --version) -and $LASTEXITCODE -eq 0) { + $env:DOTNET_EXE = (Get-Command "dotnet").Path +} +else { + # Download install script + $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1" + New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile) + + # If global.json exists, load expected version + if (Test-Path $DotNetGlobalFile) { + $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json) + if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) { + $DotNetVersion = $DotNetGlobal.sdk.version + } + } + + # Install by channel or version + $DotNetDirectory = "$TempDirectory\dotnet-win" + if (!(Test-Path variable:DotNetVersion)) { + ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath } + } else { + ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath } + } + $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe" + $env:PATH = "$DotNetDirectory;$env:PATH" +} + +Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)" + +if (Test-Path env:NUKE_ENTERPRISE_TOKEN) { + & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null + & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null +} + +ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet } +ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments } diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..fdff0c6 --- /dev/null +++ b/build.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +bash --version 2>&1 | head -n 1 + +set -eo pipefail +SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) + +########################################################################### +# CONFIGURATION +########################################################################### + +BUILD_PROJECT_FILE="$SCRIPT_DIR/build/_build.csproj" +TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp" + +DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json" +DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh" +DOTNET_CHANNEL="STS" + +export DOTNET_CLI_TELEMETRY_OPTOUT=1 +export DOTNET_NOLOGO=1 + +########################################################################### +# EXECUTION +########################################################################### + +function FirstJsonValue { + perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}" +} + +# If dotnet CLI is installed globally and it matches requested version, use for execution +if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then + export DOTNET_EXE="$(command -v dotnet)" +else + # Download install script + DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh" + mkdir -p "$TEMP_DIRECTORY" + curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL" + chmod +x "$DOTNET_INSTALL_FILE" + + # If global.json exists, load expected version + if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then + DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")") + if [[ "$DOTNET_VERSION" == "" ]]; then + unset DOTNET_VERSION + fi + fi + + # Install by channel or version + DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix" + if [[ -z ${DOTNET_VERSION+x} ]]; then + "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path + else + "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path + fi + export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet" + export PATH="$DOTNET_DIRECTORY:$PATH" +fi + +echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)" + +if [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && "$NUKE_ENTERPRISE_TOKEN" != "" ]]; then + "$DOTNET_EXE" nuget remove source "nuke-enterprise" &>/dev/null || true + "$DOTNET_EXE" nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password "$NUKE_ENTERPRISE_TOKEN" --store-password-in-clear-text &>/dev/null || true +fi + +"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet +"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@" diff --git a/build/.editorconfig b/build/.editorconfig new file mode 100644 index 0000000..31e43dc --- /dev/null +++ b/build/.editorconfig @@ -0,0 +1,11 @@ +[*.cs] +dotnet_style_qualification_for_field = false:warning +dotnet_style_qualification_for_property = false:warning +dotnet_style_qualification_for_method = false:warning +dotnet_style_qualification_for_event = false:warning +dotnet_style_require_accessibility_modifiers = never:warning + +csharp_style_expression_bodied_methods = true:silent +csharp_style_expression_bodied_properties = true:warning +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_accessors = true:warning diff --git a/build/Build.CI.GitHubActions.cs b/build/Build.CI.GitHubActions.cs new file mode 100644 index 0000000..1d2847d --- /dev/null +++ b/build/Build.CI.GitHubActions.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using Nuke.Common.CI.GitHubActions; +using Nuke.Common.CI.GitHubActions.Configuration; +using Nuke.Common.Execution; +using Nuke.Common.Utilities; +using Nuke.Components; + +[CustomGitHubActions( + "pr", + GitHubActionsImage.UbuntuLatest, + OnPullRequestBranches = ["main"], + OnPullRequestIncludePaths = ["**/*"], + PublishArtifacts = false, + InvokedTargets = [nameof(ICompile.Compile), nameof(ITest.Test), nameof(IPack.Pack)], + CacheKeyFiles = [], + ConcurrencyCancelInProgress = true + ) +] +public partial class Build; + +class CustomGitHubActionsAttribute : GitHubActionsAttribute +{ + public CustomGitHubActionsAttribute(string name, GitHubActionsImage image, params GitHubActionsImage[] images) : base(name, image, images) + { + } + + protected override GitHubActionsJob GetJobs(GitHubActionsImage image, IReadOnlyCollection relevantTargets) + { + var job = base.GetJobs(image, relevantTargets); + + var newSteps = new List(job.Steps); + + // only need to list the ones that are missing from default image + newSteps.Insert(0, new GitHubActionsSetupDotNetStep(["9.x"])); + + job.Steps = newSteps.ToArray(); + return job; + } +} + +class GitHubActionsSetupDotNetStep : GitHubActionsStep +{ + public GitHubActionsSetupDotNetStep(string[] versions) + { + Versions = versions; + } + + string[] Versions { get; } + + public override void Write(CustomFileWriter writer) + { + writer.WriteLine("- uses: actions/setup-dotnet@v4"); + + using (writer.Indent()) + { + writer.WriteLine("with:"); + using (writer.Indent()) + { + writer.WriteLine("dotnet-version: |"); + using (writer.Indent()) + { + foreach (var version in Versions) + { + writer.WriteLine(version); + } + } + } + } + } +} \ No newline at end of file diff --git a/build/Build.cs b/build/Build.cs new file mode 100644 index 0000000..840f70e --- /dev/null +++ b/build/Build.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Nuke.Common; +using Nuke.Common.CI; +using Nuke.Common.CI.GitHubActions; +using Nuke.Common.Git; +using Nuke.Common.IO; +using Nuke.Common.ProjectModel; +using Nuke.Common.Tooling; +using Nuke.Common.Tools.Coverlet; +using Nuke.Common.Tools.DotNet; +using Nuke.Common.Utilities.Collections; +using Nuke.Components; +using Serilog; + +[ShutdownDotNetAfterServerBuild] +partial class Build : NukeBuild, ITest, IPack +{ + public static int Main() => Execute(x => ((ICompile)x).Compile); + + [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")] + readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release; + + [GitRepository] readonly GitRepository GitRepository; + + AbsolutePath SourceDirectory => RootDirectory / "src"; + + public AbsolutePath PackagesDirectory => RootDirectory / "packages"; + public AbsolutePath TestResultDirectory => RootDirectory / "testresults"; + + string TagVersion => GitRepository.Tags.SingleOrDefault(x => "v".StartsWith(x))?[1..]; + bool IsTaggedBuild => !string.IsNullOrWhiteSpace(TagVersion); + + string VersionSuffix; + + [Parameter] string Version; + + [Parameter] bool AnalyseCode; + + protected override void OnBuildInitialized() + { + VersionSuffix = !IsTaggedBuild + ? $"preview-{DateTime.UtcNow:yyyyMMdd-HHmm}" + : ""; + + if (IsLocalBuild) + { + VersionSuffix = $"dev-{DateTime.UtcNow:yyyyMMdd-HHmm}"; + } + + Log.Information("BUILD SETUP:\nConfiguration: {Configuration}\nVersion Suffix: {VersionSuffix}\nVersion: {Version}\nTagged Build: {IsTaggedBuild}\nAnalyse Code: {AnalyseCode}", + Configuration, VersionSuffix, Version, IsTaggedBuild, AnalyseCode); + } + + Target Clean => _ => _ + .Before(x => x.Restore) + .Executes(() => + { + SourceDirectory.GlobDirectories("**/bin", "**/obj").ForEach(x => x.DeleteDirectory()); + ((IHazArtifacts)this).ArtifactsDirectory.CreateOrCleanDirectory(); + + TestResultDirectory.CreateOrCleanDirectory(); + }); + + public Configure RestoreSettings => _ => _ + .SetVerbosity(DotNetVerbosity.quiet); + + public Configure CompileSettings => _ => _ + // ensure we don't generate too much output in CI run + // 0 Turns off emission of all warning messages + // 1 Displays severe warning messages + .SetWarningLevel(IsServerBuild ? 0 : 1); + + public IEnumerable TestProjects => + ((IHazSolution)this).Solution.AllProjects.Where(x => x.Name.EndsWith("Tests")); + + public Configure TestProjectSettings => (testSettings, project) => testSettings + .When(_ => GitHubActions.Instance is not null, settings => settings.AddLoggers("GitHubActions;report-warnings=false")) + .When(_ => AnalyseCode, settings => settings + .SetCoverletOutputFormat(CoverletOutputFormat.opencover) + .EnableCollectCoverage() + .SetResultsDirectory(TestResultDirectory) + .SetCoverletOutput($"{TestResultDirectory}/opencoverCoverage.xml") + .AddProcessAdditionalArguments("--collect:\"XPlat Code Coverage;Format=opencover\"") + ); +} \ No newline at end of file diff --git a/build/Directory.Build.props b/build/Directory.Build.props new file mode 100644 index 0000000..61fd9f4 --- /dev/null +++ b/build/Directory.Build.props @@ -0,0 +1,7 @@ + + + + false + + + \ No newline at end of file diff --git a/build/Directory.Build.targets b/build/Directory.Build.targets new file mode 100644 index 0000000..2532609 --- /dev/null +++ b/build/Directory.Build.targets @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/build/_build.csproj b/build/_build.csproj new file mode 100644 index 0000000..465dc8f --- /dev/null +++ b/build/_build.csproj @@ -0,0 +1,30 @@ + + + + Exe + net9.0 + + CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006 + .. + .. + 1 + true + true + false + true + false + false + enable + all + + + + + + + + + + + + diff --git a/build/_build.csproj.DotSettings b/build/_build.csproj.DotSettings new file mode 100644 index 0000000..c815d36 --- /dev/null +++ b/build/_build.csproj.DotSettings @@ -0,0 +1,31 @@ + + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + Implicit + Implicit + ExpressionBody + 0 + NEXT_LINE + True + False + 120 + IF_OWNER_IS_SINGLE_LINE + WRAP_IF_LONG + False + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + True + True + True + True + True + True + True + True + True + True diff --git a/design/artwork/android-elsa-portrait.png b/design/artwork/android-elsa-portrait.png new file mode 100644 index 0000000..e3f5741 Binary files /dev/null and b/design/artwork/android-elsa-portrait.png differ diff --git a/design/artwork/creative-elsa-animation.gif b/design/artwork/creative-elsa-animation.gif new file mode 100644 index 0000000..74d1954 Binary files /dev/null and b/design/artwork/creative-elsa-animation.gif differ diff --git a/design/artwork/elsa-3.1-art.png b/design/artwork/elsa-3.1-art.png new file mode 100644 index 0000000..f8b5a29 Binary files /dev/null and b/design/artwork/elsa-3.1-art.png differ diff --git a/design/artwork/elsa-logo-art.png b/design/artwork/elsa-logo-art.png new file mode 100644 index 0000000..8a44fdc Binary files /dev/null and b/design/artwork/elsa-logo-art.png differ diff --git a/design/artwork/elsa-logo-art.psd b/design/artwork/elsa-logo-art.psd new file mode 100644 index 0000000..32bf258 Binary files /dev/null and b/design/artwork/elsa-logo-art.psd differ diff --git a/design/artwork/elsa-v3-avatar.png b/design/artwork/elsa-v3-avatar.png new file mode 100644 index 0000000..d87a1da Binary files /dev/null and b/design/artwork/elsa-v3-avatar.png differ diff --git a/design/artwork/glass.ai b/design/artwork/glass.ai new file mode 100644 index 0000000..66637a0 --- /dev/null +++ b/design/artwork/glass.ai @@ -0,0 +1,907 @@ +%PDF-1.6 %âãÏÓ +1 0 obj <>/OCGs[23 0 R 24 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + glass + + + Adobe Illustrator 26.5 (Macintosh) + 2023-12-25T11:46:50+01:00 + 2023-12-25T11:46:50+01:00 + 2023-12-25T11:46:50+01:00 + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXUGKtcR4Yq7gvh irXpp4Yq7008MVaMMR/ZxVabWA9UH44qtNlanrGPvOKrTp1kesQ+8/1xVadJ089YR95/riq06Lph 6wD72/riq06FpJ626/e39cVaPl/Rz1tl+9v64qtPlzRD1tV+9v64q0fLOhH/AI9F/wCCb+uKtf4X 0H/ljX/gn/rjatf4V8v/APLGv/BP/XFWv8J+Xv8AliX/AIJ/642rX+EvLv8AyxL/AME//NWNq7/C Xl3/AJYl/wCCf/mrG1b/AMJ+Xv8AliX/AIJ/642rv8KeXv8AljX/AIJ/64q3/hXy/wD8sa/8E/8A XG1d/hbQP+WNf+Cf+uNq3/hfQf8AlkX72/rjat/4Z0L/AJZF+9v64q7/AA1of/LIv3t/XFWx5d0l d44TE/Z43dWH3HFWjFqdj8UUjXtsPtQyf3oHir/tfI4qjra5huYVmhbkjfeD3BHjiqrirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqXun1PUEl TaC7PCVewl/ZYf63Q4qmA6Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYqg9Y/458jD7SFXU+BDA4qi1+yMVbxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoTVt9Om+Q/WMVRUf2BireKuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVC6oK2E3yH 6xiqvD/driq/FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYqh9RFbKX5D9YxVUt/7lcVVMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdiqhfCtpJ8v44qutd7dPl/HFVXFXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqo3grbP8v44q6yNbWM+38cVVsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqnci sD/598VWWBrZxH2/jiqvirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVWTisTYqo6aa2MXy/icVROKuxV2KuxV2KuxV2KuxV2KuxVLtZ8w6Po0Il1G 5WAN9hN2dv8AVRascVYw/wCb/lhWIEF4wHRhHHQ/fIDirX/K4fLP/LNe/wDARf8AVXFVrfnH5XUV a3vAPEpCP+ZuKqD/AJ4+UF/4971j/kxxf9VcVWf8r18o/wDLJf8A/IuH/qtirv8AlevlH/lkv/8A kXD/ANVsVd/yvXyj/wAsl/8A8i4f+q2Ktp+eflBnCm2vkB6s0cVB90pOKsw0HzPoWvQGbSrtLgL/ AHke6yJX+ZGow+7FU0xV2KuxV2KuxV2KuxV2KuxV2KrZRVCMVQ+lGunw/L+JxVFYq7FXYq7FXYq7 FXYq7FXYql3mHWYdG0e51GUchAvwJ/M7Hii/SxxV8/6rq13qV5LfX8xkmkNWZtgB2UeAHYYVQlLt ow9vaTzo26vHE5U/7KmTGKZ3ALUc0AaMh80NLD5gf7NjcIPaFyfvIw+DP+afkj8xj/nD5hDNpWtM atZXLHxMUh/hj4M/5p+S/mMf84fMIe5tLy14/WYJIOdeHqIyVp1pyA8cjKEo8xTOOSMuRBdbWl5d cvq0Ek/CnP00Z6V6V4g+GMYSlyFrLJGPMgK36H1j/lguf+RMn9Ml4M/5p+TD8xj/AJw+Yd+h9Y/5 YLn/AJEyf0x8Gf8ANPyX8xj/AJw+YWTabqUMZkmtJ441+07xuqj5kjAcUxuQWUc0CaBHzX6RrV/p GoQ6hp8xhuYTVWHQjurDup7jINj6b8r6/Br+g2mqwjiLhP3kfXhIpKuv0MDgVNcVdirsVdirsVdi rsVdirsVcwqMVQejmumwf6v8TiqMxV2KuxV2KuxV2KuxV2KuxV57+eN5Na+UbZojQyX0aNXw9KVv 1rhCvJ/J2mjU7uW7vayw23HgjD4Wdqn5fDTp8szdFhEjZ5B1/aGoMIgDmWfVzbuidXFXVxVhn5jN T9H/APPb/jTNb2h/D8f0O27L/i+H6Xfly1f0h/zx/wCN8ez/AOL4fpXtT+H4/oZnXNk6l1cVdXGl t53500iDT76Ka2ASC6DH0h0V0pyoOwPIZqNZhEJWORd9oNQZxIPMPWfyHkd/J10GNQl/KqjwHpRG n3nMIue9HwK7FXYq7FXYq7FXYq7FXYq0xoCcVQeimul2/wDq/wATiqNxV2KuxV2KuxV2KuxV2Kux V5p+fxp5Os/+2jH/AMmJsIV59+XUyGxu4gfjWVWYezLQf8RObXs8+kh0vagPED5MurmwdVbq4rbq 4rbCvzIb/jnf89v+Zea3tH+H4/odx2V/F8P0u/Ldv+Oj/wA8f+ZmPZ38Xw/Svav8Px/QzWubJ09u rituritsK/Mhv+Od/wA9v+NM1vaP8Px/Q7jsr+L4fpekfkCa+Trz/toyf8mIc1hdu9LwK7FXYq7F XYq7FXYq7FXYqtlNIziqD0I10m2/1T+s4qjsVdirsVdirsVdirsVdirsVeZ/85AGnk2z/wC2jF/y YmxV4v5W1waVqiySki1lHp3AFTQHo1B/KfwrmVpc3hzs8nE1mn8WFD6hyepJIjoroQyMAVYGoIPQ g5vQbebIpuuKHVxVhX5kn/jnf89v+ZeaztH+H4/odx2T/F8P0u/LY/8AHR/54/8AMzHs7+L4fpXt b+H4/oZrXNm6d1cVakkSNGkkYJGgLO7GgAG5JJxJpIBJoPKvM2tfpXVHmQ/6PH+7tx/kD9r/AGR3 zQ6nN4k76PS6TB4cK69Xtf8Azj+a+Tbz/toy/wDJiHMZynpmKuxV2KuxV2KuxV2KuxV2KrJ/7psV QWgGuj2v+qf1nFUwxV2KuxV2KuxV2KuxV2KuxV5j/wA5CGnkyy/7aMX/ACYnxV4PFpeoTaZPqcUL PZWrpFcyruI2krw5eAPGlfHCqceXPOdzpirbXSm4shsoH24/9UnqPY5m6fWGGx3i6/VaCOTeO0me adr2k6iB9VuUd2/3UTxk26/AaHNrjzwnyLpMumyY/qCPrlrQwj8yz/xzf+e3/MvNZ2l/D8f0O57J /i+H6Xflof8Ajpf88f8AmZj2b/F8P0r2t/D8f0M3rmzdMl2o+YNI04MLq5RZF/3Sp5Sbio+EVIr7 5VkzwhzLkYtNkyfSGB+ZPONzqoNvADb2PdK/HJvsXI/4iPxzU6jVnJsNou70mhGLc7y+5KbjS9Qt tPtNQnhaO0vmlW0kbb1PR48yo60BcCv9Mw3Pe8f849mvky9/7aMv/JiDAr07FXYq7FXYq7FXYq7F XYq7FVO5/uH/AM++KoLy6a6LaH/IP/EjiqY4q7FXYq7FXYq7FXYq7FXYq8v/AOchzTyVZf8AbSi/ 5MT4hUo/5x2ihn0zzBDMiywyPAkkbgMrKyyAhgdiDhKojzl+QdpdyPd+WZ1spG3awn5GGvf03HJk +RBHyGNq8k8w+SvNXl4k6tp0tvFWguABJCSen71OSVPhWuKq+ieedTsGEd0xvLbuJD+8X/Vc7n5N +GZuHWzhz3Dr9R2dCe8fSUV551Wy1K10u5tJOcZ9cMOjK37uqsOxyzXZYzESPP8AQ1dnYZY5TjId 36WvI+r2OmWuqXN3JxQejxQbs5/efCo7nBossYCRPl+lPaOGWSUBHz/QhNa876pqDFLdzZ2tdkjJ Dkf5Tjf6BT6crza2c+WwbdP2fCG59Ulnl3yP5s8wkHStOlmgJoblgI4RvQ/vH4qaeANcw3Peu+Tf yEsbKRLzzLOt/OpqtjDUW4I/nYhWk+VAPmMVS3/nI2OOGPy3FEojjQXioigBQB6AAAHQYhU9/wCc eDXyVe/9tKX/AJMQYCr1DFXYq7FXYq7FXYq7FXYq7FVK6/3nf5fxxVBeW/8Ajh2n+of+JHFUyxV2 KuxV2KuxV2KuxV2KuxV5b/zkUaeSbL/tpRf8mJ8QqV/842mtjrv/ABlt/wDiMmEq9mwKtlijljaK VBJG4KujAFSDsQQeuKvIPzJ/JG0uIJdV8qxCC7QF5tLT+7lHU+iP2G/yeh7U7lXgz80Yo4KupIZS KEEdQRircSyyyJFEhklkIVEUEszE0AAG5JOKvefy5/JC3s1h1TzRGlxdEB49NPxRxk9BKOjsPDp8 8bCN7evoiRoqIoRFACqooAB0AAwJbxV4l/zkqaf4c/6Pf+ZGEKnf/OOpr5Jvf+2lL/yYgwFXqWKu xV2KuxV2KuxV2KuxV2KqN3/vM/y/jiqC8s/8cKz/ANQ/8SOKpnirsVdirsVdirsVdirsVdiryv8A 5yNNPJFj/wBtOL/qHnwhUq/5xpNbHXv+Mtv/AMRkxKvacCuxV2Kvm/8AP7yvb6R5mt9UtRwh1lJJ JU6/6REw9Rh7MJFPzrkrQAr/APOPPly01LzFe6vdASfodI/q8ZFaTTlwsn+wWNqe5r2wFL6JwK7F XYq8P/5yZYj/AA3/ANHv/YvhCp5/zjka+SL7/tpy/wDUPBiVeqYFdirsVdirsVdirsVdirsVUbz/ AHmk+X8cVS/yoxby/Zk/yt/xM4qm2KuxV2KuxV2KuxV2KuxV2KvK/wDnI5HbyLaMoqI9SiZz4D0Z lr97DEK8s/J38wbfylr8q6gSNJ1JViunUVMboT6ctB1C8mDU7H6MKvqCxv7K/tY7uyuI7m2lFY5o mDow9mWowKr4q7FXhn/OTpp/hr/o9/7F8IV3/OMRr/iX/oy/7GMSr3PArsVQ+oajYadaPd39xHa2 sYq80zBEH0nFXy1+bnn+Hzd5iWSyqNKsEMNmWFC5Jq8tDuOdBQeAHfCr1n/nHFHXyLdswoJNSlZD 4j0YVr96nAVeqYq7FXYq7FXYq7FXYq7FXYqo3v8AvLJ8h+vFUu8o/wDKO2X+q3/E2xKpvirsVdir sVdirsVdirsVdiqTecfLVt5m8tX2iztwF0n7qWleEqENG/0MBX2xV8e69oeqaDqk+l6pA1veW7UZ D0I7Mp/aVuxGFUHFdXENRFK8YPXgxWv3YqqfpK//AOWmX/g2/rirv0lf/wDLTL/wbf1xVTlup5qe rK8nH7PNi1K+FcVdFdTw19KV4+X2uDFa08aYqqfpK/8A+WmX/g2/rirv0lf/APLTL/wbf1xVTlup 5qerK8nH7PNi1K+FcVRmg6HqmvapBpelwNcXlw1FQdAO7Mf2VXuTir7C8neWrbyz5asdFgbmLVP3 stKc5XJaR/pYmntgVOcVdirsVdirsVdirsVdirsVUb3/AHlk+Q/XiqXeUv8AlHbL/Vb/AIm2JVN8 VdirsVdirsVdirsVdirsVdiqS+ZvJvlrzNbC31qxS6CV9KXdJUr/ACSKVYfKtMVYFJ/zjZ5Ddyy3 mpxg9EWaCg+XKBj+OKrf+hafIv8Ay36p/wAjbf8A6oYq7/oWnyL/AMt+qf8AI23/AOqGKu/6Fp8i /wDLfqn/ACNt/wDqhirv+hafIv8Ay36p/wAjbf8A6oYq7/oWnyL/AMt+qf8AI23/AOqGKu/6Fp8i /wDLfqn/ACNt/wDqhiq6P/nGzyGjhmvNTkA6o00FD8+MCn8cVZ75Z8m+WvLNsbfRbFLUPT1Zd3le n88jFmPyrTFU6xV2KuxV2KuxV2KuxV2KuxV2KqN7/vLJ8h+vFUu8p/8AKO2X+q3/ABNsSqb4q7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVG9/wB5 ZPkP14ql/lP/AJR6z/1W/wCJtiqbYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FVG9/3lk+Q/XiqX+VP+Ufs/9Vv+JnEqm2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVRvP95pPkP14qgPK3/HAs /wDVb/iZxKprirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVUbz/eZ/kP14qgfK/8AxwbT/Vb/AImcSqaYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVG8/wB5n+Q/XiqB8sf8cK0/1W/4mcVTTFXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqo3n+8 z/L+OKoLy1/xw7T/AFW/4kcVTPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYqpXf+8z/L+OKoLy6OOkwxn7cReNx4MrkYqmWKuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSu/7hh3agH0nFUDEfqO pyRPtbXrepC3YTftqf8AW6jFUzxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KqLH1Zgo+xEasf8rsMVburWG5haGZeSN94PYg+OKoRH1Gz+CVDeQD 7Mqf3oHgy/tfMYqqDV7Do0hRu6urAj8MVbGq6eekw+4/0xVcNSsT0lH3H+mKti/sz0kH3H+mKrhe Wx6P+BxVd9Zg/m/A4q2J4j+1+vFWxIh74q3yXxxVuoxV1cVdUYq1yXxxV3qJ44q16sfjirXrxfzY q19Yh/m/XirX1mD+f9eKu+t2/wDOPxxVr65bfzj8cVd9ctv5x9xxV31y2/nH44q765bfzj7jirvr lt/OPuOKu+uW384+44q765bfzj8cVb+t2384/HFXfW4Ozcj4AEnFWi08uygxJ3Y/a+gYqqRxqihV FAMVf//Z + + + + uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7 + xmp.did:8c5304e8-1ce0-455d-8672-9641febc9609 + uuid:d9cbbb99-e836-3045-831f-f0d3b7916caa + proof:pdf + + uuid:aac86eb9-98ee-4d8b-83fa-b398bb14a420 + xmp.did:4d6a8ff4-45cf-d74b-ba9f-dd7fc42c3697 + uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7 + proof:pdf + + + + + saved + xmp.iid:59a35063-7430-fb4c-8e81-e6ef72dab34d + 2017-02-02T13:07:15+01:00 + Adobe Illustrator CC (Windows) + / + + + saved + xmp.iid:8c5304e8-1ce0-455d-8672-9641febc9609 + 2023-12-25T11:16:15+01:00 + Adobe Illustrator 26.5 (Macintosh) + / + + + + Basic RGB + Document + AIRobin + 1 + True + False + + 500.000000 + 500.000000 + Points + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + Adobe PDF library 16.07 + 21.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/Pattern<>/Properties<>/XObject<>>>/Thumb 44 0 R/TrimBox[0.0 0.0 500.0 500.0]/Type/Page>> endobj 26 0 obj <>stream +H‰t—Á޹ „ï~Šy�Ø’ZÍV_×r +rÈ#,’ÜrˆßˆŠ=³Ûª*l`¨�Ù”TüüãçÇ�¿ÿ,¿ýõçÇ·?ÿY>~ÿõQ¾ãõßǯßÿûíÇßæÚ~}+åã,Ï¿ÿýëÛ¿¿•ïý¼?Þÿ'ßïñÑGûhßK©ç÷û¾ p~JþÿÇB?‡÷èW|.ÄËxtc<›1Ö²‰Û†ÒLj ]̆G˜ �QŒñØTwœ¦º£ö }˜ Ûí6,¦º›êÚ0Õµ¾éa ³a«nÃÃTWïMu­šêêµé_fÃÚ݆aª«mS]=î4ˆÇ½ia­fÏËly›òÎMuaÛ·9›®yÆdºöej_¦–W÷Ùà½Í¬Ç/L�|Ò´Üi„™M­íÏ({x>~_»�ù2<¦xg³yOÎ'd5‚cfÖŒ±ÝÇ‚µlê² ðhÃ… ÝÏ�xÂì~~¡‹)ú˜ÿd? �½Ä˜™ç®gÄƒÇæ|øxœ¦íG×óáÁÚ7ûÙ…ÌÐÝôœXϸ|G5"d1mo·žÆæ|øx Óövéùð`ß¼'~!34E·®çă•‹)F�‡i{kz>,³uù…Ì̵½èù° „Ðïgà1LÑõÒsâÁÎEƒ#È0m¯§ž¶Íùð ðøThJÏȾ7ωµ#xu¥=-¼ŒØˆ Y™Î=!;7çÃÚ'¦é§‡µí²Q§F_Üóa.³»Eæ³é½2Ô—é…±)žß3±T5¿ªãù�Ël“î”ÌY6àœut1Æó³(þ(|à)Мoþ4€X ñüˆZ <èdF ÕbòcC˜]$¾ãù¡¶ºò ƒøE[¿Ëjˆçg¹hO:L?ÕÏÁÕ•x +T»‰/Æx~:®®<˜dfaþX¾Ëjˆç‡&¹h? +ÓO5ÆóÓtuåÁžus_ÕÏ�YrÕ¾*T}—ÊÔ*,àÅfÉ[�™·Š‰ÌŠ Ì +_Œ Ç`Wí«B=Öï²@µJx ÔL?ÕòSïÉ]{jÁÛ\W±!`å²xÀ ]ôø^TåMÝbáG2„œ¦Ÿb›\P£Xèá#wÔ]Qóâò[jÞ[¾žtyø$ÓgÐsMþ|-¿ÿœ[«NÏ2ÔˆéC49Ý)L9�Æ>b¹è2 ,ÞðhÑj‹!3hd`ñÎŒ�%F�‹.§kh|†T§'¥F„+T�ˆ7â ´h5bGã +»hO�%F�'µJÄž‰Nƒcf±xgf­Z=‰Õ€0e°‹öS!ÑiÄ#ÈA­ñ†§@¢Ó Ä˜™vÕ¾*´h5ˆÊÔ*ox1¤:=)5fÜ*ïÌŠ ÕiÄ#È1ØUûªÐ¢Õ :WÔ*ox $: JŒ E“Ó]{jAê Š +—Åâ�ºèñ½¨Ê›ºÅâ�d¡NeÑ„ƒÅâ U–;ꮨyqù-5ï-_Oº<|’é3è¹&â­Ösyù³¤N?9¿3/m³ÐJjóczës†¢df”=ü<>gJÏȾ7ωµ#xu¥ó ƒx±²2�çÁIìÜœkÇL`šÎƒÎtwXÛ>!…qºaôÅ=æ2»[d>›Þ+C}™^™Žù²böYF¹ãÆxGÎ7ñžm÷5x{ðf1‚¼^ãrhðIO�Ž×l™ÄbÈ hÐy2b¨“·A¶Á®¡ñÂì"ñÕˆp… +âA&ã mý.«!3(ì¢=Uè0ýT#È“ZŃJz +T»‰/ÆÌ„ jÚW�0,ße5 Lì¢ýT(L?ÕrP«xðHO�º¹¯jÌL +»j_ªƒ¾Kå +jéÅfÉ[�™·ªh?¬ ñÅr vÕ¾*Ôcý.«DP«xPH/�šé§A~ê=¹kO-x›ë*6¬\VÑî +tÑã{Q•7ukhG9M?Å6¹ F�ÚLF𽢿Åå·Ô¼·|=éòðI¦Ï çšüùZ^þlF§Ïî½MNwJ`z{Ptû¨¢7ÒeX¼á)Ð¢Õ V5o¤Ë0°xgF ‰NƒREo¤ËéŸ!ÕéIEo¤ËpeñF|�­FìhœAaí©B¢Ó TÑé2 ,ÞðHt”*z#]†�Å;3#hÕêI�š7ÒåtÑ~*$:�تè�tox +$: J½‘.§«öU¡E«AT®ð V‰xË!ÕéIEo¤Ë0°xgV©N#¾*z#]NWí«B‹Vƒè\aP«D¼á%�è4(Uôf49ݵ§¡ž  +z#]†�Å;0tÑã{Q•7u‹ÅÉ"B�Ê¢ 5ŠÅ{º1"B�Á¼¸ü–š÷–¯']>Éôô\ñVë¹üþsÞfèô“ó;ó£lúHm~Lo}ÎP”ÌŒ²‡§nû}í<®¯¯/# ;"Xpjùj)ÆÌ¬# }fêÀZ6uÙx´á„îç@è¼ÝÏ/ t1EË €ý,\4öcfVœ»ž›óáàqš¶Ë €¬}³Ÿ]È ]Ñ<8dÆĬ ßQ�YLÛe�À>ŒÍùð ð¦í2X ‚ûæ=ñ ™¡)Z�ÌØ�•‹)F�‡i» ðv æ [—_ÈÌ\ÛyÉl ˆ¹Ãïgà1LÑ2˜ ‚; RŒ ô]x[°m·_€Çç,bBéÙÂ÷æ9±v¯®td°£/#6bCV¦ó<Ø Iƒ�›óaí“Ótt¦»ÃÚö Ù(ŒÓ £/îù0—ÙÝ"óÙô^êËôÂØ4_Ì>ë(WÂ[Ïù&–Ù&Ý)™éíÁ“Çgì#F�×{\†�x +t¼gK‹!3hdàA'3b¨ò JŒ Û`×Ðø av‘øjD¸BÉ ƒøE[¿ËjÈ +»hO:L?Õò¤VÉ O�*ÿØ%ÆÌ„ âÁ$3#óÇò]V”Á.ÚO…ÂôS� µJx +ÔÍ}UcfRØUûªPô]*WxP«d°€C˜$o5fÜ*$2+‚0+h|1‚ƒ]µ¯ +õX¿ËjÔ*à%P3ýT#ÈO½'wí©os]ņ€•ËâA;0tÑã{Q•7u‹…Érš~ŠmrA�b¡ŸnŒ4{E5tç·Ô¼·|=éòðI¦Ï çšüùZ^þ,ªÓmŒ¢£Éé¾&o²Nç>ªè…tïôè­ÕI¬j^H—a ñ~2bˆu:)UôBºœ®¡ñ�e½�.ÕÄ;ã ôÖêŒ�3(ì¢=Uˆu:)UôBº C×~*Ä:�”*z!]†¡i_Z´©y!]Ní§B¬Ó[½�.Ãpi?b�NJ½�.§«öU¡·V'Q¹ÂƒZÅâ�^ ‰Nƒ2Š^H—a(ÚO�D§3¾*z!]NWí«Bo­N¢s…A­bñN/�X§“RE/F“Ó]{jAj€*è…t†¢Ýè¢Ç÷¢*oêÖÐŽ2ÂBý(‹&Ô¨S›É õsÌ‹Ëo©yoùzÒåá“LŸAÏ5/µÆòûÏyj¡ÓOÎïj¦¨ú…+R›ÓKŸŸP”ÌŒ²‡±h÷µ 𸾾n¼Œ,ìˆ`Á©å«¤3³fŒ,ô™©kÙÔeàц ºŸ¡óv?¿€ÐÅ-ƒö³`pÑØKŒ™YqîzF-@1/“ +æ­H�àÓb¬J|AnÞU™‘V¯¾+ 4mxõ$ >­ÜÅ&Ì[‘ Á§ÅX•4¥®$-^-Ææ+#®+<•%ÙÏG$ªïÈó¥�ŠaÑÞ˜T†H<;÷`1{�Ý•ŠŽÄýå|Ä�ŠøéEB*ž‘Wò÷å9Ix%ßÒÒOK$~‚Ù8VUåOH¢]/ç#áâ÷ úÅÑhûëòâ0É7‚¿¤ç#\æt‹Â¶ñ^Ö/h¢jÕû,­ÜvAùVS?5õ6O¸#{ŒÄk„yŠù™Úå¼ñQ$HÇÔ[cª‚Ýotª"'m-Ô PÌ}xhg~'©wA~‚J×lAhd”¤¾¯û²UAójJÒô$(æeR¡QQ$HÛò¬J|AÞ˜TeFRÿ±ìË +(MB=IêAO‚b“ +�‡"A:Ã}%X•4¥®$mÃöeó& E9I½ê&X¸TÞHTUFR¯ÀüÅÃC©+Ig_÷eÄè&E�´= Šùã÷NM#ñ®+0%Ü|YÞh'}ìñýØ*¿¦–¿Š1Êô¦WÉ„r£×s‡;š®hxqý- ï­_O»<~’mx®�¡Ïixþ¼JŸ¾`‚úO®p+@ÿ7#>­yйø²7oE‚´xµ Pì¸yWEN‚O‹PÌÅ—+´3¿“èÓ7‹ Ò5[Ì[ùAZ¼Z¹ûî4¡¦$Á§Å(æeRÁ¼ |Z,€U‰/ÈÍ»*3ÒêÕ7c”¦ ¡ž$Á§• ˜Ã¤‚y+$ø´X«’æ¡Ô•¤Å«ÅØ|…‡IóV”“èÓ7‹`UàR¹yWUF¢O+?@1ÇðPêJÒâÕbœ¾ÂnRÁ¼|Z,€b“+œšF"Œú&SÂÍ—åæ­œô±Ç÷c«üšZnÞ*Æ(0êrÜM(7o=I¸£éІ×ßÒðÞúõ´Ëã'Ù¶�çÚ³[ßÃËç^>ýÔ¿v·O »2Dâíå+(&Àªl }Ušˆ[{YWPÄ>RšÎùQ>çËJÝ¢Ñh¾Hì¾hͰ*k)œg$�—ó‘qÙÑ((C$nçË|q *L‹öÆ¡*Dõ +ØG‚JÙ‚ìh$4O$ö—ó‘1‚ìh,”!Ï—÷$T…aÑh4ªâDÜ|Ñbó²£ñPt"ªÏˆëÊUY’Ý‘ª6Õwäùâ€"FX4eˆÄÓ-&@1{��Š¢#q9y@?½HHÅ3òJþ¾<'Wò--Ý͘ˆŸ`6ÀTUPÞh×Ëùˆ¸þºѽÑÑ£ø†¼=!/“|#øKz>ÂeN·(lïU`ý‚&šC÷+ªÞgiåîw˜ˆjoúÒÚTôZ‹õÈ»gq¬ˆŸ¹W`]�Á9¦¾R„ùû™~7Àzœ*Ç9[cÍŽqÙ‘Ý9êY<;°JÖl1Þ¿(;8}_vdù~¦o%É9¨"°"^¦�÷& +g;™Ý±§ _Ì5ÁQ¿1ïÈò]IÚð¨HN§ŠÀŠ8L!ï2ÎÉ» ì)£y$Ô$gëŽl¾¸ÃòBAÎQ�à5{¦w…TG²;VÄ1<j’söeG–ï"tSÈ{�³SE`Eü1t‹†’‘÷åÕt¨Òm¾¤MÁù¬ÏëÇø5‘ttÆE­›>$tÆž®cxSý¹ä‹êWq½*~rmpŽ� Ï?F§¯û€ùÞÏ 0ýqŸ­ØujýïI4w^Má˜x³ÑêÛ¼XaN™­WãówM½¯ßfÄU‰QÜsÅqL¼Ùb+®#µQ`¸7˜RµunÁJí”Ùq•¶ï6u3>¤Å­VÇÄ»VMÜ|æ÷Yq«l;äsÊb´÷øò­m²�â«´Ž‰7VMÜsæ·Wq«šÅA>PfÕøf«:VMÜmbëÍVS›& ²9®ªÔމ7†ÅA>Pf[Õøi«ê«&n² +qŠû©8މçÖY±�.ÑÜMošCJ¶ÙZDtÊg}1?ëʾ«,ÂÁ}´,eöU‘ šu¿qáÂñ™´'��¤]¶õ>Ø]×�óºŽOzÎ_Ïß٧ЩÜûNG¼?ÿ`d²ÍʳVq§x¥Þn§LxþÒ^?G­ÂívØϱþü¿fî[ÚÖòjÞŸ?»ÌÑ1U É}ÓTWÚÆ•º;kªDë;6X•ÔB,ŽB¤ùD\ü‹úº{+<Ѷ3O•ð*-¬tÇqH49¸o0¥kÔ×Ý]S$ZÏÇ ââêën¯ðD;óëñ*�+u÷¯JmÜ8ÇÄ;¨¯w + 4¹ZMÄ«¤ oÃ1H4uqª„‹?¸RïžhgÇÆ¯S_ïšh{>ÿ§E`…7ê7? Vâ-¬·áP$Ú‡á�Ê¡Ä!�®| ¬Ž˜ê^8�´¿=ÙÂsOS�ïg¸Ü'Ür~!� ¹o³:’¥©º`ºõMÎÔrTìZ…Þ•D»§pL¼ÏÔ¥êÛº…9å˜Ú;�Ïß5õ¾~[÷Q•ek¬Ö1ñöaq©�¢ŽÂSSª¶®Â» ¥vJß—�X¾kêf|HÊAÙ€‰w­šx÷ 0§l'S;V%Ø*vÈçuóF,ßJцñ!(�²o¬šx7 0§œ¼}Àª„fq�”m¬±ÙªŽUw{…EŽîÕ«©M“Ùœ"GjÇÄÃâ (g_6bùÖx_5q÷VˆSvÊL¼^c!]¢}yùR²ÍÖÒ ¢S>ë‹ùYWö]eÎesH‡hUä‚fÝo\¸p|&í ä#i—m½vD×uã¼®ãúúcpþÚéžÿù}û]f¬ßs|40~ÿÇ¿¦ß¿=ÜýöÏ›üw¥€‹¶òÚ©¤9ç;™·òsÎ'xÊ Ç]Êꇮ?/kqßVþ\%ýQçºÔ�eõ%ßìÖKèY+Úþ$tví +xÛ�{Ýÿ/—»û¾]A°Åé[õoåó-å #˜Ã�ïöW„š»ƒVýß µ…ó³–4wÿe¼LräHŽ(º¯Sä2èó°m¶¤�ZH€P‹Ö¢HAàýýoß<†*&³@°2Í3ÜÃ݆oÏ/ÛiÏœ{¡ +›ðÈ38÷³µÞÓÇezù‰c?xæB"ÁXåÑvZ|¨÷Är™ç'u¡—`|ó‹@áüOu¡�óT`Î3ç†K +“‹y&–'k} £ËVúOûÁ3R +ÆR¶“Æ|¨Du™^ú'u¡«`üõ‹@áüÏu¦±ËÔôÔ¹ù’Âä¶Gž)éÉZèí<=Ο8ö£gâ%…Éz�¶Òû®ÛyO|—íôú‰@]è/þ"P8ÿ“@]hñ2µ>un»¤0¹ò�gpîgk½§ËËôô¨ø@™ÁXôÑ–ÊOúÞeKïqô2;|†'.hÊI¿ä ¸àI¬úœϼ;/)<fð|ÖíÞ³ïÓ>í’½õ¡÷gñž—¯þ†¸"„MùUxê3ˆx€Ï\š.Âû0_Ó³þv‚ôKV}ôcÚ§ýïÅèÚþßùÓÿ}ûnã¾|ùÛ?ãíÏøþ¯¿ùë·pûý¿˜ó—?¾Þ^¾üãëíË_ãí·ßa=^(l›ð?(ñÛ�×ï§í%ÜZlÝzæÙ·ÀûÒ±Ó tÏ[«¸¯ämð^Õ·ÌÛËØ +ürG;Áñî)lrØr¼q-ñž!~˜Iõ°gex�o/w`áè‡Y‹µºÅ‰ÏÂ�W¸ ç€!iÌ…el±rgˆÈB‰nwï^Y±YN¸�-ã�ZxöûÜp9¡‘óÍ_ëÖ¾+·ßv»”6Ž[/zšò=ãƒ>ˆážÆÖtP{)Ll—¦y¯oPŒ“·œ9ƒÏ¶-u[¯óÙ*W#]°Å„êKfE=‹IѼËaXi˜e[HÛlfU=›¶lfä�qÃoin=[ŒxpXY¡Ã3ÙÎÀÐ�'sÓ‰,¼µš�î�G£Ž‚3 ¿Ù¬ŠA»Àè|Ñž­6 ›Çf@ù+¦àdGÁêæ{ØIv�J1Yt1¬’ÍÊZžjfn7é€uðLŒ[™fU­·ÔÌ.Å~ Ŭ\ÍLz6pã–È�©bÄ> ‹œe‚rª™Ó­[(X�Ikqé|®±6”Á³�ã»È+!GvÙj‘U;ÉNÄô´²ƒÉWdË`®qÌŽÃϱõ©0b‘ bÌÙ`U[‡Õó¸ÏU”¨ôÒ˜8«dkÔvUÎuÚIöbGWHYqâ©›IOÃï(’ÀzäsfYí¾-K}'œ¯2¿·ÊÜ•ñº¶¶áØ«J{ÕóG©6Õ”6îŠEOcC �,'=ÀÖG>´¢©¦%#Ë2}Ù·ïNÓZ6[SK4ŸX4[V’‡ªŠi˜ÀbáÁ’!_ÎäO†¼Ç«ÕÒ´Wûi�,ö^ãöžVÞÐ…°.é;–•Jp¶'�<_OÙ3+1éBX¦X FàóLY�ÉöaB3ͱU"Ä÷Âç–MæÝW‹ÈP1e>‹:*­hÑfQ± m«­0iSÇš¥‹•7­l^Þ‹v8¤¡¥%#” X)žD¥ÉdWěŪÇV¥ÕÒB ;ªoÍbÙAÙËr jaJ“¡;|6X~A±qŠ2Í)l]‰ÔÕlYÜù2¼šwŠö™›¥dQçÎ᳇­>X-›Ña²u!ŠÐ:šQìû°ýf·yr` PXì�°Ø9Š÷0+kNÍTù™‘L{koA&ovëÁ(›�„4ƒ\”ˆ°rñò]vµ %‹C±ŽGË<åKîÙ§0ù£jÀù¶4€‡ÍR°É�"kÀ-ß,ãÚ2½V»›÷aR�’ãB2&µ\*Ž0bóo»�Ü)7_„ Ûq\½Á­W¿›o@¬Ð–Õ-im }Õò¯/fÙ«ßô]{²¹¾×Ó©^‡¦!PcòQdqë錓ˆS¡Ü£² ùt-’2†Èd%~b=üÄÓO˜ÃœÒü{}�²TÒ|@a~{!4 bHËÁW¢vã­!”õƲFäQX¦ Ço�‚cŠú¼à‡ÓÌLÍ€N–uã„�•É‹ìcgArPâÐZ¡Ô&ìŠy+IŒZxÅ(ò*Ók(M+áÒ,G}3»å 8"åó�©î6ö«©$Ñn0öçOÆC7$-åiÏ®ˆèwr ¶ÆZið¶ä©ÀÖ€�…¡�5Ù ¼Ö]´‘e{]#oÇÒjÖî#�‘…à Š 4¦f•Y5„¤6J%Ò„CÎÈè˜9lÛÈ”töU`Š™ i@¢ß¥_ƒ:žÆ·é€6�l­¡‰l+«ÑAÄ–‚(¹:y Cid“Q G{ Ô” eí# +–K�j6$NØ¡8䶦ãYF�}dFzÃHWqïê¶È�Ù$æy(—x›£‚x°=âôi:òöŒ”"è�Œ/ìD�jE0ƒn7‘7Äl�fÒÁäàêô=DÂ1ÊnNÊ8fs"/ºbµ¢BUJL3)¥ÄÀÍú-(�ÉÙýe×äTì¿—Ð�„‹b\ðëw#DPÙ–•¦%:¾óÝx 1ll  FÛ1šê›@Ô¢š8#ÅÐ Ä3s)’EÐc¨ßª”É×D±=Nø4ô�Î Q>…ƒŠâß-7áQwªv1�ön^¡”yÐÐjé0(¨´&˜!#Ó»[v«»6@|Ðýs›‡zTò~>Ô¥y¢ú3Üý 5>Fõýk�Ñ,ƒ‚eŸ–-!yÛmW˜û@*"?\y�©ìæë¾á]©Ngp…À|ÖI3È FT®3�]:Ä[QÇ)ƒC¨üÊóîJ¦}îB·lÁãdË¿:[2DÃé}�e'ªÞ`¿,fW¥6Fjru§÷aÛIȹL•Áë’.IY· Œ”–Žp�l˜I¢åçàe)ŸÓáêeù;Ö|¤" ö³çFRhG‚ï±+‡õ¹S~c G@(ššìd×ÐZT½ds÷b§*‰�$ÑÌvµD2f©¬?�(/V±Ó®Ѱ +FÁeaÚ5’0º_,ž™UW†T%;‰QãMÀÒv&^(/Kº:É7Ò;¤‹ø¡62;1õ•ޝ'fW&½EË®jjŠŠv%€'ªF†I׊šš0DQÖÙ)âzº@}Èê°¢Uóò…ι+æ§õ@ÈiîN÷©‰{ÓÔí¯�¯Ñ¿‹n©šœp LÑR‚^.^é°3/-°£;eGÖ±n �k³³ãÀÎŒ‡±­÷nGß!9� ƒQŒtÞ®x0üF.º:ô8+«],b*¾F0BoþÄ�wÁÉø:ÞeÃŽTãrx¯ê +S˜üªîlL>¬ShÆ!9¼i$Š¢cЦ·7´T +º+µ²kØ÷®mE;:\`7 48-Ä.¡f‹ "{Ç4âGD4�ØdÌö�ûg$µòeb™’ìä>Àü©ÅX#¤xúÕ¤š†¨û߸ì×}SkD×€¹Û¤û±¯ç–¿ïõE¶oèÍMß®ÖYG¹ž]$�ËþÝ~¼~ÿ)T#Ç;\xܬlcdÀ‚•;ªÃ*Jg2YVy[,í«(Æw±*Lël‹UÝ>±ª�œX[9³*•*�ƒU)¿¼8.VE)¢¶ÅªFkó`UÐZÍí`UÒ›4b±*è-†¶³*šftn1é@ÃN’ˆ« 1° +6ëN2«°k«gX�ë²á°Jzëã€UØÉÚi5ò–Û\%½1:®FÞÖÆW1R)\ WaËEޫĹÜÎ¸Š‘Vë�«Ño{Ž«0½{.\]™¼požñ U¨tgX…ƒk:X=¤ÎU•O'REæÚ{]?!&¹œ +UŠù„©ŒV<(´9ó©Gë'F…¶QQ­A.@ÅiOtê\æpŠƒZ9ŠMÍxBSˆp;™¢Ïs¿¦¨9ϹÔ[­c)âÞòA¥›B¹˜Tÿg¿Üu¤b(š÷Wô,[�~U¼<@HƒÄLÁ ~ŸsíªêÞÖ"$"‚IvÖîêê*ûúúºJRŸ:T ^Ó‡B¦ A8�šyW*™0EÂy3܆->ó¬^NÕcí>WŒH³hpIŽ�J„pAñ®ÖÍ[ íÝd·%^·ÙëY¢@­¥ŒÒ ,˜3e€9­– y¶åÉÆEt¨1›Ïed�CiÒ1Þ—C�+Õ’�I5¶$ =ÉàW1Χý)ø$õñŵf¥ªådpóA2¹l—FÑ·i¶v”d-3f_ì21 ÆAÒÍXNZ‘:˜e +(Zíá–†ÌS—Hš!T6º½H\œ%ïxJ¶`§±‹ª„!Šˆ­ŽU˜.’“gÌ4±ÏM¯$³2+]K9aæ²Tâ‘ô•è03Ñ“&ßœ†øÕ8¢+~–Ê’‡XR-UÁx—ÜJv!¸"ŠJ4"ñ¦�DÁ„ ¦˜”± h#ˆúØ”p°…T…à,Q׿•(‚-~)6çàB"MÅ&-ÛÂnÚ à•#çJ7É]‚QL§O‹©Û¡JˆÍgZbµvVJ•RlÈ®¾ÕγM2•qÕ¬½Jº'Y_=è(¸J�­Ä²aô�ì:ßÎr5(‚¤ÐVqÞñBƱ¤9Y[�“57Ÿ5ÁnvÆY·„‚¦mnTKÕTɤ¤ÙÒmáÐ? î:NµÒ/cÂq98fS'Õ¥"xħ‰`Â*O�zOÝšº;‹Ü¡øÿAñž£{Žî9úÇq©�‹0ÿ”q +Èm´ê÷!OIó”åÕBxsAÌÂÔÍäîšU®ÃÉqk޶ó_s¯}]5¯ÃÉqÚÖ»ãx–µŸô|ò¶Ñu8{nݳ»{êæí÷¼²Ù×á칕/#r|ß]Òøõ'ÿ~ÿøö{_ÿ â�O—8>]ÆÇOa¼<}ÒøkÔÒ¬¥;ÆêÖÓXVÅn=4»4ƒŒMM’ 3|‚ÅÉ»&ºYCXq·�Xòù§{ì×f�îÓ™¹µo˜ÃdIëŸkŽ+çhÿß濲/¶OžY3ëç®Csø‰nÍ®'ö½Bè·ábU(ÃøN1šáLÎgÏçÃóüÂóåð|úËóÙŸ¿ùð4òó[€5p†Ú endstream endobj 27 0 obj <> endobj 44 0 obj <>stream +8;Z]!5n:aS&4I+_kF(a?_*R9WA_]%&t+T"U?G("7$a\6VO#IZW:aqV+oU~> endstream endobj 46 0 obj [/Indexed/DeviceRGB 255 47 0 R] endobj 47 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 38 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +500 0 -500 500 re +W n +q +0 g +/GS0 gs +287 0 0 -287 250 250 cm +BX /Sh0 sh EX Q +Q + endstream endobj 39 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +377.091 97.667 m +122.908 97.667 l +108.968 97.667 97.667 108.968 97.667 122.908 c +97.667 377.091 l +97.667 391.032 108.968 402.333 122.908 402.333 c +377.091 402.333 l +391.032 402.333 402.333 391.032 402.333 377.091 c +402.333 122.908 l +402.333 108.968 391.032 97.667 377.091 97.667 c +W n +q +0 g +/GS0 gs +0 304.6661072 304.6661072 -0 249.9998474 97.6667023 cm +BX /Sh0 sh EX Q +Q + endstream endobj 40 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +336.675 313 m +359.122 313 381.071 310.871 402.333 306.808 c +402.333 377.091 l +402.333 391.032 391.032 402.333 377.091 402.333 c +122.908 402.333 l +108.968 402.333 97.667 391.032 97.667 377.091 c +97.667 217.809 l +159.971 276.809 244.095 313 336.675 313 c +W n +q +0 g +/GS0 gs +0 137.8603516 137.8603516 -0 249.9998474 277.8087463 cm +BX /Sh0 sh EX Q +Q + endstream endobj 41 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +357.183 97.667 m +357.183 89.626 297.136 83.107 223.066 83.107 c +148.995 83.107 88.949 89.626 88.949 97.667 c +88.949 105.708 148.995 112.226 223.066 112.226 c +297.136 112.226 357.183 105.708 357.183 97.667 c +W n +q +0 g +/GS0 gs +134.1061859 0 0 -14.5605154 223.0656891 97.6666489 cm +BX /Sh0 sh EX Q +Q + endstream endobj 42 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +305.117 97.667 m +305.117 94.169 268.382 91.333 223.066 91.333 c +177.75 91.333 141.014 94.169 141.014 97.667 c +141.014 101.165 177.75 104 223.066 104 c +268.382 104 305.117 101.165 305.117 97.667 c +W n +q +0 g +/GS0 gs +82.0630264 0 0 -6.3324609 223.0656891 97.6666489 cm +BX /Sh0 sh EX Q +Q + endstream endobj 43 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +222.013 402.333 m +222.013 397.914 194.177 394.332 159.84 394.332 c +125.503 394.332 97.667 397.914 97.667 402.333 c +97.667 406.751 125.503 410.333 159.84 410.333 c +194.177 410.333 222.013 406.751 222.013 402.333 c +W n +q +0 g +/GS0 gs +62.179985 0 0 -7.9996958 159.8401489 402.3327637 cm +BX /Sh0 sh EX Q +Q + endstream endobj 61 0 obj <> endobj 58 0 obj <> endobj 28 0 obj [/ICCBased 64 0 R] endobj 63 0 obj <> endobj 65 0 obj <> endobj 64 0 obj <>stream +H‰b``2ptqre``ÈÍ+) +rwRˆˆŒR`?ÏÀÆÀ̉ÉÅŽ> v^~^*øv��D_Ö™…)�p%•é?@l”’ZœÌÀÀhdg——ÅçÙ"IÙ`ö»($ÈÈ>dó¥CØW@ì$û ˆ]ô�ý¤>Ìfâ›aË€Ø%© {œó *‹2Ó3J ---Sò“R‚+‹KRs‹<ó’ó‹ +ò‹KRS€j!îAˆBPˆi5Zh’èo‚Öç@pø2Š�Aˆ!@riQ”ÉÈdL˜�0cŽƒÿR–?1“^†: üSbj† ú ûæÀÆOý endstream endobj 62 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +62.179985 0 0 -7.9996958 159.8401489 402.3327637 cm +BX /Sh0 sh EX Q + endstream endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 30 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 72 0 obj <> endobj 73 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +82.0630264 0 0 -6.3324609 223.0656891 97.6666489 cm +BX /Sh0 sh EX Q + endstream endobj 74 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +134.1061859 0 0 -14.5605154 223.0656891 97.6666489 cm +BX /Sh0 sh EX Q + endstream endobj 77 0 obj <> endobj 53 0 obj <> endobj 55 0 obj <> endobj 78 0 obj <> endobj 79 0 obj <> endobj 54 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +0 137.8603516 137.8603516 -0 249.9998474 277.8087463 cm +BX /Sh0 sh EX Q + endstream endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 50 0 obj <> endobj 52 0 obj <> endobj 86 0 obj <> endobj 51 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +0 304.6661072 304.6661072 -0 249.9998474 97.6667023 cm +BX /Sh0 sh EX Q + endstream endobj 89 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 98 0 obj [/View/Design] endobj 99 0 obj <>>> endobj 96 0 obj [/View/Design] endobj 97 0 obj <>>> endobj 37 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 106 0 obj <> endobj 107 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +291.2941284 -291.2941284 -291.2941284 -291.2941284 104.3527985 395.6467896 cm +BX /Sh0 sh EX Q + endstream endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 112 0 obj <> endobj 113 0 obj <> endobj 114 0 obj <> endobj 29 0 obj [/Pattern] endobj 8 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 26.5.0 %%For: (Sipke Schoorstra) () %%Title: (glass.ai) %%CreationDate: 25/12/2023 11:46 %%Canvassize: 16383 %%BoundingBox: 246 -554 554 -246 %%HiResBoundingBox: 246.666693768675 -553.333000000001 553.333286021625 -246.667 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 %AI12_BuildNumber: 223 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registro]) %AI3_Cropmarks: 150 -650 650 -150 %AI3_TemplateBox: 400.5 -400.5 400.5 -400.5 %AI3_TileBox: 102.34 -820.959999999999 697.66 20.96 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI24_LargeCanvasScale: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI17_Begin_Content_if_version_gt:24 4 %AI10_OpenToVie: -645.014399321936 172.015352425669 1.00000201502252 0 8206.48346375098 8288.98329751196 2548 1414 18 0 0 6 20 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: -645.014399321936 172.015352425669 1.00000201502252 2548 1414 18 0 0 6 20 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 76 %AI17_Begin_Content_if_version_gt:24 4 %AI17_Alternate_Content %AI17_End_Versioned_Content %%PageOrigin:0 -700 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <>stream +%AI24_ZStandard_Data(µ/ýXT†^„ª +°ÖЂ´d*5 0Ha‹30ÉÛÿÿk¥\Ù›vFŠâï—óýGöÐ…3: I ¿êÕ½g6ªn£\Ð6gd–)9#+–í”a.X33zÝðÆjWW,Jú°*®ÄStRoÔ¤dÔŠ¡Oí1Ç¢–QVœœ„ôéØ˜³ ç\?¦2êò®îÎn8¦ +ߨÍ/ùƒäJß|Ú„EÞ*Å#ž…s+¯æ�©ÂÌêÌ'ÕŒ’&í ¯‹çÏAÒ¢u‡Ya$ç)�öÆ­°’›ÐÏ·á³0YÇ­8_æ>�Š.޲Â$}GѰæ ÑÇY‰Ôü#‘©Í¿+Ç¥ÎõýÆ«ði5w‘!Vb~͇X1äÅ<.-èWã¬0ãÔL$å:ߝޑV EèÖ»agA¾‚–qÒÂFfœ#ŸÕfT>±ïÊwú ÙØÍäÓ}ƒ†5¥M~‰}[ÔyZB“o¼ÜÔ㪠žŒ|h\ô{ÓQlQòtE½Lì mÛ¢¨6êg.)‹¹çŠž|ø…��H§ŸÏ¢ÆÜ±˜Ð«†ƒNºêhD”«jm–lÔ ‹q:u$�Ƚ�za$f5»H}ߎ"5‡½š}¿C‘ußø…^•¾�¿0#»tŽ;ÎWRrCŸ£=¿Elxu¥—F£îlL"—.%w&'ºykH%*º•ÞóÈÆ‘Q‰ÔúU´Té,–É‘ŽB¤‡¦öiUéE7ÃÎ,êØX•nâv,îF’ ½Ê7èXØÚ^w3*BÓÍVƒWµÚnô +‹*z‰~¬�2"ÇnS_‘˜èS¥QFÖÞŠk¶*úUhÐJŸ2hŽ *cÕ³’¬tïŽ^S6ʳ3%ž^z�v»È Y¸+V·\ù"g|ÞjHq©_¬ÄÚmæÀ $]‰áæ#¦­Á~�°ØèèÔ@ô@AÄ ÅjM¹¨êÕPõPQ%F«�ÙÈʬ�f¸» ƒ8T„!‚ö@óÀ ‡s(;ÔA ÞP n`ƒÄ!Þð;}Î �8‡ûÕùxö` fF6F‹¨‡j¨{(¡CD •Á¡ØÀÐÐÐðcˆ8„ÑPÂâÁ „ø�á� l`�»Ñ@ÜCC=؃9XƒÝ.⡪�âÌ%1 õÐðàÐÐÐÐÐð†7\Ã5Xƒ5TC5PMðA$.ñˆGâ ¸ÃÞðÿn4ï)qqçp×p¿;»:::ß\�Ç““°ƒ0†s83+#³�Õø@år0‡šˆ�˜ÃQÎSÃQ S0A�±Cõ†r0“ ƒ!è$Ž�“ÝÁ0.2;¦’`°{ƒÃ„Dĉ¡�(Gn 2B„ qEOIB0œ#J \ ˆa€‡3¢ v([yš¢Ä�<"!‰8c !òTîü!…éJ¿7¤àÍÉöòí¡†kx€€ˆ`C#jŠ8 J4Ü!â—6´aÜ@ Õ` ×ð††‡†‡ˆ†:0È!^W6RAô@ÔÀPDd‰¿Ó@ˆRØp|&uÊ}óÕ^¶Ø¬«ò¯vVŠC +ÓNE,OUÇ"¦Ža"$ä� t(ÝÉÌÑp Å d„p¨D’p„!|¶‘˜ˆy›j`°BX ÝÕ5¤VNÅß©CŠÛë&V�¯E]ÑÙI�°D|Tãël‘!‡®FRR0¢ã@VVfvvv»5˜ƒ9؃A„EX„Iðz½¹9]��ÝÝݯáÎâ .â$Nâä<ß÷sß§×ëvûýÿþpˆSXf³ÕÄÄ$J¢ Ê¡ª¡¬®ªª\­K‚¤"H‚ ˆá�¨�N§£##¢"Ó�)Âá.ƒÃ[:ñôÞ�¢ZEìGîB¶›¹’K¨ÊŠw•2ï2¤8Ñ7—‡Š„d†0MŽ@CÈc0Ã@˜Á ‚Á�|`(yx�Â'í%5EÒãàä“ášÂ`ÁáL3^‹<:EtËãŸ!E{Gb.#mC +)ZvçºÕOE7º+{�H‡4BdS2V¦aè€80L C]„C'‚Aè†?0@4@Ð�vp9Ô9\ƒƒƒƒƒÃƒÃC„  ˆAb$ˆAÂám¨šÝH ñðvd8 2}°)[ŒåJ@˜L¦„%üpŸ¯\&�ízÄ #1Ñ0Ó`4fC¤Ň†’˜‡+>˜ÁÇ`ˆ�(ƒ%BB"BBâAÂA¢Aâ'a%Á@–‰JHHDDD@D#”Ê�”0˜œ\¤A $B$DX�dzá�Œ ¥R¶jõú2¼ m€h„ Ù|n>Ó011#1´Œk—Êfóùü?ØÁ†ˆ�°‰Ô11$"BÂá�~0=0ÔC=؃ÝÃþÐðÐðàðàðððððñññ ñ ñ AˆBÔAaq‡8D„ÄÄDD„„Dp"AQq�hˆpˆpˆxˆ€ˆˆˆ�ˆ JTb$FÂ$Q&q—h�p�x�€�ˆ���`Hƒ0(€�Á0F0‚G«‡‘¨D% +Qˆ>04ôTG‚ F†a)!âpD0PñàÐ0Ÿß0ØØÔ”gf¦Óápdd"úЇ:Ô¡ }ßëÕZ­R]·eY©T‚d€x xžGc‘H4‡%)JH„@ˆƒ8HÃåĤ„Äb©0$À…�˧#ãí€ÌæaÁa,£æŽù|.˜áÀ`Á�Á‚à +*àð ‚B„…P 2t€¡‚à + +S:Àp�CÑB +]`P\0‘„ .€â&LD¸B…Lp(Ì`P +Lh!(.˜° 2 ð0q!Â(*L\0!BpÂ4pab ¸0!„T€0‚„‰Dx€… &LHp(B`á .@0A*P¸ႈ¢.X0¡�… +Dˆ A„‡ .ThÁ˜ � �@�‚$P `�"6¨àPT˜¸p‚,  ,ˆp¡„ d`!‚$L”`BD(€`"…Љ +$H@ƒF +`0!‚*X @!€ Lˆà(.˜HA„ +.X0��0PÁ„h°… + ˜ƒ $L€Aƒ0`0!Â… *L`…< $Pø@(¨À 4Ђq‹ &L¤€‚f $L@8¸³8… +hÁ��…D¸Bt20˜È@~,$@¨€ÁÄ… DÐÀÁ 6¸€B d�Á€.�!Â… +4p°Axd¨0qÂD X°0!"Lˆ‚ ”±�aL\ 0ÁÁ ;àà�ƒLh€ LlPÁÅ"8`�B8èÀƒâLˆp &DÌDX°ÀP„&P¨Á#˜˜@ +.lABT€€Á„ Bà€Á(\à`¢>à`… +@ÈÀ�ƒ,LH¸@á‚ \à�€Ð h@DDCDƒ† &@°°…\¨0¡Á„˜0aÁ"T˜ÐÀ�„\ "€À… +D@¨‚  `â‚%ˆp�„\�Á„ƒX€pÁ„  DH ¡ÁÁ„4°àÀB D� aâ&$\ �Á„ 6ÀÀÄ(HÁ +$@° $dA‚'˜p0Á.˜@! �€‚ƒ "HØÀ 2¸ "Lˆ�Á.¨@aƒ L˜@Á"d`a 0„À $à ¢Á&.¸@aÂp0‚ +2˜¸B… .„ƒP  \0Qa¢‚ >pÁT˜ÀÀA4€P hàà„ |ÀÁ +.X0aÁ"H¨0qÁ‚ƒ &,p01Qƒ‰ T˜Àlà€aƒ 6p@� +0Lˆ!B„‰‰  @€àà@�ÁTˆ` 8¸€ 8˜¸@B„ p0qa D8€ AB„ &,xp€Á„Xˆ`a¢ÂD„ \YL”B Ô‹ Lˆ`aâ… HààÃÐ 6¸0Q (H PaTÀ`ᄉ 2 ðpÁ„ˆ +*`¨†”&.\€ A¢æËÞKOÊ�+jD¨°€f(ä"`¡‚&0€0� +Ì0@L<¸`B„ &.@˜Paâ‚„†FiQÇÂ4‹3µ¨“dïÜÇ]¯¸ Ù”ç¤EÕ°Wqú�ž +ϨPB   !≠$h�Á„ Ñ…PBe€BˆÅ,Œ „ 4 PA Pá‚…LP �â  @0Hq LˆpáÂD&0€�AX*`(0� x0 h¨€aÚâ&>�Á¸@B„ ” h`qB(HLHˆ ñ€ÐpÁÄÈ`ƒL@àB0ˆðP¸@á(P ‚ +(L � .˜ÐPÀÂ… $F` … (H�0±�Â… @€@1 +ŠX¨@A… &, Pa&Ld°� *¨€ÁªµX©kA™™1D(ÈêÊæUUÃÂ"0 (LT˜ÈE¹ÅN@Áƒ .˜°‡ +*`˜›bq€‰D°`B &@x¨ †òÈb*uP: ˜¸b…ˆaX°A(0!áB TPƒPB… *P  *PLŒ@ƒ@q€ +$hT‹L ÁB… <¸4TPƒ ·P�Â.XØ@‚„Å*P¸a¢ÂC02Æ pAƒ*0T=¯Ht«2QÁ™âv4ˆŠöFŽn޲‘e䈨üÙÑø®ç}ЬâsŸUP‹ULY]KÆPQ±ÚÑï½\cÒ‘m_+uÓxq¤,E–º™Ð(š’"öóšgŽ¢2:’)©™šQæ ¡ÞÃ{v- �9F¾’Ó�£1{�‹L¨Æ¾f*ªyŠËYÙST‘TTûà0cq¡’†n© _µÄÒKâñ#åò:�Œdø¦…‡Ï$zm_ç:4|÷ÑÎÐð}´…É�¡“ËæžnvÃG_çÃÇâC6ªu,J5:ÒüZ%D§ +Ñg°o®·HÇ0iA-1»Ö�^Ɔô„•¿1+ŠðãlÕÂ5ëhåÊÂv27Ÿ~%•A•3I­…ez&�‚|;™›ˆåÖó-Jüzì¼ÚÒ"Õ~µ¥¶¶´?펷xÑhK[«ÞPǧ ϱƒ\ÌosgŽn&¾Õ~>û\øXÛ&ž!O§&ž ™ØÓR ¡ÂbWE–\ÐD;$vSe‹sÙŸ¡¸(5Š +‘^BrR¢‰ø4}O²�¶RNRHA¬ÔȪ„l<.0€š’e +[FÎJVue±=fÅûÄñ`kcêc"Í’ÌômL‹3*Úíà4ÕÈS˜‘Ô]�NÁ±’1ä¸S½)wiÄŠ|ÓÄ’F6Ûìê6ÌÚ ³…í²™ja©ç~_"µ’½ˆd6–»ÏŸ6Ã|Ѻ£sQÕü>ãNšÏKÒ´ðLQ)#é~�ŽhLa2ÅÌ�¤[yÌÆuDWU)ö1!H.¥Ï]ãÇÂL4ˆƒ +ÛlLr"…yE¦Á¢7”¢‹Ñä¢H£.LÌÄè×ûxÑf1b”A…‘|¸¸ÕY•EÆÂŠ¡ÐN¨\´xe²»fAC2:õ8®f +Ó%'£¬U1zIRM1›ó‘uˆÕ¦•Ui"Ò”ªˆÔëèÆöECŒsEdç*y-Ç*‹Ö¨‹’»ŠnK šœÔÇQH3ßzcÉôK…鯢ú«ˆoÈl�Ê7çâèr'7�s�3ŸéÕ²qÆ¢¨ÎvLâ 9T.“=>3x–Mé®5îÊ4®qÖqOéªqÇqßñ.(ò)Ý�ݰ}ãFL=ÒG^c®dµ’kŠ¡š‘ä´¹äƒTxnÐIjHšsè7ï ;*ªU6Éusg½Îj{·9³¡)ª ¼º)ªÑ'ºèµÒ¨ ‘5*LZ.zÙ3jbC¨8‘‹.¯5J¾�Cï§£g"YKεæ»~ã䦗å"7ìâåÚ|Ò¡bnˆÊ¤eUK+Ú¨*H^%SãSÙ¹Vu°ŠŠe4ªŠO•I*Ì'E>�Ì ‘q.†-‘‰}PCScea]2mHs|�Š=sr »+š'Ï[yÅZ»KÞo”Câ±?21ŸI5›ýhNc£ëk=›ì•ÐV#t•‹elær›KMøšù‘5BW&Ö¤fZ%9„V3ö¥µÛ‰L‹Š­½µ™�ÑŒV‹;i-:~ µð}F†¹'S7¯÷£nq%ÂWkìNT¶ÓÕ°<æ3MsJÕ¯Ælâš—gƒx’Ÿœ±ˆìÿCcCd±¡ùÑÜ ªinGD-®7é)µ I�¦ÍéÞ8ۈݮ†hô¤2šÏX‡‹‹¯J~1Tž‡_\;fd¼‘áDóc^thxc^\ª<·]ã¨rc^ž£©ékîCÉ­2lÅñcEG䟢"þ3=ž ‘Ýæ÷ª*¹1÷� ÑÐüFF#ï˜#½iNÏ*ƒWœ˜t|›7ÜÞå"þo2ÓÒUÿ|mô£r‘ïnÚØkƒÚ1SkT¹âRùÙù El�§ýÙw½‘n˜”òäãšÑæ�¯l®j£Ñf<+_\5„µ£ºˆ¤¿¬üZ_ôÄV¶¸Ü˜ù¶«’Y¶÷ÎC„ã¶#27Jh~,½ Ý\ …*3s¦åSR?÷ÂfUûའÛ|?¥Å”ç³û‹ž¿J‹‹Ù.æqËÇF†­áÕ„Å}R÷(¶ÑV©ÒVžØa¯’¿HU÷’Éd\Šä!¥7V¤Û½ƒÿÙ;.Tœ–ËŸÖE²¡á[#.ò‰xÿÝ(Ö=~æ^k¯ÓÊ!³Yh¶’² �Š•ÒÆ”ΪÌÄèDWÂbmEº¡¾&vyÝ žÇŒˆ‰YPÕÑ­Ä^dt¾¥¨ŠVf:߯jŒÜ¨Ä>BÅ1ÒbnŸñb>ÍØ~òsœÒJ¯rƶ#åTÕaav›ñO†Ã­ŒU�÷Ò«sWƒC£�ÈŠˆ4ú§³ªÛ̃#Ä«”±™5ZÈtU=2-nÈ92$õ©Ÿñ¶àË´º�eÈÔŸ9ǵã[½,jUš±+|�t=ÓøæÞYT%ªµ‡bõ«n†µÙÑœ£¾X=ñ[ÓáiÑëP|O“+<Ö¶hò.gHÌe-Ž"Be2ŸÓ;[]…â{„®™­lf–´Öµˆoô ›–du­ˆO¡‡M ’±]Ý26¦,È|~^{ 1Yø³7½Ñmú¦Ùà´¨KüÙÏËNCÜ‚¬²×K®ÆÉ‚cE§A&‘•¥TÒþ¤tE#Crs+Ö:ró«w�;uB¹¹˜fož±£±r¨ln«ÙmÞR rÍ’Õ§ŠlÈ¥r>î¼n½, ›�,Z-Ù|ª…Ϫu–S‹ûG‘EÍ�ކT)cYœmLÕgqùÉ7¬ƒX�¡±†�/–jåh‘†‹)�ŒƒäÛ¢l"Eã,8«™Em›�ªë7åA Éa,ˆî¸e¤q±<ÌcÒÐ0JkÔݰR]3ëK†S¯ùƒÌb*ÔÖÔïVyJg^«N6_¦èwVlƒ-ÊËTÍ ¶(S¦ê¦�/f­:{�kae´ë.ÝS?õªÜ¨ç2ê‚E%®K¹£4…í8v­½FTï­£†ÕbÈcV¯Ö†•/bó³œÂúl°åq�üqÏS2ޓصÛ\ê?}ŽK?í_EÇšy¦va ±ûZ2Å‘IGhØ}Íu8dŠNÝ\�j’4ÅYÕÑÈWy®|Mq¨6f™×ÎD4¦¢“�3Ì…Ù¡ÚI±e¹ò£.î\F;]Ù Y—ŠÝÜ;#âAÅaQ÷Œòœ£-ìßD£†4ÅV�œ˜ ¥Š£PÙõêÆ�Š2=5\ž ²^®ªW:²º‡SÕsq#Rz„t“y\�¾ÜÙYýÎf\ëdu•jY½%Ž+‹+Ú0ú_Ÿ1w�Sq“Ø=R£ø2 Wa��–żBE�nhvôÕíJ1Û®õq´‹ûø¯SÙÇÑÄ<ì¢"õ×eøq4)ûëÈ‚2.;¹6Žœae4"ökÉ…}„4ó.<žÚ}æq!—›kŸ¢ŒXµ�ˆÇ ï¤.v’>Ì ]Ý„h¸,êä¦S·á‘£:ݘy�Rñ±Å5‹©û8µí©‹YT1üÐEW�/T·1ž´N]�ÐÐ�Iu‘“qCýÎ#‰äæ)o2hc”A+\ºa1ÒTÅ­EÒxfè¬�I ¡zÐ…Éù­ß«F™ä'­WL† £ÂnäXçÏA"[ã¨8+³5gÃUø¥ÈÌpUa×èUÐPt›Óh )?º5z»V}†îì¨~s#E-¥³²ÞQíj\&›;úÐ=*Êž;]è·¡Œrqªùé&§qä)¦w:"á OaüˆoFòG>Æ„Ò:ºQnÌÈð,×Ñù—•¤äêènјsx +OÅŽNeîÏñ)ÎóO?›Æ jѨ‹9º‘ºËÅÒ¸ + qñ!2)"�™‚î-u’Ï("UOs¯3Ü‚Bª õijx=�æø’ýÄ2Ÿ9 Ëá•©9½¬Ö�jÁ©”ßb¬VR·"?<Åñ,ë5¤1ÄâxÔ¢}ÝÔ(™‘GdNŸÎ0‹¡ï£›È ÏŒca#åÑ+gƒŠVÃ:¥lS8\sö‘rø&9ÒÍ;/Mƒ-®S>úµ®²y°…Í��n–†!†TÀ‚0XPÔŠ¾?ª+“³VÏþqL£VIr}zbvSCrªì»hXïÝÅÆ«èŒÙº‰nî<¨ +JÙ )æÕÜ´Î×´n¹�²4EžI±dZ?a/43~CRm�ø7‹«>ĺ�;J,N¦]¤ŒÈÌ£VÜ��[q¢‹Ñ¯æÆ{27ÑKŽ£Œ�tÅ-bCŸ²Žù8+†÷— »Õhöúηÿ(3r#Ò®Š5´°B™i>GY¾Lj׺œ¿ðÊ’pÆÎFd:FÂûÍNÎê3…ö߯×ëÿ}–sˆ Ö‘Ù‡Qñ†† #SëU®*FV'¦a2"&2“É2ˆ†jHUÝ 2;#Ý}.}˜Ív�ú†lF�U»�)™"r�)ZlL�Ò¯âÕ ã Í0;+³¢evdvö^=z©�Ͷ�&™ÐÉ/ºÖçC›ÐXÿƲa}ü27#,Ñ^¥‰´h%û"i4D¶´›£ôä#²rG'£Š7'WõUUé“WUºÂÙµLŒ2¢»\c™™6$š6E¦‘¿N=D»¹™ôsþ‘ð'ËŒ Ý£™n2§–ðnè<Sø99ýttÅ”ê|¿_�T“âcÍkP�͉jTÞ` VëÊ8Zm•�£U2¬jg£ªÚbbbb´úeÐÍ´X™I.׳;²\YÙƒ +,8;Ö=ìèTÀ`‰>Êì>\U¦;בÈp�Œ —½>¨Æ¬-+:ê‡oû±[hcâú‘íî¬â +§BV}èL¯•È] m‹Ì±%“31^NêU¬³n¢œ§l¾ŒîºáYU­½¢òT®×ÖKHZ(–‰<)a�Ä&šÖ}Ê0ÑCíÔk¾n(4Ô~d®-™­Ö2Í$_YËÌSZÆ;SŽ´„hVÆ&"Ò+‹x±Šh¡¡WÉPäÌ®ú’Ccõét¼äņuÇÎ-uWSÒ÷o"*ó(²d-¢ZÅŒ¬Éb=2d¼�¸½bI–Éõb&kŒŠdJHw+ž¼‡\dÓåõB“�_Sg#v#儵—”$óù|>Ÿ·\¿¬js×ëÍÝÜŒ9þ�‘ÐÒºÓëôA§ÓË6SÇ„6’DÎxøªMDN~TÖ¨g4ù*)§_,Éû�4šš‘ÖZìgýëäUËý^eu’Ñ�¿ÍÆ•¿«·VÔ¡}N3g§ÕÍLj2U kHCu롲!‡JeC²»†oË\Cþ\÷ÙÇ Í© y6"šÆiTÀ`ïl ùl˜�F=èo¦¨šéŒ;×qSõ×°áG‡J-<¥ž ª«CÔ!�Χ<<5ù˜XonÆå¦bCŠ!"uÏB™“17Þ^‡”ÈFn”Œ‘!­ 1ÀÈ©)¿åtÜ *ûÓ;ÊXû¸qH¥–!•ùøËã!gXÄljˆ�†Ý éÅ1R2„5êA °£X’Ò ™©ª™ïÑ6ÞóÆK¿ñÖ#CF¦uÕQ“3ãhlЖ·üù¾©Ã$4Ãd2 k˜LRÃ$$DDDDd©D5í ¢¡³�œKGõQ¢›�’o”F©D-�ÒIÇm¶q�ïwË0�R}‘•ˆ>ˆŠªÇQÔ¹Ð�êèØØU¤A—Œ†ØT4ÄSC|U»!¦=.N.Ö¸�Xœëh˜ŽøÎ8"::*Ñ8M�‡‹Œ\cn7±]еûýõ“G]ÿ:�,r›M¡O'J+R6ùï¿Ýe¬„¿j‰T|•›Õ~Cu!“ÚlJÇýÆêÜmÔñÅ�ü<Ïó§¶³›ØÍz»� ³±«¢AÄz˜hÆPÇЋ:âõ‘Ñ;ŽÌQDê‰ãÜŽñŒ±9Æ”1¾ú¨Ç¬q&š3g;ãÿ´›Íx‰$w¼ÆŽ·¬ã}�öass7JR¤�ë�ê°7ªg´Q�z�êÐ@!€¯Ððà‚‰ &4˜ À ((<@� ðÀB +z16+)’)eÙ$«‘g ýnÈÅj'v|•-V+y4¶ŠU/Š,Vtb#�jôã��Ñ©JkOh/1¿v¡ÙÜÍ•"ó­”q„f;ŠÐü¢”­¨6jÕ±·XE¢Çô¢9Öj6±J2«¼ZcW:ωÈêÚ3�Ùõfº+û±¬ªÌô2 Í\Ree=ó‘�Ç™ÕM�'F´9«tɇôêÌî¬x.Þ�Oâ[UEúsçneתžYÝæ}C÷²¢Ï7t³¢YÙ›ë„ìÿÌ%�ŸK®ôc¿+J,rS\¹)�"9…vDrS\5r+±Ê™¤·* +…vòÓΟñФ³Ž¤–t+©¿�îÊ[Ѻ•ô~~v i~�ùÔÔܳ™ôhèBŽ´UfÖÜ4wšëeV4W¦•îNÆèÆ!§[ct“¡á ÚÑt›fðhȇ�%c¢2ž�­¬£Žc…µ7étgu²BÒ»Óèþgð +ºš>w‡tÿ¼ÐUèþ¯ÿm?úIW†¼ +ë°¢ ©æM¹Š8�YA·øDÕS¹§ëU?OEWA–™“ åTŧ6—"Ù\QUc©QäÏ2ö8áIÕ^TÎblT;7ÕNn,(SCò|¯wjÆI5ùÙàp\ ‘¨^Ó_¨^Ç�Çj>ÎÂŒ}±¾Ò ÛÚÅ.TƒµKµvá´Š�x-¨j£S´~½¢Òâ{"Iñ‡Ä~rçHI±ŠbEŽiÔLq“ëw.1ÞÕ”r2¯^vUŽšâ5§ØŒMq#¡£ºCr‘Ú¡}~örŠ©*­d¤‘×Ù©©KªŒ¤Êc4½Tª~$F§*�gŠNå«RÙe™~n +²*»Äf35WCÈjTT™TG4G*to•9ôVQA£y«L*ÈÅ" ‰þ †šiÝ7ÅÝK–ù<•"NÝ”f°FNÈv"3>…Ï㉷—ñTŸâˆÆSùîxº)êÆžXœÂJÚh˜X=[§¦¦ Jù™Þ¯SxÌîECÌB±NaÓ¢dîNç*!¢ÙÑ]¿}xÊÆè‰é„høê9ʇ܌rL¿›r&¹1a ¹á)Þ¨Éh}äâïD<>Mxõ bQm�±ÖÆèÆèÊFãFj��nUrµš¥HYqtfRƒˆS3«Ä‚† øÏ¨u6É�¢YRÔ\+‹)¡ºLŠ»iHѱ©Ë…�ÔERLO>u,ª$5õqÇF‹›™"“V#Õ:ón�ïASåaÓ>.±° ã�ꎧ¢&?s4ƒ¦5Éõˆ†EGRØOõû­™S ‹»‚â²*�…�ÆÌC…rŸ9΂îÄå)XFr«ßO½ÕÍõQ¥‰¨ÌG'én3ÅQ¤¨ «,ª¸‘æê-]t¦Õ0‹b�¯ÞŽQŒÈ†Ïhä±Ú‘�hô°‰Uë^'/®+ÓX¥DF7¾lv*–NCzb“M‘ZE+鶸ôJ++ªu„,zˆ*4Ÿæ#4N MZ,‹4Ǥ݊EÏyÖ„íKÙØmØÇêHc–^gTK¦Ùi}X9±ßÈtnÊrËhÚ )Cîú”ݨ>§Õ�«Þ8¯>g¥ÓNL4ç~©¿Â8?Ǫ̀$â¢TjÌBÏÌ r{cw¬„G3Ô¿(³_�.Í UH3çß©iæ­XÑÌh ¥fZí«6J�朲A׳´ëØ.bdã‹Gª8å±3C53ó*ÙÌgæÒª1UõÐ'5îè¹øRå ßÙh~63ìÈéÏÉÒÑøœ,¦é¸¶ÏüfwC—VÔÉÜØc&WX‹è8æ +£SÇîûÜßœüÏ͸"Ÿ›q sn•ª Œv�°Š¶F7ñ‰="g©“^ü:©ËŒ­WÐ$b¿¦l_Ô„2¶‡ï¦¥!Wô&Z+½Ó£í‘ÿ*ÆZrd4F'£U”Ih.­U�C“ʘ*\–æW:ãr£V˜¸,Ï5†6´‡½¨óOj/þ©1ÏÍxœX•c¾[4Nj/ˆg5{QõlÑèË$»Ó1ÇŸ‘R±÷¦Êdú]íÞW±u5éO"V–*û?«ÙËgÙËÕn�2£S™Bc§þ†…Œl˜g<¹ln”Œ•°˜ÚGU.óŒØëõ°óÚÜœ¹ŒHäµ�ÔÐæ²v´yX±Í&b­Z6›\YºÍ·Ï “-_ @� 6°À‚‡LˆPáB˜Í1@a47=*HH“aÓ²Þ|í•”}[F«°‰7~K£1‘ø4ž¶ÆÕT©Æ7!Ó^MÛ{�ïhûd”!G6{*ŠŠnÂQ*üÖ�?Ìurq3jéµû�‘v©«–\U.$6,Ï÷‡¯°K<“Ôw&™)yfDûlé*Æþö.í?ÓÙÓ‘˜WU¾ïFEF9ª¢YŽªÈLŽÊfvWrDE©âöÍèsYñ5•kõº³¾&s•ÇTw¿þVå|yiE¿"ÅîþZÉÈ_!c})±VC/«cXÓs743c’fêu&³6·¸B¾´=‘}°êv8ôЪ2ŸSK=1ig*uÉß�¸U”2:ŠkZqMÉ_Zñï¾Ô”†R$C¡œÕÕž‘Ù¤W”S†r£Ø:ïK�m«œ9{{¬±?þx<å4ShÌOh"}Ì!ŽI'�GŽžT›¡©I=Ũæ)ûšúvù°lŽ/ÏH6žä[•ü(çÔtc��+5=GtõÑÅŽìˆnÃ#vèè³²z ]=³Õµì³žÍÊZ"ÕKxRåa�·ÌÿÕÕÕU†e¿ß²sÑüïÌh謵éÌìØ‘Ÿ´eú¤6«­g«’z—ÓÌŠV6VeeU4©–™$â}+#+–P[ö×ÝÉdøkÊ2åÎP§È”19n;›Ö™â–c¥†(Ò*û©z~±S¬D\5í)±˜ã³õÅ: ITÕ›1*©·Š<ªJ�•”ݪv䙵ŽzE½õÆ9jy®¨6®¹jÍÕeŒWTá;Z1#IW÷tµVYéØfv±F’iGcIq�ðÿôU»�“l#åºC¬L ‡Wê묖iì‹x±òĈìÕ¹%¡_�½rïÈêê»]ýrT]¬¯åLåFM}´LEZc[_Y33ãVÈÞ\�•OksJÊ·ëCÙ™=UÈ&»$û–Ò8kŸ­Ê�<ìm69KõŸS6“‡Y›�’É„ã³ô§»ïÎH?©¡‡jÊШ~;•oªÌÎ�ü“©^èB:‰åË}ç)åL¹È¬&ô;�´7»æ‘Zµ“Ó®Ÿ>"w2&¤9ëÊbzI>xì•ñ¶‰rÎI‡©Ó*uR…êlY©ÐÇ,"Þ7S%f$Ú‹6G†"ÇÚÅFº"1ÞU‰±¬æÑKŒUÆ»;#Ýœïñ“sÒÕÆz¤2•\4å²ÿú K褙¥s2Lj4Rgc,j™Ëüsë[hvë-RÒ™Šä�|Þiº­^ÈÆ’$9òé)ó(#ÊŒbýÒdX;,òíH|%ª©¶Ì2r‰”M7¶}¶7ªÉ�ÙctÅ9ÒèEϵŽ-“ªêG·Ío_±<±(“º§ÎÊÜœø´€nºœ2td‘ñ¨ÈWýf‰n×m3sF¤Š ]Í•&œ¡¶ƒŠ¬¢«ª¢q†Æ±¢—Q,C)#-GS,!N½½Ö}G–)š)ºqÈCì[e^ÇSvãù‰ï•46¯æ³WЦlR�ì©×»\ª3¹jh¢ªaÍ•˜o#'ÿ!C1+1–œyˆÕ�¡ØË¯ú‰ÏÅ;ÍKŸWQŒ4ý©QS¬¶û¹zkäúVî3’lº·ÍÐMÏ&‘b±4¢PêC$3EêGïý—·DêÊ ‘MÙ#rtÎÝèÂqÉ4Z‘ëe¶Fê2vÆ,Û56¢{¤.Æë‡4U­öæw+«�Õ$³››ª÷ìÜêêt”á…Cn¹ÈòšFv )/+vÛo)m]J×n« !iRh.æ)JM„W™ ·¶“5Ä)y4Ô9)d ±Œ4ÓEsf†ïxmŠŽ6D6ó×áÍ<݈ş£ßi!Ž‘Dñ0¢”½e§—TljDr{{§�g?³LÌÿœ"S'dm—lß|7ÎÚœí—T‘d;M!+G­²uùœyFõqiÕ$rYKldèSZ¯Dc�8.m�m¿Yj¢9Ÿ<å)Í#åÈ�‘²\7"©#©óHorçJ¥†~W5æÈ­¹RÍ•Eœ‹ñ¨f™ �·:¿C#½ÏéGº†æ(VSº×Ðé«M�µ¡9Òfæx>JéGºžI:dgé­Ë7"Í��,ôzIÏ')ï5²ó Û±ŽÇüa‡Œ^ä¢R�MZþÔå�ÜrMÇêŠSãØ";µ/ûÇÎUÕør“q²#r¥Q,É«ñ} �_Ö3™©›A-MímZôÞ ö,ÉÖ„žé‡Înú;ºöóÈÇ•#ùœ|\Š ºU¾"~^®–ŸžLM�ŸÎ7h:BÓœöôÛÚڒƵ'öFˆEFçÜçæöþjþþ̼υ\²Ð—¶<¦�:Û¶tŸßÕ>¯2Ù|Œ3nzSšÎ�[««±³–­n§cã¶ÛÕ¾ºU?\ßìˆZÿoH9¬úµÆhÃzŸßªj}Ku±Âa­�•µzUô½^f±+»**׌BãU™ñ8œÞŒY¬ÍÐTÃ9±Üõ£L¢fö®†ô™,¹–™Ã©¹>ì­g3Ëõ±ÙøpŽçª¥>v5rd3e›òI¤õùg IêäíèG¯£Ÿ…ÆHy$šáU,UÄ“+%Ë‘nŽë'º�=±‹Pîê*¬›(,9L¬�Srâ­X=ɃGš*šÎh‘e¢“Ñ6ÉÑ6�=¶!CžDŽèÇ¡³¹’A¢}•2b]ó"ÑÍ8$º:‹דּÝ�.74ÎXÔÒå�qF½Ê¹Æ˜W55æˆÍÔÔë×“ÌØû´nâgR„,e‹ÔOl<75æËª‹™ ]Äú˜!«fx¹^U�æ®Ɉ†M�¯®¦V{V¯yY~2wU7á‰Q¯fWugèf¬ÇzË~6KMýÎ[:¿ÜÑ™¦\3ª»Õ‰j: ¯—SZú ;~¤’Ôžct–KÆfˆe©’ó�YÌÖÙô榧aFÞÅÄ#ÑñÄF?š¢ÒTyª(ý¨‘®Ec”¶J·¹u´a�wb‘\®L/!�Ï"ùÆ¢éñHúœ$û�”{´�"T2;B?!!:£ÉX“1‘Ag­Î\¼?Ó9–ö27—´ˆw‘º��”´:ÖÏ¥Ì|¹³QÒ3òBó¥f“rêÊÂÎIùÇÒÐÙõ¼z;5çcÍÈf§267T2Šu{Ób[Du$SC¢#KûiyVg×[Ú»Ù>;g¿ìf[ly)ßößÍ�"ºÓ¸´u¹ì§|›ò­¨£4œK Ñå{JÖü»Ý]ï|³¥¡O�˜´×Ê›çdI¯ó>³¹uì2¤³ÒG(SúmÈyb¡ÓÉ»t³dÜñdêŒÓÏpæ7Æö¨=ju]Ó¦x¦RVƒt7Îg~œ+ã>ïwq˜j¬¤hP‰ ±›‘ØŒªq¶¹0<œÌÉ_úóùçòëíT»yO<æs‹ø„ç»»“çGœzÐÑÝɦÎ:G6ƒÌÎû�Œ+9»qÇó¼}ðfú±ööãˆ\D¥�™=J%:�Õ:ÎC…C„Cê¤CÆÄCd�+ƒb7ŠÑxL¯&™1ÒfÌsœeGŽ“q2ŽNÆ�#Ù0Ó3ȈƒŒƒ¨ƒJvGµ®jÅQ­v<664“qsS—7ÿ¸nâ¹Ò ÓdÜcˆch>CC#ç�i:ÊÃΠÇêЋŽÅ&!ó‡éU«ÕlÔj5W‘‡ÐkôÏ�rí!%%”’ºü(Û½�ÏŒxÌÔ×13333sb²As5ã×øyˆojZWãå�†µDjTG•ô�jµZ­Žê˜R;ÅgLgœUkÜ �+~ÆÑ:FÙøŒ!qÝæj£°¬<ÙùË-7"§þNd¿*çz¿jIsWõ#öN†bæÍ‘£˜Õ�ÄJ†�˯ÊVØ)V™�È©${;E®¢¢þäìjªîÄD!^j˜Xiû‹Ï):oqye)ÓÊ^RD•—��˜gLˆXV¹”ÊtÕ˳žÕ]ž�V2v¹UïPÌŠê²Ês}x[NÙU™ é¬Lο¡¡‡=gÆÄ.,ó±%ú¬×<::ûn'5�›™™"óÌ—Ì¢›»”‰ÄóI™x&MˆªöañU¯—/–¯ŸŽ/–DözuQñÜ£JQy¡RìÆ†Ã›ÒnÒzWsê×ÉÔQl“ªm–³oý¶ˆ}zC½ÇHÂûÕüÛ³‘Wîa¹¬;× d_8åø¬œ5‹c8_ö¶_ ‰ZQÔöô¢ÈZ1¤<£ÜÄ�I2"Ú€£ÌºÃ@P�2T†�Þ e²R„¡‚‘²¿ òJÊ^ ´ñ¤ì¥€�Ê4þ…üSÊӠðÅÐnW|.E6|!å Ø ü¦Ì9/°ªL^ñÕ¤ÞÅ )Ù¦å]H§š]ÈÉN‘N]k=EèB¢?EÐåBÎƒŠ”ãBX*B +.*‚í-äRqQ[¦TЍ-p%S¶@¦Nek�«†*SÈD‚kòL²� QUvÔT÷,–«"Žf!^²ŠŒ–…TlÙ‘,d*ŒÅn,ô}•× )†•—%‚z¬¼OX¨fåR¯m¡ðòmy]rBý¸-¿ïëx¹´· ²»¥NÜ!|K® ЏT½4ÁáR g‚{¿P&œÁE�¨`äR‘R¢åì\³\díÔ\fîXú\fÝ]&“%ê2g+�ŽÖe¥9ÛÖÙŪRÞvù;>„u+œ"ÁzI(Àï²ß$�Êð²¹#áñ²%E±˜—} Ô¡—M ª—-òˆ™½ì‡G .ïeÖ +ÁV|Ñ�ÀçË5«ëËÐ2EðËHaƦ_f¹4é/#`÷_†P8k€ò‰Àð€Ì�fZ#›E0s„¬W0C{i0“�z0ÓåèafÔ89a~6Ëpp…1ÃB`†™}B`œ†™l„@h9ÌüØýÆÔ¶>#ÄH© €µ³4AÁ#!Ç'Fú!,Q1Š%-Vþƒð˜iùƒ°ÆÈR?ÈŒ~�g�„}�ƒoŒ¦ês‡Ž¡Y|�£À´¼®Ä¥Íøìbª¨z Ä�©%ôÀÿŠL5Ì;�L�Ç#'™Zä½ôš½ “©ï;  +˜î 1'³¥Ú¢C™‘W>K‚,¸Ï +cxVej=ÈòÊ4„k+Îb–©ã9`ý–™0s@/3«/03£r@¾‰™ÉÜa'™Q&ÿ³™±w8`Mš*8 ÐšÉoÀXÛÌ„$Ç»þs¿$Ô 7ÀOä̶ŸJÚGç BÀxµ3fÇôÏ ¶ ´Áþk<ƒ\­ÁN{&«Á¾ö™ä¢÷ÿLig� I”i° Ù"HƒŸÕ‡`34»ü -¢‘Pg�sE#Íf�”¢ÏÕh4CÈ (Ú2èèÑì’2€ÕH³i’áI³Ñ�'–f·�¬`šMY »IÄ#žršZ²ìi*y00j*20ðØ¨©Ý_ «¥¦ú禢õOTMmâ6Éj:ÔØœWãÐíâ/Ö¼ J¤Ó\Ù;y\à,¢—ȋ֚$~ Žé­I·mÁþO“ÞmÁ±Š\ pߜ҂ôÒs£ÖgÃÛ­1O, ° ÑLÞTcÓn²Ê5ý�¥åwMÉ· +H@I+-—¹*© ^»Fˆ ‚ôͧ€<`/Åìš½L +¬×ìë( ö×l¦(@<Øli¡€˜›]ì›­ó H!›}Þ øTÙ¬ßf6�›ìlžuäC´yFMPß´y»LPlµyI˜ è¯Íß6Ú¦(5n£ºL½M<êÁMÐ.DÆÍäb*7¸©Á<7”�9ÝØ‰% »™Õ×ݬKtx³Õ½y³©l½Yèï÷f_50T‚DôÍŠcã7ÿWú›¢ÄŽ’Ÿ''˜áTýP=N`R8at2œXâNdY@ˆ8ã¹Ñ#š8Ü„ß%è5=– ®Šó´:/N%§†.NáÖ°˜q‚ß8�L pÄãì +ÔÈ�!‘ "ç_Vù‚‹ÈAˆªɉS$H­Éú#ˆ8ÊiG�˜«Ø#/µ22‚x¾©-‚$J"EÀxÌœDÀš3D@ÖlÎ�†âœ©¬Ö§ëœ�.X£çl'! ëçìÝ 6èì$AÔCgÿŠÑy‘@ÐÒyE+§@¥ón8»¨óÃu «È�‰ðõ4¡ÅFïù€ ¦2yìø  {Xxp…:�dó�èžL¬Ó0©QYæÍÞsûbùñšò�¦m´ëVù€¬Ã²( | Ù>SK<ãÈQ˹<Äš£A"„dX*$ÞÊè%þKBšÖx$6{¥.œVÞ/ê- ­.æ`•�yuy@��Fw÷j¢Rí˜þ�Ž“qï`D#Ð+‰]<»" d»¾.ˆ®ˆ@«¢ç%ód$u…ÒüÆÚl;*õ™¸ù€³\3ñ‹!Ôtõ�ÅŸÈF€• ¸tãµ€6áqïyq ì†/Ë£­žày^¨?ÓHÅey�Ž@¤[”ÆÀÃ9Œ`. }T 6@Y¯ŸÐ�Õ€Pׯ¦[yÇj#+ÞŠÐbÆ'@7º¹c¬2×pCX’¡Ð‰àcÀÏûkHÉS�¥Œ#»k^žZTÿ'l“šòîÏë fæ³Z5 Ñ¾Lé^·tÓÉnü±›­píA4•„Xå X˜;í C½Ê +8Åí vëP�ÁΚ'['£ŽÀm ÓéyO@Gá!ü +0·t½®¦‡ÖòC[ÍÚ–€"æ~Œ u’1†\@\!$®sJUñÿs7Âj×Þl«M‘SX–`HC– ôéžÄQ˜™¤ÃÖ;Dq¥!;£éCX'"˜Î`^«x€ÄÐ>‹Üy†zÕŒžš”wš2Ô“´ëíÝ‘„ q¼épm ©~¬ÜÌ 8 ßЩNAkè&­Í‡pÐa€N.—RëŽVC~Æ2i,@OõW-K$Úâ§›9¬û{ô"‰ƒ2ü½J€2%¨lÔŠgÈp·¾…£i†B€&\-¢ ²TÀŒ-n¸€â'¯g>û[•ñ{E|Õz¢ 2iÈ_ÀÆï§X0„¨Ão‘` öÇŠÝä~ãÀ«ÊªÀâмË�ÅêP·~Jí3h4Íw¥ò±ÓcJ;[Ȉþf:¹t(MÎGDÁs”¨e 5)XÔˆù§ëHë.ã5=:ÜÉä í¯úÿ„Eüíÿ§Ðj~̲!oöw*>ô±ÿ­ìøÛWË™‹©Û"õÀ„¹MrjAûïü 6d6úOÌL7éÿŸ4¨‹˜Èš0ˆH¹}þ0þýg y©/Æd¶.]‡*çÚ1DTë_ô·mã)�þ²†ø4ÿ›!µñÙ=]Šü‡Âk~º0=:dÄ¿•žeêïAÛž]„LiˬÝ_c­°ÉF!‘mT�².,÷ûÇþ�³é/É¥dA1ý4O+åA¬¸ÄùÓ–kï·sfðåÅ ~¡ý& b^°þ>êøOfHBÙ)x†AñOòZé�©ÆÜ³ã9’â_Ì‘0sj¶WÑ +ÿûÚ^hqû&2”ÿ}ãê÷ý$?Ù�ÅñcHÔ²àïg˜¤“¿“¡��û(;÷x5Æøˆ,zlÜÒ5¿Ô† JçÁ-Å4à 6T2ûsaÜç¤îœjëa;=ªP–ÃN¦lü$…®_Å�có¢H4±þÅÏi"°ë~<ÝBõ�&V•T¨âE3„Oÿ±ÑNÚ°ôWÒd~`x8ßèGf8Qø#sí3èÿ‰‰'i§0ª!¡)îù±`ÊïQÕùÏ(´Ð<í@³#ͪ\ú4¾ÒïYó»" 8;+˜ò®üØ,ëï•_Ã�I¤¯+Ä�ñÍ'ÏÉû\NþCàcÎPÊ#¿+EþÊå9c¸ÐÛJxüff�4w�2þÇŸ¨°4[G³¶½³ ½¥ ~#´öÚ°U§dø7ûþG14„?¾À¨dËqàZ`<Å\ðï+HÁëGÄCÔ÷•äÂìýJÅÌ Ijã}(WÓW„F»OcPÖS¥ûøý`0Ù@¼&÷¥Ï†€ûJã4wŒbÚ~rÑñš!§íË8ß²ö –!žk γ°Ã²Xµ\“8Øìß9Òà�…Âü sö/SÌî»»“²/0MÝû2dæ&ü¥M´°�"òÛ öyøú~LbþAºao—œëgü“Å]¤kµþˆ6*<¢Ô`â-°¾¨Ip8òͽSÁ{Õ7)Kd› ¥9õÙÙêGvQ",ê¿å%V±�´zú’´¡¥¦ÏÆExÙôG +Ä=>_î/¾¥"y�ꜙ¤�C' UÌŠ*ÞÚè3Å=ÍšxsEHôhù™Ðo°1“xÄÉ@Ÿ8¦Ù7,¬î ЇÙúi©Í·’|¾k')y±;_cÇèOŠDËùU +/›9_‘ÓUé°Ö£å³@ÿ à9ªb™SÛÄ2?&´…ù¸‚bp�fq‘ËgXâîG¹Bì�Z�åG«P•Ó$œòí'ú%ÈøÄrñ仃°¤2éäßÈNH§�î…ÉÃÈ?]½¥ e $ü¼cƒü¿»ýA�/9ïýß sÇñ#î…Íe›ü ñ«ZU­©¬ŸKK�®§ç5Ü/¯Hä‡Ú'¥ð¯Iã3àñwšÒ€ñ!6æ(…tÅ'¬ÅBó‹§ ÎïÄ/W%ž_8;œø�Xea/¾ÁWã&¾ÑK°zs¿†¼  hhâ�$™B`N/”›øwåûàõB#i1'ÊM|Ýd bà•`a†*5ñ1õöj˸à}q[¼Ò„Ì—_&ºñÍxUöÛ5ÊñoÉ%nš×OÁD|GÀvß÷7÷c¯n<c®ÿ„Gvi‰ßâ\Ãwã¿KµÁÂ�­>êér(î„ßS«•Õͪ8áWŠ3èù„ßð:•;“gHTê+ð„?·òÚ$m„�yÚfÂWÒoPïO(�Ò)…¸qãSðdPD<� +Žúøõ ‚÷Áa�?#q9dV¼ÀïdKNHê49.ðkR¿8¾}êzŸøÂC3×Îàï‘3îêàï'‰tànŪˆ­ãQ…½™ï2ãzá¬{¿ßÕí³œ=°8½oÈqb—q/Ê{ÉHDª5QÞ‡%ã�|�÷„ >¥mã@cÿû´v?…¿}#—«Ý7ä¦×DOøA„cÝ—°¤DHÑöú�A‹U2ì™ûl7æ¢j~FÒ¸Wþqž!Ùl -§„{èÒ¾p/4b8L|ûôðÑ䞬Ð\hnO»g« FUÛS}¿HúÀÛSúµU¦7 ±ýó8ãüài?4�D@ñÔ'QÂ[§ª³‚¦.óÖ,b_ÊÒ__˜Äze¿K�²XÙ„k+ˆ@ƒ|ƾÎ÷•\ +‘b!9¯è4¡‘f\fè°V]¤àÝ_¯¿ÈœmBéÚ^ï‰ö†^>5Yj¤�Úõ ÐX‚]À|¹Þl›ÕFޏ­7¡Ó¤úm=HHÜÉÇ{+rzÒú51™ë[h“õˆP,^`½ÜzDþ¬­þ‹9ïp|¯¤ ­úíðÂ8Õ#Ii�’ꥧh›úÇ<ëu5%õ|Bœ§¿W1LÔ—‘áq§½8êå ÑÿRç;½Eï,.¹^=å§›¥Û~|¨º�r£ánÊ·ôL80üõ˜+E!¥¯jÑ÷ e’~ਨ@z¸–7zõàp’4JÛE_4Û{Ï2.Ñÿyq„xÂ=ºŠiôNè«eó ¬ gIô/4­èϽ%oï¡zŸ?óä5Á¨÷ù–©èkxVƒ ªqÏÏZt𼜧<ïy`ÚM]¸ó¢iØ­7'u™ÎÃɧħ’(çÿqq·eçC�nÇ«�¸ù;r«R=¿æ]¾zÇ›j™¦ù�^å� EI"î´gžâ=�DP:ЕyPÚŠÑ€Û™)c>sIÑÉ̈¸¥ æý 9¼d×Ë#›äÁk,ÄåùÈ{EF¢åw”ÑA£å%ê²²nƒÆ—–¯ü¿BöÜé+ïó‘ú˜@ʲÊ#ˆK®¤›òª· 3s_&ë#ʃ§wrCFS��<¬ð£ì—’É›$a˜0Ÿ’ß0x ¥PËQÉŸ;F|h¨1òÄ®T÷84›òê7 ¦Aþ¤æð›A>Ý #“Ÿ)9>1=ìÞå<BLlñÝûøèØfëj�h_cîã£N[<ÓàÚ(°jOS/Ê’Ç×%7½é Iòø_wø|T"�oÑÏ�á“l@JÉãgßèÿg•†°ÓŠK‚õ_añ½˜s%�GMÇ›‘90�-±ÃÝZb¶ÓñÁÐ6¦éø;…Æ¥¸ÌÒt¼ün}€Â <`-r•Ž'�çéòüÑñ¯Þµèx�µNßx�ã]Çâ'ßøšš,€Aƒoßé…f®›{è¶ß°^Õîv%Æ?Ák¸“B™]üÚ§‡¹'ÕP¯ ‘í±0 fRñ�Š|Š×Ô|¨B°×ÛjSÎñ¼ƒ çZÃ0 H9âáÇœ'häÂÏ‘ùP–Ÿ¥ÀC“CQðªÝLòløÃ >Œ×Õ¾­wH�ᛟΈ´„>¬%-‘‰›ÂsÉt)¥6<‡¦V1 %ΜÀÚ��æíåWÑ_>ÈOó†ZeÙù•Ò¶ÿ–Ô9Œ-G~¦Õhã1Ôø`ÑrnDœ¦:š½$ã>Æ)hœßçHŠ<]n +ŸpNiv�œ|c³7Oˆ<øöŽI¹yÕ…ý!ÉÔ§´Çó€ÜÈýÔN +£y_Z—[Ïô“Vó%N"t®þ¾iŽKMá¡}ô‘ˆæI¨£,ÈQ¸÷ÇÿlZÒÛ3ó÷ÓIHe¾íŸ XÝ«3�9xŠwÀ‚ÌUTüÅ]ÌO•¾Ùa>û²R0ORèuèìøåð ZO‰°4â|—×8©¸^.¤áR;-_úDÊòÑc¼ô2¾çz’”‘À3\yáCñ—Û}Ê^åB«G× •¯tve¹Ê«©J…iÀ«´ëpµ/gC8ÜÒú¥¥OØð Ô&ZùšJã _Æ}µàÐK�ƒ~}]½�êÂõêÑ…R83µgbá€$ éÉ)Ü2éÊÍÝ•%M%²¥z³ÍV3#¼Rn) ÂÏ¥jïPÚ=ypBÏC^8xQ¥›åÔ‚(øSæ Þ,©Ðfc!À žd ©,hPU¤ +>5…ª1Á….Ûûôˆ!8�›‹Ÿ?Ã\:جOYÅ’ ¸à ÷ÒïcàhŸŠÁf͆] ËÊÀOR€<'ž§Ô¦®^QÔ²“uQÀ{irñ)àÄ'_ <ËMZ—?;R¸NÁe´�Žœ°�*ÊLx‘<Œ|¥TÀåN'зhiµžªv¤y#õ«€C +"/Ú\;ÿ¬þ>·Ù--y-à”¤»�ÏÚîšmŒgáŒq®ª&bЮ¿¹\  øøŽ"}þ,àì�ö{&ïc¯¥R°D;kç­¿!Y4ô,à:PÒƒ£¥…#[ÀûpàÆÂàîࣶA¸!€çÆÔwÀG¦#%B} à;¯ºˆinÀ]SÕþþ»L$ÆÖ¯,ÿÖS YR$?±'<£Ñßg†~�L¾ßBâEÝ×sҭߦû_T[Ðü^ÅNªÑö"Äon*>Ýð‚Ÿç»ïþAè¶Á>�}?3ÓW{Dê|û‡I™’Or¾i +ô�çù„3$û—o‰%9z|µOŽo …ÏY¨ÁÛ…o|R$HD£n|o!mæM¯4îÜû%:í]UtøA€Ì±”Øû›i±TcEyßÂó4ºNoÏlŧ7ö‰hã¢NVôºÛ²e :ï`XÐ3óžñŠìŽT°—ʾÉC¾ÜúxCîxwwÙâ-L¬��nx£'¨üË}ƒà=ãtç§Ç¾ûÊøÊòÌwÞÝÆKÞ¡knŠênHêþŸõû§û¼/Wl·çÀÉ{vAKv¢¤•ÄÝbwkøËl‰Yl¯;ßÉȺ¯Tó:'>Õ�Jáœw¶3mugäéë� .ÝWÛgÉ¡ùÈìè–/,t?÷Â�œ8IÄç†Ô44½îäœÛô¯¼ N�쩹m”YÍ-ðåÂÉ8QÃÜ›ÉÃÃljüA5ó‹€åþ¹\}r?²?¡8òOîžųfȾ<¹qÀ¥mw;ªßo銵(4õz܆¥d�xIê÷0nlß& +iw öŃЋj¤â6ÍçÐ tà÷eÜúÙw Ò=‘LnẔ!ÊÚD¿o1”ÜÖ®@{ÂÁ�t›ŠVxÂ~�“¥ÔÒ÷¿Ô8¸›OG•>Î6éàF�>©hå§’îIÑÏË_w ¸·Qv42ïàüwßâî˜$}+¢žÀm9¸5ácöÜZdº²v9¾Ä.ÜîMÉ=/Ü×Çå˜ÅÀ”ʾ•ån ’@Á9]�Ká®á†Ü[(e\¦ wXdtüˆ ñý¼î +&*.6…d+ÜÆÐ$.�61wظh[€öz¸™\QIî¿ÙÔCw?ÜÉÅûÐÜ>ÜɆ>¶§UýûJÒ‡{-KZòÃMB(9ƇÛìx9¡eúpGy`gý‡¯¯óñá~æFÆô…¸5&ÿá6ü(Š¢> þýÜVTusäyñùŠÅ�GÕ‰í*TwR­7[˜Jø·&ôÃ=Â=´}¸U…}g¾âøp×ÚPµeöñpgù�ùz9*Ü!&¨¹.¸_áFdƒÍx¸M%Wlà<ÜK•0°Osi…›s ¼²Âͦ÷l²XPNx¸3ýƋ̡’/îá^pcD6nÓ¤¾¶îÆëâáVþ`z¸AK�{Å °Â­³mbk6¹SážË[F?«Ö *ÜGah°JZ?T¸? Tx”øŠîöŸ»üœ,'ÙûÃME½ ó¢q¸E�¶¿Ò¿Cqï’ãîÇíD(,€!²'n}­ ³�¸ƒ_=tS$?Ü¥²„žµiÍPÃx(Ž…oH¯‘‰…û½HV¶Òð¥%O‡#x(Q5àvxß¿upk¸ÉEèYy…R|{¢RDÄíö�²¾Ûbc:ë6C¡oÉ ¥æöôÉ6 ¾U”&âö,r8­æ§Ømû­«Ë¶“zÜx¨xIu/µ�Im·ŸõmWfÊÎÊ¥*p—íœ1¾£þ$Ží@ÅŠ*Øà +ÛäÈᔯ­ª›Ä³;×®Qx‚ËKÊH¦Z›™é†�„¬‹Çc²áƒÌî€3ó±Úmr½…ÀS»iôÇž·óœ]Yâ]‘ˆrÂÓ~] +:‰¶í€2Îf¦­l°6Fo¦Dµ³cÒ9åö¡Ònì­öoC8ð�v퀚§±‹v|�¡¤JÝ[ÅW‡6J_…²Còæ! Ú)[@Î�”~vå§ò yrþaçÙ‡õœ4Å|¸”Î.ÁÍI—n›¬#œ½òy hĸb³[�·­æ)–ú̾Ñ¥'gé 1[>ªdRx=zÙÞuÁó01ÅвÕ�¼âþm•�ŒV/žQÑeS¬R�Á&›ßærH²÷Éy_®\"[1l1TdÔªœ“Cé�€ì; ñ¬wìkj„Ñ�ýD&vàôŒ­*Ú³)âqÌåÅV¶Ì,a5µSÅF;ÔðžÀã> b?Œ R�Šqè{ü*> >½¦¹Ã¶dèáaKŽ]ƒ~£¯€3Ã>£8:MÝ믩°‡¼�ÏCW…ý`ðxbrA´‹ÚôÇ`ûb–í™Ø£ÊØÒeÙKÎÉ„vÐm_· +¹ú׊Ÿº4ŸÏè×CAÞD©Wó8~}t|Ô3P(žLj(¼oÍBÁp×iÙîz�,g©S”fÇk¨ï@À§:¾kSŸ…/“?¼j×'ÖÑ—u=æ=×F×áf.6‹æ­¹N=ÿFÞyŠŽ¹Îltì[Ð� ®·!ì„äomÑ":æ#6÷²ivëDÕ“óó×? + ¾ó(ÉRˆŸl}Q£¥9­[Ö»µÖ`Ïò’ ©uCÜG¶&t›“Ö‘³¹‘Ë\D@kµoe“t¸Y[»/»¿2nÁe}ØCó]‹%ëè’¡7Y¯ÇV©@¬�%ûĘ› ŸÏÇ㉵x7$#èàSaMê”OÀ^K]|µœÈ¼Ä$ñwõ[{‘"g>ó8i@8-W·Œ#¬â%Üj"õ,Õš”‘V× +t˜x³HBŒ¥z²Ú(ó 5¡¬¾m[|3µ!4®ºeú9† ƒxUïg†DD~É… Sµ‚_Ç’ßNP)/ö™ù8:´M©N«hj÷TfQýS¢/¥’SA5'}EŒÚÔsEž�†SW#i€ŠŽ�ÎԻȑĸT��—úžµõ’z/Q¥öÔÂÆª@:Fê’štëO³�'¤Ö±”¹åGŽ:Ý!m�Hé9Œz6ÞÖ?ŒñNÔ54ɲÖC­-Ø§ÅøÐB}ˆ�Iê<°mP�üm   Ô–eë0lçýtE[­�fòi ¡DÌ+=mûÕ><]š±Ã¯ ÀÓØ…!‚ÓvNàØi +.ìœéåþœF“aPžÒ*+ÍÙ¥­Ò'µ¢NÙ”'­Ü ƒL0“>l¢:•ôîJjHú3ÜžÔŠiØ`)RH‹< çFU]ƒAÚäÃEr%ß�­Ë¤þèÑ.Qï5Þ€XG?¹Òƒ¢ö‰£ååUß’T`"l´SsãàM=†›aÏ •ˆv{ +�±å^tÊ=!}/衳h˜j°Û�cNUÑ€³wîŠ&C�O&zɾt˜èÒºáé2·ŠuiJG´w—— `Ƕ¿¯p!:Á~‰£¿MàCW¶‹Æ\Å<‡vž^ÊSr«¡uÇÿñ,¯aè<­ŸA‰…V­Á= +ŒÂòò\­aÉCB“v\éÐ÷®Vúƒö$bÕìd5è¾¥ÇDþ:9 ÚŠÎæ#èË–Z�½ = ´�êÅ�ø}|98Bz²Òkà‘´ cÅÅ0éNô?#F„.U¶…±:®Y›jk&tö3 f@ø,_ãçtJÕñžR{� }–­ =IÇTÙz÷$�KŸ«XL<=§Y•@G¶žÞ³ê2ð™ÑÀÉ4.üöLmˆJšL¢ºõ|Ñc@yÆ(HŽôlàð=Wî6á#¦æ™JåhÏËLä9âÃ�eJMÏh¼užëó©ô��¶Ç’}éðRtçA k�ÏtíœpOãÖI쬉íÝ( f@Ê:;“µ<êl»É««2þ;K黀ŽÎÈ&ã�ð93Äv¤D�¶æ¬hö³9�)•à˜r ÝèÈ·œ“Í&¶NHÏ'9Û-ôê K ¹šŸ’8ÎX9™�÷-'Îím:ö*œAèB¼øÜpn4(CY/qofYi¥»ÙpDÀé7<üróç Š®¸U±™ÜfDz ®XÔÊp¦ÍºÞÎ0UÌd35ß!øØ6m€ÀfFü'”ÊÏ­Y:q�Õz;¯æe›Îô35#çT1%�æ«$GKÐPš MÓ0ZÕ .š'™%òõ›´$hvfŸóÌ·‚öd)g”OlX$Ò-±ù™™[GL’Èd Ðe.`ÛÙZ3\ñ�'•�Âiâ’9ÃìçÌ2^½ÞRnþsÌøþûùÆÎN0æ›×<™vØ8Åœ“(N1ƒèæpµ 'R’b†Û–Är,a66J1OlÊË[ŠXŽ$O?ÌzñÆ^Ú~˜Ñ�ð{}˜ÙQø$Ʋ|˜_øòÄ„šÿa~úþXÂðo ó]ì´*ÄX˜‘iR£Œ“ÞÂü‡‘ðø«Îœe¤¯o½fë +dóÉ fMy™þß"¦þ’l~K)Ù`V8ÃL,s 樜¨BJsƒÙnfœÏ(c fÇ·7”äŸ-Ì[ bŽÌ4Äœaô4¹àÜAÌ”u Ø+všæÄœ‚dEf=IȘŒ®ùì�wu1@Šs�½ =Î� ¹»s˜@€!|˜K´Ð•Kˆæ*Ì€Õþü +By…™²r¢m*ÜЦ4…yåu9‹Õ§S@ ” +sL»¥¥5� Â6Aq2ô“ýsƒ‹5}�± ¦÷÷2*”®vv.ÙarOòB¼Ï²I¡„u,†ã—‰ØýÏ Ïh/ßÐpøê ò2cš6Â$ŒÛ)vo—AsM#§tE[–.2±ŽY"¹|CNUl=5¡ìÀe°åÕƒámÙ ¯Ç½k¹��eÇñHi9د՚†i–ƒ2Î2Y³#zúdÍùK–ñÚV€±‰åR�>$°ìåØÈ�˜ ¨weXétWê2‹ò‚ÆÿPt+co§,€=¡ý9kø°ŠgúÜtlNi©ÐÄbmZpìÊk3cÂÿ�؇؂F®pz°#y{ÊZ±oòrD ë 8û× ÎÆû›l8m ÅòÎW‹“xèÃÉÇÙîRËå ™‘Çœf›:™Ñ9+…µÞúoJÅ¿(„¦“™±*¼Z�ü e©Îʬy³ël Rv¼¬·�£¶SÃÜ†í´ þ )€bí$ëžItçU¡i+}'§ÌI1<ãdB�ãñDßR=æ ªN„zR@®M71]ò.%.¸Ï À,WZ!ýÎ/ÂxwWeÒX¡ØŒÛBt¿çuÛ] =wˆ­ŸÄçÝ9ýéÞËC|&vVŽ]Ï P@Ì[ò€Š¥ŒžÅ@ã(KH} ¼æEA™á2•eP”” Çâ°ƒ. )Êîy´HÊù¬PµR‡à$‹Hl-P …�C¥MŠz(~]oˆA4�«¡ÈÎе¶ËŠÊæ‰RJ)ÜS4u'+`Q�‹k.Ú‡3‚Â(ŒøÂ2ªKÿ¦Q°ã@„�®š•‹Ÿõ»Zí©eOnÝÑéL쿎©a;š"øG +ýèŸUþ Rôµ ygÎ韥5ò�†0©iÛÆÀÙIš¸ GaŒ �“òe ^¥º•R”¤v¦Òâ/þV*TSKÝ|ëO½(•3çôù¤¥VÈ-L麔Œ©p'd+Sá.r68²Qè”!ãp§)�O2†)õ°i+B�Ü�ðk„ÓȈ¡aUŠÊ\™�C�Æ^8‡‹�Aw +�¬î¶A¥Ü$”âù ú! °Òr:r«ùãHF¨Z8ái¨0GD…s…U`Q©0H2c¥ŸŒhú¨l+U.Gj²>8”Š˜Ee©Ùé$ ¦Nè ^kê¥>;<:•GŸZ6ãù~ÒìÌ¥ÕŠ¹¢i•¾—›Ò¨¶ä•k*ÕQ‡ÒÑ9tyúlª-µÕ…Q•?èhWU<ö•º–Ut½_¯ +Íygb¬¢N àÐê$,?cM�§cœÅUøwÒÔÕì´óêA�C¦€M¦ VHÁ<¬×0ãa¬ ÛI*dm:;©¬Ò>‹éÌz+ÃÂò¬ª•RÑÊ,r½´šg¤ðg­¬É­ØJ„–Ò®­‹† éÖÙµý¹o�('~kļt¸Ê‡^_ × B­d®FRä£DWâôû+ËÈY]{`E¢ÈRyó®¥üPšâ•^-Ϋ×+:6²ïÕÑs ¯µKsü +%©+ÅíªÐ9€AW(ÀZº®Œ·‹Ž–-Ý}�»Ž½î »=CÀE¥xaËFÈ›†7ÅÞI+±¬ÁåØ;6ŠÀ¥ ªÜ-¶Ù_4e26vžtœ6ÖÆÕ±$,ñc ”y…ìpàT5G¶´1ÙÊbör§ÊæmpÁY6Dè|¼,§b¶îFí©3Ûík«”J‚³årUcéì8ʳíQ]½Ø÷ÙÊI_‚Õûò -Ž P³hA] :øhSŠÒ²Y'^�^©eÃæP§U^‹OD-ë‘{1ÑÛ1šZ¿^S«¶˜Û? {ÛÝÏZZo-¹m@� ®•QÀòZ„Is5Ø�ˆ±�`¶H™0’ЖOrWm/E˜Ù6?ÅLð¶ z¬âÖ$@ç–sÑrxÝ^Ìü‚ƒR•’ôBù¶Ð ~¿�X(ÂYŒÄ�®ÍÀÂ…a &)¸¤êËvw%ÆÅ^C4ÊqQLJÜRÂäêÇ@&¥rÏ'EièÊèr‹SA*aæG%Èç7Øí[]ÛD†à4@~]À(Ýäž.P6§âm§ò©{�F¬ËˆØ4×PØm/†bÌ\veÇÒ©Ý2Øí’Ý»s7TãÑÞÍhD±=\ (úB*�Ù7‹²}ïƒÒ�0‹�ú^¾¤¾ì—m¡¯XþŒ4Ïré}m ÛWÙÿЈQ!0AÆç7ôͪ sÈ� „<¹Ä<˜/QkÜqy0_ p*¾$üS)s‡|Ѹ�H~;ä{Ça óE¢ßY³ßê㛊Ê0¸<ábâJ{ Msµé~’�/á›7°EB¾ü¹¢pœpDÈw®4ÿƒÎßNÎÙ„DvoÀž¡l/…í->Þ8²ð]ž‹;óCLÎ˦ ö’p*|·¼D>6œQ + ‡ }_OÍ!vs ƒ0„Ù|/LÚIúf +œæ’‰ô-ÁW,}õw°é«£¼{â÷÷CÿH¼–±ï“zúrò»ékŸ€Gç›|N·”¯ì÷×ß‚”“=Š›‚o7m±rXF|ÿry˜‚_QGâ#|u/’I4ø*J¥0嘎¼Þ¬™Š? ÁÁWp/ÕÆ¾˜_Ê…6 "Tõjû•d¶0ø":V:©;øÚ¯Ð(ìVƒoÿûƒoþª£²¾6bÎ¥"|U›Ã�ÛU„ï­ÉÇUÉ.á«%†#È: ßl%ö pÄŸQør(6´/|1¿NGk°J7B¡‰ÆŸï�mæ!ÞÞ›¢pœMáÆ»Vߤ*•Ó;S”iršRI{ð}9¾ø¶.¤F: ¾^’ˆ�äž…=^/Xáû�ÞU.6�û»à +ޝòœ²>Yßñ/bž8jô:¾,DU¾fiÛŒK´Î<¾o‘¹!Õ�ï^¥§F +îÂaáka¨B!ZøÂÝ$ ‚È­mM´Ý¬›| _©÷¬´}È……ïìyÁíø®Â¢ÄuÎñ × ‘ ¾¿ÕÛä»NNÚ])†ä{ÙýU‘…ï³@VZøŽp~ÐG˦ðlˆ�€êb³=±¶¹ÂW>§?¾£;„ßCæ)|õG“ès|Ó�/†ˆãKî…ê ’›ÜGŠjoŠûå¥Iâ"Cæka¯[¾˜or¹b¿Äs§`•‚¿AHUÜ7‡ËW–Z,—o�×@¶ý._‹cGÍløò…de|†ûº>Ž/‚ó‚ç_TlmC†+Öñ]<22Y/šÚYóï—Öe˜Í€›äUC.êË—³{ øÓè *x]Ô÷i>PãóeYs4ÄfÔ¸èã2º²$àDZã§w¾Íû’˜/|=„¾à3a¤ªoÝ +3Ýf_ZXl…÷ÅÖ¼�Š_™Èïü*�ÖÄ~‘•–ÈçZ}­ÑÁðwÊì'Vëú�Ìda3ûúü¦¾Z¶~M.oí› +~:®Ë¯~ÿ̻€‹ŽdõKm8C²~Qâ.=¢`µþñ{o~ï’M¹È.ç®ÌÔ ƒ3‹_êd~»n³³.Ñ.s÷•ͽy| �6ϼdi'À�á×Ïë¾îɰ»Ç·¤á÷:Bdá·”«3.¿‘0¤Èö^€©ßý¯w¿á|ïæïJw×ïàœwó·ÛÄÛïïƒÉ^ÿ]\¢˜Hº((ÀmÓšÁiPƒ ¸¹1‘qÀU†¶ëKàÒª'¸ÀÅ †QÑÁµœ˜ÖÂB›¯;5@)˜ú[·`û�Üp Žî7šŽ .P?¢:˜Êª�~0ôYœê!<ÖÕo!áïùŒX!h�°ÍõŠÃßÖÂã­¤Þ`ãny†é×ÄƉ6Uþ†Á;;\56úÜÃOÞ0CñDŸ°„<‡mÕÿU#F$…þÂ#±ë/X +KLñ¡£šØ. ÇúÄü…à<�bü?’C»®³â‰ÜÒ'Z!âÕYŠÅvž´…µdvqãØÿÅý[È&Æ”Î?’±æÏq¾oÆÚ’ƽ1ÊFÌcVS»ˆL¾q¤ q\hpÁfŸê:þØñ7ŠæŒŸ+<ÖòáXõvnµ:':¹ ÍBLs +3‚ ƒù��[lã(¡çÑä1"Cˆþð?íØLõNHÌ‘QÑåÎ�2äíŠÿWkšíáçï à–?/Pf¹%@X íã| +}ÚßA+¼¸— ]W°×þB¯Ç¡Ù|˜w!ˆ¨¯u ¡ΤhØÁS.)º„å ·h8þ„ï+ÑŽfÔº§1  ¹Eâ¬Ïm4à¢ìm²Ä�´ØïÉ�tôcËÐ )NzáWu)jÈóo½”žÅ¿Î©H’>ù¤×³Ñ Ó0ÀD.™Îy©—š¥"©Û¦¹?PÀ²õ+ j§a.‚ðÂ$MÔ=Ø? Òƒ:„¨QŸÃ¥fÔ|F�I‚ñ¿�.ñ¨åá1êQgâÏ8©ÝW˜zÊü¦îQ@ÚJÂH˜Z¯Âeñ­•'/µ|™|ç;¸Ôônj—ú‡ÐÍ2Më{©Ü$(@F.µPþ‰;.u«^ú¸føÎ>8+;Ö%îR7À^ “@ )™ Lª—Ô.¶Ð>WÊ•Ô"Cv£·”³¤†vÒÊÿ㬤^»æB€ + 3 vIØo�I¥BcÅ”Ô\N�SR¿É¾Iʳ½’š9pû³#Ò(PR¯‹ãKj&Тöjc%u›ñ”Ö¥æ $Ð[ê+YP�&î‘eFR§"z)z"o$5†#JúªNJêH¬-bW蜒:ªj¡3—:¶êuDï¾¥ÖS�lÝ[©‘¾¥¶w»Ô,qtšK½‘Ü;2&8%õƒ]&©“-Ç»6{p‚$5púðÁIMLqnqá©7ÏŸ'­»b~¨Ié}0ÇR[ÜQqð—ÌR«¿¼m�î�¥~ Õ£ª¦Þ©o1µÒ2L–• KNÿ¶ÛP¸3LíGÎX"…©)i+�Öý05’)– š,D�©[Y£}jÀ¡\)ÑdE[­ãR+G5ðË¥¶H%ÑVÌ­�ÔªùŸp'©ƒÞš09%Fjâ—1ìÁ€sÞé+”µTõë +ˆÌ°3j#uÌ. ˜™-jÔ–ç>µÆ¿~çÍYFÍö¼“ù׋ԌNšJ8n]£•Zjs‚ÔÀTÿ’0w䣆®;£ºíGM]ÞGm–w;ѱEÝá ¡“ê­'0²¨}¯è9¥¶¨ã¹ÁOèîS¹I"Ð'‘>ºÒ-j#aíKDfQwǺ˜ ¾lQ‹ðó…©ìÒ¡^»GÐÉ¡Þ +´.¨óÓ6ŽýxA½GE ñ‚ºÜ¡ðÊ? +ê8bŸæ9Ôæö5;ýSjÃË@a5�ÉËíB› +j™Lt(p +Ú"_ÜyÆ užG–«ÐPߢ÷- 4ÔÎóþw¨ö^±¡V<)~R£h¨¿Ùjnñ}• ‚úÜ¿-ù±¤u3Ä�†ºw7õz4ã�GýãDOj(޾rzR«ˆl15Æ)ö+§>ò@ýj”A1Í©çwôZ .ë~0µŒà”„©íe–&èÜm L]-b0«S÷«õõP=”b%/Õ#àļ ªYÁÄuÕn/hóë™nÍêî /û­þ�Žñê%ŽíEk—á—'ŽÉÀúgl‰dMÜÕëœ� Ö{H"™bMÂ,ëWœÉZü³YÃ4JHk ¬_´µæ[Ôéo£Í`[ƒÂ^ߎ´Ñ¶Îs>Gx§´ÞZƒ1Q.8ï×Ö$]úǬH_­¡#Wð‘¶ÆLi�$hkݸç¶V§­¥XÌ�b¿ÝžÒÖN›Åêj-k(|QîhµæYm ‡ÉD))«õˆ¸é+Z³Ò­Ù1ÿW«hUhíob Ónh-¾MZAhMŸÀTk߸o|eéªZ/RÅo]ñKµž;•~m„o2µ¦ÐÕ?·ŸZ³ŒØ¬QMÈïH­×*à«Á×E˜¡¥ð¶�–mj-Æu~­L$´“©µ�ÞI’ZoÀæ/÷ ¥ÖO7Ìi±5UVý¦ub[':TëG×¹Fl ýàX—Ë!ÙiÌús|ól�‹RB½™|Ê"å·ÉlÍùj7ðìŽuÎÖÒCÒbB†Rqˆå—W»UHhk¡Òê5‹mš¶–„¡³·æHŒÑÊ�™�NqoM©íÜ0ë­Ñþ1ÂuÂTo­e‘á—îÞšŒ?Nã=A»5CAÇ'q„¶Ý­‡gýVOÙšmw¨d·v’h€—ŒIÛʦV»»µËJXVøsC�qœ¸–“Ä£y¸w÷ï7 +´Öq/Ôú-)sM³A«ë¢.Ú»–ìúYËÛšËV‘ˆ_×±�Ò`zd8ýz’ýqÙu{‘øµ5GËžbXÁúäVدÒÃV:„SFèâ\‹Ÿƒ±ãöšƒ Kû G(¦·€·¥O$â2eC<AË.ùIü,c6T°ÙÑ¿ÎÀøìöB;î½Ð‚dóϾ´GAím7dž”òVe‚еéPdO×^àÀpÍ=?xL(Û<¤s v…´íÞÚöpN)?5ä²ë¶] :‰ÞÖ˜ýö9 ­5¸�nb²­ã&ÁD¦Íû?¹¹Å«ëMn[ ¤·Ück\s#^¸ž{nnöB¤è&t=�î™d"+IÔªé‚Ýã%SÒn�\¹[@ÓönáÊu&`¹ñ&Ì9ÌÅî5O1õ¼¿F¦·Óê\ooÛû[�ðK†-_apõ²vž Þ³ÎÄ1­®ö½Êï~Þ¶ö»ÿ'Æ9ûîÿ {bÙpƒñŽlàcd9¥=“ÈÅǶmüñǯì¸�Ow)z<û+�÷ãÝ ÷S'¸èæ·aäÏSÍiH~Í3)TÉO3ùÌl\ež\å·ÛêÔ)O Fg®òQ,g'6´®‰w­ �6†>}yvj£i˜3Ë„3Èœ't2s4&T4ïe3¥i;yÅ ÞåÓæ™7G.ÎssJ3  ƒ¿Îûì ¤€çœ‰.ô‹Tü²¾Ëç²È6�ýÇÆ€vôâjÐïµÐiÉ´ÎCGgà ôK¬ìLcô²ëèp"½o°|ÊMú®Vúã�Îþ.š.xöãô¬±ÃOOϘ%—Ô'ý›#Œú$°R?¯íϽóÔÑ®ŽEè‹õœêãU bõsdrpÝðbëaÝ›Q?Ǭ¯ÿ—ËSëžnýî#ðæ:Þ}\ÿ®‹Ïõ»u¯;%F@ {.•ØYø�±¥“‘d¿à·Ò{À4Ílv‘Þq•Í>yàIý X'Zó[EZ~Ô~ß>L¥FA5Ý’íE«åÚö¶Mâvûñ&m2 ÌÖ8w•îÆÑræ�03wÈ3 ¼è>:sÉŠî'"¾HýS„«;á´{ñ6ÈÛ»ÓJáïî•û­Î;³±¤ëÝ[‹§•CQ§ïXKFæ195౿ß¿ >�g$hàcöûÄ‚ß�©ˆ^Q…¯ö’»3~Õ-ñGŸc�³‰ŽSòÌ0ùb å÷@¦$•Ç�Ì�dy.ú Ô.�<ùOÌ'Ç^3ïäOF­yÎhÌÂ7ÿ@úú6:ÿçëHQ,þx¾¡ŽÐçƒ'… }µKƒ=úÜ»Ô3ô $o{©è_ééoþèPzÒ¿Ð;Äô Œl§¹à?“q¢þÞ¶ÛÝÔ_*z�Výx¯'DØéQè¯þÚÀž­GV¸WÄõ-™ ð/èõ2ƒk#ì…†‡óPì«c¿¤ sÙ[uÌíIJ6HíOv©î”íÙ3�‡Ý~}Ej0Ønç8 >ܳ(P!�<ÜC\S:s¿(世{¼Ä'ÆXc_4Ô=2˜¬»'ŠUZ˜÷ô &÷^Eõ ªxØ÷7ü÷x‚¶ "øIá#\†ó7«àç/e[Ì»ëêö?÷ñß« ²#Ÿß�¬}(ÿ�³|<Å|¨ùöuÍ�ï�ÎÀœ|Ÿß ýËøèóL¿¢ @I¿é–?*»}‰‹¿‘.GŸ»]úÕgÊòu~¥Öze>âfyþ f+öš4àv Cª…GêdXò^Ÿî%…ïg#&U¶øÅ1-Èã¾¢ø01õ8îg +ÇgªuQ¦å«%Dí‚`¶™æýFhÚq"c�¬ÑJ7ÜùO (•�µª'AÓ3c½äÚ•îÆÛ>þÇ4çãcœðäSnÿOBwÚmî3¬²–:KÑôö?ùYø‚ËU­‡‘=ûàAëñz£wkzO¦¼äáM¿Tj¬òþõ!½õ¬×Mú â°yYçPíÖîÜL:ãîÅc +¤Þ..–, çŒðü3\ê~`ÅÎiw;E0AX[ˆŸ1¤˜ÜOe8ØŽ‘¹K>ÔhëõöMš4µµ¶It?1è·Šw­aB¯Î’3ÇìÑü:¨Ä“á¿ÊKÍöCØ×€œL3Q'ÈUW%·3é…o™áœ[Ò;×NÛì@�$�Ï-ôš[ò¯š°¿CÉF¢‹R³çà4«`¶…ÙUŽð|Q‘I’xœ“£¿P'7%­²ËîÅî*�“rÛ +XQÈ÷Ü’]yî–:Cº!ûˆÊ5„Â=yË~/@P�+';Z6iQ‰¹,B<òÍ#´By¬ÓÊ‹ð)ÂqÄŒ[Ü\Õ»Á|¶¹k2ä0ììäY`,‚,ëpù¸>~õR3ó_>sÚ»  —W¨D* +Ù€Zl{ßå�'—'pÐlÆ ¸6 Ü`$�NAQ#�Ë…e·œÒ«5Qùu GV%˜C¶dm‹ jL^c®Úa5¥ÄFþ7cÍßL'!KÁv·a÷ßA}z݉&Mj¡'V‰‡xðƒÖç?ã~7sX³—Џ±f +ýHÉ&ôı<ľf—Ð2HŒíy*È'Ø]yŸæûŸƒI-¿Ë,áݘ…ËS…9ÿáv&»<ô¾bX½É1Ù´Áƒ +ð¤XgQƋʳ�4ÙÏ#7÷L©Ô+9ð>c%{ô®rGá@#Æçšïìù–ëÚ•/×—äAxøÂŸn€ùÅŒ¼3§Ãs³™‘ö=B ªë|‚n©™Oí�?Qó´ÂŸø¤ƒÃr:«Ž'°yÚƒ,aª*ŠvYà # •ÁW£úઠ_»®y®@J,à�€~¡C{sjÁÚžØÿ ¨‡hƒ!�åÅYAˆkð£æ�›6ñ%sÙ¨‹Û Ð’ËR¶òèïqàa�¬æ ¨š +Sršº´B¨åMêðJC‘Íë׉)zñ-&‡\ÚžàQî'srÁ ¶Yˆ«9:Wy70;(âCâ–_Á×´"eœ5†¤’ê³7r°''P�Š­ÈàhV"2Ñ[�ÙÖæÒÂM~¢„ív£‡ù:NZ¯wd½“«×Ê o_KšÞ’‘ô�¯NÏXÏ+ä>]àû›e #lŽìèB�¨"¸%¶d0/�VO'ðõÃïŒÊ¢¯_™Ô·!‚ä< Òf +(þj7_ÏHpë¸6éš1éÿA•Ð2Ytr©›ô*¢’´08 ú]¤:{*~Ð ”c²?}}¬Y!‡ã/³ÕÄçù-G!O’ç׆#KöP)fjð¯û¥<}ã¶A’§‚ goW÷�e¢‰3ÕnpÄDşז%�…ú2)‹)Œì£°ðT�ÃZ»‹º-{~“RN×e™G¦+# ÿòx�SJcXÝĪ©?W™�ôïÈTå,^óÞ�á1PT¯›õ…t'B"Æ�¼‰  °Î¯îÓÞH8‘°“Xÿü=;”IŠ#  \1Gãüt2Õt·H‘"R¤�A‰ã/<öºS©`—´ †‚P¡jÚ�ñ<#¦?Ñ� Šõuð�4” 4a&èx'Ê¢õó.»ÓZ*Ó£;AgŠ^'Qx6 fŠ€¯Qgìä÷ �t¢„Îïé%…ßÜàkõ_o�­q†ÑË`ì÷²ÄçÍõÚ‚ëÓº·™­›Ðâ•}@W3Î�ºu�n?ÖÖ‘hAŽÖª�ö*΢Ъ~.à›v�úit "»Årûüø6[üãÉx4H¬î0dÁ'⃨Ç2N@5É!Ï)E“°Æè±Ó‰6ôhƶ‡ÃÓòO}ª@Ïî4ÈåO¹y†FHT�Z1;Õ,©‡�ôhà§» î#92ÕÌl°®ÊH·a·6�Û‡qN€_ÜÉ­ª{Þƒõ(qºý´©49Òù"ýµG^¡*àÖJcîZŸÂø�•d]aK#²r‰Å/{çYÏt íÍÉÒI¤’¥…|Üß­`/J›�èh*RseÅ ºs*óný6#=ZJshÛG‰Ä` S,`à:tºv´ËÊ�v>ý0z–¼€>sn³VŽh3ökî�:ÌÔ÷‰WïBU¬eÑÅX�ó_~JvÖ(á‚�—MÇI›`)#D8§k�ÄæÕ䎌giºàü-zÎrÅgüë» “¹óäuÝq9’36ÐhDVˆÒ#’9(KÆ¿Ë¬Þ é¯Ø„…û lHÌQìmjì�˜¦ËG�[¡±‰·�±|~�tÊÆÿBiì M\gHïrÁkØÁ9ݽ`ÊÓ«$½ïÕ&%…í>à +ùöÈ(ÍňhCþ–ì +ň�RmPeUDuxà?RØ©N¯™½´îÀ¤+°à‚#yë×ÓuéΪ†.`‡¤Ò�Oy¼x2ŒôÅmò?G÷1ÚÓ‘Ávm]“övW¡•À˜SAo�¾&ø8Bm`È€ô@u8Þ «H` +ÁQ.ôX‰ÒðÂÌa½¶ãu@˜e‰“4–Jnfd•Ø<Ù³KÝ\ÿ‹ÒÉMé‰`ªVCÔ´à ²N~7…ž\ÓôKÃ#)Þ"|\=BŽ ÇÓ݉›BÁo[ÒÊ%ÌÞ”%§9¾ŠeGíp +inrƒ®Àžô@��6ù°Ôœf‚�ò"_Ñ®�âJ:—(5Hÿ!øÏÀÆ,A¸8íÂ�$—Ù“á�� Ü‹àÌë&SþðeÔiE»3¦Úb£eÚœ4L–«ß¹~©ó^—ð¢Œìq ì'2 }IåÁX}Pðš‹ÚÎØ¶^PK¹6g—ç‘ÃE¾ç¸žáˆ‘YL¸è¬ÚÂ’»’%ÎüÃn¸1Ü&¿pBñ4¤pNŠé­B18àÚv Ÿ9öµ°K5Bæ½`ËK•æì„€â©gÒô¿M¶gPÜåÀΕ5Ö°…©Bb¬ÕCB2;òŽüš šŸª¸º6¢rØY:�„M¡tGŽ pZÉܤZ!äÄ ü¡»Ë’º[6¿#=DÄ·Ù´”GÁŸÌC.[¼jæ��KNÓ‹Ið9´¿4>!*èu]ÇdYú�Y~˜h-5yå¹ä6 etqJÚ4G½ÆdUm²†w±ñõ¾ã ·ŠJ KGâëÚsà­€»½.^@‚öà}wSþÒYÏ~ZH)u-Îfè;­/¥@“/Í<½6€9_ŠZÞf‰o�ô4)hÎwOÓÿΤ‹eúÇUȨD¾r¡KÜÉǶQ•ô” Ð:A�ÑÉC?׉^¬yöú*myf?cGñ®�¤˜Í(¶Y~sP€ÇNú×÷ÏÂ1°¬säR‰ùóÛ‚q;èŸëäië(ß�ïfB� B´‰Ž‘HúF|“ßÖFÌåì# í•n �Æ™þRûêféƒeõPI)lã�ZQr:ÔÙª.6ïã¢U¬Zȧ&ò‚¼bk °rB¾Î(@nÜ9o�¿÷VUZÛaÑgFÝP3›V¶­˜KôÛ|ddŽ8ߨ£ñi*aÀÃEöñeœa‡k*8©Š3îçÛdÁ—7¸ÉÏ'n?Ù“Êñ]6åZZÁóto·a€ã ÈÆÖwSÂÏlÑ=üd/™R¬œ”˜ ‹¤pD¡Ë-�W"Z¶·Þ½ÈY{“óí°¬„6}éüN­ÝwBn�Ðý~ lÏà�I/»£à쌪�. ÇyÛ*°ÓÞ +á6Æ!*߸Ë@D°j”qÖ±¿TŠyjtÆB Mìµ4O4=>ÑÖ¢ ‘Z^p�r¥œ žníq¥¦Šg€/wzN;ãØp¶ÚPd~½�[H<ÑZÁÐV9k»@�€»ïCéÎ1‡Ü”‚oO +š—ä,˜“úFs6˜‚Ÿ?Qµ—•>±m‘1Ê!qVÝåéè|êpÓ¦ãDuQ2#wz㻀ƓÐßw­"ˆ«î¨3‘5 ͈Aß$.ؘqÞI½0SÍKY\ŒP$Ú²t¢Æû-êÜNçYÇv"óSª¸‚BÒ¥ÝGL˜pbú¬­8°’;Åž ;±â˜D™"ó å„Ì@l]Ç~&)¢Í§|€™Ï<8NüîÄrNÄ#nvÐÔóƒy¿µq÷ò:NÊ\«®Ã|ò[T´{ƒûÅÝ<“÷Š®ò‘Ç3:D:nƒ¶|uv†Á/ÝÉ6frä‡ÒνÝ�M–S�>ãd¯BaÏ»ý€ž¡y¤“‡¿Û£@´$c"© +L@rì<_3X+¨õM.ÖæÈˆÖòL¾$—νO‘æÿÓU¸nœ%g}œgÌíŽeåÖÿ›¦¨Ò÷ÎZÖx-Iàqšå†“ $:ó퀥M<`& +âÐ×PP'œ°±�°u²ýÿîv´ EæªîÞ.°%gÏ%‚"Âe86‚5é�·áªs¼`ÓABÞ~%žg.¹D‹Œ÷rx"Úé•¡áJש†Ìò-*,xÎÇêJÎÑìg˜_”(Ú@vÖé�(ùns•NzlK‰ºõP ‹™à¬B½%x,š%€È÷‰ã-‘ks:Ì„#yJ+3ªmÄ{– Õ + ëÍõŠ^â§ä^Æ ¿,€—ˆo>§¸$޲o RêÖŒJKí`Ö´@47Í’U5tÿN³Wv[d�~0Ë E"cÚ³÷ÚÜ +¯v½¯Ë‘€ÉŽËjC»HæUaÞ´�ÿ 0¢³ŠOâ½R™ÈGúFY°ñ¨K§gh:}E]è€)‰ÊîiI_ð-TP q�Zg#›¼–>w7öÛ€N/Ñ_ß*õZv¸o@龋{–ð}�eç©0{Ô‰·Î¶&_¦ÊÜÝE‚–~Ý Ùš4œÍ�S­†õ2Àú±áKeAÎqË1E½SÂ|¼ õÄ,ÆŒÊÖÃ�šp£V=ý1øÏŸ)J.ãÌç�¬ðJ ‹L·™ó=ç¸WLX´K}OÁwö¸* S#|$@‚¾ð¯RçU‰¢éæšÅ2†òE›k äÔ¢RÜä{¸èãšåŒýJœèä`mOGÎnºóFí³X:0v8)+³0Y‹gÕBp¯„-Þë £IÛM�°m»Ïz &ncÕ¥p¿‚$BÞËLÿ‚À³ÀE·‘ ±z§BU1Àë¼5ˆqŒfÚy²˜^Cyø§Fm™L'±ñip3+v~†ŸóÉpXMg6™`L.¿b#uÔ3¾™OɪL¹&S—øUå— ¨¢@é³YœP©‰Z$rZˆ�òbÕ”`="¬ÂƒYò/å²7[Mà Ì<[["û(Õ Â=Sxìß'Ta2mÐá¿Å„ÝßA�qÔÉS«Ø˜PÆgÜ¥à+®Õ aTˆ•Š®(|ÀyIn×V¢y™ �N`è/Qÿqï7¯³yˆ¬S¸2ç:n.˨tÏôºÚ½ÔyD/ʯÓ|c%_8+/­CªÜdÕj‹fÍ Ù 6s“È¢2€í4ÿ’¾„éÖÙU?nöѱbw³‚]è*vuRGBl%j�Z¯ÁJÓ£"ù'$Õˆ!DØ�7.­$‘„±ž<àƒr¤žlßs $V]_½„+ä¿§qh›ØLD",¶…íàNp¶(y?òn‚Ha—1ç}Okx2sòµ Ǻ/ý>uC Ô>ç£e68(ÁžbR>3Äf;_ç z6 ÁêÄu×γFvÑBŠe+À„ç½lá[U=ÝãFSGTš—>y±A£f2cK�‘;"b÷( HQ‡=·­Pŵ( +ãÉ8`„<ô0ó²è ®m›a:³gúĆ-DÕi9åpŒ˜sº•§Ñ、o'DÃÙ�¾3¥CõƒÚÕR¬ècHÅ!û�nѯ²–ònÆ$+Ý´3QÇ]Ew(hœW2³ªMhü,¡â–b˳FÐ`«¿” Þ^e—er DÁ îÑT¬.¢›¸…ÏWÙªãX«|Ð6¶!™Å{êfûù®…m倬IËòÇ­ßô|± ËV¹Zän-(AìHæ)�ŒÂ:냭I\2F±N·þ#{…?YH-Ì—4 Pfˆˆ<¤ËJmY¹´ä<´ßÓ€{ Ñsæ©€j{r…Jc( ‘&„Üu86Ì ¬ùñl)YF•6¬%å‰ûü‡Ï¡5•6{rÎ[à +÷j��QØyHÇꮩ‡/˜É¤Ü§üch ÛiT~Ó,2vj +¢±Ä/Ô!R¬·þæÈ‚,X$]âè$fÂÐnTÑþ7*¸2µâ4+QþfSî;­GBI¿æTò0C˜qÌÚõýôêQ–4q4O-?¥n.ö¬x?ø0p—ÀF‹r8ê–œü°å¢dQ£¯Æb|M§R—nõvP”ttS;Dqß1¤ÙrÆŸIÒ~9Ñ#îQ‹ÄÁó:£îP€š˜ÕïK÷*ÎO1E"èF»Dï‹è¬ú!7·NߪÉ`gæ=oø÷¡ÅFö;!‹ÃüŽ#yâò›Ð<)$Ë¡YË>4FÌ@kLöEx¢Œ2Ñ86 ´‰…�Q¡`A^{Àmº„Wzv=‡Þí”.þRÆÍԼܬVíH!µ²ëô�:.�ãü8qV–9E8ñ¡Á‚ +MW´4“ر÷p–GR*�XÒ³ÿÊÓg¿a{N¯*4¼¡3çÿÓ·j¬3?0KRS7È�•®:2ãvg2¾�±¹@ÀlõPä3Ó!š?’ŠvªÎG`èÓ2¨úS÷;7Õ:û®Ü2½QÎýùb2­… µb þCc²Ô1|�g‹pt·R(ãÎCW‰~öÌœ]©ºÜe£ëMƒ_6A<»pöf0ŸÙ&70%‚ µQ�÷ì§ teÒ²Î;}/ba]àêõçü‘„$/·»}åډǻ²+N7«�À[+‹ y™0Û�ÉÕ�wSÒJ`«í��Úý›9©ïÁ.¦Ã`�ýù·ï…ª+‰Õî1Æ›Ê#X} +œÛ`‡çû§%¦wêÓ.ÈX�­_°¼Á…y=ôlÐ0N;ô°¬çãÌ=Ö³ÁðÆ äô¹‰ ”=÷àmG;í oT’Œ[ÀKÝœm<¿æˆƒ^MÄ'ÿÉsvJ´ôÅ Hvå/´‘༑z–ðÆO�Î�â¬o +ý^ì«HèRnxÚ ���Þ“Ù£ïŠÃñhù�¼?îE±ºPŽÏD©WÁx…§L,ö`Ý4]‘Npü€†Ôœ‹sÞiHJa`»zi”ºù&–P�ðxc{16'�N⑤(í¯Å�o¯…�™.�ø`X)ïÐë ´ÍØèÓÝu<°ûlÜOIr¦Z®ô„ªÕq’Ìž¸�ßÞu X=<0J_œÂòcôë†RybÉ�£Ç&ú +?uÚ“ïßlƒú Ðâ½ç¡ ®�^¢·ú�¤ØiPÀœŠÛr/øÒÄ h|Öô#RÝb­'‚T¤™Žû�äþ«t 6C×k½yK¸ùíd~Û‰=WTçÅ"½(qe0²¼ÒÏðTH‰Ì,,óWõ‡Å½Ø¦™-±e‚ÿZ¿Ü,Ýæ3 &¥ád 9�cthî_ –Rî±é½cÒ •­°Ü”à™½ZÞ¢8&^ÝÌòzï¦F& VÑ4È5]Ï·d‘‚!öcÙ�W3GâÕ™T È:Ò¨$¶`é}.øñçûqˆ\f¿yš<¹€§ÿSmuÄm\ºVZÆË¼¼Nû)hÓT?ô§n´í_Ò#@UBXá•A ‘ÂãÉùf—mVÔEâ…_‹Ùœ Yl~áà¨+ŸÀŠ A�8>]MÛ|`~a²’G¹öyaž"ªß ÿ`å±@M¨}ìtH–ÉÔÃòM¦ŒÙM€*ýtûeÔäã4³®Î‘ó<Ú ÞÐf¨9k—¼YÌ–Ô•©�ë«[™—TjÈ’H\‹µ§ A!^µ$²uÓŽ«oß6 +®f~&ÞR� %OŽËƦ€9¯’ຌöÅ eðÓ8ç¯èfñNö(ôó0·ª.÷ÃE±Òôƒ“ao{Ì™4?-Û)Ïìáѵ;±Ü«6¯P±àýÖ.•!•4b‹ Æj*–Þ‘×,ølëZDp,“YÑðÐn>HnD›?iú‡òSš³É��4süUótá]kLŽô#ÊŒvXðÐ>~Ýô£Õ,¿ É›=£û[ÎV¶3/hŽÆ¬q6½üèE†Ó÷±¸Æ"?Ãó̈́ň;&ØF"ÓÈ¥Eà³< ª‹Ç ù€z~awIþC@ç9>ƒnÏŇ٨SJ 2¨Ï�F‹´^I +l4Ð|]:du¡©‚²÷`ã‹€[¯QL.ÈœÍ5½ðIþP%¥d¶ZXi!eÓ-…%m�•-È]ï’ù–®k!©ü+^¤M¤©wýr±[÷�-f™JùäO+€˜�R‰/Ü--ˆ¨ÒŸAˆ»À¹PeT‚[+_Íѱðñœ”-+x¬ZIyC³,p@gÊyü\e4[t�€BW©kV«lXÙçýuØêÊþ}e« ó¥0#¾±H¹¬1Ë^·ÜÝ=ʇG#‹¹lAæhþ%�Ò¿P †VCËbè%ÈPU†ú3C±3¡¡Dih`Fx+g¸ú? ¬Uþ!§²Àn�ìïb?‚Ú¿É™XäwMþvWŽ!úÄŒü€äÅ9…E¯þÂW(ñBb½üEÃ.¼ÎÅšaxqYÞ +É4ëÞø¾MSóu‹>;{¹¤cü5C3¾!XfîPZmz”Ö;p§ú5†»©øg—Ù<Ña"ÇîРïÜ Û‚v†Aô`lW8ö™PˆŽEñº[¢¢áÅ”P܉mcÂ,ÈA™3(§‡¯ +4SC›lµL• Û¼µU²��ÁM‰ú$Z²™�.èÇ?Ä;Ð7d‡ ß}Ù·„qÝ.@W®8…*ΆâÅÁG›89ö�$˜xX¤Îþˆ,ªKÈäkÒcºHp8R. FÙ¡èìÑ…¦,’l^n¹âáU,èOŠåÏoÓ‚Dð(Û\Ê«-…ðøR N=Û)$§¹fPÑšºyø¨^?hM[ ´wŽ95FÿOk®Â�I06FTTaN2­©ì9:TÔuœXŸTL´Òé!ã„» m‡>L΄V C®’…þ½ +‚·tÕöÁ6s,mßãÊBçù\ „¯LüúÈSÙ€ÁQ @æJú¸ +[UË•^}tesZäÏõ»ÂÈfîrÅ𦠗0§B¢ì‹^¼I²û©Ž?�Èœ¸ú“‰÷ðD8yô¨Ç|©bazí_¿Û'‹Íd 2 ‰�Øc0”Ÿ çôŽ­/\‰ £!œ^l0þ5aCšøœÎ„`$‡g „ó ¢¬VÜe^.í(ÜN68,¬Ã ÛTä°¥ÿ¯}nbUl§ýúCØÉDb>yýa¯Q�DZž³MÆxLŠm)0TÊç�Û'žÏÒ„Aú:‚þ,�™ Å-{^ ÃŒýë�A +¦)¡ÏpŸ:*}ö»/‡—r@¼-‚­Nñlݵ�«€Ò4`ßàÈWÖ ƒM8ðíI³ŒNuY„4»Ø5"@´™í;.‚©Ù[p9?Ž…XlÔ7n mlMC#¸¶69l‘¹5á³®z¶•ó±É}q¼#{�¶M؃ÚfC-u 4ôI¦Ÿ%p-y%ÙÑ¥|è <žÒö¸¼ãò‚ùXiT\Pkds‡zŒ¨3ºí‚‘ +’þ…cóœÖ–KðPiÍgs·Æi˜üðïDЯ›#ÐJ82¬jÂUõûÍæþ¬“‚Ø'ØôE‚ÌÈ>Çd+˜¶¦0Y\¦2&£¢ˆgg³@WD‰íPJÀP˜Ž¢4}ûc gÏG¢÷>~XöÐIË^€\PFŠQ³çoª7Kab­_§Wh´Èè­žû6i±#šo-YÜk�”ëñ"ôªÕ*¿Ž†lÃZ& ñ"ßþ¸øŸœ›†{ì=‰l‘‡#+"¹Š +ghRì»ÑþCqÕ~ÂeÒÒA³‘1uSgfªy(—'hy>ª6Vޤ�9òfІ + ºÀf€*ñdÉúâ ôLhkC¼H‹T b& µh�,W¨ìš\¼’æÂØÃMÿNýÄg×_Hx�··Eá²í(%6y`6º?J ’^fÃ�¹ÉFg8TC‚+™Z3ä¯Ú@h èºBLö4æ®§ÞOá1†ºî’j"ÂäCìÂËý+Ž„-j�–ü“M„ùZ +6øÅï÷ý�{<}@-UþWQÌÊñs†=1�¿…œÞøíXÒ½L‘] -ª7Ó@? °HLEeí)‰+ÿ]t„I¶pï ÝM1¼‚‹Ð€Ã€¤_@G(�öƒS�¸BN\üÄúkåÔpNàû�’,®ˆ+˘À`ÆÑÃî÷ Øü´™Ö."„{øÜº*"üTzåf·–pĽÀÁE‡ÿÈÿ� hìnŽ7Ö¦Á½¾JÜšíÆÁx‰ßt®>šüÂXaEð _rj½‰K��1ìÖR@µÓËBc‚ŒN5 îæ&7‹øâwÌ®íñ³`]&8s¢Õ¹�vÿ²×ÏÝ‹ZZä¯d:þOm‡�Óëb¨W°úS€~¬Uê¯Sm†�ͳ{—öw¶:ÄIíg¬�OÚ‹oQÕ}‘á_�–V(ZW€ ;Hb÷"kTÜvï_ˆ�]tÙU*@_(&.àø›IT‚±”o4Úï§·›Ä,ó­¸´¡cb™rʆÏm㲤ìò˜ JèÅ>ȉb,Tý&%ô¹Ý!_IË0ЧâÆóMx[gsÙ~$ûó åóõ”mic š %3Ð̸qèá ÷òyÂdÐS¡v0öZ)È:Óe4©˜QÆT€«F‚‚°ßL²ê ÀAµð�m¡Ò3\xVÕ’)šË!M€/oã2ÂQ ±�rþŸ«LÇþˆ+e@…OhM6Rh`iŽ9 '‹Ùa#Vt!C„™�;ñ' Ðá?2ɲúhä©6î›n­„éΩ•©ŸóekAúAïgÞÚö–H°!Ðfsý "ó,¼Kíá©”'^Áàú-´‘Vw´”VIbcùu +à•™ò•�ŽNk|Ró§,ªÒG‰í‘¦ÞȬcjE�«÷пå%7’€íaÏŠËð'¨— d#PˆàL\ºEtèÊI…° +•ÙâJ¬œÕ.W8l~µì¨á÷ãÁs†PST,Ž:Lpë¡PZ»ÜùBm̨¤^ö48°)Låãã!²+ÈåüEC?ƒÆ˜™ƒˆÛAV„¯./nðÃYN¼âТ0‚ïw¥�ßB72üÃáG‡Yx¸Ì‡ÌD·¿aTpDìC*¦®7âà‰e´_ŒyäŒ æ©ñ”*+ d\–ër#€r⚬â5FW™ÀÆ£'õZ�aÚÃs‚Ô€g"½èp¶„¸¤O¿ð&]�_`/i ÝØ4=@À}ŸSj•¥ŽvñÙž£cÛ2@+â§É¤¥Sæy�>œ®4l›Oƒ—À-‡ƒV\ÈÁ©í”´´uÍyy(òXŒÃìöbb—‘À;–Ss[…¯2¼‡qó¬½Ãýœö÷ÝŸ³ðwÔ}^Æ@—ðëÿ˜aKÇùN¥1Þ™!¨=Ž/ Ô�à…b=Uå&àbùEôƒ‚b›`÷‚ë)X;€¬êàѱóÍEäia7Fð=< LOƒˆ4 {Ôî‚ØJ°Ú`62€¡@"}V2{BA)K–ÈôÞ”éØa›p’·@îã9 vŒÙõiÕêMüïÎ�ð£ô{æ¾�eö\Â3¼€.(<äJ� ›‡ñ.«ù²àÿèÚ +퉘#ÜÖØñÿk cŠûçõQ^È&†kL‡O˜Bz° Ù'Øãœ‘* Y`)¶öϾ'OH{]§?Üìe†ûæ¸ü %á¤!C¬áP5e dÙX%Ö3FÖè„‘=z1 q£¿œ},¾kˆ•‡°G§“Iú}£$þà ìMÿÅÛz‚=ô5}¯”SÆú™°§‹}ŒÍŒ‡Å«Õ¿>jB¨¤›®öü!å^;¹~ß8}”ž}ž“©m€�Ú‡¿9üMîFéá^¹ÒÂì<Ü'Ðåncl5þ€åö©5û<•¾–·ßV?sãyzy1z»ÏˆÖÿ—éZr–b�LèÈ K�1WyÀß³šC^V°·�uG°Ã› €eå«ÿ‰zÂÆ‰è ¾ï\5и˜ÿ陦°þÙݯ�–– ã#žÞ�«˜Ncqzç°æ5á³q†ª¯�R7&4ÙE®Ý§±B™ÍÁ¥"é±ø@#PÞõ–þrÅï í »m@©Z™§|±¬ïôê³³˜Ò/䧓콙΄~òLQ·`”äо´žä/Šª6[­z$bóVX—X%q&,�Œ•©Z?L=�¥ ~5Oduñ–ïŒüÞ‹ŸÝÊ8Mï+ÂvrŽZTK«¡HÕz?:ë,á‘>î¼p*\îpVé=¦jýõ\GD…ôâô˜¶ã²i IqIô|²a'SײRmN¡ +5éfôÌ+?�Møå¦RˆV©I+ø�t~ÄüúЄ´³úLf}KöŽë¾T¾KÑÚ~»(4¿ý¸Ýèk“ú£È(&Ù’#X¼4¬Œ‰s#fŠgH#¶R¥(´ê +΢½ˆÃè+ #íxpÑB3ûë7¤ÜiÓG><‘XöyvuÕ)X§C H)ÆœÁ˜Õ;Ns�‡‚¯}‡õÚ,ÏÐ(îÆ·NêÁÇ ;è)¾áÅtˆé¨kQR¿ó("êž öN¥åš­s¨æPÕ·¸›*ÀÈ„kdÑAÝ%Ê…m™Õ¯Žü€á€a�+ S"DIó}qPÌw)mßt@ùhÒs^ÐÙiç'#bo†„ì#râ_¸l{êz»Ý­:cˆl8Dï½|öæ¯5‹È€^òIƳ±†ú¶ŸþE»™T{b«Fïc?‡©åüÏÑSQÎú·ÜfŒRV,\ó=ôòð;<ëþ+že?ü•ÉÿñDÙ¡/ïL``HK Epï¹Ú¶¥Àæ'H�d s<6ô ¢^ ýϯPÿ¾%{>Nÿzèèõ¤ÌåøpÌ1¹«­“éL”J•]*Ä?¹¸(ÿ˜ßüÙ ¥|½Ø�dJ¿äO�ž û€ÂßÚ�ý”73ö÷�[«ðGü CvpÚB´vþgYú�ÔSéUÊ~bO3˜]~ÛÒ} _ìlô‚tô\ú5Í,70i¦)6ÀÀF + + +PffÍ#ôd½ IÉ>fF‡>éÎ<ðmù}wwo®ì?s k¨ÄPT¤X[e»£— á€`PS£Û#šzþÂ!#Å2[ÒÑÚœ\\ôíá¢×hh†½;CG{ÞÚI=omM-ªÝàIíü5ÌÿO/ÂÑPuÓ�vM´žÏ ñ5Ù íFfvf«µ>³ÉfzÅ­mvmöÉ�áœÏÆl¿ûÌf>š¦fâÑlÆÆ™¦ŠiFykFV[Sóšé�jj;6—kÌK<½b¿vóÚªoîuë¹»¯Lw˜7kº¬3sQ™w¾âíglçß™™Ú©ÝÝÙV•ÑÕö|gˆ—uÆ3âéai ÷ôÞ«1â ÷f÷nO¯ØËB«úÐŒŽ™& ±ìF,¤›ÊG„u›Æ¯-­Ïʈxd´CÛúhqW Ëgw»�ší”…¨þ Wmxš ¾»úÐQ¯H2â¢ÑŒ§…šxGT$D�Òt®3�¤V\\㨧œ˜“””7ν+�X©z…‘èjL²Tu핟z…>ÕO+§™okdyß4ZÙç2õi3›-¯5—4¸¾ËQ¼Sã�³œytæà­©WX7½¹éÍ:¢"DÃâ}º¸7c®ñvé…FúžïÆh¾%­ûöÈì°¾VtTÏûlM÷«ÚÚ~9Sµ4uCå;Îi¦í wÃijݞé}º«®Ö}W’‘Œ´””°,#­ Qç&Õtv¬Èj¶LfFV¿Ü<f]ŽÙØÕ zÌÌ’öJë4_Q׆7ޝŒ†v£µ¡j¥æž¥ Ót£¥j:\ÓMétsdfº¼¼¤½/mœ—7NÌ;c¦9³áÖÖdhw�égz"ž–Ú¥¿·Þ¬â•A}=ÍÃYZ+¬û�zFµ¿}ÍÕ†¨6\€†�r.nîþ +_i<þ‡¨ÏoäºÛ_wѳη¾¡&–úÔÇôóŸ•ôÜRã$(ñÞ¬5ô¨æ(šÓ9Då¼Ôr¢KõΛ¯©jªÎÔ3j¢ú5�¨¨sGÅÌ"rjêù¼�SõlË©©FN{jêQâUp•a5×4É37Ξ'gV�r67skõhÓhsµv«ö›õÝ¼ÚØlÐV�´3´K¾-E¼Å!³Ýâ"Þêz‡ÎÍ-]ô•wo}ÏÍÜúÞêÍœo4Ñ3‹s„Dj$ºE¬Ý,£Ô;Ú&êàÑ™.3éèRM—©»ë³:þö ú;²þAïµÝZƒ­‘¢�lv³3”�±ªÁ(¶7ùE´é{�¹~s=ͯÿõ¢¢×­ŽyþÇæuÏ çšh»m>¿¡ÿ¬7,ú·5Ÿ™Ï,5™ö¨¤•Y’\ª@3p0$ +$bÉ<ß~€_j@ÌZ EÁ`XèŒ�x@Æ€1†€@ñþÀº£…ê ¡ª00ó‘xÿÐÓ~�s2êL@ 4ìi¡“1ðß¡U�€h8>\è0°º§{¢¤¶§Ç" +ŸeK2>³q�ÍO?¢êõ�rÄ™w×QÒs烤WØ10 ­·Íø-¡EVª@¯¬@}¡•¥0½Ð}’k /®F»3ô(ìà%½Ðö#K°¼o"}-¬ì ´ôÕ§‘‰„x’ÐÐÞ"7pbýÝ=†îDõù?‚ÃïF¿‘\M±íKß»¨(z¡óÝì‘vÂÆìÍ}‹�ï^ #Ü�N¯}¾sõ–4ã–ýŽ&¢OƒV Ù¬‚~ Iq�Ga’ªä21¡ÒŸ7Mté™r… À½á°áŠn” aÑ| wÜ‚GF¥L;nàŒ²"hñÖ©Gš‰¼­�»5è ¡ÓÆž“!Ô#YNu#N› «ú f™‡YháòsÓ߇5U“‚H~_ë@0X@¯E¨Ú"O3†x ï} µY«Ü.ŸC‰Ó¾ô K6ZJÃçÞµZ6�º#RGqú­ê‰ôby�™éuÔô‚ÛdJLØJOI]l/_©k "îTâúÁnEdia”Æ +¬Ô¸³‹­k\ÈÿFPe½ðy¬‚ÚÎ^ è·³®/* ˜¨˜Të ¯z˜.]ÔtÙm™g2OöE•¥¦Ï¦ÆØ�Zü¡g¡^¼Z3q‘¸K¨Å3S(Ù‡5·«4˜‡ð¥—ø¢Cý³O V]†UG܇Áô!ÉB©ëdBcÚÛŸÞ–ËãÆCuDÊÐG£ÎàÌ&æÇ»×XÎÌEà$÷À0ÌÊ—¦�Ù%ÆÄK#›z=0�+d¨VkÎþp'©SºÂ�þÄ�âB¶bö”Pú¿òüeð|�,� ê¼Hçw³ÉH߸VåÊ[ªæ¶#k÷‚œQ—ÀçVS›ø‹Åî¬Ð™« Žý¹;¦È´ÇÂÞ=%½‘ .ýg½7>É#袖+ég‰¥¨­-Ä!IÈÊ6¯W®ÿ0Hc#}ìõ[^{ÿ€7ü�SE_Xwò çSu…s4Ï¢ +µ2%»ï^ŒQ\@?©ÔI¼)äÞhO�Þ„é…[/heÚŽ!ó©Ãèµ@1n��-b5¿@;�g–¸uш®%µÎ7-JÒ‰Z´:3û6Ùäm»ÐÄmlZ)¾ÏÆ":îJÿ?•m@׳ˆЫý”zseÀr 8±�‰u®Yä6búÎBíʇµ«,pcÄž ›Ï-Bze¶Frã +×G ÁûAØAq�ãýºÃŒ`ÃKÔ¿‹Ç��â¦ôJk¢¤¯ŒôëV>c¥,ç=ÆÑ”äÈì¿òô®½<ã\Í*F¢qOܤ{sH’6Âdýß:Î ¼3ꃄ3õ€"Óô�ì޼-kµÔ´ÝIl†€€Ì_"Ê¿°Ä…›öBôätµ­\Ä'–O øÆx�Æ‹Õø4Ð#�p×�W¦<Vɺûi`Ÿ=):³Ü–¶»*Ÿ¦þ'¶º`[G’”›”_�‹@ɺ ]^ú²ÏÒ¸M¾ÛEQDY�ƒæp•}áŸõðþ ÐmÕÊ·]äÅÜBôL©Yµi+Kü- [Ó’FIàá.?Ø›" +ÏNã�—ÁH'à2�=è…^d±Ûè6ѱO$®ïÝùÏ(Êøú¤#¬…¥@¡å àlßQ4�þ×ðOêÔ¸ÆP±H��vç)ü ØK$'ÅDd­&Ùô]Ä~©Ǽ«´úùÕÁu}³Fyì”AJè­H”š.$¡ÆZ¡A˜±ÝXehôq²Zœø¢Ák=\àƒ{x Þ`ük{§‘õYkéi_™©jl7ïª]gêÊm„ä”X‘‚ª¯&ϤnG õ Û¾¥DSã‚;{êEðéÖñ9Ù45Q©932È„˜™3û­4>Å'[T?Jd¸Ç¤ó‹‹ýR+7£öت^9¤É÷ëùBq\8Š>zM4lˆW• VПb2h²8ih4œÂÅ[4rcØú*§™†._ð­‡aš�`{°´®B3×lÄårïùßzÍÚRÀ9$Ê*í¯~ÇÖ÷mFR+Æá –‹¯–bjÅàücøç…ÄÅÍøØZÝ(0•�‡½rzF©a­Ày0™‰,ç’gSf¹$cÔéM*ûëg°ŽëZYêB¡Áç˜ÙIg`¥Lcrä²xã©@{Éwo*³Fa…Òrîà„9ñºm;�ÖÂ4Ú„©|ï‚ +ëÎx¼“:­«z—uDä¾T,ËŸ“"›ÒFìWñ4Uç±¹w©±"‰É9�É.š,(Ø¿|îÉCVåM³nˆj!÷F<ÆA�ª.�ij�”:ÁÀ´ ‡—ÂAKË�W�`·™W„îhÜ‹­ñ³6ï¾’ÜWŸHŽÆeï>«˜w±¯ht¬uý¦Ûµ¨÷|™²¯S ‹¨Ùêð!Cž MÖD�š‰2‰±@ÜR œ‚ƒúëøI ¸ìMH �Ÿ�B{ÉÅûAD:ø7˜ß_1ò¼U“î¾#ÂXýµâ,¼¸DMSñ[µY +½ÈBÎ0�Îé�?¤ž·”{Šoǹ‰g²¸5U„"¼¥^`à×=5J?6C&qHà°·zZoãL—“¹æôx0IX‡ÞÉ´#ö� m`0½j“èÜ ÚFÞÆ£’¹ÏȇJ�áÍL´yjøîÅSŽž§öä¨67º'6ÎàC¬Œ)ûµ¦sòƒæ¥<äf¼_Û¿�Êô„Ò®[±Þnrá0ŠP7'9únÀ÷BÓ>Ö�¦¿Üt~“÷­¢·fKÄWLxÙn††Q(œ†rEK¶š«ÎG—ïß¹Ðr÷"¦ˆb³Úà[é�¯bRñò&Éäî’õx�WÃ~QAŠ5é™À! |BËŽ©–­}¾‚@¤Z?š¼Œ!ðQ‡K#»Ç’ÊÄWNa@´„ÐÏ +W;Q°ôJõø$¢A—QîXᔇ²ÇJvž³6\ÿÖûˆ�‡X£¬Ìl]¾mZÁnYÜ,¦Ã—¦tKD| 2Š*>~¥wÛüF¤$œ~5—«*Ú"ý˜Ð1Ü#ý¦ßWî— ‚Ç[U�Û¸%ðrWUmLtl~æËȼµZ�•üóþ$œ;ÈÚmX·‘un*ÐI÷aówP¬Å¹¨^…vÖâ)“¾/mÍÔŠ +14=¢Ø—IÖ-}Ç�f­MsXª’ήó|5¡ÖjˆOÌV†.Oö½ëiÂá�ø:.`WÊ•>䙳xë)”º&Â2ÑÃ8h„c¼ÜÇ…tvb BGJÕavÅ‹b„g ñòócéú¦ר76kSÑ"MO»‡08(9€çm%´ÙCºNŒ]EióÃE’: ν8K�›êf+0q1´‰ˆ‚¯)ß’÷bšKfAH­�wp¾Ùs r_ª‰._t�yâNôÂ1KŒ�–aV}ˆ²æ²1×û�°_gBRsÀÊ8ú^CNE×ιè+‚´l@¥àV'=+¼ˆz°™ÒÐ šÔ‰ËˤfTH¡›õ; ÃHJ •ö‰£óݺXp£3u Çf 4¬jP£Ûù&%Íé–º¨›ÈAS”76R•êÓ¬R7Ý#°ÐÂæ. žG`4°pº5 Êc"ÍnçPôµNfÇäíÍ�öo�[=e�Örc؆- •n7"íY«’¶™Y$Tb[£;TÜOÕÔÓ5|ÌòðxƒŒ’�%ÑqÐžŽŒiø‡O ´sZíG”¾9.¹ÃÀÉíc® ÊM™sÓ1fr€[ÃXLT¸æÔ� ŽÿÝ­?q ßo�ÓÝ>¯¦_´CbvMi,Ç\qÂóÖúv|jA´) (Þ@/‰ñâËeÃÊ"Í¿kèQ”N Úµ?Ç„¹ ŽupU”m˜5<Æð�¦ü«o?üiàW°¥¼ñÍç ÏS% ÏHˆ–çnTšêdÃ�]ȶðâÏ�Þ•ÙòH…Љz¯.�7Z„%.½2ˆˆ¥¤‡háð [T&,1|cQV í;õ.�;´ÜÛ +9ô¸b¼ýuw—Êú~DèðÆb¹Ù™zŠ·²ï^€×™¶e Ri\ô�Ë’©À7™«žˆ5_Œ{vV3—Úö ýDØ>%ö }W´¤Ôç,XA…>‚ˆ;].§àŸ¬fa€›íe�9/v HëF½.²Ý¬<Á†5 Mí#ÍÜ ÿUžè“¡8è+ígà7‡Ò*rq£ÝÒ þÆ|Btðùž†ŒdpbéˆI„V4«Wt`ËÞ'XÒ,;/h6ý—ÍÂn6©ø¯0�i-¹8“‚ókɵ6 ÆqÁëPc‚;S“z–÷è¾…“dõʈ¾Ÿ¾Ôðo:ðˆ,�£Ia6Sù.ä®xÈ#ÕGÜÝü–åøéïk3ÒvÍ.ÌâÚŽv*Ö1¾r£yVWø¿ ¾{qwéÜ]âÈ2)æÜO~?ÍE²‚³‹G[G‹ÇR+5Ýô»A´\F‰1î.޶|þÜ×— þ÷º¹£‘�ÔÁ¥óÑ% L2X�ž)+-Ó…¯‹Ï gyïLP™9JppP~ìŒ,36龊ƒ®Àî:Úz€��f{å]j„)Rµþî�¾0ó4�6;ÁÀlÛ7eÓ•§q�’ ‰¯Kt°ºåêÅi¯þ­Äˆ•”Ë�Õû’´˜¬í¼©ÓhêLÉŒŽ¯qO| Ñ¢UÀP}¢?ëÐá7�yz_gsoäHŒ")üT”Ç8`¾è±·>H¾Òm�¯CfQË&âü!–µóÜŒ"h î�ÕjÁÆ'¦èȽëøâ”ãHü‰[ ?‰P檶lA…J FU�æ]ÿ[¤¾]tqm¡fX=b�fÙBþ_-V%uD¿oµ2õ Æ‹SG%�â‚j3­þ��özãü!6ÜF7-‘úBŠxë·Î‰\ÿfŠSÎÔË—MÞà ë «Ðh&¯üšyq¬ür© +ÄÉ—_š€õà,T"!)œ‘ÈxT£¹;ÕWe‘R3„Ù‹—rFðÆü›{¼Îa”‰'óTÉÁbÝR�$‘×ÐT~sFÝ’m46À”_ωƒlX ‚q˜vûñ 3É'G|¿Û,=ôVÔâËÑÑZô€øÇm7PÈc^-PM„úþR2Ÿå¾¯æt9H­ÜýÊ&4C P9 (ÖILÙU‹‘Ä®”÷e;Msãï?-s±:�ÖÉ[›üß2µÜvq»k±Ä¢»Øÿðóë‰ÝvµQ+�-ÒØäqoï’#@öã ãRȽ^�<÷•f¬â4C`žÈc`½Wð¡(,>þ�YCª \L³Å1ä ú„c�ÌwH^+½ØÂŽôéÊë)ò�K³vÕO‹ º‰eÂ*6ˆØ½ñ4ß—‹Å +»ž`Ê'ÿç·a`þê{ˆÇ±¥àw2x¼ r©ìŒzØÏ(Ir�„I;ùˆ|͸aÉÿ8Þ̱ç¼;©†½Qz­;X¬¥K�Ž©Ð°ÔÝ`ãWCP倳|D-à%òØlr�¦¡ÙqOYS_¨ö�UÐ^[ oB§§ˆÄ,gÚžYZ¦}yaœá÷_K}!’1(°lðsÆ—‘ÚȆ ;‰×ÁK´c®×�¬S¶óת²ª‚¹rbˆä¦ì¢ â¯�© ŸæxÅAËTq,Þ?Öâô>ü_¡vö¾ÙËÿ¯¬³!ó%/Yo2Y@¯¨RYý…}ž$ve #©®D±IÅQ±)•©aøA¯p}â™iãs(Ï[›zÄl2XÂ|n*>òxzû'xˆžkÄœ ’€pÌöšU)a�šOg4À÷‚S‘C\øé²¾Óäñ,š?@ÍáòÀE‡\®,>Ò,Ïïa¾e²°ë|….÷ëó7Ø +V&Ö·ÞøÖ½ÀÏ­¥ÇÆVX€ *<Ô¶Á}ú°á.�K„\{$N!ÊÔq;do!Í;Í6èô†Î‡NŽ¿è¯NàÆ� æŽ58ís¹éèás‡ú†ŒÐbÊI%‹5Q.`òVÑÀ# ð:$Ù¥&WwÅXlLÿõºæ3—ç�(…E#øžÖ^ +c[=ÂÈñ…/ø+¦;7Êö®Ê ¶¯±†òð¨.X`T aŠ{­( +Zƒ?Œ3½¼°mâ{˜ªÊ– +ç8BZµG$?Îû˜°�Ž *c¨H‡f¡õÁò×ÁqÇÌÊáW÷�·lCúÈCU€µ†@×Ï?‘“ŒŠAD�RY�_ß?�a¼÷Þ‡Ô#c¦UJ¸àê§Ø�Ñ¿Àç õêW¸>ØFŽ Ö7Ú"vä�•IծƗ^ Ÿ%2ërOø¤×³‘â°?…Ô"Êá½€&Þp€p–Z‚a2°ûÝ +8‚Øÿ”LÙÝ™é¡�ÛVû:UÑæóÈkyx£+DÓÇ< ¡3B°lµ.ô7Y¬©ŽM ±‰=@sl^öŽ—°rf snE[FdMˆjþˆëð5ªÂ‰L%‹Gèσýù‡Ì¨@p̘ô½LÄ9"(Ù�Û"þ x¢ù9Lº–årŸCœê(©Âìq6¾µ’Ôj#v(ÔK‡\í¶áQMèŠ,zÊÑ�ÉãÐÒB4ˆ1Ūm6½·QÈ[Q,3N7ßGï¥%qÞCa€ óö`2Ò  :iGßÙË*±§Rb=†÷5rQª_!˃75öòŒù#Yoˆ¢¶Ð +gm²jô=-+fkù?Íñ] Yz‰{�Œ·d,VCr—ÓpÙàá¶öh"ŠÀ•‹É 7 ¤±kåþÇPî¹¥æ”!ñ…Ù~±PÏÃ<”(udq.xtüJIÈÕuM8þÓ;Tk:”f?8mË8plVqƒ²¥|!f:’Vþ|,O£\0ÊëäöÇf?èݘfðÄ ìµ”®æ?Ó3ïÝÑ]µ¥ÍkÓv¶,Þ³–ÂÂÛÛ‡ô9¯‰ÊeR·Òíto;&«|zÞÉ …Ž=iöê.3kóFƒÆ3WcÔ÷±üûÅñ[®ý"Œ?m]w†´îx?9ï“%ž^YÌ‹ý¹]Q¤^M­}¢�¦ŸòŠ `uÐf[tÝù0Û#\ú Ð\åU—)³‚ÃÞјf0ú¬ª�8“LõÍGW°�`žMÄ›ÎÞîN!·O?©.'óë*Ë vñÏc¤œP.¥.Û5ñ"ˆ�ÈÍk$H‡âÄ/ÜiwÁ¤p²8 æZ.–“”%.°˜mV|n?B¹Ò¯²ç}›äå” «x EÆ�U_Ä€8èØß¯žr]Ô¥ +^( uŽ=;ãŬnEX§­ýß.æ/Þ2zL¬«u)ð‡xgdôJ@e8GÄ×Úoá}ÅÀðapã)‘Ûâ´’§“5 ƒÎˆý9ïsF¾-ñR;Jó>ß·£ôg«Ÿ¼’ûs»ë%jΗÕ2Ñ_D‘€ã¿Ø"{l]<ˆ·a§3r>ìq@F“¬9nȨ°m†ìh…OSÆÅ›"rH•¼¯H8üP1¸Oðуé„¢öôEÒ$‚Ô·82ÿHÀYÛJs¿¿hºê�æñ§})¯�a%…%†y~xì ¯9c"ùm�V…1€M‰‡Mä[à o¦õyÒ ¨¿ô›Ìòƒ4¼®ìOÛù¢z‹«/¿Tßž¡Ìȸá Œâë`2ÝÏtX%jéEÊÖßU6óÅY-”¢âBK£žÊ5‡¿˜•¡? Mßb�‡Îl'RØå�j89¸ªb>™$ÂöŠ|oúer¾¿Ë§ÓI#ÑO= +”‡Í™É]–l�¥ŒË. ÷.°Y¥>hYŽ“$Ÿ°?GG(0Ùê»”¡��ûÜùO8/íýž¡ GB_m•³¬e°k›ÀudsŘ$`Dˆ1p$‰±}ú; ÂГw¤æï–H^˜ÒëÓAØ ¶îéÀî¹:‘“2C{§Ú¯•Õ”È÷ÒHÑ.ÿƒ€z;QÄ[ã[nwX=0d—ž³N¢Ê±r¹ñU¯E¬[ÎT“!ï©CP\“È ¤M×vzaÛ&ñ;A#Dß\V [HØð� JÆe›´P0(p {<=„Z�N£a[ß›|ðɃÿ AÁ?BhÆȨˆm F7ÖL["Á H]‘uòɹ¿ïÓ(¢EB?ÄÏPdÌhq0G6V­\0,�ƪ¢S6FÆèhÖbg…Ó¢âBúè� +‰½TŒ©y£]ãgf)UÌ<¡ÉñüDˆ~Å…ä«Õ0¨8PžŽ4¯6úoì%·D””½<µj5Œ +�~Kœ"x«�â+/ÀÑwHê« ÙH’w~r0 cÀ}à qô‘K_� +boŒÆ^êò„€åa^ˆãE+VÜÎÐǸ‚ †sL±Å}à©ðšµ÷$¼Î¥Ù‰L kuºáŸ÷Û¢Õ©œAˆ,í9¢àòc³¯Â‡öRüZƒ +D'ÚUX0†ÃUEË dƒ¦`ž0I­(àIø: +z“¼5HÏ—¾�Q&×[Ä0qíT +¼AuÙ(#/ÈHj^¡�\L÷B0€Û´öÐÕ‹we.ò´�eán  g‡AÐËÎÉ(¼èD|ë„Ó/©råEûí}Oª yÀ£j‘#´OÙí,c‘‰ì¯­–º0¸Ã¾Ê¯Ü ֘Р&Ï¥¥w) âÂRƒtíJ�á`[Ubã$‰ “„]ð[UÞ¼”©ÈE:s +iíÉaíµß¥õCãÁíÄÎHZ´Ç×{å%�ä® ŽÂ�*)>!_2µÞc'Ç´ø0¯58±â‚˜üÒXÙ)K�*'säœeI¥ÐdšjpDb6¥êÁ„9÷ò0f$:$æF4­J›ó^…èãf¾ÛPƒOldÐo”J䀯.8¸ êLL®£œo¯‡wˆžG†QGÙSú5?¼M»%XíS$7£;äÚœmä݆AIÆ3¾ˆ×+ Þh.{r£8òÐÁˆO¿•Õ4 ¿W-0‘€š°{~¿ÿ¿koº™€ðò‰àqš�£>£é½?B’›pyÜsŒI£ÜÎ$Ë),Sý»÷ÉÃ× yËG6°ï”Îñ‘.›ëI®õ¦ÍŽ?7Ôá¢ÁEòãrÜ;ËÂ8±…D1ýãìy�\3g5d—´1hºÿÞ„ti]×{&Ò#[™¨-+¦½û�w½ åRŽè5õ©@¦HHkœ­6['o¤ÇJ«JÎ(“È r“BxÙ+t²ÆQ‚EÝÒ?:¥6."#2CS +Ú q-/1Ð�i³ê�P\hf�°Ûÿ»‡§6¬[¿‚@þ ao,O_óh‚Öü ïìLÆbK~â„‹‚Ô¸G_´:’/8 Ú”,u�Á¯äÀ03ÝÛ[F“ÛPÐ~È2éŠZ˜ä%†¢|²%SWyo«¡¸/p­˜¦¶°… jËO…¶ïYø‚·×ŠÂAêJ”~‘ªC `c ¨ãÑ]�%@ *ƒFcÎVÂûuQˆw$ä!±B-ƒÒ9p.Üáàø1zþÏ¿HyëX/¿dDHð�¨~òJ¯AØ 9µdja‚ig­¯€²(?ˆV4Ì $à��`î]£›vQ /áí®O>hË¿•ñ¤½Z‚ +ªme…„ ‡7ìéhãÃñ_ âj7ØÞÖÊ`*š~XÈ×ãç{а€¼À[À{­»%%7ºvIŠq ÎÕxK9Åm.TÌÜNî}WU�Ô/ Hùíð}F$§O4èk�ÖX·+ùŽÌÓ󭱌^׫½z¹W# ²sÎ+h`q5VeÀÓ¬¬,`Ê5Â,L.N÷zÈœïL°Õ}Õ]ÎÛ�a¾�çã÷€ï² ‹ ^˵]TÁ}Åm‹@‹)7±Õ ç'ØŸ¸¡ÑYàA H\–ßì†í§(0xº²:«n @€ž¹éÌ]’;¢6“€¥@ ¶ÎËl1 �½½·N>®Ë‚þGËÇB¯}Tø}ð½iG8#{EJúd k{¹‡æ¿Q˜/Å6®Q�ž½¦FÏq·F4NËœ?e}Ö)¾Iú+Bˆ5±³¢%¼>ØIŠ:.Ðz“EZ30k7 ì£ôܲ¥›ê•¦)gÃXvåܱ(ÇÑ•1gŸã¶D¬¯¢¢H9]V n]3'ƦZ¹àëáñ/A¼·0­÷èáC aIP‹d~�fþ�±cî=ÃU,r–ë¤j#“ѾWœu�Œñ’ NõŧuYé„.+N‚!U‰úPö Æwæq¦EÕ& óVãšðmE¹¹ð;©({ÀC×î ‰øYTâ›xöIÈp|òÓífåÔPºâz_Sü7J‹„¹wÙ)¡ëK¥ò†€‚ßJ$Š]‹jI$ˆjnBQߦðl4 ˜èðZ3÷ÿŒù8åÇÈõCcã®rô@Ûq¬…tåœf©tD‚½,1“¨doĦ�Óbº˜ºoúpt„òûWjCø ªµípŸ —‹".ÚÂÃñ2D¯íÒ¡S‚{X}›©„0t%¶¼KdÐQMíp x6 íñlÔ +2IÞ u&æ–Ä69 &5áS{/íú¦Œ|q<βÊÔÁ_ÊöWß6¯_5e9Ö'Úù9tÃ:#¶?¤‚LÂôÝÌëw ‡Ï‡ÖÄc”B´ûj¿æ„ÿÚô!>UÂïŽWD4!�HÀm |V% gçÆKˆÇ?…Pã Ìê·#Ç£ gïèü(Œö°OcG™¥Udã'˜Èêgðx‹Ú¾†³úü@#ÊûžÅÙM—º}ãR*’®^A>pE\]WYŽI,žž—×=c£,› ¥="ÇZ5bDjÄcc@›q}nnëUÅ®�#2HÅ Bt60»›ïêeûóÃl ¶êÜÕÃ*#AÃ|¨Æj.´ªÎ!ùþ'B›*nÉ}H¹9~™,Ûð”GX?yÂtÄa9¡³‰”V1ÀVµI’ä …/«ˆx¿–s�°ƒÇåáƒñúüæL‰Ä÷¨cègSÜìQ�ša.¢‡Bd¤D‚M[¸ goRÇn ¨ÂøqôxçAó0ÆC¦ŒÙlþï S™¶,Š~¢c¶¿ì÷…f4 m} èç_Ž¿á¨Rãý®ŒE�u|�5Ô©?Í�è¥g�؉½]£ ï¾uüŠß/44xÝÅä•lsêt(ì�œ¡‹ÙËUJƒ*‚h¼ýå6³í§xÆîÖxkQd��ÀA¢‡(ƒn¬ùW­EšßèN÷G@E„9‚�ÀT½‹èÄqJP¸žoŽËËÅÖ„Š$fÇÈnL³q7d_1ÊÔÖ+Sà̼aR™é]§U€’IÔq„æ¦ ¼¼"·þÏ8‡(ê4„0$œáŠ‘u»ýŒFzKèæcu.‡À&#Ñ'²Ñ—Û&Af<ì‹>(c‰'»Wá=Š/W ¤¶øÆõB¬ß½h‚ši3m9„·+5+ƨó=XÉ°Ž ÝÝÌ�ÒMM8A ¢&» ˜^Ð1²Ÿ«¢á¤Æ@c÷²¸åóÔìuèÍñÝò½‡Åó,{ý¾v쾫yxÂ8_b;Âø|5ºàQ� x$‘žü�Gý¥È¦ðôÌäw\G¦ù:5ú»v×€';w¡‘dèªþ‡ Ÿ�·8©¨%ft¦¾@?#°@Mô rEá¡3N¬eÈ>TÏCVtz4~ 2}ÁΖ5“°òÕ¶ –4yþ»§I¬·2 ±ÅvDÑDÈí¼Þà~+ÖP‘•§~H(cPR~¿ѱé+³B&¡QøÔ’ AuÕsñÓ©SºÑ‘~B˜"ÊA¶�ïÇ"e(6—¬ÇŽË¸Î5òL‘^joqñAìÜ&JòhiäE6~”²¨¬iº£lºgåš_ø"¾•‹N°‡ *áÌæCöD¤™Ç˜X„§9­�…âQÿFOU眺ʽsîQƒè ʼ#ßRtåeØ"tœS–LJ%C�Oc> žÕ¡ËàçYlž¥¼¥P ;“Å;áÙ ¼¸7z�,^Ê*ëE[Þ'§§£[Ê,uÁ©×M6”M6SÂ¥\9•º†ìY ‘ÆH6·!èA39âa�Š ažÛS"È™Êe�¯¿)TÁEùEýȨ•¬ +e.©C9âäRïž#áƒ�9—Ùe€=&öØ#°Ñ°…Ø„Á·•‡sì- J#1uÍ×w¯æ¹/ø\”oaq“+s²˜£³"ÀB ›À«Í‚{o4ì�K¤og'`×IÈÍßt°³Y�T[Ùl �¥lc@Fãª×NµUü½f*CC¤}¬\WG|ß’å˜5˜µÊ/ð|§°¥ü“DU%Òàö yèÎŽ†pO}*ì"(œb=#LÛ**½bcÜ>ó¨Ç&o³¥µ¨¯T­Ýˆ¼óŒ>úB/¾£>c_ËRIdª¢ù4ZqÁ‘/ž„ôR4³å?{ˆeþ¤¿ è{iÌfÉ)Õ‰=hègßo*ñIäcßðºiÝ`«~ªwÓ¾ÏÐ<ˆ²FŠ^U¨Wñt@Ù®¨!ù}œa«‹n“{?Ù²™gjp"u˽]ýùß½FKf{�‘�°$ü†>ôI< þ¹åH”Ü•Ÿ~0mA¦úC-9HÅÒ§ƒÍBfbT…üj9Œ²A�^¹YõAƒÆ”œTùqìG½îï�¬e„¬èÏÍ,Й4 ÅWdN@ ÔÏ$÷ tá[@ñnÉÅCKŸquÐgŠnŽ[@£ysA§çoÉó‹œ2Ó2âã}¨ú'UÚŠS ñõ'5bŠs¤ˆýÝhÃÄ.LqÁôN‡ßA/Cpæþ»I¤÷û ˜zJº“^×Dõ°‡€àÞíúKí {€w‹Y.þÉ*¸w(rA¬ÐðD¤�V€•bŒðD6ï²  òN$lc�ç&B¬2Ѳ@æ¡òÌDäÏß�Z ¶b ŒU·@íÀ™áB*1Ž2ëÂ=à»0»Dlè…x`^Ð3ß Â¨m ¸D‚ `àn°õ_øþ…;Œ©ì/H«½{0(%‘P1 4H„1tJ"OÅ�­Í„S"!��É6œ"§„¡*‰<à ɃDb233’ÿ"bÒTÌ}†‘74¬MDF<Ês�ixC¡†Óq_Õ±Ùªk�œ!6èC³A4"´6P 2߆!rD7Ä‘p¼�äB¥oä�íñ {H¨Š=BI�Cz9p¦!¸“Œ sP"9¢°Ðaâ.£´tÈAªƒú†ÈvÚ�²âÑí ­†ˆÞFÑù ‚&ÄH†ÈŒ< ‰!âÇ +0ŽCNru’!t·�öÀ/ áJî!AJ~>ä©�¼ò�Q +!5}ÈA!÷!À ÉV~à6Ø~øÄB!›Ü��ÙÌ·a�UCˆ]�Høfð@,‘Ó„õ 2;ÃW©>¾D9´ú‡Œ òåžAŠ„…1È£œ{AÚTˆ-ˆªð V âU�Ô A ¡6&ˆ"Þô-“ðAÃ=ºu!Ö+Ùžƒ¢Ã\œ£ˆÄ’gE0{-‚Î�°÷E5�ë1"‰¡„+²lDu¹ÄÁ"�hAñ€ð¦G”�G?"³X; <äÂC"câ"LÊA €õ †ß  »>ITéÿ°f’è¡ÿ°Ð’лþ1ÁšDIñó=‰ûã„ðùc®¦Ç §Äúû±ÄJ4ßK¶ÎZ¢µ~˜£KȤ[š/QEÍ&Àͯ9&´’sÅËDÔjù2QÒ&|CÄx[WMÔZË$BçÓÙëcæM´š}è¥ÂÂr©8ñ�PF�ùX3wv�¸ÕÐðŸó!ZO¬0"épò�ߟ "(ÖJÀƒå=à Ö¼e(z~�‹E‘¾渢`õi”ºÕî¡ïQ0lvÄX?{œê¤@cÑ+Åîõ�‚) ­êi +´ê!IœbŸÒS¦Çƒ +|ô]T �B=ôøI©èñóPx*x�æTÁØ<ÄÁ*V�yHaE$ó�+@ËuË +å!Q+$-·þxà*W0fñè¤]+ÿš)O{E‰ðPþ+8‚Š òß!A,†õÒűwàAxlµP0¸Ke!mw,3‹NºÃž<‹¨Üa-dÁ[§EÇí0rµ(¯V°…¤Ó3)r‹Õ´cØ[4œ&ÂEœìðê;ô߸ˆ¿í•ÂrñË6MPñ>’í¸>cB]xˆˆRì"îÕ‘¨» «:è^Ä7sü¤Kžyq¶"µ^u:ÈÓ!ü^°($ÐñÑñ‡_¤!ódCùAС 0Øûä£ Ïq_ÁÈ 5©0ätŽŒ3 ÎAçaäkŽc#s戉ƒDÌÁøŠîrcÄÊr¤Nc¯rÐ’c´¢gî1’LŽH!d0QÛ}#ƒuÈ!Æ’±úqÈ ”ÁÕq` •�Ø84ËØ'ã¥Ë[h-r)ÿ2#gÄ!]ÍØûpÚ†ãôf”Z8¤4g�  ™pŒúÎàâ3ЇÐ8´%4ðó$®ŽsGóoÈMù i�iÀô Ä ð�ç4(×M¨�ÞCŽ7Ú¥F:�/!R5ÐïTØnl»°u—Yƒ‘nèo�ÑÍ Å¼NB°!’‡žc�↼p£%ÊF·!t6¶ð6dÙß6îÅÚlƒ4¦�|«kC–Eaª�ŠËm¤–6LnÈ«ŸAcD§a�QÎÆ-êÜÃLÇu7–“�#ó ÆôÞèWlø „a�v`CUÁ1f�æ­¢?²R£÷t_ƒ—7ÑÐ$qtÌJ‹Ã{"~@Ì�¼F1”®!àî?Ž(p�'§Âùã8#>C‡‘HÀÀ�CÇIU]#³Å1øÖ¨Wàá¨F´ÖÈ5’+£â0¬áDÃÊVLtÑ8’B!¹tE¹IP>®F~Æ¡þªB™jd*!–ê3â–ß©¡_qГäo²QÔè©8ò@�S!Ž4x!üM#qÈe‰V„ãÒH6RÅB‰„ý‘†.â ùh�qÔ5qE£ÿ>4ÔÅaõ…Fs8hè/l䞊'ëþ AA$ ˜^‹#^LQ Ï@lãÐEñÆa„’ ÇñY2ÃIJéÍè·tÚŒ¶øF¼š!.ŽcîIóþâø$öM£±Œ¦ÃA2¤� pœD̰{än¡Âñò—aÙ‘Úed�oÞ–!‘e$Å­Œz.•!Ž"edŠþɈRÚd4+A[2IF︑¡f%2 ‡R ‘)@FæÂ!Ücä +Ú1‚:8ä±iƒ)ùÒ³på»b‰RmcHÖ-†bâŠ_áÐ*ÅHá912 ‡&-ÛHNb••ˆ‘ÓÄ­wˆ£˜Æ¹ £âè\7ÒFÕ©„¡A±rŒr. ãÅ=Á(q4=0>\8 +Œ`ÀˆYêÀŸ×ö3ý ê‘lá‹¿ÁèÍŽü¾P âÚŽi}¡ò›/Þ â¨IXDÞ_» SbÌ^äª1‡8ô"b0/‚”X–ÁîB‡ /B-ßS¤{tÐ@bãE†<2ÈJqÈm‡&¼ˆ¢ã ì1R{¦T%î†7P*·wqèî81Ç9ÎTœ·wá»r¤y0‡Fï"‡šƒpÐçý€œsxÐ.Èsë¨Ë,l`GÎeáIvÈ)‹±ÒŽ^É РӶ#tcEî \,èvG^bqð5õŽpÂâäïH +�ƒ`AâøÿŒGú^y0æìÊ#G×]ñg"(uÅØç‘/W|=áŠÈÜAÈ­ ²¶â×°Gµ"ªö >+(u�lYñÐï6V$0ñAÆM¶%¾ä ù ¾ +ù›�e®BAú€jÖV!A±*Zµ�ð©Bêû˜FºŽ¤§ú4 +Ï~¬·WÝ·â�:Ráòú£7*<ìÒ?R¡â’þGrûQ* ãžB§Âè¤-§07…:cš‚ú^¦�Z ´0mH¦¸ù@B]Šœ� T–‚¤S)þX�”"!©AhK +ºs�àHñòAR……> +º–ŽB™G¥Ç€¯&$Ä(þ£�4‹"Ì +aÜ×B( +b7¢PA áÓ‡‚� ÁÚj(Ș-Ú*„ABÁTQH™‰ö˜Ä4&( Uˆbh_�¢…´ŠóUHÄŸ.ÓB(nY×"•OÌÆ�"÷„==¡¡B]žàá �ãÔ«·lØ tít¢#1$zNü¬Ê‰‡»„ –M07C¢ò&Ä€ç P¯fÜÐ5�«Q5!ädš�9Cˆ¡ .×�äÎÄÇ")01¤1œkH�2áÇâYCè,&X¦ë¡ÁÇkHß—ÐÊKôÁ!=é +–\âÔ ©®%¤ÆY⿟Ûy +"ʼå2+¡LªJÄ–—7„W¨ÓoHÄ”8˜�”¨bE”ДˆÛw-÷›„Þf&Á;‡T—Ä=G%Ñ`~•„ªô6Id«äãDÙà!Ò‰ ùÄH°r5Š„Š}H$á!ÂB"Û|]ƒ1i?0Dòd©"bÐ(<"j爫<‰€·?²«0‘ó;b–ÉÖÆÞ!³P$H¤mqD�ñFŒ,E@6T° @×™S#Ј)}ÔÌòe&2¨Ÿ4©aWÎ4'#¶,bKÎHÆá.�Yìt� R„î62׎Œ‚"Ää ‡ÀHG¸— Û‘e!-ò}D ²GÀ"BÕúÈjˆÐ¯0ˆ@H ~¥ÉN!`HÀD¢Ó!Ζ"Áo©ŒdXChíH W" †Ð›$#]ÅJb!ü’€²� +ÑŒ& Pq’åBª'AGxQ1FPBù P‹`B¢”̽:%£„ÐT‚à °^%ˆ¡ W²ÄHE&2Ã| LZdzԤ +Ü·5Ñ÷=lÊhîam›Ð¯ö@»L*ØÃÝß$[=D'„é�úÈI=\2'!ç!Þ +ó04¶\±>y@³M¦ÇÃ>W< ��ì–ÜI!ð`ÀóDá µ~À;ð˜žÈ¢zî SHÁïí &]íÐ ú;³9=ì ïyà‰LX‡@$©_¨=Ï4Š7’ξHˆÅäÊÔ¡"·|žAûþž‘oO:.ÿv¢Ç:Dž°¼ß Á‡Ÿ·�ÄQó\o'ê4à‰º-þðy¿“¸jŽžˆQ¢n'¼ëˆŽ>¯ÛNBA·t�×NÈ�L¡ƒÎë9¤}'bœCÖñ„ 4²�Êá ïËaÝZ9 x›tÈA¾ã�»x O(æ˜â <áq × ÉvÂtp ø8ˆk'Ôö8¯BÍË7àÔNöÓFÄ:™à &¯NâuC$´Vg ¥7”ì�dº §ì$Û�€¨ ñ=Ÿ ÕØI³l8ð� =¢N‚i,l8\@��ã�¯�º =bû²Y­�¸‡5Ä¢«¨¨“q§†íDÔ€� wö/'�È4ØUxúKi# É�‹†Úå$vh¸,'4Ä&œñr9Yð3ì–“ú<ƒ%¬Î î3¹6œ¡û9 ¾ØøxËÉyf°>'ÙøwŽ:ÉŒÀ2 D”œNRëê<¹ˆâpÊ ?ª&Ʀ^½b4þžè2ha ¡Oi[ä2ôÿS 5ŽlZŠ"Æj;ðD¤®ÌÀ‹l"›È&2ðhÖhñ…îè!&¸®oêŽo—Ö°ÓÖ0½I™¥†Ì +��˜ ìS÷{×<óÌ3îìEEUd=*ö8½1þ>�ã›7¾ºîíq¼ËšóçՋµ‹ý§eÇÃõbYsÝönuãîrÞ]{œîîÆ¼³ww¼Ó�½5_̹®ã_g3Ϲb¼a›êm[1ÆßömcoËåm=Ìå­^¼©oÛ~Û~Û~õòÎe;O¡Þ—)örL¹Ì°š_ì¯ ¶_Î1\Œ9ÌÝ�ù¶ûó4Θc¯ã^ýöÇ»Íy]ÆÜõøÞ.‡�³œ{^õ´þ®¾wã|󋹿žÞVkmqÕø³{çŒ7¶·±Ö¸û4÷jönþðÞ�&c�{wÜ·ùÕ;·Ë9ë.s«±æ2÷ª×iÚó<ïjîz¸Ë\çu^ÖÛýð×q{6ï/ïìq¬-®Ï•{ØÓ‡ùæmÜþ¼¯ë¾­ÃX˜7«sÎxg{1vyÃ\¸ãWëŒ5Ö„ìyÜ«\÷íÝ]NgÏâË1öòý6æî·óý>ÌåP?þñ|»Ë±¶�æž¶˜{ß�§½Í÷ÝØj½]­-ÇyøëöçUno«»­ÞŠñö4÷ª§7{·xÃy»;c¾}¸â¼}sŒ±°~yÃcá—9‡óµÙÓÛömÍÙ½aagóV±·mu«Þj×]ÍY®Ó_¾×î Û`Îî­î­j~µåÛ·uzÛÇÂîã0æU{š«( ¥¡4”†Ò²«¢a½÷ã4‡ïåžWóö4xësìin/×aÎr\·¹îã4טˡîÌs‡³÷}üãìÅÜÛêî0ÏÚû8¬¯wµî<Íå®Ë�¾–³·ÕË­Þjij7çoãÕÝmUWìy•{Õã;c)Ì¥©8óoÌqowøã¸çm÷uÝæ.æšßË}û«œÛ"lÃ?L„m6w·ÚqØfã›gëmµÛØ†ãŸÆ6ºv�guÅœ‡5Ö_æ·r]gsÞjçá½­ÞöV5·]Û½yÇ[æ˜ëj° æùzÝVóÞ*ç¶Êñ­æÎz_å¶©xoÛ¯r|µÅYã»åŒmêÎÛÆ<Ûsí¼qÖUKõzØKRš%©+s¾–ãÏj\;¼5‰Ò°¥a.ŽÒDÑ&_ûm˜h[Ïòª·Êk÷mŽËÛê ÙÝqwã_g=ÎÛrþð†‰²ý°ö¶ÏëD®›×Œ·l]cÌ endstream endobj 21 0 obj <>stream +ƒm.¿öâ-g«/Þ¹ÛûÓ5s[ÝXs{¹Õy_Ûé¼aÏë8ï¸Ngoœw9ÆYäu¶ÙÃÞ¾öë0¯˜[^óݪÞ�åžå6l“­ý¶ÚñÊÝMµó¶½|ãÍiÞugÏó´w»ÜåîÖ®óng_ÌwæçÙÃõãšãlùåÞ¦³·9­ùÅVšzk§=ïn5Â3ÞlúioÓÙ¯~wÏ–Ûªý,·ñs�åUs[ÝœwÚòª»¬³åøÆ–s–«^Þ*¯ÜÝ>ÎÓ�ý6,ÔŸý¶msÝ7[^9¼a¢\±Î×^|9m3VNçêé�­å²Î×Ù~x»öÛg9æxÃFõ⌱³Ë¢CÅõ¢<™‘~!åú¦êô �Ñ‹ß })5*Õ¥©Þ×qöë<¯â¯Ówóm¹Më/s^×Ýo®«Ûóp¶·F<ÌÒ¤4Xxë·ÃmÛ°ðvù+þ=D_¿´ÄñVå8’¦¥a\å¸Þ®r­4ôªïI¤ÇI_”&ޝ�'S½<¥ß<1:‡@Ì=.ë¼UŒy×mõê°^¼Õ‹Éz±ˆgÑþ0Æ Á4šz1Õåž&ÔT/ï¼Õìr¨ùr¯z›w[Íy«Ø^l¥©øÛ"c) &ÚlÛÅ[õ°Þ°Í÷}ö«ÙÛ�ýîÅ™W¬1Wõ*Ö§^ÕV1Þ0Qõ¶š5¶©ü«×ÍE•ç­âŠoÍ5gûm5ëmÃDYÔóeª�©Ê‹øÇ÷†$ý†ô^T꪿ˆþÔD’/Ol]{-‡!}${Ó²w$é7åH¦/säx2ÕOÞÕÈš"”ú>-C¡ÉI;ˆô&H%ðpH¢O¹: +§ËÜx�—5+Y¨¼H“š§ •16íU9àÇÎõÔTÚ»KU^´*AvOªò"îãñÍ¡4Œ2– hÇ¿ªaé?Ѳÿ´~žLUŸvÒDÇ;¢õû³Ÿõ ]ó¯jú2[¡Y¶ÄTÅz{3}�µŸ�n¡Ýe†èHvóDíxŠÞ¯¹Ö^?.ïî?xš#z4TI8wœÃÎ=ìv§CÎó6®«R[¾�Û<Æá¦oΡÊã (mdVôTÿ¨AJsLGÔ,™'Ò—R•‰Þ“×+Ao<Êàê æ'áìy^‡; +iäPWÝ5B¼HšªÔËT=Ê0ºb9 +P2Ô¿j…]S3Nsƒ3¿š»W"IOã쌦Š~—g|¹ÝUfœjZúrUŽÝ”¿9^t–×TOŽžêÓŽäùâx”!Óï8²§¥9`ü&ˆÓ~1ŠÌêÅ–¡)ʤßd¤§«ƒ~öÓtöçT«ht™L›jžêïf*ý`5OõÉMÀc +‘¥‚XŽ._"aŒ*ÕËé¤çxR y”¡v�oõê¿Ìñ¢£fúkêQÿIž‰>ŠÞUK ` # ,Ô�6®¥š¾Îô¥P¿©ú4IÕ¯úkUvQ­ãˆ¿i’¯ãè=ûÓpÜ ½ Ëeè{òU1ö¼Ó<©¼sŸgŽi/y4õ2¡ß§ÞÕ'…Àš–ã?¿¿0«¿øõÿô)F‡$ý¦ÃšW¬9ŽÒ0J'{ª^lß§hÿž9®ü¯žMûÈ,?ÒAŠKsLû€Ñ5¦§™¡o·e`p�1¸�ǯ�ª¼Èe¦©™òáHâT(Jó­Ð$ñ˜J½é÷‹ úûÅ…%¸Ì}…(´t@JÒ…ÑÓÎñäéê¨å‚¥¡©7y2ÕÇß/pO»ØSï‚ 4”ö¡4”& +@PZ¥a=íœ�Ë!PË):Š> I6À!EòiêÉNËê �š™†^åÅúMRK)ùê*ω?ú‹Öïâ€o²¼?öSì,S=ÍÏé¤'ûïg™H}EÂ~š�Z’©M†(ú}CõßTyMË~btj‡0ÉOý>})ìj–ß§¾~S,;y¢¾ê¿"‘&d(åJ�3U8ÝeñiëÝ/ë®ã[c{«Æšë²ö8æòý:kЩ˜9á£'ã§W|ÉÓ5šº/w<ßœÁ∖¡tôe¿@=§nÕ$É1,ÍÔï›Za…/óT;Ù/êÅl«‘ŠMϪ«)–¦èKµR#ß‹_¡~¿êeUúú˜ÿêwkw½}ó•ëø½oŽoí�+—kæ]×]œyžè@pæiIt$ ¸ ˆC¶ E ýÄ?ÀûѰ +Êçöͨli�gbÂs²«4à­< TÃî繜B#aí‹…$˜ˆ\—Èf¡äYèDV AÑ F€†á�×õÌ©dM|Ô‰ríýx�. Ó\ÑÄ79‡x#˜ŒÐ�G#¢ËKâ ÐI�Lqº@äG+VÃNô9¡°£ û4PS‚Ês«+hX‰âu´L¹!õpbâ*7D��ø'”àT4ð‰´eu%ƒIÊEÚ–Bœ�yXi ™†––Lè…Š°†50 ”ó e6 •ƒŽ„ÂðH„råáÐèŠÐw%@ ÖD6Ù.Q8”sdŸKjj&'r^tÊ*I¶ÍDÃ> #¨C7ÉùKu¦[n55‰(œ`8LÁ3å +Mk‚áh– -:)rGXHL Ãïk‚0ª�N€ÚLÝ�±Ð•Ö”@ò ²°&is+=P‚û„"¢Ã!C 39\�åCð�H–‚ZÉ”¼F€ŽÁçDñ �ÐŽºN†¸<>»§Q#X0d.Îgð„àdÓàã¯I•@‘?DÊÜ4l@£ÜBd“mÓJphx<'2¢¡„¼£aÓcP�ÈÉ V+ƒZ�2˜iT¶pXŒ*6ã3õ€:áÜPpDÃ6Ž9y8'ŒP˜(>†Á�hy 8 í�à ç…ìTFXrÉ;cuêÑ�’ƒG‡ ´hræ¨bÊŒ�¯Š«a"É'àf¢øLŽÂ„ÅsÓJÆÔà�àdFéþHÆÒaQ;¨a£×ˆBóÊ0ÿo< +t/ +®a(AÒHR‚[ãÑ� AP2XàQngcŽ*®(@°;Ys˜‘,1B'2Êu +< ' +`&ñQmþÃÅ—DîÕ°¬Ùd›óà¯ë`_&�ÓÃÑ‘Å8˜Ø œÐ!¦È ÚhŶ8û2ÁP€îÀÃÉž«mxaâ±3™_ªˆTß¡Ï/¡u5 ”àÐh��6¾Ì¡yKsëPȽ—‡«âtƒ’¨õùTMzÂh‚mY(àòhR¹:ea&•Ѥr+©Ìģؗ –bøÆ!�¬ö“aʬHeóí'Y¨ýçùÏ3ðÏSì¤ùÓÒ ë7ÏjŠÈ÷dŠÚž›ô¢éÏÓþóüçyždŠ–~üÙCiçHª¬øC+þpõÍÕ÷d'Ï2 Q+þ0µâYöìä÷¦xÓ1M™¾I•ÿèWýü©{Éô“¢MK•©ú')¦^¨MK©S=ûÊ—¡EÏÒLK3 1iÑó~/vjÑ3õ¨EÏÓžßž+{b¤¡=1F2´'FÓ²›¡G_âiÚµ'†èÃò¥B˲[ô‹?"Á¿C$ªæSòi9ZWØÊp…˜•šÖZ2Eñ?»+S6eV¤P�¾¬JeŠÞ“)Ûr­N\˱šeýFÐ&kß|StÕV +mŠ’­rܤ R òxöMk±ì©)49ÜyöÊ·k0Eø±!åHÑî9Ç¢žcË̲U¾*:ªÌêÑW%{Y®FÔsÊPE{e…/´–æxöš¾ÌŒNÖ^˱¦c­fZEïËú23¾Y)c-ǾZ•c:о–f-;yÖ—™‘Z‡TöŠöêÉQUËŽÖÒ³@«X=+­þ÷êQÏ:á•/™ª2äW�äIÒ k„ÃýÈñäQ†|ºc/S®ëäÓþ}é?·õûèû2«¼(£SÔshý>r�ÿd–æˆëÒÒ‹!±47%œÑÿ'í)ó‡ 6Of +ÜY•–¡p$Q”‡CÊØ“ã©õÍÒºÌïYÈèÿ3"x—ùY¡Yš£r“ãá�0�»ìç×K“‰ÔÁšZ™ˆ€ }$Á:¦%XC`íJ®¦ª ¥Ìƒš–#„$Íð›ýþÂÿÛ*;™:Çúýª“d·)³¢R9)p.xôG–Q,dY&€iœ +Y–m YÆ+YÖ¸Y–µTY6IphXƒê1‘5ø*‚f Ñ’¨"Y6`À€vàø4:G„º.C: €¶)=�.ßI½w¸ê¤âH€À .Pm<”‰f²:S<Ð\£_–N�§qO©ëì ºª�óȲÌBœ26ydY†!àZ³ÉƒPHÑ‘píî”ý+k*‹/(Á(i¡þ2H"çi² KÓÇô¹˜L¯ ènº¿• Õýu‘>Ù‚óÊPœ߀~`Ì�ë [|úu€1ŒÑ®ƒƼÎo@£³YèDf=�tBë@0“H‚±)t"—@¤¥šŒ9Q.|2GÐ*kh…^Òï}>Xiú\&ŸOiðø(Ê%ÄLz™|PS“?âç»hÊ[qâñô—C£w²ÏeâAMͤÅ9)—Ž€G¢ƒOÊCg{è蜉NIy¸œ 'B‚H8’Æ’2+?ã ¸¤ ¤¤¡8Ä«µP¯Ÿ(4¼€‚†‰¯„ 3P°#äiP²†N@"8X¡ßr? 멆JKMxî]yèÃwJÈHtépˆ¥ÌG'²‚‡ÿùìì#àÁu Ði6‘Vi 9Í�z+$ˆ†µLƒ‹×r¨Ü�BزMë2ÉH"Š’½"�ì$¢(™I@% Ä¡d˜A’¡6¾e¢Öe’™*X”Ì(A2 ó4�2/JÄÁm˜H—”ÊJÍZ×ä>þºV¥Š-°83)ƒê¢©‡‰£ñ`7*»Q]m7,M~�lšŒ5<²ÃÖ`ðÈÄ¢ºõQˆE•F<²…X(‹ên ¬ÂwÔè#ʨÑq«4ÌBBâsÀA"jôɧÑ)UÆ4Åâ¡:>—IƒCDÃ~H¢ƒ-ª+É“ê#:e01Y•ŠÝ$ ëj6|.fƒÙÀÙ ?²C¼›“ÃÉáä±›H4 ¡Ý Fu]¤Ïs‘>&ènPSó Ý‡Î,„�Ë,gÄ€£Î† aŒF8%™Æ€Ñ)É‚™L¶Å7 õëc̆Ïer`ñ hM©ƒF§Œ>p=°e@cÌDÃô�ËÑhXô�ˆ*,$>—Icy*4¬a)‚ UD“4TBMÍDÃR UDJt"wúC¼¡ŠÏwѰ ½¤—ÉÂ&ƒVŸïÒâ\‹rÐdÁ€­"¨ÑrÐdÉ Ò©ËZ¡4Ùâ’^&±¨,ª«a±ÁW0 º¿&0Ð2xd øZ„&CRÙ×Ê Ç@ÇQÃ> +¨ƒÁ#ÞºLFÜ‚B„ݨ®§O ÊE[äÔe²À!h^ÙÓ!”‘Á#?^¨Ð׺L<9ub +ÐESŸOÚè¸Â�ú›ù( «p$:Ø�ðÑ'åA€êoGÀç»8\¤Ïå,ˆœ‡%ù+°=\&&BÀ˜I§A¢“RŠÏöp™tPSsRLKºv͇V] ;>óô$/ÔhÁ‚)aZFzQ:”Ë$t1�,Àñ¬ŠÆñ¬ŠfJ°¦ÔÍå2Ñ0­s¹L>èDs">ßÅ¡k +Ð%1|¾ ùñLåCŒŠhB•Ù5™Ò-&óá+ÍdÑ;è]*êpè„ÍüÁÀtâŠwŠÕEàÿ|¶7[ŸQçÓÉ•C&䩺S<˜àÓ”êë&ĨÛü`ÌoLäf¦z&©×-¼Á.>÷g½ùà¡f¬WÜxcfÕëN“âQ¶Ïä”ry 2ì’ÐqãÑŸÿŠÇí%®:\ÜTÞçMa�Sp—ÊF²eWõ Û +äU°ú§¿‘VÛ«eº×˜âô Fs…º +d½”Ø=b¤Ù®oþoDë'pz…­ 0µ/²¥]Bô«ôcN3º&½,—¦lÐÒ �—¾VF'dÇhL�qî5ñ qºÞ1’†aÊÂÓ4CO@§Œ¢œÚ,,ÅVvzâpé*RÇ–¨Ù_{"g¨À¦SÁµ!H³ô‰J· ÚÌ÷ÊÞ.<½õqÉý½ç éà_½¿ð³›ßEúêÖ>û+xÀ""c” èpz?µ‡'ÆÐVu»ö)v#Õe‹x¿%® î‘ûSó?lWEŽNŽï[Åoñ+¿Š{³þV„‹Ii,£ÔLàjì4ð�zƒºÓàÅj½°/}U¡GÜ ‡U[Ä8!ÒBΪ"_Æ’§¹øõEÁ…—ѿ‡‰.¶\Ú:ã>žœe¢þ§‡Ã#®cMhÒ6FËü‡„ÄG1G·:R¦¨&Õl9‰7xÕÅ8;©:2D"¤•,wïmyfü3Nš0†rÍ„ã¨PÆÖ_£Ó§OK økÀ‰V²Ô*�]_ M/� E&¶R]Š\ÿ@lCv*G„._Ôû…Mv.ö’ý)�Å}X5T\ôWópŠE²#^Hà�Øí³®�¹hwBjdÄ–à„WpѦcm�•€`ÝB§ü— A5`Ç,çI�Ó›`£çWոݤg°)H©ÆåÑ»š•úž‚ÒûŒÕF•q£‚èû�ýixüÔ`r’q†€ÎªŒè''0Y†æ ±cJæ„hJ5¼Æ™†t µcºöÿê}[„�BšK¨l‘]®_ž”Ö”#™¢‹ZÆþ¯Ö+*Ú?Ú(œèePÇâæj±ùŽ©ya6ÞIuñ”£xÀÂ.ïñ>¬ ¹°?ä ÀI~š–ì3ú:ÏBS´'¥NvñYœ»–;lÇÄt¼µá�þc£„F×¼¯ë´kÁ°÷_�¾¥ãtýáuЙ/oœhQºj£Û#¬Á +m¾0/;j.ÕN^Ƈøf z]¬Áùs¦ôNRvZ+¨=»£“/1ùÙðÑ€kÃÕû÷#|[’êV& Áé°í½€í«[@M8–Ñ-¾ í‡×d«ìˆ¯7¾GqP˜W" +ªD‚™ü¯ëÝlE²,À8eá‘üÓ²�·‚V¥vEAø©ì9fÂ��u›e Õ"æo{!Ï3Žù8 ìåNò9ÀÜœ™ÿUVOÊp1˜ÏSŠQ—·+4ÒPÉo”ªd€@yäÀ’Tó„œK—`{ATbmS›Õtxlò�‘$XõLæ(�¥€À%&nÄË\=ˆ+ÄÔDé†ãc€*’`Ãe‰ÖýR›ôc��ðÕ`K™e‡ußaÞ@L:–ùz†#èî…•¡ ©ÆÑÇé“ñ~R€IŒ:8Ï >×V‚«Üe0Zòè#·'ØWˆ¾çË>jé�Ìrt÷ãa83T¦ÒüÄhqxˆ\z¥ÿÚ콸§w’íK}m„¿y¯©‘-炄׌lš»™_ç¯FðÄ`ªš ²³�‡Znuб‘@ÓéUT +é¡Ë˜”é\D¥ê�A at%„?06‹�eëä6s¿+#kmvý¤¤�|ûã‚ÌÝ:œ'GSi§²HaÆýYP—èw<²æä…�‘:EË +ðaøntÓC3Weý(ùÖRŸÑ²÷i�òº–·6|\ÔpLM£c”ÖÔþóßO ¤³üs<»{ö¬Úÿ8Ò†Õ¥X jq©3Ùôùò2͈2q¸ìm[2ß9™£öO8®’KLûšqrXåÚæ€Ý{©‘øL®MÙ%Î8Mž(i¶³Q3ÓTäInyãTƒ² ˜u¶�"Fñ†p�ì$½©ÓU°`¥âlBã­Bfüi⟌ªôt&�-#£‹úÎ¥/€ßã°¢œ³_; q)®a°î€Ü^zæ¾ +ÞùÍBõœ¾']m‰AØyãfÅÓ+hÊ ¤桾éŽZ«Y� û gtÔ2~þÔ¤¹�8ç~Ø]U °ZÛ³®Ç ÐÆï¾…ñøÐ¹«üº]S–õ*J’Ú °ÈˆÉ¥XÖ²øè›2Í&˜cNÒ‡gKHÙM2xMrDxo’ Ò!^%QWjÝC¥ÙŽ©�A‰á–«6 &¸-R©}*!Žfé ü½R"¯Ï°‚€úŒjT€™0Ü€0"'eÞ2ðõ�$ÐRCÃV4¤Íi¥RÌ:Ö[Oòî°LãÅZz¼¦�°¶Þt]Ìæ‡†¿qê³ fŠ÷$œ}=ìb†hÃÃ…vÛ+t؈ÿ~<+ruùzxü¨s&‡Àˆ�ëúÄ«™5Ϋ…̵^wZî“ÈyÙmæÈ‘I'¼AIÜ£0Øýanr€ËD©ï©Ùã—N)•ø�Sh­LÇâ™PTIÛ9éHôZ¾tüæ›÷РæLؘÓ7áe[Óá‚÷*f„²}8E©Ì ß58•¦Pã1²¶²8:ô§�È 2¸LŒLQÃ�R»Ä;-ÃMÕ?NâÅœó4°ý£á¬ +Ûƒàªú&!@1L‡…¬PÕ§Ü[ñÞg’í[í²«‰ø2Œ=n¥â‡?YÄè*�¬;Εªæ4má°Îlrrq–q‚- 1€±Ÿg3{€ÌÒÿ¬ƒò'} +Ãø[†“DÕ‰%}Øì§_vlŸ&Δídui@ÂÛ¿‰½“JÓ~+½I37©—€­dvuj1x\õ )ƒ(â^ÜKåäÿP`ÏÛj5ÔyCôî9‡L}øÇʉÓXú pôÈÓ*ÿ³üõ¢TðcËúÒÅØ ÛŠ‚ôÒ〦Ô¬êR�蚬0þ&¢�V- ªÄN«“5Tk”L€üר‘:™¥—Zˆ}$—¾WâF QŸëY·pŽ)QŽ1£ü°S.°dém®tá=/a»!ï„tR—šIŠ€Æ¸›š÷»ËÓÀ '~SäJƒ&´)â©`>Ð¥S*õ¢!c¯àX?Õ«÷$›È�‰Ã3Ha ¦ä\ ¥–¨4s@^P(¸ŸC4°oc»`}C“\X‡ÂÌÂpvÑ¡4;¤D…@£‡ŠƒÕÄ’u2A¿{Cñ¹,—�gÆ_ŒÁ ’ÃÃ¥Ñ3â–mîèYésJÜù Vj¦ýbÑÛB,ü8$-”/'•…Ô�°¼þõZ½0Ga�~2¥R•:K®{ >¯øT¸½†•_ióå@ãtyÉZ[€’ ç¤Œ�U6ôóÞÞd&¯fíue +`]+j&¡(É8½Ø�ÃP¬" VÙ7¦ò-•L„{i œ +Ѳ¶£áGp§�lw§dŠï¼˜1mÓç6Ñ+HWðäL–ÓopËûçK )«E•ð(´‹_ÆHº°‹Q � ñ«ï«¾R„,8ˆ0,�!�–¥iëÒÈZÌD±¢ ^î1©°“Áƒœõs\´>Gc8’˜HUà@dI h�g$‰~ÁÛ€!ø™ŒÙP‰™‚,Ón©ZCD²í3šD‚ùxYZ‚JjÌTi€ó¨ß$±0“:A�ü¾îb*³6i…vP³n¾19ò‹Ååò[øÃ¤x÷ ™Ç—œÒûh³‘�è;y×+#tވȈpÈô¥�“º/bZ†_˜”Kü®P·*EÌèr�„ãMë?“T�Ùà‰�Ö1 ôÌÛbz¾¶Œ 1ô%ƒx)•HÁ]­UGPÑ΀DIVj%Á°C»f¹ Ëo8p¡ã•¶aÀÝÆ�ÀâiÚ/¨É#µ <0}Õ”�/·Ÿ"+1‘´ê˰¼q2Ædý¾ìüË.„¿_“s€¿>Á:Ç¢®Ó½N‰Cëk¢Z Lb ¿Qº^�ÅŸÉ'.\ŠÙh‰µÞ�2ˆ +Ü›ŒÊ©°ôéåQy›$òG)·:�(zÍ3)´Vòuœ¹“`kÝ$ ^L6�”bǃ7]sP�ØŽ%”³ñxQÊ +báÂyÈ~i²j$xù5wšföHªüxnã`¯;f� ˆRª…±{¶U4 ˜@x`óñÌ<ÇÁü8C.Xqá#JØ_:3¸Ì“(�˜øg|•íø|/- &ÞýL*÷rÑ`”Ïe®9(_U’«Ø<@IÈ¿¹æŒ¼ Þvì28•=èRŠ{1zø$YU=¼Äs©Ž=†ñÜ•°Ý%~‹GUTÅÉ�Y +"@¬™­¤No¦]R8 ¡¹± m‚!tNìÁgå«ÄC«ÛæõØJF,�¥½Öî‘°B›TÑÜ‘.¬õ H-äÒúΛj+z�„lþÁæ”–…ª°\Z5°UÎêàiï'wƒkmN˜¬Áè£ +1F Å_7$P3e1ü'ùÈ·65p‘‚n’n§_²¿Jc0Ïu-¬Ò·Á >/rw(„L"Ä¢ÉQ.À4¨«²•4Eíô) Ó¢Ö0^GÅ>�rÝHG.ûõr†k¿pî“nW,d,{™´X·fè=gÈ�б¦×óòŽ”nIÔoŸí`Û˜Cºh²<¼çyÑ1·;4>•ïÄ!·cÅj²A{]w„=ê2µÀ`ä|qç<ÃÐ +4UD,Pºƒâ%3z@· •[‚ÍèöºiÏ4ªÑŒ7–4 qöνÂL—‘Фq2:+h³2öÇIzãZY ƒÕæêj�K™Yg\¢ÿˆ58Èd¸*Œ{A¨uÄÂû÷ +,çA’Ç §Ò”ɬ}æM§³p÷– +EáŽÜcÒ–¼$�T: ÉbTòöeãþ>©y`C$Gƒâ�ŸÊ¢ÛÛê1_ò$ììyaÏAcáø† M›Ø[õÔ #Ã=Š4�CòènÑ(cì¸õ°Ù¯›L•£s¦ä¦"¢ñGÚ‹/;ÛeÑŒ¡a¹½àýÍéeå`/$9ò½È�£¹+0WÕ'Ï(VzŒ!b`&½OEïîàîÙÒk™–°ýœ¤L4èƒÙ•þºWüVÊh¥ÕÑÔF6Ý ,ÿùzñ;,”eHŸ$ÜÃÿ]/žüp+̺é³eåcn-¬Ø:œ^Ú|¼Ë×N92â¸�]3ùõg�UúMµ¢^ä \(¤é=+Öuo±úS¶W…L&¤%MßµD«…”'}"‘Ê�:SɬM2E:祩à…wÆ5å±,¶Wù +–E‡¹rï@©Ê _Ô&vŽ“­9ó©ÊíØ3lé=©’ìnŠúãAÞ2`ê“j%†æÍpîY¬ �|)_|ßNÌâ“×ÖWÊ]g�ØJ€Q¦…8ygXžLuº¨›—É��“HÚ>EÔI›@(ÈQÀåæ(? #Üc•K¬Ý㚤j�jfÜ;Yù¢‰q‰�× mEUJ•#‘FîxG”êd^b\¶a±PyÐ4ǑέFû|%›8�~Ö|û$îR§Hav²Zô€D˜c��H ,RrÙúcH…†'ú½2®s[·~Â[K²\Ù;@žÙ}òQ-øAíõxlø> dB+_8×ã©Å‹IKM<.pv(CiM�¡ˆbnrý&¸Ê%íhþ-ºoaY©–†mWޱþ•÷×å28]ÜÒÉG0®ÐB +ÁéÝ:³Þbks)J­dä·s–#]¯‡ P8]iQ‰�!”ÉHœc4½þ&ªô8ñn5Þ`ua@X'Ø…Zð‚[EmW�K‘©<“­Œ†ØÃ¼ñšc¹�g +l‚ímûŒN,ë,@uáqwY‰²bÅ@!w¨8ü⓼�½'ÄR¼B+ÞuXå`ûüè›M aÀŸ¥»¬ç2îki ¯â˜eè}ì§Æ[ÂnÅœƒTÌ{"™Jª̱yÖKØF8J=ïóÃ÷~ V%�Fàï€Õ„%–’É™›hK4Ŷ½K ÿôñÐÃTØxª®5ÌÚnOûá ëÜ©G®·D ËWå™èN„X=:†œ ñSnÃÝeòcG#f•Ã|T y½¢â�& VRß‚°MøÚ›"誻§oÿÈ*Ñ +ˆ|“R>#¤ª™&T|xR­l¦$W�ˆ|æÿ{™ãj#1;R +µ¥šü8-S½¿çíÀ01éá— weBæJy`üš`t¢àŒñ9Ù'HÐE�ym·B�˜´ËÃeŒ…i +ýB'ºØ§šÁÀ/AæÄÔ TUb <«”¨€KŠá‡j¨$j“yŸõíë(F��giù3FPÃbè5‹Z#·dËɸ]g‘‰ØÜ•cáØ¼ºXckó:4ÞVJÐzÈj@ðà‰=«ÎóQH,�:@Èd¨!¢†d7Vd¯¦ÖÒ¥èõë;Ëä;4û}²4&€§ë“?ºÓ^=…p@î�ãÃ×~OÞ£ðLöVxdÇÀY:¶�æœ#²²ñŸD]~aô¡Ù.,/3X�E|³vÚ�ë[ÃBiX®t°æ[=—oÜÈ+ÂöŽ«DÓÈÃNÕB7/¬ÃÕ–?ó»ï¤@«9>�¶šCb‰©Há &ïmw¡šÿ"fÕ—%Îäʺ´-dñ®ôјÂ`EÒ�‘ð5쳸ôÔ� SwöAºh“V2`�.˜·�,+ëàÙ‹Ï€'ODàâc[�Œ§'—Ä’´_pzB›.œr~Ä\4‹€pRŵ[=a‰ 7Ì+sòèÙ™ŒËß—³¸«Ð88I�T„âjÈ©njFQú_oŽ1w×è(¶DâL8J“ºEÖçTñMw9ñʵjSô½Æ6ìÿ›ùÑÙ…õ(g¸_xòffˆœ]®ãnIfóÏR«&ï]-CtØ‚ü5C'�Ã…YÈu"’|Þ(¹©Äô=´E¨zF0‰â»”ìPm  ÿÕ»æô÷Û7Ñ»m›Þ9´J:!i>¯á˜ˆ|bÅf�-F Õ>!qA­+pK°êL²¼F­É \b3„ªy>ºz*Í»ŽÙw +S*Ý”A„¶t· ´K~ˆ°Œ}Ìvœ^L²êí¥Š) Iš»5x‚v=÷Sç±}‘fËcvCì©PÊmÜï\a¡qÛÕAÅ(}ºCK ›i½sgÝKZ§ñA"8Ź"×¼ÀV#£ÒH­ S“;éKhrOµŸh3¤¾M,SiCçP�³ +=��¤”˜­bÄÔÒ,ì.ƒKy µU DÒú (–¿ó–ˆy˜amj&‹½cä\ühf&ý®�ùSþ½ÝúÁ8B9Œ~h«×Ж:+¢ Aqhº‡˜YÒq¯5ÀtW˜DÏõ¬éBÖ—ë°ÃòêR@Êh–´½ÁR]@zö×È yr&žXš 2NØ'£Â"J(RU!vÒ†&¹5“Öé xñ$�Ž‹-2*1HùIÒ—Gžgbc’#wÀyáBÃ?ÀS[&¨ìZJ<¾ôFÒš8ä¶À&¸ mdÄ‘âhþØ""¼;×ëµ=ýƒê»ÙM?XÜ Ëû AÆ–_®} BDLRÍBÕaÔAo›”ÕSË‹Ü? mz ͲrÅê«ì#ÖPW“>v�fJñ}´ŸžÉDý|ÿ‰ïü’Bý�ç‡/3Fš%ªwJ—š×†Y' 7Ç$¿V‹Ü0¿3Ê©Ì<Ît£ й*œÃ ÍñWÔÐ,SÿA¢-^æDŒ…Ȧ~HŽSî©3tô>-/‰Þxƒª=U Œ/eÆêU†içR$Wœ{ò‰s)ЮÊüÝ ç*ÚØÃ! Ÿ|U´Xåxðãæ¡Ž›’*=†Á}Ü7Dm×W=¸Ó4®SÁ<(Â!jÑ1åðe ø181r"&fb¢%ø“y#~’Œ¯!µ¨›V>릟©{à •}™ué],‹•¼™zGþv9à–Œ­ ’‚q ΟjÉoÜÑq–DHV^¾lË"(Þg·)�;Ä\îˆe ÐÒÆ£(ÉFw€²ã¨ˆpJsô¿UGÿÎ H¿_ð(;˜’‡à:ç¿Èƒ–—ƒ�61 «Šm¶íõGçA_£i?³ ÷‰+í~é * +=E n®Ï%ÊõŸ‚a¾Ô<Ã6Q’ +’ÊK¡ð’Ék�ÕM¨¸~¾E±üVX«ÇÈE?:Ö˜°­Oˆ[öyw ?øn²Î(|ï>–J"¨oPf~c™è÷�øÑl‘°c€¼ÛÇ�AS�~?‘åí vãûŽš¶ Ÿw•&/0¯wvÌ c„±8h�¹õ{iÁ‰‰ô¸¥W’±xdÓ²m¼Žix7”ƒ€ãÄ·9ñôxöŠC>¸;ü‰šÖkê•WbFÞÁÞ\€œÅÒ~_¸ <#'/,ô/É�¸+HoDÊÿíL†&,(÷#c…ò61{‹àU”â q8÷[Cú¡³ê[o`{¥]˜°ð yÂ@É¢<¥‚àjYh“O¹†rLµ„äAQàO©†/U +e 4_'wü ¹|r‚\Yþ`ñ+›ý�²8e-–3Id-Ãá:å/ß�vYâÄ×½ïÜâ ³�ÿŒŒãSZƤú»°Ã�1l+4™‘ø<^VÐ1aO’NLàd3‰Ë€š7ôÔzÃvÖÐrÂÆš³péÔ¬9rV +pyE�¯Ë%{ +è�e@½; °†ïwÿqL8Æ@:%>�ÅP÷ËIY“Ç>›`Ÿ;E¯îôxƒíq)é³(ø†J‹‘Oåܦþý… IpÛ9×o`¸±_Û̦€0G›²YãGë(&Y^` 8žTHû/’?QŒ:È…²‰Ä’2™ͽ!�,¡¡)p2" êS¥³«ÍÈÏ,ÎñÐÄÁc0&€“áx­N8šo3¨ö?¬n›:ó‡‡NŽöÒþB–Ÿd›dGZR±e~ v¤›“ ßÑØÌ}ßÉ § –xìËPä)¯ª #´ SyË | &ª&ˆ›ø!"¤fZG<€a$A5¬ùð ²âË&|ªì‹U‡­?T™òƒÉÜ1Oð\/°¹a$-÷Ѿ8Ád9ȧõ6dßÈÚÀ³ŽVOu  µó´‡)ïð2/ÖG°5Òš“‹`íKà ÐRà^Á-ǃŒDæ6J¤å²1A0nK5Pç][Öƒ¨’mE±n\Ťîˆ>�RÄÃz—ÂÂX‚vPǾ“L¨Vè‘m¿¸aRV(y£ûá9Ï.ù úܹ‘Žh ®ÒðŸä™þ�Uƒ#NRcéàì8!'‹Ðã±tqà¨b•ð4ÈV­`-c1±O+òA<ð§‘’”¯·a'¡KµqýU²ð§`k“H3°ÛZ¦ÌŒé}ˆße¬ææó3âÐ,'ÞÚ(lBnBÛ–ˆäé¡[ÞC5c5†PTBý]H¦(_.\P8 Q*—gr +)Ô©¯0Wþ4ÂÖߥ/·­²@|NûMrR¾)ègƒ ©Åb€Qœ*÷üÃ÷åƒ^^�¨ªI!‰E&Âꊈ¡î-˜{¯D ¡A–:@$Œ5"Dœ5òÆk<ÄÓÕ5ÁW6…Z"0È"d¨›®H8iwÞ>ènP|õ¯wd�\*'AŠ`#îÞÍýÜÚ>¤=àáT(€Y%ËTèd²~Ðm æýs�Çôvœã+ÅȪŽûbWMqÇ]¦$+fþˆ×ÑÆx"¨rSÖÜ+G@ý¬DÀJˆxHš–Öã‹°n™›Ž#·—åëõÓµAq`Àžo"’Š ÝvÜr†+¾„Æë�ö<‡¡’�Ð:b>žgý +àÎAi àé(Óƒü¼ÿÇ!c?XÓb_glŽöI;øìp¹’6º_YEàß±½^ÔíþLt^ò."ê¤*WR›™Þ<Fî½€¿€f#%�Cboø æ ÚÑ@ð•>Éc³ MAT&ﺩ¿Gôg´öï^xˆcO iÌþ ¡»ÎgsÏo¹T²Âg?ó×ÏI�_ýÏ…¿×�ÙùY�ªb’élá€æÍ?.DжÉq_ÙSV»1à%)©qÜÃÝm«|aU‚…‡=Øô¦z+*äVäùÛå›0¶R†qhbÞqÙ¶™‘‹>ÙL�¼`'d�œ°òE5«octEgÒb¾5oð#ðgžœ©WíôbaÄ(XîG$1ó ƒ=EìP)% – н5ÓQNòaðÖ¨Ó¡àý ‡7GÍ70^¾È‚…ªÄ)�p°$8Æ‹˜æ´;pëXx$oý$±¶€Mnë6ÿŒÒŸ’õ»Pc_ ë±û~æ"ߘîŒ_Z2GæR'¨Þ —÷ôiI‚†#þŽ´7jLóáœ2¹œ‡hÎÖgú°Ô#œÅRé“��/[€žÁKÁ!ڦ˥£Æ^‹6Þ=ÿtÈ;Ü\pdÕÖ2x�?z„oN&ðGÌqÁ! è·Áß‘vÊáN¹šs­nt¶ƒßŸµ$�P)¢FÁÏOX­Ç>µ% +>?-ò%’ÖGBZaµÇòu)TÁ %|ó�ÅI•4†~�¸¯²+kÚ|™vXP‡‡¡Ç¬­=BK 5÷ò +Ró{<0¯ëÕ3t »P»½O®ÝÊΣ6F]•ùzEe¹è¦‘¯–^�ŽŸL¯ÕùÁr_r÷¿æ�¼ÕÐæ(hQ£@Ï�T¡æY_ÎÄÿ!p�h'xކàpYB1~ß^âçf‡ZcË!Ú +JUŒWÏec¨,íBB(ÆI‹ÆÈ+¶Ð’P~GˆÎ,ÅlÊû‚† J+î4ÖCƒ—šÝYdA*&®…œ—'ªyÆèQ@ÆûI{«À?oU‘Qf@9Úˆ6µÎžÁcʹàU~Ol!¸¢NUµíç« +àÖ±n +µð­±¶cÈ¢seó}L%¤æMýb·êÀ€?·~âÆ%©#ª°“WF“¾C Äß21 ¹_z¢ç +‘’HÈ”ûÿ¢E¥ÖL ¦‚öÿnöÀKý^Hâ)½×2â…|¾Q¬æÊPŽœWïrtû¤k»µœ9"1x�„bàâSçÁŽõ6¡XqÎÉeJQ ÓyÊDÜ,8�L íÿ0¡^šACE°¾eF‚R�Ã*ïÌà×�dVkì, Œ ¢s©=× «å­(]KL7ÉBšÖàЮß�È}¡?½¼ú +íGpŒLï˜ÄÆÄá›J„ß<9ï«MZèÂ[°ï"ú¬G'ÁFWŒ?-Ä|�òQ~ö‹À„Š  +ˆÓ˜2mk:C)c16šPõÃþÎØ>_ 1o¸îÅÅ2ãh²/jZ�[N#÷wº–é9DnçÎì!ôB'­òÂjS²½/‹·4* +lM£u~Wé9ž¨bßA°ÑÕ^%¶k˜ê|^®ÈŒË­ÉF áÄÑÜ+VÆ¿ˆ0äJž -2nsÝïá…>ŠömpÆ¡·Ã°ÕWxLpPŒßkïÆ†4PTðK=‰v1ÇŸ�£ívyOÀ‡ï*¸4™bÃ=wœˆ–!œ�,{┎ +®Z±L|ÙÈS½J¦tŠë9š Mx_w,©~Ò€§JpÎíä„ñ*àÖ'zðôÔ|g+VÆ!ø½ê ~ê=¥ïVq ®sycÄÊ E®äA :‚l�xs—a—õ÷N×XËk.pSP§»¶…u=¨[ \HqéLÌuq Ÿ–)Q4p�Ê)�D5 ÜÝà@LÃ(3_mÙÎò•é@ÿ˜~_QC9@SŠW-÷+`GòfAÉ"hƒ²´"DLWDg¶�x³áÂIY +{#BG“æ½ÖHQQŽÂܼ�RŠ«�7’´ ¦ßýsLsg_´Ñ¿˜}…‚kPO¸¨û¿“Ï�B|³2S5ìE뉫ÃõÈÎRÑ>-HÄ·9� VT +ØV# 1²×FYñ(4µQJÔªôE¾±?sm]âDP:÷2›�—FkzWs±Ÿ;ú¬(í°˜Õd»Ù¦D„I+1FIeŒ[~°#]Õ̂Ʊ)3»âvï#*êW´vL‚üÂÐqj,BÖËb—ÖÔ烲®E¢26jgÝâ'©ÜÑ%x ø�u›­R€_·*€hWУÀÏÜçôadš‹:B·È!,ÒÞsKZ?ÈtÊñ“ÉÇxGØ–<`¨EDDAÄŒ C‹00hrלÑ&I%ÒŽ@:ÙÝŸ-SsˆÊ¼r£Îõ•—ôãÕ‡ˆ¤t�=l +! Df~®¤R',¸ŠŸ«>ùÿ³£•)ìq‚æMš›õ qçåˆa‘ÌñöïpÄp(®ABö–P“�ñ {["a›ÕЖÊâù·´ö ®�1ŸJÅcä®™ù9G§W©ÚþĤ<¸.ÃÂÉaÀ=æLD5`À„«‡ÿªWð)Ùös–Cb˜¬`v[$X¸+T*{ôw +Ë0Yá-±ÓÇ(7ðGüï·àü�GsîhßÙÁN‰Œ¥^õ¹Á:z‘ (Y^5Цj‘k?vP°³½„s-º!è`êR+³l' žÝÏ‹e’D¸9àä’saޱŒe76‘q\+&C¨ù)ü]'—вPB]¼—M¦!:ã=ϲK¡BަX�ˆ¤¡XÒežs¨ÔÿØÓ~)¢wü:_ýÁ•ðE +¹±”À^XW2‡´ÑJCX}±üÔ@ rC°¬c„Æv77šlWü¿¬°HšfgT$F�GP˜«¸»à©…Ö@­ '�Ð� "Lf,Û� ÂËžen‰ye{põ¤™ .9ñóÞ�ÜÅ52¬©¸ O£,îj¦ö9b*∉ÊAÙ1LØÈá/˜´8 \ël$«RÓlüD¾E¬çÐ~d=l¸ 9Öm¢ð<(áà +ª +õ4 LKm>òw!¸v�¨›R#‹ÃÔ€Qö–xüÝa�Ø,gÀsz&SȾ«–3Ãû|‹zއ ‹ézž78²êÍ0‡fŵ@k8Cüg(uðÚ"ÕE|¬­Úͺ‚ˆèùuúkªG1šæzì�†¾¡Máõ^ôê+�ý»Ã—!½‚÷`âô%GŽ+kKð@G³#PZ„œ|ºÕ@ˆQ×h’>Æè"”Ÿ}Š0‚ÿÝ"„±—^ý‰�ƒÿ!—ýRì~³¾/«‰�À˜ñÓ…ÀÍxlç/_`’µ™:ü‹Ì�Ö8®Ý-¶N€‘ ÊW*w' $i7`ÞÜZC×1 Q‚䃧<’Þ”TL¾ûf^‡×F“ãAfUi7ù8|Ë©à^Ë ’­- ð/B¸Ç¯“—Ý®õÅá 6<Ò(#mn I½me§·D F9½µâK,Ðü\ÓßÛzëX +št´e¯”åŽHnÊ‚`šA +…]o–Š{BLÀÀÍ6Œªò¬@w ……úYŠž ”³1›©&æÈå04Ñë`@4)J3óÂ�öÁu5”ÌÏc­+”{¦–È©·4ýBî‘Cn&š@No +r‘¹HLr‹AÁ y}È­£ äÉÇ™4éaê–ͨû’Çɢζ[ê�€ewªªË´èUEÚÃÞ¹($ªÞ4Ÿ4G2M‰‚1½õU4@½ ‘?VÎÆlvÒ* 8¢Î˜K�uJt‹ÞÍ]ƒ(ƒ‚¾ë›´bõ–†j ¿ºÔ˜WíÚ[í;¯\ŽVݪ,í+Jì~B,Fµì??2÷L £o  1òfœî%>z™F$·Ô²ÿĺT[ -7S¿Þ:³–Ê8M:ëÞ›ÂÒ�+.(è F1»¯ÁqÄÞ[Óa *"~&SëƬ-€¸y®¤ZÙbÔÈB`¢âPô–^Œ;YÆV¤ú(RƒÈä?G¤ÔCòòqûì¥U[6¾�E*ðjUo3ÀÑz +Œ:*Ëö¥”Éújg΄Œbþ’KDO™×Ææ`€Øzƒ7ã"ŠÔ$`mÞaA0ÍÕ*ÁÉãŽÉ�XbÙAÅÕ.*k–@)æÂal?¯keÙØÀD|Äú?Ñ»¹è2é_ت¡Z”jw_{Ñ 9>š@îSy‰ÚZ}\HDˆ\¸>Ž}}ÈIFÈu‘û<È=N¢�{ÉÈ¥žä$…-rÞÒ†�=ï?qà—ú }.c©qŸÅZŸÍýi™�ehêAm¸â6~3�?›HÝ"¯&zƒV³ü¸} ‹D÷ƒŠ ªÒ”»Ép\F½ÆQmÖ¾ô‰{2˜5¦ˆçS¨\ƒɆ“˜¯t&#dT²·P…ÈåÅÒí`s!œf¨#Ø–Wå,²µð©ôQ_OK›Ñ­Ô³š©¢0Áƒ…äýøÚ3•eÓû['Ïâ >8aýagÈ60Ê EàƒyUî%×8Ã¢å ”&]‚thSkàIvB Ð,U÷€/½¶…£;'àiÒTBOâÓJ,ÐülF³�›{Qm¦yõÚLû̳íÎf³Š'�x�óGœö-"žâ„B|"(�ø— =ÜÓˆ^c„4¼EãžRÍ®Y90<ñå W¡Z.�rE¸Hâˆp½‰‰ +Ì#+ØËÛ +äå§8àò=àºÆZaÀŽE±2TªŒ‘SÅ¡§z�ëÀ�æf$ +¼l]},h;]YІõÛ|õ‚‘tŸå�äíµJÃ�à‰J¯ºî†‘¥©à•˜¨Éæ°QŽ1jªš*3ñì8—�‘M‰#«a<;zgŠÃáÌD°w¦8â·‘}6œ’€$�:+è)¾á„ß(ÆŽíÇe )ëh {dÍ�5¬Å ¨�‘íNœ-üODB}"Ò'"¡.΅ú(.Ê¢3�ÏAb�i|HÌ;3�_9�˜i|NÃ4þC– üÚãáÚ�ÞãIø�Þx¨T3È1ð9T3È;Ž��Öz�ùLi(ã8ð(-ö±@< +ù‘ï!?:Åž—v¬ë}ç;J;h;î(mŒÑ²œÙalîÒ`'¨7Î~Âfj³�Â(x‚3®Ë5 Â#<ƒ +l`Ѩ•�z`R�—“@_+ á}³îP˜K +âãcÉQÈx0ÿ±è³S6ð—÷sT›q>²ÀžhŒ t4ƒÙÒ� ZZð§÷áÀ`£5ÁŒ�¹€�öò@ ÚÍc¯lgµF\ÂÇAí¬C+  ´¼ÚΕÏ„n©ë-%aò~¡^…À£&-06½�ò òŠ9òqû:—à=²©¹Ô±°¬·†si&‚E0*ûÀÛq³m6œÙ" uVö�?0¨Ñh>WVHR˜-\TC÷¬¹³fÖ ÓÀ,çÓÛ7й÷‰H¨‚ˆ„â�˜HgŸƒÄ äP9�¯7Hl×ýáz|Y‚P{ô‡Ë#OÂÃõðNÂÿWíÑ4ƇŒ¤¸c qV üϰ• 㬾s(«­·Î¡\ƒVCiðé¿$Cûq;wC.Ø~Üî†8±ƒº!ÇÇ5 ·+Ú€-¶­oZÃ[  m€7«½ªrÂqC²�ùrÕB®“‡ýbD…�7¦UU˜šQ“ó+…¼ËB�ðcT›¹‚� pdhŒ¸¬ÄÉ$zô®¼‚Ù30+~!Ž£Ú¬,§�qÇZÚ�{Œ&�KT!‡P…œÞ:‰‡›xˆ\è«"ç†4!'ª¼DN`ö)þ|"QEãr©1Ù²Ò6dÙq4uGrøÙûVêKPÁ3? 9:D¼ÞöȲ{dS|.ÁN§ÃçÒȦ¸Þ>ÎLÄ)½“ôNï�µ£ÀáøÎ÷Ê>¢ ƒ‚žâ±ÎëÄ:0ªé|ÜÎN>®¬�âð›K0 œá°dü÷(æ{s¾·¸Cpë�ï04|ýÛEñ_„�iØ,ÌÓ‡=Å|Ò y^%ýc†`È¿QÌGW FÜB,„’ÐYgî†qœx÷šgMŸÛ¬áÏZ¯!c Á:yØ~–þ,À 9“€Úç2·0J‰ê-3 A1ä[‰.`&9.ù#WƒI©ƒ<ƒdؤj²9¨0Å4ÑÍ QÃYýCp[©÷E÷EÅÇí,c0н•Jápv)@ñ÷…Á T ÐÛwtW᧨¬€ƒ•]:ûÙlŽd8UØáÂIÿDè Ä3ë>,Yu?À'PYj’UŠðy!@äçÄeô¬ÎwX‡É{£ä•:“f%�C„s$1çúU }’êÖ"Fœ@]� Äíþ+YußÃ݉«Ž§IqÉ5©—4Pžð5ZéÉÂ.sHï—MØRç +2y_:‹—Z¼+fœ„¿êMR¢`Ÿ¿/AkèpVÿ�xó˜C@ê I‰‚�Ê‚4e+Ü�RÉy¤‘ñ¬þ¤²Fl¬9 à†”(8öL)i6ì�Ñ‹‡Ýƒtl\¢;.QÐ3†àÞ}£,Aøi\¢ ×pVÿ cð,?²Ü|,çÑãœæJ~G¬ö²80ʇ(\ÈÕÈbÝÚiÐrP¯§õ$ÌULêC^7n­uR¬ôöi˜ 0ÀÅzÚÈL­-O›h;P8�½Œ¾ƒå2}g3î“TË꾕PGCØ?•s‡<ž0̺?Z,Œbnž%/]´Íõ†ÐÈîû~°e;šÑ[!A% +’r÷}•(èm:(ÈA% +òÉ×ýT¢‚†+ÒЗ]}iyÓS°6OÈX&WoVû=«�u÷xJü¯Iä)QÐt)\òoJ„mú¦DÁTBA¾Ù›7[i½¸1­'1?ÔÙ|Ô1% +rÊÉ㮵‹*€ð€`�B+WF¤²xãϯš½pHI™(ªA`l­z³(ÒÆçEL‰‚")~ž0Å|° àÏTL½WJD8¦¾+% +v†hêç�`ê•GP d¨”(ø-�¸w ¼ym`yðÃY½!ìN|t0X©‡6›�…�5tÞ¼¥G1ïU@Aø Ô!v‡h# ¤DI´DøAJDÈÞ}=Ý|�iÿ³Ù@Ô˜£qÁ=Æ#Æ% +†‚žâ†¸DAkFy…¸ÜƒQÌçO‰ŠƒQÌCgõe‡Qð�€Oôêíã"�º#´Ù RŠ‘?¦™3  +9¢%pAäjÞ®P-�³pä�Ã|Uä¶«áqœRGV9�¬Ô»AŒ’\²J8W–Ma T={Þ?qž�°P<4@¼o$Ïà d)£˜“+½hzÓc¨½±y´2g~%“‰q=­ddƪé*cÕý'$ x½ž–ÆÁTFKIAœö~4 ÷u])il`€û#“7ç>¼€¼RRm´Ò.t½†ÞLzkõ†Ò̼ë˜TjA9BGåØ�Q€�öË�B`ú´Þâ�ËTo‘Â(Ùú„X?̓}>&c©Tˆ%U©�(ÅcøÕ[é“‘S´V—vsÌW™”¦¦.€]L}éZ/“PÉ®­[ÕcÜ@álˆ…p½m8ŸÑb�r;DFµ™Þô6ÊX}™TjÙ’Ñú}¦ÐHµöãšRSsÞÞ ø8|Ȧ*ÆuHv—Ùt¿fQÞÁÝRß ÈÊ4&Iþ==Ô› ~OP¨ÐÛ®À§ÁE½Á< yö³'zõFM 7áÈ!7<Î""DN–2½G9<�ôrø +A°Rõ¦fØR§©É®¤UÈ}ýò|ø�NÈÒ2Uz̆q—ÞNW4¸.&`ãâsˆ³*�AT™ÆÀ­X¯ ÊH›£œÞH-õ5´X¢WC÷$g3nÕ’¡� Fý, qFüLÖ6$ T•(ÐAÅÒP…~¨ /‡l`ÞYìª�l´z{%“šòX¨J:ëÆõ|\Ù8]pÝ—ÄÝçû*0zØ\ŒüÖÉä½Î1¸?Úô êÑ(ìÃÉ‹¡”Cc6ÓÛ@&Å]•Ö‹MoŸÞô¦7½ÅâÏëm€÷Î?‰BDjôq!r +A ¨B® ·Œåuò³®ÈªÁc¸¨„CøRi&gð’ªRY5‚dO:Z¤ƒ$æ r½¥($6ì›ÞÀRozÓ›€hêšÞzÓ[«· Õ›Þ<ØÐ(x͌ר)NBâEËAâåæiО-¬3z‹À¤Z» ‰‹E¼ºÊŸD­ÄÝeWj õ384 \.%5D~CP+©‹ìÐô¶zØ-ŒüE©Ù@ÖÑ<_ÁhKÐdÐXoÖC‘vMônãØú�Þ<½¥œKäõ&û-Fe1`¸ý´ˆBo¨Þ`To+UÅæ�ò€2V?M F_�"t†fn{w½´;ãÊX…4h;�\Ö�{éµö5„›� $£u]˜±ššf¬(‹3È£TÖˆÕ[¬9ˆn<8lñh9 ûv aº8Cn÷ÎÓóN|ìpVß}ÜQî·äLà*Æ!£Üžˆ„â$wÓø¼T ]TÍ ^o@M6ÉÞîN…ú¿Î4¾É•(X‚ðƒfQ÷Z½²@Ôègx5´’ ™6ê$Úæ^ÚáÎC4ÓÈ¡!ˆÖª·ÉkªØÔB™.–LyÑçBÿÄ*…X<€µ9¬ÍE ‹<}Ris˜w$P*”8§´3%qRÚ\o )æ$’ÔˆZŸÇœ-UH_‘¨ _‚} H=ñ]a [�v+zF‘Îæ®±;�˜?ë"ï@Ù\o=CÙ<,UCßÊFDüL"JŒÕ^Q·^Š(¥l^ã2�–ª¡ÿˆw½q‰¤DA~Æà.C°D�»Då ˆÝqˆ, +Úl *È@Aßu© +açûÙró£ôza,G�¶g�°EAÁ‘è%‡bÝp(7/°fTÇâ�x¹ph¢CÔ%îõ—4”j;‹î3<ßõŠ ì•Ô¬û�J·~½‘��Û#�Óç, …0´~ZïàœëQŠ7N§ÞÂ}uPð@›A~ëP©Ã,„s %žQ÷ÛÅwý#ÆBx‚LÉhé¬ õ§'σlçÁl»@L[¿KŒ‚G”Õ.4 ±K)ÑXVE"ŸHVÝ$daE £A’ô†Psbz±ïN| #*™‚k§ÌZßÚRL@§i†A¬iåêNQlÒDÚƒ 0 +Ž¥jèšÑÂõaŠ‚^6:ò’ˆû–TÀÏy>Ù€ºZQ.»bú´^oÕ¯¼ÞæIÍ«ÝCCIõ&`�Þº ¼ú�•È1Âä�¡Ä(�΄¸{.R¤ƒ¡ŒtÆàPR¢`:9ÃîKßpO'•ú¹f�ÿÓçß“@ØÙŒ÷×,&oÁiys©�Ú¬û ·N@5|œÞ@ +îã\÷ãxLp#Öêã@­†ã¬á;–Ï‹”�Ûã‚ãógÇÈû#]¨gKÕÐa”f¦þ–;éÿ·o€Îu?ˆ[ÿ)ª¡¿œv÷k±+2SGè”jâ¡û‰¦ñ!q€©«§LŠ›%©³–΃£½Äyðö0Xí äwŸè)Î[ßùHø¼ ÖAA’òq{ ÁBA‹³úCÄŒ;á3¡ ‡'ÐØÅŒT>ÒPªÝ=±R_C‘ qaà°Š¯á§øÁSK(Ù«…ÄU…°¯œÕ»SLù•…W[ G¶Òzï�)nºõƒq‰‚r¬C¸š‰„½0–›ûöS¾{¸ à÷2.Q°0– Ãȳ¢û1ã uV»Müî{—@©¯‘?ÏLã;b‰ú¤þ9y§v6Óá~†¾6"a?gØ4ÎêÓ ¼Ú±û»à‡Ï».Ï“Ÿo€�–)1 +þŸæç_ ÅV5ôÄ©öyØ1OŸß& +^R{ýlb1ò$' +õìŒøK +±þ”;Ľa’b—�ÏQ¢:3)þFÐÕ6´(Õö™VëSG¸˜îbä[’€çCF¹y"¡ÅîαȪ€ÔÙZ'N¸: + +Ê˪ˆ¿gõ0läœ&ÅaSv(u…N©vd5tµ�< ÅÇFFÚ\fa|§á9�zkO«¡[B�z©f*¦ž2ÐÕÖ›÷2�®£ ßtNgsÂÔq‡ £ãˆ–ÐebVx œ3E\̃ÝGL‰‚!kFñ=zœ;H„/^ؽp ‘-^êãŸZ琢2�¬ÊVJûÔ?w2ycà–W'Y¥AP®oŒðù†‚‚P‰‚&YBqÎ)qO×uz;,æ® dŒ]^Š.£²'#3N:›FA¦ñë©õ'Y>øw!G�Åù¬àÃ[:³•NDYØÝO"SxKvçPU½MX>/WfÝ�IlŠ�¦ vV_!üs”„à¾YÓÔÛ]í­v'~ˆø™”G“ù�°§zÞä½8¼ uá¾AC£G$…Ó +³HŸ©P•*Є’­·M‚!QƒL™²”‘Â(ø‡aü|8£ÉR~ø|%ä�U.u¿Æ9L}  +y^oó “÷ëÄŽ°Dா,ç8Bš�{ Z"×rä�«ÁTDZ4."çÉHЇ «/#~&$6–˜±êC3×s60oÈ(ÓîÄ˲,yYŽe9*G±ùQìGÞûÑ‹z =è‰Î@Vfœôœ›¦‰8˜&7æ!Qr³<”¥/%¢ôeé>â"˲äÞ4‡²ä%‚#d/KYšå�D�¿$Iš$ÿNšž$9‰ .Óäd'MÄ7¹yø‰ÿÍÿÍq•ßüýÿþþ=Ù?�ˆ¸Lþý#¼IšA&8q!J~à¤GÈo’f÷¼{ï=O˜DbBú¿¢¡b(KeÛlª¾¹�d H—i">/=I–¦‡8x3²¹|ÎùHúFâ~G J„Y’fï‡o"ºé;ù»IŽœÈÃç‰Ò,ѽÉËr”É6Ô Õ:½Hñy¢b$Õ€UDÑ?ß|Oš�HµJ‹´¢­^ޏä}– ÖúÞŸ§… ¼V牊 3C½f0öÏ1}žÕ¦O#RAߘ‘6>šŸgµ¤øù‘ðy½­žt›ކi³¦‰!šú�` +{ JÝ C¥¾ÈŒ42FgÞÒˆ{ÄŒù+Æ;%ÄãG‘€A/ "pß �°ëm<„‚‘°/î© +< �dÄC  >Ù +wÙŸæ¹;b×gcˆÞ +ø’ Ôlh %®·}fô&ƒ›kËu6ćµÉŸÆ,ÏúÈþéMeq)\KC$àk²Ú³ŽLƒžáj»tµ_r‡9oß«‰°jn`Êâb6ƒ ”Ù£q„©ç2ä$|ï”wl$^æ¬Ò òžÈ¢™“·aN^ Ïp5Ò8«RØqiÁÀXVHqWGQ(^ðH +Šc_ÈÅg ô<’oÀª£ï^”×› þ¾ÂØ3�ÀB™ô¥uuŽ’­Ùßý° I÷è0Ó:½ê~FÁT¢$§±H1³Nµ­Øå1¿Àøø¸}TUCß´E¤P*=¤«äI,Qì°€ÔÇ kóR ´¹cQùP# õ°ý¸£…FJ£�á˜>¿y©59¨ØÏlKtt¾‘°�/Lãs(½4ƒ<·PÆeóšè €,esŸ�ùdGàÍgFÁ‡Ä�)ü�°ÞxÝ4¾¨Þ@‰n‹å«"§`¡’èqœMíäA{¦5R;i +8¨ +÷RáêU½5H„ÖÓN�¼esm€`šú¢lH°ú'‹�Þ0é ôh] żz3ˆ¢•É�S/pH”ot�¼ «µL�ÅK•ÿ¥Î++�ÍNÕY¥}IoŸ×›ß­UÂвª·Z'“7E2+õ·ò™ð‹ÀI¥~6Å?½éÍ+èMoèºIiîðU‘“xˆ—~!a¡ G+èMs²¨¢lt¦ŸcQüàï‚D¦²Á(ÙÏ(ì–R•I/ƒ›õ²`ŒYÀÉÎ>1Ô%eÆêñ±£ø}3ºDÔÊê#ò^G³R=”ü°ÆVu½5Hæç_i ì‹:z•fë¦ ª7þŽãÅýˆœ_ _æc¥ Åû*¢<�ò<ä§’�u¦þ¸^ê@Ôš”ò™dUo˜Ndq2?ÿéM,»_éMozûîFEªµ<£nY&µÀ`¬ToNïTVeÛ-u&ï˜C{pBt¦¯e©'Ï ¯7½ÅZ!ßè�@›ítB!ÕZB¨Ô*'%ÐÌUÄ0©To Úëi 'K"@yÊdôj$2zõœœ)>¼ÕŠÉ{ÓQHÔ—áË”bêľåäõ¦·w³W½­ôVcé�ÀBAn“…!+lb²�ãzâvCÄ]0g2i-m©ÔÇAUõyöè?Ãä½r²°cD’3�CzC2)½q°� aq6/Œ¸� g³�‹9rÈ�¾*rèWEîòú�ëNÉâ´¼:Á, œ"pMø@K|pIÂ!Ù1§M=払T@:ÏT+­4,@ 9¢‰:y,I ‚äÔׇ\©ò9½¹h�•š†Ø°SäQ“2'‘—CO+u¸Jú¸„,›++^…}.ßDdЭ­3T;0hDMV_è"ì²¹²lMWvŸ¢Ý§‘Š•ª8õoæ“WÝÊʶ^´dˆGQB �¡é ÅfÆ*bö™¹Ž5hI�@MQq7“ÔQH[‰�à‡˜3Ë& Ðî ¬÷ëm%p#/“-+ݸœ•:`P¨Ù ;½2Š- °7t³ªšO•ú¨Ôö$‚šæ”1$""À@ch�0 ‰ære™½ €G0,lFL2*ˆCq0( +‡„!Š¢0 +‚(–ä(ɨƒÄÄÌC¤m!ì‡V¹½ eûªcÍÌÜžJ‰X‹¨Êæë�šÙ Sã”6VÌÍU +[žH ¢l„(Þ#í0®,Nnö9i"©�-ωQVÖ³Jý@s F:ôÊ¡;Þ¾,±îcç&�ÞŠÐÏ<€òäP¶¸›ìsG} +K¬Å�•ͱ8½ÙÓÄKû9c®ŠÊš<?Á2·0ô:“ǘnlwW ‹â‰aàÅ e—H©7žÔh¿ õÎ<¤zKEIó€ÈCÙrëXM@�õS):pàÅV6Ùâg—S *Ý­ç„»j*kxxâ~!Ð Ìg:Ôm€gVœÇ\X€£ì&J}ØÿðÆê­�ïÌCJ[Q20<ÊWÇf‚ý|‰ãSªÔÀ@ZĬlÊŠ›çRsd)‚ü¦óÀß»€‡ÎO³LKª¤Ž}b:ÐÐÅb¹8"Z]¥ì®”úàóº€AŒïšpïÌCª³(·ÃEk2ÍÀxÕ!”-÷Ž• ’ù>Õ¥àû*›ìC +f—SF/½íÏ'ܫ޶¬�» RÙ(Þ/­1®Xœ|öyÒDZ;[š³0¬¬g”ú�æ@ŽtÔ•Ck¼>Ábn0èu“Æ0Ýlí®‹ÅãÀ‹Ê.±Rn<7(èh« é�yHu–‚2ó€Ì†²åîX�€šêSQ4pÀ-Š­l²Å Î.§Tº[ÏwÕTÖððÄ üF Ì Ït¤[ g¦8ÇX¨§ì&”ú°¿AâŒU[aïÌCJ·"XÚÐ*;óàŠ¡ìÞ:¤¦¡N}"“Æ~»E‘•M¶8ÁÙåT‚Jwë9ã®Ê‚0�ŸÃô³AÄ™Žuà™g±à(»‰RöÄ?P<€±R+È;ó�Ò–èv˜%hí§½BYvwÈ57tË|JdfO Ê:sÑk&Ê _5J™ëJYÉà¡PçPF6EO¥|^9|÷@ç@¡xï¤@§¬e•ú–fˆÀbךKö¼îc�&@á{‹ip†ÓPvéù§I…=Q“Ç»×âÙÊfZœæÀÄì°ôÙg,ò1�?ÁôDÚq왕å`X´5�rŽ@Xö9¸5²²vUêÛ�ý�ÃU˜W�B¿3Ý•Ñ<ð è¡ìº2¦Ù'}SŽ}¯Å½•ͱ8ýÙÓÄKSû91¯ +eÍ"<Ÿ`97XôºIc˜n¶tÇ£¬+¾8ƒ”€•]—Rp¢{f`cÚ¶à;ó�ê,1eæá+ eËݱ:5?Ô§¢hà�[YÙd‹C+çªs¨”>y“æ +"Û‹ƒ‡NM£L$Œž”nÌ…éÀ…î?‹âq¨b@eWTêC�PFˆ 8vèõ{gRÝ“Ø@«r̓{„²»vH; 8�<§Ã}-2«lj‡”�œ¡t¶5Q¯²Ú’Œ™UëÅ$†ÉËøk`Ñ—™Ô€ÁkØÒA� +|•5I©oÉ 5­8w‹&ì”M›º•£'óÚ“CÙâvlN°Ï õ),90°÷V6Çâo{s}Ž.%*÷TE™2�‡Eÿ3- C¯s9™�鬲·…ųfú 5 2W#WÖ.¥¾Ý³?Ùjç›uʦ%dûig˜~e([âŽå¸ybyjʸE†•Í®8åìûdÃJ¿Í¹ã®:eMíNðÏzÉì`8LÇʾ4,zŸiN�00h�YYÛ(õmÍÔȱ +æeáÂNÙ´Ä€í#Uot Z��1”µ«Î±™À�À~’¶ +k�˜•MYq²Ùàòn -ø&AÁWD¶‹dM£˜�žšüøŠ¬–iž¢‰…Åigÿ“†­ÍÖsA,ì+ë¨R?¬ùG]ÃöÄ>„Ø)kw�í#l€V±KYýSŽP¶Ü:VPæžR¥äÝ*›ÝC*³ï§…/MmÌýªõ–dÀ˜Y¥l27 •�ñÛ€ÅS3)‚«a¥)ð)k¥¾¥ÚdTÑÜ)šØ)›6bèV•Ñ´ªí|ªJCÙw,ŸÀÍËS+3à-2V6;ÅÓâseNQÊÛRž0v‡J‡aÑÓLÈ`bÐk]O4ÀtRö®ÃâùLËÁƪô@Bª‘3¶J¥~®¹;vMÒ +Û:e­"´©8Œ gh%*«Hõ§^`Å+ŸN 9(ã÷ùÙ«˜‘©–¬‹uìÃ3Ƀ]G-}NÜ«¦Xãù—„ùÃbðs,£w­‰”g>ÅkÐ;bË?7]²S r!.Š�þ^G�xE+¤ ÀUê VLÖ9oÒ-‡¼%Ÿ»Œz7rÚ²;ð§„QWD�·à¢³4…‹6ì¢&÷'É(p�AØô¬Õ‡QçIçób]ŠÅVµøtm0K�æ¸ÿtTÍN�ú‰$|õÕ:D˜Š¼¦Q–éJ9>ƒH‰¯þ˜ñ�ʇåa³^…ȲÍÌ$ጂqR<9!™:ÛýNZGmÚN»Ç=ÏÏäάH¡_1×ú‹“.óc•†(ÔɃèî8–å¹xæ �»ÿp`uñ¡¿º‚mj߯XTĸy•zƒ”}jiaÕéÿb}Ó ç "Ú‚ËäxX‰풰a¾‚‘O¤Ü0ïrÝO>xŠ ƒg(³ÈO¿]mìéߘ6ÇSÍvD3µ¿°=­Ñ H*“Ý%9í¦•¶Lµ-¬a”49 MrCX¸èSŽet:¶¢�ôA©/ÉÀùèØ¿3°4\ÔU°Ák�BàWàb´@$ä(ÙŒ¼³ø–b¸l©?¹ÿU±€œ»6f²­Û4‡.péžvå§å.µ*@†dÖ®3�ߺ‚Õå7¯© ÷à +]æM_¸ˆ÷X]™yìmäL9;"tr²}[f·ˆ¸œ +=]º´rÐÅêïîu7©º\‚"u¹€öC.1K|%–Sf,½…«Mÿ:;Áá÷Òãð®òµ2–ÙAÇtžlq ¾³1eK<[õ#ôɺÓÔõJ-©¥É»z%B�d:wô3ÈXi5ü¤¾†ß­áAŽ0”Éš¢Å”g3„`ÞE«ˆ¯L(ùTgQjoÚ'›I†ÆòŠÉe í@8µRÀ¸€n`&À�ƒ*áB[eA™ÊÝrZf‘kþW#/+錚wз­�SÚQFö£¢ëÇ9�ô +j�g-‹*ÂI`Sf¸z €Ë—=ì1ägÎI‹h€$8é™�‘ÀÍHÂókr*ZÛN Þq‰±{j�‰‹„âž2i oO7EZŽÜW³¥"…‹k‚@KÅ�’„"½(�ïì¡ï9µ>l°¥Ú•~ÎæšfÅ÷H +f + +À–Qö¶0/]‘áFD¥Œw›dU#m°-£ˆéøàY�‹L>22ŒhožŒ>`Ú¸€%I`ÒËÒÁ¥Ó�Ï/Mn=¢x*¸“¨àφMsþ*sgnþˆr.÷•„Pë•&¨³Hƒƒï lpv}?Bú⿨À‘Ñ 0ƒYƒ”*“Ò ýÁ®÷¾�«¡ÿ¯€mb€ð=“ƒ¤¾pÖ¸oúš>±u7 +�›ø|t3!¨[ZM Ær‡S»‡ZôÄ}‘л¿V­å9Ôç¨) +# :Ñɱ� lÿÀ.«aº.‹»Ü;…O4†#.smÚß.'gnYf §jŸï“‡”™L™º]ÎHС-µ÷Ùy=á.ê/Ä•ˆºîø×‘YXocf© 4Îïr 0¨ñêe7+@[k1´�®ˆÇ»Ìê‰gÚøŒIt¹[ê,RÑ¡WǬ9ÊÖý-;bôùÒJóÏôïºAOp’Bt]ç ï}¤EÈèE¿{4”‰Ó”ØÆ8Ôæg^¢×‡Œob:Æ/¸CÞÆ‡¼/žKF6"¶ˆ©–º4ÞŒØKS&!ÚÔÁòâÃ=§âäDï½fY”(· ,�Vp­� Ã�Œ’ù¨�ˆ¨½ÅÖßèhñµ*‘ç$%‹œÁl£‰î£—-®.úBN )ä]ÖSõ£pSMlëÂ7aŒ@\!ƒ ܵùû$<.Ä-�É*`Ý|߇œbâ®ì5Ì蟚ÞוÜ8æ[²•¼A÷+mï�­_²Å‘Y(pÆf^JÓ4]¿GÕŒÉF2P<˨,Ò8̻ڥ˾àþöíàR vÁ8ˆ‡=]üb±9`÷ûÙSQáÊ{à;©+B¼»¨3]!☞=Þª3'€¶Ä»Oò5øÙCAw öêk@ÔF¿ëÉ»K&�H)­À”»Ö >a]v|½Çå”f±!LÕÝÓy¢âÒ“‹ÚÝæe{'Ó¹î¢Çr"|f§Ø8qü:Ÿ]ð2ÝEÖ-ͱ¬Üý®³Ö‘{Í¢cS2Ÿ0…DÆ8.Fs +²ƒÈ+ÛÝ“æ�&ÔO{c¸„÷'Æk¥|M—Ë9[¸‰Ÿ¢¬×Mð3<0'ªÞ‹ûPúóo¢ÀÜjÞá÷$“Y MúêÅ·Ôhæ@l%€r¯cÀ«K³èÎ}F�ÓçŠéf W™¸‰Ö€­›èF11ƒ–Ôì )Å(õ­iJñÖwöA‰Èâ½ÍN¥öƒeTÈ´Wê“:˜f_ÓÆîf2ý€/¢Çl@³É¡3‰Î+z)ùü+¯˜xy“Ô +â!Ò®ýGôr4dq~SÜÔ"°%4æ_XHò=#Ýðî8©%Ñõ„´¯Èž’ž ''fK à×x¸í]bÉù%Ñ]‹=¸œ‰žA{5�rÔÍ‘ºë¶NDÿløD/‹S·Í !b#úG4Ièó‚é¨2DwýΜÆ�w“Sôâ7änŸÿÐWÈúauÑÝÁs ¿¡Þý¬ÿ¿§åy¬î36Öþ†ÞÝÝÔv™<É æ`…wŸãã0âKâwûˆip€§§¹Û’kw³n Lšîv +Þòg)9Lr\w÷îÁ»}$¼àîâ{�¢‹d 2"4˹ûôíu•'‘Á¤ ÞVÛn㉌ûÔ,×6°Åÿh–%µ N?¸4«á•B¬µÇmR¥¢š§(xE7ֽ㪵ÝC¯¨ÅWØK˯Zgý¿k¢Mjm{ ”g kÒùšá-vUÿeM:ÒÕ“ˆ-¸¡ ënnŽww·ºë•†WªÉš°o�umO=”Ÿ#A, †^�UKa­ \Ìæc$¾PÛ?á6eä€Óö‘!­„{+ÝÞìã;;|?ØÙÐ?€êÑvu¦˜&%þȬÙì‹ôîØBjÒ¾î5=˜‹¸Ô�ŸÖ죒�†ÁÈ© f_¶(ôY›áìÿ!ñ� ßoAËìûŒÛ™n�,Ú:69r0¥«Ó�:Ýt�}ÈÀ| ãSLLtX’N’•·l‚öúØn’sϘPÇ1+ƒüJ¾öëù¶Û5Œfæ©R5¶Ñ=¯xÎìa² ëR€.Ž –0;D8wšôïÉ­^D¸-jñä”=Ö¶vËfþC&µÿ˜ABÎÒ|³Í?‡I‡vãæD¯Uv“d…; ¢Xw¬Q"Ê›¸g™1�OÏ‚†šì¯†;ô WÞŽ��ìŽ\û9By%w¤Åù%޳ë@­d?SfPÖ‰4xt«nÉøüÕ&7Ë"ZF.„×arm©Ž‚ngBi‡nþ[€ub›ÂˉìÔ’ÀsG®Fnf}·N©Œ‘Zó߃|KñÃÀå I`–Ã6’º´B0qÛ›¥Ÿ~3¨ÆŽ;S¬b’$s‘_¯‰7Z#Þà^îvV#ÁzK´�ß�à1I¦”B¢Æ“8Jeê~Ùþ¬/̵üø�Ám·ŒÔê:5Ê&°ÿ2šÊÇþVSÞ[�(ãP-�6õü?•”5¦W¹¶r³X§…û¸ÄÀ�:S8ubÑìßƴƬUÓ@,).ö—<ÍM…Þh¨ç†5Ç‘áAS®cN" áÎVÄÎÈþY("7d!±lÞ,횈5èÐ^¨bUÀ­hM ¦Q™CqªÍ™b9„I#,3¶ÆQ¸¼‡Làgà–û£&Âû‘º(çË'nÞ˜ÄÔ¡ÂË5j‡!Á#C"5&AÖäÎE÷»g¤52“k_÷ÅY:}ã—ŒP¬M’Zú ,m …‘ú¼V¤�ÎFÒâ%ð»0£«ªä`*ç¯8Ì}ó‡ n¾:¡B*¡ßª[l^kE¦-!"’±¶ØøÔQFÅÑݶ•^‰˜Úš¼’–D»ò¿Ì‹— e'mÙÚ¤´7T[a\ÎÓf}�z�Pýw¬eµn[ò_â€>TO+¢^�¢=Ø›ý«õ´&§ßky�¶�Ö…ë!{¸½z$ +Û qÆîøH±P17Võì'/ŸÀû¹sžÕ@)Ôôj’`°;8ÓeÏÅq· �ÂPß2ˆ–nÏÌ W@\ü,¬ì?„™,¶�jÙAŒnϼJHÜdèÉ’“|T¬¦>ÿ» …,nÚ¯¨–ßwÁÀý`wjÝ,“‘Žç{ñ:„2TÔÙÿ;±�4a�ÂY¹^ì™·…¹w šG¹´YÉÇr`|V—ì?TZ#–D¸1«š«+aŸÃ‘j'�_È€Ù«Ãøê1$«Í5¤Çg¢–’|ΛÉv5Ù“î2˜;Óå5ع«�f¤jˆ>Þñ` á!»è…®]‚Ä�Ãmb�¤Š‘˜ho÷»el…@$õFlÚeÏâøB{yç—šú„w4îŠTŸû8W�!-z<­u�Q¼½`%q°ª!§æxÊÕzô! ¿©„uº�W@wEŠ)9…MâúgÞ�B¸púRºî[¶ XYƒ(vÉÏ~öÌ¿ñÿi¿¥òNÏtA”œ4” á…~´³°×lOt6ŒO z'ë¡<Îx ‹–*]ešwd.®§ ù”bX*ñQ,B�ݰ,± ¶&ÄNoÊ�å�®«ëinÕé¢e¢»ÕÅ +¥ìj¥é?w ìj[ãZ{‚It�$�ýdsûjç„ kõ)ÛÜʱE NôìPØáer@ÿHœVz0º�Ar]‰-I�¿–¤ÊÐ{_IÒf B¸ö¹TC£Õ] Ã¯RçÛï.ᔣûüŒ2Êg ¢ì�⼪•Ääxš¹§/w Ê;"âqÄ´ŠNÌŵdr£AðÂ�G#8çÓ}USK~Û[¶§@ùijÜ×+gÀê§jbË\�¼†Ã9ÌÅ>=Ùlèä�Ç÷0{òO*ÊèØ�—Cå¦ H?ž­ Ñè|L0 ´ÈÈ_N ¼>Ÿ,ÉÜ#ªQ&îšiW&ÝN%¸©8Á„Ùj‰TÔñ\F†'ï™/¼â8òνaê‘0 &CŸbžD4’U'Ì›™„ ƒ^IçFH"~…¥Ø"•§Â¾l èH‚(­žVÓqPnWóZô×0Ð5ˆGÎCEØòŠQ�šjŒ?+uC¡¨©QšjÔÛ!�V\ð[(Çý[ë×´š%È)r[Íg +ÇïKSLË—lŸ¾XmxÂëèÞìiFŽˆ§l–æ“r|KÆVG¿Ò{åym¸Ï©Ï��; +7çn�ƒÄ«f yãU΂\"øž=€Š&›x"ás†ÏK±ÍìxŽÏÓÍúæ$ŸâªÓóäv=u\4(Ñ�{y72A©©›(}üJÀ¿´´ÈÏ(ÖP£ØÌD|f¡S´±Š1PUè!Ð7Î$ÐÄY%jº<¨`²Å°ÿ‘•ÔðÚÏQ"íZŒéáëìƒ*k`wè®øè"¸ì_~»˜š»%íàR’¯.qÝ€†üÏËé…j7ÆßÈ�”:€¤Ì…-?u¬§Ž üÎÆWxp _z½«þRQÁW¯–³ò&û!€’ê@¤¢y×$/ؾØ]ÊNjþ´¡±ïœôÄ®°òa2ôˆËþi ªòÇ6cI¹Zfk8)=Ÿѵ›yD«�ØðÉb +Ù�eÆ·¦ŠúÕÆì¸…ot :J…bW¬®%sTŸ +ü,׳ÓQ;ÉÓ'1¨3ÿ³åbö«èƒ�³AâËVVùÖ­ÙM"8 7Þ8C•{å¡´qåÛÌ=½Åë=¾Emªp÷¨çR€ØŒU™mÕÝ÷E�ŸÄî�5,22FÃæÉê?Ô¢x;´!­¨ë{ ÙFXHcBý†W˜ohÉ­ü%t/íºýVé[Òñ©·[ý1˜þÏXŠ'åæÀ&+ ŒAöwõOv`ŠÀø?ÙáyJĆ5ÄÝ߉ýg­½©@]”Ò�­m¦lêc5ÞW·µ©ô e» <ÛgÛúz``9¦pmÛïœ0ó¥ÿöE2›gœé•¶ùçÚk¸Zú¤kþR½Ì—·þµøíiÕÑ8JK&„Cö „È—q¾öÖ¶gHé) `,ˆÑ÷›¾2œ°›ùèf%Â`‘ qBHd?•B…÷nËo• Àn "%)3g}aÞ[¿r^¹b•õüL1ÍØÉxÙ[›}æ¸àÕ~ø‚�Ü ÝîMö·…xÔîrNhrá¹5¤‘öò{Òsß5~ã=bxÙdNÙ\szÍr$*TÙ!jz™9 ÕC'_ŸEOñ3wkpA@½K5ÜÌÞñQ^j\LŠP&¼^Úf(ÂfÄpš„ÉY}¶i 7Ãß5yJõµ‡ÔZkHÄZša]Ù@ìú°zô¿qüO3ÔMm +ntûghšTZHm*xÖ¥¹öÃ2b>L“DU^/‚m?–‚it'uQuc ‡1¥ïCr¹3ðJ8ôŽþ�²”P?4*÷13ðNÔ69HrLý¬ËŒåqdLí8†�Š ’ IüÐVêR¨ëg1ü׬îTÓC¼&å Yûò€ÀahåÂV¯ ‰Š ªR4AmÓ3ÉìMŒëpBvÚýš\²®.>Ýï 9©ònÀb�ÁÇë³\€+·ŽR+5טŸÇÀZAžç §�Â\øFyz?R˜™õÑ †(cרñ¾¿g“"c³C'bÅG§­úåK‚ù6z›�£ß~ ÔnŒ4qN 0 ß +²KÏ¿QŒ“`M꺃¶5,[Í.W/ˆ]€«€O‹-ÌÆàòúéZBU˶ø ‹Þò+ù£8Ö•w(4ÿØÞüÒÑÂ].\"Ó ÔÒšH¾üŠí³â«©†¨ºÙÄj©vWü*O¨˜õJ*ú“KCËÉœuë£ÿ¦øÞ0�ðÐÉ�ð† ÝlG|0H&§çfËðW;^/"‡•” 2&Æ4ùƒ8ð«8øÓÈs)ߥ­ÑçÙÏ¥$6¿lž«x²DEÓxG¸'¬{(n%QÆ ÞD•»!Ñ`±ö1‡F «(é†V§Çã�kÑ i%ÈQq! •9� rÄA$K9£Lv @å@æ7çRÚUøw¥{=K�õXKnMÓKä=û¨¼@<ý&;çÆ$%Œ–�&;òü~ö¢Ç�3Ôìöµð_�® g†1ºQ‰î¾f³â0P‡€Nký–==P77 cÂ’½hÄÉèÄre”ù®_ãÒoÖ…tN+Oç7I¾ô´ˆ÷Ò�peˆñ$¸|:JÇD¡Î�qœÑ“X©¯˜ÙÝ¥X±©èƒ²c?aÔ„ÎTA¯ BÚ¨„qÉ€7íˆú{©e|Û `“¸?àÆÅþ2y¼ý~ó@±ˆ¥EV¡Oý™¼¢ù,ô“øqT[±½ ¨|Ää°ìyÂsCFI¬Œ KRgšÎ§ªmã ÿ÷6i +­ò³AY~+<« oc ›ŒK^�+IVýr-é'iþŠÍgÌRÃðxGb<Õî±ÉœÆ£�^M[¨u܈C{µÿ:4šï¼|³è“À]rà[Ñã+J‰% ‘ôG·rªO›Ý0СÀ5‡•?3]^×ü…i¥Œ|Ù†?hËù N€Y¼ɯBbÐDjЋÿ‡U_«µ‹V_^)ï_üà†`1v]¶@½•É�[„!Mñ–CÄæ,K9ÁöµÚÛ7Ï7åFd§ãF ›�î´¡ÈŠyo7 •hæ ÷*rÃÓ†Ééü(?‚tÊørÃg™—Hp'GîA”ñ «:Ib¸¸P•àþË)…‘̓X'íF¼‹ŸIk)nµ'§(»7>´ÂxöO \Vⸯ¢“§»øÄÿz¡à-KjýÚòÄK©=ãÖX~šT–Æ-lè*YÏ,KE°¤_÷nñ¹ �Â2W#ÆÖ äã†,¨ÖóÛœ'‡&ý~0åUá †¨Õ?>ùûê.‰nÿXÿhɸ8�„5ÚíÉGe¼ª6p�–»B¹?¬„ +™,“ƒíƒ/UåGÌ"ï�©‰�gÕ˜ãè­Õ˜êç>¤„<Ë ”H8ÅÆMjSU’„ÿŸNt.�ñ�o:Ù–Õg>Ãã5üâ$�Ɔä˜ÍæñàçÈqpÙ4^›}ÿWXå@óUcM„hݤ=ÊâÓ�� (¥TÐô±?p²ö±=æ—,A†»‹­6#„·©¦†¯»Õú‘G³©2Ò7¼ÁØ(™ISr H?dî'ÉÝŒº•ghö¹ÛXÑrW£ãËBè;¼‹Lk7¦1€ÉìG‰ÚÝÙ8’Ú—„x V1‚÷Í:™Ä17wKqõ4[–Úz‘�±{vî.sÉÿÝ]˜TxŸWáÌ‹Øõàæ˜ºB´Rt÷�Á›Ža–±&´GQ„1i›�ö!µŽ(T�JÑÏ¥Ùi×vsLÞ4½Å¢¶iš�V¯ôµÝ#·¥g.RÛ«y‘ÜH6–k(¾¶·Î¥�û �ž„",oÎZ¿¶+(€¹]Åth»¥·¯×/ Á“Z€�.$"j;‰ Š(/…Ð nÓö‡c�Ûæ~´+ж÷¹]†l²ï‘x XÛYëL¬wìÉtàÙ\ŸóÀ±ó¾"Ò,ñ'²�=ýQ IÄ'%‘ìaŒÜ ‡c#K:6_ j×Lkd�»ò“ûkùG„H×ÿåc×O,Ô‘íL dŠO訑œ8‹T‹»(ìJ€ÐñxIˆNb\Æ1Ž=,ÿàyæ§Ò¶f ¶{Ð" sò +¶uk;i ¶Ò°*BcûR�Ä×Â4Øöž›¬‚ÁÉ,öJT4ë1 Γ+þ¸s¿7KÆÅàü¢fÊ¡µzŒñbð¥ƒ[V²¹LÈöëJnË¡N‹c°‚íÂ:‰š ¹Ë~YM%ûÌ òm'iÎׯ?ÀQx: o{±<.|a²èO ‚d�雞öÏLM–ÄÅZ{W{sQz‘!£¦ôÕ à ãµJ¡;w?'K€§¥'¸üi†š0Ðcò,ÍHl(m.7×Ü�¾òbô'¹Ã²u­Â pméJq¾µì·=Mæöw�ôßI/KˆºÏpù ˆd«âx6Äeü7¶Ê¾¶ÿC5∊s.Š ›Eoà �@ãF¦)ìþ*’ЬÿòÚ ÅÆi{.ºeÑ(–Ñì9l% �¥¡Šº¢9äŽ}kÅÄ�$£w…uÎÇ©Ë<¹Á¾êóÛ8¸oGA) Cq‚cªs’ +¿KlÙUø6ü^mÈjÈ.¾yK,ËU§N6ßö#q¿Š:EÖÍ»oÇ�æëÚ9׊ªD�‘->æ);¨&L’çl §¨X;žÃMyÿDCB®©þèJLDµúŒóã¹/ýaÍVÜw¿zÂ[FB»ëÜ•Ufµ¿qtéHGtZµ·žÒF¸•ŸÓ]¥øãÌQ ˜&¡¤ÁÛ‚ûhùvÏ�z@‹M¡Ž€ÊªÜO ‡Q4çJ9Ý�DÁ›eT·Þï~`–Lè-ãœI£|Ò"œÌ&¡kMDf©myÁ¢WGùj:H5�K�6,¯ÅN:JHóKÈÝUKÙ¤ógC,ôŠ�€:‘Æ&#HÒ>ßýNXV24pƒò¦Sµ]©µç¼§ø%ñJÔ6ª][Y¯´"g&[Œ£\ ‚ØÕ¤Á6K+mÿ뫇¾`3 $Üm±.ýŸ·©Ò.B$=wY_ Ò\Ú"ÿÃâG7†\¢�Õ`÷Û«mÕ{Ö´ªE>´9r †ˆ1¼.×m Þþ¯`oÏžþi–Èh“|v\`iÌzzhÏžd)@¯¿·ù;ýY¢=¤Rñ²¦RýQá +W 6Á ð§42f¸(þ‘ªÏÒC½õÞÊa”º‘íþ›"jðÝ– +p<2 ûÚ`!=ä°WÝ[Ø Žýá-ž"[GpÌÓ‚9>¡ù³B`«|žOƘ‡Ädu +ùVä�¯ê f¥€zq¿`‚Qõ ÉÅ5=¯gÌnÚ�Û! ¬6^Ã{�y/rMŠ–‡Ì J?�¯VþŸ± {W6í‡'ÐÌX`œà ç� X \ÍÚÞÅmžäK?2'*ü;OSâ_¯v²ò©�û¤uÔ -O’ÝG†phn¼½ýc¿0Ryç¢Ã�”ëʘÖDï�0#]1A´©­á¾SäÊ„ ΂ڛո(ZµÃå°¿ Ãv +&ÖÀì8#ó#4+•‚**3ÐM!IÂuL _úâ„FHC|­w‰ïÈ?vÞ «¾ô]Ý;i»¯ÔÐŽ‘‹!�R߆±.uÃãtÅCƒ¼Ptä †IÀ�ð´ö°¾Ê炵žù¾7ø¤Õ‹Ø�d|‡ûJÆELctôãBìÉP]0ÖGr*KOGdz�Eµp¶¯T‘âI±UŒú‰wÚÎÊÃna¡Ët%!áZÄ—%á[&²8ÑŠMøŸûÝy)ug–p¯­h4¶[IFlõS±½¼ë2šÇ=)P¡/ø²¿�p'óå>‹3�!K½IËà˜ÓFÔ­l!©6ñ¡N·#žJ³Î¹Ã.+ž’ä ’«<ÅS�ž«Ì‡µ}OR…$vØqù*í,}ÙˆüÂ5,r蚘 âÂ+8w\`…q Bµ5­T#8Ó{òÆ·àhñO¼å1„½bò ç5ˆß%pêÉ{z™Õû€óÔ9äîë‡Áæné>E{U$mþŸ,£¿•á3ÑÒ�ÝqÈ�×+ƒ*âylò¨8ËÜ c‡¤üêwv Töž—²‰ŽÛ©†dž}òˆ‡Oõ™@`/LØÿÐcK´nù²-_MÓÊB[JA´#ChiæKB7h JÁ‡ÚÀ‰ãÎŽfAô§:Ú«ÅÒã"1)4ŽkR´F›îW/iÓW£ùýÁÞîÇ"ÃRáãʤH–U¯ZƒÒÞK‹š¦xZ¾…4¼ ‰Ì–¬BÄRSœŸäf0I$ÌÿÌÖÖ”­•Å“ØÏŒ)L"~è²WÛeVÄÃÐöøQü\·m]Xj Ö*¢À-Ÿþï‡�§vŠe$¶Œeعñt +œfu¾n—ÒÆL ñ bcÝx7žøÓÙYØÛx:u)Ì™ÕïiÍ�+=GœùiðþïRžÄÝØ¶»&}yu—¾,GOsX™5nã©Ö.{úÆifÿã®zéùsÈ ´V0lÓN–¤Ði¯ŒzãYVµëÃr¨wëFᩤ!uC"ÌŠHO7ÅÄ”0¨)!l/eûš��ÖêÚDg�ëÞÀY…�öbŽ…÷�µ­èKdšSF@l�SäöÛ€?«O{=séÆërREÉú ÈÝ=x¨œxÔuotrXH©Îœ£ž–p^0uqÄcÉòÃ3iF6Êó +Îâfå“#Ì|àº&¾ Ê—ND¡Œ¯Û!¹Ñ ™*çÊîžN£ß+É$³� õ¡p©ÄØñB65¹Üë#¼it�C´3Æþ¦Šʸ¸ù“+¹NwðGnUö6òIšú‘›)>ZU„0�*¹ýyyiÙ�7@WŽf²–”û]°Gþš¶íˆˆåïÃyS9:ªTsÊÌÏð­›öËB~lÞÁÜ<Šæ|]JäLf˜gòH­ôèö‡‚HJ°\‰Ÿ <]¦êTrgàñépáeâÆõ¯{µÐ‘�Â’þåÝ)ú—?J;ñâ_ú«pŸ¡¨S䆸wG®¼cH)ô/0e ü«.ì¼…j¢øÐ#ü«:M¤þ ®oì:ðˆnìË¢?¨i_¤á¯q˜ì»éF‘`˜UQ4f¦»-„Îr‚!ú¶£ƒÿ@/xW Å_‡qs1¡GÇËqðy[˜…ÚVÿ°¢`›NOsèákàÊÌ�Íì­7bZMRN?ö|UX+àKЮ@ÞHSô, ��¦…£E@õm//ö¨%ÑJÆHmzæ phú K¸¦x.-°yE,Ö³f-@'ÿIšža™f¯S3&Ìÿ6üv£Þ €}Ö#(aßrSš¡ÝªY'Ú>wˆ½èvý|ÿÞ.xtq"©é9šXˆà�~"4í=Á�ùáñ?î…Ãt :¸!oÒ*… òÁ^Gb +” …’U~IÓËÜÍ2¬¢Tþ±7q CYŒ„— âË—ô™qÅ<ÄõõÒ`Á® +÷W’?hÓ$*õ¹(ÿ©ØúFÞýò�4«£¦Þ³Ê�cp¨T‰FwŸåvT¶¤ËЧ32`#ÁÏ¢g‡B^Jáñ𞦈Q¤å¼²mŸÓA`ÁcDQGwæÝÝ0VÞ\*‡hÆB£‹kF@«š—]/ù± +ÂÑZqKBkPPqk ÕT¥2ü®ÀN?.�wwÄ|ÞWKxïn +;ҳȊRØKŒIÒ´À½¾w72ÚNóÕþ®’=Þ]a_TÛ|�nw‰Æ»¯ýÒRîÝ•»ç�ã]!þ]XM~êb8ýî¦I +-Þ}~y¸Iò¯à¼ûñc¥7¾Å(õµ±|ÄÔ�‰Õ¤è[�5¨È)áb´ãæÍÅ #ãCBY¿šz3nsøÓmg<÷¯Î;7 ËdÃT�¯rbõtŒ.8Šûy3bFÖÝT¬™îx1±³)vóso[3«¾Ë/+_ß2õ7scâ ¹ ±è\-Ô2xðΰng Ü3´&Ž+y1krxÈ—ÒYI €�+[õ5ú) ÑäN÷aó¤pœY!f”Y(¸�ëåÂ+dÖ^Wlõ)°›O(Öì}Ÿ�D›�<Ìq;Ð�"-V–ƒbÚÒL€x"Ó<èë �÷=™jSUÒßr3…·îY2¾ŒâjsLËŽ[F>Ì"ÝWøSxÊÉY€µŽc°Éºv Ä‘mõ77š¹Èøpß®%Ëb�^GáÃæb—aÔŠÙHcàw1ófÞ{Ï]Ý4‡NØÔâ‘zG}Xâckvvò·íò6‚j"ô!ÙÕ…áÞ{c3WWFÿ[¦íÓò«F`÷på“ÜOR·FÝÑ×¹9vÍDaÉ­àu»à@4Gs0Ãò}R3Έ“K6Î}€\nÐv²{Ò “7`‰„z¨7nƒÀÇáèÈ¢·A4ÙÛÚ,ÿ7ji�à¡‹.Ešøt²mÊÎWâ¶á�IºÒ‘Ë4L=õR!GE°–zÊ<£áé�L¢´Yõhè1±âLn ÍqÜúMRsÅãݳUù-íUŒFV¡9"{tYQ—óWiÊ �û!}-g‡! K&eÿŸ ‰ vt«<$RƒÉH›¼3›.º|�1G×ã2|ˆ^Ú9ºhY=tj’l¢à‰è¬é°Âšn°¹2 G ëpÌñ´%ú †>ÅÏ5—úz(¶z$ó&V �UÑ$ +esEqí#WO–’”âÈ�ùgnGÓ)^¿L˜X„ÙVÑ uSãÕÞ)ï¡i™¦¨1îOÝa±òŸ�`ͤiŒÎËžb}–IEÞ}©)žËÄÒyV1‘0,"ðqõeeYó3�aÉ “—bçÅ|@^æ6û²JÁoPyø2sÓæ²ëaCÎÌßµPµ 2øíŸÅˆì'–ªÏZ@jðèp|¶˜Ë±–:g§‹ðD/oÆpÊQ«pÙkÙ÷�òK-šñ8¹`·{¾7Þµg+¢/#³Á"êh{|Æ_ ÎÛõøð퟉ˆì'•JÏZ lxô8¾VÌåò–:gG†ðDoŒaÊQW¸ì”µÜ÷GùV-šÑ8YÁn{¾7Þ²ç6R /ž—ñ{-§ŽÉæbE�;¢òMø+n¸«H-|xºŒ·ØM´œZ&›«=líHÜ)€~n§óeƒ?­:ë4ˆs +µrÏÎ+RË]vhÌЛßW�>FÆœ,ão-ªMˆÊ½Ô=fh¥bGt}þ…Ö*R ž—ék‹–SÏdó²B;¢õMønp«H-zx^†[ì-ZN='›—}líHØ)€¾l§ëeÁ7V�õ4Äy +µƒdÏÎ/R“]vh˜Ð›¿¯†#c�-ço]¨M”ʽÔ:fȤbG´¾þÂMnQž/ãw‹–“ÎÄæ²b��¡úfø+nr«H]xx¾Œ[Ô-ZŽ:“›Ë +=¶vTØ) ýlOçeÁ?Vë4Äq…Ú ²Çι–]vè˜Ð7¿¯Ž#Ü,ów-ÔFHå|©;fÔ¤bǨoG…Ρ,ÚÔábB´¹G‰ž‰Áîýù¬¬ËéaAÚLøÛ²$wŽð +¯ +H�®V øòŠ\Lh:÷h­7È^]Y—TêûžpðÔ: dgF«Qî_›Å“nª(ïö,KŽkd.-QéJ¥³;*]†ÕzëmåЩ;œOH7õO!Ñ_zÄaåèN‹¹tYX¥t]ÊÍžd-Ý¿b.¦%Ÿ=i“ oÈOÜnGÇxè©p怣À´hbÑÂ9Õ iC7¾›H>^2î­úËnA‹…_0ì|g úÓj‹ˆ¨çðÖîä +×CèiÙ†ì\Ðü·µ*MÕgm®\§Á;<¬~}cÜn]™Î!€¬ËI2–ï5&kíEWˆS�9/§©n'*}`Wð‰E~Ù¢Ç&*U—µ�í|Ç‹í‘ýé§ Ov¾³ ýÙe‹ˆHçàÖîá +-ç#ôtmCvÐ5ü·´*JÕgmœ¼Óá>V¿}cÜî^™Ì!€,ÇI2�ï5Lªöb/ĩΜ—G©nW*}`'ð C~¹¢‡M”jÏÚÈöúŽ‹ý‘ýɧ �ì¼³ ýѲň¨ópÓÞá:Ç#ôhm‡ìÈþ{²S5¹úª×³µ:’Zê=™Ûy±Ë„.ÈM³SU÷ö ²»L½“;¥:÷wEvÄöÊ÷Sq†�µYkDìø@s…Û¹ +€À±ìØþw²“4YuÕëÓš ™­ê;YÙyÏú£eQ×áÖÜá%tdœGèÓÚ Û©Õ1à�ˌөŒR÷ ÷ ²÷L½';¥z÷gEvÄ#tåû‰ƒR8à ·YwÄìøˆs…›¹ +€ÀXvŽè þ{²§4Y{Õ×Óº ‘-ê�œ�ì\Ç–ô§eQÏá­ÝÁ:$Îcèi¹ Û©ë1à+ �ËÓ©ŒU÷ ö€±{¦Þ“�Hu÷oEvÄ'tå÷‰#S8À[Y;R.ìð�s ·¹ +‚ÀXvèpwThÊ¢)Î'¤›z‚èFÛ“ÏòÖÿ×ʺœ4!Ëìa] ùPÙÅ|)ú™~Nà,rdBµùYíÍT8ˆô„ñ†ä�  *õ}™gö¤úˆÉ¨Å6ü‚fÎuTÜ+ Ç—‚R¹„™;*å�‡‹ßÅ´hóSON£‘ÛBôÛ §JN �Ýi‘‹. £”®K¹Y«³‚ g£cXÌyZÀǧ\5 ˜-|¨§Y±Û‘G!ôTq…áF£Ø´Pbu¶9‰Þ{Ewÿä*¹èo‹R²[Zã�ÊÀ#Õ9¸µ{¸B‹dziüI°[zZû¿ëY’Õ[½žTLªÕ¿²¼³¡v⩇r=îu4%÷|Óä­H5ªfÎS!èö¤ÒìB_1äWË�%««úz¶6c‡R…רæaØß`Wº†ñ‡dÀ#Êy¸5w¸…Žäziú©Ø-]¬ý»ëY’UW½>iLÚÕÂ?Y-Þ™P»Á£‡r=Îk4%÷ùÓä­I5ÿT3ç³tvR•ìB?1ä+ËŸ%«¯z}Z»±C‘ÂÓØÌa¸ß`Wr†ñ�dÂ#ê9ܺ;¬†ŽÈzéøIØ-{¬ýÿðÏ“±ÞŸ’é¥ñ§.ô´nÃvj{ ø +ä2·³ß�µø� p\¥ŸÞ8´#æv!Ÿå—IŸ5“+4V4!Ï~ œÔÚ‹ÓÌ«�èØçÏÚ(QÛ`ºƒp@KþÌjx�…Ø�¡ø#9ðˆtoíN®Ð#Y¿4~ÔƒvëÊpä2m³ß�« ýÆ(0®¢¿Þ0´#ävEŸ0ä—ÍÏšÙ:&š¡Ͼ~ ©Ú‹ÓÉSììóom”!Ûaºp@þÊjØÎBì–ÎdüQ3ðHuní®Ð#™^êA»{e6`ärn³ß« üÆ‚ 0.¥_ïÚ)òìBŸâ¬£rÁPv±ìp>!ÝÔD7Úž|–·þ¿VÖ=…qÁ´XΟÖR>Sv1\Š~¦Ÿ”ä 4 k¶9¼´ë9Ó•°[è6~~>X¼­{ì:*ºûʺ9®œ7¼™uµ{ eÝbGÓ¢Í%Ú$)»÷ç³².§‡M––—{£Îâ÷@®ŠK¿-Nª\ðŒ/ê”ù­Xq=gà­‰uš(Ó"¬jZ|¸_¿-ÊEyîc·‘ÿ$Ö@Ž«.9.¥råwT.Ê•]ð;!ÐFñ´èÉÒ§áñ÷ý¤õßà¾EYôi‘Ë(šÖ–D³ògEdRô9O8ñÐMz+ƒ< v;ÚaѰ˜æ`ÎNËšH G7iƒö{SÌ]Y—Vêû:-æìIôÙ™Qz%è¶-(tŒi�yˆvýï ê™‡Tn eÅ¢Íz²R>?šÐúyXY÷´(¢iY¦gK™)Lþð_*‹Nð°ð„€O£GÓe�3�i­{Š ù§ðð‚èʺ¤Rß÷îïñ=çBóÔO†•ß™‡èèwT=ó�Ê� ¡ì¢ØábB´¦?ðÓ‘ž# ñÖÿ×ʺ§Ej,snZ[ÊÐÍ9…ÿCxUà½áa‘8ýa úaÆ™þõ°¸4ÂäÏ_©¬K(õýœý¯=¾ç\–|Ô§ÅBÒ ÜPa3m 52Lm3221m 49Lm1048m 47Lm48998‘A¨ÔãÁ  ¤r†ÁÆÚH`€ #ü%šÂ£Z"öè�µâˆ‘X8–6WчtNá¯2IÌ©BÛ˧õëR!ÒOÜÑ6�3�›™nÖ·µL[ìæÏ„~`³ÚhÈZÔ[Ô¹ÕÎÂØ Õ¢t5³å`Ç8 %¾_NCð@™à�ùå†Ö¼³¢¤,1«h§$‚õ߇ !û€JÐÓEym�¸Í1 ªÐvfÀòiýz½'gñ†¶i|úåý9É^ztò-»ƒg¡×Ÿì¿kóv‡<ƒ<`ÒBH¯ôÝÄ+vŒZâ5ãË9D(¼˜·<`hí;+JÊÀ³ŠvV@"Xÿvºò¨=}P”×Öô�Û�TÚÎ \>­_Ïëä,nt›Æ§/Þo�Sî¥G'o±;x{ýÉþ[1owÔ3ȆÞPéK¿›ƒ¸bGq@%¾3¾œCð€2Á‹ùˆÖÞ±¢¤ .1«hg$‚õ!€Ê §‹òÚšp›# U¡íÌÀòÒúõ¼WÎâF«i|úòý9eWztò–»ƒg�ØQ¹°Ù}Z'z&ºiÒK‰®—é]´þTÙ}ý$üOtŒñ^uÁ)„jŠºÈîÇâËï½=Ð KƒOŠÇpnºmAÍ%+tü¤Ç¹°QH³E¿²m¶Yèvë”ÝhÿEЀ×�7]¿²t—©j#ž¿€h“‚ÍYÿþÁÂt÷ÿ@'ìÿ£6Ñ£“­ÕîËDz‹B4ÊÒ½RÏç‰Æïm¿3õ�FÑmº-]GåÒû—’%*—ü”.ߟ…éîݶr\Z:.š ùI/}Z%RþKïŸø¾aX9.úE—sÙo2J¹ì’ ÛÏYŸL åò_ÑusA8é¥MÂúq™ÈÖÂnëÁx\¯p\Ç›¢ÏE!Öú½aD£—´qÁþƒ~ñZ9.&–Ý¢û¿ØØµàaûÇõahd�ÂÕP&ƒ.áRˆ5š¾8»�)õ¿3®íŸÅ mÓ¤#\—tQˆ5J¿x»¥ú‡`O@;†¥›D=}L»³ËõéšÂE…Nõ”�±ÃØCãó«OÌ*$Ž¥û4›Õذ;¡Ù“» �ìQ¸ÄdÐ%] +±FÉg÷±¥þwÆš½gq£Û4)F×%. ±Féo·Tÿí hÇPt“¨§�uwv¹ž®±B¸h詞ò;{Èøüë³ +A…cihŸfSv'6{Ò`W�‡íŸÛ‡¡‘ +Wƒœ ºÄE!ÖHúÅÙ}¬¨ÿýl]tUŠÒæ!G=Ò!ìõ\Êf»8pZ€ p�Ü…ôžM}è ë þÛA3’‰²«\cÒÏH�ÍÏeÃ\IiŸ~y¿9 sÕì>¶Ôÿ~¶,:‚*–Òæ!F=Òaøõ\Š&»´è>.k1¡lçìºUŠÐÀ³JÏÃkw—Ø5fxÖv-•µqO?ôÆZ]Â¥k4}qvßthIøDû04Sy:Wi?Òöˆ·Ê`^;^i^ý‘߸Ñjš\e¢# ª n•äÌ®“�ØWŸ˜UH,Kû4šQ ­A8-Ú•Gõ¬îÃÚ®¥Ú#îéƒÞX«Kºb�’/Î. Ÿ¨†f*¯ç*íǃ´ý²¤á­2˜«@`Ç+-ùŽÊE eé”Í…ü¤—]7.é]´þT¬,�þaÿLtÓ¤—º`‘HÊÒ]NÁ¿ù9a/° ]3õªÕÝÔ8{‘BôÊÒ‘RÏ׉>ïmw¦~Å(šŠÍB·¥ë¨\zßâ’ãB² �ã’ŸÒåKV˜îÞ¹•ãÒÒqÑ\ÈO½=m¤7\¬üª‚Ç+ÇE¿èr.ûMF)—]raÃ<ë“ ´\]<Aã½Ò$Ü=¨qnEì¶~ŒÇE +‡¡õã)ú\b­ßµG4zIìô‹§•ãJ³ì])øÅÆ®Û?.ESFh€:†}Ц°³>'*Ç'¨�ßvITRJÛsí"=—¤ir-IíÌÊ–Í.�|ª'QOÓîìr}ºf…ô6šÒûÄ®²Æ,¤/sš+«á2 Âim¦wuf?�ÙÃîÇJýïËCJö(\ b2è’*µ®ïi`‡¼Gõ7yÊE‰ݦI1Bt]¢¦Öõ í¸T¯9*í`1äcO#=nêX«ê ‘Þ�27±S>+’п`´Q#�sšo!LîÍeg—¶ÜÇ {&¨¤”6/2ê‘E£ô‹³ûXQÿûó"%; +®™t‰JZ×:´ãR½fT´3½1²Z‹÷èCo¬ÕMTj]þÓ�R:Z>¡”æü\6Ì5‘”¶ñéÇÚÓmËž d‡“ÔÎoD#�jx™†p´4JQûy�b×IÈØ¯ÿd7ÚM“«$Z„}ÐͰ3íŽC�YÞÇÚ“�‚XPw}&È`® ¥4M^%‰Æ4>ýOÃH’etýO³)˜sÕVÌ« °ã•æÕ™Q�Û9ºn•Jh°OF¥l²Kû÷ážIT)¥•‡ŒúÈDÑHúâí–Õ?B{Ú1½1Rm‹÷ôAo¬Õ%Uj]ßÓÀ‰Ž. Ÿ(Is~–æš(IÛøô±îé6ŒuO d‡štG凲ô‰ŽëÌEÓ¤—]7.é]´þT¬,�þaÿLtÓ¤—º`‘HÊÒ]NÁ¿ù9a/° ]3õªÕÝÔ8{‘BôÊÒ‘RÏ׉>ïmw¦~Å(šŠÍâGgEèÚä…é\å§ti¦»wn帴t\4òSoO‹Øpa†à'õP<�X9.úE—sÙo2J¹ì’ ›õYŸL å²°èâ¹ï•&áîA�s+b·õc<.R8 ­OÑç¢kýÞ0¢ÑKÚ¸`Þ<­Wše·èJÁ/6v-XÙÿq)š2BÔ�©åМqšk•†Ø?ëÌ€•ù…z†HÁ‚ci{.IæF4BÏmf·T+H€Ë#ŸêIÔÓÇ´»…žiÖib„z¶Øø¬3ŸUÑ|¬9=‰…ci“ørŽöBkw(ô¤®û1xýë2l�= +WÓ^lòÜ”¦‘v;Ë®Kû-ó“b„pdB¨[Q91£ô‹Z¤Xï';M]Èl.�<©'QOëîzÒL§‰õÙbãY§|VEó¹æôK[Æ—s´ êX» ¤Ð“ºîcàõ¯×°Av(\M{¹iÈsIšFÚý,».í[ÌO^M’ JQZ­h™�ýË^—X3/ôg¥4çç²a®é6¶�zâ™¶ïV Ì:3pe~‰’zÙÑp5íe£!Ï¥Ó4ÒîSÙuißr~r•H‚*eiµ¢%!óó�t«*DvÆŠÆBº3½1,å¿«7 SÔ16250546m6m55L3m 42L3Lm33331m 40Lm1039m 3Lm38‘q¨´ŸãÎÀ„«b%®4@„#¼ < R½ð¡ªxF·ègQèu>ò¯±)ã(fÒþ¥vš€fÝÿ‡ç5l!ôuÝ£†zM³y]HÏú|�ììÿl=½¿e\eç:ÄõïÝÛš­ž¼8Òh²c(þ^G¥ë‡²tÌbg¢Žˆ¾8"³ð-Ú¤V–nÿ0z&:eæ[]P­¬,Ý¢þÿ~NèË+.âDkÇ}¹V›�³ð…E”¥c¥Þ&:eæ[4#Ü™ü£è›…®J×Q¹Üx…%‡® z‰Ê?¥Ë ©Âtyj[9.|™ÅÎD=ݤЅðGöÿ‹�ž…•ã²_t9—Ñ”£”K/¹€™Ï¢§�– ¢KÍ¢v¼.7 kru…Ýæƒñ¸Xá0€=e¸›E•Xóåž…¹� +&>úúÕÓÊqé°ì])ü¢b7$ïýÏ?Å’û%Tãú½É÷h¸0»–øœ#­¢Ç/šZàÒèô¹£ùÛ™}ϧkfgûù‘¹Ÿ7žžzk1øõªg«È®€µ9¿4û%ñÃišUúÞ›¢cñŽ| A`/¢�O¥r/å&�îŸÄô‡÷Õ[Í-ì¦1¦ùWÆIñ9ê ²Ú×z¾�† ·‹£+ÍöØèá�œ‰Gá|´OŠŽ´Z16ééÁ‘Ý9ÍvtýûjŽ,Æ/š–âÞvÙ†úm3~ÎŽ@½÷Oï|$þƒ&­æºñ¯—ÐØ…Ô{ÿûO±do Õ\ÿG/ù=æ¸]­ÒlO€vöÔ‚†ìGñÇFÎ�´ºˆø×ŒehØ…ìÑ|èó‘ÿÏn•n¤—|ŸíVgO-¶}¤Eö”]Hžçÿ”–ì—¨šëÿè%ßFÃÀì6ð3vÏʺÒú§˜þá½úV³¥Ý¦Ê˜õ)€êìÉ‚ ÙÅ��X8iu%ò¯–ÐØ…ì£yèó#ÿÏîRÞH/ò=Û­ž=Ylû¨é)»�zï¿)–ì/¡šÖÿÑK~�† ³kÀgöž•º¤ûGaúÃ÷ê­Ö–vK•±Ö§ÚÙ“ ²ÅQ8Õê"ä¿f,Ac²Gó¤ÏGþ?»UÞ’^òm¶[�=Yìæ#-ÒSvCò&ßQ¹Ð¡,ݧã"³Ø™¨#¢/ŽÈ,|‹ö©•¥Û?Œž‰N™ùVÔ€²t)ü+~Nè,.èD×&µ–©¤oQXLYºTêý>ѯ3ß* áÎäEØ,tUºŽÊåÆ+,9tMÐ9®ø)]É Óå)·r\ø:.2‹�©Ž§Þ7�þnUÑ�•ã²_t9—Ñ”£”K/¹€•Ï¢§�– ¢KÍ¢v¼.7 kru…Ýæƒñ¸Xá0€=e¸3‹*±æËˆA/ÒÆEöýêeå¸ÎXv‹N ~�±³²?節i‰M³¢Eû½_Íu¥ävaÂÿDRŠø; š£|¾õˆÃ  «9ÚÅÑ+Íöhôá�œÄcá|´'IGZ]Œ›tEúàÈnN³=tý}jŽã/šJãÞ^vCý¶Œ= +gGPßû§u~$~'ƒ&V溈ü׌¥hìBò¾ÿí|¼â‡Ù4«ŠJÓÞWo5³´[ªŒYŸØèá�œ‰GÁùhŸ”Ž´Z16ééÁ‘Ý9ÍvtýûjŽ,Æ/š,Ž}Ù†úm3~ÎŽ@½÷Oï|$þƒ&­Æu!ò¯—ÐØ…Ô{ÿûO±do Õ\ÿG/ñ{4ì¸]­ÒlO€vöÔ‚†ìGñÇFÎ�´ºˆø×ËÐØ…ìÑ|èó‘ÿÏn•n¤—|ŸíVgO-¶}¤…ì)»�¼çÿ”–ì—¨šëÿè%ßFÃÀì6àgvÏʺÒú§˜þá½úV³¥Ý¦Ê˜õ)ÕÙ“ ÙÅ��X8iu%ò¯–ÐØ…ì£yèó#þŸÝUÞH/ò=Û­ž=Ylû¨é)»�zï¿)–¬_B5×ÿÑK~�† ³kÀgöž•ºH÷�búÃ÷ê­Ö–vK•±Ö§ÚÙ“ ²ÅQ8>ªÕEä¿f,Ac²Gó¤ÏGþ?»UÞ’^òm¶µ:{²Øí#-ÒSvCò&ßQ¹Ð¡,ݧã"³Ø™êxj½‹Aú.ÚÿV–¾_t�YL™ÕkI³ÊÒ¤ð/xõ‰Æ›ùVôäØ<Ð>Œ.2ã|\y?ü˜º½‘uå„îzK•ü‹l.T©÷Ó‰®Mø’€v„;“ß`½h³ÐUé:*—¯ˆÊÂŽJž$*ü”®2Œ…éò)OåÐóud¢;“/O½o,!üݪ¢ÿšŽÊe¿èrN£)Ë‹^Z+ŸEŸ¦ð#,.ÔDkÇ}s“0†›x�œ\P]”vÿ~GÑ[[Ü‹#¢Þ÷Ê÷ó†èfN.iåãuY@ÁÎä{$W„Íc§2÷þ¿ÓMeE ã*ggºç‡^OšRw�ÊîûÿYÛ/)~£î4Àgþð½úr½ÐÙ™=Q ÑC7r�ÂùÑÞOæì#W¤�ž=–ûÖÍiÖçý%ßGñÃlrŸ.¨®x;©jáÖ%(UëÇj, +¿Ã Ìø3+Å­=°«_$@ˆ¿Ë"ø‡A›Â©$ƒ º¡w7vfŸˆ…hìá 9‰‡Âùhï'çì‘+²GÏ>ÖýusšésÉïQüÄ4 ¹Ï.T×x›ƒTkáÖ”¶õ±:Åï`Ðfü3•Ê­ØÕ_ ˆ¿¢kž{PÓ©èÏNz¹®Y LŒÝRÅo2õ4š6¬m6lP�ò�àEï™ñ5º.ù¬+á8 ×—q®™%­ÔuŒ#�¦Þ2¡ÕÙëÂ$ôþî ²¿„jcÅSÊüÃ{õå~Z¡¯#Rjëcj,Šßà fú3UÅ­Ø©gWöç.íì• Ù�Ê�Ígùó¾6×! +}w[GD‡éâ3¡M¥{Ó ýgü5åééÀÛÌ€iñ:x9)ü�ƒâ‡Ù4ä>�Ð\îy4èBïÞÖ”Úõ±ÅÛaÐ f|�9•âÖØÕ޳Sö¹K@wödACîGñÅæçŠü¹¾šë ½»­#J‡tùKhSѽ4hÿ5z�šòéiàmÖ€µx\9þÀÀøÃ4 ¹¯.4ë9t¡ïÍ*Koè:*:7�C …m6‡~Ê…)ÆÂty¬ÆV(‡ÿ¾¢žè&µ©àßXŠüE/TE?(�‡‹ýhœÏ”ré%°éYô4ÐrAXt©YÔç;Ù\‹Aú.ì6?ŒÇ•*®Ðå-”ÿÑ(9Ž¢ìÿDÅÿÿÿÿ\Ug·(×5$�Ç,À�aªxŒ2n^¥>¥1ôÙ…ærXåv:…06föXüpš†ã�j#œ•d€´÷S´ƒ—O�µŸƒTeáijiøp¿l¬ä¥k$pر9Zê{Ö�Qnć>vÕ(¼)ÝûÉœ=ô: òa×Öã¾î±î‡Ü“ +éW¹"‹ U=Rµ9OŸ‡ Ìoú‡õœO° m 33m6m 3L3m33m 3L3m1‘Y¨äߎÀBŸ�@‰™70@0ÂÿHõœBw +Ùáï)ýñëëÅ®ÿ€4ºcÐñõéÙ±9|69�‚„5Ô7^³f5ê]ƒí³¸BÈ+�Ý"§=sj—˜ rÍu`�_ßtͱK?‚¬áwZqæ‚L�Úè¹æ‚ÛuN�ý8;�m_^%Q¦vµÆkZküºÍkŽ]*þ½/iòF¬‘áúH£;¦__ߎ’ª$š0@žÙ-"9í2§vÉ\ לÖðë›×9véoà#ø‚5~§%Î\PC)PO�Ö\p»î¸gg¢™íËkÅ”à«e¼Ö:°Æ¯o¾Í±Ká½÷%'݈5\ÿ�4:ÇÐñëëÛI•DÈ+�¹E$§=ÓÔ.™ r�ë`�_¿yͱK÷>‚ŒÆï´Â™ j˜jã rÍ%n×�ûqvL4÷:*º?”¥³v\h.\F +Žh‚‚΂Hû¯ÍÊÒéúß\ ” XÈKY:íý›?'ð £i.šF…j¯ v¨¬³à’²t«Ô÷Ã\Ä ”€®C;sÿe­m³Ðmé:*½Þâ%ÇÈb Ç%~JתÂtùß­ûŽËÍEа€'@Ôp Bô_–ö‹Ç+ÇE¿èr§þ £”Ë–\‹Ïü§�– ¢‹Î…üHÁ5 jœY»½ãq©Âata ݧ]ø|_ü%ÖûæoÐ…õ¢‚‰¿¹Hrü¬—ËnÑ•Â/6v•¾þæ�=9•´uAL[¯t°Æ^v³s”û4TŽ&m]áÛðhø²v­‘Ü®1‹ò@f€ ·Á5ÜN g4Ô×?¡¡ìF8¬‹÷ãiÉ(8¥õž ú»aädlg—ÂïK޼k4tý’ÑS@‡¯¯gÇFÈáÓ%Ô‹52\å{ú$£;¦í¢'ï <4¤!»1dnÜ­¯B�¬•ŸºÉØð‰§úoP>xAÂê+¯yã5Län} äÙý*Îü8�Æ…5Ôm^³f5ê]‡ì!øúÛöä4©Ö5˜V½èà¿íΉ½þØ�ÈK*Èñ¹óÈn!4L�ÒÜ FØýÀS²ñ¿ñ:7¯@3¶’°·épû +p›';&šm_¼&Q& ¾Zck­ƒµüúæUŽ] +ÿÞ'9y#ªÑpý H£;N_¾¾‘ª$2a€¼Ù-DrÚ3§v‘¹ ×\×øõ�×»ô7ð"øÁ~§g.Pè�O�k.¸]Ü)°ggB³íËÓ$Ê”ÀWk¼¶u°Æ¯Ý¼æØ%áßû'oÄ®ÿÀ4ºc +Ðñõõí©J¢ˆW »E$§yæÔ.™Käšë`¿¾y•c—þ>?XãwªâÌ5œµñqÍ·ëNûqv&ï:*?”¥³v\h.\F +Žh‚‚΂Hû¯ÍÊÒéúß\ Àâ�@YºËýX?'ð£c.†jì`d´YªàbeéB©ï·¹è)8wæ~Ä(šÊf¡ÛÒuT.z½ÅÿJvTò_¢rÁOéJU\˜.ÿ»•ãbßq¹¹ðˆ.AˆþËÒ~ñXcå¸è]îÔt”rÙ’Kbþ™ÿ4ÐrAXtѹ�)¸&ÁA�3+b·÷b<.e8Œ.Äÿÿxázñ›XïÁƒÎÓ LüÍ¢õâgå¸ÄXv‹®~±±«›þ¿�4H +óyÈÜŽåuɇp¢Àœë’`Óÿ¯|¯±pØ%ü,Ú±3((A/;vgvÖbÒ�Ý£\E#ZH]~�é´‚Ô4z§ú÷ÚÏ[@[RØç!ã¶pN¤ŸPÃ)ö6{eÝìåÓß1 + ï¡‹œlávÝUn”/5e÷—v]7÷øô·?‚†J +{yȼQ),ÿÆËt£…s¢ÙaS�´� ÈmøÔ " S$ sûÈP¿°•ÖeOèò¿$G)Ñéå0×½tzcÉØó¿¬óë’`£ÿ?�‘Â>™¶…s¢¼ZúÐN)°s]"˜éÿDƒ¤°ÏƒÌmáœ(O—>t€' +ìd× �ýH�¼de_[¯r°Æ¯¿pNxÝ<ó£Àj&NÞåò¤'™u¾Ù-Ɔ)P­“B¢õ9J‰®6(Ï€]í¥Ëãd0m�ôóë,MÍ¿ßx-™‰ÚXYH¢‚Mr°�_¿pŽ(0»ýÎ= ìGâ%++|­z ÈÁ5~ýÂq¢Àë~𘘪™8½=”Ë“ž2ëü +d·ˆ L�j] +­Ÿ¤QJtÝ@y캗^'Á4 ¤§Ì¯³hjþÆkÉ&ÊÆÊBŠŠ6ÉÁ~ýÂ9Q`vö¸÷T`?*�—,Yákëk@VñëΉ^÷ƒ§`üèfÄéíQ.Ÿô”Yç+ »El˜ªu)$¼uT.v(Kwè¸Ð\¸ŒÑ5œ‘ö_›•¥Ó?ô¿¹.(0!/eé´SôoþœÀ/XŒ¦¹hª½‚Ú¡²Î‚KÊÒ­Rßs7\PºíÌý—Q´6›…ÎG×Q¹@ÿ/9.@9.ñSº®X¦Ëÿn叨w\n.‚†<¢†K¢ÿ´_<ÖX9.úE—;õ¥\¶ä’˜æ? ´\]t.äG +®I@pPãÌŠØí½�K£ [è>5èÚõâûâ/±ÞwÐ'C¿?z¿xX9®–Ý¢ ¿ðסh}Ä_aKf$pºŽ/_ëA÷’£f¤%v­�øwiŽs �¨´¦'J¨õ »ÒQ3Ò"L;fõ`ç +0á­ Y¢¬×È:v†ñgxb‡íÕx'ljާkñõõ^µ�:= Y¢ »UEñ½�¢‚MŠQ ‰£Opº<é)sÎ(_ÊŽ +¿FÖ±�)1ªÛŸ CýÂ9Q@Öx­kWÙkBûYT‹'±ÆwqÝÐ'ñ·�Až’¥yæ¬ØÙ�‹×háœè0DËñúÊkÞ,UÅ£¡/ñog5W’G)³®`Í ½7^Ó�,œåuÓ‡ì$6¸æÓ“îOjŒMŒ>Á5tñ¤§Ì¹©|i;ZöÚÏj$RAÇï÷£Ù™nÞ Šš¯à˰“½qÙ>=ÑýU•aãfÐòÉ.¨¡i‰m:œBv Zñ—ØR… œ®ãÓ×zнô¨i †Dë#Þ[ª0#‚€Óuìòµt_:jFZ„iÇl ¾ã�“À ŒlPùV§À~TÐWÚR…å_ñZ쪪‹†gvѮҊ^Ý(_n:�†î`ž±MŸ  ~Aë¨ +DJkšœŽ¶@zÊœ5Ê—²£‚‚Ú'¿e¯TVr2m 2L2m228m 2L2m6m 2L2m44m 2L2m1‘f¨ÔãÒÀBœ˜�ŠG€Œð?„R½ð•Ûtì¨\ÐP6úÞYÜDOÇuOt�æRW´ÿT¬l4ÿ¡ÿ&z:®{È’GÙh¤ý?'ð 4Ñ�©~mœS\©ÂâÊF—Rß׉®Œë^@çèΤ{ŒŠ"Ù,®*]G¥{ã.9t!h�—ü”®½ß…éôš[9.êg<_÷DI *Dÿei¿ù +±r\ø‹.wêŸ6J¹xÉEáÌh¹,º< �Ùuš„8äœâ—²Ûô])Æ…¶PºšÜçó}óK¬é àäòô¢‚™/U$yVŽ+œe·èJð Œ�‡Ãÿ_IŠÊbº‡ÃT¿@ï4xçv >�Œ„°¬èjÉëY[‚ÃÕ¡é*¶£·–|ò PÃäI "ÆŠl“d$½¢øÑY?Ù�Ã9gد"¹5ÖÅ�‘ô�âg‡KH�Ø.Ö÷ˆáaçÌ"û¿ˆ÷•¡c�ß,i¼Š°†�ÈÏnå�ü¯øò!õ~íùÑ)~úÃxßvçÍ9çâp$&‹Òí®fÏ%�˜ÜèS}!½ƒ�ƒ¤¢ÿmÛŒÃxOq¢_“™mSñ3°„íAFäõ»Â€É•.ÊFY; N4ð¬.DãpçuTû¿ÈÊFóúo¢§ãºw�,y”�FJÑ_ñs¿`qAý˜êׯÁ9Å•*,®lt)õ}�èʸîtŽîLºÇ¨(’ÍâªÒuTº7^‘¶*;*z•¨\ç§tá0,L§×ÜÊqQï¸8 àùº'Jj¸P!ú/KûÍWˆ•ãÂ_t¹Sÿ´QÊÅK."ÔgþÓ@Ë¥`ÑåYèÌ®Ó$Ä!ç¿”ݦÇxèJá0.´…ÒÕäF8Ÿï›_bM'—§Ì|©"Éó°r\á,»EW‚_`ì<¬!þÿòH’io3_ÅêüC¼¯çŽL¸a3÷ÇRr�Ó­¸�3ý†[¾¥øÑ¹¥Ò^À®ùñ€@åŠxÅfèå†×$G’ÝøJsºj~k¸®hµ›àï+õF$¿)€R©©ð'$l7¸!¼.À’ïñÈ%°ºÞ*+·Ã­‘·k3ÚUÈ)ÜëV»Óÿr E§¤^L€òË�@ÊÄE<úbК„ìè–â@T—ˆWlFOnxM: Ù�W6§«s·†ëЦµüñ}¥^d€ò›(•šŠ_BÂvà Âë”üþ‘‡\«õ­²rÞy[;£µŠœ„{Ýê;ú_ùâCÄi¦bµ€”‰C|ôÅÀš ÙÑ-â�¨˜Ü CRÒM ¢ÄãçmmŽv9÷ºµŸš_žþh4ùg™p4Á%§õ†GÄ¿nõ�þ¯|ùŠ Ä4§bµ@ʉC<úÅÀš„ë6s W‡b�:rKÞ +§’ÖdÂÈ®óñ€@ “d$%ºi!ƒx?×Öf´[‘S¸×­ù÷©üøåñGÇA“?’ G  ,Qrº7xDüë–¾Óÿª/¢˜AL3•V ¤L<Ä£/¬I¸Ž`3÷gpu( X¡#Wò­pÊ‘˜Ã@N8Ù5?¨˜¼AFRÒ™¢ˆ÷ó6mF»Š:…{ÝÚ¿›Ê�o4Ž4ù3€˜á4ÁIN÷†‡È¿nõùDG¥+‡²Q�Îâ&z:®{¢+x4—º¢ý§be£ùý7ÑÓqÝ»@–<ÊF#¥è¯ø9�_°¸ ‰~LõkãàœâJW6º”ú¾Nte\÷:Gw&ÝcT©ÍâúÑuTºè_á’C‚ÈqÉOéÚ›V˜N¯¹•ã¢ÞqqÀóuO”Ôp¡Bô_–ö›¯+Ç…¿èr§þi£”‹—\D¨Ïü§�–KÁ¢Ë³Ð™]§IˆCÎ)~)»M�ñЕÂa\h ¥«É�p>ß7¿ÄšN.O/*˜ùRE’çaå¸ÂYv‹®üâ_‡y¾×Ï)É8z&¬fü0Õ/Ö$2xD~vؾz’…mXPtl Þ‘¼žµ~�‘ònmÆvÞO§ÝþÁ€�7÷hb›Á\‚––&œü¹úõ€Ý`Þøô¢#�Šå#a¡ �›Ô@´ ¾³Ù9Kì/¬Iš�Ž¢+¿|š»mNþ Þ—ÝSÉ�6ù¡êd£9ÅYº˜(\v¤üÐ.„¥™îŸø’…dp²gÇvFÉÑ:Ùd"Ã‘Š‰cç£(û‹�m†¦±£èÊ'ßæñUí½kr#»ÔÚ½rÎÆè™a5ñ“©¾X'‘Á#äg7Àæ«§bµ€T,�„‹6@.jx©´/råË�vddùŒ~x3ÉX%FÀßh` Hhm¸5?»AÞøé; #0%o³�¢ßaƶcæF{�‘¼ÞÅ®r` ß$ +w'�YÑ•ÛpkäÛÚŒì8†%ö.Ö$ šFGÑ-_>M»5 'ÿïÛn«>çúwá0%Šœ i6Iå 2’ž“()ïÖfdçʼný•�5 Eù>™õ”Gn›1€5š{Äx…±{4ùãñ¼@+$Vs\Ãwþu¥Þ +§•†²ø^§p$cè™°šøÃT_ ˜&‘á#ò·ÛˆŸOôÃ7KÆ*aþF“� ¡µÁ­IdxŠüìyƧï€�”¼Ímˆ~Mf¶c>ÚƒŒÈë/v•“;*]8”�²vœhàY]žà’sŠ_ªý_de£üÅÅMôt\ÿR•+휢_°¸ðDëÌê‚à�ëèòпȌsùWtý,f×Ôp“sŠ:UpYÙèRêû:Ñ•qÝ èÝ™t�QQ$›ÅU¥ë¨to¼Â%‡.­Då’ŸÒµ×ra:½¶­õŽ‹³ž]ç $Ðp)Cô/FJûÍc…•ãÂ_t¹Sÿ´QÊÅK."ÖgþÓ@Ë¥`ÑåYèÌ®Ó$Ä!ç¿”ݦÇxèJá0.´…ÒÕäF œï›_bM'—§Ì|©?0½y¬×0ËnÑ•à;†ÿ¿<$)*‹éSý½Óà�Ø% ø@2²z «$¯gmyÔ”C<´;¯Ñœs ªö Œ4¹AFÚ³TÏ4Ë’{¬ùg y³#ÎOÞÚßùGÖRµzÄ#·Uåù#î*¥”7² 0}ò½©¬ ôÉM3ïëíÚŒfpuÈ®0ÀÀÉ�–å]-�\}Ö”GM\ÄC»s�æœs±²o`Ìàä 2ÒžSz– YJîcÍ¿�Ì›q>ùÖ~xÏ?²JW«Gr[5�?"WêâÓ+|PØr1m 1L1m119m 1L1m6m 1L14450‘^¨ÔóŽÀBž–ʘ70Â�þ„R½ð5R¤‘fW …nvžÁä¦g$ëì˜ãŽWà¼KÜæCÎ{ìk4þUœ¢òÓ¯×kqŠº*§¨«tв šIûÙ` ägd¢‰Fzzj¤Ó§F:Ûá&”W^ ¨LºLVÐŒàÛ|X�ó®c‚šÍ/(»z‰¤Jûéo¦ä‚uQ_ŠÞ»Ç +~¢½%N´ÿ`é$íg��Ÿ#‰&:Òé©1�žÓÉc”íß.ü#¥ ‚îg$êÚ1£Î;f´�þQüõ—€JÒ;A²‚&®ßæC…œwKÔl¾AÙÕK$%ÛÏH¿™%¬CýRô½=­à'Ú[pEû_vA'f:*]1”¥t\8æÃO4�Ñ�ˆÕþ_¶²tû‡þ7Ãï8BV–®#EÿæÏ ü‚Åhš —‘�ZUHÍE«-¸¤,])õý4M#! {ÀÎÜG�¢/m:,]GåBï[üOcG%ÿ%*ü”®b†…éò¿[9.ö—›‹�¡Áž‰¢?¢ÿc�•ã²_t¹SÿÀQÊÿ•~u.Jˆwá@ËeaÑ¥çÂb„A4 ŒÇe´Z�ÝÞãq…Âat½…NEr¾/þë½+<è½PÁÄß–8~VŽ‹‡e·èJá»Æ2ëßaú�Ô›Ž|-Ù‚6à I4ŠùÝn®Ñ÷Ïö_:D!ùÍåÕ•ªÌ¨šŠzrbNLÙyŽ\¤ˆû€Ÿ0‚�ì½—êtÙÙ'Ì×I68×u1KNñf$’˜˜Á³ Åü¶›#HÞ UñàºÑ }ÿ’è­�È�\&(±R®â(êki ´¬ÃØ`ôWI2 Äa»lç€Dæ”SÇŒ:^R±ÙÈÿ¨z¶ÁbJÃ\=7p@9„Ÿ®u:eèu¸Z°™¾í‰Œ‚fy§U¨JMaP©½�Í‚£u¸Cë>q!‘:¹LP1¥\Å)Ô«¥-hYcƒéÏ.ü‘¤(h–wY…ªÌ”LE½œ('¦ì¼#-RÄ"ÈΖ:ŠjâòLœ¢krPUF¯ƒ«…ÍôWþL­öTÆqr\N/lP*ìŒä7ë‚.E~69l+«s€Ëq¹l»ð×#¶ U¼®°Ìúw˜~#µÀ¦#_Kµ Í0C�b~³›ì©„T"Ý +p k5RÆ 0i¼FÂ\7ô®úÇ"�Gs–ÌÙ$¡®b*àl�‚Ö%4ù\­B!ùíòäÄœ˜ùª-ñHm]PËÈÏ!‡íd;¸-—· úõÄ´³k¼NÚ‹ »,éDÕ„SôL8E×r�ªŒ^‡«…šéoü™Úö¨Œ£å89½°Á:T°3ÒoÖ ºìë¨èúP–îÐqá\˜<Ñ4F7"TûÙÊÒíúß\ †Å‡ˆª,]DŠ~¬Ÿø‹Ñ1»#µª�š‹V[pIYºRêûi.šF B@÷€�¹�E_¶Yè|t• ôoñ’ãâd�ã"?¥ËKZaºüïVŽ‹}Çåæb`h°'#h¸¨!ú#JûÅc�•ã²_t¹SÿÀQÊ…K.AÔgþÓ@ËaÑEç‚vÄ šÆã2Z­Înïƒñ¸‚á0º ÿþ‘…ëÅob½z�^T0ñ7Ó‹Ÿ•ãâaÙ-ºRð ÆF +^ªU¨JB&¡4%SQ/'ʉ™Ñ7 ²³Ý�íß‘Köñ3R: Ø8Ó®…m!eÌ3ríJÚx¥}c¶àH47T­¶~A²Ž<ÙnyWàŠ”]ŠeUóÓm! ¼V¦õö;“wu§…öÿìlî`ûã·ÝŒÒøÕƒà =±YEæjåÀŽ�0_ºÞm�mÖ5Ö¡Ž¦Ø¶?#oÁ¨j'îgÉá»íiyO\Ѹ�c¦àµÄ˜ÃÍÅ +>Lì:ãˆçZ…j<�f 0m¦ˆ|Њr'°C¬HÁK[UIÈj€¦4%êåÄœ(3ôTvlw°ýóÛnFÑ|ƒê�p†žØ­"seuhšM"á§Ð ’³PÒMAv 0£ƒ Œ„e[Ý€ìUЈ¯À¹W)ñĤ>!)ÛÑoý:TÀy�]+È0^ªJÑ!x4ƒÀ¤á ˳ºÙ FÄà0F>>A±RgD¿õ5Ø,¤Ì�+£ë-t/tª�ó}ñ—Xï]ÀAÖ;�&þ¦?0½ø­—ËnÑ•Â/6v�5)N¢òѯ×U8E]…SÔUF‹%56_Ðv owÉ%Ä}ÀOs@ +œ÷Ýødc¥§‰–ÂO�]Ì’‹1@�hùI4¢‘nmyÜ&Ǭàa'˜n÷LËÏ�D éôÔˆNO�äd‡1Jö¯’d ÄÏH¢‘ÿÊ’4á]NÑiç"K. þ~˜*à¼ïÆ—+=M´*è~xìb–\Ìüj¤eϘDéö©–wÁmf;at»Ï `Z~F$šh$§§Frzj¤“ŒQÚ?{á�m´/#Qg‹uv˜Ñvú£ð×_*IwÉ +š8|›8Ïu,!¨±ù‚f—^")i?EúÍ”¸`êK¢÷öX�ŸhoÁ‰¶ØM¤ýlò3ÑD#�65¦Ó£F:Ùa¥ý› ¤Tƒ ý‰:;̨³cŒ¶ÓÅ_þPIº$VÐÄ ðÍ|X�ó®Ã‚š™/(»zIIûÒo¦äëP_ +½·Ç +~D{ N´ÿ)À.h’ìgƒ@ˆ?#‰F4ÒéI#�ž4ÒÉ£(íßNø#¥ ígHÔÙ1E�3´�þ(þú—•¤;A²Mœßf‡ +œw“Ôl|AÙÕK$JÚÏH~3%T‡úRÔ½=VðÕ[p¢û_ˆ]7À{e +Å$*�&)6âf„@¦þö­”x‡½�8õm\ŒÈî�)•GºApøÿ‡þ_J2 ·Q‘�úñè[ ‰’懧Ìlu–~8ÆuQ>?U±·|Ntˆù¢Jç�o�ÇP \?/=Åþà lþýûöO¾?ýxzCAB-©Ÿ’t*Ò}tñ—ý7yy_zµPNÇ‘ÓMO¢Jµ„è Å�XévëÜPŒ\s^r$8¿þ†;¿¡¸dsn(<Ÿn(Ɔû©ÞSââôŠ�ô¹Ôà ŒDÂVf´Ú(”ÁsÝ0)V�SŽ˜èI?yš@”yW!ª¢ö'CgyúRJOš*Rrl%9ÏIüfE»ÌAÁ1žP’ÜØx€�°ÉšÔLZš6žDÄ™CŠ£z%š¶…¯¹“B£d9Ò)ÑÇ-3±‚ƒ6¼ºv>>-]ª?{š˜ýï=4»Ìl(Þ_o´©Vž¥ÙPœPÑÎB½9e®…5ýÅÌÓ"’™ Åô‡c*†Ò¾Ì†â—ö9RæJ{ÛŠZ +ʹ4¦}e˜y§K3ŠC¹ôŒ�ù¨™ÖL.Û“¢LëË¥g›Ýd̆ÂF:s‹)–¶’Œùp^f�Xb _biAT¬ç˜þá8±ù™7¡R&š_±UÖ雿òÍÊdÎFƒ8¦>øC3ByÂÐfT©Ñgµœo$G]«ž†5­YίŽqJ7GÕm03Mò¾L2©M¯.SÕÊžR³‘°MŽQÛ$qá�ÍYM�N7T¬Â“UEµÖ†”Ø~lÎ÷l @ &Ââ†D¢=’?D°€#ID†YòµÎERôÃ1S…®:üå¥Ìߊî +ÏHnDûЛþ­n%¦û0³âÛ11k3—YÑâ´‹ „ËUS釲»¢¬÷ê†l¯ÑFrZo%+Ê#ò -ƒ¯àüê“e¤òLYC ô›œ«¦zH4í¯6vIÍW|HxCèikÿÌ‹gsD™ñFÏÛþ£ud~KÿVu,;ù§<:ôGÐO»rÐJSSr~Û¡ÁCß½Èþ™Š†úÛch™uF¿¬f¾zíÌB<ôØ{bªŽ ÉÕqÞ+IÈfÍ©¢"{Od“9'qü´¤–ÓÙó±W¯ù†âfކ +GêŸF,‡(ñ~t=ñÊ®õ„?zóœˆ-3™‰Ñ}xº¹bÍ]ÇÅ1zU¯‚=™¦cÏ_°é¯Hè:+Þ½M7u> Ñó&³Oûѱ4Ÿª]ÍW×y¦¯Ò6ÉùágÒ¤tjô2MËDe¬_y4§»ô¡L¤ô¢©UWÊϼy‰]¾Æ¿ú§ÕóõOb¾Ãw2͈zØ|í¦²íÊ�¡á±Äú£:‰hXdGe>¢JyZxc† ô¡"§�HDߦ\hÿ„.*º¢ûÑÕç“ô�nL4â'Ð.µfÒ¡Õ3æ»”²42òÝÌȾÜÙ'RÞÙÿÓ¸â$Û˜í´,gÚÐù¸›ÍqáT↓#s�eÝ󮚂Mr�ðn9ºtÊÓi6hÙqÞ?7=ÄÊQ•\èÉk�fuC†…‡õ«ßƒùÞÝØßÿ|D¾š_¥ÍÐaoö)†@AAAÁXLÀ0� + D@±ˆa‚„E„ ŽÅ XL`˜áÁ†cQ $À‚Å +PH…�‹‘@RÐ�ðð°¸â‡’%8\I@óû b¦uq»¼; };eë%gšÃL�´·ãì>†"}öuµ¤Ž ÅPf}àŽº«žüùÀj° +�ËÈ;T]mÂJ¾WVsØíG–Qð9ŸÊ$•nó'G6fö¼Î;F)ßQ qnFªÞpË™ªVò9 RÒ�MNÙ�­ËÌñ tÜ EúNÎÇo(ÌyT™‚I†¢¬ì(QÌê=Dÿ=8'×j60cTwEÌÄ£Z™3Y4ér g`ó·I••çˆÏ‡ã$Yß@$‰;ÝcžëZ84’-£á\½Ã©31¼QÁ1t¨½±îCÝ¥ûw’�{‰¦Ú]^;ws£¡�ƒ~3òL³re:#2’892‡#çðògf£4 Eþõºê(R¨Bie4Dp\áQVåsrÄÇ ¶yÏ©~8zLáLÙÖŸiL䛦00  $, ,ÐâLNÉ~Û»šVݳL쇇#[S‰iÌI×”õ1f&¯�œ£GŠK´×©ÐdâÝatp ¡8p^‡cîŸåN”Xd8¸ê8]u4CO]zÔxàèP  $080ÀÃTÀÀ€ , 8N`@Ñ ©˜xq¨ ððcðƒÐa�.œ… L°`Áº „ °`ÁàÁ €Àà�‹ ਱À± Ð �Ù‚‚Á ‚° ° ° ° Ð` + + ë‚‚‚‚‚(XPXP"ë±teè«)¿ó±ÏæXE5F“y—BóÖhü_Ž>‰Ð¨¤'tqš'¡d¬h&@€Ð0$ +e2ˆç€ È^‹ƒK&‘P4ž§AŠ@0„B Å$$�8O„5:‹åþN±Où÷ãÙÔ…š4E®u}kŽÆ¹ñGÚRTçU‘ü•0ÒÈ�›CÓçÆÕú»�f!~Ó½ntó9c¢¤(mH †¨êâ‹q"µN¹vÚ)chb" +ð1Kã.NT§�6ONÀY*î¹�þ@;)ßIŠè?>8?SË�âþïÈNËJË렺ķ éxÈDTt†ú‡`J[´ú�b¶JuQåÔQ>…h$ÅäûÐò‚�é&zž,÷xT;pH$ÙøŽª(nañ )> b¯\»½˜ð^óªÏ�âƒ)¸[KHCkox‚í=&`?ûˆu>Y�l^ Èê]”ßÑSúµ 8ùhVpƒËÔõèu븹á?®Gzut¡ó¨Èè§&3xY]JÝh‘¼°E`Of˜£ë™RV³#�6ž ,œ±¨ÑÉ@‡¥@I@)Á¬ê`ÁYc}�?ÝnµUèÊb (1AÐø(Q¯Z´(óJÀΡ,=C¡¾ï_¾ÌÇDî™]™\©n¨‹»z4òrû’)Ï-?Õw{¡çy‘Î$™B‹@ÈÎÇn:­åE‰Ë x ^¢ÉΞP?ô|¢ þ‹^³´~xnÍi/†fNE'É‚œ‰º­ÑáЀrZÔÁCnC Yd,·®ïéìrZ¸Ý(a 9£õsQ?¨(-•Ê;Á¾º4¹Ek¢bK¦†±¬âÌšNQu@=&8îŸÖb;æp�“=ßl-—oªh@z!ÿc–VÌ¥³çÀKQ�pó ¨ß,Àmb‰�EB?æ›*´ÀrþE¹omK hM̓”“Gt©ÇQ¿…Bùê<¡¾mñµgܨ�Ö*Ø‘RðÆ?�ŽlœR¤%�I‰Ad�–å+ÐÊ—é£l@€Õ’ÿÌò£¸/|>@È[„ŒDkîùY@$´77­ËîÌÙ1‚"Û¼ð{„¡O3, rºñÿ9´ë=XkfR諊'vo@.Ü'ºàÚörÆà¢ø¿‹…¿úšCaü„€÷×$úáç¿ ãÊ À¦ép!ïH ¿ß|Ò×;„Šw`Ú#Е—‡† +û™ ]€Q5‚}÷�q©ËF¥hë³ma(<­=;Ùì}7ùa &›ÜÿË4�í–|ïAcŸ_Vª''`x\ê*ðã\µ±ÞʦI>ñ÷Ekg~Û©á S@®®UUÒ‚+TÛ¡R3Ö>ØUWØÌztì¯ÓIgªà"É+�®Ž+Áò~;*ðS~²E� Ñ…�RãT;Îï–.¶�õ‰.Ž™AÖÜArF€ ZòÓ©ŽÏ-³È_âÙ4DIª�Å´dÉõ�ss—X>˜JVÛ*Óáx™�Ϥ�üéòø];¨òuÍÛŸ|öy¬š—cÂ]�÷Euè(MÚÜ®é¸Yä=Ò}ZÂ’éyì\®”Å®RÏ”K¦tÞDQ:œxRUMš(]£€Š–Ï€Ÿ´�gHÙ? #j!à’ñytFçG£%=*©:­w8¨ÑÌv²ÄAn'¯9<3e_ørÃ¥èÕô8FZQž‚K{W¨‹Ùs 6¬Hèø5£|+p/�Ó‡¥µ}–¸ïö>ÃòMuLí¨¤Ÿ[çûÊ˨B�Þçãl¾êU1¶F\(Y‚Îl-�Ò}‹ÆNàE”|¶ÿô¡`%z¼³j‚2›ò¸ÎÊj*—Í�â¾…#bÙ–2eÙàºNžÛ�Ç“ÊÆGŽŒ,L±œ6gÎ� �aÖ{—¯û +°k*Ùƒa Žåk¤À�f/Bâ1ÍCMÍAÞ ¬y#:Œ"—R*°[Ø&ÐãÚ=ˆI)-»p‹ÚC‚Lꮟýq~î*–7Clö´ŽÍ7»|É +qNûz/i± »n7&)Î<.‚J®£‡ÿ^bÜ.'[D•Ïþ¼'|DF0ñ©lÈ�ˆÌ®òGzœ +G¢úé‘gdó`^_p\-=6A{"Å^“w˜•²}.h(lkš«ÀØý‚ D•MLÔ•®ñr%UNòÿù²òK{€:¡™K¢'Ô +ܧL‹Œˆ~æº~ãÏmû^�šåŽ¥Q…¯—²ºìÿ®ï0¶ÇÄZülŽÑw‘t¿¾|•ƒ7©>ý G͈†½pèXÙKÛRƒ&Ö¦€‚ö5³�¶¶£áöú"Ÿ²z v J1˜«K>/¶\ÿGÚõ³ß™†•ÀÇçéÍŸ{w!x“nÓW…äñæ§<ÜL`ï?ÿ'à8Îáþ!ñµãfòZ^éšĪËÕ¨8ñÕ~z�ð0€i 0­xÞxž €_¤�+†}qÔ€ã«ÿo.S=`[±ÏæÂ²reø ¬•Rç9ð+ª jªU:ÝGHض7“~P)I›`É#hÃ0Œ“0Þ8JOr§Í=Z?ø«z‘x91š=m­e ñÁS�»â͂ޓF2¢ôÕºñÛOƒ¬ Þ¡µGÆnÎÎZg>t%]݉l—1™Îå@‰ÊYû-Ñ +±ƒ# .#Ú(3—Ø)�QÛIä•OîÒAS´wÝYÏ8l/½m +S¿<^½±Œ$NÁK¥wÆ+\Óze_Óò�á”rñƒÜäØÇ/(ñàdð%f> +6™;†¬‰lF)³ËÁ›ë ìoÀœôh—ÃÈ †Þ€b•-­fÜk�* &Ö> †�féhßò˜™Ê„ºó}HÄÜwÈÁÝ…¿J®³a±)'-Ýçá×y—Bó„QÖeINïÞZåÜ&…AÒ?,#¡‡Ë{°�˜�}ºañùA~cÚaÀepŸÌ6IÏò’}‹}}*JÓö­<‡j´�+¨û'OÃõö]**±‚‚ïÙýr»Lã«¥yFÉb³ +-ð½[«êž‘@ÃD‚6\…üéF¡3w�ÞÅå ¥P¸È �CÏ«Ìuî¢íKÍ[6·:…’wú^¨âoƒúf—xÒçh>j|?ŸgË#Ò¹MU¡)Yv†9'$:öïÖû€ª*ÓÂ( ýÐ]oð`À¦ž×òóÒ;HǃÚZn˜HÚŸfa5÷«A}L ©ËO„e-ÃýÌ% ‹jLl)ž²Êø?Ê,ÀäÑoUŸ±ËIÆ•XdvÉ8à1õ“žVåKTªˆ£„¶T‚Rt¡±�;òˆÜö˜Â™Œ÷V4&¦Žùóñ‚ñ“Ñe:{ƒžÒj çŒÄk°Ûâ>¦d\¨<Ëúÿ§› +†‰ãGʧœZ¾º�(‡–9|ŽS]aGܹ‘˜WÍ…ƒ²‡û܉´/“ 2äXg9÷ƒ ðñDÒÁ%SÀ¸yŠ ÌÄ×(S§Ûq+ß_'Z�ñÎò�% `wäìùÄì:ÎÃ7|Êÿ÷¸¯MðX�{àvAÉÙáø—/˜mÚc–\ŸÊùÿße¯®Ç#¦·œÖ–3´˜X\BmD@î•è¡È5}t�/ÜM=�•¶Œ’9ÃÁeÐä€Ý²¡´“ñ�JÉ9Ï"(ÇÁ°á âx*ScßDÌÄ2QÅö%þzzö�Òá–¡i\r{í/ù÷ÌR™gþã—�ˆ%È&sÄÜüÒ9ŽÝ+ÿËꛓ•.ûÉЉÕ3}+¢ d5F_«R5¤·ªkGSvf�¢Gdކ¥E C©?ã¶x~û$i€ŽÇâ *´b£¿RÊ T±;.·­«Qò¥(:ÊèL[H–1a°^cñцñJ,-0KWÞê-§`dYÍuô{Ê�ÊDBóŒ¡� â,0/¬RºyÐ}Îh“yÆ3a4ã ÷iØí,?º ³Õf©*�—õÒ€0EC_9kÐÐê•óê¸ÓׯxæõFl„¸=å�ß&ÊܦiüTe2F´TîB Çù¦>†B×§3Þ2EÓÍ €@M‚§ÉdŽ_WöŒ»�!u^ñÄ‘‡€ãIÚwÄŒ,K-‘6„ÞBÅ$Šßˆ©¯“‰ÉÔ³Eõ ‡x=h4Eaò˜Æ6Îi|z]`|•;<Ö†O'�~¿•ç1®×·Ïã%±{M¬ir_¹U= �؇YÒý»%u| ¡Cb¿1°k9{jt±Ø|‡Î��¶­O¢Cý3›«ò$8”6?âñ›¬EµJ áç²ÀƒÙå�±N¥7\ +½!€–ïT;f$;Õ/…ƒ@|®Ž=Á!Æžâf +Žcnºã¯Ö›[xJë)o†?f+&Ã.x;em†�Æ�l*½GÑ RÌ7VGM&"p¤œB«#ÕD YL¯?°RðÉâA•oìX•®Ó™*‡¬,àÐÚÒåÙ8 hÇfáZGi'Š[ó1´ÉÉ”Á.Ðß8(1nîM™ò “ñ‰Ô!#Ì|Q�ߌÞã0c~TÚ_<] Ä<'g0<îþȨàÌ ’ +F½+"2À™4üP«á€A¼i,JF ´îY4@X¼`YŠ:àƒ¸{„s–*Îf+À̼�-«L7GTPýK%R àʰœ¥éJoP̾�Ý3{+ï%É¡p Ð—½zÑPInÆ{…(´7 +�ï‹o>T-ƒ ­¸‡½sP‡'/0Åì"옛X��P¦èá�ta·1&®L€Þzhw”£¢çØÀ€iàãI¶¬õ¨>�ÔÂDܸ ?ZWåb¾?ý¼Ã PS­�L�c<�‡œlK¥2W‚ŒÒã�)­ˆØa¯.Ox=^å³G3LÀšVé¬$x†¢#~¬bÀ?dÐή‘(ZråEí À(°áí4†1=¯LÍp:TÎû™�U€†Ì±jðt`*„¢Ë>g¨ ØWZâ¬�0|–êÔâýÔXÆ1TR�>úBL)?@?k-€éwN Ä—˜uü¦Œ‹$›†ˆDÚ¼t®¦˜K ã§š†62 Ú�:ö}1¡p#RwUDÎ…ÍA4abËZBÅ×�Ųìèq\š«¯œ:åSH¾€ÄhËé%pŽ­oé~äж7²Q1îÿ*l–Sœç2• +FÀ¯E=±¥äõ ³æ2ÜM&äëÉ‹�,h~©ü¼ÃŒ.ÚÈû÷â«Ãñ G¨Cø}Õ°t‰ª Ýêa4f¬OQ�†{C,ˆfæ‚ C㻪#fýƒnl:iMÞÏO³¤t°Ly(°dK�=*éP\t<‹ð@½m2ËŒ-=ù$ÿ �0´íF�'û¿õ+<¿2çN1'û¯sÃ-à $ §íÑ¢(©x�’eð ¹{¬…<°1æÞÚað 2s©�¡öI1…¬Ó=¬¿ +Ec`ü’xÙ”'ÑbH±¼¢¸6B0*�í®ÿ�ØÂþ‘Löó„ìòˆç«‡80Ì!ûM£Š˜(–Î@œÌ[fŽõimÆÙmŸÁF%`wGGQ‹€¿ÿ0sqFY‡JàH3Æ]>MÄ-ÈkòÔ©‡«çŠ„s(¢zµŠ«;�û!‰†ÄàNŸ�J߯ש8ºÙ#)qר7—Ei¢ìâpbzìqÚ x ©»e@УÿzÛš�Ò–w1ð^¯e¦g~éCüÚ”ŠY¸Ú O–‰PF#©Æ3Éû¯c[᣷Š9§50zÇéÞ˜Ä7K?wn��Â/†Ù¹ +‹U19pá¤ø„!L»j�X‘Â9òÛñ»Xú[TKYû¢íš`ÝÔ 8Yo0Ê~‰Ñ|cÓ~ã¡“ë-­—XíÆ(ˆ9Œ�á�pòK¯„ˆwFZ.Ô[*}©pŠàGÙ S®F†Lª¢D¬ín íï›ï77ðcĪmÁArÞÐý�&!ä&ÿ#<¶…ߌC¢ü?#n)Y³Rô“œ¬øäÛKÿ¶£BmC Ð…Õ£Šns®ÑsÚ°û +ï#�-y¼yºø:#XhD‘ßðû±Ûº…“¯rÇ¥�Mçï¾ NÕ0üqwÿ¡/&Eº=¿÷;fŸM%5Œ—¬£‘¼†$h ¯ gÓPýæ»®”¿õ›Ãì7¡ Öoz�Ý�×eèy'Ú"ùÎ8ÄTÕÊ|zvoÅgß—Ëj34Äf0ˆº;À[©n{ÙªëMá'[LñÑ¿jjIÔñQ×™ÞlÂ>Á™®î³õ½u3¡9?’šžÇ!´?©)µZ2ÏrÒä·GXJì+´÷?ÒËKÄëýû¢PÖ,˾ïwæéf&˹çµòX ܲÙ1ê¬4OóúÏ/§ ‚ð-µ.ØzÔož RJ³ëëï3©Èf޵»]H�ÛyâÍ?@!5Á 9tDp3NIøº¤öîS3y[8Ç„5P‘Þ¯óošù‚Ð#j±ì6]žá”…ÜÆŸÃyb¹£¬¸Bé ¨ßD$;ÞÊçq¡!¾o+àv�ÔRlÙ‰Òû•#$üI’ýßïÄ+騿ÝÊ$kŽéšóÛö4óŠÖà{Çú8V�ž�Ø=qÎÌM|ùÿ�PÐ�²C“Ý3\Üj·ÏÉ¥Rö´ù�w"k#í:®iGíÃð\–2aÈ‘9:~€' ø�ÝMrkóiËnžÆ!= h˜ïµøw½}BÐ ¦äHvkwÆpÆT,óÏñ pîCx[~ òÐÆoÞM·…Çóß#0¯·‰2‡³Ln¨¶ì’0[ËÍþÁ5ç÷ï-pK»ŽeÎôBlíu}{ôÁ*µó#ý~¨ªŒcvŸoCÖR½|ÿÓ’沊û½¾.hm>¶Ï—uŒ6#ÀŽßP[IϺg¤=¦b˜‘Ûí¹8pÞ³Ò·ÕmÙx¾¯ÒÖýÍ>ïàZªm4tõ› É(Ë endstream endobj 45 0 obj [/ICCBased 64 0 R] endobj 25 0 obj [24 0 R 23 0 R] endobj 115 0 obj <> endobj xref +0 116 +0000000004 65535 f +0000000016 00000 n +0000000166 00000 n +0000015974 00000 n +0000000000 00000 f +0000016025 00000 n +0000000000 00000 f +0000000000 00000 f +0000040101 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000040174 00000 n +0000040348 00000 n +0000041879 00000 n +0000107467 00000 n +0000000000 00000 f +0000037000 00000 n +0000037074 00000 n +0000171908 00000 n +0000016617 00000 n +0000027010 00000 n +0000031306 00000 n +0000040074 00000 n +0000032748 00000 n +0000038265 00000 n +0000038380 00000 n +0000038503 00000 n +0000038619 00000 n +0000038742 00000 n +0000038865 00000 n +0000037377 00000 n +0000028014 00000 n +0000028315 00000 n +0000028923 00000 n +0000029504 00000 n +0000030037 00000 n +0000030555 00000 n +0000027072 00000 n +0000171873 00000 n +0000027453 00000 n +0000027501 00000 n +0000036583 00000 n +0000036646 00000 n +0000035308 00000 n +0000035631 00000 n +0000035371 00000 n +0000034061 00000 n +0000034452 00000 n +0000034124 00000 n +0000033460 00000 n +0000033523 00000 n +0000031155 00000 n +0000032861 00000 n +0000032924 00000 n +0000031092 00000 n +0000031884 00000 n +0000031341 00000 n +0000031530 00000 n +0000031436 00000 n +0000031999 00000 n +0000032052 00000 n +0000032343 00000 n +0000032420 00000 n +0000032575 00000 n +0000032670 00000 n +0000033039 00000 n +0000033092 00000 n +0000033383 00000 n +0000033638 00000 n +0000033691 00000 n +0000033984 00000 n +0000034267 00000 n +0000034362 00000 n +0000034567 00000 n +0000034620 00000 n +0000034915 00000 n +0000034992 00000 n +0000035139 00000 n +0000035234 00000 n +0000035514 00000 n +0000035746 00000 n +0000035799 00000 n +0000036093 00000 n +0000036170 00000 n +0000036317 00000 n +0000036434 00000 n +0000036508 00000 n +0000036797 00000 n +0000036892 00000 n +0000037261 00000 n +0000037292 00000 n +0000037145 00000 n +0000037176 00000 n +0000037500 00000 n +0000037645 00000 n +0000037816 00000 n +0000037925 00000 n +0000038034 00000 n +0000038144 00000 n +0000038988 00000 n +0000039043 00000 n +0000039364 00000 n +0000039442 00000 n +0000039591 00000 n +0000039762 00000 n +0000039841 00000 n +0000039920 00000 n +0000039999 00000 n +0000171940 00000 n +trailer <]>> startxref 172149 %%EOF \ No newline at end of file diff --git a/design/custom/1x/Artboard 1.png b/design/custom/1x/Artboard 1.png new file mode 100644 index 0000000..6c89a21 Binary files /dev/null and b/design/custom/1x/Artboard 1.png differ diff --git a/design/custom/2x/Artboard 1@2x.png b/design/custom/2x/Artboard 1@2x.png new file mode 100644 index 0000000..baa1319 Binary files /dev/null and b/design/custom/2x/Artboard 1@2x.png differ diff --git a/design/custom/2x/elsa-logo.png b/design/custom/2x/elsa-logo.png new file mode 100644 index 0000000..baa1319 Binary files /dev/null and b/design/custom/2x/elsa-logo.png differ diff --git a/design/custom/icon.ai b/design/custom/icon.ai new file mode 100644 index 0000000..23b0030 --- /dev/null +++ b/design/custom/icon.ai @@ -0,0 +1,1411 @@ +%PDF-1.6 %âãÏÓ +1 0 obj <>/OCGs[22 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + icon + + + Adobe Illustrator 26.5 (Macintosh) + 2023-12-25T11:51:24+01:00 + 2023-12-25T11:51:24+01:00 + 2023-12-25T11:51:24+01:00 + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUj83+dvLHlDSzq fmG/jsrfcRK28krAV4RRirO3yHzxV83eeP8AnL7XLqSS28m6emn2u4TUL0Ca5P8AlLECYk+Tc8NK 8c178zvzC192bVvMN9cK9eUImaOHfrSGMpGPoXChjTuzsXclmYksxNSSepJxVrFXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq2jsjB0JVlIKsDQgjoQcVZLoX5m/mFoLKdJ8w31si0 pD6zyQ7dKxSF4z/wOKvY/I//ADl9rlrJHbectPTULXYPqFkBDcj/ACmiJET/ACXhgpL6R8oedvLH m/Sxqfl6/jvbfYSqu0kTEV4SxmjI3zHywKnmKuxV2KvPPzj/ADj0j8utIRmQXmu3gP6O06tAQNjL KR9mNfvY7DuQq+JfNnm/zD5s1iXV9evHvLyXYFtkjStQkaD4UQeAySEmxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpz5T83+YfKesRavoN49neRbErukiVqUk Q/C6HwOKvtr8nPzj0j8xdIdlQWeu2YH6R06tQAdhLET9qNvvU7HsTFL0PFUj87eb9L8oeWL/AMw6 mf8AR7KPksQIDSyHaOJK/tOxA/HFX5/eb/NmsebPMN5r2ry+reXj8iBXhGg2SNAeiIuwySEmxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpz5Q82ax5T8 w2evaRL6V5ZvyANeEiHZ43A6o67HFX6A+SfN+l+b/LFh5h0w/wCj3sfJoiQWikG0kT0/aRgR+ORS +bv+cvvPEl1rmn+TbaT/AEXT0F7qCA9bmYERK3+pEeQ/18IV87YUOxV2KroopZpFiiRpJXPFEQFm JPYAbnDGJJoc2MpiIsmgGQ2X5eebbsIwsvQjffnO6pT/AFkJ9Qf8Dmwx9lZ5fw17/wAW6fN7QaPH Y4+IjuBP28vtTL/lUvmT/f8Aaf8AByf9U8yP5Dzd8ft/U4f+ivTfzZ/If8U7/lUvmT/f9p/wcn/V PH+Q83fH7f1L/or0382fyH/FO/5VL5k/3/af8HJ/1Tx/kPN3x+39S/6K9N/Nn8h/xTv+VS+ZP9/2 n/Byf9U8f5Dzd8ft/Uv+ivTfzZ/If8U7/lUvmT/f9p/wcn/VPH+Q83fH7f1L/or0382fyH/FO/5V L5k/3/af8HJ/1Tx/kPN3x+39S/6K9N/Nn8h/xTv+VS+ZP9/2n/Byf9U8f5Dzd8ft/Uv+ivTfzZ/I f8U7/lUvmT/f9p/wcn/VPH+Q83fH7f1L/or0382fyH/FJJ5k8p6l5fa3F68T/WQ5jMLM32KVryVf 5hmFq9DPBXFW/c7Ps7tXFq+LgEhw1z8/ie5Jcw3ZuxVPvLnkvVtft5Z7OSFI4X9NvWZlJNK7cVbM 7Sdn5M4JjW3e6ntHtnDpJCMxIki9q/WE3/5VL5k/3/af8HJ/1TzL/kPN3x+39Tr/APRXpv5s/kP+ Kd/yqXzJ/v8AtP8Ag5P+qeP8h5u+P2/qX/RXpv5s/kP+Kd/yqXzJ/v8AtP8Ag5P+qeP8h5u+P2/q X/RXpv5s/kP+Kd/yqXzJ/v8AtP8Ag5P+qeP8h5u+P2/qX/RXpv5s/kP+Kd/yqXzJ/v8AtP8Ag5P+ qeP8h5u+P2/qX/RXpv5s/kP+Kd/yqXzJ/v8AtP8Ag5P+qeP8h5u+P2/qX/RXpv5s/kP+Kd/yqXzJ /v8AtP8Ag5P+qeP8h5u+P2/qX/RXpv5s/kP+Kcfym8y0/v7Q+3OT/qnj/Iebvj8z+pf9Fel7p/If 8Uld/wCQPNlmru1i00akDnAyyk18EU8/+FzFy9l54fw37t/2udg7e0mSgJ0f6W328vtY+6OjsjqV dSQykUII6gjMEinbggiw1gS7FXYq+if+cQfPElrrmoeTbmT/AEXUEN7p6E9LmEASqv8ArxDkf9TA UvHPzO159f8AzC8w6szc1uL6YQtWv7mNjHCK+0aKMKGM4q7FU78reU9Q8wXZSH91axkfWLlh8Kg9 l/manbM3RaGeeVDaI5l1fanauPSQuW8zyj+Oj2LQ/LekaJB6djAFcikk7fFK/wDrN/Abe2ddptJj wioj49XzjXdpZtTK8h26DoPh+CmmZLguxV2KuxV2KuxV2KuxV2KvNfzi+1pPyuP+Zec52/8AwfH9 D2vshyy/5v8AvnnGc89o7FXqv5Rf8ce9/wCYj/jRc6jsL+7l/W/Q8F7W/wB9D+r+ks8zePJuxV2K uxV2KuxV2KuxV2KpN5g8p6NrkRF3CFuaUju4wBKtOm/7Q9jmHqtDjzD1Dfv6uy7P7VzaU+g+n+ae X7PeHjnmPy5f6Dfm1uhyjapt7gCiSIO48CO47fcc5HV6SeCfDL4HvfSOzu0cerx8cOfUdQfxyKVZ iue7FWTfllrraD+YXl7Vg3FLa+h9Y1p+5kcRyivvG7Yqxp3Z2LuSzMSWYmpJPUk4q1iqI06wudQv oLK2XlPcOEQb0Fe5oDsOpPhlmLEckhGPMtOozxw4zOX0xF/j9D3vRNHs9H02KwtFpHGPif8Aadz9 p29z/Z0zudPp44oCMXybW6yeoynJPmfsHcjsvcV2KuxV2KuxV2KuxV2KuxV2KvNfzi+1pPyuP+Ze c52//B8f0Pa+yHLL/m/755xnPPaOxV6r+UX/ABx73/mI/wCNFzqOwv7uX9b9DwXtb/fQ/q/pLPM3 jybsVdirsVdirsVdirsVdirsVSrzNoFvrmky2UtFkPx28v8AJIPsnodux9sxdZpRmxmJ+Hvc/s3X y0uYZBy6jvH45ebwe4gmt55LeZeE0LtHIh6hlNCNvAjOHlExJB5h9Xx5BOIlHcEWFPIs20dkYOhK spBVgaEEdCDirWKuxVnP5Taas+tXN84BWzi4pXqJJiQCP9grD6c3fYeHiyGX80ff+C8t7V6nhwRx j+M/ZH9pD1jOpfP3Yq7FXYq7FXYq7FXYq7FXYq7FXmv5xfa0n5XH/MvOc7f/AIPj+h7X2Q5Zf83/ AHzzjOee0dir1X8ov+OPe/8AMR/xoudR2F/dy/rfoeC9rf76H9X9JZ5m8eTdirsVdirsVdirsVdi rsVdirsVeN/mfYRWvml5I9vrcKTstAAGqYzSnj6dfmc5DtnEI57H8Qv9H6H0n2ZznJpAD/BIx/T+ mmJZqnoHYq7FXYq9I/Jz/pb/APRv/wAzc6LsD+P/ADf0vF+2H+S/z/8AevSc6J4p2KuxV2KuxV2K uxV2KuxV2KuxV5r+cX2tJ+Vx/wAy85zt/wDg+P6HtfZDll/zf9884znntHYq9V/KL/jj3v8AzEf8 aLnUdhf3cv636Hgva3++h/V/SWeZvHk3Yq7FXYq7FXYq7FXYq7FXYq7FXmf5woBNpT92WcH6Ch/j nN9vDeB9/wCh7f2QO2Qf1f0vOs597J2KuxV2KvSPyc/6W/8A0b/8zc6LsD+P/N/S8X7Yf5L/AD/9 69JzoninYq7FXYq7FXYq7FXYq7FXYq7FXmv5xfa0n5XH/MvOc7f/AIPj+h7X2Q5Zf83/AHzzjOee 0dir1X8ov+OPe/8AMR/xoudR2F/dy/rfoeC9rf76H9X9JZ5m8eTdirsVdirsVdirsVdirsVdirsV ea/nF9rSflcf8y85zt/+D4/oe19kOWX/ADf9884znntHYq7FXYqzr8pdTWDWLmwcgC9iDIT1Lw1I Uf7FmP0Zu+w83DkMP5w+78F5X2r0xlhjkH8B+yX7QPm9XzqXgHYq7FXYq7FXYq7FXYq7FXYq7FXm v5xfa0n5XH/MvOc7f/g+P6HtfZDll/zf9884znntHYq9V/KL/jj3v/MR/wAaLnUdhf3cv636Hgva 3++h/V/SWeZvHk3Yq7FXYq7FXYq7FXYq7FXYq7FXjv5oamLvzKbdGJjsY1iO9V5t8bEU/wBYKfln I9s5uPNQ/hFPo/sxpvD0vEeczfw5D9fxYhmpeidirsVdiqK0vUZ9N1G3voP723cOBWgIHVTTsw2O W4cpxzEhzDRqtPHNjljlykK/HufQNndwXlpDd27coJ0WSNulVYVG2d5jmJxEhyL5DmxSxzMJfVE0 VbJtbsVdirsVdirsVdirsVdirsVea/nF9rSflcf8y85zt/8Ag+P6HtfZDll/zf8AfPOM557R2KvV fyi/4497/wAxH/Gi51HYX93L+t+h4L2t/vof1f0lnmbx5N2KuxV2KuxV2KuxV2KuxV2KoPWNTg0v TLm/n/u7dC1OnJuiqP8AWYgZTnzDFAzPRydJppZ8sccecj/afgHz9c3E1zcS3E7c5pnaSV9hVnNW O225OcHOZkSTzL67jxxhERjtGIofBTyLN2KuxV2KuxV6R+VXmQUfQrlv5pbEn75I+v8Asht/NnRd i6v/ACR94/SP0/N4v2p7N5aiPul+g/o+T0nOieKdirsVdirsVdirsVdirsVdirzX84vtaT8rj/mX nOdv/wAHx/Q9r7Icsv8Am/755xnPPaOxV6r+UX/HHvf+Yj/jRc6jsL+7l/W/Q8F7W/30P6v6SzzN 48m7FXYq7FXYq7FXYq7FXYq7FXlf5o+ZlurtdGtXDQWrcrplNQ03Th/sO+/X5Zy/bOs4peHHlHn7 /wBn45Pe+zHZvhw8eY9Uvp/q9/x+73sCzRvWOxV2KuxV2KuxVfDNLDKk0TlJY2DxupoVZTUEH2OG MiDY5hjOAkDEiwXtvk3zXBr+n1aiahAALqEdK9A6/wCS1Po6e57Ts/XDPD+mOf63zDtjsqWkybb4 5fSf0HzH2shzPdO7FXYq7FXYq7FXYq7FXYq81/OL7Wk/K4/5l5znb/8AB8f0Pa+yHLL/AJv++ecZ zz2jsVeq/lF/xx73/mI/40XOo7C/u5f1v0PBe1v99D+r+ks8zePJuxV2KuxV2KuxV2KuxV2KsW89 ecI9Dsjb2zA6pcKfRGx9NenqMD/wtepzWdpa8YY0PrPLy8/1O+7D7IOqnxSH7qPPz8v1+Txh3d3Z 3Ys7ElmJqST1JOceTb6UAAKDWBLsVdirsVdirsVdiqK0vVL3S72O9spDHPGdj2I7qw7g5bhzSxyE ondx9VpYZ4GExcS9o8qecdO8wQcUPo38agz2rHf/AFk/mWv3d+2dhotfDONtpdQ+a9q9kZNJLffG eUv0HuP4Cf5nuodirsVdirsVdirsVdirzX84vtaT8rj/AJl5znb/APB8f0Pa+yHLL/m/755xnPPa OxV6r+UX/HHvf+Yj/jRc6jsL+7l/W/Q8F7W/30P6v6SzzN48m7FXYq7FXYq7FXYq7FWM+b/O9loM LQxFbjVGH7u3rUJXo0tDsPbqfxzW6/tGOAUN59363edkdiz1UuI+nF39/lH9fT7HjV7e3d9dy3d3 KZriZuUkjdSf4AdAB0zkMmSU5GUjZL6RhwwxQEICojkFHINrsVdirsVdirsVdirsVdiqpb3E9tOk 9vI0U0ZqkiEqwPsRkoTMTYNFhkxxnExkLiej0jyz+acThLbXV4PsBexr8J26yIOh91FPYZ0Wj7aB 9OX5/r/Y8X2l7LkXLT7j+af0H9fzL0G3ube5hWe3lSaF90kjYMp7bEbZvoTEhYNh5DJjlCXDIESH QqmSYOxV2KuxV2KuxV5r+cX2tJ+Vx/zLznO3/wCD4/oe19kOWX/N/wB884znntHYq9V/KL/jj3v/ ADEf8aLnUdhf3cv636Hgva3++h/V/SWeZvHk3Yq7FXYq7FXYqoXl7aWVu9zdzJBAn2pHIA+W/f2y GTJGAuRoNuHDPLIRgDKR7nnfmf8ANJnD2uhKVU7NfOKN3r6aHp/rN93fOf1nbV+nF/pv1fj4PZdm ey9VPUf6UfpP6B8+jzuSSSWRpJGLyOSzuxJZmJqSSepOc+SSbL2MYiIAAoBbgS7FXYq7FXYq7FXY q9k/IT8q9F/MTy/5w0+9b6tqFqdPk0vUVXk0MjC6DAjblG/Ec1rvQHqBgKvN/OfkvzD5O12fRdct jBdRGscgqYpo6/DLE9ByRv7DQ1GFUjxV2KuxVG6XreraVL6un3Ulux3ZVNUbYj4kNVbr3GXYdRkx G4GnF1Wiw5xWSIl9/wADzHwZvpP5uXCcY9VsxKK/FPbni1AP99tsxJ/yhm6wdukbZI35j9X7Q8xq /ZKJ3wzryl+sfqLNNG83+X9X4LaXaid6f6NL+7lqRUgKftU78ajNxp9fiy/Sd+7r+Pc8zrOyNRp7 M4+n+cNx+z40nOZjrXYq7FXYq81/OL7Wk/K4/wCZec52/wDwfH9D2vshyy/5v++ecZzz2jsVeq/l F/xx73/mI/40XOo7C/u5f1v0PBe1v99D+r+ks8zePJuxV2KuxVItY87eXNJ5JPdCW4WoNvB+8eoN Cpp8Kn/WIzB1HaOHFzNnuG/4+LtdH2LqdRvGNR75bD9Z+ALCtX/Nu/lDx6XarbKeQE8x9SSh6MFF FU/PkM0+ftyR2gK8zv8Aj7XptJ7J440csjLyGw+fM/YwrUtV1LU7j6xf3D3EvYudgD2VRso9gM02 bPPIbmbL02m0uLBHhxxER+Pmhcqch2KuxVk/5ffl35k8966mk6JDy40a8u32ht4iac5G/Uo3PbFW cf8AOQ35d6B5Dk8saPpCcmNlK97eOB6txN6gBd/Afyr0A+/AFeQYVdirsVdir6b/AOcLP+mx/wC3 b/2N4Cl7t58/Lzyv550Y6Xr1t6qrVra6T4Z4HIpziehp7g1U9wcCvjX81PyM83eQbh7iSM6l5fJ/ c6vAp4qCaBZ0FTE3z+E9iemFDzjCrsVdirsVdirJND8/+YtKKp631y1G3oXFWoNvsv8AaXYUG9Pb Njpu1M2La+KPcXS67sDTZ964Jd8f0jkfv83pHl3z9oeslIS/1O+bb6tMftHb+7f7LbnYbN7Z0Ok7 TxZtvpl3H9B/B8ni+0Owc+muVccO8fpHT7vNkubJ0jsVea/nF9rSflcf8y85zt/+D4/oe19kOWX/ ADf9884znntHYq9V/KL/AI497/zEf8aLnUdhf3cv636Hgva3++h/V/SWeZvHk3YqxXzD+YuiaSzQ Qn69eLsYoiAikdnk3A+QB96Zq9V2rixbD1S8v1u/7P8AZ7PqPVL0Q7zz+A/XTzbXPO/mHWOSTXBh tWqDbQVRCCKENvyav+UTnO6ntHLl2JqPcHtND2JptPvGPFL+dLc/qHwSHMF2zsVdirsVdir1X8pv +cffNXnl4tQu1bSfLRILX8q0knXuLaM/a/1z8PzIpgtX2N5O8l+XPJ+ixaPoNotraR/E7dZJZCKG SV+ruadfoG2BL5s/5zL/AOUm8u/8wU3/ACdwhD53wq7FXYq7FX03/wA4Wf8ATY/9u3/sbwFL6bwK tmhimieGZFkikUpJG4DKysKEEHYgjFXhP5k/84p+WtcaXUPKUqaFqLVZrJgWsZGO+yrVoP8AYAr4 LhtXzV50/LDzz5MmKeYNKlt4C3GO+QerbPUmnGZKpU0rxJDe2FDFsVdirsVdirsVZj5X/MjU9LK2 +ocr6xFAKms0Yr+yx+0P8lvoIzb6PtaePafqj9oec7T9nMWe5Y/Rk/2J946e8fIvVdM1TT9TtVur GdZ4G25KdwaA8WHVTv0OdRhzQyR4omw8DqdLkwT4Mg4Zfj5sA/OL7Wk/K4/5l5oe3/4Pj+h632Q5 Zf8AN/3zzjOee0dir1X8ov8Ajj3v/MR/xoudR2F/dy/rfoeC9rf76H9X9JZbrOt6bo9m13fyiOMb Io3d2/lRe5/zObXUaiGKPFMvPaPRZdRPgxiz9g97yfzR+YOq6yXt7cmz041HpIfjkUin7xh2P8o2 +ectre1J5th6Yff7/wBT6B2Z2Bi01Sl68nf0HuH6efuYrmrd87FXYq7FXYqzPyN+UHn/AM6ujaLp b/UWNG1O5/c2o3oSJGHx07iMMfbFX0x+Wn/OL3lDy00Oo+YWXzBrCAMI5FpZRP8A5EJ/vCP5pNu/ EHBaXtYAAAAoBsAMCuxV8o/85l/8pN5d/wCYKb/k7hCHzvhV2KuxV2Kvpv8A5ws/6bH/ALdv/Y3g KX03gV2KuxVbNDFNE8UyLJFICskbgMrKdiCDsQcVeX+bf+ca/wAq/MReaPT20W8fcz6YwhXbt6BD wAePFAffDavDfOf/ADiX560hZLny9cw+YLRdxCv+jXdO/wC7cmNqe0lT/LjaHi2paZqWmXkljqVr NZXsJpLbXEbRSKTv8SOAwwqhsVdirsVTLQvMGp6JeC5sZONaerEd0kUdmH8eozI02qnhlxRP7XC1 2gxamHDkHuPUe5PfPnmjT/MFrpM1tVJ41m+s27VrGzcKDlQBgeJoR+HTM7tPWQzxgY8xdju5Oq7C 7MyaSeWMt4nh4T38/l+ObEM1L0TsVZt5N84WHl/y9e8x619JPWC2FRX4AOTN2UU+ebns/XxwYpXv K9g8x2x2Rk1eohW0BHc/Hl72LaxrOoaveveX0pklbZV6Ii9lRewH+3vms1GonllxSO7vdHo8engI YxQ+0+ZQWUuU7FXYqjdH0XWNav00/SLKe/vZPsW1tG0rkDqeKgmg7ntir27yX/ziL5v1IJceaL6H Q7c7/VYqXV0d+jcWESVHQ829xgtXuPlD/nHf8rPLPCVNKGq3qf8AH3qZFyfEUiIWAEdiI6++C0vS VVVUKoCqooANgAMVbxV2KuxV8o/85l/8pN5d/wCYKb/k7hCHzvhV2KuxV2Kvpv8A5ws/6bH/ALdv /Y3gKX03gV2KuxV2KuxV2KpD5u8h+UfN9ibPzDpkN8gBEUrLxmiqa1imWkif7E798VfMH5n/APOK vmDQ1l1PyfJJremLVnsGA+vRr/khQFnH+qA3+SeuG0PB3RkYo4KspIZSKEEdQRhVrFXYq7FXYq7F XYq7FXYquiilmkWKJGklchURAWZiegAG5xAtBIAsvoP8sP8AnFDU9Ujh1TztO2m2TgPFpVuVN06n cerJ8SRA7bCrf6pwEpfTXlnyj5Z8r6eNP8v6dDp1qKclhX4nI2DSOavI3uxJwJTfFXYq7FXYq7FX Yq+Uf+cy/wDlJvLv/MFN/wAncIQ+d8KuxV2KuxV9N/8AOFn/AE2P/bt/7G8BS+m8CuxV2KuxV2Ku xV2KuxV5P+cH/OP3l3z1FLqWnhNL80BSUvFFIrhgNluVUb+HqAch/lAUw2r408yeWtb8taxcaPrd o9nqFsaSQv3B6MrCoZW7MNjhQlmKuxV2KuxV2KuxVOvKPk7zD5u1qLRtBtGu72QFyB8KRov2pJHP woor1PfbqcQgmg+yPyj/ACC8t+RoY7+7VNS8xEAveOKpERvSFT03/a65IzrYNYxkm5fLoHqmVtzs VdirsVdirsVdirsVfKP/ADmX/wApN5d/5gpv+TuEIfO+FXYq7FXYq+m/+cLP+mx/7dv/AGN4Cl9N 4FdirsVdirsVdirsVdirsVYB+cH5RaN+YehGKQLba7aqx0vUqbq3X0paCrRMeo7dR7qvhfXtC1XQ dYu9H1a3a11GykMVxA/UMNwQehVgQysNiNxtkkIDFXYq7FXYqnHlHynrXmzzDaaDo0Pq314/FSdk RBu8kjb0RF3P4b7Yq+7vyw/LLQfy/wDLsel6comu5KPqOpMoWW4l8T14ovRErsPEkkxSzDFXYq7F XYq7FXYq7FXYq7FXyj/zmX/yk3l3/mCm/wCTuEIfO+FXYq7FXYq+m/8AnCz/AKbH/t2/9jeApfTe BXYq7FXYq7FXYq7FXYq7FXYq8C/5yo/K79NaInnHTIq6lpMfDUFUCstoDUMfExEn3ofbJxAI82uZ II7nyNgZuxV2KuxV9tf845/lRH5M8qJquowBfMmsostyXHxwQH4o7cV3U/tSD+bY/ZGApeuYFdir sVdirsVdirsVdirsVdir5R/5zL/5Sby7/wAwU3/J3CEPnfCrsVdirsVfTf8AzhZ/02P/AG7f+xvA UvpvArsVdirsVdirsVdirsVdirsVadEdGR1DIwIZSKgg7EEHFX5+fm/5KHk38wtW0SJStisnr6dW v+8049SMAnc8K8CfFTkkMNxV2KvSf+cfPI8Xm78y7C3ukEmm6Yp1G+Rtw6QMojQgggh5WQMO61wF X3bgS7FXYq7FXYq7FXYq7FXYq7FXYq+Uf+cy/wDlJvLv/MFN/wAncIQ+d8KuxV2KuxV9K/8AOF93 Et55stCf3s0djKo/yYmnVvxlGApfUOBXYq7FXYq7FXYq7FXYq7FXYq7FXyX/AM5k2sK+cNBulFJp dPaN28VjmYr/AMnDhCHz7hV2Kvp7/nC+zh9LzXeEVmLWUKmm4WkzGh/yjT7sBS+mMCuxV2KuxV2K uxV2KuxV2KuxV2Kvkb/nMa8V/POi2YYEwaYJGUdQZZ5Buf8AnnhCHgWFXYq7FXYq9R/5xv8AOMPl n80LH61II7HWEbTbh2PwqZmVoWP/AD2RBXsCcBV9y4EuxV2KuxV2KuxV2KuxV2KuxV2KvlH/AJzL /wCUm8u/8wU3/J3CEPnfCrsVfUv/ADhh/wAczzV/xms/+IS4Cl9I4FdirsVdirsVdirsVdirsVdi riQBU9MVfAX52ecYvNv5laxqttJ6lgkgtbBhupgtx6YZfZ2Bf6ckhg2KuxVt0ZGKOCrKSGUihBHU EYq1irgSCCDQjcEYq+3PyA/OS288aAmmalMF806ZGFukY0NzEuwuE8Sf92Ds2/QjAUvWsCuxV2Ku xV2KuxV2KuxV2KuxV8o/85l/8pN5d/5gpv8Ak7hCHzvhV2KvqX/nDD/jmeav+M1n/wAQlwFL6RwK 7FXYq7FXYq7FXYq7FXYq7FXhv/OSf5y23lvRZ/KejXAbzFqUZju2jNTaW0g+IsR0kkU0UdQPi2+G pCvjvCh2KtojOwRAWZiAqgVJJ6ADFWS/mdoL6B+YXmHSWXgtvfTGFaU/cyMZITT3jdTirGcVdiqK 0rVdR0nUbfUtNuZLS/tXElvcxMVdGHcEfjir6f8Ay3/5y20u4ghsPPUBs7tQFOsWyF4HptylhWro fHgCPZcFJe6aF508o6/Gr6LrNnqAYVCQTxu4r2ZAean2IwKnOKuxV2KuxV2KuxV2KuxV8o/85l/8 pN5d/wCYKb/k7hCHzvhV2KvqX/nDD/jmeav+M1n/AMQlwFL6RwK7FXYq7FXYq7FXYq7FUh8w+fvJ Xl2J5Nb1uzseFaxSTL6pp1CxKTIx9guKvAvzM/5y1R4ZtN8hQMrNVDrl0gFB4wQMD9DSf8DhpXzV eXl3e3Ut3eTPc3Vw5knnlYvI7saszM1SST3OFCjirsVZN+WOgvr/AOYXl7SVXmtxfQmZaV/cxsJJ jT2jRjir2P8A5y+8jva65p/nK2j/ANG1FBZagwGwuIQTEzH/AC4hxH+pgCXzthQ7FXYq7FXYqiI9 Qv40CR3MqIuyqrsAPkAcVb/Smp/8tc3/ACMf+uKu/Smp/wDLXN/yMf8Arirv0pqf/LXN/wAjH/ri rv0pqf8Ay1zf8jH/AK4q79Kan/y1zf8AIx/64q79Kan/AMtc3/Ix/wCuKu/Smp/8tc3/ACMf+uKq U1zcTkGeV5SNgXYtT78VU8VdiqrDd3UAIgmeIN9rgxWtPGhxVU/Smp/8tc3/ACMf+uKu/Smp/wDL XN/yMf8Arirv0pqf/LXN/wAjH/rirv0pqf8Ay1zf8jH/AK4q79Kan/y1zf8AIx/64q79Kan/AMtc 3/Ix/wCuKu/Smp/8tc3/ACMf+uKrZb++lQxy3MskbdUZ2INN+hOKqGKuxV2KuxV2Kvon/nEHyO91 rmoecrmP/RtOQ2WnsRsbiYAysp/yIjxP+vgKX0j528o6Z5v8r3/l7Uh/o19HxEoALRSA8o5Ur+0j gH8MCvz+83+U9Y8p+YbzQdXi9K8s34kivCRDukiE9UddxkkJNirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVTnyh5T1jzZ5hs9B0iL1by8fiCa8I0G7yOR 0RF3OKv0B8k+UNL8oeWLDy9pg/0eyj4tKQA0sh3klen7TsSfwyKU8xV55+cX5O6P+Y2jojuLLXbI N+jtR41pXcxSgbtGx+lTuO4Kr4l82+T/ADF5S1iXSNes3s7yPdeW6SJWgkicfC6HxH68khJsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqc+U/KHmHzZrEWkaD ZveXku5C7JGlaF5HPwog8Tir7a/J38ndH/LnR3RHF7rt6F/SOo8aVpuIogd1jU/Sx3PYCKXoeKux V2KpJ5u8leWPN2lnTfMNhHfW25jLCkkTH9uKRaOje6n57Yq+bvO//OIGtW0klz5O1FL+23K2F8RD cAfyrKB6Tn/WCYbV45rv5YfmHoLsuq+Xb+3VK8phC8kO3hLGHjP0NhQxl0dHKOpV1NGVhQg+4OKt Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FW0R3cIilnY0VVFST7AYqybQvyw/ MPXnVdK8u39wr04zGF44d/GWQJGPpbFXsfkj/nEDW7mSO5846ilhbbFrCxImuGHdWlI9KP5qHwWl 9IeUfJPlfyhpg03y9YR2NtsZStTJKwFOcsjVd2+Z+WBU8xV2Kv8A/9k= + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:5b037114-f6d9-484c-a154-e834809ae8de + uuid:4010bf15-d98d-6d47-bc18-f9601f2eb18d + + uuid:89ff6c5e-a30b-44e6-8334-f4156ed365d8 + xmp.did:da27c896-85ce-134e-a48c-68087001d90a + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:5b037114-f6d9-484c-a154-e834809ae8de + 2021-02-26T10:24:48+01:00 + Adobe Illustrator 25.2 (Windows) + / + + + + Web + Document + AIRobin + 1 + False + False + + 800.000000 + 600.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Web Color Group + 1 + + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + Adobe PDF library 16.07 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 27 0 R/TrimBox[0.0 0.0 800.0 600.0]/Type/Page>> endobj 24 0 obj <>stream +H‰lWK®É Ü÷)ê]J2ÿ[Ë€W†aÌbИϢ%@ÖýG³>=3ý’U•É$ƒÁà—ÿ|ݾüûkÚþñϯÛãÇ#m-¥mà¿'ÿøßo�_·ï�/_IÛëç–ö4\ÿoüÿÛöó…ÇÿÂã?~>~l¶%ü³­Œ¼Û°¹åž÷™Ëöúöà“o�§íîu{Ö½ùÜžs¯–·gn»¹mÏRwŸxZÎÈÛëñlu·äx¿ì­â�>ö9±nyo¿cì=c£îûÀ_,Kž{N¶½O{ö»Á|oØcÒæm¯µÓñ´Oîñ'œ}šåÝͶoZxÝ nýì8Z®ûà´Vh˜ø¶Ð7˜àšÛ“á/ûl= •Î/�NÃåõizßL†`5[&ãO{³Qð6ܲ׬éÖIJÊ$ ðð1÷�D0P>Ë-pt’ÏûÞà,C>ð’2på„_¤ vì=|Ù|ÏürRI‚Ï™o$œÎ䤽õX'8þ¬<gt¤_⋊‹ðT¤³LüÖ¯pVï³²-ßžêu‡KظÃawæŠþ 4¹ +Ø¥®\ùcm‘ÌÆè•^ð!RÙ2+!Pð¬vAò¥:›Œ,òk/SÉ®ð(Þy–)ÅIAEö'wÄÆú<£æ˜LÜ?ÀBwå”Ðèww¡ÁËšl2¬©žqâ‚(ÈD€óœƒKXÔÆº<ÈÆäÉ*k¢Ì8© +YØS%„÷Bh9*Ñ«øÑu©Ãäò¾ ‹viD X|ô4 tâ�µ~]Οv¿ÐÁ¼ÑúòÎ"†šq–óÉ>¦¢£ë½ÊT ‹°xf/æ7ª;ü¾Èð²,®¼]÷ˆ>]@ˆÄV(ËÿH‚)¾Ÿ]¦u�ÆAmÄ–Ý[8œ³…¥¹…eæ‹íÚ +‘—oUU¦1_Û�ü1!”ˆÌ1Ë@ô 6„ +Hk½hh ºZ£û²p +ŒC´œkˆ5ËÑP—E¨a¯~ßmÕ£»ª¢rU­Å¹§åuºvšÞPŒB³ @P6»ö=×ëì×cY–ïc½ü�íÖÕnqx=~ü÷¦Ì3*6�³ð�ø=¤9»!a"‰�Çl¢RQ[”.Òìà+ìèQ­ñ _©‰é+nôz°¾! ·Ì¾Ф^£ŒEXÀcðqL`BÐE.}ƒø(�¥t=„¼}‡‚üÜõ¯÷‚Š2À[rLt›ûÈ‘Åk´j|� EjȇÙCsZÉK2;�OYËJYL +_¤Š¯’æó¡â_«R„U`¤30]V'*b0oà œ·QO}ž‡Cü"‰1p [«q�}°‰�4“fð6éÉØVB»”UÆž�`JR#¢™çØ�NÃåõizßL™í¯.“)·dt¹ÃЦVCsšU "2ü 'ºZÅйßâV—ªšCTΈSMó `’\‹ ˆ+ÁÁ�¢ +:œÕ–æ”À‰ƒ-/kÎé!³å'7ù¥Q*T =µs¤ÔÌ`£ ,P°kg¥Z³ z¶…”¨S�Ö¤Ö;ãÏ §€Kl=5ŽÊMy5$F»p¸�Ž5XÊ;ì¸þð:ªÚ-™À"BZ‹!—-­x0>[pc±o§ú¨±:iW‰hn¡²ÃÚbœRQÔQŽ&)ÑÙÙiXÄPíÖ4K±áÄ ’ôE ]Ÿ‘ØëLò˜z‰Q3…SÇèºaL�?מ YB·ª~Í8·¨èÜ×Ü÷™FÐ�„ÓÚ¢+!"Ê.Ö¤aˆ5 ™���šäͨÑEà>i™ +…Îq<¡ˆZ±¢ì«Ö©®Ž Î , 5|8QcJšF4,°^â„=À”a¸\¸¦�Ú#¦ê s„N‡v¡ <E¤ŸòÅ8”kÅÚ�”OÀÆ‚·3ÄŸB �Ð’ï;T…‡aqÌû²,úÁލÏrÐÚÆÊÍ!ê¨i}#ivðµ$|@XY’o,_.Nã�4x—ƒö8"iÀy†¬2ãÄÒ8Zû„ü·¨¡ �.Ëb1ز uâœÕE†kíÑÕ\Ã"ä±�¾ï6ŽŶs_eȾuöiyþ�M-ãZ3QÑ®b×s½Nƨ–åÝûX/ïµÛy³{,BÞcÀ¿íçëûß*}¦7š§ÒOâ‘ÑyRŠ:îã’Ðà¬\»$4Š�Œu“Ð‰Žæ›„†a°­Ÿzîz™n´Ó"‡‚&Š(–€n¬vègL!=”ù!Ÿ)™©C=ƒW²¤ßRÏü¢ñŒ ×qigˆGc.í iHмigXB,/ñ ªÅ/ñ éøöË9Ž¢W™ X5ü“±Ê¡ïáûŸÀ¯rHm)s¢`©È�ÀFãa”qÂsš ¼à˜¬BÂEÏXOqcZôŒÕdÕù¢gÁdÌ›žIkl'<ËPô¨ÏT5,x[¦qÂ3Újò§Ï2 ‰tÁ³,#·žMiá�g�,oÁ³ +ÜidÁ³HB�|Á³@‚®òÀ3ö”¼ .xŽÞ´x†#¬\>stream +8;Z\6_$pJi%&5I6aLs>pp7I%]$:cNO3^>0DQa$NbLXA3hk;WZ1UBXKBN6LS?$Z\c2Ae6J!c+\H3hOR +oi?D47id6G\@"Hoj445$8((E%ht?@:SZ>@/[1_l5*EnOh5.u1_iu5T<5TQt6FI9B; +nqSC$?ZBO4Ia2@TMu&/Uf"[_r6o,.)3)#5#7gGm\'#aT5kMu=ta)9^8J$aU6KV,Kr +!II%IDCJu^a0M7WUs6Y[KKln;&/>)/H4149_r5Po*"L"2iB70r_?q^~> endstream endobj 28 0 obj [/Indexed/DeviceRGB 255 29 0 R] endobj 29 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 22 0 obj <> endobj 30 0 obj [/View/Design] endobj 31 0 obj <>>> endobj 26 0 obj <> endobj 25 0 obj [/ICCBased 32 0 R] endobj 32 0 obj <>stream +H‰œ–yTSwÇoÉž�•°Ãc [€°�5la‘QIBHØADED„ª•2ÖmtFOE�.®c­Ö}êÒõ0êè8´׎�8G�Ng¦Óïï÷9÷wïïÝß½÷�ó '¥ªµÕ0 �Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^�i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +�V�³)g�B£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±Z�L®Ä„?â_øóyxg)Ë”z¥�ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ß�Þô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ�;ÂA4ˆÉ 䀰ÈA9Ð=¨- t�°lÃ`;»Á~pŒƒ�Á ðGp| ®�[`Lƒ‡`<¯ "A ˆ YA�+äùCb(ЇR¡,¨*�T�2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°Ž�Sàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4z�BgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p�0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"E�ÒI2’�ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷�?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@� æP+¨íÔ!ê~êêmê�æD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒ�Ó¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™�˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…�EŒ…Òb�Å~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X�[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„�Æfm“�Ž;'_9 œr�:œ8Ýq¦:‹�ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%�—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† �ž�kï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»Îå�wW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™�™üšhšÕ›B›¯œœ‰œ÷�d�Òž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª�««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½�¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 7 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 26.5.0 %%For: (Sipke Schoorstra) () %%Title: (icon.ai) %%CreationDate: 25/12/2023 11:51 %%Canvassize: 16383 %%BoundingBox: 251 -415 520 -146 %%HiResBoundingBox: 251.035403798006 -415 519.259489936014 -146.798520190379 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 %AI12_BuildNumber: 223 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -600 800 0 %AI3_TemplateBox: 400.5 -300.5 400.5 -300.5 %AI3_TileBox: 12.4000005722046 -597.599999427795 787.600036621094 -2.39996337890625 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI24_LargeCanvasScale: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:24 4 %AI10_OpenToVie: -353.9135451892 99.4616816009047 1.63909380280428 0 8084.09030424616 8200.30076924463 2548 1414 18 0 0 6 20 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: -353.9135451892 99.4616816009047 1.63909380280428 2548 1414 18 0 0 6 20 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %AI17_Begin_Content_if_version_gt:24 4 %AI17_Alternate_Content %AI17_End_Versioned_Content %%PageOrigin:0 -600 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 18 0 obj <>stream +%AI24_ZStandard_Data(µ/ýXlŸŽ +Æ­ +ÐÔPRl¸+üjÀ)d°…�Gho³­µ!AhnÉ•½íÃÉ̉ÅüªfP%îz ¦ ‘Ý[ϼ’›¨Ž§�­Ÿ ÊMÇ­%¦‹é©›a‰aéJ�Ž¢µ?™¤#O'IGΩ±â:, oº GNd’²Ã\D:YUœt8åv ÍXÒ‹dRIÇç,tÇ©=Ò‘\rIެWîŽK+Ò‰²$“«/xÇ/[¦ÚÒÓñ¹åw”_FO#É_œ’¼ãîÈJ?×H[0p\b¢|¦öIümÝœ]Ræ%Uç80" 8ê>p`l € w°9 ÆŒ„ÂXŒ‘†Qƒê £�Á˜ìF‚’0‘(£Z—:C�]Ax_ܘlv Ž1Ɔѩ©ªs¶4ì2LUàâ–Fmì HEÍa3\…q“)ñCž4+™#Oÿ/q(=tD¦Jª™ÞÜŠÙË´^Úf®Íñ(­Ò…\¿ýü¶¡ i*‹w÷Ìš«>™Ãwï�çËWKò„oe�§Ë4¼¢C¿fŽSCMCkMhä¤4J4ÂP$,A‰I, +q"Q +ÏañÄ_‰3˜ÀŸÂTƒ‘xñ³Q˜QvWg‡ºn„Q,:ØÁ‡3Š(Ä!&A•ÆPPe‚�XDýwį2ë°ñUk„XŸi«mùvgs/Ò8,†ŒƒÈS Œô ´S”‚ „¢U•b¨¨¢‡&Æ‘1$tG&¡>:”íáYçd/ ú6è»­²÷8þéJxC›§‡|u­ÑÍ-ÿŸ�å*4™ÍŒs]˜ÎEâ�ÈD!â©dè0ÝH±«£m¥>|œ¥ù‘ÞQ=|Œ+s�±­–QæøÏÆxx÷ ëÎÙSv5úÙ5—=BC ÂH +ÃÎxBaØ]a0ô ˜y +ÅaaG ‰‘P�ÂVÔˆ…¢NaØ 2nàÕ,rQYÇŸÁp¬âÀ`B ÂhQmœ WcQ&†4$k¢Œ+[š†q#Ñð™A ã€î3¤±0.’ Ã@ge”a¡0ic Z ºVâò’nnarjA +:ÐEX+�tÇÌÌ ‹¦>£�%¥9]ï$fÎQ õ­Ä`8e 5M ±0˜—g£Ž4–Äô¸à° (TÀNGSxòÔŸÏ#×<ç †ŽÑ¸bÁ`8 Å0fÔJeç÷Œ�0ï# +�0¸ÀEáƒÁ0ÊŒ3ùƒâ†bJ†�1�Ä!±`h÷ƒba”1P,޽VÃÀ°H ³`X(‡'ÒÂH „ 1ˆnR<É`HE*ÇpÈÂJØPáC^1Ü"ina KØÁ¸¥‘QâgxÑ©Aƒ"an0( Äáè2ê…"�x¢q‡04|V4 µ8 a;žUÏŒ ,4`€Ás'¿ÌAã9ÙiϺ¹Jý–“u ÅW¿#s”e¹Ó¥íSÉwùòê^†éžØi2Ç|ÐÆ(ÿo2G Ý“jiG'e™ü's¼¦ªlø±Ù±#sà´æ·š+3¬*Ûj’p¦ðuˆd_ÆÐÂH(S£ìœ7C¥x©ÎhüðEë6ŽX0Œ�y„1¥²sÞ8 ŠE ø´Â(êð`$ +„¢èVqBÂ[Š*‹=+£³X‹Y,âVãp8ZñÊHòÒèpLã³8Å)Òð�‘íŠÁPԡá°ÈÚ\‚Î8€1¨ \8áƒ_&�ò|†°ƒ®E"aà ãÆXQO¡Ež)‡¼Cº8˜!O´´$üâu;æ0& *8|Ub;|t¦ÇÜqÜ–1Lƨ1FÓ^n¹†ªFƸùС±Xµ…Ž9Œ ,�à�"`……ah€ Ë�—Ry¼*é3G$sÍŽ°Z–8¶Âúõt'µªÆ^i½4ú«2ÏòWY#…G2‡eŽ×éwY¬-1SæhÑ­CCDƒ#sô(Ó(ó%ñ›êAG~Î�œ¾ReŽÌ4”9ÎØÚéŠ2¯ý™+4²Wæ0�ëlº2†ÛYšÇÜáãDÄFˆ:¦8h2IG ( $ã°8<±‹ÄÂpÂE Ä"�H ˆÃF"Â#a#Íâ‡ôÁ‡«z0Ê xâ‰Co{õ“HÄ3�ÊJÊ*0q844¬…NÜ@Ûg³¹ˆ_Þ]o†°ƒÝvf˜•‘Q¢Å`7¬ qxR +Eqx¢a +„qxâ%nŒ…¡0ãð4Ðg0,ˆÃšQ†…QvF‰I(jXÍ52CU•••ËXYY¯—�(D!c U«••YÚá Xôêʰ³óùòðp‰SŒ®vé £†F  µ<ÌD¤"ó‰øá‰/ÎPxÈD%ÂH ” ¦¸…Â`P¾ tS2jŠ ãæ�©XеJµë¹>c¦�¨‘‰8$4F *ãlà #1‰Å¢5J…C¡¨Âpq,ÃbQ Š…¢G‡uÊ0u¨c0†b †.º …¢%†™ÒẠ%É•P ‡º›˜D†�aÁ°X,‹ƒ®Í‚A±H( +ZÔ0ƒ1 éÕbh‘QU ›=¢‰*¦`0t¨DTdtdBJ:A RЂhªEUeuåÂ2²^‡BT¢µ(†«‘•™�ÙÐÒnCX¶0›ëÑÕÙÝùðò~‡C\â·8†3Æ5¹l>Ûèô}0 +¼0ƒ‹„…†‡FÄÄã˜@.�'›”•–—NL#óyHD&R‘‹dÈyO¯Ûï>>ÿŽxâŠ/Îð9ô@‡:Øá>à!?ˆCâ 8, cE¢†8„ˆHÄ‘@( bMP¢–¸L<‘P$ †Ä”§°F*®8(Š„B¡X(³è‚µ°Å-¼ÀE.¾8(†¡ t fÀ‚!Á `XLbJeç& L`þ€HTaPÙó„²qÃ̈"¡0¦Tv ãŒùÂH( ‹©A TvÆd8ƒñ"¡X00Æ@€Á°`P0$ †Ã�á É€ f8†c0b(Ãb±0‹Ä±øâ‹\à·°-º`P, BqE*PaÅ)NaUŒ‚!¡H$ˆÄ!‘ L`â–(£‰I0 "�8 ŽH"aˆB1†Ãâ 8$ˆâp8ü�<ÜÁuèa _ãÚ�Ñd?ëÅDÇáÿñ‰²rÊrìEر¹^Guk•˜{®ÓOÒޱΒîÑa¼‘ïsY›ÊQgð‹x£áäÇG¶²·&Ñ­_Ý£WˆfǪ%[ÉëQ_m&ǯbå.Í·q]§ˆ¤ÆrŒ7ï µ¾æ¹I•Æ!çÙZúäTÝÑ�ÝîóËG¬ÌÃ2–ÍÙÝk–v¢�Øœ_fS=´,¢ÏW¥^s̶Ùy$Vº#¦ÝìEô³MZ},• yÊžx%G÷Û>¾y¼#b9¯åÚ²ö¢ƒŒ5†i=Ù[¼%ÙÎ)Ù�\9Ñ?ÙÛ?»ËÔû¢Áhæ_É2Ö+ ™kis–oµ)ª5ÑtõB'Mu—tTg†“¿?­”l_«“!òM­Ì´üåMúùºC±*»ëXÎTYnzvB7NF¸¼É(8u_—F}– ý|VN=åË~©#UM#Ó«S>ÚUlŲÙK4ü¢¬")QþUvê�ÒäŒa%eúç;¢I2,4úÙX¾J滳èäï MZý¶³+Ý‘_%“4"ß"}}$JAªí ý›JI:ËUß°¯V–‘ëb½žëa+<û˜-¡ê†â°] Ö“¾"jgòzϱË-§¾�’Ð8çÛÍd•‹Œìz¹ã»§é[‰©GÕ\¿§/�ÈhðÙt©•n+–D'¶„Ï“eÚÃì.í I«Ç«EƒmëÊ~Î+U=Ò7h·jÔ”Y'}2Š$U²Ì–�JŸíV;i©w›¡iz¯æSÛ;oO2“lš�ßg•çnW“{ÍX½½†Ñ6%3¢ŸìdÏ_Êá‹Ê>—#ºz^Yý^ˆö#LñPå†J5yFH•ˆvÿÎ`Ú=RCX­}ÎF,KvSw§¢‹±8Åú~¾Iak­gL¼ß gdÜÛöøÎ>Uä#µrëk^~�)d5Äš’`Õj——Õ®®³3Ê߉,¥°‰5¶»gPŽMª»?ËV[÷éX.{·:‰³cºÓa¥²t5w76«÷`mþÊ{-æÒ`5ïeE9·÷J<»wwbkw3²4k£{ÎU2Û{«#}5í½¾“zmwQ‰ß;ôooÝH¾Ulͽn‹ßÎ\~æ%×Ú 6‚¯Èt5Öª_ÙbFû˜êsÆ7ééK´Ó/;I)Ñ^ª4·©H®Þ=%‘ÐùBŸzÜót=±)7:�fÆ#C=Jù3�㔦.eh—ëCOéÑä�s&O³ú‘™Tª[�Ø�ºîSÇ·¤�ŽÎi2ú�UïJt™Ô¤Ã.ù´^áô0Ý–$s£ Ó7X¤£mRÌ2ßóeBØ{Ia�3ã{ 6ÂÐoðÓš¸µ$º4¹ìî5ÍOßèRˆzt·ô«­³Þ}ðNûšëN9'•M´×Q¶°Žì^Αf�&‡½¥!ñ˜>Áë;V峎ý–H¬Z9Rjñƒí‘äqÒÒ—o“¹«„ÞVÊÝJ|J§ø·9¡c‘Ô“.u{'ëd¦ÆgVʧ¥|úµD!êIˆzÐJ“î_þ¤ÔÏT ¾i&ØÖµî‘kŸG+cÉxŸ|ËÛ»Y¦?H%EÅYÚ¨'’£ºˆ”¾ OŽz†ôTÞèÎï{õÂ*+Õ²ÊDz‹YѦš_6#d¥›¯Tæ'I­‰yW³þ°NЊV¹+åUâÝž‹M÷úù¤"¤[cY´óúN�’b�C[ÒŽ£M.ì‘÷ +ÚdÉÙaºçÚ•õn2zÛû]’ÔAiI„¯)ÊkÒÒ–ñRîW[áK7‰¶œ—Ȳø"›´.�Šóû¸#äš~ç³£¼·¦ä\[ %âÝ£|â¢Nñ‡†b­á½2OÒ�½ÒÕ=-/•=Ш¤?ÞĪ ½:)ô£†o?L”|�»¡Ø²R‡Ž¼æÞYËL“•¦V¯"¼ëÒ6¥±4g8’CebMÙÒt;¥Ì�‡^ûÛÃy¼¹{�+z­ãtéNc%ÏTgG˜nÖîW,i–ðYl{àoîîuª{ôõO½3•°äî�I“é».{’ñMÕù˜EUuy÷²C1loÒwt^‘p¨.åiS–Ëz\þ7>�oD³\a¡f('ª*¬Â›«_Ǻgg*üeçÝ +SÊö­ò^Çs_N<»‡É–´éªŽ•ùê©Ü5kÙ½¶”Éÿ8ñz;å‘t踙“»£Ž^ÛÏ¿P/÷‘¿eÚÑ„†#l;÷3#Á÷°Ìãeó'¬º#á‰e©Ó�þF~Ÿ‚ò¿?劵½�Tr=´¹Á£[ÖÁ[f%Û©Fî|·¹’7ƒÃQ[/‰ŽL„æäÙ'{b½ÞÙ›h¹öìØV°tÔT,¤Íne÷Ú…*ç¤y ÞÌ~7(/½¥ø›Ðjï¤ÏGÚ‘ ’ÕôÆÈŽ™$:z¯�È~‰'ItÔÒ3T*úó@˪ګ%¡¢£®,ô£=�êÄ?²LLtEr?jò6ûQ/9$öÃiC¶#Ú…JÏ£ÓíiÁ¡w¤y´l&í6J¹¡Ãð$÷AÕ³´÷nĆ*“ôzÒ�ÝŠ,Wº™»ƒnìÊ~v“"²”qmù3Jßd=˜–鑹ÛeÖ¦jæ¨,J#T¡ËŸŸùfWƪ%µ–¨c¾á™�õ¨éˆe9…ò¸BÄò‹YRÖ§åò™”’Ï1šðWWrz-=w·ä—=[t~�,X=èT�Ûƒ ­l’Ô©Y„¿¤’Oxt°ð~ÞQ^¼ƒ¦M#yµ6,­5-åƒJGõ©²¤®‡“JÆvăÚùuGI;áü}ºÆNœºÉü<äê¹ `à˜ Ç-XÐpBC x ÁÐ� +H�„<Ð`xàÀ¨€80:p3éQ#Š`f²ÍMC·Õr5Dš¡ã}âÖ�9ÃÃæÄ÷it‚-£c¥ðÈ›ß{š)ÉeYêû&¡Þ¬ÕmìdL„T¬zâKÈgU­zÕÚÕ³yOŽŒ1À;ò–Cuª¥¤¢ªÁ;0-¥:j,·È‚DxÜaÖTGÖYYbO.ÉQÆ›`¦÷™cy‹¨Äy”²ªm¯‹åq–Xtç-�:jz’>úÓ¡6QìÔ>}z%‰täÝb>Š�©zQ)/MŒG–Ù\ÝL<¬’ôá»1ë5YBF‡oṖëdcŸiÊo‘øŽ[+¥Ui9;’®pÌŠŽú$ëø•meU¹:>ãËëYh2FÇ™¥t<³}ýð—1ìq-ÑØÉÊâº9”éQuÍØm—`ÑQ/:±­Î×'o$‹g¯RǾYf"Ë«SúRGšåI�´g_ùq/Õ¯z±m$×#}S½^›š$”3ÙßWýOjruXVIíÈ*�Õѯüè0´Ûax“Õ“^g‘ 4tUu¥”é ÖíhZÕÍg‚¦£šbvÔ�­Ü6eyãç%Ô!>m~†Ï-²´§½0Ghþ£Œ†Ž*¬šÙÌ”ÔáØ¤ZW“0çnâ^ÚÉ>tdBs�ÃÛóKÎÕy:;÷ÞÉó$ýs\²¹åd®a�aQÝk’Ç|×ü3;®oò'¶ mŠÏ$‹µckŸ>Ií3T”ê%ÚéÓÖßåàK½üÜ)×™ÁÁå‹EÞ‡3>íÒjð<øšk{‰Rf9øNMÏùý^ó¬CH)EÙtšYçg?éèǪM¡ýæ--™Êb-ïЖ¶X³oˆ&­ÁæamÊ®„µ)I kö[‰2sCv§�L]‘%Q™ÇÐ'2!‘©Ft²fÙû£Dº!“k‘áÕYç«Ý“T}YÑ�“eˆ%; [Ö±éÙ™9KVÇÐIFˆ†6œ±—‘¡%ÉfìT+Á¢ú¦ Ó·)”¢÷U'±_YG¿îŠ· Ñ«µå¬wèšIÒuˆž““U“õòI®œsƒU3YgTXø“;Z’ìXÏžKT¬3£QÝGz!å–%R¯nG.ÖÊeÅc}¤ŠUU&ÃÃ;•¥ ÉQkAÂΤmeó#÷ÄŽv|ccŘ5ÑQ…Cã“÷xm,h#Ù£S³4™k§“¹­ ¹†WæÚ{ôÌÊzu‚-³Ô~'ßLg +Òe�ü±QÒ.¦Ãpªu&Eg.‘MæÈþüªÊv¯ÑʧlL)÷²‹{“ª$3Oõˆ&…¬ Ïc®ÉY‘ŽœÂ;»êBD29:%[‡§®D)�½ë„cFþ[®Nfï¤Û‚uTâá«ô´*ÂÏéH¢‘)²$Õaƒ•T•©ãÌYé#¹*¶v²­’*h„yDdœ©×�0'[…’. a/døI£´cå‡OFL<”±“ÚaßJl½ßÎæ’]S4u:¥ŒÖK5íȤO-‰ÆWßM’L?×$)Ó‰%IiªÉè'¡Ý? Qò6÷¶óaå¹é(<^ñÅì°KÿxhÿËŽÖì÷Çx³ã:þÝ©Bœ”l+¯fðHµÙQ›­·�KG#Ì#óê—ätðžû¯.}š;çäUù(6Ís¹Nd—ßaG¯šk6;öí9ËÍö8’u·¼ñš½ìqΉV³9gµsC%çæ4:®îõ™ÔŽ×²Ï!ï±ÉúÎWšwÜVºMuj1û°1ÂÏØÑóNõº‘›îã-Ìôa«ËL!“Uæ‘ÓG^MyyÉ»ëÏ«üåÝ´n¿¼gçR87d²9¯nĪê°Ñ`ÞÇhR¯¼~䲃šâÒIÎõ¤ê°£™ÛÏôkRµG¿×äѯ/a§²¯›úH]ªÖrýÆ)¦£l†Æ/Û m¡±«£^ªßêI�WcVÓÕ|–Y“Si‰õ8²[žUÉPå\•Ò•Ž<³Ëй:vyv+Ë^�”"ŸN¶<3š”ŽÒ‰¹î�£™rêyƒbxÔóüC9[L®„ðš&S½¶e›Ý,Ū�˜?îRn&‡ÕéYe‘�6—´–«•rýiâHù ª7$òͪäYå1‘?}Éë—ýLŠ3Æ;<¨h&Ï>9ø««žnX1^˜3ˆ$•¥ü=h!-Ë<ú]s¼�|£ØŽ:�ˆbãaÍ“xèÚŽ¤QÝ´Ã +±Y½;¨°‡wCWò.èÃS+§z„ð¨ç¹Œ¬ôk¡ÔÂ'Ñ Qf3³ð…G»©­R>²=Ò¸n&Iʇ�œh“òñD§qˆ¤x�™›DF‚Ø÷xäçì�ºÕ\1öÐÑŽw—«„–9C3…wÑ^Ií�rµçó>Eû =íh3y«2x¼L>–Äãy7· §3w¢ÌæqgfcXS’xئðÌž—wÊ¥åJíìªfgr=œÚ™©Ly4‰ålI¯Y›‘ŒëϙꇹÇú½ }ü£»øòÖ«3ŸSn�¤šFΪ;öŒe?¹(X&•¥ócÁªò­òKRydÍQ~®èŒUyqèü9BÁª?kZbk‰Hš8Ðç�VFHrÿŠIrxù8Ir•Ããx—×3×[ßÈ•½0ó|U#™c#«“rŒ69ù«ÉÓê˜užÐ0™6&yëñ3Ÿr4Ehc‚†H`€ \°@Â.ƒ +ðÀð a‚ +Úæü"—d] PÁà +\è@ƒ4h��A…„*L@ƒ .Phˆ`¡A0� €Ð0�s$hhÀƒÐ0�.H°`q� +pØëÄIXKÿÀ�SðwŦ��³$ŸÎHÉ„òX±tÕå²®ó'v'¹{àÀˆP‡Õ¼OQðH¦.±ª¸ÊOq_´ ’%K†Z²VhðŽ�� ëOžî–N1 Ûr�—ØÊ´C’Ä”ò¡™˜™‹N¨*eè(Ÿ™:1’«L_œvò3ÙÂÂ<•ZO’Ä“80"ëd¥‰B92—œÖ¾©ÆSø³xŠîÍðgx™)Zކn™¤M#¿‘ºJÚÅ åìíäË�è&ç¤,”Á:Ja!IÓæ,•#ΔæeŒCy¼"Š€WwëQŠ^u–ØÂÖË%Wv;=ƒ?¼IÚYÞYg�fÌ÷zžÚ¥��"LsÐuõº¯÷ÛûÞ»“©úމT4sl.ñŽ¥SÖ5ï‰f¹é1zÓ¯k):ÊþªÆ&íËLò{y÷_1 R'±­Î#¡E6iM)•Ëî%驲×�Ñ‹&wÙîˆ~zaÒ=�†k2EåÍ©ŽN¬ÈX±»IŸ;¿U*ÍL(Uú¿š³ÝjFæÇï6•tPæð¤?*ÑsD�jê˜cžÙ©YòÒáØ�‡†îvdyçÆzô¢ÜF°1µ*Gd$Cû|J’è(s2Ó£ ++><×½uÝoÈÆ™Gaþê*ÉWÙ¹"fŽñÞ›×H.:k‹ê²Wg–xv‡%JKDºS¶ð0ú3«æüÒçžCx·¿¤yÿÛ¼?�Ÿo·ÏuŠè@Ã×oòlˆõ”;"‘•!Ú¯iôž�ÛF¿^m?ýŽtS%ãž�k]¿#¬¢ËÆâ³Ó¯¶NJöxYþólÄŽ0'{è*VÉly軦2QZt\_©šó±®’Uh¼`é¥$¢ÎT%žÙ„I„C‰ò¹¢©ÁO¯òÀ÷ù¼²¥4i×�éyÞŒéè—ùâ-ï�ã×Iû(�&ýº)—G=_&ÊÒÆfQ,±ØfæÕŠŸ«´ÖÄÓ&&ç}Ì“¼ý˜ÓˆWHsÇÞuŸ¯siÍJd…VÖÃ2V¨GeCIÅû>Bªšâ§÷Ϯݮ—©©Y¹å)¾UGµO­ãžÕµ–µxtIì�Ä‘éOfc¥Ôi쪨¦4�µUS|eM‘ ú•Sò«˜C4~&žoJtUlìj÷Ç~ôUC[žGÕ³¿ª™~|³ý²ªäŒ(«s-¼ë¼ºlV©+±ß'{Dvö yÆUd²¢Û]J‡¨æ°ê3f)L*3áa¡elYEK<û™«˜–‡ÍU–Q½ª~dK™Ln�U-™‡Õ˜úoö˼†SýåÉ1ÑG†¯j3ëœÊÊÉ#Ḛ́+«0íòecY¯'Ų²Êæ•UFäʺûž*1MÊ$„v–;ô�r£9–ýHš‡ÕMÎãhþ«¹iÇUgW]~’òWy¿ª;®E¿ª»,Ä<¢+2<ðŽVu*)£�“Õ)åúÖ˾§)gŠ,éµ£�ìÅ7;Uwæ«"Ë1«Ë±³š•dz�½é*ªÑŠæ°»³#™Jæ‡åtꈊÎ#¥Öíù gÑjuUƒvCñO>$äãòrònˆ2­CÔ*~hJEû¤Qmôåá!KÕãB«™à4lÍ…fY…–3„?��ç£DÉ#œŽ­•§IeÐÕйdÛÙ=“ðvÉsygÛŠ‚c[Ñ÷ÚŸ$ÑI¶"aÞ«ý^ÚŽVÚï¶›õòÌ&uÇ]�?W&x>ÛØG¶ñ•§| öƦ´›N™ñÆ—7®r5³þÌSæn®št$ž¥¸›^^bš]IWf “ð¬*/E�Õ‘Øžï‰/³<*K�X•®ŽºùTš¯Æª¨îI6ub™¢¼O£ª³¬³l%ÕÅÅt�³ÇéÀ«ÂLÜžûÝœ{%¥ãPfHÌLG¼Â$›q*Ï“CèÚÐq•†žÚLZIŠæ!é¤mJ9VGûœ^•HGÝ¥Mö‡²d³µtïJï©…¯l’ÙgŽÈDd66õš‘œÌ†ÈêÀBײŽä•Cg¥D«";Ñ -í°—pÌîŠcUcgI³œÖ‰ÑYæÜÒÙawÅ´*©;²˜e«Ù«òîÕtìSßÖœ‹3†e2Çü®u¦²Æ:麦aâŠ¦Ž¤¿Ì¦¦§“1³BĺeR"”¢±JÊ¢õ(EDÒ:ì®WgÙo*­#�­$…”e£| ¢Ïjt,žÙ�`ᙕŽú &žXiÐ>du;&�Ì¢Ùä-ÿb‰õ5‡™—V¾ã{V’·6_R‡©î’:.íÕb’zë°=Û++D©£ðnÏyG’ü_8÷»>$•¯“;(Ën²3Rúìì—#cíŽS§ +ÅB¼;~hƒ#ƒ¹£ãìõb‡I/uÐËõe¦ÔÑ£†MÛafŠõpV+i3OžM8mÍuðŽW§—ñ0Ý4÷ úªIBtßœ2}&‡i–7ëªZÈŽÓY§†íhYhw¤C;–î(VÚ|D”ž™¼PÒŽâçf’h}n—HG­¥¡$¶iC<³²lŽÑeÞŽÂ;ËGhãšç3óÜAF6áÜá3ÊøÀ±'')¯=!•ò÷ú)9uØ,3„F†–Cu¶)Úÿëu¹î~vnñÄ>°LÚŸá ÝYé\%+Ê›‘ª«J)'e"ÖiŒRSW,˪²Ž]Q¨µªßäI¹®øê-dVõ9:0Ó=ßiNƒTü™Pª­SèªÍJŸ‡…ærK²WBC|’-[fcWùƒü˱§‡\Az™•]s4šÂ*¬�mÔßU„.™ÚµŒNè*r[™š}ˆPÆ„ìámòò¹|‹”xyeØÓaÝæ$h”•ž9^aþÎTdwV©­°ƒV»ú�ýt¡ás²®î&ÊõÔü¯°ŽëêåJ¹£ÿuõž¦½¡¬ë6¬&–/�8¾¢éŒWOB«WÚê­Ã¤#£É-•­š5b?ªV¾Z/e«ì™%oRê�äQÝ®ŽG¾ð/A¼þU”u¬;¼Ù“RøÖX‘‹™WCvS½Ey|šGVƒÖ£ÂƒìvH6'3y†Nvô“:YÞN + åÈn¦ìˆÜ"#;èÕ²¡Ä9³ÛÙòR]î.+¢ö’Ä^Š¡íÆÊ9LÄ› m2_›3ˆ¶éqvlmxÊ´"Ë> ‘³¦Sv/¾Ð,K÷£w­ºUhŒ§¨”îëTºHRc !¥ˆH€Ó€ @4Œ„ÂAá˜b~€·šDZ2’Š5ˆ�1�„ ò~ô¥¹ìûbÊrJ‚ �¼†;…W%Áжø1wUÂÇO Åñ%”_¬7æ·¤Ê!£ œ¿�úÅŒääJÿcê¯ &æú…홲Ÿ¥Û¯¬�Œwÿý¢Æ�-ÈYž“+Ð'ðíì'ÿIäü«)ý?Ò³Ö_gL8O¢rÒåüýŸ�„Z�ü+…è?„QÞc<©ýë§—bñ?�E#ØêÇô¯�Ðÿ#4wÜÿõ#�Z6¶Ýñ»… ø\°’4QÞm+(z±¥|Nùk,¥ ¶Òç; D4ãYÌM¢zœ|-ñϪü¥lR³5}—¼:išGV;1ð…7±v,G-e~ÌHu8V3cÐÜ·:Mz=Ü=ÒÌ€™ç@Çúa¥¼ÔW&OòŒŽøB—áõ÷éíojÊU¡tÚt¸±t kÙ/tÌ,PÀYA«q{3Õ.Ø,ô­¦óµ •Ù«çщÏM9µ|öã)ì@Ã)8‰Œ¤üJ]Üæ¸‡c¼*6W, )&�4ÝÏT«¥P¯cvËUÄé.(Œ;:×éP¦boÝŽQïy +˜¹¿•.å¿07a°ç)Ãá&ìPG%Ÿ‘21Uq–Í$܆,_©»']xËZÁr¬›ˆm(èÈÁ"–â]“±Ê’Å 'Ò˜E„ùÚ^ Ö +w8¿Uó™ì¯kEÕnè˜ÃJÞB§ÎŸf©A�»þ0:Í~”Û,£ äaÆmᄲ9Ò²Y[DR­¨YŒÛaÈrüñiÖI‹B¹¤q|#yÖÖ`1úV kóK@ŒlÕ²p¨ZV©L¢§£/ÕÆï +KuL@�nýf! ´Y÷Ô.òßà\] æü\¸hÕ»QNõ°ë' +?í¼½ŽL‰ËlSÖø’ÇÐûLÀîÿ4pcª-̇á}ÞK^Žqº4�¶aJ®3Ìâm6º@.¯a SRjôÃL˜E×»Y¼¥ +Q(ÔŠmˆh¸u«Òæ‘a VƒlK;ˆX‚1ÃYf݆íI,ä¿¶ÑT<ƒðOÅ>㉯Å7xÝ`E„´´Žú{ðŠÒ EWíÀµþÆP +C�彊ÒtììIJ`ñú ÀWõ\ÚÉåj¼›R‚ꌀ”ň= þÿ³c[Zú/VÑþÊ–ó.âüÇ»�ùœ48bƒxq¬À°! „Cw *f‡²½–n¿žù†€µƒ¦ï¸r$o´¤b:+Z¼¨dÆkë"·õwcDwOpyEþΗ9Y‚[¤œ�oعGÆ2ž òLùòû‹îÃbvïñÄ[¿)¸[‡¹2€®ŠÚé–ÝÈhzø&&î!‡ [=hÊÛ®†ØOwÁu2/Èc©x²¶´®ºÂCg®‡ÓþR2xÏžL"z¿”]œž(*|B�šî"åñC*<^a + Ïv�E +VøëKî¿¶¶u U]½…(°æ‚4ò>ìqéÄ’¸,Y~œ£6.1q›pIí­ÿ�^É5 *Ȳ”J%—À.j~8I9{·9–šßvUVÇ¢«áŽÊk��Ô—õÜXS µ-½äÐãüWF#}5ñ³9%ãî¶°z·çCKy*àŽŠb«rÒ¿´Zµu'K%QOG¥¿¨Ø¶âr7¶l�‡ÕEUtõ†Aî�SB8kïS×éGIãVE¯,ùXÇ?ЕgˆÛ†È¥¨@ððöQ OòÉ~†ËÓ'iDèh†µ Á%¦ÕMymÕþ¨Š¹Eé;ƒ;èÔ!®Ðhn ÑìÐN&B+–ÛÒ5ß"5&è�à‡¢;ìø4‰§†ß¸œLԨȲUj»ed­–W}�ójx“éüÔ9Y EîvnЋ¨~”`å"Ô”Yƒ›¢G¥‘RüpÐÊåˆßoǰ㎻PÖ¡À`eÛò ²cÙR¨ H‚�ÝÉ"'ç +¹ÁŠ5:=[•Y–·½ *é_i®‚7A×%—5¤¼>™c÷ÎF¹ucâž­æL~*H¾Íž6‘]È_�š=5MéR¿ÎãB¼¢ë ¸Yíh1AOI�PßÝ*eC«§� +v1�ªB`’zòâÙ�*�[ÊÄ|ê†6ÑNõ9k¬c A… ÷Wš­h‡Ô®G ¤ú‘5uÐ& SŘ”Zf®'ÈNV:)�µÎîV=’¢ \3Î"Çkl<¢á€€S' dÓÂ�©èÉ—¦OÐÕåP‘y ZòåQõxväH ©34ï‡^}Ê#kçf3—ÍðUr|-Q4…g4TM<€~žM²ÐûÉv*äÈd†â¸[W¸,Ê_6~7!¤¾©[í qÖ aZàŒ©ÎÔÜ.ØšHúéÕ~IÌG´ª;_ÿÞdž‚°2j«ËßáÞׄ- Å¨�)eþ�b�„Âb�gGÀ2ØÁB} +Æå>¢”Jþ ({á¨-…²*±ätd¯Û:Ôê +õøïŠ—ÔDÝõÖÎìNÚïœXüê:RžÅodý` ªe@¥^Úk†%iÈx¿Ou�\Ñ9Þ£J�"ë‘8fù,bpQ,ÓßwÀÓÕ¦XÉØåÙL”ÖRqcwÈ/»,ó&0­Gi\pÝ4ŠÝM^? =¢Qɦž–˼%yUºU‘ú8“ȹ}hs:­ÌÃtëZ Ý”Ï~ @ꌥåU•nmA3qc×'Tl'«0šT‹Jæjà¼åøKGp³�6qƒÀþZTq‡5þ¿ÜÍ–t«¶Éß#hgGR:É¢Ô•Hwt.-ÁBÞ¡‹³��tí2»ð7ôËUzá]EZÛ '%rãJDóf@"í——m€Š, ûJTõ‰b4.¶Š§î2ÿ·j°  ³¢ )EbøpÏ·;Â^àR½ï sêå¶Q¡üÀˆ‘Àƒ(ƒ½�AÍlB=#ËzW&ø0äêlIu›êmʤ­‰YPÃsºYXSý‚J…cŒ�5‹'¶ÝrͯÀAï‡^ÿÈóu‚¹THÃ� l®µ”ðûw�R²Í²º¼GR‰ßÈ¿,È÷Z€˜ Ú8yò³3�$žùn¯sú¡jßU¡|LxÇÄó_fø¢O]Q¬w+æc�=ÉÒb'ó:ŸÞ®Ûhž)þb·‹ Ќߌ{Ê0Lü¤â¸)5(&bjïR�ØŒ¿ak�‘Îok�²Y%úûÉ_“¸FvI¾*LÙncTæLê6P66&wý]h§~²_ÔÔ‘õ? žÁO­usï5 "�àó˜*`a–^Ìoÿ.�‹=Àˆ„ÓPÚü© +â”ØÀ4 2TÑD‘q_ÀsSíõf×D‘9Ú6” ²än“mPv®nd‚�óÀæwÄÝŸû¸ØüÐa¬a÷¬’‚¢9ÅõQâRýŒH&Ed²»p`Ïa`æ”_ —«ùÔ ?�b€0¨ +Dôzâ?Û)+‘®õ´Õ PKtÁgB$àÓ72Õ ûˆCØ2ï¨r§òNZå„m2q-×¶ƒ™Y– “¬ÞéôÁfY³ÂËM‰Áge¸�ð•Z`æŸGO>lòì²~ø¸»ÄvË­ÊZ®î<³Ð° +À²@GL—‚û¾æƒM·�ÄçTîÓ+ †–ã™ 0‹iÉÑ´1Ôq¿Yä@ËІZ>B¯Ân2È2ûâþݦÇqûón‹¦§EO½jv@ý‰0GÔ»*�„+«q^Fƒ +@eõe(~W²�ŠS˜�€Ñî6Ù †~³1@W:�‰ŒýwN³^dœN—mÚ.žÁNeQkgs¬aå… È˜»Ì|´c§sñwôTãðïßûDÍì‘]˜Ž|ëÛ.Jɉ6ݧ��áþvK,q€#Ê�'_½>B²›¹Ãv~îl ¨a­Ý1íò‡©´—ÏÇÕ4 ¾ÙŠæq{Ïk"/†iEüí‰Ö­Ò+ÀÂ`¤4Ζ±'B¨6©3"Ô÷'#WÔÑ&ŒÃY‰KäÍ#o”Y^øªU*«cÌŽ�ó�ƒ/‡KËXîî¨1mèÊò8ÍËþ`oÞ!g+gÅÖªè½SM+¼/o™=d%“�r§¦Ÿ> RJX“°dJ„š.DÆ1XÞ°ø˜©fõ݆vœgÖ»0VÏÑ�îmᆦk(Û;0h ‘v‘ò­?•:’Óù °ã°ûdûo�4²»IV¤GèÉxUy–‡z•rÒ”%›¯ÆŸäL°Rxš ›�ác 03i…‡‘¸-3þiÆï£dyǯU)Îãw<ý™"Ú™cNÐz Úpaå‰|šÜanŒ·]y"Јï³(ÅÕ\ù·Sܯ�-䣵¼y2�@'¯9ùŸÔ(¨çì•È/}ÿê¡çyÅã†Îº+N½ãµ°x83œ2STßý¦®ú +XÀ¼®y¶?NrÛm¹uœ¤S>XÇä½I|Òá¯Yd~)c}WÉÚi."r@„DºòéìBIˆ"OvÂ?È‹/9ù:U‚*Xe¯Di`CaŒЬ‰ + úÞë›H‹´Þ\�ú·�Èd>xá5‰>[Ä4Zt»S”5òÇ ¨×Oቼå—ì&¼TáÒ²w +¨†4¤/†ÞæPb´mªÇ�ßÒ`3¹Ä»(O�+®ËƒÌGÀ ¡b~²@pL†)ŽfF½Ïê�H°`ƒÿGd�yͽºë‹B/ÿŒè£zª2ÏÁƒJåÉ–uÕµ6^$�Õò ÿ " 6Ö ÀR»VÊ÷B|îélòBG[MìÐØÄc0æœm‘õìPråE¥(Dþ)Ô&{8â‘—*þ &MË;X”¶G9¶¡ŒÓ¿5!.Ù—#á4\1NÞRá§»UéB×6/j¬OŽQ®éÊ™L/àW@þÝ�É N…lS l$oÅ# Ò4ÑÒXv:p¼tyTqlØg¸˜ïq {ùyÔHêì&µ/Q›xì›ü¸…Æd_�C¹÷ʸiîwžFW vƒè £Ávú|v‰ëÛ#~K”ã—ÔnÄEyƒl Æ`·„¡ëdŸáåBºùîeðññ�ì˜CRãJ Œi%�±ÆQ�’ôʾÄ‹BÅn£À)ç„ ‚³ÒxôBšýJ\}·çÆ`–Ÿ Ë#€6\�K'ÞÅH<ß°…8LÞ DÜ7n¶PW•xð¤#„[çÃïçÐÕÁ”T§™š Ð'(_9—‚Þ%.ZÛveªÇ¶Ó GÚ¾,ŸY+™Ý?ÇH®EQ*¥îßL{z3 ¥g-7FW/=â'‰§O‰*Oc†“³ßŲ‡¯½©aªŒ³º{�fŸÓ6e×Õi?Ÿˆ©Ù²+ìÅæU Á4ÿÊ>h$fÓ�2��FÒìíy¢¦/Ü"í�á`�ÈáG¸¶ä€7÷'~£&¥ 2¨ogÈøÃ*<,ݶ,Ð1“˜4l�+. TQ|7߇pe9ĪåC�EsMEö³uÞ�’®’Cs2Ê3#بï-‡;Ævÿz|Ì>Û¹2ÜF,Rbñ +J0›ñ Š"Õâ”~žÌ´+�“B&™m~œAöQ¾ª–bÕŽ YE6˜·Ec¿²jƒõ�ãŽÑÞ¯.ZN²>¾qùÃJ  ÂUôkS¤8t_*œ„nmýA„ʼn»ÞŸ˜c¢])QaÑ}‘Ä÷©?(¯•…ÛœäGñMè¹ Þä5%OéÖï9F“MÅTN"–á7ÍK˜•ó€[¦pß0”6¡²a:õ]E›Ý¢múßE½TÖ-è)íB3ÛïøVÌß-¾õS‹ëÏ—^rC·³£äxB‚ÙÐòéAÂD]á²Eî×ÒЀöVf›}¢Âåÿë!¿L#ÔÜ)‰³§,uéã'«¨&½‡»h­÷ñö”{�½ãH)´ D�NÈ\ú'BŒaí_—ê@:¦19Ìõ"Ú@7p©Éêµ´g|òf¡o�­U¸îRDåeH|Â\Ø (¯š×Ñhx—�£Ž$.8Ê–Œu¯Ÿ"é0$eUìL•ê9¢ó©�d™fF¾Þ†Xú•6š +bÛË?1pVŠ'�¥èB¹Áù—Ò{Xi#UGšÅ¥ô”W0«qпÀŸ~»g�Xnä0 œ¸~bÉÐ50w�'hã_å`r:ŠŽUYÌÀœ�˜0?¾ÌH†fZýÜ"Ù3k‰•ø’*ûu +Ý*UáZ «B»âZ1÷&i©_¾n�ųk#j–e�˜5Åë¯:Æ2¼p8w 6Ó€l—'R‰Ä¶ïL<ý©íÇé�)m¸)£ð›Ÿ=ûÉ­îYàDIOƒnË2ïÑD_b© öÜÃNÃ"« mÑ‘å|–v&Ñ�Ny³qdä*+öÄ) ïÿ¨*�0‰—æœrSAE +)…a…^Æê€$y㚪{)ò‰Ë®U•ù‡‰Uï·‡!'eG„çm¿—o�?n§‘²Úußô_žZF iú˜j3ãÞqASƒèÓŒ iÿ䡪 bûbÓ²WÝÍìaµÝz;Ñ 2âÖ(ä‚ŬÙð„‚`V†„+ƒžCA•"‡&^°æEB©¾«~Nb舠Z‰4íJ³ ÙÇ,ڵ좲QÎbÎç¿+ç)0ºIæÉ1ïˉ78  ÈnîeXý5mûµ<Ÿa9‚Pß'üü¦ü[+”¢-QQ*Ãù�«{ñgÅå’�ºÀGÂÅ=@ ƒóVÌSêÄêŸË;¡r‚VÙnáx +&ºsšr ÒÓOëw½á[ùµ•õZM�� …<\¼¿ø±ñ�Þ$�¤äpœ˜ÄT€�êÔSIb˜Âº,âÌÿÒJ¹¯ßqßs m¹õ¿òÉlÉ9 +6.žÒoÊ"‚�¸s/ÑJUµî(¥¡Å&”"þaû>1w¶*l£ŠÜ  èvyË´È ‡Eü£�ÐŽBäRjgú4ÁpžÃOK.z�9•1Vó,®Å_8`ˆ~�š—iªÕLÒx”[f5T8”.fàæ:†Ä#sD¸Óx“ÅÁÅ¡åå�r‰–Œb¤%Ä?®§`'æ©]H¦z¤£ö\Ÿ–Ë`[,1~Ü£cRL>ÔõP~/�K }XÄd„^Ý4|¿"Ðú¯Põˆ>$wb <5ÜȺöÚ$ +«…ˆ'ò5 ßH˜—n€ ´Ex;Tk³€É|çBãˆN�¥Ì¦‰êÐRÓs8ŒØEFÜßìáåRZ¯¾N•¢ÏÙ"6醗ftK—aèü´±KÎlÒj¦m.˜Eœ^¦!G#·f£Q!Yz ‡£ †@¥ò>{‡¶&mf,D s¨,·©ˆÞeŒßª� ÿëj[ŒÂ}ÝžûyT!AÓ&5 ‰Ù%.Ed7}e3Tñ:Õá°~4..8kÅê&ØÒ‚µAÌÜ;Ž”0·¸ çøøˆ·4][V‘‡‹êÕ§ÏpÏÀU´ÃÝp´å› *$Àz§'›A?¹Ò‘{ ¾Œ•÷4„þñ­Ü%yÁãó”|Ъ’’ÖQB&Ô+󾋊¦ú¶Ã]5îï‚fÚ]†EÙ¸Y¿ßд`)#çIÿÖ-þl,›Œ—äaQ¨Ö†eü,=½^þ4¡Ð¥ÚJÒ•õõ>k�ÎÓúîV!7  /B³å§ÁnjQ˜»x5"LîòljSÙ½‚Q#¢#0þ ‰·ýߊ |d™CÑbÌ‘7×PÆ¿GÈÃv ºü µ8HòHkié÷,Cî¨yMЛˆ%ù‚bþ,)fUÆK~J[3‚=Ò§ÿc”Ž+Ø6þ¶€^f6|/ úGŸ¡Íc=ÿÌzý~º7Â’xs *¾¼}dˆõ®“QƒŽu ¼“ïèébgаï¨6þ.ÏÃq‹ërÔjM_N4È_ן¸‹ø�™‚D6£eÁ¢ #²ØŠ;y{3Q- Èî°Hw8TM˜G=�qo`ÒB÷�¹‡>;ÁþƒYe6‰ãx<¼gR߈®¿ýÆË{Žè€‚ •ºìùšaÉTß §5èxrÏ>€‚(/ I¬øš�Ë»ŒË¢Ñ3 +줠žôÂÿÚue3£°‰/l±$êëÉ,‘7?½1€8s¼$#ÒW=ÜP¢I#±]™œ¬ºæ??øÁšñ•"wÒ +)]ñØØ(JBé‹‚›x<üõ+»çBÁ 0ôµÞ0îp6à˜ÈUÛKÄ!»GÔ¬ W}���p‡X¡}ÿ¤}Bu+oö“ ÁÊ|P +‘·L‹ flÄ|Šç%v¿=ÏðäPEµ7àú®ê]Ôj �,žò CÝ+rJžÄQ&ƒ—T³£}b÷`·S«*Ö¤þ²o85B™„G¤1�(�cãmQh·¾¢S°èŒfÎ$–e EsTw¯ŸKÞrôŽÛ€²Çe~,PÄ%ZÞàÞôLÖ)5FD/¦°EÔ^Ëw[ ÀejÔ¢>.í—L ²i�Aí±“­hÉ8à¶ðªË‚Ƈi͔ï2fˆv—(@:4y²^�²÷Ê©.ZB/bùt l#‹Ÿ\‡³î„ $?ˆ<¸‡„�ß3S© ÎWèžAØKÍ%ë†í!×Fp¡fC0…ñR�E,ôwêîËɰ¢m’€yW€.YNJM�`;½¹y5É@}%d +RlðÁ’^Ã!KèI²�ðV4ÃÎk‘•á8ïÃEr]ù0ØN.î E¿¢aå|¸g^èÒ3ûº}†ÄͲÁŠ½Ã­—‡-Tæ@— +�)-~Ì +¯/âxz#¤’¯¤t²dJSĤ%)x¾Ýjd`ó„+Û&Áúå\eùšÈá=ØW×Dk +aÖ<Ý«lf¡ñeš�ÇØ�)yßxαtCå¢øß ï-žàßEOg¢Ñ©5Aò®‘‡eê]Qˆ\òÂKôÏŸDÉV`™óéŸ^e0èNKÚ€s¦PAëØÏ ‘UOövæ�T<ÿë8+ÔÝöÊk§�¨LŒ‚=roêᣥñѨ7§žå�¹¢»µ }¥cS~é�%êQ^Qk.‹H��‘óÆVÇ^²ç=ŸkýaSÈ@=ðmwPýäpwxÁ¯Ýœµ“­×EÁ Òž‚CJ4}ô=˜.—¸g0&6÷G Þ%Üÿ3µÓŠh¼e5¹[+:¹]Ü\ûGÖu®E_Ð PT;pBbQÞü:0ÇÝ�iuÉ›+8žvˆ oÊù6¤¸cö‘ŒÉòF\tD-KÔ2 øÂ`mîÞ^+æMZ6Ý +Ãm´ÔøìVÄ’ ¢.T<(M•'ÅÚ¥6í[³õùf(úŠ(=;·}yl¬@¼hæF—½™$ylU_ œò "óme˜¼àBø¢mY˜1Ú#=‚Õø¯©_iíØés$´¸ÀÕ¦Iu5ð&÷½ta;§DDýnL;{b©ºØ —£rOD]´65Ô20ÆUÆ›æ¶bCÀˆE«ÇÏ]ªâ¤R’ˆV¹èG¶ßY‘Æ®Úe®®E]öÂ8b–ÅÈ©?¡ñns;{ÝsX8œ;Ð5Q�½N¸—ÑËzP©ûÇhL+ ×ÿê¹×À±âõÀ±šSc +´xÅ6f�u`J/¦=­˜›]+txfý�‡ÌP,EVïsÍ6Dû²CÆŽZLú1LS#[‚_¥á¥v!^ï&do�ñ]$Ï2¨#Hš÷¯®�Ü"–ž0ÉŒ©¥¦¤wù;ú‰Ä'}1.wÚ'ÿaJ�{÷Ï£V(Cõ؇Š™d¢•àÙhÑ­=º �êF¹)b{v:˜äVÌ'Ž»ýç•„FœC‰)Ve +ÖiÅ™\@à0sœ8‘à�¢\fEÎŽõ�4K‹TU&éJ­rÁíÄ…aÀ‰UOuçá +s÷xîÄVÃy¶VÖñ¯Päù|nçyåw lRÂ^ ´foßÍî™-9c½Vâ ZÃ;²às@5‹÷8,šæþV]ì~§û› U`Gýqäõ2ÕÝ#¨/Œ ­âÐé�ùa žÎ Ik$Oš¸ÕÓâêhC9WaH¢ÎÖž k'“o•P6ì,fx¤{½Ûž¾¦KÔçö «Ð:w2dOèy´;ö¼q“YðF.ä`oêŽ "7>"S�¤�l—/]Ö�Ìô +H´�`  ¹ëç;—ì9Ìxû!]¯Ä*çÌÊyÉ»zzŒ‰˜„qo.v4º‚ê,–@cÕ�c¨QOåµVÔ†>·T»9#Ï ´>[ò˧™ÏC\üd(¦• Ô‰©lf|Ý'”¹�/K&Àðo T6gù°Ä?Û׌v:aýcvBÕ©UË+¸\A3w˜Í�F€…ÖÂâ‰vŸ%´ÐŠã€â™ØCCZ&·’ÚÉÿ!?�­ða•жãú«Üç½A"�+}þ¬ï=¼Hõ¸áÛܼúÓŒŠžvt„µ¡J ÉÚÔ•‚ßMh£ýPÌ£¨IZàÊÚ+Ø¢nSå™÷òcP&«²BÀu&-Óq¢€×²ßcŠÄ7µ€W*ß ˜À5'/S!³iòYÐö EÐÔLKŒm%õÁ˜n‰9ÖŸ&g9º¨/¥8:”Pì9™ [Vå8™]|lqÆ,ß«t“À‡É™Tá«v·ü¨ÉSv?}Û}JaïÚ¥¶D{P +â3’NÖ�¤Î¬$Uü×ãEέP,Zæµ´µf­³‡ˆ—¥_4Ø€³³ðeä¼UÏhw�BX'lq Hèiž–ÉzMåܹ�ÕVH�xLF>fL�7�±­ýúÄñC‡Ã™ �QÄùtò÷œ"¥ÑÜ�÷mœ[eƒÈ‚˜€1Α ¼A]|DQíMt«À&-ÕµÀ* +¥ämôD%ÜÛÏY„¿dÉk\°²³°ÒVâgtäŒt–�ûùþz'ä8|I2…“F*óÔîü·”Húðôs�nê[G:tÎŒšfyºh]jàwImÆñm7ÁŒÿØöˆ`ý�UcJOv�ç2µn•¨÷ µmjà{V/Š®›Èù©Q?'é‹“BM=6¿yba»î‘ ÿ#6y%ŒCW²üQô®'T@ÿ˜�ZìB#äÂÿQÁ%š›ÇûåÆ_ê·2y”]JÿÜØúÀÚÁûÖ,�Íñ©b&óý/¯C0Å"Çšt�×ómHŽZUÓù1Ú5QfyÂ$̪&i.jÒÔTzàŠ¨ÔhiŠ…Êá�ÌÑ%º=lN�ñªóg×n{ùu´÷��Û»C4¢“á·žjh²éü%u?ïîegýÍÈwTp]M4w®!8G'¦÷oå^š››íÀZ�ŽG�rèHdŸH GžÌDèAj0æj‚[pŠ4¬»Y_,¹EsиÆo¹Yj©ƒEî3WíÌ–�&Öò€5gyà‹4LY?Bµ=dDLª‹Œ{I°D¦S³˜!¾g—¬F‚3�®Ææà(pŸÀ#_™Œ|äè$Hê¬CÀæ!ZË�p0ÈÕ΋#„M9Âþ•¶*b¢Œç'q +¿øš–¾”™4–Ð8<¼,~>q#ñ�ó×%«TrêB<Ù|b6åsÜ"fò•¥†-1[ ÜI¸ÎN^M®3“UÏÑ&ñ/N" †f$Nd,b’²Åœ¦„ø@À°“ÿ†©´1¿|¢Ê¦%EQ�ôßX*‡¾ äú7qz$L†jÒú?çq£iA„k,‡-kõÉg%ì&ˆä=)ŽÀ‰¥$µ— ®°l©<>8BÕONZùAˆfVZ‘óã¢TS ó=K©ˆ àƒ£«ú?å�AûLYxWNâ*ŽLx$nu@D�f‚ÌW­ôö +–.qE›¥Â®ŒùUS{å,ÿŠ©Ø&,ÆÏ5œXxìmÈcŽåeÉøfÒù²lÆY‚m]È -RÜ”iaZ­e˜è-²å„Ûùý¿ÛúžjÁí‚Ëk!GåÙ+.ë–Ë t©~ ³œºd<ÜÅ‚ã%‚Ú�ØÚ¾rÓ}Qµ# €rät¬¤L–^L[0�lÛ†’îŒ>…±˜aJ$–Žx˜¢Ä¸„[œÜŠqVÞ´;Çwq™ï.Ö0%ŸŒ¤PoYÂWN'\îj%W±¬!`˜F­„#ÃYª½�FùUÖDHBù WAᆭ+3È÷éðch@87ãTús\s4ÕpQÆŸ;ãP(�Ï,eàÐ@θÓJ@Sëž!íÎ4ŠŒŠK÷ m ¡1 ’ÔŠùŸÐP—AB#!0” f¹—£èFÊKšAµFxtiFÝ4 t›jè¢IMK$Õn5ò„ðâXS©­qöí@1H¥ø¯I±ño{*#o…{4ý—ˆymÔ$¿fE„ ñø2ª“ô¢Ùswô¸#e²ãG@ˆKÀrµ ,Í0sôS�ñr N°NB–zP”&R·èB%Vråƒh åê$BCÖžÜ8 qpÉ„! é*!^,�%(§…u=ıÉAñ°ƒFÓ<�0ãß:£ì‘Á:9Ð1ˆG}ü& ȈÁP Cm�ƒx |F+ +6J6j—ÑÚI–æ–éØ(’J…¿šûË’†·’/¢í `{ãr2ÌýDy—ñ˜û–]%…h¥ÁØp'½M÷ß?Êôš¸ž6$¯XfjÀ(“|¸m+Q.AÖ‹K| 1c¥ ᜎ–ÊcŠÓ¤\ #ô™^nN‡²Ô¼z ¼Æ ü¡{#Ò’5Ó~­ìÖÄ_“/JAcn£¾¢-œVu×Kæ8CÙ1Çøu,su (‡tvÇØ¹:m/a/à�cG‡·¯:‰“r ¼¾ƒŒ”Óh­£,þ4çüu^úx½a袉!�&âÃÙrè+U—-›Òdô`óè�Ó§£ITßW‹KP^Ô·sÆÒ‚%úÊ9›,È>TeÝ…‚D” Hm ‹7—ñƒéb“Hæ´{Üüb|&¿|”¾±¢##:ȸ>NZËmp2‡‘êeÎÂh@Ÿ¼KR¿½Mûaì‚Ôª´Ž‰­ƒv@?~JzÃñÞ'eI$í*&¯Äº¢”t²Ê@ÓO=t¹ÔBÝɲ_ykp™êÿédéGêrÕŽÄB Ü¯á<ÝÌr¾¹3GŸÊu…)û$Ë[@œ½åÐOF#+õ{—¶K= s/ÒDæõÉh07pš(O²z%,C]Ý”ïnßÂ=Aå ¤ÒP©®Òj3˜¢VÛñ¢‚Õ@ç�@Ö§öÆ�G þÃÿ,”[¸B—˜á…šC[~¶!JÎÜŸÛ‰'OÑYÃSÍ‘ƒIûWüïà�žÐ›ÉxY8¢ùñO¢ú�Ú_BÎÐÂlDñé<³n\^wÌ,l#k΢Č'$8ÿê‚Z¼ [,ŒÉ‰Os~§6ïMÈ®óß'îæÊTažû\°ÁX@ÓÇMÖÙ!c_ÝI!D MNxtž!б£Ù€�j''Î3�&«f¯äµ¦7IS�0¡Ž˜ *Òa”%•†ª§Ô˜ùÔï× Ãþ: +L¢ñ U¬ª¬§pŽc”3O×öQ'-j`Uà*Sïâ( ô¼ß"Rx”Ó +ƒ<†iÉ^74MGTèzÎmž¥!¡*I§”¤X€Ï<Ôl3 úv„9Í/¡5˜öÜù  +r‹âV…E¡¨¥ñ˜Ïï°ù`2M°Q^w ’bŽ¡C¡;˜‚©èF0 \ú:["P1êQA‰.¯Ú¯t+-�D^“�›-ZÏÝ!êxEí¡¼Ê¿tú»¯½Æ¦PúCWÇÈO¶üˆl ¢âjHÛ†~|ü£©Lù,^•áU£¥©÷ÜYPQeÂb@Ñ<(½˜2ˆ"¤�âÈmrûåûSÈ“¸ø”Þ�2 D2KÇŽt«aÈc‹aQˆáxÉv��ìDÎÓ,ò +q®yÀ‘ðÆ1Š|e¬h�°­DÕÃàP"2}kt!ÐÏa€­i/{uÄAØ’©­¸P’@XMhÅÛÈø`ˆ–‰¨ÁÝ•½8BFÃ'È’ÏÑLn‡öh„N¿HˆNPÊß ‚ƒŸ�Eþö‘ZQ˜9Á2*JŠNP) +‹åOdQ'T6‘tì }-‘wðªd$ba=á¦Fd”'$EDº�'D^È‘1£ põV +fw5žBo9äp*DlCâ°B% é>êWHüBáÁ‚´-ÔdeÁ¦¢�*“BÂÞ¾E™’äBöÒiA±"#jÁõu âñ $}¡ÉÙé!£Í¤†r«¸#¸…® ¨˜Zh~bZȹ@—@%r@ø7½‹«É¡3Ò�[‡ù¾º¼?¿°š?.Ûœu?€�©ŸçÚaù©³²!¿…‡ðÓ>è 0o¯Lµ³–a°ƒˆm}„¦‡ª÷ª^§ý¥Üˆ Dœ|R#¿Ãè{8Éhxn\à3©WÏÎq‡yg¤3CSÌó=…ëy�`�Ð,PB x±PªFÿ°/Ê]Ÿ‡¥E�¯Ü�S=ÐÑ¢zzàsÔà¨.“飶\T¹t(è\¡Ìµ¤ “¤Œ¦@¤ÿãaìÀƒž6Ói:ËÔ#œ‡@Kô«Íìåa]*o%μ¤QÖŽò ð0†iØ?§Þ ìJG¡ +Âx¤E6wùÎsCXCgÃ;}:$Ënаwî˜DÉNogÕc·vZP˜Xs0;Ú{©i3Ùe „X4mýŸ�ØÈW6©Fw¦¹Çaêà4„ðÕ‰0‰1ãVˆ ¶’ $H¯d.Õx¢ÚÕ«p¬\=u2Ÿ¶¥ðñ“RSÕ†4�cäêÈLnÝ™ôßJ�kÊ~ndÓvn&.‡�9�H9NÇp…’‰vrk0³|Á—9.òµ†NE¯Œu"ïb3ôªÐ,ƯËmuÆMÇÎtŽ�0”ÌPÊJ`ÓYÙæ"ȘÒ8ƒ&o ªã-và€ÐaÖ‚^2c<\8„ƒy1–ÿ[€"¤4h£7ìƒÍ°hg‰¯>ü`ÞCq4%fª„\˜iÐQYÂ<ý 5¥ëá`ð y5X/1S0uÞYí#g`.¢Ts`^Sý¥JQK¿LýîCçËq«Ë{)"æÊT½Tô~™R)YÖ܈/&ðò¾–ß×xÃ6Ó¯ÑHÉœi¥±PM�â†ÁUbû²PªÎ`›j”v†Iî'œ) -$Z�Rå±�Dâ i ˆÐ² +ù™ÂKÏǨ^CÖ 8Xu. @ ~še>‡§Z®¨ž^úІhôâæi[”«¢KS׺|±t0Ä9é0Ñ §G2x]áÓÑÉü{¡¶’àªÃ8_ÇN�æ`µBÕ`NÊ0­W<£ü­`I½e2€¤Y} ¡,„½¬xÒtª¶2­B“9ðÁL* q$OðdÁߨdÆëV¼¯”¼˲øqЛ©üÀ©êëÖ>¨A5Ò—˜ê)ÿ¾Õ— Vai¬àU‰�±F¹ÅSTÔ˜Bó<|-6ØuÑ?L �§Ëøö’Y÷ßÙsÀ-‡´îÿÕ¸Õ´)È�s<˜¨£Ðò7ŠÂ¹#€ßÖ6jæÝíúxµhyoû¿ì^h¤FÏ$ó"ŠéÝû�5°º7Á蕇QĘZ$¤y8›wÅBC;.–ºH8Eƒ¥ü›Z +Eþg‹$™�5¥ðJÚÍ”|Ûø7®!æàByÕßt "›¥C²8.àœƒ›�ñ ÷´¸å½”±x榭£lQÉñÝ�,¥*ýØ|ƒ¡§ð¸bѯ–ÀJÈü[u·§z�²‹¨¦¼ÿ$º_·û«xR›A2£‰¬q‚GoF”_ÜbJ‡b3¹eAÑÊ}º¸ÀÊÚ(«õ  R€a&hIôÑL‚9ø&…ÓÑj’ñî<–öI>Wö‹o´5æ^Âå~Ãí«"Îö(‡ß–‹óLáv¾6_°óз5T.M—ŸŸ9ÜÄ’qÍÑäÝ @ÖW”À;ŠÄßËMä½¼J8GM§åo̳j‘EFùª­¥Äð­ƒqHz:ã‘€@ �gRwÊÙ%r&éíˆÖZzÖ±^‘àëòõïfXã—üëKŽåGR| -/U"8aZ'C­v2hw>@é;°6- ˆEŒ�[—ë·ˆ¿±›Ô¤á*¦g²Õ¤g8 ¨ ïìRîü¼`"[°·ÈÄ‹Ðâr*ÉZR£}OMž¼Æml÷T¡GUž�H"_-š—Š£ÚÔwÇTÂDzm190zAob\i[#ɽ"a^¬AÁÈ�c:¸2|Ê~ê"qƒ;kí qMìáÅÛÝ ŒbMm¥à¬Ã„·N�B�AkG!ã\TæÅê} çì˜EKªëÑ8Œ™~²³7· ÷âK=h"PKjÙý6)4EšÆ¼&MgY“~]@Gå.i?™Â["Z/Ôm±Ÿƒ!Ö‘ÎÖ!àqYL5 ì’ƒËZ§nH EÓô^061;\y©¢oªc €�{|þkÝ’úÖLgv€M1ÞJ0bŒpžì %ò´2uáa)üTÊÛ²a$z+L0ð�qSq…F¼½€¡ŽI¤Ó0H��j_¦^ux”§}R€ÀZ‡ð+Aþ€›4skçg7v”™4Ûœ¡æ‚9êv{ÇI{9*U¢¼Jhçÿt@Á²�à`æˆ0û»æ Jšh®ÅOeU§®¥É 3£_7é-Ž_ãø[åúE�}h½ÈÚ邆,‹+�™ð�”%z˜)) ³)d†?Y?c„©Z"Ó™R>s^ï÷úcâÅ +õkÂ2Ï—aô{®×Ï�³ßÙÚ`óýÅfM¨�⊬³IÛÛ!’\…€J]ÈÞ%rÖ��æ­Ç�9Q@’z³æ-=šÉ“I�Î-Llcåè#áeŠ.' èf?·<¿„s`�N§þ’)ü×òHp[E$*ö »‚~d¶“êÃi¼ØƒôÆ·Ëâ +'ù³£0*—#‚XÒÐÔm»u5{B¢ÝSÑ}#z-%7j�¤´G»>­(Û=eèp 6ñ)0”¶/$5®zX˪JÊ$–F%~�[! ñПÿ ë‘*¡]•m¦áFÝTpc£ë†p*Þ š) (”Oü5¿?�ùïLÁÒãƒÞMÞ†Ÿ¤9ý˜’,þQXˆY¬õº¢³äe@=p Ä=¼ø$þDê3ŒÐž–E9 E¤›—�REå8Ë$áXñT�»z8&,t«ýí$¯<Ë£I8\‘ )· ‚Ó� ›p¬W}ÏÆ’¶Ø‚_S �qÄQ”‚gr’Ûä ¹ñ¬n¯T ++2¨+µ6„å͉¬O‘@Ђm@ž—Ô¦ˆ9{ˆ·µ Ôê�…“é Ò"~¥f]9°””)Z±ÈãZ­©+9¨œ�Mð•€{G¿�RŽÏ=×3PÔ¶8ŠõX0 A¶&H_?€óÃWÄðv··"\ܾóã…O*·ƒl¼ÝÓß³’4¹é”ï6sóp·µ@¾;vkño«ÕüP†31ú[-œ¸÷"¹¥›Ëê¤;4Z÷W9|µ»�ø®~¼oô–ì쥫î…�Ù;Ìõÿ'{Ë«“^z ­¢w•XUöÃÁVêÚE¯ø-Ò Ñ»3{7$cñÒÑãè=8ðÿ#ôÖYBÄÙ«f(Òï{ÓªãL!ÎÞ ñsp“½QнF @¥€нÈNwr½µ«Úµ5Ä®w7â÷Nt_Ýôûåa¿y=´†ÀR$øúëùf‚¯ŠLfJ + ¥U"9®Ì-| yðkÍ0Ü­Þ.|Ù�øË¸Ì)û)› Žìy§¥sÃi·‹�âùVꆹ눮Çn©ñ_‡/vñà©»<Š«në¦ýâ²\Ð}Gg³!_]ìÒ,Zý�‰`H�HC²¢ +‹Ÿ×~=ž�u�×½•âÝÝ891áe‚ÜD„ÜL1a¨_¡Í(¥ÚLìËò@}éNÝiƒ AâóÄûä;«k~© ^@ùÃ^'hp™ ±GÓ5ž[a‘ɾóÏŒ ‡\¬&Rþÿ ³ +KR¸Xo\¥æÈ£+w·Üu°\3‡Ï!­…2H_Z\åðRWagZ€¶¼šXäœNAxÊ�Ž-êT¾ÊQ^ß$†¥”ù¤)2³P¹ªðt• [²½vÚÇ:°ª ­Î Ë…zÀÒy7|’AÎÉï9™3ƒŒí†0DÎúÿe�åOQ<ý_å8ÅSí¦ã+Îi»•$ú“šæU>ú²Oª™Ž@![Ñ+§*~VuOÖA~[ ^°L¾V–ðrDœŠÀÕ9%+û†$­ÙûËÄíDЬb3ü™4# +dì;bZ„�{@hI £RY íðO?¦8À›c;+YmxiÔ +—@ïÀ(8ÿ `Y÷làÏMƽsŒ–u}í¾„$6¦wÂlå¯ÊÝ9Â=Õ—‹_{�ç!þS8Åi}z“KžŸVÀi<}Ãpu)7‹ �È‘yãÆг—oÀ�²$7šÈ£�üŠ˜ïtÃaˆ„6þê| Hì¥'«Õƒ5Vé KÕ?z‹¨÷*xq�-ó"™½*ø2˜®¾¥¬{jZ™zÿ€ÇÞ!Su Ís·\Šû5´€õ§ñk„M¹`°—ÊRCÎ/~ ºê¥Â@Ló]@"Lç0‰9/£žv�F¸é_Œ†·xër°’”—±²$ý·Å7¼”Dņs²‘}Ê3!l�ô¤nƲ<·xrÊ>2(Ëkåiƒ“9 ¨Þ¬Yll6-�°®éŽÅÔR8?ôA%­ +Nk_Às1y£m>ÈÄ,•GCÎ|¦àî­‚1?ã:UÎÀ8|Gùñ¸3?ý_Tw£ö]ÙŽA–„Íð(Oã­Ü—¨)§9_öŸÿî÷bÇmÀõ-\ ¦ ùYTf¾÷iÎ2�ö÷Ýã?±4õóIL ÑK¶xht!hùî"¡¿|½ÂôŸ¬2‹¤¾<(™^–Ñü+.�•2‚˜°÷!1ø¢ÚÑ�Ñ÷¾ˆsC¿x$õ¼`o +L~ñÀ3ÇÿŽû²ørâÌÝ0lg@9”¸oêike3�~(鈮ÿ[WÙô­šZ’~(GA|~ЕNÄhá ŸK«¥¸ôoKPêIÃÌNEÂdj˜vw'¼3ÛN4<‡™ûYFD/ ¹¡.uÒKD¾¬)RÇm½DÀ;þ†üöò<µÁínµ‚çµÚâ®;ƒõ+ýUüƒnÑ>àOŸÀ�°ÎùÈ­^åN:t\K±wJï| ?|% æ>}97Œ¯ÐumÑ>Y[&/+üß(*®ÆfµgkK8l²?Ô¶p4ãìáX!Ì$“b«04 —l¾AɽSÄðìí¸Š“ÍÈ=n¯ýë�S ÀæA PŠë¸‹9±-7âÓ“¨!s®Ç¢ö_d¹¾ÚÂ=s7¼Iã�Ýøl¯ ÅëÒ3–{k¬°ö;‚©�”jó‹¿6Ù›rˆÓXÙ ×;mý72$E'“1aîËdÌÊœ×G²£�õƒý·±�Èn`D +»¬8h/¸1¼±Kyö¡,nb +s½7Õê§iÔ ’4Á}?¤R±÷gQõÁŸ[NÒ=džQ¨’¯@”åéõ‹æL +6�<[rQÖÂð"‰Æ +�¢£ÑHÑÀ<~Ó”½\û‰, ]„þñźóÖ�Ú ®Fp +^*ž¦{�~¬¿O›Ä²¾ÎèÊ1ÀÜl�ìÉ×ÑpSi:6~?x>±pǦivÙÖÔþR‡kMAåâÎ`gáJlßÚ’+‘%‡@ûFו¨|uÇCé²1Þ­¥g!QÉŠ†¾*Š?¯ u§qKtå~n·‘'æ�ÎëHh’ÈÓÂC`+•RÒ¼$��3a  Z¦ÎE€-Ý#7Ò”'lÊIä°ë,¯@Ž­4òˆ[Ìî*nL÷}ƨJ„‹P�K|Cޱ€ß ùúa!T©ÐVj~ ÿÅ"¹˜X-J ƒTr¡“ýºú‚Á^p&‘ˆí/Õ¯Q³.  ö†\w«m�”/û©èŸ «X¨ìG÷›±óýè¾�U›|ÓtåC6œ®uMŽýÏ{-üД¹Î>1.<ûŒ'M— ÷Ë£i«g<_D ¢˜×Ò…íy…SYa¾õ(p¶7P„ô@Dánœ.õÑ9@ò®HsZû¤D„€œ::|‚<¹£Ù�ö̎Õúл�é˜ À /ÿï–Z/u_3–¿G�>§Éç�òä‘™Uƒ7À‘ÒIJ"€Ü3)6´.Õµü³Q)@7o�)œ5%³n²1ø`Ê 1{ä8,¿¥Z—{”^3ŽTp¿–ݲ«+Ë=!ÿùhƒæg°l•î§'¥ ì ¡°’âþq3¦¼ßݲr¾dˆ�2³«!Äô7Ä :,Lˆ 2Ò›dWÑ&-¨¥ÝM¥2/]t®f—Cùÿl=eèÚ?Öø6bCûƒþUÿ”t7D÷þŒUâÎèS×»FcBþDa÷8üÞÊ¡ÃZU°ÝtÀœQ�êÑðÆðVóëéx¨z€’zN M�ä¨3‚ÊÞ.±J¡ŽstcgB1©¿£ç’=˜µkŒ@ƒ�.–¥<¬û„aUô$ÜÁÞp`F™„á 74Ê$$Á vfiâ¿VÖB8²õҾʳ»Ÿ 6¨çÆž™Rç¥ �Ä‘¨¥Õ8Ø„Þ +€½ž^KàîÙ­ItíY ¨PÌòcoËÞ¨Úo�¯Y¼çùn{^7AS¶{ìã—lÝ%¿Áƒ½ÿ‘Á8úá$4�UN…_®(âµ×_Å�|hY®õ¢º>âûx¥¨ÄwÉ´‡”'™OLrºâ5£G<•� +ÄÚÿ©5t±íúê;âŠtíЕ>#J «ý!SÛ¬òf¡ø3Câ&i¯ +)_p\¼Ç U MO©½_ÿYÞn¨Ü(\ãl£ŠÆ2Ì¢|¼ÈK!˾ÓT~°>l\¾£jË�~‹©6éKà³F�쵩Ž7åvGÁ{ +Nÿ(ž›q¹Î{Æ%ž"oLØ«¸Ñ¾ž¨É‘Å7ä‡�ɧ¨—…z#@¼Ü÷¬ˆ×n +IŒî#$�›ËPL‰Mð¾ŠÿÆ™î«ò}Mÿ|?1¼·W¬\w £Ç +‹…"$ª|X2-¢RÜ.ǃ«òÕY±ñzøl÷¡w3¶Áúœ=$ÊëŠåß £]=MË�èqS�À°7¼" ;–"%F`ÚK¤U< —3'¥o§²gVnâÁAìL°ÈØU+iúc ‹Ôt‚nº%¸ÁAñ)V@È%2' �9 HÓ!jÕx»„Ÿ»ÔöÙá¥|ÈK•ÒKÊôìó·:ÿÕE +´l+‚ cSb滆q�1ëƒÔj0š�µ9̬Ò÷*dh͈˜Ì¥-|ƒÅFêíÄ­þLrœ˜Lƒ�üü§RlùC+Ì”#ƒZ&ŽÄPWö”¶wvþ;O5R>­Õmp²ôtw%=ò·mÁéQ·4ØÁ@#ïÙÕΑ©p¦F莨x¨Ï•f{*ŠºŠµâ_0Tæ/h/•g|·£‡ÛŠKœÝ«Œº +ÿ«¡y[óIxv?ױݲÑ#+WëdCïîzï7|¯´C~µG,¹E-èUÄï\Ý^ÙÊÈjƒñ—̸˜•Ògí4Hiò#Þ\ÖŒæçBó´3¾§×ùFÞ·ß²{ |nfé²Å�³¥‰}oüV™Êôw”€ãºTæœ�{‡YÚ¢ÏSÁí$;/è7PîrS¹ã²Œq€¾£G �r $¬J¸·€asHQÓ’OžeŠ‘ÜéÍÓ+)CXì N¯Äï£R—êµç�‹W){â¤ôª¨ÚME�¹<“àÿ*£Ç,|E�A§î V)Ü¡ ¢Ø"–ë7}#¬:&l‡ +{šq¿^ܵ¥DY³>¾Z°¢ëR ŸÜ¥üëR(.½ Ó*@a©¡I£Ï$�ÎDóàÉ0kš åz·¸ßÿŽE¼�>=¤z›:”I¨Ñ凓G¶äÑá  q„ÚâPȈ8ž*=�¶?Œ“ÑFb!v&‰Û*Bo8ÇUDÏÏfW"¸JACÊšÆöÂÄw« ;iDè€ש¿0Sý¥7�÷˽Uû¾ºL«QñsaP�ŧÜ�“m…ë­wl¯@DY{LÅë‹�‘>sGçÁþ1tbÓÈå(s@^]=Úù`(K%´ý;¥d"¦OhC‹Œ¨?Ž(q©Ë€Ã€åÙÇ �ä‹rºh?dNöI™øx*½¡É¿ü£�‰»½š~IFÚ­æFºÕƵ¡>ÎÚÀ±š5[Ò¤ A$mÍÞy… +„ÉÁÔ]gu +QsQj ô ¬°kÚšòJÔÜàðä}uñk`ÇÛ7XØ +7d‰ÅO×Äs-AMw ¹*û›Ø%)ìè€`pD¼à®k1(Xánºµ r¼!dPÝy³†Id¯oSîUÎE +ü/Mÿä¶u8ù«œÄ‘ëâ´†cÞùÃXRí•"óßÊ·ZÆVÔB¿Ð¹�º¹q“§1[8'–-B‡œ+‹½Û¬´Ö“Œ€b˘u%=Žiº Ô~ÔmîÓjÌr�²¾<ŒG°i‡³,?`G1<&F½=-7ÏÁþœ¿/Y®|U˜âimÊê©�VÉ$´Ð°S+£dùèWv[’ /öuŠY„ÂÀÁ£ÆV7}Âr”foµj›kN¨@§fškÉ4Çú&�ýˆ«´ –p,RÅÅAEURUÇÍ„ž$•¤,¼±Èú.h'äÁð?IJ¤�j/Ì÷ ÿ¨‰0u“ª|ž˜¸"ˆ:¿'Å:$GCÚÐüPêðùOkP�Àº oV�bÐAË�¥q·ßE‘oNˆrB.&9°³g±{®S9Bˆ‘$‰�;¯FhÖû�L|zÌå—ºÄaí<ìÜQg¶CÄÞµNn‹„œWKø÷¤+2ž¨ª`#‘§¡uGñ$³COøûä%&qxi/AH� Þ^W7ðð×wu"+ò?éã�cFŸÿÒñÇ9³�Ó)gå|ó´†OL…ÍÚŽ(Ù”ˆ¢ ć»q+ùçT‹daq±.Òh*/v¤(úÖvöÑñC +�‘EÍY,€LiáMj {œÞÃÅvÂPÙ�ûöÐ.D”:ßp܃¬s€ƒ�‘e…äå#‚³ú0z<í�?\Ûq³ÙLì½ .G|H –éìæ­Ë •l¨ŒKêB2¬ôhp`©ØœŸç�6Ò±jo?÷ÿý¿†„Viœ^¼4{™}ÒcÐÄ)¢d"óãÌÀ»ÃH&ñ ´«‰/Ù9!n¯!Œ�¡Eç4 ÔŽã•?XI’« +5ËVÔa¢ˆxÈaO-\¯.a&ÊxjeFí¦Pc37¶Üm§çX»ÓÞ@àÉ,×i�*ž×YÝ¥nØGO¤ÿ6ר炀¦Ù êKƒ?•¸ÔÃýIÁØÛbž£ø�ÕÃ$xÇÖW µë¨ Õ¡‚!MÜ¿]T�Ð'ï¾fVç�Û+îýØ<1$TsÏŸùxuœÑo•ÌåÄ•1ŠIËÀ©¥r£Rª2þ¾¨æ-¹åîP/娙Xâ—¤Kʦ,“py¿9ˆFÊó3Ž àÎD@œÂâ ËÖþgƒ¯´+¿s%ƒ÷+v¨ýÔ+ÇLÿü˜Àí]þç©™Ãñoø¿†Û:¡ .�øçæ7„Ò ß,Uxà§QzÌN}�PʬžŒ•'è(Oø‰ß°«ºXÁ槈²©¯t7£§çtc�úžL½¿¨ÛsõüëH=°°Oþà,@i|”h£t™ÿA™‰uâ¼ûîG\ÃËSuLç*¦�UYN…ixûËQAµ"຿LÓP2 Ü�t²­/õ›ü‚ýå\ÿé™.䀳/û—Ã<·úõU}jŠúÛ�ƒäõÏ´êëƒ�­?VÕªèB‰3b94ñàØ_Éǯ�5–ÃrÑŒœ µ”aw;Œ´Õñkcð ÞáHðwLŠ¿öÖéŒ>ÒÄ—Ç?äÞrïêÂ"nõæ]l9Ò Õ_1Ùò ò׉㇡ÜizPÔ-9öDÿtb�(# íæ•6�KÓýæðË&G/Ïa ÷¶%ƒ`ZsïÛ}ÑhbÅP£@†½ŠŽUçÎè}Ú¾+êþHætJ¾}qžƒºÕÚÏZêÿ @ ÌJ ÉA“Á½· ~‰Çjw‡XJ]ê±ÓÍç~>óA¸°}Äâ[a›é-‘†ËüÅð«Ä}‡Oø­§Ÿùw²ä¯s7½ŠÔÄÉ[£lâ5i'À¯s“†=J#>|iœ(¦’–ŸêI(‡¿ZT]|z§³RjHzí9¬ö¥Av¥¬ _ëÉRZÛuYëõ‘Í Eöò8{ñ¢Wê»L‡Ý‡¾°àß´îÞ 2¦ºwUe-2J¸ˆ[k#*—Ž�ýmÉÕ¹‰!:c« *d +b3Ò4®¢ä ÐŸðUIšò9…gô :Á«fÐñ+£ΜuZ‘>ؼÐkú4­Â ¡²†�BÃ¥*Ëó�YbI_¡DÖ{ð„ï§Ž žÁ ´k‘“ î†0ø$7³Žñœ·…à�©¸Î¨ڲ§"M¿’ƒE�ñõ›]7À]üº4Ñ‘èI2'j—=XÏ<¸}*0K?0^£W!"ÎÎ0H2[îRÂZ¿üNÀ#WnÜR(‘·Ë%�«Ê-FÙNµQ«²™É ÏšF@šMx +ê“$µ‹Í4ï¢�Í:ž Á­ËÑ›'»f‰²à¿•†JŽ\bU ‡UóïªògU¨0`®*¯1ôxPlkb%§œÊÐ"¢³Mp/“F‘¯d èO�•üü’‘w¿Æ!ÊÙ~áÂí„ûe‰xYÜ?ø°ü‹�ýa %³?Þ¨üs4Ç|Ä1·¦J.dþ8°ü• )¾âýôûís}àf$pÆWÖ¾¢Q/´h5¨ÆÓGý†Ý»]Û';ûÌѺZÀÞY<®v?‘" $¡G:>_%aö5ÊF²laͦxÉnDÌ„0²¿†±²¿ïd³ï—�ágë××L;–�´kË‚"¾'ÕcyÚ!vãª�ˆÚBÚ$x,`Ç:æög‹<¸v«dóe=v±ßú�ý¡¯#¼–Y]³@LJ­Ÿ +fy1R–«tÂíõë`Q|°1 É�{Öé·1ÖXíLkWeþ)ƒe"‰Êy“ì$Ûn Žò[”ý–3ÐPîû’ná +ç3W(Lôišî:kiðA· ã|«Ï¦wí;¢¼#ü—À)~‰0§x¯˜˜ô)~BòU ¶3*¯ÖDqctqt)R.)´Â/ަÔÒˆ.ÉÏ‹P#F’ËÀ‡ÔfžŒƒVäˆÃf8XÂŽ�€cù�>ßxÒYEÕÈH”ôŽÕ€«$Õ ++o1à?‰$"ô UI¡Sñ”z`ìVÐ2ð“¤{±Jç–«^å¹L°Û¼b8,¨â)Î�mÈBê›KÄ�B¶Z04…_Iì J¦³Ýˆ ‡fˆM3÷5,î©›ÁûèªBÅ'^O ¨îÅËA¥dfød.\��v„I=�%"ÈÛ£«Û´ÖM^3mà)¼.q´3™Ó üz­Ñ¬²êc™ôý­%S»ñãæ¡dÛ¼o¸Uéyvã áßSßgGÏlÅ@ElYCá³µgŒ]ÙräkhÉ¡8Ÿ4•�e*[p…9i,c­¿“Ô[ K^JXO�-ÃÌᔊØC äF¾Aí¤j^Z,N š|ñ3ÊX™õ«ÂH«³/–elmr®.½0\{’‘Ð\xË.áå}Ñ#pî®Çü[ü}~—å›^Žü7FÝeß]:ÙMé?éfxàºÌŠÜo-îêoßèA0f·] ¶§¯­mk_LíŠ h=™jØÙ°3Û˜ýäÉ®¿Çf öRx)©~ÔGUïu¸dä lS.g�„ì”–JÀü(d݃å.,³„¤0Ø?ì;1ˆ€™%jʯ˜.•ž׊)i4RÁhnO4’Þ¥ DˆYÇßn5UÈ:p~;ê®áñK¢t=Ê\æBèTQG¬_Ô+Yý“Üõ+µ\,ˆO±¶2ª•D@›ý ðN•±Ó«#><Ê,N=ºØ’»ÑnzoÈ:‚¾ÛÞÁr?¢*ˆãnÕa懩;éir�|éJ:¤ñ—z÷À–òO†î¤y@ ;“rvQxëµáLéíìØ™ˆYdÁÓU¤L? mćæŒuB-YYröÃ=#Šƒô“=V±�áÞ  …”Ž£†v aÅø"ÆW×2¿jC€çвk ›àáŽv¬vÔ�ÆEùDª>Ò²›PæéÈÈ#Z:+‘¯®Ö‡ëlªmó)ˆË�¯9?b+G©QÆ~‡¯uª¹{Ižr î&j$_�§¤uúÞ¦aKdJŽhPËØ,˜R±LSËþ~H�V=G1sÃhZ§P+JÚ‰~�¬LšBYÎCOQÌ9;TÍÙ¸±P@êôSÐÜÜ ª�P eR€ +{TÞ•š{ÃqH…u=Sè­â TîÖܦº ŸºæÕv[òòaùšÅ׈$ðŸ´HÛ‘.×é—¥î`x|äÙ=6{·nçðNÖû¹ÍV]ÂÍ�,ž(—�P¡ô1h‹5åÿ†st!¼?B^¦à‚Š-¼³¢tL;K· *Ì"γ�-Ñ犱°q‚a�û‚î o¹Tá=ÿÅéÍìUQé,êü¹6¸lü}ƒ¿'�¦‘TÔÆ~ªŠ»VÜx8bÔéÑÆþ½­«=ˆÔŸùä~ ¨ÇC\d¯g€Í³ÀûŒpàêågù—¡;Š{š|URÝ©ëMÕ[‚škMu§Pn +Ô-rÀW¹QªdÑE�Íì0ß¡1(�‡ìá +rº^€Á;j£X¯>ÛLŒÄ5•HGº£Œ©ge6­©óÚ²+*ÒïzÅ™Èð"@`ÕZCæ±È e]~¤ïF2 IR€r-è�dõqïVËcµîÀ¾Žã9 à|Ë2ƒ/š’¢’§Y Äͺ à'¸#U‡ÒJ°T% åS&ôg ¤²é Z|“ù:?(”Þ ð‘I»­Î—Ìòº}áP¼ +‹0ÐQ‹ÕSL“Ò“Ä@å�R:�Lxu¯8 +òð)oƒ�†ãy*|tD5šÑój®ÚN;±Ë NZâb7GМ�"¡PþO®{B*hAYýÇ.'Ü÷¼)&øÒ۸ͦ¨EÜŠ+o™@fJ­¦í>Šò®V3þsñx¢ãÛöLs�2ïN Ýþ”¥ßÈ��>4÷ü[W{úñSé]À‰K²ç8Pòy[YÜœº /§s§zC†®CËŽ¢Ë´œ#Þ +èGJ†¤i‘a’�’îU%$–x-­‘ß�…®Vó^ç’º)j4ü‹¼êˆ'`”ì/-ò“hXiÄxÇG´™ƒîÈ^kµ4E¸ ÏÞØ †ÂD®e‘oaò�ŒÔ@pû?]¦ÇÇ縉+‰D/ô¥H¹€kHqšAQ.ùª0ç N öÞÿ@±¥îüSN#ÒÑö“‰;ÙN|Ztð¥Qw¿\öõvêÒzþ8*òäýÐ~5GD?dþ¸í¯—ä~Žôg1"%ðú|“&à”>½Ÿm¾ËM+ïŸQKbVâÿÝñ¨Wz¡iŸ»L¦ç¹wæ¥ :^ÚeLã[ªa½Nã5»µÂo÷"P9†˜Xª“¹Š†ìs16í4�Q·¤`¥º‘âá}Ð%ðxëð^3+m9)¢‰«¼3&‡ˆÞƒ¬aìûâ ­Ê@ÓÔÃAÅ2ÿ±úòýØËdf¯ûC–G.W Ù±´¹�TøŸQ'[ÇìGN-œ_ïÆ”è®1ÀÒ»70½¨»"Vâ-(JRØàüÓ-U®+âcƒk% }TèJéáÖLÕ+¸&d2Š„AAY/„^g•INÓŽ&&–îÿéõx$«·_Ëüï¡g J(ÿa@lþô¡%éòÛ-©,|qÀã¡› kA¶>ER‰ôRc_kôó¯æjh�j‚¯‘Õ˜Ÿ:+Òè}kÞ yuRÉQ©n$ÊŒÔÓ�*8Ó Ö2SÝ: �…B.Oj$Ï%N�öÌãÄbƒGË|‚JHÊÜD +q”„’“�)I$g…’£·‘Sd¬¨„¯’Ï�—Gˆ„ ËV0lX.M…òB­‘™üæ²x8IT#¯ÂÝL(cIL…sUêrò»Y4³:$yRü‘æ–̃ ÎI¶ªVE/MB K�©PJ†“Dôç%…B2$G†Š3å“ù0ÝMNKšUNV!r þ'õâJo DR‘O¦¢Yæ¦nÒL•k’!Ñb+ 3ÑŠJµ@2‘ŠLi˪¾TTñÁ37Xåm#í¬&«‘Æá2žXô§³@3¢pÙ˜A®ñô’yÚøeý:¢ê[”àjYL¼C;Á- +MH•(ÿ5–ÁU¹HœIÔrªW‰ñ¦_t¤ì +%Ð{_4OûÒFÏ4jÑ“ç•ÏÁí�j_9IÍZÉ¢¹'oÃÐ(kËÕÕ©æ%.9ÕO´sÅJ=b±¿ +2#¹ÅçÜAfu¡O1j㙿*³�ŒêQ„‘�;û¾DV³Eöp˜Š¬ i¼–Ì£6̬Sâ¡Ìô‰ì×ée©²Oñ“‰Ë.•ýy2š‘Þ¦fzgó”ªÔvŸà䯸¤PS©¿’)DncÅÇÁ1¼æ òšÐOÆ™9GM MØ]Ì¿zLW é+eª Mˆš¸Œ*;¶iáHkÑiª +®‘”8TÍ�š §M„è2‘/VzI|ÈÎeÒFôìŒRŒÅmÑêS)öyä�E„Äôi˜à8øxÕS…ƒB$Í£Š‚ƒEÛIãÎÓ&,c°å³; k 'Ôh)×8Dԙіªç"EGðX2)žyk +AVC\²¶ª³ A¹"É,Y¥fn* 5z<ͧj!ÆRÌ£qŽç5zNäVKäbšÖ�ç#”©zqdåÒ•[óÓ¸hö§(b(ð#e!+«û™#TÍ%Ž»\uV�áp‡Ãá„=1•�šñl:C¶4!h^ AE¥ÛZP‚T©êeæryõ­Š¡Ð�t’Èc‚\^UÅšºjÒjI½T!bIB‰Âê" LTŽ"ºÃPµ×ö°ûa­HÕön_¶ÿ|ÒÀ²§”`±±ÁBÄa„Î0‚*˜Ñ B®(ó†@,a23¡!BÔÄÁR T¢j¡"T„ŠPûC­¥@³K( CÚ"-t¡½° †Ÿˆ`ºFò‚Yó¤L‘K,\ ?šZ(‘Pr¡:5ë"Hé ƒTCÖS3¹˜¢ó§Raž§3žåth*L§è`[ˆ4t Qÿ $"�ƒËЏá á’˜n8,#>ó=xfÊS¸HL‘¾ ""DBŠBå,5w¸tFwƒ…á D‡…Ì?˜¦YAÁܪÁ$— å¬2 +5‡ªŠ† +Õ †*Søha(‚/§˜â˜:ÛFBy“ßß>¥x½J/ +Š(û¤ŠÇ´«bDA#± YÖ ‡¬„³0楙WÄW|Ë`ßÙµù(ªðtªb:yìÑUî0�®Â?:[õõñ)ŠB‰gáp×  ‘ÏÄ +SË¡ÍöºhøÐ"7Å’A„ók ÑD8á,4p  üyØùÜ~£¯ðš¢ð)�Ã=jÊ¡cmB™1ĘRÃ# 1<ÐÀ� +¦†’©T„zw(Üisá`KŸM$¿%¾OÐN§IDêIMCzÚH¯Z ÁLÉà@˜pAu9h"¸˜�^ˆ + ˜,Ä:Ã[æB!\´¹dí=1ž!‡ –ädG¨T2ˆ!à\ ‚ ˜€âÀâ@¨�0[U§* �Ý5$Ù¬<¦¢êI¤¦)ô89Ey¹øÓŒš’‰ÌŠ6TõÏ�CâgthüÍQb”’8ÎFJ¤J*#BÙÌV‘¹�‘H>1$Ë·4eN%#3ä%• + +2(3®ü¼Äð^Œ©µ ca‡1–Ä(ƼN + 7"‹"Îk¢Á$Ë‹oâÄøh1³˜?_]æA4'EŸzÇ)4ÖêAŠ}A³èW±O×KUZRÏúõ«M*œÑH¢–O7îô˜Ëh’š;$Zçdšãã„Ó¹†A™�„kSýƒªT­jO²ªùÑ(£HJ±q ùEÏqˆˆÒn.ÉáôüU.‹ £&3ýgÔ…–ñfæ9›Q‰oŽ­‚œ +‰¦ËEÉ#Ù4}M6٣ؘ¦Y}íVŠgjƒ,6fª—¨Ùï‘y�•Ô8R† c¸Êp2]¸‹ 9šÃ.Ó’gŽY©3"މ™ ñ^862ª…§½UMÁpg!;L'Ó.{EÄ**Y%�#årBhårg`�AŸPqXô[á0ƒB3i4nQÿ}ÆMš=0TƵΆÒ1į¸O¡XÃòÞPâ£î\}6–y™„!e;Ô’0VuJ¨(11-*Xx’$åT9‹ˆÈ Ù�U֌̅œðœŠŸëÑ™™é ב)>Μ£õV�ñŸp¬ÿϧxfœQØ)]¦þê[#­‘à,dTÿôºÄž�ò +>Fíçѯó<Š»Dûz%H*gµ`iö«ÅW¤«Ú|!5!¡ ùÌ¥¦}¦_­“ +Ê&<1ʨ¿1.3w7�hÝ›IÈ"èÑ’]gÚºªª¯ñ•mÕKÍ3%í…Ve§Jfþ~.~Ikãè7¢ JQÅE"ašò51Š ñk�7YgHóÑ¡q[§3ל&X*Áã´JÌ9I™;sªÆ[�ôP9öL?2@Þ³EÉdF¨åIu£Ú¨÷Šv?®Ñµ+~õCòO§¼ ¿øˆ¿xÑ(1ET3á0=Å*:…´µâÔ\²vû�éøC—˜´–â(Ê‘¸e1=’‘M{LÈ*6Q=ÅÝ`tâ“®ê„G3í¤#¥NŸT”SÉȬ2Ò‹ÅÊÌDÊêŒãu&HÆã¡×©éØ2Ë´å éÈd$»%A ºí‹SãÕ;9)öq.8#NÍ0XÅ™q¡�Õá‡DZ +5U�QSš Çtq:ZQÕ·$Ž`‰¨:M¿ÁÐhfJpL£l6–QÚ�Œ4âeô¯>¹r²i²h2ÍXÑ•JJ,£œ\~k†«ŒR¤KÜ âŒFÂ!®lîÁM‘H!Ö�d«œF‹ E¬Æn8$ì&]÷êÈäAß�†ˆÈΖ¤ókÊ@ï“‘¢ì³wÞ¼o¤þ¾>ÞB[7Š Ô…é4½w˜á]§÷Yï»Úë}g ÓÆðÿä¬#õ>Æ3QïþìÃû }ìh‰¶N”~¿škÞ6VfÚÑH›öDc0�“ÖÌHÈиE¥Ì�"úc4²òÌGºXÏ3JLk1/—Š�#�DFÄì… ù,! “}EK8ÐÀ�‚U<ñvÿ8P@#�h1´øˆè€` �g»ç�J¾õ#ÚöŠ©;p´—p­ÀUà.ªžf¯‡9•ÚºXªøñï�¼¯ßã]š@{Ñ.Òû víÝç³@D{¾ N¡{÷ ž]vÙWš�ÜBÑT¨ã°ã~ƒãŽShã¡Ñ8…Æ:S©‹$$~ +E^+’xG⌖ŒÓeœÊ›»x…Ô1+tñÆIñ8EõÛÿo½ü¿N*´> ¥×BIBýRƒÿVƒËŸZEa^àÖüÉ`‚\ä¼ë(©ð½öz‘RA©r¹Õ†UW³šUWÁ(bÂZT +E¡6¡„úQÙá:ØdbMC +t.5B�G¨P+Fˆ‘h +tª2ıç€ÐÀ�,à–Ê@Çœ‹À9]è +‡ +·j<õ“(¨&Ð×�¬€UïŠHˆ>¡HiÊTJµÄ颥R#RŽ£ +á~¦—±ZíL¼JZœF(Š "p¡ .Ó,@Ð>è5J]¦FÁ ¥ + ¥šP*b`ga`Ë/YªŠP’I`KùTe\|ƒ%ÎÍÁÅz jÍÑ©ì…îóN¡•U¨Œ„ +‘BÉÍ¡š”úÂ0B´…‘3X:–ªX˜¶•Ê–=T>7º³O¨”T¨�B'³p@ …C‚¹¨tû€ r4šDŠCBA(*«TÈξâäfC]2©×òžqçJzܳùèmK¼ Ù¾�‡ùÜCî”qnnÐ,’ÈL&"™‡poW™�Ù¯HÄ¿L·Ž¼ßK'ÒCw'm +¶¾#Öo�ä¦%<±tÔŠ,TaɹNâÛÏ’T=Ì9†Té»PÁÉ�}9€kƒ`"yñ–BË¢ÿj÷„Ê•í© kþü�|‚Ó7Úø¹âÀN¶!ÇãÏ“”4´¢ñLDµÜl µõƃ_L“5ÿO4ŒZÀäî� +Þ•BTó›�+jÕ•‹ÞýÐg ÆÀº�½¤–xe%4ýŠQ4Fu·<@™·v×µ�üj¸~ê`h'jcnN±‘•dç¤1‚àÄö8Ôr®¾ªÒ ›J’ípH(æµÅÔåœX}§UlsJ-Kûú0·´=L(ÉÈ`´:KJ$çÞ¼VÊA+Í+R‰+ÖØe>ª]EÉb`~)ŽùFwˆ÷¢+¨¿ÔsÐ âD¥RÚ‘CCcšèJ—JDlmˆ.aÌ*\D£¾}Dßo“&å‘ÒN³‘6åígQÓ`[±ù3xÂ8aRàò3a^ö oÙOUçFèæ¦èd!îZ„g*­æX�Ž7ÝHÑ£Ÿ»’«îøA,{ÿx#µ\ ÇX…Ý—kɸ°}8.\o;TÙ³™ìÂ…®+üíÉ茈(q«„OŸ'#”<‰ß7•E±Â`>ïæO–i‚EbŒöŸApXë²Ç9›Å�‡Ì®*%Wô„9 /K™™-P‡Œ�ÿ>½Ãc2ÿ‹e3‚î�†j„wød#¡Ë€+Ø)¤¸93$¤bP°yB=ÍEÒÔh»�©»_·åì †‹{È݃qŒÎÚÌØjûf/X"ɨl8ú6- U:b³–r\¨ŽOÈÈ:p5�yU·ëµ ¢›03.žÜQË‚+CàMiÐË¥®ÜÜ: L4;Šé” ñ’¹d.Œ@QÅmÐã�Ü!êîSYb¹<öÌ&A|RÖ£óð�OLµÃBŽ˜\âÝ ˆn&ÜÓ¤UÜ6š¥PͶ½Šì�[Ô‹xØ©”� ®aq¡Æ¾ç˜‡& ª°Ô˜pL.Êó#DXƒö¹OŠ +‹5¢9Vdáu, Ó+”ׯ{ˆD€ F2eJvñä`òÕŸ N,æa¸bÕè~D}ZáÇØò$‡m²Tè"Ú“k_tÀM™7:Yµ�Ü·Ÿ s«]7š.DÌXt�’ºøx¥8cïc±[“£ÈA.r;vÐÚ‘EœX»Œž„b±zÔ`h‡*fT Dá� YŸ¯Ìü{î\CÈ¡g%ϱ…öçÆŒ€A¯Ò·d�²€èÖN]Xk†å’Ý/H‡Å,trlîªЩ£ÕhŠU‘E@9 ÔE�p…Ìjàè™_*œ2pÕÓh(ÛÈÐf=|´6 <¿ãÜ *g˜‹ü§å dŸáuÂ¥¤^â–Ç©#_ˆ~è̦-\$wj9-03ÂejGwηëÌrTêä!IK¢Üò%pwŠl¦ÿ(Ê Ýº_CÊRú¿ðOQH¾3O-o™*Þ1£D“渀†)r‰»u—ß‚ÅÊëïp5¨y¬/¨D.—‰±8Oœ|x¾Ì†ç�mÎ>1”>…@ÁÇg�ͺ-F"8¢8l²ª’fÉÛ-CNÓˆ #ôwWŸyKÜ +Wg§bJ “`²¥qaÔ,ÆT�Íùˆ]æn�}íŒ(ƒ(Þ|þ£}Ù×L!àû»a¶‹¶ÉW¼};WEy*ÖAÚXE¯(Štæ~+\@ê;”V댊ÖU– ©ž{Z#üVò”íª–s :Ìëÿt¬fh#“þÎîž�¶%[Æ H ysä¹-¸#g\’Ÿ×–!ùk› Ð@F’é Çì�T.zm<6†ç¸Bº(0¢ ®›3–®æû?žŠ½Bªm´êÌÈ|õ † òŒÁ•2¯WÆžUøt`û <#Ežœ¦ß{@ÀC[áï°]W“ý¨Fy&þècw;sÚ I݈‚mI¨.�‘� @='œÐËKA^ÓŶ€}`˜ ?Ù̳v¶(+r5z³Ä¼TÈݵáB®ø¡ƒb¦òʱ-€2¦[‰4þëJ˜Òòå4Z®–Ú¤Ö?½„Žñ�VƒPË”ôn.‚²k¨”þ‰.xQ ®;ìsØ!Ï�Ý6ñlaI×Ý%ÉÃA¤¶Ñ3úáºÄ�›ÏqáêYÀ&õ áG‰! ¬Ùñ¥áZÊÈ=KÁ k¤Q4ûº÷Åj@úzÚøR²ôú$Pi1Vå's¦U"ô¸{äA¯5Tº™œ>�ô3¡KåÜ%夿ÿ€-)¶b+k²Rø"ÉÑÓ¼Íp• +@• ÚÒ±S†s3®¬H4§24>— ¾ “6½Á¹cGåÖ«F†õ7‹¬2×BÇ�¢ø›ßºÌÅí)ÄÛ9$q=óHåXD=ÓujÄùŠ/‡ƒ N¯ÊþKø�µÆ/ ›¡ì�ˆmZdO’ó𕈰l4½µX�B¾j~&ÔI¼´™$,º/æÓ_š•K1¸`ØtÄ©`¯dz‰¡ÉO}3qê[bî¿ VÎðëñ¥¡Q×|¯ ”ÂËat½‰�-£…öO1'·éòD’­ �¶°:O»"³/Ë:Á­ Ï]¡¢Œ¼ÿ…NdÑÛDt“À {É̓*Æ‘P©K#ÁédIX|2æœ*ðYþ ’Û§’†™7ò‹+ïnÜ"}W8g>O•´ð9|Â/»ùäLšñ¸Ý7›Å¦K|:=ôµÓêÓGáè¢�È⑞+ ��9cª~Ñ L±Ë@†s°–¨Â¾�šÄK\Ô#A*ëEßýßV7�ájÈ@ ñå6¦†6ç¯Öú 41P—àÇÂ%n)ñóÂVfÁ< âM™QN“ínTŸ/¯ušXk¶-Œì+©´Ô¾ÐðŒÂµ”*ß䣨q4l¼yR‰ôJs°y$ -Ü¿QM¬}½�ÇË|9HRkn¢>™rýÞ”#áZ¯ý©ßBÛIØokž3ÿoñv '�M!©žð€ÝuGêwhnÑw‰šp,ÔŽSp‹ÌêAA¬”÷ +ˆ¹ÏÀML›§Û7ýP»þ½½ €û2{�\óE¶®±�§šÑ[ Òàÿ•6ŒNø|« Ôjë¶¡E 2âÇ}!§3…RUg[Âyñ’ÊPt’¹öpºój=\µh§‚˜tðÂèºs(š{®;d’`M\ýåâ£ìp­‹0@9®Œd'öcûóS�&xôK›zG‘Š2l¦_}áUi& §4½™¼»¦¶qưayÙër „0ßÊ� +¥¶ $»ƒ£¢¥†Ù¶(òVöÚoóg'hãä.ܽ‚¨Ó�F ›Ù~T"ƒþ¦3ÙyZEµèWþËú€ËÕ¢Y…}2È¿^ÎܧЂ2|–b××ËÅŠÜW[‰Y¼Î!íz†UÜõ™H…]–f-ûÔõ +Ú<ëú€¡¾ è4繊ñN«KÿÌáç< š÷ £„Å…àæ¨�¦Èúª{ä¥AG‡ÕÀþ§1WÁ£³ràþ%ºÑ J¯ôľ¾C¼mv0"$¯òb>%Mçҙ㠲o—–©fÓOurÿ6@%'ù¥v… +H­724Óó8q1ÞdÁämÀ�ò�¾û“Íä¶ ÈíÖ4ÁÃÏå„+'2áûÿÂyþü94:z/âNöËi®‚žÉ”óƒT`CŽ +yWûZ¾ªãНrpê1å„â˜cí)cÀàÓÇÄa…'�A ‡ÎÄú‘`w[;…,lG¯{û”f°‹ÇP{Üûýyyñ b†cy9f¤op¹i¡ ¬Û<—V@ÙmdÏk9u™ßž'8|°ˆ ÷°Üj|=À�©ï�H†—c&p—­Í¥6%Zl +óÅY÷ÆžÀ�®Ïñ¦ýÔ;·×›i™Û•mªª¦êIû•n( Üù(Z„ƪO�R¼‡ÿ¬f:êìÕú«ÑT·Áå=IE† ¡4èêˆÜ)ðlC–ð‡ÔÝ“TÃi–õ޳êJ(gwÌö÷¢Í#6�’»Á÷S;í½í»uí�œ¸N•f>ò^“_ï�ô—— 7ŸÇ2évJïÀ]1eí²·°_¹º¿ÄíÐÆÇ¢oõ¢:R­ShŠœºEM@­U責짎5ÍÖ\R4Â’ )‡|jØ‚Yë,CäþbxµFÖ|…ž°çƒhŽ4øˆ@(ˆŽÝ¯úðAìð®aº[I Û"ÁWëÝAÒ ¸j²?¥è¥ÇÙ>>\ºŸ@Þó4ö•RúÇUà[… +€Ûˆ;ë3¶G’ׂ"§,¯ N«95Û +¼r­m@¯Lf�™ûÏ~Œ€zÞIjf:ü9þ‚švàbf|5<˜È6§hÓê6tË<= Mád²I8ª¸agØsʧwÖå/ 5G1‚��ÈSÍõÚªžÀ�ÃÁím(H3ÿj ÝØ¾ˆ#—­èG]¾f7„Dòœ5:Vû8¢\QæêÍÀ­Âào�Yüc!´/ 1'si7×éôÑ”g¶y&b6ðKa´ÓÏ4Xöî¹ã�¯g«{ƒ]€)¬:b} ¸Ê|w¼­™¬»,áûM3ïÙhÅ>A�ì°‚)Ôp�"wtÈE{½*Ú�¢Æ±aÊu}Õuœä„Û7òئBõåõý›÷@|®êM<èçmÕ…�Â÷ý/”PX€ÀZˆiÃØSfœ^WúÇpž¯6BØ4Žé3A÷`¿l¶R|CÈ`#0e–Kai̪Ÿ{–š#g ˜�L@{éÅm%^…ò<ãk/�뼚ýãJ2¿l€ûáeá�„õº¦3_‚åã8 1@ð:Ûu¹~&¦¯MA•#ª$.³`¾.ß¿@ÍüƼȳµ-õnÑÔ± ðámâb†"t“°…^jؼ2‹°,\0U#ßuÓH@ØRl$‹¸[[‚‚6]`f!M4~È€vŠÝ=æü2S[™²k,]Á ½Œf2A\H‹pµ'Yl¼³XŠººœa`T-luã”â"4�¼ù*mŽÒ’¸¤>LõàX�ŒWE+4oÀªÛä£Í˜5;œæZÛen«ãÎ áX:‡¦7 ¥¾,üz�‘”е!tŠšKWÿÏ�U/�~»�¦Á®M8rGkô’²ÿmÚ:ŸF‘P— çò0Çw/U¯èwMšûe¸±¦7N�œàãÅv&2jW‡1‘öVP˜·C˜DŽQãéh…t‹æ:íl*(ˆe8”Ø_g-é98rä*È•é™î˜™Œ½�UÐÄ|ˆÊeÊ7��DEfƒþ½ôõ£;d‚ÄáïŸ]‡Õºñx¬Hͦ핆JL#^Ø›vE°ë¼o¡¹!¨®i ]©¯ßc<ÆDà'¬ïy\8Ú.u5i-A‰xŠŠÓ§r¼÷Û ¼`•F–W!^2")Õ(¥Š…}vÌÃŽLv1c—l$|DÛla~5;1zñÎЉp™6Qúy^ è´ ­j@M¡HDûYÀf5ð/.‘6†¹Õõ›²hQ›Ç OªÚm`«©´¼Ùh$µÐÀ¯$•’Rô( Mì&ô,*©‚'7+ž³ZW“˜MN�Ðäñx·R—¸j·Œ'{¼.#.FíEÞ½hæ©ß,i$ +Žñ”OÜVêÕ9d‚�îàb´°kÀJ*Y×"Áå}Ö}¹@ñkhäß­·|š!�5‚ÂK£™Óœqw&Ïù*—¢šÌ~ewÿaÆaö×Ç� XEøÌCÀú!˔ķÓ!pŸ eCÏ™E&<@»Q¢1›Î'tš8¯ *NÜCÝzÒþ[áðdžæÿôÚ<Ç9Õ@ÖǾQ®U˜@ùó’Íê`­ñåÔÂ8<:ZmÿNŽžµ/ÕiØ™ºÍ9Ý|ou‡uFÑVøP?\b¨¯»ò÷ÏY Ó»dÊÝ×�TÀndFk»ñ©yiFj´Æ•Ñ^+Q/¨Ç'"¬;=VleÐ7eËrÑ�WÌUíK´ï‡’îd¦îƒeÖûmJQ‚‹Ýhj˜§1Û cpŽ=ðÀö=»´i;ýi6¸�ÎŒ�ß%ÍPßQ7½K°œ"C­) +4Øaè®�ëÚVC�ò¿-¬§ÓbP^ø7(a¬>CCþÖ»3 ø%'Rz@‹ÒJ}ª[*—AY’ÄŒŒ°kx—_Îp–)~]/Ÿ &ŽÈò4•Š?BÐJU¹èª¼9¿ƒv–�’Ôòƒœ"7‰‹bÝ¥_üF5CÑ�–[á¸ä2)Q_:?ýÀ©Ÿz–ÍBhë 0C³÷�¢þ£æ‚N†Ö»)Ÿ´.ÌŽø¡IaóYGŒh9u¾ÒŽº’†¸DõÞd="]3~3.N„âmeíE]‹ÞVO²´GÉ4ÄwCpŸ`ëHŠ¢jmûi£ õ$åáÃߨrüô�¾`@U¤þŸr™»y$ð‹ aõÚu'þ+¼/K€oàRE×!ºÀ¹C­Û¶jaAàs£æ¶…«7c‡}– tZ;²5Ñ8îŒÛÚvï([»CA ýÈuíÅ{©®œD†¨®e V!ú‰¢˜Ãrí- FTê�¸ÊÇ‹ª‹•¤wù d4ͺ§Ï¬†Ê5ÝË”�ž#.;b%6£n‚ ŒO åPh,6­nE"ÄeãÊAGR¥ [Ï�ì.�Ô Ê¤üûæ!!Ú_Iâ$níCU­’¿¸��Ò¸8•gpøÂDÊ®ðùXÄ2�gibNSbzwȺzAW¹G@„Ôi�‘_gÅüwØ’˜OûAxe3jA3ÅB›È`€Ü®æO“��šqÈø,á^Y« IqDWWø®»¬ñjü³¡òJ‚bœL�«î/\ñçñ‡*‡{º/Ô[èÅ}ˆ�×Ò*JEÅ<@ §žäÛ˜P`¼Â{‘7qíÒ 2ºÿ±TãüûÔØÇªäˆp‡ä6çD7 �î#"åð÷²%½Ž(>ææ6Ãï£V <'71dÙ[敳ê +Ôr �§NPtM»Ÿã“dÔÐ+ëBŒÇ;õY‹{,ˬ`tŠ�£©ºx¦C {ÕdÞ½ÝQþ›ö4—¼‹ˆR"AfFjF¥‡ç+‰'&ô«°;Ç"$ÖÔLªx»VËÙ[ûÛvÌm©tt3eÀ‡E&Ó ³–PC¤üMË*8Ä08Éêz+ f�cÄ~ j¥% Æ3ÈàÀ„‹1hãc­1è¤í'ª”€þ¥@lkžŠ“‘Ç“ª©§ß]Õ¢X£ Ut°öp­ý˜ÍœœßEµ¼åºã,MÕ4Wº`cDáßÑUO±€f@”ã)„„DºÂsdC_!‘crÏ!U+ƒn$·†oyÀJóSó6D�”?‘µ‚ž{²ô^…rˆdE¬e,IJÚHó¬@7çÞFøurûys ŒÂl<ÐÏ”æ…/~dÐá'X)%ÏËë�U½ìÂç¥ãª·2ㆤBEÅ뉫ÆÑÃHS"g¼²µò«ö%±¦ j60·›?±Ù‡Q€� +?ÏѨ™’�’Á(mþ{=uxyJûÆËRÎ)¦ÈZªûZ�à8›öòžz`�^ûÒ|;/hŠsåDÃö0±‹\�7Z,\´»ÞG·7ƒ[Æ8¬%1™ð`Ò!Pnj¨ • ªú,ë_—3y…‡z¢ë @ž! ÁÍ·»1ޝƒ4¨±<•ÖÇ_‹KW}TBOyÐ×ük%`„QFPððb/’Û”1˜©¸ aJˆÙ™5pÌuCà„ì¬ìo;OÓ6>S«|9(ˆÔ +£³c|QKÎGÅžŒù�0 v>°ÔÉtI0æìóLaDFwqTÂñI 9ì#mOÐÀ”lñç‰D]𨛠]c™BÅfí|ŠA„'çCéÕ=»eÜBÞ{›REÜ}X(0¬xuìîØ$ê8Š?€ºü#ý|.§Þ&Â(‘\¬\ªè}¯APFÌ,»;XXŠm»A“uð}V?¤6ìÙ +߀Êô8£Øúl ô*è4" .r€�!èú�\f\ǘíeÃ…«y¸Ý6 »�¹7Eã�‰8§dnÕÞ,1§Pùbƒ¸‘Šú\BÂ#BÿÔïD´ªå<}›³%â¹$C=�Ÿdí`à“Ø0BJ:F�;3=Bø]°7®™C£Å«…CQ·Öë±=ÐNè„ v@ûW‹)OêT”¢”¨9¼$dùÌ»‘“‰ à|¦pvi4pŠšÚH,wY•ˆ°4*fj¿ä .‹ý�cï”JŸC< +ø0hHʥдžÒ˜ã·F é’.Ü‚9îê ø‰íèØ÷ ]–ïÒ`K–nZŽºN¿VªµcQExPX6H—Á[ʘcpC†ƒ¤>?6ß £º·=,Œ�©l Z/8HŠjSª g±N€´û•Ä(¨ÐúñÀN"î²*ƒvÙÝ<%Üb0@D]3l!¬©ÔÚàPCЙŽ@emíÕ�ÿ´e’€J'HA�½8×]ü´ÝN)O;AˆØ Î…Z¾ÄêŠ)b€ºûÄzalhJ1Uì]�À¢,c@�Xk› …*¡m?¢(™cé cy%ðuâ|á·3¸�è€ +çI[ɈGstá̓«ZiQ!û6's —�º¤Ò–µ¨´ª<„0§^üö!ãpaÁÇË—A•"ÑGp_¢ap‡õô)CúÎÅlW ‚j„¨wÒýôZDK èÚ³â¸AáÃCykH\žŠÞêÈm‹’·Ó(( †Pè�8˜¾ªLá({"',è°ê¥¬Ñ&°Arð¦CÆ\xäò€Œ\þz’?K¶PÒ?‚=yˆÁê‡y|lÇ•æ4�;#,%-|Þ€RŠq)Ú¤~v¸:è Ú-ŒÈA§œÁ�ïöíꇿAG¿éYšv Šî¾÷ÐóY6¨~š4fOð7ø=C’è-@¨ÀÛÀ*îä#ˆa…¿Q+D¹G.säôÈJ¾ÂËçô•ÂBRr,àŽËÂ+=Rû³p&�ÈB-XKÑQ–-laÝŽ€Ÿ[HƒGpáBŒ*së.¨ÔÞô8/|æÃ ÞüÂñ0dÇ wÜnÂp͆(Ò&$U¸©úbM°Ç€�A†ÏJÉ€O6e8ž[†œOf¸”ŽÀµÎÖÎp.!?ÃoìÐ�¹Žð! ±ì@ÏJÌ)™§ßgëª�„sò[Y½iH(ŽØÆ†?p$ÑÙð¶Iw‰m�GLà )uv5o¸/û u# ÈÛpx.‡ôº�Ã÷£2~#8æ�¯!Ó9„ÃŽDH®VƒØH™èàf�p0NcÕ�A�@{àÑܳë3u; šÐ ÎÝCd–‘Uâ [öŒ|ä"|í÷Çio‹€Ëª´Hí›>Ø *ò?t€E|󭈊wQB L¥"• Ä™SÄŠ ü“" ++'ð B9 Ù¯¾Dþkz"Ñ3'²N ‰ÔXˆðŸhSÎÔ²ŠÈÕLJ‘Hˆ± ðhìA¨3"°Pçca·–ˆNˆˆÐbˆ¨ñ­\¹iˆÄ"î.âái#î|HêfÄM=¤[#®–ŽjìyÀ]„îEðWúBH|C‚rÁ\‘à‡ }$�7%�Ȇ€Æ$ÐÔh��† %Øe<¦ê­JÐÈúè• ¥3ÈãùB¦vÞÉ—s¼Ä j!Ü€‰ð°Vý%bÅ +!ñ?…à&2…ë˜ÈÔÂm™› !>ùÚ&FM¸EBò±‰³FHÎMtNH!G愇B­NÜ·z'Hÿ 8ÎÈö `À'ðv$ËOÐÈAà +˜o; ‚^ +´2<ЬÏR¢  ‘Á\™zp}£(Á‚R\§ mf’bqƒ¤&JÃ)ÅXAÅ¥˜A€yH£d +!‚9°)¨rðØ)Á@`‚»!ùSä1ù�^DE¦w¤â,áÔTÜy@øQÅ5Õb¬ +ÈÁZ,Ž`€@¾Šôäà±nò¡PüsÙ +ÀüÇbqVÿøë +ûìy[zÅ*þ�Ò¯8ËþÀ ƒ®€�X ã\f,𳹇öS©¢ýû±ZY¸Ú�Â4‹—õCîYF?£…£ùaèiáF~HX ãðÃ9lá…ÿšÕ¤ºjnñ³} ÷ç± +áâ¤õA?¨¤åâ<ú ü\œ}>èÓÅÉæܺ8[>Øñ•|Ô¶‹;Çú»øL|ð"/N…:zñ_Ú‹Øøñða`_|÷5ýâáîÓ¿øË=JdÀx1{Ü Gíÿ‚±,{@ƒ0Xâ‘ r=P‘a„PÊãäadN=>âé1×Ä@*=ÞV ”Ñãöb =îg „žÇŽà<®ó@4�I ñåñVd +�Û$iò¸çd`þ¦ŒÃùʈˆ<0qw<˜0# ŒŒLñÀ‘àÃ�™‘`ᱩf€7xðfÀ <Îæ \Çô;‚¾c(>c½ã* �ï)4àÙ/�hÀ@wŒ ¸ãŽ—”4°~;^»4ж71­ P# í8œÔ@3;f©0²ãÙj ˆ‡Ç`bÇ�­�;né@½Žk_!×ñ6l ´ŽÛÇÂkÌÆ¬ƒmœ¯:(ÖÆÓÔ�dm〨íÛxÜéÀä¸ñB¦ƒRèÆ©ÒÁvÛé(ñFJ ˜ˆO£ãox#:dí9ôþ s×�#¶s\T–s`ŽØmŽÇXšãqOsŒW ¦ÌñDÐ`޹â—Ã��°Wê>9®›r¸òÊá`Dq÷ Ê”x¸�‹ÄLŽgŽJAŽÎqÍãˆç9p­ ãýŒ#´è¸{q´Lé8Ч3›ê8¤F“É÷"ûRÇЊ£ªÕñ´à[‡2\ÿ:(• „£$€y‡CI%â8&:Ü�ì–ahs)´ŸÄ�v@Ò†êpliÉK;öGn ‡ Á'Þó dxÂ1ÈåÁ!Cèf'�+€2™[CÁQ[ÇÇÍ7Á‘a)pjuäй«Ù):ˆ¿1®u˜Ý7Y/c´|)çÞ@u?½Ž:BÊ[à 4³¡¨àíFóݺ`Ôq‹nð²:޽²Ò”Ͳ:ŒÌ $Ê�¥µáF…¨·QШÊÛ&Ém”Kiµ”`¥ë«�ŠÈi£@¹Z±Cy6h«Ž_AZT2]¯ú5 Ÿ^bl`' ` =lD 6p ÚIubRº¯F9½®QÝÆ¸FuÛÖÖÐM‹ÖèŒ^w²F%Ç÷«�„v0m5 ‰V�Ïó¨8Rª©a í0�Ôè#j8ÑןFC¾�†ÚáѦQb&Ó£ÜÒÓ¥4 fH�¤ühàhG´�ƭħE#ÏÜs*±M‹'¢Ãlhð¡ ú‹�Ò@£ê¼Ï(ší¸Ë=ƒm;ž�pò òÜŽüvÆÑ´#V;µ\k19#…8¿ÍHq;B»f@y;•f°oG�3ƒ‰îH;™z?Qw3hpG^ÁŒ m^b9\žö,½ä•�+RVe s²š0e4ÂÒPV'£Œ, î@b2†t‡ %CGÞáõ‘¡Î;|-2¤8"ê— +2ª|~ Mö ½Õêð8ý†ñˆ{! Vy蛟y°5FÏ㳊ÿjŒH§Ç¯`bª¡ l +‰—ð4ô*†1D^]ŒìŒX ˆ4*Fü‰�ÿÊÇzDkĸ/%æÇ#jö0¬‡+‡Ñ} Cì |m|ìÿ ¼å±¿€>píPPhüöAµ/rˆÙÂ�GúÂ^~8“/$zôéÇ|â~ÐÛ Äòäz�îþ€K/P\€>ç…”—¼�ñ/JÈðš€øw"q· 3ÄSvQK ?® I.?u¡”㳨¡  ô’Ôǹð_ðå‚™ùL.|¤ æŽ •Gq!!/\T¨ñ.¨1È]ß"eƒ|ã-|ë &º…íñ¿-!–k $Äël¡’ q(ú§(¤åµh[…,³г�Sµ@ä…0¡ðÅÓªB�Öfh^ŒŸEë7DÚY4ü7 -bÈ�ÍCQe>¤ã² ˆœ½f?Ek"�$‹”"rd!ôˆ¸ Ã'×ÅB±™XhÉ _p"†‡EyVa!/Eü *ªˆ‘ÀBÔ1ïWxÌ"F|…•Ý":…t‹é€»H^�É\W #ÁsI2’WÐlF¢Þ +4i$¥­ Z#1yl#Èj…û)´Â|›Y¡þ� +Š^+ìWî—vÒÈ‘n%;;Ëü�#"Ë*ÎcŠ%ÂUÁGŽd¦*ôÑ‘¨R…šI�* â‘ì¦B^„KEPȤ‚\�„;*î–)*ð´*°z$¹@Åêz1ŸâR…§@@¸L"úÀÃ$5…{IJlà¾ÙS€â‘0.€$,6íS +˜ ô¤xÅŽ`KгWŒè©A +ºðHî´.ô(<þã(мrxäòÅZìHfE¡—ÔDQ…GQ+¼ŠØ˜ f“BÁé:’2Œ0‡ìpS/V¿Ž@\PŒ Zò (Bçˆi±àŸ¨.™Ÿ(:^ŸhbŽ(Æ'À¾9‚·'3¥'ZÄ_y»9OYG î\êu¢€Ü°Ý…GŒP'€‡;ó9±Î�å„}Ɖ¤¡58�ŽÓ›hÃ#QÜõHŠ6ÏG‚_Lü‘0FHЫƒD�2¡¼�d‡&l ’:®Š$ˆ™pÍHÊ„ðÆ =�$r1�IÂa�$ð† y%yLÔ¤û”øÌâGy‰ ‰9]ÂÜ“8Á-!¼íp´J£d–в”dFÌæ§d8 ƒT‰\*A’•œ+èJ0§âÂ8SU³¤EŠc-©%ÊKæ¯#�é’)NE^¡I _†IÀL–Ô ˜H&®^UL:D6=&jW74Ó‘è(“hŒ3IQ$êLb nh­�€cšlªSŸdÛ ÑªšdФŒ×$“�8™M°ôˆûm‚�˜Œ7lafœÎ /íâD[qâÊIDd¹¸óì9‘ÌFL™N,ÕjœhDö:±fFPàNȈtðäFX”'V¿íôÄY¡Òž¶ëñ‰‘,BÂ>qjE¸ë'Ö¨Íâ>pìE\APÐ�ˆv@ÆšˆõÙ²DxÇ'–‘ˆ¨ÊÀâf(Šq°CÈ!ÚÕ³^þózÇÆpGžNˇ&ÿXãºDø€k¹÷€º*÷ÀESBiÿ‘)(°‡Í—µz¸k)ø¦‡s_ +>DWÂô¥ŒŸ‰;â™2ÑÉqæa�‡ ŒŠÈÃC<ðÀÿKIÕw8Kã([JºÃÍà¨ñµ†FÎÇÐJ1+v`yÊY‡JþT‡¢ó§CáÛÒ¡æ·Ñ!b¥:°£”›=~w9‡ÞošCíÌ¡EJy…Wˆ'êQJ¨"‡GJAüñR˜ãqÀh³ÛØ&ÅSÅJ’²`ÓdÚ6)h+~"¥t!t+åÇ]3`3Ë-¥>T/Ó40¥éÅ‘»�É‚ ¸/M™»dО¦À¯Ü”wTN>ì”÷p=%;õSާA%Ùo |¨‘dTp¨HE$pЛ2à ½RA३È|è©„ÀÏQ…8ôñ]�*߇þSåpP}U1^°JF—7iq„.VÑ9 VùØWˆ. +ƒ* +®g5,Á*ºû—1­roV‰ŠÅà0ÿ¿àPÐ’ 8 FÃÕ ë”I¹€Ci W¬‚Òª(ÎY•ƒã„Ặ­Šó +\•„놲€Ã:c62UA†ÁaŽbÈÄ-OQ+Ä·*)®V%­ R8j¬rû©À‰‡ˆÍ=äßaþïl•|juÑý*xr=¬¨Èwl‚ëÊ=ÿgò´Z—Oˆà­ÊW·Á¦Z k4[Acdx+ߨ eqåç³!ŠÎ•kÙÐ�]9nlȆW¾ ʨW>öªæ+¹†0å>­¡¥Ë-XCà`9®š/,A9ˆÓpS,~ž¥ŒÅœi°Ø±˜Sì‰,þÎM4$kÒ¤¡�•%½h€ÿe _ˆ¦CƒÕ#h(„fyï3À8ËQž�©gyé „-opÈh9X30+-¿3vOË«˜Ë©å)/+¬åže 7s-'×~‚-[(�Àhí‰ÉÙâûÈ@†¶¼!24Ø–Ó?)ôcžƒ‹Ý1Õ-á6†�¼Cưª} €fM—>ÃSÃʼn�¨¸<bèl\^s "­Êŋ  ëX±) ¦Ä\<dΰ€.÷ƒÇIçÉþH]F„­ T÷Ev‘#VÚ.ÈçÛþL}a9Z—¾€ªÐtá' +yÉÀͼhÃÖD/ؽ öV/OF¶�6í‚nÚ‹su¡à½œ¢ ò2 �¹09_ÈØŒÃJ³/Ñý^‰_àu —ll �ë—„±…Cú ¤µp)E-Pô_’H '0°Ÿ…Ÿ ˜ÍÂV40Pôõ«#˜â$ (³`¾'�L{‰…÷úN,LRz„q,àO˜ß{…¢_½»ÂìôC¨Kc¸ç0À/æ,­`(ĸd»#ÆùU°ÿã3_½ÅìËЗ­³ŠÑ‰[©`@‹¹p* ½˜gR�`Œùðž1—@óà)†cþwªdUÇx3…ó<ÆÛ¥@Ã�¹õŽ¥Öb2Ä%q!cR°)2Ž‚*GÆð¢ $›(Ø%£C!Õ%sP(ˆo2¦(ãPpûÉé'¨I_|‚"•1£'X¶2æïo�  ˘ hË`Í àvXœò&Ôþ2Bpœ`Á›F̘ª ý_h‚^‘™Ø­™Ñü%èÑL¾0Ák&ó%˜k3™¹ë›É­–à�3 ”°œŠÕUBnF5%Àn<ÊÐìŒ'ZŸafðøg Ð6ÐôA„P\$8Y›C‚£vÆR�\Ѽò#(Ðh\óòÑ£q.g¤qámŸ4+6KsŸÂ4¬žšMð«5`¨B‘Çèûœ&QEèâ|š;5]"Ô…“#è¨9­{©ÁBÄA5œË|¡ð¨&3¿»©, Á”Õ|ÁÚÿ‚¤]Ío€Pk¾E5›5ß!¨µæ­Aˆ= ƒ®qEÅkÞ „X_s€@p6î‚¡ ë‰] þtdyô� ‚þàÎË@®¬0@üàš³�f\Ú @lM �îa¤#ÿÚüß>Úæc{€ã6ÿÖrz›?éI¸y¡y€7ÿÈÄËÍxÀ‹V8¿ƒ-uƒ£; �Ýä©ÝM:ì€0¼ ±è˜7¡§ºz~Éož:Ð7aª$ø�ê‹ð7íÊ8€ó½­ÈÁr3#ž§ÆA#·ˆƒž«ÄAï—pP €spÀÞ”?wƒÄ÷›OnÀà|¶ èiƒÎÇdƒÆØ ðckP9�sï1¼O2ïŽ%Rƒ-=§¶Ä¤AZÑPà„ î'8 žÁÍÁÁß #�™ÁÖËà®áÀTë}8P–· ‰SÑFqà ƒ^-΋c€'Æ™_ ÐknbAÇ�(èãàžCÎýüÈI^`rÎô¡œ÷_±rž÷«œHŠ–R½Umca0¨~æ+6ç2{8{©sîWzNÂQ?ç0àeйȵøÐÉ3‚ÑÁ¿�Îwv¥Ãè ¡é0À6€ü4êd?>uΫ/‚u�Û´ÎW%×Ñ, þ^Ç%“8'ì<- jcçÉ` XvìuŸ�LÀàGíàìØÎïœn'�” Ê�…¦§;8yAÏÝYð Àå�{¿2èÞ©•øûŽU»@ð¸ÑÐ#  —&Ì•ü©mã�ÁbSˆõ蟰ËI©RA¢4¶ Å¶Š±]P�S.Ÿ/Ø«nuÊ5?¨`By­óºaÆð£±¨`ñˆªQe l~¢P�žD=g®²@yS=6H%í3Ð~áR€¯�øD)+)@tA–Ð/’yÊíÍÀýØÂ&útr~!áÝ &ºZ8GF›g“‚#+îÞWÌ`RPwÙÙIb3)ˆÁ½8ê³õ˜IA¹‚ ôRV,B¬IÁcW¤˜ìr³²´Ò¤ÀÌѾd+6 Å’‚Écõ NÛ€’_¹�Äðî•�”K +§�TÀÔTIN”§5uóÉ) GÙ(QyA[AÑí . „[P¢‘ ]`¢ ª“ýøQØT\ƒ:QñDûîùÚ*Ç' +Ô~g7›»Um¢@¸ÿ&U[YU…‚†9|v¢€´C78 +äj-ʵ�á(8k>Œ~Nf�*ÙM¦‚/BM€DQfF|úI¨Eá/µº¬P�¬øºÜʽ–nŠ‹O�Cäñ]¯½œvR¥nÏÉ´-XäP KÈ¿`Ü@zç('iæXʽU‰nœƒ:À3A�ØÆ­ñDÈ8Á´\¤qf'8O5»æÀN°5íÁ°Æê»ÌN 0'˜HŽ˜ÄÔR»jÙ L9¾»âäÉzsãs�+ Õ׃Ð&d\B½’4ßçJi{Lp/…„ ˜¤åEm| PVø Ê$nµò: cšÁU+:’`æ9oVe¼¿(hýWî£û’?ëKX<Òn¬Üëjøó‰!MV ¦e¥ã‰<¨I°äL¨‚òtùs(D`\�G&Ⱦ?¥€²RÞ‡ºÌSA¾Â÷(s +!ªÍ4ÁÀh®™sÇÛßsÚÒè’åÔ3rCE0¯¨ˆØ…‰—•LùÝ“êœ-me l„R'²™§ŒïáÓ(Ú$!Ñ™Dú2Ïr �£|:å¼'ñàÿopQ g|‰µOœ ��>£ F#èišJ"Àó â†¨!%ÝÑT Ð®éeûV�„h£Ì£Û’@ðŽ`_¨ÜíižÁ6�K�4þøàÂÍÝP(y@È Åãï�¤L"o%ûÎoÚÖº›Î>¬ñ:Í 0ù™>ñöZÜËKLMáŸ€Ž¡ŒÔÝb?;€Ö¢œöµ0•1çñ©¨z9Zc$½]ëØþ˜þq`ùRm80åJ‘M¦ Vªo v½g•å˜n€‰Ö&¥?×ãHºÚ€³™€÷jü–£rû/1oOÒ;±ÞWGVÚŸjHåcŽÓ@©' ‚z¦âN$¢ï£h#‹bÄ`Š:íИLæ]áüOpàÐÛAÜìƒo ËÆ¼fÌPùQŽ|(¦2°ˆ–Ü®ÙÅ’d Ȳ4ùž:�$ EèÅE¡¸yc¯Ã@K‰p÷î�•‚�$Ó-,"èAùÀD{Üwo[ÿкÎʱËZAíø#øÉÅNH<º·HA¯–^P¡ô};1û¦s@{ ¼uÝ!§BAmy9qÑâ ˆÂca¬aˆ¿ÌÖ¥³`ම8Û!‰ Pº Žfb + �«“Ô˜ɪ[ˆ†Kð‘#�æRR?¼½¯hYyÉi¸ðù—}é*c„RLºnϸN~Õ!S ¨¥Ñ¬^¼ÚϰáVi"’q[¬üijd QÚÎ6Ã>T@tTàCTæÇ |PÔs7>#ž½g’0׈ê�)øšçYâüë(·-æg'çánl&Žüi¯lÐÛ\#à-”ˆÀ ÎiMü!àT0‰PrÄ€Î@ +ÿ`uq¤ ãÀ{õ>pAUÒt:�†ü5wD̬—qÉ* Iˆ¢™6eœDØ!×{» @µ.à×ÉvåA¬�Z^ü¾Y¡Äëà�þÒ˜[ pé¾ “›¡Y$�\1¦Ñ}I¼lÕvŠ· €´Ó#�”¹ëÙeÏfh�†�Q�FÆ~ …øF÷R8eV2úÀXº€¶aïsà¾ÔµX ½X5áÌ/_(ºo4K3qÜÑÓ¬›2B«†¦ñ-D‡qŒ¤ŽêdžŸ)€0N¥,ÏSâëÊ-¢>Ï™ŒÆe!Üà°P‚X!hºïp=zPÍHˆÙ_LüaÐ逤ZÍ4ЗÞðÕ<ìè¬àQ#ÝØÜ½Ø†´ÅÓñ^Û‚"zh@9Y�UêN ú.u/ÙÆ¥�ø?Q3ý]… ÁÏýß«DîØ-´Å>"Þÿ~†ª°æÖ6Ðú¿µèzTypÌp5ÿ=�›Î jç&ñßò,°.äé“ÝýŸ,ªªü_ö/461‚­€ËþýR#Ù? Â-t”"…ö/:Rê¿ÉM@þѨƒþëÔ$·dF+4D‘ò!8Ôø§Ùì_µ™¶ñ!ü'*†±½ÿFàšPSz-£Â›¶¼¯]‹Â7e®ý +Íl°¶ˆýy�›2µÝÔCoÖ?½”•ë�êÏõ‚Ô“(ØN;ú_±Š6ݸK’}þE=:› ÇQÍŸ-á1E*Ùò'a~se|pNòïJ�õÆÿÄqÿTAwfzø7mGÉXÓo +ÊòàOToÉáÄrüûÁ¼Â¢7±½Š6ìýðwDô­{‹®ùsï,çÞýÁköØKtÿÝ&ôbB7Ûà~ýÜØ×Eé×~�iN‰D•&•dg?rNg?)Ÿ¢&=òIe¿Øï¸…èûŠä+jÜõ÷¤8‹ \ïØê:YTTΙ$xªÿ@!¿-BPÿh{ñy­u•€éÿ- ý‰tdˆôg ; ­mâ°Ûñ“–ÙšÐÝŸ…¼¢ líüâ#78¶6¿å9t÷<R2¿X^s¡]I�·üà{jÛd%Ô[þd-WÅšžò·�±e¨¨¦M8ɤý’00“ðcä· òûý­Fáøï€zÑTË8Û9¼øå°¬¥))?¬%~~¼³P]Oáǔ݋Ûi„oÈ LÝ ’lÖ ø[A£�!Ø xùGZ*ù}¤aÙÅ?ø~ý3TO¤fHO1�NÏû1Ä™@0<:+Þ}Æ3lä2ÁªûŽ{ Ì}.2,\6èY=÷³cÊX/?Dy 8Eàç„ ˆû‰G©—„lcð¿P +ª;ßy\‰û.ÓMˆöó&Ìݾ²Ú,)¤²ýI>#ép<5µÏhk©ò}­ýÊF¤ö1öJ§½æ3gÉSÔ~Îże?jßM„,lUSÔþj�Ô:–oJƒÚgMXOîjŸÜ)V¨}’‚!Gë9_Ô>õí å#y|Cíû8V6Å`ûIâgÿ-;ü]_ŠP?û»é~HÆE÷Ï>˜ÌKê=Ý«Ÿýüø¦í+Xó¯TöŽÔÓ]ÿ,*û €úq^OËŒý þ"Ë>Ô£U°/U…Á¡rL +ñ‚ýmðYŠKPI¡,Ø}"X4x¶`ßòµ}¾C}¦ž%«±–ó!XŸ`ß™l±oUórû =ÿuûÌÇÝ4D×8^?>d…áKÎà­?Œ=•6-H³~QÂé¥Ý¬ß ­xÓ±N‰3ëSµBŠ8¡Ìú BnôÙD › +»T” Ù +oÚTßÜd驾»šPÍHhJý´CÉUÕ8¨×Zæ >ìHiÊYIÁ8}àéß“‹}\úK-%dÓvUÒ‡E•§)°’~-±Þ’°Ñ_é£Ô®hâ +×BôÕmæé]ÎNˆ~¦»³å¬;‘Я¿.ß`1HÛ²ôç/­�]Œvû'=_Ù¢BÑù°™¬ÒC›‘UÕüÍ/ œ/$—Æžp�\óÛ+„ÂÿîoA®3?‰žPª¯u>ö1Ñ®˜ï†W!b*yùÿkûw6MÂoˆdäß™nµÅ +Ñ ª|² @wOÕ¼6·Ôž„¹›L>ÏV‘Y|VéÇ�¯3Ã?*š>>H®{®oMFÇïçLŒÚtróFÑ«K¦=~Ÿ)š…߉‹Ãwƒ/f8eñ7í€À <¾Ì<Šœëœo%hd¤Ó6Ÿ¹—ÀQï( àyþðgа\3bUìq6|°ÄØðmôà›>AÔS-üÝÞ2“s¯'á3A¨8º£ô)´Á—ÓÌ7%‰›�ào”eE-†À7%”�o•¯ï)žý�ʼr]Ú~¯ûýƒȶG´ï‹Ô»ÞžEùž¿û˜kêAnïáÜè䆓Kz¯ ýÛi<.ÈJ7y_£q²•}inà}û-ݾ¥²Ø¶{ÚÊö,õ·ãßýSÏÖ}"mnõcKºg#6÷ +)¯ö;VD¬B¾´‘¸§‰v7‡-ÜïÓm¢Eƒ®ïöLbÃŽm|·=W‚>—·d½l²Õ…ÏÆlsáÚ¿…僙h w©ý•²nÄ–Ú¯ÐÇÅLãj«£1´…³uW••í‘�a¾äEúnö°O©�nQ1—=—ê;H8(–&ýYÉÞDÌæ†c?l­_y Ó>bbŸDÐdjôµ¡“DQØ¿Þô/Ã÷©Gö%V…À”ä¾8äëë'»æðzäØu„ˆØ�ÎõMÐŽ^y»¼½õˆ¶yy•,Õz0Qz›pÌzO_“©­²±†õjT3£ë‡Ê«}Ì�®¾Ìã ~ËÑÕ�é^囄«'>-D Uï›F”2Idò©¯ë�ûO½/ /ýHFâj©ŸX­î˹±ÆõŠÇÒ7)L°‡³©Åè(>}g¢¹[y¡ 5súð®Ø€<4ñ,TÓSíüòÒ„éÉBÜ&>Ãôåç +ná'd|ô¼ÎPænÕI/`ÝzØVú�œ<ĹƒCY¬Vzâ¹!’š�Øú·Ò˯É}¾ ui¥W(7:kÒ3Œy +W¤›“òšôbw©çÁ*ºø)ãôdh(ô Ð`–û¡3®I¿Wö~Âv®µ�ô“vß%ÔDzýAwòVxæ²O�„‘^mE¨ˆôP÷~ÀÝ +“$Ò·å|ÞüDúX¨ï²lØ‚éˆP¡‰ô«}»ñf€SÌÖ˜H¯áõªÄ‰2Ò£}íÚ÷ mÚCz>ÙŒ¬t×�-Úkg 1Å”�Q6ØF +¸bô�ý˦j'&b¡èg«¨ù¼ú2æÀ·CÑ|(Xè­à#”¢ô`aóÛô#Ð7#tí²Ý÷óûÈEfÐÛA”Î9:ô@µ–ž§NlaÙx^KÑï~"M%;×=¦++™ŠY~6÷РÔë(8Îxù’½œæµ?Hç›Í×Ó¿°jó“ICkΙ‘ÿë[¯Þ¾dÑÈ<óc˜zÀ ‚â0Ï •.Ë¡è/¬lègÒ?Òh]¾ëШ 1Úò¸È­èŠÑ£¬Y®`aŒoåCO˜¦3wq/ iT~qýÒH£´R¤<×}Ï‚8V(?âwÈj”Êóƒãý Êñç&ï%j$œƒ&îÃYÒì€Æ+cžØYí­%ûM�ÛJØl*¶4¼Y&x¸“ªN¼/ütãfîy™»SYáŒ;èڹ๠�^VbÞµŠðH£3}ï#«T<ü`Æ‚‹Ã6ƒ‡ÀUº ’ÎTðr±Gº®l¤2ò4/Y~GgN0ðVZm‘…ð€�{(«,¼ŽÞíBÚúû6Ô9Ò'-¬õ ++¥ ýob0P²ƒ÷~â-<ÔõL�&¿;�›fW“չš?H¼Hùé;\p¥å 6Ê÷¹'NãQ@:føžÎÈÖY([^mÝÞ7KfÕÆ×û›’5��’ëÒ;Œ‚T½Ê>î¹îŒîÂy75k�ƒ)ïIO)* º8�½s +úLÆ;¥ðA<öÉ&e¼7� +µš¡†ÙÛÞ®\)”P¿Žr÷¸©­¡›÷ FÚ} ẽzž÷×ȉͪ_wy߇r'AJð|u‡„10Àé>r8.Ó›#‹*ºw>èsHöÜm[)ÿÂ_ÐÜ{낎"îûÊ� z#“Û¹ƒË!^ÒYu1‰VJɸ?lÏǺ3î’^Gøhw ØT¤Ä”Bn÷àÞš=­Äço†viáóIåÚÛC&» ˆ×áòvûµÕ†¼Uë(Y‘Anoû `þ'ÜöQÓÝ%Ð;m‡ƒ)ª½ï;m'VcFö¿÷¬ÔÇÈÊ®<%v,Øè!¤W›vN?\»sŽ|CÎÕNž·Ÿ5 ´nv R;ɵC¨_ŒÓ~9hÄݬ"jJû‡í(BÉöZ¢}�E¾~ÉìÌô—Û¨T!)—Àn;¿ÛNURìúuã­õF,ªC/Çׇïi›ñá�Ë­3ˆ´‘^ÄwŸ¾ë«Aʰ_P£p)Öªñü,&*BÍõœÊ"ô¯¸® ®ëÄ@î¹\ÁnÝ’!³šRJeë÷Ñö`n±QþÐ_‘µX€ÖE©} ^¨‹ëâ²^´¶±71öm;öiŽ%»�V©)+ñ>g¯¢âAŸÃÉ9ÝmƒßóÆM[¡ “°è½õÜ^ضÂóÜXÂ=TÂï75ž¼/›8 ¤wÎ7ö„ ‰áís#;ך¬…oEŒ€LkœŒš¸�@™‹é8~γPm(²å\zw:ïá%•Ë3Î3db;m‚c<8çCµÔõæØô£k{sƒË-Gˆ£¼Ç~ ©|Š„ç »×Ò°ËÃ� 6Ÿ_úA3*(ÆÕ\é›Áå4g]QÏ“ä}ºh¾sµ¨à©´òyæóÛX-v~þJÎé€3so~ êEÿF•¹ƒìÓ™¹ü†Ìã‘ʶœ5£cÎT´‚ñÀÁ +øGôGÙtt0ÇrÉÎ@?9( IÛ×Ë7Êìrá0 Çá}x�Ë-ð_ +‹NÚX3Úò©†ÒDØ‚~¢”–Ï¿/¥£Èr›¥B†á¨[ǯ¼äz¥íJ¾\äD�WpËASˆÌÛ�\2ð7*ÇTX¦šr¥‚”¼l¤<ÆZ\&U&¢†<¦h2ŒŸ<,¿}-âòÁá„ä¼Ò÷š¡­VOͦÿ,· V~%÷W8++Ê#î$¿£Âá×£ÄHžÀÒ-�H"­¢p +fä �î=Iý‘RäðÔkŽ)->äPò�21¡BqJ.Ñ·Zyjà:¤:¥B99/* WNióãðËÑWÈ÷V�Ç+�ƒÊ öŽç¾JYáÞ”ÔqîÑq_¦YŽË}°"b xá¸dƒØ•.ùÜ8>µˆà³¦ZÐÕÂ�?‘�ƧDÚÁ¾¶=ãüsG�ÆãÛb. + øÊ8*ydt+ã”Î!83Ư-Ä/æ¾X§•7ØÅ“?«EI’+b;W£MyåF~€Š8u¨ D$ e0Þâw‡ +R²§·¸!Ý>(ƒá�ÅáóZØÀÎâ«ì“wï)égñÁZ"ª#5.þÙ kàⶬC­ö¬ËpñZT�00™’²_ÁÅËæÓÜЋc¦tÃôâD\ùf¥WyÄÅ{ ¾¶Õ?9™Ÿ¸x–Jç/7qñºhXK$¡¸8†¢­=~]:ÇÅÝɱÒC\<öa›ë�ÙÌÄÅws¢j—Æu­í¸¸þàââ²Mx"OñóEqñÑ�¹± u’»© .nIî$?µqñø aä-NÔ¶¡¤ ¾âs²ÖúŠ'*ï¦Èû_qPcA¬5Ù¯¸ýOµü1ß­š­âLÙ� übšâ0"^ +¬†_k(>6«ÒX'ÎoÏÛ¥*L¿"®tœCÙê¼12©¹—�¸k ?×Á0@=¥Eü4â üdˆÛœéë¡,â ˆ{ Ks‰Dþ3ýá}xiƒBÓCN+LH‹#@ÉI‡ÇLÄÏ„^àð¨w„ +‡•ƒ¤´3ni�ôaëû»°;Ã[8¯Vbø2¬ÈÕnžjÚ…[ÔbZ°£¤’ÊÂí"^g; endstream endobj 19 0 obj <>stream + q*|‚Ó´M…‹„pÓqm…£}Sb)3h%\ÝϬ™¡áÇϧ)¦ bãp¾´M€¤§¬wµƒò-®3Ž4�T¢ÁÍK[èÆC¾àЧ¨8©Oᨱ‚o>ˆ5ԔƬ¨U'8Xr‚´*¯,‚wNV ÊwÚ{®ÎÀÅ…—›d4øè-Y]&â@ ¿§ß¥ÞiΈ×çäÖ|Ä!•4ÀsÁòI� øî£Ý4gOî¿ÿó�2'+òoí'í‘�0ž4ý­¼ž²#Áß8Ù]YG:×ï=O«O¶š�ËùÒÕ<vñ[€¡lñ»F»véˆ÷­dWÇLK9Ey�}[/ÌGõ]4{;‡¦úF±1Vµ¦PãÅy‘bEe*å„’FQ“À÷bßÜ�æ;��YÌ7“qÒ<œŒÛ¬©x¡ç£ÀÇ·iQYM Ý o÷Ö-<Ž*TøöNІt|ï-n�¿°,ÑäÞ +5¯…{Þ^$(27õ÷~(·8=ôÞE_zŽ Èë½A«XÅÔ{ü ßÙÁ•Â;'äê½e;DÅ %A‰Þ[úÖQÕ{¿'`GjÎL_ÞEïýð†°5®Iè½ÅÓ¼^}Éõ›‹ûFï�Œ±$¼Á7�×L¸°i'Ñ ¾/46ÂËØÅÁwϰ-g˜Ë»-Êàû{Ý�;ø¦¥mbAÆà{²AKVî‚­˜ê½ÿÃ{ÓÙƒÍÄê½�P¬²côwÇòÞNFn#Ü;§+^ûóýoî¬ËÝ.ï š]f&ï½È\ÖØ^,à8÷†r#6©¾ ÷I�æ½Gµ(Mõ¾€]ÇhäLW2 9罕ƒÜ…ä„û¼7É6¥~µ*³xÞ;Ôõ©J罿þY²ìU pï?fOªÖy¸·ù ýÓ\žõá¸7+¯ø ‹Ö´po#"5M>–ë½M$!6­ß›¿_ï-'œÁ÷øe—xSßB &q‹oa¼„Gæë ¾Œë؆àÛÎ1w„H½7Fk Ý­YôÞºlÛÊ ¢÷>ÿž2î1@êeÇ“Â%«³özG-DÛOŽŸøÆÍ(-wú÷®Zè¢Vy?–ttÞ˜Ř·�øîòeßN¡¼™C3ͼ˜f ï;0Q›K®##Z¼M ;3ìZlx;�ªó™4‹I6ª0‚7³çÝÞ Úw¯èýõ-jU +y7©6 ÊÁ@�îÖ5ü¬Ù•µacp7ÃŒjn—S,S_»[!è�×Ù=ÙìQO3b¼ØÝ¶L/‹j@Ãë—¸Û(/>Á�Ywü€–¤î«Ûªn”yÄþí‹ß;Ôí>Æq¾OPÎ/Ýú÷Uò}±…Ê쥎n(&ÊÝSãx'íði-tsà1 XRRÎ�`2ëçkÙN„œ{`¤Hn’ì«·h𛱑É[Vs›�ÛI÷â ¾ Wî”ügÔdšÜFÿÜÉM>°VºþuRމÜq¨Úfç’¹xÜ�Xï"CU¨»–3î5h»Ÿ'Sq¯ÑT6M­¨•´wXOÐëÖŠáŽ�²ØÃxp]³vé¬6ÏÀ­‚Eˆn¸jèokörIVû6vCض·iö AýOr¤yÛH*äèªÐE6Oüæ*äDÙnç’n;�½€"�F$‰%·ãNè’M湃Vá6àýºPžDß¹íýᯑ‡ÊB‡mç–Oê´Mk_œ«e‹„Û³}ëRo/³X¶1°EvÙî_O¼VÔ@°c[�3A›ÉŸáº§Â6<ïA*lŸ û:¼؇£ç®$Ç}|®MœÄîÑkÛ .dµ6幬ZU8ôÉ9¬MâŽÕžÆ/ŽOmôŽì¬£c÷ –QÛ¼^„öRPÔÓÞ| Ö‘*å:ð]šÚY«`lÔ³õ¡R©v.+m�gЬ3`tO\çè¨ }�%]…ªùd´Å­1qƒ}.²!ÚÇw¯í„üíæÔŸ½?‘†ô–z¢I"èh.Q~±³™NgœÝ¦»viùÁîžAïÇJŸoC&F³Ñ@&ΫŸðYš™íÄi2Ãv�Oc®¨�™yÑ–mœ¶Íßj�oe�%øÞ?7AÊ&‹Ð¶ä¸Ü–M67oÙ‰�d먼J)Rœ—Èæ¶Y¸R=‡�͆ʅÙ¸Û·(N«làPP-aP‚A]4ÝØg“6Õï�+c{˜Ú\lË’­Ú™ùëã•l¤±.bÉnú ÑNs ľ–šâÛöL#Köß°™·9es99·°©b'.‚•„í¾‡éÛZ_Ú`¯ÛÜ?S„¨ výÓÖ +¶ ­À¾cœ3Òrê’Œlu—hÍm•âw8ÕAÜ÷õkÅx=“a¾ö�,qz¬””1*нÞxi½¯Ðçzêue‹‚5à`,¯m¼ÙÐò®?ëȯ7õ�ç›h_îšµEß—ia׋�özY€�²¦ëˆhÝf–Û²î\«AøWÞ”%Ê5DÉiÆI°¸Æ…cæª#ä×~„bÙPë©i^�·¶áÊQ|] %á\²“† ­ÿwñÂß‹~оÖëG_°Vk³ «Á¯yÕ´¶¶Üxì€éŽ-êOâÑq E˜;ë y¿=‚wÖã²{ä2ÊŸ™µhP„Ó\e âÄu~5[˜ªÇ”!kr$ib¬] +ß03!„øJv0?>±mÊÞÍK[Åkš_m¹{LÉ>’šWçNµÖó2·ùWW熫¿ž„›w«ÀVÿ†´‹í5ÚžÕèTúP± l´§ˆ]u`Ë*$$_cšwV�V’Gš§ªœÝs½F7„ªç�¥<åA«8�ŸN±AŠVÕQ-O2{¡÷ŸZœ�¤‘Õ!B7§Î•›ª9(RS« óë#Œ³cÂÔOÊ�ŒêÏ•c©ËYZ1ßOÄÞ"¢ýÕP+¤¼‘z«‰æO,•z�J¸‹Í>ù ÔŒšŸÈQò´¦Ò±±Æîò J¹¸ŠJ ‘F0ÔåÑ[X°A'qÔšÄÕ¸ê´ D¿µ/þ4YÕÆó¡(Þù4f fΧ)m[Wl ñàØr<­VI…iç ÂóÀ‘u�Ö»_UÁ:§+Š:Ô4ÆFâf¯òù–:+�K¡G¡�j6­d­ã�5 ½÷{šðå­Äަ½¢;ž‹ÒLÏŒbHÃO¿lW™Öê)×äÍâE9LÛI1An…w~itˆz2»]Ú‹šå\ki ØLå1KòÎG($–>_páYÅåŽßrVåËBøUåÍ>ËÑ$gêÜ­¶i,ÇoœKZ“šâ#Ãçg‚)…¨ÃØ‹'œÝ¹LMrUƒîåÎ@C^I ïa Ç{se‹ß:&|÷æÀ9G™‹ýÛk7/ÊšõÙäf,©ÏQ¶y˜QÊ1b]ž¤Í$€²¥ÍH¨·&”l6ß}¡ÜüÐÄw5“_ƦÞ»å—çmÏ‚gã•V(Øæ§ps–ONÜÏ8bS7¦‘îÖ¼©^�¤üff +¦RpFß±p7œª[�{ˆ$ +4ܸô8}SxQn''§YVœÁ +ætNˆ« �í´Åt*ÂA›«ÎlüDÕ&y�ìß?g8;¯é=îâ VžÀ;û ¨£Š0ð|%€îÏ�»áØ(OC] Vì`õí<õwŽ›žÙ²»×³äBþ�{Å=9âqrÁgŽ­œGò)?n(M#}:ýökt%‘ŸÕng–¥lØÏI®‡iý)†Us¥T + +2?KÄä×éLÿˆHŽ_��>C©|" O(‚ +ØÍІÙ-„w= ºìB¸Æƒ’ï¡ +b÷øÿ°P2«+}š¼—ÀÒZ~‡�5è˜CU°¹‡Šά D³é2ÆÐˆº Ëd‰Â¢|ïŸ(É9ÍVPÑèÊ¢~[\”% ͪ&À«.ºäÏüÕÃ(ÊŒ~MôÛ•©F;,5nbt£R@óne·•LÄïîè¶?½GÝéVœ”Ì2†�Ãà:" Ù¾i²>Ó\’”×Ê’V³{M*±\ñ“>®]–‘Ðg,¸~ÒaÒ{:RZÛ‹ÿQ©Š®1�;“1*—ŽRúß–b°¥ì uêÒ3´£Lßs~iýS”Ãô7B¦:—©TIfêþ¼Mc·šf!Æšð´éåSLÓö5:uÓ¾�SÅGÏsª2,vªØ™twZÃ7û‡¤³¶=zÓ\}½ûé +ª^áÏjP¤Ÿ¾­¨~CÃùP}?\þ5‘Ê®Õsø­ï¨ãO-~ø!| +2�J*ØJe2p¤¨Ô(y­­:)%šjã¦`œÊöuþ¦§–DÊUÕq�½F•Ç`~Zªœ”ŠêªÛùU]ß2«V£«ˆQä†Us?C ³j"§ªÕßµÞê­b‘ 5—]—4À¼Ÿ{îê‚~5¸]5ˆ4÷Jæ×!"ú‹^½ ž|À¯ÚÌE°*`/ùÙ°Rž,Ö8™�5?YO¼Mê˜Õ`ÙÅ7d�ëUç'nj†EòFn¦•ˆ;(¯jÝÉjx^+žOEøÙ:üac +·ú¨¸4Üóñ�p\ –ʸzôqž&Wã9W½ð ¨Ð�æ×\WQâvõPïàU#q¢¼‚¼m¸�¶�¯Òë¶’OžA€Z%ò5‡mÖW•tej__—JbìWÈJä¬ÿë÷«Y�µÿ r‹–(ܹ‚Pr„ų°zûT<ÑÝq_ÃJ…àÃzw¹¥#vÔù¨ Xž²Ø�^ñ Æ +š€a»Ævu,:ÿkŸÕ¾ÎÝYl“w$›;lÓ™l°�âžDÙoctVÙ&^Î6>-ûa "†½¬„½ë1cvy§è3«°À›•Ì gÿÓ¤³ª~Ã9yVM&m°Å>»7ž8"hc#’ʆ6Gæ9­9'^ƒÛhë˜�÷’öz”„}KûÕ6íž®™ùŸ6›ÿ³�ÚOSZø¨VÉAXkµ ­ÝnkŸZÖZ{ã@×z1wðµ(ÔwQØ:.ûŽ­ã´øÊË( ­¢u˜_ãùŸcƒz²-©ÝÖ—W·ˆõ—R…¹MªÛ3� I`Fw¨ü}Þæà÷–U+rÇ»Y í.>7F²îǾ_:îðí¶™¸¨Û ÆÕÈöˆ©xÚè¸róGZÇõ ÐpC®¤»ãÄä&Ç; T®Ô;ÌÜå[�83·òf‰‹Qäá¹6›^”�n¦óƒÒõñ—Š$õ&Ý€**§ë‚Eë%£]]zýÖ}ØHæåd×lýñÙíæ(¾ íæÄ]ZP�Kë.ód+�†ÞECò4/íÕ¼7hÄ‹ZãÍ*‚ã�¼¨q¥xbr�™õj^Z9xèóJeJúž2åq¸B½ >‘Ë¡Þ{ËŽBàþ¬WJ8óÄÞíÇöJ±î™Ø,Íê*·u°r³<|¹{æy¿³XB´Ò™/­U�j3;«]”ê[È0=ÛïÃcÊ®½o+~_Òæ¤Sßœ +òÔ‹ÐÞ£ª~- äïwTðxþ"{nƒ þ�š¬2”ÿžÎ>0HÛèÈD£âå{ƒ½ Øó·½+ x, œ‡]³ÎûKÄ^”™ëÜùÔ(¯Å�R'K€+¼´›§¶Í�TøœVOö‡L¢%ö�[ÄQ–›)Yæã׬Ôìã£4JZ Qö�í¤ÖÑïq¼Œý�cÓ§6£øïÖïÁÌÃܧS@ð§d˜’hÞ ÜP_ Êû“@`ÇÿÂeœÆp_Ïϲ0s²û_ÞÀ=É˼Y0>_>¸�' d—¥Þ \WxlËí+Ò¢$8.2×›rxÁùqÈœL»À­`ÏDU¢M.p �É¡?úŠàÍV7» ›ó-]`§2՗㲜—ÀÃnê™z<‘ÀîÇSÝГ Ø7öxq"Ù€ÿ?, J�Ý XS>Ú"ê†4`– tP‚|¨Æ2™y©ŽÀïkŒh1ߟ#Q:|òÁ1E É�ûV©\€ØGÀ0è@å̵Ò]Pv\Í@'#`­d�€‘®0}SŸ8µe® Îf�jÞOAl¬ð™Î(Sƒ€Íõï¡DÀp:=½õqOˈ€MÀiÀ±ähRî–1tÒÀÁ� +GÀHè¥PéÚñ(Žª˜Ðþ‚ ¬pöѽ>3+ö£ÀkfÀ8CxggÀ‹¥åÓÇ'€@ìôô€R«Q„Ÿ ø $s˜¾Xù£ XíªDoƯ x]Aò/ô3àˆëZžŸÜf–Ê#÷¡UPC,›âäiL°“ŒÚÍCp«>ðvê À`UƒÒÇÊP¡$‰ÔbqÒÿ�ã«o§õÁI?ïrNÕ€CÃíöWi~`ÙžLŠ›TÆù�O"f0­ÁçNí;² Ã[µ™ãƒÖ…ÞŽ=Ûá>DNôùÆjîHB¯¹ô�ø‚G’<†#V’6 F¬ô˜éLÀ’E%8få»GX¬(Áª%9ý1ÚÑÑ xalÍÜYÉ㵪¥L?VoG ójÏX>ä)ÁA8Å©¬ÁÏœ4ÁYÌ]°‚S¾Ž?b;Á3%–R~�ä÷šÍðÛ,„¹@‘yùœœDð«‘uÇLVNÑŒ¶žàò F"î²Äó{”²Â]÷ ž£I<ÁL7øØËšüsÑšÙûþ7ïb\p‚uaSZF’š[Pß¡Ë3_Á`ÃÌ�ÁŽÏ[Îpé"eZÇ‚™~±~0,Xè,ËAjÁ}šÕ;‰üŸ±/ãt>Ê&kK ÞõðÜkÁå·ß +�¹N÷“Å.Ób+?`ÁÝA BÈ}±àñaÈAŽö08/ßX—õÀ¤ÌÂ`!lZ`ì é�a°%T¾Üã6SX£qžUƒÇU„ûËÖŸWƒÇw‘ƒ’"xIv5˜HÞŒhŒZ>Y5{”!XÉRƒåOLÀVàl ™vƲag82„—8›ô§Ø'̇ G§F§¡pÝ…RöàX��ga@¸45à…/39Ú™UXtÿ�aõS`ƒ_ÆðjôC´’�ax›JŒXP´¡âBØFn%�aô qÊÔŒ¶ôÆp +T#³aí#k5†ËÆèáÌŽ{IËE«:VÏȈ¥Êª­`cxúm9ºNâ +¨½ÔEj<Îp°œHÿ³AÞ@ìí™"ôt.ΫÝàN3·3¬ËÌýïC“ÿp¯!sY/²ˆ¹#¯Î#&GPoOOâ�I‡`bJò…Ï9q`xg=ƒâg‹¦oᵤò/žÄ `&ÏtüI±CØÄ_ì:ªâï·Ø›ml^ì Ôh`ŒœÓ¹›"RŒk¡r2~]›îçŒÝ?ŒÁ±€ÍKc';ƒO‰;6)­xS¦^EŽIx[¨'€Á$ãÐY‡ËKÅ¢è8lŽ©£Újã±°ÇÊ¥ý°·>–|Uþ±@0e|º‚¸0¬0¸xøTÂ~†ü¶wS^7Bä¨"=:HòŒ:‰­7•ÇD+¿ÊA–¯Ê•��L�—°œ#kç²,–â½RËãz¬,Å-ï}�sË)W_[.Ç‚çç»Õ]nQ /|/Gô3Âf�ß_ÈóT�ÂÚ˜q—dDÇlË̵m¦Aè�”Ô2¯ý¢äì%-³+t†Ó¹ÍŒlœ±êÉDàªÍüQ«û±Ë_›ùÍ˸Ú`4M DÓj;W{^m6³×ÚƒOd“éeÌ´‘x7$ÞÕýÌ{ÄH÷¿£yù±wBOãY³øa-ý¤‰*ÔCÇ$ž#¬gXÖŒ=/±Ê0È kŽŸÎ+] ]‚5˜@ V+cÍýÆYpõ¨¸²æÆÂÿ>8z™Öl\ÔúÅ–+¾1hÑš›c×üP¶Ê¶ 5 +&Óy‹Ö¼b»ý7k¦HžY¿W]1Éþ£9ÝÙÓ£Ù«úl÷�ÛM>‚Lbâ_�Õk4¯þ‚§yà1o–·ÌdûiV÷'ñ{šÇ®uï,×hþ|Šœj%ÍSr·Ç¾ÆùI`WXÉh{™¨<Íp6ëÚ7-lŽÎ×ä«d§«WhV^Ý9ÚÌ-§‚E!|-:çŠæÔ=aÿ#]4?ˆÑP2�fÆÇ•ÜTˆHóTNMY‹fR·~�yæ ñ½šð̦P÷P?q‰gÞ]NUíƒtæhÎÐua¨µÕ€Îœròñìb¦Ïõ¨3—2%·=Ú»ÏIP“×ã«�™'ˆè#+’BÙCfFYkcªVfÞÙΜheªˆf „êžf_ƒ05z?ÍaË‘` ]ÿÏÓÊVvá/ÞÕ[QB¬Ñ\dÌçé©êŸæÝ)ùø4Ó�ÕuÏ«ðiŽ<¼ûšê62¾?Í«)ù �·È§nʹÚ½¬Kð°Y¢<ÁUmŽkEÎÍÓÓå›÷òÎé,ÕqŽTlæl‡Wu¡óGʬêì<4Ó‹�HAØÃ‰xv.;õ´òΠE*ųñ]e}Ο*éz>#äV�ECzÓ‘Ÿ‹ÌÈçE¾# 3Ìþ ´C†¿ WhrpBÓNÊŽ(ô³UCㆊVz‡QPD4`uMšècp…+:º†Š Œé�rÍr}ÿr4 Ý£uŸ´8 K,8#m›xܳ¤w bd�vfþ•&Œ�Éï;V¶¸p‰t±4ິPA‚i˜v1rr[â@iš¡ ÏLC¥VjfÚ Ó¦¦ù†cVºiŠ”F¸9�(x:E12ŸŽC¦Î ÔS4†z�fÔµä +‰uÔ_±I—ÙQŠy‚I}—@B/õ(äŠPE¸y‡T]vZ©þ?ª^pmSZµÕê'EŒÕ +lua³F]�aL’_�Eœ�/hƒ‰iŒ´²¾«×ëÔ5³ÆÜ$­ãŽ®Ôº‡’�­C˜ÎJ·>ÌÙÃWëh�H̵‘9ÉêZîeã]+þ. 3vŠàërŠ@¿F]›š ØÃ/vž'[zÂΔ„ªöèBJl;�_³âÌ›9ÎÔ\…x³Å¹Ø\y&´›\^ ;MÚ÷α.+ dÇè¡Ê¸}cç’‡1[¡w¥y5l7$�­^ÿ¦»§ôšüâ�}UëÕµ»Ø»nmK‹Í©kœ™� ûŸÍ]œl¾CMx¯± .‰ûO²ÉJ¸8S?vO_– YëÇ–a›�µ`,ãþØ�¬ ýAÙ–ø±�v¯"�Õ �­J�'Ù§ š3K &Ù)J ¿‚rFÉ6†Žœ‹Œ’Jv6:Ï'Œ•ì´§ìý�³1¢ãöQv©Á€AaÂà�²ïÏD$¯æ(ÛÅ0Ù5E§qá(›[¢ÔÛ@3ÊÔr5©N`FÙVåD�bˆ*’l±R¹’¤yñd&�}roØÅ>ÉÆv!ûœ„\!ÉÞ7¤ +ב~ãÙÁëždÓ¼ci¯ª!©=É.‚!Qv—YOÊÓRÐV([Xí¢Vý%”=49àÍAÙ÷¨…Á6ŽìÎbU…øZnS¥»ËâL·’ÝùÈ®W>’/#[žÑ�?u´ØTl. FÀǼ¡úUÔìÇ®ê0ø{[,â šâh‘þØØ§S +â8CºÛ<’¨‘ŠçC +¦|ò€ˆé�ÝëÙC36d, ¹‡9`¶ÐÛd1L6¶Ðšs.éÁ©<ÑTrãÔV�FìøZ°,v/Ù±Bâ(Ò£>�elZìh p÷Ž“Þb;b¶‚Ï„Er.µZlåí@§ÔlÙº@Ø<¨00c•-öaú½“œ ×bSȆOµ´ØI™ú!¢"ÒCb§~Ü"’Øk?˜ž [Mcà�´a¿s`À­ »õ˘)šGà†]üP—/ {…ÙoÎxÖ°Ù¡h1 4ìñdì<Õ°ÛÐç1ò…I‰"ÅÝÈ7&æO<6­F5çØxWа›º†fzÈö$.:“„]×Éæ`}ï¡e£“š�„Ÿ6óëÚ¡Ï:Gô8„`ï»ÇÊ“G¼È¼ˆ°•VôÍãDØË„œ¬fHØlaxô‘ ö 6–/Ê2 (`T‚-(Ú µ¸’¨Ãì·Ï•xß`$Øù·N[ `»%ØX Éɵ„­[nØ%öª¹yÎÅ–Ùø%a»±Ñ€ló§˜É©¥‡ìÙò¸˜#KÅ€ög;ôƒ“ÌÙ.#ÁoZ-¶¯2¨q�,¶§íäœí0’ü=Ýbál·ø+rä¶°³íóB¦#ãlМu†W£g;Õwj =œí©Ë ‚f×öyÄÑûýÚ–Þ< R†ž¡·žm4ðÜ´-&Ü¿ˆÜ¶ŒMAÛ»þ„þ¹i|¯Ð6µîá 5+ó´}ÝCgKÕ�øAÛ^ÌËo_ðÚ¦häc¿AÛ ãIJ(#Dh»þ¨Ð_&´-á6®]$K’#Û‘™&&¸<„­c»2§Aü\™ˆŸlÃ&¶EÙZb„É6oîðQœJ7w‘Gþ�²}M@½ÁñkY>ÛblÙ—O‚më¡àRà»`[T‘ Ítw–›`»ëœùÀ +¡"Ø~�Gàç8z°Í4�a*Šc°M-µÇj‘ìÄ®l�WÑmÉv‘€ò©CÄE¶ßÑö9'q‡¤ˆ¶C&çqÜhÛÇÒ¤°@OÛfNy�ë1º ²Ó¶‰„’½¬j‚Ú +[Û^ü±�ÛF^&v»ÃÔz»Ÿ¨&öâƒTVܯW6,îí”Åm7ÒˆJrÐpH•{·],± ¬bç_‰;hž»¯÷1FwÀ™$ä}ºýǺC/Ù_Ø ¹œÚ¨ÝòéÅËŽù´O–Q[CÑ …7ó}£âx¿~y{Í„ zËæ�SïÃÌ œìØ Íî Ø¯Ð(w?þ× Ò›çæ‹Bµ–ÿÉÅú–û¾­¥4h†~ÿ§Ô<.þfç=\‡s�í~¦ð· +|„m' ܲ}¾œàëOh�ñêuªLº ¾óMñ€10ó×î|ÂE‘›WÜ~½Xx0EÔÒpœB] ‡K]ájìáñø�´qã¾¶Qà?Ù|$¾Óˆ\LøÚÅ��ºgŸøêè+ï_$õüvÅ*I®VHA50޵³x2îxoJã£�ûm<Ë%³9°´4zÚñjâˆ0ž;Yìýñ¨+~�Ïš2:D¾¯ÌÈaDr·xsÇŽî‘ •¼_¼�29OŽ L>ÊçD"TN[hêhJì— +�\Z•XÎâÑD€lø&;ÖrØ{]ž»ùËE!æ&Ñù_ä¶/Ù'äO3?¹�æýŒ”ÚF€Ú<&εЛÅT½�p•Õ½ ›�Í7!�Pz±á¹õüˆâ[Îó¹Ôóç®îâ]‡fèá…H�ˆ�°ã®èQ–îï€ë=:ËP´‘î¢ì~ÒÉ’2²–žÓI +»UMo•�’pœž.õEÏÓ± +êbÇ��¢ž‰¡X-= ¬¿<©¿Ð˜¶…SÿJõŒÍ‹sÕIÓ®ZõUI‰nu&X)YGÆ`Æ’Ö�Ð"­SŠÞ,Á¶ž�‘ë37Éey@»^÷"�½Þ�™ò¯·$‡!ìƒÕXŤ^ÑØÇ+}#;U~-•Væ8|/N6ÎQßÁq{l~ßøwL�ƒ²<Áf‘¯Çžü9ð@^ò^ð[!@xJy#p��[—)¼‰]2|ìøÀ€‰Žž|vÊ¿B†‹å…¼_z—�jø'b>Dfšùo½£Ïš—¾y«ç+q óQ*=yýe òó`úç¬,?.zK½×ÑYPz<¦—Ââ:}a¨GÇæ©·`Õÿ†xZ;ö@·˜õÎû„ó—±^ªEWU¿r#Œ’ÒÎÉÔ1Ù­?¶“ékÜée06מ%Ï�×åNHÈuëeèVM/fcYà¨ûÒ”õ’!-ëe÷¶¢)ÝzÙ}×—ÍZP�õÝõý¡yæûÜõ3ŽÆ®Ø»>ú×U�ïúäsŽì]w½s QÖ¤âõb& ‚Ý)–2¬á"¿‚—¯PV2å‡m!¼Þo`¿rò™Š=.²ßî�$�Ú§ö[J%ÅbíkKÛ~õÛêš¼Läþ”º¾³û£Å{Á›³Þ+y˜ÎõýŠ‘þ>ùƒ¯F |§þðü7 ߤ´À[¾5gÌñþ,ƒôŠ«ÿ>�e�ïeÅ0,Œ|X<ù |W,ßj*cŠùÚ*ÙléwkþJ7¢ó15ú´ÊõK=“IJ¡ïÅä>�¾ýõß”L_VïÄéDý?:ü¹ê�1Æ[Óúlãég‰ßëç>4˜4NŒ}xI}g_Æ!�cxí»ø¼ê�ûÒ“î |œº^þ|"?‚í9à^pï”þ=D;Ëöoºþÿ¯ü¬�Ÿ§ßßýùyåçé·”)%)EögRÎ~^`e±·ÍÞ–[¤a!&##†¶'ØRð�ŒKÚ IßêýB�€}ŠÄ¡Çeý€e7š ì)´«�CócÉ Ô[›sç¼wî¾éƒû6zoõ �ÚŒÜãV6Óè¡Õ6|lçïí%êÙD“|[›@¶Îg¯œî +a#¨æ§H~&Oï-#w6óNgaÆjf¬¦90¾¡Â‡˜8{ÆÒ!®Ap9¡Ý¥Tv0c²6PjØ™>½¿©“Юjáè³zˆû”*¢WÚì~¨QÃUŠH“‡V_Ù|öЭ1îAþÙ1oc4ŒY�•™+›ƒùú‹5Q¦_Ÿ©kËÆÈÙZ^‹ðâ,hà^8pÚÇkÛËùÂÕ<Œu³ `C·ÕÚºÉ8„n5ŒY�åa!¾8XØ•m–iøÎ|ŽÎO¥*ú JFg _ßS¸WÓø©Í2uf³�Þ[mÓÇæ} ïì"JçOîãüÍÕ;Þ¼®@…£çpÅtî1ÌëE•�Ý*Ç$½e%”΀%T¶¢é�ó>�â\”‰°’æ×(5ìF$þ©Tû ÔKc—VÛü­ý"ʾíO¢Ý-#G6ËØ‘Õ:ƒs6˜î>z${âü’%Mvm!ž»Ç›w#UÞCŽ€¿ç°.o«…AÓ~]ãì°¢L@„’Ñ¿!Ih}$)hëÚýÂ;[çK×iôÐj:4¨‘�6 öX>.i A4穆ˆ1¯ëtéžFÃ6Ö�ËZ‹Çú¨r�ÇpîÆñ‹ó:ݹ¤Èç�:Ãv‹6zpC‘|v”¨á=UzxÇy!G>»‰3lHM¼¨6~¦a/Ùçu¼t}‡‹÷sçþ�_Û¯Ñc«wÂtŽz6Ï÷Îë©õ„ínŸÃ;û‡ã7Ø _Í4ÚõN�à{fî¬Ã�ÍY»k9XWáá‹k½Â€÷~…"Ÿ³ÖѬVNy«µT¦@„“fúän�,m3…#›5•‰Ä¯ÄÉeú$ô>‡w6MÞ-s7Fï„ã>R¥àÖ‰“p+¤ØwÏä�Ñ×¶m6Fn;Óì¥Ñ2ueY8[Ø6ïÚÍ×7¯å4WŒZl†/MÛ³hW‰ÿvçj"ñ_’Üë7p}&Ž­ï|çì£KÀÊ|#@�h_é×[UDgOJ½„›sÎ`œŸé+£•8¹_�‹EŸ EcwCÒG™Þ†y_È‘Ï6’„J ÛKŸáZŒGZËÈæœ•$SNc±3…rm!ɼ�¤ø¼˜¬)é¤% ɤŒhüT$¿TðjÔ jôëB’yÿ@‰ð}U@ägúäÞ6�jž¦/�мÛ*iví(ÐÂ푤 ÍÃÅû7|pŸ¯­¾Œ«s¸o?g0ŽÛaaü AÔÉÂIj½Tiè� ùfäØºŽnëƒXgÛüµõ;´9‡×ÀÆc0C\/q(5ìK›ÞdÉí>…w[®Ðâž‚Œ_� +G¯ÄÉÅù“û:Ü9¶û>á½O䘤ÉýNŸá-{T î¤Ùýsë9]¹îs˜×ƒõÿì�¯œ}#øVãÂu@¹Ž3øö·_bW¶žÕ Çu!K<Ï ¸„ùräÛR�Xô ^4~¦MðwúDì|€j;´Šö, »�áÝj̳š1Ù‡ý> Ü×áÖy E=(QÏzij�ó¬b8Iúš¾´3·�güÊäœ/\mèFÓð±ÉA�}ýi4l;�~í°}m“³W¶.¦S87;¥z{• ÇzªDb?€"±0¡è˜P¼ÊqIs±Šv1'¨6& þ)|;}þª�BŒÊÎÔùMÒä~ +A6k F>묗µ‘¿HÒï¾é{û<`ºÛÉ“p;U"ܾ³#ÑÔr! ªåÀU®�ÄSž‘ø…$ù| G?aÈæ¬!IhmaÉç¼`Å£o ƼO³§VÓð�Ñ9„pu”©áßÀúé·–pþ¦Pî=£gVËà‘ÍC”|Ÿi´ë¡N ÿÒ¦÷çüÑý.Þ/мóþŽ!œL]Íe0°«›,ÆdÚí PÍfýà”•2½ßˆ2ðÛð¹õkÚVÎéÂÙI›‚vÎ`ܧÙK›…&ùzU HC+èÌÅ*Ú'ñœO0ÖJ›_O$ ø“2¹?²o©“kG�"z3"é+—t’µ�RB�/ÍÞZ#Ÿ=¥Šè¿Òå×FPbñWÅpôO£a�.ÝjÜûA�|^ç÷yç¾O"žç Óý�ïœí£h÷ƒù>�"žícxgߺù;{Ž¡ûòLžš<Ç¦Í ·õ)Œ´ÖO-ˆ+§µÌŠÂ‡1Iý\GB½T*¢R܃2=ôTª‹žG϶ék‹B5üQ¥…¶P#ŸmÓ׿cØÊjž0�­„Ùµ �zÇ’0oE»ŸpÞ�Ã}û6}7�pýˆÐ?™†ý’ç×+XÁø°ˆìs_ S¦ë�œëXA$û…&ž4ƒ;“©·Aîù¢ÊÀ®à…cý@%½@†c G% … +Æ”ë?‰x?éòë¡H è×vú0$½‹^èqÏÆù‹û7}oÿæïÍïtå¶@Œw[¡Ç½»§Ð®•R¬Lµ¨ŒÊX=.g(TÃ^¤ù— E£�°Ã²Ž #“†`ƒ²fâüâ|Ý|Ì™VÆŽlî ãy,ÿ†&ž_’M»iôëgôÐæ˜:[›†«�*�´„›tÔé¡�„ÙõQ¦†ß©´k;�èú§_¿–û2vfZÀ4™Ç‘Ž>°B±ÖZå”#øÀœ |ŽÕè­õ»µùi4lK™&þ?¶zÆÎlöãÙM¡à® FcÝ Gd�Ds–Ds^à¢Ñ?‰þ&”8 jÌû@‹{]isðO‘8´¤hìR©ˆ~iÓû…ù¾�¢Ýß)šüN „öS(ø:ôûI“û›:¿¶’&ˆñî>š´ŸB o'P©RðJÔ³}ÀxöP£ß}DxAþÙI˜�wÐ#Ÿ‚¼ó<ˆs_æîLKÓWFÛpÕz�WM{#G+uz»-¨óöI‹‚J Ú ñlTÉí@‹{^‡[ç{ñ>ï×ä­õœÁ¸o4ø¡P ûTª¡mTéwëpåìœ@RÄ›i³»½ù[û3uhõUÍÖÊÀ‘Õ7\6Ÿó�ó1r[­Ìœ™vh²ÏaêÙ@Žy½h2ð'iþm•6½ßóÏãtßz ŸZMt¹ç¸Pô jDÒRú ±^�–£qºo'®û(êiþýžÅºšfo�®ás£õ|P#ß7ššìËŒû1octÌÛØ|ó÷FãgVËà�Ñ3sf4ÎàÛ·ùkëXCµWD.µ hpªøŸ4 o"È?ۦϭþYÜë„lÎŒ|ÎP£ˆG’‚v‘¤ßm4éw=þÙF’ƒ?ɲk7uÚKœÜ¿ÄéýT$?‚ŠŸ©³kîÝ9ƒq¿fo­î1¬rä³yÀv_Ç+×¾û;Þ:»æNÍÓÔ±õ®ÜJì³›8»[%ÌÁÛ ”ОJ5¼�B½w’˜ûƒ¨çgîÐæ˜9²lÏ!^½ $}AI¨¬Äéí×µ�åÛ,X ÝV«ž«�(ûUÊ9DNÈÙ.)jRHÐl\Ò;]»¤¸÷£J?Ö�ÊŽ…£²3}2q~m&OïíÓæoÝ<#ž½–™ÛÎ5ju�^[=³‡&sG¦•©“iüÔæ;´9îË1v_¾²ÝØk[›Á+“iÓä.[­ž«mÙj»[†9ób|,Æm­X �-Û²Ñ5‚itMŸMtÙç›F }Ò&×÷ Þ]Ù¾6†m+Óì¥uEºŽÓ}ëWµ®½šÕÙkÜ��Ñ»ÎymŒÝ��é#Ó^Ùz–{u1ÙÇ굕8¹C’}¨QÏãxåèžB¼úh°û$âùžÄ:'OCo€4l;•ví%OA;è‘Ïû0Úu É¼þÓxWóÇ6ó ÖÕH˜]@8:&ŽLkó÷6Yþù¦OÂ?D¹÷oá:Í^Ðã^½CxGÛøµÕ6€k½Ç�î#ez)ý†(¦³˜”ýÕÒú +ǤΠÝï ãy¨ÓBßàEd�BMìB�|ž'Lgëxå„õì¢ÉÀ!J¾/Äè÷õl¡Ç=›(²Ïjô³…÷n¡S£iðغ͟[ÿÒun\ÝÖó?…|?ñÏBÜ»qøæl�@º{ro»dùÝ*arï$1×>š¼Ás_g°ÎûæýÁ9?c·6ÏØ¡É@ŽyýÁŽÈ~¥CL÷,ÚÕ0v“±KÓUú!aþ'ÔÂZ‹Šg–K#´]\Pë +I@e#ÈA[§KWቧl�I'-5Âð)|+]z�áÝ·écó5}jÞ&°­çtÝìC9_ÃÇÖcèÆ´2xer™VìŠFƒÅÈ}±+Ü“É#›sÀr´Mw�–ɻ嘺Ÿ½Â}ì5ΛÁKÓÒôµÉ=Šwõ ×­–©CÓÊЩÉ2oe´L™|Ãu«w å|Ï¢]šäëHœ‚~Á‹Çž`…â¿„«gðÎèŸD¼” ø“0»;àºúÊfËW7[ ³Ö±W¸;+s7FÏä�É3|d3L™ C6‹Á¬iÀó~Oá]ÏñÒÑ>�w}H²Ïë€çê½·™¦/M¾|£u¼týF°­ß¾õ�°] „Ø÷‡$ÿ|�#_×ñÎùº1Y'WmÚô¹Ñ4}ló� [M³×6ÇÀ�eeîд;…v´‘XÐ+qr?ÏᜟÉC£eðÊxçê'Ó°’äó:]ºèæköÖjš<µZÇ[W@á8S`ò©ÕbÂ)(5Äñ‹óN àÿZè‘,í¡È?¿ã¥³sºr¨Qω=ѤßÿIÔó<`»ßmüÞê@7�ó÷öoúà<Ž_œ·ásrÄóF”�6Ѥ`}” è‡ ùt¼rv ›¿ù{s üE”¶’æàÔÈ÷qåúM \ïA¼ó9Ìë9]9ßSx×�.;Sh×’üó9_¹N³—6ÿ4Þy§Ð°‡R5ìJœÜ¿ôéý fDÎZ;å J:e)ÔÄ¿¶­ÖÏz‚‘NYèñÏçpå¾Oaž�bŸý³x÷u¾t=Ç çƒ"ñ>�ã�­ž«kþÔêkÛ6{e›Ý<ö:·ÅÒô±É;‡uu�ä^Ç »ÍW¸ž…a«Ãföд;ŠsóѧàŒÔÉ­‘:¹µe_=4ùWY +ÖF™‚õS*¸+ˆáXK•8ôA�@�{]hrÏ÷$æÑ=ˆw�J¢Ÿ0„“ÆBY'x�Ès8÷gìÌê¹1mŒœ­�‘»±×¸.vu«±W7 £fƒ]Ýj,ŒZ-Ejh)æýžÃ:$üC’}~fOM3G–½é¶Ñ9^¸¾ó¥ó:_¹Ԙ׋(ÿ¾g×ë| ŸM³·Fó(Òu¨Ô°M…BÑMÖ<‰s�çЮãÂù›@6o3¸Öyíj¥ÎÁ¿àÅcoú$ü7�o}¦NM¦ác“oáh¡É=…zØ ¨†{ ëüηÎó„íú�£^­ôù­¥P ÖR,ö#Knbäë€=ˆ°1î}#qà�ì³�Ä‚Þ ”ð–BMì Z@Ò bPÒ +X8ÖM ÞH‘Ïëxç<Ž œŸ¹K£iîÔº�#Ÿ}`Dâ�25üD�vÐbŸ_ÂüÚT%}ŒF¡F>[§KÇ×s¼pžçpÎÿ(æ}ž0ÝßÏ}E»?Ég‰?PâÞßñÒÙ9]9ŸC×y ë¼PäÞï)´û9_8¿ó­óC‘žHÐYþ}%NîoòôÞO£àŸ@Å¢�25üA‰|ö œícxgG‘~7Äõ�‡ö�bÞ¯ÑSó1ld5O˜ÎfòìÚQ¦„[$L@û'ï1æÝ@‡ywN7îß²y;²¹fo­6ÒôûO¥aß$ö \<þ.$}•ŠÇO4é÷cÞ¼–o±`<Žqý*ˆd·Ðd³N#±mþuĹ/Ù÷¼h¬±|\Ò jDÖZC2i2}‘¤ß½ãµë=…v_§K×sã~Ñdà�B=ô h8ú¨ÔCßSh÷oøÞ<Ž_ÜÇá¾ý�®ÜögÑîrÔ³{ +í~O¡Ý¯¹{£cÜÊæ˜·1z<÷‰ ÿl żT9ø•4¿Þg¯ž¹K›iøÎhA7y‡¯þAÔó@Š{¨QÏóÚõŽúQÏï|éüNØ®öAÄóE–>*õÐC©ö¢ÊÀ¾¶«o¸n5�a�jÌûC�|¶Q%àŸ"qh?°QI'HÑØ›B¿vÐ#Ÿß)¤ë?�w~IÔÛ¥T?• Eß$öF—�=I“û�.ûÑf`§Z±X7�!Y'`ÁØ©P(v*Šþiü�0½$ßWÊôþ)‡Þ€©÷6~#Ë¿o$ôH™ƒŸ‰ók?‰þ§Ñ°�„ÙõB�|6ÐâžïI¬ó:„s¾§ÐîIz§OBû ”ð:ìû;„uÞñÎY +ÚK˜_ÉRÐbÜû@‹vw’e׎*-´ �†í#ÊÀ;HQÏö çÝA‰}6‘dŸ]ô(hQÞ:]º~øÖ{ël!H¾„éwAòÙ:^º®ã•³‰Ä{6¥ßG²´‘2?¥ß'ªä³“.m¥Ì®}9x 5ò}Ã;"Ê Å=;‡góÁÙCŽ|·Ô(¢�”x×ä©y™¹2:&ížgêÈꜯÛÏñÂùkZ�½ªÙX¡È½O„™÷…&÷¼’&×vúôŽ=�‚?§ ¿të3xgôåÞ§Zaø¨HìM¤Þ¯s(GÏð¥É3yg²Í_[ÿQÜ«�Ä‚þ(ðëÒÑ×µí à[}øV×à±õ›¿7èÖs¸t½Fï­¾¶ÙòµížmúÚ¼�Ÿš§ñ3ë2xc´Ì\ÙŒ3èæmþÚj˜2 ³­³5}lô�dŸ¯ÉSó;„u~èÑ/nLŽa³eº2YçK×�óþO"ž¿ „«qþæê@9z‡°Î‰ûx +ïzÏá]zäóA�|�§�ÎÓì­Ñ6~ou¥ßýn—>o©TûA ÈUŠø Œþ(ÔCTÉý:]º®ã­«—<¿¾êÅc-¥jø—:¹¶“(ø3izo£ÉÁï$ +þdTÒpPö)ý‚ŒßiØ6þ¡G¿´¨ç‰(ýŽ.mCºÞÆó�|)sð;yÞRª† +Ñ>þ Å¾Ï¦³}ñC§VãøÅy Ľ›É³kS•@´¬pü T0ÚR¤ˆöRf×^ÒôÞQ¤†vÓçÑ% �´)hO•(´§N ·I™ƒ_(r϶ásë6€kH1ï/ezí¤LîOÂìú G=gðÍ=úý©TC +D +ôÐjäû7�nõ  ›jÜ»{Àvß&¯Íãø½Ù?†zvÒå ½„ùµqáþ5íkcâlY¦ŽLÆñ®Ù<‡sÿ +gËÜÜÖ‚9âýžÄ:O×FãxÝ|P£Þ× ÏÕ:຺‡‘®ëÎy"L¾/4¹çñ¼8®Ïð‘Í1s·C·Õæ ÆýE¼ú†ÛFÓü¥ÑW´ZŒkÁ¼bâÈ´2qisŒ[™–&­¶Tó5|k]F®ÝÚ«Ú­�±;›iøÔê˜9¯åÛ"øüAÄÕ­ÖÊ̕Ѣ‹ƒu躪}ìNØ®Fâô3qku�Þš×áÆÝB‘|?g0îËÀ‘Õ1sÛYÇ+÷�÷¾—®ëtéúÍßÛïùæý"IA_4 ø—8½_I“kç|çjœA¸Z\GïÒõ!É?T9øŸFÁ?êôð5üR§‡?ê|+mv½·îãüÉý¤MAêô»UÚ ¼•8¹v“hØC¡‚?*ø;y‚o*‰?ª´ÐNsm)Õð-ešø£N=Sç×rüAŒ{?ÈQÏÞ!¬ó:^¹¿Óµû?‡xv£Þ=Égÿòýüo4ø“6m¥„6‚‹¶j¡mTéwÿ€÷îœÁ8?S‡VÛø½Õ>‡y}‡°ÎãÂyïœç1¬ó=„w6ϷΦ¹Só4ukµN—îIÞS¥†7Th¡�€DâýäMEÂðfÊ$´‘,í¡G¿ÄØ÷‡ûn¦LÂÛj†£Ý@†£7~¢Ê>{¨Rï×è¹Ñ5xm5�"ž-ÄÈw÷Ú}ûŸ8gã Æy%ÌÁí”iâ?`BÑAvœ@¸Nã‡6Óì�u"G¿í�#ß}Ó÷fçÆÙ@Œv÷P$Ÿ�óuû2scôuÍÎÆÐÙÚœ°Û·é{«cæl-Œ™ Æ,3wË7ƒn5÷íÛªùïÛ§ÁS£¯m]ìêæ±1vwöæ»Öƒ(õú� ›¿²õ,LšƒY£Å`Ðä0¼­'üFëÆÑ3}grÍ Z-cg¦½¶ÝÙ«ÚÇò­s6giöÒæ›¿¸:Fn«…)ÓŠñÚë‹û/W7�•ÁÛÊ2x[íõÍkcèHˆÃe£Ä�dŒ8ÒÕ‡Åìð#Ä�xWú™ât… 1„[×@ÿ4p)¤É&'âN<ˆ#ñ ®Ä‰x'’1À�”ðïµÁG܆uÀ‰O +Ð)û¨¤�ì“’b²J I¿&8.½GH'w0ö†(ÙGÖlÍB#˜–^"#. ‡�jþíT\•äôt’§©b +å,cŠZ¶xMT(s™ŽF1yHŠÃ=F/wh^.ö ´ ë0q‰ˆƒ´rr•Û¥’ÀÜaܤ‚ rýÌä‚”1p°x†UÜ•¾á× �_˜pÅ»4HàvÖÂ�ŒC ›‡HÁ¯ ã¼ôÐ%+öñ¥ óÆ´F$ |Ç" |PCVHKÀ'.Ä€OfHò±Éä>1½Vx>* sª ÒƵ¥¯}éQ§�£þÓ⤇½t©+KXQ«,e�«l\51!! +Íd<‚øˆ$_n�+Ø­±J# ½Œ4%Ch}aáõ5òu6f‚TÀʈ–y±õßÉØÄP“ÐI¦¦f«ÞfꔸÌYÔ(�|3„’ÅZ±Bb@�‰:Γr‰Wt± £èg«^¦ ,j˜=²œQé²Õ,‹šç¦“¾Êî�—à&:5‘üyV&é~–>±ƒ|²åþ"iò©4é^(N|#’,·¨&”?MÂ"§žˆF,C-• z®ˆâ¦˜D Ù_«­?fãaX-CØã("¸ $ &Y &Q ç� f7€ØÙø‹ˆzÜ¥Ë�¹xÝã.^öXKˆ±ñxcˆ‰O`Q»$T²© †"©©zåmðÊ–ùÀˆ˜+è—Ðç ЧßWÓ Æ/,P¿¼Æ9Àw4S­tòÕdae PIzíK«ØÛ˜Š˜8—³KVÖ“(ð ³l©ý EN¤b€Ç¬¡ÍÒÆ³LUÖ:S[çDQYí,WYÏÒP€÷B€‰-1ü¢”ÖÛJ•;Š–[\#ˤ-[qj«f¨;KP'u˜–H-Ã@N-ÁD83‘4jV&„œÑ…¬{ÀòÞxl\¸ˆµ�µ„}³`ÎT‘e sð‰èdß •�KVTz��V*1Q ˆ‡dß“’}OzœJ2ã1âÿŒ<é˜.®¨•ž�B7âQ‰ãÇ$‘¢) Ä9®ZÙÖ-Ъ1Ö&büCD÷‹—™S…·ÏÄ#’ŸŸ¬yž–M/Ã@H1 �hr*yÌ<1…Ím ›ëój¹B{2iÌ ùÔ”LâÕ”4Æ\4²xÉ8¤ñòPˆØqÕÊ6P‰»ïÉ�ßÇ„ˆ7…‡?L¢dkÈJÅ7F1à[Ž âf^Õs‰¨¸ä +©¡ÙrCXGåઌJA$*(“˜ LbBìe²©Éè$ÜéÈ +æTa¥íÛÄJ�ÒåE�Bç f’©éeÒéyÉúwé" Z¤Ø•B¸�aîØ‚V d Ùç )p¡ Pò¡°ú¿eFÝ!Um–Ïl×JÈoRvx1)e¢b%]QÆ#�…L–Üg à¨ñªô°õ ø¸Ó¦Ä°µ¬©ö.¥ò/©Ú:(?~¥*eŽ@ž��…!³kõaŸaaq›uya/,üÖX5‹€Èd˜¯‚Aò8`›ÙˆÄð’Ðèå·é剨e—ˆ‹ÊÀ$5$ý˜ì�ôk²C²ï‰É>(9$ûžô˜ôcD,˜dÅeXIdfe?ÌXÖ6U`aË, Kš"�-÷eWÐLQ[ñD�4‚B.!ÿèB™¤Ë�8„u ·„Ç—«Ô�³( +x%J-F²…l’H—í"<¡/´¤‘lI&]îp•+Ý0ÊÿȺåÖ³²êiXÔôU› ¡u˜ªÞÌJŒÿ·À¨³ +¤¨³ h1cÇ3²uh"‹g`9c\âåGæè2–9ú„NSqõÑò»zZ9¸ú‚2�‘I?$F&ÿ’¬Fö)AÙ·„È$à‘“I€@îAY•ìc²£R�I +±×Èi¥!’ÇJH'‚–ŒJ 5ÅPIGYó<[Lq³œAm3Å”¶EOÈìŒñÛ%-~ˆ*#ê0ÖR»­µ†]G…H-wEH¨%J}y# Ú¥-fzR‚ü ˜†aaë0¾!"lüÌ Hä¶,ÑÞ ‚}C@½¨ÄÊ z¢5îSµ•Ô´ÕŽsDkât¿ñ—ì"¾Xk‰N·®èmOjØ{J|ÜtOpÜpOjÜe^ +¨çº¡ÃZ´ôJZÌ03�ð]&i´\Òx¹hÑ|¤³’{Äåà’Tq7É)&áJÌD'ˆ¡’O¾â ]Êð¦4¡…D¹E™j~“€z:2 :2)ôô„¢W¹úeÌpI•ï¸jeËY–µÎUØÀ«Lnù ¹Á1¶Ê¤Ü@H¥VƒPµeZfxî‘Õ›põÈXœ¶TçA0ç G:{×Ð[ÛätLŽBâËRJø; +‹ovåÅ÷Ê’Zg­fÊ€Dv0½/¤5™6X%ê HÆV%YJ\Ê.GHqã …rg # Z£~ã”ü£ìÉ# Ü™-°¨y†¶âyB.w&.iÜéÌ$4"ªy%Î�¬X¯ñŽ/ `ñ¥å5 ‚’R0p!¸ªä_肆yc š· –šM�%Ú<)Gj8)Aê9K mddÇè¡�³"¤nLrå¶ ’Å,ÑÉ›ðIO™dËç *l›XQ[L"e[+P€–A’J,ƒ!�2œÊmVfÜxKh�}HÀ”žš®)`ñÔzX u1~�õóò¤¾Äq­±µ‹ ‰¤Ë�ybJ›¥ ,i�«^nÌÐVºKðRË.‘–^"©™‡E(7ÅMÅ0´œEú8àžäñeÌrE–´ËÑÖ9LF"‹—…C:3�f¦N�#„B¥Ç=¹qÿ((î0VýîHŽíâŽ&dzCtlÇž¸øbPTÿÜŠ¢¯5¡ñ…8ó„¥�”JÞ'Š)q—9¬œ�5qa?™àþ«Mó±.4€hXf·Æ-¾Ê¢dMâ1sXAìa%�±“2ñŽ)g‘?¨�±}éQG0 4¬©¯ÖiøG"¦»º˜ö./ª4†*¡sÓi÷IÞÙ j8Ö" €%Ú°–/uä/c—©RÞ4A¡Ø]n2ÑÛôt’·9ÚJ×ybÊæ�-h•?²�y•´ö:)C:—tß’Õox$Š­¨ÄËÏÄÁ%m³Å6ORâX¢‰•jÁ˜�€¥Tl,JŒ^‡¤‡]G„ÇwäÆíæä†mvE­fG·ƒ²Ã¦còãÓ1Áqçµù‡<’� &!rû!rßIòãZuøÀÖUûQH²>(Cl �zþÒ‚^ӒûE‘±åéAFåÆ�Á˨¬aTmÚ]틎šË�zÏ +š‘•ÊíE‹-’…L³E•5HV.¶w^æËVØ2‹Pn:1¼m�§Jqƒ\õb‡¹x©¹ />9À+b @_¬r€w$òÅvr€ÝE` }¦€9,/´YK6µK¦�v#bDÒÎÅe”æ�…tö°Å”þŠrêŨ¤þÏŠâ†[bÃ$²ƒ ìcˆÙÈê˜[·$+Êä(¨[_@ÿ<³¶dj·�š¥½Ì�kph½@!{XàDvA ȺÎ{ï† µ=#>îÛŠ ¿$°UJ&±C�~v”©á¿êa9gÑœÀx¤‡,ýh#L@ï Æ$ â€sÚõŸ'µOfµñ,ݸUûøä‹M9¤Ë˜!ëŸÅI�ÆÊƒö­,¼–K Y[…Åü·Ø˜m+1êË‹Úöbc¶³‚¤Æ«r¤žÃ2¤¾³R¤Óe ÒÓ°ƒÞr¹1ÏXbÈY*.fyʉ.ÂrLÌeSjø2(-lzJ +/ + Z +ºŽ’¿¡±½rƒlíHŒ-˜T¿ÁÊ©ì%%µîOXô2Ö¶MF§­°¨û�Ã¥²…) 2ˆ/©´V‹ +º¬Ju`$_q•;quÊM‡¥H]v@�Ù'€C;¦€Ž9�=æ6~Ôt[†ÔuYˆÔk]|Ðiì¨Ý¦ðègT +ð�K z»¥Fí†e‡¯›âÃo»Ð µ Ä�C@…6îÉ�Û�É�OÆêÂÆFIA{°RZwI)í\TFéVLé­ciHP”i•˜nÃXSÿWTߕŴW€ÂIk)Ñœå-':Û’Ûì~‚O-W¨òV »NHŒ²¾8Ì⊼(#[’b{GQñížàØþ9b»eÙáÍ ƒ¶ °1"irwÞ˜Â&.r… Ò‰•-c•,ÿ±‰;ÓÄ71 -h�B¾Ü_¸Ð`¸Ô} ´Îs ,‘¯tñŽLºØ|Т}³bå±�0 HÅZP€«Õ…S»•@jvCQD•ÑßE…ôc ‘ìT ~+Žke¯p¤“Ž DLX‘؉.ÿj2{W–Óþ•õwµŽzÚ‰ê=KI½?•öv‹ ?–eŧ3RÀ¶Ï�1.Tµ<�t²LÞ™XLœvÔÏN&„„Ù&œ½CÑ~gqáonÌ`Dú;,k7&ë«”=«è B j-¢UµÞ"QqË¡A¦$Y ’U;Oʪ÷°!“!À‡vÍ€�F`†üZh‘Áå„{emG�ÑÍZaØ['/ü›–ý6ÀÆÜ³¼ Í¶ÔèÛ.2j0RÌ" 81‡ð’B�Å ‚‹*Íáˈ¬-§2†*£²VNëçü!Ëhÿ�å”ÎÀ*:wXRZû#&¶óÕíדSF%Õƒ¸rZwI)õ®˜Ò¨ˆÎ†\ÒtDÖœ€Ê°�Ê[XHå +LBµ¨�ÖdH`ü;!7ÈЖ¼¸íVÿG‰Ñ³XVÐ4]Ì‹ŠYÌõTÈ`^VÈõ•u=eEÇR)Ñ3\)ÕRpâ9wð‚:ÏTH|µ)7üZߌJ�è}Š‹.ÖÅD F¥DÍ!J)=aÈæ|aÉç,ÁG&�uÃ²Ž ƒÒK�‚Ç€ ïÈŽ o�„dHß ÆßaÊ矛˜’‰µšÚ¤|Ö hDÎ hLÒŽlÖXCëM>o®$œ7vIéöLÉŠ±8&4¶pNlØv—ô÷2ƒVÛbÃ.9b®ÙÞUòá¸ôèuZŽÐƒD©«dñ� H¡ÏÆF²f¢US€]6ò­ŽY[€Z®1‹0«&›a^ÊMª„ôª—6úì«§XÖXC*iYFX“Ñ­‘Lºj†â—@ä²Êã�d²/‘~¿´î½@F"†&�5( 4ƒ?•‹ÂïÀG$Ý¥tšchHXŒah¥�$óè�ĺÙÁ±VCÐz +õÐ.’ô»' ѬµYRt/¥…çp¤ÓÖrY7…~í¤ÎÁ?•±Þ’‚ª¡å”–—Œ¸g((ü™’÷Û’w¿ò‚Æ€@*V“LÙAÉÙŠˆä\_iÑÉ ¸ø²”µgMñµ¬)úØ·ÒÂ×RNøZJ‹z­µ†gÅG¿«ä�e©QwX Už …S{aËhV®²¢öOZxl뉺K‹*­¡Jéœ�ŠèœDs–0$“ž€¤S® Äsž ¤S® äs¶àTÖÐ*J‡xrêÁXSÿÖSZë謡J©aÈ%Ý€Æ$-U°#P‘ø­hDz*œP´%ðØœ¿š ~KD{†ÖÏD–Tš‹ÊéŒ�uTn ²kÙœ³V3å ¬¢Z.+¥4†ÖÑ +F:i K>g K>g S@k..£µ—–Ô:DÔÎue4«Ge¯ äs– ds†`ò_`ÂYWPâ9[Ù�¬;·B�yw’&÷c¢ù±«¢e²‘Q³o$µln¢ºÝ%´;¨ñè¤@ôR0ÒL Þ_4ø}Âvw`ÜVêópŒB�Ìî!Kim[‰QËAÑa×5Éq¯±Ò°³XPt./§3‡Pe¯TéÞåmfÀŽyL�óW\h¹@"ûÅÅýá2„U±Ü4âK} +Î?“y2‘¦„—2�µàîT‚ÐA G¿ÀÅc:%dÃÑYöy G<ßDʵ ”ð~0œÇ³Õ@�wÞÉ”ÐS™Hšìó<…vh1�BÏYké×0E”†"aØ�<k!K>Â�ÉšjÅbýtJø¥F~,"“u†,¢³†+£³ÓÂ9·YÆŽlÖùÊu§‰ô#�sØ}ƒÑ0&»Š6¨÷;¡z”j᯲áX_ ©¤¬XìR&éA2e +F<ç?0i0 +<ñœ?d9¥¿¢œz­$œ²ƒ“³U�H: ˆæ\¡õS»UEtN°Â±~:=¬1@)Õ~°rРŢ—REüK�`%½jbO°B�ÍÙÁ ÊîÀEe�Õ#“ŽÐCs†€ã’Î +¢9C¸1YW8²Y7Xù›8»["ɾ›ÇpËF&}¡H茀„cSha?€"±� I)ÒF/•zø`F%Maˆç¼Å$”ÎâqY/`Ñø©P ÚR# µ|hÒnHö¨ÓC›éÓÛôIø“4¹ +Z4ú§Qp¥ß7¢ ŒÐ£²W½X´©T”é�ˆ^Á‹ÄßÙµ•6¡@ÁcI™�7ØîUÚG6ç,#bš�Æ#LAŸÔ9è�,­nDö/û‘æ`'‚ ô$¼w¼t?&Ž,{•³µ2ycr&`�U“~°C²^ +õv�ï\M“§&Óø­É8ƒr2Í^Ú37–�áKÓÊÌ�¹�iiöÔjŸÆ»Žãmë4~hs¡[Ï¿)q"PU´ ”v¥Mïšä›”J=ôP ÚF•6#ÞOò üT)=›�™ÛÎmgó�#ž×Zâ©‘%•¾êaI/}z¿·ÎZÜëI›‚ö” D¿F£?Ú ì?�xµPå^¯‚Ùµ‚tÎ�€Êl\ÒT&­hDz*ŠÝ©4l…ÃÑk锵ŒlÎU0½)¸7™†ë¬œò†(¨2‡(¥t˜t“hØC™z(û‚�«Çå|eƒ²[Ý€ìT({Rf÷J‡¸Æ€$TÆðtÆêq9;€!é£Nm¢Ê>ûH($©÷¸xô  ”z G:i D=;gp®zÔóS*;ÖQ¹«Jj­aÉèÜ´YÕÂÑ[µ˜üW3$—.Á6”høfêü@E´Àˆô T,1òýòõ¤ÌÁuZø¨Xì ãù!H>§à G=;iSPçç‡(k©†ê´ÐO•(´«\0~«�v‹¶eàJÔ‹BMìSªˆŸÉóëŸJÃ^� Ç'�ó~Ò¦`øQÏ5úÙ9€r1p÷áœÒ¨ ?€b±¾é�P½¿ÆÏM¾®�a¯m_,FŽ »sX·Æ›gêÚ²5l³è  �ã…ókõÌÚÌ£Hד:¹^A‹F8&‹0ë"LÀšHüôÈG%�Å£²gõ_ݨìN¡…ßjÆd-•Џžû;๠E¡ÁåÔsÈB:K¡@¬‡&ûþR¦÷NºLPBñ¦Àƒ³^ЂÑAêùA8š'q®G¥Zݸ”±pdÎT,ú&= Å'RB»HRÐ3q~í«•]‚�LZÊÄaªÜë;Šsó�¥-e"‘Î"Â)_H2*3X1Y?‘~E Õ‹ÈšÁ ÉZ� +G`DâWÊìÚFâÀ+}‚�S% +í%m©ÓÃ%Pîw* ûª�}ÂΜ/œÇñºy°*¥Ú + +ß•„ô;xAyUò–Àò' ±h/‰¿÷�#ßM4Éw'm +]ZÅ�ô T,z¥ÍÁ¯Ó¥ë5xqtÐ#Ÿ§2¡èœP<ºtÛP¤†¶Ógáw +õÞC”{¿æO­žÙ3›s¼pþHˆEc¯rÑø£NÁ÷�¡ž�ã÷wëˆ$½å —:Q豂dVÁ€ìF•€y¿Çð®ï­×ä­õº3ZF®l–‰+ë2se´M [×Ãùëš—aÊ´bJ ½ÒJ¨<$æó1qdÚ™¼´ì�åýÀF%]ÃÑQ +ÎB–}óé·6P"\+yrýŒÝCki-aH& ĸ÷u¼r? TÐ3¨áX$ìA�z^©sðC•(ì V8ÖV4&»j¡�Ô)h0¡è�pô Z8ú F4¿’0i^¬†‚âo5­ŸP ë ±^í¤úõ¬˜Òb¬#|*¡ò”tªágBJs@òù; ñ´1 鬧N™<¿^*µð¦*±è±l`ÒU("=*ØJägÐ"Ò3a†í¥NpO�¢±/Xáè¥RÖJ¥Ý:çNÆÇÍNª_ŸEdS+¡ÇæÜÀÅ£oò _帜1@¥³|hÎT%wÂsõÐdŸ/¢üûAŽ|IÌýP¨…�ŠÄ�GeÇð”æRBZsM¥!ฤ°p¬¡JÃ6f×p­sm—ˆ;4YeEíçƒY[¬¨rT)¢§"‘ø¼ ìS§‰ŸˆÐîñÖ‘Eò�=‰~·G”�·b��Ô9è·�€Öœtn#èȤýú¢žWÚô~.�,mŸÂ¼oD)hO©"~3" B[¨2ïß ²ùA7ß®³‰ù¶P£†ÁˆE[êôð‰{ +ï|�a^'ÿõ¡J¿þTê½¼Xü +Z4ú#u¼rB�}^‰üíî?·_“÷VÓàµÕ=`ºmŽ œ-3WFØ},¿µ`<‡.ÖÕ%Äè÷7D¥%ìè”—<»>ŽwP$v¥Í¯ßßÕEŸ}5ƒ�ô‚�ô––X´$1î¹3Êæ%'>& ~ŠÄaQe MŸ[Ïá]o*ýz«’´(¢?ƒÍÏÀÅ£Òðoò¤ÉC«9�ýº¦}-וÑú +¦¼TÚ­•B{‚е֒ÍyÁ Êy*bí ÉÚ“Nz‹5”k‰hßBÚ%𸬭bHú¨ÒB» ü�B¿6PbÞ=ôègG•"z <.ë1.? Å©TEßÄ ¶§PmªÓÆ G¿ž@Æ¡OP€b-$æ£} ïæ%Ò¦ÑpMU’ž@$T»5ÅTžŸ”°;´Šv¬ ™rƒ”4‘äŸ×ùÒuÃ:�Ã�«sºrýHh„ è›J¿>1í�õ´ÎðDt–°ãSîRbê¿–”Þˆˆv¨ÓÂÏmláÁ A Åþ¶:c‹–Ʊ„D�`Äcÿ1ôëC�~7ã^N`�‚ÜÛJ‘Þ R ÚGâ¿»'ŒgAHæçJ²yoÙüW8&=b_O!ÞÿQÌkêüÚH—‚?ˆz^H2o ”ª¢ÝÀEã-5zx?e†·L™„6Ófw‹égS�@´­dTÖX<2å6*kªŒ=‰³ëoÝüηÂŽH¿¡ˆç¯p¤“NÊü?‹wR¦…[-ï$N@‡ûöaÈj1>w�]Ý<¶çð®O•PôX:ĵ„?Hr¯žÉS“¯m¶ Y-&Cw–Ý)´£yíd É<º¨Ó�V@Ñö­&î2%+n¯)©õ‡% _‚�K/äè'Äè¹çkúØè>4-Ñåý@%�Ig¯°šÙ£NÁwãÞŽ—®HÒïž"±X[Ù�¬°`\P㑞rqX;è19SpÒ)O�(üJŸƒÿ)Üð ¤+$•1(¥3 ¥7¬†ö G<} �´Ôé¡­Ó�û4xjô�_ÛÏŒS€bѾª1阈ôNœ„J’„7ƒ�¶”hâícxg+mÚ pÒš€ÊS.é°›LÓǦ­d›w¾u> +õ°g€b*{è’:ƒIAý]XJý&Ÿó•uÔ‰ÃÚé4\'xÑX+xÁØ!ਤŒX´…ûìÂ:¿CxG(ÁØ»š¤Ö”ŒÎn\vG@=ÖHê�auS&®¬ŠÜû^¬¦¬µDí`F¦¶Šd7ðih+i~=’˜ûmüÞjš¼µÚ)Ô»ÍÚAéµn`þ)UÄÿVë|ézTiø¦"‘øŸFÁöPäž-gVó[ÆÆ°må¾µ.ÔÈ÷›6¿wR¦àͦû2scóµíg¯j]ûƒˆg?�1霈´—8o<·»†nÍÆé‹³gèÐüÕÌË9ƒq�‹ÈÚÃTÒn! ¨ì4ZØ“0»ÞH(äè·Äéµ±xPÖVCm +«šôOã]§Éc£ƒ÷¾Ôé¡ýÆ£ý +¾iêÖjnÏÙ+Û׉ùz…"ž3% ô“iØ»u0.æ÷°a‹ƒqy¸¶ÙØœ/\í‰7MîÑ9†q²’é`ÇRI0-ô9\ºŽÓ7ç{çn>5Ûp­+avm/&;“gØç|çêš>7:ç+GMú}¢Ê>Û'lwû¹ý?7ŸB¼ ODçVPé¤NAE‚ðOPÒ)oy�»²˜vTBë( +í"Ë?*‰ŸªÄ"”] f§°ªIG™~¡È½«ÛŸcÚÈhš<5O“·V÷€éƘ4½÷‘£àÖŒg5ÞL—ßm”¨ám ´Ð~â,¼©To)}ƒ"ë¥Òn}�û_|ìËKFïÎ"mrû&œµMúʆeaǦ9½?ýQ¡ˆ6Ñc߇ûö}óú(¡r—“Ónõ‚²K™&þ(Òk2 âÙ”QíšÙ È?9&Î {e³³1qö¼®«§R ÖZJ8å]Jh-´Šj¬hœƒ.û´A™{ò‘è ü@ˆ¥Ä'd\RÈ|dj•F½´Ói¸V’ÞêršíQbзµ6ŠŠZ„ÔîÁŠªœ9#H¡èè ¤7L!¥¯†TÒN¨„õ +Än¡5TËåUÖ�åTöÐåDvƒ#²U5$ç¤OnÏ!”“cì¶X>–ý‚A“ÅtÀt3ƒ�Á‹Åžó…«cè¶Z@¶¬Rè`7`Ü� ùè@µ¹&pMþ‰Ô£Š±˜ž›oçæ¡J¿£LnÝd +¦� ùè¡É¿£ÌnÉW]ÖB“€³Ñe`�BQØ…$ÿè$MoÇpå4Ëe€ªö*ˆxf0#²n@£r^Ê û@ºîÞóVGeTPé*”5Pâž·C›köàèÓÂÿƒ¨ç¯iÛ,LYÇr;›…)£±Üûâ!,tàW ²ø×ÖVP&ŸÖ@‹Ãì‘'w–Z±¨½ +b9càBª½ÐETªÜ“(÷²–`bC@…ÖÎ"Ä—Ú+$e£Ên …ŠXgx’šÃR¢fcµñå ôø4³L`·¶¤f±¬)èì’ Êèì`ÆdME¢±sˆRJwEI­3, ¥/<• ¤*ÎE™ƒóSiØ7ˆAISXݬ Œ~·7}k÷­ÿ¿µ1›¾5›ˆro{À„bWà¢Ñ/˜ÁØ…*ûæ™=´ëÛ+c·†Å¤›u¾t}Æ.M{=³³|Î~qlü\kAîUAƒL™Ò(wÎbŠ…°ªyE³Á¸VÌkÆnMuâ°Ö�@jVƒT­•±VCÕlP³J¤„ZJ¼lÑç`v #°gTtÐeSjx.Tµb@j“8½5„!™Z1-*f¶&:üÜ‘Ûû‰ �†äÅ=–ÅŒJª×"ª­Š!©õ¤S u"\ïÚÍ6�p2N7næQ¬›{íh&Òo��ʨ¼uÅT� ¦LåB±N¬m¾l3LZ Æk^3~dY¢L¿ž¦“¯p{�³Årßd?2ì•�‹±Ûbwçf¨ˆò†Jå°,*è/-*ä VL³Q(秆4”³–2ŒV>*å.i$ÍA Æ½ZC+g=ÁÉæ¬4ê¥cö¾–ß`]œ ëEóÇ–-¬ ¤0”‹:ÿfƵ tLÊÛ()ì³#/îJP;ç×Ö¬ó<_»»'lwóÊmmòÚ<ÌXŸgàÒ¾b��ó�«cÞn†L v]ûXæ%‚W˜°�s °�35à>|ˆÕà_¶x$ï°@—zZ´°W½,Ðö‚‘“;\ù¶ ‚NûÀ™kJ¡6ô)ˆ5ÒìÊB’‚ó޳ˆ,*d˜ÐV�"šõVdÐ[^Le6é4Ö_\N?á!fŸ§Pê8UŸÈ ÚðqÖåä´C•&ö¦Pp?�‚‘n" ×F˜\Ú)õpÞ�eDöN‚b;?)aˆRZ_H2ªÍ°*:82ê!Ôx´…õ¶2tfõÕ¬ÎÂ�Õb0cýëèÒKo]AÕú,êÍ\kÞ �ßš°uu›ÃdøÈ´3€gØk�ý5EÃ1ëaìBÌç“ïëZGwñ¶/ E/¸"p¹üâ×øßû6¹Ò;a\i;LÒzoµØ ³œxb•J½2Oaͳˆ§Õ°‰,œ”¾N +�Nk�AkH@5‹ÁÔìH`±À�ç–øødVxȺ�ÀB�`”›Hå#ÎAÚˆ3�N +ìC”~=‰ÓKWÁ ”ApI¥³PNxºUE÷LZø¿„Å�eÄÜÀ¥L…BÑ)î݃eù®¡ÂÿòÐá:ç9 øÕ‚ DüþàÅ7dYàß‹ËÇRÃwñ;ÌÀa†ð,D”HÆ(@ˆ;é*[ù2Sù’ÇHDÈè!BY1(µ fDʦŒb; �I�ùƒ +חѺ•O­…)œtW—ÓnÖÄÅ}Cyñ׊ԸÁ Œè–|Î_ODo UJå.i H?™'o–"Ñ(_ñèÌb`-Õ.pY;‰‚ÿ(¡²-ÄĈ&¦5�GpnËýŒå4ö‹o³a8Ý:mVÒ9ìÉÿ5…D}H§å´4p Z8W–."óú@„êý:#Á6JQàó� Àb�[€ÐIÅëÐãbÏN*×Ï ÁÆ4@À‹v0�/2vÜ#Œª€F-em „!­ÕšÍvIA ²eìÁ¤ŒÐ’-Ê ;ªEá  ˜5�âPk_±1Ú bgäÆ�EDS{té¥�6»´“©!m! +¨L�I¨v³¯Ö!œ«‹ï©QEûÀˆÄÿTª8'…ÊI¢‚u#Þ,ƒg†�™³µ2sctÍ_Û¬Óµ«iöÐfþÖų²4ð¦Z܈®˜93±º³/šîœ'�!¼Æ7ÀúXˆ˜×Ç—×8Hˆc']"Æ_<Øãt}�»x˜0æÑájL"D”¡U€_Æ+Â:Œ_„EÈ2 +†@Ç$ëÈ'¶ƒ—r/%h +OD³C•€ôM œ\ôù7[ÁĆ@@‰9Ë€M-„)™Ø +”ÐÒSRx0+'h¨ŒòÒè¡ö–T¬FÈX*/d2'2<« ›‚�ÏÙèpëÓ­3 ââ©qõÐbÎl2¾¥á‹CHp�+�’ÀïlÕ F™ª†"/Æq8ü`âi»3è=+Eü_(õ‚'œ"`ØlÜ ,ƒÏ>Æ.@Èc+ äÆ „é�€õ »ød�.þá…LQëXý…† a•3›J¨ÝB€ 1Æ"¬ÛF%ZlšÊˆ{ƒ§Z4$ç +K8i VFç'é¡É>?Ø'¬bö; êYW+é?°±> b‘¦zñ(c­jÊJœ`škÅÄxÖžóF”}dP©„oµç\¾xVΕADLÜ�Õ)”£eìÆ²K¡á9�IíN¡žvF�MLh“¶5.!V�u`»è2�À\�µtq³rùôènq0Tü)‡ˆ3Ùq§�!.SXcxváèFb‡!TpW¢˜Pe ,e"‘æúB"›§dÇÝBd¬Q‡‘³ï‘Õ17%4n^Tç%ÐoýÄ™è©0÷)-ê [Ne,�Z12ç+�Ù<4³V=2³I›„ôµl«½–Ý6ÃÖ\D–_¨ÀÅAlø°Ã(G+•¤—H ÒFŸ~=(So6”ÜxÌNТ +vÅd, +EeØ’h£Ø“j¤‘é÷ ÇÏCÐ p‡)-¢\Æ-<\ïðpa¬ÃCÕXE‡¢%�[0“fW¼lËÇ ‰ÏWS|›ÁÁµkk záírÀÅó+—Q0)�XC.±µò^“cuFf��aI�±kÓÎè�eiÏ´F¤óÆ,—Rˆ�i±ÑÙ–¼Ø‚AI1O�JÊ@Œ‚Ú©�Z.˜Èv`E€YÁ#Gì¶)?h®Vˆ]Õ°¬‘цÿÔpêä̸‡Zž”ô€#95à*TøÙÜ»PU1®q 0 �†9À’†aÜBD ¶È�“Jºž�KÀ„^¾ÐUHý4ãËÕƒ¯C͈·­™T¶ +2©lbH×´€ˆ$bØé€6¾¦·Å �ö¥ÇÜ€Ùª“2‡œÊv¬@~–$ug5aoÀ"J?¸1YwÀ깬€z*ˆž¦ïŒ¾| ÁeD#ÞlÅ3ۭРݚäøW;4ež¥¡GBP�'EUàIQ8ÒSdžøª‚ÑØ-ÁôS¡ß3À7³+™Ü9VŒg7|àd!@Ì ¦…˜p"ÈÆKÂüKˆ>öÒ¥6F@ÛØ€/z¬„‚1 5'è*p:¯|C&ŽÀ‡ˆÏð›!náÊ�Ž%ž—ŒY,"š2‡+¨2VÊoSqáå˜ØØY%ó#âcK7A«°ªÙ§Fm&ÐÂn´ÉÕb)ÉÔf¹¬ ;tI•ìÈÔ:�vžE>lƒ œa0#ìj•K$Ùwó:[s­ ¸×–ÑçŸl{yÑ»­«7 +[î �Ú@9M�ó&t8J—žù"‹Zå /e‹NÐÁS 0V)€v;@×…±“ Æ6¶�²\f€iÜJàÚ¬‚‘OŠñá32<æêè‰Û‰¨ cih³O,qNKáKhvoI�íÛ/HÔžpÒK¡ÞîÖ‹�ÛÊ\+æc7– ÊÜ“A …VŒ ¹¦RcþP€aS4(ÃXýúçË0Ž!bI‡¢N»üøØ×‹óå‹-h š¬}¢¨QêºA ü[ZˆÍàÑ}q+­ÜC ?ª ú8JðfB˜ßÆ[Âì1kˆ±q—vcĶc¼2Œ‘pè¹1¸³Øµ¸¶Án$Ä/xÊI½ã�alÃË,�³Y•žËÓyƒT™KÚ ^RÅöV‡Øp­@úÙ”=Ž5‡ý¯¬ðšPÖ3€fZžG:-ˆ��/€D˜LŸÙÿXL*ã@é…P°ø®1�P/.CðvÁhòîÀdØæÀŠ,ÁÀÆ=¾þ¶pÑ‚¡x©!y|Ùr–¨òh„µî0΢¨…7Žh܇"…,Œq|7é¢0F²� '*èAÌ’9—ÅýD4à^ ž8ââK6>\)¦‡qœ™‚U=^s,’ånÄÁZV³¾¨øp¬³ŽPÖ¾|ö²+3|#'e�@ŠÜv�_lÉ +: Oy� IÙŠHf¶‰A@@uÆbÒ‰ur¡Á#B¼�§`ûÆd½Z¸Ði8’½Ê" +¶¤"V5Eöalã«�‹€Á�¯ˆ޽hÏÆNÂDŒ‡„�ÇE¾ä1“Úñ¯´ñ_tã„Å�3C€Õ¸† )�®ŸcWÜcEqª!ÞÃux Ÿ‰ÚIâaÔ8ªy¡fŸN€i Îc^^x/¤ÒP/ºþgRÎV*üV9(é PFe C2龵ι:tq ¶®oc_Æ0D VI ?*QÀ4€mÝ ¶lÌ +Öa\äÃÕ†‡¬1Ž~œ¥kð +2!Ž/¿òQ‰WLxD³²[d„¸’‰Û˜"¸ÆY¸ Œ‹lM³j°Ç t¥� m,€ó�ÆH4�C'ðPY”0“#.‹#bðlÕÏ*bâ>œg†×p +¢r<ó:`0fo¡QÏNFØV6&ë™7´š‹ûòLAå t +žf ++k›%¦¼y»X¡ÅÆ0²F$ºa 0â m\$Û5î‚æQÍÃMeœ—Çdc,"ÂX¨ÑÆq�ðÂŽð6^ ƒÛ˜_}¬Àú)!€ö <"ÙKã€÷e† C‚± ?A(µd<á(pÁY‹‡å,çრÅ#$%ñ¨œ þd#Ä‘j‚øÏá×Nž¾|nÀ|<Žü[=â™–r¥»‰öÁöyaB7R1à_âÀr†Yc ÚWI•.ÈJŸóòD[6>‚¥ÇDÀÂÆ«"®Æ%¼`íZ Ô}Å °hûP {�?i‚Šw�ä²ñbã&]ÆI:@À¨ Z52ð$À4ʸ�°€w ¢â\ ðùJo³À€ç}XÀ ±UܯÇ˂âd +ž8Ö‰‰?"âO6@2)F(¦ÑÎ 6ò5x@”Ú. +»M‰Œí½Å…/C€F/[ÆKÀˆ¾uRí—PÌl +ðñ²ñaX1S‰ £bµ ±D¤ñƒgñI ë})–l¯ã*\Æ28( s+(ŠâžU¯…qZ0–Û+ÎøÄ ¶EøiÒHÁÀÅ­1 Xc$[Tã–ƪx–hTr}ÄÀT\…sB±ƒŒÁ¥ÌH~n|@˜Ýø±­1Æ/¶~Œ,Z°‘Á§¥SÄ«õƒ%RBÐñ„£€V80–�¡Á˜ÇÕ¸†¦1 C\$-ÈØ¨ƒÀ÷0@q¯§#^Å#Ä�f€xÑ /’ âJ2C|iFˆóääqŸšºVó˜Ë˰NI¿#\"ÿŠ­dâµ¢¥¬S•UN3Qǧ&bQÍT(q•-® a¢6‰›<ѺVÈEKoSùÒ0®²øËÒ8†+’bj°]qMšwübÀí¶¦øwðÄéOìÀ—€¤Ä!%q@I¼ +(‰3Zâš p,)~–%Åû:$àjVRœƒR_ÐCÄ™b~8R M Ÿ1°S1Ã…1‘qc+b„R¨t³zÌÆ-ĺÆ€™-°š½$Ô1³Ûiá#âÇ�””: + aLlE@ 6ÆâáÁ¸‡¤ŒV`˘€Ó*ieS„ðÁõ[ªeÀ¿\T¼í�NXâ`”x†¢%~)‰W8R⎎x£$žetĵŒˆ8†&#¾¡éˆgˆ:â œžø“G “Ä�®Aœ‡÷ð NP`ã( Äà&:�X í"ÉòØPÁ&[>—\éLÒŠÙ2óË#G¦·‡ŒËCœ”Œ@U¡¨ÁaYã#[ÆG0�U'ì<‰ÄŠQñö€;Š!àqš8™ƒ"Þᩈo!ñ®¨$þ• ‰×˜øý€‰E!q¯¨#¾a©¨AOgŠ:ºq!Äs8¿á93×¾_¥—¥b•`"Ÿž‚JŠ€¶vádr€¤_’*•‚DhPvw¹ôîprùÍqD¶�ÂÒ1‡$䨒¹BTî¸1—° ã' ŒQ\Èab˜uE¡VÅ»žxåWïZˆâpVO\��/«râ]PH‚Oà#ÄŸt„øSN‡Ê1âO7Eœè*ăxÐÿáM5BÜ€L‡²)âN9CÜH&ˆïðGGRãqðÅ^#§•�EœP®öÐä„’§©XRìåaãÒ»ci¡Ž& …$ñL„Qc²rØTÈ×Ï6î†`<#C�E­ké˜^‰¥â€\Lü�k‰ûahâÞ RüÛ!Š÷]˜âo ¸l ‰_ JâWAG¼ANO CÄ©nЏÒUˆ÷èðŽÃ…8Gºñ'š"^#DïH=GÆ?¸*9•àav}ìÐ<2EsЖÌÁÕ)—ƒBV/»?d\r‡À°ìúHbÙ2¤ÒÑÇ"%¥�p$h�=>![h«ñ*†!DV¸Ò8³âŸ3ÎÙpÆ/)>¨á‰ÓEXâd�øWÔßR:⎈øƒ¡"¾@gˆCÕq£k7ºòð¦+oŠâK1A<éÄ‘b€øÑHæ +B�”…1“ “ŠH5¹«?@�L å&™2:È„J(wÉNîêKÁU%–]N2¿<”h†o`ÉX€¦¢j“µµ±_ÆB4P�]døÁ©³íŠ+v!àq pJ‰“Q)]₊x #®5TÄ«~ˆ8‚�!Ψˆ'Ð9âR9Iüˆ†ˆÿp ¾Ã{®<&†ÓôpÄ{`øU ê Ë2 „´“Kd‰§ /š€Kºd +ñ’É%RE<D‡&aŽ�„<„t‚u8Ù @Ä’±F§£¨ºÃPÎÒÆ\¾<Œ«pí0áVà˜Ø��8WÑk2âò”Ÿ $ñŸ ‰¿]àjW¸œ„ü®’⌒xƒŸ#N…sÄ�®C¼GƆ_¯>6C|¨+ä›–ÙX�bn–\ >,»>˜X"îú°aIÈ#…˜PÈ(¦á�OqXHæ¥áN±·‡ ËD˜–Š<0-mPrmT±Œd؉2H�KzUñú€ñ4Ĺ’ŠxXÔÏBñ0¨%Î%•Ä/(ñ+"%~”Ää q3Eü‡ûÜØpœ^Ãm¶$ØOÙ .r©É%bä’f7Ko�š^>4»=‚hr‰éüú0¢éíQDó»#Èæa –‹84¹:²ø³q"~²4R¸Šz,Ðþ€w;(àŸê‰sP2ât„xÕM_PÄ©d†xÓÌOºúp ÎÃ}xïá;¼Hæ‡;Ííð>Ãobz"Œ�hÐì +¹áÉ]]íDÒÊ]²…Ô‹¤Ké·ˆÓp�-¢ß TJ y´’‚}H¹DìÑiYhcÅ¥âMIÓ$qŽ( ¨µ�­€Q�GpˆIËâh¢ø‡ CÄ­p„¸ƒ Î ˆ7¨âv„8Ï*₎ø!$�LjKÙýð�^Ã9Ì•'ƈß]¦ªŒvH/ â²²µ¯R�‰‰J>ÖV± �–খa §–…=HÅ` ¡•\4, {œŠKYáoxk\5ÀÆ”4âµDì¡i‰ØCS¼Øƒ’ËcKo0æ±5£ƒm÷bHÀ?ñ7?*†‡GÉôp©™ ÞtõáIˆñNÓ×b†¸ÌÏá9œ†ãð.óà€¯ñjW$ +,hb0L1áRËÇ#„–•F-+� Š {„Zz{¼Ðüö(à³+d5”�G‘Î/�š„:n`Þ@q©hãñÄ“4µ1"–Ƨ`´3Äo V÷ø‹×¥!�ÎËo�—Ý40½?r`YÒÙ +JèƒµÓ ÄÉfHLo�!�„;–XŠ>™Kü!Æ$Eb'É"JZß8‹¶jl¢Ã +· üM+àCtÃgtxßá:܇÷pŽÃu8Í•ÇÀðë5Æèh©F’oËwñ»àr¦ùeâ)Ù7Ù·ÄÉä_#•Þ!#4%�€Å#¦´aZ.ùÃd$¢hiD“‘È¢¦¤ð¥èºËT)o–§Qà.…Ὧ3H÷£˜�†emCFd—REüF“ƒ? ³k#HñÏûÞíxé’6§T‘åŸ'ªôëN à¯ÀÅ¢—2MüB�|6'h1ïÛèÁuïœwaò}!Ç>¢HAŸ´ÉíP¤…¶©¢Q% ­ÀģǒQù h´qåüN!]gú$üQ¨‡4yhõ�Ÿ\ßùÞ 5ò}*ŠÞé3lï€ç¾L›Íå¬Çz�ÍЩÑI›‚¶‚�G™�?ç ç•<»¾i”Ð5î}žÃ»:Ç�î3}z¿¨÷ö çÝ:ݸĸ÷œhüS¥�½ ¬Ô9ø‹.ûìœoœÇtóR¿W7*»T)â¿é‹» „«™@ ûÕL9BMyB�O™ÊDäìDZØ“0½?ɳÛ�.Ȩ¤³~lÊN¥aOÃÇ&øu0Á3ºçð®gå÷ B>k«â$ñ×–JUìN¡…ÞHrЉÿüP$`ýDJh7�†ýOã�§éS“cîníLß™…zèȨ¤%ü𔸨¬™6ÁG–�\º¤MAûÀˆÄ¿Äé Šä{€C0i¬•ÝIüküÔh¾Åfy¶ë‹�iµ×¶Z›ã…ó>‹x5ãÞw"ýÚ@Šy_ŽŒ¾ºm³D”~MßàEãŸ:aøm¸kÝj†£-5Šh7xù°€ìKžƒöÒ&÷¶’ù·œ€ÖŒ�ÒbGN·j?PœÑÍx¡æFYVÉ ßÓícƒÑ– dsŽ “ž°ú){U91ÏIN| IDg©SÇÚHø{ ï¤XôQ¤‡öTª¡UŠè«PDvª�N(jñ蜳phÖU+$û�ÔÆ!H>û(ð3‰B™‚m™uŠÈþDúµŸ>ý)“ðVÚôþ¦Ò¯'Úä«iþд4~jZ&So×Jâ©­PÄs¶‚!é•4¿nTÖ:à8¤ÌA$ÊnMžšç«•‘ë�ˆÖÛ#*nÛ‰ +›ƒ”ÑzÁ +ȾÃêýF•~7ˆ%k§ÐÂo$Dsí/?VŽIŸ…³?‰1öÝ=‡uS% +m¬“žJ¢7PJh+a=þy–ÝŠÆdEªè“.¿ÞÀhá¯bÙ'Á¬¨0üA‘yß&0ÍÓð¡Õ;_9£†_ŠÆ?…z¸ó­ó:Ý:�38Wû,âA©ÚW?&ë7&k§…þHs°/}v½Ôé¡=Eâð+iÞ8�p=§+gTÉóõ˜82-¿i1^kÅx»¦ýYÆî–‰$ÿÂŒˆŽm Ú…÷nœ¾7ÛçðÎæùÖÙE‘€6 _Y—ÑÛμ ¶•ijOèqé/Ùô Z,æxá"ðà”3°’Ê"–˜~0(#ú¬¤„-fäôV`âÑÏÄ©ÑG™~7‹ö“èwûdöJ0v.i <:g «¡3’P¿µúÙ©T™6¹ÛC¼m�âž-ešø%äÀìX3*m)ÔB»)Ô?…z.$ý LZˇ&-�Çe�à„â’&÷æ!¤;0"ñKСYcŰôT$§R='øG�ÚR¡ŒŒ|lÐ<�t²’(·H-ìN£…� Èz‘Pm)¥ZúɈ»C«h� $s¶*€’.šü8‚sô à[�ó…«{ï|høªVÓLN_œ­a5´{$¨e^KFmOHû,£�ÂÏ9CN?ø™@½ `LÖU("½Ñäà÷ëù£É®¯JñèµzXz.ĵOaÞ§©[«iðÔhïœ'’ì»�@Á?êÑO¡Ú +T8zª‹žò¯|?�1é¯fLæp�™B¹ö‚Žþ‰Ãß E£½i8Æ”Ix/mrï Æ½odéwS�@´Ȩ¤%ᔳ~`Ò dDÒP¨‡]¨r¯ÿ8êÑE˜€µÕpwú,ä Ó1yÞ:_ºnã×VËä�ÉW¶c– ‹™»åÂ:Ïsh×küμ� [mt(‚ɨ­ d?¢ ¼§T½Q$à=S‡VóÆÝ4g5ŒVŒ×¼„ý>(øŠ6¦½¦ÕÙÀ·ÚIÔ°¾ $T–� ð¤ŒÒV3&;”¨¢wòün¿pB’x¶‘Øï>’ôú©TE =2é L>ë,š] sð¦ÁS£eÚÌh›¼¶¯38— EâíÀ…£-%šø—.»[#ÉÁïÄixUÀ–µÓ§÷¾të2rg´M^›×¤ûF’ƒ� +ÅûªÊ¯ DdwÚün�$í¤È¯]uÂÑ– +EÜ´+<áœmÛä¾5lÍ Ú¬ã¥ëQ©‡>ÃSÙƒÕY¬Uõ{Y)õ–ÐX@(»†VQº‚�Ì®„9¸ÅtÛÊÀ�ÕA…{cX5Äþk‰© !Fe_ÐBѾ%T¦0Äs~Pƒ²-öy'P°�É JBå94ç Aš´köÚj˜²YŒkAxqm¯¸/+mþ,û¦ —±C“¯nv–¦OM>Ê ü>�yôŒÚ¼¶«…ÿüÕl›årØW ÜV®L£aÖf,ÿ BÄœ•Í6yq6�l>n;ÇÀmå˜52¹'±ÎS€ªõÂ2¢†ÀÃr>Ê ü6}nuM^[N7.êô�2P�‹F¯ÀE㌞Y}eûZ´YŽq#£kôÖ²œîÛ­$ÜjX ­¹ŒŒö©ÓÄ´Èו:½}ÊÄ¡GpBñc帤·Ž„Ò<³x\ÖX4.»‡"¤=, ªÍU$Ô[É€üN¢Ý-Q%ßw%¼-áìŽpö#{ïì¡G¿Eªè©F0z¥ÍîÏ”û3sh5 š¿é{û;à6²œ>¸1B=;ˆ1ï®éSóœ‚Ó Fþ¥Ìî-#wFóNkaÆjú:Ök.¢ë‹o¨ðáÊfËpPvZJÈ[¬¤²�É® Ec—2qÈÉõT'?Ôia�âŸ_²$b¼cÖ¶4Ç~…àt¼,LlçpÎ_ý˜¬­vHÖF˜�}¯Lævök £ÖÃøÏŠ¸¦y0îe] &#W6çÂÕ2vS¦‰ÿª†&ý€†¸–REÜÓýœ¯\§rQøÁ´ ú\Lé)ˆI—ƒöeàMäø�8Û ãóÖÒ!jÌ3Zh;‰‚ ÜMÓè¡y"Ƚ1žð\�ß™Rì»�$ýî£HÁí‘øo{d)h3eÞLœ_›h’ïr¼³kòÖºLܶ¦ÑCóC�z[žðÜ-G6Ïäm ½‚[¡F@™÷eòÆd¢LÀùƒ’Q¯! èηÎÓä¡Õ2sgrOb½4Ê…pC\?�†yÂtvÎÆé¶ý,ØT{+‰gÿ1Ìû7~s4У^ŸRqØ3L!•Á Œè’˜ÒM›… N0þ*�?k†ØN0ÂÑF’ìÚK—Ý-Ðbž�ÐB; f@ƒ2‡K×oüæjý¾”鵑*¹5|l}æî¬Ûø©ùš¼´Ó×vß®Ý6~i÷Íß›¿ªy™c¹¾øö LésÐ?ÑZ»g?p…àZ/°ŸD=_¡ˆçl� i6+ˆæ¼!J©ÌÊ(�`Eâ'‚ü“Ü»—2»>…y¿'|'wÖùÇbaÈè,ÍÚ¬ó�û>ˆw)ÐS¡`ìŠLz(à?S‡¦…!›Á`Ìä¯+œ�ÍÏÍ@�y½æÏM{u#£á[Ó6‘z¿R§ ]Ãçö¥¬ølHdl58Á²’˜“Œ~%é,ëZý›"M¼ù|Žw®Fsí4(û’¨ ·g‘îO� ÜF¸!i7…rïpÛß1”ëJ›�7Sg×^{o E=/´ˆ´ hÛüµuœ¯›Ï"�=5‚p{eCò3� +nmÓŒpøâl@¹Î•û5{k5·ÁÂøv¯Ð’J{5I­—(sçì™8¶®Ó}ÛúÝüÅÕGâÀ_£±kùФ«R<ú£L@"ñß„#›m>',GaÒ¢˜fý“LÉ©ý`†¸> ºØ%ì¨ôTª‰6’dàØO8ïö9œŠÜ³…"÷ì!H>¬—I˜]ó×eÜÚäC<¤Ê@ F»;ÇëfËÄmk™¸²z&î¬Ç˜�Ñ1lw}Eë3×rc¦ÅæÂÕ>‰ðŽ*EôJ˜_{ÇK÷‰™8 » Z­§_B�ÍYè‘ïëxã> šÇñ‹ÛùÎÙ4ulhvöªfÓ1oc´�_V, +5±ƒ5½3@¥…(õüum +“—†-Úü«±r\Ò \8MêÍM§á:êÄ!‚Ž5X“S»‹£ÇÙY«‹»ÃÒ¤I9²ÆÅ“ÖÐ*J{�2ÚA@)õ\I>ÿ�Ê®`„£×®O¥*ú*�0huö +Wck×f©ÓC»ƒ”PÏaÉæmÀÔ{צõîZGÒ üM¡„¿ ü‡ÿ<’˜kC�~Â9móÚk\�­T›9´‚zN8홼2zˆrï3‘v™8¿6Nßœßáâ}"È?»Pñuu›Ã˜L½}ƒ#´6Ú­EÒ ü3{h3k®*¢=ëÄt, Ê´o�"zàÄb U¶•4»¶Q&ãÐ3G¦¥¥´èƒ9„�­‘±õ EUž:UüQ£‰_H±ïæáÊ‘ 5ê�E�‚o£É IBkL@·Š|ÎLž]ÛÇp¯ûâ}#JA…š¨ã•³eâÊ:ÍžÙO¢Ý�ãm»yÂs÷õ­ÖÆÀuí ^šVFï,‹f£°ªíª‚ZÏPPxìÕï!‰è—R�:=ô T8ú/ž=swÖoÛ’( ¿SgØþi¬›S£yéȾïØ/‚Ëïâ¤Èç9H­%ᔓ:ÎWŽîi´£—>¿5 +E¯´éížuƒ�4’ó†/%°l«4n=6ÎÔVgÜž˜ÊV,ÖT*ë8驆´Õ�ÉÙ‚ÏYêD¡Oú¼b9g€B*kHZs)!­»’�þ¯#¡c –|ÞX4.{ÀxöL]Y}mó2ŸÅD\ÍêìηÎ3˜¡h{Aéë°ÄÓv2%ü4€j³LÞ˜ ‰ç]LÒU, »ÑdàL^ S6‹Á¤uía�_ðBÑÅsË¥¤Ófýz™<3íU®gqÝj£JnO°2ÊÔð'avÿ‡O$¼ÿiáß Çý˜92íÌÞYVg1nžZ‘HSHâ9K²9G�†oš¼µz†m~Óð¥Ñ1nf2�÷Îfòüú*Žõ âk¨ â +* ¢²ˆ%¦_ÌÈéÝautñÅ»¶@Ì ¹±m;’ã‡19ѨFÖ}7ÐâÞ _œrÄ›J5´¸X¼‘,·<†u^I“kgXÕü]I8Ç:,é´³~PúC¿.]×áÎý(æ}¢I¾{ sp›t9xMòÝLŸƒ·æŸ/Úìó;aº·ÕÊÜÙs  Ú¼úEkÛ‚‚†€Sî:\»Îó½“y3+Š´¯~LÖ’„Ú–xÖGš�ßg‘îÿ0æõ)Ó­�wRfàmóçÖ³B\×j,b]=U"ªD؉ó:Mžš ÃÖÁ¸­‹‰3ËÏÍ:ˆt²�¤mÄH3Ø9�Aaa§q±“2¢o�"JC©ÖH›Ü.•°_˜"*sPJ‡UQõ^WH?‡ßóÏC•w0 {ÕŠÉŽ„²Ö²9s!ùü´Ô±°$¨öÖQÚÊE¤}Ã÷cضòÌÝY/rüÛ^8ÒÙ7´ŠÖªˆÒ œ€ÞZ=i(‡µOcÑå_]õ"²¶À„T‹¡(­”éý6‚lµM ›Gª ¼/á¬5´ŠÖ¦ˆÒ˜xÞZF6ç'ÔºgÑŽ®áªÍ=ˆy4*b= ¨vCÒ¤O@?Té×�RÁ]kÉe½¥Etf@£Ñû(âÕW¶Kó§¦Eý«ŸF„i+’õŽ>‰³ë�JÁ=�‹Gšiôës¸s5¯ö çÝ<`¼º§p¯ÞëÍ +^@ÖaLJtMHé ?4ë.$¤¿&¢J¶aÕó 5òÙ1oÛZ(rχ-Aµe():VÏ,ƒ’5T¨b_â$¬Ñs£gèÎè&Pï]Aˆf§ óK©"úðÜŸ©K›q¸quTiøNpBÑ~* { ƼCÖµ\D/˜±9;ƒg6%îù¥ËîÖé³»U²›‘SëW6Ÿ½áºÕ>‹xý€ +ĺA‘µOcMc¯n,FŽ + Ho@€vÞÒ‚ã’‚©Üqüæ>�7¯/u‚;ç׿ ãõ@·ŽtÙõ~\Ö!Ž�ÚŒ€Òwi3Pc^Ö�IÛé3lÏĥͼƆÁ¤ÕžˆÎ €ÒN¦„'üFìÉ_… +œƒ…-˜²ŒÆ�MÞi¤“�(õæD9-Ó.M¡I§,E±ëxíšD éÂ;Ú“KW` ÕŠØ¢Ú½º Öž|ÎB“{žGQ� ÅúÉÔ�v=ìT'{ÖŽLzê§× $´~àbò#Ivo¦MÂÏ@ä§Àƒ³öJRú±HHÉÀ”ŒÞ]SF=‡*Ÿ>‚Ë:Á‹Å¾D꥟RÁ]Â�LZÃ’ÑùêFeow!Ǿï +þŒ€Ò!š„Þ!XCoSB}†(��A�I¡ÜÉS°VíÖX>.iUNk Q@먈5MŸš|�»³B•{=kuÒWxÂ9WÍpìCb¾>³‡†¥\“q¸o5Ža[E°kÙœ·XI½¶¨Ò][Pk +L>µ +T!¿�NÃ;h±ïËÀ™iyïhWPg¬’T[«Çæ¼`…£_ ‚ñN0¢ñ?�†í¤Iï½€d¯0$t–Ð#“èq°+XÁø1ù¬µ€`ÖF”�ö ž�Ó•ë bDz 9<ï +=8û�ŠþÐÍÏä•É7|t]'pî®Ácë2rgóÕÌg¹-‹Å°måkÙV+3W–ã…ëB�{=†užƒ}øÀµ<Üpå² pTj7D!�“4½�Ïb"xÖËëJwgyéh#ËÁ>a +§ü�A—m±Qû'-ü„"ŸZA;/&û†$¡�ÃÑNU‚±Ur»Óg¡—BM”±#›ùÿ›¡C“ñ¼‘¤  ¤¸÷¯i_Ëmlصm›ýqÔ££L$Ò@“{s \YŒ™Œ‡Øâ⪴8ÖT߀E�w03{hÚC8™¦OM¾Ê}±¯›œSøFó:ì‹wàBIÜ“8¹þIqÖjýÌ‚ø’Jw@ UÖzâ©MÀ‚± Qæ}¤MÁŽʨü%õƒU1Qo­%ìȤ)¬zÎV6&ë*�¾Šd@C\wPú֜ڎŒú/*k'Q0Õ‰C{éÓû…$ù|%Ý“xGû0Úuš>¶,Ðã^m`Ôð#iv{¢�å`WÒw&Pï‡R%´™B¹v�äžO¤­cHGãºÕ1tdXÃ;Ú)4LÓç&Øõ09³,b]}„)è…(õúŒÚ<“‡¦Í1Œ£…(ýè�B;:&nLŽ‘ÛÊ;†r¾iôë%Ùœë&(¾[’Ûÿ$Å·À¤“NÂìþ¿8ßSˆ÷Ä ¤7 ­'ñœŸD ?Q£ßíƒhgëp‘ÄܯÀ„£×ú¡Y7�‚?Í\[mó÷6UöÙU(í.½N—®ÏЙÕ@ŒxjÔðW©€ü\TÖ fDÒI›ÜÞƒhWû„õ¼×Î˼™ÑÜgÁ®ncÚ F¾œ®\—�K›kòÔ<wn’ ¬“4½}'lW_Õ~Ç‚ð@¸†¥ÐÚ)sÈB:÷(âÕb�M6Ò¬�6¥Z ÎÆ)ÄzhÌcRdx/+$æ&ΰíS˜÷°pôt+‰Û31qc ±œ•8»žêc?p‚‘zìó3wfóumÎÎà�ÍB�|¶'á6HqÏŽ‘ÛÎ0eÚ°¶/Æ·b]<ìÃ~ƒ�ˆ¡»³3|hX.—p@‹‡¨�æLÂÆÛ&eÎ<‰xs�£­Ú­ƒ(÷è·1mL-äè×ÐXÿ-3ê¹(@¼Yk K‰úJ‡¦V‰ÓÛ!䨤=°žÖÛ#&ÆújØHËÓQ€™v  qÝ d¯biƒ²g0J`RZs±Šv «¢s”©b/¢ì:Þ¹.3w¦½¾õl àýã˜GÓ¢iaÐl°ë›«ùk›oãæ«ÚÇ^ß¶Ø/}4ÙõD‘‚ž±®ž©3›¹ûⵯ@µyI”ðêF&ÃV‡Å¡eãÆÂzõæ#ÍÁÚè2°×ø©Õ0i4öÊV‹]ã>˜æ^-áH§ö©4ìoüâ<™ÓF¦ÕùÚÍQVt0-'h8*é�Bº¾CXç%ôؤ/8Õ–€¤…õ~õl#JAÛ€éÖ’Pz h} „¢„«{ïzP#ßRüó=„{½hð+mz©H4v­ �ò†-§²NyªD" _Í»ŒkEˆ˜Ù[Óiú}¥ÏA´¸×sãê¹ù†+—õyÌ“…Ä|ôâ�,cg¦•‘3ËþHîi©\(ÖP& ë.œ “f‹IêÕjPÒT)i&So‡RQHOHÀ4,›À +ëE !‡¦ÜÖó5yoµ“ýmH ³­÷’'˜®Ñs›…$ûê¦Ñ¯/ºôûA�z>üÆaÇæX—M4§ÏÂOÓwVó3±/~æ%ƒgv�»Á`Ô´!tÂuR(kN†Á%(¨Àö6غaШµ e4›5¤SkõC¬ePC¬�dSËáˈl­…­•„S¦{‚ã–Ü1¥ ‘È”›ÎI›fmѵV9å2 ;ˆ'¤=mÈŠ2<0ÔÚx°8“™”°=X)µºa)H±¨ E£—"UôSªˆO£àª�µÒ¦÷ËØ•Í8„nõ‹õ(a‡i«EðîåaFO-»sHG×ô±ÑW7›ã•£™<¿¾ Éš©ìgôÎdîÅBp¸øYØ×�ˆ=ÕÓ,ÓˆïlÃ}ÓÒì¹icæÈ´×²Žå7öëfPN†"aØ-´Šj œ*ÖW¸;Ëïlˆk�-fÓm“¡NÖ²˜Êš|ÊKœ„]§k×q¸q½Ç0¯/‘~k +QD³¾Œ�Ax1WÁ œ•8½ê´Ð?È!ž hìN ‡5U Æ¡É>?U"±ˆRZg™˜è·“¶ †AŽF£ï ëÕ7‚p4M›3W†½ª�i… û~V͹��G&PÂÞ@†d�a +©¼Õ…TV㑚쫯rv&Í‹©ý°.ܼSX7ëÊùÉ<(R�þ�Ô›‘:½2‘e -é׉Ä�ô�å_mÄH3¡ÒI ^šç°®¾„£‰(;Õ Æþ@%�Õ$SÖZ²9om9Ívq!1k­rÊ>†|=fÍŒ>ªüÙ%'üZ�[ ­¡tÐ#_ßj‰Ä>�u¾F0m*Õ0Ç çù˜ÆÁ4t€A „©§�r¡¨EõÊW@0eWPk WBiÆ8-Ç�u�ϸŽT³^01ßQTü[JÐWC2µF—ƒ4ªbýŸ¼è}7v”ÉUVÔáL¶ŒB¢l•$ñcTfô¯+(æZRi.$¥´‡"¤=ËDõîRRê)¬zÎxhÖV2.é D@µ Œf!ôØÌ*pñ85Âð7�zmþÖþ�‡öƒ’=�jã¯rÑø'é”'ᜇ&ë¹3¬LÞXÖF.+$ùG Uòu¢KÀº‰Ü•6»ß)b÷YÄëÜ{…à2pqï¡Ë„Ψ“Da\£Šee8„Ã@ÒQ�¥1s @( ãñH½ZÀ�¤&¡˜BÌBŒ!"""ˆ""R’$…Z€€³êBíß'¾s~Ø"q@kýæo+ÎÊ¥³ubû EàÉš©Ãùg˜aªu¨Ù•ï&!ªª¼ño¢S�â[¤RÎCü2ÊY»^íLN(Ȧ‘ÎkÛ-Võˆ/&;_ñsj†áu¿›E¹l6?ÌyT(ÎFT{ëÿ¼ß~`N¸ÙDãa~øË¾'“öÆîe< hIQ´*õUªu…Ëô k7Ã?2w>,NÜw_Øq¾ä»Wõ÷ɱcªtGÇÇÒÑfÜôgU¶“‰QOׯs†CàD˜ß“�eò6ÆuT|@ðH¸ß穟Uœ ”­[Re+ìÆpô›Ãƒû{ÆÕ8\ôû§íôüøcЀùYiø©Cšwóò³Â™†ûØ…·üÏY§?+½l!¿é ã/ƒÈ…]¢Ükô{} +¼ì¦7Ð|zà›sð†¿Õ±ñþY¿ƒÖˆs›ÈÏʬ'ïÿï�ûX{ÛŒz»óâ +ŽêÙ®€2ÿ¬ešmuº]°¯Åº·7 EƒQô#å÷<¢ïô©©eƒøQìáâNÌRDϦ„¥wäGÉþYÉçcð_°øº­Y~USJ �w_ƒ¸Ž¼Æø†/;ÿ¬‰YS~nBz�œÅ ûN·¨ÍâdÃzÒÚó у.•|Óþ¬jàê›�çK +ùÐ 9ÈÏ*ýÄ>KVS{÷¸ùú¯÷7n|•ÅqeÍa1·V}77ðcÐí¬{8Ð’ :o#$?kýá„§è÷éŸ{ÕîHç\îñ_ �ïØŽÂìqÃøÂžÿá…ÀݨògUåªÑ&?«m^ âCvþ<¶œ-I¹žÁ˜6¿Žþ¯ÐÖ:¼ÄÙÇ~ž{Ð>5œ ·ýoÌÔó©Žû4;áå}Þë-SË©GÇáÝþ$ùmÏ7¥`½®g÷y‡ý„núÆáæ0+çÇíÉR î�÷Þѹ6h[(ú‘^þˆ„†Ü"3n”ú=Yœø¸Ù¸–„£³vù?Í·uçû+rꥨŸŽ¶ëøqù#d¯hæ¿>OÅVêyõ“±ñ³#9>mæ…w}¬=sus‡ôIÊAWGw|µ–ªÇ�_Þ¼çÅá]-ò<9Ì-š¿¼¢éÄñr¥ÒžTô{F¢ã»¬ÿ§WÇÜì4æ�c‡æ…f[n¥ æûrõ¢�MtÜÀhþÝM�d„OÿϬ$‡jî3]»;i9sÔ™6ý¥ãƒ �Þ‚­ÙÔùœ|ÝÕnkò¬Ü¿Ñ·¾[Oîqu¨+ø ;¯QýŒ§e¦/Î?¿C?ï?%ŽìÙ’6¹ô“s»Ùoh©× +|ä’Ìlûëò HKµÅg Bî�…T,údµ5¨µ9ó¶qˆo±ÚVÛ„ø:ß"•íÊ®WÛ9ß�Œ3(©žªÙÙËK^ yÝýqö…-äp ·r˜Çq'ÐPó¼cþ£æ¶Ï¡áõßÖ“êîûÜvϯd¼QÄú¢|0ž¢Í·Žéh÷¬²ºÄñOƒxã~i ûÃòIN>€ßÚ5ëY$7öþC¸ŒeÌÕÜêSý…W ßKâ?꾯«.>ÓG.‹ ¶ƒ‹ZÜ9¸vÃÊ‹~ðÏDâE#>rÈNÚ/L½zXJŠôÒñ7@¨5<ûw hjß¡aARÛ;¢ÝazçÊâún>Áp=T +u¬nŽ?Ñ_L?ƒ×ýáúW@7­ß·¸¤ýtÐ$E~à^?¶H®£KWðŠºK0Wý80W‡ 7_<„ó±n/XéØê7o2�ŠÀi¨¦éBqÍM/(„Ù¤À1ŒP!»±»›DÝBH8)ˆÌxVTϽÿæ\œbUWt²ñÄ"ó¾« r›™G�Pω×Áè’oŽi, ‡{jFzÎ*Ó�ó»gf?ìôÜvë´îÊšÌ~˜½$=÷ ‹ÎÒ™ð^茘n­*f6e-‘¤î½ôäžWÄ'æ†C|I€“‚Rˆ[Òe×+©ÐæÇº°ÏÀßž¼—+îE Á¡ÀЗ{^‚ô22¥À¸v +µkC {Öâõò|­ÜDž{Ã’_ï!Šs{CÄËÂ@¤Ö(ï÷§þ€…Ey%��7äôÄ~ fL‘Fí \kÔkÿÉ­ÔŠ®‡™µiÎãXqv¥N/Éøùþÿ®g�âÉê£Hst›s¢*ÄFÁð;ßK§%ðî~ê¹oìÁ Ég¸ôÞÐ_sÔñ‰*—GûòµÎ îœôï”Vé¾Öœk­¨ðí½®î3%Î�Wbê_Gè<H›¦¡hMXK~¸ÿqö{_.ñ| VµjrwÐG�nŠtŠu à;W³:~Ú,¸üX‚¶oÙ'ö.�/¡4C@SÎó0w«_ƒ[§ò^u¾ñ¨!bŠí •VPØ­8)åÃ%Ø{Œœä\" +å«BFÄákóƒTê¥=îNJ>àQ­~ì+&w3äøƒ˜Ðõnu㔕¿aÕFäúglw‚ÞZ-¯å1†¸PŽàa—¼Nˆñ0Þx>VZ°µwk(!�=µZ„„iprNÌ4yI‡Ñ£uD5Ò³^­ð¬®èŠEnA‡FóuÅâÊ­Vl`Šòá+àòþ„½˜cD 3ñKþXä^Ëv@ò†0;çüNÉÁQ?tÚi î}5ç¹°ú®�¨àTpsùÁ>¤‚� ø�¡*ôäø8äÑùƵÑÑ�CUÌ9ŸÙꀢ` |ˆ± +D–¦@¯H—ˆÔ t +ÿ980c216f8-bab5-476a-b597-a090559926c34758732e-4b7b-4921-8105-969a75fad11e90 678.2521838510428-f987-41db-9860-e176ff1181452c441dc-11b6-4873-b078-39554d623fa425.4612513- !Ë!#<°z¬»ýæt�âÀßþ<-ì‘“m§jžmsN‚oçnxA ô‚Æц±Î5?5i˜r‡[5ÑHÇé� +± ;¥�=àÁ/¿�ÔcºÞœ�×w�¢Æ�ØÐ±F +ðç,…³F4þ›€@Ùà5@~`áü7y¼$1¢7ÙÏéã˜ÿß <¶yØŒÅ:€¨8�%IÿÿÿÿÿÿÀoö[BÁ–’|H¬µMHB¬�úÐøÿ°öÛÆ£ý²»»wJù22¨BÏñL†jF”¡5$‚€¦>µá©ÖÒFäA$[¡ÊÐçqÞ6þ­FÃ6˜ONC#J§¡‡û܇Gt"¿œspúÐðTˆºh.‡¨2¼¿»kà´­�T¡ɉ¨CHÎóàÀ@tŸË¬ç‰H�ÊPG4A¦L}@¨±—á ÉV{ �D¼õ »%(’u®éÁÁQ"úLL}44‘&ÒÜ +q8T‡Q ÒðéYXê@ ]pç"x¨ÄÐÈáì¨ "‘ˆˆI·;hœe€æFW¢Q}\ë0ÎÃF •‰¦Û`ëTÉ�ÜtÕ!@õ�³à�‘ "=¤FÍ:ÂØ:!P#… +¡ )!+ª45œH’èR!¨Ä$€&[ÀÖ¨yœFÁØúL�hZP#4Š +<"’O…€¨­Íµ«6×>P„#¡ pm.…�Ae€ ¨¨J�£°`@CûÕÆŸ·Õ\Îå¨ïVÓpÔÕ4dÿ¤³á§[ ��å&t«áûŠN�7ú/�¿þ]:ds±÷þŽõbÙ;ÎÚÙùR?÷¦|Eð»Cgm¶”rÆèäsÝ>ª©JNt!¨7 BB=·Eœ€�4ö@YïÑÈ¡¹÷„9 +Qu0ðEsd Œ�Þ€•;)8 –F $[­'DÓ³x@—±Dh´Ðn»±¯5 ˆµ"’ÃÐÇeE†>�æÞÇÑÜû(Üæ¹ˆn‰JÏšµ7÷R¦FÿÞÞÞ5z�m\N�ó€BˆúT'ÁÒè*š)¤ú\BqœÆ:Š:= …­5rP8¸ÏS#¯B&‡ÃIPôs¿âq¿}<5ÂQÀ4ÖqÔÆ: ­�Àήèçç¬è~î~ÅsîW8{Ây‡¸P�bL,ÂæF¢ +á’ð–óÅs/£a†aƆ‘ c-ÃHæ¹W#Éiz¥+AÚ¡6Øk'hbJ«užóPæ5Ð�êࡉˆJ�ÕµFŽçq�c©kÎ!'’®¦¢ +q{%iZ,‰R¼Æ‰¬ã< sIÔ»gOBøÿ�3-Ô§Am/É)º�ˆÍI–D>…al>!k¥Hæ®”ÉÜ‚øM �A~ßóW”�Gé:ºÆð'ÛkìÊ.É’,É’,É’,É’,É’,É’,É’,É’,É’,É’,É’(hI–ª†7·*@9£±î÷Éú1W +ÇÖ�µbð?¿ç|2Èp6s ?¾×Ï^1œ³|z[JQŒoËÛz¿šk&}E÷fÑ—œ,.vK1~=÷‹¿k°›EÅ!OrF}Úé!,4HÆ^T;=” ½ÄÔé×ùðYØ"…ø!¶GÛ¿Ú+_”­>ÚøÉû¶=[YKBHozÎ߯ú4Öƒiq#ï¶jbreÌ�¶J󦌠 Äfâ·¸‘î…”ËST¾"ÁºtÓÐ7M”¾»!@ú¨lÒ‡+/âþÖ‹%އ¥¡Òþ}ÔXgb4ó| G€¥Gá@Ð9d6Oö±Õþ={ÀLFtÆ+¼›iáS¬]ä0õÔ÷rk¿Gah +¶xâ‚7%Õ1vF:]q „ÓÓ{Ü pç}|8¥uÖhx!„öhÉÛ& ›Hd±ËnkåøzøÃ¿¶Ø±µ›Ðµn2ûñßf+d8#áÖ*…ò7´7úá0Òhêþ¥$6ïOÒ€ˆòù”Gþ*µ¦æ§ÙHJpcS»Ñü©®�†ñØEPäÉXP`èqJ6³š i’óÀôuîÔ sÉLÌRH�Ì7bh„G Gœ=N8ı‹ZjUnjÔ²izJµù²;°ÏoñŒ£þÎâ”Æ{ÿ66[Ì!ËÆ•H)ákói�Ä�‰îâ?Åv'ézn{©žˆÚ'îHlf†®dU=f3¸‚�qU ¤ÌÊà0ÔyÖÃä½¼¯(ù2ÄT“=çÁÝåõ%Ⴑp)H +H�ʲ¸c˺¦Å€°W‰Ý™æšTW.qÚBßý‡Ïš‘ýð�@Ì81Çoììj�­TfÒ*2è-мõÕ3Ç2V½&–4øýRb¶«§-¢Ý¢‡íÛ·›ŽÞ£’s:;\?Cgœ>ý5#qëäŽQ‹aÌ:gÍÓ¡ƒóÑõòû2x�½Ó¤Ÿÿlw·„äYž°—$a4½¬ŒÒ2¿7À4ª„ÌI+‚»O@Nl‚Y!©œL�Ÿµ0?`áF8~V$È„¨âÙ26@Kü-‚¦ˆã©4KPA›xÁDë$ãL=ʲ?«ü(Ðé€xiÑ%0›­b@ öä�ö¨ªä×SgHÙTŸ&¯çZh©9ªTMö0�QÜþªw(vE�ë¾è”ã2‡K!éˆsU•ª§Eq’oÞMrÔJ›C�M»gu²F#Šš£Š46 Ñ\SgöcðÃÌG.e!3ÔkÌ>'Wâ+„Ú£e|�ؘåŨÔÅ»¸hd(O‚Zö“C’BÂǘûçŸ_ÈW¡�ö|JÙ1Ú)¨eÅwªX{óFœ=¯|âYE‚ÏÏÒÈ_OûrÞ§[ysšÄé‹Ëoi<»îe?(»êìµ$ÆUcÜ€íÓ}ââæü”ÜT÷C_sZR‰¼ˆRc*ù4-�çôÙ4Þhˆ©û²í¤�‡¸Ï³xˆí³Câ6b€¬•Ô@é^y ˜›C +ü?XÝŠðTÜRÐð4©Êã‰.y·<ãÀ)Ö Óþ߬ +�rÒÖv<–&¶Ã’£€`è k/“ Ï)(ÏÙmÁw1v¹­·Ì·ÑDçŒ69I,¼e�Öü#Ï:âTÞZã—`QŒ> vúþX«ç†�›@T—¬©TSÌIÐ+a*¼!Ý“u&öG¡ãWõ!ÄÛrÍS¾T¿žõŽmiä?+Ë·žÆΨ]þ=˶ˆ²€yç0¤ÓúÏ +vŒsóçB>?F§GìKɹªuÁGÜsaÙ7º·–Á6Yæ™r#Vo%˸ð12 'ÃqÖ~éKà„~¯ÃGgî'ä‡0{†ÂfùÖaPæ%2š–{ÉÝ0¡q:q}sÖ!PŽ8æf™ò<ÎTp£jÚ¨7hZ“’H1z± l |P·2æcaьˑž²‚Def޹9ãŸkÏO¢|�Ùq“˜ñ†K QP ÀsÅ”ˆi,:¨„�n!dÌp0 âYX;)-púŠsBÜ“ÖÜSKáü‘:B\:š‚3T¿°­3ˆ)gz¯ëÁß,Å”»jf_ÉÖ³Á‹Ü°ÂYÖÓt\‚]Øe³¹ß'nâ6ÆòÊFpØâd ’�N,] óŸ‡æ®áa¥ÕJL¾`þ›b(cû^ã ÅÎ¥D€}†ŸÈL>�¢V >ôWMOI-½–Dg ø/Te7:]¹öAÍó;ötÂ4Pe±0Цþ/:èÄ™Ô)g|\+ê"÷je&ÎÐp7†g£¡Á\k�È0äBÞ˜2< 9 7v‰�Ÿìe't×"O;w$å£×-hpÞ-´”a/ƒ<²5컃öˆ:d¹âߥ*Ý—œ;²ò‘"×X ¿!×aU{Â#a‘¨;ˆ¶<¶ð¹ã±]€–y¶�á TÊë.ä{ê®m…i¬*cN¦5»Ëe)�ø AzPLÀé&ñ¢·0òì§p¯iDDî|¥+eôY0«äƒ( + g]¶o*0wæ~gßµ–7´ŒÍbH1h@CÌN#sžvÃOK““fæaåò±¡ôÎÛKûǼ‡UÅ΂ª{KE9íÕè b7³¨#×0/aØÛuö0ÊY‹ M^.ÍbÃöÑ£ÝbH½uüjµl¼ˆ“>iÞ(>á}3æ×v, µ¤¬VÔîLþ,FiÆÑÄ1Yj‚õ(Â)íQˆW�ºl>­¦$Îk£ 3 ™§aÆJm§ +¦èO·‚c7€Fón5„IÆ6-_,¼°$WÞpdµ_CQ-‹4$i4œyç[jÀžÓI\Ž`À–?é;EÉåx?Í쪢dl]SRýi¾º#‡XÌ�Åòhp³s_ÀàneP™�%*G“?E?Y‰âùH-ù¤ØIé’—Y17 ;*>UµÏê‡åB2²ó‡l}¡×w‘…CiÊãøÄ B;@YÁë“Ç�Æ„øÁè¶‚^ü<ã!væP3ïE‡©$-ËÇÅ]¨lÑE”1LšëÄîŠý‹®fzW3‹CÓ¯•njÂf�B°6£@Ò~XñCÙ¼ó†R¨tD¿Ÿ±0;¼Kã]ͯӌ@�\N«j2¨{¤ÌÿJ'bnh¼í¾0HA´ZÐ °>u©,š\AW@<° âyÕf`Š–@b¬G]ç‚íJ†aõIf[ wN.kõ>QY-Ö0 Y„mši•Þb"½ ù”kÁÌ&v z¸¢ª{Õ'»ÃÀÕ:èË3 åŸùÁªlZYV3 ªL«‚ɱRðÍT ¶ß!¾æ%Ïöá ù Á í�ùn¢7�¤L2ðdÈ`઎Ku- 6˜Üe{É"3†»ÅA6Cî ÛÁÒ�ÎÄ®ÙrÄèÙ7ÇĺØÞ +—*Pî5Hö„̃{¦sEŠdÿÝ4.�5xUºI†Õôü²/§z fÑÊÔÎ${>Fþóã/7 6wE< ៀÆÎ‘seèÒ‰÷Ü ãT—ûq""#"áï5'S÷›QDà©ÉJ8©D&Ø~5¥¤Sl›Ën‰¼YA¯ÈsqZ .bDr⫨²šK‰ÀG�à»â‚Ð1 ]^„Œu +�ã¯A E„lÀ"€ € € € € € «zo�Ý�ßxŽ�il¤ê¦QÑ®Ž[€XMDDDDÒ¢GÐ@}¨+.NÏ 8 +Þ ùû»¯õøânó÷÷Íõï›{ž¹®yó�½ýºÛlïÎ~{ž»Ç5ãŸûÍ÷gì5ïc¬«¥Ý÷�w××o½}¯øëÝ3Îü^‹õµïÌ;ç»s~·¶ï߯wãëóõ_ëËñÆÙòœo·ûn~©½xwß¹ï»ç¿oî·ZÚ5¶ÿbž¯¾Z D àLÔ °@-Œ3Šo6[•æÊ3‘@s¶úÈqW +À’‰*Xù±¬½Êñås¾u‹+óŽÂ�Ô&f *P°[ †²dI@‡òKɱälÿmµßïûçÞ^Œ¹ïœû~¯ßVknqæØÛ�µçÕæí/ÿÿëžÀZà|þ%f.«¥yk«µ½ÿž÷ï_q·øój±›’ ”Q`eŽý/y�·;ßzÍ”•ã†öÎÙèÁ +MYè O +9W`«Õ¡ ¡G'T = +!ɯ^*e²1ÒïµëÍsíÿ^mqÕ]ö¶]÷<ÖZšgý×<ªm½ÍØ×û?¾XçÜ?·¾^ì³§oGsηb¬Å¨Îÿæº;�mŽ� ïm¼Ífãm`�æãÛ¶%pÛ¶‰®ˆž9mÛ¶•Û¶ÝPBY€·mÛŒ:Þöœ¶0xlÛÂÙ6ÎdÛ @zŸ†ç5kù"OøÏ‚Q¥ Ò�Í.”Û†0�=†¨eÒXJîó |ЈÂÉ—KÖÒ�þ¬³m§M(ÈW gûPhcÊPh¨¡¤X¡ø)¤ÂVX‚ +éAñ eôͧùy¡ Å—%û@YèQ©Cï¥ÐqF‚%ñS�âg“㉂¢æ;CV‡ž€' + +PÞÊø<¢”œ™h¿¡ÌÙ=ÿý–�Ârm<7¢nDPУœ¡øÍ¨KþPÆ,O“(Î<¡ ¬Úªïã Å�†§ìã&Q7'àIAY(ž³qr@Qõ�À؇ ~«Ñ39¡2ÇFŠßHš5$Y½¤˜~ô{¬ñþÀ2CŽåfŠ É •2$l}÷Hq"Vù�ª³Ì<®l ÏÐKãIK +g ôX (jøJs�f9¾V²ïu~dÊ% E ¾ÈOf¢'h‚%É›…,Pôðx™ ˆþPæÒsFž³ý¡LNq3r$QÐõÍ\²Ï£äìM”ÞÎ}Š+C�FûqšY²P Š3zoïäxj�ÞÕ×�áù•ÌS6zNÐTÍLfù‘B؃ž²°$KP€‘‚% žtDÜð›ýJö‰ŸŠ +Е} ]`I E26®(Š+Z‚2ð…rEÏîNSg(† ìIçË–R¬°üXóM3Šª�r®BÎ-³€«» àþ®¯µÖçË½Õøl�^l<ÏQÅ’ÍF ¸ +Å;@Ë\�âuÉB–,T� ©ü b–ŸTð@l<ÍÙ*eÊ™#à;?(’±Ï¬0�âÌ4�¢ê ËO€û�ë;ÁØOq)ŽÅx¤¸§U(%Å}ˆé“:ÍÐÓ�ðýþvŒ=þßÚÞý¾Wg®qÇ·Zë¯ÞwLi¶hèÇ×j{1þßÿ»?Öüïn1¾·ëž¿Ï^ß�3æ·oë¯æž_{5ΜªÀ…½[4k�-¥¶h¨µÕRÎ?þw{Ì··<ÛËíý]ßÝñÿÚ[͇j‹¿Ö[ëžù¾ÿ~í¾ÚþËÿÖ�ëÿýöÞïç×ZÞ{ט[ï¯Æ^Ûý¹ÍÛoœ·¿ygﯾº_ÝußX{ìñµ”Û«ïþøZ\­·=ë|{·ÛcëïÝÙ÷î·¾÷öþwï íÝò¡½sª3Æ{sž«ÝÞs›±çýúü¯õ»cÏûæÛ¢¡w[J‹†rŒ·ÎØw‹±Æûgœ7çÜk¬¹¶¶[Ž-j]$z)„¤+’‹ÍLе—Æf[íÆ÷¬¯çÕÛÜïÞübß÷í¹ëÜ9¿6wmùPþóö½oë·í?w«ó½ûêz/®vëü-×^ßü¹ßÛjÎ;Þ;Û›}¾üûíqþ?{nuÆYç¬{î×jÌ3ö×ò¡œ_�³¿Û¾¯î>}¿î;[½oþ|ßß·ÖûÛ«³×öú{­Íúrn¹íýrŸ5ïÙçjõßcnÑÐÛ-š=ÎYcn¹ßÿþ«ñ×ûì»¶ûjËóßycŸ»åÝ[4ôˇíÿã½7Ç–{œ»¶ýr¯­ÆÝæ]-ý]÷{-ªóµ|h¾Yg¼·õÜk»oÞ¸ßü=ÖÕòÝýÏÙÿwÇÜóŽõϹ{ÿíÿ™w�5öã‹s¶^gÿ=ïÙbÌ3ö¶ÿ�¯·—ó·×–wŽÿ½ß¢¡Öò¡~ß¼1÷VßÜ}ÎÖÛž?Ç÷bùÕzk¯³¾{ß|=·Wã»±Î7ë‹óµÚ{޹¾ÿï=ïVç¼µþúZ4tkˇb{«íß{�±µÜ[îqîÛkë¶[û?þ{[½·îÖ^‹†Zü-Öùkoí¿Zoœ¿·—ã\¹Ö–åºßjµÝVçûµå¸Û‹{ïÙú¼5ÿÕêÞwÏýßÿ½¿ Í—clÑÐÛ¯¥ôèûZ4ôsž1çºc{³ý�k7î[WÛ÷Ö׿n¿Ç÷êìqÇÝëÆó¾·ECµµþ[]-íXoËqîüs�¹ßùgl¯·:ï¾­×6{�³ýŸë{qµ_ŽíÍwgÞ-æ¸[Íu·hèõ×ò¡}glqýÝsoíæýÿšµ½øßŸ9×�ÿkùP«oÏÞZ«÷Î÷Úü¹í—ß}ýö;[»5î7û{ùæ÷_mõîÞßš3¶|(ÆùÿêqÇþæ«ÿ¶h(ïw{‹Å�ÿÎ1ç{oÍ·Í íúê�í×ZooÇØrÿ«¥ÿbß­¥™cž/¶ÖVû-z5÷[ßÝ/îãËuÞ–ûïõçØ÷nùý¿ólÑP�-Ú3¶”ßûýç8c»½·Öjü½½:ãoçÝW‹íÆ–l·¶hèÏ–ÍÿZJ‹?îÜV»½ÞøëÎsïýwŒ=î¹ßïùýNèúDûúj)æö_noÇ3QÓ5Λ[¼=Ïvûî³÷_ÎõæØgÛ7¾Õóí­¿[‚åã¯ßóÜ7Ö»k›ûÞÜVX¢šOé[}¢æ¡} �IÓ0¨Hày‚âGbÉ:©ÊpW݈Sœ}-�ó@±'I7`?´ÏÙèöŒ;ßüZ�wךoî1þ׿Œÿ×ÛÿϯýßþK¯Þ¹ÖK­(@hpûÆX£¡_WK1÷˜g|š­±ã�«í´ …ÄB1¦M(„¡C ~$… 뎌%6>Ìr‘1 „‰"´"q +Nsx²ð¡‚J :,K˜øRˆQH¯YB~m£ s¥¦‘+”qv催5cXµV Ü* lDPã`!�Ûhò c•v•À¢pM8ë Œ«‡kšVœ¦p"øUI)U$–‚ŠD* ¨H¡Ùg"8| +˜BøVçƒÄìÊ6³�†LH^ «T¿�PªƒBÕ*ÒC‰–Ã6’`ðOKtñ4Fx¦T„ª‚0Ái�±E\H„CÈm ¶•qQI°$\ùà!b¶îƒéÄÆÊää€ñ^‡Vøm?D4¨Pœ†.0!iX‰`.†�‡dÄ@â �K«\XpÞaÕre8M›4�ŠN£¥ º¼D +×"±`§•P`r@U4(†Â*‚RµN×iô¨�N˜“?I Û‰„Œ$LªåcB5@ŠÉ…+a(^¡Ô)2¦dI”G Â%­Nã”°=>aÖŠØN‰3EšA`B$Æ÷Â$¬S1šÌ#l%8£�¨Ž81Æ^@xèð ÂËÕ%Û€†B„CÔI´Ñ„‘Âv!"Š…—É8L§ipÊâ5”þá�¡Àëà`é@AÂÁr`>ŒPáeñ:™ $ ðb€€gƒòó)B›Õ*D�dB—ƒÓ$ä#1Ð¥óbÁJ´9øTB$ÑŠ‹øpšúHøn,�Êö1ϑʃ‚�žÿ¢ xLЇ§! ;™ Õ�D¼¦^”ŽI4Ar2¯…N­#މ0êÖŒA€£ðQµ6çiÚ\<œÙäBÝpšdU’ÆG#¡)-y ‰Í¾†Fàм>E¦µàZȸX�Løðå ,BbË�°«`ã¦Gî™ÊgD)øYb8χ!yäQ"\0°M×adH^8­‹R—Päá¡âX.åÁgrÉÛ€´(¤,«×‡`�°"˦ÓY&Zÿ„V/AH±) ØŒ‡%X°ß9à0X` xœÓ€éàp<Ÿ�Å�NãXNa…|� •faPÙžJ%¡!ŒT&žüàÄ'xu>©ÐÐ|Òˆ?.1>EÁAè.^k6ž�üÂHÔùŒŠeöÈX²: _:Ã�ħsš‡ù�kˆHo4ü +.>DO™J'n¢h<4q=Çh"Þ#“Šm]ÝjCFÔæ6›Ï^ô…¿ÏL²M�ljS Ô§@„A/$ ºÑ ,Z²9)šÓìha¡½Ë£È?"h:)£&ö&O@4Ï2’ ¯wÈŸaÀ ›,vÆ –8,g ++�@²;n®êâ>¢®È~¡û‚˜,—A¸—Ó¼Gˆ»°N$³;'¨ìÇ¥`¤ÓÀz¾�±0*[‚ÌãaU¤ +Êv´((J>+#Šh¶¡lËST¥RG!È Š(3+uðUO¡.<*§uòUPEUƒWуFR­ƒkÖ½JÖ‰ &º ±º±%t ™.ÓUz'¹p];ÉÝL›tòÄj’I †¹MB�Ù™<ŒÁ!äÁ #õ˜pZ/-NIõ" + g.>IÉ Z�ˆœ ‚¤e'8Õ4 I�K"\ˆä!5ž‘‡ˆ�øDUD"ߨHˆ€�i&RÁ‰àÆC£F$.²½Xá4ÌéB¶q²°1`€°`•19H5%0�‹çuI²¡@V ÆYhηñᑬÇꃀx4L²Ó㑈 žÎãô–G…þ`ø­úØ,ǃÓ0°Ó‘ +y1‡¤�·¢×LÂA>ÂæAr°L£�C�Ä@€£F(hìÝ‚Ùp,@ºY£.pd�‡ º:´_CõIphX&�SCc5ø§Ái�LXÐx¸¤Jc`ÑuƒŒ5j#�s4ôÇÚ±U‹äH) +އ,®&Jp ç¢�+¨ÝÄA,"î•ðúp¦–Õp—'Éœœ“}—ƒpÌ$œ‡ÀÐà8Í2ظú9I�™9xˆZŒÊ'@R @|*uAÀbNJ{A"è2$ผ�ÀF\*R_ †Ú¶ÅÁ€x}$$®ÍÄ!ÐÂŒ®LÃd¼6%ƒÓ(0#fr�Œò#}Œù#£�ÑY(N �AbX` ÃcM ÆÈ�Ãp (0Z ó‹y†$76Ã7äËqSÇXP…Æ £ �Ò´`p”ã\pZÈ“ÈEɈ-*Pá‡Z Ž©©Í”Z,Ä Äbà³ ‹“‰ZÈÄÒB‹X£Åá-ÄPDh¡$< SéµYT4” ‚ÏqY@È*‹‡Á/ *{Ái1ÑÍ‹�OdœÙ-,f#Y ^�Eƒ¡i,D’±˜}¡m“s«XXUlŸ:·Š†JlÙl;¿ñµyVk X›©¤ Ú&û4±Aˆ [G1@lœö²¤¶ÎddØ3… Å`Q›…L[˜Q%l!Þ m aKqŸ·efÝÁÆ G¡ ‚ä@[Aɳ ”�Ζb¶âØ8m�,�m{unSI°À†À™0¶JDc±5¶mÛ¸nÛ¶Þ1 $b·ÀX?><ŒmÛ¶ˆÇ6`±m‘_‰l �m�,¶mÛN̶mÊζéζQ€X‹-¶¢0¶îBÛ€‘HÃÉ]‹³¨�Ϩ›IWÞ̧…;Ék›™2£71e Û6`@ćInhUfrˤô®â¶¨Éb�¨á4Gˆâ<$üN#¡¨8eZŒ†ƒÌlbU�È ˆP÷!Öµ¤u@�Q T +4ž–C§cL�S/±Îi'Ëœ±AºÈ$–ËŠ3 ¢==P¨04È3$ x°�õ½ƒçÓiôà˜gñР¼Þ‰YÉi�Å€÷bÐùwŸ ç4 +˳`hÐãFÀE^›ÓH•ÿ°<ˆ$ŠÁi /r’Šf³YUÍÆàÄA™‚²ãÀ95x8 sê�.'�D�À÷pZêS?¯Ñ¥,7`j[„8˜à ®‰¥\42Ž�SºVSQI.(¬î�2N1hð¦nLÕçbªê¦e9mÆbÐ`Õ§LÕG¥L10HÊÔ‚ä³ø®ƒÓ&ŽÖ¤ÂѲdƒÃC�løŒ +Ÿ‹f‚vTø\P Š¡ ¹›QaTˆ€ µ ø)@#i ŽVŒô¹˜NËÈn6zd7’ÔÚƒ¼q(L>I Ã`W|�œgckXƒ˜ãVòÁÅÄ‹Š@6 À¾@6U¡“rHÎâÎÌè<*ÌÂ!Š䪀ø\F6/”ƒG@樑\RH¹ $ÌùØ0¦ƒW\ÎK¤ø°>0ƇõPY¶�?,‹—V¡=ßç_šIV]<Ÿ'{>N#' ‰NÖ :wërG¢‚ètðØ a ¢3Š&x,7Ι¥8��‰Ü�C7X(¶sŽ•L%2aí&S,‘YÙ `ªÓQ8@ð¥ý‰ÂòŒ„�åŸDe )© ‚&Ô/">`�Fw˜x“ ®ª +9åÀødÒ³0!" ¥. ŠØ[™˜• ›ÊäI +ŒÁÁà,.Ìò@0x6Ž“R@úH0œYcëüÉ$ÁpL ƒ³`@Ñl.Œs²¤,eÇÓœ”“‚Ç�Ó[­e B�S +ÈL¤e9M4ûˆœ‚h-}Q2wr+*˜#PÁšL©›–©:4xà TÀ4xÓÐPË'Û�JK?*-‹•–Õ$,ÌÀ€0!Y‹ß‚¸ø·eóâ¶´ÅmÙ +ˆ… dâr :–R;DGÂ�èÜ�£E6|.dÙð¹(D6‘ Dç: Y5�‰Ü u‚–Ó +P( +µ0e"wƒa&h/Ì„™ å´QásAE4îÄ ‘™>YfúÈLŸ‹Ìô¹Hpi¢9-›ô¬`d76õ�6õ�¶K} Í1ÒÇÄðù—„Ó:‡Âä²á“9&o Œ„Ó*ä#¡‚‘Øó„É1Iês‘èŠ/�óÌ`f‚Ö Ö0Мf endstream endobj 20 0 obj <>stream +Ш�,pp1sZöËŒÀšÒ:9LÃâ¶lˆ‚løÜ—qr8M”PÁ4:�E¨óÀ|º†‹$tr˜ReDêƒFã4ó#}4s^$ ú@3‹À äúüËå¼H:Ûç"u ÌieéaI‚†;ŸƒeµÒÃ>,Ç,²$Ô§€ñú°‹„ÓDfl*‹Ï< Xé"ù”(‹“¦=4ƒï Á¸¢ÂiÉø¢\Ñâã¶Á"«&�Iö|Þâ±ê¡nZ’ §%Œ•VDgÔ¨$ÐVŽ–ÉIÃE’Ѐ Rh;¥‚ÓŸì äŽä óÀH:5¹“sÑi|òÇŒèÜŽ§‘ˆŽlÒ`ª(£hr|wd¨p´ì¨ð¹ÈLNà´Q4�0™Ãð�,§ySšy™ÈÕ”¾I…RÌÈŒkL€, õeÕEÂÉçkAe )· lEƒt‘$l"݆ë\.’Q¦ÐD.çáó/0Nƒ¾(|Q4樑à̓ƒec Ò%d1‘Å�K£OèÃ.’�9j“Ë’òÂÁR³r³Œ cÄi¬BwQ“Ûy“�ÅÃÀe–ûYpÚ§R À8/�"<–Ñh°¬Ë³hhÐdd¡ òÚ(q@ÂiŒFƒU*Hð&±ˆˆ¯`€|n(?Ÿ½}$RY&3q�ÇvžDÃJªÇk›”êÈŒË(à0;’Å�¥¥�¼ÙYd"¢²„†ˆ ååúØÊrÆ`¡XNsȼˆR`j°,l´\:Œ�bwê Û6°‹d#±R“myxl'Vj²™$&ÛB‰3ÙîÀAd;½—+V dH-ϽœqO¥ Ä̆ä0²¡ †(Sú�"¹4²c742ÅÑÐd +пh@ˆÎÕ@6Û.M´©9ÒBa  6ñÄ—PÝ2&=.Œ`ql$;œ'™ÄnP4\+Ä0„;®  פÒeé‘hh.C%Âÿ>¾}©·LéŸâ)[‘PöCLZ¶CD",EDg8XÒ¦Ã,Bæ ,XÓ¹¬Áƒ~X6”‚=Ô¾ÍJ»ÔŠ e÷ÃCTp²õac(˜ìäAŸ°�ɦJ¡ÕÈvüÂ&²~ÀòlFcJžÅ8hœ lÒ0V$¥¥Á² ‰Š‡e´˜ØMž••�€Ó>çâË�È—€<$«.F‡P–¡„“aqQNãx� +r=0à˜b��˜ pXˆBXpšdâ‹°Bã�§‰§mJ_° éh0Ý‚‘)ð¡`Z$,§ DR¬£ó¾„U°œ‰™8-†NÆãñ$òÁ¬Â3YɃ.Ë YQܤTN�âȯ N;�F�M5`¶ßƒ'x¬hÆ+ûó,LN+Å$ý5Èk߆‹Ãä´QKt’)©˜%d#p˜Z”Žpê$JN£¸X¨�ª@J*…ˆ2¢£ÊD®øé'Íié"PÑ –uœ›Ë ˆ^A”(‘ö œæ�ŒOIޏ +éY$hN Ñ 9í·¼ƒ`¬ÇNl\äQ™˜•¢Ñj@Âi ­ ë �†K0LO$Q ˆ�Ó$‰RµQ(0i\ïÅ 9 â~&M±#Ò@Dé`”¥éq,+~öEÒb ,ä�7)uæ½\½Ë„(_¼dá´Ñm°¬@Ãà“ÌãÍ ˜Ò”>�½LŒ0š4틤Bã]`ûD–98è4òfK¥Œ(ÁA*ˆéQDI8M|®©1bA‰SêN›ˆÌÌ=¼!M€¬ÈĦnlŸ‹W4‚9j$'Öƒ¼äóUŠtÉ'!Ìä�-€`NÃ!“ ¾Ê�혣FaL€lÌ`_$ÝJ‚áL0Ý„&4/ †ÃU6(ÚNEG%îl”À'‘áÞ}PQàA](%×çÉœ6¾d)|&X@\¦.¯ +w Ü“qÚ)�ÙÛÁ<™Òé@LÁ�D“'Ú²¼poy0òdNÌ�ËXì•!uÃÉic%¹› + +G ŠöAÃéÌX ŽW¸˜ÓÈA_B”�Ðdp´‚k6Ài§ “—adf8C*šÌP](¤‚cp¦«É^Ëš™‰ŽdV¢ †£Ȧæ´ÈfÛ²ž‰ÜO2ñÐሡˆ�©ƒhª¿˜�†ãÀù"RD…ÀeR +J f¡cùœ&>h›” +ãì‹c0²¨PæÊ(djEA‚ÃBË::! +¨""�T›,ÃiwrGC”Y4.� KEÆŽ›k/ ¶Åù,%öù-Žæ_ E$¡XŠJ#éû"ÑNÀÓýÎ�3p®BiÂZŠ+«)Tx$MV-Å—YK’,IÒ÷É„%‡ ¢,P¶@Îã¾uõ ë‹…Ù– xšµ$ÉËE�5ÆX$YK’,I’$ÅÓ”�a‰{Š#C±UY媲ʕ«]%(~")[­ÌÊ*Wgešö¨„sèc™ ”!¢0x$’Ȥ‚Q3$êeL.vPB4Gƒ±HRˆqQBÈ ¤B553Lå8",ÄÚð\#qPÁë–o0#$ÎFYz‹ð½nËûÙyGhŠ6tnO8Æ9n:‹´hõ¥²�Ý*ð¬è[Î�Rˆ�\?51øª‚â-oܯåÒŽ•c¬¬è{›ñ$&$ëeNP¯0i5¤›‚6þËfnÊœnlký¤ÆhJ»¼r4&ö@½HŠéu ñhf~¹ˆÛîˆkC c‚‡D¯ƒªZý/ŠªhЮª5R|¯®ïý€õZ"ÍáöL§TØ*À½OÇ5J«OjtJ‡…ËÔ“þ“b4�–ÝO¹±J¿½lõ#­~’͇ˆÒäczö 8 îI ­‡Šå¥Æ€?¹:ó覂–í5 Í´ñ-uÁ¦$ÎÒ "9îT‰ÝÛ×—Õ9FÒní¸rFÜš&<ˆ¬¢¦·éíUÐRÁµ¹ÛÜÌwž:ô¤3x‰PÎÃ$øÍùåLüBW +qQ--ö-:&âÐïfEÊm§NÍ’>‚} þ)új1‰†i&³Ù`¬ýl†ØZË“�¯4ÚÖ(–iQҖؤ蚛«5ç#红jDàŒÖ§è’‡V6Ø"lèÑå½x*L€ìèRîUÒi½î¡b®…8ÎýøÍ ª=ºöþ>=åÝõ�П¢� ¼�ïFµè’ú ûBG÷”g„Wtåôè†7–i½èr%ÕM¬Öž°ˆ¬�4å;¥ �^?Ä-÷®xÏ—°%LÍ4 Ÿã`Èr?F•°~+-ükð’…fŠƒ‚ß5¤{XÁ[�çŠ×B%?Jq"$ÛŠ<4ûÀ†)1&�ű€WxP| 6ˆé­¸&Îküî±Õ¼Ýe°>–ó:£˜÷O1‡»Ø0 +Ï—Æ™Ë�"�g/IÜ„­•òÞ®ì‚é-˜Ç%‡9C·M&(ÀqLd§_UµûŠ—PÅLoX�%4˜Â‰$C*nÒ—šUöï-vÕµã²%zĺXeÀÕ];éS=/±Ì]^åɼKîÆ<@óÿ=Êž.êø”g¶Uƒ-OMǪyâÙÚkúq>¡4?¿JrS)•ÅíÆVÈ7¼» ŠUEÞ§ ]G|mô-mœà +bB•É4¯r$ÝRn2 ¹ãPxëDILyÎQp§Øö ñMíaˆaPö§“Ú&D TMã©ä .>×Þ†– f7<õʘ®Â½Î�èeNÊt‹´QÈ.=ááh„Ätçó!‚*>~�š(Ý7ðÝý{t¸$Iט.o*UkÌ•Uº("LWx¾0í#]ÃtiÙnµÔëã–Óõ&L7yà?ØÊÍ%2¥Û7¤«eºê[Û\ +uYr²õB0kÕ۴™„D+B™ »Ç䮉))¶á¸¸ØgRt—Y«R�z0‡ ³Æ=—€_9"”Ð{V{“J“J�BjÍ3p•Alpë@¦R‹²¬Hu÷f$È[àӉɉñ™]Ø‘`°‚c—;³øRÆ« Þ­XU*ƒiyû•ø5êÎI6-ô? œF Á[_[XIí•É™çJmÒ°÷•$Ô@ñNô·VW+X™iow˜X¶Q˜fj\4ÿóô¯JxV`.B’íH=£äpK£C÷?BÐóÕ‘âR[¿†õoëŽ Ïú7¤`>þ%å/í~(ʯÍD…„(ôBY?wdéÛä# ‘x°e}OY샛ü¯tX/>”Ó“ç*eÙ6@ßB ¶Ýå_̹ÝÍ÷²›EpÓ’wfú¥¢�v7ø"Ç&¦@€ü&7” ÚK€z'=;ӜljîðŶÚ�² '៵$"ÿÀß­ÏÝLF¬æ lK{¼!œ,ÊbÍ~œs…êi–ßS-tC˜Sù­‹ÆøKQXÐfrÅttqP*ɼ¸uö.E<èî·iT¾Ÿ{‘[û2?�Û ­æ3p[ÄÉ'M†6G?�ɹåÙŠ8`†�G ¥W ¤PK?¤yÝ&+‘BÛ.eâeШ¯ÔÖ§·¡8q̃ ­Æ„)òX€K¶ ððe?÷!Œj:qœ@`0—ОÌEiùÆ·ÏÐîŠd¸,P@Ú´ÃW]'eU<r Ú‹Š3³Aaªò…WŒ+Ü{fylñ‰º¸ñhs˜ _>„]#ã•ärÑÓuµ´ŽºBn6å7¶< ¢Ú*3„%§W{|š8ÜŽl­¡Üó +¦e¿N¹ö_ÅÙ§Áðøß+Ï­�©ýB5ɦ}¯–WÝb8¢’+ˆÞ˜xÅ.:‰ò{b9Ì\´‹èP­¸ :ÙÚìJ§».¹f³Èƒá Äsd¹‚ÉYU§ ObÁâ•Pš‡A¦•“É»âÆWá÷èhòní£9jS1&¢õ TL|* 48c’ì$t¿7–!/ãj�Ò&Å8̯Ç.l7|-Beǽg �D™ÇÇK÷¼øå—ñ­½ôcÁ„?–,`î¢{Ódì ǦˆŠÝ5Édjá_Tœ¦ûY|Œÿpè,£ +4°�ñ0¯Ñ™"q ž€¥jLgG´Wzc7þ;‡‰[×Ípg·Î»^6|ðfŽ[)0v~D7$_>!…gºRÞ™3±[žÒŠLÖÌ9i2³ã‰ýç’Xº"å´T¶�ÝN«ÐŒ³fƒ9_[õ ¾àð7éþtL:Õ¸síÅšÎö^½ï¡þB+ÿk¸›…<Í1Œ¬ßÄ©×ùÁ +íóU<í±,“rŠ¡køØƒEô²˜>=äy¾G®~‚y(‰'�â6kVCW?SÈ1¼¼) ò�ci¯ßCÙaFÛÌÙ¸ Èe'¥± QËv;†ò@®1¿Ôª•b7Ã>—~EDŸ[+©4?žS½õç„ÈŽ½Õ2+1ˆ´éHð"ŽÛÌ�ÄX_LK×R£f �}Ÿ�r7¦Ç77þS�î&yÅ4þí¥©ü’‰YάÂÅìÃ�Ó¦úr07›EŠ.Üײ€rUJ¾¤Â( â§#ú«yƒCøÅ긱>+*Á!ç2ó†Ì9«=Áí!ʰ¼“Æ0FÔ•N÷qËÖb@fÅQo¸ñðL¶™§ÑºL¬«H´‘פƒAD÷ MÞö±ÿ!k™'Cy}Ífƒ”ÄÕ@5òNMÏø¶’xckÇ6f;Êõξ÷�›d1¹ÒÉÎaHå ú\!%EÀêÇ€w|$d$´i­“yôY÷Ó3,®kë˜ Ñ^{9bÅ©E•ž|ƒ$ñ4�ßRxl[±·¿‰†B! xA™ˆô�‹ãÖ9à8oV+'ñF}ˈDL›ý`&»'61$2”ðpšEÐ6õŠÁÑ¥[ØÿÐy1‡š@]MÍöŒ/Ë ‰n^*h£-»™Z‰•Ñ §í°Þ~1•ïÆ!B³Jsh¤¥»«£¥Á8XsÏ^+ˆ�aþᬠ'±¶¼uêPŸ’ØÌ#õªØ#TƒÎz£’‚{²Z�"j¾¸M[/_ÔŠs#ft +™“-CB}ØÏ¦«6UÌ,á›4 +L™-�>v¿œØ,'å úv °„­}€gszˆï妸/_Æä»7§PÏâÉ;xrƒ-³¡.} +ÃÚò¼CêÏ8ãŽ‡ÂÆÌ0[VÌfÐÿcåV”ÿ˜ ˆüa@'T-¤¼¹]R‘çXxÓïëË|/q¯uHˆƒZMYzh‹îw&È»ØhÏç úõrqF­F=mRé«.žS‰ƒFÊðªWÌV¨$ ¹ÕH=³ã»¤d‘l˜Ѕh‰ªî>ò›÷Ðy‘�éÎ{@†| ê?¢3U—$0�×Uüf ÍÖž5�êÅGÐd~ áæuÆ´ÇbOæ=Y±a(ïO“¥ÜD ²|N�1TЖ<åßOG´n|[€ó'#šÍÂ�$®Þ�â~sº¡ÆŒŸÅ kL.E”‹"ñµ®vv¿Çc®t°Æ`,áêl ЋÀý‘r£nõÌŸ¤#QÒ´/ŒÕ<\‡w¶–”wNˆIÕÏæØxÕfýíæ*¦š\´‚_ÿ­pÕ ÚëÅ­š €QY$0Îà—5°èfÔ‚�­5î$È|õÜI±¹ef5E¹š²_*ŒÉðši&tig:¾Âõša):Äï=N +è´ò¬G°`«3œ•:ó?…0ø=®søK<€æ‘d2.ÖpUd“Fúßàa§Íi~ „ ïF¬8ƒÏÞð¬Sc-ÓÚ#‰›EöìïŠ/Ôu¾krƒa~¬t&§e3�†hOµCUüº/²€¯ZžˆwÔÒâ`+á„[ß:‹TiÙJ¸á¦S^Y­úÆ»X§� 2£lëÂMNì¼¶©•¸E #¡’0—VÅ+HƘҖƒŽøNGa}TÔÄ«`ÎÔc©ÌÓ:G–‘käS{n£¥12ÉÐC9š5<¸ZÿŠ üœ-ÿÿ飕>¡ÀmKåÚ)?;vAùûÝ•ÛPÛ‰låÅBóKdc{å)ÙÊvÌÿ½„†Þy˜Ý“Jhï`ï„ä0ÿŽ�yDcutï"ð M¬Æ tk, +a|D}Ãd5Å@™ùeFGÒžØàëêC ¥s&‹$ ‚êç|tÓ+Ý•§;sKñÃv]lÐØª ôŒpî4‹ç<ѧ䂨F—¼/ò7Øè“-Ýðü¼õw¥k›xø<à¦qb¤é¬©qd GVÃá¹=áÖ¸jFz v &¦ {¸K ÇÞ‹TÁ%~�Ãû,> K;©h0ò•nÔþ-R8VÃ3úg$äæÏ@}_ ü¨Øw6^T¦^“&\4H#â. D…z–Ô™ÃÆÅ‹9·SùМƒ¬b뫇IþŠMŽþû4B­N@ÜÐJ]=Ñxþ)ï… ‹8ÎýÛ?Y=%–˜‚rH¡~xæÈ: (?÷·lMê²�‘šwbÌDA¾h‡ÞP±³ÜÅ‹À�ùz.FƃL¦j OÈQ€%ˆ}§–ÿ¼guAþ½é¨q4òr‘�Ùí¾PêQ�ÚûÀJ!ãnJ2EƒŒÈv»è]Ãb2¼•bôŒsòá)]äË$«ò¸O ÞwtÏl±êš¡³TàØ°âþû W8câ|€cÁ�ä—�~‚éX�‡Y–Ò\Ä ´"½#ß”Òbßýªq *�î?èyêáË®ýþípµŠ�鳪ÂãºA&˜Ö#‰¥„„zÄ$Œö¡>›z(—¨½4‹«ý/ è ©YþhÔFKgÊýA 2�Ùñ÷fǪ´Æ ž–ñHúõr‡&$5ªì«@AwQ 6D�€�?L~5âíPÊÜCc‰ÞIµ~Þ6W;‡zƒ¯.‹}¾ïcjíÆýFòc H§ß¦'ÃøÝ1R£cÞØšõ~0,8jNó¼ƒOæ2`*çÒ6ùñÑÿ„›£o�øÒµÌ5xX‹.éW>EŽ™‚ö¤oò¿|¼>qjÅ´nåЄf ¿3AoC ™Q=(,xg +1=Ŷ®nê fÓ©È<¯ãª +´7 µí˜+›îúánB®õ‰Àƒœ‘Yý:T[âÁÇ6ItÕ¨Ò ¸}mE¥ATŠ~r¯vùôácóo®û‰UuMؽG7LØ ¡~Pæ®Ã$ðT�PáÖ ÕàˆöâxnÖ +Ô�X]ˆ¾îb¹ô˜ÒòUX6ºwCÞXK¿}R7φÉ2Hü\¿ª@Ö}«ýÕ%ŸaˆFÂú­fª�6À7;™•“�øÎ:<ª2üÅ�yá½m{�Áµb¤€Á•zi.rà¯ëPE‹ÛÛ +SYZd�,c]¥µŠ[e�Ç�·ó˜XDc{¼ž¹¼v¢¢éq9?s44XP¶ñ^xç[_i\ðÜœz@¿KÖÈ; +¢fÈ|µ|Öx@©k:í¼á¤&°ñL œ¾ÿôØ¢ˆý» §YT,x`ªèy‰Y†Ž¨JdüŒoÉBò$6ýp�¬³ƒà}/×o�&îx#jÔhGGó ¦Œ)¹Èn‚5Ʊ¨)<#I¿4AÛ7m€”é`±gŸVeH):rÞë8v§q; É!ŠTìbQ’&p¨Dˆ‰è@Æ*.tß"óè>Îeh|ü^½–•É¥Ñî“V�#ï*£+Ý Â­uä��b+7V·QIED¡2Ú}Q嬥ïÂ.˜¸A}»´…·»^Ê_šlüáÎàŸ¶t?º’Ÿ^~\8ð,ãb�'Œ�œ¿ƒ>mû g×û cqd\_Él wHËÒ×÷ Laî¼ +­ SWÐû±›°I•“lÅ/jÁž~:×+Rw.�‰z * Uvc=/އ,wä(˜À37¤z!Ê$p†édê`5÷/ÝédÖ¾0¤ŽJZ‡9U›Ý•SuöÚ­‚È¢�LjVtaBü€äE”xAZަ�ÿ¢lïõ;’pEC­ßG¹x‡gkѱ)¯å­€$58SÂE:)W`Ô„ðœÆ“¥ùžç»ÎÂëÕPXØf±™&¸œw�É:êC) +Ñä±›¯?ÔãÉÀä}‘¬/¤AΈÓáà%uäV°{ø Ù(ÅPâf¾næ1fÞ[v™ùš²üŸr nýЦÜ\NÃÖ AHpO#êÙšg‡ßj¬�+XÌ_ÚLBN)SÃa_±PEYgh³²éà%˜àêf*&SqV‰!Ê*�ú$­Àjè \qÍô&ËÈN(º/9�pˆ­Œ�C¤Ð,t,¼I#½Œž»¿ãƒä÷ÏãÞ„Eü…ÎÀˆ^"°™¦ãZe ‚­‰†Hmå„qþ(Lô¶à† +£'c+í ×JI|UÒÙ(¹&µOÌ[Ú°—Ù"…$©X䫈Äÿ§}0 àQü÷P¿ øÅ̘¨ÇT§ öG—ƒÇ*÷ +±¼TvneµÍP�ɱ‹\nôb±#?»h% ù‰•0g•¦ +ÇDÙ«Y0Ø#o:ÏÃa ìëZ@,lÔk-²Ö8­)CfÜëdq ¹~YÂŽeBW +Aá~ŽP­§„pëqÛDbBO€©�B«å³£¢BôêPÅä0´[jËE\çoÈÊ~CÖ} 4áñ 4…ó’Ð[@Ædb¶p+S �T‚öìèúT”M>¹‹OâžT©+•z`z+A«ªˆ×d#.²™ÜŠ-©Ðc9ìà g\ö(˜J±�Ï&h�!±¸ŠõFÝë¹Ï·cc %dð,;_œ`“긒¯þì[½Ï´õY=ÕE,Ås +:ê™-Û‰û¼¾sqPÑ]eÛòegÑ%ÏH([·$=P‚xn‡á±þÇ.¬yKºb({5#päP;Ûs§AZ0Ç0²ô¥H}‘ºwX4¢Á•3ì6ë·X˜MH¯9´SØQBŸLØš�§`¥†ó$“m²Pë“Ì“D©RõYâ8s"T£Jc¦ˆ"AêEb6€6ãÅsÆá$§Ž³Þ¥¼?:•Æ8¶ñ©¦À¨’Jc½¢€9!¤×oY€ßA:IÊ—[²4ûÌE¹ö³QÄ|çÝrþK ý.^'­$t'„´U"~‚â–>Ãæ·ñ׆›Ë­ýãÅSîÞŠVIÝq sh§\�j6¨Dœó>à/¥’äÉÂ<h0L-ÇûÈW7˜§‰û_$=5œQ!E\ë®8öá-=+5ÜäʈÊ+àËй&ybÉ}šŒë/ÿ‡Õ'H;Uè°³¥:�¯•èÊÄ«%µø}0°´T‰¦©#&½å:;¯Ž>ç‚vûJ(Ò'ê<BÛ¦ÁX¥Mds� +2”/nP­, ë$Ę̈¾lû°ÌêG‰ƒ'ðñýÉ!æÌ…±4  +Æ•øŽ@š{›oA¸bU .Þ•Ö[QçA5ôïƒgëQ:¡,)Bu°Æ dÒ�o”º|%Àïšb¤ W*U]R§=ºÅ~}í# +Ù™é#ÆmÙø½(1H¬ææu²ws%k#z©÷s¦áwa`„>B•.Çå–jÙ~¦ ^èߤGÏt/è7$�LN°5ókÿ«§°,ßÅhÖ¦{Ãó¿=�ÆŸ)UõQªGÝÂ2@àjÂܼï¥IÝvü© %\ 1[Î~z�›mÞ*2’±s!vi‰ i`å뤕ôoã¸OÅŽF…d¬gw*'ØoèdSG�¦§"\g%t7¬Ó|zúÕ;5­í.ÃLs9çFþè`<¡Ç÷L1ÊwpMs«ƒgÄ—G*ÁÞ9ÍkŸŠu<±.ŽK)èÍ¥Yôˆéë©¿€¶qȇØÿá¬9ò×ÜP;‚Üåÿ¡Cíl[KoJÄ>WÜÒ§ZŸÛìÜ¡�A¢ª¢�TÆ"�›SüQ`V¯åù3�F·Z`‡b_à5ˆà_‡æm¹“öcŸ™¯žÅ®1�~‘›mÖ”*·Ýý×�…�«œ¾ÙÀèÿÐ,8Òo¦S˜Û-´T,!ž1®ƒ£©L’}•†’ÿœW^£î"ä¿[Ë N6PÒÓª— *~z¡¦¡œuÐ2 & ×ìÊW&^ì·Õ¾ß¾Çy¢É”x‡¾¸z¾IðgCCnPÜ�¥ÝÙ ¾ª¶žoßy:|ËÎÒÙ¯¦^ÂaÒ7|G•ó[„SðÅ“¹[æ÷–Œf)æf»&˼Ҕæ«- •-"Õy-Ô}ñ'{Œc«I‡q–ÂûÂùr’Bh_J®æ$$,ëbd*<ÅtÁm8­YNé©è +Ì•¢®Þ÷0&øÔ. +žÐbBïïð�Úxš�e™ C✋ÝÃ!Q¿TÖ ó×ÝcvÅN[|•À¬r8C±uRëê«A•#ßT¾!ÐØD"«8ÍÂ;û€½bô®Ã{óðüø)šj)ÕOwQâŽ7[åÕèKÉr/‘ä(æä­|å©>•çI ˆaÀM2ž§éÀ"¾ƒúªÜÎ>éZ%C8_ºÂÿÓd.•$ël;xÞ^aÝí1æÖdZ˜g�¯ŒTÜdù'Áþï´®ÕÅšNƒÏ4©!·Ë –R뤲WV“ y£tCk÷OYɹ7¶A�Fz»³Lø`ˆpÄ º'Ò�o&=÷i1(žRÿ2\ƒ°NK(s,ú´æ¿Áô +¨�ˆÓƒ—B£ŒÒC †â½oToižâ5 +‡”r.K‹Af¯w;HÙ×W ³-=Dl)½·sõØeP'´uåpey¤ïbü�ztWR™Š*ºoWZs)ñôiåæšý¤);1uÆy^³Lˈ¯š£³3H œ-AÛÝÖºÖD\*LÆñò>бÅm(DØjJ%�yö€ÕfJ.]bÀf~ç¦îG{†µJWÂ¥ÊKž­ÂÝ4¥��„ç8]rëgc‚ëØˆYL�eŸéx x €%r<ÍêìŸ!6�|·>Ýû0óâ”s´*î�÷Êã(fTGc6Gy Îº*÷ý�á÷ß h¨±!s[¾­öuåQ‹´vÙQZ´éü,5�¸rD9óIï_›É‹�Í¥¥Ïï©XtDdqN4#uj!’ &œ‚:QR›¾¹pùKÚÊ[ÁZŒjÜA¿ªKFw/ýñéè燩C¼Ô•ƒ±}AÚ½f&*ikj'ÚLwµ:ÍXÒ?y¦°P y<2±z•ÙNö­°& w‡¶Àd¤OxéËS"¢b¿ +¢W/iõ²B/r%k]²³‡ÎÞåLÞéJ'X•µÏ©<_�OÊ”1X…¥;« Ck6”BYnÀeù·>%+?ˆ71!Fƒß›³]89a“½ªL‘"nßhp�ô âýáPG¢¦e¨•X¤ˆ�ˆ“u'š[å{ @ŽE­T% -Cgr•iL§Ä²­ +'èÏÀ„Jv‘–“ O^ZŒ„Ô&1LEÐ}Ǭ£"Ó0%Œþ‡žþ”Ê…¿À£—ήHü<À/ $`$êUá¸4Ïfé2$>^ +̹¢)×#€ˆE¥ìn<É1ª¤ì¨Rp©59œo™ zFôÎ\ºÛ€¾ëÜÞY?½–@…( �° 5uÄ'$¤ã$_{W3¬|�zÛ™sj8Š@ÆX£æCV—ø6P€*šq #Ârê ê´’ßK‰Dä› YRŽ=É«ó\R^H¤ Ñþ3€é§­FÑ•)O›ç5«½Äh“5º²á)vëg|6ˆÓ-÷�`áÚ +ä•�ÜW²¢¨@+ؘâshî—–¬éW¼A4‹: íËù¿Þëz‹&®AIa­u«e@n?²!Éž žQ€á +ç`?m5æ©”Ÿ9�¬ì@PÂÓëJ‰™ ¹—›Zïbð?⦀7Þƒ¿F[±Ù-‹{ÖwŠ.• ÏKyÞö û`\™1s>\bŽb1 °Äúý,NQgH¯<8ƒ¿'Y±Á�n¯ë-(VIee+.üO,‡GÔÐø7ź’+®Úh4Æè¨èø’ Í!l\L¡wÑéùãóWèà¥Ú(rD£¥³´®|Û%6)ê]ÞZ©U°÷«6áSðªÔ��›¿B€º¶nŠfŸ%ó”Àú®ÕS;¼·1wZ¼¤»âþ]Þͯc�_1[0^�ë1ù�¬˜M ÓɵªÂŒF‡æ bXˆB%ˆS%×LKY<ÇF$»OÂXQOôËr††./¤@:ÆO:pUãæsÆ”]Ñ$xâ+I‚h/j öX)DRW©I¿x’nHk)rÌU]ÛæDÀ˜æïé§m—”lÆ…×_oC5äü!ÉwHÊHhpÕòˆÕ}œ f\`¶˜K½ÖùêkíŠ"^½3„Eb‚Iäùâo-“ì¸Ã›R¡wô»O‹þnë)êЯ|‚Ö˹4_Nÿ[ýãeÒ•çQéQ""šî};}™´×O¥]|£ÎX\TKÅ’¬Èïwv >%€K1Š!·¡J€uyŽ•3pÁ;UPqjQ\ò1ˆ,*&æŠâ<Àk?Wg Xˆ¢òøö‚Xⶉ‚<ÐS\EÍ‘ÌAÿ~ÜÌq2£O�žÔOÙpØw Û~o¡Dïp¬ƒ„zv@“¨z:¬SàVÛ>JSû=û�M· "",÷á|ÊÅÇÚïŒwdÄEîÀŽë 톯x`AÝN…ø�^©\]7‚æ;d$QÓÀƒ­¢|hÃ6ŒçxÙý«¶óÝ’¹!0« +„A^*Hc$äÆ;Zœ–$d#m4mAø·4¡«‹­ÿÒõÕ`Ôôéá�nVŒ¶šï ½‘ Žñ/ 5@ƒÕ/›" z¥nF4¶{ãÁÆHÈЛÙ¶ +d5C“$…G@AB|µ§3*¨VPd ŽÍj:I1Y¡<^�÷úJFq_Q^,NŠX¾úØm�5‘û•Mõ²ËõÄúEàb$Ü{XŠML7z#ZL¤0O㬒çÒh�¨êãñC] 5ÄÏé Œ,ÚØaÍ1§3Ø­)/jê­-Zܵ~›ÿ±…z ×�«™ã‘éqOË_â¹äì·ÀŒ~cZÒß|pl@Ç“#£È>"gš•mŽñŒíñðâvbß�F*¤Yý6O LJßanWÚc?*¦c`Ñæ79ºF¹`vŽÝø=2îvsÒ]”À�橊ê`è$z…ñ̆*Šê€ÞßÉF±cÐËŽüYØASM�º�ÓŒC2*¯f½¬%ºk +ß�­î¦ÇA.j©x©›Öࢹͫ³šÒbгá�FÇ8O+8]G»-ö6û2;“�7­hu ,K "¢UŸb:x1ó÷šuB0d*Öûè®Jyé)M¡ÃFü“ô4Þ+ +wo,ØëªôßcªKÓ°ÐÿJܱØ(Ñ“•¼é‘€© ¹=÷4JU7c2 +—d((â\uùƸ\žzŽ"Go¡€=ñ!Tv¿Øb½Jju:Ú]ɲ#Å’É·Ý +ˆC 5ÎÕÈ ¢JË£@HÕÇý´3‘¼È…FÇü½T +.pf- MXNñˆ¼ª^šÀŠã@ÍluâY¿‰ˆÌ ô<ÂÄ3Oò^è� «•ÇO)¹U|[#ÁmÌ ÈBãPÚÊåýÏš;#ø;ÂOÄØ=çÍáàÞ)*Ö�ˆÂ÷uø‡ÁB³G¨"®%X8<¼u±gw„i…²¬Si€ogüD“Ésà%ž/jæt#7‰ÓÌÊåü"Õ êC‘Ï“´ç{FŒ"èjjw(™¼‚äZÖz4ºø¾|Ñí‹)=ÇÁœ5¾njï…Æ ‰š"u´LîiÏÕùTœõ\Ö�⚉?–S*ÿ÷Çã0C™ì]èX0%Ve(­Ž× +Ôv­½ZrÛÄS'a n]÷:„­óž:G�l>âeÈ'…q\·(PŸI2o.s²ª—O&²±d×HõÌ2ørÞËY”è½îRp¤Þ\·Ù,s�'¡Ù"0‹üŒh‚—AhñŸžâŠ¢NÁ<©Š{(8�7/›Šb€€cŠè4åñø% 9NE¦ôEy•ÃINŸž³f²é +/²NÜõíiœƒf¡ºnnƒ�,Ýu(&ÁÑugWI®áŒ¡ƒÀ«Âåœ;;ä)B s»þÇÓ™6ÒûÚ/5RO°ÊE$®0~oM¡Í†G-"¬8‹f˜|íŸÇbJ®ÛÏžW�ËYUX¯]—…S\§ÞMN.ÃazÌ!»÷@F}},¨•χ¾Ô˜½cÌ1•¶#šâ|­æÔêe¶±“àˆõ´”ÕûêáÛ‹DÅy üް‚¸…”,OŠ!ê´TRl™~6þ·ÕX!…ëÎÞ²M¼XòÜîz‡`;ؽ÷[‘Å'¾y#þ1ÉVž'PÓܪZ"æz¯è5²ø½Ñ “ë¯Ä. +®Ü»«÷ˆ¤ãõVRT­AT� QOÌ2Üéf§ÉZÀGAA@á©àj{ÒîÜЉ?ý퀸9°”¾“Và¡Ë}å¥èÁØ8sP"9ìªï!xP)a½&U´ÅâFn�…ˆy±j—ð‹Qª!%öP½3µ uˆÎgžÏN:ó(t³ bv|èCò©8&9çŽèþ¸èãRèçïH¨b +¸E7ÄÀ¨R5?:GÞcÂÝàòU?%�¾o¶’Ä1´SÚu·Œ?·=K÷Ì”²a¨:RŠ=5B?Þ‰ÂJlqƒÓ {6´Ó8�¬I!SØØ,µD-ãˆ×hŸèx‚xWvømÍ—aür¦TPBx0£ë:ça@'dÜ)Lî&Ç¿]]¼‰Ûœç½;!”…‡^0EO8-°C˜›s š¹•oGÍ(޹Ÿëg.÷+œdÇls–ÓÿUb#„pOÂ+Eë>÷ÕœhÎÞèš×ÅK„tµ™kÊ$…m�€³™Ø:pù/—@Ó<ã7Á;­ÿP`È[°G¯"82Ѫjñg8_g�§ýã`¼(ѸSàPKÙ?~ñoDEÜOkŽÚ[™$ß•] |ZoCä¤ Q8ÀŒè›^€Œ2=£hø×ãE;ÍæzNÿw°™fÙ@�HCæBáÈÍu7à?-Ík椣ÐÅXòýöj�©ƒïúB+5¨B—„¼ë°¸…;Ä×¹WÐG>­´Ô_¡°ŒS±ÞV¥[€MhŠ:£EÔJñÄl +§©�H]Ÿ2|ƒÚt dùý©VýïûÎa¬´K�Á·ÕÃcv¦…+–«ž�"ÈUi1Ç1¨JÁx0ýaéž3å„^Ö÷C¿æ6Pß`_­Û-Xú‚ów5Ü#ÃGk?}iTàç*ºð*Z oÁFd8 ø PLcÖ%0؃·8„74öÁ®á¹¿J"�<Ÿ.�óÿò狺·óÚ£‚ý„Jˆ 1úÅh³ñåB’Üu¦Ý�/þî×;™IÊqjë-«Ó4¬®HБZ-t+ç@V@ñ9}>c\3uœä‰î­Y½€èZ‘¸€£9iŒ¤2·qU”v)™a/Ö+å£#ë¡n„sʩнòt¶ayÄW­¼3 EäÍ¥ö{ˆÄâ¡"0ªÍ½kÿ!8£ÛG›AìF�Ósš'ÒqT΂‚Aµoøx.© �� +Óí\.�nC|‹@îÍ-r’”eëõ¸i—$rZL±Ìc±Ðn¨àšˆE\ý}aˆ« B€¯3WµU±¨!sõ‡ôè"Æ3Äìñ7_‘Ju +ÿ0sþSvKqùÓú®Ëáþ�9Rnh] t öìæï>d'W7ÖƒzUwÁÉ ¨§ñ_R¹Èm¢›€Q½ ‰Âú(s4‘¯ÕÊù åoÎK¸_oò—2$à °ËDÆ!<ƒ"ó¨‹u�¤ F‰©bÁ<ݾ9¤¦ãÆxø;‰@!MÔuà�–%3l ç-ù +á4¯˜E2 (@ƒÕËÔ¨eÅ$¾(š.˜ÒþÅ+ð}$0ŧ‘)t+Œe^D¨èÆÞ˜Tk ”îCƒñ(¬©…îÄ*¼cd4Ò�ÓfÒ5†FFŒPJ"çX ´WF8ÛdUæÁ߯'ÔN +²MÂ�e ÀÉ ltý»–ÆÌd¦FeÆMÝE²4pñãÈèq¬&Æ*‡]ãD¡>Ü œØ7hLïò.´SµÅâ/}) 3µ"°Ã¼¤=!·*øZ7hÊé¥AÖI'„Ìðc2oÌF�Â8/«u"4i欪ùU$OJw1v±`�†œ“GØ« j�" 0t¢¬’ /Yè„Í„c´eYÊI~&ôÀ”µ‡¥¯ˆ•ÈBâQ±<¡†GÃ¾Ô _?-ˆw :Žk8\_¢¸“·¿^b·2Úš•BƒgŽf-ÚE"½ùÏ ëz‰0M0�Iü)]ýU]š÷•ø²6ñW +¬%»yеöb8ñÃBêÖ0¼ó�ÚÉ|°ñoú‰ :ïû\šy‰©u?Åù—„<Ÿ)}_‰/C±ÈpDW¼/F \­Ð÷~X‚^IƒÎT%¿;æ±¶@#'NáÒñ%m­¼¢�àSoÕÝ"/禩$íY²�òGË¡*%ù#€�”áÝIbùú^&®é/ék®ŽÜÿ¾l.i–TqÙ çðÃ}¹ú"–Ô†|=V'}#¯ÈÝ?$çî77ôüŠ�nèP¤Ý˜óƒjÓzî ç¨Qµ’®(à9Ëi³œç4ô}•k ‰4'âÔC‘^�PâùæH÷@˜�ÑbŠÈ1þ‚£È¢Ò¨“–cóÏ”«¡© ×9@9ç¡'’Ø o”öžCI‡êb—í&ê�‘^%[LAþÈ ~wÒï"ü3ŸÉöµS¨ÕöÁ6E`Ðæ€ü»SDà„Í� Ÿaqä3gÚ‡Q7FOxvœÄœ&Â2�ç‡Æžh0B±ýã^ „X|ºÿúm5’9Y ôeOž·=qüÓ�Z3 ?|bÞm£ÕŇƞ‘OÛèçs²` $Æã‡úHþˆ”a}…%CÏØ~¢d)Ǧ²ß5„:©)�ÔQ@ÿ�ÿ �p`Žý�JIÏFP÷O€64Ðá}¬ÚÑ "½™APoÅI J;kâˆlÜò¡œù�„ëÿô¶)(è‘·1¤?íâ"�œáð} ŽÂ˜ÈБk´'‚y0‰ð#‹*rìõÀ€Îv^aˆçdOÏ;<¾ZBŒž'Á—óohK1��nŸ"®a:tÑä%ΧÁ�êí¨·mOþ ââà¨F3ôœÛa[³2ŸDn#/ý‰ÖOGà”7å<Ÿ°·= DZL�ðàW¥"û–r{YÔ4 „^�‡ôÚ,¢Ä#¢ÈÅücÙ¢K-ÊŠA-2/�ÿ¹“ÅÝ\�•á2~’*óêÝw}h~8$»„¸™îñA%°FúØ(QxüЧ¥S‰òt:áz¨Ô†? Ð ã}à·DêU))¬ù%e)Ax·VÕW’õ wCâX`¥i.;xt3<üò{�]ç#Ü?d\ºBb�%:ÞÛ!UõB9ú‘"’"$%'9àD.çïSÔ×oë +ªêM´?‚š ÔŽ¬•r^›¤õ�Ò(‡É‚Ȫg´!é)ކ£Õ’2 Ê4¼‰ 2†>ÍÔ¼85Å÷³†aØ‚÷ta%£*Ø ¶¸$Ú}ߨH!Í“‡íî},ŠˆH[¤/ê¿@=�y®–8dÝúâ¥Æ¯öÍ$Ùr®TÃ{Böe[c,ñœüpöœƒ %•úª|:S]™˜›¤/OCó�ù&q¬¹ûøÓ´!û=ü[¾‚«yµI¥‹ì°bÁ K†;uGÄ™âÛÒ%Ë¢ð‰ŠÚø; _š §Öºµ£4±v&bù˜sdZ)�šõ§á d±R“EDW¥ÆÜÅ#ãš¼ã5ß¿�.ŠOûÄ£YÙJG]‰£q˜É£¬l47Ùè{€¸õ^µ' “‹ˆ”¨–†’Ž=]½˜�Ã…€oÚŠl +b1¡f„„ÐCzŠÿ ˆATbžZ À=uŠ.{m�iLÅ RØ?–è‹O–8·�ï ¹Ô™�,Dv¬ê¶ ?¦†rô'£ä`¬K©(‹ã£T£Í€“RðñÁKý\÷hÞ¾SÊ N© ÐEtÆ)5f}J†O7°©Òhý³€`ŒÜñNúÇþ:ë7;¬åõ;B á¼#$ÓÙ=ލk8ÏÀôÉñajD{ ìF7K6-°—��˜á#l0Ý#´ Q‡:�V±Í“q©•QN´$zd +}%)nòèÓáN¨£ˆ(cIüÇl¬ÌöÜü>7€€Mº&G×�bÂ^Í6Ì#‚C’Î̇~mçÂÍÅÑ2½ ý‰`Ï®öÉp+“׋Bv€xsú‘€-ÖIàNët÷VA î(æ~m§ö_4"ð«ÿ.d1šÑòy{òÕ0�ìú«A³JТHxL­°ÓJ9~¡ÁŠ2ÉÜuF&œFæsíW ——'›HA|=mÚóêø¸�zEðâ2 YtF¸§Ma¤�­dI ø±—"W¿Ω +vÕJiR«CÑ\�?WF‰k”Üï69Ã1EÍGÊ8#¦f[e LJ!…6-áu]§ðJ‰®G%±eëTL:ÉÙýe¤·Sˆß—• ¼\d`Ø!A¨«QÚäyõðhºÞî¿"Õá‘ãY§ùÓq"[¥ ˆ¢¹rãz¤_AÂà³å�ëÆlœ6JW[-Ÿ-:u•\ééÙAI3髉µ§E1LŽ +Ü/ÓÖxV™¬úAéù·šh+¤œFö%$Ä~<úŒF«ˆ[Îo¥µEj{øID 1áRä’Ĩm�[æ^|ר]²É#ûÇß5 'Ló �á©uÍîDëlåZ·ÁçG š”Ç^9‹ ÷£šüºÚI ¸Usµc7íx$ØŠ“‰P% $i>À<‡xÓ`Š }+ q�¤Ò jUq'MŽŸ&Ç* øÿ^D#½I¶ŸÓ)VóóMs6™•õi…n-(¤áAþrÜ„Œ¤L·é z²Ö‘Øk¥=gZ’Þ²³¢ßXÔÇ%»RÉ�\â™a¦©ÄÌl3ë¼€á6Ôr�„OµtRš¦]eoµ ïjߺõr´k¹ÎTߪĮÅóæF+å¢ê%‚ + +|ÌCÃüHoÙÇ׉›]¹‚þ0ðe©Åª£šè7hg•3òe(Ô€Wì�ÈÑz‰Ìê¹tU.g0uvå’«ÆÔ�ë¹6Å*G… =�w²§,Y]ª|wЯ¡ÎƧ°È'1BG´+ž.‚åHäÆD.Äë§ÆÄõq†Œö�XN«Úeâ:ñ48îïdƒUmµ"2þ*ƒ'°‡õËó-!ÛYEɘ¤Ì|&ª®x1Úß••>X“LÄB5]¸nŒå"Ì 8‡š®¨2AÍ7ˆ†ÖhÇ VÓÑZÓO"÷Á”; Ömú¥&Â=‰Þ®ºˆ·›²‰ÛÑQ¡=ÁBp…ÂÕúŠÉjò=f^—5PS�ê ²²<¬¤QõF·­&-"NÊOæ Ó2ù¥ì$ÃÆí�¦7ÒË·;Kᆈ˜¤i"vu—²jôÈhÑ4kB�û$&€ûËɼ=eô·«„S"tQ“À"p«  šnaÕ#/n–z’nN‘Ï—`q�—±T,À÷Æ™4ÝyNÓÔO(S%ÂÊ‹pz¾�%‘¼&mj’Ö¸ZF‘yÌf‡&&aMäY]EP³�4‹` +£Œ•ê"ØÌ[á…‘'P^Þuãû£9¶À‡1@Ä!w¥Z¬t°ê°p®§„cP>–zJºr\‰¥µH^¯µÎDÏ7?km0H¿îÀ“²Ö9ÞƒSþ,,P‚…r'ƒIÎÔ£šÕ˜´-ÅwmbÙn³è~g³è~�&Ñ$šä=”ZtŸ¥I4 Ng!x xÕð*s‚S‡s ”<; Á!xÓ©z§šu*<èÊ?@e:™Î÷‘ã'Çý“ãþ±l)Õ_øU�1R)ÕùîH¥DÙ"ƒ|Þ4 Ó‚2 &Dö˜!8Ó|¼<Ê™�×ÃC9Ó|¼TZë1›ë1h«ZD·#ÔPB„ˆªÇ«0^Õ¤8^Õ)ƒÆ´Ô‹q¼ß’Ëi¢Ç· ±µ ð· ö· D×Þt ­ ß”Ž;š +°WmôŇº$_¨ûÅD*3ŠÔMPØRMMw‘—Ü,ƒ—ê6²jÏè¿.œ 0鈷/äíù 7KãƒyI±5¦19 N¤‡`&ª·û€7P<š,«¯GR®ÑƒýB| ¹¯é‡ˆ˜${iÅíAžÂM `‰[&€%nă£}qÛÜž²Sµ¨sw©ì) Ǥ¤_2“§¸‚ÊAr¦JŽ™ ‹�ï‚lˆüš`1k“Çãéx’%;|“*zhé%�R $ ”¼( ”^Õg!3Äé¼* xUÿx¨Jæ‘ydžM‡eY¾g�ªoÂOÛÄ6±ÍàÓ ¶ +û® gç:Õ¿Nb0›ÁË“ãÞ ä¸wħᆠ‘} Ã„È ^Ã0!²Í‚2jja†àjÿx=þ ÁÕþÑAüãõ@|M†àÌúáq�ÒhRçûÇ«X}ùûÑ—Y�ÆåÓ‡¹v˜gß$órÜ]×¹‚Ñ“ºÛ&äzÑãº#¾¿TÚ®òùnAlhg`S¤¸V¡M¾å ߟ#²KùIM«ù2fLkPRØVS h Ì[ù¯JM%CmF�%sûòd¾ùæ[ðY –p»tå¸9FqC'Šoã»ÓéÊq+¬p‚xŒ¸*|�ªO@Ç£GNªT�Õ„­KÉwF¥W~¦&Z«ÃBÌ2…åê�JñýyìûÅ$5n/ÁÅw!€%ÈS¸=Ðé]8Bkí´ŒÔï˜@Ìêª]”¸Ðs¥°&_ƒd—’ïYÓþ'�ú†ˆ\£[¾ù–°ÒÌ›HE> µ0Uˆ�ïŠBAP!®b`¼9÷—:º”˜U'4#ŸeÑ6•ô5«jXUƒØâ›oN¡¥ùæûGºrÜ¥ÑËŒ6âVëøpÃÉ`¨ª_(�Ôw ï;\¢E�½ìSvUdX½m~M äEÏ7ß(VÕe"¾G^ÕùÞ¤Zªó}1¥:ß|·¨KªP–þœMóÍwEUˆWÊá!bÉñ3 —YD»3ΨUTê’ÿ–Oh\lºúRÊH�S},/CÀPÿåŠS�onºæð|„«Å÷éEEbÂEhäׄLÛ:/˜$%2°XZªóõ¨Óè0úø�¶ëuã¬û,¶ú C®(¹Ötͤw%ŪÏ6gjúFšÌ/Œ +¥#7Äy“÷‹[ƒ<…â3ù¶í{H¢E•xzåEàüš²ÊJú�ÐêRVËWRf•m­ˆï'ÖÊÉ‹° Ï6gÊd®ßu�›ߥG] Ëæ»A¾ù6]ŠID» YF¥Šhï§íÐCIûŽ(p?ß®Šþ!Ç** f"¨ô“”šÊ_V˜xO e*ªèAy²”ït¥ù­`Ï7ß|ŽˆÉ�|/J#Ñ#B!wó-&|>†,þ~É7cNí“§p Y`ã–ºZß6ã&6ÀÏD‘ÄÍmÄí ’?Žl&n�ïÉj0¬Ü¡�ÿ—ðÈ?Æ¡¼æ£¿¾O³ú�­$¥ämOuÆÊTj¨Nã+:¬ª´`6 }¾_NÙ0ù޼¸YÅÀ é4@£ê|Ÿ\‡6v´Ï· ¶P±´|![+”PAÒéóÍwg˜CO’NrÉ5µ¬‰ +dUk©Í|p±ç{3wÊÞÉ›¸‰4ýmqG"n(s7¾Ss7ÌûÅ�›Óp£ÈfâÆidÝFã–XÂmBžÂMÀ·Îû„ÛE·—à +7Õû„Û¤+Çí_Zqv™S�û²Sõ\´èùføi�‰ü]’ƬV`#¦”xï?d¦Qi¥Nã³àÈ~*°IRu¶Â·ÿ§ÐˆÍ¬¤–5Q¾C3U9n‚Æö‡|ƒPHG„Zn£Ic¾åól_‘Z¡4`m÷<.HÒ¤œlnug Û¬›,+Ú4æá›A9µ_ðYд‡Žcê¬ÓmTzð¶X5þnÓ>D,½�ñ +aÐJ5‚ipÜ\ªµ +Ú¨Pð=LäFCQˆWµPˆWÊáÆòjn´ñû[ª€)¹Z80cWÇ{I‹2¬–S`5kÓ£'BfŒ2ÎJe¿ˆ¾[íF¯&¯WàËÒ~¾«ñä=z‹$ÔS`.;&äú×ÈŽÆwçÀiè‰Gì½5.¶a"²¡ šæ»íDÛ¥¶¨ZŽÐfÖˆbEY±HzY”‚ìnéu, 5µ©{?p_rÜS”FÕ¹gñ}¾i‚q™ 52ÝÏ÷…á[�*|ÿã{<ù¶pX¥ZÛ5’™ [A¬Mkå»é•·t°9Q‰üZ/b’²r�¡þ:bÏ]ëÉw$µèó}~¾9|{dtCȆ˜®j‰ô ^ŽF—*¥RªµÜÈä:ù®Q.ªfÎku˜¯Tò‡Ím5_hLRb.ò;b”¹wÄSæ›ï§6ó]×µ€Î/­Õä`N¯iPM©¾q|¦ª Sègƒ`R^3�ª9�ÐzÄwÇwÌ÷g¦±VŽ^¾OBX¨JKVÒ‡;é¤Ät,O30\ªë%ñnpV3dŠ,‚L#�)y–DÝ'ÜÖ÷‹›É7¾_˜VãTéð$Y1tlVÎMÕá�ª¢.^ö0j$)Á-S/§—xNDºµ�j`î¼>bQ¸ß­W&ï²1IùÁ¸^SÿªPçGw9•ô3(Ç_”TòmP5“ iÔ-”/¥÷=«éXÉ�Ê÷ rQzÌ�°wÔ2ÑXàTŠ~c(˜&±Å; `å›o˜äL·ùñ4°w„艪EcL‘ÍÄ­ƒ"‰yÂCU=]Ÿ+ ×&pÕh3m6×0zž±fî ‚Sþš)4£ÁL¡z¦Y³”éc2±6]¨þÁgj´' ŸŒ6³<)O†L�‘Œä™+Vå32UbØfsuB�ï{b!ÏÉ#‰ûËCО-VIc3–Á�uªÂ÷ˆT ÕX|wB¡Mô„èrŒ«ð9fnnåï0?­Ñ—ÿœiX~N¤Ï™†…WÂ%˜œ3 cœÓsÎ4üD¦4ìœ3-9g–¬¥ý#çd`´Ÿ�9Óð ùîkŽ&Qwò|‹–3 Épe²œih^±÷“3 ÍwŒ»ÊÅžDVâäLMžœœiΰwxV&z’¹�È7-{at_TÓ²ó-âp@4E=ÕEd�;7ô gºRGª}¤WV(8SLբߩgÙg—E÷»=?ÂYöNÐ4 “ÈqYµè‹¨˜ôǹSvÄl>¹°¥ì +täz¾NÝÐÓøÁCÄ¢.âe,ND8ÉhTêCÒล‰€[�Vª›Yƒã~lptv77|À p üóˆóû�@�ÿ› ør’ÝïtôíIîÀoX$ÀçxÛ Ðô3ÀFÁ\’÷; Æ7ß‘Ï7ß]Ã79ª§ñ±¸Tk;¤�ÑNÛxˆ=–}ÕXTJ|b8§’-œãɸ“èea¸2y¾A>2y…†¤b_¦ô¿0|¤÷wŒQLŽ„,’£ÐÓÀ�ìËÅJô|“†‘èÈè?X÷X]WG$!òͰŸ™41¨½ƒ=ß�•‰þ CΊ !z¾KT3’¬ŠÎ:Uç{$¿¹NuÈ×Xðý2a3Ê( ¦ê¿ÈQA¾Yg ã�I£´JÚ3Û¤¨Ø*]MÚ*=Üy}Ù i¾§–kðÍô ¼/1¬Ôߣmäpësär–u•à̯Sà²÷˜âÑ–*û a< lˆüš ‘) B‡¤ #Ñ¿°€«1›jÑ÷Ø´ì2G äE‹TôÒ²Ó9î”7 +)ÈdÃ0n‚3CTl‘´N«IVÕE›Úý.ŒÃY§ê_|¦a˜ +Hõ.&=ZÙ=B%ÕeÐó,Ê—a|âÏi¸UÐZ¸=ºrܼÏä ÀˆfõÓaå»Ò^ «¥2>~ƒ‚ª:¼1eMÒ2ù˜#‰¾” 5­ðÖÀô,pž¢3%t +5SsUëŠ_Ÿ‚¹¢•�oòr=¹® /A4Eä,‘vWñj:Ø +(Je;~âWÃ0M'a5›~i^°\É�ëèá@É“šù\™ÊîPÔD?6? ³è¾¸ ”¼Ø†\/^LäÕKbÄ$›™Îé� ÆGD~MàÀÖÌ*ƒX¬œhV]hº¦¼xöApp5(o�Ū¾Q*AR< Ï‚>txÊþ‘ÜGÂ2 ³S)»7Õ¢ß/•²“‘JÙk££Rvñ\A²­÷¯�ËÎwx® ïx4¾ð(Tá…{$-;ß"�Ð�mfI’$+¼ªÇg‚s�ê®ÚÛÅ9îuh$�žE÷C/®ä£ƒJKuŽˆ˜$bPŽ[Å\Ç-1§�ÒèmޤÀ·Ú+#žbîÃ¥ý•IÕãSXéuGG<ß·«¨°šLRr‡ÊÀ´¬P¬µ@*¥úBâe‰‹Ë#Ä3D�öõøŒ +mc´³v,Ç-„rl1™ÓÌË78’Z52y‰¹©:ŒÂaÊK©óš›¨ú>/B³]�¼_C´"þ%K&ß|ß‹j�߉å´2î§-¼Îx}È®¯ARøn|¹w\‹ªä l­ƒn˜©›ØÎªºˆIÊ’UVX&ÌÝ µ”Ô¢ÏwÊw=žÂí1§á&ÚãFzŸp‹ß/n›×‚"°çj˜ïâ–ÉK#òǦ;0a$�dÝ0â¤9ÓkN.ªdÛ‡@ Y|ó-X±“BF’´5Ž• SUTNåxCÀPŸ +¬&ß°ÆKfò¯csª\�|ˆï„cŽ|óÍwŠd@œGÅ7ƒ¹ŽÄcÜ6õ7ZÇwm„о“9ªî!ãã_Rl¼´Go;#ïC@ùR^Dƒ“ÿ6EqÈñ[Ð ‘oÇjeò_§µš¯“FR +:’Fu? ïùn»)^I¿spV“ÁRÄüÄ¢é‰Óß9 7LKÜHòn|Cæ4ĸ¡qû ðAÞÔZÞËÚîT_¬)ô‹7�”5æäëÆdîŠ!�$¨¤VDŠ Ç”AH`# ŠÆÄâáxÞ==4 @@F$& $* +„aq8 +‹ÂÁpP +âXÆP—’ÍP~�³üÜèò¹ë¨r{ÿçÒ·Ë]G•Ûû?—¾]î:ªÜÞÿ¹ôír×QåöþÏE¿ê"²•^Ïì|Öôà³Ñ Ÿ�|Öée¾ kn�[ÓOÖª~³VèÏÒ ºúÎ$§Ž½pJ|Á¤ß1‡¶÷Œ'Ææ|b³~QcêÎä+�¯BÒÇmÁXqr›oŸÉõ=Fç’ɋ۳×m/Îè|ûÝ2ý5[Gôš‰@1¦'d¿N|¡=úóvÅî¿H`ôyVTëÖ€Òíºt¢ ¥Ã»D-—–âF³r }¯«?©HV�¾[EݼÕÌ­ÂÈ­£a—ÀôïO »nÐÊ.Æ2´²ËþçÏöÏY'ýÖwèI’¡Ó¥r«®®aä]8=¾�þó¤¿Г~DÜ]üÁ‰.yÀ°Ë™®ªë£q�.ьݰö¦ßÚ©h]¦ÖUU´.›ð¬®|žu‚]ÉÛiýßéE×ãè%O×­µŸ`q°W¢j‘àp棚¢M"½!×ÅËàäç†ôß~n!5tnÈùò +5Tö†ªüXY‡ž4é§Œ[Ú€�† A[|årÒ‹Ç~)ãôTBÇöŽVi„BMÄ-)è�'³7öûrn{‰Õ´«¥½Ž>¡$[cÏ/FÕ®¨fOZ§œ.5Æÿ ö¸ls÷†°6RáØ|tö¤Û_fi;¼‚b�[#Pbà©MŠ|ZA·‘ß§awÈ�;ña6“e ÿ"çÊ´*€€+2ìŒq –‰5-Â"'QÒº«0 e–FQêmB d’|(Èéí[Ùqƒ²šÕÅrcŸ"¿lDðÌN¦7U­5Žƒ#eþŒ,ö”7Bš ÀE�‚fÖ„M¦!A†òØè²‰3˜æ÷ D¦ß |.DŸO¥Ã<_öÎWPˆÛ]·ÕÛÄG—ÉAƒ û/ܶ+ö¦ÓèéºFg~ÿ&ÔõÏ0÷xF?ž°æ£Ö�»PVä?u1C6#NÕ'‘+mìz"C |bg„ÞâSù³¢…¶Ôë?Ö—Ò˜� ö<œ°ˆ7E1«µ»4Åó§©ñ(Gèß_9&|!%E(#š×lR¡8"qrm»<ô«2¸lxÕÿ*! ÿ ®ÿs=\#Y? £j.F”|Ƴ_fwÏJ`÷~WL¼ƒGÖÓoéS¾ŽKUšg}Çó•¡ý1^Ön¤Ñ°ËÌè.šþ¥âr¤bTü,¹|,Æ)í…€àQt³ê@\š=c$ÇTu©“"Àñi ¸.–Œq؆§0s®¤ƒ5çþеŠþ¯aîtæB‡DcŒ‘Ób ЭOèÛ8!’˜rWWˆ€Ãý)*±æ@¡4>=†$ä;d›(OJ‡ ÊŽòË tš«8e¥Q·Må)³´‡¹j‘–›+—�3�ô¨\Fò I)0Ù:øžgÞ�K5ýÍâ?iʰÅýmôÎ.ÓϋĒÒ&ÏȲvªkãCbˆõ³s“ ‰à +—¿ñ«ÜZ¢˜Ü6‚�¾È' nérW´ÈY“2ÆÏ¥)ˆÕöÅŸ¦sR“ÛiÞÇ¿wÓàÎ$âƒ7çW L!É9ö¼ÿ0;Œ.t¾G´EÀžÌ¬ñcdÍÊ>2Þ±³Eˆç>ÝÐcå¤)„“Î�'w½VR†F#3³¤²÷æÂA2ÙDZiÌÞgDÄ\©&˜ËÈ`±]@Cö¢u¨¨ {gÐ"ŽÝ¨ ˆ^U©ˆAôÎ�Ó ­Ø..ˆí±r£-¶ùükX¾½Ê†í¹Ö$%”<8Ì¡ŽL‘ÍŒíÁ÷‰¯�Yó/_´6Ð6uÑ»¹ñ$5OŒbšIJ3¾ÔvƲo®6ffäËì�zóÍê°éCh,~9–Nç(:’ÙãÔ&Ñï°Ža|Ýy¶”¦×L×GÍ�Gt]Ä ®§Í¼Ùyì*Û ó°BþB„º*Ú?¿� 9”tñbÞpÑî m5§í;øô|ìú€`Ú$�§ô·±MÎÔ)÷õ–Ñ0°/Ç‘$¾I2µåF«3Ð(£ÄþÚ~«Â¬eôñ¹»r ¿ ùF(¿!Ì*–ïZÌŽÍh‹¼Ã)Lã¡–_ £p)øhR£4Ÿ‘¼E1œ(Ó±X±´PüM:Ò<ùé[4âà¦ùFׂ]I¬ò vË®¸bxAñMz‡spŠ8´Û±ª>K�Ÿ!Ë2Èjç÷x��|ð:Zß*ÑG�·¡I<5T€¹Vh¦D½#ê¤Wöž^„m˜ß¥´º¯­»?h³€€`Í@-â«Ã¾]™r‚ <›½¡b2FøEJó§#®ÊÜÚüäñ¡Áò“1li;à"6oóÂY´]Ižxnoåí$­#¢o¡ÅB®`9Ñ^ªïXAÏ`Èmê¶Š÷ÿä “fÀŠä¯[.o5 v[™Ávß©ðç/ßNþ3ÿ�ÌØFÊÔ…[=È#0óåU½´+MÅ<ÙÏ|›²Z´÷\{? +W:F‰¿;dϲdT“ßÓ"o+ãïf—�ð‰*÷6ò³DbÿÌ +XßÅLp¡ºÒøçvr2O4}ÊAÖek5Ö‡@z�¹¨ÞÇGʼnŒBoéd +ÔÚÞZA¼½ú¶…õ£ \©�˜3jß_ø¤�¯žôÓÅ9".¬l~ÖLŒþæÁîFVv ª21^|^ œìHý*ÎëŒîàî4p}ñs6XVÏ€ÕØ´:æ2Ú¼×±ÙC{~4!ÝvºŒìËVjÚ:hÃ&ÆÂãìÁê­Dó\9-T à4±®]”™‹L™`7Vª©y†D¬Ü—ú JX&¯”Jª�˜Onö§‘b¤:ÚÔŒ§» ŽådÊeI/¡M)‰²Ãéi1WÀUÓê RZ� ’ЪÂä³ìrÏS”!˜„$¸ë‡de‚˜m*Âp¤�:9ŠöÀ‰ Rÿ1†ß­x‰]¦µ-K¸îRoÀežý1•J+ó€ƒ Ñ'Ÿð¢"ÝɃ›l¼6JßbØlÉ(%ŽI=âò(úÚg¡Å„n21F§­%? -‚1æ>rå‚YZ’Y#}ÿJ#ÁMa(é +ŠtYϰ5�‡¶¯ +²3ae¨á£2™P#!ÌÞ[j{àÍRP†¾ÃËÍauëòã>™áñÎ¥T�Áÿ•kc�Ä—¿Æ m¥q�˜Œ³úe¬»qۓį$æR”žtG_qê79AiÊÎ)+‘á Ðéïa4±Š3 ¬Ë +ˆE¦�±å¾ËPó"#I°Z®Z‘wgЀ¦Žè™èŒgÇ‘u¶µ�w¬eЬ0=^€ÙÂþ¬pYµ€àN?Wy‹^JâÁ'‚NN•�hÈÎù“uÝ�ôXL+Ö Ùúû9QÛ‹Âe4 «!…VÁ,BùýEÁäëpª#Þ`ËšH¯'_ZCø°al§ú¨ÛbQ$«“ÌþµæÛç…Gf] 6oA<Ÿáú£@8üØä¨Ds£@ÅõÊzáÀ�{8ù«ŽÚ†·Ìißùa6/`ƒÀ0²“×*ž +S*Ö ;SÐàìRCËþÝ 5£|àúO·ò­ÂÛßU+iø¼°y®�>€éÁ�ÆJ�O +ýÞ ™#6|ʤ€,ø¸ NÜöù¦¶­:”æðVÏÝÐmîxCTGîvÔœ4S;ݽ¶Já@t÷¢à={›œI¹Ð’²†¹‘&Ý}´¬T ¡½Ìà}Þ„u—��ién‘ùú£ÜýÑT…’8¯»ŸL2Xš8¹ +êßS\@gVÐݼÀ{Ô'õÄÝx²«VrwP\Ä0ã�ݨÞÚMq‰lv?Ã"s„6;ß—éî x�n% –vö¾hûbùXž•gþ"‘ÚLm[]]#È.·e'݃3lÖq&ÿ·sí“^×ÁìàôŠ£'Üë`¾õ½ûoË‹@zms”#LÞo�xx§à–¨pź¹â¸§#$8/S¯µ]VB|5x(PÔ6Ü~¥Šêh»üp»;j¨�‡¥¶­Àá˜{ßì€É§Rb‡lÓ×3i›%Æ&ȉ3ÑÞ2ȶ6×±uŸ”�Ò#ëË~Äþ`tÍá°'çñÉ4{·6"Ц$Aöc¦Å{�=!ƒ}‘[ÜõwuœDó“ ^ÖaGܘÀËûÜ‹5º‹TdgDÍÊÂ)B°˜ NAGJ‡ªšXiæ-42KãXrH‹m€¶«þºIl[ð,ï;²W�-¢-™i˜ÍMNãµ¥Œ-~œÙ7�7ë‹'üç‰N¼À¡šO[=ÈbžôûGqˆ±ìQt{LiŽ+ù�õߌá�W áÏÂ|ØU,­dBb"5‰6Nigæú0A’Q*ÄÚÐ|]„XHУ]�_½¿æ+fêóEαŸpô¤ã+­âžH¶¢ŽjíæìHB°xÁóÍh~± ©ƒ±o&k™;ŸOäkÈ.ÿ(×buM�×{F$;ò�uM?„Ž#Úà¯%vý~:ᙩÒb†�¡7OGÒIÕ–kÍ4xë¥tJ£![ò§£”ZT7xÕ›l³7ØZ?þàÄ M^\´$:À<AËʾ¤⚆¤ëi¯�"X*6�P#1$ûÇïÿ~z•âv¿”Ò„ûíV¦o‹Éx2@˜‰ƒX.褨³êRNµ‹fN]úÛcm"]ŽòÉþ`ûÛÎ ´)¸àjÕ®;³Âˆ1œVÛÇ-¯5œŽ!nµ|í:¶a–›²KÃܽ ˜:†lÞ¨‡Ùël‚°V†ë•QÎH:¹!×v§Xb)B±d‚º™6#š:Ÿ ôOapÚOHŠÐ»}ž1ºl4GúÄþ}¤á{Ò¨¡½âD =αö“.1}ëÈÖÕ~^nàÅ:�º +¤Ç2æ*!‚±Fu›—)Y€m)}6;$3‡›ŽÛïQäˆaM;_us·žYöÇAç*áœüÀ)D¾k¡ƒÆ)A?ÖÉ @€g2•OÈçAC$ô’ZJé•c0•�È)}én³)"(ŒZæüIxYÈ„Ät%ÂÜõ " ¬ÉϽý“¤íkoHPö?Ú¶û딘¯¦‰Ûb ëD’,Ó4¤²¿v}Š×I+÷dkuáœþlƒÍvuqSÝVSZ×-Š [’j÷¡buK“ÖÏ 6áÕdi%²ëU«‡@¨ ¬-¹¦Ý òéÙ9hÇ¡ŽÕOŽ<ë5`É:ù=±”îýÄ<{祾×NjÃp[sW»¶�¾…Ü·Èš¬{ÊJX7!Ùî’<Ǿ¿3ô3+è�CºhÍ€CŠd.[s¶Kþïo_6ÜŸZ«ržmíß—ÃŽ]‚sâÉ™*‡­™È݃ù^6Ö??ø8àdbúôU™6ÞÁß÷:\ÆÃŠ‹*�˜[Pêy ÷^?Ÿ¡XíLS âÚÇ+´O{øÚDWd¿Äkå} �ì+ÿi#OXc} ­+m,I ©œ¸-Û#ï|“Ú ÖZÃkdIˆ}<‰Ù‹uÐÁa7œ>鞆~…ds…ÉÔPî<ã +3;�À{>œ�Âê�}ÅŸ†n0ϦM¤]1ÒßžjäïÞEHÚ.w:/Hu´øñpªùÐ%;£Ãú¸¼9;¹�âT5¨Fðعª27¼úpín˜ÝÕs ÎK¹Ë 6Ä @•þs‹g½ dC‚vCL´uXöM¼6Œ ,Ö—J9´Ç¤¦,‘±¡Õ傱ƒÒ—�<-Ó*ÙµÄ:PªZ–qþ?ô¬‘¤8%è�“D�»„[ @"éü�üìb +5o�Ó‘zÁ–ü…Œ@ï£Ð«yc€G΢3ŒèͨcËøâ³]ãåB×7ì éùp�kUWUŒæøý ûsÍpK+¦X‹òÁ5µŒ}£6 >â'lE¸… ¿ ¦¼y*Ð5gßs6>—q|�‘jÖ�·ÔÿÄl8íb2¡ vãÆè²äùcþŽï~»â jíCÖf&ª{= ŌǩôX,À@LÞ|ÏÚ2¢k²¡õëC&…>Ù\%˜çˆ3_á»TkÎ÷D¥ ¹#™KÖOJ;Ýnäp$*1Î6 b68¤¼À'×Ȉâ)àã¾µ·&9µ‹Hó "žˆ'IÑÜË.â dnÔÙO…”’àÐŒ‡È¼¦®H§��E¯k Ì¿;è[ˆK¥ +fd’×E\ûìy‹—)‚¦æŸ˜!:xü]a�SÀä¥@êñv×±"¡e¯Ú(àå�Ÿ¬%Ñ ó� +U, *Ñ&ŠËÇ÷œb/cš 3d/Œl¼J´šl;Ú††ŒŽPÒˆ–8'Úhò3 QžLF33i®ZÒ„Á|`© -eô0*ƒ"´¶yz¦$[‹bK#À“³œÎzIê(B˜˜}=sòÄP‡jرöev“®£,8¦¬¤´èdf‰C®©Ž‰·|Ð�Á­”v¥�~N2Þ³fBqö‹^¬ø;‰âÏK¢{$3ééêd_ª ¶D¼Œ8ÕúTü`ýµžÏŒ‘³´‹È<ðª1�6ÆÁRì¸Í Ádè[6$=škÜŠ5‘oÅø°C¯/ëæo¿sé?iãÉN£ŠaGli$M99ªñ$I$¶Û�ßÇ(>�½dÀb¯¨BE$ ÙpÉc=ƒÞÆSáÅ<>žÊ½2ôÉØøãIr'‚ %Öi£ñ´@æÛÀ2xÊ®¶P5A"Zö®ò㩸 +¾OUK(H¡“Æ—?–B�',_’'Òm®àKž<•ÐÿA#` áb±NÉ„7ežls¿ÓÞO‹Ð‰Ñ‡’æ‘/˜®åÙĽ[yÌx5¤lÕÚ’²PÜmAcòe�<ª|I¦OÁQš�ÙCFNåa '¦¼$ñ‡€-½ ��?äu§N¹¯�;sÒj][¬£æ-NÎoÝ=çb �@â«ÓŽYöÖp�Ä”™1«ÛËK{v‘€€-J�Ç €±CÉÇ1Ä|”©¤9ß'5àpv¨«ö�Ôù:ó¢e÷•ªfê2üGq=eKWª*81�º¼¨%>.¯¼€üâÁgÈP4,#?�ÃSñJÔ¨îõ¼E!~Ò¼ëd;rÞà�‡v¾ÙŽ¹Ø +äz�g€î�Û}D즃¦X £ašyï8žòž .޺ϖ&ÜsóÈ� +ºd‚GzÏvI”òh/$ö7AC™Þ̼Ú{ñ·±³Ñí’p‘,*^,aî¶µ³ÕNíH€öãHÕnvwpLË'NÃV½Ü½‚{z½r*ÉZ¼PžJ YÓ?—³o/ói¥¤öŠ¿H�Õ_pK°Ì,‘l«ºÒi‹Öð6e† ‹Ùàž•"ÒrˆôßòG]Ìûy<-Èɱ^¸,ð(¨¹ÂÉܣضNvy 8‰³>iíðœ JgÓfS!ÙB¨›_0(a‡òœL!n^göµp8¹xuƒÉ§ƒ8 ü·hY%Âýù@æÊ€çðƒïÁ;Åù\¤ª‰À €\Úç�ÐóˆÈ˜˜þŠõPéS÷*³r…ýií¡Œ`X=Á#¡¯Qˆÿ³àì�£˜ß{Ë%Åš”,¾½Ì~rÂ�ňqÎ5Ì‘pŒÑ,÷¤Ú�D]”\ýì5«]NÃhu@‡ˆ]œ÷¤¨7D-_ÇB +pžßzK|Ó“ªQéO%W¸bÖš›°m¬éΗ17�úÍ•_ÿö©�>Óü[˜aßèß³%“žÅ6KMÿžÿ!Å¿]6ŸpX!qo©@g=þõ„+|Á˜bnR„q»}PÏÁ`ÎÜ„R£g›=ãß÷'ñM(ië_5]%T{ «ÊoR†Õ¿ãþÑ¥òzâßRI„ÈHÖ� +�U毻x¥û뉘g*�§þ­´ÌÙú/æ�5ô¯€#Ä¢ÙÝãß?¸¸D•§ñ/.‡ éZÿ*ZÚÏôC þõØ»‹ïg5ü›-¡°�þEÑ_޼ÿß*HÃËHÿ·0H97¹�i.Gô¾âÍRãã:™m&N‘/õoƒ˜,1cpîø7I!iÕ¿PªÁl¯ š”»Z1V·”d poÙª©Ú3Ö[nãs õßÊ‘èÉï +3µävÍ^þr“xfá6aß×>ŠyS0* W*MÅxb3SÒ¶šzÞÊN˜Ñ��Š=®�™‰ªü´0„µkF:¬.ØÌבúœÔ¸ æé,ÆOkª{�rÛ–TðÌù¼CÆñÅ��ÚSæ˜1YðUȼÅò懡b6çÙÊó6×¥^ìÖNì:Ÿƒwï!¾—ÍêM *¾RïÚþb2Ô«·Ô›³&âƒfYH¡F†pñÇñ§Ô‹j裿‡zy®lˆ6žê�¼0x—ß> ©iàŽœL¹¤€uÁÁ>©7ÝÄ`q=h Ÿ)þÐ:Žzí­z�¦LULrEæ¸~QˆµœiYÒ‰*è·äOV%7�0¾ŽAî±Sƒ«l†¸¼ž”‹U¶ÙŠ¡÷·/Q[õdü�ÄyYŸ(i— VÄškeÒ +Å-‡Ò«"'EZ­ ˆ#lW±hùv°ÃDP'7s E΀ÅÉX=0üƒ¶ˆâãÉÒW§8^˜CHˆ 1åŠ#iÿ5²aA*Žkw̘wŽ¡&±@F«Ð{Ï "�2Öõ �ÂPƒX +Pó|(foyÇ4e6RMGü‚ ¾(Û3ó +ÔóÅÚW„¤O†¼+»�åÇ.I¹àÜÏ‹aOþ¥D��õ²oIœ:8j¶ÜÂÊ_9.;&ƒôDs†&Ë´"PÍ+ý(÷Ë�U“fJgš*†¢ÿ Ò¦‰]07™½‰Æ#×^zÐl) xœ^BѪ8ˈ½’ñ¨~ÍËŒÉÕKQ¨ä<㲪Wuªâ'£¶‡Öª³›` b!&¶‰¤¨j®tªUb2w¾˜z^xð„FÕª—�ô2@Ï*µë¤P«„þ8_¨Ì’'ò¯^ 3g^V½JÆ”�JÎÕ[»ˆ¤ä¶„•¸zw�dè\ÕÛ4ê-Œ�fX +A®Ê;�ÍŽdáŸd¤g:_(�:«ºà±HðÏ)ãÖ`çWø¥ÂÂû}èýØd¼Yo@O½oa�5»øøÍ œx))òuA¥æÐÜX¹ìÖ4jŠ·�–´i“ +lZÈA„”Ãr˾W˜-ˆ2D£€ë†Dœ2-E%EÂJxéŽ+ø¥r)ŠVR“Þ¤�@>�õ’ª¨Hˆ–Ñl@½ph,|ùÖßßg�…sA!FŒ*®õ'ï�˜Xt„J%_ë¿y…=˜IóS—¯ RY/ÒdÔHð…DáÏ´ï‰ô(äÔºäh@? ¤Y<$I`Dž¿�fCÖ1åWÚ&h/hBßä[¿ÇY3ˈÃïîïXQ ‡\ýŒò|*hp³†õ~lÜY±%„Š —û^¹Ì%_U»fStбû½»iTTØ™k¾»ÉÃ{}JvTA:ÒÇ¿»Üµs í]êÝQÚµ"r(Ž'~åJ…QiÎ#ÞE&àÆÛÇ»»HÿCBv2»{ú»ï PM‰½ŠZõîÊ1 Ö�ÓNñnµð,GôaL﮵«j3ÈwW-+ŸåÖ‘°ˆS(âp1Rj_ô� ¥ôÆ7—{é0Ð á·ÆÑ·¯©Áñ‡ŸNŸ‚±˜”C€ ùxè%7¾¿CNXèLéF)Á�L¬¬Ö}lZ½ü.õä̛صÎüÝÑ\´Í r^Gqòu�”ÜÆ‚Ï5¨@ͺÒ_Êì«ñ¤1ÄïL0—ÔË“Câ"?ß”>ûñ�ŠòT‹Ñ€H¨ã?Ë ssÙJ1Ëß�N-Î0JB -0òK Ýž=C…’ÊWbrG [IkÁ@ØR?Ò(i%ÅÒ³}�þªŒÑH’äçÅW¯/²*'±×fœýPÈ&71ê:¥”RJiÊ¢É,šÚ‚'Ø õ<8¿ + ë„‰à 5ÆàSÅ +P'@Ø1]¬PÀ‹—”«yãtGOX|q†ùa(Ñ$J•&IŠÉ£E‰ ùè�h€'†À3N¿.È"¥É#I¬`ƒFLÁÅk ZÄè$I“&Q¢D Ò#F‹ýÁqp€ >T(€7¸P‚FËÒ“*\0P3(Ä`'ˆ$P3)ĤJ•2È!B�êpã /®PBˆšÚ€ b¸T�¤äH§q#çŽ'²co4"$Ñ|ÜñÄ]PaÄj`aM™åEHÀ ?,ÀŠ d “!*$¨7Ì @�šL©ÌyÀ&u �ļ@ã"Á‰IôÇÂà'Ä�ƒK`†Þ¸£Cƒò(R!HÚÈ 4‘Eƒ0z$i%?òˆC�-bö -.°†z :¤(�AzȱŠ-Æà@%It"È¢FK zS…g†z˜Nîdºtyô¨Ke´Q‡ �@Pm”ÑœD‰à aJÀ|Êhã� AÚ(ƒÏ `B¦Õ¼y⡈)!dŠ"xxz£¦É@±R�é4oæðP„|úøùóÇO>RÁÜ7izLeJ5†Ó¸™“‡)¸è㇎@…-riÒ"D…Ñá§R‘gŽ›4<¦ªÂe £qㄇˆ(¶ ƒ�9 +¤R J@i!@s°AÆQ�ÇÉ Ã¥ÊÒ*\Ä,äÜ + ŒÁ9ôˆ¢F�2H�980† âŽЬ.Tž,QÙ‚�žI!ÎzœÐB 5âÈÃ�CŠA’$ #E‡åÇbhᄞâ¤pF1ØB% 'S¶„I3(4ép&"`� À�G€ RÈ#I%�>ð€caD€‰èЄ‚™ ³eŠ&IŒÂÄÉ-`ð`°„W|‘ìÁ‰ +qiÒ¤HŽ +Äv€ �/®P";0˜ð‚Ñ2ÅI_¬ƒ\À$@3ܨCP!D‹A’D‰R¥J%(%J’ 5" ö�fPÀH�à %t`_*�Òd #H– ¢dñ²Ê¬a¡†AE}üÐhÐ!EŒEšD©�) +„ :ü”ÑFøPC k6Xd‰‚Z‚¤‘!( +®X��«y3Ïž'´C 8îàã�D„4‚$iÒ$I�"ˆ¡>ð€C 1´€bOž9oÔx\¡ÅEŒ‚Ц)!”¸Â‹3ܨ#¡CŠ9ªT©R¥J•*Ub¤(�B‚Bà�3¾€ÀBè C›3;¦ª…©È‘$KN¨h s”à P|Èà@xðñG¢EŒE’4‰%J“$EzÔhQ"C}ä!}º¨âˆpx��f •!C&h"%ËëC€3ÏND 4d¬‡{D�EŒ=‚I’$I“(M’$IR$H�1Z$È¡B{ØÇ}º° Øijs†Ét¹BjÉ‘"D†,=¡¢Œq0 3ä¢ x‘?rܱ!@)"„Q#G� A‚IR$H� =rÔˆQ!ŠRhxÈц^`áÄhh�„.Ì*O–”)Bd“&R°X�A£iC� …,€Fæ¸c�A†D!…0bÔ¨‘£GŽ5bĨB ˆ¡A{à1GÐc‹)ŽÂNS +i<å%‹”&L”0A©²%Ìq0 +sv‚Vp!F�ÃŽ@}2t‘ ƒ(Z´hÑ"B-Z´HÑ ‚ +ÄP¡>Ù!GÒ¸Ÿ$q€;O,�ÐbÀÅ +&%HŠâDJ/0&¼Pz–h1ÐðGyêc r(�@!B„("DˆÈ!@ ‘€P‚ò¨Ž6и@`bO6à„3��—,K˜ TÙFƒ2jRˆ‡ìaÂ|,��5< Gð´} D¨ +*T¨¡Aƒúàc@x„@¬aF|Ð>ÐiR!„ , —*PPHÁÒELv°æ� u|س„ð‚ 4Øðt„À<òÐP @� +�yàaGè€Ãl¤ÑÇ‹-À°Îè °Hq²d‰¦'S*ð’Á~@œ8u|"‰)°èÂ}ÎPÃ� €#Ž9æ ãÏŸ?êøóçÏ:æ˜#8@à†5Îèc�.°˜"‰=>Ø‘³B f8u�*P˜–$Y‚¢ Ê–/©6Sœ8tx8ÀNX‘E_ˆQ†il` °áÇ�Ÿ6üøñÃÖØ@f”!Æ]da…G :qV(„^`¶X¡  &M¢\áfµÞ4Ùpˆ=H}ú�1†a|A�.´€@O ±ˆ;64Á)× —+Qœ,)Ab„È�!KN¤\©Â¬þ`� +/<ÙáÁ{ŽX +*pE´�À\ðáÇO|øðáÃÅÐ"W8€ +(–8b�x°óF0Ó„©°Hy¤‰‘"D†L°„é‰,˜µ„p M4ØÉóƒ{Œ@B &œ€" +)¤˜B +)¢€Â &”@ˆ=Bü�Ç M,œ‚¼ÂTH¸|É Ëœ!…šžpÐ!�@q=CADE$ ˆ"ˆ b=òè€ÃSS )�pfM�á‚eJ"C† y"åÊ– Æw�†„6+¼ Üp°£Ãwðäá¡ò๳ƒvp¨aŽ /¬Ð†„4´�¹`Ë)O˜–$9b„‘!09‰R¥‚.a2ÀîàŒlÚ¼iášâÈqš3çi†§9sœäÄi‚á…Þ´a#™3c�+Qž$Y²Ô„*X¸xÁ ƒã2œQ³¦PHA7nÞ¼yçÍ›7nܨ� +&”°FÍÊð¥0ð  +œ0-Ir‰’%)U²pñ†Œ¸¾A˜9ƒMš4jBP“& 4gÌ|ÐÁ¾¨™0^¸d©"J“%%H”0arEŠ•,[º\fLË0u™Û›y5ÑVcÂ\ÐeK+R 8ab¢¤ˆ$I–0A9�"…Ê• +¶T\ðL ÄŒ3†Ì˜1cÄ`Ì— ,¨¶Tp…Š(NPKK’ Y²ÄÔä R¨T¹’¥-[¶páRu©¸pÙ²EKY®T¡"…‚'M˜––$ArÄH"C† ™ ‰&K¨&N PEÊ”)T¨T©b¥J*T¦L‘…(Nš –˜(Ibä$J–0YbB¡š8qâäÉ“'Pž.ïKÝïRÆÄCÆtD±ÁWu»[ó_l‰ªSýÛ¦ª×5ëõ«cœp5§;6Ê©z³×ç…Ëw{�˜Žê§·+Ï ½{VÈmا—K/Sl¸ÚÑOýü´mí¥áõjO'4>Tç{?U”S.¶LUËÿ÷·Ü´ræÓ½Õ|l|¨ÿ«ÝõP}­)ªNµÚ–¾œõO‘Ù—šbž1,´@Ç©é Ê©éKÓT�¦/;<Ñ™c'Κ2ežtˆSƒ›'l`³Áaz§¹é>'ÆÙaNœ<)Љc쌰F1-yílè§è IÄ2eú»Q9ñÐòä Â“œ2ežtðáMœ:;äp-صùRÀOxì<¡)Sæ‰ vâàqzR¡Lâ˜#;”“µ'¾š5'nçâJU§åKD{^›X½ÿ*�ª[ÝœÕÐpõ"ÊIýÑ4saö+ûŸ³.UÖÍ×Ì3[[Vã\ª‰¢óî׋7Qu*ÍõUG4»Twr9qÐé‰ç˜§\ÙSª©)9Oq>ešÚÝ.çUŽö sæ|§ð©?åĬ©¶ä¤ä¼>Éy Œ)Bdi©I“&M’ 9²d‰©‰“'PªT�òÄI¦¥%LMž@‰2¥Š,U— +‹•*S¢@yÒ„‰I%L˜š@‰2Å +-\ºx¹@Œ1„s�—.\´`±2% +”&LL”ajE +•+Z*/`0 “Ò€Û7ñ4H‘ÁŒ—JË*R 4aZ’‰‘"DPO¢TÁ²¥Ë1)Ó~<ø„3jÔœá8øVK‰ùÒe –*Qž  L¹²Å‚0dL½3iD �Í mÚœÀ†Ò˜éÀÕÈ„±`Ë•)Pš,-Ir$K†ÌñfÔ�€‚›€d�!†`7(� ÆÌ|dÀTYªDqbE‹1,gÖœð1È™á†:9@9Ô¹a91àÍ kÎp°ˆñ¢ÅŠ#dðͬAaœl°s§‡ ôì!‚ˆ"ŠØ£Bà‡îرÁ †PXcæ‘ ˜”r�Æ80<ѹãCz°€$–hâ (¢�BŠ'šX"‰$@O>Ü¡óÒp )0\®Háf±"´qÁ‰ ô‘„SXñ,²Ðb‹-´È‹X1…I¡Y<`Š&ŽÐCЃ›Ìð³ÅÊ�%((U´\�âHxÓtCž Œ`‚ +,¸¨@dd ¨¡†ÐÈaT€ ,¨`ˆ òÜЇ3œú¢¥ +¨%IŒdñBF=á� tz@Q\Áç‹1ÌØøÀqÈ1tüùóçsÈÇè0cŒ/ø\è�Ž pFð@Éx©`Ê&%Tb�Ü4ÑÀJT¡EÆ8c 7Þ˜£Ü‘‡€ +�yÜ!‚:æxÃ�5ΣZT¡Ä #ƒ›5 ˜êJ”&L’|š60ÜÐÃKX±PÃ�8ê¸CA#èÃ�A„ ò£�ÒãŽ:âpC €±…K 1bHAÍkfK Ȭ\ !”°‚‹0Î`ã�?xâcP¡? :dè�Bƒø„ÇŸ7Ø8# . „ž<5¸`LÆ‚,RœPÙæ8XÇIA QÅaœÑF"Ä¡?!J4!ƒ$BtèB|Am U0@8ÁYÃÁ…ÙR +Ó�+]Èð` C#¢ÐŒ3Ú�ÃA~üq(‘¢E„¨Q£FŽ5bT!‹%:ô‡‚î�£�3ÀÐB +#~ C4��X¤4™¢å‹m°f…'µ5wž£aÞê]æf¿ë²öm~¿¥¦l¨ýŽæ¶üÔ¹1ßÙ}u*;r³#¯ì×oo>çýu§ÆŒ¦Z÷Fõ_æºÏ§·Î·Ë[_ï±s[;óµÕùoe+ãu¢êcç{+›¿¥á²ÖÌmÕõ¬•f:"÷æ¯f­z“ ÛÌõP×ÏÙ1UyŸž3£ewcòž+¶ª^ûú?ö:VÓýí4ÖeEþu[ÇÝt^»K\=LùjZö.Þ{?_÷öv�™þºœÆw½v 5Ÿ×ì½ý yÍ»WQh”Õ‘O[×2W~îeîïºÕ +SÏÍ–>®ió6þzÕ¼üoÏT=öµW6öD¼Åª¸�Ìþmkuóÿ%óÚ®ûâý.þíg[¨ŠrZ=çÇäVï·]§Z9ú2æ›ëû­O­¸“;íÓ^qªu&j2¯L-ž¦Ví¦ÚûfÞ¬U¿{šž1ï:ËT^›™¯�!ï.´ÞfwG­ÔtYw¥eª­×Þ}1v›ù#ïÒõEå´ö]ÓT­�o±­cþ½Ý.D­Ö¼•ûò:Ô|5¼OÝËdTo7s\ÿîªj§Õ6²ù^>ëºÓuÍ̽Vu^yùˆ~¬Z¾­ù{o»&·û²Ó*™“½ßÜœuû¸M mõáª-×·tßþŘ©ªÝ/ÓNÙwùgõë¨Ú麘žøïïÍËØë” oëq6& +M.®/]UGíÞ{=\¾Zõöªc¶úöë;£nŸ.eeåÔÎ\ÛZçüVº"j6Õ�±_ªúîîãÏÇFf}ÛõéìÜnÉzk�Sÿ˜÷ùðmÝu—©ê¸ñÔôûQNún^"63÷jÍÊÏÕ¹_W=ïkZjšYû/Z/U^‹†ù¾0ù–ññU½›ÕgV|îÞÛ¯¿ËŸ÷ׯy=æÞûâ9öf{&çÚß·d¼õ_Y)ª÷>¦*¶WVüË]½ßL^úë½ÙÇø«/ÿ›½Û9¨PPóåË—/¨'âèÐC5Ü©žvÈÏ�§h¨žhˆ£Ãž8xr°c'NõÄCœ;4 vx¢cCœÞ¤RlìØiúÒô¥éKÓ—:M_š¾°ákúÒôÅ©éKÓ—¦/ˆü‡ª¨úxýú¬|èzv¦º‹Õ S¿q×Ws÷ú÷n!¾w#î±1óüeÜ]Ä]^}ã÷C7ë³OLdcîT7G·[¸¹oÆÜßæy¹Ü›fÖj·�ÜíÏ ó6í[qï¹]Ù6}×6Ûx{e»ë3öÚ:N3¼ûlCäþþç:uêÔAm?ÅvS½STõ½LÜ]¬Zñ®é›kåíçú~¹Êί¸k÷v ÑTí¯}¹¸5ùlíëí*6¿¢Yžæ9f¯v½lu>\ìj}¬®Šèέ†ºz}¿ÐÕ3OÙºV}gè¼øv¾yï¿æº×ÈzmŒÍÿ×¹ìÑÿQ•¹™S_×ýõÞºþÒVÿþ¾Þ…~¦ü¸ÿ [óÏ.ŸÝ=q­Ñôr=/w®ýôó]ÍŠB󜾆ýïÜï½–¹O—ß–Õ²­ù^Ï»÷>“ÏV?>{ê¹{þ±ç)úêÿßNçì_ÇZíÿ³÷þ©¹Û2ÖÄÕDû_¼z—šÉzgýç¦Ì�~iîÆº®õù}-÷xÙj…½¨÷ �/-óÎ.±�}}q­ê¾±¹9wž÷ÝJÍ5Cì³Åyûú¦Zù­qc¯ßµ.OU¾<´äµËũާí¶&æñ­w«ë²kUkö»…ÊÊËë®ïù–­£æß9ãzÔª÷y{?ÿœ—•{q¹®⥹ñ²úÞâCíÿÓÄ•«§½÷º”Mñù­{WžV׊yë¶×ÈÌܹдú[ÿìÅø‡ŠË‘ïÿLÙèq~¢Ð$&¯e5dÌo{îWÞµEµM4µ•­ïªÙ¦‹[ݵΪݮ~6U>粯îÞÆ^³w_×;ÿ}ôõ–¨~ˆwˆøÆº²±âÛõç;nDÖEd;¼ÔdtFÕ_fo´ã^éx¶–vK-¯··:MýOÃç[ÈëžêÌ¿oݘ¾.×ï^ ‘_Ññ}õ0yÏ··ÑÎlÙfªÊ³e´GdNöëÕ5×[\¯Ž©ú暎¸™§Øî‹Ê®™ÒîfÕ{ÓëÅš)´µÎTW_ÆYå&æ�¡+ïõòeî\SDõuWït½mUÿÞ¬nM�ó4—s§9⢜ªÆìv\{{»Æfok5«ÖcÞuݶg^Í +±×yõ23uשæ[c›ãñúÌj/í÷—÷3³ÚFd÷]»\祘(§Cö3ÝüNNãÇ4÷L¾>Ïó<[¿¬’=1[÷Þ£6¢µÛ¦â¦®&âšã)n÷®þÝ={çTö¼÷;^üº¸öjh·–Yíÿ’×m¦¥·ê/UÔ\ôÿ[tloGC?ÌÞ•g—¼ë-Ïm™û�q9æ®w¬ÚXÓ;só×—;:ö%{®öë;\žæ�èú¿¿øÔý6ý{ÿòŽ=7;b/FGDvd4G~_Ë­Ìì¯É§�½lk=SoñöWºõb*Þ£[_ï­¢·¯stÏÕuŽ}›Ëï®Ñp™#º)w«/o¬ùwõ»QÓðÓ+¿ÃÄ>µþõLÖµÎΙÚ�‹õîºõ:¹ÍÛ?Õ–6Vÿfè÷ˆýK»ó×°z[Šïî߇ЍcFz, ’$ˆ1Æ�B +ÍXÕ3  < �BQÑDAHª@�™'q1a,b 1„B!„c!¥Õ*—4æ¹ õôÃ$E‡ ™’V&›¢‚Ì€!Ó³�…â¤d=fÃX v¹,â‚Ôó„H¬�~ºñcH ¹òóÌü.­Û„»È"‰îg§8‚¥Ù„Ó^Šh<�×A‹J‹UÄE]{êõz +uePõ:P1¢êUHc£#82DÌ÷Æ�ªí²ïºÓ¨=Hµ\u³öü-lM•dÑœžÅÄé°=~Ó[Xâ”R‹ß8_ÿÑò÷P(žrúÅ}Ô¥ÄmKWK%/Ïœ. �›œ„ù0éû“›°SfdòpÉW‹?)9ùþc/»òE–Ž�êûp탠±…9èõ;ÝÉÕãú³š²*@Q!Ìâ‚ááLIBÄ‚£yHÌ,!�Uºý|6¾ÑI»�ÄÙÍ t +ýªÒ†Jbñš%l•&¬zl‹–鈸R]‘šæâœvð€fà}‘08©Ž>-RɨBlBݦÈ_‚úX9*?ù¾rSP0ЉfG¾lZ®'F…™£BwÔb¦Ó_¢@µ5Ž:|æ�ÎÐBÎbÍhzHgïBà…3�FnÚˆ½ Ô+p¥FÈ’†²àIMÿ¢�Í I¼uÚ9�fEdêß‹ÂÎg“8êìK�ì)MÜW!;ͽðÄ1¬¥x•:{±9˜¯X$äF�µf$ŸRO̤áas¬-Ñø6 € ÙxTyÄRiQ +°o¿n Í÷J&ÒÏ’ÖÊ —6™‰9ëÕ§*ŽØ[±O³°¡ž K›3’fj½þ³>`èÁa%×¼€ÞeýH¿èwUH`CdþËÌÞZ¼H®èxU×)îÍéwÕkd¦—Þ˜˜@…™>$|9Eb(Òu¯Ð ±¸�­j��Áº6w@e|¡“—ПqŒ£ù¡× û2ç„P°0�,ˆØ•7Dè¥6ËÌSqDœszK¬S‚I;ì‹P ý*R)ÿÿqî)4[ÍÞ~%Þa–CÝÁ«}‹t©[@b6V< +OäRŒB¤8Z+a(æo|:ˆ’C*pG®d|‹†ÔQ“qOØ|ŒÍ]ø0G±°…£!s˜ÿÀSg{ÂèÄb’×á«Ts#ÃbZ›Òbšê?ò"Ù¤Þ4]Ý|è|ŠðC"ÂÐI½Šjæ×q€›åþ(rþID—bĺQÇY€À4<9’m7nvX˜^^5D*u]çÈ6t³],ïÙPªÿµ0O¹-çã¹Í³qŠ|  ì¤u�Œž3Õ{`RT?M·Mãy ýí–Ø˜CS/*œ—NŠoÄæÂ‡@[ +­FåJ¸£ù²¾%5¡à›æ2�ðêáe&ÿTU4µj¯ÑfPÊ�¬µÀã¨Ë¥&C ¤|w¢ñOúaUXçÒ„È~ˆSU²ãdŸI£Û¶–Ý +{�ä«üRa�KDÍI±…ÍåE +Hã–×18ƒ%óèi´Hj¡Ë[ß«9 Ü¬2ÉŽÆIêO?f.³n•˜Ú¿s*­F³6¼“öai)–£(£ôqD4 ]-ªø +c úNôÖFîÔ¿˜ ð¡󌗠?Ô–VˆKÈnÌOá�޲›÷ÊCP*l~/âLHx¦µÀ q¶q Ï0å)ö D(gE„7Íò.ò›E£¬Eì�%¹k¼®Î­PÝý/Pìn'Z{»Ø_lÑÍW>zB)n«ž±T€?ÒüøK¨>¸ªÐÄXD6ÈŽÑ«£6I3@¥¨1ªÌ«yëYŽcCãñ…»:/1¥=ÎÓqÝ9Æ_28V¢Oú”ù#åòÝüÑwÅ¿‹êÕU˜áõòÁÄ4!(Fêþ'M·ùÏ·êùµ*Ä‘i† Wùl�¦d¡#Š#Ó-o~V<"wÕ\ÃÃ4O»h�HD>ù©ZŸ D¼Ÿí½Ý:?ES—ÙØ$¢A] ~(t‘æ�Qá»b1e8´Ì&³´½—rkíq^MW}VÓ†Ö–;=¨™í”I±„„ꂹÉ@F¦dhÙL¨ }'²Q3A²Ìá8Eà \¢#�ë éËÐÎ|òcÝß‹Ãvö íS¹ÜœUJKA—ùð~ÔAÓ¬#çšøúTZjôFŽ™sñ…:ËÑŠ;¥¥ŒéŠ*‘–]µ�AmÏ`¢|-¬%ž‰®„Ò’e(“TŠMi/ˆqOy6åiB�[a +°}¡óz!-gÒMÁk‹s­/ÅE讥s¢ŠÇ°…tæ‰õSÅp*½{Àl‚¾´­aÀn®VM˜VCéÞWÛšô�‰Ä}ØÕ3GóZɇ‚éQ•ðvË]XóÞ´¼Š± r `â*bY ¹¤L²Òº4®²ùò‚œÕÿå=!š­´…L- $å©;eâ5˜R—�z’1¶h…RÏ·(�XͳÚf uRIaÌÊ‹"\º Àj<üU¿!‡*TêI­÷wlÝ»�ÄÕÈ…™Eåt\xÃ: Ðjà¥ûÌkÓ‹¦aÃ~Ù¢C¾‚ïôâ?,_‡Ð‹ßL¯?»˜¾ªº¯ÛÌñ›X±Ê¥œ°¯•Bfä𦥇�^´•`ÕÕwí¸tU´»$§ÅD)òT\Jån>&´ X-k�"ã×3mŒÅí[’wzÒñ"º FŒ E³Íf°áÄ©F¸X,×äÈ Cy™³«5 /!�˜Ñã¥Ï¢€Z,+÷†=xÛ‚�Nˆ¹(3æÆŠÝùe pÍ„LpQ6øÜ×¢+v56±ì}wn3F7ÏÚz +»z ¼àLøeŽcÛ»k×S^.•�¨Ù²ØfZ«Sƒá‰a§F0üT5{³5뼂 +P!:mš€‘s‡�kÂAÒÏHnµ«êòÏûIø 9=Ia1f þ¦š]b3Ú“Jÿµºá)ÂU6„�d cÎ0ÿP~Áü«�òêj{áHª**Nq)ǽZàÀ…uãS …f§û +/e©×�ïö¦$»µøZ|dñÙ0Ç‹Â`ÿz^Üpw g[w�²à1ºÏþ±ö8�:Ê8LÄ6‚g¯�ÜñÉQ>ØÐÉuÌryë_ÂnZžž×�šzŒ˜WE0q<·¶‹[ŽšJñ!aV_öQ´Ÿ4!2ð +†¬¿Ü°lI^´”nßàÌ‚Œž#ØÅÎlûû²7ÇOÔRj[¬âö”êï\/•“ ’‘ebÁž�{Ea\ÇØ«¬,ócxÝÞG2dºÄ“›ªº§NÜ—<‘-ÄáòúK÷dhÊ—FbØÒ¢Kà5À´`‡ë +V C?§¸\%÷µ˜#;«“˜÷-ïh4·@ÏÁ´‹-%p¡]í¥Jþ^ÚÿÇòm¶tFŒ‡®)ÅhÏâ¸s¢¤ /˽ÎãúØÓ%(çÒ*kh×ÞQ%'@oފЊ€Â¾Œ—Ü›½¿cz�«©óe–6i•xÊEï#÷Ôõ6Òº*¨C5µ¸˜ÛÆ'±�ÇʼntÕ¼ãŽL€ä©Ó óÁò�Ÿ¯BjÛ tB).kB… +¶ØÝø <‹öšPût}3+wò„”ñ®õ>Ò¯Ÿ*:¿ôÀñHIÜÜa»^Jœª~À»‚–£jÁ¡¯Ö Y žAÒºá#˜ˆ B&gÔ aAI«šKë8†çCtÁ±=.®ºqCþêPÊ8á%…�Tº…¢_³¶ÑÐDšä1Ü ]þpn?ÏÁúUbôÀÂ9ùÄæJ üDk†mI°8ÑCáZ³”©ãN©€°¬‘põ¼C€‹^xÉõ¦ %—îå´©"{ É1á­aért ]§¨p¢,Oä5|ñ]_t¯-o�H.öE’aÊÓ€° üïnÿç×0»Ø¢¬ìʼn-�g|g®¯çø!×kËöÿæ�C¶™yÞkFÒ „aä�´·œkþn yô66œšëͽÍšé³îÓ L5vH^¶ìäûžG„Uš2ʬõl~öÅî/øÇòwïLdɳóÝ`…•m1ª§þl¤–Ê+•v‚´vM㦹â�ä–¯qU Qѳö>À£óây#Bm£mzû=Q¬Uï#S;Ö±‡q-_½÷¼´5tšg¸¿O»Ã}B¹§çˆJàµêá fù-VÁ?—ÕúÝbEüp6žC<«Ö +Ѝ÷DÃd~w$3a‘›úªòãLÚÂþJk¶ê…‚ˆ”èq)�Û:˲¼ypdòìÉ_ Ô(uq0‘Mêà0YÓ´:&ÿø�Á·¢&k#nCdÕ'Üü‹7$¯}8bëSè±´l\Œ¿a +Fxi¨ÍûC×®žºµ0%vÔŸ™‹�hx3ÑPÛùº%Gêz`ƒ“ïi=¦L¡ñÕíÿz‰5ª¡Æþs¹ã Pê­==‘r€Œ“;ãªjÎcEnÁëa]ïçsÙeÀî1aoßܽ“ñ¦sÅ<ƒ +ð{,L69k 35(‚Ö“`±š+®Ÿ¢Ž4ÄR;ñ) l·-á-Ôƒhy7%aÇD¯ô]Ü[«o,� âùn•8ðçÔç[±(¼òþ…‹«úØS@ùl­Ö“YU|0, Ÿ{‹Œ�.DÇ�"¶i¯×lµ¸áÜ'‰3CÙ.$ ‚�ŒÎ�Gµ…àP%§RJ["¸uçÑê(´ù¨#pf¸²‘ޤ4_–¯O_=±,—Ù±l}Ó~;Ù(þ.‚z0&ým¯§S¸Nž·ÕV|¾×yÕ¦yȬ +Œ+Vñ0–«}†‚…0lA|C]pW{èdÔ4C©r'ÛQf©ÅB¡‡'@â¨Í3p›«)i2.J4ÉLªî™‡ Ad¬’3O;èV€¥ª!]6BnHC]f³/ܧtÉr}®-ôEb^Kì&¡u’),Õ³_+@ 8k¦°»ÀÀŸŠÇ­dæn¬þèÍ㈆kNJ-aÛ&SK@kô´)1/ÁÄx`©|…'ßÕ0hÈ,ì×7 ²õÒQl‘¦úK“fmB9O>yí¶‰ÑGø�¤€±ÐÏÝcÒ ¤m�ƒ4M|eC¢È~Z-û1/ÃïWÚŒ¬Ì”-ˆî3_õä »Ó¡LÈÚgMç UшŒ;ý,VùÀøAAÀ´D;¢äò§¤Gp­`Fî;3@PI“*‰frbzETø ¥èº%A™° 2G"áT<ô¯“y\'ã;¹õãèƒÅ×'ÉØÓ‘½=8�žA)zsòRôÎ3Eo¹­n¬0ÁáMÛTè8Œ~Ìä$kîd¥ÂžGÐ�"NÒRÈÕ�ŰÀŸjÆ›¢á ìhúòÖ©ð&CÈÔ¯¨õ¥}Â0»ŒZÞZúòîÊCy( ååÓòŒ§íÈ[ÉŽ¼Þ†îÈëÞã�š¯cr<>Ýã�ä=ö×Zè#Îæ hàð�5E\IñE‚D«H +®ŠäÐYB$'!7m"i ‘m˜ÄÞp˜ëåsZ‚^°ðЭmÓ 5á  +8Êñ2º�€Å;T U ’w¯ÿ±%sV¼‹ŠwèÃ,Þw®ïPŠÅû€Ï½f }îç­ïSks¡ñ®ý3ò®G*C›çœ´“YK�±©gbv^GáXNeËÖ�”q³ÐK@Èàaç_ÂýÛMF#‘pµÙh6×?Ë:YF‰ ³nh®z»! w6‚Ðh“Š÷�Ÿ4¡€ÿYÓÒfÁéRDNÐ >@�KÓ¨]#@èÓ“é't«ób… GE¨ã8ÁAÇ;foÍeía®X3S6§‡Ù( ’.He ç­ +‡L995Y2;%7 PzŠ’7�å€&ëÎ,Ž\Óq›~æ@ :.TËt�ÄaQø߃ì8 DÙ /º’@ì«ü> q‘Ú‡9ƒÇ¨SSÍ¿<‹c úxvñäþNí,h©« qæßÐQ¾v�[1Á�f¸þ£Ù™fp61#o:àD`£í2片õx.4Bã!þk5Ž‘|mþÝQ#mÕ¼|6ôfÜ™æ,P]_‘¤v9£´x3 +�‘1J–Ǻ’X×\;ë3Ù Z‚Jb¢xž·ÞÆ4š„.> endobj xref +0 34 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000047152 00000 n +0000000000 00000 f +0000047203 00000 n +0000000000 00000 f +0000055600 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000055673 00000 n +0000055869 00000 n +0000057421 00000 n +0000123009 00000 n +0000188597 00000 n +0000000000 00000 f +0000052617 00000 n +0000235794 00000 n +0000047592 00000 n +0000052917 00000 n +0000052804 00000 n +0000051528 00000 n +0000052056 00000 n +0000052104 00000 n +0000052688 00000 n +0000052719 00000 n +0000052952 00000 n +0000235819 00000 n +trailer <<98BD71DC944A4C33B6C6570662325E17>]>> startxref 236003 %%EOF \ No newline at end of file diff --git a/design/custom/icon.png b/design/custom/icon.png new file mode 100644 index 0000000..5134555 Binary files /dev/null and b/design/custom/icon.png differ diff --git a/design/custom/icon.psd b/design/custom/icon.psd new file mode 100644 index 0000000..83a15df Binary files /dev/null and b/design/custom/icon.psd differ diff --git a/design/github-social-preview-banner-for-elsa.psd b/design/github-social-preview-banner-for-elsa.psd new file mode 100644 index 0000000..b2cda16 Binary files /dev/null and b/design/github-social-preview-banner-for-elsa.psd differ diff --git a/design/icon/dark/android-icon-144x144.png b/design/icon/dark/android-icon-144x144.png new file mode 100644 index 0000000..1e003be Binary files /dev/null and b/design/icon/dark/android-icon-144x144.png differ diff --git a/design/icon/dark/android-icon-192x192.png b/design/icon/dark/android-icon-192x192.png new file mode 100644 index 0000000..886f0c7 Binary files /dev/null and b/design/icon/dark/android-icon-192x192.png differ diff --git a/design/icon/dark/android-icon-36x36.png b/design/icon/dark/android-icon-36x36.png new file mode 100644 index 0000000..82fd553 Binary files /dev/null and b/design/icon/dark/android-icon-36x36.png differ diff --git a/design/icon/dark/android-icon-48x48.png b/design/icon/dark/android-icon-48x48.png new file mode 100644 index 0000000..30047eb Binary files /dev/null and b/design/icon/dark/android-icon-48x48.png differ diff --git a/design/icon/dark/android-icon-72x72.png b/design/icon/dark/android-icon-72x72.png new file mode 100644 index 0000000..813fad2 Binary files /dev/null and b/design/icon/dark/android-icon-72x72.png differ diff --git a/design/icon/dark/android-icon-96x96.png b/design/icon/dark/android-icon-96x96.png new file mode 100644 index 0000000..e2d2399 Binary files /dev/null and b/design/icon/dark/android-icon-96x96.png differ diff --git a/design/icon/dark/apple-icon-114x114.png b/design/icon/dark/apple-icon-114x114.png new file mode 100644 index 0000000..1cc2ed4 Binary files /dev/null and b/design/icon/dark/apple-icon-114x114.png differ diff --git a/design/icon/dark/apple-icon-120x120.png b/design/icon/dark/apple-icon-120x120.png new file mode 100644 index 0000000..856546b Binary files /dev/null and b/design/icon/dark/apple-icon-120x120.png differ diff --git a/design/icon/dark/apple-icon-144x144.png b/design/icon/dark/apple-icon-144x144.png new file mode 100644 index 0000000..1e003be Binary files /dev/null and b/design/icon/dark/apple-icon-144x144.png differ diff --git a/design/icon/dark/apple-icon-152x152.png b/design/icon/dark/apple-icon-152x152.png new file mode 100644 index 0000000..9d39a93 Binary files /dev/null and b/design/icon/dark/apple-icon-152x152.png differ diff --git a/design/icon/dark/apple-icon-180x180.png b/design/icon/dark/apple-icon-180x180.png new file mode 100644 index 0000000..ea3232f Binary files /dev/null and b/design/icon/dark/apple-icon-180x180.png differ diff --git a/design/icon/dark/apple-icon-57x57.png b/design/icon/dark/apple-icon-57x57.png new file mode 100644 index 0000000..2128026 Binary files /dev/null and b/design/icon/dark/apple-icon-57x57.png differ diff --git a/design/icon/dark/apple-icon-60x60.png b/design/icon/dark/apple-icon-60x60.png new file mode 100644 index 0000000..c7ee257 Binary files /dev/null and b/design/icon/dark/apple-icon-60x60.png differ diff --git a/design/icon/dark/apple-icon-72x72.png b/design/icon/dark/apple-icon-72x72.png new file mode 100644 index 0000000..813fad2 Binary files /dev/null and b/design/icon/dark/apple-icon-72x72.png differ diff --git a/design/icon/dark/apple-icon-76x76.png b/design/icon/dark/apple-icon-76x76.png new file mode 100644 index 0000000..990b828 Binary files /dev/null and b/design/icon/dark/apple-icon-76x76.png differ diff --git a/design/icon/dark/apple-icon-precomposed.png b/design/icon/dark/apple-icon-precomposed.png new file mode 100644 index 0000000..00b3a89 Binary files /dev/null and b/design/icon/dark/apple-icon-precomposed.png differ diff --git a/design/icon/dark/apple-icon.png b/design/icon/dark/apple-icon.png new file mode 100644 index 0000000..00b3a89 Binary files /dev/null and b/design/icon/dark/apple-icon.png differ diff --git a/design/icon/dark/browserconfig.xml b/design/icon/dark/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/design/icon/dark/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/design/icon/dark/favicon-16x16.png b/design/icon/dark/favicon-16x16.png new file mode 100644 index 0000000..df8d8f4 Binary files /dev/null and b/design/icon/dark/favicon-16x16.png differ diff --git a/design/icon/dark/favicon-32x32.png b/design/icon/dark/favicon-32x32.png new file mode 100644 index 0000000..77bc342 Binary files /dev/null and b/design/icon/dark/favicon-32x32.png differ diff --git a/design/icon/dark/favicon-96x96.png b/design/icon/dark/favicon-96x96.png new file mode 100644 index 0000000..e2d2399 Binary files /dev/null and b/design/icon/dark/favicon-96x96.png differ diff --git a/design/icon/dark/favicon.ico b/design/icon/dark/favicon.ico new file mode 100644 index 0000000..202a811 Binary files /dev/null and b/design/icon/dark/favicon.ico differ diff --git a/design/icon/dark/manifest.json b/design/icon/dark/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/design/icon/dark/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/design/icon/dark/ms-icon-144x144.png b/design/icon/dark/ms-icon-144x144.png new file mode 100644 index 0000000..1e003be Binary files /dev/null and b/design/icon/dark/ms-icon-144x144.png differ diff --git a/design/icon/dark/ms-icon-150x150.png b/design/icon/dark/ms-icon-150x150.png new file mode 100644 index 0000000..d01b0e3 Binary files /dev/null and b/design/icon/dark/ms-icon-150x150.png differ diff --git a/design/icon/dark/ms-icon-310x310.png b/design/icon/dark/ms-icon-310x310.png new file mode 100644 index 0000000..b3540ac Binary files /dev/null and b/design/icon/dark/ms-icon-310x310.png differ diff --git a/design/icon/dark/ms-icon-70x70.png b/design/icon/dark/ms-icon-70x70.png new file mode 100644 index 0000000..5e8485d Binary files /dev/null and b/design/icon/dark/ms-icon-70x70.png differ diff --git a/design/icon/light/android-icon-144x144.png b/design/icon/light/android-icon-144x144.png new file mode 100644 index 0000000..acb7146 Binary files /dev/null and b/design/icon/light/android-icon-144x144.png differ diff --git a/design/icon/light/android-icon-192x192.png b/design/icon/light/android-icon-192x192.png new file mode 100644 index 0000000..713ef9a Binary files /dev/null and b/design/icon/light/android-icon-192x192.png differ diff --git a/design/icon/light/android-icon-36x36.png b/design/icon/light/android-icon-36x36.png new file mode 100644 index 0000000..e265d64 Binary files /dev/null and b/design/icon/light/android-icon-36x36.png differ diff --git a/design/icon/light/android-icon-48x48.png b/design/icon/light/android-icon-48x48.png new file mode 100644 index 0000000..39195de Binary files /dev/null and b/design/icon/light/android-icon-48x48.png differ diff --git a/design/icon/light/android-icon-72x72.png b/design/icon/light/android-icon-72x72.png new file mode 100644 index 0000000..471fcda Binary files /dev/null and b/design/icon/light/android-icon-72x72.png differ diff --git a/design/icon/light/android-icon-96x96.png b/design/icon/light/android-icon-96x96.png new file mode 100644 index 0000000..d6b7e98 Binary files /dev/null and b/design/icon/light/android-icon-96x96.png differ diff --git a/design/icon/light/apple-icon-114x114.png b/design/icon/light/apple-icon-114x114.png new file mode 100644 index 0000000..67ddc30 Binary files /dev/null and b/design/icon/light/apple-icon-114x114.png differ diff --git a/design/icon/light/apple-icon-120x120.png b/design/icon/light/apple-icon-120x120.png new file mode 100644 index 0000000..e75a45b Binary files /dev/null and b/design/icon/light/apple-icon-120x120.png differ diff --git a/design/icon/light/apple-icon-144x144.png b/design/icon/light/apple-icon-144x144.png new file mode 100644 index 0000000..acb7146 Binary files /dev/null and b/design/icon/light/apple-icon-144x144.png differ diff --git a/design/icon/light/apple-icon-152x152.png b/design/icon/light/apple-icon-152x152.png new file mode 100644 index 0000000..144e626 Binary files /dev/null and b/design/icon/light/apple-icon-152x152.png differ diff --git a/design/icon/light/apple-icon-180x180.png b/design/icon/light/apple-icon-180x180.png new file mode 100644 index 0000000..4cb892a Binary files /dev/null and b/design/icon/light/apple-icon-180x180.png differ diff --git a/design/icon/light/apple-icon-57x57.png b/design/icon/light/apple-icon-57x57.png new file mode 100644 index 0000000..7af214e Binary files /dev/null and b/design/icon/light/apple-icon-57x57.png differ diff --git a/design/icon/light/apple-icon-60x60.png b/design/icon/light/apple-icon-60x60.png new file mode 100644 index 0000000..3560efc Binary files /dev/null and b/design/icon/light/apple-icon-60x60.png differ diff --git a/design/icon/light/apple-icon-72x72.png b/design/icon/light/apple-icon-72x72.png new file mode 100644 index 0000000..471fcda Binary files /dev/null and b/design/icon/light/apple-icon-72x72.png differ diff --git a/design/icon/light/apple-icon-76x76.png b/design/icon/light/apple-icon-76x76.png new file mode 100644 index 0000000..3b7c04f Binary files /dev/null and b/design/icon/light/apple-icon-76x76.png differ diff --git a/design/icon/light/apple-icon-precomposed.png b/design/icon/light/apple-icon-precomposed.png new file mode 100644 index 0000000..5997215 Binary files /dev/null and b/design/icon/light/apple-icon-precomposed.png differ diff --git a/design/icon/light/apple-icon.png b/design/icon/light/apple-icon.png new file mode 100644 index 0000000..5997215 Binary files /dev/null and b/design/icon/light/apple-icon.png differ diff --git a/design/icon/light/browserconfig.xml b/design/icon/light/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/design/icon/light/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/design/icon/light/favicon-16x16.png b/design/icon/light/favicon-16x16.png new file mode 100644 index 0000000..12a8139 Binary files /dev/null and b/design/icon/light/favicon-16x16.png differ diff --git a/design/icon/light/favicon-32x32.png b/design/icon/light/favicon-32x32.png new file mode 100644 index 0000000..a3db092 Binary files /dev/null and b/design/icon/light/favicon-32x32.png differ diff --git a/design/icon/light/favicon-96x96.png b/design/icon/light/favicon-96x96.png new file mode 100644 index 0000000..d6b7e98 Binary files /dev/null and b/design/icon/light/favicon-96x96.png differ diff --git a/design/icon/light/favicon.ico b/design/icon/light/favicon.ico new file mode 100644 index 0000000..1c7b632 Binary files /dev/null and b/design/icon/light/favicon.ico differ diff --git a/design/icon/light/manifest.json b/design/icon/light/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/design/icon/light/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/design/icon/light/ms-icon-144x144.png b/design/icon/light/ms-icon-144x144.png new file mode 100644 index 0000000..acb7146 Binary files /dev/null and b/design/icon/light/ms-icon-144x144.png differ diff --git a/design/icon/light/ms-icon-150x150.png b/design/icon/light/ms-icon-150x150.png new file mode 100644 index 0000000..a1657a9 Binary files /dev/null and b/design/icon/light/ms-icon-150x150.png differ diff --git a/design/icon/light/ms-icon-310x310.png b/design/icon/light/ms-icon-310x310.png new file mode 100644 index 0000000..31b2063 Binary files /dev/null and b/design/icon/light/ms-icon-310x310.png differ diff --git a/design/icon/light/ms-icon-70x70.png b/design/icon/light/ms-icon-70x70.png new file mode 100644 index 0000000..ed82b2a Binary files /dev/null and b/design/icon/light/ms-icon-70x70.png differ diff --git a/design/logo/40w/Asset 1.png b/design/logo/40w/Asset 1.png new file mode 100644 index 0000000..4099ddd Binary files /dev/null and b/design/logo/40w/Asset 1.png differ diff --git a/design/logo/40w/Asset 3.png b/design/logo/40w/Asset 3.png new file mode 100644 index 0000000..3481ab4 Binary files /dev/null and b/design/logo/40w/Asset 3.png differ diff --git a/design/logo/40w/Asset 4.png b/design/logo/40w/Asset 4.png new file mode 100644 index 0000000..0b9e7f7 Binary files /dev/null and b/design/logo/40w/Asset 4.png differ diff --git a/design/logo/Elsa-20-transparent.png b/design/logo/Elsa-20-transparent.png new file mode 100644 index 0000000..28dbaaf Binary files /dev/null and b/design/logo/Elsa-20-transparent.png differ diff --git a/design/logo/Elsa.ai b/design/logo/Elsa.ai new file mode 100644 index 0000000..f957c2d --- /dev/null +++ b/design/logo/Elsa.ai @@ -0,0 +1,5259 @@ +%PDF-1.6 %âãÏÓ +1 0 obj <>/OCGs[38 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Esla + + + Adobe Illustrator 26.5 (Macintosh) + 2022-10-28T19:53:25+02:00 + 2022-10-28T19:53:25+02:00 + 2022-10-28T19:53:25+02:00 + + + + 200 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADIAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4qtlLCNyv2gDxoK702 2qMVYP5O0vVrM+hDLdQRz/6TcNdIz1PMqyoZZZ+DHrQCnc4qj9Q/MHyFZahPaXnmXSra6gcxz281 7bxyI67FXRnDKR4HFWP6N+ZGlR3inVPO3leSx+PnHFeQ+t1bgRIZUTwqPT26VP2iejXASA3Nptq/ mbRfMWni28ra3HqN1HNGbgaLewvNHEwZS7+l6xC1PcdaeGAsc4JjtfPoaSjz/d6x5b03TbC2u9Xv xO00suprI/qxiP0lWOQ2lldkhvULD90fsnZq7JLDUGgLP8Q61/aO8J7+WHmC/wBa8vzvexzrJZ3T 2yT3JmZ509OOYSf6RZ6Y9AZjH/c/s9TjYLbjyRmLiRIeW7L8Wx2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KrZV5RuvSoIrv3HsQcVYjoHlzVrPVzf2+uyzWMgRJdLm9R4QyookaISsXQtSu x6/NqqLD5K/Nf8vfOl3+ZXmW6t9Jmkt59RuJYZBxoyO5KsKnuDjxBonqscDUpAIDUfJ2qXGnSQWv kaSyvWKmO9S7lk4048h6cjspDUPyr7YOMd7jDtHTxG+QH5PWv+cTPK/mDRvMWvSapZSWqS2cSxs9 KEiWpGxOImDybtPrsOYkY5CRHc+k7qyhuacy6lQVBRipoxBPT/VGGm/JjEubVlYW9kjpDyPqP6jl 2LktxC9T7KMAFMMGnjiBEb3NmzfcP0IjC3uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux VxAIodweoxVI4NDt7JFey0WyilShjSN/TANa7ERbUJrjQazigZcVDi7+rF9d8peYb/VJ7uO2ULMQ 3H1E2PEVG5HQ5XKJLpNdoMuSZMQpXflHzFPGUXSrWIkKBIjgMOIFf2+O9N9srlAno6rV9k6jIKGO A873+9N/IvlvVtJvLqS+iEaSxqqEOrVIavYnHDjMTu5Hs92Vn02WcsgoSHeD1ZlmQ9Y7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVsqB43QqHDAgq3Q1HQ9cVSK61HQNMhifXorPS2 l5lWfi0QWMAktMURF+1+1TG2uWSMSAecuStAnlbV7H65p/1O+gTl6dzbGORQ4FdnjrvhN9WR5Fgl np8U1rHNPcXKCSOVl9JOYpGWqKll+LbYZRIPK5dPGUbkZCweQvl8eafeSbdrXXtQti8jhIIWHqCj AOquKrU0ajb5HEKkWPYeM49XkhZNQjz86PLv72bZkPXOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxVD6lqNjplhcahfzLb2VqjS3E7/AGURRVmNPDFWGXH5jfk/qkMWp3uoWE62ayPb 3F5CQ8QYiOT0/XjDry7heo36Y21+IOLh6+4/fyUI/wA5vyat7Z4LTzFp0CEGkcdUWpFOgUDFkRsV PT49csoQn6IuWYRvHyRpI/hZiabA71aoOVG+552RywG2OR2I2JCbeTrXUF1i9ubqyktEkhiSPmG/ YAUCrdTRd8jjB4iaauxcOUanJOcDAGMQLvpQ6swy96l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xVD/AF+D+WU+4hlP6lxW1ObVrSGMySLMEFAaW87GpNBsEJ6nFUCfOfloEA3lCaUBil7io/YwGQDh 5dfhgalKvgf1Klj5r0C+uo7W1uvUnl5emnpyLXiCx3ZQOgyIyAmmnD2vpsuQY4yucuQqXTfuTbJu yY3+ZOkajrPkDzBpOmxevqF9YTwWsPJU5yOhCrycqoqfE4q+WPL35Hfm/plveQ33kaDVxdGEp9av 7NRGI2JcKY7hZB6gNDxdf4YS1Tx8RBsivt96A1n/AJx4/N2+vTPZeS4tLhKgfVYNQtpE5VNWBmup H38K422PsJNBvFa6b9KXJ+s3HrICxPpJ8X7uPfYfF8thtkaajiO+53P4pdoOj6hppvDeanLqP1iX nCJQQIkHRRVn333IoPBRhZQx8N7k2b3+4eSbYtjsVdirsVdirsVdirsVdirsVdirsVdirsVdiqRe YNR1XRkOoW8Nzq6SOIl06FATHyFfUrHG8hFVpvsOVT0wFqyylGNxHEe66X+Xde1TVGmF9oV5o3pK jIbtrdxJzLAqvoSy7pxHKtOu1ckRTZbGPQtpdfvfVjhdm1BY6TA7ozHlwptz8K5WXRzhGWQ2In1g b/bXm1okcKeZdFdEgWSQXIm+rhvTDJG2wLdTvuRtlI+oOm0sYjW4CBGzx3w8ton8bbPQsyXtnYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXgum/85Y6Vd389mfLN/JJC7ho7Ii6f 0o6AuQFjp8X0e+JacuXgonhEepJr8fYltx/zmJb2/H6x5PuoeYqnqXQWooDUVhHYjDTc9E8vXA16 yttftdUTTZNXhh1F7AlHeJbhVdVY8lrT1AOXEdffIEebqs2llxkxycJO/wCN050jRuPmC3nm1uK9 urVHY2gCiTg6UrxDkqP3qmtO48crEPVduFp+zJDUwyyyiZgDtXQgjv8ANl+XPROxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvnO3/wCcVpbW/nv7DzJqFpNOZAzR20CnjI1StfrI NMLCUBIURYb13/nGTWNVhjOr+b9a1YQMTDHcJHcFWkIDlBLeECtByPtiyZ9oB8o6Bo9no89pPPdW Vpb6fNdPDHHK6woqjlSUlf7sVAPUe2QMgHW6jtHFjkRIG+XT9aeaDrflS58wrJZWU0ep3sRiNw4F PTjWvH+8bjURD7I3oK9MhHKCacXS9uafLmjijGQlLyHQE9/kzHLXeuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KoeOxjjvJLoSzFpBQxNK7RDpusZPEHbtiqA0C8803HrDXdMttP 48TA1rdtdh6luQblDb8eI40O/LwXCa6Iefa96n6cvqA0+tHuP5j7ZTN5TtG+M/1lTyZ6n+J9PqDT jLXcf77k9sph9YdP2Tf57H/nf7mT1TMt9EdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVfLS/85f67a3EyXukWtyUndPRh9SHjGvwj42eXkSQT9kY01yErFHbrt+3ZU17/nJj84vL 4hbXPKFrpy3BZYTcxXUYdowpcDlJ1XmKjthpnb1HQ00fXfK1n5s1W4a0lv4Le9vki/u4pLiNJOKg q7cf3o7nISiHV6vs/FK5zJHX8bI/yqPIrecZNM0zVJrjXdKt1uZ7N0ZQsNzGCjlzGiNVZ1NFao75 COIA24uj7DwY8kM8JSNDblW4Pl5vQctd+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq8OuP+cQvy1nnkmfUtZDSszsBPa0qxqaf6NhtWm/5xA/LdhRtV1tgCSAbi1O56/wDHtjav WtC8q6Xoug2WiW4aazsbeK0Rp+Du8cKBF9SiqrGg8MCkWmEOnWEFzJdQ28cd1MqpLOqKJHVPsKzA VIXsD0xUBEYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqg 7bVrO51G906JibqwERuFNNhOpZCN+4U4La45QZGPWP6UZhbHYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FUk8xea7XQ5IIpLWa7lnVmSO3e2VqKyg7TzQfzV28D3oCQFTG21SzuoTNbP6sYPHkA wFfYkCuBXfpG1+sLbGRBcspkWAsOZQGhYL1pXvijiF11RAevbFK7FUmbzboqahd2M0voy2hVXZqM rFxy+HgWO3fkBiqZJewyRxyx1eOVQyNQioPQ74qh/wBK6THdNCZ4I7tuIeMugkJOy1FeXfbFiJxJ IB3HPyRwauLJvFUJaXtzPd3UEunz2sVuVEN1K0BjuARUtEIpZJAF7+oie1cNKi8CqK3tk0/1dbiM znlSIOpf4KcvhrXau+LKUCKsc1bFi7FXYq7FXYq7FXYq7FXYq7FXYq7FWH+fb9bOaykZ78LxlLDT 4UuHoBUngysx+S7+2KpR+bn5myeQvJGna9bab9dN7dQ2xtpm+rsolglm5NxV6MPSoRTLMcOI0gmn jf8A0Mtf6q66gfINvqDxfuFmMrTFajnxH7lvn/t5d4NdWnjhx9OKvjSsP+cstT0T/cX/AIIh036n +5+o+s8Hpen8HD0vQXhx48aU2x8C+rZxPqC0mM9rDORxMqK/HrTkAaZis2G3evWdp5vazuPrzGe4 hRGWCN7YVjYFZH4hkQAhizewBxVhP50/n5c/l95ostGttHi1GK4sI71ZzOYqepLLHxCqjilIq1r3 whWE/wDK6Na1WFPM5/K+DVY5QZkvzKbsxi1JUuB6Mhg4mPrRa0rvg2aYzgZyiPqFX8eTIfy3/wCc oL/zd510vy3J5fis01F3RrlblpCnCJpK8TGtfsU64abn0FgV2KuxVJ7e08p3Woy3ENraSahZXBMk /op6sdwylCwcrUOVJWoORiRvTbIToX3bb9N/039qcZJqdirsVdirsVdirsVdirsVdirsVdiqTa1d 6pa6hZSWOk/pFXWRJ51eONohVKD4yCQ252H7PvkgB1YzJA2FlhP55+WLbzb5CtLe/wDWsRFfR3IR SnMMsU0YVqhh0krtkscuEuB2hq5YcXEBvb56k/JjTxau0V/P9XWQBleWBPj4kg8W49q75mQkCXV4 +0sso8fDGuX43SDUvy3sLKV4muZGaMkEq8Uimhp8LoCrD3BpmbjwCTYO053RAfdenLx0+1XwhjH3 KM0cub0A5JLMbgarerJoHrQeono3amKsoaNauQWr8LfDv4VyJa8kpD6Rfxp5T+fH5V6L5m80WGoX N1PbPDp8dokUHAJwjmlcH4lY1/eHAZU4Wu1ksJFAMIX/AJx2iGmwXEWqX5s5Vk9JFliACox5/DxH euQOQ9zrMnaeojETjCJEr+z4pn+Vf5Q6Jof5g6Pqlve3Ms1rI7Iknp8TWJ13ooP7WQjnJNOFoPaP Nm1EcRjECR8+73vpzMh7J2KuxVoKoJIABbdiO5xTbeKHYq7FXYq7FXYq7FXYq7FXYq7FXYq8x/MD 89PIfk/zA2ia2uo/XYo1k/0Rf3ZWUBgaiWMn6RlsMRIsMSWF33/ORv5NX0MsF0NclhlZXMbqHCsv KnHnM3H7e9PAZLwJOPqcEM0eGXJHaVq35N+YLF76xh1Ga3RzG5DICGAqQRz8MkJTiadNqNPpMEhE iW/cgr6H8mUYrPp+r1HWjxf9VfAE5m45ZjyMVgdL3T/Hxe+Wvpm1hMYIj4LwB68aClc1R5vRDkhJ oy8kjG3uyWJFUmCLt8NVUSrQGlemKpTqHl2xuI0a5sr+5aEFUrNG8hDOWpyeWppy7npkTG3Gz6SG U+pjdxH5GglaGazv0lQAuhKAqWpsfj6iu+VSjF0Gq02jgSJCe3d/aivL0nkz9OWi2NveJeMzei0h XgCFYHlRz2ByEeDiFc3C0P5AaqAhHJ4lmrquvm9AzJe2dirsVdirsVdirsVdirsVdirsVdirsVdi rsVdir4z/wCcm1sm/OgrfM6WZtbQXDRU5hKHlxrXf6MzMP0tGbio8P1dGA3Cflb+iJBby62us+nE Ii8do9r6vrP6xNHSTh6HDh35cq7Upb6r8ljyF83pn5CG2/wzeC4UmI359QgioX0oulT18Mpy/U6P tLh8ePFyrf5vQvzLi8pxW0B0pIzKyn10jkVgI6LTdmHt/tUrk6Ljvdu1ccIrgr4PdbD/AHht/wDj En/ERmslzLvI8kn81ReYIrX635fWSbUCVjaD1FCenuSypMyxcqgAnrxrTfIlrziZj6CBLzVdAfzm Z7pfMMOnJbgj6lJp8s7uRU1EqTRoF24/ZY98LYxdl5+b9SVhsD8J2FCZIxsSCOhOQPN0cxeeV/jc LbdSvnTSwooCjczsakGUbkBd6Af29cp/jDpSK7Rw13H/AH/4/W9EzJe3S7Wm1oJANLhimLOVuBM1 AEKkV96E1p7ZGV9G3Fw2eLuPz6dDz5eXPyQHk2y80Wdi8GvQ6ZC49Nol0n1xHyKD1uQn3/vK8f8A J675OVdGpkGBXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXj35qf849aN528zf4mu9YmsAsIjvIgiMnC EDiysacaDlyrXt0pvdjzcIqmvIDWxpiWm/8AONP5M6msX1TzTdyzOVhMMdzac/W4BinpvD6iuV+L gRWmTOaQ6IxmMogg3aQeePLs/wCVN+vl3ypbyatZ3Ft+lLya+kjEsbFzBRSghUrSMUFCa4YHi3Lr 9do8c5AzJHQMN13zV52tT/uT0OOEi1jvT+8BH1WZuMbfCzdfiFOvttmVjzVyavyOKNeo78vxT7X0 1i2nWrHqYYyf+BGaw83cjk+cbH/nKXzhceaZ9Ch8u21/Ol1PFBDFMbctHByqOcpZeREZNfwOAtOf JwDiJqI57X+PtS7Wf+cpPzW0X6sdV8sWFoLyP1rVpFuAJIzT4lIloeuGm63q3lO607zPpGma7qFz JZ6vrNql7JbW3IIvqGlIyVc0qKULVyBiLdXn0mOeTeUhIi9u7l3J1oFl5Wl8yNHZ6nPc6rp/JpoJ AaCioTyLItaLcJ0Pf55AYxduLh7Iwx1EcgnMzA4t+7lvt5s3y136H1DUbLT7Vrq9lENuhAaQgkAs aDoD3OCUgNyzx4zOXDHmVcMpJAIJXZh4d98LGlFL+ze9ksUlVruJFkkhH2lRjQE/PBYumRxyERLo TXy/tbivbWW6ntY5A1xbcDPGOq+oCUr8wMbHJTAiIl0P6FbCwdirsVdirsVdirsVdirsVdirsVdi q2OOOKNY41CRoKKigAADsAMVAYL+YP5L+UvPepwalrM17FcW9v8AVFFpMsSmIuXIYFHru2WQyGKC LYk3/OJf5XMQWn1QkCgrcxnb/kVkvHkgQD2aCFIYI4UrwjUItetFFBlLJ4/ef84q/lldX899JNqa z3ErzOUuIwA0jFjT91tucNoIUP8AoUf8q/8Af2p/9JEf/VLG0vUPLvlLR9A0ay0iyVnt7CAW0Ek3 F5DEP2WYKtfuwKmcOn2MExnigjjnZFjaVUUOUX7KlgK0HYYqr4q7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FUOU1CppNCBU0BiYmnbf1BiqyWPVvTPpXFuJOxaFyOvtKMVV4DMsEf1lk+scR6pjqE 50+LiDU0r44qqAg9MVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq yQNUEV6Ebe9MVXLWm+Kt4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+DPM v5vfmXFruoW8HmXUYUgu7hFCXUtOIlIUU5UHECm2FCWf8ri/NT/qa9U/6SZP64VfZn5I6tqeq/lT oGpalcS31/PDK01xMxeSQrPIoqzddgBkUs5ViTupGwNTTv22PbFW8VdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVY3L+Wf5cTSvLL5U0eSWRi8kj6faszMxqSSY6kk4qt/5Vd+Wf /Uo6L/3DrT/qniqfadpunabZxWOnWsNlZQAiG1t41iiQEkkKiBVG5rsMVRGKuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVxFRTFUv0XQtO0W2a2sPWELNy4z3E9yQaAEhrh5W FaVah3arH4iTiikwxS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYql2u za3DZB9Gt47i75gFJTRQlDU/aj3rT9rEteXj4fRXF58kxxbHGtNuvbFUtgn1467PDNbxLoyxBre4 U1kaU8aqfi6fa/Y8N8Wv18XThr43+pMsWx2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxVAs6fXDam/kW4YF1hpEPhr2rGa/fiq+WyumjKpfzRsejhYCRv4GOmKsQuNZ81LqFxZW95 E/1Z0iMsqxR8mIp3AHJiKgDISJ6Ol1Ooz8ZECBR61+lfpeu+Zjrlja3txDJb3LyA+l6bBgi1oGTu D1yoTlxAF1mDtDVjU44TlEwmTy4TyHeGb5kPWuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KpV5l8uWuv6d9SnnmtRzWQTW/piT4a7fvUlQg17r8t8SGvLijkiYy5FNcWx55d3llb +YtRF06qhuopKOjOP3fLpx3DfFscrJdBnywhllxHbiieV8r7lum3djN5k0mK1dWSKa4YBI2RQHQf DVviYjjUscpscQdNjzY5azCIHlKfIVzHnufe9FzKe4dirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVfBlv521Kx866nHd6zdafaC9upGurcF5vURmWI13JpxAHhiQ4+fGZC4iJmOVs P/xR5m/6u97/ANJEv/NWSb32h+VM2u3Hkjy2/wBXiubWTSYpZLuc8pWuSxBUktU/DQ7j/ZZEtU4G 9hGq+Nsu0V/Mza9PDqGmW0OlJFztryLjzMhEfwH94zA1MlfgpsN/EUwhiPECRGq7t7/UyXC5LsVd irsVdirsVdirsVdirsVdir//2Q== + + + + uuid:C1BCCE1871B8DB11993190FCD52B4E9F + xmp.did:7b5c93db-9617-44ac-a940-26816751b4c1 + uuid:5f8605e3-c6c9-2f40-b46e-5c31d5eadf08 + proof:pdf + + xmp.iid:90e584dd-240d-405c-a91a-385a6250832f + xmp.did:90e584dd-240d-405c-a91a-385a6250832f + uuid:C1BCCE1871B8DB11993190FCD52B4E9F + proof:pdf + + + + + saved + xmp.iid:d75e8c81-adec-4b48-8e9e-ae3661addb7f + 2020-10-02T09:06:22+01:00 + Adobe Illustrator 24.0 (Macintosh) + / + + + saved + xmp.iid:7b5c93db-9617-44ac-a940-26816751b4c1 + 2020-11-11T18:52:36Z + Adobe Illustrator 24.0 (Macintosh) + / + + + + Mobile + AIRobin + Document + Adobe PDF library 16.07 + 21.0.0 + 1 + True + False + + 567.619444 + 418.041667 + Millimeters + + + + + Baskerville-Bold + Baskerville + Bold + TrueType + 13.0d1e10 + False + Baskerville.ttc + + + Futura-Medium + Futura + Medium + TrueType + 16.0d2e1 + False + Futura.ttc + + + Cabin-Medium + Cabin Medium + Medium + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + Inter-Medium + Inter Medium + Medium + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + Cabin-Bold + Cabin Bold + Bold + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + Cabin-Italic + Cabin Italic + Italic + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + Inter-Black + Inter Black + Black + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + Retroica + Retroica + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + WesFYW03-Black + WesFYW03 Black + Black + Unknown + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-Regular.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 192 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 236 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 240 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 246 + 146 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 250 + 175 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 251 + 237 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 216 + 223 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 139 + 197 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 180 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 145 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 180 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 168 + 156 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 170 + 225 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 187 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 145 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 144 + + + R=147 G=39 B=143 + RGB + PROCESS + 146 + 39 + 142 + + + R=158 G=0 B=93 + RGB + PROCESS + 157 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 211 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 236 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 198 + 177 + 152 + + + R=153 G=134 B=117 + RGB + PROCESS + 152 + 133 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 197 + 155 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 165 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 139 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 152 + 152 + 152 + + + R=179 G=179 B=179 + RGB + PROCESS + 178 + 178 + 178 + + + R=204 G=204 B=204 + RGB + PROCESS + 203 + 203 + 203 + + + R=230 G=230 B=230 + RGB + PROCESS + 229 + 229 + 229 + + + R=242 G=242 B=242 + RGB + PROCESS + 241 + 241 + 241 + + + + + + Mobile Color Group + 1 + + + + R=136 G=168 B=13 + RGB + PROCESS + 135 + 167 + 13 + + + R=127 G=71 B=221 + RGB + PROCESS + 127 + 71 + 220 + + + R=251 G=174 B=23 + RGB + PROCESS + 250 + 173 + 23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <> endobj 50 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 51 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 52 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 53 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 54 0 obj <>/Resources<>>>/TrimBox[0.0 0.0 163.085 163.085]/Type/Page>> endobj 55 0 obj <>/Resources<>>>/TrimBox[0.0 0.0 163.085 163.085]/Type/Page>> endobj 56 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 163.085 163.085]/Type/Page>> endobj 72 0 obj <>stream +H‰TWKŽì6 Üû¾€5¢$RÒ6“ «‡à!‹ ‘Ï¢'ÀËÜH)Û=˜…»hQâ§Xò¼ýö¾¿}{ÏûO?¿ïÛ�-ïb5å¡×ó8ü÷çöÇþïööþ{ÞŸ»øßþù€éW˜þþÜ~À�ñ'{ÏÉ,·ÝJš¢c|l|ñ±9µºçÔûØñ{jÙ%éì8ƯmpÝ´ëœÚrâ6�MzRí»¥:v•‘ÔöžJ»ÌdÓö‘$�½p‚Ù:Ý®w‚…§âû²ßcûkûþ’ŒˆÁ¡¢$¹¦^D¾¦3d?J¢ùÀëÊTZ’1ñì©Ï‚çHÃ÷=Š&í°IͰ²JÊ+KKsâY[ç(#™Tz,‹( +3öçvˆ$)¯¸;1âe… ~´TÄcû±­%TàÃÎT»Š˜µ¦&¥§Ú ±�ùÉ(Êy¨¦:ë~Ì4rwh(ÞƉïHOËó¶4õ�ÂbèÿÑpè`þ5ÀоT¦ÍÐXE�£`(�†¥Ð¸Î± +EÜÓ@G‰™= –ê[kã +ìÅ•µ$óÚ:Z<8z ]a0…c©iÔ⸵éX³:. !JìZÍXÙvb‘â¸�&ìn5uœ›³<´ ƒ‡ÌH˜“†0od7…ë�ÅÄ ÚÄ™T‚ÂÜ@Èj3²WuM3‡Å&PrvXé)lkÔ«š'‹® +–"AÚå‘=@fOßÒ¬áÆXu‹ù + «'e©•â”èVsZÎU-Ý-™m®¹xO¦§ú÷èш~“½+”{¡NÚÏŠÎxp\¢w¨�Ï ’™äðÕ‘�c‚7ña5ÏÑáVñD#œÙF]½›V5J¨ÈÉá€Mœó8� .7>Î`{_jÌóœ1’�PN¤¡$b¼I û� ·Á¢>TK¦€%ë-cøX±¡¯B‡‰¨WOÒý/.½ƒ ™ä�ÿ YcAx!ôæ$ë~ÇèAu,~�¢`qI«ÄÝÂ;‡¥Õ|ÝRÖ«Ó²J�{-¨ÑÈ2îÁD©-Ôm^àTìwê§ápÌG³¡pnås\².~ ³LvñÒÕÀ@nñbó=4ÚÑ�;÷ÎÚ«Ç ɋ׳y·`0JeËF‹ù"³1å9›chÞï½/±¸ñ;ÎüÎà“2»ËpµSD.K�/X_ CÂÛFhheÃ×q'~œ�†ç†¾š\<¡v¬íNä§=¶€Ës�glræð%çøìýåþø¾ý/Àí7Mc endstream endobj 73 0 obj <> endobj 38 0 obj <> endobj 75 0 obj [/View/Design] endobj 76 0 obj <>>> endobj 60 0 obj <> endobj 59 0 obj [/ICCBased 77 0 R] endobj 77 0 obj <>stream +H‰œ–yTSwÇoÉž�•°Ãc [€°�5la‘QIBHØADED„ª•2ÖmtFOE�.®c­Ö}êÒõ0êè8´׎�8G�Ng¦Óïï÷9÷wïïÝß½÷�ó '¥ªµÕ0 �Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^�i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +�V�³)g�B£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±Z�L®Ä„?â_øóyxg)Ë”z¥�ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ß�Þô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ�;ÂA4ˆÉ 䀰ÈA9Ð=¨- t�°lÃ`;»Á~pŒƒ�Á ðGp| ®�[`Lƒ‡`<¯ "A ˆ YA�+äùCb(ЇR¡,¨*�T�2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°Ž�Sàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4z�BgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p�0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"E�ÒI2’�ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷�?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@� æP+¨íÔ!ê~êêmê�æD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒ�Ó¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™�˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…�EŒ…Òb�Å~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X�[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„�Æfm“�Ž;'_9 œr�:œ8Ýq¦:‹�ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%�—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† �ž�kï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»Îå�wW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™�™üšhšÕ›B›¯œœ‰œ÷�d�Òž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª�««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½�¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 8 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 26.5.0 %%For: (Sipke Schoorstra) () %%Title: (Esla.ai) %%CreationDate: 28/10/2022 19:53 %%Canvassize: 16383 %%BoundingBox: -4496 -6941 6299 7027 %%HiResBoundingBox: -4495.94804706153 -6940.13106459547 6298.59592600016 7026.12274396997 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 %AI12_BuildNumber: 223 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: -3683.98846868942 4518.73301841073 -2074.98846868942 5703.73301841073 %AI3_TemplateBox: 1936.5 -1089.5 1936.5 -1089.5 %AI3_TileBox: -3282.48846868942 4831.73301841073 -2499.48846868942 5390.73301841073 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI24_LargeCanvasScale: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:24 4 %AI10_OpenToVie: -3779.00498918571 5574.66974427153 1.50000302253379 0 3172.3269410231 1962.99604451876 2548 1414 18 1 0 6 503 0 0 0 1 1 0 1 1 0 0 %AI17_Alternate_Content %AI9_OpenToView: -3779.00498918571 5574.66974427153 1.50000302253379 2548 1414 18 1 0 6 503 0 0 0 1 1 0 1 1 0 0 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %AI17_Begin_Content_if_version_gt:24 4 %AI17_Alternate_Content %AI17_End_Versioned_Content %%PageOrigin:1848 -1193 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <>stream +%AI24_ZStandard_Data(µ/ýXL Þ„GÝ,À–¶…6dêûa>.š¯ò‡b€ˆ˜»»‹dgRdwïL eò2È_QŠ¢’\IUÄeV.IQ3±™˜Äð¨iÅêx*O’ƒÎÌ2'DY¬ŠÔ‰ŠOÊž…™c¤b# oV¡“£ 1³Ÿ*UEŒ•¥NZä1ª";º÷™…ªm ÿÌ£,w"¯»èÞ:,U%­Bû³EVðD('KW¬JІêϪiÉS ©¼¢c¹*9ºÒŸgf%Oäæ*ë~g-§’šÐö¬9+Õ"9cƒ÷1U3÷‰vUÆA·Å{>›¯œ>íÔR*bÕr—à¼hžg›RTIJÿÝÍwe¨Éžiu.HyhyVˆJÞB?Óp¨$ÕJ•Ó»‘Œž÷¾÷e›ëàÜdÞ5Ó�éa‰ hÀ a€ �@† hÁ¡! ,@ááa¡@Ú€A¢bˆ…†F„B¡ƒ„CH H `àl€8€L H Șd$(H5`�˜Ð€A‚AA (È4`� q]ÎgêJ�HNR¦±^nE®,ïì4W¥Xâ9©rµx / +?¬¡¸.з@Û¶�YÆì†Eã©#¬³íê¹";–©<—/mhÒ‰eÞÐØÏrN-NOâ‰;¼"Áh8S["Qv˜˜GÂhŒJ$¨‰—‰G&N0 ʼnW r(èôDâÃ�#q•x8Šã$ï c‘¸»³.n‘‰5Nèpà §¹m5 Ob“˜Ä$TBEçô-Z¾ÊÊ„£6ŒsÜ`â'‹ùÄ#»8ÆàT‚‘h8j*K^ÁHŒ¢Nq]8‰dÔ–a’…tž·ªªCƒW4Tð^+CZ“)‰²ŽªÎ>+×õLX¬´#‘•hTᆉsÔT‰ÃL(ŒÄjêÇ¢&_ÃK0úF=jƒwc¡Ý_ØŒ[`Ïp$Š'Z‚:_P0[ÕÏÎeˆ§ 2Î&™, �9÷2‰ L"ÑH85Ù"a‡‰¹`<n*�FbázÔ=ðÅcñX<�ÆÃñp$‰ÄÔe‡‰+µ„�ŒÊ ŽIØ.œÀ2¦¦˜F” Ec1Žž#w8æq�|(ŒÄ%0qÅ"‘0Å%fœXãM'ý +‡ŠI(ÏžU#áN"1±PÌ‚q6Š*(Ð�‡âðо%hñhä$Ž4 Û#a‰J¸‰‡£‘P<�†âÖÄ0HŽ…ã‰É6è‰rPɆ²®¢²ZÍ4òT;V÷d6몪ߠ§÷eþèœ5ØKL#~^EGű—=>©ê覊†‰µ©–…h,Vlƒ±`0¸ o*cr¶)Å^)"m[zäˆ]y~J�PÉ‘„„ŶeH–çšG¥3D«94üÕz»*»+CZ¾ÝÑXÖŒehb‘`$ŽDM•H<á+LF5 † |6ŠÅ,z‹.¾X,½£Áx0æÙø£Q9Ì�Ž;ކãáèƒöÀÇ‹Gãñx\%< Ç"ñP,¬0ã 4bmrŽ„ Â6®qlÃHq‰-¼°Â¹ÈJ´ÓPÜY‚<�c�GŽ£‡Õ#­ì %tÊ"Ó,ÍDâ‰ÄÄY%wB‘Em<.Á8†-JQE %Ù�.㸩& ¼„%úp4‹kâ¦H(îµ°1G5jQ E”DC7ÎeòøÑ>†�62„‚™Î\â2×»nS™7,Cìc4†cïëÊòJ�BN$01×À㘰,;°� ÅϨ‰ÁÇ=ÎÑX(ïìʽy˜ÃÖ`Xba S˵y4µPdÃvØ‘8ã œC‘À㯡°‡ãá GŽ;’‰: FcÑP؃Ñ`,7Æ-jáÅ, +*LAŠ„Ž7þãíÄ`˜ã÷ó£›sÃVT–U¢ªõ -ÉÈ4ÔðÂé³=ftÑì5f1ÙG¯tuÉ8†#18„þ¢ñKKà‚Nøk¼‘(Åý¡˜Å,ÜX4Ž…cñxÔ4— +Gë+&^²„©D¦xЃ +ë¥p”£ Z.Œ1׸Ơ‰‰ l ƒ²‘�ügŒiÊ$®L +]&1‰,2Öæiø—IÔ¯=,ÍýFe¦«6ï^ƒ3 + 8,@@€€!Â"ÐÚØB!%„¦L¢ìÊ$œY&qw;ŸŽ.ê”I4QFƒIÕV¶L‘z-rõ%+CdH‚ˆy ax°ð¨¾Ê çÜ2ϻό?²§ ù�Š®4eˆ�hSñhðz|p<ÆcñP<þÈ>îa�zÐÃ�ÄC5udfÅ2$kÖKÿЊªÊËû�Ñ\sˆtdô¼’Ù« yâNY ±uÇ«»TÅŽ©ìò™x^±h89¦²>�yÅÂñøP=ŽÇWŒÆ¢±HÔcèÎxØ­ÆT‹ª‰{â‰I QF�Ec±X,·¸ÅCÑX¤"­¸"+ÑÅeeu²QÅ¢§Ñx8�ůxâÏŠ>ŸG:™U·Áº2Äó:¿ØÚËYëØ%³T/ºiM~® ¬C*CÞ)Žk8™IÊÛœ.¶eˆÑ°U7Êו!…d»^âUù�„ãñÄôZ¨ÀEÂÑJË|*r‘Œl¤#9ï}zÝ~ÏÿŠ;*áP”¢±pãÈHEŒº sL‰ŠŠet˜'bƒˆô **�©,qVä:úèØ·¢a‘ÑRÒIAŒ•Ýå¨G�Õl†‹†9ìas¥³»ÃËû)Nq‰Å1®qŽ{Üã7X4bâñˆ d,Ø@Ç'OAŠ*o\ñü½Þ?²‘‹|bZR6ØÀ �ƒ�_âÎÆ0…¥]èšrƒNIGED¥‡fXám.Û‰zì89ne8…Q&ªAŽD„øÀÁÑX$$,løò2Ε!vØÖmäLsB“-Cè©&kC3S†T•žõÜl�2$�cEyt4Mü­È^&!aÑ€Ab‹ H�]ô±Ëò“¿ é½ó2#•*Ë�üX¡/Ï +qZöM¾n2$]¤Ì¹Ìß\™Ä‹ H)Štä9Îas”Ç8�G£Ñh0‹FbÑP4�7Ž l\£Üð4¦ñ`4ŒCÁP0Î8&ŒaÄ 2ÊcñÅ-¬œ˜ÅCñh0‹Tà)¬TÅ<ñx\ÃÕ †mLãÁp0 cÁP0ÎH2ŽaŒbÃŒ2†ñX8�c±X(‰/r�‹[Ø¢´ð¢‹Y<ECÁP, +Å©@Å)LQ +RXQÅ(w¼qÆWüÏãïö:ÝOôóG:²‘Œ\¤"Ÿ™˜—–•”ÎæäØ@.P�ÇDÄCÃBBcqðqŽk㧸Ä/ïήŽÎ×›{˜Ãư…)ì–†vfVFf«�=ÊQ�bÔ¢õʺ²ª¢r=¦vÂTæÄaÞ Å‚ÑpøÑñãQGm´Q£ŒEUt‘‰ì_E³Çb³W¬õjµj•¨U¢ºnÝi¢}Ìcã˜Æ8†1�a0f1‹QÌB¡˜Ï'烓sƒ–°±šj=š››œÄG1�yÌÔ­Z±ï¢Œ6:®ÉæsZá…~xÈTt”¤ 5ÈAS®*+¬,E1*á¨GÕÈÊÎÒư†=¬ç«»ËSÜâ÷¸"¡!b¢èÀI'å%æs‘Žœûu{"ÿÇ« …)PqÅBÑP<]ÐÂÈX8c +£ c£‘8@‰Åo¼qÇ|UXa)HQ +S˜â¨HÅ +ÅB±P0 Eáx(Å,º0-jQ [Øâ¸ÀE.rñÅŠ…b±X,Œ£±p,�Å0Ê0à b£ÅH㇌d$ãŒ3ŒƒÁ`0ŒÃÁx0ŒiL£�6Ü 5ªa »fã EcÑ`4ŒF£áh8�qÔQ‡v�ƒå(‡9Î�t¤#wÜ¡p( ÃÁp4‡ÃñpÌcóè£?è‘8@b‰ b2$A•@ ,Xpp¨@H  à° •(@l„† >0òÀaÂÃ<0"&L€@0 aÄ‚| b!p€`ˆˆXˆ@pXÀ àÐaB„$.x@‚CC„CDÐÀDxè€&˜@…C„ .XP˜2a€àÀp‚‡ +U“…ˆ …|I  .¸`A_aÁAÃ{dƒPx–DX€€ÀáРÐp�B„ƒ  .X°À‚ <à�†" .P˜`�B³ †ˆ +$0D0ADƒCƒK",LCăƒaI¯Ph °�Qh °�QPPh °�Qh °�QPPh °† L@†   … 4 @phxðàÀÁA L�@� 0 BÀàðáA!bÂB &@,@p˜ð…„ƒ…ˆ‡ + #`€è€‚ă $H`ˆñð ¨ �,@!±€8 +‡B!ñÀaA„‡D@0\À a¡ <4@0\ ¡"x@¡Á +‰ˆ ŽdÀ FÐð BXÀ ð   +( + .�  ¡A "0Dx€!Bă "4L€ �ph€xˆà�ˆ‡  _3åˆTRCƒ(àÀpL `�(R® Bƒ4ð@Cƒ†‡F‡ ‹X,4À‚ Ȉ $0H ‚ĺá¡h`<8à L€ÄB” `�(©@BDƒC "L�ÀLÕ"   �€¡a ˜“ýå�RV§©¬<§ VŽ^†ˆ…XÀ@´Âqá´²C„%kE\ÏË«ÌÊ£� +$„bÁ‚  (à€ÃCC l C*X$@ $†T ‚CCDà ,X°€¸ƒ©€‚„ +4 ($È&@0tÀ‚ x¡a¢�»EIÄ‚† �¶Å†  ¹@.°à á"‚A %p‚!Âa "&<,`˜€08ÀAC„…ˆ84t`�AÀ€AâA„‡E"DhC$,,H"!p°aAHð!CÈB„„‡0H "<0$H`pð� &8xh0`�ÀÿN…vËy�\gæ|»•¼�`Ù­nJ-CÖ¬Éz1 hP ô ù}¤õ+¹W€TP‚‡‡† $(éJ*`8Aƒ #pX`0`� «à%öXaª�&0D,4(hX( $8@*`ˆÑ@ €P°!âáá&@BpAÃ@*€xxX9“ +$@0X A.@Á€AbJ™P �@tö:ÂO]ÓΙueDUx«qi•íî‰JXÅ–:1?™™×Ò9;Á–å1ïnÅ°È ±Ø‰�“,_‹¸µr'WÊšK¢üÓ�ºòBŸoª)ÄqqÖX‰ð6]±KJÌâTi©•:—˜GfeÒZ”VWªÌK¿cd“6]N[¥e6è»KW°&}é±óUÉ{jîî[ñíwSgíÔ¥ÝÈ-ó\—HF~„yf˜usé(•e%±ÄÓº&4Ì´ÓÚÌÁÂl•}ˆªL–С۴ºÊVÕU"R}vCS!$õúÍŽô–2»r;D:Öo:6;QA$>㕽é*ê´eDz³Ê¢ÄL££´¼+sFŠã!»ñžg4³Ëe—“OK#»¤©4ÛtË3KËêY)3»lÎeQ±9¾<ë^R­åeXEvLt©,ñä§™i¼2X¤êÊQ›9˜y7ó79X»Ñ5³\äÈ^õœ9šž—sgÉ•U=ËF¦¼lËGxUõ3gy�Wj#V7aËØ4϶tÕØ¤ÓÉKÛˆ�a¢Ñ]ÌF ÏvöµN—SJ&fˆUÈVdBDSyi#UF&IÅ_ ‹ÕŒlJöÂL3½´FŽtU¬t1?fò�½ÐŠÈhgRyÊ]]3“ŠœÙþh5vl[®å̤«bWvªëä—3MÖbW¤¥ÏXÍ�iÙ)uEn³|ÝðUò%”é+³{Ý2]ž.ÊôU•^+´‰ŽY*u&”S +KFyn¶Ïâ˜>ô,y&ù¤±ÒѬ¥™½;µ.t~aÚ‹àùJçšK½Hé6CÏ[¦±Ì0ëeU7è¼›ÃÌ©Û]V–‡‰Y¤7ƒ÷ñè’hâ!Êg14JÌækÈГEœC847˜8I÷üЋØBhÒs_,Ç"™å+¡IŽáó&¯$Vbš‘јeeâLËC÷*Ó¬íìrŠYe]WLB×2ÏÆRcT?ìÙ5õ$Y®¢Ý0Ë\«í,_VlEn®Ü™¤�¦/‹ÏkeXT’NCWÎL¨nåYQ²I’åeÁª²|Ösê¥C62Ì?ëÍÌÒñ«Ž;YmÝeÖ–ì˜Ü]yY硚œeÙØ1ËÄ|³9Z=Ý49ã ]1UÝÆæR:¤:ý²«�•õ.Rt±¤1UùýžY±4ÁúÍOógÒõVÉ.R·iúö­TšÐóìVê"ô±e¡4©Ë&=)Ke\fé—)‹Ó¤êpê™x—·H�jc™4Aû\½`/}Ñ$›õ4•kÑk K¡ ý½zÖU ¶Hz�J§Á+E2œª§1_°•Uôúd­¦ˆhβ± ­™Yi,®"—/É–YZE–w¾ ]f¦•ÞúøTL&V>þ|ª²ù{æ N´ÁN½Š’ÐM|"Ž•šš:2¹'çEé ©6Ñ:Ñæ¢ùÚVªœÖ�u!29²ýÏI×Xë5ª™f^>+U5®×µÊmÒ£ÚÐçÜ‚6ikîJõA|)›Ì‰$½ØîL±'ÙTÙĉh,÷ªª·ôò𠩍ÊV½Ú�ÈJßyº=¼çØŽ¶+Ï’B¬šçøîªž›'ŽM!*SKöé\±,±áõ�­ã­ÙbIùÎK.ÑSD7vË“æl·÷ +f žÊ®Ü©jÊeÉ{»‘½P–ü?³­.e4–fÙ©ÆÊqЬO×Ó,«ÕFÖOâ#2³Ûe&ËNžϬz;»$‘ezª§+•)"f{Ïž3UKšwtOô«—¹åC7ÏBz1¡üõUKŽeçBT¤ŠÎÌž�â,DöbR),¹¤zžÏK#<úž=´2-’ˆŸ{UÊJîM7Ë%Ñ«ö|í×˪Ê4›©—4¯:+“”yš4ÍM—ÅI“è+ßo?–Ó’þĤ;Ë»µS* €›?±83v8u¿Ž{ãÎk8¥Ç;]q•XûòÜ™GL«›BUb<ªšYAÂjA¬+¶š®Vó+ÞVÚ$šâ´¡Û=ŸÒ{Í +&×¥�ÛæÌ/élY6÷Êk�,ïdDTÎ1úþçà_¬ñ  &8p X,@ 84@DL@�PPµÊ)S€x ƒ„r,{:Ï,•ë( ÒUÕ“Ð0]¿ù«™±r^ÑÒdU¹’É÷i•ÊÜ?«¥6³¾7ñÊªÚÔÕ"�?/–±ž™Õ_†LÌžìÝlŒY8Y˜­ÛæÏwÐZ˜id,VeîÜíÊ‚I‡.XEÚ³™ûa[X²ŠÐ­òFV¥Ë$û8[f¦—e¬Hbi\ˆ™–™.ÙÔ2�žb#t³t,Ñ>cY®ÔŠXI¬]æ�]~åõ²ZcR íCø24fÞërUÄcB;bi +ϲä‘af¶®k¡=ï¬ä•xêcæÔ�ËY‰õnºª¹YReýió,xš+9mXîûV4uì„Y7÷x«ë3]–é¬ß˜TQŸæj*BWu{Îý^ý\X¦ž>ÉÈ¥T6¦«ß³¨j°WÒE¨œ=š¬›÷y˜YÐEJù9º½œ+çj¦œ‹¼lJóô³ôrÄ<_ëW\“b%ÑsަØU™wõ#_ñèI3/ã"I§¢qòôÄÃ+o5`�`¤ýr^|%>×ÍülÈpÓžÎ"ByzÉÖNé�8W¶¢¤qì„”¥^R»óÏ;"a¹—üy·½žÖ, ÝöÕÓÞ›ìJ}1ËcBÇé|í4˜õšM¡1¡›{•L"¦ôëõa™1A*óÜ“X,§7cÊ+ø¢×ØŠ%ÙØËÇb/A|�-©§´Þ¿¬ÌóœÎ–>ª´ò)=§é•ÊñË�nh(‰ Y¹ì—mi–ÜígtF«_}¬ó3¦ÍËsÅHE¼ºÕ`�é6¯#<ÓܺìÍiŽJ‘Hf‹•zÒ!Ù½™öºSèJî8§y©Lbá<¯øjjŽSÙÊWɨ¯¥‹Ë¶q&õ…Ï2Eäs¬nF23·z#z9±N8XxUýLZIJÄg«²úÌœªß™JÖänlë-oň™îUÇš^šõôj©?ñY®&§Ã´>=SˆˆÇÊêCôb5¹žniõÑêÕ´R5Ákѵè׫SæªÉõ-šR"â´²«OÞJkrfS×7çe¨LMÜçüȬc¬“gÊÇÄˆŠ‰ÚzX¿:*8>ë1‹…̨tû Mú¬¨™u+™gÞ•C"‰C¿©WÒ:6v¬¡¹›¨­d^½)†h�ëʉœsgŸ;쯊Cyv‰vX=ýT�ˆÐàÙYMAºÙÕëˆÈÉcgËc‰é=ëk<‰UKÌ-_oiVJGihÇš<×õƒÎ2DÄ®ˆÒ>¦—º’ìéŽÜe{»¥³ôJ®O*––èö¬ü�­¬7ç•""xUe®„êðÕ“�•£U{Ïjbÿj¶V¼-=5›Ҕ´˅¬äÈ~¾R�Zl%ˆi³yÒ�Œèz/Â,µ’Â,„DðöŽÙ,c%yGfs3½P ­¾ûÇò*Á×Ëæ‡ŸRH“Tò×°ç¬Ýk“�¹cŸeXÊDìžÉ"ûKÙÏ2‘^ÍìŽtT®ÅnfÚý.1{jÙ׺屌‰¼p*[<öHxeÜ{ Ó-¥Þ{·’.1ê`ög©‰˜ñ–8–u’­Šy¿:ì§þbÙC;‹s…=•°œ‰àMïwór.É{´ïL¼Û¨ïƒ=¶¤‰”\ˆ÷쯠í®w ©t§ñ‹Õ�ê—Oµ9ÞVÕ½ì5µ¹µ®¢ñ¦»aºXulnwX ‰X!’ÝK6©3›s+ªBGä +ky/ò•rI}2ÝÓ\š¡M_È%Eö¡±ya_ê’ë�ú‘4û >[B„‡Ô[�J}ý ~°¥:S eºx4;›;"ê3� +µä0Kæ-?5*Ö’×Ïué”k‰å‘ûçîîÂS _œÓ¼gÒ=[O"_ÍË<ÏÓÝ/»C[Íñü‚H¤°rêNƒ-®4ºjÞ2•ijb+K«ä…%±6tåÞªV®®Ì”¸Šè>é.Vô“´´U‘ùOÊ-Ud«ËW�ò¥NÒ¥»ŸÞ•*"çÁB'i5ºo_Ūµ,¾±\©»‹Oì8vOe+XDjî¥'W%+1_DìKOzY÷ÒÔàÝóªižÈŒŸ2uZsW¯)[pJ +Û?Ôš¾Ê‘Èц¦ˆæ3š–&UùήéygÐ4›Ÿ‰žÛ'K%‘*õÐó̾T¦«7aiŠ%‘³“pê/#O¹$ò±ráoì¥SRfç{Á¤´Ê>›/6v^ÓÜ”‘ð¥N©)±ÄªÎ›í¡‘�4UlJìóS³~ãóÏrSÒ¦;w"1£9ã/«JN‰]tç„Í2§3íÈæÊŒåI$iŠuGú!¾�SNKO¤ðgu¯1ç æÌmSÅ …””/S%”VèD°z–�—"3—Kb”8•ŨV[, Ù=Ón²9j¹¥gN¯%é.]*I±è™Iµ+§"×k©$†h–™FÕÒ*RIªof"ÝŠ ÓŠ%ñxŽ™>a¡†u4#jÇSÛÕÙý +­´DxÓúÙ̇°nE?‡pÐϤºrCècšXK†WÒYËÃBt~¢ù5ˆ…îók4eNK“³��e™ô¡!Í©úÞlêÍV ï•—ÅJ×xMå¢}¥élšÝÐæ.«éÌôf½Üùcd¿"¶…wÛ›ØryÓ«ý�\4Ñ˪¥Îdã é=k6歹EOsil‰‡®í¦hô2“»*Ùn¢9zšÑ\x:õ%›Êyôiº7$+N¤ã™ËËÔ+3;ßQóÚ Ú�仵��’‡pJ¯9ͪdGwù8Î’÷Î�üÖ¡gêH&”vµNîØ šJ¶®Û¬V8FT×Ó<7„nI¼–nwÛU9"s}ΪàÝÜËÙ?ß]U©’ðÔ;×­ðålbéAÌ‚.Ú†“wnë·+ïY2U™�|gú�óZnÀ ‘�|¦év¯ªa§yVx/WR=-u[ñÉ¥½’.K&éÕéÊ]!Y"Úé¨8¯ˆe’óŠVŽ-GBUijÛ #x5ÏìVT8fO¬Ñ”M)‹]'!ó¡é½µY&ÉûžévÆrg$µt™Ž—G’ê•ôûU¡2©#•)–ו%­êóÄ“•¢f©ºF²èª`•Õ­¾ ‡P4xÀ±Àpƒ.˜ð‘<40Á h aí�QÙ]™ê,m…Gä»/óêSÆÌSc–„«°%»öèjºš*ËvÒæX*«*ÝuGfºkCIGV¢ççJ�Iö7dMñ™ÜëH9“ã$–§¢"ÏøÐG×9+1é<¥sg+iªæ±êJ«fb�„„=6ó¬(³å,sUt+º±Xn½RÑ«3%ʬ¤—:McrÑœMÔú²ô®šUÎÉ"›Ò®W49˜…˜x÷R9wÒ³ÆÆÁIÛv–‡7I-™Ml¹""Dú¹�чG/ÓaNÓŽJ]w˜Yevƒ‡®ßã!扎êËÃ,¤*DìÑgŒx™FD÷L:“"çuÊj±ÄÖ™�Æœiž&Ž‘•rN†ô«ÊW©9d8”®)L›¹’Ïk½ƒ­)ù"‡˜¿ ÞÇ…ISG|ó|9ïÎl¦_$¯ð޾ŸhúÑ}ÌqÕ©®¥õ¶M–²®ÐçÌÂS©ì :«ä£R¦›ÙcÚÙ'öM·†•˜g6¥Y.Mn§JlÚY”‰¾¢;Û†|L²›¹Iá�ýçß É8xì�qî†ÈÒ^ê°ÈnÕP¹|tFDÊ$¼ñ³ê¼3:bÚ[º�÷YÖ¯éç<µÛÞǬR ÇTÄš¡�4Y\"ˆ6Ó,ËZ]–åæÕ]Ë”H³ühЙ&Wv튯;U®«$Q‡ÎîÊ4ë”ÄßQ«&q†n–X®È*+Éê!¹Ì”¾Jûydsö�Š\Fi£ÓxVCvý[n›íŸÓ•yå,8D’Î +§²ŒÎf÷ÌÆÆ�ìOÞ®!22å”eÒçÐíPY’ÍÐÑciVã—C²ÌNÿ³éÐ}x„t–HU7&—óŒ|r9uˆ|l�Žõ3=d%ßê™O7-»�J®¡4CÌš–"tE6DŠäg‘¿Þ¼§Y¹tˆúÄÚ”¡š*ÿ&––eÕ3–ßâ ÞÄ÷åÜw³Ë<:݆|²ËD¢–—o +�¯»¡BÓ“Ch¼¼IûPΫ²n©2;˜oUšÒ¥ÂæÙ4Çè×ôÛ^ç.k:±3/8ôb]¼¢4¥ ‘|•¥\3™5“è*å"EïMw÷“ü+äº+鈿“¦¥œ!—j~ú²Š¹æ]‡>Eå§½˜í¡¶h?]Uå\4dhBYö*+ÂÌ»D#L¬¢�/‹Õï¥;oœÃÚÔRÄÎkšCŸ5%‹Cw4W¦ÄáÂ3Ù%£MÔ,�‰å�æN™nnÙŠÝ�=­'šó«XÏÄr-b» i¬žts[Äð?œªiŠ”ÎGÅ–ˆ¯©£šIõIø´Ê–›ª:ºÙ½«Ö>²™$ºwÿÔÙDdßxÕBgb76ž‰ÞKʪ‹yu{�ŒWz&xö_–IÖªSîJD:Nº\¹Oß[Ò•Tebu¶ŸSŸM”Ieb-ûY=+g2Ÿœ¾ì³æ¦¤ï§2UÙçUºUE”-Ö �Ž5Ë*Ÿr÷ŠlE}™ÌIË´é³T§CJ:™àilžuªBô4é=4E5§#YKË‹QÑÉŽ—‰xUƬ>ûüÊg¦ÕÌ‹Ð\–dUS¿º,F.éRDd¯™›°è2�ž‡V*�ù²ikÍ%N ;ttìí²õ"—¦æ,3í“%K+b¾çŒË4–6?–Ê�‰%ZYâ\ë‰Õz:=¾µZiU¶î7®ÌÞ¡!Ž]Ïõ9ÛÔ‹®'a+s¬¾{ôìU&¡çx„7NUš Z¾-,2SY™œëÐe-Vã©Lu*Þo7ùû¦Ý°Žxª—±TxX­:³X?±|Y3Y©yÓ9zžñeú;œ1̱;²ÙŽkf纖kÐ5++fé5½D+¼"újSÃROÝæFFßÞ±K¯$¯Øiö×Kl¯Ð-ír¬séûd'�fÁ¯¸òîÐv5ýË›cy’Ú=,tB´$׋�ݮ܉‘ÈÐrÎZ3æs +Ùn¾®.Ï5ëaÖÝ�~5|ù�± +«Ê^NO»šºÁò‘�vôü�¥%šñ®ý½j.vÉ]Ö¡ÑÙ‡ìŒüÐîÊ�‘~:?lëììè÷Ásígä÷be©K¬æläçå¤ÍræE–÷–Ùù3ÂlR-},Kìd)4‚÷¹õ½¬ÐüÒÝ™jf…dW¦ì™%)§Õݳ‹©VSŠ„i6h„Zƒ“u§ÏJžÑsèŽÓ–Ë,ó�:­¹|Ý_ÕûÌœUMí’(O¶^YfY¦ MYúFªXUêªZòœ}^U)ÞP¡ë +ÓJ–5èÒ4Ò9ÚÚKd‰DW&­ªsö»¶TM–£›³,º)‰F~g3;¡•¥Ún׌ÐÈ«èViΖ¢õn(/ËÓB>+³ÌÎO>»,ÍýÛm|¦´K›i)á™Ýw•‡‰3¥†f³£Û‚H5&J+«YÞò|ˆ½›Ñoe–Ï6çÌT2³W’öË–Y’•·/q>ÅÊæ®df˜¾4œ,.#ÿÑÈ(‹35cÙ»›=oZÜÊéÝÐk-Z3m&¬§ä²û°˜.ÚUq­Ì®x'¾YÅʈëÎVW_Éæ9k´¹|UV£É¥eä-©ÐȽÄ)2©±ÇŽìæµ:ù^®¶eùdu'²Ë##å›ü]޽’².=—v3fžš­Ã1|¯T˳' ¯S¨c”…hóõ±žc-�/]?º’aígWÖÏKÓf¬ÄiöZ»©ß ©¼FN•dû—Xüšú~èšO«ö1Þ…õù§ä˜\eá`Íë3ÍrcBˆžZå`³lLÆÒþ¼*t·˜Xjª_ÅtÍ٩´eùX»¹B�K,fgZ�«ƒ9®)…×+«*®ÌR¾î¹•¬:LËO¹{:eñCµCòë7v³û‡‰„-˜u}ýhº¤ç]VqìÌ.Ë.]hLì¯Ê–öµ9ÖËî×2º<CœSíôVñ‹TÊÚmx‰9¦º¼#*ûécäØÄÛ�ÆåVUÌæeɺÊÕX1±9sO,fÙÒ‰æN5S4Ï�Y ÎŒó°êdWòše§º1‹ÔÍô9uLÄ"XT¼&ÒÃ",Ú“9ã–Â"h6´»¨%on2)çŠo‰v~N&YžÓŽø3÷Ž +íj8™FÙ—Á´²Éb,R$w�4V‹¤�=‡Vô�=šÿ˜†6‰f5gˆI¾Z)&É•fy½SïeŒŒ–WÛ˜ØûعÔî0�N%³¬g£¡LÌ™B¶›çcDˆIG†cäÊÌ2—´"yË+™ÏÊLô#r‡è¿á¸ªåìÎò”åv-M)ñ‡X…U‰Nº"uÓèl.Ä’Ù#úNITЊŒYtßm2Ùsš®Ûhc-ÓÝS+VµÑƈ�yðŽi{Ñd¼©},‘jF˜éªÃû¾ q|¥ªjê2³X•—†5ÙB™y'c ¹¤ôCœB™é³Â2½®®ŒK²†ç^»Ùåfݽ³cŸwÐg5øËz~Z—yòy[B˜“‰¥f–d™¶)ewét¯ÉoŒ�¯®{¾Ž^”ÅÄ)*8F|gÕ½u+f §äØ�é®bNÙïTª%‡7Äôm¥²jU¼?c«K¬BYä颩O¬£¡¶æ9tb"U–fYÑ!&å‰îŽÊæ°Ò,�p O˜sfö+•E(ëf®L5âe‘¢ÃË^Z fÑa§²²ŽŸE\·¾šc;ÝŸ{¡)Ië™ù¿“Mé~®¡›±³{¡½µƒYg$ûI»·ŠrnüY�Ôîù—"¢c­�žù›U&VYˆ/Øò“¤O™w/i ç—5‚ô*wòf^âkÊkE5Ktºì¼ÄÒ•æ$Ùè¤6FHŸ)ub¶ý.3ïÊÙˆùè’¶,¥ï’ÐH%RÁ“žfî2íº=/CVgVxgÑ.çF­¦ðwB·n—IÖ¢þ¨0Ϩx/e#Fƒfw{úN9xYX-gò”Ý­&ïÏ\ÐF�.{Ó2'ÆßsiVåIΔ�#3b®´*fFܬÃs•›MLbé—ŠÏn0ë²Ã$,Í”i–~X8E¾e^Y9Âl_úš4Þá_‡%ª=³„Î*�ÔcžíWiÏ­ÐZnŽ3ïT¯Š2‘Jo¨SΊ¢£Ì¬zϨ˜\ÿº›§ˆì�¦:¯¢Ë܆u¦»^Õ�9ö²uµgý—*ž]Y"ëëyÖâ홾§`Ù ½ìʬà§Ê¯t´_ 5‹?L2'õ™g•%sŒ7{•iÉëðvc"ª²õCVnzUh#ÌÞ̸ð”n˜Vz�ϧ¡ßÖB·oòNteùvç(}²²rSý³Ü44E××]Éu,ˆ¾ëÔ�¡_º¡B“ïÌ~C…¦͈†>è'Þ¯ú¾¡Ó÷ß”¦�¶ÚÒÅ9k)"²©^Ѝ�j%êM^o²»š,‘kLæª,<glgÿrMEjoƒ¿“ÌôÉ+çÒ¡Ùyc¼¤¾Lwªb!*YÝbU"úæñNFW?ß]v¬ªú>ï•W“ŒÎ«í}¨ã¹'•³þƲÅ齬G£v꺕{¶þCE,CuÞ~k‹¦°ÆkÚ³Œi§«5+Ó|MıÛçúIÏ¡ÕÔzì/V ïö¨Åª5÷]µ0�Òt§·ŠUÉ.‰ªUD×1ÉæxèÙ¤KMô Ú‘�²FºçsÎØÿT»²�xvGj� /Ý;ŸÇèÒ.k–x·Ž�ç6§œ›æÊ³�ûçÙíUÒß’ó×"e{7õw㯼½›ÁliðeFSlšƒuu–oz6ˆ„S›©Yìø,øAk_­Û–s\¤–¨Hm'Ý‚¿,ö¤B7ú=¯.óçÓ^„.½O.¾a!Û‹ïdbeå‹l2§p¦Î¦ïJbYI¬’Xœ”W8¥Ë¶g‡Sl[‹hòòÃÛåUÉCO_òž­2h´*„5ŰÆb[·fÅ÷Z®"µÏº³øˆ•…ž4/tºº¹ÔížÅ>%o—¦y²U–™–•nð×Ò ¶“ß’mæ§Y¬µñáà�¼µÇ|Z³_r–k[²-4,oëgÄç‘Û]Þ‘ì¦&j^¹ÎšßíVe’[Ê­¼âýê>V;¤^R[oÖ�ê#¿ZËÓü†ÃW™e"ÚŒ=ßóØï­m.«niĺ]òÔ4Æ«gM·’cSºjêº +kŸ×jžÍû �­HW®­hlªÕkœ‰ƒÿûz¾U»_#ì­EF·ý²ž!Û/k{f-É–YJóÍô¶Ë’«wµë”'‹O2³Ã¢ofÇÞÌÒ­™ý°‰xdï•JXU†¯’Øœ+«{VË9š©|O×ËU«­ß¸�¨zŸ¨ªfئaš¶Žzöâ`� «3wϪMèSMVeYE³³+»£^IjNޝZ+D;Ï^lÞØô~“-eÅ+éN"º.6­ZyÅ\2ìQν—µù~FÅ^ón&­½ µÔ—OË8}õS³ñÓ߫ضª¦Nå µ÷àkhÛ·Ÿ:3ÖHsV +kº&ݾãÍåU»`•rÆJã{)]Æ:¾£“ÊX󽱺)ïuï×Z!ëÜÍšÇÃÞ~«¯{”Ö²f¯tHGsE4êÖˆìyt.ˬíd7åÙÏÍ5©ö¹¾cu¯á`ÑÜëòl³6/ÕjïKäÚ“j'fÝã¿>æ´êc…6¥:Z]ÌÎ2$×Ó®,–ü«‹®»FVL ]ÂRu,@ãÛ–1«—9:b™4zz¦+š"ežÞJÏå.kYê®5厌Gå‡6–C,G´¢2Y,“¥™ÇâïèJÛiñ™8ˆíÝo\æà 5kwœ£:×Ý•TZ%sºäNM©ª�Ȫ™5ýÎ‡Õæ[°JCwÕ;Z±�Ky7÷ðÅû½V´¼ÝJs»¢áunÎŽØÌ³_öÒ*ÏT+Ýõ°wD%Ï]QÛi¯ž)øÞ_ùfÖ{GÅã{ Ž«’Œu_M�FX㪬×§y»eoЦ®I˜æã™©hÐc‡ÙqU1{:¥lÊ›¤:ÙçqyÒHó3»£¢Qm0oWT‘UÖ†¶góNVcÖ¨döòÆÚûWé[YÛŸµý²å©Ù‹f7*†uK͡ʻWk6Ô{o²Üumi‰÷$rA÷ö[�nsµ^?×A»Íõð·›©JZÏJˆ–í$ú^U*Xµ#£âT]×½]ýîÞ�ÙØ¡ó>uy·Û€AÂAÚ�••¯Âü%µ\{i*ÖâoX+ÕÖF—ÚÊòOù«ä{Ã_éežN*˜fÓri9Ų8�èʼnX(M36N›V+9íÉzÞ¦Åt1´Bè2X5Åg»•›�$ý®øJÝžò~U]ÁÌ’/+ù—)QÉi¹ªâß]–)3sYfªŠÏFÓr $F�¦’-ùòw|åŸ)•ÃÁ‚U®jìJVZQ)#<�+­Ôíаµ|qâÏŽ6•±ë=–uÓûXÓ$¥Ÿ6v/#Djv®°|MfwºçŒÌ6çQÚìO'þì´^á¥g^Õ¼BLßQm×{!*M%Ï”­i>b]XH¥®h¾¶ÒêZ?QÚ½Ìê19�ÖêË\Hæ4£+«¹ß3O‡•5þÍa©æÕWòX_iÆr%’DH¾cÕK¾§yÙ÷Ò8gÞ)u§ÔJMÕ³ÑØ›>WVrsdÙ[aûgãRÉZµ~ÖI­Áš;Cœ÷S"+,Ñ{š$´$ÂÃ2Ý–óy¿ ËÅpû¦µœñʨf|H5Ef¿ò]ŸWs„‡†æ«R¢yËš93e/Ùgª$³*CTƒdDwc}š2É„•žŒ¨.e7D¥LôsZQ– Ÿå‚o™öÕií‚35ÿƶSúÊeë·²u�j�©D*‹*KßqÕNWS�ÝØXU]ª«bo]þ̾yÓ6Í«ŸM¥]–c‰ù®²û”fºoeJs/þ«vÿ”ŽÊ8�{�ÕS*¾z®["†.Û‹cõ”®ÆÎÖÙÒªð3cu"ÛØdš2«btE~ouœbc£©ÑKÈH6+vc½eEt:ߊTú–}ë:µóç‰s¥I­ÊÎÕibÝt+Gc–¥뉈Wæ›Ñà™¹îó]åZ¦Q몿ê·>Ë—fÂâ&žŸ¦«»6˜NzZyÐèÓ^aeå´9F?=†crU‡~YÚ”=³ŒÎôT± ý£IºeY›ü•«™IMÓréufeª*Ek®J?J—¢±rjµb}õ¡¼´»�'*xþÌ�íSDŸ¼UÖÑVÊÂÄÂ,Æ!ºµ/u®½ø“af]aóØôåUÓY‰M§ôø²J»÷óꌈü¡+[fÓ.UT²•Ä3¢Oámúºi{öhÙ2qê̆‰Y„¶W õ½d²š¦ii¿Ã£Rkô*Ërvg ¡�U¬iYÓX”Ù²ª^QšÇ\ö™éYVÑÍ“-šsYšÍ¥Qÿ4K3Ú}»Ä’V7+O–Ä—šÛ}¬bÉr’ KYHŸgÙ�ÍšÞv/‰SHX6Ÿ•Ç(Í +{¤›¹ÎŒx$+ÿìG/Óç~f™\ƒÅ£1ãÙK¦ûhÚÝóìΰ‡g¿ßýV­$â e5íô;sš9ïIvN1ßiïyŠ<‡U茦ÞûŒ]›ºÛ§Ò³)£�Ýt46eþÝÊ­HxW½¼¥•¦~ôÿV2O5+]ŸNfCjkïd:ÓÌí3L—çNÖLrš™ÊÊÐÒ¨~4ABB4$º�Ø£½œFSߟ´õŽš3Ù+%ÑÍ’¨gUt34Mѧì½Kf:O‡îUStüMé¹Èò(ófDOÝ�÷BE¢û¾]U¹»Ú‡5ž?d/x®ºÁk¥ïJÄ´k fZñ1Hh¤ª©:íÂÊ–oìÞ³ô‹Ód—N¿l�ˆî¾-χ”èbé!Dçòî_ýó�8N;îôÙÝ ÏåibTvž_Ýó%§ÎÇ—±ŒÝ»žfDyWžÅ¾ó�8Ô:÷H.TŸïiÂJW‘èö{vÆ+¬<úñnÂ+g{=Dˆ‡¦ªßvJK—?:¢W•ß+¯›?á‹~ñtÆ:—„Îz«w •?u`t©ß:袑l[�HÑ…Š¤©¯zí"»ðŃã#ÍDBúÁÁ³!)lÚ¿éK!ñL^éƒÄpÈJ.r.E#1ró +!•Þ©b%e>œ²uBÂrAòòéå#e”v¿TxBÌIç‘N�^òÐ÷2ÞGÐ7å¯Ê«„è7¯’C$±X·­brsµþ�õ³’†Æ»]AòLk™’q•¨„êšã#Vj‘ÖdçÛN´£2H®L=ße‚Ø–"Ác¡½ÐíO1ô“Ìï3+F„üjöi3¥L„Ÿ1eÑL*CEˆÊŽåˆœ/q +VR_¢)-2+’λ‚D‹ôXŒ(‹!U^½Kjy¦%‘$õNž9£r$ÏI�� Þ�=™r&çhØRG‰‹$]!Î˲ŎH¡[®ˆÍDhÎ%«†JulrœåŒÔ|ê³+=’­+:RŸ}ó¡q)R¡#ˆ$bFÌWÐTVœä®/J«BYÔ<‰¨¨X’«‹ÈEΜÓ§ÉH.‰¤‹Y&[.NŸê�K&9'ÚÌk®>s¢_ñé$ËŠõ­ó'y>fU0ÉOs’ŸE˜ESœŒ'1s‰LC=¡ö¿�°ŒH¾]aé»Ú¾F“dÓcQ?ÏJtš;•gYÅ\̈Þ ¯¶R¶¤QÝýòGó²¹’VuF÷ûçXIåŒÈËyu=e³�¹›êÛ’eñ˴,_9zUñ«®p.«üÊþ“”f弉=Wé+çÝ©ÂW‰òËù¶ÐóòÝă˜„DS2Û‹˜o©©3×ý;aoG½³LÓœö×ZŽmfW6Ë’ž1Ë¿*«Ì茰¯ª4ÄÒCìçdÅLxIWœé¬Â–‘Q^•±‘ì½ád¹RÙ[“eÐÆÏq•*kmeƒ7Tg¦v¨dŒ eÖ©DÎaÌ9¥ÍÌ4³` „¢� ™Zü€á¨@‰CAã@ŽäR€ `� 앜y Oëìdr©îË[˜ª›ëlÑy zT¸šè£JÛ¼…#„OòoríÎ[xÄ£$±¦òº4Íž¼*R_æ-Tüšàzæ-tÖÍûùêy ÇÖ­~¹úEÄòàñ«ú�á&ÜÂ)G�ûÓ"ôh{¶ÐEzëG4¶’{-Ü ¡�K«…K.±w#ïユ3 A ¢=Ì”»ÖQÝÎB“×”©bÎÈ,H,áWWœ²ð9º9aMˆC®=•„îź¥1>œ±×b?¢{X¨kÈûÏI’¢ úôú\~ÂÓ¯Ðxê6 +d^!ËCŒõ+ܲvÞôW˜�®~Ó䯠¡'îZuiýý„Ò|òãÔñW"OÙA‚Æwp ÷W(Ò‹~烟´W¤ã¬�J^d¯P!�`64øyÙ.XøûvŽû—º•� ¿åo5ÔÉ&nL�L½V†Þ–M�Hkgg_<8¢ÔˆÿIGí2›Qg—×9ܨS#Ä@=Z•S#Í9� Ç†l$BM³É�RÙÈNˆQ6r �jû¬Ãt›�˜Y‹®/h�Ùˆ0nQtff´þ³ý}Ë)÷³ozFeªÍFDP:Íi½#y­¸ $ÞˆˆšÑGÔ‘GñFÞ@™ª7"ì¿"{ßÈfhj$øê¬�xc”€1ÿý=±FˆƒÐ|Õ×FNð@…8KÜ·µjC¨�PŒ¤È`bb¿µrøç%ÓÈ,k#ÿ˜­ëαF*ØG#ÆÁÙ(‹¹öÛÑü0rhL9rd4B¶8Ú £‘É»°Ì†Ùš‘·L”PÚˆ‚4ƪ�fÎÐ tÏ@3ËÌ´,÷š•!B3r~·{ ™ò4#‡è'ÔZ¨!óÑíh¤ð�^ð‰²š‘aZàb4b´¬)>gåkœÎIdª•ŸÐ;KÏÙv­Î©dÂ9µD˜r¹±Fv¬.#¨¦ò5¬‘0J`EÖȶ�…^çãfh�ÐÙì0´Fd9tH“—^E×ȸHG TÉs®q£ã;u¸d³e¥‘…ÛX먷4ú-$o¦ÞêVº¢ âÄji$éQ¨Ölf£ÒH1wò_ìô¥ÿ)hËsyÆ5*�¨:÷ep�¨ËÙ¶¬ÅÝr�‚ª#¸� p”®‘!ðg/n#p͈ãFcç¶�âFò|@VMB$2Ùq#Ä¥Œ¸ÚLÓ ]#`Ëq]#‰ÍTæU<õ¸FIвÈ6b]‰l»UÛU¦†ê¶‘%ÞU~#ãárÄG±Wê¨|;ê¯'f©‚)šÓ£i’Q!GDA0J1„YYƒÜGް½ÊÁ-¦^rxæ+O†ŠDŽè“‘œsv[o�•#P’Qd¬T·K9’Œ¼Øé¶HEª˜¶éˆBg/KiWŽlOòbÀLpd8C"�æœSfp¤ZZ²þ‘I¦8"qÉýbµ8B¾¨�r0p$c@(s(8b[�_?kpdéøÍ¡{‚# +*¤�{�6Á‘02©¿ìñÎÂàˆçÈ™Õæ&Å{nDÖ„É‚†Eka#&ɬÂ!)V6‚Bÿô¯âF𣹳9“¡l3ܹŒïPqa7²"óÙ  ¸‘?ŸºWϕ׈Ròñø×Ü׈éNÈÙ -ÿ¦c¯ÉðãìâÀ黾FÀ¢·ª™FVé�¡ÊùìÛÝ)½Î4’�ä"õ�;‡6�8“û)¥��A�ЮCôò?n#‚›&†Ž´½¥}RŽˆè‰öIIÊ‘»P‰ìù•#y¼ ú¾oÊ•Á‘Tî=;n|¡àF$kCþÅ7²N ñT7]à3p[ËêÁ�ÙÊò{Hp¤3ÛùUŽÜ¤¢…e:2¬Ç«çŽ 2GO ˆò{þãŸSÁÂ=ò´°hÑ}dÆî-’ýÚLÊ*H>3!‘K¿/à�Èìâe–Hô{MÖý�.ùŒ( ‹ÄÛ=*àÌhŽk Dº¦Eb +°ý‰„H‹¥×�l‰?r‘ìј+àûFò¾·&HBD?³_Ÿ ‰¿˜$¸}À!UîÚ^Ûnò�g-@Sœ…+Ç?6]N áÜY°fœœ¤Þ�§Á0ʉ³å$b§Ôí,ÓßÊIhÅ•L�£ €sV ä$Þ7kïI¸ZÅðµmÔŒ¢ËQBzÛ)“!¨Dsî"3T m %+!s2¹Š'à–Q+, åe ð +.€ÑžÈ@-ÑÞE·¤1¬h3PhtK?È8ޱ=yØ»%ùZªãŒ]·$˜Ø#ÐPV·„@ôüP.”AC¹Kž3¦÷’áÚXô/ù·&2AÄdÄ“²CÐlÿs@k™Ä,“0®n• Ÿ šI 1Â×3Ù”„jn4±ì îb袉©}Ó¢ÉÛìmpúÄhbìî’&M6è•ìeÆ>7šd^˜×?c4A(‘2šL A�›ýh²e¤¦9‚¦u4¹£‰ÐÒŒx`e\•1šg¾xšè[8¶â̺ñ4™½€ÁÙå OÐzš`…ÚI‹ñ 5 ¹=v€�·ø,jÈ> 4&¡r¡&§«BMRË^àdˆ6 &�dÎs¦ÒQ,ží¯E½‰šL´_L5q]Dk¢žYäÞ®µ&ÎNn¯õíÅZrä'µ&;}þÆÀ²&ˆé^XMŒC\›ƒ ¬&Ð#š|¸•–¨-«û–¹­&ÏJéZw$¹ùU(Êå.Ä­&n)+Û …¯§—mÞÎP­&ŠzÍã­&â%&èÍA*Ÿ•Ó„�!÷hÊi²LÒ'®ŠÊi²N¬‹~5™aÕ~µ«IÆ‹#I¿x]«‰ëKj5Xóaì ¬ýÈ3‘ç#þ½§ež‰µ¶�R +?l¬g6²Ô4Ï$ý�¥ùÎdè˜í¨ç#Ù™ð ZùÆÙ™ˆfìeY-1WAöì9˜Ú™tÁ­*£úÞv&-åxääÌOg�™�„ÆA¨üéLJÖƒÀ’ˆu&C¶³q©3QFBŸYñ¾Ò™�^ÕhÌœ� ®*ëìÙêL°TÇnOM‘u&¹^¸@�‰‰?Í%BgRmöâ'#¶ãxåL07¥p׺bÆœI8Ç‚b¤œ 8*®1Éw9“Nµz ¹šæL°Ï <[…2³<…™dÔÛ%0“%Ž,§h¢øÉdº +c0“Ì€_½Ú¼î"†™°36郈fr=7$kÂLÂáêwÁL’¯žù´°I˜‰ºƒãÞýUî0“�¶M™pa&1²«” éØÂLà‹†ì Ј0Üoföâ×�šT?°ù ¥ÌdÃ7ß ?s`&ûJHÆÔE˜IØý2¹E7O–3˜I¨[îÜa&iõhéþ«.Ìèëm¥(˜‰¶:sßÂSðµ½ÇL4üû™Õ'¡L,Ç’u¦$Pú1ig]3z*„�ÉØi«õøªîcr~é$Ï‹I‚øNý@•ÐÅä‡6ŽÙÒ‚ŠÉþklg1 �Øqš¿nQ‹‰œ'„¹&­_g;/ ºß-&Â}>—BMŒÇyÖ]ֽЉú2û˜¨œŠ¯8þÐ}L¦…Qµ«@ôü˜Ìn´@ƒ7K$FÁ +2É1¸è”2ñÆEæCªJ6Ê$7 }ЀèOˆ2 !¨WÛ“É}òO?'“õ]>•ÒÆc²hûm{cDo–Çä×nzÍ=~yL$*вÕ(ÞÓc‚÷ }Z›=&ÛÝgÔ~¾L1Ñì1ý”ð{ž‰Iö³™ i�ó„ɺátö0WNß]ª¶„ ˆN`U‚å�0ùŒ5É ø%L¸�I4u°Rb£–ï-’-Ø/1 p‰É°ìÜ2~ c0z13ž0A†—$­Ö +“е õÎ9… s+¢óýÞ#` +(Òi#LÛL¨K4µiïÄ}„È“aFïß¶‰nL¢rD _)i*0IJ�CÄÜ0! Ñbƒ&ИP4�Û@û&7x;{ìÉÀWƒi„ɹߩƒÁŽ˜Ô‡WchLüÔ)ãù¦1Aè"0uŠ8CcÂj›pG Âò¦4&Á\HøMv‘“o¿Ï~j-®pðäj˜‘“°Dc�W0&PGûFŠ1a¶ÈçKcy„ `L¦ º§\¤FŒÉÑB&)ä/‘²,½ dÇd§æD+º™ XÏ#!tDE‡L]_jèë !d� 2 ì4ˆ,drF)zV™�¨ãU•I¾%=)$l +T&�²øÒw4d¢ �ŽçyÓ.dR‡˜/¸DÐÍ™� Š2qQ&c�ºBS¹aQ&pÍOí-» LÊ {ôN½�•(MÖGïrø©åP&h†ÿ)LQy2¡” e«aaQ3(3ŸµÑ6R&Ðz–Ò%’×›èyP“²`П2!‡'ïkžþ§LX 9Yþ'ØÙ�H™„e’˜(d;(ÃÓTXü¹AÊ„Ž^€)3¹YˆAÉL£åq8¡‹;!3)£C`x�ËL$À0g™ Û À!äXf‚³œGO)ÇŠ@+fÂ7'�€%fr�C’¤3)Û(ýÎ$¢˜Q-ïL’ŽÈ(ˆ&XÏÑŸíE�&z�Ïâ`ÿMØFÄ#räÑÄa®qòŠí™,È�ÂÄGÀi/E;špIoÅ|&iâýÐÛÿNŸ ÿBŽƒ/G“üAKtÉÑ„ü_ò5HÔ×Ñd^ž2߬îáh"ö´o×Ñd�nÅÏgÂ$V �&Y@'+j² äÒä«&i" þ_Së~&\‘&tܵf•TÒ1¶;p$µì@k²ÀA—ù<Ö´&‘æE½Ÿ„“†—à£ëÖ¼mÖE•ÌY÷‘I¶Þ µÐ&³ o]�Š­�@â›<ûM"ƒ + þbÀ™¸+–}&q;¼„2סNNcŒ™y±_©÷ ‹]‰IFs›�H–!°X_›ävG3ò ÚD³�[©dç&)€o¡¥@ÄdUÈ|jjªé…Ñ�ob̼ +J­.ß„“2Û0ü Ùâíû&zM~ÞÉmZôöM0ª#>ëBê›ìÐ@DbI´é¥}-E½Ü†u!ÃÚý8Yü$0'þ„Nòiá T'œÓN›³^½R�' E¡úŒ×‚•,Ø“\ü„™õá;�êåæ'«ÒÕæŸlàŽðŸ%�àM8üƒÓÊgÝλ +IðeÊØËÇTî€>»c�JI;ÅõB×Èvô€2ëWN× ¤ÜàdåÅ)³;‹Qi@Jô&…¥ÕóÃÝ÷Ø%*À WDe@Y™;ÊÇ7WW�åý¿«ÇŸvú'¶ïçlzÐkä:£¢MˆœYEjÕ?Y“ÈúŠÝä1µbµ::ÐdÿdE@ðêX"h(þÉ~¨±lg¦4ÿD“Р<ž¢õ¹âT,ä(ZËù'�¾Ô‚µÜˆÂ�m㊚cãŸD�jŒ6üZþ¶T‡eo +ÿÄ-TšíÌjßý‰#`1’Ë+L-?Só'‚PHÃ1,ø‰u•m¹ùÃ�ÃO˜_uºÂOÒ’‘�»Öà'¾ H&?9GTý ”üdáI�hé!?!A_ñÌX‰–ŸäGùÀ–';ÈOLª½…–IŠä'<UÀD0?)ñp9™šræ'ˆÆ¥@MjÊü„ÄEñ*:((ʶó©Pñßâpç'_VÞç'#ePÈ5™3ëéó“vRÄF*{~BXy®Ô÷ÎO~F³üœN.ƒ%÷—që 5OŒhAÿ$C¦:ޱvé‚BóOŽI„QÿDþôVE’ãbý“CR®��»öOî:e0ÿ“|ï9ÿ¤m(uh$ɳ?Ë?k¡Kú“5LûKSDןô�^|¯DOþd[qjŸ@âw,µŠrè'Ô°ZR‘-ý„‚%_ó“çkŽmÉßü$CÈØ¤ŠjnùI#Ì ½?¹dO´sE»Êž]ÚŸxÖV]½?á„‘z_̰?Q†Å«ÿ¤öì£Åm²î'[Ä?¡_“ÑD?žŸ,þ÷TÙëúI¢$æ—OÐ�×4 ˆpÒçX«‹¨PÒ�'Ðw{ãN›ÛeýT¸^‰òI‘;Âøf@ñé£iô0ï:©á1|@aÛÜ'°ü'�Í¥7»°¬SÿÉHYT(?â,øO†Ó3& ’Rä þ“Dê½[5”´#ªÿäf‘4ž•í™ÿÄ„­ 5)æI0è�–'§bɤ¬§óêÀáo)FW)GLNg)¡s±Æ¼”RÔþz†>ç¥h/â‹•DuÎÔSù¡5…©éó1ÚR–×o + £ ŠNieÎñe +N8èSD ¨ðÂz†F¡b¹ŒÊÙ(éâ7ÃTüA:r*™ìÄG `DV™¹4g¨háPU¤Jr'êª{™«É²ÊÖ7sdºUô¹«\еÒ+V¼DIT.×Ã>·á V4Ræ-Dd%&#´{¾ó+ÅÐ cwxìo>0ôVì}f¼ºW™I8\cþáÔ‹ chŒCµ[¥¯nE‘× M +¤œ£ ë<¢�«ZØ 0‡Èyto’.‘1G$‘ƒ‚'Øü7|ˆÎwNO™|g��÷ñRh¨žëjð‘4ý2–uÏ7§©ýéâ¹9PµAoFõð¯8«¯> íÍÑ9C¹kë©0¼×± ´ö×°«@- ÀÒ¼úÝLRK3é%Ä`˜µ¾tǽ–.±Ó´Ý[^ üb-Ln)nö§§û=›ª'oÆÑ‚YÙ!2£²‰€;”Âç—ÉölA*„Œ2Ü+ôœKG–X¤Œ ³'yäF¬ÇCšãÌŒ½ã‡žl\ÚXBZ¨7ìÖ·¾Â-mt‹ ü1,ÛiÜ0ÿ:v&ÖtLæ½-”Æ_X`D↸ýÚœ DS¸)r.,ÊÔ¤´ úôš¬¡'<4� è9àŃ/1 q´†I³¸q…ï‘iOÙF5˜�Y��ÅE?"Û[ˆä©i9­üº0k£†nÊS—ŒÊG%´ÚL W~–VËð&q xIÑH³ Ê¿°a‡f©3ÔøÊ€¾ÜóÄËt²ù6. NÇþÀGç݈׽êí^ÈÅcr÷�4P›ìmJ€`èÜ!6³A ÿÃErç1X¨Ì!Ð'Hû>,¯µ{¬ã½ `›PMQÀ +Wëdmû×¾fs3SŸU“͵1ãr¹æ¬TŰ(`û_€ÚÙ­_Töy?,ZõfT-J-Ô žXÜÿe$ÆÄ+šÝ +íåO7¼Ò2AG?·º�Æ^(KLlim;ñrʲÎÔ ‘f)„€›Z�ÇkÒMÜãq…ƒ�Ùf†v69§ÊÉp[¬ÃÂà~:d|Pž-B|¶Œ®À¯Í?byô%ô¤˜ƒù·.C¾d©°OО‚¯5¯×í¶3�oGž r[=8=õëRŽù[QÓv/o…Á›lì$ñA&) *,iÊ)o¤m2ê„Dë¾C~�\‹ÿ(xÚ*š‚u3:€d2oÝߢŠ“EŽd©JD$z:ó¢Xþpf¨~X_ÓàÕ&^ǺT<´Ãœž«¡ŸEA¨*ÜQÁD™£e,[v‘Q^‘K^†Q˜é‚vù…U%[’(n4 Yó1¬öí¤]x�ý3Õ5ìLƒÀ+ UïÉäòñ”Ù˜³\�0ZÒ|ƒ…˜u��h�æº%Úw-Bù6…Óœ°ÀÔËF7$Rïÿx#«‹ºìË1ˆ u9–+i=`VhšWÒ–î·Â�~’¸Ê’&‡¦³ø}Šžìø)±Eëù�ZÐ’GY b¯D Á#QñÖ¡w�ÐFØ,ã1@„ Ëžb®”|7Cÿ¤¾8ÿˆgé…ÌsúPœÅ×�«‰¥Ù×ñ™µ/¹Ï�}ñÇZÎq0‹ö®&üè„ÃIöꀗ�|'ÒwÀ)„´¢[eBØrŸ}8Òà…æ`6Ã>>‰ò—ñ¡*H1mBdà +ô˜Kl+ƒòNwe¢)Ècp¬ª¾”AêŒÉñ0Û[5û0 Õ#ÏPû« SÂWGÔ›ê+ªndHaˆñ3кŸ}¦>M,ˆÌôC\©ª )ÙlÂå5OwÀéœ�ÆŸž ­anEÚ4jvzâÆ³vÿóÌI¬|„êlÚFpÛ¬Çþ99Þ•‹ó‚ày²úÚ6ðKcÝÎò)ôp•$Ì›Ý}VÚ² cfVk \•d�p~í¾í²eU‚`7¸È50f£·}6ç +ÿdf‰†ý:©Æ š«}" ±÷¼5ì?7V0Çáßw¯;†9¹Öà)7õ6 ®„°®Xƒ˜ÜËôÃñ6”1ÀBH°;¢ou5—ãÔÆS�7/ �ßsƒ#HP·WZõt"Á›òXULbtŠòÁñvŒ ‹éŠ‹K(zÉÑ™sãC.·êƒŒ�8ºmí°!†&‘<®d‘$*¹KõxP0•t4ÐG¡MØ/Ì·hüÌ gæ¿x4â“ÁRŸ\9Î:B¾ô÷W~P¦ýæ#K°þŠ4kƒOŸÚ?-\91Lu�¾èµmKr¡¦MœÆ–ΛN™ˆjs+²'5xr1tý¿Z••0!ëâŽIc•ŸÃL‰ ñ¿^&àÜhdpÈF0ð‚ÄúYDdí0—ð¸Tù/kPñgmÎÅ%´cF\‰ÃP—ã[]ÃÃG£cîò"œç£DYA+ÖŒ !º¿nÆ ¦ŠRò×p:×LÚER'Â2‚æAÇ$d^ȨÇÞ2X +'5�æá¾Gð„¬ñ “0½˜^¼¢ öÆÅXçO[3›Ð?}xD„’ÌmÀÿÕ˜qÆ£�BñTX æ%É1º¼Ç¤\8{?Dþ¸iâÈêÃìÿ1{¹‰2U u&"·Ë•=‰~pv@Æåb…K—u�òªé è]B.:Ò`…'¦§r¨$Ÿ1É÷õ•úÄÅ€Ùu43 ‹\G~Â0-�Z)Rl”t—#>ÄOà&DÊHU õâèÝRpäËí$}·\ÇW´k7”G¥˜ä¨»=)—6–ºÝxånE�†'Èsð!|+†¡Q*Ú·»{ÌÅ&Ñt¤g‘ñÁÇ$˜…W`�¿Ú”9!½3„¸.B… �Мî?—„ðØ®D�<´ÒR1; +Ì_¤¸­äâwS‚ýC„@}¿û‘<]‚! ÃßN!}) ‘t–TñiÐÞXžÿ¿hëθ$öÛüç­KoQùQ©ŒKfèXÆ•ËňýÃíêE çCR(Sbd-\êÈ+c]Ôws3šXÞN¶ŸçN\O s‡ÏÃ0âCb…4�.£ÿÔI»„0¡Q6©ŽÌ5²Ñ±aÑ0Ží +±Ieö³zXBhÑ‹DþlìÂ)6µÀ¢ã6ã {^«‘ƒº{:÷S–³}5-û_ν+-†×ÌÈÞ/ë•bÇ% Žƒêã/¡áŠ3:#�I©Ê6ñ“?\J‰ÇŽæ®é@×W- µ#—„HÛ| ¦ºj(6>°¬Î·:àúU ‚PöZÖX錻�÷9QG÷CF€×öìBꬶDÉ‚1à)-.Æ‘ÒåfÂg_Á7}”–níCî"ð +‰«Ÿø*Àîí!tÈÔy‚,3x†Ð]D–¯PN /€]È?,&ç�¹e«\‡ep¬-q�;WÀäí g„Sí£ÒެË(Ÿã›‘?&jf˜þ•Bèip†VÕáÊ…Và š{DrPC±aa¶Çì6< é .P¥° U› ã†rSá9V]T=Ða`hÝÔ¨Á|5ï˜Ëã²Q(ýÉòa«i� j’°aÁó ]h6¨4VÎ�È�0æ„§›qåz(CÛ6Âx!ü5ãÍ ÑAé…JÜn1'4ØM'-‘òFˆiL]­{æ`€¡•óª[³âVÞNép¢v?–aŽaJ `Öt’¶[}ŸqbVîÉŠøœæ_RÞ`€8‰íd�ÂK\ðEjõå�Qà y›,ÎëÊ·€þ½‰ +ÇŠ#7Ï�ʺSÂÒvTLg; fˆy“6 †sIøîv,®+sV/l¶Òh -¥ØJða‚w­­>×àá3p\üßÀ·/­«¡¼Âá`+U}ÅÈBàCŸº>“C#(3غ\ÒPÑïm„µpÜÛ©4ÛÑÕI™zçQ‡€{P�IÄRyES)þ‚vÎÔÞ¸•EN +_@aØë´“à`tý˜EóØ!aIë…âÉ.î�]µ p™É"�;õ§Xh6?ÄCì&’¸g +úž›ðûtú¨ñ—ò˜Q”‹Iä$û¢‘u¹û"M±Ãš þcÛ:Íû)ZÈõ—ù Û…ßÝ$à +‡KU–õ~õ®K™eQ® ®`ÈØ»G%뮡3«=$çá9ôÐóÝá ñºÈËr”�Ò<•S2çÃÐ7¢^\wšC÷á첊‘éØªgsNºnÉÅG ¦VcIe IC-”¾Zîi…D:©Jàr°xZ×õ®H«2tÍÖµìÍ>­Mô¯ªjáù +â\ +\IHCžÜWáPíÝBï2FñÇÔKï»GO…Âg€òŸ£ Tõ’’¨úzv\˜+$q»R~`2èTwÇ·ãÁý®Ñ Þä&¾¸AàÊ9—¤r%½V—ìˆåäí;8&RJ.[97›‰t䉃†gE#õ¯þu™ß«ú!«TŸÊ©qIT¡gÙ+Õz^ì�òXlÒâ£5ÖX%>‘ò\Ép~N'õ[sYq¹¶ºÀûKÉrä^df`øúÞ[Vgx~R š+ÅÂô!F"2üpQ %´Ìª9ÉÌ�×)è�ónÊ‘~ ¦îžµÙÕs¼'0á‚è«ñe€{,îÊçL¶ÙNþâ2JÚ”'Þ…÷¶ oYÙtêæ™ëW˜2š†Q¸×´hºØ§�ÒºZv|²ºŸE3ˆÕ‚S_¡jy×?Fk¡Î§÷S~ÖÞà‘]­ð÷ĵ*áÄ�”Šèp²ôUäó@ø´]ŸR´^G[¾çâ¼í„Œ¦µ?É‘™ÃÌæ@,>mæ$Öm!sñc‹ŸO£¥È…P�x¹iªÀ€ÖǨÃäÛÅ­ÑĦxdJzßHÚ÷¡Žgsg*ÆÄ¿Q¹sÓEɶ ¼‹Ÿ¬êˆÓÒÏ_këâJ¢‰ÂôÝ0¿8¾‰«j#a°X9úèœä +�°½Ø=„`e|¸sÛÔŸS¦êO)9 w7;Y +ƒKày9íƒ-*wŽ6øüˆô#çÔòÃ�F Aqc +´Ã÷¿³�5#Æš÷ +è5ûTùÒ$˜ÇƒS;•cY7!» MWÖ@Jååw£�ùõp0]2Ë‘3GùX¦g¹˜ðÆ€OlþÕ Ïbt:](RÍ#?¼(¥Š ³£�`0MÑT@$�í–ÎFc½#R<ƒˆN꫌϶å+"Itô ÜzrtP6Ž0="xÅ_Èi—s‡…EàRïƒ_Úì4êmTÏܘtQäBPÆBeÞá¹ù-àÝ?*§-Ëm|wP÷½•®¾ßÝ_AŒS>–]L]ª¬µ:ø#£pBê@xÙY’] ÔÒ ¤#¥ïâ¬àÊùî@¢jN�*WÎG�À ƒ$*��»wñ·á§¶Øi™ê@�Þ“F>ð:I5ƒ”¸�Ò¿(V~Ó}n�\‘ àÆ-™dbgwIt#fŸã#MMo +>8"� ^â;œ],ñ„_ üZî\û3"N9ìfx]ã~¢µ)žv]íºªq°a‚HŽ‘ŸìÚýh M4™ƒqµð&«ÅJöí\ž9òi[¬l{Öªá^yeD#o‡^ÆÑ-òMTã¾Ðˆz‰ (䔤<“–ÏÛÌÜ(Ѭ<Ör_iµYÝq‡Y_Ê’Ùåt@Ñ�a1kÖžPëÂh"‡kò�=Û p…×F?.‹t¬%âDÚEL(eÚÏä¹á kê3£ +Ÿ+”Ħ³P’ðZ ÎJ>)=LÞÓzìݲ:?ȼßá N7žFóFô¯ÞŒuƒAŸX-/x¶�:,b§÷?S¡‹Ú€¨ÞN)Ã-’úøŸp†hâ㤬‚f‹Q^\Nÿ@«$fk4¦•�veTÉÉœü¡%±Iðê/# z-¡PÃ�Ò�åÂ-æéeäBq3! õ€(@tv›sÿމo„s†ìÄÿE<ˆ‹ov{ó.)ÿš"S/™iÑ:’¡âi<&z6›\‘¥h +s!<[¼SHŽc)ÄòÓ3%wcÛ¦<¢9k’9ñûhÆ ‹‡[@ôÛßîO„u[ÈŽÕÒìV>ÚȸG¿¾$rÄzîM�.Ïõ?•D¡L¦4‡9•BPІv0…™¦â¡ô`°†Åé [@Jƒ~˜MLò¦>‹j0ö—–:èÇù| Hö<…Ú²¥{Æu‚úá ¯àò ÂeH𙼙¼ût„5†î/ë%xö¯7-読V¦M�· t É“Ð÷÷À m¢P¬ (‘‹òžÇ&ÁŒV…ß7«•sšQ WˆÃ»ˆžáê-ˆÌ±åCW–Áçߺa-•�Г™«8†»ü,_‰û8²‚Q«²7[Ú�,šø–b¬Ù;c§Æg׉�c̨r˜Ý ¡XTl{Õ~{³o›/�«® ¬?¼Âkë”ëå�”†IB¾)¹H\V·£ÃI/Ç>€Çd72½<‘’¥ƒ(8Ã�.Xî +M&ƒV£û—4<ëÐWdÇ� äÚ\†}0qS§0ˆpÉüK$œÂ7-�J“pæ™÷ }”F DÔoÐŒæa‚ò7 ™ï˜‰o=Èb)…“¸o­Ð7y�0ÍÀãkBº:Û!¬†ê@K:-dׂ-ž“¯S:ì�WúÂÁ¹¶Ñå‰�Þ.O,¹¸iÅhl‘“ß_&%HÁ>ä´=,°n^V¡Í`­Ï6Œ“Å™U3�œÀ+µ.³¾½”|7+_ls¬‹dD¤{7ÎpÀáÿ�ø.žYö¿tælÁ«s¹Šä¢„½“2Aʇ¿†ÂƘG»pÏ/CÀlàxÿ‚µ>ÌÈ·¶V³?7ˆ0¡¢Ñ@žÏ©žÐÄ }rÀäM1á é}bjµ¾!ÛÇîë* +K6-W´ŠŽƒEØGÓÆ -ÍfõÒ'° “ªÓˈn¦¥&ÉR”&¹"zJ͈fÈ”@.Ä¢愎v€d»y: ËS´8�3¯Qe1³ààžÙ£·:¼èó±Ö…)/yc“ÀÂtc…,Dòi7]»Àœ?8ècšÆ71„ § J±,†Ìzû¢ÍíÑŸ_Nùr°qßöCtëq{ZÓ%(J^’Uˆn²(Oÿú24“ß7,WZA,Áœ–¸²­ 3{I± +˜°�õ½´^m¼±YV‡°DóòEâè´Ý,«¶†¼Ì4L0�4[œ£DR-•Pú„)ZÃÊϺT/K¥µÖ5 ÍÇŽf,ïÿô–×›¬¡‰Ï0q2=–ÞZÂÁŠF>ÞZNù¾J`ÔAf÷’F˜…8¹zCY5¡_g±Á2ûyu ÍBº)µ,Œ›ž÷Éü‘ +à„h¼ÕŠü"›âºÔ `Ä„ÿlÙÎÐy-3©Ñ’rAežEle]k^IóÕ cvçÒ¶óÞGø«4ÖÂÒ8ˆ¸­"“"ˆÆ½räÎÃÕaå�bð¢>> K+<ÿ�^É΄`ZE;#eVùÆ E;vŸ”µÁ˜0C©ä“W•~cFið&ëWÝù8²'ÊTÞ ¢û¦Š˜ÍåTã 4¥Å¨[lÊåEÞ³‰GšÎ~}â AŸ� @–~ϰ}œ +ˆÙ�“àÙÃ9õZIÜ)ú¿Ô—=û¢gï +Á§N4Bwšy#ŠE«@j£LËó§ÇUÍ.X²‘ÇnØLÑmëG@®nY &Qøç üžÌweÜ(`˜VýŨ8RÆ"€\b7<ÆhžŸ†@ïÚðtëÀ»¸^hº ÉBK7^vCœ§È²Ä’zÀžBƒ¸n %de/b>}Ÿç±V"ÞŸ6ÎËWodè3!y—ÙÍNÐ/×é2{ÖÝÿ š‚Ã5ÌS¼J¯3Ó{¾eö;}ÍÛýhÜž=ŸïÝɘÉìÅÏádr9|$³‘¤p�çjy×üEHM.ÅÔ¸uÿà- Å›¹ßá /¦Œ^jH1ÀÑݦY‰ñzùØ @/ˆSUÜ'Lï!úÁÍÅ“üÛÀæ¿ß?s°Ï_NÀ÷3W­Öt—¦­ÞRYi¼*ð“t?©Æv+í¬A× }јíøÇK3Wžü£ÜÕ u’^’í‚æ×4‰a½G¨Ðª”ô:ä�Æ4DLžXŽgܸ^¡#Dæ �œh=`’Å}œÉ»ë’ɇ9üåMccñà/Mz­òûóªMÅxj ½L#KKh1¢A(°Âžä¼ ªŒ§¾çM¢Ú4;8�o }�³-ùKiÇfäSÊÐ×9 #i½†Bo¯P¿¨í…ðÞì§¹<0ŸÀ­ØÄ3X1�›žø­OŸÞ~ö\ýô’4!oêä +û¢¦cP=Õà-QÀD,øòÒ®¥WF¨–Ðé ×§;jÕ”­«M‰#�úÚKb Ÿ:E–Æx+&ˆê¦AýAƆÄK\rMòùn_‹9)à7s­ˆÅ—ü{“�oª†]ÊN~ +äÊ7ÐÛ’wómç�ÒZŠýö°„ñØÛùš�nÈüùv<ë ",y‚.a ›qÌ'Õ%ôÐ5Íí²M„szùý;?µ‹ÅõÝÌm�_ÖÔf8Õ¾�KÓè/Æv´‘]áò—{¸Ä[rö±(ó,•0 olj·DøMg +„OªiÜ'íG¢â<Õ +KC¡ÔÈsDκҥûÙ9aØŒd³EŸ Íu�ÎBªú!,È^l—uÊky„gäs�úuøu «mV<€˜Jnª#×?~›Mhy.,ÈÏ££™" 0½OαT´yBTH÷„b&CéPÈàŒM0ص8áÒ Ø¶dHé£ù|‰6Ünfì3>L\·¬zÒSPºÎûöéFr®\ŽÚ×#“ÝjH0HÚ—Àc˜F}óïP9¯‡Á¡ùµÄJÑÚȺ¿Ÿ`Ÿ‘Ýâ*Vª ¶qêGCJd²’*ñÉX‰ˆär«µjêÑH +[”Œê­„�Ó4pÕ—ƒaÖó +ß×uǺŸœaÊ1ÿ¡‹\r¨Y}Q8“ݹnø?žàÍ9I÷×Ý¡ý7÷Ñt îàJð¼”9öŠƒD1¾!“ÏZNR*R- û&«Îvuª+I4 €~Ë&ƒˆ�ÂÕ˜Sn�C¤ñ‡šƒyÉlTaȘ[ j[‹ÙLÅ×¾œ!Á +è<ŒV�3\þ›A¼ü£”¶óEMöO/¸ÕˆÚðCüY÷‡ªšñB§·Ÿ“Ö5†ÌJÞ½ËFl©Qnצ8®úp%øÔ8PØyHT‡ ô‚A2¶4iÈT¤>ƒJÚ¤˜A-}$;´°¶ýU#\fx²ìù¶8 C¹¨”V,/áè‘Ï9Í¢h~òçKŽªÙ;¶•RQ%òtÚþÆ»ŽQêÎíÍ@AÊ쾺fT¸“6¨EŒ¼%‘2ÕŒv´Ýéï`3òšÿªa¾&µðèä¾c¥‡Lø†DÍbˆ^dŬD—X®¬§‘l™mÅI® ]gÃ%N¹.‹¿ì3š#6¶›$j8$_0…psž�ÆqI÷�@ôa|¦1âUP½ +×í_£†ÙúìăۛÐa€á2º©l¢¸g„ÞHXÝ èW&tì Ý,›4¸ 1�?¼%þ7Ç,TZ% k"„Lžõ£²Ì…ÊÔ“QðïüÚ3¸bä÷Ùa,wK(£�¨TãÀâk-Ȩy±i€IˆôA#‘ E§âÃÅòˆ�ñ_77¾Þ» "]u|k5/Ž`kÏ/Ð�!hÔI“N¬|ª¥}((‘d{ቫЗÁÚ1X©Ð´êÔ6tôrêùÎgÞâ]L(êYÐÿ�hÐXLäoÔ¥? Ksõ°wËêÉCƒ™oqG¼`•އõæ¸t¤žet°Ó'V¬pÜÎéR½ŠÜñD§¶ +ÏŠ£ÜbÞ„-ù½Ùí60Ú»Œ&V¬ñq9UÓnµÝJEß½+«VöÍWÃ2 Ê “J¦¼ˆ…=t·SgÚ´zÍ¥åÐÒ˜ +Á‘‰ëb’ÆÍ u�„Ê�Ó˜ýqJ\ÆÓ$­îõ/ïˆÍZO~W¸ÔÓ±R¯¹Õ¿¥HñíFk”Œ(UÕ�ßCÛ�-�cç$o¯oSнoy L ί¡"¶ ö‘käÁåvîx‡-pÚâ¥>¢5ñ {ܸMÊí.U¤—Ð `.È嚯sÇtoÝ7d`‰A»{…5hL,ûWës Ü1±=Ýéµ› 74-¼#­’оúŠ‘Ê˜ «öíN™”ô5G(É N¯®®¼ÂP·ë?:¢é¥?ºÑ ÿÚ 7púü_íR<² &ºø·à<‰:DVAšà*DÕËH+©}�s>•fD�âi�÷'0©mùÝá]È’šË­)Øá|±ô¡Çfhbr { +Å¹Ü ˜´½¼›CwÅWs¢»R©¢W9öWÔgA’«Ï`â˜ò1PÒÁ�2÷-áÃN¹pÖÑŸÀôÚ¬J©ÒeÙTÈä[W€>Œ#HJħTÐÏö®‘hœ‹ØHz`º§G ®À­j`'ø73TSÜÜ8¬Ú\´á\G·/6‰€§tE®ò¯x”S=SÙ¦ØÛYl,3Pk”æ]0Îå&#*ˆ©™Ï$Ð +/ßW#£DR˲�NÄ!À ‹Õlú§¹ò:e‡Åu#.boLt¬Ö4 +“E�žp)ÔÌ—dË?¨i64àʈøVov j%Ø7»�낵31e_Õ»'¦-2 È2 +‚Ä–ê%Ô¢y{Ìý�üÔ~_Êö±q‘¬Óà *†!-«½Œ¼ ³-@ÝlÂÞ( ÐÜGì2 æW{»Þ6Þ™"ó³ÆSKi«KL›%þú×Haû¹Š_Sœa*hÈPÄÞ-ôÖá 2üõ ]´XHªÒ¬rhg)÷"" + ;_³‘%4ThÌLK«¬} ˆ)#®2ócI•Y>s9OñT2S(g ¨ûþ•˜±>!0/F�Ô¯JѲ3d BÁM�F1³„¼?ƒÜ”¿ìÞƒZSL3pU)›£>ÌÓ‰R½ À·sû“Ç;´“ÂyjÄYºænÉM äÞ:§bß2€ÎÏU©¯ÁÅÑa8V­kųñ‹…µ9 “/¸!%68ŠÌ‹:÷„<Ä�DÛj7Ô.Dçß8Ÿß÷>%ˆï ¢hó +9®L ð… +\ƒÊ?Þ·ÄeØûcÙ‰HõxµöUZ¼ÓäíæH(EäÓm†±õîÿD“Ì+´54¼?l>z|Æ¥‡¤ô_„²;Æ5‹ÔƒVA0¾ë¸l*ˆêR&Q]K¬HIÓ-f�%‰ún'òÇ%Ê“–@š`ˆâ¥0äÌ«lh[[Õ=LÅY?^)Ѳ›J-<’mAôz{?@ΔÏ(T€PÓß’|Øfjàó·'÷c6û¨ßûô¥9A§+Œ|Û°öJÄG%n—çî…|?SÔå—Ö÷=šÜPv¾¾¢Í"wbŠ—ë¬KÂ&!Ìå 5–àS�ï2,ÊX+ÏWdSzl^àr»lTÕ}Ø�?í:Õ”÷S""'2×Õ¡–ʸ½BÐ{£îÕ¾ÈK{-ÖDò§’{ÝY¢þ@ 5ï—J" lUx©][ß了©L[îŸÄ°I.îÌí +­’–Oa’½#·©{•uyÆ6™­*8öÔŸPL¯;ä7wÓîÏSÏMz§ŸJp9ßË/j‚.¥ÿ€o›2܆šaĤœ"øDRQ)*m(òÉ+¿ ô“AúìðÝ4 +?�[åA11k-e¾ Ö÷†ÒÄi"7zœa¹g¸vþÕ>+.ìó>äùß‘°|/ 8`û¹�Ç=%@‰ö7¤ÐNXÉèF…öá‚°HëF E,iS±þt¡pÀX¿i8'2ðXÓCé¬Ã‰ÄÓEjùÔ¼òÅDÊÒÜÓ‰óÓ·º(êØdP—_µ»]‹œcžÐ4á &.¿|KŽ7煮ÈIÑ?9«$åh ˆÆÈŒ#R&@.›$æ ïeeá“,ú;[ E]‚ÛÈKnM¡æóQ’sf–¾dú»h3^¦p˜¯¶�SÊÍî/$”\0ßÒÞå?ê&}¡†ºse Ï ,z<�žPèµ�Œ”ï ìØÀ…þs0�å­JYƒð 7S«ÈΑ¨MFÇ ­d�½NrzÂϸ—€†û�Ò3ñëѧP=»=}ýFÄû•YK÷Šî Ég/8,h%†I:²L–ŸºÎ Z¹X…ÿ8ïHç +«£k üõðë¢_Q:b¥Ï÷¡µÈÌc>„Åê¡ÃfÑÏaßD‡ +È"ëð§§BYß8sT$'ÖHÛº ©’Í«²wXÜ Fé-àz- {$–$ËY¡6”À(ÉnbÌ®<£Uë=«ÈÒáEIcI^ÕI]^ü7´_^|Ä5¥� ‘ëàDåe®XÙ;RG³ÃðùÉ3ÖÔ;<^wÄ�) +ÁšØÏU¢´®e®›üÇûöŽœœ<ÿÙÂèoÓ›ÍEü„‡îANÆ„¢f¦h]S3ñª‹Æ®{!QòF£Ñ_Ùa3%ÓÊ—ÿû€\©rC\;3”9¾¤ +n¶[,ÜÿlâøiŠ š³–ú ž­2’ê ¤ ì(ž…‚™•åáî1ž³pà3ý> 1“ ëÊïúȶxACÊy L¶Í4S-H&ú±z3{i×"cÄ® ½¾œm²aÜÿH +4­©(o7$ïpÞ£t0^DsŠ<7ü R)z )ç&®Éúˤ‹±À‡ÏÄo.¨—85†þùÿj²åw—ôL½¨¿k8ŽsÅJ¤ä\f>(ˆð!³×E ñ�fdÖì%—i�”d‹ýò#;�±9+÷¨aþÎHj¸ý?)nLo_�3»CÐÐ> +u}uÓô +N¬ÊÜ‘8hGVÆŽÔ¾­QG(®ã ÏÆå6;~Ô_û…¢.y4&¿†=M?¡©µ«@– >Ø «Øñ|Œ19—Ä ÿÉ ðZ[#‰?Ž2ÚŠü·ý ý“°´¿]ÃÁ³«7x-âµÑÇ�‘�ݪÑ_Žþ•<úR”ÅMÞ."Zì`»‘ÆZ °²Œ—&{Ý燗ð”‘-’$¥H-×)‡Ã8�LÚcD'uïhÖô\2“Ò][8­÷x:)i8õOœê?¹±fvw’:—ùѯÈà6s;¯=ßžã9¾Nö âÜd朓MýT§7Õnªð¼·Å¨qpÊòI3&°zšbQDøÆ¶GlÜiìQÀk}Q�™3\âr9¤Á•û@Ûöª¾©ï¾U&d¨Ìl2pqè?¬‰7ž·ò +I)Ãú7d­-•MB¾P9*,W{aƒut=Ñä¶š¬ YÐ=p½N rM¾.:\u"ó/È¢¡O®-ROàŸƒ–lÃwSÂ7”µ0ªíã±{”èÝ›}ÅxáÉ %^ot›!RWE¶þ$¾‚Ä ¹…]JNi™D[ôbù|;‹Bƒ”SHª¡ ºçú=Sº1^ŠS¼°Â–V0¼èÍœsWÁ ±‹>Rñ™¡Ä;CìŠ3kj‹î1¾%L�;Z¢Q÷AðPJÒ{Ф±F)3è+nw¼'½ZqŸ[ÀàZ1ܮެ\­]ì3AøÉw¥Z³¸å¯œŸÇpÊöì¸O +]l¶BØD)ǘþªoΙ¡ì´®JlUfwk�[ JU1Í ÑT%ã͉;œÖ‹�V+2 ªÊj«Xd€él§:3Q»è¸uó§ MúÜÍbÓhØ›â¤w Ô~пÌþ°è«õ À7dÔ AÔvZ¹“RÎ;ÌË[Z×´JË‘Y·¡²|]ª¿uèkŸR‚D ÿŒu‡?þBYãc�\ÞÄÖPD*§þ!½ Ï×~èG’ã]sDÊ2ÆÕLÞ¤Œ¯i½®QzÓ™) éIM¢$hÏæÿøšÅáená^CX%qí{„`³òs‚×âACŒº1KT×6Ý4ãMÚPjÝæ+€îª’t|„ƒ×ž “òÀåî{„+n™–0më^7+¦&~`î*ŽÈô¦ŠãÈž膋ÄϱúN( Ì©ûš@ÿ¿êB•¢Ò4b¬œÉ6=Et‹{;K=5*„Øþ]? •aQïXw�íÈ®}x�{™…ѳ,†Àkäž×˜Íƒ'çdê•–-‡T/ëO¯óâ3nb ßÍ¡è� Ðû á¤òø ã|0}p–íUâ›îFt…uZBûýÁÇÐh3ôSLµÛ\Å„šÈ€I‰³ñðMõþÁÓ�H<[Á^ºÒW–•iÙD;YÇ=fÚ¶µ…i®Ð-±Ý +3É$1ÓÎÅð¸v4úá^³Ì~7·D` ÏôÝ6Þ&$ÍÝúÚ5Ö½Ä[ÿ5%ònç>e=&7ø6?Æa d|³î¾¾?³u�µ,a;ëØ.–$_�Dš$ÎV“*# +d•^i:bÃ�îê�»Œ‹1èsÅŠ"ÑXïV¡«¥(�Âp +Ôëõ‘O~ÔxSõú‚5SÂÚì…¸Bv*²+}Z\ø–ø»¤A"§Q‹*jÀÜÓA£$]Þãu�e›A÷u؇Omh$±‘’+ùübaD׎yÄÔƒ”>{ˆÙÅBcÁ-ð11Ìx®î41÷fÅß��º!á°þ¦1ø�®ïO¥Áø°UŽ‹:)Ä´ AÏ#%bo¡Ù¿�V %Üúÿî´Cø0dB‡ð d‹ðÏ#—@ãÇ—�#aÖ[çå:‚e#ô…cWû»ã?\6�==Ž¿uüNàÜ�a0”¡òŒFä {7t.‡—™n… ‡—¿a�6: î”³þxp“í?�>ß|ÐÖÊèúÿ“¨÷[!€¡¶tgëx+:°¸9© èöL{�@¬4à–�‡ÎeÆ©~2�õI0Y¦ìŸP§Æ}œµ³a]ëÀ[[�Ь”Ôª&¨8`DrPv^‡lNµÓÀX"u�à +D›FYü¦�ß2äHò×™“óÌŸãGkâ2,¾üAVÌc⽘Ÿ�o¾Ì·Z”§2oFQÀ(ÓjÈÐ�Õ¦‘-«â›Œ«j•‡ñ-èMV/™þÕ4k é~·�L�ëjô #ˆU\åüæ­)±ƒacÒ�N³§õ8¶ÙD¥£qÔj/�Ù›Xý÷D¯•®Ï fê3ÄÀc5!!�xUѳ?ÆJ©<ˆ�û¥’—kâûCXZuc«:q©º*?Ô{!SÎ\Õ»Q½>ÙiBõ¦~ÄFõ3ÌHß +±*t `ÒçwÕ�»°â 㾱׸l† ›'ü +¡‹ÛsÝÇÐêß¶9ÒµÛ¬ÚÓ.m)€¢è߆õžìõÛ.BÂW)Ô-™�YlßO+ÜÍÚ*q…§�4v¯ïFû$Q.d¼û:nËt»[îM¢ØíXê^R*f)<åߪû‹¢£zÁ D—졤.3 ü×Xl“:îëåë7 „QI; +�{LÔ*¾wp·¤é5Öy&ýsXZp_ù–5žL®ŒþŒmWà%Îw eØgvï((QçÐã8z{ÈÁÌÌuX5V¯k½;Ô7MF­îvƒ/�F_¾çÚü×vñ¤ òApk !žî„º´q1‹Œ¥Û5À“ èõÖ†Ðͽ¨ÛŽñö—×aðÿ“õ7>Ä¿+·Œ_VzˆOWv߬ì¿®ÄÒñ·‚Ì8–1ãúô„iNæ§Î4…$<ÑŸÞìòL¬EÇÆè�Qhök›_+"'ÈèbW'ñPuïõšTz·×ÐïØ ¯×\™^ë* +'H© iâ�‚¾†¾ÍZy |/ëÍc¼fYô$6=•½Ž±°ŽZc©¼¤TÌ:¬k\ŽÆk+� à-€QbTV º»�Ç)$ðaOwhšaH°\� f�†\#s‚un·º›Wu$X[I&–³°‘SÊ_ÎÇ;Œ�ôîë�Ž/t¼>†êB[WlºÇ2e'²iÐ�|BÍX+i¶ý´Z ïnEò·Ãe“/pZ\ê³??ª+,ì~&.°5?¦xæeB^ŸÇ÷ÙånùŒý­R.¦ç;‡÷zhbçÿ*üÇFOu’R +?©dŠ&¦´Qî"Uýç˜R¬Ñiƒ}‹ª„£ ´¥Y¢3´púê…TêßóošÈ}Ú+ «à`ت„©éRârÆ Œxb¤¼Jƒ%YF ­Ë*Ojò¢ÉbR¹TRÏ!©ª3lp´Lý9SÂë›]š‘§|¤kÎèud».¬¾wïZÔl=ª›8þZ-Õ3Z1¼ýÐÍ +ÿ"§êÍ[Ä6gIÚßbçñÂöÐ_b¿âvæ&¬Fáo÷÷¤˜dT²t2¬óó;tO�Ä"�nhvi[hD4Ö)%ů}S}ŒÂD7Ö¹kÌÅÖX8£A3ÃäxÍd+ÙÚ%Ûô©hÁ^uDXðEÌçɺÓ.ú“��6Ø–w$–Ê7Ã',ÛNÒðŽ9²ÅȲ¼FœLgMçl7�§³)kÌN„(V9¹¸ ŠËau—²ùÃlø¥¥a,&þÕø/!›jþÛJ.»Ò +¥ôŒ—y­ÿ2ø@±]¼˜ÆÊ¼t#“fCm˜n•,Ãh©¦SÞŸ—>:¬´Â4§ªZ²�øDÇw:Lïw½”{Ágò_MäDúx y…r ‡Þçdû¨`?ð!G@à#<úî'k;_çªlå�ó…ÚaBÙ ÷/…S4Dض¯6”Cxø?[§¹-<°ÿ·ÈÝyDÛªŒ=àSb®6ÁW¼ØV6ϼåL©WŠ€c¦41GËC�Îüo ¢2¡4»ÒÓ¤õ _]¿ÁùŒ©“��Ú•?ÝÓ™èéþ0‹î0W1LP S8P˜£³úUE™ÉÁs‰0ë÷`ŠRxý &dì`rÒÙ³Y…]ì—Y©êu,ŸFn¨»ŠBŒb_•f}á;keio~gôT4:Тji5‡ª®ˆfè5tŽ :Pͦ+’�üm*Áÿªï�6d½yÎæ>7 èŸF vhfba’übÏ!'÷2®»S6»zþ®!Äóò~è¤@du‘¬ä,«&{I¹$ ZR]bI¡±nYÖ”Dÿad+I,©-©W_GUðßê|Á…t€a*d¨«|]-»¢´Rìõp\z±Ì­ Nå ßk‘Éw9Ê&ra6°hô¥]dT£º ‹øÆ#­Ù³¨/›k47Q|®&ª¶øãMܵ¹"îDÛ¥Km·‚âEÿU𿟕¼\vgʼn# ·â?büØ"Ž �Tzc—…˜U—þlÒ#jÊ~àÃMA&½Ÿ'6GpŠkäÁ§r—OruœX¥(‹¨)ŸA1h­ZЦ¹qK©Âß}w!iêeÒÈ;%”<<1Ö««æàKbÏa‹&Gî+¢‰É£ÓmþþÂΣ4ê¶ýõc8²Úš«›G‰%s‡¸]k¥ ÅHsø=Me2÷º ‡‡5ÓE‹ c*5õE¯¿×)�¬å|Žü0Gqü"FÅ}•øÏ1ÿC¿ª‹DÓో o‘ÇG¢ÊjFãMɵu6ÏÏ_ +ÛÂØÃ\à, hجheQtÌ%+¶x‚9Ë­ŒÉ«”“QÉÒ’�¨MÚ§IñgRC™$qDHRDŸ/é€�eĹeˆ#Læ{ƒI2‘Ú`žeÇÒ1R°‰Ä\0séLÜ!xÊ"Ôý�{)ŒýH毸"”2H‘¾Ý%\ÒÖ#Ó©óE”€XÜðÎÉãLòPCI+x2ª”´y�°…"Ü£¶M3C8ß® W"øï£¼ÜÓj\»¨ó“e è)ø>U9â¼­Êb®È[7â‚u´Ã¹�[?ÜÐ}<Ë‹VÍ+Îr,8\6šF}6}b=«ORO¢Š�v—wA•ûƱ2ýÄ8&4)ÿK8ÉÚP×Êáÿ]§ïˆ6E‹î´æÕc ôIš×œ†‘"\ÌÙ" ‚ÿTŠ9‚[�…0u”ð3øç¡äؼUþ¢€qêŽS0#à�*ÂlºDÊ0è©s‡MS²i÷Ц¾2E ¥Ž¢RìöL8*Ä®d ‡ââP�]ÂöÓ„1²|/AùNé÷Df±ÔÊ7dÔí)‚Ð3\˜�ð³¨vÿ;ó �Ò™3Ã(qžG¦¥])§` +¡ÁñBüÈi£ÇÙ }Jsz*;ìTöç©èxÛìðbçm¯Ïm ]å§mË¿l»8™v15ÿ˜ZuS1m÷Í3ð3>³t†øµÌpV g­ØYóY�õL¯‹ wòDÐä#Íq4ro|Ôç?7¼Êhä#­�=Ùè õºybe�IÕXNTÑx–Æ‹Æç3Ö©`IJÍhjfŒ,ãÛr &ËŒ1lŽ1ÛMŸ<Ôs}!©/R^Ñœ¢º,݃[‰hó&�• ©Bç�Ðq9fODÁy™"„(xäÐKIdÙ¶‡VÍx¢à +ºb¯+°\ô�_i�alÁì8aß©ý é’� Sí %GHÖL$…£ˆzd¤£'à<—Rͱg‡^v¦i‡zÕû‚¿¬­'3äí¤ëfÔGËëã¬Àg4k4_¤7z壵…@ZKû^ZiÉÜbb€ñoÍÊdN.aû÷ö? D1Jß� 9=²×f¼)ÌÛöÍÐ"HÌQ΀zyvEB†Z©l7o*À� +ðd\�GÄC%Æ7ì¥Ï”úM 'ü¢}PŽ|M=º/âJ7tŸÀ¨œâV@³p€j—ðDÜËv`´7¢)¦‰áÏËÿ‰·rE')¨Þ„Ð{jÞ�"Ï6×�ÃQløXt]"ô†2h›ÀB˜Ç‚ lŸ<*îb‰ò‹µ&Óq�Qš“ùc¢jßÂ,ÀFMGLé�'?š÷õa””Ô�2ëû“ôιÝÑHwjåþ=p<|�Yû(Ö»�ìÓ!ö“–7"׬õ©Þß´]*TŠ âù–§þé÷Ø÷*>0ô-Wx®W ÷ïE+ pH�¸ +&¬Â£ +¨TØQߨ¶±qÍ :HäÅì¢1‡û&ƒú¨°Ñ‚jý¥�rò¬úª8®&�$nïF,)Ãø®X¥qqþ\q4ŸM*Òƒ¼èÃI qD³b�q¨c/™?,& ‰ô!Õ@Ôx$6do°Õž±È¡žEÁÊÉÊ—²ÕÉ>ùGjBT&@yÊ�SäjÂ@pn)º”r²FÊü²°³3¥E _8½Ž°qÐâØJ†ÛHX¾úõ†uz0¦ ”ÖcòŒ¼ÙýuCí%bµ_`©^b2ãÑèÆ'ÅV9-!7¤›Æ0ääÌÌ+×H +ÒI਌–ÃdÒ%Ôt\8ßÙÌÄj4Xe}´õ´Z_ôÖ“ì?²G̾%í™Þ~+î9Þýæ=Ål +Ž|yXéñaŒ6K'|eXÅ×Á!vçQ{¦*袆•È ££n~h¿ÍYÖ·*7FUuC[º‡¤Ê+ÌO¬H@þ1 ¯ÚÙ:Gê¢0@‹ª¥:ã\0„xø}U2e.7%�¸Ø7b÷ˆ5Qp±¸îÞóÖÚÝâßg1MŒjV2ÉŠ¨t$ˆC½~*Piå;%¼2"/³${�á{ +zÛrÃõ x)½ëÕ×R¹(mq‰5gŒÏW1‰ôòõ¿Fp6 m^Áý÷Ï6è7KÞl.,¹} u[¡—Ù­m!8óW~g¹umùi§°f°²È*HF�©é@ÚX÷2Ç$GG^´Ð�9ÀN/j[“d”j�£giE 4pŸcņgøoˇiDìÇt•7?$\ŠÐËâ}¯-Ù�Kõ÷37U5ŽîÄ1¤C=—"LÌ3ë,ê%»át U&S@äÍèAn$â±Â¢|âFLÞ büYx¬œxµë›Ì̈=­DÍ�?X½Hôž5|€r¸zjyÁN$øÒ$¿c=]QÚzŠœ M*. kiª²N�PX¤ 4©Ké5—UÛ*¬ò Öž>m¹$F?®)ïmÅïlpýÇ1þézŠ­[ÎDÑ 08ù¿4·ZŒA4n¥Nq%üúQý"üþYæìw³M`ð¦\¡¥zcšÇ¯´Bt0ZÜETµWšþ »B1K—ûߦhÊ®!ƒeŽr¢Âô ¦‡îÚ6£©Ågxñì󽿸Õ,J®Ø!ƒVðòSÏצ?ƒ¦Fÿ~} 6Ü?ž cpy YLDIÜQ'»¢I±îŠÒX£·›d�w“:ðÔXÒó¹3˜ÐW öBmg}'úú»Å +#¡DæÆŒø”ù¿œÞžÚ°h|œ Ëë²gr/´!èNˆ¾�«5–�LyÔÒiB‰¤ÛC}¾ªo0h@6�®™_hûüB¾�] +(ƒ^ûÉ4}|_}15!ôŠ»qµî�訨9Ó#JAVeµ8´HÐ,KaÁÚ +äd\»ru[ë .ŠQ1þáfÛ¯Ëf`J8ìo�[™¡q&dµzðx�::6ŸrÄA·“müΊ‹80ÆÕv-5i§ÚPªá®Ü�Á5ÞÂöZ®…ž1:3`' ‰N1 k@Ùjh™‡'K×åÌn¹©ûÀ/öØ–þ1Eû¾ñÓî2íI_®Pâ•ýF.Únl‰Âmmm�×½¶Pbø˜mïGº^µ<ŽŸ�µìduCœ²™�û“"CŠ$—1ƒ½Þ¯´(úéQaàžJwûJLj’ƒÖÙ,'!¾�J�XλÎäÇ{¡B‡€pø‘+ÒœÙB¹E/Ñ>ýlLÜZc£ëýHÅ�%bÏ(½±TZ•úR,À®ˆ +mû6@=]ýêÝk±²¹�Šhç55rw÷N)# P*†ê*ŠB¦(ΟžŸR±Ìø•fXÑô¤èì«…Úëñus=²öx®w§«°<5d®‰ÇŠS‘§7x-ò�±juÅêš2Ó±äµ[ëØ*‹Æµò'g¥˜VwW„U眧¦òÈzWjìÉëãnˆJD”Þ�©Ú�ªÞj©YªÌy�OJj&Û�hõÅb“ÐÍÈä^CÛlÆ�‹=¹1õ|rtö彊mæ&vt%Í ©½Zìˆ*×û�í«ë\¦îv›œ£Þ¸Æ»¢žÕl—¬ðFxB‘ñ±Íhxáø˜„LÎV<™êͧz+©ªÖ©©ºz$R£¬VwÓ^kcÚU8ã: +g\aµuRcš2ºj¥C ýhô´æ]\UÛíDû†µËän×éˆ%»T—“åN&šS ÏöÐ6m¿†¶GÙã™ëK»ïq‰§w#1²y£«’†”I蛥Zâ’! ñx%–í.3rbCå*Ó’ ‡˜å#w›—”ÙË•=b—'ï¹¼ÇCx~Êvùß(þ„NêÙôöÛqÎû±«©ŒùʤWÈLv…Ì—Ê•ÙH£˜YJ¢œ¹rã˜Ýîãs«]†r³jɸ¹Ñx\ž{}ÙPj6t!Q�fG7ÖÍŒN.3Ó_åéW3£ñ0�6>ÿRx6›læ)|•=22Ï…EfÂqþRŽžEzwž)<·5£ÏÿŸ˜±^»_ÚÅŒsNÝr5¿á˜úëfÄ—Œ˜Õ‹r©‰�¢×ìô1ªmFºO1EÎ%r&Ê�ÙŒ?Š™‹53N¬oϲAýoj¸'+ñÝ{¸goB¡¿Ã•iÎÌ_(wñ&,›/½®§L%v»Ù\1_®|3¯:ŸÊW›áu'7ÙWrr�C)2YRd‹tJˆ½ßâ«Lkg•ßOvfnîìŠ ÇSó#ü¸$ÅVîÅd®ÜÌÝ8ó´¬Ñ³HÏ!’ŸÏ¥È¹T”Š™­cž«³ìcù˜ìwIX®Ÿµì†Èß³œc#¿•ÇåuÚ™¼(<;9ÝÉ;ê<ç3�îNQJxen©ê8<ŽŽÅ\g$ò¥ÎØ™Qò‘M‡É‹y˜|†É¯Žrë¬äÖ’WYÚ™åvFù™¼´á�ùFÿ3êÌrLÚm— É4&${ìR²IÉ•+Û˜åUxE—�W³’7'ŽOÊøNLßF,š¾û×¾�6}ŸÈ�y�™·mõÏbÕe]4™âÝŸAµ{­GN¦žQêúñlª†ÑdѬÝx•³è!ÎÙŽg·™ÕùdHöËÎáØæ•lÏꎪ+¯Ÿ.Õ�=ÖÉ(=4ñéZ¿Ç®ý·Ú¾Ö¨Í^IdÔfÉUšg5ëMõÚÒX­v± [GNÖZ[ÖZ_c¬!‰œÆžP;ÈjÓH�uY¿WW+{]iztµÁ«ôöªMtUßµ¥Á«Ílê9·�Í1›méø*b1²Æ§š�ääc—µdWû¦,&Û”W‘xSîˆÛÏØñWŽiîZÛ÷†,F—WkvGGb{§r˜”§’ö5ãûÞ1v(­ŒpLó¶u3>"j‰|îÅ�[_¹¢¢¹C¢ÿÔ³q´*õ¦jƒéï*37Wgëi?"N®×[sZ�mg®ÿ‡‡ì\Wg›ÿŽåûnŒFþ¾™á;?¶b:±}L[­Ó~e”öÓWè;¥Â2vn7ÌFì˜;émhøÈ•91‘)T2?’P½î›ÚæG+Ã\[uó««û¤ÂaÓ³ûl¢ÕÌQ?fI{HØsͤìÍå\3ý)ÇÈÖÙk¥we›³N±gÚ†Xgkb2JÉæ\dë8±èZû…W3hZôšñ‘-¥1ñôS+u”h抭šˆÖžÑÔ,–Ô=-¢Ø[d5D¼Þæˆs’Ö0ÍmN㣗tŽæÏŒ#²,›ioÕmwÕ¯j6HÎ.Û«ÊgÓ•¨¨^+›¢ù—ªIÅwÝÜЄjF=BGãù …f8¼´EÒ §¤‘’ÎE3|=ÝG¨3u#Ú—¡¹Ç’�ÍϧO½7GüÉ´%¶òKCÞk½ß"¯¶çí©žÅZ·ócšûy¦è¿‹ÈøŠók‰ŒboæìŸñ*±ûÉÏPQëîy×MjÎgGw¶ŒSý£ÃPêúwŠ>ªá�ê�Û[K +ƒY×DÚ'#29#ª—t›ûùØðmgÙ">S½§JVšd!ÓV>·ê9b±‡(îÌXèöè©úY¡]³W´yŠ,-¥yfSY�¥¾ÙOŠ:Zí¼±µultÝ¢ñì¹ÙeÎÛ”ûCróê<�”�×®~b3Ÿ–ÜÐ$3v'u%'“§¶—œ”KŽÎÕ"Ÿ©/�îòìE»ÉgKîõÙ™üjÇ|±ò/Wæ–#7e²ØC±‹°56ži,5±3Ë۾ʬîHˆ|måë,Ž’ÏÉÛqy<îŒ]ë {"=‹E~®��f¿s�‰ÜÎDn5;9ÙÈÙùHg‘ãX|>ÛÌØ§f%5²cß”ã-g±gJBñ¹xæ™=¬»î›Qóø¤Dž˜É«šw»n³”v—u—n Ç–±˜ÊϘvBcá¹äuotLžg:dLSÖ«ÚXÖ]žÝÐbdÞ¾L™#5ó„–3¿ÌÁ{Ì{Ì›3øR2yû´Ç&£«‡¥‹xµñö¸Î²{žQH—¡©ŽS;9ºz[Œ&Šôˆ¿tè›Ô4{§ÿbO|3qÍ(±•oÅG©‰­Ì†µ¯ZsµŸmªqÅ×Çäñœc4E»äDºEÏÜñÜ:z‰5uu)úìì«3RɸüSrc?¹n9Ù%7&×O©Û¸tG|¢ÿsµ³r4÷(3�•µÊÍÖR�H�Ô­æ­gGJQmê‘ÿâ˜Æf6„d,d†¢+¹�>ªÓ‡NÚzY–4¼H}EôçX¼)ù¹UgD +Y�lýh7÷ˆP?%Ýã9?ìßYŽ«ß+¥DDf,6>Ÿ#¡™sí¥BI{>gȸCžYÙQËž7µ‰ã)"÷5�®­#.“H¹Uu)WŽ|EGbä’s‡dz¥ËXF*óÖ‘ë�.Ó�tóë—äH.ÑGÎô{*ϰ~+ór‹Ùl¾ÉY½XÙêvÊ'-Û¥†ä*fx ‘éz:Wû�éÆhWŸ&Ñh5=R5•¤DŒ÷Ú6öSê’¦Ib½µjÝÌÏdëø„þ¥e8OÅC2Izµ2{kex»Ðkz ™*)¹óü+=îæÍD4Ÿ¯bž÷øQÏ«Eå;•±*ÓQI­òÕd¨¨|]i:¤«Õ-qH *<˜°âAâÁÂBD$ + \XT°!¤ Ò"±È¢à ãðP”€ˆ°x�€pAEÂÂLLXP@DP¨À@>`x R‘>2H��ª@ ‡ Š(& bbâ�atppp0›™‡L˜ ˆ 1!aa‚‡†‰Š‰ŠÅ X,("DD@D¨ ,*¸Ð€ADƒІР+ І…D„8D48L€�hø'�A AQÑ`Wà +Là D,(ˆXHH4Hxà…TH,&,"(T€€@Ú +¨ ‚†ˆ‡†‡A  ,˜ˆ˜�@�bBL<4H  bqÁ‚ÊÀÿ0± ( +h* "*$T@P4˜®+ð +TÀ*48P°phˆ@a¡‚ @11áÀ@DÄ… +6TT�˜x€*$2ˆ Âz� È0 A…ÄD,�€¨�`„ (˜xxxXTˆ�‹@\°€à¡¢BIa!‚ *Xh0À+@L, ¢¡Â¡�"Â0DX@ÐÀ!4H á8ààb¢B.d�� B &$ $ °p °0A� ˆ +ˆ +‹rÁAbaÁ Š,*4TPa¡Â‚‚‚ ‰ˆHp¨€¨¨Pá@ *€ ¨¨hhTX\ÐPáÀ€ $$,$* °ð€Å… + +¨ …ˆ† &4H,&$X51Ùœ’3r ¹„È=òi³2ш˹ª;2å‘òX*>[UM ¹\BdW‘/Dó)¾¬#D=U¯r³M¬åÌ&¢]†”í²¥fÅÊvVyÑYtfò³Qry©Î.¯óÃ!ɽL–kÊ„ä>ET¥ñ�Ùù#%Ç"ÛÆÎ^—*e*ÿµv£ò¢ÒvVÖ:ÊíÎG÷‘c®�´lBb¹+J ;× ­Æî(¹�‘½ìlùùå!›úDrd+:–YúKKuNÍË•­½”çs¡rq¤Lµiä*nyæ$a¹$,�…Vr.¹¬N3{IÕ #™<í…LVWQ†l5u&>"™œÍ2!ÙLÈâ£L…3¦/7$c™’Ñ'e|›wKÏåmõ}"¼ÿj|Bã³7�ñ<»Æ’dÆ�ÓÙé:z�ÕmªÏ#¡�L�KXµ+³›o\4¬®ÊL}ty^ßÔãª[ÎøF¼š|ž‰‘Uˆ\Uæ“«Û«×±èAtËèX4ÙÐåhL¾.oî*ÓÍÌßÉ¥Ió˜Ø1M„7C3{ìLfõ¯Nçºl| Ïl8÷º£3×îÌÄ<èÌþ“ÛÈüìËÿÓ6¹Ë’Üä^f×C¹ÇU—�ELŽ®8^&;º²Î‰7c†gR²3)ëx[³ò b�jÌÙµ×Y?õ˜–©/·ê¬$cM9õ!¿¯ûÜØßHÙ°ºE¤¯š†:æ«´ÄD"Ô¢ÀËõóÝçÙæ¥£�¨.cŸ¹÷³[k ‹¨&ªœë¨”Q¨e«"•hh$00…ÃAñ�ddü€Á„0D„‚aXLf1,€cÀ�(q Ùãû­Ú”Uu�#»Qvš�±±äó}õm;‡J…_ƒcvæŽbµåò¾1¿ûmÙGµZI}ÏÓ +ñÉ�sÈ~ t}oÌAïÃ#‰W¡½˜ÎÕ¿R'EµˆEJ z­«'¢[/r•Í£l¯qN™ƒ$zqø0ëèü÷Ø~)·ØÂ�8.ìî—Ö•lì‹ûªµŸ@ÐÔÛ(¡N(.þ7<·Q‘€³ÅÓ+�#GÑIqmCÕ•ù‚m‰$�½žÏO T΃ÌâÄLÙ‘ƒÅ\^¨0:,-VÚ6}1€ÁÇ?q˜=Þ­¡óYuaè°t ˜°Ì”š¢Q4ã†B�›¦Iš{[caÈ6C?Š˜"LS·JXãiAoˆÄªäFØô3™{Y�L¬cg˜{ŠªÍæ²LV¦^ôŠn3_/î5˜ Ð >Å[ˆ1~š<ðã:– &–A´-TfW «uðºí~»Äÿ +M,¯}Nø¸/¼ÉÑÔû‘.n" ``­²d�UÁþ�ûHXøJò´[s­‹5<‚¾k!V©»•�V¢+Û¼Ä|‡íõ…• â�þŽ5Ñ f2IÕCÕƃcqR88¡�™Ú¶ò¿~|‘Z¯ct‹ÓK/Ïq­AÌñOB8W |"§-ZbÅ¢À«¡©†1b)QXS>ñÒ•e×ÿ‰Õ0Æ›%Ô +I­ò–Pw¿‚?0 Xàƒ`êƒHã\Bl/R;z R‹ÁSôò)ÒõƒQݰØôÈ¢w„~$uÖ£Fè ®4‰�Öc&?zOoŽeãpvF„‰=Š~¨HZʹqt{=…üm¤WzΦ÷67}LOe®�A™ŒØdÒ£‰gLŒ„—#ö +úÊw«¿3Òg¤.¸q}ŽÐ¥4Íb¸�ÔèýË¥Ñé«Äµ‰P¸Ð\Äȹ ‘D!Úf´j”rî=Jǘ+”ÞñN í:q.«µÂGymå…í6·ÒŠ…@¹dêPqÿ¦áƒªð`\¢ ʵìR²_xXôšiÎ]ê¹£?®*Ü}&Ð&а„Ÿ*U÷BåF�À´­ÕøKÁÎÏšyX·ê=ØÆ0T‹[ºZûŠO}ðU(Eê-Óã6‰§‹¤OÛtô7�a«¸ŽDŸ¢/úâbú£&¥ƒÄK[<±‘ÒÐ_¢wO#~w¯Œë9ÎdW5q&}û¹ê®§çrgRÉJйQ­+]ûŸþù¹¬›fèZac‡\™LW’“êÄCÝ>|YWqÅ/8o>F¥\„RÓÇ[Ì›eu~n³ÜWÂÜC ĽÂ[d©SÖFý‰ÝpÚϤ•ÈÉ©00$‡4KB²‘±î¤V¼R�.ˆ ¸®w?iZßS\=ÁæµøVÉd¨@ýHM¤òK©AÞ;@se�9Šo•}àB‰q˜^¸;¨Ž§ë+$°è'1:gðâýôƨä¢ù§ˆÄ�±kŒZáȈqg¶ZŽ) %¼¾Á#`}èx&qECY5f¢Ô9¸…«®p8’\Ñí�{Á5}¾8#Ä€†séÇÉä >#™Ï.Ts©Î™Õw¡oÑ—g˜*¤=€óÃÖÇÛtùù¶ ‹d°QÎ ¿êœ¡|ôqDÇF=o+Ù¶2 x=XO¤aÞíf P¦7=)¿ºq4)º86CS)wÏüÀ°9ÔI^º)*~ðDìüÉèU¡ü³yô,§]RG$Rbfzleyz˜ÚÅÑæJ¥�c +ðÈÑ ÂÉ-ËÌjësЇI1b0š5ƒ!-…tâ­µ‘ªV${zÞ¾*ìd‰®ƒ$,^Œ»×铞ïDcQ/Ø�cšxT:ó�µÆöÄrœ«ts€k”¹h–­_€gˆǧæV¼Þ/ …‘@î }Sg=�ì v"ýî6ëàý(fˆdš˜ùuý½䢕ªâýf&¨X—Å>’„©g�¾Ä‰Æ‰�Á� +Pv ]¬ü(‰›_=_˜îföª 1qtß�VÚäÜ¡= g‘܇Jí(UÖ«ÛKžƒ/hõ&¸ª‹Q¹�ࡾŒíEŽÆŽ”ú�¦ö$Ü¡)²eÝ�¢™žëÏ>¬‰ <`»‘PÇ+bøûФ¯ˆÂA«œš) B�"h‰ä`h¿»Ò�ô¼D=©_ÜM�×3˜pƒ÷N°êuü…M¡×ê5‘@‹�c’_›£‚žåÁ“ˆî|¬‚Ä‘ÁòÌù#ðÓ^hÓœe瀨‚E¿·‚¹NÎbô8F¬#•+° B#¹«²¸# �Sµ7�íµ5(Gn׳¡–b1:¬{’é…üWøB²(¦ÁCŸaw«§ +Þ'Yi× ¼õÓ…÷(®´PlH(! €Ëa˃SõΘþVvRg R·ÄÏ¢û”LJafã±l× (Y9RE|…ôX‡µ­[j¯ˆ Åï¢�› gÓ0 Î�YFZã¦Êˆ|÷óêϲT–YèÜ‚&×Hô ‚ÕS? iªb#ù,ðï ^‘Œù”/«u4~÷ÁÓn¹1Ewì¨�¨Ô/"äÙ%2èé;ÄE}5¦¸êgLù‘ŸÂ¯Bx>x['às.A¸?c„´k"úmL¨©KQp_H軡ˆð$ ~Ý.¯ rÂ�   ÔÄJ&­ÿÆÎ+P!n"0†„ž“>vòë·æÕˆÒ(äv«n‹úð˜²úÒ!wPþjcla“Å¿ ±bâ¼ã + 'ˆ—ÒsSbÉ�€êb*oÕ?­H«—fèúiN�…ª :`d·(@E;‰½‡gîa—~ýAJ¸ù¹RV+cY¦¼†¥Â·¾‚¼`¶*giâÑû¯¡Z[Â䨔Ån.¥×zðXRƒ±+!ã5„¹ŒPYç}¸N¤<1?Tû—ë(W*ʬ[Â�`V­ˆÍíW ¨ã7–®§¿l–™~UM}¤^ÜßvİùäÔ +TJÄÂÿ¶s"päoã¿ýÛpú0KÄG!Èç²r´}˜„Û y L"Ùx@n::Lâ|Ã"nºÖ0Ì}yÈg³Æ ÉÆÞôÂP両…£Q‹¦³ãæVaU¢0À›¸5Ûc¡ã†@¥¸í_”:ˆAð-$ÌkÇ�}„1)nwC�Û—|rkç`’·UŒz7ȳÂå SóÌ^÷c•%ߨ'Ãü¥€úÉ{“û…Ò@ÒÎà¡ø··g]cÛæâgcæ`JC6Ðkk'ƙŻîp«òÁ�mŒ¹‹eƒÙ{…]£Ÿ*ôÉ;(…sÛt£òÁä�nŒ>Ĥ'&@óAˆhJÝ‚}0î/ …‚F¿V˜º…0ÉuûŽËnx5˜w·Û'Cåî–‡ÁäÞJ,�o¼“üMÞFîœ7¼fVzy`Âp½­30öÛ›A¾Ñß&ßj!01é[F÷�|¯E¢†AÁ S0Çî¤0ö”’nÌ! ÿ—a\ÿÂ첿€#Ä_6P÷ Î~)ò¡Ú+é$Þ$uøËqúÅ~ñ @AŽ Å£"@¡�àèÒ·Áõ ‹¾1^ë—ð?ß mïõK 0û¥zÚ/+㛌4þ"p!Ö_^`ê/.È7ùü‹}£Ö_gé@7ú6Õ_T€ó/ oÖÉóm0)¾aÔ`¾þ-9ÿâºò�Õ¿È‚òqK¾‰ä_ÌøÝxóè8}0úVù‰¡Jß8g“o(+Ê7æ8}ã#Àl�¸od—`ïé¦þ¥à¾e$ÀݺoçQ3ÞýÓ`üíêsF}À 1=a¾`Š›o (‰oÄ/ÁÝ[$ÿRªÐŒz€)Önyþ õiR±Hê­�þ‹HÍÚˆ¸çL´QoœËÔÛ_C` fAo�LRoÌ&{{Ék»{Û`ìÄ7ÁÜ|CiÆú–迨}ßè0ú 833þöº´;…pû@³Ž;',óÍKtE k?pOÑ8ÜÌ¢Np¿3‡Á¥ +0°€\€‘HnTš?B8�Ƹ%ܦF’ +÷DëÂ=Ä™á6þ7µ&‰‡;ˆ£0]qÂïrI·¦ewdOŠã ±â8n˜µ8vLׇ…äŽq,˜8hû×i€ÉºÇ}Ò_d°üq•`žk�[rŸ�¿€§iqÜî­J½>“; £�íäFn¢¨¦mÊÑ)`²Êq‡ðŒWfæ.;Ç$<Ü×Åk¯¡O�ùoîóF—ýn¤ŠŸøËP%3Zyî˜�‘f'b+ðZÍÀÜwy6]©|ÈLæaЭ5�@-20ß&:h¡ à%æ20ú­žNhâ§ÀŒ§çzžz+šÃ'°%à’ÑÍM�¡Ñ�÷MP S`8`ÜH3°±N�q¡hF»MŽ‚0±ÿb°:tŒ.F«ðê!¹E7"Ï®@Wåò´ Hê¬Ã•,xÀ4p‰ï#¶My*8 +4<`TZ¶¢b€0«Ã„†ù߆ìsÂE³â�W«€‰Q 8(­7�¤F‰ƒCÎqG†T;Í8`wŽ0zsº¨IŒšBC”.f€©ÉVô‰`øRƒ7A`@V¨\,`Lå«^¹—.{dûÓüÐã£j©ð�À[Æ�&‚�00VÞ‹š¨í2k�0oç’LÑt`¢�ÄÚáR`މ·ÝL6·ªÔîÀ|ôÆÃV*Ÿó »$Àþ <60Œ¢>kCœ—cÀ¬¾WÆ•ÿ™%(g:"0GÝLæØƒp‰B`~~>y»\Žì�ø¤® �þ©‰ ½Â‡áç‰{ÿ–�ÙÕã-i ŠÀØèòMhÖ±äD`|›Ô…ÒMž^FR¼xó›Ü ˜23öÂ[gt4D`¬×¤£QÀ'cï蕜ÀE`>1Öðf7Ë0všˆ/݆kUÂöÑ€ÙP²pÖ€¡¬÷×;H0%5`8°²rSYÒ ˜ê£ |¶žÉ€Q÷Äñç(0¦5T7¶û3hFŒ½ž.ö) ŒykoŽUÆ€Á³ŠA꓃讣CÚ Ð�`Àx`‚¦¡ºáyºä4Lh¹›ÔÙ µÖát!0µTL ‹mÍÙi¦Ã€aØ8ŽòZaÀ\�6p‹ÊS囪Õ�›•IJ!0Ç+ÁlÝz à)Ì1F€FsÃ{rÇ€AÀ…n²Èª1`² D5B`ìDÆ@n�‘ˆÏ�^ ?&àßÀ7Dý„ã^ÆëÕr³SqÞ³'û�ÕC`îqc¶¡Eâ˜x3øá¤Ëùæo!01—/MaYO�Ù7ô¤/ +Ñ��˜<Ȩîk´pB`–mN‰Ÿ×†ÀÜË-þ,.)�’{¿bÀ̧�O¨6 ¥h(»¯on6L0 ö£sïÞY& ýõ%€Àeû¿ÏMòšé´Ë!0Ý.'#8ùãÒ¤ +L1©~�4ŽìW`qúü‹ERýð +Lhðt˜å% +wÚ?±å¨ÀšyöGŠ‚ +̪f†€ÄV�9 +CX9«W�‰ÊÄÿx +r;ôV�áÉ n‚È0b˜‘ýª™!C`²¬‚§iH_©Òv&û†¤ÀìßÐðºe=)0°å2éZ‘oÂW~•CL¹CÔK� EnÈéÓU 9¯c@ŒçprŒˆêiàs÷ð†ÀÌ‚­è£/G �Q [xá·Àxí©ÀЛ‘PÈyB�ÉP?O«ÀÀz¿\%å^á1Qó +ŒÎJ Ö¹MWÉ7«i©À|£ðVã ‰­Ã5Ômñ×oU`Û‹Ãr¦¤£žFÛJ«4Иèv‹­#U†À(Õ +r,’Ü#_8 n �á“!oŒè!†²…•)1` +:ƒ*Æ•‡eîyí?škÌe¸ ;\gô˜0”~%ž‡ž'˜&J0•íÊàß-Öÿ€�xÁ9#Q`ü”`$R�.ÅH…a00¹“�60“5Õ00�ö¸°^ÄžþaašíçáCÞòº…` ž8=âI103霚 ÌC^ûÃ(+ä ÈÀl:îâÜã``*sž‡¾Ó &�­<ÈCüçl"˜”ÁO¢d1ÌŸE"ãÒ]#†¸ç�`Ú$ÓM•F0©¬¸ÝŠžÌìIÐŒVÐq�Œ¢xÍc·°hÓ@µ‚�”ð�;Ì`F0³Ô€µnt&#Ü�í/oòu#UW效„"EÚD¯Råù0µ£ïÁ[U Ê/‚ÑXx(Ëjkš"Å�LaOE0Ͻ7\;?«œ+‚±Â$P°õG¨{Œ€C™‡…eŒæOLPMmC] CQpÔ¾,ÙJ#˜Cm«•/kC—@±Ôm“O0RÌXP¹�ž`ŒI­àÀO0¨-"9q¾Ð&v‚™—´´ÀH÷sõïƒÈ—Ô-Âg“™Œ8§é"oòU'E‡œI’w‚ñÒ²0uó¿�``úû£…ác>?Ë»ˆ„æ³þüæ¡¶F:Á<à”QCu°Îm›"þÖcö~¹o'¾¸®ÐvPt�íèqÖüy@þiÆ _ÍâUblkÚME0C·©, TæÁ™æÎ‰æšŤ:Õy`dv—Ĉ™F9ðÓVãfŠj綉±ñôbMæ¤ûš4àèm5µt¤Dj ÀBRªý¥³Ys]ž¬àk"œ3XÚèyo·´ñT‰”ŽKZ3§k`¤iQ`ð ,±À̯àË Ìn|Èt ç#Ÿ�ªþ70C"…Mm¾kDvÓpþv™¹—ð LeŽ´<Ù©l¶602�U¯ž LAæÞÂÙô&ÁL_eƒ «é¾ LÊì9ÿÀéËÂéºÀJ¶ÌH¿�0€`úÊ„Ä ÓÞÀ r)ƒ7…*p`€¸IRtp`,JÚN³H£m„ƒ÷¹4˜©þÅùór:‘ujA}&0R­è(‹cØ%ú›ÈöJ­,Î&Ñ·>_ô¿&0{,f—lisM`í ý<ÒÈ%0¼¸±ÉF‹2îά£\ EB¼?MV +V�‘FØ}â/7Ð#(o!ñÂ¥ÞÀ2“ê½,„P'#£+ WŠ=‹9˜À 9Š�ÐåJa½—M…¬E:ãC°9*\…O æðb CËÇ€Ñ)¦`r19× *\PÈÝdTáDà}íÁ‰Àð_ê9—}­'–Úë}‚s ª¡ÊfÔKKá�Ô·[ÌQ;”_÷ŒŒQ‰ÀRŽñÀLOKàªH¥3jó¦Üòú* eª™AW×6?¢£§›ß°˜ö‚_üó´h hÕÙuPÀÙ±"ñýCa³XŒòEáÍãªÌˆ(OJ‘£¡×�¯u†DYc9$óEw9–_n*ôè_&Çó$€îˆQ8Ù¢FÖÃô¤ ·±‘3M¡jßà:G1ÃógJ0PcGÉN¯PØÇ›-ƒïþ.>P5·×\3'øï(¨×h=HôŠ2AÍPÔhΕ,�d_ˆt·g†›éè/ùËýáô¬Hÿg�zB8Å„L±BØÙI°ù§†–Ü%ʬ Qá)r/ŒTΓÞ|ŽQD Ê-cê$‚o*©R³Ä Tràì*Rùd�÷.v6pŠ|k¦/SϘ’0Í@ÓÑ}²ûfYG¹ð¼ì�­ÒWn´t@ÁJи¯ sx†»’†ÀR�_©—ÞdÖwA^ŽÇXNÃ\=œOe9ƒC÷BJCþ_ü§à&;v°ž”9’1ä_røSm)týÔv’À’,TCÇq°ð"BT5×8(à0’dóx:B•\±ÆHÜ¡T?} ã½6–[ ;£¼œ+éÈ*áØ˜†}Í»p°éBÝuU–Ǽ…ÑBC5ÿWL�~š¶ŸwÞe:Šñž×”aL &?Uþz2« “‘�òÛÀ®í(sBˆæ7çiu.õLœ@ì¤0 —ë8_ª +ÿÃØ›ÏÜî²5Ýl7MÂvÉÑ +ThNh±ã˜hÉ‹¦_ÏÞ�Ÿ%Ö&x�TådJ×}ä¢,¹-Ùº CŒ P¶°ßÇ6/nŸ’Eó¿âk彸`ÂÛÁp^ùõ×»{òCáéþàI6¸çN1¯X7Ûj*±î[¨Iª¢fñ'ëu¼P øzL)¾ÁïòÍûe[1cÍÄav͗檃W7P›d9ƒnZìiæ|ñr›sŸ·õ’¾æ£@e–ûÔuúÝ¥Dä*ܼ./b:*Zñˆÿù储pˆ&¹!�ä…Þ/sAÂkŒrèy4k(4ðϽÚíPÅËâ¶®½˜1ËbLâ”É$?fÉâûi‹f#ò1!b¸mÀØí{>¯ö”N]´+ÈõØ]{àâXÇí÷V@0!EôÁ˜À/¹/5cJCP*sÞ. Rȼ¦~XõïÀ�µzüaîÈ+aGØ2=º—ë‹¿n9Äu‹gô:1ú:¼¢Õ)R€ôžbŸÈkŸôÆPxó±4\G±Væ wT‡úû.-�Zʘ ›ÒPõÊâðs$ +Ó¸š-ÓÀ\a•ïn„êÄmmGÑHÑœÍp±ÌJ3'QíPb‚¼]}è‚óÙ 0‚Žº¨`êŠÏµÐ7½E¤\›€ç@»�`»â²±íØ…<ø Ë¡ÐÙbà¾lï´§ðÎC¼B� �à3r�q¼GcÈ5±:R-´Ø�»ú1“0 -€’)œà²º8æc~ 6ò/dhÆ|ì<#¯“‹4”õ0›)Ñ!÷çL¤Éä¬Þ¿eË´'²šf¹šè’8 c÷À™�@Ì”ò’CÇç½ÜíY²æ°9œHRB¢§Ý€ 3D�&›"8j²ÒsÑœ&ëÈ®•ÁnzåFýŸã�°FUÖâ‹t�i>Ê�¿eɥǢ�×¥ +àkÛ84…AaÇñÜ�SB™øç'ØøÙ=¦Ý‡½‡&m©â*M¨%ÈV,)ˆoäEb\¹«bʸîY€ïÁÏÑ',�a�ÚüÚ@ý�?guª»<@ékݦ×ÑQìÞ¡ä ôãaeè±€ü�åHtÛNî–Ûœ,³(øfa¿ëA|�ˆ¶T!éfý�k`¦¤Þì~žBDõü Ñòd�\ÍXª-lºËù•r·ôˆ<ãUÚeçÊáÕKÙt”F´?ȳeOÜÇÛ>ÒxT,sEL/n%€“øøói&«y ¶&C¢‰¤Ú 5E¶oõùá0ÚýÆQ¾¯à;õ£,z»3‰©+�‰ý¢9!ɵ>Hn#9 lBþS#=õt=eÍùDÝ˪ք|3–k7…;]õýMÌ ô}þ-9ÌÊjÊSFvgö*Íjôn‹xs@ °åûGü+²¾‰I[müª5©h<™ÓY˜[#Ay§,7/’œ4 ÎØŽá–­ºÕ8k üY<–ü/ÖG²5BbÏv ÇtåÈñF©b"™ÝN´ª�hz…¾š‹£½ÞØhá'hnJL‰–¯ó¹Ø9l›Œ!�x»€¦¼Ó@žÈd>}[µ.\­ÒCçbP§’æÜU9„NæØ³þ 4…(z(ØüBô¦ã¯ï Å6¼§îÎa®~ÿXß´�òzq¥c�Jím «ãw÷|x”ŒÆgDÍÃøgÔÁ_µZMd +ÐÛ +aŠn9˜Û³Æ4GO4–ÊŽNÅTêSp«áE91¼øUƒßüOä ‹�ÿ˜L«|² „h�B‰Wd�'ü,~!{m~iŠ#"ÿI­túíñ\¤ØÈK·¾£0u2¦9Í‚l¬ùꄸiK5ÅUEš±‘@hz.½RyE:_çëijnu„z&¢ûiXþ¶n€8 EQùtÜïOuÈ? IµV’T'@…À�Acpü¿¥hIAÁ⨑:Q­\?K�1<@QJK©:K0yXг•¸ Õ™D}8'7qè6!vfÒŸäß¡Ã!›Ñj"³\9'QÐ"ÐdìŠðQV3{Ï6zTÍeKäÂ-d$ØHÕ3þòß‚¾ÑòïNžˆ¦Ólšˆ&cÛ¬D cù©±¿-º­=^¦DÌe«-"Ç^@Fc7�ãpJ³ZŠI3FD^=Me›Ö÷á ¤Á ÂGoöžÇÎ +1ÏSú!¢Mßð DZ4âʬ1®´õ">½iÃaœ˜×8-Z7h׺OÙŒ5¦]£èhÛÆè`62ÄAô}ŒeG=ð…XY˜²`¨ùŽ<[ !d‡ +±BÈ Œ‚ˆ +ð‡3 +a|ÀTŸÀ›/o±30ˆ$„«“;‰}s¾ñ÷wN„Pçæd¾½ä D%],S„$jöâ}{€YI¤Sñ±Ðn¹²™2³ ‚„ö�„~q((.>Èv8ÉH ?NQì‹âýmÙ𤥙y¶þaúUüØù°Æ1s¤ºˆ"ʇu‚È·ø�2Qöÿ Á ý{¶PÕ{ÁöŸû·sÈ„U;ã|Á…Ÿró[iÐÊÏ›÷Úƒœ½´Ø�äyþõ@Ö žKÿëa?•jOÞØ ‡èºÝÖGPCÓƒÀñ·€=˜Ö¶Û+=-»¦ìäÉý“̃Dü7†3ØAy .?OæÞáǃs˜�øý+-.âMع®OÃÃöÒáWõ@¡8î;Œƒ{=\<§I�Í;'‹ñ½�Be°åñÌåyƒ�á€×?zöÁ‡wÞÀ z¹˜ó†¤�Bõ1¯¶óé5]³ÉæWòo˜9ú"uÞ àKu«™øyˆåªQNçθKG탟7L¹œqÝw[qÞ@¥„¬(–Qœ?N�7Ài„_"óš7ôE`9�è$ؼ¡X öÕ6ÐøTgÞ ACÄßÑÝ`ŒŽ¢æñî¾òîǼÀä>²5Ö¼aX¥f‰Ÿ(+Ç€…ô߃ÛMt7œ>ÝyñÍâ£Y3Kûî=Ù<纻!0uÆæÀ�»áyÿYyɶÉ?0ÏvÃà‘ÓÝ-«ˆ´Û O¾WÅvƒª_`\;ÉÛ ¢ŒAtŸ7·Ý€; Ún8;1ÈE¸Ýà&ûÞè�c»ÁEKQd´Ý Õ,Sí¢Ü YÏ߯ª&8¸ªx×{àá°ºlV5<,ûJ²awC­7è¾›Ó»xVæ&­#ÓÝ aâ�^;lÊù êÀˆp{Ô¥“.f¼$@Ý }¦$•J¨!uÃÎáëʬ–ħn Q +uEÒð߯qÕ7XÇIì¬Ðº�8 ¦ ä„ž"ë†ÃA­“âåÖ LDt(TþùnÐ#3I Úð˜TÀØ£wÞÐ(5pÙÞðö76œ‹Ûá äáÒ�7”\œã2ÞpFQßé`ºp8Þ@_ö{ ëùnÜxQ<ÃpØÏܹäNKõ /D,ŽtÊZ]ÙêÌw3lÌõ 5ãL9{BåEß`Ãr÷7Héy3l°÷7t9�ýmÈM4JWð¸1ïoð1Õœço D¥$á�€ôºü † )Œ9�åGâopÕÉIÿ5ËàoÖ›0 X7ü >•@ Ü0Iþ"®�G»°T�û~¾pÀSô€ ¨HDMRZÑoÀZ +mGäŒÔo€³7„ÇU%Ño¸éqÑã$«ßðÈh±‡,@d?~´npf§íàê¯ÔkO¯Ð)8(ì]ìÛ)‡&ÛR„‘Žh¨ 8Ø´±„S “a³Š8öî?QK^…¯ü†¨/üÌ‚I|ƒÎn_Ú§»ç-mb’êól¸_ÛeÏÅó,ñnX.ÛÏØÐÖ:²þˆœ¾¢Ã#2î­—�3†´yˆ¸áéÁþ7µµ[ì6ÔMwrëÇ2ž-—�3Õu� u½æ^ótаŽÒò¼9]60CÏ&øS›]†÷þ8aãeK¯á ”�c"Çp ~ÿœ÷ž­RáƒídWÅt>@ õÑS†,øŸ†*ÈBá¹&Ç$qÄ+îW1S|²M”xå2Ê´XW³*š´=h0�PôrÓ—@]åªvH²&PI’·HÀ*­ÆÞ´û•‰´x…oÓmÅJ7nÅÄr¿mœ{¦œf£ÄyQû~cð*UEÏìo™ùçâ6:nu@€ˆM�ŠS#Î}r?^|=·ó¹iúêÀð1¡ë{*éËD'© +ˆVJk6÷|!mu M ·ó4‰}ÕØGV<� `ŸV1ÒHÙd) KBE¨1ÌÚ¯ï ßãXMoÒŠ®ž)éTmxy¼‹Ûð][«ÎµÎ9pLq¥F˜440êè÷[SÀ—ñz JÐ9 @aVXʆƒê%éuÁk\Z=y�8ÂÇæà…É¢Þ˜ú½¤"IÝ®Xš¹Ðç ¤0Ø\ªÌÓ(NÛ®#rS¨:K³¥ùÖì½YãŽ-Èæóá_SùÖH˜ ÆãÕÖ-m +ºñLÐÜ¿"0"Ø_ÜlŠÞ7¸=ƒ ÛŠ‹R + 5Ÿ0<ÚpˆËw7+F•~ÌwB ;o¹k5¿^ºë?Š×¼ô ×eûîó)ñFå¨û´–…š“¶ írÞ 2µ�ð…s/a‹ŽcN•@r®þĆˆÞ^§OÇ <2¦½&ÍJŽ8{WCz‰‹ã_Pë0]-�‡wîÊ \ŸVÉ„ b ¢¡Äcá%o�Ö@h,ŽÀávx;Œ.t‘¼l!¢%!WVOO 5 ”‚|/‡×� äçÖ´Õ¦ ¦»€ú;ŽYÔ/Ùz2Ä÷:ãí&3#,v�3t QB¶½ š¼< 1¶ØéÇDqU¯ZÄÔ’r¢Q#õ™"—­–á‘m½r =ÕyŸ�E¶¦iêÒ6ÂÌ80>ÓÇÆOÞÀÚ¨º`ö 7:•màb]fªyð_^ÉYüÝN¶¯K¬�{C·™\_˵±Ÿù4Ý$˜ÌØíÈ׊ˆïY³v(õ‹šÒà†*ÃÇÜÒbœ´¸ E÷Ë–U[Û<Õ�@õβA)G߀*«“sª(€dôRÑ4°d µˆ ‰ÛÔ8—ýSºî37Å•$:{e@ô.tr(»Z­SµŠ÷mK¢mNEò/ÑÏ65‡`.ÂþÙX"úÈDÀNëCøEí ‰b·*dyÁ +Iäú(Eœ©+wbæ—XÒçûcð4|·‘|áɦÛ6/¶€:ÊäIvT]o•¾FšÛž +>mÝÂ_O(J©Ù&#;[ÔŠ4sµçؙƖž '£üÈòÓλßKWj�Üyê$æ°Ö¦tåq¡ÿ—|2}(ݱŽHQÆhµ.` H é¶iŽê,݈:e^\›<ç]+RŠIŒ)Òàwj+1Xu ûxG«®|ÜöQß’€ãÂIƒžž´¿yøž'‚Ù*¸õÞ3b[`/šîdR¸Æ¾ºü‚c¥�ñS\Ç¡ò¤ºûAô��¦íå{}l¬&øÙÌeÿý¢Õ)Mƒ¨ +fådU«½`;màÃŒ¡ÄØ/âÓk¨‚†ca+8éBÞµ©û­§Õº£`ú,ÊaV`«Zá t±Î{s�9Õß2¾´{µÖO�}wuÞcøOÛã™H³Uã5³á ¼ÿÏ”$ǯÓÝéþúÿÑF\LÔZ©Û´_9„qo ,ú¯öÎ7iþˆ$9mì1ësÅc¾cZìÇ‚Ój-æ’ÓŠ±PFÒ×2Ø€×ú8Fƒ?~Æõ×—%A+𵚳o}n`φ³;}Ü¡¡P³ôZŒœYºàÝŠ¢u4 ÌÑÏJ£ àù¸Hžm¡.¶9È-*¥`¡ÛÉ¿ÛkgºÍMÒ”†ÛX$‰�vÎ4V­òò�ŒêUÈYމܙv¬ÙúC¨(�8ÝB �–•¦Û¶¿úìp .ùÜaÕ‘åJeʵnÆBæ Ô¢ù ‚aÀÂhÝ’YÙ-ϾÛ5šÂ �òùÏVгå“q¤ÈAgt‡}rʼn©Äù;“AxÚ`y³À+ìäe3ùìYì¹ü!@v8¾kä1ÿ¶T9 ¬ “ðÁä§é½AeJXR5Ù>=óÎXN=?™§2‚fЖñ•ãR:Û…!@çÑðYéiw +4¶ÞÆ·HîÏÝÐèYÛ€†ƒcŽàîSK~À|·hàɃH�ðêX¢½Èt�J£¨pÕÂ̇I>!E¤Ä6óaÿ(«:hq] +yu“ÒÚ3ëܲ¦9?S‚[I �õr˜)!\ºõ �‘]‰ãHdas ÀÊíõíséu8«|¿ïÂêŒï‚�òˆæj‘"Û«èºE9>:ð´x„ìÿô"N¢†�:6Ë$Ÿ‰Ð“ù×T;v£´,.¤˜”ëø*¸3–nKÊL@]a•…õe@Éþ ÄwU8Xo ¤õݤ4ž¦UéË!BDûy¨ƒ#U¹kÉ!°Ì‰*3Y£ØKn§ ’yçÕÁƒw˜?,œ‡âV, Ñû¿Ò÷ŸÒÕSñd�dn™ e§ô5?jeè]¸5†‚ú€cP•ÛÙÒVóïÂr…†C)=ëçÅ r½ãžÛ¢þã©Êƒéñ ƒXn?&ã[ÁŽªŠÿ +lx1íŒÈ߉k.W=ÖÆz™(‰Ž�Éfu ^Ĭê¯Í`QÒ–¬Ïšî>‡lBU7RÆ X‘#&Nª1z¦’}¸¹Õƒ9 aqh<†&í4DêiϘ:ØiˆÒ'Ò7…¨vÜ0 *†�†™Ü<Ù>0ÆÓðž4À6�«ì‰§a„_þ¡§bí4 ÜllÈ[ñ}§aA¢Œ 5ür)DÀá5˜š?)¡À»fó 5Ü }jËØ´ÄáPÃñ8á†1ÿ2ÑiHn‡HøNé4X2àtxy¼K±ÄÓ•ß: ëððbdBFÁ©Óðj›K·-¦Ópéf•ì¡«Ó€ïZÀtØT²’O©³¨1 į'm÷˜,îÌE¸˜�\/ü±©’\çÙ_!wLƒ�šdwi¼5¦Á‹�h惨øtLƒöžu4t�mÐUú˜†JÀ84Ò¡“Áé¬2º-�ð2aS†q¨0ú�Ljj°²)ƒãÉS^æÏãÓ°6�:e †u˜20M2èó:MÐ�¶ÞO”b>1Ôw» +@rx}Ê5¯'C°'ÑËSÊ‹<Ö‰°œ2ˆ™8îàÃW€§ ¥ôHº5ƒOB&¯níÁ9hÊ?mJz­À�'Ãj& LþJ�’ÿÇýÔiP2¼Åf;ú†»¤ÞLÉ𫹻IÉp$ÿ`£3p2úoÚ)+‰Á°;Âô"üca¦†»®î»�Ç`èÈ(XÓ¡«¸ÂéÞˆVˆ…?3åæu4Ì®] ‰EæR1�<ˆ”×%†Ó§ZbðžbIò-0  Ä üß“§ó� †éwÓ_C»]mÐ[WŽb(̼à b e¤Ì7äº1Ü�Mvs‘¨Z#ÛbO€w†1"ˆ9g|aèC·/�§åÓqPÈŸ�¿ú`v¾Œ]i:×Ô çGù„jB +U‘Ýu€Å…ã˜`0@Ù˜ôú“�Iós9c‡q)f^‰9ËÀðDœSç˜Z`ˆN¤W3q††ˆ ßצÉ&·ß²_éí`J,éÛ ˜†ÆR,¬Ó�°û?Xƒ”C×r’™­1´#ü˜ÜTd0`}©¡ `ÊœÜìµÒÒåBñŸÃ +`¹&\÷�¦diôJ_ú¤8 ½0®·}µ3 uhlÒF `ò†×ûÌ3ÀÀ'鋫ɃNÛÀÀÞ–Þqš"ð'*Ž1ã�,òEÃPQ"Í +†™½ÞD³&�‚<¡øõ†jþ¯ ê«ü•ä%ë•PLð½�×L|7‘¿ûÑ0ap†Ç$3‰"° ƒ>¤Kb ƒw]Bî1ŠÖš•|�Ë}¦„¡W¨ÃÁð(a`1“¾thlFjèØ!ª1j„á�Ê€’r„aS�±Ú/Q1L¼IxtÖŸê‚�¢¼!|×õì†H‚¹V”ø?Ü…ÁNäð^äÕ†aÙx4÷mª(ÍûA@ bÓ×á×R×Ä/•%‰„ÁƒAx‘€&­¿QÁ0Š2†lDgî BÈ€9‚‚á<ˆ ƒvÅ@ƒA^¡Ç7@Á€sƒ&‰`wYJhÂÀ�#ò v:Å„!üñ8Ä„�ÇCò[%ßö~¨0aàÛz?™N´:ÜêœïúýƒÁ� +•‡ÂÌÅ0LVGÆ0ÌfëÌ5ô’Œ?й�=–6ÞAÃý‚ï”±½a(wEšAÙ;õ_K7¾`º™rM2j¶Åzœý‰V0àò�êÞ¦˜Þ0WØo‘ˆÐ¡Àç\¥t£ È~ÐC„Ç£þýaÀ,…B‡¸é‡áÔ¦þ<šM? 8o7òÃð©ŸPüaÐßÙõ¦VþÃØ>»U°> ÀKK»q¾} ƒ.ÒKZÔ0,¾@C ƒþ:�šú*k+O'6 sãÊÏ^ƒélðà%¬Qõ6 ÉþÍù0dÃ":ªV ‡�u²ÃöaøDû»‚ÏÁ&¶ýßÂ)B +×�7Ý`Ã�W©]lªa±ˆ§©)†?>ôf‘¯×WB¡7V|uì;³Ê�Y„¡n®ŠÇS\`Ö¢'‡Á0¸ÝÃÂ�bPN‡ Ò†0øn-‡ï«*ð! ã6ɳ´à6! ÑœçÐ$ãSêëP a@m‰Î£fŒ0dMy2ººkÌC1Ùg­j/ðâV¦ç–}•‘ÔY„�ãݲwˆ0†h�f.r‡0X–ÿÉRVaXë8}HU#O�LƇ¹Û¾ôˆ˜"Ì�ÍEõƒLêíŸi†™|0¸¬tàÓ +0÷ƒ0ˆ«¤q˜<CÄÖ^†CÜöJòBh aØy%š†0¨Ïè �QÒ ÷¡9ƒ0ˆÚîð”§É-�aø¸’’qiXõ_Â/²÷§éiHè‚�sxrüà0žÅ�ôéß§)Ü(gqè/Xæ³ña0P ï¬â ƒ¡¯ÕŽê¨†ÆIªÞ®©s“ÕàŠÐÀ°øÿXƒ–H¿?OÀ Ï$ÀRÆ'. Cy]Buဠ+·ÈYµ¿ £-^FZ÷–Bôýí/à´În ±uí/( ìH~PcÁÚÝ:Ê £ŒÁ�´åØåãe-¿ÞûMЃü7.@S\3µü‰s6¿fò ñéE±.8Cbù…%ÂÑçºgù…f: ùc®”_(k]‰=Ì•_€®Þ�¡æåÐhHûø�ÓðK¹ð&"(é JHÎøH endstream endobj 21 0 obj <>stream +_€˜ª¥‘k®ìé ˜L¬@ÐêN®_�2‚¾€¼ìdÇ/xÉ£Ùˆþæ�s_ÚŒ÷«EÅ!áí Ù"ÑÛü›t_ mÀØ—[Ùp_à®q÷þ¨A»/LŒ€F j¾ K,Ÿöa_9™/à_›ù‚ÕŸõ¥GÂÓÊh·jó…öÍA"+"B¾ 9¦Œ8#_P¼§ùX«[¾š©êˆf9Ø•/,åRk/_ÐØ´üœñ¸|¡~ª¥º/{¢· ÀRâÔ[ðn€EoÁcíNrÏ[P±@ŽæÔ^‰ éÊ„hÊM'+àÈD’<ÿ–&L¤O B5,Êß*z¾^ç ÿEqZ!EËÔ7U‘`†ys ƒ §jH'ŒéO¾l#   4˜95‘øŠC1VÚ;ÊœiŠÝI¦¬\¦hÆFЇF ¶Œñ;ODͪå6l4Sìgg+Å=¾Äº}_ùÇÇÊF7ÜZ$ªÖîþr®.õhÛ]Qêñ.-1ÞîO×�Ô”ôd1Ûe¶)­èWO—šÙ·2Çwi� y 1S¯ËµwZW•3æ7wðŠQ5ñU»2ó.©±Lï÷z•·;ñ;×É©ôËêÛ5^&Ó2­¬šf‹x¥c¬JÓCúÝà–©<&Mï®mIåè§µ2´ÔVfwêJ³æ1…0©“eô‡Tf­ÒÊX²iÌýj)‡‘,°î     œid"íIØ¥ÜÌ¥@nì*Û"WÚI‘ª¾LÉT%'Ñ(ÇHc˜±Èb KAÊáÊ$}R˜‘ZIw­é¸ª�}Ò +êY©�~ÒØ“Â(v-¼Æ`Z2éÜ•íx²4L-™8€,t·Ý•·˜-ÛŒ¹ Y×N÷¹{UzÅü©Þ%r"ÜòòÛ´º•›­±N3ëºl[–‡Õ¨«¨¨{¨}¸œu䘺… $‚YU=fy²v³¯W¤§»~t쉄:ù륞ÄáI›k÷"¥áäטxçˈóf+ƒ…D0g¶‚TŸ-“ˆ§{Ó•ÔBŽÉÏb]ñÒ½à˜±¾<™OÑiæ¢B;é4’r!.„¡/”oÆðû¤�Ä£¯ÅÚ;½bñ~z.ZiÖíé¾(ê9ë&õœŠöx<9æêsK¤¼ÑNÚ(’cøƒ]ÚÄE<{Ó9hˆGj”£=ijlMu£;aÌ%m™;a e™+$úçÊì^R™l²2hJeLYÈ1}mÒ:ê’¼ôé|�é -ÝËO[ƒËE]v¸í¾Œ¥òi aL"—þû¢m� Þ˜Ùÿ»-–‚U—_¼™wûµá·S�µ4Ÿ�¼U¦o{¦më^yqûºÈXÊh[xܧ®5ÞjÞÖ.v÷öáPÁD à ±@„ƒÃƒ�p@†qGß@"‚ &Xx� bW + hp,0H,ä 0˜¿¦ô „ÁZ¦côeJ_Ôî0V_ ÐÜ+E%i0X½Q»1ªê©a0æÜ=ɨ8;^7÷ZfZÆô´êÄE?¾£Ÿýݽ•߯-¶âf=îY/õuãD=dSÍú_ÉŒ¥U«°«;5TÛÖST+c­ÿ0· wy{ÙÎevÚÕVuxAÂC‹Ù²­¤“eš�tê¤ÑõɵªÊÉkÑñ9û2ŠÛ‹ÙB–/¤GŽ$-ÚEWÈq¤âBYŠ^®ÞcÖÄ]ÄcÅJ<Æ+³d‹IfÂã,&²‘Õ Ó2È‚0ƺšJÓ¿�E~™§ýÈðå&‹0ËËt�å%m)•qÒ=»J‘ÕÙÔVÄhÚ´Æ}¸Ð�–Á2Ê/ª#òdÓ’Å| ¿¶®¤-Óx“gGVô‚F¥Í´Å4È@UÚ’£7)‹r˜2m9ÂB=EUHa0¦#õ¬û²S�ªÈâzL=Û«ÔçeÌÉb®óµ~Ž!��’4L1a CRFŸ,Þƒ‰I÷ö<û2Ú³/‡IX?}ïæö8xR²˜¼R�J™«;™8 ¢AÄ i0àË$~?ˆªeó§*毠ÅíßDzꅿã`!�ÉϽàYÏøìG|…ñ™×Þ!jq_íqÚáuÞVÖo¿t[ûð̪†¶]…Y©hîÓ4,«»ñÖ9QëTwó×ÛŸ,cÈ‹„Ÿäãd$‹™µ¡´Ÿêewj|WHuÒ˜¾Ü¿ÏYyô¥: +ˆ`,ˆ±ðXõñrSež¥Î%a¬jæ"Ï…ŸFi„»¤E…›J†Û…0J—*ê_q¨—juB›£q-Yò)oÌ®dN6£é þÓy×JIZl3K_w…¥¶RÞrS*�߬Ä9X.�¶ Ïb•ÍñÚv瑲–xÎnðn“Ÿ»tH—¯î®ŸÕæíŠÓì¢Å9í½‘áÜÚá�ªt˲68`ä­f±~,³[34»=»RáµÖ‹ñË\Nc¿>‡�ªÅK¸—J‘™ò¤ˆxzˆLÉJ‰š +d£'æq�–'»TÎÞ¶eçZóñ·s¿Lÿen/;'ûz©§ iLÃ3ß’ÒPWûR/i-aÞ*}{IS‹m± °e|ì¨8L6VcÔ½~î¤1D4pà˜b¤wr±½ó§ÚÑ^rìïVôH«htV–®TùÜæeJgó;Ü:!/�~ÃDŽAÄŸG;ÖCksüÞp¦‘$.£„åäh$U]¦dƪ>y­)]ï°Nö}ùÒ µ�†�•:¬Û+ö‡«‰¦�–Ümmȶº]¨O;SÝØO¿±¼Q<9޶y©Ë°1[Ù ß’ƒl¨ËdrX1ÂR˜n¥êˆéU³²§“È5tu{{lŸš)©OŽ£¢5ÊYmÞ·Zc/ád��o‡Ò¨,ö]99²™4æ?&,njÒ w¦x/¾toWÛÛ/é~Ž�GUHKß±U>zå¡—lb¦² ¦zÙÙG[úBöéÝÅ ¯ÝOZŽnŽ'8$¨nº—ãÖŒú¨²Jõ™ uŒ“@` �Ä’˜X®é¨·p2L,F#‘8 £a †a(a8 + 9å“VK½cjXWØ7:„X¢iÝWØù³•å¯Ã‡&]4H7üþ8ù±P$˜V£=ª‹G¬}P¥ípƒÄ=p˜pXƒ�¶é +Ÿåû¨”ŸÜŸ¦,_â ZŠ=><-CÝB`R½t  +fê?á3�)nÍ2˜KÏ›n &Ê\�(ÏÖrµEúC…ø7v@�+ÛUVÂ{ÄyÙ8BÙ\09t†έ#!ìßQÆø}9’*!\ä e Œ*„Ñ•'jhEã*âŒtñ8«z܈7Y°a·nÐÝoò¶‰ÇrY-M×t‡‚gëHð\‡W+–‰ëh.´ûcԸü¤¢á¸le')tapðVÜ©ì8 +jn+»|/¾—Wñ„yßÜÓî­KmoF['ü5ˆÆäæþý,ù@n(™ß;å�·5jPàW0YãYÚ˜­#k…ªÂßU£Ûd*ïs—`êHsºðz/'Îj’Ò:PÅ646ò®ò=ÌÉ™QlÙW{‘cªhêpOˆuA¸J8¬Æ(6äãCü>8¬Žòê" c£ÜM•aýPdŒ°Cüy·A©F©OåÄyÆ AMNw ý›ì4Ös!¹=Hß©èj³mã©P–à"Û¿Î7¢0Ú´eѰÏÔ.&aàMMs¤U_EÍG»�iC­ŠI Ð�Rèb4MAtƒ›&½ƒ9 +%€…ó2õCöFpÌЮ#~ó³®m*¼¸6÷eþ—iîÚ5]S7ù:’Y¶þ“z Â¸]€¦»1Ç´�@2ãó»«P6pýŽœ^Rͳ©éÇîz©n}WbúÝÃMµ ]IæQn½8?ã…¤¦)€sE¯lÕBÉÇgÚí¾/ÚÏ�’SdjÄWÁ, ¶ ux1Bn•¨:—àv@6&dâö¼—ÖêDd;ûJ%…Èý7’œÄÜ‘<Ð+Ã08’@ñ¸SuïŠë�1 ¯í×Ñ LV9éUQÙ^ÐW» +‘®Õ,šfÚÝaôôÍÓ:}C…_ˆ€˜Ó Ë t¸¡�%ÊÆr ¬M„³ 'zã]×88N„ð)oA,•É,;ÂøŸ³‰ËØ‘ÀÅàDÔx¼<9äsT 9¸0vºR�x%*†]¡t‡ê®PîtÅÑTŒ:› ‰�&†„vÁûQÕ?+�$3Ò<À‘—ZðpY®1.âXüòïö÷I­€Ÿ¬ª¿;cë¡8°†Æ×AKhDjŒÂ;„úîöìÃ{rA=]v’^^*Ï-Ë^ê×å4—âæÊä÷h›Çº¸Ï+a*ñ/¥ÿÏ!möXÌxÝ+Üy÷´MM‚{1Ò”½¹ZW'–ïfR茈 v.«~›X¹1%˜\«ruNèõ¿3NÔáÓܼ]û{º·¡A˜c‹1[êtlî Okâû×8½ìjêóã£Ç´üéo�†gÝ~ïJþ:Y¹0h`—¢œ˜ ØÿdÄ%/¬ï�b½ÖN– @¾…dZ[QJ$³‚ÿîƒ_þlb+ølM™A8¥Þu\ìkãÍ,}é–�ß©Ò*Ñ6� ÏÂÉÚ– “B»RB@''Œ#ç%®@´y×.M.×ñO,m0á#Ò„úúà«Iùèéol³.™¡á‚*¢cuá©þ{Ã;àaÜPͪv�9 +H4-«xž?)ò™Ò€ÈIh *Œ…—ñ³E­%�£Jàµ�™^v×j6zí�®X:SÐ[äˆÞFE`±79…,۾̈́xç[èÇÁ:BAý–�á0…ppƒuýªpÉ7L«�ÃZÜÞHKaLa!1Œ¾™™\rp1ñö°"»ì/ú�hsi;üÀS§! r®Ã/ꎒ”K˜ÐûDü>œ þÑ„>›z®!ìWAƒ¤¿8oþpÞÊ—Žq×N‰š#vôÇߢ‰M4–®¤ð½øDP‹ìIozhˆ\ItMtÇND“ÌöœBlܬˆþÅ�n\ÖdLŠìÕcfØÆÉºm®½üÁ¨ç¢Æ&R©� +…4ê8·$WÄÏh5Q �À3ÌXzxºØî`f0.Ow:FÓÈ'¨7œ%"T7eñ¤Ã�Šý‡l«R 6ñ›DtƵöÂz@kés|õ¼B3•¸Â}LŽ�†9 ƒÆ@“np Š™cÿÏñ@~µ”ƒ›ßÏAŸòA[ä¼ÂKws6Ø¡€‹ö|¼p€ÔÖVt®\ZúÆ�Ñ×´Ç¿²°$ g…Š$Q¤>µ± 4P9qk`DŽõ�J +�ÉÔôÓD¬v.jŒ07ê´ËÅÇð˜Á%I Y-Qc d’èZXèÑ S@DÎ¥å騰_[§Š˜›Û& ñ˜dŠL}|j¨<‚I ýΩB¯¦‹×.«¦Ë ù ¬×ÓÄöFV\§”pƯ7lÄ8Gùów˜�)MSÙ=Ö"­Úª¦EɺYM$„•8$¡lËÎN#HÛ‚H=e^V_Ï®PÅù&»fD80µ5¦•rîË.UŽÄ˜||E­ +@æÑß67ˆQ�Ò�ʤI¾^-ÞÜŸX`y_Ê£#`Goðp{páêWÝP¡ÃõölZ!Vt{Š‚€O�a¡»íTÿóœ�ˆeÁØ7ƒœ 1Ý´‚ðÛqT9àø`{t‰:þÎçÒ5m»&û”Ã/`UiP—|„æ Q9}l3]½(|¤®¨$;Pºé•Ã{}C_âæ`Šê¶¾`÷í«fRrèÝTq”Fõýo×{?}á—$¾\�6¯æ` 1¾~âfÿvuWûsg¡ëëçn„ÄÂÒß¾ž1ؼ’`•´¢c88÷AŸ!ÇÑ´np¥ o6ïö-Ó…ƒE‹ÁwÞ! *ÒÁᇀþ÷ªÔ~Î ¡å¡ÒhM¢»öON/Cu´t+/¾ ð¹Åã>[©Qî‚«/1.hu¶ +´LŸoÉÊF‡S;™Ãk~n.«kߪû^�é$Ny¤‹Ó艔sLPgÊ5¾«+wcöbÜÂu©éÌ–y�Ê8ÄŠ�Ê}ž¥!aþªR§¨1ZóÕâNüKê¶P˜}@r9O¨R®÷IJ6³YV,eƒþ‘(-‚QÚŽ�rº­wFt÷Ø•ž%C>CÂó—Yˆ°w¨ƒìÿÍ,uþ«ð–A5ýµöYïã‰ÄU�ó�¡..:››ïlÐË2¯Rz¿ÌHP)ðÒBŸ�YÒ#kAEDU–׊í�¬ÌòŒF.¿rŠóéï?X|?dÓ ¢¯)sâ^š"ÿ‡4¤õö¯ZîØ¾ŸµØ·ÕpÒ—‹­*1ÙŽv¹Ð4înÅ›¥d ïáÙª_’ŒhÆÛt]F8’‰" èo5½¶\Ø`uRÇ=S¶øØ¯^úJ†þHg>±‚UÂ7üˆ‚³²Â…C™mÈša ˜d?—Q +šËHªS�~Ÿ�¾ðTǺË"–ò²ãƆÞ]ÎðJ/< +È ¹lödèÌwRxÖ׸­J¡©©/öqÿ[¾%®iTG©ê*m1è*„çâ›ñx"‚Ô„œ·¤±Ã눸4wë ÕÅ … ü˜¶èì«¶b8‘%Ë$üuà«¶1Ž]AÒï�2éMŒ|Î+sÊñ#˜³q·X%�Ž4ÁÕJ´.ZÕºQH2O%iÝG!r�z÷ì¡»JH£ödf­œùÀz”ó�nOdêXkITâLÅ”ØlcÞ“ÀÁ¬¶ºXçyÅýi*á~ýÚ’•I$Ü�yÕy‹Vdì:�üÇôqcËÝcylfPÝy/�¤èjSYaÞMžšù…ZáÔ–:mz²²C^AŠ=Ì-³=D‹øÒŒ š _;ÍÆ«qßvJ¢q7òµÞ�H~ã²ØÎm“¸Ì‘œ½z`x7b%Ç3qY#sQ©=g"fm[ŸfÍ�w©÷ÁIQ¥èj«,õÀL$½zJ�ÖD»¾»@9LJE½± ºŒ^7ƒÌÀ„7/ˆá¤ä…î:E§þ%ó݉¾ÒÜÃdãF3€6�/åN˜RÜ n »s˵ÀQ0›î9c¤Úo} ŸÄú[Ã"EÓ®�¿¶´L–c‰ B*â(p0¶J¨‚â,àñFR*€)¿ Ž9iy G nÃ|XØsþ @Q~%PC*Ñ‚cRõ²}¤ÕÉþmœm»ÃÇ)�Ó1ÞÆ2I�ô\ồ-‡C¹),ï•�z¦«—w�J³’%†Œ¶V͑Ԇ‘6u<ˆB50%+¥2øµ5aI‰;$0Òÿ´G­‚è–¡Wœ]ž×2¸EHb=ÐÇÙ4‰åv%)‘1ôC=ÒvŒa +Q°GªCQÖÒýNŠÚø%T¤Ut<¨î3ͪNÞÂz³|s,ºí^ªç`¬-½þñŸš!¨¾Wų÷ÖÿüvÙØŸåz¬°Î[üÙe©m꣗[®,ç¡&þ ÄÂ{‰ Œ&™´©.ÔÏÏLñëgâÏZ5-tüé~pu‚Ѷ¶.l�~F•1³jø“ª¶Ò‡D×9ü±ùH‡G͉K)fÁŽ7²šñ§6\‰€]}þv–D[Eôù'Œõ¾k Èxúþàê'øy²lèÇ›× úS•REtmmJA^°ß_Ä4“\¢Jºøå)ãxÂô¥Ýæ66$ˆÔþ¾˜©öAVì/ƒ5ýçö¢žCºÿ0جÁky�vé#j{ª©òí¶ÖNf»8£m[Ó´ç»õ§ß+Üßm{0´r=i¤> +Y–ÔóÎvâh&F<އ)ñø=¡$Mkï@tTÂÍ �³ü0EÈWï”ßÔ?‰ aŽ£ˆ Id7DUN¾úO>á•_9”c�,B¨V(§ +ÆH$+`ïìÕòT�}-ŠÓ{Š\8œ0Â�%¼¶…“8ÎйÀyÃx׃ÊÔÏ2¾p)¸¥odU‰JùcEéO‘XbÒ‹EkôjÒß~«LuÞÛm‹ðúý· 5r�ue¤ \o¼uÁp»“ôÞÔÈØØ—Rƒ<(ŠËN7«6‚*­�–ˆ<@K¿˜ºÃîGÉDZªáD/©wn^ ?¦ÁQ™®‰‡'t¯ûôÒ›ÆÆ>�µ‚4™¡Ãa·µI ;RÄ|lö7“k òì"ó¼—H5_)På^=Ï"Vš ö¹Žƒ¶wMR(2®®éFõkkv\�¼)™ "Û6‡Ra8åh-¼�ßÙimõTI³O0qª‚Äå9-Ó֬ݯd²û†•ê³�†qº{´‘'QîÌo³Ày‡òÝüÅUZSWpf•,Ë‚ß!³ÖÄ¿£™ Ü +ê�[£ÌA벇P’È÷QªQ©>²G[UÆÁMêZº²åï/ï ¿§.­C¢v�cµÉF×KPî3—ÒVe¿¼�±fŽM¸” nkòYÒ�•)gU$¥O��Ä[ÛÒ wÍCn=¡¶O.Z$£=ÿìÂuÔþÅõ6mãs?å ·@ëb2>E<%s‚òÐç˜Ep3E›·káEÃ¥ÞRˆ*í¶JàË ©4NóµK³ñ€³FA.ã1íáÇ‘. µß)´;ÍËΫ¥¾qç種~D½ëå\'šÜ©D ?S@R+éžÄ¤è܆•©q1EwÅÕ¶àRÏ Ì�ºì�¾~§ðD}\ &ÒNžè´[ØØkÍO4¹}ð‚Y¬P}¢â +È ƒI'�ÛDÇ=‘[äiÏBmÓss¢{”(º^WïÇ廕,eýRñ$`”DЙ~�ëæ   ¼çbt±I®�”dŒ2Ênð¸iÁè}ßñøD¥*ü¿ÿr5êî]BmCrª­Yù1fÔÊ_G'ÝÔÈ'Ž�rïóG/JŽ ¡£ÂJ–ŠU?0Rp%B�`ì +½«‘1E-Àˆ.Ž +–!R»¨——áñ!ò;¥wU¢1ˆx�šOCáò!_ꑟ +#çyøH½ç™Š‹¼VðÜÌüqat0“�Ùpo[%sxˆC9�˜ ù;âja1Üez> &ŠõˆÇíxPD"à’Ý·7€B [q–¹ƒžØr¶ŒsÊä³ì8£·¿PŸËηґ\×ãZS'BË$èlHu2÷ë¹y“ |¸â“íTÃv™Â˜¼gV_矲3Ã"2}Æà ¤@�}b6–WeÀÜær”•„œ2£Gļ9ó>ù_scf&‰0|yüý«ïg +0RmPÂ>Hù�Ö«ÿ³!³j²éŠ@U?Ògr¦NsÜ}F^õ [°aú€¯n!˜‘ûö:ÝÞoµâ}a#ñS|`ï—[0ÙÀ¢h4§˜Q{ñLŠy¾¹‡÷õ„:‘N~,½=€7Ѩ}€ÑYåèŸéÚK!KB B_,ï’ü™¢\„‹>-�ŸxxvB*'Im^×ì£kXR›· +,_ü•‚Ë À.¡ËËíÉìC›À÷ìÛ!†È~2'ûÆàŸæƒÓœ}>Öš]³o\lǽ5lëX2³ÏMÆ*´áëÀÉ>·ôí�;À*«5pJÀãHŸ÷\ßkñE^À¼ߢíÙý©“� ñ2×OÛ'má0ì8¡Íýع؛®ñÒe�Rø^v.z·Òï_‹ðv²òDX4š+ëµÿcNyINãD�Í‘nG¶wÐ×Yƒ“ƒb0\]Æ}Vš´V¾ª1n+ 2MêõçYg‚R<—”�Ä Œ!tl,©Ù÷©‘Î!X¹üeø.WwnŠ“‚ÛfÃÛ=DsV±L)Tq{bÀ”þ…kî|í?ä"J�n„ÿ‡^³KQ"üÿâÖèXÉŸÚ7¯ú{�dcœä@�¤&H h‰>Ä›½bØ_Û'wÿH5é†Çp±êWÙÿAŒ´ð¤ï?SçÔS=Ò«ÝÚh€x©�‰KO±Ìë-Ua,/²†�)aXé5®üÅ*@°•C†¬ºib­5 ¦Xõ˜ÓÔÇ*ªe\ƒuÀª³Z ÔÜÏ;ÈèÒFºá8$8{`£m6qÅ&p µÍý][;‚Vl:ék šaL¨A»S9O7öDCðõq8ó¤íG{î¼9(”î� öv ƒr†ÓÞ4n4~{5™ÄÇŠ¨ŒÑÀÏÙEgSá7e£?þe©sfºÏ§Æ¶aE`Q£ ‹‡8j©B2×ÅP6]ô*y~ê¯L¢ô�žŒ”?jÿ�ŒÉJŽ'>‰¤ø¼ÍIJÆbsœ‘sír1ó¸}î‡5Nš°ÿ2Ót] =JiÜŒhœ†‡/Þe‰ŠZ£GDWÛ7¥û¼ÊãëaTQ§v™ Ýwú dãMìë¡ã† ähÍÞt4¡hgŒë"×±²Ês,ËÖ@´åƽ<@QÄz%¹ |Iܥ䊱"qÄÝb8c[ü„QwÊ1•Úó\†GÖ ì¾ÉV&ˆ4ªD“ÅÔ‰øƒCÈ MÝ„1�."ˆçÄ„oþ_¸5ýA\í˜9zjщy–½Ü²2^Û£R÷ˇaoççˆ>±"ß�–èÈ SG�íìÒJÒœu¿çËߦŸ""{ù[¾<G°nÑ£ìç¨3ÊÞPAñÃÜ xîJF/r‰�ÓqL$;*�é6¢ýÝXÚ#ûÆ“V°Ñ…”$X¯04°R˜Òœxú�JªÞ'�£Uñï"§êNµølH#ŽåG§âN»2؆³·"è]°%xýö«‚`�¿†Ñ‰¾�½��2ÃÒTêèïiCéØNlÉT¶• ÐxcßhÞÛ>àNÐÐä•°<{RfÜ0í(|rbš¿Jc²þ�ÔtªàÐXÒUÅj¦ƒGâ*D†%ྭƒŠ��“Ù+a,Pt#F‰mñħì‰#Æ[Y]/Ie}k«Óôr™šMP,ˆçœæK½ !_ýÌU"8±¶´/ƒœBj1 –2d&Nªæô~\l#}åT¦*ØñâÈ36½†xÆâ޵,Y²,âµjUóEfÌ ®+í}S•ÕÃì‹ +ŠŽ«à a$ö#6u­‚Õ+èl ÅJ3pdB!HCÛ2ñïAÂFÕŽ¬ù‰«úËzJpì|ïß8Ƙ=¹GåÐÄ6ðýØæiÔ›ÿA«• ¼²”‰Â +ì,î#.„a„Š,˦ÿÑŠXb«ŠN¶x=–¥Ô{’+â`ƒžÛ {°fàçÇñÃÕ)GáLˆH¶#…~¥L³T-�Ä¿á�$äÂ&[,*‚z�6j+k¦íóМâì�ô(QþJy¿”ÌòGÔ¸ÈY®‘t2®ÃqjÌ(êÎà™t0?´+˜·‘´Ø)N…*a$Ñø#]*׿ÐpˆÃ é +¬è½¯ßvfØ>™^÷ë�Üsæåð)õþõuð+(c—¡ÃubÇG£¹7qžÛºQx48q•Uh1q|ûh(6Й†ùŸC_rú¥ÈÏ€ÏbÇýQa“Z�ï÷ Ñ¢ËMÙãñlõ²"ÍÚcÐ6¯«#¢¾àPKA>h²CJösªSGÌH¼73·²'K£{h»°íˆ܈z+üžõÕê@¿e=]Œ ì +:áǶ³FzÄ¥ôáË ½­¾VÀ ŸŒ«>)ÏœE¦ìÊÛÓÍîÅ`äØ9ãøtg"ƒþ êõ‘‡,Ñí5#h¤Œ2ðlVΜâÍq‰liàNœÆ|PAõ‘Ó¥Rv‘= £ëâüÑ»1ÝÕ8J5:gÇÙmÐÁÑ(¦p”Çøŵ"��Ç÷ Ó�<ÓI)1‚þ=#%zZÔÄÖ1½%¦Øç”R]üYÐß!ÉqxžïYÜ�dȉ +=îŽÄ”M-µšVjRÁÚŽ;ÏÕÒH–¾*èc™/Þþ�—PP¤‘:ƒãtXî’Æßù�ʈ—`n:ÁN±-”¬ÄV3„±pE4*C*º*=|ërú›G‡ˆãG©¨�ß�©D^…EpômHp¦¬¯p1� ]#l™ßÙ å;=Ë¢ÿ¿²ï´/Ñ�Ž�ñŸZnt§ôIÕ�²í‡7t}lƒË‹!±ÖÜT“Âô¹6šô4–ˆB,øäš$¢z mèŸù—DO¹}�º;](ær(¾Œ8À5k_Ô)í{˜à•.‘NïáÐÈ’�=Ëhó¨ qC õ#§Eê/èñay& Ör8=#Ôòlà п1Yr~•’HÐ;XØQ6Ñ ӃÈu“à°:€u}´+!ÊV\/(¸ oÎGÎøw$C£u[Ø"·×£‹\êE3zágË +­¯ḋ²ß(ý ©:{¶̽Šäœ‰§§ŠüÞçà漈¼ç6|tˆ·ð2í¤? :6VB¤,0Kï– »Áë#…ˆfªt Mág©ÒiåGÃß ñZd‡ïì0Së(ò'ª:4¶µnEþ�K•÷¬Û‘0™RZœñ Çf‘W' ˆÛ'¥è!2è«sו†è)+Í«[êBÜvÓ ø@ŠõKIa8˜ÓOŒ™�b¬@}ìà= à8˜Xx$Ó{˜²ÐXP‹…§­gÙ¨8Ó |lâ5ØT 㕀ĸŌw™Ù¦íùC¡I(Ïr(£Ä¥{Ñy14çÍñTëë‰�ALiÃã+ÞœÐ�~5)¶^<±‡¬Ù)º‚¢œÓ–~‘­…k3êçR\ƒå6J /­–fÇÔWÆšî�ÞJv0(DÈ:F+¤,�D¤¶`žÁ IŠ? ïû2Žñ½�¤i@™ì&»e©úpbD" ñ ö +øjOÀÝ÷~x}‘¤p¤ÕN�Xš/»:R&žæ-CU +˜�«Z±€š‚\*�á@QiæL¸‚ÒDg J àêÔ•T‘f–)à‚+8‚+9û®ÎÕ� +‡«COÔFÂÀŒ’®«ÛVR%S”gÛ¶{C™…Y­ÉR‚#¦’¥í‡2wP¦¶µ†®µÓöC™Ü¹wuiéÙv®ë©ÑþI•r¤…RÒ¬m÷öŽž«Iºú÷íþëÏrS¤ÖTj +¢B™c[ieЦd€s#¤¤J¦(¹ +è˜&¹qu h‚áÀKÉUÓîêhg #ÓMi¢¥)n)I#×4_›½¡ ŒVÆÔ’²Òó4=Û“¬ªÖÒ,ÃR-Y$ 4Qk V¦\c™~H3›€c g i%UuS×43YÅ’³’ªšql^÷¬±æùë�íæ¶ëŸïÎÚç}µ¿”mâêà +r>~¨>®U-I_ƒÒ¸ó|I³ Ï’c»W4ÖoÛ±·\[�íÖ¹óŸqE³Yë½Í=çÏ=Îwk{¹·šÏ¦-îý³^w¼ùÖÞÚ­÷½Y÷ìÿýý÷ßùgýö˜süoΚküùÞöæ¼{ƺÛk5Þ6÷}ûÅß�¯öøÞ¬ñõ8ë½ñ½][Ý·Ö=ì5¿c{õµø³Þö¬óµo�­¿wûÞýÖ÷ÞÞÿî½¢Ùz¯|¶ÞyæÞs›±ç{ïËûõù_ë;ö¼û½Þ|W4ÛÝø³Û¿Ù[ü9¶óûuΙ÷œ³þ¼¢Ù8Æ7ã­3öÝâßÿÿXã¼õ¿žsνÆÚrÜ+šÍÂPÛÝ" +‘íg1îY_¯­·¹_Ìýíç®9¿6w]ùlüs‹sö:[ë·þwû¯ýWç{û¾ú»ø³:g˵×7[îqþŸ½øzí÷¶šsËïÏÙr͹½Üc›=æØö½yƞ󬽽öö{ñî_Ìý·–¿ûÿ\[œ?ß·òÙ¼ö}_γÿ|çì-ϽóïmƼ¢Ùn¯|¶ìùÕØgmϼ[Ý-ÿ¹[Þ}E³ý_ùlûÞJÊ‘ûÿØòŒ»¶ý[þÙ˽¶w›7öÙjm÷½ͦó­|¶¼ïþìï—oÛ½Õþ³ÛƘï¼a­»Îþÿ»uîÖïë5Ç9k«-ö¼s¿õÞ9ã‹s¶›õ[ìïîWoìñíÿ³ÆÖ~|ùþwk?›=Ç_ºïnï¯h6[ùl~󞻽ÙóíííøãüÙíc�wÖ÷îÝ1¾ùú¼µÍ[s®{·vߊfÛºòÙ°½ú»>{ì³Í^ïÛóÅÚrî5×½¢Ù,þV篽µÿjo¹Ö•ÏÆõÏ÷Z}±æ?ÛÏz}7ÿù{+š-ß«?»Y«õÆÛÚnñç�c\Ñl·ßþÙûuž÷¾ûûÿß·¢Ù>ß™kÿû¶Öfm·ç{[{¹îÙï­-¿s¯ÎÜßoûmíõXóŸ7×Öö~­½_ÍûÞͦ­þ,ÿVkËqÆÜoïÿwóÏ:ç¾­×6ÿÏ5ΟÇÚZžÿ¿WÛϳîÙ{�±îÍvýÎ=ãûÙ¬»ö_{}/ÿ·òÙ¬¾¸[üÙ­q¿þ³–_l­ÆºïŸï—3®|6Œïg·ïåVÿŽùõÿfýwE³ñ~··Üêm3÷çíoΗã}/¶¹¢Ùº¾•ÏÖ?ö»û�1ÏüÞï;¶Üc»»·¿òٮƕ”#ã»mÖ>ën­µýoû5ÿ¿ó\ÑlW>[ϸ’rl]Ñl?W>[þ·¢·�óÿßÍsîøvãk®³õßó½{ç–_o?æövLÖL�;kœ7·x{žíöÝgïi`›Í±Ï¶ï­ñßß[÷å­m3Ö›ÿïsn¿‘LmšOêrý·Î<QÄ€ƒE®+i‚¨‘ÖqýP¦»pa5kà‹ä$X{7öù³;sÏ?k·ßŸ{ïÖ]ïî{ߟÝ.ö÷[�wÆ7gÞmï·ÿ¾¿ÝuÏwóÏv¬³ÿ½÷ÏõÆ=ëÏî{­ýÜÛÌwö\w«­ÏøëïìýÝDÛµ}[{ïõ<÷ÏZŒH‘¦�¬™šM&–±•Íøê‹Þ\o¼±¿~c~µõ}oìû¾øË__αõoë?°ö�Ù`´riå¬fš¡Û³½ŸÝïì÷æÚwm¿è¶`7›°YÕÇÕ÷íŸÝð÷¬ýú³ÆÜcžÑ•æ0+Í™V_'Ž­ *¶‚¨Íw¿©ýÙ \A“L‘&Œö’íAš0ZænØî¿ÛÏnÞïÇ}ÆýZ�·Í¹Î÷þííõùãŽ1ïyç.ÙŽM`Û(Û‹L9„§ÏDUIÚIi$JrR�•’+9KŽLM�æöëëq¿½_{1î¶ß~¶c~7ç¾ã�uÿ¸ç³íünÎ-×øvŽ7Öyoý{Æ·û¬=Ïßÿ®mÿðÇÛ~¿ïösÞûÚÛ9Î]ߎñÆÝgÜ¿|?¾Þ~Œ±ý˜cÛ7Ýþ\sÿ9ßýßË;þzÿOç¯ÅTI*©ÖD=÷gMQ�” J�¥àhí¥™á€ôŒm9ßo#$jJ²62=_¤fi * ³ñ‹ž)gCÏ”s³ÖÿgÎõþþ³øëÉÏöãܹåýn»ûç»ïÏnwëî³ÇÜçÞoßÛj�±·7ûþ™è¬Tå�ïÿÙo®ùõy³–o{7‘Й ÆñD#tHµ!Ùx<Ø®i–Ó,=kYiçf2ÒHS³¦ j²!¶U,9“M@…Ønf£L’퀣Ti¡‘ÓS$SëišléÉÄÉ6Ù«H¾^³ôL6ÇÝHÙ™®*±TA�LW•–jÉš<6Z Æ6eóLÈå*f&ÉFÎ@Ód{ ( 'm4A¨¤ÀªZÓÌ¿Ûdb·¼M¶É6¹Ûd›lØ�x�&Œ–q­ éq}»mÕÆ@ +†%‰4WµL5®PfÛÝ6ÞŸÝôfˆ‡ñˆ©o{M϶yËÖÚ‡ñm�‰JÒJ³\ÍZi›pbjL¬�«4=Û·¢Û¶w›8Þö˜Œ´Ú™Ú¾Ýò6Ù)9¦§-%a ,m1µ–j§ ïÿ]Î?íu�3ÿüg?¼wÖ_ß<Î÷»Ú~!^�óµýÛÞïß½<ó¬=ßýãZç¼·ÖØÿ»÷\[¾3×Üç}¿ìíýéÌ¿Ïsÿß½_¾wÛöÓ{ÚûºÞ¾oMÞ=ó�=Çý^®íÝ–ç¯ùývÎ~ ™°±ÁD¼ôf>/ÜÑDb\M•9IUFD�฾,rCbšÉ/uÒ{ØmS“MŒ©é�Ðâ$|OqxXe^ŠÖ(S“ذs©!�RÁM˜uy�&2£ñ¼:ý¢’œÏ¢0ëba円‘¨2­§«%Â�D²É€bm‘¹ÉCêDºxyÀ\R©¡€*å†%Ž8?…<žìœedŒ±Cœ  )[ÉH‘i¸‚æ98�ŠÌ‰0<À>G‡0@+& ã2¦2)„–æs?“Bö�¦§B Žs�8Ž $JÇq £Ç¥¢Ç è®Çq§„‚ãrº@�A^Ž0`À€"b™Å&�ë`„–·â°RÄ9&] ŒR—Õ`) .åÇ8E&Ò!2C®�8¨ñâ$PagÁq¢`0DÓñtêÃ*ƒò&š ¹�ò—©q< » +;1”#ð•…ׯ3Û|…Ù? cX³?Çq ãÁÒÐñ +Rrãé\�ã8ÕK}œ�NVj¹épÇ™$Çe“¬û¤Ç¡Žã$™¯ñé«Êƒã¸—ÊgÇ%Ç¡™ÀgDŠˆ°Âœ.>kD!±¡Óhp÷xX`a6Çq\ŒÁq\‡ø�ÍÇ'8Ž#è8Ž3a =³â8ŽKÇÝAŠÁÇqNÒö"!rp\¢á8NÃã €’> O¬Ö:ù +%OùW̉‚I�4ƒ³)Ç™2IQz©4•´=tšp²ÅÒâ\ê×:Çmø†2úæ±4A–+%YʱÑÊí¤m?”ÉlåJËð›Ú�&ZšÕê¤aMÎ-ž¢/<Hš!ZÊTÓ<Å/<NRMÉdú…§ƒi‚™ma2 IƒÍ$Çs6¢èg®ª¹ª(j®jŠ¢_Š¢kû&aà¬üRÔúØzŠ´ÚKÀLüf0£Ñ@r¥•ßLLÑo&~Øãü_¾é„6Í'¥:ÔtLÑoLÅZš¯oLE´¦~¨Y¦'î&€4AXji¢¨~c*®ß˜Š_jŠáép¢jjŠ©)†iIÂ@4ÏWŠšãÌ¿•öJùÖÔo¥½Ì𩨪’´4_+©~*š~¨Ø‡ +Ã�¤•æ‹×r O‡X€Í” p~c*š!H#pÆ@IÅk~*ºª¨MÉŒ©ŸŠ–+ DKSüP÷WñC„ŸŠ~)ŠŠµñKQ4@™r¶Âm$iå‹ä8Tð Okªèù¡lŠ‚³µ ¿ðtUY +ÎTR­}¯×9’¤~² -A8cÛâmUKÒ&£…¶{ÅoUM­Ü¬ʱ à[¢à¦s3iš§¸%8Rp¤�«J<9EÁt…-¨±'­$€,Y!i°ª -SQ%9 'MF«mjù:7R­m&H£ÁJ•äÐB› +n1±¦nbi¢(¸­µ3ÐÜÀ�Vnk¹mçº�$IÛjgé¹IÊ�V‚02¶–#¹ÑÎ�šèV; Uµ`û<¸©àFšåk£�ŒVÕ�Fư©Û¸‘±u#Sp#U2¶º02u¾h!¢ô L?f¹"Õ¼*A¹‚)I#?V–‚¥” @ `UIŽ�,K³2]}ö¤�%½r²|•+�C#íܤn`úYÁðLÅÌ=Wg˜!aà,´ñk¥…ÄÒTk¦H ¹<¾¤Y®dé €5ÍÌÎÔ˜~Ê9;Ó˜xÒÎ 'Çåá î e&ˆþP¤©L3£’&JU« +’z(³á‘ÒJÒ¦Bu¶{'›À‹$qB›%Çq&äð;`@‡�läxŠ$gûPh£ÊL6Ê@ +ÒJÍĬ¡dÊÃÓü çj$ISCÂh`lCšÕLkºg5Ó*€4¡çÊ;×Zf e@”g™ +ÎÖUÕÒ¿»«;EضÖN™xÒd¤nä +š§ZnÛ-Õ-%Qݾº�e +Ûid +¢* L×í‡2Øc�wK·»�ÛeÖIòßoÚ9 LO®�Ó$7&€$m¬¥ Ö6­üZv¦«š®*Ó¬yBÙg?}`i‚[¹Ò@~CÓ$7Y¹n$­4×Ú)–Ò Á9M&(ž$•JÉ•OÎ +‚LRåØV��5’á¬sru*™¢³sÃ;Îfù:STL,c/’¤É{óõDUF+@–,¯i'k$IS“Ê{óõE’Hô¬/’Ôý.iiZÛtÍ/ž >-Îj±Õ¶­4rÜ6ô\UÛF(C™m@®P ™fÐ3Ý\Ýó8ú{IÜwh³÷ïè½Kní� îÞkïÝï 1w¿_;ûQ{ã¿ß#±×^ø²Ü³þõm’ºÛmövoüñö—ßýÝŽù¶;Η[¼í‡»· Çíÿ·ÚÛ<‡^IíõÛA̃�ó.Šd¸oön¶ wýÖÞEÒµ·¯-’;�=¿¾øÖÝ#¹ =ŸG퉙‹Þ õí|[|5¶¤õû‹íè}2=†Ú#_œôH¯_ÿï}1Î\猵ï�wþíÌ/ö·ÛÛõøú<½0wïÝqkï‡âö¸˜_�—_¾?�yÿ<ï/oîýk½ßû÷zˆµG^ôüý:ÄœÌÿ[‹?k³æž[ûÿ®õûü½þÙó ókw×ZãÿyÏïøÇûÂ6Ô»_ï5Ž g5Öé9ö@Ðw/Š_c{1÷ß¿X÷�ùý²ÿ|»�÷ÌíÎ_üÊxä/òŽÛgoƒÖ{ÿvíá0g�‹`¶yoÏïõ=c¿»ÅžÏú‹~AÏ·7rô@0Ô^öØ{¡A/†âïÛÍ»oœùDZíÿÓžgãëóÏâøÃ¼E�çôr·ÚÅ‘{ãý¸�áx{ÆûæÎ»ö÷ÓŸgìy϶ýcÞ{ö/Þ¯Øõ÷¼·¡—u¨=í»öîͯnuÎ\_¼eýíåû~yíïç=×¼Ö‡ Å{_ÐCP{¢¶Ö» ¹/&ûöx_‹qß8g¾_ ÖÖz}ƒ¡GjQ{$ùúÞï] Ã?b»÷ÕZkïc ’Ø‹y´¿Fo_ß s×_ØÛ¼¢ø»½ÛÍÙsž1çYoÒ“?´¡8vïµñ÷^ÖjOë�½Šø‚;û¼-Þœç×H’Vk/ì£÷üj/$ïöðxE æo³ßºÕ×ï¾{ÿô¶ø’öþ¿óÏ¡Ç=é½›Cí‘¡~yà‹|q«÷ÿøî;î‹ÇžAímò‡Þ¿¡öF¯E/r}8úÝ/Îß—£§¸Ù›÷÷�þcï1ö¶~_8ïŒ_›¿¼¾B�Ô/íýì³—­¸ýÞ¯½×ÛøHª¡T…÷þÞ¦ùö8¡‚‚‚>û—÷ +ÉïY2k1÷^™‹–�Ú‘»ç›õV»ºÒ6¦à®iÆ¡ž©se’©�±çêx© ü�9—É+SôÀ¢„Ö9-lH.Å÷h.°#Àœf!ó \"ù¡!ñÉ€|®€>K‚†Ã¡ÊLÊÃ>ŒÀi1F;mKdDW/ÌIäAà|þ^R¦ÔC•™ŒPZÙ¡ 4a©"Ù¤ILŒ ÖN¶C|fîR vðNZ"DjЄ8(CZÈ€&&…©AÓ!( :ÁŒKšnHÈZNípeÆÀez²‚jeäˆA‡–}ÆüÎÒ¤±``4™lò©T&RR°ª;ž‚Ã)Ã)|^›´e¯õ‹‡µŸn£Ôbv â’‹O™%R@ž&6¥ò p΂t‚Y¨,¾Gt¶Ë0”Lñ=ŸÁÈw•�¿™ÇzYï áÙ�§š$°(š ®LÍÀCâ´¥‘ajêe35½Èªî� ·OJr7“nÀ,�örátj£‚ãY÷" :9(ãS…´’� +ŽfÁj ­N>g["QÈt NGº‰™ƒ'—ßYš á …AG¢ØíÉML(Œ‚Z!qh£V�«k--û―”$ûüG³®.Y€ S4.E&6¯±KdRŠLì$d]"½a["ˆU¹º7”˜rb+ˆ¦°×¯ƒœÁH5=c" tÁhe€³DšeÌiª$Q4cš5© +€”q\€ÿêê§C\)káä䗹4† ¶¥Á?t9Ñ— +…*N£–0vd�è\¿.9+v"Òn£Ck|Gƒ&ò`†ÙL5€™Yf‰yk-ÓtLuPe=ÃaÉF“ñe• u˜ET!Å:Dƒd¢• ”‚Rà¡ Ë4•™1Öl‚Š ÐrŒ;UÌÅP�`¡Œ3,c^²WíÀàô@ù•ؘ¤¡‚"·iò‘Àš�© F˜„�`htŠ WU‰‚µš¼˜ +!iˆb�¬…J „¨P T¡0  sÂÐ׆٥mj!ýhˆÄDW¿Ž�«SPð¹ + ½dx!p'5C7WçIEP°RL ‚ñ-p 4TP@(»�'V +–�aL`€åQD}ÝÒ£3C8)’Â…£ ¼J�Cð8a¡,pZ}Ñi‰%ì@À98,€øAÇòJ �G0(xÁ2B«4‡ãÅ*Yb%Ö­0l–L`•`T”Q‚¦@Á!ák…­N +j5pYùUD!Á­ÐljA¦&Uƒœ¨D¦Yê2ñ¬TwÈ—”EM©�¼:Dçø'‚Äéñµ×G°2¬.TMáB)ÀF5d�‡“¤–H8aËÀ9 xJ߉£003™ÛÀ”ÐáS Ö#&N@ãPÂeÁª´Ñ”–‹»�’C+F‚d*R‡Ð`W…ÔJ½ƒ´–‹ØèƒdjÄb@¨ŒÔ„“cd!Y1ÑBl¥E¤Edµ‡(ý|‡ÐFL(9<™�e´’„`&d²tb YŠâ€6£oAé#òð)‰Ý§CDL�ЇÁ{ûSyP¸�ºžBO�Œ4y~l"àQ žÖ Rv2œBAçñšNiaL:ªRÊÉÄ 8ßwqTÓ©sÆÚÁ‚Ãú„¯�h]U g6bú6""¦¨FñÑ0hR‹Ž4³Á×8ÈšØpȼ `XkìdÊ0gd \•ÍF ×9T˜FîÌäsš`>ˆ¦ŽÄ^P$ôtYHM–‹lãyZ¢–ÑK.K22YBNÅ’Ž>KÞ"´2Z°\1š*�b©lZ¯Ò€ðzx(xp $ÆP¥Ã3°;``ÁU !2H œ•€Úàp<Ÿ�8ÍÑB Cp*«’‚ÆÈåsIˆ(\ÂC¡´JE2àÑ¿° þ@¬CðQCóQ#Œ9)¾fTz“€ÁkÍfäQhÀœJžÏ„£Ú!g:v¶°úÁˆáÓ;„g|üε¤3Zÿ�›3ä.UjÅU�‡ƒ®ç Â;Dò°-Ì÷ã4)ØÝfóÙ‰nð÷ +‘E¶ºÈªV-R¯ È�NDZ"ÍèÙ¬Ý!ìÉ ¡=Œä�1‹¿�EšŽÊ {“šgšŠóÈ éw9âÏ9À-†Í›�Ó‚#� +Æ™ò¡Ã,ˆvÏÍ /îgÁ-Y0tcUåN¦{;Éê®Ì+ÑìΡ5àÀXV�ZEÖî‹•) +²È86d@=Lvcñš0ˆ +&y¥œ&  Úf²£Ÿ„©”7È¢ÄĤ‰ÌT0¿Å‰õ8X£¯Ct4†ùÌ�Á¿R‚&òYXÍ‹¥>™W2Phð²ÂfyçËy¦Œ—ñ(Ý‹X:Ï“­h Ï@Î$�Ü J2j¡%Q¨âIRzÔŽ$áô$¦�K4 +—CÒ!z*±F>_rˆtjŒ¤%ƒˆÉ‘˜"/ÛÀ‰„ �@ÄuzY€=‘×¹BJD4Cy¶ àÉ €�‹ ‚È4èyà,pˆ"�ñA"œ²½ùðè—•¥|Œ¸³áa°�êe5�…aè"™•w4Ðt;…F-Ò‘LŒ®CTj\÷}VtQSd‹Ø¨ôZ$((àÅš(,>”Ï`QQ%©Å6ˆ”^&ƒ�ËÙ,8tdY<¸þbVÀí…ÃHÀ.b†È¶‘4¯Ë)±€eª"¶IÑÂa„3ŒT¤ +T$п h<-…WqX)4�JQ‘�«)N"G�à�Â(^  +œyE$3¶Â·òU€¸ÊS„åC»h†b‘ª +^ÐX"äQhbUÌ­‚2�C¯Ï„‹S¹ 3£�m+±b­ �™JèÒxJœ@ +¤„Z%ôˆÁ“P¥b›ÄC+Å$À†%¡@£$ “Oˆ(;Ñ!f¥›`É&:ÕKØË&’(8ˆ9 …†‘(iPE¢†¸KVîÁ@|à>ßéäZ”² ·‚gŒ#YÆ·@FN•b…œd¯8“€�ë +\‡ˆU\\Grp ‡‹+8°œ.…T\™ ¸g ¸Gäbâ\Hâ25oÄ)ÐSˆS@;‡y@y¸EÊèp.E†ã@(.riVa]¸“ÈbảÂuˆU8®€Â�´çs¹„ñ\êº�cPH8'`lŽÔ2·X™#»z9ÔÌr•6á^øq�c1°$œ&Aá>�„;U�—`^ÜÇR\‡Ø§ +ƒãb½ãÂ^p&ŽDÁQ ŽÁq×yÇ ð°‡Š‰˜ž`ýéð(8ŽãÜ€ÇA>Â=˜\bòHpÇ­¢ ÇmÒÇiÇ9€Æ7' +λ7`€¥TÒp²‚÷â$>ϬƒM~h¼/ûÐx¡­ºQè@, +�Û°È-8¸2•”©äÉú3ÔGuA Fy„N¢üð³CS9‹f¢…ƒ²È¢YMt/keåtˆ•㸄GÈ!r€© 8å8.Úu Á ˜ë@ƒY¤iA0Æe½¬ Øç[.Ô!@0IÆ×²X•Æ—Y"ü?ßÒ!> RsÕV/ûŒT¥�q)^O•o ‡¤xOv: ŽBçv + +�Ûaø|K§CtPIËr~§s8¸C<0PGX)''-"Á˜5�%Ò!8 £š¤ (Š‚ ¥]™¶ùO‚©cL¾C,È–c$‰±Z�<ó$Ô…P¤f‘ñ]Gb@€;Ð ¯F(jú½OBmhi°Tž:'Ь&ãÁÉ t�Ø.�D…À« \‡y³CUÛ‰Œ&šÍFü4�]'˜o ƒÀiõÆ:ÁtP–•‡³øÈ2?±C21Š”*„M�‡Ò„ 6ÑdÓ–¤;S- 0#„…›9MH!'�VÚ×�wˆ–ë@ƒû·!�Y ?jøQÃo3hðfòm¼oó²¬JÊëàààà §®�ƒ‚H]©Kò à%îËKÜ׃‚ÁÁ¨ã¸¨©è%î+’¸/‹¶Ðm±X +�»YO +�»A<4^6£­�%r²>‡F‚#2•´™‘©™‘©'«C`2�»‘©™JÚ !HûaÆh7©uÃí¦ÂíÆ!aŒ¶‘.�œ¡>Õ�êàó-ªƒókÙÍÃ’¶áIÛ!Fè¨Cì®àÂ�ÐÏ·0Fʨkô‚KFP:Ĉ# \jþð9·÷eE3~ø‹œk¢{)P.Ñè^"]Ç’E³!JŒîRs‰&²¿È®SðG]èÜ•c SIrxÌPK£ã¸të‚¢ã¸D:Ä&Ôq\:ÜÇ ©§æ Õüm^êE£ZV�ja$Z¬I�¤Ñ½D@‹‡Mâ²r± F€TËšöT SWëdÑTKäsš¡>­ÒÀ‹ÿS'ÑeµD>gé3‚rh‰|kB¥�;„êeŸ12)XI‹QO�~,Ÿ5^‚“ü| çu—ˆ'áHn‡�ÜÉUÔ „\ŽBç>rX‰œ±‰5àE%-K„€ñhÀ¨ãÁCãe;ê©a|(2ÂQè¤ Þ&Â}J+Ö%·:^‹v%‰%"éHr‡�‘†:7w¢� Á'ÁAyuˆ…�'àqÐ@îYàI QpÈØ$¡Ê@®&Å5P–A×±Œ4µ²—–”* ܨ¹B_fVÊI×m‘Õ¤@‚¤æَѲ¨‚Ï·|¼–%ÂQO ‡ŒM:DÇ!c�zj"­d ÷,IºŽÅ!(E&¹6FËIø|‹c5:P‹„¢('£C¤5�%B0s4€¬Br5Û§ƒÂÓf5†Ùˆ°y|Ò—&2ÎÊ[Àp +n)PÓÉ“ø¸�Xw� Vƒä£UOBí -–ÈÞDœëDÊÃévˆ3[LZÍ-x}• z,}-– ä’ 0†í`89d ÁÆ@¶C8¸Áµ0° +µ Œõ ð±Dz m‰°dMOgj¥éÄTö–ÊAV;} ]²fr%±at­R$ÖÇIaH–¦’Œ›2P–H‡0ÏŠ%â…Äü +}ÌÍP‘Nš¦‚1F à8(d–W­¸n0G[1‰TpÉ©•h•uot/Þ¤©y£muÙຆZúy +:KÐQÖº¶ë ¹¬5u¬ŠaŒ6U*OÝde’¨ôÄvÖ“A=tšª$�ÃÒÀ鬻òe,Ú­¥ÆhÅŸˆ`ð)¢Ò+CyÒ´CpÜÀÂÐJ8rƒ@$A‘S¢Cè ƒ½(ˆ&EVJ„ ˆÈ9t2db¨Hl©pd ,ÏÀÆxªÒ!.&ÎÁj|’¥ÁÀ²¡ØÄD®:D¹ZVOø�Tkí¡ +­¬NÐ#ý!)xÏ%Uz~ß¡1R�Ì“e:%O¾f$«/Ýd $ÿÉZt‡ðÈ:)•ìa;¼Vv}*Ú£U±&²Î˜|‡@P|,ù!O%†¨<=–€cÒÝŸyj‡@ Œ<6¡¥;BíA¡à)��ÈBÂÅñènC-M½¡:g+áÔ ¼�Q;Dæ =¬ŽÁ�‚kâdîá`X85c´‘M©¢¾‡I„ÒV'Ì@îh®ùã Òƒ/ 50Þ'Q€ øØ†– +Õ)8Ç`屦Gª/øèI” ÖcZ:M;DI_�ØТ@D”°¡X‚�j±j7€0 M…À, +yØ •�W;„*æZHhªÔ©K*V5ƒûX"5OʲYHcàæeSSFÃ@’ܯ¤.à�ÖB êȼCýÆý|ëç‹•e™ùýÿcY<X`Qôô/ !Ñ™·:6‰G?']¿—M~CˆYÊËÝ>ýCr¾‚º©• vWÀÖö«";uSwÁ:&)ê.+ÊÝ=æÌc +Úc 汜¿²Ù$Îp¹÷ž—p|B!®Þ&=DC/˜¾�r¨-±û¡Å›!¸&üÌTƒ†x•Ý)¹ãc?‚;®+„dú#�æm‚jv]ù.ôœúK\˜îßuóÄáÏ7“Û j‘é6‡éò©n4Î)¦{�ú–4H‹éæCÔ^w‰‰Ò-ÇÿZ³áøòàŒ�*5žÒf¦;¢‰³øG°ìÀë*gBé:Ó:L—oš8¹ø×¦kƇ ¯&%Ð/Ý`fk}ÿ…̺¹È˯qœˆDÌú gL·''…re�'ÒÔýC­ÒhMê_õƒwûÐ�¤ŸGø|^i`”Õƒ +zWpV˜C€zKzòÃÚmdT#¸vÏò qÂŽDXeÌYh>Ë�ÒgVݘ†h€Ã]çº}Ë„ÒZVÔíQ~ ¤³æ0Ün¶#HSH]mFÜØæ,#±>k…trIíÿ¶„B†r®Ê±S+Eü*Î +K`|Ói–�¬Ì´ª6ó—Α„å£_=-¼b©¢0hJ×Ò˜«Ìt‰¼0Ö5�"$ ZhˆýU~ü6O*1SÞÏ5ˆ¦»Y3Ð�²Ý»fʵV¬üÕ¬båqùvKÞÅœY@ØÇy÷êìù!‡#+Ït�q[Ÿu�æÂ$-‰-1¼Çô,Ð¥lfàIàÀb‚ÕLŒ«Wù�=í}.þÏáL’‰Üí¨,"~äõqÏâãR&j +T½êÀð‚WA¼Jw . \�òº.(aÀG(DßµQˆMl쨖À®O&r}zþwZçg™vÎ �`×,ÎÚ�!Ø…>BX!IÏÍÒm£#¹€JXò!‹UÞ0ûmëÖø°�ß×/cÐ9—˜^`W˜N·ÙƒR na~X“Ý„gÁ^„ášhÅ'Èj&€;ÜR€œ|“í&±gü9 ä¥úïWÐ3öÚ.8¥…€Ò +àÒñÉDÒoÓ¾¸Ê?P¡Óu¯š©�Ïw�y(¥„¼¿@öùÐÓôDœsio¦&NÓœâøÕp6àÙb+€êl¦,° +Ëfí5ø<éùÖÄSÓ{—qúïb8m.ó ?D@nm/A�'°ãXþütØFª‡Ö^Ù9ÊägnÂµÉøAj8]7Nþ³òybÊmfQG»TÚ«ÝþäÌÿ=ƒò¿œrÂåQï�ÃLs*Іj± ?Lðb•/êašî¼[|DŒNôÒï!ôð) š“úÕ·à¥f2ï4•yâôFŒºÔJ(%œDŒ»p¤d©‡I¨†Ö®°h+µ‰,|\eœŒoÊÃzš{r‚Þ©ð×vFnG?6‚#Ž¥¾fgþ•dâQÒ?bÄ 2¦§ý|¸aD,³`ɯMŠÍ®!)�V±wqOS=%?Þ ßÚ¸4²z7kÕž”C¨UÆ„CsqzÆ9÷L8êP«M w«É×§³È“OÆò÷¯1üÁFë¦Õâθ“=¤NŠÖ×ÍMgÀŒ3ïBè IyDsWRxÓ*½¡P핽È8¥Ú8Qæ‚2P–Óû¿V-dÓ3Œo½œ4“ÕHe¾¨q¶ø>s¹{Õìó4©ßýïôŸ„×zWMp4“û’þw5‹fnº$oÒï&”ÑÄ»O€G¨ÆÅ¡ŸÔÛ+àš‘†€Ê}íE„¨dËÞ�£Øgr1)ÌA¹[ܘÞY­ºÆ…ôµª5†ˆFøÃy‰}ǹßËÄò.'1|#‚(�æ…9 3-Ìx¡NOîµÏdHØh{¾!¿ÒV³éÌUç�+"×Ì•ß2é”÷\!ëNõÄ»´xL^ˆ’ÑEòw#)eïCŠ4ºÝcI–ô‰ZI~ìÉ!óMŠ¥Ä\UÏÊ�P´¬Ï '` +ï³{c(*©éוa™íIx²öÆò5xGÔ÷ãæ1ëuŽÛ0:f·EÒq±B¤sÊ0¼9ï"Iðsü¼s¨ÍÒi>I…q)ã#¡fIûõþT´AµvÙ“äGôWý¦eB‰…ððG¶q@­d3øtn ¢£ìªø©fͺû±$u Âó�8iáeuÕüÖÄ¡Ô'¹÷—ËAJ½I×F2r¦:¥Í~V{Æ’È— ú`‘òÄ,q‹áå ~G@ Ý׊9·ãøúå»Q[”iú4¡Ì»+OÛË‘KqðæMbýö‚±¼¸[�úÖ_žFŸwWk‡i—6þŒ%<óù-7} ò\t2•Çj¡Þ2²„1ræ¿”j€Âxõ–A™¿ºû4ÿÀ$qëF¸•C¼‘”1þž@ŒÜĆSI¤( '$õ©Ä&ê’Á[ƒŸ8gìXl8CNçö�ê���ê©ßÊ…ÉóÆ™–Œy�/p k‡›ta±Ü&ଌŸæµý²T‹QŒµþÏCMJPýËæH ß5_͘!H[ú£g +°ö‚˃­j™I&«D±}õ²MC8áàª7ø u™‚´SäR'&xýÏ«ó*MV?ÑÙT]ÃQ!³Áé/ìf/7$¥.YñŽ.Ô@›#º‡ÚÁÈÈâÞÈ•¦ÃãÚ¢€ûí‡VÖ^ë iLB¯¾Îùnú¬cáµ<ÀÿkZÁs 6,8ÕC}|¯a†£°(åWƒ~AqnfLZx²Ñù ÒHb�öEâý—¥¡s£©×�ê+=(] ý. ˆë‰ñXÆ¡¤?Ð.—¦KLå-‰´çdSsà)æ)�°›Ðä°J]ö¨ ÷_¥1-RAÕ~db— +á7‰ýÃÝæó£6Mw«ÙÈ  eì'€e"}“¯ËèühæN9 G¡4˜PH·ÇŠ*öò$¨e@uS—¹vS¹ú\`-šÝ�Oê°NĘ!ycÒ»rqüš5ÒV§ã̆(Kn}nÊ%Ÿ.l›ð?4Ñàå·^¤Ö’€ @ÀM´„±<؇x—íؽ̫G}OùI ì5]]D¾¾¹õkžßP¹_LÌÂxƒé]Jáð$*néäõ3¼3¾rÌ0YüÒ“Ã.tM��wÓyG[zÁÕø:±;âÎVgÝ @ `þ÷¡¥çK1¦«—È*D}b†Wvš•.’>£úØÔlžo¹¯­Én!\rªvs.IÆÐ ¢Dx#²Hp)RñÔÜ4ɈZˆ¹qžx‘Áå}†Ûy¸’ú÷U4yd~„gbhLö!´§ÐÕšå®sŒu<†eYNôV;?ÜÓìD0Ë“bÍÃÞ´MvÔEÈÁý «, ¿t:2¨×Yo»¸@àkbàD” h&“¨ûé2­è‘°ßIé~íN{ˆB¿+sÂLp§˜³cÿbàÐ~_LVáÕÝÄ™œvÎzÉ‹›öÕúrøyæ«r¯¶Ý¶ü|•Ƕ~…×ð{O›…õÉì¢ÈŽ4-݃²à™jSè/ÏŒˆœ‰|"`*ð �7ÙЛTð s +Y °ºWì¾ái ‚ä±…và5ʼ##©O/¹ø©F$A‘1º2ƒahRQWCߨ4ú^ ‰‰Ð`“ ðÅ�ù{ˆ'¼_O䇰ê;aüITá$ '…îøÖ#b×ë.5ƒ8mz_�h;®LÈ%ܹ[¬-˜“�­„pu¤0âÚ»*q�ŠÉ|×'=æoIƒœÂÖ jÉ—Òtx\u‚�ž"q¬¸c1›L�Ç“¬Ÿ®Â/_¯Gú*”vÆø¸櫪٠ã ëí¥65ˆß0F4Ö°]®óR{\¦£?p-^g[ƒ ·ð2Êz½»ïÌ|6Ûc—ÒÚ­�ÏYÜ—‹õ#±¢Ñš|%+›^:k~¾êðnÂŽÓqÄ$šFÍÖˆˆÇ p(š‚;“DJÁªîþŽúI±ä¹d£Àè=S¼³ÇU ¶¨Ýnlû­’ÉL’m¨UÆÿ^`«˜¢ÿÛYè0ò1ú‰Š�•ZIz¡fôN®´Œv¼kðå_„v¥Þ†f;ã3!³{ž®ŸqkbÅ·@´^X8¯Dý_ö"æ:NË×§x�ƒL X ûp�Þ1Åþéàí•PߤÏtQч£rÂè®QmyøP'åùŒ\‰ +–øÜç÷ÝhŸ³Ä�‘ŸÜ£…¥Y×l�µ]Q8+Æ×™ÇžH¦è¢„¤Em0Ç…ö㼊ç Oä¹9·qP%–õ«vMklò\™ v¬Ö-Ú�‹ØË¨!³Á!•œáÿÔõ@Oúàöæî->ó,p EóùµFiè(%ÀÛõ~ÈJTJ­;Ñi­»‰ò¼¥hbÌiòŸoX»}È1²¤°ÿ£À£À +²ëpª!ŽàI¤+$W¡½W'¨=© ›Š@ îj!e«É<Ï×-¬8=¿#Å_¶_Uý+SNHEjä2á_ LÉë�Ûv&q3À(V¥n×èŽ@ëÅbOy/ýòXÙ4p¼Î„+6ņL a9)—’#À_³²½)d»/5E“Àõ€ún1ø Q]—n¿ØÒ@³¬…V#àˆÒ 6«¡rIšðE 8¤0®Ï +'Ð…Ú°QWž—Ç;I7J§fÀ¡Ø"Ê÷¤¬E¹ l íMh6°>KÒÏÂÏ“‚±%Œ “PHÒJ¡çðùPZ7K*‘ª—¨·j�žV:cF^¢0xZÙâ ­·\ŽåDZ¡šÂ¤†åµ¤rR^oý¢nÂzdew ¥Vé2½h`6÷ƒ«šŠ/ŸBÝrÆ‹áaHLq,L`™püu.Ñmžñ¦žŒuS0³ÌbݪaßA¸ˆ0U‘×%Íï™y»ÛY¯$ð�£IVøJö`û±gØbo�-<’¾Mc Bô¶¾Þ<”…„�å[£+L¬»¾ ØQYmq>6�†s&[ȃ‚œU8{«MDµbþ`$6ä K b¶Úˆ@/[$O@˜<»šIë1e|¯K4¦¼ãŒ¤Ö7p*@[õÖo@UÁ�âAN!ÓhòÒ‡É%à7¡;.¸g1C†Äk…�ƒû1îkË6"~Žäâiu{ÏØ›Ã•ƒ¾?b”vp\©A6m)DO¼òW8ƒkXóUñ“)VIŒ”g[·vßòeQ3ñ\�„æžzÚ$SýR°(Ké1X蔽Ýp™¦ß¨ÆODd/Ëò„à–`Ë„‚_«T*zßϬ�È•0ÝÂT„9]úk(±k†æ  TöO :�A¼@…à-z‰½ã,[½I•ð.§ôAa'ÛKþcw«d0UšˆÁþc1“ÒÂF¡lž(|ƒW ÿºÇ_>S-ÈÇ뙕šø«à߃‘èƒEÞ̾J™Ò˜æN1iìµB)ñ�D6Ýâª0iu¶µ6¡é“‰ö1aV &‹šÜNÁ¶”êÖsF1Äöñݳ¸Z€î�Œ˜`Þ÷2 +“Šû^H›°t¢ÀÇÔã®–é®2Âxd!øH4W¾'LjÔüχ*£ðºÍcT«¶À˜Z—O^ü™{ÉÕ£€…Ì  + �5.L/'mµoý¿�¡HÓi ÐIÀxÀ•Ü”Ê7›è³‚RqNdƳJá¶=£àõÄXÆItqJšƒÉ^â¶‘b_/©˜ûz•§Œ“ H +B²°V»WÄñÁ »xÑ(†eƒ#eíÁˆÑÍÜ:l9$Gñ'` +P}K<Ò•–q74‹T’Ÿ¶" ,³ÎXHôƒM íÒL²¼ p'ø«pêJûŠ€°õØ”ö¬zçÀrÄ{¾\á¶kõùR!—þíÖ»Q…ñ7Õ¿2±9`'Ø3Ü\[iëµ#žcU¹gÆ ÎùA( ½juSÿ3Éÿu“ü6ËÍ\…¶Wý¸–û«Ú#À� /ýóá\‚ÚgæÓà[í·’‘Ûû�ý¯ Ü�E$ÏÊ’ñ¦l—cbèAõuÉ`Ô|#Xäm�Áyˆ}V�:… áI¬Æm´H´ò¿[ñgê ’ ·ž6xÖ«®Éìºòü”ÿÐ復ùŸ�—›CÏLù º~¸¾û—�(àa5è¼µmðÍ7Bî°ºØÍöðø§6y‡¼ôÁÇ ž3ÆKOþ>Æ Àu˜„ˆáV~NÔ$wç$»ÅÆ- G"®ïÆxª¯n÷BˆŸ + %\Yµ(¤\¤õ^6]ù/p÷z-gñ/ �#.ä{Aíµ¸’¦jÄ8^UŠûÇ'iðÌš:©Ø7oVl†}Gg×�Ñmƒrc<=XH¤«±¾L +:å§æM„ÈFóœ°&?ï7,‹Ã)ðÐ'Óºp$2·ZªÌåu�%×8]F+’ÅÏÓ~.׿í¸÷¤Ö„Df�èC3aJL{sN-¨J–­|Ò]y�…äI['`Ù ’òTð–ɸ›"sŽiíÍJ�´é»~8#c%gnàTÉñ)à +|RQ{š”ØÐ(?©F<0 ^±S@÷TE ÒÂ� ¦Þ!åD™Xl`iÔü*ú-ò®B"€‘qà…m‡Ó©ASµ¸kÈ6 ˆh——©l©¶cüœ¶ò†™¾Êr…yïçovÙÕò½z ­Ž •Aöµöbò¯s-D¼W°)òiæUÑ} `(ªi1Á&ZøjŽ«Ár&“oŽCRÒ*˜Ýe†¥ É…X£_B|G©’LˆèzŸæHÕ{‡ð@E³J[¬€©UåsHCµ¬ 힥IµÓ‘ÊüpÁ=KIJ ¬£¡¡ß¢c’iñçÉeêâ†×["z/›Ç"…Ã+”ú‹àúÈ tÂäÉr’IgÞ +Œ q'–4ùÇÙ¨E}ä÷Öq“ Ô‰.‰SášÕ:*5Ge29†™·{–r8€Ö}ȉ¨ $Í–Öiq�2ž&#ÂùÜFÇ�"$Ý(|Ђw[UЉ|ïó9=XWÓ(ôL»ž¤ +Ç 9F`àK†OIlr 7òì[î‚�¯Ã…GȹA¤²<ºíìhU’4Ä™ƒ<\¿‡zÇES}êy”žÁz`³ /G‘ØV‡Y¶Id€"§Èb�Y@hÖS2r—ÐZmpñ‘+K¼ÜsƒED„ŽFd„_ì�¾am ›gÄ,Ë 5Z¿Š¯ aš]IMƒÜÄTt0¡l$F³ž·ìz‰‰v{¦ºci 1%ŽÂÑ¿K�#CÍ +÷A™Ò3¨œ¶ƒÆ+ì U«M`Nu³,MA=Zöéx¶šˆ^é¥è‰¿7sô !7P#ŸÁDá§fGêø™¾ åÏæ‡­�ŠOj¤aŠ»¤ìn݇èK3½yr”ÎÂÄ’uö ‰¾d�ßûE ü†·½† Íð ;Z‚f @¼tÅ]l±opL<�¾lkÕê$ijžéÕv ´ºê‚-c‘-Ï6¸•%çKjZw@)kTâ„€«uß7ES¨Å! ¾‚Ç‹Ô7Àû)wõ‘.k¨¯|^û2"VŽåç2üÿÐÙ¸E?|†ä[2 (F‚–‹zZïG5ƲÞJ,³déâÂ!tq�} ¥8Í€%±¢ãRsUÉ¥”€l¥ºÄZïæ×ëjÚ‡Gt×)y°,ˆü ª8é#uoÊx7B#]�_tÚ +œœföîçY †Kfewã¯R?ƒÀФ�:z§3x|‘¥”½ÓÑÎιj;N õÂÕd¤ßU$èkI„ÄK'M§³†=~�hO­ÏH:{PJâ$ª~ëH­¥?^‘quùØxÌ’-�'‚ú¡Rãê.¿só”4«¬éîœòú¦B‚.U£¦T{U]%Eö¸UCý]×D 9ÍÑ ù¨ÎµÝ¸ Zþ±WàÍ[pÁ"æë¸3ã42ª;ħQe‚¥ Ðã蔃ä²éúwÈ©±Ä WÿZ+gcDÞ>ÝÎcij¬¡)Øâ)`t 0¸³¦~¼[TiûÉÀja7¨)žz)¯\.>õ’‰›Ò³]rx#r7ܦ¾mš)Äe·é–q¤Ô^x ‰PêSnVÁ'½zm†Êã‹ÞÆ~UÑ5«»U�šF»zg¬ßåt(Û —@øP,¸²=âHæ>â­wš`Ô¾vphµƒðŸ~ H(,Éšì¨z…ï°°ÚsŠíÚœ„oÌ~;^«•Ó´&€`ÈdcA»0ÝÙwÁ {ªøØ]«üC©ä@_íÀlÝN’3z¦ì]+qÊ2¦Íêìa âK’cØ¿Žd†z0ZMØ`ºbÒ›Áû13µ'HííƒÄ½x²¦¶c_ßáÚ»û¾{*'5€*RU2A�u[p‰µ¹4¯ma¿ÍÈ·°E6€î[ðýbŒ ÊE±?Þjq�òì÷ Žu·¾É¯»xF?…Zqµ¶á�» ß&ÿü‘H 2±Zíï º_éÕ7>è%œ-š~Šz �k£þj9HÌ¡±ˆ/”F/R3gFÝépÕñ+ˆ:µ†º’Ñ\Ýdô¾#%”j 4a¦�}Ž¥Þ>Êp¬”hC„Ä•+·>©¥ÏɱœÀSPQ +nS<Q«�(ts?Ot.!L¼Ì^kžÐ˜¯§ÛûÐ0wh.Ìu®$Ì÷S%ú§YX‚â ÝQº33ÌÞëï]€ê¿÷§9ˆvî¹2J>×-(l¤$Ÿ¥ L›¨ÆÝ¡èFÇ< Y¿†ñ90- ãT·J�„ÖÌ54ÞwDšz’+�Ñ>´±Äù69nÒji “ÌÜq¦D<9fÎ[•Átþ©�Ý3äÝ}»lˆ +w ʾ…Pjí¤“|*æÚoW'ÁDOí¦û�¥ÞÇp¿ Rv€K(Œ"“ö¼1¥_‡á2<ûEŒKpÃÊ0²YQ<¤äðŸêxˆÆCe"L8'…P +,�0}dØPU¶Rƒ™a.ôë>gÿ'EŽg L0HévÜ8û¯¡G)”KÑ‚‰âæ+FJÜîbÛ¸>‘ �˜Ë7s‰ÿBÅwÀbuöÕ½¸/:¾:þäëâ2øû( ô²Žþn$a±Ž�ú/­rÃ̳ât/W¨±PØ¿â.‰Ð#eo°}ýÆÊ*pí•Ø?Àù†ú<±ô˜ÇTO»ƒu¡Ò`ÿä“êå¢2WÓw;[½Aɤߦ,ú5nðFLfÖ³Úɺ`¬O‰Ýí+£Îv#‡T•„Ìi¾Î�„©@/Êyj“èyd8uõ`-Sàe]Wòd.Ð@‚L*ÍÎG,Ù‹#u²ÂªîÒ¯žf&C%¦°d;SÙÌP_肃˜-l®u¦�Ë‹Ú:ÇŸ=ÕQä ›«å ùÃýõ.NØK![@ºúk'. _9² +S3�§(d +ÆxuIؽoi›�Lˆfúâ½´æM[�û."è¨5Ñ…d"µÍ›×óþ›wŸ•+zÚZΜb;ÏõMzh¾ZƒkmÑãõÛ”3†%m�]Æ€©sóßÈȨ® ôHYR +yŠ) wáqaG9•²{×SJCwô©Ý¼Óõà2}öÔØä¯s÷ŒuHù"¬ÍÒtåb!ðŒÝrœõ.iú!øÈô%Ñ-×üv#ÞŽ3ÿ¦â” ¦''>S ÈÒÿÐ,¼ëË'N1*ÒWcïvL¶}R1)H.¥ñgîdÜÞðî’8‘:ÑÔdèóÙ€õL´×Ul¦ÕAS#dv x„Éš$¦�ö‰M¶  ¹¸P"XThÒñ�„MÈ`Dï9/�Påa�_0K4µéhצáð\oÖ•I]ý7" ‹‹n³íƒO�P%O¥J˜h‰ÿ?¾^!Ó$Y†ó|¬aºA^uØi˶ <¥�¸KýŽ$Uœ¨óym�Ñ¡;¼troÁ +©ÿ% p'§"é+Œd�s{é² :wÍÐúÛ\ýÁçá|Ó þÒ ã_”DÊ2M+X�5 °è,30œá»ñž€…+�ï#!6¬ý²?Ò?_œÜ2¿ïÚm­å•Û_ÆŸí |™tIL×:9¦³uV„öÂ^§ÿ=äÿ5/å�"üÌÔ¸$˜p“9*õÞn`ÀÕìÞí›�æDÿhÝ÷?pgøÈe`O.¤OIX ²›÷4‡�£4Âl›öî•KW…P÷5ÔõÐj¯Cƒ€}£DpZùyÿNú_á‡íæì„Š™à£¶>ß/­rfÅóžr`]ô[34âÐC÷®çÌnµé«í!‰ED¨þÊZ�ÐgÃe+HE·6�ç š®T9èöC†f�Ñž(öÉ:ðØt<ÙÞ5¥Íõx·F#˜ùþ +™-Õ#G€¨ñíñî°IRç,B‡Ê>ÞîM¡bꃢâRãÄX&fëÐGMÃêã|^YÇÈa­pè2\cÐaª] ¿ÿ&‡6ŠzLO¬Ô±¦­:éP¤¼ ƒÉbùûËQH ñ{fšñÌ›)øÝOÍüLÒíJ”äeÊk7D¥ûæçõkY'nš×/Ôf›o³ïÛ���äÇU'A¦åÜ¡™ˆj�‹hlò7wÁ +‚Ø‚ªå[PAU¸G‹‰E3o°ÓžMMéƒOZóÛö}Í8>•8XžyŸ¿¹v>‚·¯’Öà„§ÿ…v^:•~tÝÁèiÂj_�¦[•ädâeË¥î¨e*°D Ì¸ÝÛûÓ¡åOyrõ»…׌Š·ú¨C (0¶†ÏˆÀûÂe!—ýœq:ø ±õÍ"»ìŸÆËvˆ{Ùm ¼%>}EG �äÞð1½UD¼b­ð}I‰Ðàˆe9«Ø»$îWƒu5ŠA’Ú›ö÷›Ý#ûQ·äTW¾Ý!M©¸üLeyWj¹ºÆúÕ— fpö8ol]žvŽöÖ”F/ž�ˆ3,/»Úrôô–öêq£­3>ƒ^–ÿrT–LE_ëP\ÖÝw¥$„¯íŽí€˜!QkÄ_`Tž9O=;¥M’ÇtIìÃ)å6WÃîÔ.¡4-„–v�‚‘¾õ(\>ä­°/FÞ´ÍÓËîMBÙýU­ˆCnˆJß­Ëßd E3<œFöwW§½{¸­~¢$îÀ¬‘ÒåèÁIÄ#*U�; + 8óΧÜã (¥QTð�L»á¥VÙO8®6ˆªÒvx©U>WŠ Ì<˜9¸I6WÛf*YißJ4véÉÞ¦lr@À¿K]mƒ¤à’œ¯Ô˜ÝX€«ÙP‰•×A&¥•‡ÊŠ’`#½n+ ¾{?Nð4Kþ|g÷¸S{Ó~8Zº�¢¥mÑÆ�6ÈX"aù÷¤«I[ŠîyùiŒ{”Ê ‚9d%ƒá¶ºQøBšbÅôPùƒd¦ÜPáôŠ ñ/€äˆ×þ¨ÀÝË’ß1mÚã¦Õ* —À:íq›�$• Ú�n gxhôKÄ{ƒ"Ï?-]î!ºßYƒó ÑáŸÅÃq��⇆Çï+£öŽ6œ¼®¢Øã ‹ +üÙó»dÃLÓð�‹ƒõÕÄcÄW©¥³ˆ?Š’1�ã—�ºß�OùW¡ìF'ÿ™Ö¨á=î›ì ñ-WÓ8�ßÓF Î�Ý}ýÅXx-|ìMàÐh_W–”“fqöô–véÇ8§§3Ü„ïìç*`eøqqkqöG�t5)Ý2´ÒÔІl&k8b¯©¨÷¸—{¶¼`âx×jmÐè÷XŸ¼¾@`ÌΞPv;0;¥Cš¨²aå˵Ŀ«*ë÷ ÿpSiJ{ƒä— �…@qÕì#>¶‡™�ý“âU”EisÇàü‚ -íX�+qJ¡§d}ë0f¯�j Žú­êq1Yй!cwL–¢áb÷¹c0ŒÉRœ¨*Dbv²Û””H­_Ó9ùé·Fh›Q”b–�¥xؘ±ä¡ã–Œ`zܳÒVŠɇê–,½Ü’¥Ø9„Ø}˜1Ý×b§ÎlNþ[±A‚2k�;�µCAkÛ‹1è%Àʇ@+ëZHlmb‚pÐêÙ&lÙSh.ð,Ä& †,µŠ¤Yþ‡¾D¼²àñTïq5õ1â>ô¦mG•o²*híqŒ�öõÑã1èÁ¨Õ‰F ¥É—-ëEV×\ˆ)ÊÉŒÖ +ÈUBsБ¥XÐpJQƒÈRÔðëYZíð!�1ªç]\‰ÐÊš1k™ÔA+ñÞa…øhwt§ÓW“¨C–bâåP]C–bL³5d)‚ R)jMÖ�¥˜ÑJÊ ²T˜)Gô'ëÑ KQSN•5¸]¾jѱ¨ÅFž�·òó±¶ ?ÑZì¼tIú¦L”ª®Óâð&ÈÈR4 ÐD­<¥Ø1Óö¸]!Kq1MûõQJ1WÈR܃iŸðØP L»B–âAT• +YŠÝb¶{[جoâgsòpüNú� ÒQÖ±Ñp‡6ë=)³þ*Ç {¥Lâ+JÈ’dcŒ „,ÅÌÕµ€(³ö¸S–1ûG£‘üv“QÅ|8б%Kq ì”[²ÃV U ´d®}ÈrmNNr .ñ€¢õó�v$¤Ñ,¼ ¥ÁR—hÿg“q±WÂÞŽ#Ô'4Nl,,Ý ÖNzC½Dùj]@yg-›ìqŸ¦&½‹f·L29ðÿ¢| ÷¸¶K%Zà ÀÉ6c[( ü0‚%hcÐOhJs�ó¸]9D‚2t+•X�]|0‰]â`;uÆŠ�'`5v6�ó¼»ù–(~Åôµ;0(‰�â8Y~¹Ø-KaàŒ)Un@yþ3�«t÷²¡‹„2c·Ù²á=‰Æ®»X`G° L;8b[^Â<�×-g$ΖkÚ0 +«´!ªA»/$ÈúÔKr�»i6qåq �« Èö»[ö ±ðP“Øø»B áò²€I3â’@Lÿ˜�ÁYàÊíf•Fþ1]¢9çqçq%Ðãj“Øyܨˆ�eåc×+0Cç‘ÍÆ|™…Σãæ +l€ì×Ýöly&dɃÔ7mŒä_‰c%ü;]Bò ƒr¬Û¼ UT 9È=NgPæW'¦Don·cíüVO[çq6WÀå€Ï´/7é[pÕð.V‹Ò´H Î�Å]€È=(�íáªÉg÷¸‚ǎȺ�©( 4¿{Ü8#� ]m?ê ¹þºZ¢ÕãþšÁ¨Õ³ Y:<Ž•"B€ÿ -fÙxy qù<šYˇ +¤X¡6aÓ<›S“`=DÐÓ±ÐÁãý6 ×ÐѱsO¢±[.±ó…ŽØÅ„lè¸%m‹·*ˆ¸¥g·=& +l‡}>Èe¬„âo«rõ#' œ§Å=î{)ÐÏÆ=ŽÅ–'”&˜…*ƒi¿¯Á¬ô8ˆ§!Ñ�ó8�«ÜZeŒÃéÄiÕ Ùþ÷rjÔ˾‘¬ÇñÛBex%”_\?óPEz²åÂ9Ò‘�~¦è¸ÐK0H +¥�,‡T´ú8¼Ç…"#oi� �ó8n¶J±Ó“Ø}*0CWºX`2, Ýx†`ç=8v— 3µáƒî%â¢Ç�òqù¨›óVÙãF$™® O™œ°Ôã6Zö +é–B%9)�hªC�òñ(Ñ~ÍŠtK5&6~—Ít�+¦ïµlü1çÔ¨\N4`@ñ]AaÚÓ7m�#0,Š^xé÷›8Žxõ²»Ã9d¥ÇAj7Æç£î×o‚ÍäqÄ–›H[XoÞ˜ŠŽ×œ˜RîÕTaG +�»@ë^‡7ZYs Y«¡hvX͇n—ï&<‘´àø !ãGyó×RG$ÕÇüG5<¥XŒZ]ZJ(Ùœ“óU™õà· ,›~Ò�Äá~¥Ã¬ +­“…RÞò6‰E_œ­Y{!ÿpRÔ*ïôÛ™ÄB}èâçw+Åã퇸ÆYé¹]éZc½"éÏæ7‹Òªgi¹¿A6Ѫy)×ÈZ�gÑš5 +ŠyÝ*pꨉ¤¾–v¦hÑ(M“ø«KTk‚D).F `ÔjÎeÀ Ý½‘üÚ{}‡,�–¼“N  ÎR«¤Ò"øïC5ù‚v­«Ib¤v6Ñ�H2•©iQ0jË&¥=$kÃËäu64 Œ1.‡è+ P÷h�CcYMvl ÄA“ĹjCh |À–eP*¬ÈZ>Èb‚ΔB+)­MÖ¤HB9‰Æ.ñÂà$»K(3vK:vÛ! ;› áòaWÚ[ÄüÕ>¯”w®±âi„î÷˜EeÉÙdïn&cw&|g7ˆÖ¬ÅZ‰s@Sú€¦t? )Í7·1h6³Ïì3û°šM)@Ú(Ø)­Ùx¨³Ç¡(‡d‡-eœ!¥Ã!¥óÃV-–aËžac³ _––'IôN"“x³Kd_¡�1{¥av‰LĘ]¢mfw_.bÆÜÜí¾Ü‚{h úi!I¶év÷u€Å¬m(¶#¥ m9¯•¦ `,Å Àµ*Þªd,;`Ô­uÙiËFN—�œRM?ê–�œ€�ÓÕÐHPi#6rb)�Ác,}¸? +š¢„ßGZ£ýFãÞ ƒ£ªI¼°pí"1`"Î(�ž AZ55.�YWdç$evÕ¡!tÙ¨}8 Тp¨wct£�Ú([‹/jÁ¨ÕwZ?›•ŠfšG1ÀE4Ó‹‹¤7Ÿèn¥$DSßÓ–ý%³vREÊ“R´äZÎ0¾cIH/àåˆÇpxù,ă?�&ƒ³Ç½ŽˆâÏF+Š×l1Òp ĵR> )]+±%dzmNhmNŽz§V +8›“6‰Bƒ&¢‰h¢]hd�föaK1“ œUC•L ýý¤Œó]¬vb· a|ø˜É|g½ÑãÚ€‚D¯‰På¢DPŠ•‘:â1�öu‘+XWßÔÅjÏ8�A�õ]٠寃s{zÙ]¼)½·Dñ5:ÄG|Ý”¬L‰c�SOvo›Ååc�éò'#üºj›©¶ >[~}|—œ)Wo $\_A²ò0üë+©ÄÊo¬ŽxûJùLû1» »áªáÑZÇë�ÌçJ©Ã>Í%�þN^ÿ�1ÎeŠõ;$dùŽ1”þíëÞÄ]í×Gÿ˜Á²dÁÄ]mÉÉKx�cS%ÿ~V–”C<�ËãÐîT?¾~Gu³v[¦ô�?•€öwÝ�%{âÁ´cqÅ jûÔcÚŸ‰éIùÇl‰æA)ÆÍïž40mƒÇÑ +¦½)…°ÿ)<È'ïdí’�ñƒs|cáïCKÊYÆIÄ7¯Ä1è§D·D;$++¦Î;Ø· °pè(}Kâ®<"qÎ tµkvÄ[‘—Ý/-àÝ_'ñ¯hôu�;¦OÊ/šÇˆ_ÜCƃhJñ=n°!­½³u¼Î’^8Vøƒ‘ÈOŽOV~µgØÚb¶Û#¬Ì¿GPñÏ'Âåmõã²»;Œ, ö˜v;É�˜OIåv{œ-æÂ�iÿšiÚÙ”âÇ_ÿŽ9p€íë¦E{ +ì¯#’ÿˆ‡Œs*S•vÅôñü;º)±r$`§tïh¿›‡Ø*G«ÑVsuâ°r:8€fDâ ¾Óî8¯b§˜Ó&„‘PÉÕ XmàयtXìön•ÿÇãë*IÆî|¶¼`]\2á U^Ø؇»o·Ç ¾ÈmŸŸr™çÂi²vØà5Ñ´Yñ“ׯ~å›bWQ^°v_gãø÷ì¡ãN=ÅÅ Rüï}�Ü gA—_ˆ£«š%w;ÞÛ[ï{:¦mN8¬üvßn†fôõvpJ¹ÇT�(s¥œpB øÄ±jx¸òñ:êaãìq5MSí³ûv«²�a‡œó{f ½v¯1ëë›ýá†݈;Þ’«?ñ"¢x §Ã~`„[3‰;5°,ù†ú¦ífGÃÏZ,ÿ·E˜ÒœÕ«é*‡ -W36÷/ÉÊ?``ÚËœ¤|»ž%å®Tw�°8p�ëPƒKž”ˇ3áå‹"Ã^#$+¯ú•òÞ@ŽNÞÒ† b�-™ùKÊM¹f¸d Ç$öÒcyëfw炉8[«Øq§ò¤äjòòQw›ð¤ÜŸvJØßŠ�¦-�É„°Á ) ›@û»ƒLJW�ø°‰ÿì2¼iCT�+,7˜#fwÍÃÆ™SÛˆ=Ö xÛÁÅÜ’žm�-­*ÅœÒ~³Ù q€¯Ýç&ÄîÏ(B¡ÒÎ’ÎÚ1¼q�ƒÙX—¿½)wk28:ØŸ­¾iÎúà)3G"ŠSF¬ßÃ}Îü×#Š�6FWÇ 18‹µIKÏ8ªDÈ–�ûÐZhܾ?~/DÔpÄÙSóu�ãl)¾ƒ»ÍAøu� +Ö0þœÒÒäÿo0ã¤@û«/œ'�ïì�Ù7ó“X¬å †O ÄÙÚÀ´k ¥ ›éò2G'Ñà¥tb—ÄÝeÊ8,‹Õް -M{qŠŽ"Œ ”T<â^e0m}v%DÜƆõßìͼÇ]â|ɆKãì°Ò'å®ï$îÀH•hUc†ðë¿óˆøÃÛPZTå!ìB.MÄŸ"üGD�â»Kço]¬v õY3¬Oa‰ v‰Äàµ; @®XÕ@\ÎÆ]’ÐqT˪åk2v_PÝå³-GK³�œ).TÊmŠ +üÍ·äêÑ­h~ïpÄÑ—eåU¥*m�‹Õ\ýØ`Øý'�a/ã]FüuX´?úŽqþ¥ßEWÊÕA&¥�ˆ»‡`7ëîdhÃLÒ»*8HöëqÍW<ÍsÁ?í¿™©°C96uÄQY+↧Ϸ…Ò÷C% H€< èˆxf¸_}ñò„a·;Ëá¸ã�C¢ ´¯DË÷8³Q÷¹ ¸Í²ä3ô¤¼@`QÜR«l8»–¹:i‰²à¦y©Ø½Ê í&½Ö˜y/m]dx3‹E—ß:/â0D Î߳ǧ—O™q{$‰Nå¥ +3nŽVRq•–¸Oéj„‹•5Rúļã½:EJñ_™“ôµ �ôÌ䧪EiZLgscsõ=æ�Tìöhßî“dH¹d 7jöwwª»üWC }†Åúº*À±w€o¹:À*Wÿ].¹}¨¿O0³@ŠõuSÕ¦üÛœÜ ¡)íꊉâ˜yÁá⿽à= oüÏ2 ýU4ç[×[Úã·XË£+ÉÊhzœ¬òÜ–a�¾Õ€Zþõ†J[àÀŸöÍà¨Íž� ŒôÈ!¶ÊŒ§]‚äæ$TÚœ†ÝhCÀÊhwñ¶S´;$[¥]¢ÅéÝ•HѶ"öåãuÛƒ³$ñq³÷¯‡0šÌí “ÒÛsKùiaYYäíãrÚr5b!poá°rÜj~gµ×n $¯¶Ë‚s7‚¤w] ÷2O +¸%£«�BÈ£¢ù}ò'<¥‰5_�<ºÊ o‡•Ý„GÄÝ#âŽMˆÝ›“—|&ºBûÎ.[t)�ªB)]ó,J—ˆœÇÏŠô LA¢Y'½QS•öªÃßÜaŠêKq5ª_ï�j�å[@ƒË³´FÃÛfdŤZ”ž¹dpödüÌÇš½=®ƒôQ£õ˜6ķĽXpSl»Å´ÙÁ)å’£;˜¶@1mI{¹+èðïq*¦Àî×!ç3Rruû�|0ù¸è¶¯”·§o÷†m}½Ãq­]¿4#þ‚­½cƒnÄa hÿÈ+ˆs³~ÏpÇå3á+ ©U6 )6|iêh¿Gšß‡Æ ?©UF_�{Üi!IÒÛ^¨DÃêâ’ÅÜðC�í¬ëmxØ?[ž9�< @Ú‘Íf·âV0ÅÕ³%ú�)¤4{q¨ü}íN--”^+Ÿ‰žØ^[•«ÿ†Ø8{ܳ|öìTÞÑ¾Þ +Dê™Ì³l.œc"ÅËqK{ÙÍë1•)â/€ýU…+/�‹±Çò·é¶öWäe·oŒ®† bp.�Pî ©J5œD|t€4#îqŸH ûJãì¬OÁY‹Q|Ê8‰¸¹ÁŒ;)‰›}<¾Î€Å1ƒ„ôI.Š™/œ6b�ÉÐ�wž�ØU ƒ«=Î¥ˆÁ¹É«Í¨#‘…Ø-.buÄ#¡·´Ì(#½†övË‚3�B ½-ÂãÙ Å�¤Ï�›ú3x{*¤ô¡)ýyL‹pÁAòÛg4nDñYVKûTÄàL˜ZzöÐì]¡MZZL¨ê×KŒªÀ!ö8€Ñåý5¥k3Ä×c˜á’ “Ø]‡)öx˜ù@ü¥ÜÕ¢”–¸ºä¼v£²-ÑMÔêáƒÜá_°#)÷8›¡Sy¤w¿»v Î,$}Y“�ûó2)Mxt!W_­ˆC 8 +*0ÃŒ{s + 8íd¸äÅöuÈ)TÚ4Édí~�®ö8ð Q|�0`Pvt�»ðà2» +J{_Bi-3˜öâ*𢠅—_  ¾ª‹K¦}NÒ•ÍÕ±Òèò-_`7Hš.Ÿ’[ÂbÚéf³[«‚R„žaG�ÏàH ï—$T¢zRÞ¾. Ò_ãˆk¾³Ý¯Cá·Ã¾ >[>bã Ÿ]凡â?«IÄ=Î=qø+óõ8 Äʧ‡�¨,ü×2È=·t—Î Õß]¥ÙŒÌ’5dgõ)Í×M/‡Ê×udåÆZ7XÀ°;õ”XÙãÚNi¿r\]„Æ ò滑ãj¯j¤tËÒŒøÅÅúº`³^�K^Ä[ˆœýIUÚ/Yg¢-4qÄÁVÑ=ÈÍ.üýá�àìm2¼]Öï› çN¢x™ÂÅÿ¡í-¡·uõw�{ÙDÛ®™)?#üð [­Ý¼þ™˜ÎŠuùÉ'ÂøO+¼|ÈZ`÷ŒŒÄù•xL;vQ%šå‚Zž py0!‰ fìæßIG0)íºg÷^"»k5ÓD«–BJ³&�‰Ž%_Ä×E(Âmè þ¦È+šß=î<ã¯k‚ª‚zÀ~%›.k�Z>Ί™­+çA‡ÆîW=�œ ú½Ä”Xyq³•bKj¤4ÊèBN0Xÿ°¥´Ù ¸ÚO +ì¦aØ8Û:…i{œª P´  øÑ\5¼Æ°ð8¾Þb8¬ÙÆð¼¡¶4nx«¯wÜ2¨å)ŽÈÌ;Ö»�1Î…4eý¡±ò¸T_œ=à°²âf+ňÙ}=UY¿'P ì>T\k?T:ØoqÂK.ÓvS¬¯Ç+êÀª€µo´[œ�}ÉÆM6dì6×’•ÑZ(¥ÿ�‡›@KßN�‰þ�hÜf£äjÉHÿó%ã<1±¾Þ¡B¥Ýi¤Vù‹pÎ/3å7ƒÅZ¾ò"Äîrd–ìqW£áYÔAzØ‹St@Êàê‹ìµú­Åfؼì†HW‡ßlÕß„.~ቊGêˆÃ +Ñþ³og +ØÂÀrFÜãdUi Š«ÍS#¥uÀ@Dyà«]Èm–%‡ŽÒï2 Dì° éižEéðrãU¾`ÂÁ´½‚tõæH{õ¸Ç¡Ýà˜àßù«Í|») ³åk7œ]$ÓDGô+å´&c·Ç! 8wCÄ´ÕÍ[ÚÞßÊP¢=l�0¾3}œ9@gí’“Âåkqë×mhmaÝPXÝÙìVŒ·RtÕÇï?¡~ýÑÀ”²¶!y�ü7HW'HnŠ¿ÖqÒýánU¨D«‹i7�Ê]Õ1è' ˜‚R$;X ijøŽ[Òö/I¡q_Tßî_¶ù�2{œ±œlltúSC¢Ñ�rÇ)óûGYVnÍN³˜=. +šëðë‰ÎXŠ#‹-EÄ)E‚ìòŠv»MúøVZýNp[ý·ø}àÍØ3„=yW-_ˆ_"~ždì!lx Q“¬a0YÈ_L†ñf­’ò8„SZàúÕ¯YØ8oÚ²ƒô®ÈNiˆÊL9½ñ÷bYù´x´det¥¸ÚPÀ°»ôRñ%”>=†”3%”–ijǦ|öÔ =)_em&m‰~D(n¸ø¨{–Y¼2_'8@SÜìwÒe@:â6X©t�Ò¯w×+q´Ö不�j¼<Ò)ÚMy[±Ö&k˜"ÌÙÒ¾>€¤Ýx=îˬ®6 ƒ..¾Kêßã&'ÏêÛ2‰¾A:ðw…¦M[•«ß‰#Kö*ªD³•@+ä„–«Cö$Ñå³Y`Ä%‚ÿ-HIÜ��‚3€€qv‹$”ÈÄ‚™²&xt&VC7ÈT"Øn2kG¶v +�ÿ€Æ_KV6!FÛ©Ü 0Í·ž1=%x�C06”VC¿Ùý‰V_¶(¥¸ñ°ŒRv!Kq„©˜6ê)(màìè¡ã>-$+gS,?êö¸sݰ¬|È@<,?ê–˜g_@<ÆðÑã +�J‹[ÖcXðtÆÛ¶ þ7 g1`{º¸ÇÍ`¥ËÃ�×=Gþ³•c«a +íÚ,Jø�s†æš¶  gž…Á{w^oi>ʯ‡ªÝ—ÇñScÜ¥ýÛ&D)Ý=tÜ^A²ò¹)H��0=n� SŠ cö/¹Ý·{í/�ëcÐÅ–,EIœ±œK†¨Æ=rN€Â/D5æ„§·¯#BWS¤ƒ##t1LÕ 90â£&Ȳյ¶ôÛ¾RÞ„Ømz¥i4œÓ0’r˧#v‰ÿDøbFryd§uã«¢”(~§öítÁE÷£nD�¯™`A‹³§�ˆCj•”gBä^öñk!¥ñGcܰ ¥6Æ ï&µnÖ×O ‡•{ëa°l—— É.diƒŒ2kgâ#^È—8ô8ˆIŠåUIL0Ü8juÇŠÖŽ wŒ#D$”æÔPÉÕ¢W�h/¦V™ñˆ€ÜÓÄ‚ë!EcdþÙg1«HЩ{·B`K¯¯fëGB­X +AÑ��ü:d-¡ôI¤t¬üR.ƒÄàLQ¿{ƒo·ˆòž; tÌúu=‚øºCñuhÁâqž ’­i“idÖ”ÑC徦÷ö0fãøë¡ã‡ÛQH­ò¹r\½!ªq—ˆÔ*—ÖÕ÷9d%ùè__#-q_Bi„ Ãn–ô–v )¡t>…Ø1¼D¼PaK‘S°y§ ÉÅŒdvš¿¸).Dˆ' Óž}ØRD”¤Íx+ O_ �{Üz’±Ûà¡ãfe%VͼÙã–ô“× Aù F­. ʬ!�J�+ÇÕ’Ó[ÚMDiC•ØRûã÷óŽûKÂÚBàllÄ ª`Ôr(/wVâ”"g¤Ý»ˆ1¿ +[ŠZ³7œ¬AÇG‘Ú�îqµ‚!pÖNú�J.Rv�9>ÌGLâ0ádMÎ.p®}+ÊÖ0)-ð{¿v³°Ê’ ý]íS¶%Ú¦àñ7Ä'Ëß N*¥]¬';ð>ZV{J»®þw6X”~Ulœm.­´W*×D§È&PËj.DLŒÞ” ”R}©Øý°`ØŠg1| žG­Foœ–±è‹³‡ +2Z‰Ì&"KqDMÚð%⤩þŽv7ßJ—ÒÕú['-W›¡=n�sx:¦}n+››‚D/|¤deOx¹ªcÐbcÐpÄm7EE Bà ßqZ«UЙֆ =Ã.O �¯åGÝDY¾&�Û\Ñ äh{ç,cùìçÛ·Gs±ß—„\–5œR c�i›Þ†ÒDZNš|9@ADBéMþpÇ(gþI„_÷8˜0+í4ìŸMäS«\yœDŠ¿ž’TžFJ(í×–¸œ‚-kY$@ÚcÐ5âMit³›ìÓ.C†”' $¸"ŒÛã£Vƒ–Â+óõ†ÂÊ„ñ'pdÖ<5d*ä·ìB–#gsrQDBi!²53RÖ³sjœd/ý ÝakàßIŸâˆ-Eˆ,Å¢„ÒzSÊÝ¥ò3è*ÿn"ž@¾N1�|]Ç$I5N£ Z›¬‚…ë (…U�.â¦f^żìQ¯Õ‡MBNy°,9‚L{¶Z´»;.o‰ÀNœL½¤ÃÒHiEÍ–ùÄ”†BÏÉ/¯!Þ.MéC¤“òT[åEEóõñ;aíÛŠGíÛ�SÁLK�’Fk!÷ •¿² Feá‚'ê£îÌH»¿‰vø'rÎ YY 3ú]Di0~eÕTûäÜ´Zëx=´,.ù¦Ž~/'…”6ݱ‚v&zÂÇÍa[±KjiÃ^6΄š^í­uµÇ±<¢ø‚[Œâ=B¥aŠä;³@DÙÁûjH4G!€}ØìTÞ}ÛïñfEqW´? IÁùc�¤ˆÓF)–ì´8ü¾DÅ[¾ ïØ²î#K¾õˆi§g<â¡�#ö>òØH·t?bÞɲG5ð褤íZ{ÕCÕ�Fò=ÎÐN6ð¸9‰Æz +£ÐHé–,E™à L¥ÈoŸY VªµJ´•ÇÍP¥�¬Tº¬2„îSãA'pëh7XgkÕVT÷™•8§o­ÍǶêÐJ”NŒËt®Ídž‚]8nõ‹ƒÐ8]Œ2CÍAˆ¢”¢`3Q>+¶=nóñ8Ðæ³ù<5D×ÝøÍ{8'�¦Ôë6í´Ø.O_ÅR§¢â!A£yÜ 1 +�:(¸¥Nó„°@M²†'&‡èqûÆ[Eo¥1 +YbPKJÀóõQ0ˆEHûÃ!£îá…«¯s(hZÁ–õì2–¢Î‡ò£n±KÑP~ÔÍãñ‚h¿Vp«Lª^%,—w>A Sã4šÍ‚XÆOäb>h4Äã2@é€ 9[ÈOE +Îÿcœ�5„#ž[…VÚ·õuñµ{,÷jdpõ �Áù›´t +@ûýöUv,·|vç<Ó^%]å_ +ÆY}[¡ÿŒ!�‹ ¯ƒ2Šÿ ŧÀËc‰Å´¿ª ÑcÐ߇ǴSUýú$áñÈDñccµorÄ[‘µ·D%P|L*ãìq–Øäm­#âf#¶ÊŸ$+m0°Sº © +œóQ¬a‚ÿåßàßÙÚ”S0±¿‡´å#k Î FóuH÷¸º³ÊÞ”vL +ã¿ï¤Om9‡1aýlÔðéæ…³÷[_‡­%q‡¥Ư<Ö&qDl®UA)²5»Ui‹)j•ÑD8â¾ b§$" —”¢†—u§”§´´?Í’©�ˆNÿ Yió€tÄ#*+ó4E�+„*)g»ú»%FXm¸r¶|,¢²äA#¯¶ÇA&WW²‹ÿØ%!ý×aB¥­ª ¦m0¥è†3v›²äzÅêÞo·€~xÓV�\�nd¥í²ÊÕŸ¥TpŽEuo¡YY¡UCiCaåKÜ©Üã`£Uì×öuwœÉ¼‹t›h¸øýv“Á9oìË$—ç�¤Ê l ¤nF!¶Ê ëë4aÚ¯‡eeØì#.!|\žVrAÞ† +ðâ�@Š_!18ëB ãkÁˆŽŽË�·IVƤÀKãì2ƒñwj�ˆßÌŠ¿¬rõ×pdÉ”iï7Ez7¬zL›Óãn7%+OâxÄ=¿õ{\VÖnv³q·V›«g/gpÉ…JÄ?²CRÁ_ï2xÄ[R‰•ÛXñ …Ç¿(fþóK•« |ö›ùP9K¤ÜFJ\²%¿+ðÏ ?h÷{¢°r¬zLÛàífW+W$�‘ÇYbü]Ég¢1îÉògžŠôíáƒwD%P|ì‚óÖ%±«­&=À°2áòˆö èwÉ›,£øYë“ò›fE±bK§1‘ŸÐ ´öþÐÇï›Õ]¾ÇI°gÍ/å2— ΂@*ÑOcܯ‹äÐÀ¸. ŸÜ6{Ï‚8Ï2û|í†ji{œaõZ}Ô“:’سG¡'åš±ïÂC1ó4 ií笄ð�C Îù€`ýø«¼VAˆ=L„¢”Nk&¯›»ÂúCéˆýô‚8W¢†wÙ8«Ïž ®¬ÿÀ]Åöð¦íqºUñ°e¤÷8ÐàhøIJÀ¿t#Þ-Dû«>gØ�Ìü,°v ã•r…a5n áäÝ)Ý)âL+iÒKH3Ò{\Œ@{÷ &P<¾D\²¡Ä ·1Ýô²’Ç +|½SrÄŸ¢E)ý5°oK¡ ßGWÏ62KD)ý©&bW#$+ï§!oaÜ~EÙªcÍr@ýúl y7DÕñºí-㬙,VÛ?âßaÏFì,�@æRX_OO2vLA)§úõ´÷OA)¾�ËæÊnØ7ƒ3¡V[û«_/7²ÒfU-Jk¶µÿC€C�¬¡w$ÐD—GÃë¶;Ñ)Úãf؉§›†D×Ýï-WÎhùDÐ�?ôP´ß½nøŽ/¿ã”qèjϲ–—Õ\"îq`W`;Aæ&˜”FQ+£²’à0z÷Eò¹8y|½Öú Ö…_wi˜�%ßþ?²ñÒ+ó­2»ÙÐbÚ êq™Dì…l¨øÖ*pV³,y•…J[ÖB¥üÜÈJ{€>¾ÎY½Üû*±²ª +Õ8 �{ÜŒB ½Qü»®µ{�Œ?e¦ià�×à ²|†Æ 'ЗÜð~¡!KÖŒ2Š—ðP„Ë)X”Þ`ü›; fzRŽ®›Ýé   +X{,y�ÜfãܹR¤¿½Ö‡ ¾ÕX�^Vµ|ùyÌÆ½¾ )÷¸Ô�qN2)Mi»�{ܦ°ö€‰3 �)Þ¥G{¿^ðÞ±V¹úØÁúæ&a3� +ÝvG-cœs¨‘Òéæ-mCÆÙã& È]IüõÒ“Ày0Ê(þ•<^o;‡D³8aÌÐ`ÌÆý˜¼¥ÝF4nÊúi¨�Ò¶Î3W“þ¥Xß½Œ_¥g˧ ‰ö35fð8™ŒÝÿeH¹&¡ã>Ooi§žÎPüY¶¸:Ë,9¢9)¾�Ù)m†¦ ƒAû_buÜ2k+]´¯ûFKÜldŒóÞ”\í9Qñ0Ù-@^„Øa�AÂY'åîëW? jÞýB)ã¤�Ò²®cœý-ŸÝTµ"žnÈ8sP'Å÷8ÐQ<ª€3ÚÕß/ê†õ¿jÐî³óx½­L[f1ŒX¿¥HÑh~?UmÊÅXRZ,ß‹¸«íaà<@û×e¢éò÷_-È]±¥áŽæwš©´)(­®dœ ¯Ý¿Ù½¢©R‘ZeøŒ¿‰´Ä�oX þµÎ# +nÛ=n?:êˆG^ªÏ»ž*Uin¶WCð8� '‹Õ>«í*¿”»*6ÎfHUÚ‘K‡ýÆÚ·gý.†>Š!_gq™…îĬ_'pE÷U»ÊÏËn³AAióõ‚ŽÇ­áÿá¸Ñ¾¾AWéò0�¢W‰æë¶}}p+!ü-¤²ä•àY ÅÕm+¡xMéÑðÛûT¤<Ó|¦�ư‰nM)Ò£(çËFDúŒë3lS<=Éʰÿn²F_?Q +J#¦R0Ñ~�œ•+&(»S†Å´WDâ•&¸ÃãþƬ¯3¼Æ W*]ÈÕAšÒ�“cÄ{deWL[õ`Ø‚ØR$w#òÛ¬TŠ �)±2O¦ý°Æm6ÚnÄÝGø;¸†Þ”NèC»_FòE›ñï±ÒF >åhŽHé×KQÀʉnI¹ÁK‘Òv*÷òòu‚Ecv]°e=ËÈP‰Fe&Gœšßž‚Ò‡ÆÕZýîý>ù.ÿ(°(M›¨,Y ÷Jõ˜v­‘²¾àà™¶åˆ_ ÷!È‘–«=®&¢�;.W¿ò¸&EY”~Ýdp.PnüÇ2š”ŽÏžÒ \ñQ‹v —YÈ�µ-ÑÈ·¸*+Ÿ¤†«:]§u+”îÆ­ÁrÀú: ãCšæàƒª¼ó0&)`¼H[ÝÀ7^¨´QA§ßI¿£ßQFøu˜a9JB%ZÃnk)îŒÇÉPFæ£n[4Åþðlß4Eû5â�—©@ ã>µ"¾?ÐÙÄ+嬄ö{Cd]~Ðnˆõ;ú2¤|1ŽPƒ£V£ +J«‘Çérö-Y¹=ÙÜŪâ(C�xB;x\Î ,zœ„yü*HôkÇàìq„4¥xÛS:æÕn-Ho!Eø‡p±Wì®¶H°½›¶¢LD—»æ—ò6ƒs!`Eq ‹ö»ÇúÚ- +Fã~%'�·Ý ÎØËxôìB™`ØHoü» +#L¤|=ØŽa‰]N0ìn¹0ª‰ØÝ[Mµg·¨0œ �Qw �ôŽÛ4ä³§ ++«!Öðq2T€Üѱ�üPÁ ÎGÝ +o‚ü@R•öÃããƒ40mÂyK›BpHôǨJû �h~/=ªÿ­ˆë¯AJ¿.à<ýN:¹y"R'A³€( –-YY å•„o¢Ã¥i?ŽQ«P`̾nSÊ€{œ(ò\ÞCÕ¯ì�›á8`Š8,”¸dÔ—Pºàî³�6JÜa +ã X_b8ÄÙ’VÖ®VPmzTìnC�×ùáT|–—6öõ¦4E=]Ë8‡Eì3Ñä¿M OP¼Ç=>á, SºjÞ-�ÝtÌ¢*íÁl�ò—Kg°Â~L3Y{À�Þ ’/O±Æ †Hï7(»'—ŽØž�Øi›P�»¢Á%S4ñ×ÉÌgÂ7b6kçü¡LT¼ÇÙ¦Ë.~õÇŽÒÒ©ƒe\ÒOF?å´CÅå¿¥ÀnI÷qîži�ö]×Xñ`#¥ø‚Ná¹õ……qq±›€±nPk'-½Æ*Š˜+d¦º9TØ:ùâÑ R„hêyVLìZ{+ÈC4uPÒh—[(Ã#]�iFµ`ØM˜6g¼Dü{ )÷'f�šè{ÔD^�1;bËJ»ËT¥- G�# ‡•@³I&‡GVŠœ +)�ÊPc܈4Å5á1m¢„B=˜qs. +�öCÅU®Oï¸7ŽD£qs3¹f¤Îü·ë¶–£«tà·^"îi´¯CH†”›ƒˆˆëâiŒ›D¨ØÍZ8¬¼bX«‘ù¨y+W*w;aYùá5j�Zã0F*é¤ Ñ‡Õã ÒÕå[Bér¤ŽøÜ³ÍÉ ³<�®î†670)�¾¥^ í �ÏL�Ûã2Ì#G\Vs´4€£uù +é`}xàEÜöÍàؾݴÙäϺ:´¡t@²xfÿ¥.)�!RpF Ý×mëÓ.¯Höë-Ș¢\0޽g¨“ôî(jxŠ)ð;-²d�µ·‰7ø·gr±Ïb±wºÿ”8þzdôŠï¾dpŽ�¢ã þ93"b–ß)FïŽÛÈc‡ÿ®ÿ8Á¢t-‚3EgRÚã,X„g2,ü1Óê{\…r²|"Ú¿–}œ;…Ç´an—hµ–hwøð2>ì’Q-XÊÛê€2ÒWX›w§Ýƒ<ð"PÜVëx½EÄ9¼&ú½V[•{û3Žxt¾§-ûÏlí¤Šh¦�ZÖ§$š© +‚G'ªVL¿–ÊÚÓØN�ÚA€ãÝthjÅV¬ihË>P0i4�CQ¢6T€Üã>Á·ûà°`ØíqÇï‡Æ  �rÑÀ˜]Q(ý†(¬Ì˜ � ¥"öü�\2ÄÙ½¡ ¯~Œ� F{¿Ê/哇¢Ý§bŒ1ƒZúá‡6RÚÒ¤tM3Y;AÑý.©,¹í<ÓFOõ÷ÀDìØ¢øœõ~D.…(AZc™ÅHíª7áÙ@܇0ì.; iKtùî&Õ ³w?hwçbKqÝžlŒ£Ç…|ÌòWíñ–˜‚³¥a|ĵ8{CÑBé×üRN¹¡ P Ø:'3Ò hc,gœð¸ÎÕ‰Ñãá××îäuó¯$+›�ZìZœ=b8yœacS³ðøÇVißD¦Àn˜0ƒ3&4Y{À°ü/iéO$&�^#íÝÀYB®0^U€¤Ouq�£¸ðïx¤†o7œ˜mÖHW4à"Ò©`˧ì·B�J´zâ°rêvxn)dnŠ‹O€´é¨v[KQQ +�¶Í±ƒNÖÞq8hмµºa逜AJ?PHvÙ"Æì�qöRbw(ƒüpÛ( ³“ƒ; ":äm‰›Àb8¬Ü†:͈¯ŠâÐt7ôLÛ‡ž”OÎnÔKÒv¨à¯“™�º!*®rçž ”ñW!V^ƒ¾&,`„`9Ä - ÷8ÈÈ#èjˆªÒ¡Â–bxSÝÿb�çÄX_gušw£È�’¸%™�%¿®Ñåo‡ +ÿ²Ë5aŒ¾>Pt*Ï�Doeðï>Î:�®v-Œ[•™¦]PÌÆ­á´j(}h¿ö룥óJ(}!;.?ÈHŸY”v7eœ ´?ðôÌÏ>——ÅZWBIã0y+·4faZ}u�þFÃ4|Œòñz«Ú)݉ ÿ-*ð «ÔdüÌßú ä°×[ZâYQ¼{²~Oi^8ß´Xz4<ŸäÆ{\(›´t-âLðLÖΚ -3üGøÃ’På)›´J±ó8tåcw‘ÍÆ®m•b×1‰ÆÐ— �z0‰Ý¥CëÁ±X9IýZK:v›€ÕØ™é ãœDc»�C™±;U>vÖêcÙÀcg1/†F«;÷`»ÿ†Ñ"t%B6t.!ºsåc·Y¤ƒÎãàE:� C +X�]á;B6t�Ì;8 »Ì»Zìú7t”•�ݨˆÝä`»Ó÷È>Ù§ûv‹™ÍÉÏPËÕÜÓ1íÐ9Ýf¤=n QÇíq/Lz0ô9pÕDzwÍBÆ™D@>éh~'´äMéYyÝðÌGÝ)AaÚYû1fOXÌÖãTÍï0!"â�aüN:DI’µl�66Ƹ!µÊ 9–bÄcs¦ýèÚŽøß’UÃdÂK:Ë’;q}gwG/ã‹âë�ASí !пHᬟÐ~W%'éQB÷{{bã|€¤Ÿ²X5|ëzl^¥DAî�tܧg³ÛЪ> »ÿÉ�ò-M1ˆØýO˜”N”�‘•YÂIôªñˆ{é~'­ÖTì^ %W“3&H‡)r +6•�Ûl�¬,.>ꌷRll NúŽ("yŒ8#Ò÷"áöªO^78h +Ž8ŠªÒ>©UÖ�¯ õ÷G„Œ{ïFÜOÞÒÎÐY~íDì–ÌV­Ùªå5]íÛ‚Á=nf¤¬ È}wòz×SÊ!{dåû½b­«ãNiÛFfÉ•ÔËx†e§tjèT.•«?¹½1%+{ÜþßI+^^CÀ£‰‰¬ìþ�º.öT�h„uõ€¡ˆ³Ç…%¯â¿:¢q@ûgQdýT€ý$`^'1, ]{0‰÷8ͦb}Ý¡h‰;-;͈?±UfO¤ïˆx‚¦¨p¸¶ÍÉ‘›×=4EÒ¶9¹z€¸úGXV.�cc£À-pã<<˜qË.#Ô†\"\Ó4üyÁÙ@ýÞQxüÍ�)â¢lEq×C3x\aÓ}ðŽM¬¯¿°[€~_¿ú72çIä¯v›z,ÿÅIQühÓ4|§{\ +ÀÕÓàðÀÖNj¹¬�ô„zœÇíq�Tô¸ÂåûL»K‘>r\2ÔùÒ¸²ä‹½‰‹©,|ê•ôÁ‚Yd™fÞš�€÷'u9 +¢·�ÊBCž9B†z~9µv¨µ6FUmî5¢`�×ê‹1’Z�lü–»Vü.¦Âe!uUÚÅé^¼òãß1ZçÔ`�Ê«¹á®Ÿ�w±B؇ dã¼ä Â¢‘xÎ×U�GðJ‘Ï +!ž;À«+=˜ì žâ!Ur°bð@ðˆõ½;Ôl^!C_Ê¥Zý�¤¯´'¿“ÝCB{:ø‚ïS¶¸H£9…§¨Z’|uRI<³6J–¹g'ÀÕ彪-ð[§-Ÿ[jw!DŽM›€º‘ˆï(Œ�gä‘­Œ=�k=Ò�æ¡€ž'�_îÇ¥�ÜŸPaÁʳ!\ÙÖÕ†¼¹ÌVa÷äø¦ s.—€¤±ÞåX¥¢¦ñбHq&ß ¤ü°)ýüoVï‚ ¨Š}fÇ{’%*„›ÄV£+�¨ÈP�2kyhßù@-bÚGï92ŠÆ1®”Bôº�ú¥Ôë'¸Ë*Íý)Ì*�þQ=¤ô5ñ%Ï.ht)­�Ú¨ùd„/ØÚ]²AÑ\[*úÐà¾e*~GaáÝŽ:'-"§)x‹(Dç^‚ÏTåÑÁ¤r/­å>Éí9ò ´R²eŸ3µ> HI#âNRö#92 öô.¤vˆZÊGI��õry\Š¡ˆßX|À`dø;óPX4<í^>}ÐbÞpÐ £ÒŸj�8ôŒÉ-.aØ·,†‚r�XƒNÚ]à‚R¡­Å±<Ž¢öÏä-è šÚWÀÙPEZÜ<_/Ùñ^ qôWF™4Í»è†i×,!‘ýŠžÅ Â¢…¤ ÈÐê+]\< cÕUOà9ÇØ#û�€JoJ©7.6ëÓžŸÍóÆ¥7õÊø(Edî§XH…Ã!²‘0ú$¤©"ZTvô9õ,¸÷n“À¨N„6– L*]È&¢Èi:?'g¤º’1kÌ%EL¼´Ú`ˆ¸åeiºmY ±%w"·¬8÷°1—ZªŸij!7ª•&% Â3Yõ$òÁ�½%%Æ/–ñ¶Á‘(¡)ež™9´âä�Sã�S4¿Ëž¯¥Âyý“ÓEØü.<�þÎÊc�(QŠ£‰?C8¬$—AV 01±ðò{Krè'¸F�€ª*E]mçÇ܇f³e‚ó0±X/Ü/N U¹�<Â9/Ñ…z.U ú)çs!NI[÷§ì†®èÞ�_=º%è<@ŒO™!°êØ%—×Åx�M#£Lí�E&24‚x¹DGéÿK°õu ’$½¥+0w\‚›O®,î¼þ2· +˜1�bÞ̇Œ&©øÑo««Ô·8Itã=¯x¤'¹R.±2¡fãŒIsCb CÝ÷ËÔ8TkÎ\ªôPÿ„wâ©e�’9ê+¡óáá¼ZŠO¾»ËP}‚Zð̺ok•ò‚l#Ó£ºG3šŸa†v­@"ÞR£%k5 åCoν8üD®ŽT(ü$ø½ÃT‡ª¨Öîh€S-íú¼Ögº5]4³™rŠC.Ùf¬® y7ƒê½H¦¾Èâó²ñíY·hÂ\H¡ õ†èÅPÀ Aô±áf^ +A�ÎÚ�X éÒÂÓ +™§‡¹úÝ Šÿm¿i# ìA�Û¬„G•“\úÜCÙcüðÕìH$ÇÚ}A}:DSw T…‰©‚“»æH+ +� ¯F�|Eí¥3ùS�¨})•C|†öW SDPuÅ›õ¥òˆl²³ÄNFr,B¥•Mzª´Öú]Û•:ƒ˜³gÁÏUçM¦„t�{pÒPéH@a¡;‹iò±‹ª– 5¶?ÆÌdScÐe -] `Ÿý^°�Ä&q­ô }Íâ:ŽØ‘ý†¼•ÕE˜ƒûqßQWòÔx7 sÐÉÙ6â~x¬°‘ C©E «™ I Q¥¨̉ñ‰0‹}1Øûc D#q½‘ÛǤ<½OÒ¬Júšœæ¾†õTĹˆN+gJH±BÕ Á9ŽœŸã/Hµ‡ �Úía¦ ¬&M#^ûìží¤È‚.�Ñ4ªÍ8k+‰ïcÄ`ЉIÇÅ-1šØ=l' ± ¿ÒQ‡Q…øUÐtPÎôÜFnD÷æs0ºÐ�%o�9C7¶>d¸ÌÕ᜕®À#vÙ•·/ÓîF‰}ŒM¾L6͉ÈE)(:â)³©(f ‘”§[¯˜ä.þvòéfµ“‘l�gÐÎøsœ9”Sæ|‰Ë;e‡…ªõÞ½û¶ýým +!üΚyᎋoC_þ_8áôknÙˆÔ¶úö®Œwud,Âa’�¯¥b{#À¡ƒ’›+LrÀp|ìžM Â(áxÇ{ìN7op Ü3×^P#EÚMÖ `xué#O(¶ÈmRÿ³´óe#�½_,Â�•H<;¢©õ�KKI)¦EøjÐÁ§®/«¡¥ø.ã»ÅykD‚ ÌäÎ6¶Ä¬ÄÕT1Mh€ÌµºâÈÊÎ]\XÏ µæ<¼·ÒÀuú¥îE¸Cãá?ªÜÇ8kae§‹Î›úœn{s*i>l�¸ö3ÐÏí7ƒ ©«´ä§•AÈ»çñön“3ñ[WDv$Cƾeøvoj²�’-iƒ”ü—m—¤�ΜQñià +\õ8E0m®¥l°æ ¡ íAÈù?Ù0lÌZÆ®Yã­]ã}4£ö�7ÉñL]à6†N©vqa)Ç[ÖÎ,/¼½àðj�/؉o;Ìty�G[{ÆÂ'U¦gA¬‰Í|‹ú†0¾ÌÛ,%OÂ:›™½<@<: N +[kå_�é²T4Ë»šã«“vX+UúµÎN{µOÙpfµ´PRÄ«}™]VC{ÖPU™�ìíò¨¡¡ÞxöÍy 3íÑz"É'‡@hhÍý$¼oÞxãô:ZöÐP¢Öû‚q,?vûHÛœ‰óòf¥ H·I}ï»b›BpDq2*ˆC-)FF±o¦£Ë3 õ"u_A‡¦–Òv7ZñÒB:oñ÷Á©ÐæreÜ‚¥”�ÃGÊTCyТâþ]YF5tñõ},nõ$zEEõ0ü;¬`^ *Èð¾éµwÔj—Þ ?óI°¿wö½ø?üDvðH–ç§¡�ÒûÌNã"q?"ë è™ +ÂÀÍ(w×èýO¾öš >±4£$»Áa�’� ‚wOÝŸHM®üI×aŠ$ +¨™8ª q2ÓWõ¨šíê Ì×B{Õe�,ç>x·V•»ûN¥]Q¾I`’ôtNÞxâ~1U¤èÆíc%Ú›õ_Cžç‘$ç#&´=F{<a›-7¿©(ØÙìçï�$ÂSæ•n-Ýãj{âfvGÈÜ?ªuÊ43šu¤vë 9`¼¢.aè+ Ýõ«Aï¶GýZg¯ª#”³NHÛhìZ«ÃžíØ‹¯%7‹šõf¿–Ø‚™hSJÛòÁ0¸Œ½«¸ +e?VÎ\ZÙÎ�†}(†kß TºÚwx@ªB“qbɸÇÔK…W!Œ˜#W]}2Rê*W�íó×x}¿Mìpèu}d²ß YnÌ'V×›Âe‘O-¹p +Z`zU ªáC¢8X€€W29WºĽ¾ÎU7н*$V,'Øí rðĸ)aÛ $+5¬èÅñ3=±ªC�»›#èÈï}Ä£#U@ æ¡nkõ=«;Ttí02D­Xÿ¤šõïK‹²uZòžÀLwW[:ü”lñ»Põë¤µŽØ–Ï�Ä%M—�œ´‡eLš${G]­M¢D Î­5- NŸGT{™T +ô1Èîyžk=~”.O¥êÌ=…éE¥5Sé$I,TÊ&'“Èðb18HQx]]^É^ZÔSâŸî5T Ðt¦406Tßb<ÔÓ Ô�r.XPTXCf23…bQ¢>�BG½ÆµJËg1‚ƒÖQ-»é�Šž�i¾4L’•E 8Vþ:¡9o‹˜ˆ®0"ß.cc)(z¢gBƒPƒWÿü­Š9Õíc³Rü ~ÄÊG@QòzO…qç/tl{mhá4ÒóÔ�"÷ ­@± Õ�FÜͪ‘R°þ´Zé#Di¬o7ávÊ[P*®z�¸k郫z[;QÔ»Ð&¤i6\Ü3ÐÏÚ"è°=9˜½dE_`â8#Ì;pš‰úñƒk9óŽö{ðÜ…�îÞy§ñlÔy弨´›ÚÙ1�,ïh}'¾u¶BÜ’'¸è†lè;�H«’«K³7‘íg¸Ø‹)!ÔîyDgwÃõþW¨þž�ë"ð)N°ûÕ* k¿mUÖjÙCl¸…ùä¿-ÀÿŒz¼²šI˜æ÷ÛÚKt Èʨ­·]=×gf6–£åÏ�›m™n;€1T?è±Û¼IÄvÒò–U(#;çþ¬…õ¶2x^e‰Jöç—°¢g¿F<}ø9�/1›èßW|ø:víÖŒ`õy$g°ÕÃ{žÃÉ¥YèSýÔ zn¦2âŠÊøïAuÆ™~U®?+“%ùÞ7ÚA÷'ÎÛ�Êœúö3doùŸQHécØ›#{â*½ôy{ ¶LöêÿLÊð@*úsØæ?“ƒ"�œEú+;uÎ�ù€Y@?(4ä|6�(ê‘D5qÈÓÞ§QŒÍhä˜6~˜�ÉM^|ÊœÏÖ ?zAÔ—èTÚƒ*dóÝÊq*¾ê•ݪ<_¶�vªIbüÝH_åf J; šª~¬¬Þ±Yd«êÙ¬£^‘ÂråjCʦ€Æp¼è($lPšªÿ¬Þ`?™ÍÒR57º³G¹Œÿ`e¹^È—ìö +b1˜‘TCɤbð)½ê—/£#…�OÁ>¶Jý œa0�²N=rxá€gT´�Vb‡?^ñw{|>o¼  P®Sâ©Xººp Ó™MÔ�È~|� +êêXäÐE?»]IØ-ßMÔû¼ã]? +9¥j¸üEú^z@ýGA�Äï•Ðé“XÚJ¦·1&Ï t?óe¿mlîíé¯dL4E׫†Áø \Ükµ÷û^ªRs×§·ó�óƒºùGEc¿8Ñ6›VàëÜŽC*ÄÈrkÈKÑ9©R¹åÀ +%»i›âuN �êòîH´¢¼�†�ÿÃ{ÃZÕiex¢í3UœcUÎß “[èñ!ŠØF²±¤Dö\ûö,y0¸ˆ³žøàF•´€4vÒ ÿ+Y4>öMôŠê‘ÆNzêð?A„TŠ×¼9M aµqs<Êu‘˜@BÑ­F2” çïTwâBéWÔ;�!ÿÏ0Ÿ›PjÃÀø`Ä0QŽ÷=I'�îJzª‰\ìÔñßZõ<Ðy’DùLl¢Î‘»öàÉ:H#’�Ø;¤©Ïì*G®i0ù«E˜f"Â%ØNVŸÿe»C¤5Z¯Ç'ï-LuV„:Elèoÿà– 7é_&té«o"³ìWÿKŸ·)»—>¬'ý5Kÿßk’¾¥P¡ì.½ä½ká-I�·¢SphÅOÁóáÒØê¸'”Ï3ûIöÒÈ{¡_=iK3cpΩ·@SõbvÜLµúu’V@U/Ý^Ý�z + 4,Wý7"NL}O@ï iOÉFÕ¨zù¹Û]Ÿ¬3ûìõ”WS:­?d—Ìþ x_W‡ìbT9~樶ÇXKnü¤%Y†ýŸ|WƒK=Ñ"Ë#q|ä !<‘[›#Ç/›Ÿü X’¨P8t,!T/ ‚c¥ ÖãÇq¤#=A,‚qù/�ìe°jÑûËÙO9Ú¡(u½Ê~“†+% –Ѐ .T y hÞ¥C],lV±N�ã´KFB&¼îgjš§O1Z¡B…`5¥pw¢—vâm;yF½Ìh�!PH,j9í^Pj•áGð×Ë* uµ@¡>x¸óÉ>¯\ä’pn¦µÊÀ%éÀ‘øÊMªc—êû&¹:¦Å¤rFÓ3ÉØö1“½tž‰ôÛ´¼à=èV�fEø´U}'¡ÈgÞó´@Ü…#WÃg'1˜Lƒ +ç°Œ;RÓ.)˜JoEÏU5î2,øc…S²Ö˜K³G\l Bü¹�ˆxÁ +Xö*tˆ·@k³ áÞ’·g9AV¢ÏN™¨ª­ÀŠwc_G¾mR§×ƒás�C—Ø%ÕAØÛ9Û8^e�ËØ9-Í-º¿®îZw,–»1GéÊö YøÞ„¶ï]‰�Þ¹Tí¿M; 2hã›F�Êik„*O}À�,€=ßç š[2n@”U_åeg_²KCq¹‰±oî�\ ¹E& Ѥ¡Îˆ¾†¸¶Tâv‹ƒ�ïÜ«Ç[`V‹ƒá­MyÇï½Í5“[CMìþi# +ÍÝ §t%·œ—@„ôÿJïŸ[ý¨·Q!�zÆl-!Œ ×òR%;ГÊ@NZÒy¯€Dºl¢È~o¬ƒÄÞJ1åØœÛnÔ뾉<É#è,M3’‡Ö]ž†H¨”ë»Ä$eáL»6�å`É™äAK×ÂrB¨“ô?=ŠåÏa%�[Èþ)7 Æ|´'S&áÌÕ}@æÎUe$HUQOWÝè &&ò�O׿uÄË”­úF�uØ¡™÷ò»æ›�¯b�áÆ¸uXzmD,rüº% +“ÇK3‰‰È6ãBMh>¼¥QPeÍ<•„zpÙ€_Û ~D@ÝAÕÙÊù—ºØ �¼ÙÊ`’•¾È€;6Ú¥Ð\^a ²G/k¢!M\Á>«sðe.o»¾h0�hÙH¯E>QÕ89 ~Õ½J"JBŸ†B¨´¦D=xÉì“<Ô¤ÿ,ïöõÀ|½ÞKÞK×üÔˆ•݈\ØÈ±?Ó52á»e1ÀËø×§·Î)¹ü¡€tþi™­÷Ò.»ÑOóÑU¤39üîYî¶î> ^ÑC脃ìþ2"l"ÉßH +gp):¡¬•*™¸/êjHÛ«a¯ˆ¢–3eH‡Ÿ™©(L‰§XjëÍfç¬À¨Ú +~‹ äƒWYâNÁð'µ^üÈ÷v5�~,ÝVŒ3)]“ÐÒ +$ŸÒ[ ÐÜ8“�fÕBÄ "3fb“í<­~°Ž¹Ë­=’ŒJGÓ:o*ûù)Ô›�Ó…·±î‹mð��º–ÑÕëÍ)p°6Ù?.¡–Œè–•-@ÿö1ýO˜8zr(:‰‚O^•5ÎJË qoy�Žs�‚ÉjÀJ SµoØ3X„”<9ê>Ök�Þ—3èTçúÝc±àV*4´å g²6„çÁùÏ3-Dh�ó(É™»ëýF\ü¶¦72qõù-�F[НfzR[©›t2¦­Ã�5Xq˜ì)ÚÔse{ìYíÅ’—½’£;ÙsÀ&=Áýu^ãÂz�±`ŒHä2ͽO寣û¦ör Ï„<•_@d‚¨‰BÇ7×’l¯âx–' �F*Ë>Ð(üð�Ô…ÖRǰ;û=HüFkYN?(d22³ä@`�m|@6m`FþS ®~™å…^_c¢Eˆú£¸5l‘¡ç4Šê7TÏ51¾E« zI'¿f2·9Â~ _d¯`eB0Ì�âƒå>'7ë&¤gHòÁOVföBÄG+Ìe¸Û +2#�ˆ¥]]6VP;õS¤ ÜWPN›¿+SÖë �uü7ô›ÝF^ú€Ê2+ÊQë¶&IýÐÀk9œ’}§`M�Uqëæñm /ÎãÅiª=�œüs¦(• +òðð¯PW¥\þ‰8Ûã¤Ç7jU>€O]è¡`˜r©ø6ýÑݺ¹lEÖ_g."`ÙܳRÊçxÞ0P_ú€¢rØbómÄ¨ß +Þc@þ]r+Åóàöþ¡°x´£þ˜Š‚A¡«�«|Îgr•£ýxÔïÙ¬1“N$ñ•Ûv[zx˜ÈÁÕWõŽDWYõ 4Þ0ù̵`„xè8̺Œ"Xrí)[n'8mN¯;Ùrs{f[~÷�)w„e޶7„לódI‘s2æ9‘o tF°·gí½8$LÖð¼™›@¸löµñçà§ í<¹½A~u!yÜŒ@ÉK3ë0�ÈõFLÙîf»ñ(,šcV#S<¿³¦ ¢Ö†çŒ’!;�qw¢ °ß =ç›.žÉ×�,¦xL_‰RTmÝÜ+ %YÔJ‘á€�nç ¤¸G›MåƒbFð&R±ÉŒh¿e?“ÿšTn77æ*›mÈÒ{-Ã"J-½a¹¤`%U“4`ei‘Ùª)èÅpæ9a�m-_´Î=„á¢ôëCª¸s™Í+ûØaÝ¡GJÂG(ú¸œ»ÕNÊ¡Œä J Ø'?Hrœ0¿ZšªägÀ ;b4a›`ùA("æŠØWúO¹óC8F„ &‚dÈ¥d²VíÇKÔŸ ™Kñœ0À^;UÞm¤°àö0ÐE7ð›‘:JÄÁ4jQeuèÂ]Šå•a)vD‹�û†W2²Ï";Žs6KØlªs™“µËOÜ-›ÛZàìxK¹Añnásç"Ò-9Üp½ +ÁÎòpÀ–“´j;øú1ºö| 7!¾Sÿ_h’ÔI3ï6”núøM ïª9Á0§± c²“� +‚J7d`V70ëW6¥éVvwCì°åÞ�Ú3¸k„Åý8³™§ÓàPIüÝù»v4Ø�Ù� GØHÄ2Ïa‘•^ü¥Òr1'{Y­#MFpÝŽðDbõÉ dC‚e5²ÞLC„64{öĬwL› |㈠ÇÊÅJœ,íi˜©ç%¯n]vC.ct°ãöÜ +t›Û ¾6ë‘ç�”$‚˜IY¬‚Ó(†Ù$böd›EYÄê¹H Ý�Ab€™CîkèU6Ís‡M¼— I©5l7D¿?ŠkzhŸ{Ewÿx>-<©Ò +ÛÍÒr¢È½,•´A~ÈŽ{¼—%fwK*cO�y@4�¬S Ï1QbŠƒ-sXu Ùi‡ÕɬÈ�:îݾEŠ{G^ãu�­<7•Ü�;ÚßЊG>_m ßÀÜðíî’F�àín\¡ž³bŽùH†æ¿õ ösx2ü {½çÓZ˜“z7ëKyâºpO@¥»·ãÀ_…|•…X)°‰O�G¨�;þ wÓXq�Îÿ,´^òíå^&z³Éüg:ÂäFa*eµ³X{9©nØÑ\m ìü-æÞ”.=EûQ�x°Ô˜Çry‰*Z+P”~Š„ÁÝ o‘Ò«]mgƒšh¶(l ]¢…*´nÓ`‰Ãœò ùÈ~P[hÞ£bòÜЧKù+—{5½h௦æÃï¥>Ûþ.؇Ú&„¯-ÃÀ^$­=æîŒsm¨H)��º+>nôA†÷ÚÏ+²lîÒ8žBšÑ¤åZn}kK^{§É¤ÕV§2M¦òWÛ§�%çb3‘4w§1&(ËiÙrZ¹��4z’‚7olâ¦pÔ40¡ÓO:�ðâw¡Î‰ U:!ÜýZNù¬à ª8ÕŽU0>ý +KéHž�ÄLªÒÅ›ï‡L6*™Š2<ó12ûו„©öÎW¿ûl çFÉŽQBiןšùæXd™W¤£èø©ÝÄÈN Ç™n1DÀ0øUÍîï °cÒÝ8Æ™û¡7w Xå*Z(ÞG† +=Ò:EÞÓ—¥.®fí躈`ú­)¯`à"òN4„<+KúV¥ ç˜:¾„s@3“Oó®X­ó”0Ý÷ëkBû~³“ÿˆâ—O¿÷!Î&aäŽ ÃmŸ1>tH¶ó«ß§”i“äØ&Ž¡Ø¹Xú8 ¼Ì˜¼Œ¹}q°wž&ax@ÀeÁ]1Ýí“ 6¶V¤Ÿ+·êÌØ�³…Êûp¿<;Û»b͘ÀÙfˆãÈSñë{ÁöïRÎaÏZóʹäf{ß2 +åpÊ!žnŽÐÚs’r™V´· HÍcÅ+¡Y ìIrQܡ¨½3àq v›Eå7½:ÃÒ +Jí"œ²ˆkËc+¬´] ¾^–œEÜ€[°�‡•wo:mQ–5·0yœÂ'njp%µwì#Ñyè¯Äßi€Ý¸Å�…éu7(�4QñLa‡Ï=¸`GÙv +ñ^ÞÆC˜­s!~Ùl ¨Òø¡¶º“[‡!–ˆIå×ÂX©–,±ªK PöÒê'@êŸgG½ÏÐѶžlä}� ™sÇïŽ^�÷BU%Ö-à;%k1Å}*ðõÁ¨]§$µk{+³®ì¿\À$öbX€DPhÒöo¯xxè|-Sã¢ÆzÓjÞ@ôM` +}ýñÎk-¦›7‰�}Ɇ(Sþs³?ƒ§;ÏÖ¯‚ƨ½Tµ›�VBì»(p£tƒ^Ól”©Ÿ­±ÜZ÷Î n®"zw´2¸ÕOº'êº�£™~0�«ã5¸_:•ŠbºcXSæï{³‰ôd‹™n|*`¿CH«Ö-¶hH,Œ:C¨‚O«×m�9×ÿà¹E—Hw±Pv#e‹–¬äÙIÀb»ü>¶w�Q@æ’o´HïÔÜÖ};BX9¢ ØØ,”O½`òA !˜|@Bö$´ñ‚§ = ñxâdzHŒú�zt<Žž±¬�5ÿ�°`°BHɲœ…Ф1+|¥À›Õ'a=úݯ}0™ÝXá¤ÇØ”îÖéÂ*^¶¹uãâTùÈGŠÛÛ‡½N€hÆÇΖ֘-j˜sÁ*È{>dò†[í¶„>ˆã¬³#¤ÅyãËÁê2�ÍvÝÄÂmxU ¶öp1݆yÔ ±ª¦°jék�.¨y˜—p�³"ô‚Ö´¶”([ž¸ñü +¿IUb ¯=Fdsm�Ìo¨–TÙÙʰvƒóB[°‰«ºi�Î[¼þ1é¶4qY?ûúù ¿a\�Íα'šCiÈzoÒvOI÷t…1îãù-ŒbpRS³'%PŽ>ÈÝʵXqã›Lñ{a Ñ”0Á©„¡¬ËÙ‹yÓj5R64GøÁw#­Úy™ò#AÜãÖÔ’�gSíŸ+�]G§¦x”ähœ™p® œ 4ålG&¯�ô�Îo$Ö8F*‰0¿±‹{=Æä?­f¸KÚ€„ny«vš¡j°táGº¥×ÖZúdŒuÇk‰Q ±¬[ÚaRo‹Vm²Ó´lß‹›6˜NÙ UY(Õ¹On…`ƒ„nûôë"ÀÑÚô8Úì±ûÊ…´7Œvž{ÆS+#©dx�„WΞƒ)ôöízg¤œÝÜ̺ü½ñ½ÚBž™ +-§�¥ÐÛrÌLÒ•8’ÍéíNμRãé��G%L§„5Ó(-¸)ŠRæµýrŒýyN—^d"mi�‘„©” Pm +zl2�ÁÊǶü äYG`³I$óÙ;Ǭ` ™ù…Þ†Ô‹*Ãb0ëdö™Ø0Ń˜ÍÊEº1bz+£+ ó@’"†s°×ÔÜ_.ª5å1—v=oNFS�±ÛÀ“ )ýI‘âP¶‰€hñ•P›rµŒÄ¡ja�×ýœWÚ]kêŒQìLlÝoƒ�‰¥&ØEèÛ�»ÜŒÖ&\Þà6âÀ“úÞL�|¹yv³sÄ«ƒÒŽ)&Ö8¬X�’æB_øš“%ÊF�¸_îøâÎQãýLîÔ°46‹]y¿¦÷CZj¥�H­ âÿ +Í�EF‰bË‘¨:§Ò)sX¥j–Ít4ÔGú<{L:IÍúWm@µ§'«ê Š�åîì³ ¢¾Gn/¾‹A»Þe�jòr›úº± DèÕR á+©Ü L–B4¡ýé]`Ú¥'zOePÍqá¼ X€�ç:ÁA²©|‰Æ×U¸óLJR<ž£÷˜_Ѝã¿ûl>º– ™Mn0޲�ÞÉO¨øâæzØeO`“ã½ã…á#QöNLû>µ¤ao,ÐʧûoÆ ª/¿ËM¨QØÚÜ�ŸUá¸/@Y—ÌâcuF5/S +´4ŒK-'ØÒvÜêÙ}÷™Õ›t/“Ãjf@™‚ Ž §z¨¨‰3í,Ð9Ï¡¸!)+\kF‘6Mºj†ÑޝJ` !ãÿà§·Tÿ‡ÕJÌ_ô�ÂEðPî¢Ë¨c-׫�óRGMá�Ì&ÃZ½{'Óo#0�íÓ}Ý, ½LÑ­J)v΂ã$Þõ�Á›hióÌË#D‰¦Ö½@Ã…4ñ/žêv©ì™ñ“©fKœYŠLžÅI³ªà A¢¸,-°®ÀŸõ\büˆÊ\¡2¤ÚIõÕö²ÄŸ—¡ÈH"k¿‰w ÈØÔ²[Ùyìß ®Ý¦|‚ÁF$€»oooÔz –½`ý Ðtz¨ëADÝŒý`BµXîÖ‚"¼7ÀŒ‰(1éõ�=x/#%i9v­:Vߘtt7K� 0>ýÑÝ&àMnIˆ�C\–„¤%ÓD” D ‰“ÌDVû¼q‹‹°ïM§»çÃ{ÏmÝÐc··î. +oÚ F©9ì´9KžôŸ5ºh’»[›H á„òdž:cÊ›@ÛÁ_�©bÜ^…·=*LÚÞBäGÿ6#µ�ت(H:„UCþ§Î'÷Ê +¼oújû«Üv~¡˜‡�qRÛ9qð§ŽÑ�Ò3Ôö—}‹Àˆ¦¤ít_€×ë<¡É”#޶³É`óI Ù–,·ï¸`–ݹX�³ðüCm#Ž‚Û·Â'güñx¬�¯uì#kh^ŸÂ˜Å[϶‡&Äß{:Ãîf£óG®rWÃ…F� þ@~Ñmñö•_ìuðúŸI¡X`ÃB&°n‹ÄëkCcܯÈò[Ä5+ÌX¾3à–�M±‡ý4¦p:8ª±�#º“˜HÁÒ\ª0À�½ó,+w‘G™YÁÏ4¶OžUuPTzKµ7l-•cûi»rë'õ±}ï}ðÿZ}tfÝ «�:Zñ,ìŸ'`ñĽÌz ’ÿ0�™'»7£Ç±e̲UÚø�WµÊúÍ.=�Ôø!*þêaóè8C„ÐÌ yƒ½3ùœ„¢³ûŒ¬°ã&™s½êh匄m´dñü@AjŽ"dÚË5I�è–#²ìHA÷c²8`ÔaäöðViM…¥,Õ«•”¡µÔɱmR_ØÒ“2fõg6NŒŽ"ƒz®ý¯²°¿IœvôcNìha£Vb žX¤èŀߑåì1¨RÀ­ÕRkh¡8ýµ’ú“ìûýâ> !’/£Òº .Î0BN2ºÍf„�Ý_ K‘4 �69Ca×C:�‹?û¿Ðþ3ùºŽ¶£SŠŸEâNlMÝ“(¶ó¯tyê¬òMê• ²ß2�$ôë +7™Ç'ɰo×oÑëƒsvÀP‚jÏÛµ°?¯ûØJoH•m¾}n›†ìÔ�:ð˜:èaö@ó�Ôü!๎¼¤u�Ë__Xlß�ýͨbIÄÒŠ]Y4Æ„8ÖÍ‘Ïaà]!¾Lí¢š××_î?ý��Ü7ÌŠHO£¼›’ÙeuœÙ„Ž{«†miðÁ¥Šj=|O®Ñä5_ôœÅ×x6�'‘̓V¼±‘áÙR�f¹Ÿ}”ŽÈ³!ÈÿCà¥Êµ9© ¾CÒ—d£É–È*¹Z\’}¹Íʳ�yS_ 7œ€?¬ÏI‡ÌùwôÜ ¤vþ(‰ÛxÇX=†@8.ÿbŸŒ|²‰wíóA�G¬TéìÛ<6ÞXgØõ;¾À¤¾�ÑÎ`Øx€'óȡ܇>Ô�t¡"ANw(dê@1o~†~Uܶ¶Ò¼Fìcë!•unPäû?S•U$n‰° q'øÈ´eç•Ðä!~–èÅ rhj |~›ø>§¸¶�Pœ˜³Y´ñà +œ¬ÙQêˆ?i ‚HÌjÉÎo¹X + 'ñÔ äÇZàãÒ™´z‹»“�ô´yZ]Cn5Ãä<¢BÂÝýJÕ\xü&� íªJú°…÷©.˜7BÊ ¡í´ÉlÕç oAJÙž÷~M2§ø‚r}Ö.q×àøRØæuO÷â­¡ôÓ_5Ú-6J ÅYú}¯½+Ci‘ Z¤£4q”òºŽÌ5yZ–»×>©-ˆ¿°äÃ0Þ¦u”¼F[×ü€!ÁŽm7߀2”ù”ûZ‘åƒxäôº�ó‡°\U‡å%«¾åsþäþ¥Ù–ù‰}é²…E¢ö™gE½ iþJZó\{r« >ׄ¢ô#àZ)a6Q Y½)fw¶˜ÐŠPK>x‰{¶ïή9y/Rñ.FW‡ý„}æ/hLf»äFH‹ÃÃLká +©>1›Èj˜ï…¤0I£�e¶©’=¡­ú�ÿµM"”Æ!ˆÐh¼;®^™ÝXz¦=Ûvƒ¶‡+<À¶"û=tøž�’wQS@5÷Óå¼GRå µºc!ïÈ÷‘w)ÚÞÉâ ýÕoÊz.)ñ”–j>J¸`^ÆÆ?9’=kØ$âI²\Ì„ø£Öñ$€ƒ +G0¨xº“¡æÎÜ÷nµ+žt¬ò›@2‡¿éÞ*�WSX¶€NÇ ic`ÕP–Rœ�Ù®|A´åVHÄ‹yËÜQÄ�@1Íýû6B¦“Ä6RÜoãõ ¡ý?&‡>.\tôó+¯ÜcI+Z·Ê:ù™ éE‚„ÚúHn±}R¿0J’„“+Ÿ §1œ?6¸§p¡Uˆ¢¾:øÎTÜGù†ï¸Hp=Õ½¥“.¥ÌEuœé‡•È< Þ.¾r›ã8 endstream endobj 22 0 obj <>stream + C¯Ø}?kI¿Ê½S‘%¢þ+£I6›§Ï6áv ‰Çô%% –ý÷.!T,9¡)D¿ñ¥ ÞWüê”KöQñÓF¦#{Éð°Ì™zöHŠ�…Ä×òŒ7@l«¸FøžæÁ˜.m¤`ÏããéP)öK‡LÅ å¬ÿÜZOA@u»«ñ’�ÀÐDöñ¤Iï¬6“ØŽN;xái,¯×x"Ãð�ùx2þ?D˜o˜Ãî­Úîš÷K%m<Íy8aÁÅ‘Ô,[éhÿ<ž^\§Iñãú¨i Wx›— žfÒß9eC24ÅýƃÆã~Š�ƒKÅC®Y>&·Tæü +Û´I�=ußaó Ç‹U�Ša�=—�!ÜÉ® \ÂKöÒðI)˜K“\¿­ i±üe:uŒ¹ñÙêýf½‘œ‰(Þ:„¢_\‚0`X‰=A1½†�ºÂÊ°ŽšIûCúkÄ««f2ÕƒÙ-;ÚˆYéƒ Xp¹?ÆCë’…œ íôÃòéEð¢¡2šº’ZÅï­jÝïÊe7©|»9êWwS®B-—¢‰è|J €@©)�’û-Þ~ï u$,™µ�éRW0ÕÝM©—äÔSO;…*Ó(5£¹vWø¶¹ËC49·ùR�rDŠds”Î5–Dé<Ž'pQƒO‚íˆÒçf¿+–ˆÈÄÎìÈcð»wßQqß”ÂðZÅ”!ö(Îh±pö¶î ¬IB^‚fI£oVÔ'€áŠ?£—BWbŽd¨ÒÊ«MLI‘<Á÷ÅuC'Bîà-l~Ň0'~@X&#<.£ØÏ2³e|MR!4»¹L?¶:íÁûƒ‰Ã2+åÜîûs¡ 6¶>‰¨AÆî;Û•ÇúŸÓœ¢eÊ�‚¥¾m�à·„IÞpV”¬ý�:6Ë•â„^¢ÑM»ÒC±^Iد#( £#±äÊ— ,%¿Oú)ž<ÉÓÇÉKÄN.»!B8¤äz.Am/§ˆÔ=ÜÊ*«[È1Bë|˜Èéé¥Â‚Œ¯¯LŒÈ,H—€Š©YWüÿ‰Hû’í’‰?Π5²òrœ“Sê�û_é`Úü :q†dD2â8#�öfŽ? lÃ5÷mE} +õ}TeÈ<@ÑSW‡{7 +3¢EŒC<,cÿUˆmüëÅŸè_·È‡+½ªÑÃ5ÿü²ÙöQÕ̇=þ•Xµ¡¹h§yTÝø÷“Eµ¤‰ 8=eã_Hæ¦Ôž•åüãßúž"Té_“¬R#'•¥ +N¥è_K�ÀUø·ê0©Î›"5ê�›ø`D_ª bnÊ8‹%owUˆáÏÜôÐèªIØK@_�mÆ„>5%a è_!ý¸�â_ºÞT�þ…Ï�G¯H<ö+ãiñ/N¼úêßÁ¾ßþEÒ ½›U¥þE;”@ø?–5¦õ¯=. óŠ7µdô/ñÒn—𯊠g4[¦ƒ%í½±iä"ºœþ�µæDò¾N í[ %ø—W×®ôïV +þm¿÷Ýe§�k¥k&x3»[(^�»Íi{ŒIJuÈú4XjcœÌ¦Jýà †alÃëõÛÄ…¹»‰ƒÃгUë›âž‘Î×\ÌT*Eˆ0òÕ$z¾¤”Z�S ¯Ðî¾]΃vÛ*'€S=Š~Ö0wfÚÂ!=Ù«z +`¯ËÔ Úè|è8X£¦æ"Oúƒº¥ˆ Œ0.ÔÙ7"E°I›hò¥²4 ¼;#V¦ØXæ‘Æwù*‰B¤º¢É7烀›èІ-8»·Ñ4“AHmB&HêÃ|s¥�ûº ·Ý0ð¹M#,·¶!\ÚŽìû�€Ni–fZ«%©ÖóSQúV�i ÖP��MEå3øõ̤:TöÆËh# ¥'›-qêgG`ÚZ#çpxÑcÜ9¢$$7¨?†�ö}†,>:·i›0™�{R¬3:p;´,![¬|¸ jò`Ð�.ª ¢_ÝÜ ê=>ZÇq›G˜O&õ†v7Z1ù¸þ‚ó3Ó h�uvdR¯•[îÀFÇ–Úl Ô ˜YNò£¬ð;á´ê[9ãr¤^ W²“ Þ± J¶Nxj +ê�|[Ü@8½DÄŠ ’uÄÈúK1îבÿÑBšm›’sÜm1ÝN¨v'¨�´Œ,¼¾)!{Ñ ë.upD�õ¥Ø4#¢Q+›÷ÁEQÓ“lmઠÜ¥ÉÉÄͳÐL6ŒùËüA¢ßnØB_‚žLˆQÂ×ñ•�Bå¡Ä�ä]e˜Í=æº4¯Z&Û Y䎩Áƒ»«Kù³p‰JUAäóSòZ(¬1£(ÆËÄ@¿Lh Ëp‰x’–âHS�ÙL¸ˆ}2í6×-;Z±�°ë +dzâiy“о˜ ÙQÿ!c‡…^-:­Åéz€tIŒ8&�ŸIq‚œí•À“XR£Å�× &aœŸ³»HG-Ôáe‹ži¬ÿCV§ž~ j+…\’Mº•¶?„¢7¤T˜äšŠËµrÚ3–ñL);}7;í§|ò²A[RPoµ\-dñqGÑÑ·\7‰Á´oúH‹àCÌþòD[¥QdŸË€“ ¦¤™_¾åÍ·>:PPÏ]{� îBUÄ^$¿7~ôùfq¶²Šv~±|¿TpL6²Æ`Í:×ЃŒg)%1jΠ5¾¡3®é¢é´ÇAlì*£‰ˆ‹„æVw\AL§X¦(d�Š•Ô9üf B’6Y>ç¤ÃvaX6n)š�áñ>-Ü'Èh½GF™tyéV¼+ µZ¼8´,áÇÑP\“Y´èhÐ$Ëp¿¤˜6¤¹Ï¸¦ÌkäÝm âÏPã}Í0º™Â°XñnDÏô�ª30Ìáâsy/sÏ¡’ý; =wõùïýÝÕÁÎ6&üi¢L¼kõqá/¸$Ù¿ª~w#»Û¾q +—ÎŒ28¬BtnQ¤÷ÅÆ»MS úâª/L&#>Þ+ .ç»+ãf(tu@ÞxÛ‚ía‘é|ð9 Þ�ŸÓ63¦‰,©Ûç*ðÉ H]uì3û!‚}û2çÈn†‰ ÔU +ÜÆô{Hê^�Oû⸸[Õd‰)‹©&°Å·)%Ò†SàÈÕ¯„?ëphæ&”�Þj�`Áé2˜IÇ^¹ùÿ´YÞšº¤KB]º]5Ci³Ê&_Y�Ëš iM´KPŒþ&å¨^œ­Z-]Ï¢Áº-ë™æâÏhE)ìðZ.8)L6ù®¥¾‹þÊñÕ:çþ\ö,jqŽ]¦ô-ؘâEqu%षÕò™Ôf¶'-Þ%ÈÒzeþ?óÃüsƒû…š×jþÿD�Ñæå,bOà¾æ +#mð§~¾73�½…§^WeyÐZÔ†öïuƒ‰‹ã3ÇAÇXl/D¤‰v­ ‘+›Zì®�ùæÝ ›¦3à‚; çj«+±~gü®VLa ´g«ÐD•ŸËO¨ž.˺ÅÑ?n�›’óÚrêÆŒ¸ô:Úµaäwhýz ÌP¦×)‹'~€÷JpÔd¡ÎU‹³Òë|€÷aeˆ�¡× +3mµUë­ ~VoÖ{×´«G|ÏVñr.î#–¥Ý�†¤×¢;â£Kº’UÕ'f[Õ¯hP‘A²Z{l’¢‹i‘Ö6�®ƒ_¨ãÑÂôUO >h`.öÔØ¢k9�®í@3àÒ&ÊŠ‘:Ʋƒ Τ(º?2–‰£;Ô ¥6�êÃ:ÿX oZ¬ÅPMá-Óžxj^kM(1ÇìYăÁ`þ‹â²�ËÊümˇo±   –wÜ0 ZÚ šèòÕ¥ë‡fÄè'Â'(ìÄ=׃¿Š)ã«Ó†eøkN±È\�ûßÞV· à:X¿²‰À?åC–¼ lgˈâC0� ð ’6!Ty|z­~4Jé? 8KÁÙ‰+P”ÝGù.�á ­Å´�C»KŒªÀÑW�qh :¢‘9ä•!£V/2)TÚjxòz ‚`1ʪ*m–„wƃŠðÂí/ñ„Jû† |=Q`]-p¥ZÞ£%¤O =¡FXí ­¦Ú.Œi¢ÙÞýþ18¾‰ÿ\8û‡ýÞ‰„2£Ç\,Ðâ ™) }g?½‰SÊÙwDŠ„À^vš§­Jo;ú\8H Ê=îb«¬n þá–Äáˆ?^mʵ‰RŠ PŸ@²Zb`§0§Â&ðrÃ2ÂßË•‘XDLӮĿwíqa$Vãïq¬JÅ(�SÊ“P)!"¡ô�ãP.#&Â3Áön@ñ.‚º·4ñïðà\qѾ#h*Ë? £øÕ³(ý'eœh^íå§<"²ö6œzôvŽ+ +aŸ ˆ˜v ±öjAîq¯ ´¿¡kí}ÖДÖdnk'º¼¥‹BYáß!ëˆø'é°/› ¥íš¨,yàÊí†lÐ1b8¡ôì"¡øág�l³vS&+mïySÚãj, á¿“ˆâ�Lg¥�q,ÿ¸Yñ5ÿ®† ®Žc›½Ùë÷Š Ôòy= ¤�¥]¢eh ΄ï =Ìé`¶¢¥}@YàÿW�Ò`»Ì'`5v—“hì²PW>v(Â%j¹·ìÞqaè* ×Ðy\gãFËã‘NÊÛ€+» Æì€X°�øhcŒ›×¦ý€´Ä½Ð+¸E�[�–¸×ˆÚ•Ííå¨Õ KäªÅ´=.FD\1†Ârñ‡[e„h4  h‰˜&ÚãÎÊníB.+ ÿ†Ê8cn®iצ˫¥ÛD ìï™ o2×Dç€âÅÕïÅ£øFüõ’‚óË~™SÚÒ ÷€<�:,¢²äÚ)TÚ¥~ü>#ÉØ]ûÐÆ½áxL ¥­�Òñ­ÑȦ=ÀLÄ^Û„ +¼\Ç8µ¥k^ ÿЋ @n[kM±–�!FW·¡2ΚÜXíÙÉÚÛ¦/Þ9€,w:ÊD{ˆ6�“ŒÝ=óQ7eô�½�»�´-í €öuz¤º�1èèV•X™,‰- •\}ðÜRîq�ÌM±Ñ‚8ä•ù*]ÈËI¨´s©âgÄ´SÂÉë‰JÈHlvJß|A{·.œýc¹¦MkÜV_fÙýšža o'ñ€&}g–gž6 |ý¥êˆøŒ4H9åü.9b¾RŽ¡-ZCç1mð ™y�#Æÿ`þ]©Œóûð¦M;iª�y«�ãH†â-�õã.JiÙˆ´v‰e³v—˜‚s§Ô]>†í¸|˜ápVÿÖyD¼ò½þb¿ˆ_ÎHœ‡ˆi¯�E§ ÓfI›6#=zM€ÕÆÊÚ;v@õ˜~Ô–" oÃWjž$U�; çkî6!wð8ï!(Ńâ4¹Çf#Œ¯°Ø}Ó�Ö^�-OkÄàL=®.�Ç,é;„‘PZ{çG{³¤BJŇãïì1«\ýΖ¸äMjŠ=g¯ˆ<.‡šxÄ êXŠq,ª�xDU��”�Ì|$a¹o”Pº6ɰþZ«€\}�>X\2g=`ŸÂv°Úå$=«Ãq“oÈ’X Ó–…¯‰þ!3å…fo�A‚`0ÎÝÃÍH{\º€´’•QË8�Üã:§­ˆ#ài!‰G7›ÝðÀA·DD ‰æ$På§Vy�‘_G¾`F÷õZ+FñÎ-˜AúØç§È=®{Y_/ÓŽËÏBÖ»×:nUíÂÏvüp§»KÔæäª,TÚ~0Ñža3ø­�Üd=tD´6'÷¸›—œl®¾­TËhbEÔÐ=¾þ¹<þ¢[8;�ƒߊ¨,Ùójïq ³öM·5\ü8Žø"‹ÕŽx.ïÆJ—§Á62K>kªq?"%W{Ü„ÁxËäsà—R᧬ãõØFeÉ©!bÚ'Á3íÁqõ"€ý Áã²§ y&]aüfñ®ö׈Y>ÌÁø¤ŠO'‚8cþ½1r�ã´l«_ ü³aÄ´=ŽVÀ¿uU–\{äÕfñ—«]×Xñ¢ÛúzÇ ñ8FÛ¿ _ÝÆ¨¾^úÍî±ð%+Ÿ¡ín8†]²)Yù0+l…¡qŸ‘¸+#åë ÇÕÝ­\}ヷÇYH…âg™jÜMæ3˜ éÙXíÝ4Ò å�RcÜá¢ô»~éÅ�¯†Çï‚1mù7£²df±ÚކÝ^�(þøß  +ûSâi_L¬¯{C§@ <ýNÚ±ð8 ŒÙ9½šDüäq�kð; 0†¬TbD†Ý’J¬¬ž] íÕì¾îq�ÜH;‘&þwÒµ§ÂP´;í౎ ‘›×%¦ÅSnx<»=.Ö¿î²ÊÕ§©— Ú Å—|iÃ_0±£¡—ݨgѵýN+P~O»úõZú¥<7FØ7g�˜°z7碘yÉùq‰älùN�Äù ßÕö¸H'þºgqÜ£%¥Më ÝÒvÄÕ€ŒG§ ÁM*G…¥´ŒÕ2‹MßóH0ĘtAh7$þw¶ìWrk¯²êí¿ØŒ5Ô½F}GÓ·t †èq“… BÛC,yT£¾"cuí‡oðè¼|H·tò"b âqü— ŒÙðë]v˜"C mØ)½hAœõ¸ö¥*ðCê=8³}âxœéyÙ-Ѿ®Â2KÞèÛa¶þ�ÛYB÷û8_å¥-”´ñ×a­Ñå=î¡HÁYe„_�/~æ%Ž“åËVøol4™w_m,r²¹ò¾70õÆŒ{±ø‰GKËúâÀ'Ÿò[x9 +!¼ŠÆà\+I(þ¤a0^¢a}Ý{Üj±¡´È ¸Ç¥„‘%¿„YiÏV—”—�¸a£ÇÕÑkxiFàà88D$[¡Â¸A–_Q¨-�¶šßa¦áÕï’ –È)QË V‰ŽÉLý2<¦ ŸV¤÷8Ue‚<@]�ZÈ8L4vÓ"-”N7›Ý ˆ¥ªü”µ§‡ÃÊ�å±’�c¶9§hwäì_w`T¥M¾júr¨'áDf>fa⿳|"œ…à¸Ú•�¾òêXßãn˜ ëwžÉÚ7!ŠŠ åöb�¸'Ëo¹ –/,JsVqã³8v‹ˆÐwvÇ7báqˆÅÛv6V;MU–,P<¾.2>’-–ï&ºß7ÿëWÚö+4nïq•˜{n)ÿž[ÊM¡ÎDSpÃß8£”Ve�”¯$ƒ«ÝngÛ¦…Ò·,Âiÿ‘Òr¶9y¤{íN5_ð…ÇeÒÊÚ)¤é]5_2LT|k îýà:Ϲã£zÜ#ô¦-Px@n#t«eö¾yÐÒvüÖï2,åp*Ÿý·DKºCÊM]Ú¸z=QXùo +íq +cÐo+¶4-Î9%ßÙ •ð�å!•@GßÙ ö]RcÜn'ð»�&ƒó[yŒxc¥¸ºÒWãÖx\†ó²ü�£åfaã,X´~§$ ñ÷›†DßXÂÔN¢#²ŽM%(º®"}¿ED€I9Jéæ1n•dH5BÅ’â;î•T*FV&a‰ŸøÇA�lGU˜qKg/s~_F¿³]¥cSüGÄ`¨ arÖáºñ�£x¼D|Uµ"n:B.�C©U>»¥4¬â3É •hTÕ"d«ßQÙêw�3ãß æXŠm1íà Àìå!•È´(N ˆ0~Fè¾¾xC¥=p àÿ8ÄàLè8bGÓÖ¦,Â=G¥ÃÓ]Jf Quºðƒš rG£…Ò‡u“ vO-ÄÇ ¾Ç� …i·Ð’«k¡Á%SF£ß=nea0þ)°›Ýp\ ¬±�çs‰(¾«aýN¬}¦]}Fbpðx./0?q{ÀþgCC=Ž“ +«¡õ8�³X<ü5&$þ<ÆùR®žU= ‡iË·Mú•GÚRÎÖ2~ �>Àaã<›¥HÿMõë3[ þ“[¹úÊ�óÓcìÊÇnòñ¼¢íN"þ¶£oEÙÍûKÄQOººµ˜ ÒÕÝã>ÒNØ6'¯™‡Æ¼ÝÖrÑ8ÜL³Ó8F-) Ò‰G¼±Á°ÛãH€Ùs8#¤~h1íý™JÑãBoäèFbx‰¸‰ ]ý1%”Þ�CA¼¦ßIÛ<îqÎPñ¿“Œ¶ÛZ*— Á^~'Æ›hM—ëÙì&Ñ—Kò� ,¨ÝlÜõë%Ú÷ŒOGãøî%â!ùÃM(¬ãèð +]lJKžaÇCŧ˜P�ËB*K¦Dþj¿º×D<“µ —?šÑ¸ ¶¯ø–R1óMæQ ¨åKÒ å5 gXÒ%ú¦;Š>Ôž”ÓToJw1XÊ;TÜð2VBñ6Ò å~§à)ŒÞ=¸ÅZÞã å÷j¾ŽAiª-‹È,9%t_OÍðëe`tõçf(ž„m£øê€ü`�~ë Kß•Ø8 lªÒ¦tëÓºðë Ú�¸¥“°Ž„ØuïCmEqSe‚| 0Wßã"ƒœc‡7ó/×D 1�ƒ¯qap*ÙlìàÅGý:Ï"t–•� ÈÁ$®²è0‹tÐuDãÂ� X�–ƒIì(‹tÐMÖ“hì*’+Â%ÆãÐE:(¼ÌBÇšDc7ñÈf#,b6�ó¸Î¥·Ç�o†÷-3w¤†w¤ùz¤«M–¸ä@3âÆËÕ™ð¹1ëw4``Ú±Qηû�°z\€ƒ„ð‘wùé,Šbqà”®ˆóm'*~EaŠÀ˜&Ú–ù">é³qˆ”�;qW;�¢�›U`]M»|¼ÎØ18[â®r,ÖòÑö5)�@Áz··à¤/76ó¡rÈ-m‘‚3�$¢8AØ>Nh¤÷B¨¯MqöLÓF'‡%¬¯§›P�G0lœ=NãÈ4¼™µ¼g ï§=îUfHy‚{B7:t'¯“®VÙXQv?0…”ö/�ßfn˜¨ôŒ1è,ì’˜Ô(A×½)MF:)G_’•-•Ç×¹ÇÙD¦Y¹@^º¾³; ”vdnŠp-Äî”Ñ…‹Àçšt4#¾Ç[)Š § À¤tÙh!l=1¥…N† /à{�rjè€Øw§´KQÌ<BÙ}IAÖ—˜•«§P�—�œ=NR‰ŸP*bÏ(*~܃È„‚Ò¼£ÝÕÖXø¿µµk¢ÀïË’iŒÅjßå×ÝÑ+þḚƒzUO‰•ÇÅwÒ­T$8~­aØm®dœ)qüAV›«ã”þ֢ݭÂöŽ C{*bç²! #tœÁÅëLéÇÐlù¥¸ú|_vPOë¡°²¤2úº&¡ªVÄÿç¦(QO ?�ìÆ ·ŒnÄ׳q÷¿;¥¶ÍÉÍ·…Ò§:ú]�VRþ©U®hb�C¨Øí##+uOÔ.äˆ×–htR�èçñ;821%VÖŸ—Ñ}ýñr¯#쳞“žöý0»Àycz¨\,4<·˜`4úzΓpAxþg?LéCÀòÛR1ói€)âŽá’=œÈÌësàr]vLùŒ³7¤«Go‚<Ý”X™á7»´V)Â’WÊý&ÄnUÕHißh¡tD¢ùz:PLJVNŒÓòó–v(Z³î%�'ÞD»ãP”ÒœdsµDfHù¶!HŒk˜r�Ü ¤V™Ì@B!v/cüe¨ÄPª�B�;|Y hMCû¤\LÌd~= RŽI-L» N *Ò’ƒŒâÝG8â!ÌÿÇÕ<þÅÏ| Î�Eþk_�›àªñˆ]´�¯£ªo,¸)ª–•)fÄ´y-„Ùìf� ‡•'Í×�q{Ë[Ú¤ÀTЍ§…Òi€ òEe¤ùºzÂ0,¦Ž(¥‰Ûó¡òMHßÍî\h¤|„eåÃáŠÝ †ÝŒR€´_õë¨ö¦Yé6+•ŸìV¥�z6»Ú‡RZ •Xá^^–xY¿Ã¥Ä%�œò;­uI¹daQ|û™Oß²a€´)÷/ËÊä�<^)D2¼YUÎßã�ñ±sವ$nM䇃ÂUaÿpÄÞ-ÌŠ�9Fµî`Ú62ó_x˜y�+ Šv{VoDûäf÷õÖT¿n†j]Ä´+,EÛBŒŸ”6Ô%åŸj#öY@â’/„ØÓG÷õ×™ù3R÷D %ZÖ Ä.2B×ú!Ø¡†|vT1²r(Y -”VøA»WEj•#Úƒ\¡v!G'›ÝÛG((­ )¦]„àÛMyxÀÄnH´é7»µ«Už$På9ý¨ÛPƒµJqá5bbý^¾L^ï–ÈÕ…•³†r1=ƒ…âêë|Qv—$3åÄ#¾ØÎRÑ77 TìN©UÞéלPúc}D\¢}œÃ­3ž±Á°{Ö3¼=Î#Jâ/ +þU]À®”Öýmp^¯ßÚJïj–%{ +šjß —wM:mL»ÓG ¤ãu­€¦’¡`+£¯¿,ÖàùZ»yÞØ€#�´y�ѰL”RT�‘…Š«ª£v[K±—Æì$ Cò­Düž~å¨ÕLÅ´'Ljv[?Ò†¤#¾¹-ΞnBìæe±¢nÛ¿¾><Ÿ¸+Ú]Z0ì^yÜn :ãŠCѸhjK…µ€Ü[l®¦°__µ\‰¬c}¶f÷Dí)­Î±˜È~=?.;ñ×g2Ó´chÿÛy9p�»!w+šô  •a}?‰˜)/CWÇ{ôuù,JY?�I•ü·…iGÊÃÌËtü{ >[r�Ày X[QF- ŠçÌVlœ?ƒô×FRÒÃ:Ö»_¨rõ`ëò4q´ {Ü—örËhÝ;EY”žyT–ŒªB¥M Qüßru¦ìð/†’WÊCSÆê�¤4+Ò-…U$Cü¼7’µäxtŽ$ † âÑ©�ÜHd[;iDS1}€Ö©QA“ÉzÜHí:ˆc͈ÖNÚÆ‰ö[\‰öSd$CT{Câ+5’!¢hëqµ!ñp:Ë^ôðÐTL˜`ˆ$Ï�d[ÚáDÑÉ%M-<­`Å‚ujTø¢©7Sˆ…ÌØ}Z¾3B²r¹)°]dx_D2úý2€c^äCAêŤ{D\Q�Û#-’óQ7[‹�¢¡ÄÊŒ ï�ßÝÁÉë'bde5Ä3Q€´4Å Ú×]Sñ×€—Ý7a(¼ �öõöjqK´¸%š€¾0)�ÑbüUTg�ã,�íµÙ'å�FaÜBÈnðÍð–a 6�Û¢ø¤5<ã0ºz¶ˆÄÙƒxL{Ö]ŽöPå†@ü; DAÏ ÝhBý}Âé.ÀÓ–#¬¶ì¢¦ô¬²~X8g>”�¸. ·Á_ï@#פ¥c’ ç +çõú6B$å"Àî(:@ƒ‰x€ó²_eþo €µ·–»EMû®Õ#ÆA�åÌŠOÌSÊ%;my‹Ë5mX�[Ú¥‘¯ªÞ”Æ $#X„Ï>nÊÃBìwg¿}¦}>^ Çœ(ÎùlోäZ[è,Xÿ†Rÿ†NÄp „F;U3†îD¸DPöÝ©Ç «q�Ó´j(­ª^v£ÝC*¤´=éÂa1Û„ú{«Rø‡WäãÙŠ= 0á`|DÓUþòcœ5‹wµ É àÓ]¾®ˆÝµ1\rÆÄú¶AÖ§=ÜÕ^7¡7htµc°8f¡À Ý»ò±ó8µUŠOVìþÝÉëèk«¹šÐºX__U…Òµú"’Açly7ƒóÇP`;Ú# Ï�`^˜}Xešh1Äú:�†ø:œ®0þ�…0>&�C–lz + 0Q|¤’hÿ©1)oBH†hù.iœP…ÆíðtL;ÔÉ„ÀURA¢Qmi”�f´!eX Äáíë¼�ââTû<@š¯ûT¥*p^..u“6Æ «cÜ®¥deD¡�üf7èÀ¼£ë)Œû #)ˆRz%¡MFn^ïn¥øá1íV{L½TñТ*pŠ)( ‡ÊDÌ6'‡|N,£t ^»AS‰–ÌÀXQA�‹ºÊ=®¬]S +g¯µP)§°Ö÷¸ëWŸãáÿ¦ÞÌÛV±–÷xܪjŒ&Š£—,º0é»’3â%&ÄnWÌ$îAäá.�µÉ,6”þxéwÛi�òVYr!b1펄â×�k¢5¬‹ÿÍzOaµ/�ÑÞ/ +�ôì +¤h� ºßof7â1�´7ÑÒI<î +åõúmjQünò�ÝD°(­ Mi°ì¸XÖáÄâ­o7!uñ�áœ,¿Õ(¹š%ÙÝÖdpþ!UiºÒÚC&½(BXWN7°WV¥×âm(jØRŒ¨áHõLn´ïc®-q;VJ;X‹³›!U�3ò­Ó×;îhqöݪxM5î„c§V¹SzŠ�•6ÕcÚk;ú:S�h‹Њ¸¾n·À�KÆ!h€H“�"…ËÇé%ŸÁ%ƒ–Ñïå[�è¢$îÎçÕVJÛîºûúÁ a�§ª†Ä1"M^HÁ›!ðÒ󎆕âjsò–6È¿ Ëãïqþ®ö¹)ã²)é¡-Ñ+£«Ü&¤ü‚ ¸ +D†mZTÎ!GKKâÑ×Qíù¤û8GÓnãpÄÝl±|ïeýþ$Ø,û ì‚Ð�1O™ßO™ß (†Ý…gØ×gØ�Tàw˜Á2L;bYµü+0+¾óò€óu®ÁÌ·ƒÕ¸#Ýò—H7Á²äKk1íˆûzý›:úz@`òŸAo¨ž†”fÜ $àq½UR~0ììqµOá£BPœ ØýY.ÎFJâþ6ΉŴ»ÅY�’«Gˆö=ÎRsWÖbù™LDñX�âÃéIñc‹Q�Ç\28?ÖJ3þýµxø�‡âó8ó�‰(¥È?ܼ�Ié•ä&D)=ÆZ]v˜]v˜»ã¿’ú ;n»Êc»UÏ›Òå-톌ó-R4-@Æn W(~éK(=‹”Äý&X–\†B¥íx9®F7²ÒþHšA¢oFÚ,ýëåå{cÆM+Q¶b`Úß·#rØsínTã_—ßZ.Èo�â#°Ê’©…xÎü+ðf`ò¼“0�6_‡ªH_ÇÖj_÷¤v{HaÜ•>â�È[ßq3P›“sÄëq�i¶Â/|n&^)ÄP"rrÄiŽ–îXåê§›=î®y|]Jk �‰Šë¦ ‡cеÇÈ‘>¿³«5Yi‹ªÉÚSͲä‹ã]mÉëµúñâõú·®ké°ká/y¡ã¦¼"ŠÿÓD—¥ÛÉg +¯ðïq‡ÈxùdMôõ´&úzø½â %± ýëµ á×uRz,ÿ'¯»ª‚D‡•7Cñe-íY¤Œs`ýV[`ý.¬ým|ð®ÔÜðDûz\}}ä*Ò×­ßkmÀåDì«ÅPg¶ÚÌÖM·ÖÕ�fÜÁøuØ*í6 EéirÆÛrõ�ôP9¤ñ�õú` fýÈàj¯ˆÁ96C‰ö8 ë?ãù¸G%xÀ‚?G…™r‡"Ôx\í )Yvâ6½Xí«EéŽ0ƒs øú,"ý©`]=b2&Âm’Ë�P^«‚´á[ÃãëåKƹ­¡ý)0f>>DI+BãºKW·>¶ÊˆIbÈÌwño«\sÉà,¶^ÆOPö# üãÇKÄQ?ÒVü+¤Bñ¤Yñ³Წ–6m�Á™R%�J;_8ësàˆ'"�ã«�­òéQ3Ù‡RŠÛý¨›ûA»7%@ò¯Jz†\ �VyT¥í>"¦Íú”ð·}¿Çƒœ ›‡ÊkÉÕ’Ôº÷w–F.R œq‘¢t¸DÕü©UÞÚ›Ò�w§ÞJF†­F(¬Œ€õNJ‘”×8–~ýõ)á RPST¼™md¢ömŒåŒ6Ôã¶¥ro逼AjŒÛÂZ,ÿF ©¶Ã£b·i)°;À%ƒ³ÛŽ~÷><þ2!ösÄìfãxÄg‘1Î“Žæë�.rÉcTàÝ�x+0Ú<Ž=ÉJ[ ´‘ÄlÜÕÀ´M�+³7ÈÛœ|�@¨Ømx¼DÜŒØÀ•DZ²VÄ?1!•èÔ þîùwÒ Ón$@Þž(¬ìZ·Àµ;� |  ÖÕ‚�™¡H/ÃRz{¤†�úì/Ï›Òê-íÈKçFýº-„a÷†ÙP ¯íŠË{œ`̼Ìãšè•²{qˆÁùâxw + ¸äõøo²ÕÕ¡ÈóàQðo®hiÃ0*K†h¥iF|èðO(aŠ't’U�Ôîmëdí¹`�!B'ÚÃ@‘t!?Ý@®Nh_çƒC»?é-íDvk-w˜"û2€ÜmG__°Ý×Uˆ€¡3) ÙR¢!"šUi;Ð=nC„ãêì`Æm’ã~xn)7!-q;Ü,�?ÜñD3/¾A…—?®Xïý&Eû«µJtÀ"LéMÀŠâßéqßg¿“V ^»9ÉMÔpJ¹úˆ¿^P| ˆ�ü¢òüŸ/C»ßš ΄…‹™~ìMˆxL»PókgI¹Wµ)·¸ø3Œ·,d'ðlľzÐÒfÑœERò”áÛ¼G×Jl³¾îžêÝ,èQPPšìð7ClÕÜP4nWBû]ñèBˆå‚°]@ô[ÞÒF´/ëjÆû¦5ÔŽxbcÌ~zJ®ö2Yi›’𑹙@¼.¿y ©˜€ ‘uµ êKaåo¢8û×K”‚Ò™,ØPŒ¼%‚_ØP“5±BS`åð¸CÁã¥H…õ»ŸÆÝð@pÆ€ìïÛ·Õ?k�ßl%„?¨âm¶ iãßÁÑ'Ѹ)'üÿ•Æ£¥_ŒÞ3€âÓçïÁ°›«½Ûã8úÂŒ{zÙýzf¤·D¬„ˆ¥v»§ÿ7ƒ7m�Ç­�›è\¼NòeÊÁ$vpÀj¤Èfc�|¼@Î>ŸNXVÖí6;ÊgO@Tã^R«<©Ä_'C¯Ý—†ÞÒ.ù­Ó3½<Š�i§«€•'£‡Ê––«!{à™vÄýîhï—�œa°ˆš€_GÙ4¥!*TU6W·¡ÔAe¹ú2¤ü@1íVh¿#hJ?±UžTHÒƒŽ["ÑŒP[…a÷ÚÃß7f\¤µÎd핌Eñ¿笚bÿ²†Dw¥#þ«'TàêʺšÕ²{Ž¥`ÏÆ]©¨#£—<}}ÒRa%¼R^#GnxI˜Ç @Ó4T§Q4ã–‘ —ÌØÖþ�±çËñö¤*mW©ÇÅ÷À�³»}dÉÈv�“­. ¯Ä_Ê)•ÏD·Ú’Só¿Ö¦9½pÞÈ&k/_�«å—r‚aüŸÅ1�k&±}m‰AsbCé–Ð�8�—b¼äqŸ)¤*í�ÿp³2tÜF Ú41Ç®ïì™Èòih +ÎwŸÝãVÓâì¯ ˆââèêHEóõnUy´TYrs0*¾Ö…-§Š™W ‰–Ä ïZ ìf#K®X b_kh*s6'O/�·Òãn‹³NŠì–ä¨t—cQ”1¦BšÓn³„c‚ùŒf±M8VEÜÐçÑÝÂ'„d ·¢&wi¸ý*÷*0ù×j±Gp7ŠÜ�ÅZ _�ƒ{Ê�ÛÓã&Á PF²<œîo¬5¸IœÜØ52]à&ºÜ°ÈµñX‡<¸ƒ”›°ÃF„éÿôÀp«?ô¥Aî]î"'Èj$ÛòA^зu)T¿èd‚¸¡-¹ÇÎáŒ9)£ÄÙst±Üµ·Rä®òs ' +ér¼‰û<¬TÖ±\ûÃçYý0]¬ÞØ÷¢åFeÖ8E­¾;u¼#[�Óûi ¼ÎE5�ÏTƒ €qÀÀ®�UÕaãÔÙ›ô¤)Ï>w£�Ì©3Õ¥´­u ¥†‘Ï»BYã66"*½xÌçxÝtTP-jÔÌm½í*””®”†¤ G¤ �dvZ€y‡U¢å3«ÃªV¨™ÇÓŠGî¬rÀì»Gñüõªð!§³‡’Ç[RL˜züM³àððŠ©Wÿl oO7�ƒ¾òÖì ³rTv¢mBÅœs +¼SN)¦Oç©ì¾4év<þ.œéÌôõ¾�*O¾`>0jl€‹uI‰ƒ‚(žJ'ðÐ¥ÛŸïu`ãØ,~Ô¿.6ôgU”�\ô[䦽ê*TŠã~Î/IŠêŠß«:üC:eÖÊŠÃ� +*^‡4†ëêÜ‘D™DÞ,ÔôU#ùÅŠ÷ +ÅŠH4ø%7�iI÷ÔkDïZHBŸx¯ô;¬ßŒÔ�„¼IÐò¶’@¿i%¯×µ]A œ%$áÇHB 1ŽÁ_ç/ë\B¢œyQû F˜Ò–õûèïÔ¥Ì"/ƒåË ©æÆW AŠ«ˆ�beJ,Þx�¶Û©6¦`?Xt•2šV �Ía0ûM$NªºÀ¼b°9ûœÓ3·‡ž Pta©˜´Š¤f.ž‚;šâð´íqI\6õ9ùf3ý—«�¦ªŽ   óâ\ì‰;­‘ï]Ò;@®Ø‚3ŠNì~(œ,”¨ícéÂÝ›Q1fˆqc2cÚ®Šë7°ZX(çð?h%õ& 4.D¤ïÜF.TíŒR=$@¢ëÿ'‹BÕNÕ 0º¥T-—X@/;-B¿#ø¬\Õ¤FÒ(2u8¤mS#ÑÞÊ^3}‹ãÐXpÙYnm«›o6ô©&1U�"CM¶$+±ù&aAbpMãÄÊ,ô ¡®ýN59t¾ +Ö¶§…mÄŠì¨Ê™4nå8ñ›!E]úŠZ›Õ‘zˆ8 /6¥ø÷kà|¢:ºd娿ËШË;7×üä@·±V 5ðÝÆ äó#áþµ~� _¯.‚*êt­9™YÓ"wEk°�‹�ÐçÕµ9˜Þ¢ä‹PÁ¹¿¶�%š—/”î8Gf£»'d½×ßô] +׫¯†Ê6R¡ù +΂ŠÜOlªJÉoÊä¾Iï®Ï¢;+Û Ý*Yç6©�cG:†J�s‡ho?�Ÿ˜!‚PÉÔ¿GVÔ„0êÕÓ£|Y­¤z‡qˆ‡È;öÂÙç:"ÔÉp:¨|0ÖefÞ3‡Tc'Ž­Nó»µi�²Q¾Çm†cU¾´°¾ÍÙž$uçò}Ã=BÕÞ©ÜJu³Ùm|YÚ¶íðÛ—ù€ùÝ&žçy¿m‰0WòšqëEt˜4ã‚õBD+>³…ÒW¯+êɱ€7¼0+!š:#ýèCYúFŽŽv²X…ÙÊzñÛå§A‹X€pÓœ™†)L„Þ–ê&âí3™Ù~¥ì_�èí†STºýnm>Bòý¶”l sO8õ¯ð­…¸yVÊê+Ðì‚áTœXÇéºG 2¸Ii‰È„SèÉ»Z¿EÚ¤¯aôp)>Ã)—€„åÇ—FŽñ& š}ÑËhc½ÒÃ<èy*ê A3�5KlJÒº1øKŒÏ¿åG±å¤¶À:Ô ÿ;vØ\;lNCšØ= +£0—Mž'홂ÂNÀd%›ñüúnfJß‘ìëÔßsé^„ôm­Z~ofªˆEÜúràóíe\ñßÌ\ß™%DÍB½Š†b{»o>ƒÈñsÛ ÷…Ÿä %Z›7fˆm á±Ø^%ÙÞ4~ÞR##=´Ì¬QŒ\ +Êk[ À\J{ƒuoÍÌps%··Hw…]Õ'Fè nv…/P€AôÑOFYõ›ˆìƒØŒyåt{Ì/Ø6Œ}¤ñ³-’H1W�É“·ØFìâ[¦mñuþÍø;À˜"Ûè7KyRܶÁnâ±Ü|8 ¶mòÀÍÄÆJOrm0Ð’fÙZD�²M2Á1MÊ2I¾Ï<ÐÍ‚lCÌî€Õ³úc@ª–iŽ·mJÁù%™é }¯{n‹ <œãW©cÎ÷<(‚O«•ä¬b�_9ØÔÊdµly¼SBsÀ2:òL@ =ï<ðɰèÂyMo1�~¨ëå5Ü ÇDcǃ•�¾)t€4B�BáX'—i£8�ø±.™H-ÏÉ|â&�Üãü�@žKM~o˜•S¹”HJøD· :¹@w7š + �"¤^¹GJðßìo)GcKDjêåüðÿñç†[ð[÷D"×i‰+œ\{CU{¶�?ѦqZqŧÌâ;ÿ¥þr4ˆçhwVŒGÇúËÑ7MÔëmå¦Â–*6Æ�� …¢‘ïe¬Ûw7 +;T„,G×eÏ0Å(ÛN)2ßjºÐ ÜšITnÄ€3$ל—ñ �Czé\9 ¨”òC�aÀöÜ;ó>M?%r½ßïÙ-2ˆ@ãÇ +|¬åàU)æ`ìN20{6‡ñäô›6^TŽ~#�ßJ§¾Ÿçzàr óýU쉿!véï瓱p€¼e[å53,o?ƒCò&ÍDÔŠ‘|Íñ)Þëí\³ŒåÒ¦·Å~ +û¨ûYQ�`rH:åd€Ç>¥x–9>rÄËsšžgC3­îµ­ÍÄ–¢¦¦n4Ï<‘J4ÿ- lA Ô°h×€7˜µb®´`ÿÅÛô6 “BXooElzÛšEZ¯þ3_‚“rÿãeØÍmueB’µ’V ËÅ˧�Úòáé7ôQ!K‰´p1/ï#ßnk�ä•,æ%î×Yµä6�©2Z=��â-*�?DoÇ)zc‘t!í×… CÓEØÃÑK¨ryRRáUÒÏ +âÖU.Ø{“úW)®S!³ÒL\÷ïa5„73Y{Ö#É.¤ö£¯.Sárïd�°âÖ™ì;°q磲¨™‘†ÁL¦äÅ�•ó-Ü1…}Nh¦áË•Á­ÏŸMEb šu¡‡m:Ñ‹K…÷䜨œNàûˆÍõžÔaõØ!dÚlAmUþU¬z" ¹SjI¨|ì &ù}ÖI ʦïYS%7](mdÏä +W¥ c�Ÿ¹Æ—i«`[Fü»/(Sš­ E@ßùfVWRªÁ¨*TÓ;—3 .�ίŽ<�Üã›ÏàÈ©”³CÛ)轘–œÝ!® Ó¶j› ð<»ä¦�!¨­ròÈ×3qÔöýµ¹Üî[qw~‡F+"0¸¬r• ðÚá°×†q˜¥[¿dÏÓ•YEoKн·Ìqq\@!&�eZàe•yèaw´þ¡ +±Æó3»õ<6J÷6Oã + +öèÇЊ�Zªk¡³I&ÚZã¾Pæ'kH¦ŒIÈ$µÔdf!>¡] +UqÚ¼_aƒ…ÛÁØLKË<ê¬hïGK² LC^ËéFÛ`8�ÆOoîý×0'o¦×æÁÃá̧ÍïJe¾Z5œŒÔÈ)ŸÉ�m_ÚÚr9[[°Ó�§¹NBL Z”h|кXVtºÈæ"Tã^Õì·Üé‹Ç.yB es{[†ÀB*D#r�“b¼ð‡@þ`—o0Hî亀Ñ õ´Ç®Î$Ȱg9…o¢¤»Á…`csöá~BQ1 F)fz`»+êõm�hølš Ô0bµ�ð»q„Dàj‡•Fؘ©Ó*¼ä¶ßÅ“0q2KR¶‹ 1肺ÏÎÂúâæoê Ô»ƒÀPVˆYa<æìeèÕ?·Ìó·Pr€†N°÷ŽÆI²Ñ\¶·”Oúš q:]Zºò²q”Èâ ©dBߑĄœÛð}ÕAŒ2b¹“¿¾ˆX*B“U vf*Sy¹41x±L|ïxyÂàVõä¤]R B"n¦.ÁÁ”šÚh´Nº¼/$9È=8±rÉÐ>K^¡ ŽÀˆŸaö“o-µs^"([b +‚¯5ã§KÙ¿XB~­ °b“–=Ñò縿ä¢3™ÀàŽ‘m.¯²ö~¥*‚’À¸j@B'glÈ®y�(ú<›¯ ¬àö´Ë~؆"*§Åé‰Í5,«Mß@ &[})m .H9ˆ3 &ò¡öxg™Ú…K_}?ÁûNÆo0‡®¬€°ó¥Ó.¹qt3h�„îMüîjjgyb$©�)ë/P*Sòh×*L,U$~ç±ýÁnݲôe6ýµHØÁ¦Â;5S¦&;HàXÙ!¥’uK¥Ñó¡*5uسÛ…ízön29êØÞ˜ã¨Æqì9Lús…I³9l¸caÒŸšj¤qØçÆ¿Iÿm÷ðÍaãĤ}ÄâM‡íÝÆÞïäïæ°Ï�=>“þ[Fo½ž[ÅÍw^üÒM„¥ 5Ê~c¯aJËðHØckjl63EtØ!‚´r©ýRØWo,|àY5ØE)D‰y-ƒâ°�5ÒìŸVú›™Ùb3¤uÐß{×9$ÉJ»*Q&q×ÉÖ{‹…ôçØH¿&§ÛpªF[¦0 “#ý¾¥1ë¼, ü ·:åÎìmûºî§ªná ÊH1i4s?¯ŽTbî5Ã̽²#ôc2sŸ0±x»IgGÆoCû™ûÿvÝ#bîï=sThßøy” 0 +læÞgìš±1¬ì _\‚ÊlÔÙçk¼ñ}­sÅ®F»8qé$ãŽ\V&PFÀªõÊí¯©¢�3ÈÆb|3ˆ_‡N&¼Ç>àäžF&Sî…\:Jf}ÚSo¹£‘`žs°÷S\_Tä(&[Æž]�/cø 2T¯Ž1P.Uêzm÷êpÚYÀÜ ü*’©j—îa³ý~lKË8_QåÃîgªpU~¥œ=HŸ•Ÿ¤}¼�waÛ à„Á¢PŸï`Ëö¥FOËS�â³-Ô!Ä�Œ©ðšÉ`ä� m . \ݼŽqpa¯ÆÓ!îŸÜ”ìaç±уë0(´HE³,Éf!‰d/‰B²·ïØÙ"ñTÆ$©ÎûÖá„9�o$PÜ+‡Éý;Â5ªˆmŠÀ®‚"Ï…ÎÖ”(¶0çvTm9«¬ MKF›P÷áPë¾�ðxºˆš°íB´F¨ã� ÏÛ·_Ÿ�w³§Pâ½Q¾|‡jÀa ´s[‘tD]»8Ç;CPÞCÕË-ñAÿŽdJZ:èv ÅHl]‹žÊ¥(÷ަïÛU&Nk9]¯Ál7Õ©ÄI"VÝî”8ÁÊqfä0gÄ ŽËñ5f'³Z’™£ž ÕÇ-œŒ†ôbsz ÏâàãSákç¯Î$$À´"¨2¯ü$Ð>GŒ믲Þ@r(¦ �Ô£ré‘f=&I7Ëp$'EÆ0ù‘ØÓEi·UÐÿÀöŽá$¸8p ¦+&Ý9¾ÍY,iÐÈ<²d›ô‘ÚO�Ü0÷7Z”áðpc%ÇÃ2õÕ$¾>“´å…Pçæåj> W_ +ª?-*8¿:øá‘#ƒ\88Ïhá=_áŠp±æhMÈ)Ä4ý YÙFt£µ D3g”UcZ¼u• 1œKÏÓ*4W8TCDû¯j½;¢!Ò„ÝQ·L®„ ÷½¹)ƒlA¼G —»¦à·.öÿ€æ»9rÿÑÔ�ˆ©hÙÂÚß×_Ï4‰œ•_éÎ(–‹úE÷T 6ÈoŠ_ÈÚŸgkrv7?º¬‰Hnµ }èøØ´s@ĉÄd¶W_ ôHVíØíÀª jõRÍÂÇÿ x¨Ro„<À¯%å°Ù`ÌzWüßA)'†_¤£‘”Ä—Qñx²*Äûþ«8vaPe‘«ï²'-Ãð‰Ò$I˜ n 0¿•QÓZào:Ðì¶Ó;‰·Wt_ò-j^ÔÓ$8bAnã/‹£ˆ`À2ÃPéÆe=ÅÕiƒÔ´ ò'(Î �5‡ÏeEE@\˜â"0-ªæ¤wŒ¾54ÇvÊÖZ¸A#AîÅ ‡Ò¢f(Iûs•‡FÐ>ŸÈ3í gõÄ +šø’@Äb;‘f{;¦·Ã æç§½II8(r*—Þ /G@y"b´‰Ü´‹Á=�ÖzaOHEãÉK¥$�çä«^X–¤�¡Ú.rb)N—=D bá!7–¦ScõXIH¨R­W(9†oe&h +Z¸î4ÈDnéhUòL*¿:ÌÂÂ"ÌÄ .X9µ�ûÀp%24ŒØ2&¦qlÕ8§†²ºñ]ÒâÝ?7AÑ™µTšU® À'‚§ÿÉŸ¸qÏθü3epïçŠ2J�¼â�¬/ÐW‰“Œ|!HêIÎ @®¸=ã,@÷ìÐÝÁÏÒÅÁ–’,¢”t;ÑQ·"¦lœ/XÉ8:>XŠ[G‰÷6¥¸à-Â"�Æ�qñ§¿ Å-ž¥Õ�ã2aŒ 6ÌIȧ""ã°G¿ËõµÈ°"Ö�Wé˜¹í± hÅ}]‹S¤îmÔ7ªÛc[±©ÔÎöˆz8ÍÛ•À™Œ$D¾‚4‡rtÿOóý›Câ›”9�•úß\ô04beö´=&<{ZÌ9fÌa& ¨-.UWwœLÇ¥Ñ5ù»BÐ�Hç{—1\ñe¤ˆ9B ³Ò2ã½ V|Ø’ª¤vH+»I´~bj-à‘‡¿y"5 ÷vÎ[ÎŒ%ZõU¥Úe>…©.Í£«=q¸ Ñêó·f`‹_/DÓüi ‹Ê¶ïé�†‹þÀ}ÝF� ŒÌOâÂ�X�¤V¡|F¨ñöÃ}»/‹�¤VFɲ$ν¥�>#A÷Ùp‡ ¾š˜ÍKTa�f¬"¨{&DÏ÷ Ýë \,¯ž9Ï'l–9ß�³Q�P'(�ÿ1IgC"ø'8׋빖Ÿa4‘Ô‘$Ø®RÏ0`–|žã{¾òÄ€ï#´Ñ‹{Û°«üµiúUѹ^_ý?ä�ñt7ƒj"c>+OÕNÉc5Ôä$9˜ÎÌá@Ã× Œp*Ä�³ �E&ZO__ùEº ßôþZ@>a¼óŠoïO óïJ7Ê~‹V‹'„w¯ +ð^@ÑBOŠÌYÍ×\ü A¼õ�êTÆÕÑÎT €à`4‰ÌHèÙW"SÕd›•Œ�(ûkŠdX}ÄÀ P×)aYÝÇÈË'xirj´½�V›x›*ŸMè#&JÀüDTdîÖ^»:¦MÅmœöFT2ö{j^D•#Ê©5î]Õj�Ê„à› ¬_ó ¢…©±Ð¿­ìƉuÓ¹U�·~�Bo.…‡d`ÍÏ\Uýì’MÔÒeþT‰Õš:L1«Õ¨weaÕLÐ4ƒ7`ysøÖßžhGêé—õé>®4¡ûU79¬_�í­ +±VZïySüR¬"·2CÑÌÜñÖp©G+ǯy–m”­ö2—$8Uqsáí[ô®dUªaÄ!òmÌ!ë]IØ(ªî)f¿€[Þºâ¥%GgóLÜ1Ú­Jݳ¸sº9õ§x¢˜<õJ¿m6(?ÂèU2ìµ$³`óɈ<õ—gN ìõíOÍaÐâ’ÝaŽëÐkŒi9¢G�»å¤É…Ìa[iÌÙy-ãj ï­Í�Ìb<‡Ÿ�ÛÎ W¼)Ö¨¡¤t;Rˆ˜öJA —õMÎI뀬Ý[|µ& +ß*LרO8­‘ ݽÒù} \Éf¬„èáû + +{ ½N´g–¤èaþWâËÙ%ñ(?ÙY¥‰Œû~œ Ç•ØÌ9»Ø0ç#`iV½ÄÙ}.iiæ¥9@�ÑÃdÃ5®w;ýÐáÁb>qÛ›—Eçõ›Sì#ˆ�àageg¤ËC¹aóC·`ÊÔ¯" •�íΜ—§�ÓÇÍOÂ!VŽªwLýë¡NV›>Öä[m¯[Ùæ¦Žó̤[MÔ˜Ô}zçPq¿øoµîL¯—r?rV3«¥�œì-9Ê)#ê�û+¯q?f–Ì(º‰7>”Ô/êµ43Œ@óN->0BIÓÙœ©Ih9d·Ìu ”4™SÂlJßu”Óú¤+ʪ…ºOP÷›ÖNÙ’xç"žÒ-CçÚßoQžV<-ÙËþȘÿKziéXK’� ��¸�"bÉḖ€è^ΠBÈp[iGuÓÇñwË÷ÉÉ8äN‚`Ý”ÎMì  sHWºWw {˜OÌŽ78uËfŸ²¸™î?6q!I<ÅF�ûŒ¦ÌååôÒ¥‰÷ÓšKhΖØÓDH�1l"îi†E•pÿ=¢ëãîª=ˆ7UK¯Žý“+ï:;iÒD-wŒZ¤m9Q •ŠI6‚*ø¸ºå¥Ój,¿ŒÈÑcº¿øæï¢ 6œ°)Ì#j¿¯È êS ü¸ñe©¸åÖøôÑÆ< ±ƒc„‡VÖ8<Ÿ5»\ëIË+Ú¡´érÃ2)x2çãñ)¡ƒ½`”n B'Ë�JÊ?”ŽèÄM¯›š úÜSQÒ8|¤ëj¡„¼Á¦G»úÉxþ±™© ñß§‰±Pó5 +¤§=01­Ðš5'Lï°¢¡DCA”†Uë,ë‡Ë3ö_KÖ“OÚWàTN£ŠKûâèLã€F7Xxõ†ó,ç1ê¼ö÷dÒg…Ô›„+d¾®®ÚI|ÑÞż ‡ÎÓ@(æÙ:Ï®<—ùnéC�”!t@ +²/’!ÀÑnüBxèáŠ`¸g¯(Ÿ'¦“Ä o"‘sæ¡Z¶ß@)�J'í I“¥þ*+]¸Ðω–ÎŒÜ%´f)«#¦+.ôs$Â/ªo]/_¸PóSVË-tQœ^›ÐDÔfÌ“„†ûU´ìŒ‰¾À¥"U+6U9gÓ`Bã×”WYv™êSòèSû»Z½¿üiÇM1 ö4ñk¦ž�4#²N›M.Eõµ£n7‡98(}xéö‹ÑQJpÃf8Mˆ¢)�í©oª†¦©ñ»KâG…¨i[G/?ŸåXñ¦‡HK–pÐ4F +`,ŒXz=/CëV«!5»Úb o†ý»|Gò‡Ï_¸àÿ{¨ª‚3’¤udŠB—‚\ŒqÛvÕøDàXí=ÂX�¤[zÚK{ +¶·¥Ë.Mÿ �V(‹T·plm̦r:%#n &÷ú–¿yPìŠz·Ûô‘³+Ù¿ÍNš Sœ™üi˜�};Œ’ëtååIü¯«všÑÐ(â8ÙÉ \ãûI�Ø~††€î¤�)3>¥¬†u½Ö,ðÜ¢dÙHAÂÿê¼+y!—4SþìŠõ�À&Éûý© 7¿y3q¥i™ÂÛþWìÅ©rÄÀíkÿãáaù\×€æ§"³\Ú¾�Ûw[Úw~?î—ñöægPÓry”7N6>ûX-e­Â [Æ�Œ÷�H†+«8ÇíaÂY†GMh�ƒDj3Æ&6_çsi4 Òs@Š©Ï••�HôII6ž½8ÝÿH~Èú¦VŽøƒ;_9K‰Ÿ»ÿi¿{@Â�)£EK^oþR¥Ÿ©™ªM}é`¹¯5Uqìv ©ÞåS̓‘+±[W¨N¢<‹.“Á0è¸R¯ÅÐö–—`Ñ- 3 FÍŸ>m¼$­èVãViA [“�X"·Û&{¾±ƒ‚À­ úz`Ð +u +Ú7,`ý$©+7õŽp°¨Ö�{bÆcóziÏpJf¸>Ûj¹”<\°L• নJ/—8¢.�# àæt iªIq_ˆˆ‹k2 |mµH·J»pÁ¼\êÚ�Ÿ¹úÜ7ç„F«²ßµj„k^(ÃtÖ¹æ˜î´ÀB¦y¡¶„PD +iüƒêâ!¥Ú^sS8_4$¤|€YaÝá3ƒÅw S8„" +]”›œŽ˜Sht@+t7ô+I_Ñ+D¶ZÐÇÛ)ìB®T8v +s±Â5x6¯o^S¸i`Êöa#+§A{Wõ]Ôm¼wÎ%4ø(zÁ «‡a…`Þß`…ƒ‹Z4—BoaBtïCâ”p(Léz·ï _;p!Ú(C +cœšLÍ%3CóaEÁiy»íV¸'Ô–³)$¼––¶M�‘� +ŒìOê°ít‘Óé:«ö©�]Ÿ*þ¦ZyÈÀS�rRS—Z2.D®±òI=1© r…ß#Ãz.Çø:hq±!p„rÖeMu´«U j9•MHÓhÜeyC%Dœaÿö×yœ‡¯¼¾ÈsÅéO#ÍêIµ�|s2e$À²¢ê5À6 ®usÀ‡v€«æ¢zô ,Í�˜ÍloF‡µažÐ]…†~ß?²#?H3¤&×@S�Vþ¯ 4Ãä ŸJ˜l6ƒUBì5Í*�I¿Z€—6ÍRïœuÂñ#ƒ;×%¶eÌôrÕC]26‹™Öùaüá ‡eßÝðp’ Ì$æÓ2 ëb­nZ‡ÞëgÉ•@g•8AG¤.¦g�ˆõj®#m€Ù4ðî`#²;¬ªQŠ-"(<v­ª +>=3¥*Ic%šÂHÖ )¯+ñ ‡Kož^íŽqPË’;ǃÜÅ4§Õ“ç‹„|ÃWË{³dK¸„¼ÞMF‹ðu)ö@€W‰6I)Ý'lT×hGuÿrœtÈÒÇk?dGgó”É# +ÐóÿÆC¢WèâIô ÊŠ\¯¼°†…D.`ÆÛœé3æ­$qÈh‰C:¬~ŒŽa/jYP"kW0§¦³¢íöñž-1reºâRó ­¾MÔ'B+Ýí+WýûŠ%!ú=á{Óö4ß{×çF­ôÒ&{9þ�P gàfÉ~‡0…ŒÕ …aç¿”l�¶ÝÅOKÛI�½’¿[@��‹‰^a!�´éUî¯}WôjèvÞU[¢à»·HI¢WYÓ«@î‹#êñ¡²ó(û?�{În¤,Äj²zNW*vô*›^ú +Ó2–fPÒÌ'€©ÞÒH�hD…f+wfIaÞ<ʳ8ì‹n4Áá- *Lê7˜™ÔnÓˆªý$äÕ�ª¨!%ñ—:'�v �g@¶h2â{,-8hÇîE:0ïðù Î9dÀ®Þ õóf´„÷•ᚺ½úñˆLechš×<`ü²Ü�!0±.³)þû›„Ä�àu’]ðkÿ�+EºßºBçÊö2¹eó(ÇÁáïtƒtßT(�4M©gDwãÂQÐg5Dš6[39ëÙ†ˆ4s'L^1@z²%yðVÒó•E´ÜHKtgk Ú=êÓÚŸŸª,g§@>©_È–ÞuÌ~̤™d0ù¼£'Ý}“}"liÚtXÚ'åw{Ýqµþ‰ß �¨!yI>úÇ; +Cúû£‚G9ô|Yé‰[ 9ò>n«WI \µýb%�²1VYÃd�¨d\è6/¯ž17QÖ@÷AŠ¢‹E¯6à!±‘‚%ÌÞW¹‡2I†9âº!Rì])Î,‡b˜ó@ +QgÁ¡ÞxÞ/üp¨ü§ÑW Y=ÚP=°kd_s ZR««IÓf\byÜ¡P–ÍqÃrÝ¿¶cÞwMð1›âZ ëU,ñ�N’Ń,}Û0Á¨[ñCI¿ Ö +³™¨ÿµù÷´�qÄ”j”ц)xã0–`]@pÚ‘[ö ²Ì…ˆ½¤8_ h¼ÃK»`‹sh:Ḛ̀]3ùÔ!0ûÀRL›½ˆŒ‚i8ꃦJ�À�%÷ U îIËSzøNZpµXYN—=iÍ:šZ�ÜI»óVq¯¥Ü!«ßIãÈU=i„1÷Ê~*ŽS†Ã?m×ßGÒ2NkÏ×�´=ÄÉŸäíÈ€«,èØ*i‚«4\Ó¯'�¹ +؆±Íðøðv¡�?ã2¨ô¤qê,uây €è@Z¯Aƒ¸Î’RS¦i9Ï[¿ìŠ}Ê,ŒêŽCQN÷¤qšh¥vÒ˜öEKiOÚzº_¯`vÒ*œE=i‚쇡;i7»ÒXõ¤MßoO˜tek×/C ³zÝzn¤DÌ㢠 »ná7¢š/µ?¹I—;iå³Þªêµ A‘Ý“ÖuaŸÀŽË¥5„Äàý6Œ úè®æhöæZ * +uÐ8œ·JÞ“6[uKoâ£k5¶sOÚ–ô¡'ÍuoÅöÇÄþG¯À²÷¤áõ!ëEwK”îå«�:îþŠì^ðtZ —Mã5§`UåB•©„ŽMÂØ!ÚmGȦð³J°ˆ“‚e¨½© +ÙZ,Z6¦9¼ ƹ|ññ¤ãÂÙE”’�ÜŒJSÁuò>œÚë7tP) àˆûgcÕÚé,7v ©Al­�Ò:cZ¢*¾i©Dõp†ŽmnȶTãfN±ˆ[Æ…r©zµMEÜ  ¸Û*…§ ̰6UÕì´Áµ =Æ™]É—7š¨œ +0iJÉõú¤rh©3‡é2H«œáa'/¹þ8X‹àZ?]Œ;�’x€&ZWNªºòR¯m¢2åA:jä Ÿ8I -ÞDâ¿#QÌ3Ž8ñnøJ�ÜADN¸3U±2çf3^ðîVü³^N%ô�Xñ|¸Géi|òéÁâ±’ÅÙ, ÛÜ# z£Ž³aAqîúš–,˜�Wæ�× [k¡ä:6¬ª;±wŽÌ’ff‰Bb[¿±õéxÜÉínÁ6©¼Ð�z|§y'fž_.cµ2�ólz­�±tb¤ÇsóøÐQ>Eȵ{Ýô{à“oìߦMÿšr%ýÇ‘;ïmG©5Œ/ö!åßRH¤MƵƒäcz0¸SLû—nÝÆa>fQ<]nåžPfØ~ÅÂ#mîÃIUÁGÃ?IRE‘~×êo_5¢ëÿ�>I™À(wˆUn` UQ,Æ?º@¶$¬°@Î @vNƒQ, L¦Êá‡2ˆVNéaY ¶©ÉÚM}^vÙ&t%˜mγI\¡c=0�¾Q‡JˆbÉÛhc�rÃÀ,¿w³ o�êuàÚßj sµ@ƒÎO B]PóŒbÖ]ù_òÙܹê_‚sEB#ù_’Úhqß³? ºþ Sþ_ê–g¦A/×nÊóֲɸöÿ„ûO¾ÞÿRÖ¦¿×lXÆ0ž1 *6X½AçCÅp3%Þ–�.óÒàùRÎk.�ÚBèo þ=ØË¬Ô-i‘²ò´I^z�¬'¢WV¢Š€ý—À÷:hÆo]ó¨nô�YM-P2 ‚’6á¬_ œ+x.‘KZ[e} ¾—Ú�FÒÌ¥"íü¯`èŒ}ÌÃJ·@Ü�±X:üÆp$TE±tü�¬ð#ÈïÐî©™5ZØ�ög,ÝmDœRµ6�ç +]À�6 ÑK》&1V:NfŠ¥ ûM¬t¼ÛØ´`éÖKp\$zV:аt�!YéS.,ÝN-o¼QÀ^òŽWÓM·¿ÐbãÝK<ŒTzÇZÃÒÅyý\½;Ä…J–-;]®€:cé XéÈF,Ýu³ÏÅ.™xJÝV šÍÕÉ&':f9‘åFJMÉò °*¹«ÛáÌ‹‚á”0K·”¼Ò5Í¥[éì›¡Šš3€‰«J‰•Þ1ñX2�“,âRëÄáÜím¯]ÝKSDn%íŒ]óFUÎ{:ú‡Ç3V™ÙhIS²…‡K�pJ£‚Pç¸áÖPŽ€>>ÆmvDÃs¡yd]á¦s^¸‹A*%ž˜J£y]þÐg+‰ÕÐJº1jKÉÿŽQr¼ôj¤‘ÚºáR­æw˜ª¢Ò'Õ;ƾ†tÆºË ä€.¥´ÙÏŽG0œ/A›Æšm_B¥@�/G_K”•®K@¬Š¥=+í“ú…ÔÚ2Œv[ +ïiKÂȰµÛš,mÉK¯‡ê¿¯-ÙjÒ–tóøÀNCȺøÍ³þµ¼AŒœù0•§ötê"Ùãú.xƒÌŠ)õŒíÆttÖgÐúÂû?™kˆÈ:Ù‘$¡Ø—«˜LÓûúôª`´¾œª=t*®¼]‹×–û74âÓXôcJ`,"I”Ìòð¶§&õOIéyYÚ×ÄÀÉ“¿”òL:e=y²‡öÉ”¢Ø3mûšÚŒ@à®Ý=õ¦<1»�ÆO¡… Ê>ùÁÖ}‘�ÇÌÓ”F½gå€áNüj²d~gL*˜vç:nòWcÅsÁ×V�õ¤aíf±-Ñ@E¤ Ëm[ @(E +Z¾ò€+Gq( ­ þ™uD]Žºš5¯U K*»O�dêc#°q„º_èV®Nn»55+§jŽ”[mµÇ"œÜÕÉÈðÎ8D:³àžpáÙö0ùL^Dö÷žÙÄ•ˆÅ�ƒ`ˆe‡K“ô¾—] ñ¼> +#ÁçQëëùÈÅÖìÌõcž£›ýh=×@‡¹-A±)‚è:ˉm—¸ÐRfk-<™<Ùùžƒû‘Z³ªð‘žJ–?»îKvb�9¬‰)ÙDcŒ…˜˜Ÿð¿Æ>—M +¶Å]r�Á|Ž×Ì_`„ Èê Y¸@wÎ:¹€«:Â\p�Ž­îPUwv8%ñaxÿ}ToÖ;Ò&×—ZRl}"é0q·\`<ÏÜ8ðj<4 %ÐCk1Á(;¯¹LÝìGeýËõ:m­œ6 „þþ€‰j¡ Ê58!Dåúª»Ì�F#„cþ2 6�(Ñï´1K¼ÐBkgºäŸþÍêC#÷½¸ŽuBa1ø1C˜ÎM +¬h3†'Ñ.r¹ú æœm:*½»ÙEØ\•B€´éF6 Ê:èI½ÖGǤ(ÅÐ7%¾ïqÅ‘°Õ Þ¯\‰…ºd!fm¡•C2~Xçc[5s¯:uÙбUãÂ<¨Nãa™oVÿƒWo6GÓÏÐDZq«Æñ ­×”¶¾U¿™c†¬šA!®ûlÕŠèÎàŒ(ª PéìPà^>håË5eCò�ûM¨£Îé R,:vû äû#� +P ëŒ1{-V°ð„ãmz¸ü^@È™óÕØ¦PàZRù�;SÎ}È(I(�f êi©¤ùÊ×�ÊNÓú"‘Ði 0aL™'1OcRyv¤Ó P`&ÄåÑ@@3Ч÷àq˱eÛªÁ¯úà4Æ­Ò2gpå”åJbØyدzµD¸Æ^È.�ò¨î3§=4jˆ=Sò-‰Q„f Ýÿ¬<¯û)Æü8šÎfCÚËÃÔ �„¢û +rDÍéÈY¾-—ˆ©õå™” 8ñ ¬~¼9»Õº;ﲫ=�Õ +Èà˜Ç+’š G�6Í7Â8Lå¬É~&˜ {¾:­0X�0¶ÀP¼$$¶¹@‰^pe+NÊ2‚­4�o‚zgçQ�¢ñ[®l¬¦X&+ÞÏ\§áå¦õ½ÑÁ£…ÕX5_ãéï€:…>f–è�s/ËK3íD!/WéFGÇâÅT±²ò[G· ´F�Ë9@wôD®…‰A�QÔÿ:(‚õ㜠­XG‹€—@NK@ï2›dÀÕÙ#Á¶ËF-ºa¡5Øõwf )ÑQ­3»þlç�Ú ¬²FNqgÖ¹¿ !qUC8Æ Ð«WÅîgšT0!ǰ˫‹šÍ3C9!KšŠê¥�-Þ&Íý{ìù@«°Å�õi5þ  ÌwÁó}U˜ŸKW¿eV— ën¦¯PŸ†•½g¿ôš’Ôtè«ÑýÙ§9z…[lñ_‹ùÛŸYã–u[r–óßz431© æÝ.ƈ8)ŽH~[1ç_ë^}ñÞq¿ÄU±¡šßvã š"•Æ#°Œ5ö®„ÎYÙò.KU×´iÉCµ��ÁÅZ¯R-‚pt¤�¤åĨ§´ÃޏØ]þª4.îàÐhÎúÞÀœøkæÛÏ>q†Ì4H:·¤C0Ÿíü*âU|Cgεõ÷ƒžà‹ßÇR@®kèi(y’íâ…^Œ/.66ƒh‚/õsw{&ǯ\}¸ï¢§L Z+çtEÃÒWã+kÖð"°�ºË"l,ôkDgûz¨¨ëçHâW«¹†À�ïÀp¸ô84¼–wV3#zñ°�æïT}&Lt•¸Ê^†q4S!"0«`ãЬ@@…lËô +¯²¡›‰B@¦@Da³Þu¯ À ÚKÑÿd5†“B“žÅûnL!Brb °!p€>u(1Ž,“ºB$¸ØI¬"e5Õ'p껡�3Ë vôYÓ�y¬Ž+�7«)­±16é±e5'áH,iV# +'£¸?âPœŸègs +—øPôYv 4ì.Z=sϵBg@»¦÷µ¹ð£î?Ræ™ÔHèçpe`Ù’ätåéù%•7�×B¤+Iñ+ ?Y†(‚ù Æ™S¨ßYf2ø©CÌBä�E�Ï¥Cy/s^q¿ißùÑß’d‹ÜDäið®ÐüQYˆDŒvE�Éc]äW no_²C¶D»¢d˜g_wÇ-Uƒ?¨Þe˜@쉵]©·}xiIÀÍ‘Hå¯.ðÑÁ*RNJN—T¤±Bí„?†sÎ1CËJ¾Ãcëp|{»è´ð‘ó5 ¼Ám™jÚ@‰—½fJÏya�à†F¿ÒET°Ý_ RbòÊÐ�4Öèö„—x¨52gõ>îĨqöVuÖêÝÏ3ÊŸTœ}Áº‹�¬û’p ´’”{fhRÀjMË,¶ï¯_k_)Ç0ÖíyÅàŒí¢^f~�Ç*¹Êo%ŒKA2…GCwçH¤‹ÿ¬_¬*t�€œaºC ëˆé‡™øÏ/Ø©wxFçÖÎýO:¸C�íÜ)ž9%Óë%s£›Ïb»÷ÎððÈß|´ˆ�¶KÌGñf“ÁÐèn>ª %jZ*Œ�" ùh¦dƒÏZùÌGi›¶.çñ†e²¹N ˆŽ*mGu>*âÓ�ÈÞÆy†Ú‹àÞ¤Lt¼ñUè1¢´Û†/ÿ ¿Æùüß|Õª~ :5H¡Ç±JÖ™þMÿJ*S%Ï݆émôM€& +Uɰ­B&׊1%¢$úQ‘ó'GG¬l<žN§òm=+ä­—ìÇ>m½rÄÓˆ8ƒn6OŠh›y8cåŠY}�º�¸ª¹ŒÆàEð²�¦ ´4ÓàìáFcœ}„Ø�Å›�=_†<Å™3߆DJ¤-©‰7&Øßÿ¨’h!e±=–`áF–Þ¬—§¿ä©§_N8Í.�p?¨Œie³^ Ø Ü<'?ñ(ûêÓæU¢s;+ò¶Í¨‡ã]0RJ²¯=šÚ`ÞV0¢|ðÍ §8ÉLó,SÍ5§u0“:hq�kë wϼpä®EæfÀ?gàj�1KuÓKœ¦¼E©µŒ9\ûÄ$å¹àètÇ}ׯÑ\à�ü„Ñ;ècUL¥ˆ$Ð'Ú`ÀÎc»*<€¾uãE™WëPÙ+¤@ƒœ æwÃϺÀ=�‚#/¯óü|dÆ*JÛÓÙ™λ(×"Ê·�¿òy5î +§7«[£Ð²‘¯d{5”ð’2k”e»¢n0¸§’X9˜ÃèäG‘TæbÓ™sYk)_¢Œ©�<�}l—ƒ6r<áéÕQw<‚}Ã_v]5‘p¢[¸”.­cχ&Íõ|a¹øT‘ê’¥® +Œ†*’ט^HׯÒè�,kv¶Ó-°C¶#eXCe¡J‘“ÌûŠè]c’ïõÊROoùŠkÌVËy@–ÙuD�� ô¾76t†õ‘ÉíÎ$‚v»9óä"v¸ÔóSL(¶g4ìã +mšz% D¤ÝÀS—� +1¢LÁä„¶¥ +Ô�’æâóNÙ‚×áõã娞—­M€” Íhô´4A!}ž…ÒÜfáÈ~5Ûð NTµªGïº"[žÛ¼Îë¢k0u øøxr±Mçë_ÊÞnxö•ÈdO´ö-Å$õèwP¤øñY´ªGoæhTxs[ã*í�t§´aÁI/0B²3•–èKÐð³€�IeL–O?ÆÓ*²ße¬„å ð˜É±¡å15sX�¯_PíçÖvÄe�X•�^v™”¶kY•vêqö†€Ú®ûÎF÷ åŽ+"ÑP:-Œ’óBCé4â+ûµ8K»LË6›§XiÃ*™¿|×û/¨"öÚ’8‰¸êIzç O®ž£®gøÏº˜Íé•rn@`æwÆÑ©œNÒ% ÑPúóØ=è`&·btŸ.“ˆS(þæ|}n“QÌÕ·„^ösD'Å?pØÇ¼6gÆFãa¯Ò¿ZÞáØ’‰–W�Zî ¥-{òwH +YšM0Õxè®b6(àÉ_mˆâîádéÏdL9¨îÐPZBÙ¸¾`B‰8aÁW?=üd“åMŒÍÜ~MþÊpRºòm^ä eÖÐPú%](�Vð&@tsåPiy¤ÿ‘å‚?‡ÐB™<†¤Øœ AÂ.{ýÊ–E¸¥U›>´«\vòRº£åš¨lCdÕõsŽxgZ˜6:ø\?ðâÒ¦0¦�&  ½?S°¼)Òº3_ãÒØ›4°ëÑÖLµ¥£ý~â¡ûò½âÃ"¢�Þž¶ê¸íì„<{ ™�+-o꓈sˆpm&®M×Y¦7pUM hºÔÇW´PÕƒîÛœÉ+¼]j+n•ÑOÎ ÌT»Ó-†‡BñÁÌ�¿Q”VOh›+ oÚg­Ñðˆ +oYHƒînFi%ð³<Úß#§ôEW¹Ñ (Є+B*˜v¤«ØN¢b;ÁÉÇŒÈõ˜¬ë©‹ÀE«]ð;· P›©íB·æýð6ˆŽ†ç°ŽöO\1t»úhïB䣸1RÁäªe‘É­‰'nÖ¡P|Ó(–ýa€dv�dv�S‘¾°)ÝM'÷ã£C¯‹„‚®‹±f‚îôUð_Hdr-ÈõÜ6CTø7œßÝÔà÷C$Žù©Bkq¼,9Ì™ÒÜö•-øEŠÍWDúˆ+„îø�J9€ÃxÇÃmÞu ïú âtý¥tì¶À �¾¸«i* á-³›5¨"öé"ŽynÓ8Vxw]^F!K¿2šôÝ%g²®DÂNSTøw@h(]Óh¼I4±ëC´ÔõoAžü¿ޏ'º¹•ó{®Á(eܤt‡RZ¢9¹mt=’ªNìM€s?_¢â§ƒdzB}m‰øä-WyÄ eXÐ4XjÕi7À¹-=5íŠÄWvÄ2æˆO å*¯µ£åüÞèZÃëÑÜvÈÜ2l¬›ì¾²¹ˆ˜iqÍm³ÞnÐTíZz×¹Íô–¯?àHX^õ„޼ѨðvM&èŽÁ0–cjÙФt¤QBé&ë÷—'´y³p;5+bÏm4WÁ䟂«ì„§»Œ.{fJƒ¯äOo|GœÒYÙܾžýWÚòµŽ€ì¬ä0b¶$#l4)j„d',Rj‘žA(u0�d„0�pF\Àññ t¢¨ìÊ@DÄ ’´Í3†L5›a>žápĽ­�01âHÏï2•#nn[ÝЛ-àÁ´ÓTèj +£íúAõ$ÝÓp`bÑ +ÏÊŠ‚iKH¥Uö–ƒÂ:³“Pi•Å3áH82-Έ«³UÜ–tCz•ý(~Ì1Þ¼xèn¿PÊæZ¾ËÄ®Ÿyˆ¸¸ñðlÐ6WR3ÕvÇÿÜf1]ööt‰ÆrhÜPÂ>è„*' FoæP–ô3ÚKĹm¦Šˆ8‡^ß+D�ly™a´îSrvÝÅÈxéQ”þÐü (íw‰‚â0õ.ŒÙ·“c´9)]øL»0Æ1™x)]Aˆö¿TV¥+ý�[\«¸ �¦;¸­;¸-³Y}6¦A÷™�½S[Hz¬Ô�›át]ÅIï~‘–O`¯Î7ê|#�¹ú§Á›6 äìmY‘-¯¥ps[«m»ÞjHû;ŠËä#¸H´¼†€ÿ,-Û¬JÚ®·`éi¡@ËG¶¨jr›$TCË€9 âœU|¤Ïío;ø£ éÙRìͪädòîªó:ñu’9ðŽÇöÚ A +c3Æ„pu,L`¼ÇÖj Â´ ��iÏ2ˆî‰m3H�(^O¿FŒ×ˆVn;ð˜Qè“ MÕ·MfÓ&B»ð4‘QI*".~U¤‘×–hm‰8·©/¹Ê\à1›u‚ÁbŸDüzÂ.ž•°ûB,î™ eéU(ªZ¦)ۼɰ«ÿÂ]wP)8% žA0X˜Ax(|<ôÄ.æz0v »…?T!qÇBK×àþª(öæcqýX²~RpF˜¾bñûã€VÜ2D¥å»T6m‘��8·q›…ñ�Úx!IìÞ‚£á+ÿqY¢»Mø6o Ófe ¤W.×׃Aû{jM[žƒâ4<»š©ö*ÖØ©u1›5”É]‰Þ­¸ixqu+aM™O3)=™a>þÓW“^%¥ì?€ x{9FzÔ�š\r`3è 4<;À%¼'ÅÐýÖJø V¥-PFBæg2¦åcQ T…¶¹ P˜6úr-Û�>`vâŸÛ@ö‚ïV™� g×% QÕ|ý²ðñÉŠª:á²ú½¦;xkHø¿<ßä¦ècé‰LVh3×Á>þ®RÞ52-=câï8ú)íI1áœcDknýóe˜ -û‡ ç;Ôxk"þ8¤àœ†08KBÝâ‹ÄÒΈWz9hÉmj!7»²�žÛ^Æf�˜Àø$‚ñŸ¤Ié Ãàz–Ð8ð�y¸¾ÞG|¤¡P4¶ŠÒ™¤´¥ô×¹­­àÍm/`¼É9»¾’šG#�“[ +®‡quQÒÎ.T|\Ãð|ßê[R?¾F Ù´(�óyìf/1ËsH¨_-9“¿Çhïò]Åm¡pìx\e³P§k·ÇmQ:­w–v/¡Ê¹-–ÅØì,±O;þ­\ÙŸ×l³îÌÐ8 ZÙÌr¤/þãê7üK�¢4‡a­IØ L°?ðŒ“°CUCÁJN&W!�•þ®Å4-]'ø«2—ýo eò‚âæÌîµ³™rñ¨ZÆ‘#Þ ÆžÅÇWLgÚ„ìÍ,H“¾•!ðÏqÿ'Õõ2t–.P^'ÎmîË’žXHzÊ}®ß”¬ßÓÚÀÞÞoñÿ™yÁ.íÔIº¬3frè($¼%sRüWÌdéEiLk¦Ú)ÖõY\O+G¥]Á´#«Ì½c$,/r ϱ¬®ƒ¨ü¹Í‹EK—úä \�ˆ”ˆ;ª«2ž>^«LQM ®²TÔLÎ!iQ'‘~üÏ4)O$G¬´´–~f¦ízyÙèö—þqärTÑ‚’!°êº qQšŒ¿Oý>nÛ›–¬ëhBÐun; {Ç�ë-²Í_#7úñÄ-’^ûLÐý¢�m†©Ò 89â?4±è—‡À~Âê›ö@ÆõÚŒ—©�”N[éUPÉþZ€Áïh¬àà? oð˜«Ïm⬦†¯Mn¦† iÁxMŽºTÿ¯bq1™ü\ËU®�ò÷È4î€4ÈnÑ->O(arA.TÚÛËBin{&4ŽGb –k9SÚ 8-zB!Ûü:b�œ^)‡‰`®'¼ +&ç|∿¼, èp–Î4F{wDØþVÂ?î„ÞÐ5à]YYÒ—àù{Ú¦Ím9a�#ž–.šÛ*/¥ ük¿ÅòEü4Py*›©ö'ym(E>·Q ª!ÇbQ€MÔ(pûoo…m‡mŒ†ŸU†˜ÑêFü�—+Z;{éºÃÅá5R9½J†*ÙŸÖ ð– ´ü‡ÀØ»j:�yM@´{gøløÌ|ýÏp}|ýLü7(JÇB›3(ûXdi¾wl¥³¢Œr\UΪë‹CìcqÉþˆ€«ìÂãô~n‹;!�ÿ•ls9»^<öÞ,F¡�-OåÇ1ß�­º~Æbè^©Ì½e( ḴYA€–¯ `ïp[ÊBiF6…4~3"Úÿ*,]†(JÃ(¡7³âÞ3Žìú峫ϭ˜<”°Ô' `q×^Œ�y8)Mƒ…4žÛjÐþk‡ló‹ƒâ68*-Ǫ½WÈç�×(’ÉFdzdw@ÚùuÒ {¬Ñ(,”6pÛJ˜v0põèáZM=üÍKÙæVÑÁ{’HM{–àü^é“g¬¢ŒNX(Cê¯ÿ:b)€¿s[!’¶ù‚Èðø°AÜ“>”Ò“�ÂEmÄ2@¬©Ñ“±×HéL òÁím2{´ bwÒñ&›eÿ@�¢èÑð‚gïÕJÅfL7b`ß)Ü4}îÍm0 1ɉØcå3Ç�¥Ó àý¦Aˤ€&—ïÚt½¯Hf×?Ž®#4¼ëÜB¥5®sgTB œ#�Î7zk"¾¶Dü @–áÁ ˆHY†¤ŠŸ|ò�¡OÍäMËä…‹Éä©€É!Ë𩘜Ã:Õ>Îm£�Ç;�¿EhÊ„Èo#ññ² CŠgL² ù¥bÚ3I˜6†,1dŽ;VÚ!†ÃiaÔ)ˆJÜéá´5•¥F�G¡P37xÒ€ ³6Fâ©"â#«óB]R/!!·å‚nb çDpX×0(<Òªë{f~L`e3-#!}Ühñ/[Œ<.²ž¤Ó: š�´–¡ŽP•ð¸-AãŸ�}f…2¹å<™üqU]ë„Þ<ˆU¥ý:3nž*&E.«ßqÛÇmj£ +^XhøÚ#®ÉœÞÏ*A‹† ÄÄ=‰?c&Ë\µ‹F½ˆå¹M±Žj2nã6ncá2€â@­ŸèFoQ¬m;₊ô´qõfH£tn›øê[ ¢ýk˜Ž‚CÚ +Äm‡OÁ[ ¤Ñ«r‹ýñFâúp#=:’u]Pàbïjˆm6|V]·X]φŽðúlqsL€ÂmD&£„Îí¦ã×/ $;cNh•¨ðÿº'ÅwÐ2liœ†gN–ö¡¨jCEðú ‘ ¸¥‰Ò´<ܦÂ`Üæ>Ú!Òò‚Pˆâ1X¥-ãêÍ”Ui›-§ë±‚`Ä %–ªnàÜr[?A4Š€ihp[lu û,JiÈiüø EÀxú-ÐoÑHØWMìz•FÜ!º¹�Û¸íeÎt?‰ÄEjô ¸MŸÞ§@$nNöóÛ4ü+÷R +÷À%´9@ vêxˆ«ˆÈd&n+°ÊPp‰Å¢  ‰—qÑL¡Áã¶q³|»„ÝSF0>æ‘•6…¤IéϘÉí(JéZ,¶<�Ô‘¸Ü†vQJ»Tnã6·in3Knó~J¸-cª ‰L°¢¤šù ��‡O$*æ2]ôá5ÒøØhes�sý¤q›eT¿mG¿C^#XLZq-¹­„c³ìõ‡M‹“áQD(ŸUí�ڔƌV¿ÃRþZŒ…‘ÖÍØ%”†>•ÓÝ(Ã%â.Äæm¥ñ?òqnû'•¸g¡IiÇÀ“¥c…’Q`§—Ʊ‰ä­ à H.T‚×De·+šõHQ„­†=T“Û9-½G#tn¯Ñð¼“ö¥NɬÍ)S¾Îe”0V,ñ’EODBiÒɉt RŽð ÄERDÉšÓDº)"Ë� QU+8vDaãFá(?�²¡‘ˆ?mM‡h¦C'ábÅ숋º ÔO¬Ò±>¬¬YãËBœ:©”5Œ§Œ’‡JùSÊZwJYSº”4RE“$AÔúN©€2xÆä5 mÆhõdí:t§’•asÿ¸[ãf-’Üùâ.VÎ2AŠ›µhÔ-©±Ñt¡»ýZ8-Œ–´Ìzœ” R‚>E Ä�)ä„Ì:–‚ +ÒÛ™‡l¹e8½Ø�‡ð@(‰o‡¼·yÀo4¡¨lËW?Æ‚ö§$Fo¦EdªÍ +`q½#19{X­ûZÇ�ˆ{c(åá@gݰ �ÿÔU09#QzûUž«ÏmàÇKéF ÝBê\ÀÁâvµFUK £7Ó2Õ–…5ös[K¹A[<ÆF2t»_…w´Ÿ@A¸�¢tƒ¥²™ �MûÒ¶]Ï/µc«®w/ç÷Ú[¶YMxÓ.5U×ÀÕÞNŽ8a¦4^Êq¡ûãx™ 2?Go6PðVa Ig\4è>°-ï-ã륞ÝV䌑ÖMhœLŽŽgiJe›{ä3ÀOùaã:†¤oàµå +Åÿ<(«ïRX× T!ŠWê�¿LƒëÛs‘ÉKû;›ê$}䌃Ý_G»»>–> 6gdÒ§!EËK +‚_™–@ ì�˜xÈ èêЬ±ß’âŒ8Ü(©RÈäÁúáMðàˆó¿xߥ±g½ë•Ødiš*äqÇV€YHOƒ PzÀ•rŠƒU†Pÿ£`�ÑPÀm0ØZ +³ "@08¿cúx %KðøºÎ"Õt‰Déª}jÐ6¼LµaƒÆ{Wåã–ÎþžžT ¢”öø(þã� ûëÔ´ÕžüEñÐíSB›COo< &ùûeõiîÝ“•†Ò¦*òqÆ*¶ù¥8HO¢¤ŸMÛeIG'kmmxñ‘¾Òv’þ2�ª&À ¿Ç©‡–Xý¢¥®·+Ç~SU½ùñQ•¶*#­›b¿CDû?¨rŽ~¿€Ò8ÜÖ½)àíç: û È6Óçïå,br…'ªúÒæ�§„ËéÐòlQÙG†nX?Y:‚¤ËdÃçí×òõ¹í%zbÖ Â~š©vï å©,ó¬å‹xÅ+m—hy/摸~ö + =å”°üš ½9 •MÛ…ÁÌç¶XJéZÿ|Ü3>]/I�Ó1pns4À°ýÞì:D�ªÚbBÙï‚¿Ãd16£`ŒnUý¼ÿsùê�¨’Èÿ¦vai�è,øÊ ¼ˆ +ŒÍ1 Dút¡ôC¡Dé¡âÌ(=àAqM¦ñ²SÙæ–C�ÒŽtE7˜¹žÛDPöòÀÿü¬â~}boÎd0a7 �?µëã±GÂòß²tƒu~³fCúq7âM»"ÐŽøìqŽøÊíO`%2¹Fjˆ;2a¡4­ÈŒÄÍáž®'^ôõ¹„�=·¹òYÚ冱¹ £ü¾f\®Ÿì”î6sµ¸L¾˜, +«®ÿOi•?å{¹Êf(`l–¼$Ï�F<;x¿6ˆÍ†Ð¨ë>ñø�’š4¼+“Þ+�4ÞÁêŽÒï*ª6 a +›1bã'=†n˜ Ú¦>,ÚÇmc  IʶèîÅ×-‡ØûOÈ㓵l3·±àÁ´a�³nÅYÚ‹Š?&,’Ó$¥ÅÖåúÞ%gr7 {mRƒ…ÀÅ^Æv&÷ -KÃ/X…Ô�” EHܲ’:ÀTIbX406sÛ„ÛRP”Ò²ÿ8zs®6Þ“üÀHŸzÑþäD#lÐÕi—½9åê€D&T@F*&"�„b�0 +ƒÁPHQ0Éb0´šmÓQXu©'8œ®e«ÓˆO%G‡NUþ[è­š¤Þ "oPegs°n6®¦!ÎR8°§Ålp¶:‰üïäfƒob¿âc³Ac‰\«ªOa@µ³sUí‡U»«ófüê,{U1žch <• �ÿSý@=C~fùW˜1˜Ø¼=²é s½Ì|Bž(7W›HèR�t{2 o÷íå•ñòÉßé$“3]mŸ"ŸT¤øp2¦7ÇçÙ;ùâÊ[AÆvRû„^v÷KªÙ¨¼‰wbÍJ¨ÅT 9àˆ-˜…§2>Ê¢†²M¦aÎßÞcÔq…¡-Òb“I&”‰0›Ùd‡2×®ˆE:c¿]㺽�7 ÷Ÿ?}EÒÚ¿PtäÂòÙ·»—�²â!Äv^”x�q>İö€VDļ3ôA%2nzӌٞ»!³x �‘ƒ6Y÷·$u�ˆÔ4³;›8'êà"ä‹8hÌëœè'¾;R…œ»A]„ºs¢Ï�øn.”W7}kîhÞ@Q,[OÍpêÊ$ƒl8�Ua͵4r`v—Ìœ¨ÎvÖ¨z”±”l´šbÐæ[³5'|!WýŒÐí[Ùè{|ŒÅ>â�Óà ×#?×ÙbùŒ.Šs’DÓ"\†nKŠ "lå€N$MÒa«ÉoÂ"N•A™üXR`;˜EìbÑvóXΈýa,Çæ{íæRïbŽ›bóW K£°†m(ÙâÛ×£¶eÑÓÄÞ!ùÝ9†�m>㸤h«ÄÙ x3D&~ÉSàßqJ[û¿¦hÖ­,ïÒdÓ0¬íÙ„Þ+Ii3†‰…³©ëf7AÞa¶€oÏv¥´9LÉŽÕ¸£Ÿ-QÓøºƒø³‘ò. P+½^ëàEÎ&ï´©ëntyÃXE¹6æÙÔ’6d+¹Á121/~�˜6¸ÿmž-¦Ó†Ó™ŽŠ5“J-˜S›ŠQ´ãœÚz(µ]DæÒë7ÒÜṋHLÆSÞPïÑÄí\Pa¬À»Ÿõ(ßã¾ÒGëo¤ýV�Ý‘?L«¾›ìåDKeµGëª"òÕ®f7ˆ}tS}´ù%ÒÚäp+f��v¤ô|yÂOyÿ§>°Ï(| ´Í¥äe†¢�¶½­ ‚'ÙÖÄX¶þÇ¡Ï=샰ð,êëŽê[|Êà õõ‡`1(!ìÍ[µ #R³ój£± +ºÜ'cXÞÏW ƒ¾¸[v^ì™$9T½ßb쬛œÙˆLšNªhö`4”–Õ¿Ê:=j3Ú�2—Cà:ðq›w�÷U÷Å÷Ü|8U´$F.]Í™yÀ1©ßƒ-Esaë0Zñª´P`&'ãCã•a„1ásXEÛ£õbª$9á½ì¾µbü¨ÄÆžŠ–Xm�RѸzî¥0ªË#ÝyN”〠ù#ø·Ž@E#§È™7 â7 #¸ˆ¤yàWÒ4ôsEeë*V Š?+ yÞ’±²ÿ,ƒåÌæ�šƒJÄ.."ÈæQQ3Oç8ásAXn1lrW›d-MZmki ãÚÔ +PáÜ­kS­�õ(ø¡„$ÐÚXo¹kCeu?]hT9cm˜ÑÚTiô2³�b5 Sk£ñ<ƒ€µq‡š]-Œ:[IÅ^ôÇ.Ö¦OÌ©µ¡¾{[É]c†Àý1Œ\Ïßï\CuéÃÁÐ; øeÖ—ŸòΔ*__0âGñn�$×�ûš,KUWÛHÁ¯��¶ŠÄ»¥FíÇ0C8üá*=y7'å¨WÞé‘ð·Ä¨u“6ôãaµU±˜XT<{Å–�7îB¤Ó?\&Éc™\™²\!ú›Aî²]'¸F–§÷ÀÒ?Ý�Ü„0¼=Y s‡%v|«ù�¥sµ@  t¦MÜÅ㜡”ϰÄ8êpa' @Y�Õk1¹t8·.¥× Ãz»^Ê8Ó*8Ïþ•'À1’àvªÎA`šœ7²S¾ÊÁÝ¢{—G•S +Ø»”(˜ÂÁêhöŒÈH¼²iõq:üõ!%®£4ãþ&èÔ]ïL'6Õ�ÖUò½¡ŸŸelr¸ížxø f�ðQH²G¨d¥¼½XþL12ÄY™Z䪊V�kž4^âk1­Iõ«[¥™�Fýjïû�EfßXÅ=h *`ÿ§µG¯u¬Å¶–L5ß1M"-êÄŽ ±)Z�<Õn*Çc­‘T¥ÏÍQ<œôýq·ëng“×9r=Z E¬Ñ3}UK†p©eM_°o8âZ ˜ïÓ‰ÓÊ‘¸m€A_Ì¿n+Œö@�G5Þ"ìXöX? +¤ð—?þ�§xõ^(D–º`Qü[é¢ì®3E�ðø¬î_>¼æ˜|»t; +Už²Ym W¹*³�œ©âÖ  ¿WáFå¡!"© +=<§K ™‹‡��¤­nmÕ¤$FÆG?«Û$­’`à·ž'F�½ Áí_0T‡‹"òü Fö`íÃ:^ÿ£8&/ècéãúƒˆ2„á'*ì£+ªõ FþO’+�IùòÀßÊ'b’½`Ì�”Ó)zªaIã5w/~ð�¸ …é0!Ê?xÏ�lPdêÔ/?\¡3òzÁ˜#Zý‚‘ûg†*vŠ<»^ÕpâL¾<Ó¯CÁG9š^0lî ä�|ì»wסhÙS7ïÒi {Á(} :'m²÷S| t6êC5Á˜]axA$»ü‚±€0ßüF Ó4&lPƒ:‚á½zÁ¸FƦÁÁ¨»'ÁuËB�ºÁ/BȹeqŽðå£ðzÁ¸§ä,ùÃnЖE/¾ú D�«è£Xü‚qi›bS^ Ü¡â‹�Z +rà£YÉ&D§IdÈ��ùÈ#¯3Œ šØeb_ +ML&fv0R·¤¥�·£‚Êž^^›¦¯ªQz7¦0Ï3®äíðÃV®ïã}ÖÊ™c%�å H‘0+,ÎÑ“ù®OMàWš²4¹2 —:z/ÌŸ_3ø0œšÓo�ß•]œ³9çðÓ�“zâhñ¬ ³ �ÉçèdÃÀŸ£µåhŒŠ4E&CÉÄ�‰ÏÌJN»Æ¨y»Áj¿H›!#à8ã~z³ÏÍû8l‚ºÅq‚’HìÒ­�|0±Â×FÅàéøB Fá¬)€,úæÄœ]î°c´&0i1Eè÷Ï?ÀŽè°9äÙ­[ÂN³%t}ò­ºs]¿õa³¤»B$w€„R×õ¤WPõǤÏsƒweH!s�ÅX ÿ¸„ o«¢ÑÛ`ÛÙ3†ô éÉî� áY¦-¸5™a¸ ºRU„9¯…˜±x%«ò8f˜ÑÊ#QÄ´£m�zsâ V >•ÈÅ '¿ÂÇ(/[¥úX›¼^é8vyÔ‡—2‘!^Pº„r6ÊÒ‚A"5ÑEh…�èÞ´vù÷jø.LéûÌ>ôJ~ÿ!„�lõJ#:ÿûY°é�t¹„ž�¾!ÆCJÐÃHW‚2‡ÆF˜5Šò»ãuÍÃWâ`gŽÃÚÊë1+vHyl�Öa#ÿj*úG3¤)p¡ƒ›H>é¾°¡ŒlÒ«Ø­|™¹8›3(\mZ k%ïp„¿]êo=Ë™Âös7b0†»ØMgA¨8`.ùÃÁTBrí}лâ“}Õ#uç·½‡ózg°mެ œƒ¸† v~T0æVÌ6Ë^Z§pI4‰–Íx¥eî…!ôˆÉ›TP©šéB9o@¿ˆŽà€#�—šÈù¶;V›±ß:²yôb¶ÐD@öbܾ;lPö2Ðïåˆ +XVÙmÙ‘�¡¼Md�R'kŽÈÌ~ç•ÎK*ÿq:wdOõÂNì<>,¢,R5…j¢ô/ð¯bŠD4'Dä œ’Xzp…+¯†š¾=�ypˆµ­Š"åŒ�mVÿç޵5iÌ«.¾ã bv¸ù—ŽL FŸsrvXÕ°Ò$XÍÉ2Ðáø{—M0±Â�¢rŽääK6åõ®e*ê%6ضþfÏM$Ì$ A¥„‘è·}ºóì&$ œ•å›Â:£9­G=©#ÅoBñ82þ4NýFTFØTY7. }È}…?r‰%|)‡)'ÝYò»cÈ®qq£dR”VÔ*„“d%’–Žp(É€p! —K�ÔO"Á’޵ù¡$'Ý`ÜùÖ4°=P$' +Oß{Ÿ³ðĤdqu±.ïGÊ<éi!†)ךP~„µ¨è’`«¦Ü‹4: IB>´ð'7µÏ[o�ò$ùÅon¸ÿ¹ø)Å'BJZB=ó‘[1×®LlÖ+.;Œ¡dcÙM2·±—h5™á¸w¨$Ü¢ûܤ4²-‹ÐÉ…!‡†YiLÞ“3øê?ûßuÚ†îg±�/é¾>ß• ¤ˆè"ž†Ë¢Ž0YN¿øíIwÀ«…šÈ ¡OvO”‹ö[üÇê’ýÈ�1sC–cŒÚh?š®�8MûÛдœP,§œ:6ÈþàúÞfÔÅfïÆÛµ]æ5oFË\3±Gå—Žbµ*cÝÜ-æq*m²1¡R+ ²‡°ª¥‚U Íœí¿7óL4JÆ­¾ÍDçØ�Uä™úÔÎiJ˶Òwý +Ÿ½ 9fhÏÌs�œÐtaÒF#úV{õ¾Ü9~àOÇmÖ±Þ)]«Ú2ì*þõ½%hñ"±‚tG>ˆ"*`ç¥n.ö¸TÚj›¤ãz„Iç~ +‰ŠÐ»°­î*öni5„1+ëY Œ�ÌL­…v jvÛ¥–ƒºÛtì�´Y˜l{x�þU^±þWã_Du™qbÐ +Qï¶‚êH™?)p3Jô›¸°Ÿügx�ÜVÎú4a¶âAhÝçAؼ+Rê�Ñg¯i×Fi»¼(Ù’4&ì;uL 嵧ηكÈ~„ã$÷ÉìJZœ‘ØB` +: Žð9ÅÒ§ †ï-6g$Pw…Š‚û²tQÜ�ÓÙ +‚4šDä–lè¥âqUݰú¸Áæ³ñ³±BèÆÊE÷çØˆl(ÐѦT�ðM�trM ×QήqÉ2ðûHäY«'ß�åõý˜]ô%Ê¥TëY?>ÿcfªÚvN‹� +B›%O�ógÏ�)Ÿ„æä/¤FñbD¢¨& (F]jЇüg(O]Jä�y±""T†:,¯0Dt*HÃæÆy7Ê&¹Ì@ÁKÊ&5’‹}[kCïÄÒבÑdÓJ6)ŠåÕÙLñLÂÿå¿FŒ}ÚŸ`XÂ\[CaøÊ8Q*‡GªPr0T¥{BÞÚÓÔs;9^h¬üØÍKà>8õŽ¡ÂTóøã@ @"=Ó5éZI‰á!�¥½‰Í>Ô+yú¢>Kôݧ#qýtLOº,}²2L;ªò=Çñ;P—̧ù**|ñd"F’J©ýè¤è›ôÑÑ'«yà¾w:ÿ{Òð8dÀÑólE)>’l CÆ­úÄC2/˜íp…$+Ïì²ãÿÆ5øºŠ÷�f?)wžZ)ÐÝ̽¥˜; � ìЛ¬U:]*!\ÅY®Ù ½² ¬”bW=å~²ÚÅñ”žHРÒ×%2(ÝÜÅB‚¬r!Ĭ‹ùÈTök´·ÔↂF–”�Ø”¯ù¿„-2Ú"0Ð+3RˆLX`%H˜t·¿Æð°\Ÿ>cÕò + [Úq9¤(%b‘RÒ@,Uäan‚ü‘"pâ8\~@óËøstjn•®ŸÏ‚08­�²À#sË#žK eֆͨ,P@¸H9XÔ ¹…³Oªnñ‚Y%ÑÐ8ƒ°³~�Nš’•̧›PO ¡@Ä0éàÓ§áù8†qR ys�#}ŒÎ ³88Ê}{À Á×–#'gIÓ„Hq„4�¢"ꦱâc}”÷@hÉ9í¦/8%ñ�ì#Ô]Ehoo•�[ø'Ò²^ÎÞëP!n ek¾Ž±5àT¡¢�QAÄ¥ÔÒÌJ‡Å�)Y´î“m÷n•ýÐY4s�‹Ó”³ðñr9<ïr.N}’&Ê…›zŽ!¢ËÅux/1u?‚ó¡¢tÇ1ÖLÇ‚_÷óÄÛÀÒ2¥\‚æ‚Z�Ìå`?óÌŒaU0F/иȗÄX(îZn´îsˆë%|²Ç¶é0 ë*jg>ô¹Âå^d€a 9 yˆ‹òñ•ÏË�?“¦?rÊê§²g !¿Æ…F\¸ê•„ï<ÿÇ�Š"üM’â5§VÍXRÙ…ÃѰƒI%³8GIêÕ> +\üÀ•J@¹“âù+ÊÂ勜¶L¬RÁ�sváæ£Âõ ¦„|H‰À¾©¯…ÚiS� ¤�½ž¸ \y4Ã²Š§5ôWl4×x2»0‹ æ1…=É¿âÀ0‚ÀžÒ¥nQh暣ùÊéIQáþšh–½_‘ ©¶Ò—£Q1ºØw†¿¢/E·g_î’Îu£>./ì &N+ §t›\HúèÔ™%8ýY$|’’,²sº}Ã%ä÷—¢z¼¼ëÓõÂç­Ìp«�Ü[«¨·~ä*$¾ž-ÿƒzÿHW²ijÊ<‡ i¾³�Ä vs™ iä_âCÚ¦Å>w÷¥U VØÞv¶ï,ÿdkBe ôAç¥h¸óPþ<Èjr7aþ'ð�ï7ª=§ëûn©3Îp®Ÿq‡¬|JéâìP("`àïþƒfHS‚ô +lŒY8CZÛÆJœb²Ì³fÖ@ä&�#ÀÝ<µ7öÿé q�ª»aæi Rª¾¼ÄAê(Üð5n1Ђÿ‘�¶º#³Êd!+‘�r¿ð!ƒïêwe«,ð²ç�•Ü*Þ�BW3…Ëj3…�BŠäèúÚË5œôbÁ ¡‹B˜ +û-£‰ÂI*Ô4•Øø%r¡\âãW¡¼b|˜^øÏÕb••× +¤{‘Îø ¥yçµc#ÚMBò¿îEïR¬h ÉÕK#ˆû¯T†B>"/ †B̸ãqœFÔ_ÝÄ ™ï–öH˜@Zõ©;-‚+¶ÿaåðu/|�Ôt¶Ðå+É=é’Û¦ŒT@ùõåÿ(qmBLPõ€N]3¨M»sJkbe¬Ü9m:ಠ+Ï ŸižawÎkxNMÏ—Xqçœ÷ ¨o)�Ûo�g«…Šj±;'4>,<'¼*wN‰^¹ØÈ±ÜKÌ¡�Ó�³ÄÈIªfáìÎ <'Ù³lwÎáà9Ë]o1wNl—M'Í®?¡ÖªäpžSydÖ�³¤S|ê0e�à9‘Ø(qçÌ­ƒm€¸ ­¯åUª–_'Þ†ñÖm¢±JßÀ§‡¬aOe“úѶŸÏ”òºk=Ý›·ppÌf‡Gμ¿è«";w‘åýA(k�xˆû»?Ù'±�´Z«ÇD•W�/ÄÝHòþGúÖ[S¬,Lƒö|Ù/ÄÚ‘[ßýYeÔã6º²üϦ²X&†,Ó’÷±]íCé“èårÆuàé_‹ AAS‘9äË<#€!ÓÊ}.*™¶™€2-_„à-’õ˜x©¯’iùÕ` !Ó +”L;ÂÚ+j?dZA§(™üº—_cR™¶«B8„žâŒdÚ8Ô3j{ô¶é�=D´#™VÇT5?ëíùþWnæ$†Žlcª®`A—/Öcã4ø™öùÈ ï«?w‚UÒ½´Ÿ‚L [‘ÓízãZ)!8e�2-„`Àr}�%Ó‚†¨ÂKÈ´[’L;t1Î2íÉ´%á«r¤è*0Ê‚ÑÖ'&b–LûRuWo�fsÏzËëóO±ð¥Pàš‰tÍ�ãór:‘"9’iÁcÔš©|®Q§dÚÈÁ(÷J+!ÓjQ2-'5 >R´�/§§ˆð½‹,zÄ»¤ï)ôØBgàÁf.ß0CNié2"¥ÇíéQY…a³vÓÉ ½/“Ò! %$»ø³,í‰ šQ›1dϦŸoôö}­QŽ—'ÿMq†£æð‘Û�Pžrà zŒE¿+Çk¾ÒÅš«î ·Òñ�Á¿dÔ†Üò†º™ú’‹[HODœÁ¾òfû†åaž`ÔæV›‚ô>ô uÛ÷~ÁHykÚðrî÷ê“gOØú]Ί)àî`(ЧÑmLSt­Yy^® ~ŠSШÍ>R›Êv‰í#-�Ô&�Ú„@j“úÁƒQ›-@×[?¾¾E73j3D†Gw†»•Ñôɨ žnžŒxó‡Q°€Uÿ�ë5²Ï¦WÌ@ö%»J‚\A xtW ÈÖ骰À9ÒæÉãÌÙ5jã›'ù#�¼²§‘×Ë mžb3ç3jƒ1ëŒßQnÏ›¬7R€6O�ºjÝõê �6Oî‹�üµcÉô1ÀsžµÿFŒÚÈ~ÆÅ7;U±í¤„lÀ¨ ˜¢ÕF6�£ötHKDh[µ$nÓÖß<ùh@ÚÚõgv»w»Fm*uód]¥›o¤6ÿÝ|£6à//Æ�7ñ’nå%üsfN9¹´ØaÎŒ»®Áï ˆIqRðRíòû‡Ñ„VoF„l3!âça×ò~„ÜÉã�7Õ4æb»‘÷ÃS8ætÜ_ïA+â1;`/}¢�ÓH�…à ¾óì÷±'ýa¬§!kvO¡PJcRÇ-è›Æ�©jÊ~ýÝ"~�+Áøâ»ÕûÑŽàËñâ{L4¯Dg[~ð/¾ßr“JuV�3¹’|¤ÚÚI}êÐÄ4kÃnG­IÝÔ#—�÷ö7¶­må-¾/nä€qº+ÕGlüwMÚV}ÏðKqå°B÷©ƒÍ i",²wjñöU›‡–Ôck€^ž÷«F(¥A®¿–@Ì"ŸE BwÒ˜š´•(Eñ3ŸÙ4,QG™YŒ ³ÒßÖ(t[§:¤íYŒ¯«)}�½> ÷–õ¾ê-ªÆó@E‘¶k–Öõ^£Ásʧ×FÙù"´$3¬©øbÂÃ�¯ÖÙ xÂa¾˜,\|À[‹xµÙQ£Fëd`Æ- +h°ØƒÚÄ�¶�ç«ê03/å@äׇl´ai¥®ñÿpÀϽp¯4~P›D¹2QE[Á(‰¸0<®¨^Ú·ÅcPƒ~� +Gâ—|Ì¡6¤fM€2}ÊhÔ&�Å:äHþôÐH§6ÝOþx À4NUÃÒ:¹�Í�…q© +3DnCLÚ¿jJ §·£¹Â�sO·‚ç ±ùí¦Ÿ¦ÓÏ7x¿`xâv¥õWÛÓO÷dÞa€C¸›^–¬¢0»Wá‹|‰á`z/ÐOÿsõm¨@È?¦Æ¡¼i´È¢'ÚC`Ì€a#À•Ýúa·ƒ$bN Ìú‹/ÅÐÓžÓB¾Ý0A^;[ðÍeHˆ“8�“òLˆ„jjµÊÎÀy* +µZ +0N°SVÜù2#¬a¡·¡vVºÀR ¦ãB-MH§!Ù„ò†WIÛ|“«ÉÁdmÊá4Þ­¹âr:/wç Ù2è/ðÌÂî,FàüG•÷½aÒ»—³/Ѐc$QÞµßa %H¶R"ä Ôzõ�i&…1„÷Ú~!e·¯uJ(‹èÀ}QŒÓ‚p+¡·Ò{n[ x–7OÐá[Ån‚Ò=Ñ$5<ú1òQ•'7½ÿþÓ��MÿÔ­Ÿi‡Ÿ—5AqÀ…*)—‹(³]«50ópäftÉdä®CØéPî¤u*`8+íÁpL§ºL-ã)ÉÓ–B#à–Ïô‰ñk,È€ + +à‹„ÑËÚàƒ#(F3Êêd–ôáÞ{Àw> #5ÏV:5’û«•β?»€ak½)z‡ "ŽWµ›V]U#·â–ûÖU®åmȘ'Y°‚ªÂ©¯ÕÀÐf˜Å>A8q“ér †bÛƒIy{&Îó–bõöÝM‡ðIÙ9`ÅlÞuYW:bøa!ÈCÖÕkl¢fl3˜v­„Åt�I•ÕMÒ-+ν—ƒÅŒZ-ExÚdù´Ùÿ*gèÌfái³È§Íz&ÍÓ;¬&^—§M®as´ä(C¯d&Ú^&›eÅgÚƒ÷ÊJ‰dòûÏðì°;H¹ÚÕx~Gƒ²oæý,x¯Åªáá\Ëpf"àÕò´i\Í�7£¿°ÊÄsì™’ ]’Ò™M·ÿ�³èÀ# �[òõ-$œ§B žû‰V»îëç}zG¦– !ÊšY4F‚~k0ø „~ÐG¨÷+<“÷gÕfçŒÝaK‡_ðLp*»ƒ#ì¤Ó1R=ÃæËàòi6šg%':Q±?*Û†ŠÙLùX�$¯â@�Œ�[¶Þ¿ –í?rEû@³í•­Ï�’æ9°d›—(v’€/×{Þ¬¸ ÅUqWº¶óžGnR–ØX3DläIä¤çN +G*Ô]ÀúêšÄv+t<~å)gJLš<þ:î̯£Íä ¾Ã¹Íë¯(+V‘ôÁ§;°õô~aoçÞë1“û—L&‚Ê÷pæbP\H§£C¡¸om9!ƒâ~µëÖ£PúÊþœ%«Xæ ˜?î%-Œ·°§¥¶ÓS ´gküþŽV7°¥vm¨ ?ñå“ú½ýsµÿ¨�ƒÏÂÖd+Þù’wÕR‹¬YÑRë(˜Š =t /‘B¥ý,>—㾯ŒòœŽ>B¸:À£5拆U¡8àöàþÜÁµßí¼§9C›8áÖý©®íôޖħ#�Ñ,Â@ˆŒ9<(›c©Äû¿˜];wôÄ›=sÊÏ¡Dx!€æÒJ„ƒö$RœóœDyاÜžÉ܈óýHYQ|43þóxd zŽtÞÍÜ`?3©˜Ñ¼žXi¬�ÝMùª-r¶]^ B½Ø€IO�êjÛ›Kâ5^ãÏ|‘ÏXBº¶6ÉŽ³~_ÓáÄ'd¦ÑËŠ42Á(T¹@¸1ˆ³áÖ‚‰Eâ]U€Ÿ$Ò¦* +·ˆÿ®ÏP +)oÀ¨Ù¸AàÖm ±© ²�!)Ö—ò½Ö”> +ügë*»tâT±½0}£u×;ê±r´ü ù1¸M²Àç€qþRÒÃïÙÍ£÷%¦ óZøÏfÕ™Æ=ÞŠ{£°�Í’?Æ9 Ã ¨“ñ„ŠƒYl^½É¸O»~ÙK1#2[pó ¤® Œ/�|Å…´¶U9Ñ©�£*ub›ò$’¬„d–œNŽ-\=5¶�4Sumbè�ém€Ö¹6Üë•ç¤ü1l¥gÛžÖòÔ‹Ì,cÅ2Y˜O­¥ßÓÊ�aT«¨H<ä3OL²Vª(L˜ÇH’¨ð){ŸÍšôÊÕ/T{6ìšK5�``¯‹ì�syÞ +©ñ9Bµ1©qbňýß˦¶[�ka³µ*¯é,¶>ƒ v[åëT›Ê“ÌxåìyV#ól˜s0‡ýêü2ÍÌ +6ðÉjÄãØPréçžd‹âë’Ò»°™HÛR…¿Uëm©%£5�í#—i“Û7H÷Òl3ää´R]û´.ín»«ÖµµWÆ�ÜK¨)ªÖE— ³ÛA�«uUþ*¢”¤3¬�G+Ó×”áh�<ËR ´Ð€Þ&2ˆu,Î=X¡Ú$Ý�c"ÝÀqÛj*Ö¯À­Þm£q÷¡KêBjÚ”d{Ó—pae4WŒ¥(UÓ�28{AÜ, ,Ä5>¡¯@ )ÔΠì bc˜4\ħÛMò—·ˆ¸å)L�Ú§Ì™R¼<«�¿u%†-ºº–û°žl ©«D}ëÖL¡ˆ ±WP5@‡(oQËè¢8UÝu-ûŠ×ûÆœÓòÇûéBëÁRzâ×úÂÿí¤rÄÃÔðµ¿ýd!Ôù„×û†Gñµþ{ò`©9ìXj®üZÃ?KM(¾c¨Wô¾‰h%¼CôIQ'_Q>X´wä‹aœqnµAA³®Íý¥ŸÞ04‘ùmã²(e3Á‘–þ^›Ó$žçÚuJäŽNñ¢Ç}³ÁïEk]›P?Í'&³]±ªH¼<²ÕaÓ˜Øõc®MR?Þ~ÇýK�½ãáF™b'‹M[2s®MBum¶ÓqßßZ9׆Ûum(ˆAY-sm4@]›µN‹1Ž9cÿ£Ãu¨k3î…Ú›àD13±S ýS{¤Ì…Ç%™ õÔµTq!Êÿ@s&3u;g†±^˜I¢u¾ +&¸h«Œñײš-ÌC÷Ö%¨¬ee¤WÑÑ›ãy7GܹÆlËG~²›É>˜~÷JLŒÊ žž@ˆú+µw÷YðT–;üf© ñ«?�á?P’ÿ�‡!Õ~øt#…RQ¥PÊzû‘þ¯wèbuhTãÚˆ9Wmà +€…‚k5KúŸCSt–rÛÃþ"ˆÑTõV¥Yof­ô1j°Þ8ëˆ?²ö‰>Wt>›*[Tý’ æ@i0‘VÓô":×h§ä‰pƒF?Q2m’ :E ùø …íg6ògGûµÐ#UdS“2Du·EÑ I{½SaÔDÊ×as�ü}GŸQë!Lz'¦jË5X"s]íK§˜d}d!ØÞg@5LËM®Å-Ú ‘­!÷� ­uw☃ä­ºØXŒÜÀ'�˜°¥±Jà5ú–6Õ¢ö‡iæçÄÛZä'z[ËÅÉ“·FßrÒó_I% nœ¼mí/pxËÞ`òF�"Â=ò “·ã¾ŸÇ"o·‰J…vdƒ^×S[K1‡Á÷Ý”ªVËóv §a,-4!†`RÐIíwé2¾µÖÄE²0l‚ßtºRK†óñBáÜ—%ÝÒ3 VÏ!jeþò˜ú°q¨æ”EÇ w½x„ÝÇ. RT_Dòü–õO8ËåÚsö¡ôT_„áß²Ÿ;áôNÆXúÙ=D÷ÉX|èë!Ž­Rmü–uäëä’Å©HV¬Ù¨¢?;Íô½�MÇWk] oAXtºü.¢û:Üxé<»é8÷Ýy‡ªú�¯ [E.�äj:.¥Ê�amFL!šÎ +nÉìècK§âÝš²ïYHgŒœ“x[_[´µHñ|YDWY¨ñ»º¹¡Y‘”ô¼‚Rd¶/«]fÁÑÛ…ó`’mj’ßtß=u+ñz*Äߓ �¾2�V“ZU¬å2 @EÂGŠ’Ú"L)Sþs e¼ˆRR[5þª™ÿ“:9çí ¸‚xsYÆ…ƒÖË©á[xÁLºmwgØþß\æ ÞaËï±½¯Ex,ªì”¬0¹LMgÈÁc¯ä3Hê ’äBHk÷޶’±Ð cý˜÷%¯½œ¬D݉\ô/ÁŽ�^w\ŠD§Ë 0òüs/ëÛÍÃÚÚ½ˆ©ó¤œÍýHz_ÖS­ô›fa…FvJëf‘å`*÷°èÐÒQ·ªÕe‹™ÍL;¢}><�—üÕ +ŸÊ*~C™!êï¼d9²PùS"˜øÕ²¥#vüË»×µÊB½>]Coþƒ )<žW«ÀÆ*!•V8kKð‚è‚YúÌu�YO‹5™‰Ôoµ1Cçû7ö»£oN»e›7tâTs *^ùQ±�[‘Pñí¨1‹Aâ�,‚_c ’ø¼ÊsP¡æ­;x@:ßUáõdÏWvi–é\e‘†ÙÒ©\è�°Y,޽«}�2‘Ní]²)<2:V¶í%HÇßÐÀÒè4•…À~¯ ¥ð®í›ÕD �ÎzéÞ÷™5ŠûýÓe +zTrtb¦cM/ÏåüZ°V Ó�‘PS]$Ú¾}Bùb?™*ŠÖ'3iÔ¸Iñ:œ¤€“¡ƒ ¢TÙ‚g3‡ƒ·‡N€ÜWQÐ!®ðüVïÍ…ÒÑ™ßW7x‚3Ò©GÔ›õAÀ:{”¶ƒ“‡N±‰{�‰K»¡Ý•zèèiбÇK¥Ù£œé¥jNü»0}P±Ô`½M2:ޏô ?èphè䣫‹lªtþŠérè¸Ö4ÿ b#}R," bÈlKˆ|ÐÁ‰¡óö'š”†P*¥Þn×Ò°Œ/‹HœyuyŸ+Ì+ê´(»D :ã:–’ãS +ׯ¼aצb™Nï›§}érÛ÷Ï ³t*vn—ùý^ª¿A@Åò +Ò Š§¥søôûí ³³“¤³¹(¨¿‘Šå”TLõ?è0©�„ÓÏnÞ•oX;ŠL:MÅ%[•üÏFz%sűço‘ö?‚ùÇæ²É°�Øh¦8ýlŸMr‹Hòƒ3VJ€¥\]Á‘ÌãÙqr«M¤|ŸûS4OVE"NP|j·'ð¥öBM½4½¯J ^.Þíš¼Á%�Ù6ˆÅñˆ.Ñï¹÷X_€\j½;ÊEC‹ãˬw:äÕî…�åKAù&1N¬Ø~X&‘˜�Ç"ÒK¬È ÿ„L¿¡ï"*“  Âð÷´^˜.Ÿ:ˆl›ªã†4jkd›NTB¼«} ü5uËŠ³}.ÉŒhð�pe·´$wHƒ«öÁp¦ÆöˆÀ°ÔÌ3K'GÀ顈@|'“Ї@[eôÕÝ[â‡@× +ÖÏëV›Xæ­«Ãçza�8‡Šz÷î'FÄœ€ˆ°÷wïr.E"zB3bþî*ÌÌÛmÁÜÙ=B +žf„�ï`"l¸iX$"&ŽJ*�u…�¥-1w…Vq›=hÁLd2@Ù +Àò +®»ƒS +®é.¦YÞ{¼Öé`ú'nD ÎÜH)ÌC có…”™ÄÁ�Ñ(;©œ53îòÁT•ÖŸçKñ°™Â£î2�5‘Úb{Žr×t칇/¼e +N䵂I_ ¦”–ÌÜÄ|¹ä�¤6oQ["Á©ì_­’rºŽKTF“£[Q Á™‡@�•‚O÷\R^8f–™¡.Åáœ)¼Ýœ.)å1ƒÒ×AØJÜ÷šà±[æØ¬iµèäC.ŶfŠpºžÝ¿edÜN2ìtšEm§X1± 9­­gôòm¥M?bçÿÖÉѹæ(Èä|)¡”|o’3+U#�‹ˆâãðÏšÈqšõÜH6<€¬úøv‰ËåŸ[ûªNHM¥¸/ç˜'"0ž,>œr¼ñºSX\7š^°†¯Od!·gÞE<,v¤éu4¨Q û{bGè×]^T§°ùš<� é·’  PÞÈ; ¾ "‰ICGj<›®L_Ë�‹ˆ!Ä+êd­rÄu93^_Ë«ø»Î þR@kìÅ ´p£‘ÏV*Äê¶�Û~ýáúÕ<6R¡­ ù,j€„Â¥ÕÇ\/í‰'y«%î +÷¦]…+ãò_JlÍB�T›;¡}þSÊ^FàGöM$ÛZ©Y�Æ“ºq� ]¹ä3§“ûcÆÖ{Äøø¦˜ð}>ª¾¦s_~ÒÁ;”æ²FãaG‡ÖòÇQÔ(ˆùÈY´¶‰š¶�“ï]`Û£ g'ßÃä1ÐÁKá “ØF–aìCÿü#às~FƒÐsCNÓÔëá Çx‚‚p‹WúÉ…�„]Œº4èWì z¤ÂÛÙÜb›í½X^öÌ`g§Vȧ"(]~éñåïc;Ú¸ÅP2F`ƒ'^*¼àd/V)Ôl8쥳S»’Xi?ï’·¬ƒS@ìq¤MMˆ½Žˆ€×‚·ÉdÅ�âQhŠÖâ­ÅŽP1[ÃS‹‚ú³¥ÝÐ8É&݆(ŠáÓ�'#+'{ßwPš�“<2¡Q’[j*ë½D_Ö;\ðÏ Eñ¯Sˆ:ßÐwæ»�@?aÛEŒ>?4�¢¸fi@-Ši˜‹çïb\Y¯tÂ[yWò!E1g ‡0P,e2lMù“úk’Qž§™Gþ–…5¦˜‡˜¸ •Š©uHe�õ/ +‹&Ÿ4­†Ê§(„Õô¤±ž(»ÁUÒ+9ò²ËkÊÞmî!뀪DWÈRuÐݳñ Ãèæ2˜³/D¨}ü–÷Âå«—$ŠÄÿÀª÷žø‰¸;Ú^G-ŠÊ$2|c7^?aÎ×kV–]ú…_¸;¨<&£¨Î +©gÎÇöÈðYéé-…›�`ètž ܘ¹ÁÜpsŒ[ð™3!ë‹t~Ò~°÷‘õ6n¨ôããÒÿÂçÚ' SIŠ^B·{§ý2F§-Ö ‘®Ã>6¥ÄŽ·þ,$:¥K�µÁa…„ËA.m›|@+]ƒSb©¢Çåaë·2Ò¡d)[S×·MŽ[º=S™÷"Çs›‡ˆ*)R�â=;"±Ú•ØSÌöÈ®;z†cüYgÿËËÙ#VÔOº�±·Ú£ƒ|2WM‰÷:¬lÊø-%––v´$� nº¬¹ÓAßq\Ÿ¤´`7¤ò­^pP‘-Íä"±é”u(I‰ÍI3€Ô_Ö�HoAlõÅUä¶|€MÆ F +*& 93ntîúRPQÓ”Xœþ4qmse)±lz†igó“‘Jì$•ççHk‰‘X6(±ƒMÍA/B ­£”Ø;r€ÙwXewKâ¡–¥!ð‡J—âÓ–?*x)ª”Jñû¥èU�ÈtX[ì|=unÑÒÂq‘Ømæ½.Mk%V"M‘â˜è]º%`¢J,ç¯À ±•ØL]…¨ï.ílÖF{H‰mÐ ÜÞ�16‹Ë›ˆ�Ø(±'›ú™C‹VKª*‘ü~‘Õ 8O=¼ï–ŠR�CN·M$Ë`(±E±Â÷ç«¶b�ú\Y¯ÆÆîå†J¬/êȶš"±ÙK‰…ÇTƒÄ®ÌH­¤/¼HÌØœÞ×*P½5s;¢Ä®f䤜%0uš;‘½—™{í(�îý2:e”#ÖFÝ7àYmA˜�×¢«�Ä~J¬—üO¤ø Ö l…HL0k%VÎ÷ ÿ¿`!±z²'\{|ÃÀþ3/>â±ÄÅ¿³`\»=Ö‹Ï"­®a$T[ÃþÅ[/ 6/ó!©ËQ :Ï4kÜH&Ž…j'¯ÎPÔnÐÅì:_U Ž;2ç^„ÉêjÛøÛ@ª(‘]:Kƒ6”&T™&t"«K᪠+81ÿñÞTÃêŸò”²Z�/¥oÐÉ*ývñmÇ˵;>)p;Î.f‰îÜHY² J¹Ü{ÖW‹y_+VŽkÎúæÌ¯·}oÏ1¯Þ[Ímµ¼Z˽y‰wí&'C\Ë1ìÝ1‡ÚŸ9´¶‡÷IšöâòÔØó\òz†wßvßËa&õIŽûÇ~{>{]—çé± {ÖcÈ/Ïá%ù {}¼æ­Ü÷²/GÞm®¸‡Ùô½ÐÄ;‡:�g¸1'+>o±-+ç½qf½öu‹Z×û­�™ßÌ5¾ØV�ý½U¼xßìñÍbå•g}óÞØn}=ÇÖß+b¼/ïûî.V\íG~]^¹ßâÖw‡½kh×V»{÷8Ô¾ß[³µZĸZŸýå˜[m»ØïÃYsœóæ–cQo‚{mm¶ûz$Õj�=æVëZ¯¿¢×�×ìk1®Ýv?æ}ùåœïŽ»èµã﮿5PWÍ+ÆëÌŬ}ú›mçØâ}øÖÀœ7Þ·zl½ès·¶ äb`ëm¿>ìµò~må9‡zmtÉhÔ4$DÈ65¸Žnå×€Ú˜ö–Æ&†k÷}[q{ �Í8[Œ/®b­Ý>`ë½Y¬ÕZk/š›ùÆf^Ëóµþz¿Åjý-»n&›[›ìåeQr×Væå¥6aÛâe}n¦ZÉ6öðò2�¤�yy¥�CØÆ7Ò,óòJ·xYß٫͹cŽ«X5³w_ž=ÆáåW{õÕ`ï¸_~?� �õËÖRìÍmòæ–ƒGä²<Ð 2¶ÚŒ° ýØÆ@. n}½1°‚UƒÔú‚ýZÐs°ÚÏÍT2Ž•laYY_ÉƳö³1#aÖ翬�ë·QÅÞ¼€œy,Üò:k ´ÎJ¤­F—Y�Y±DDl "Ã1k#ãñv\¥IH"’F()--1115955555111--))�HBB"�„„”””4")) I "D!B„A�@Ñ#zD?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýôÓO?ýLbhŸï»rÐk|ÁÀÌ-hA v +Ð,˜µ'õµ×{ñÞzC�û|mî�o.â\q��4ð‹G™I¦1Áf|<Ð@ rm}^JÐlÅ•k¿ùîYÔ\û{qæ{÷+Þ½qçÜ÷íqßù¥±ï[‘ë»C�¯ÿÖÐz·ºæ¬ ¯6ß뱨ûæW�Ýlyß�‹œûû­�Zä}W}-Þ�eœwî~ok­wï[1×î9·£üå(ãÜol÷µÕo‹µÝúæ¾/ïÞoÎ/Þ;ïí÷íyï«ÏÊK{kÅ5MìÃÑ$sX«%C’¼ønn­?û¸íYZ�{x–~ +¶9ôÚûðÌe.Kò¼#Y5·ö´%9†ßúqçð칆äyͱG^Ë7çvëŽm½绹ÈóÎYw̱¿µs‘ûm±åk,â¾kÝZÔ{[¬Çnöøèyî…½ZÇP›gû=yÈÏÎIrï«m­¼öý‘Üë»mÞ"ö¸gÏw{ͽ[Žwõͽjß³×[Ä9¯õë­í:×0Ê€èàå #Ëáƒg&Æëq–ƒl{n}EÛçŠÁ¾³¯ú#sÍÞ‹½f|ñýȺw¶W´_Ðߺ1Ǻîz9ÎÕVÑk|Á\ýí|ïnw¶žc¾+ß8‹˜cœw­•[«{Ö½ï�¬¹ÖªqÆb¾÷n\ý¾éíîxc»±˜ùÍÕoͽçbïÜj±zÏ3Æ:g.VÐjnùÅ·ó®ñXbÒ—›_ÞZö0�çúmîª3¶giîóöü½v‡¸ä>ôØçÐbÎC|–Úã«y=ϾÉközø Ëq�áÈk{Y}8öö.{=Žo}sßÌÌ4²’-ÌL#Ó^w›sóÞ7wß‹¤©©…uŸ¹·Þëîq¶xä­üf\·=¶÷^«÷Þ]‹XÛû‘[ã|íõœ[n»è­·!hk¿VkÝ«_yÆÚk‘÷nõî×ûƒ—¸×­ù.CóÞ1Ü5ç�ìõÊ°Žæ­¾—Ù_íÏ^½æyÖðVs }¶9Ü™<ò7îNÞ]޽’64Ïs kysx}ï¡7¯6Í~fû=€ÆËâeñ²lÆYßÎ÷¸whšºöÌ›Ãn/;Îe6y¹Ä›''yinëuX³CmÏúÑwàØp&L)´ñ~äÈ[,F0A•XÃÖðAp ‚ eäÚÌ™ó#¨"»»EŒ5jԨѢ;;D…ù™›ÓF®Œ "ppAø¨aa¬(Å4Bˆ#ºäy1ášPÙ"&âÜáC7ÈP"Ew‹1b´èNQ"CƒèøÜ‰ƒC b¶Pigáá—’D€8»ô¯Mƒ($ ð¹6sðô Tg‘�¢»E‹5ºSd‡ÈP] >xæ´‘{ +$DÑ �Gö¥»À¨ªZ¶†Ò’@�‹˜n€SgÎO ºB‡Ù)º»»[ÄhÑÝÝ�"»D‡ +Õò3WÎ 1ˆá”$iø¨aµVTE1=‘Hñ"ìaf= –D!Á25¨‰cg®� B†!Jdgg§èN‘��]"D‡ D×gÎN55�1�„(K,è™…õðE +OLNR'®¸ð�±Ò’8¡¢%Œ rkâØÉã @ƒê +2tè¢Dˆ2d¨PÝ @€|Èc'Î9Âh¡â$IZc70×Õ )§&¨VX¢+Ò–W¸¬`&ÍšèL@OŸ?t?TWWWG¨®®®n� èþôÑ3:;¬Icf.W8È MHY˜±¬J@5�\؆4Ó“(X¼ˆ1#—ƒrìà™ãÓÇÏ@€èèèèÑÑÑÑôÇO>sxìÈÑ!93b¼`‰ÂĈ‰æÃæ£J¨À +¹Ž¤Ù@ +–.+¸@ƒ làÈ¡sgxææôìá³gÏž={ôÌÍá™À:rà°±�Vè‚EÊGÒ$ø¡ƒ‡X*JD}S'®´,�e<"I⤈°%…Π±A�8qäH`�:uêØ©S§�9�Ž56 9ÓB +[D�—„¯l «uubêSj‚¢JᢠÛ;¢–dX)Œ +dÌÌ Ô¬iÓÆÍ›7oÞèðæÍ›7nÚ´Y£‡ÈÍ`†Œ +`J°‚€ ’¨ 9³�»\¤ ‚jRB +âhÉIªÊ +K†¾¡!DŽ,1@°h“˜2/À  5 ‘““K#''‡¦d€á…2cR£K °ä!@¸¡e`YUI9-Q¦§©,²Ä�C�³Pà†A\ˆ�e ˆã€È�!S† 2-8`Œ˜0(€Ù’E„:ˆÃÀ�‚œ)€c‹Y,NL=1‰HRj‚"�â +†¸oô( R®É Žƒ)UB !‹–-\ºxùòåË0_¾|ù⥠—-Z²�B•)Äepd­ RÖãÆa\¡ Õ¤”$ÄÑ‘ +F¨kì`ÀÞ6¸ –4)@R<ø  +V¬\±b„*x ¥ƒ4YrÛž 쨡C +*('¥$!@]eÉÀ^_b  ñL"Eà”` “ âœ8yòÊ“'NœÄmÀD ”À!bòÐûòÂ2²®PPE9-EQ¡`ñ‚«î` +�9DHI¶"nFÞàŽ 9÷fÄ­ +J!A S¬Æ®\/X  Š:r‚"aª…–ŒËk|ñ#;C 2oì‘eižfY’½‘7A´3²1_5ø•¡ÕÂÊ (§£#:b©éiª*ÅÕ‹-v{Ùø +ëác� ”™™���9;;33+kàÇ>z„}ÙðÚVÆÖ‹«USOMK#�B€q„”¤ÔôIQ™PqõB+ÆŒ«;�7p|éж#, L‡Ž/7jÐèúΈ¡õâJ… *©¯I) )I‰É JŠê„ +-°´ºdˆõâ¬÷æ�ï­3¾U”Ñ¥…Õ‚…ŠTRPNLJI!D$�Xbú ¤¨ªPX±]`eÁÐÚâêêêŠÑÕÕŵ¥# ËÈ +E•ÔÇ´4"éh©Éé)jŠªÊ +V+X°¸º[€WW,X¬°R�ÂDÕTÔ“SÓÒˆ$$!@ÑJLMß”Ô ª%ªªL˜8aÂDUU‰T$¦¤ ž¾&&¥"�’’”–˜šœ¾ï + +***J*** + + +êéûœš˜–”’_Œ±·<%¦^Ù㙽¶ÒÚ‹f;÷Wãí«X9ö“¼,^–/«ÖŠ;Îýjo­½¸g¯­¾øv«6®¹µ1°…ßàÔÚŒôrðŒ÷ö×[¿¶ÍöÞªù¶¹bŸ3·ýê.rk?òkÛº5®Vwì¿5´‹ïµ!¸óÅoKª}¤Î5s+fnqöþfü©‘xó‹mí‹WPÛÚyîÖs/âl­·~ãîuµ®·kïm·Þ‹×Ëóå]¼ÙÞ´Xw[Å­+ö•ûŠ?5Ýu¶W¬EÎ+®uã¼qÕâÕö†`ßÜçœñݸpŸ ª�liCÒÜ~€on9À‘‚"j9Ê^ÕúvMööºî¡­=‡&yÇðÜ—sSŸ[æ�qM¬Ìö’f�÷n†çè{˜ñ™C¯Ç^8nÌ}.Ï­h%[XVVRS“ˆOOGKQ&L¥Paµ"…Ô×´¤”„¤´ÔôAMQU¡P±âªÅ‹,Z[\\]]\/Z€,¬P˜ šŠúš˜”’�𾍩\2ÄjoÖ:cëâÊêD Q_ÓT V –V ñêî8r|é ûÊ�ü¶°À(ª¦ ¾')ªV`Wxc€ŒŒ�èöeƒÇbWV‹'JH=5-�1U•â +‹KÄÞ†ŽcdgD A„ €p ˆ�rHkmXжF„‚Rˆ”�íÀá•Å-+N`uÙ~#lÌ,!'‘"oI.ÀÄ5qâäÉ“&q`2 ”ÀY 6d r¶þÆÀ¢¡Ã‡Y½´"G.XÒ¤ˆ2%Tª€`Å +•<�Ò�œ0Á‰�AÎÆÀ�eÀ¸J!j;~ �i(YâäSª„0B–0`K/^ºpaÀ²�B:xÂDnô ãac‹beœmI–@‘RK \À f…1,°0f…0(€á²€@˜R&JŠ ™ÀL 祽eðDŠp1! d^8à 3Äpæ…2,¨pB—,W¦@\B€¨!ar*$piÀ˜2gh�‹À 9¬aÓÆ�›6lÖä€Cäh€á,¤ÐEU: µqE\”´œ0ÆänXC§N�:knH3à , À€¤Ä)YÏÄldµ$M¦`é¦L irp³ƒ:wzÀ“gN�ž¹vtHS �@�€A¹ò¥Lš7vì¼ISæË(GNæ‘'W®<9b:Åàagå‘'V¾�‘{Sg!Bt{꼑#óÅÊ“#åY�!uìâ`g%Ü+^È�ñbå \yÆ»ÀR`×3#ᜀà¥97uöÐÕ!R„¨ŽnO7r-xÁ i¶»@W][GùÖ¤J—д¡£PÝ!;=tÚ i¡K•&od™ŽÝue¢)ªêŠK•õŒÄQáâ€ØÌ™TWhn›À…Jœ‘^ٗ溪Šj"Ý6ø`ËÖH`îÏ Aæ$°††1[>ØÀm$c¡…qüàaâ�12¨‘“Ç� C‰ä'�52ˆÑâ“"¼8°‹¤{c� Ø4�R‚ +0àÀž>‚ +%R´ˆQ£ÿ-R”¨� >xxÀJ�¢Û ܸTVYµÆXµ  €ÌذC>"„HÑ¢EŠ +äC;Ø`& µ c5j–ÕÓR’ˆ¤¥�„ +¬4Ä HXNp:ØÙèQ£ÿ÷ØÑ.œ€…ƒ‡}¨³gLŽcb šƒ @ðHLIÃ,Pc�X€‰ä Há�h$c(ˆAAA†A †!AP9‡k Õ?u_CØoa1x\¢WPùËÓ¿Ó³ %M .ÎøÜê$>m„uÛ±yhøUdD¤ÿ—¥¬ !è!^ ²"n¬UÐGSbw(±~Y¤d HöÜ¥A@£<*X5ž~$,A§ÄEû]ïöµxå¦À/¾¯N`Îw©-ãÂÕ€ w`3¼ªŠîàdå�Çðh©c�:*»Ž*`Ð!Õo'sxb©î¯lTúLÖ"H”Ç¿Î9âáCW}´*�¢…OIw�%pƸ�±mØ»)LoKxüÈ_9KÕÛÕ&�Cò®G¬LüNîïµlG©Üßõb˜…zp·ßûÿõ KÖZ¡m÷õtB*YÞŸ’nZdñ4ÔaOøs� rÛ÷u¹Ñzzíp+vŸG§/¼õ¡�¥záºÂzÑsrÊBS‘MChfõ⹩´hìÍbó Úq%‡Œ–<¡# ÓS½eý„aÒjLİæõ·‚±… :æ.õ Üœê9Édù9 +â Û= ©8úÉß°ÐÊo™Q×ÚjRU}‡ž,m´ý¸‹1Z$¹ ÑþdSyRÝq¶„žÂ$=²&gËÐä�T(°UÈycD_­&¶í#Ϊ=Ar7ma™—×Q˜ ¼zæ²ÆTE«éBnY—²´°U¨œ:Ôî �ãá°E·�üò^¶�íA©e1G˜�#ƒÌ1nQ‰$¦ò‰pûäH°¡Ö‘V©5k6æ�n«N㪠YäP€ãPûZêCᤩ¶PS±”¹‚ic¨–0€NVy@m££iˆŽ&éêè\)4k†]0.;c'”ºE +…ªãDš¡#Oã (6‰_î´Ç^imª@´cáO‘'8ïlB>�õ4Ô¨Š U¸‚ƧÎfV«Ó˜Έ>U�Ž 1z© 4FmV5‹g3S S9î¬=•Qj–½ôMÌ’£#K&qE-9a€2MDÍȱÀ “:±AN�™¾ÌãØÿ +sÈ<NG™1œûÎÅiÊŒA(�)(‰YË¥I%¦˜íòþá8Ø0�n³áÀýÃÌó“…cY„™s—”, Eep Ø•?0¬¡ÊàØˆÃ€±¬øãµÊ?•DòÏHàO”-Ÿ¤gÕ�¥Ç–Â7äwR\�OŠõA °Þß�ù½Åœþ´p΋ùh%ŽÜq^&^¾z䎆U—F88ç™pqN¯K'#ýM%%o:G<¤Œø\^‘¸I‰¡Wš’Ážú{"i]÷®î�ÐußæºQ?lJì7²=h¯8 Øž “`»ý¡²SyÌüƪÿ;ùs%nn‹í’i&‘àu|¼¡®r¦>sI|Ÿ´T¹¯.!í%KûzÓ%W=S)LŸÀD¡¯.ç%Lzyó£–Ì�Æ"pø†z1k<È.=Â|á6þv&êø¯íh\‰õü`Æ™¹“²{S¹…©ûZÌì Bp(TñÐ’àZÖW¼¡÷¹ JÅ'ý檀Î(Hj‘œ…€¨Pii¥=*M¬kux²ù5TsÜ XPá´N¤£‚Ù|ƒ“jþâ`ÓY TòÒ5¤=h�qÀñQ +zLÙTðì‡7в93XèPAÒú$ŽBú|îjôJ +RôËæÓùS �_‘9à +5 +cSèíŒ7÷S“L™N²Oò>;nÌ� +WHú,jò5Có”n�� ¤‘ g¡e0•nž•\¼Ð¥p0ôÞ¤¼PÍTqé€3K ƒhFÕˆn¸Hç^ýq‚¸€†q-œöYÚN ¶ ¥‡lz ›Àu8$ˆ†ÀÖ'È7¦” 2æk7Y… (¦ßè ¹¥hX¤´-Ð r–æ5ðˆ¸¨A1s9(xPr)›�‹ƒ„ “g—PÇ›âœoöϯ¢"®Bë ›ä%X„å6s:ua5ƒÅìÁ«Ù[³ª–làŸ3u=Ë÷�Pf +17~¢D$8¿™�Ï[È çØ‘‹z0³µ™„¢ß8³Có¡Ï½ØÀÆ™ÝoT&‹¼aXXôX=ÍE‘Ò…UgvÚ䡟‹SI³GåÁ’$îÍ¥Äq©—ø%‘‰÷Q5 ml§£§|Ú¯Ô—nA±È!ºÜÖÑy?”65S壦Š94UTÔ…fPq¼š:ßÂT"ç¬.ŠXÅ5d÷GV¨kY-®²G².ZÊj ãªHq¸Bo\‘®fWº�ë¸Æu‘â*>¸ÂN\‘e\� ®t×éÙ×Uòu¼úºo|u{_?¯¯ùàëVôu¼ûºl}õ_¿¿¯iäëZôu¾øºî}uZ_ÿÏ×lèëZöu¸úºo|u{_¿Ï×tèë^ðu¼ûºl}õ›¯¿××tìëRôu¾øºî}u�¯ß××|àëZöu¸úºo¾z­¯ßß×dèë^ðu¼ûºv¾º­¯ÿÇ×tìëRôu¾|ݶ¾º½¯Ÿ××|àëZöuÜ|]·¾º¸–m\‡%®ë„«èÄzãŠ(âjp%Û¸Ž®ËWñ�+ôÆQÄÕȪh)«å]Ö‚¨¬‹²Zø³ +-b×�UÜ'¦.T6UÁ+¨óP¹µÕ´(±¦~>RªVƒRbãŽZ›õ�SP§�”å[ì­õF�¸­fàxÜð‰÷ÒgÈóÜï~Óu¢Õù¶ño–Q×ùTv‡óIÉÉŠ¢� ñ¤ºG0›ø¬øªbÞ‘Cμãµq¼)çº-&nÖ/~’ô½XE¢ã<ÏW~Ž‘¿�E›™>Ÿ âµ! +Gàð�L›d£ÞÕEž±x[=I—³¨HóÑ~Òªè"‚Fsw"¤_sëz"ž åÕ“ƒA·*pêK*!XŸüE¨L»æm,|hˆO94ÀҒ燆f72/öñ"\)|mîèµì\æ™ÈÔj[…£'¼? +âcÖŸ¡‘´j¬)OGRÇöª ÊJ›øîAù}%¾;[q¢–ø®wxH­$·ØXó]ëÍ�w ÈÞ­1Ÿñ±Þ�1:­æ Hæ2$//UÁcý›~UbHó^5ËÅ´ßÉæsyz@K´Fï2•TC�Û04BAR®EB¼8÷Q…ÃÑÏÁÔÖó½ñ8–ßýÝKߌYøI&EZƒ�mÓùwû°?ˆ€ú¸�7¸Ñý#.X~¢åKHÞÓ°¥Ï7ƒDìvFúbÊCË”Mô»%z�4âžt¶¿¡äA—]eOÉÉu��)g âZ:N Q±‰AûŸ¿ì:Å17Dñ½Ò@`6§u-û†Â†ŠÁïÝðÉÚIXÞ ŒÝècS†3„Q6De›±\ÉÃSƒˆQIï“boYú– +gŽ^—ÃV,*•þpŸ¸Y{ý£JaÄÈl�• ~¢´ÃÑÚU‘™ßOÀ¾o"S�§Šk&ngÊ!®eiÊ^R™Þ%hý >ÜðyËU-x Üç¦ç°I;=^ËÁ#X%»_z'xšˆžé”€/öóOßž¼�êÔ8©êO/,Ö�º[Ï>3?º3ƒÔKb˜ˆfÎrâP3ý6bSÎIV¬31gïÂ\“óˆLGLç¿ Ô­Î5c9–(f_å~ íÌ�±=%åP’ìp{¼€ “Ö>�M’êo¸A¶§ëø„‘LŒ´ë£eƒjîO_勇ø§öëÀÕ8Iád(òf²æ§$™á^‰î ¶ÿ]ªÜè}'¹þÇ*&+вÏ6èóE’Ù¨yÖ× ½ƒý·0ùq[0³Ý‘m « ³,ú¯;}Üeßò K®â¹Þü€ÈÛÙï 8�§á_®šÇ½Cï2‹s%Ã?+üçAÿï¬9 wþS´“VSžw‚$»W¦"72†s ¶id²®3²¨îÇú½ªd2€²Vû±îíT¯ÇÓ$GIö`ù–"D½CË-†>R\«ñNH=´EØËȉM4ZŠÅ–ÆMÜšˆÄѨyÀ�$} 3tßön-â¯Zºˆá¯˜ÿfµ*n†enÝ¿õ�6Ó� +X§VF,=Óy® «Gvw\qó³þ­d©M†¶¦Ü%]ÇÏ ¼ ˆÔÁ #Å£3#Ž:Ô¼9KÁÎéRç«ÛC�@º,…/«ª:D4̪ÞXØÔ-R¾UrŽwÓOÊNTN'ÊGÊÃP UKŠÓ/-éF/®]0uQHöŠÞ¹Ì6O° +ã&dðÓFHÍ8¼« }ɳ¨… Œ0I—Ä E|®PÎá žÅFè*/;mùņë͇Šb‡Œ:“Ô…ŠÎ‚�uêT§&ÑýÜ¢/yfTN€®îñ~%Å!eû€VV¼Þª~|ÇD)‘|›Wùß¶¼¾òN£‚?Ïdê]©…âZ›~%Rzh¦Ijr…!pGJ¸÷Œü²(ª½F†E€ƒJ&Ôác:Ùw[Èä»n‡qk`âáÓ|ª8öZ¹ê-©¨ôMh>stream +ÌR„Ãþ-D²¼</ Ž ÿùðs½¾æ¼}QFÍ_‚Ö+S1á®*¦½ãyÃ}"ôÐ…\¤f’Fª˜t¬ÆEª05R…îU¦UrG×V5R?©Y¹‘*¤èU q‘*ð©Bª¤Ò©B[>+ÓÎ7R?Î¥œ™°H„KªÐi¤ÊžC…‹T~4RÿKL®Ú Þt-Rs¶'¡ORèÊ�ò@©Ü¡æz74ÅM˜–›FjFÜ"UtUܯ!‹¡¨ëéiÈT‘©zµH-LÑ5=޳.Ò¯rÔ|̆ݺ"ˆUâ$‘Ÿÿx°maU'¬Æ Í”pNjҙ'åÅÊRíÆÓ³ò’ÿTõJKdr¹x—<ý¬Æ “ûØÉ�œÓÎÐÖ!–gJS„‡$Œ  + +! "# !$&)821/-*(%" + "&*.148:F?>;963/+'$ "',059=ARQPNLIFC?;72-  &+1682"(/570 $*19@HOW^djotx‡}zvqlf`YRJ%,3GR\gqzƒ‹“™ ¥©­°²¹µ³±®«¦¢œ•ކ}s7.& "*3=GR^it~ˆ’𢩝´¸¼¾ÁÂÆÆÅÅÿ½¹µ±«¤�”‹�vlaUJ@6-$ + (14+"&/9DP\iu‚Ž™£­µ½ÃÉÍÑÔÞÝÝÜÜÏÊÅ¿¸°¦œ‘…yl`SG<2( "+5@MYgt�Žš¥°¹ÁÈÏÔØÛÞàâãç¼³¨�‘…xj]PD9.% '11&¿Ìý�Œ{jYJš©·ÄÏÙáèíòõøùûúøöóïêäÝÔʾ±£”„tdUF9.#„ÉÓÜãøöóðëæß×Î÷ªœ�}m^OAŒ›©¶ÂÍÖÞäêîñôö÷øöõòïëæàÙÑǼ¯¢”…ufWI<1&fuƒ’ ®ºÅÏòôø÷öôóñîêæàÚÒÉ¿³§™‹|m_PCCP^lz‰—¤±¼ÆÏ×ÝâçêíðñóöõôóòðîìèäßÙÒÊÀ¶ª��‚seWI=1'�š§²¼ÆÎÕÛàäçêìíîìêèåáÜ×ÐÉÀ¶«Ÿ“…wj\OB6,#"+5AMZgt‚�›§±»ÄËÒ×ÜßâåçèéçåãàÝØÓÍÆ¾µ« ”‡zm`SF;0']jwƒ�›¥¯¸ÀÇÍÒÖÙÜßàáßÝÚ×ÓÎÉ»³©Ÿ”ˆ|obVJ>4*")2IT_jv€‹•ž¦­´¹¾ÃÆÎÌÊÇÄÀ»¶°©¡˜�„zocXMB8/& $-5?IS^hs}†�—Ÿ¥«°µ¸ÄÂÁ¿¼º¶²­¨¡š’Š€wlbWMB90' %-5>HQ[enw€ˆ�–œ¡®«§£ž˜’‹ƒ{ri_UKB80(!%W`iqx€†Œ‘–š� ¢¤¥¦¤£ ž›—“Žˆ‚{tlc[RI@8/(!JRZbipv{€…‰Œ�‘“”’��І‚}xrle]UME=6.'! #*07>ELSZ`fkptx{~€�|yvrmhb\VOHA:3,& !'-39?EKQV[`dgjpmkhea]XSMHB<5/$).39>C_]ZXUQMID@;50+&!  $)-2JLOMKHFC?;73/+&"  $'+.=/,)%! ),.0123*'%"  +  +51cca3e1-fe1b-44d2-aaa1-4011b9b7efe8bbbfe578-4c81-4634-9c6d-5b972cf96a309832028306l 328154731963262.4569832281209876497270886451423188386209286 5269058901 cl 3370.981442048943380.6126135c lc969957698353050575135%_%_%_l1492457ƒG¨‚ucFDDDDDFS" „¡ +e! »b À@Œ£ ŠaB aA!„B!Äb�t¬V†19Û‘5Wì°|�>i¬Íêµ­ÞvÛko{ío¯íîmÛ½o»×v÷Ú¬ÞÛím¿À¾Ê5gÕuæ:{é`öéîÎÓd�Á¶²'d¥�u9?> Ë,.í:Ë£6'~ß•)çh h¨jëš|¾ùN4á;Î�û–%Õ‹†•6¹[Óß]�maùõP*65M´õpmXÎRL°/Ö�»ŒfÛ/1ÚØ 5=ü:S扈@-½ÏV›­2Ù œ=¨ñ§úvóÁ8Ū‹�sŠÊyN¥&Q”íÛ��±áko%š÷³fÁWPèâõÝ/ÇT}¾õêš´•êÏf¬F¯ê3èùkžÔeå.˜ÃTó·ŸBÍC†ŠOý)s³%ÀhHWRgá£)èpþ�tXÀÅ\,õ7dÞ/­únÑ›µ’ΉmµÓQùC Dy¶Ø GËwä6ÒD2¿vÙ4?MM=lº€¿*<ºŽ@�ðÕH³(݇®Æ–2'rŠ?Êé]À€íF˜-œg ]@;…¨JjlMzJÎù�cKŠ_…�Z�¼ëÚͨòh¨aÐBÝŸ+uí „ú@q—m«^[Ü'k€Zÿ£•q¨AXY⻼ŽÎV,’÷¦ÞÇqªVÜ…—�¶:=cÝ´¢àDºð¦3c@é«€ éa¢"é@:À·HZ…RC+3á¿€žBæÒnSª�8 sÇu€M"wþX üûÙ9ÀGŠ3ø3€êìö0cž„åhÞŸ„óïBàîËX^³ƒ™X¤£¿jM#°à2¼ú½HËî‹y€{bùguÙ©‰›ýz€ž²� FmL€*òÈÉ=@ü\jRV¿ "é …v|€¡u¨_Ü�5­úîÛ8_D#£ù}µx¡�àý²çØ—È€JQ|:ú`6ŒCmtÑ ò!$£á*lŒŒ$qS"�'¢ý +{Á'æbÿ‘ }Á*M6@ìá:•€�S‚#ÙËLÀ…¶…€=ãí7•bùÊpAÔê/õÀ¸l~_¶? FêR$él$ÝÿüÙä ÌèRäŽGD�2~<¿ @"àÛ‰ßÖ fÌË uµÕçÿh)ÃÚ¦„`3˃Mj‰Û«}…MY¾ZƒFCS!Ì¡ÏyË:m$´‰gm4¢ZìH>´‹~}À'Û:hi&ØPñØ2¤_Gùž1z“­€}…}3l¯16hûGBdxJçáF8¤nŒ�5ÓšKZmh"^Kºî¿V9õÒ€a& „J&ˆí˜Ð]ÞÛgZ>A&$“j±;d¸ž0(æ÷R\œóà$²4Á"ìÌ/fçzèøÇ[ü|U£œmFrçbâöiÍ^åÈ™Áß|¿ôõü!óµX’zU¬.²3ÞüÆXFÿöhÅéBp~ 7r@Ò¿m8Úç÷µð§Øÿ©ñ_ôZzƒ¦°@€ ‡ƒ³úO²¦˜Ó¿z8uhÐù¥ŸØ[!ÀW™¡¶²É  ‘Uеà\ñ×`Ÿ +‹ F˜[Tº{ŸŠýo@„wy�KQ¦„¥àiŠìOŒ10£ïììXå¦'4H±ósºŒÊ»¹«ìÊAæ4èÄωr¦‚³'Ó=`‰ ä{›‚_ ³ñnY˜‘¼ÁtÙº¶Ôš±¼çÆ L$ÍÐi«Õ= ”ýŒ3JÆ2ôܱŒdI|À€`€¬×ÌpÛŠL6*ÝÎäèa|œña¤R¥qi——â†ÊKduV? HCð‚‘Êèߤ~@_d¤žW¹b—Œr…a*Bä2]*¬"ë¸Mãò|"c�Ÿ�LÚÅ´¹÷åÓã„T± œˆ•eÛ¥)¢&.jÅŽðz¯÷š/<�¬–Š–‹}6g�XòÆ;JaŸµœ…@Њ‡±†š&,|m¡q/;ZïG + ݸðÈ_ËþÝ…¹ÊlúBd¼… òa¹¢ÌPO¾Œi•ÒŒ‹£LF.UuA‡NUW.-4¢´C(S©XÁrÀj!ëU¨Jõ iR „ôÈQ#‹aƒKv=û‚†<€A²ÄIÔ©T¬^É¢å#hÅrµ +¡v¸Á‘ ì´Ù5^¨@a"E‹;`]Reë`M ) b$ S'Q¦P­jKV­Y±^±R5D©P›*AR$(Oœ4a\¦$ù 9$x–�mê¨Ð‚ 5`âäC)!R­jå +V,U¨N‘µ©R¤EƒR Ã†Ì ‹#Ëu¤J¨p ‚îü1$ƒ¤K›zD¨ˆ8õƒžtÀÒ"B|ê´9£ÁQ�x>d‘&W81jâàùcˆQ$ràÔƒ¨€8DªM˜lx¤h� +vÞ|¦K&Cb @æ^_ÞâàñCH‘£*å°©Ó'P£FQŠ$"öÔyÛ']ü‡Œ)lðÐh’(Z>2"À±³GСE�$QªÄ©“¦L—p˜©Q¢B+ `‚8à°<™Àƒì ñBÅV% �ùˆC”HÑò� á ôaá�"A¢¡J”&Õi†F‹^(hÏ9#œ ã°<9òZ1ˆáˆ@Y"lÆ6qêäQÐ Cˆ5Rô¡B‚þ¤€gÎ5e6ðråÉ*„ë,R¼ ‘ã‡$¢J/� a8tîäÙÓç A�ùá£'uä¼YsFÌ·ÅŠ“ ^—LF (xACÇ�­H*°rÁ ™Ö´�#‡Îœ8oؤ1#æ‹—/)Lº\ã’ÉpƒFB¾‹I”+[: Ä”AC‚ÌŒ óy«RA" {Ü�áBE‰^ÌÀÁ{È‘&Q,ÐÒ¥ËàŒe0FL ¼mK*OvØX@H .dÜØñ#N"G˜<‘b%‹ïë8/\¶€]¡¥I’.*!WŽ1Z¨ˆ­hÑÕÈ'$‘€ÈKèÀÖ ¸M‡,a"A‘ê,$ˆ�7fÀhQ"… +/ ¨!ÓÑ#*WüáƒG¶Nl¥XÁÂEŒ5nàÐc\ÈbÀpÁb+Æ +ĶN4À@  @±…bk%L”Qj¾ËP&9²œõeC•ÿ•ú”²éÔVÊÜ·ã>uçI÷éjÛ+y§¬”zkÏÒ½^:ÇHý£¬’«³l:e“NZµ�ËðçÆ·ÉUYádŽƒñiÃ߯aäYåè×ùy3)ãö}í wF+¤\×Pru¿íÈ}þñGïØ<)å•í5¾Æôk±ÒH'Óþ¯•)e®Ï9?Ò0±.FþÙt2W¯?©ô¹ýɱ0�Œ©Œ;_6½}öÓÚûM©;ËÊ,é²kÕ›«t©ÕoŽ…©t=NçÞù²güéÌ>_jîsÎoΪÌÉ ö2…½Å†Ìy #·ÍYŒ[WgÇÅŽë$'aü¯°öÖpãê„ôûÜ{¢ØZ`kë ( pÁBEŠ­ , 1x丑bëÄ–+\ĘqC×mû� ¡S + )P¨ðׇt‘åI&I$ B[®6hEŠ\Ȱ¡Ãdj ^R¬tÁ@Ë×*Pœ,™€ˆ/�8hÄh¡¢GI»–T0Ë]º 6ÓA˜/Þ†Á—•(M�ñøcÇ \˜¨¡#!nDÉ“*`]<0bÖ¤ùÀ ™°/Ü,Rš°‡l9äˆ*`Û1Œ  ™0,Q˜t¹8f &`Ã� ]d ,]¾t€f�›œp'ÏVèÃGOìÌ1ÀiʄͶX©àH�ä ñbEìD�ÙEÁ-³03kH sG�Ÿ@ƒ ¹p¨ +ðÉSçmÒ `/X¼’ ÙrÌp±¢ÆŽ ³«I 2 “ÆÍ<|Bƒ Žl¨AR¤G `”ÈÐþ豇 š°î+Š’!뇌3rü`#M¬pÑ Ìš8بE� Õ@©’¦L—p°�GŒ ú“Ç„7!tà�EIR#×�-¤ +— ̰)!~)b 7\Ò´©Ó'PœvÈTiÒ 1¸ÀÂ;P3ƃ‚ä!�=„T%S¶h`f„9(:C¤2mòjÔ=pÒÁÒ¤G0êsŽšfYžHÐ@rÌh!#�9° ʰ™ƒ‚ D ˜tiÓ'Q¥N �ŠT¨NšpˆÄ¨?wà¤á`³ I‘åºcEl‹4¹Ò�ANA/8¢”C'J‘JU­\ aЍM—$Å`ÈHø S’pÂ$)†B*œP€2ßד.é#q’Å+S€:} 5²AÓ'RAÁê•,ZFQ $’ˆåªT¦DqºDâè‘#‚/U”P¨cÆ1p¤9 + `$)“'RB¨j+ X¬R™ò�‡J3¼èΛ3_À*0²\6^ÀÎD3Xâ4*U®dѪ…Ä,X¬RJJ� +í™#‚˜.S�8<k Ï lÐ!ÑÛfÎÐg»ùoÎÖçw¼uŸ×ÉéÉŽuƒ_¬ŒÝ6t)~Û+7ÖXçÇ�”ug Ù£zþ ½nö�úçÅ÷ÜGŒ/©ÇõéAçšBonØKr÷u4Î_0Ú,+•ûE§Ëº4®&}z­Õ¥K—r®æí±0Ù¬ü²ë2u-ÖŸPöìÓ÷¹¥sÕ–!ÇÈ`söìïÖvåW­íë>£WÇúKk¥³¿e¥«U®e¾ü±]sIÁê·F[òr�Ë®Ñu÷’ýœó§G®]W«¶t_ÉÓ¡¬Ýãlߥ³5—4vF¶ÝÜ6®£•Ò®ð;¹Áæ¶!o^„4Î"s»sz½uïÕ�«]¡×EF�nžwp™óöbô æÞUû•»ß]£kq©üç(YV9å;ןSãefï�[åG­)�2÷eîoÊR›?ÆGëçíÍb{R +g“kȳ–З2çÒûmžy½í½…Ó= +¹ýÎvrÐåOï«­uvܪ”3†-g¶÷ ›iã³ì¢Ç:¹£’ûž›Á¯>…³�6Üf-aœuíXFîš¿ŸžÜ< ·ó6Ø7ܨ{p½w¯»·“Þy'eç³77H_6Ü>ï`ÝvÊ®=¹þ›Œûã Τ¬�r×pöß·žµ»O®³YWiå¸y·÷6ÈÉ®ál:Ãù_s�ŒßW+ÿo·¹Ý mnØÉÙ VoÒÊmžƒ½wÕ¶®¿”r_Öø¾³ã¯ËÉ“¡×Ž‘JžQ‹[]Ʊ)/×—¯Õ:rܸìõþûµç.ÝI#G×Þ}wåWËgïèT£“JÉ^,›?jM�¡û¤[åö»oÝÕø%olù®Í�’iôºë«ÅIe|™O/^ÊLÝ%OJÙµeŸ4R¦þrr7­Úz\þž¿ïM;ö¤Zt鲎%ŸwΩÍw9?öj±ãòôÙë²:å׎KߟwÖvnºÚtÙ2O¦ÌÕ9ö%ÛÊ^µÊÒeTÖu÷§rjóÝ!¥ò——µXiÔvWÊ�TÊ~Öhœ»1¶»K§O¥¿Ó§ßß^ÿrÒ�¾’ÆÂ6vË~ºÓi}$ûüMŸ§·Öca_=Êê|êi­_µI¿½7Æö’16¿dfmÊù;]£<=Læsî»æó'”ɧ)•,_‹;7vF¶µÊÚ]%3ä­^][Ž”>]ÉÏ_¥×¦’!�±¹ãlÍ'}¿v|J£¬y×›¡7�,5_¹µNŸµ§F+3”­óÇ_®±å|(s*¿Ê¦²Æ(çKÖÜ™!¥ëÎÿÕÛãtùQ¶6w2¤ß]«ãî.]�iǸ.c§2¶6½{¥K¦±ãl†]7GŽ£tn|Z+ôf±a¿G¸ÕÏóºï›ž÷UöYý:è•«ð{nÈümð››w_Ü›M9á¬wƒ¾m wr3(»ÙQùÅø½ô(=úýwpn¹û†RúçFžÔgÓ/ùÒe;o¬‹Uû£œ2Öq娓:7w}ʳƺéq©Œ½¥3åŸÞ,_›,[ÚQ®GóXåËÕb;�´öjqÒèÍ�÷²n„ëqv7~’+lîÛzöm“gWî…ͨÓùY�R!„ˆAfhˆ&c€H‚�(ŽIŽ.‹÷€� +±P +‡Ãa@( B1ƒ ƒ B!Ä8�JÊV¥1?t~vlÀcjjÎ�&|œ†¨u5—Úî,× +,úó§õì/YТ¯„¢¨ÝšÚ^±×ÈØMÁ#Yz|¦h·½jðNp�#t`weö<þL¦E60¥}±7îõE^mBÎfï’û-Ñ‚â×û ƒy“îøhm8 'EàÑ%x(î $}À ­%?ŠÀs^-;8 mïêEŒ#ˆ¼\Ìú%#5btQ`Ÿp} l\�n¢5xZ<>w%gùq�ÂdÅ#Ɖ¼ƒ ¹Ûª"P½ùºõOŽýù«�f*Ô¯…Á óL•KÊ�¦X²yêXÈ´öäð¿Bn©ˆ¸˜R ÖÞæ—‰v€¨µ@:¹+ CÁ–0/ÀWÍÞì��[qQok*"ʇwPeË3 E`}&&B uÃQòÉ8a¹ATFpÜÛ² $wØðØp¿³ÂñÐ� š }“±ardàk‹#¼`(w�ÓòpÇ)â%ƒ˜ +Ù쟼F›ŒèMårD,¼c´Ý„ÔÉn®A=MùîdåN��œ¥<9ªÀƒEì:rÏ~`^E;ãEb�ùT½gw]ÇÈQA€•ï¼JäÝõ0Âg' O"�êÀÒ¼�‘’ÂcC1HP?Gk¬DdÑ‚+ MÆ':÷L’1tÏ+¹FýQÕë�íx,Œ»3œa&%s[¸pÁnl8Ë•ác’3aº!di¾³ &`t"Wã9?AîFY ©È+Fô²€|‚`^ecvvšy±&´5S7Ü0"û;0'óv† LžüQ|N*é$�´séðB~*ŠœAûo¿ÅâG +v´þ–´õLHlA uéCP„Õ!‰òY.âÿu("›³ê�2BNÇŒ½YR)…±½h€B,¯¾^Ja"곘W<’zÕ¦¡x‹ÞP“âñáO�ã1ÎùZ¡ú¾S¥Js™âŠÔîüǽÈдŒ…|µi¸iwî¡%XÖ±+<Ù@*à8éK`›=izŒ„ÎÙ †TÒ¨žõlæDàû¹zww.ÇdÁÄ"2~�rA¯‘Reo×ð”@¤ðaV¶ ô*.Y�ƨ Á?ÊŸ¢#Üžý“Ñǘ}vG^X©Ù°@4ú,F,UPS¸Qóº«}õ3qüšƒe¹½°*¾#�_tÎësPÍŠgЈ4°ìD´IƸ+±iUh¢Ò +Þ!mgÝ,tV^ïGÎ\ã +€ ä�rs¿0:Y—(]>†˜;N{¸WD˜xRÀ.­8ÛÁJb¡å;ˆÂåþBÐ>Y,A³k‚³ºZ‡}3E¸Ï s`]»ÙS³ƒ-idp4 Ê,`â’g©�ãGPÐ +Ö<ÓF$dKÔÓ££®ÕAðÕrc OÎ8p»’^´@Pk€ƒ ²õ¬àßXt/uÞbhÔSŒŠQ¡Ok�†{µcS“^)Ò ó˜�Jy$ŒVWÌÐe¡'Ÿ­/ `«`WÂhÒ0욨ux5ùië†�]j 2Uw¨)kœ²ûš©7±À²ÚÙ�o°,iL0¦Úª;�&TS‹Ä8IW�Áô,±Â,è…( +³'“ëa(ÉøÓ˜ +ø6ÉÛrä°$� -H8Ñ@íšðËD”«NRƒÔXŽ€VÆQ¿Ðà‘=g“ՌəAlc¨®Dg‚²ç™T’Pzâ2<±³…êÎ¿äÆ›s@óÔ�$YTîlæÈ›z­é²n&BK!�+Ð,~‰T‹qpÄë#ç¦ìº»® vgXÕ%YrzÕÉ®P +“Sй&?'ˆ$XÀ%m'µvtÒçÎå^®” å2Ôx–#S ª-»Sú˜îUmÐ�¼îé0v§ò � +ð‹ µJû5Hg͇‰ê·ªFUÄ �mSpâþ™ÃX»‹£ÒšÑZŽ‹ªSåÐ'A!¢ŽY¸ ĺÙon쎉 |¡ÍýBz-'ckp ÷¡<[²„~<Ý3 œû¶±®Žãƒýøxöˆ\B¢°²NáIùÿ‘Á:àÕ`gêÛ@w^“¥V�Ýah*ú +«2 ÜJ@ +|€@Ò XýÆî„€,\VÈí6À†sS Ò½Âý胭#tn€‰/éy�8øàÜñÛÇk¼ª^�CèÍLÓ|þúŽ&dRm¢†5*Z|‹3½éÖ·oü#±ÌÌëÎ.‚ôÎ…H%‘àäö�xû†YºÃ[)­OˆØ$YŸ t­RfÇ7<&õàL×Ã?8›ãlaŽù°F2 Tl¤f¦ÔúÊ+C€““ŽX¤IM�qö ˜³ïzQp©ç–aPØuç7RVó¾xÔ’vŸé4œ\ÌaÊìje5üÌ€„oY�¿T)þi ¨œ…IèÃfW– +D¢'§cRËÔÝ�î­q¨ÖÁWP"ª½œ‚áhÞéºãgm +%߆q,6¶Õ�Ñþ‰rU×�*0'q>Á£¼èJ…eýñ°ÄX—½¬JªcÙw­7Å�%�Áºž‰ˆ;ŠÕ—rbŽ:&Ì‹»�È /¢P©,¾ð©Y­:VÌa¯¶Kc`ØÙ&Qí®;­H0Ä¢ +ÇqEl;áóæ>½Fd×�ÜÐH뿚f0ëœ>UøïW0WC7^Oìº#‚ ¼# H×ÀRÆŽf„óÙ¨yÝy"R´õÑr�I€6_WoÀ<}žþ’Ž}¤ Én?„!V[34¬’?ú˜×ņ™ƒì ª`7…áú«‘’<$èÔj&OýçTù +ÄØçBK­ Ø s2¬A4á$EJ³Ñm a'¿¹±…oAXzÜ|�#�¿ WAÙ2 +o\~Å÷HÄ+*‹w.´ì ×Ç%ÄšXìaÞ2ëÊu†Z(¹rƒ®fðC.¯˜"h©Ck¢ÇÌsÊèÃ&ÖâQ*ézJ{ ÆßyÚŸ>ü³gNØÅo(%˜ã›•§\T]Vž �LV³öÆ �°ƒý þ‘5ó%@Yxz€on„‚¸áä`ÓHÂ�4ZrF‡kºx…c´[ ™>‚Ê*‡8gº–9«Ü „ø í¦4ƒZÄ‘¢A +|Ëf ]•‘ìñ¸O#`hÃê:…óªö'èÊNî\U™¸´G Öþ–pôP Wæ¦×#�1°2ׄó<‚Ö™déÄðÏ +¦Øÿ¾ÕBØ´YÛwÞÖG| ÿÎÔ¥Å>Úð�›Ù«4üãø�¸¨J<‚Jb£ÔŠ^?Í{Sµ…¼ˆ¤½J KŸ#ì­ a ãçðﮫýÃÄÁnÜ™äÉÐ?N¿Gìoî®%(Ü…¨ˆ‹ö Q&’­6Ú=b_/ô˜�?³úKøêOÇl> T!Ííp¡'è„Æã„6÷2£ÊxSTSd]߉AyÈÿ ¹%•ä7ù|Oþ—tÇR£+ñ7=z¶ùû«?@øm#§m³�+ýúÁT^þçìdM§œm"—­¾ð¶fþWî¦ÊèQ¸'Ej2(Íÿàtwõ§(ˆbæÍ)ìõ#j�ÿy¢aÍDZ”pWÓQÎVH+¸ù׈ÓÐÿ¶tÔÄ*q伄‰þ‡BtL”/’üEéK¬ +®I�e†rmëô¿%$»Bé…T©ÿm•7F°ùœñL? .Yý∟r0@n"jý‚X_I›÷?t¿þçÄ4àÔ†÷?çâcÿkºdgsêëù÷ì8PÆéKÙy%�}¬×þ·vÖ‰6«¹ùñýÏöÕ_‚‚²|ç™l�(2î¬SÁA¹ÜÚÚ+E\T„ã[Yüî^¿ï"2³Õ·Ã�W¶ò:§ð™M[¸ßÁ®Ûz[0b8GÒúâ•{. -²î.|‘½õúeIþƒ;,à +5ðÊZ½kãPþ#cºÏ^?´úþ(Pf³ï�ýÔN­±›^?8A[þóÿõúiÈïï{Úõžï Üï¯!Rqxds=i‚(Æ¥qgþƒEÁèõ`ñY£/w&bÁ3æsfØo„KÄH�ÁeŠ>WÂkòQ×ÒÇê�9FIžÔê×®%ìFŒ#Ð uØOçÉd�©V§�(¥ÀN™Jzêk¹�÷6y‡².¬Ðsl´6φ°yçFƒ3´›LrxGô±Ì‘ m>7DX s~—ÔãÏLÝKÆA •/•GŠ $�éÓåVª�¢à:}ÝFb.�ŒGlá£Z‰ûJe´ ­7û»´Y1C9çBCÏ"z£S+DTdù²X9Õè–å�¾ü,ö?Xι´œèå¥bÿ³U,]úο:�ìr�yXÎ…ª\—´'TwÓ3401³§”Z­•ó¸Y;çß„ß{Îúk8‹¡s²Û¾Ûøë¹Íª|FºQè}^Cº;ƒ³™KžíV">el95¦ÿÞ±µYß¡ìÝåO—”}j2ÖoÿH«Ü Ó>?j-k,LÖM'GmFêPö±Îg×}-ʸ“+O*)�ÚnÜX˜NV½Ò•‘Rͩ˖ÊïXywj^=Œì×eÇX'{g^ãFŽ‘Áx›cS^ÙüÛ¾ò¿ �.%ÊI±ñ>ª TFëË7U‹MרB9�퇞•/L¤¸Ó1s…êò,æT£iYÞeX,�åLb¡eknû;ªrÇEˆ¾¢ºL»ÖR¹ËT,¿£!wðÙe)ÖΖgë²/Ö(š-¿S‹ìÌßf»RDRË $8Á– «bTŒ¦.œYÒß�4¦Œ]Œ^†äÄ™€Ê€ÚmôT�šé,·hX ºÅP£¹ÐcP M͉D‡kLÇR 48øÂÍf]Ú‚‘ƒ S„æo"¬3–þ�¹Q/Aÿ� N‰g!Y÷XÀTJÀ‡8¹›ó&ˆ³.˜G:žQwÄ+¿j$ˆm/þò@JÀn¹›ú'¸iyO!ˆHW}ÀF1U<Ô�lmRŸçè/Ú�1ã2óßqvÃõ{gV‰Ó$`Ízþ<ÚG„¯ÁsòŸØ“ðÀÀmyòÖ6l@[TºÖcrÅB˜†õÇ�Ë` Œwª%̳asºUPZ%»é½bSIÎØØ¡ê•§oPÚµ„éõ(”–Æ<éûGž¤Aêñ¨)ZèÂ;+ç/fMЇ)­Èx¤ðLs…€'ykª…Þ�”t§ºçºDøƒo@®êv¯–Åßb‹¨9-j†#ˆð&>ß®”mžBôbu†h1#©†BÜ�…¨©6¥¤Ü6‘§TÍõŸ¡Î€Qæ{OUþøýÝ +Ûâ&Uí—¬Jï«U•me\ zŽl!G ŒÛ95ÛuœŸ©îJÔ°rƒÆ›Ò·Rn^жõ‰—ry;*¥I²QŠ´´} +D‹³àl)>Ü”RJ)¥¢¥:êmSÕb`Ç:PFÚÐȼR<°GeËeÖ¼¡ƒGϞؠI$¼âwÇäÔ]êyñóçÑ1M:yö¤ð˜Ö}š¡GÇLG�s’¸EÕ•9Áœ5c¼LP¨�›ÅÄ.UöŒ°•½p<“ÁÀ%DxDò¨ðƒJ·ί\ÊO:mà Zi2- fŽb:òƒ +#€`§ƒF3h™²D®G�ZUTÊ(6ƹž>$˜†ðÊ;·NXÝ„“’¤† Â,r0Ç={ðÔy³†Œ¡À¼">ÎÆº˜Y‹!5nêÀiT<ìb¥¯ÎM4LTÊFyôÐ�Óx&Ñ‹`<9¶³1V[ª)I(�ƒ‡fÔp§Î�<ŒG‚0àSqÂþ f@f±ÑM:˜A,¤€ +·4àbj©¦¤¿@ Ã(nÐh‡0 _]\³^XU. íp›ËƒbE‹ Ä”A³#›1‡_¸JaR·6�áBEŽJ~ `Ã!@ÐX¡á¡¿<:¸5´f˜ÖRO9�0â”AÅ—Œ²4 rvz~T®PÀ…°Ð0 +ß�!<¦Í°-&WI,!u@ꥊ¯18ØÞŒ$ÉëûS27䇎22°-f_ŸtY^ +<§imoE�(ÑãëƒòDÍFtìK+Wau…ň¢¥±‰µÈZîõ)©T$u?sE 1P3 NQT»êJ«E 2h� DG ’OS—WYeàâƒQ“” »³œž¤Ö)($¥¥&èÈ €6tBš_óUãäÏÙê�Ï8‰÷ݺãÕ㫧ȧæßflßwíçÎñFN“�{�Ä{û®5ÞÝç�íÝ;ÿµÿ·{¯ÎZç{‘Sß»¾{µù^$çx[Í9÷ÝrÍ×mñåЧSj=”{ÕK›^uf¨Ví¿XíQèŽb¨TkýÄK›RõiïW¥]k5ÚŒJU õý{/­ R† * ƒ2\@’è™jêÉi)鈋yb[CB]+®ª6U‰LIE˜FHÙ¾4ñ”T2âP”Ä´õÃYÆ�a]ÀW¨ +J±e8zøH›>øÒbzª¨&F�Ju/W °@Ô†ZrtK쌼ùÈQFvÀ•·QMJFCB�DHK$Ô�BË…Œ:~ ¡Ãsò÷DÏ®HjS§X×Õ·PɤSz©FfÆ£#JšH±òd Û�ç‹®+Oõ$âQ \¥ÂÙ™ÚÛÜ¿* "j°e)Lìˆø¸ñã²âj 3µ7º½¿+\̈¹`0 'wrm7œ l-µ”“R‘ÓÔ¶ê‚A#Í�noŠà`ãbÄB-Uú¡Íp‘uÂB1!u +rDo +Â6ŒgÄ€ÙRÅI’85³±WÜĆ^2¦làE$DTdt#Ç8lÒŒ³%>$n:¢böÍ®o‚.‡ŠŒoÓˆù’eJ^|NêÜr<Á²XI„(â°aëE 5"xSò`3[€ EŽ�Ô!(C‰mÕB† sM$肈ÆQN_�Í/¬>å„̃¦ÁÝEùƒGD�†ØŠ!”¶jK�²µ"zp9ìC‚ '<>¦Iì"ß‘¶é˜… +@l¡srÅË5_ýì„àJ�@3Ç[’(Y Ë4ÆÁ3ÇqH“Þ”"kJkEöªX�¸èæÑJ“#mg0¶ª”¶j ÆYÛ‘&wôð!ÁOa` hc]Ë[ÔXH†± ,~vBnÈ`qŠ�œ(wn8fxY夤¥ +,Ù{ÞQ«ðˆu;¸BŸG$ð`…PŒ8vˆÄhôp@�Èqú”àƒ�Ÿà2Œ&üù³…—\cÓnêˆÑè!—¸E6r<�OÓ[?ÁÂ1jÞÔù *3YDÀåð ›8w@Øó‡4‰'V$ ÝwE°pO’Ó¿ò"³ñƒÏ“tâ�&úA@òÕÁ©UpE +".XªøåÍÁ"=a¢d.®MGÙÞÐHk�mæög­ïí˜ÿ)™rúœ’)_tëíš±îß~»WÎy÷Ú~¬s_ÿÅ÷jg‹ý¿ZçÛùÖ«Çw_­{þþæU[ëÕ$þ¼ÿÝuþ}Íûruc�·ß¾ó½ê›ïµ™c½n�}·w÷õûmñߨãÌ×ûíMêž»Õ:yû|5Îßk¿zžµ×Ú⛿ޫ㛱ǻwž9ÇùgÏ×Í÷¾ØbÎõ^ùßWÍ>[®Ž}Îüò¯}æW{Ëí_s¿»_­±^yÞjòîß;_5ßWÿ�µí×w½jm»Öùkœ5Þëý¹^ùOržó]÷æ‰ö"‰ùæÞÚÕï­&¹ÿø÷�-Æ+·üªÉü¹4ß*-k޳ÅÜÿ¿ö¿¯êù·žç>%S’)mμO‘Ͼ-×=ëû{Þ[÷}m_5Ö9}&¿Þ¿[Ÿ¼ùŒwöYkÛsïº{Ž3¿ügœû¾÷æË3î{ë×�óENóÏß{¾öœûµøÞ«-ö+¾úF›ÖÙ„~g“ã¨ÚµÓ©B5T«öJ­ÝÝ™¡OߟNû›M�oªB/öªöV«<úlªÍÌ­Ô)�²PŠSŸ’JFCB0 à«�·-f§‚J&ñÁÐY´f0¹ªÜC·…é �ÏnÈrà à°HæÐK*MìòrK¬ÍÅD$ThÂfÜ#€J¹d4”! +/¹`ÔP„@nÍlŒSK%?˜ðX_M‚ЄH¨CJ:L)¥R"3S”t@H18ˆ‚P..ÀˆCÑX +…BÁp(…bˆb„¡„A(ˆ�(†A8ª™T’Yyð¸U´ÈBpš-®4Ù*¬ŒO_JŸ[i’d;ù»#Ï(`Ø· i÷?Šð?‡Jé`NÉèxïà™�;xf;Ú3u—îWŽvðĵFž âë#dò=Á+§YçPðdÅìà‰nFžØFS7v³ªc-rÄÀÃg)ÿÖ€TeäQ´Q&³Ç€ž‡—ídA’SE”¬¤t›š˧óÇ'^÷„ Â0®µÈ38Öîor=Oi«~Ëû~ØF IbNìc û{šÌ�rICmg\ 0Ï[‘'µÕ¨ÛJæž)ò ç’ù�wisB_ÔÁn +EŠ<7“"#²ÑDšÿkªµO’½3 Ó«I|‡§»ÞðÔ ÷dйÇyì�¼–éÿ\k¾6è𨕓QÐ�`ç ô H…øžs 2„2u;Ö)}:§H‚ÿs`&Æp¸èwF¹––)25ù±§¢e²Ö.ßà¦w§?e&¼A“Ìa·œ.%¸2:hê£^Wè@Š!|Çd¬a5ÝøÕ:«'•xiºjt`ëJ´‰×WÔcÇlTûLΆ+ûÌ:˜[]Ïã¸yÜ>Oç¥ô²éÆšQzs$Âj‘e†ŠøÓ¾ƒ‹4�®ÑTúNŠÖ‡M“0´ý(Ê“´¿|ÐkXM» ¥×Á³uŒ ]Cf¹¿6úßAÐY™dÚ#FŒ|p%ÊòT÷LŠ(àAý‚„-Ƴçù÷¡I.7TÿSt%Ø÷qNmPÎ�5è7=9\ÚáâŽT°¦+Dþü åü4[þ€r~TÃk ›ãNÕ`#”óÄçÁ•i‘¢œ -ðT†Z ” Êù�üý'Dy¹PΊ�|UÑúÃl½¦œ?®mIÇHoô¥êÊùÇ}ÐwÕÌæïK”'rµºz Š”ókê +æþ@æÇï‘¥Á”hÊùBOÝc”'\ÄóôÄ�C¯@¡4<ïL'pܲ«Ç<ñÝ‘áLî9 P­e¤×ÞÂ\’œó솃& ¤œŸåÓfÙCñ%—0q̳»©Ç£¿và;ÿë¶Š`pö™�y“«Ž…ÓãÑMN‹NS�yàBÉÊb\vwÀTUÞQ´gÌì3'6T…Fœ0æ�~·üöµo~ˆPªç#K�Zzª>Aâ:5A�qôØ”çÃi™I�z‚žàR¸ßǾuîjy‚ážB†æBÿ¸[O-Y¾‚‹ÑÈ'`àÀÈŽqÄÄ™ìŽmb[ºÆÜR{“‡ÌtÇ~TTtŒ«üÇèu×#Ö$ð_%vPçìœ�KÅîÿa}nbyßIââ +Üü%¯:PÑÇ­ÄX\èŸKÊùš–ô^”)s¡GW¦ ÛÔA”ó'Ï‘ü•|Œß Iû”P~?@÷9Óz9æ;z#ßJúŸz‘Vý~C9†Ãlúµ08�Z"CÌaŒ¨íž£ÛeƒzŽ%>‹¨‚CòH·åüÁg> ùI�d‚Êù'd ÁdÅXÒ‡”ó¿ÓŒÄ~CŠ™„L ³È4xt¯æñ&o:Í)ž~´e”ó§´šƒË^ÚNÙ£œßi±ûi‘çx˜æ4±X�]Êù•PðݶöèNÅòl„ï¨vÇ,åü#/�½šx$Giί ï_×<3)çËÅGÝgr?©y÷‚^Êùkf$TsHvàXº  Õ§“;ûñ;:X°<Ž*�†XÐÛ¼}±¿‚îUä+ȺÆÐfÝGû^A Êù)“ÀÔ‚¯àÇ«yfÃìÉ®`^Ú¢+ˆ$åü-Zðì rßÖ|}W0ÂÌõ0 #oáÉz”„­à2¨y€á]Ô +º)ç�&qÐ +Þ¤¨ª1+‘ýÄrÊ +JB Ó<½ŠXÁ ú¥×P°‚.+ÍCO³&&8 ÖMšgµäè~ÛUp¤y ýCñkÌ8šG+Ï'†Ñ< ÕÀ´*9L9‡Û¡·çÜc¨‚-�”ëæv£A¶€¶ÝÁ�Å,à<¶JpA>ÌF˜Öõ€£ÞÖŸy÷ÀÞ¾óXçôvN{fû‘ç.�² +,JŠc³�\,EUÄѺ@гß-¯¾Ü5ûLH’ ‰^HC¢\fú‘š×\¥èÜ0ù£»'AÚדּì9÷Vèb9é\á´üá´œR«¥±õ¬ÞÚʀͪÅU ·Š.éö¸¾v÷FÉ]´Ëo„6rÿóŸìnzçߦ¬˜ÍšR®ð’ÚU!H¬#йeì¤4¢n-e P}ÁEä(ç? +l&”ÿ߈$¼¶KÐfv‚ŸK/ƒr +åÁdÉmÀ˜P|)Â` Áß +nÀ^¨Ý|fë,úÉa…7 ‰H”UÿhnF6ó\�¾4ª8IÆ@žâ\9œµ0+-ì*õÇ:ËZ%m ÜR›t�öFË$ÆõѲGyçÀbÝ$õÆ cúÚ˜©$R�Åxr¥kŠ’…y�d S˜üÖ¥,AE_G¦›X)ÎÄ| +uaö5Ft‚ÀD`­M6Df‰ø.Õ6Çœ};À CGãÿŸûÊwwÍ Ãâ7Q'>¡j¹ ’]í‡?Â_÷óH€Dh’àŸ+5çªA÷±8înÚ@X=² +ŒÌîO«ôk꽯#@‡Fa†Ñ†Å{)þ“N¸¾2käò†Z'\k­4匢åc‘N¸fo8ûtmùr!¾Rý†³S®ö®Àª¬gV› ˜_JnÑ ÷ÕÍBÕœ±Ü;á’=å�§`2Ñàéí„+,7±¬¼H¤¤Ü¶êtÂuà)¥m²É� +r£¸V¾WE ίU¹®*¶(Ý~Ï9œÃ ç—®ãPÿ„L'\<Þ™HffEÀ‘»ßz\]ê[¬ p+Iœz²mm;º¶¯�H¸ÈxŸ6ò‘¿Á¿O$"4“ì«Cy˜²Gd~,÷fEÒ£pÍ`RVÛÔÊ•�fí×Ñx3ð.­é0”Õ¡+pëxJÒKîôkÙˆ°%ª&×ÇëLw·gåɱ @iGÔ‰iŒhKy&µ›ðE"bDªY:a¥Ú™€Ù` |;2STá´jŠÒJx6àÛ`X5tÏ«ÕðŽ’bÞÜCTŸ2†2B Uá¡K´¡§‡ï°RM! + À‹®«DBnÕ,§í�ý”…r€{—(d¢0Â4#šòOU·q÷»ˆ‰œ©Ö𢱔!(xnˆÏ ÝCêX¢ˆ0‰NßCÆ?D�"Oî'aÝ¡¸�ò’S Šn{À‡ƒ#¨ÒUeFDDDDÒ$r +†@Ž!1‡ADÊ`À †‚†a +ã@’ÃB!B!„b 1J¡ª”¤�Á�Z[�A“/a7‰ ~çæ Ð¾eëúr†í‚Þ‹]çA °ð¼aÔT ]7aÞ(í�')™N¦w +M„n7`Õ³�ÃO$� ª‹ªî¼˜q)«�ÃÐ/`×£õCo +ûèX +K©°9ãø„'øê8 îYêQ=.ó�’e™^Cƒün\�O<4îºîXÚ÷—DŠôóSL,¿~˜êLïà0ÒkŽØ#ÂmA Á§£�rY'¶ ‚ô¢ºz�ÑC ì%EwÄå㤙€O^É;��×’o'ñcqò*àk «kÈ-î‰R�ÆÛe–V‡6 M«ã�&í‹À²ãí²Žêúq}´/!,1v‰)ÝÊÓ-çjàFMuVt­Þ©ÓL9­Î²§ä,ê {\ Eï¨\‡ßIêcM YBRþº ½sÅ€·e�OÒ9!ã\50¢¦�Ê#—£üÝëîà Ą·½³1sñŒþKO,ñ /4_czìöê+Q¼ûgÀêÕC""œvdiŸÃ�zÎR_'µ‹³¯7Å‘¡©œì&ò‚¼6#p¢�Ó±š„Z&F`kxïçœäY²öMEÛ +uo#E óþÖ4êšQÒØí蓼V©B}sT¨5Z»×iÛ‚!µ\p=ÄËWà)œ±ªI¸•äÖ]=Ë^Ù +ã5ŸTtï"åfþP…‹›ñ&œ¼š„Á„eȉgç—Jôëý²‹~e÷IAmùÎvvý!B-­‡bøFÃÍ3f³vÖKr`ב´pÑIêÆý +ÿ1(Å…œzÐ^ý„¨ÍÒÝB$B¯.K +GïäØ|qî`3ÎÀ÷ˆ˜šYU¬=…³Âq;Œ •ú¼Ï]ç¦�Ò©NK™sÏß¡GäÂïliЬ„Ÿ—çììÐôÏß!SË/®/ÉVÅz§¬¶ “×/ç­"RíHƒøÒê+ÞùS¡ØL¾:•ÿ'¶zçgüR¿â! ¤‚³Äˆ8:¾;<‰À ïl@/ãñ68 嵐7Y„wvÐ7T4•7‡p%ê—wüûfÕwÿô«Ô�›IC¤8b>´¾d·¼ƒˆ•o€ë–w–•Zàªï[{œU°8KêdçRjž;rbå�¨bÓ¤ìPÞqQü.tç'ïÐf¥0 gôÎCíÍ€,‡õ¹D4låXy¼³Ÿ Rê›?ñUäãÀL')�žN\_÷îÂÁ[¶rUã�>/[Õÿ­=Î*X"%U²Ó¦ˆ5ÏHb€ñNT„³Uöïxü|í‰s‹w¼­,t·v˜&~¼]°œB¤ ïèË�/ǯ +ü:%¿Nzz¦:�¦:+”_â‹ +ù:%¿Nz:N�žÁI�è¤:bϰÕþQd=ž±ý’Û@«+&ÂÐ1¤DIh3åøEÖØŠ ¬ŠÜ *ö µû"ÇxS{wðrâÛa«³&HïI‘†vG¯ÐêÊÈ·Èd%nMÞ“’Þ쎮@ÕÔr¡;6>ÖÊúÞɦ.u/fä?…z¾5WLp›}|»Æ•8åIUŠoÀ!ìK¥š+ÌÛÚÃP™¢÷¸ó ‹Ž™˜w*�ŧ�Þ9É ¾,÷¼.ƒ×÷r‘y¸ûÏ¢ AÃiùS¯QÄÉXOà]dˆ`Êš”%pÑù} +Ìr'ùBv}ÔîõÛ0„ÿÙ½-H„ïÆé­Rýr›"óÐú%ûua§âîØ~æöu.HðÇÜ:‚ŒJ¤¡à‰ |Ž€ÃjFõk¼:»£�ëÈrá’‰é/X2îdܲ\�hb鞟wG¶`¡:û°ãÛ7c@LNÅ0Ì¿WlX…ž8±¤pŠŽuHú’©ƒ°ŠƒGûo2Õ!8ª³�X-ðªÊ ¡Ý™¿M–Àú®ð÷SGé3(;k8êOšgŸ:þ¥Ýu?µî(ÆÅã?©9Ô&¶Ò܃ã_�óß :,ï!Ÿ&øÉVmºd'øÝ\çO³¸I›²Ï1ºÍÿz6²YÊàò°Ãˆ5‹+vGWãvKu­ãý »ó°8MR_ŠÆzH~ÉqºƒpÅ9ž;f©D|�v�AºN‚K>&¸øº£rgkŸùášôóˆ1ºM¯;jÖ¹3™âÄRåö…Á¼”pH‚ùÁ)(fH–pñƒrLÜGcØõ¤.öÖà + +óm¾õ0€ž½�ÇÚ`+“­ÊÖÔ¬pAÑÆ\;¸�¡dZgùI8•qömà¡þe¥�=LÐe‚œ¨%ò”39«‰~£ˆùjf5ÁTݶ(gS­¡ ËÅ(¨ç:S[¦kVÊMQ3kZ.%1° Be¦»[oÖ|¶]Ï_çcTO<¡•ÁP�¢°*ÍÀ´T—û `fÞµ]m1”,¬É=lOì"/<ÄA{m‚Ì ’¸òH“C“%G¿±¤ëîËtÕõé÷{.è‹hÛ°¥s'Xê·¨ð,fLÁþ¶Û;¦bÞžÈÁN8$ïñq³T€ŽƒI{ìt @›3 þ…e«²‘s…á¸xûÁ3T«ì'”æÒ@…�štöпÉAüàéºÏRŠ�<2ú<ù‡c�ÏÈ™¤íŒ“!mdœÍHWÌSሊR.Mæ÷WªFN"”†f ï´$‡´ p²T›Øè$ÏhÍo>x^û…�jqoqÃc`¬­øàY¡•Ó"òÁãÑغ„fù+øàé/� yÆÙì¼ÉšOêrójíVc�[ž?Ê6²“14�¥ÎƒE8gºH”gð Ã8�IÉ”>lp´b +  + *  #&8+( +!%)-@><:740,($  +  %*/48SJGD@<83.)$ 4:@EJOSVRNID?93.(" &,SY^cgvmjfb]XRLF?81+% !'.5=ELT[bhnsˆ~{wrmhaZSKD<4-& 7@IQZbjrx~„ˆŒ�™˜—–•”’�‹ˆƒ~wpiaYPG?6/' ^hqy�ˆ�”™�Ÿœ˜“އ€xpg]TJA8/(LWblvˆ‘˜ž¤¨¬´²¯¬¨£ž—�‡~ukaVKA8/' y„Ž—Ÿ§­³·»¾ÀÂÀ½º¶²¬¦ž–�ƒxnbWLA8.&Xdp{‡‘œ¥­µ»ÀÄÈÏÍÊÇÄ¿º´¬¤›‘†zocWK@c²ºÁÇÌÐÔÖØÓÐËÆÀ¹±¨ž“‡{nbUI'0;GÌÒ׿åäãáßÝÚÖÑÌŽ´ªŸ“#,7BO\jx…“ ÖÛàãßÛÖÏÈ¿µ«Ÿ’7 =JÞãçêìãÞØÑÉÀµJ=2(Q_n}‹š§´åêíåàÙš‹}n_QD8-Xgv…”£°úû°£”…vgXJ=1'n~�œ«¸ÄÏØàæëðóö÷ùúúùø÷õóïëæßØÏĸ«œ�~úüüûûùøöóïêåÝÕË¿²¤•…ueVG:‹›ªîûŸª›‹{k[L>p€‘¡°½þÕʽ°¡‘€p`Pu…––…uþøõš‰yhXH­íóööóíç[÷áøõ³õCä T!TííT þ)âøÕùð}êþÍ×àçì�‘ ®»ÇÒÛâèíñô÷ñíM\kzŠ™§´ÀËÔÜãéíüðìècr��ž¬¸ÃÍÖÝãèìïõóñïëçâÜ[jx‡•£¯ºÅÎÖÜâæêíïñò÷ìéåàÛÔ̸¬ :FSao}‹˜¥°»ÄÍÔÚßãæéëíîðæâÞØÒ˸® +?KXer€�𥰹ÂÊÐÖÛÞáäæèííéèæäáÞÚÕÏÈÀ·­¢—8CO[hu�Ž™¤­¶¾ÅËÑÕØæåääãáÐÊĽµ¬¡–‹~rQ]iu�Œ—¡ª²¹¿ÅÊÎÑÔÖØÝÝÙÉľ¸±¨Ÿ•Š]it‰“œ¤¬²¸½ÁÅÈÈÅÁ¼·±«£›‘‡}rf[ #+4={…Ž–�¤ª¯³·º½ÆÆÁ¿½º·³¯©£œ”ŒƒyoeZ$Zdmv~†Ž•› ¤¨¬®±³´¶·¸¸¸··¶´³±®¬¨¤Ÿš”�…}tkaXN%,4DJOTY^bfiluvlifb^YTOIC=7#(-28+âX-êV¼S龇»ä‹9�q¤‚u?–E\ZV±]�ÑPðáÞl¶ Ë©JñPleÆ85*1K…Ï-Š€am›�R”¬C¡š:¦~TŒ‹j}é;Ô¤si—§ØWÓ=Ä?§;#¾®3;ó=Ìtg/B™)êZ?—â¤DŒY3¥@_“Bñ5¦™ïDd�âEñµ4úB Ø-Q<‹Â[ËÆÉÑû·ØÎP 0ú‚V0ÒE¡» <ˆ:äp F™ÞN0ú‚†ï‡„ìׯs>aëé‰K�žh „þÛsç™Vk¸t|à pûBµÒøFÌ!†ß5KA¸jNHÊá„i»�yœ³†$lg¸G7A�¾`´¹SŒ6§N¥v1§‰=£/€Tgb±ÚžÚ™ È'%^ÜŸLèüjô…iÉôó1 $q0ÑÜB½œðš®3¸�%ÝGa»p´iÛ‰ËÉ ÕC_øgžFd¸ƒ¢–dj%JÕJP£DXO0ðS¨�v$%Pa[ö;Jઉ‘kר ÑH_Š&ñÈôŽ5£auG¾%×r"Á´º¨� I\Š5rì�ƒ„Ç[%Ã!Aœ¸~¤’¶/^‘KcósöÞÊçGl°Ò>G=–XÈ”:JW�7!#8’º%18J‡tX³‚ýÎ\#‰‹Ë¤«…f¶ýŸœ1” +PšÅa+·aõ,ÑléÅ 0g½‚žÂ#p½�i¶ÈÆ!p¶wˆq'ì…÷ü~4 |{­Ø`œìœä²y!­èG¸r´“#jƒ°à„;‰2;€w"SLád¾ƒ° ²ß5 &\gB-�cÂ�®¹Ú1Àü�×ÂeN™ïŒª�Qa"MÄ ŠAר½©‚M¶}` ËîHBä‚>®/ž�€lsË’öÝ.xéVÄè ô/³Ú‚ÕYµÎ$ø +ÈÞ^ëfzG¨ãü›o¯=2ß! }AÑT <ºT´�ñh-8Å£/ð�–šÊð(¢* �q䌣`ž©0dëïÚè ÌØDRÌßÙ•.M!Ó;¼ÑŒµ‘Þ’ÝNÊk1ûg‚!û‘-݃’†F¦w˜H²_É,-„¦H·å^»,ÜFC¸&Ó;´¼ÀYÚ ÖÙƒLyDÃ@'Ó;�Å“,,¶!€E¨±BhL”3½ƒº¤#V¯Ö†�Ò¥ôû3 £/$3ÌôŽ®Y믂ààÕÔ3­£3½Í\Wråxè‘é‰aÂü¶’°F¶±ú `S´ÎôŽC+N·:Þ™ïäÒè ³^c8#«\½$™Ûi†:Üá×bŽO…]v>Å_b:3½ó<ŸˆÜ_°ý§�fzÄè/–5^@÷褗äM‰k£/ÈqÍôŽÏ[¦<Û¸Îéà>†xé)�Ø:Ó;ˆ—le­Òt@`£/üÜBè˜ì¼ÃütLŽ•Ñ”"ÛHnqó4E‡L¶tB9Q£/èWWŒÍf\䛘£0D &-X\=ê(ö¨GDÝHÁø€ mæ iBÞU¡‘>ùA%%6=Vê ¬ºSE°h:Û‰djsl*¡Éÿ†ô-‰ ? pø-K5˜ODˆ>!ãD˘]û¾$ ΋¸Æ0šÀcÇ»$n Kª•‡ë0£q „'çÐzÏ%FzÖ»×’:SÁ)gÏïšm¯o¹Öï]ë~/?ÿ*ó¯_v¢'ÛæöŸd\ýÖ¬biGÂr~‡ìH›> e~¶ªSœÉiöég‡<È<�ÝÝÊòÈnø¬ÎÙ}§aÅbÝYêÆ÷X™2zäVŠOi*$ QS(6ðÕ8ÒÊ~lö*4òŽ£œÝ»w¦”YJ;éwà cè„~weZÔ ÃBƒ+öP}ƒM|f¨]äÌ7ƒ /¡v4Ê]Ch†¾úá…?C‚QÕ>/Šñ ¾ø:E2Žf8)ìu†‘_Unf($G;Ýú�@ž¹ìus5–[&Å %xDäöªW´–k°—û‚‡……/æ hxr``p¢€nª^e»_@4  À`Rá/Ba&ì£LÊh@ @, � PÀ (í’†™�(÷Ö£\ ‹„Š®sT"÷òƒE¨°¼!‘ þ©� P@`­ÅÂÒ—¯äĸ%v +�vfIL{2z•Cêèà˜Kˆ#Ó°iìr¹Ý]_S½™¯X.©Ëd[ö„)ÁB‚»ï¸,FdL-óq=�@s`M×0~ÂaE,H�ÀßP¿¦¡“%§«"ŒÍÎS\±FÖ +9BÍÑaÿfªÅ‘iI‘°¯9mrúl·2È÷š]´Žê|G9OÜuCcµ�a¨rEv¯6Uv‘ ‘r ºˆªãÆÕ®ªZY�±G¾ÓMI-sr!Ü•9µ¨ÛY�]Oâ0i-‰“ÊwÓ‰O *„kDÎo)¾• ¼^48HH ‘gZbǧÄiûŒKZ‰ŸŠvLï¾±dSG77W¹Ë^®(ÿ´)ҵˆÁ£M†—’'Û4V„³-"{ OÙjMí¢lÁ–C‚œ3‰1PHÀ°@ƒ0˜€.�  (�b³f +�uFÄ�H°�àp"Ј|›´ Á¨Óá ü,Øn¼�Á�†©i ‚³ ¤R¥@†AˆŽ.à‚¡Á£Áo¡� ®þQ@p°ps7&2ôZÑñA8 ÀÂÁÂÜC^C•q v65<@U#Çüƒ5PÀs©aNÁ‚aÁ48Ð@� gÀà 8l@ pº°à # + ¥@h¨Â`PPT·@A =±}W3EÇØ÷Ùñ%BëY�mhþu¼~Æ, ªˆ^¢µüMÂô Λ©7ëÍ I #29"Î�‚X‰Åýjg|QWo‘®Îtép®Ô(ô²gŒE•Pzí8±iåhyÅ …ZñŽý(®L ç^ÄJ/dw“)ÆÕ즤ªH‚„�!*ÞbhN>HF‘ŒôÁÓ/<-—pFSÆA쉲¢˜qsNÑ&U§8IÎFy†h¿føJ£%eµ�K©¹dþÅS·I¨á�Å”ö;ÉXѯœùÔXç\<¶®O1gÂ^ý�"â��5ŸLs‹ŽÝY™ˆŒc\ʱ¡“.^VW+v„Fd£Fo a+ +á(0 Á ´0”-0 +Ø–¥½°�™Ø\Û[GD†áºO¿gBfFXTs@èݰf FGäàÑ©ªS¤]¦Îˆ +hŠ/+C!ųÄô’ þ¦ŒD�ÿÙ‰%†.T&ߌñhzVIJˆÈ¤s¢ËM0ñéEnC·ÒÁ±ß1GÍëf —b¼Í­´m«Ô럚¨W�ñ3Å¡rºŽ‡œho�Ú•XܘËõ°±ÿþV6›Ì''˜G§zãd/büä¾JrøvnÙ}±“êЂÌÈ´ÆÕ�]æ{L�hF;E¨.žFsâPrdDáV}ÈFÚŸÑÉg,J4%I•ìäs­øK¨su*³+9̼•ÙŒ:��eÊÉX×›ÙMï?h®.DšÅ‘ûkܤW/A.Õ)£Í�3ãpzÕt¢B•†õ쮽ºTx|‘™Î…É1X°�Á‚…3™��mÁ@ Ðà’…Áí(:22åU£6CÂLiž@Ó `7ÿ ò±X8�ª+a<ʈªWß_eúÍ',™÷2¹ï¤üÙ½$xä“Lõ“pBœë9äVšN*ñ+©2)¹ã¿ºä8 +¯êSbpÎÁZQ»ÎÉŽa·#OåžÝÈËŒÄ!Émf‚Ä~#‹šita¾+ P@ €@�‚±­¤åÝý{ ž—K^û«^Q×~ËŽvµ^æ1_UY•i‘rû™‰}E¦#±Þ£ëìùUæ‘…­>xp•oÃÜŒ.×YÁ²ù/FeöÌϨXWârô‰«bä^×Ñ^eØÙXýÏÕ­&('-’Vyâzç�ïÙhÒ–‘ÐTÂéÂf­Û=›!�‘­×êYè*At&'ó°…DæœK ’ð™ÏXqrdï¤Å"GA½+ P@ €@� +\4ê¥Ó èCd[íô$�vÆâ'&G,=ˆHÊiñ¯ÓÝå +•/E'ô¿B—¨}>�ìf{‡¬ecãî“ýâwv‚SlÙŽtD¹¥w޶ln¬#ÒšºK‚ÇŒquÞ—VØ>¸ÂÚ%¤ £¦Ä¤µ0ªáà3¶æWç˜ÙïzQ©Aì¥Ë£X÷çåK�çduòâEv½Sö£)uáÚÂ� � ÖŸ(Nì3‘hrq‚kv•èTÝdZÃé…/-OlSfØ6’N�# �mt³sµŽª;¡Qx©zÐ }Bʩ٘ân"bÔ ‡ƒè¤"½q,HÖÍqBGMl?fб¶/ë•îꙨóư+•’˜‹¯Bãq]Ñ“N‚œÐbAû§<‘ã+^–îˆöè”X,Ô3»�dž†aC—ذ¢† W‹œæv /ˆÚ‹Qcÿ££RŒ›�•Ä\k5AD‹K‘°òŽ+ãʪ³7÷¢&Ž66帵DÌw.ÇTJê7ö!í:›MÔ�©£å¡Om®9в»ƒ…Ú¼W»1‘©„M•üÂc¾m7‘L´»rÏ. +écb³j-÷)vwX‡„e1Ž1v¦¸û!+�»‡ ³XƒíHxd‚ÌRšäªê«•¨’'kQÇÇßpæ$6rR=2c÷^BµàX¸>EöFÇ*&÷qäf¤›×ˆ/r¥ ×¢š9¸š88&¾ºDQE&о€À¹�îªøÈÚÕÏ é`!ÕÄúÕo’Ü’(‘ÅêFÞ‰šJÆ�;ÑyÃ5N×ÏÙFÎÊ÷òýTbœI‰!ÕõHqw·Y]’oñ53• +½¬CJˆì¤@QB\v%âÙ­ÌëˆË�©rq^Å"«ÇŠœ¨«b?Õ(–•E©m¢ZQVt"S%µ:›ÜV®2‰TdccBÊQÕ@wfWŽãZ3uÚÛ¢²RÉ�U «bîAîêqV—��®BÄncCq.ŠÔåb«!!a 670h`ŽÈC1xƒ*Pp—:#Í"ß¼¿3MÛã]Õñ• K¸]‚ÈÂÊœ•Ä�( ¸ +®€àê'/¢ å&nkØ3ÇQO9 /å¡8’"QuêcðCg§Íˆ¸fY?#Ô;é™Ïg!CßJ ô]ÐéldF�.$ˆK4M<�Šëno«ve¡…ެbFgõ3…ôrwMÈËæ$s61)ªdžƒ„¢íga)wê'Ôœ»«4~u—¡8³ÐMidµÊ¢K~’‚´á ¡*&3vZyåZçúG͵ÈÑ"�.‹ ŸõçYb�³=Œv¨Ä–tqF9æCeÉc0"“Dñ@G2†r€ ~@& + ,8Hƒ�8 ƒ0 ƒPÉ´�b)„3”á�™“y‘gsÊ(ÊPLËÔ¨À÷ù.¡i�GõóŠÕ3[lm†¢ðÝœ í^�ªÞ«”Ø�øä—ô‚–Mpua®¾ºÊªW—ÂËÐÖ~0�¹K+tŽlòç/lŃÂ/Yub¡¬õˆEÿ Í�<"²ìÕFÀlò… k´‡Z ^É~„•˧â¯7ÎH2UY÷ ÅGÁTí‚›¡Š¾.ÿF»¨t-M:¹M¨ŽJÚBÐô‹Œã- ƒõ`ZÐ&››Ü÷þá g²q˜ÚbUõº¹ù€°®�A8µ¿%ÄX¿Øm/¦æëoFAk#r_ +L†J*ß÷À&Æ@Ѫcš�€Ò¹¹G “½Œª�Z +_mÚ¢Ó†|9k(àê‡<÷6CŒ4140”Îæ8â…½ÚNšqž0ÐÝךlÌ,T�ú2k بB”çhWÁZnjȦñV—*áÞ@¨¿Á *+g²óUcl£d*F^„õß›3É�GÆ&c^`‘@=Üø¨½±Úâ+“¬%M|CœùLÆì=Âÿ ¬Â¯3r¡–…J•DoûBüÕx9~°^©Ô"C3Ýë1­ X™¿°|tÙ‰sôŒW�.àŒ1 +˜1 Áâ~˜ qØÝÅ­ÌÏ9Zñ†ø”)œe?*hÁ�“‘æ8„ë\�»ß>ŽÊ‹Ö)©¾Ôy/_ˆz@JÿW¢¸“Y@»èN R�ð²ÇFKI–à'›±S4=ê ‚|.ÈBo¢ÃO™¯k¾"‡¼wFmá$¡; +q{ôš/BhuÐd—|C{³¢öYŽ[ØDí…CÍpwí9ñŰa@äÄåÇA ™Wr«Ãp&q½3Zß(«ÊÍB8haÕ³³Œ(X9ïYVâ'!Ù™=µâ‡¿�¿8m6¶ÂtMœͳ+,8ß…à6Ó’™WzlgŸ32i Žì–0^‚©^Ý’Ö¸5žåÉ­ú‡¥€ÛS`4€êéê|cÇ<<™>º'e(¼Õí(iÁHv ÂÐ@Õ£[Ÿ$éÀfódÎGñÀLÿŽ‚€¤ä¼’Ç6û ;©{w,ø—ÑHªÏ+=¶±O!²´ Žt‹0A©.—7êºgÁOú~pÒtÉ¡ ›‚=Ž%V]Áô¦³2°`“¾:Þ¿ßYAá[�[id¨ +œCOÅ-´Oñ¿î=PÁ߇Îî�"aÑÏöþ�r0_-ŸÞ|ºÿä¹`¤ì3êö„0ÐŒ[±÷Æ„ù;ùv]¨Öœ“Øšÿ›ÕØäëáœJäœ)¡�߬_Ÿ&s,J¹Â—–ƒô6àkt…XC�+À�ÈiZáëgßè²Á¸�¾‹Ã8I6E"€¡¿5›ï9ª|oÝÄù)~o G#­cðÔnd„6À°^Œ�œyÃQ¼¸c×’, =­øÞà¤9¾GzÞ x£[ûËeÒòoáÁn9…¸—À€¨¦ªxCI¼ÛäÊŽ,Á—«^‰,¨c/›\#�•Ø„’�ª×‚ +Ú%àJ á¢[‚¡‹±�˜´’ßv ìë~CÂåW;݉À�÷µñÕ®7$+EhNÏ‘I›åŒpý6ü'�kgËèÎ?rœiÕé7m«e¸vÚö¶hʆ]ò‡‰{«%ÞO_‹ýY5Þ£)lx+h•[«hyA'À¬6ª�Ò¾…{¦sµôR<=\w^å»Á0«öÏ„Ù}Y¿L @Œ«!]ùjIL,5KnË“ôöðj¹ë¸ˆnòTupË6|&·5Ûöxݱw‹�US¬OáÚd:qÖRôÞIúxSOò|Ä™Q� ä*….E¯ù€.Qy0#+ÿuò2-ŠÊRÚýþáv:·MÃÇZ¾õ Ni»­’D‡þT?Ňù «%µFx*)³z%“G(”|“¿3kâ‰ï¤1ý|„.ÍgxQ¿Ÿ5–kÍ‹�Õ LN!p~©Çegìà +c—W[NÛ¤ó«d¬m–؉¯­†`Wd͘.oè‚MÌŽOMó¹ç"©5i8ðM*\ŒʆA\(GäšÊY©È¨:BÏÂøž#ߣÞô¬Ôò«\‘QéJ�`Äà‘éEÉMrÑ–^ßf-*ºT‹Ä¬p›ÞŠF*hŒC¬¨'×2y=9|%’ +‰Ø‚µ�·q®„ë¿= Ì¢Ù>„b®AxH¦'æhê84,â4RZýÆ| CÛ`ùšäÞŸÅBå¼ÜS!Ø¿]($×Ð56’0ŽÓ ´8lmÔ ÷ Æ™1ûÙ9¨pŒ54hpEÄ ðàTßdfòs?½pÄ¢WíhŠ®¤)Pà%ñ.+»×Ò“‚h}I�[E7AYõ ¯ÕYö3þÓ&CJ£z-Þc�c«RO5põ1~¹¶úêˆdyAær:~i~ÂfQÈß%¾Ó¿K€6L¹Ï=õ-Ò3‹îiw"‘¾¶a”° Š>Ø£Qפþ9ó�Õ0–W�BÛÂZâäËCŸÔƒÙx’RjZO3n._¯ÿr�*G£Ì‘=تݎ…äê'´�W–û¹ �"U¥$û¯; Áö§Þ Ø#òQÖP†ÿ2ÖXH9Ðtºy-‘KÎÔ¦ýÉ+«ï'øüêZ"K$€íïþkñQUÈìºî3$"Z›µ«Ç<Ò¼òlA™¼Ë(ñUApî}ÖÄÏqÙêLäÍ�ÒËuqMO,b^ÃÉy©�Íò�GéW¦þ<»¶÷½òÄ~`/˜'Ò�éÆkYŠÃ³ŸIÚ>bò—Íó=¼˜Ù0*¦ããÑзdšGɱ�ÁQo•äÿCt½ùñJ)Úò7ý¾ÜûéEÌï»ëº%y×ç‹ã@Bq¨¸>¹ôñ’kŨ9¾@O½÷Ë'ßÏÅxƃ»ä@–e€—k#p–[-‡’b`Lbÿ!%uX9¸Ü{B�â/1œô¸¶éúÂþºW˜k�õ<Sbt u›)µ�Æš—y»{³UJgv“9Èj]±ø™r&EæuÈÝ•ÙSŽüe±ÁF^ËQ–™v«åÑ-¸�@O£˜ë•'$/’v%LûÖÁÁ¯¤O/ÏÆ| `ê‹é­ÃËÝu6Òê€ì;·SwÒNê± VÈÛÆEá ƾo6U&A] ÔØd†ŽÜ¹ÏÏ@ªžeÙh —°+ÕHð½ o3r ##råB>P‰ ¨1?FZá‹î„–ÒÔŠ’*<ç®óêÖÜ#J[m&Ú¼ë JÔàA�(—hDg ˆH^5! 3 š)ò|(³Nú<´×¿G‡N!R#àæ 6öÅ\ÖÒqîæUhp/*Ô¸â? +͹¿Y¥ºY»dçòÈÌAÔª ò0½„3Ü\{?{åHT›x€~Ö¿†zRg-ÔÏ:ëÆ¤[B‚‹€n´ž Œ+%f�ÕÍø„çl€zzû ú`ß@<-}¡Ã«Ÿ�²ŒÌì¹ÆfÄI¢ÐqJå5LŸ ¢ü}X™…K…öѪv^Û€Eó“•‘1‚œv,œ‘ôLÀì3‚És•›Žî©mñ&wF=v'ʧYb£jf}^@ÛmÇEo“g\éÎ*=ÔY팕3£Ý±ÈÃ3�mgNÿÄOe;�£‚x¬^…Üýš‡ôo¢tª”!Ö ¹–»6rò¹¬u+Z�îµ\̬ gD¾z.«Åg"¹^\ïs~=ûL&æÃ!t‰â! «%Jï©Pe›5h¥ºˆËµû㺾.=«|îGm~ápdâê³@!y4ìJœ—/Å>–ç Úšž,„y¤QÓMZ\ŒxÒä÷w_uÕQGŒc ¬¦‘e!bÉMÊn:³û$.(mï�)"o5­ïÈA)!C[±Ý–« Zù!5-¹Z%Þ̶ ïñùÑòÈqå^¢ŽK¿œï:nKpæÖ¬ ¬†ÏÇ1´k[c`–-Úc>O†Sœ IXª´0×Ë3îù +êtÒ/í.~mu| +¦K½µ´§?«�IO·x¦½µÑöö#�–)’ÈÕÑÍ�+·CmÅ>‘KOº²R9‚ <¢<(´#XµcfF@.D.yŠÓzJÿ ³´d½í(y=mÍS +W9„Ú¥´¹T ]:rõªÆjti+|N;»þ+§fÎ0N§ÂÉ£K¢o’ºnb Î#ÛÔ(¤³IÐe‰‚? šb^ƒ ¦)zeSëÞDî*&î›? 7Ü¥w;õmO_Lf†Éð#ɵJ'¬J É�Ûsi›}K®º–<4N„ÁõT�;kWÇ]çmàLùÈp>¾Ü +B«÷q�ÇJUCD¯«8s¥Ïôœ"V�¤p(„‚G@&GÍ”5nKŸ!ŽàWñuÖª*æ0_¯«Ò•G.ˆ0„„˜jˆI°Ê•Õ£ˆý8VÞcH,÷)ó�xŸ�¾‚ßeU®¹¯¤‹b7Tø$žJöIúßä.�˜x¬C4ýoHÅ<Mêk“÷•ß +48�ÕÖC畒ƱÌ0›ÑBg`PÆ'9 ‰\p{¹ÇI»)cø˶×8äÿâZZ,J¶—[›Œ¯¢m Jìe@‹”-NÄÎÜë äYÍe;”˜ý‘ffT5—Pj¤8ªÜÁ³ŸÆôôDs‰ÚWqÉR«� +¢fû\m"g¹âðØe¬ö~e­æŠ::Sµo®ZúÚs‹·F›«;#IŒã5;ˆÕı[‘šDSæxg6¤(øà J,ë6,dcÝÅÂYÌæo ^™¾GæFËš+$Pž2)¹Å'S¦¹ìjØ i7\}‹¥¹5𳕼b0NLlꚹܳï¬ñM¥æÙ£åbOÛÁKóýb‰+jÛúÕq‚qŸº¹jNßÅ·‘c¨•°ÿ¤5Û)PßôZƒWk¯¼×`›ö&¨E6YÎmÄÁÓîËÕSe>ÿë¤X‡Z•gH E&ù¢Pàcc°n†bÃ!…Ö ?V*ÿ�Ÿø OR®äa0êš1õœ�À½C<ܪ¤¹p…c'Æ}uúщŸ‚�9‰³›Êä´Hõ‚8IÐÄ·KëüšoâÒ•±¦37•æIyQiåH¼Çõd"Hý¤4Sø¦R.²âÙc@Ÿ¹ÕR*Lp+ñ•Bý]Òåç(aÅÀAy$\'\ò(�]çÒ:Ý#;ûˆháWw¼ë˜ ÊBÓ;Ñl#g‰»Ï†uH„_}4šÈÇä�ÕÊ®ÌlàCJÁc´z&T¢åÌ@ÛÓð$®nº9Lå}¦äß߸šž�‘®Þ‡åÛùX®HIÕœ,ï°´ÔX(”ks)gÆC½ô8×´Â]íœó®§µË–�î:•Ž:㠊ܬÿmdãäMÔµÒòp6mä�»(ÞlQzd+�ƒly{bøÝ ·qSÚ›VøñäŠÝ3|^m\znΦܻ�–ÞJéÚ;w[%<•¶2¿:œ#Ä]ËXû”єij4³æËÕ]„}ÅbÀ¡ûöQo+{¡òü@ñrt‡A^à„ªø;gW&^ÝÉC¥*h3ûîï0$¦ðƒH1ƒ/Â,^"ªKζ«ºÅóçæh=�™µïÆ?)} ¾]L0ÿS=W•²Ø(>ƒx†ÍÑ.�‡’Ù´· +áµ|f 4t.ç7 +ÇD\ëÖY„ ²1“á”þûØ®Qû!§bAŸ¸Jí í�æñª¹W§ÜY5‘J\ô  øÑƒC[eBþ Kcîkˆ¤È_Ý´´ j¤Â�qí@Eì™÷ ß¼2 ëĆóчϥÊgôÖÔA09Ét:1FiFÅñ�9&„Ðq^qØÑWé÷˜"v(ŠàqÔ9çW)|ÝpéሚäúSu Î!2Ä +"bÌBìÝCðTvˆìð=Ê!Eb|¹’˜eÀ3Zw«Áá¼DaâqjœB#Œ#^»ŸÐÌ@ ¹?GÈn6 ªÍ6‚u†a“xç‘#tê°dZB%.%« ©s‚203å�΋9½¦|à uZzÿ oæyJ«Ðó\€¢Mé®ô÷ƒ€&Á°›ÿ¨”ݶeïwki¥×ƒ8{�ýÀ¸†ÝŸ»¥+4òEŽ$Tüéžµü3Í©Å�¾ÊKÁP%ÑZ€îT\¡&ýÃçœh˜TœŸÆmÞkž%øG©Ù´fYYdøÙwIÓ¼IU¾bÄC\—A_Sߨ[p1÷½Ì ÌR"ªüÒ$»Q &6øËMæCF/ݪaþÛù€w=2åJŽ%´­JkSzrÚ¶B‘Á9šƒœ–¬�\n‰þ"v®¹~á A¡dd8 þX’›9•1íŽEYd»‘´ðœZvxöÞ•pCN&WgÆñ>⺹–U‹ÎöŠó'wŽ¡yžSí!h 3y=§£—''@Ë3û'‘ƒI*(ô?áWÝlZˆÉ±öæÏK# ¯š|õM6.±ó,臇 –-ÍÙ³º†W5¤4Gx¹}ò‹8_öÉ�H]ª´“¢ߨžbcú"%Ô&È–µLÅD^<„R) ½Æ=w¤ý%G#_÷ G>Åܼ1­J—ºÞß#^qd%J—KlÐ*�1qç5(ÚrSù¿‘ +­ªZºö4rºU×kÛçW&©<`N�ñª¨Dšïó9=²oE’0D‰m¨’Éì¦SÍ\ ä*ÞEüzD2PÒ£ä¶5²†z�vLœ8½èV9À!ÑnÅRk؆9Nú-u­œbîñD‰^!ËvØàœ„¬Çô ®VÙ€b³Þý¢&#yþk²'™æ/ÿt^ gŸâ¦Ô h©Þ�ó�ïòxÑùÀ£V‰ŽÞéD…ÌÍH�]HjOìMó8Ïãõ80æ|DÏó ?£ÀN + +f¥™¡å0FúT-cÃȬóI +v‘n›úsäËUôØ”)*¢/7D¹ÕÀAtå’ÿ`k{è.p"ß!é7‡`Þt÷¯v¨¡¨/¦¥Vâ0Ôvç¼ülçiwU +É&Á·�Ñ*¡¿Ÿ5‹05ÓÀ0(M?^¶ÿA;”ë².H²ˆj%œ òu�¹Q‰ï^$hÀ—óë;:w .± +‘õä T< Éì¼ +c3ÁÅY§@P1¼`Ôb¹¿KÛE–?½ äáÙ»º¼¡‘ÀœÌ3|ŸÌ´=Êv¥ú-‚ø‰4éªàWçD�‹®Íªé¶ŒM%÷ZS}Ú’ye¨+­ÞrÍ$ ¾6iòYÑr ’F •dOOóè鈅!ùFØ£2Ûªtú@qºÀä8rÃÇ9á¯ï`�ë¨3ø‘Ñ5ò#Æ ¿½k•^� Ð:7¶{í®ZZ¨å rc…�ÖóÄ&'XQÎË\–_öÉ�-!z@ØwÃtM´¢È5T¿UeÚ2É@žrá’­½¨D o^¾‰f…wÌÿžõà.l±úø�ñx‰OÝ)ðY®´n# f] Ê�ã�w6K¬Å-ˆ0¬~‘uÑ*tØ�Õâ-ÅgðتV!\3oÖFy¨{óçm©söp¦¹_®&Ú¥gW»•µ:C!Ñ]Æ,²,NDã\™žìíkÊ$:õ,Œj<âi-òÞl, ñè†\ \03ÿb¦'ÄcK-¨i‡x›60¤CJ&a"òbù܉YÝ5-ÞyÈòò%Ñ×êM:±÷¥䨇¶;9dõkgëYÅ^î¬^ù=êñÁw„°Œ÷Iú[!áþç~['ÒAÌ`A‘È›zý#AM»¹|¦Ñð¶lÆI¥ôÖ �‰�­éÉa�5ö=pÜÐAó»¶ò¯Ÿ™�í­¤*ÛV#náöb±†›xóësüþ€Aãu4µ™ñežˆô9÷=X¥–®‹¤ÊOÿ <7&л>$¾\O‚,âwðù6Ü”›Ôÿ¶;gâ±Þý§>²I8ÑK +åÃ’äæR>ê¿%0ý1—Šù—•%=¨h¥ÙJ�‡Uº¡CÓü—9%Ç÷Pš ©×˜û9-/ÓþŒ,Ù™³Xÿ³-“Nû—t³­’~’'éi^$]qFÞÓðF#™rùM”H+¨žªý >\ ÃéµJ[édßöG7/ÖGÀè>\E^`<™h:ç„£ÿÛåƒ`ÀS8à¬ÝOhÑoý®-¦.u™(•¬¾°ËLåª V�“{<�ywçø¶9å¤S�Ðßz^L‹ß¾ßÅÞÙ-þ ÃÔEðuc÷ÖžºlL$¶œ�è R'vRò­¹eÖ½œ/UǃÚCy_¯%\ªK]‚5f¦äŒ¤�ìí g:“nh¹} .ÜÒ¢¸GÍY}æU5*q¯TŽnboãöSå5ÒD؃<·YÊ•ÙÈsú‘p ÂÎ+?‡4&–"e�Ò¥ŸÐn׆JS�ý§$ãfºDl½Á„>jÆœ]i(R“Òä�ë• ÚáN VÏ`8ëÔ±’*Wû" Aíy6��3$¬í'A-¥^кcÙº)²!©4: “‰çrvwžžX‹‹ó“ŠéôçdÖÊp4wÅhRÂMÏ«ºé¡“¶�'¼¦—0È1W‚Љi…GÛBV.Bhѹ©Á�ΠnþOoéApå°i¥ŠÒ&¥/´Qwo}íA¦çBð=È �9F‹¯±Àš‰Êš±þ«‚§ü¹Òšì¢q³=ÂCñJ¬6"žõvÕ ëã,µ)§¥ìee\þ£$á-õ/D?vkV;GNtýèñ)ï�«³s=‰'(c ˆ9NÁœÒ�– +EJ”Zì•ý)[wú ÂsÄWëYæ/º´P¨¢í;¶Ìáy‰€6 ä�žù¿›uo8 +4�f2=jSiQUþ,v¬·+RÇèid'ÞÕ<èfûqàáÏ�‚ˆ´TOõQï„¢h BáA?Re‡iÖ„˜»'%m'!l"t6§ †Â±í(y 0è[„eAO}Tó›O?Á> 4Ó¦@Ñ¢–+”¼Ã€B + (Š‹ o3�9Ÿ�ðÊÏñ�é(áW�O~Jli;´Ÿ?úaŠŸ[fŒà <É>ë8 ó•ª>’Có}ü)óù)Ðß‘&F/(˜4,2~,¹ý¼h÷ì�­‡©ø„ ™ïÒƒ‡e€IJ[u’œðÍ»T qtGns¢¡ê@CdºSOPaôŽEGCUõj²§uŒ 4Xù·�¹ª’Àíß| ‹H=0×Ù‘µHe0v�!2˜Ov&o5èßvLͨIÊÈò‚±s¦31‡µiŽËšw�51Ý !‰(‚���—ÙtÊS‹ äYÚ¨P“r­Öô… òaDOÜBä ž®"J+$ù¢FýyL{ïºâÇ™/ziÆ +¶ÞCÉ9ìd½a‡o§¥µ.§À<¼úÍ!'Ig¿¥k óõ�Ã_�¬ç&<e ÈCCMô¤(„Øû’+3ïtÛ¡ì�Y°jìôüÒlÄë8ÚÙßsâÀC½¨‰Q*˜;ÕýT—ìÿ k¢�‚À�-!HèPz�ÐzpÒ݃±Î N°a¨3”©Ã1ÓÁ°0h°€Á�p3$Ð OXÐ`àƒ©%8Óžð2¢ÃL 75Ã4°N,`À „þ±Ú�a0$0�� oÀ“²払Ý(*ΙÏcù�8Æ SÉ6€ôý®4Suom”‰ün­(ìó³;ä]Ôª:óÇ}ʯ‚)¸Õ.X×áHIC¨·Oå™BPï É—ßį^k åqiÆÌÆcªøåáüS`Í( ²ÑŒyªÎ‡„< Á< Á< @‚$x@‚Š!3ó.Nª@"sXÉ:çST¶93´b¶á£¬)Q®WrãÔž«¤6T¨ß”ˆë÷ ±©¦x$¾’¸ +mÝ\d›¨b§mg'<ÁÙJóÐQ“áY‘~¨é‰¦ð:šD§­£Û->šiŒLaœƒJÒ¸T¡®Ö0UCÄÿ2>‡ï(™š ÑŽrV°=Ñ_›¾H·ac…3#N«SrB½¢Êܰ~ÊAÀUeÊŽIÈÉXG•†Xf(�mXîÍ 3GSð¹x²z”ï©×P¡æä†L[Á¦ÈîÎP òeRœßDÁ*ÜÃbÈ A�¦ =ˆ4Œh?£fkD±Ã'f汃´f‚ Úv.ZTóŒýN�ÔÅ¢Nf± ±+ÞT¾*IQ\ÎÇåq¤lBz…WhTÁ=”¶ÎRá˜ÊT6æ;#8ÞÑÄøìFæq=ÖØQÃ=)ªÌ=,T°)B½‘(ÓÚI&#�7Q�…å"xÕ©t}œ‚›±{aÚ+]”U£þÖ]¹dä1'›ÓE«N2ã—U{F'_-ˆ(-«us”®c2²°9šlJìªZ£‚ï•#¢\Bè/±‚ˆnlãÈ4S�©î†:´÷LNn†N®Š†cR3#¯ðE6M:a7J/D}�ÕÏŽeV8²+³3a�dDã¡’ê•+˜Š-ÇÜnŒX–žx¾êaÊBB�h—Ü* ýĦT…1 ¹6šª‚‘Ç*v§fbÊl|q’Ý�—(›«RQu|"¹ _ýÓbFRå7‚ +�„Úâ}¦æ.´:Ö†÷!(ˆ `DÒ9~ +tr•“¦ 07“Kô!‚‚��óÏïBì>CíÕÑ‚GûOv¥’ËøBò ÞJuZI ¼×°#v¤@\5v);KÍѧ¤ß�9÷pÂÅ)ºb¤zQTc¡¸»<„®Qòi,„w$ºw$Zq¥·+Ôob ùgvô%¥ä36ë9Äd’1rY*˜Æâ,1¢ZÕ9´Ê nÕÕÝ�ÒYïxÊÅìâÁwI¹ˆ·":Ö‡§ø 7»¢…WVx;tFCRÈ`e¼ø„ŒTxqôhÕYX~5léf!ĉ²Â$BBЈ!4š‰*·ä™Ä™ ’XÈð×4 X–³¢C­²BP�K`]”ÑÙ9îèŒò:äQá~Űè• ©DQHUTFóPŒ…¬‚ä.Œrµ(q‡ŠaGºWçHÒàU«W“¨„”Ž ñmáaHé!Si™ƒ½t‚-KYA�½(L#;wsqB +b‡7‰!V=ÙfÖ… ù!�Ç{Y*Ž' jvOQÈM “ÁúUV¸qŽYZ]i²ãH„(<ǘwe4‰�` 1K5cÆ )¼XD„„£1i||–§æ:í-h„1Crd‚Z�™E‘™WY_„Ä(jaL�Aæ¯b„Å1‰’fh÷Çì¸;)“sù­‰2-DbaÐCj]ihg4q%9Ö(’è°Š˜”°FI–$Bí� ùƉ„4³¨šý¨£ÊÖ/¦¥_̉E[‡¯7§D¥âhwFR• ¢§=žÝfÇgn×�à1̺å +–•ËŒB¤ñ+)¢ô¬E˜àB†·AB±pa»š§È¢èáñyÂUS艕’ÉÄ ÅǬ¦Vc|Ј9fø–Ga˘[7´ÕÈÅ!ŽºèÕBˆçRmLÍÖ{^.AvHmæ±9–/a[œ NܦڢXøŒë15§“ÄAwŒyÔ ý¤¨¸9‘Atuòäys‡IU-Œt²¸ÂI®,¤#¼Fù cø–I" ñGºa�³£MWZˆ�59¤ÐÚõcúa’¢¸r0§Â4ØÕ4îöB„Ö³Ñp%ædÈQâKUXáÇá TÎO„,Nññ3F!W"T-ãõ˜¾f1U¢‚{Žñ"DP ÒbCþswq­ÜHõa(X¶†m• #ñDGxF5·k„cav4B¢©T|„ mÅÍVõÒiÍ…Õ%¡¹ 6Ëä®û BBÙ­ Y,¤Ëc\øñì© úØÃ>ÒVRu�ímâ$D˜€d²›° ½�4€ð@ÁçNdÖk�…°Zw¨%ãkdgŒºCPP ›NvUËT!‚‚S´&(Ð=~ÅÒšЀ�2<¸Q \ j`3Ø n 7H`%9„„N™` $xxÑÍР84`;HX@&8  2ø‚Aîfh�°àÁ`guA‚Ù zjd 3:3tÁtxÀàAÛ ”âà xô†ãæÖ` öhÉŒQ¥f|ˆÊ§š…ÝI(Á ˆ@ �à `�(°ò𫣫 2ÑÂBЀ‘š‘åNÌJüG¦N)ty”fu„ÄÖ@7êr„ 2tõÛ- 0ÒLK +dÏÍ`F/m3‹»’J™ÎnÎ�É�y(Š—PåÎjf ¡·¦`¾!š9OºÐÅÕÁ + …ùmýÌPbÕ1ÝV5:ã/¤¦Ú¬\Ô³w(þcµ¢ÐP0‰Æ¬i†ª‹/h5“š³)ŸQë=£Éùr©#×™„xó9“ó<3"œí›LÇÊV+±Õò}7U¦êUÑ̪7ÕÕT¹')ª˜Í–û>÷Ü\j«è§ãùe%÷“•+$ÆÏ;¯”ݪ·™à?gGäÇÕ;šüJ2?ÙCÝ•ÑÈ%Z_WG÷©°7Ÿz0Á)È—5µì™»&‚š»qÝMÅœõBîz¿Ý]㢀¢Ä¤øáYB¦3$QSzÔdStW‹g¶L7¬Ÿ4 ›kúl“39.U«“ +7§ýΤïlÈî|BVÄ$%§ˆÌ̈Mœ +ö;²ªÈùwÇ:·×J•¼¸“³MlGcF¬¼ 3Õ±xeg‡Kn¦È2®!Ú¦t•�H÷`gUž™1©-9³ëhªvDµ#0©Ãè�m$2%¼“)+¡sO7Ñ•QÍǽ”X*ÌÎ ·Z6ÂÎMô¹Úu,2íÐn,—ΫrcÉuK¥>ó˜ItUTÛJ¬´D,óË¿Ë$=r%ÆÒÈåWÒ;—“´¹2xìÍÅ2Çw¢ÔwÁÓ;'fÅ*n„tc-x\³gÎCŸϲ9ó ­$fôa³×Óšò0%eu y8zé¤ÞË÷ð±©{¦ŠÌH¢�µaŠc>îL· +9Ù<Ш“`Ÿ”Rš©Ž­¤øÓû"R<Ô•æ¡õ`T囦ëùg‰:»x­“˜ó ¦Xô<Üøž£ñ0RæÁêþé‡(ÄæÆŠñ{ð`¢{èr´ú­¡Š:„S&GáØYy†Û­¦B>“íggk±(sʇV�Y¬7ª„_âÈCõBUθ +êj´<ÈI¤, +DêcüÑ�+jÅaTž8<· ユŽÅ2èl¦¿7SQ”°EöOiÅ‹ú™²“ ™à¤Ä¦Ô ƒ^¸šYæAFçÏÍ^d'f¯Í�ˆÑüïo›UÅŽÎͺ)sWj—ù‘Ñ …: +ÙçUpý\CGSG9”á¥Ü)ŽN#lÿ;'Z�”ʨ#æï®T2;YO±~/)©ž¤¾ýÌú=+‡Š5;‡‘Ø®Çe]Aïók˜\3Sb*³©³›–>VŸ–ؼÕËå*T_õÅk¦ÊE¥Û´¦P›FäUf't3�º0 ,p€ +Øn€,°€``�4à@ 8@ Q`À,@€B¡À  h€€(0@`Àp`�T ``� ÀÐ@p À`à�(@�0€0ÀX À<%•…Jm …ÊÏì'•ŠI"ÒYñz|)61 +DmÍõX¶E�Ó‘;ty?ú|¤aa]‘Ør1›RäÖéZF©‘³9 pi  tÔ•rè'ÓbÒ°wÀ˜E˜B‚ûšoB ©“ã)jˆ�Yl-#Jø _=¬"$P�Fî ›»†ïÊÄ\X(]ÄÑù)®º–̥Ʃº�‘}³þjØÉ"¥Ž0Aã¸{­Âîvÿñ/ÙH�Ùy¯s“¨{�¿Ó…Ýïr7¹ï$nÿNbìv¢v‚özˆ}ìq?Ç:q¿Y÷ ��döSØßsØlØ_ ûKZüÿéx¿DMR”ÝãZÜNæ;äþ�;MÜ�H6v7×Èø>máûMËÑxÝS¯Õý‚õ«‹£Ÿ^ôß�‡é÷(Ýèt¿ÿz¶.JŸ9‰¡Óå§½5Fš£êw9\¯S�ëŽÖkÏ]þº‡øžXXÝrt\ýÊ"òOÕ„üùÍ.¶³’û7³˜äŽÿ#>B]¥ÉMf÷Ôy‚÷Rø^þü1ìn�ÆÝgn%¼­n½FŠÒí“þš%L¯¡ÿF.ˆ.vò ©ŸÕ¯·FÿÏñGu™°Ÿüû?WÃ"íÔ¹ ½v†ív²ß~KÜ>%c˜]®/Ï%%w– ¹“�\œ�”•Åž(ûÅØÉ¬Õ {]ê¾_¨·ß½ä¿ûÞ¢üæ1wÊt¢w»çäöOÌôÞ ±“�aíJFý1Q‹/+¿,®.2qu’ýaõ9:²~ÖÚxýb·Ût½Rmˈ~!õºß`]„Áºq¢õ“Øu™ +É%¦.ö]L]Ëü—ͽAuVºè$2Ó“o¨ä³ªHÒ’ª‘™XCH ÈcCYŽÌjã €‚86. ‘�iä‘b !Fc€1L±&Üô[Jöøb)�4·º nº¢²´„ß.ÅK€±»Ÿ‘¦O_/…Ö%�Ø”ˆK‰UìgJІEa<•Ö²E¥Œ°yÕUcÛ "3XI8þ”§ðµÒ!e^¹žÎ%æ\Zxw@È€ë÷ÑðEîZ¬k7®rIæØõâZ€–Üp6‘-rÆšq£ h+‰.˹ñŸÇ^A� Øn×Â[è&³ˆ×éI”8–ºBw´çgÏl—è†õ‹hÖ7ˆW}� +$enûX` hU¥¾#\%nJ:q„»­Ud}Önf.wÖ‰ö/Ö4*#s¶0‘»ÊޝÌV$°(ï`Oc†Œ$�lò$Œ¥%£ISMí¯kÙ=Ywf„SbN2v=�$<é™S”¥ÔЍDR4ä4�²è¹KËúmûÅôøYyôtÏehYþªÓÜ.û¥¶Çù“F�ù¥²!ÐfJK˜²¯N_¹,ÇLD ­›6„>«´¾4ñr�æ"²‘krôð?¤m/{¡L_ª$TÊ’i.+/›õ”Ĭ6�ÂwŠ8¿Šªfλ²dAìÌÜóGòð–GŸñ9]ö ¾^)@ãÝö¹9ß9ÞúË)À4Ñ©9;óAUK®Jw�„òW‰×LÆW„Ú™$ê!vFbúMá#‰ñ5=;ÌhD.H%÷Þ<Ö‘§ _cC¶áü«z¶»ˆâœÉîsS§3Î 6jþO ¦ùMW„²4št‘­e�™…¡~¬¾ؘ[‹Ú0 +ö¶ˆúë^�"?˵Í@z(èÉøWd&-œ{ÚlÁ›ùöË‘Ñ(ró>¶Š%ä4a‰sMony~—µßB³Õ@ž¿õ³/Ï8$:ãRløõrCh½'_Y¯�‘ªêq²ž£øº`ÄÖ�§�ïYxÝHö±4)BŠa�±§ŒFÌ'Öüzh‹Œ=[�¢Bv¹üAcY’eܦí¹Î·Üm`ˆú¬Þ&|ÄP'h±ìÆÔüÙ,¨É™k‰[[{}7F¼Þ`Û Qž¨ÌÕÔÀûþøôüEs/ú€å˜ø~dêB1Œ•ìË6ôZ��0(WÅPîóJL „éÝ&2Ç;t>(Q±,)óÿS� ™oâW´�ÀÙe�,)9  ÀºuNávn£ÓtëxÄöÏ´¥‚`S¥.°ïÕÖF B±<Ô�¼ÚÝxÄUQ +‹•ÜGM^2L(¼ÇǯðäFL”éêLQ‹ˆÏÐp)Ð@²‰ 9ôÈ!…šÃŽ¤Ðˆ•º6Ô §,·…·®ø4Zʦ�oÒ¦ê¼×€²$@êØràMR +ŒlʹAŽ™Óè6ü�Ë …èq�–<+ð¡x¾È§ã ¦"7 ÷�À’5û$z±hpSö¯‰ŠÙ /É R E¦�Vo ê£1ÿY¾±J�b(-ûf Ž ÿ3À�ŽtŽa«œ?ž}n™é‹©“px-VÝÕò‘P¤˜|l©,ùa,¿GŠù–¾Š2T¸Õ׫Ü ´j×{Ìz£Õ¤†u<9tÜø-ŠTr((ÖIKùVr=PÀ˜§¤8ݲ¨uˆˆ5¾‘}ƒžsA‚Ÿ«Û¿-REQ +œÞ¯eoFTk PÒø(©ÍézfH Øé  Ù‹ì^IžK:‹»;Žè_l΋¯¨:F8÷Ÿ¾{•†zŽgèª�H¾A13º±‘Ä«MvûWDÜȾDl®qýfS¹s¼=œèU"Ÿþ0Šõ›“�·èâ¶J‹Ð1JØ@WJõá'ùÊWpD¬3qºˆ@4�n‡Ð<ÞfÛ/¯/2ŠVç™t#7E¿9K»PÓ˜GÀªJïhŽÍoôš’—{9CýáBE£É�rY⬰æ&œÑ^Ž(%± |ËŸE' +¨`zw'>$4<É(´*ÌÛAˆw:庖7òjá§kœ”…³ä•Ü1† +‹¶ �_¨0)ŸûAb=>ɸ€šZ]@�¨0‹Gg¸ƒ„K#³�3á;`¹"ãE*V3ÁÛ~¦Á‡*,þCËBêT˜¹y¥)÷QT˜ KʯNø�P¡Y¡ÂÆ÷ýŸ8S·´ ¯«�úÁT«Ç=;Ó]¯x˜Pa^(š0µDl¼;ÚZ@…¥ÇßÖÉx¬LãC߇ÿ¸µ{·á­æ…§í'àȆ +;zûÛ(ÌAE…eÖŸ¾Ä[ñ*ÌÌðFKƒ Æ9‰räÈ¢Ï<®•šAQa™,�>¢Âü´8¹jÁ¸Æ¡èäp°ÏGT˜z¿‘qy„T˜ó@`l@TXœw·²æíR@?H"túwظ†hjr Šª46Q T˜xJOÕŸ¨0¢ºb°âXT‰H{ÎÀ?c£Ân„³!Q�tƒæ÷zŸG�F…EZïiò`T˜•#Fã**ŒÑï8Ù2æ(fH£G…�l#‹¶PalžŸÏoT“… + ƒgëÙ¨°†ãŸñŽ„V¿.TXÎÔU™l¨°»LÌ‘²ÔA…±$?›çöã +æ×`qe$yc'>àæIâ×�$*lÛ(›�tM–uÎé(Ñv¨0V1�—4.*ìvwÊ!KâA7¤Põ“‡ + ¼6<°çÂ]è!� +ó’ 9ŽDò‰ +CÊ6 Œêá–a‰Ç%$u€Á°%ÿ‘ûPaX$ ß… +kFÌy„Šó -ÿ£Â~cTOL 3¨0:t]ɨ0¶ËýÌ´6T-ÂX#÷† +£½à.úHsŠ +kœš¸NyµÂ{©£ý£ÂRªKz\ –¾Ž�*±¿SñÅ63¨‰Ñ�Je—GsPa£ÅÊ,è�èÙ"¯"1p"wG‡H¡Â®¨ =vÂPaÊPíBõ ~„/f|ùàÑÛÖHÛ�È¡Â^P”Tû™ãô¸åË–ÛÒöYÉÐ=ñÎM�ˆû½Ëã~±\5Š"5—?¥D™°?аw2`Õ)½—vØÃ|Úïž/s»à6üLj®Ø W>~±ECÿx£ Òñ@†$ŒøðÛë�t eÁ~¸ûÐ4^øôâ¡~ž$4ûÎeJ¨ï¹*åöf•j‚ƒPÄ}¸„z×$Þû�ãÐ>æ£�mÇ{Xœ¼§DjàXMo¯òø‘Öb>M^Õµ|Ò�Ô_ç’06«7¹O”�'„$²*Èç�.÷cˆ8í“ ç&ôy —hù ½öSpNîQÕæ°gÂ=B¥ I½‹FWAƒ‡ b{„(:R{Hä…yCp–Úân :AqÙØCœØ�9¬¹¼ž/‡×$÷?–Ö3+Øü–Ý¡ë™õЮªõÏhbKy$ãô€Áüu¢rôÓ>ëFËfÐ(ÇÒãÇ ª2zo ¢DÏÉiÅ’T&炘]…Ó·¡O¤VKç±ÐhÈ�ä@ˆr|I6ϵ áƒæÁªœs¼UÉf§i›À=ɧ¹<=ˆ¥ví�üíN�vn›ÙB¦o�5н’-, ô,Æ5¶ fЭ—£• }ôÿåè1žº2¦|ã Ø“C€Cl'øMÇMõi{� SS�ƒ©]RúÝ3Îfþ@¦m(i,ñθ°?¦]ôãÑ àùr*æZÀËòSŠß¾‡{m¹f˜ §s$ÆCìåø°5 Š€`´5È6�Q_g@Ó°kà2†$X&Ý�%>À˧ÐÐãd_Ç*ãí„ë'…�Ðbÿ·˜ý¢IgîyNïÖ3ŸF™iôP託�ÿ$FÏ D2a�@îÿŽõ‘ïQ +°dþ”YiJvkÿí™?ËO=¾/—•‚/ùæÂ(‚^6¡#­'=ó–HAäÃíew_Œ�[Èpr`êÚ£-X�E¾µŸýc_»—E â45Œ•Àëu´Úw1ˆ@õ¸á-µÍ¢t×Á~Q¿¯NN|cw—É©.âsAx¾›&eùUÝt3œÌ螃2Ú+Ðû?þñ2²OÕnÔ#b“Õ®HG�t«ðwu�iÖÀ™°ËTþ-êí�ÐQL`u��v­yNr_$LGÛµÍ�ö&u<Íâü#®‚¿�¶Â”º +e_áNf°âËàŽ�¤ñÔžv™ +ëOàE¬˜dÔ°MsâNÁÀÿÙ˜ºæèåÓ×Ã÷.ç”ùâeòþDM†áwx§ÐÎLÿ®ª0d@‚,°°õy5 µŽmr½ ò¯v2e°v¸5l‰&Ò_h \ÄÉ ]¥­Ü…Z§¬åB˜TÇšÒ�LFÃÍ­7¾î�¸î¹Rh\Ùš‹µ/Hã)¢ê¹eÛ°,+±Üœ°¦öì‰jîùE,$À ¢3zæêÜ�ڳþáú«¦%¦ßd½7‚;9I"d¡[¸¦¡SümkrÁž¸Ø)²ÓByòÂôU1ù‹‰d)p¿ã­ m a‚ßè0X-üÛ£@O^le¹Abý~O¬Ðo®­� àÕy?å)Ë™qqš·3XßFNÒÿè©:ðΚYkwŸFíÎv…b3¿Uöàd3ÂÔßõ@|8Ò1Ð<y:m÷£9Ç¿ x³b8þ¤4[;-°zÌC »àY㸸J›ðÔaáÊÒ`Ü�(b>¸Z\Ãxû@ÙüP|ˆvPz½²WF‡-þIÞq1»�šCJ½á{Âð�•®â„ùùl峄ëÐ…aQH•GâµÜNú "ÏUVJò£Ÿ®RBèþ†�‘°Ž¦gu,ÆAÓ*ÏÉM5xæSXT§Q;ªaƒ!¾X[HF÷9XüÂÛ* +B!a†� ÑKó?†ÝöÐI4ô-q‘жs«€è|+¥>ÔxùŸÅð:º#D,·Â!ØY‚օÂRWÒÜÅ Ít)Fm {!‚+Lê¹ p�‹ŠY,¨y½ +EII«!ÄAexŠýoSØ|ž‘oöfÙìÈ2êNX.“]¾2‘„€…véË…çÓs)É€*¶Wʯ(ø}HQ•,ŽeIOe€··Pèˆeüˆ•Š›=Äéþ>ÿ>ˆÉÄ™¹ø=Ôÿ¿#ca E/J„ëž Ò§y¸c7”±»Cnà"‡ý\A|ë\ÝHLú°‹>m%ÂÀJ“�»¦º3e3º‡¸õŠ/Ê “!É,ƒ¿ôÍËØ·öQ3 Ð.yaLüÈ3ü6…˜¨­“âNI,©b%2…§NôD[Š).g„e.Ä !èÞøˆAPV�®eèfù*mDgTÀB¢–quˆç7y2m¾ºº‰/c\AûIÃÒU9ÐÒć #ŠJ’õÙg:ñvf’&„6³¦)~ÀTÊê@Êëá25Ré+,IÉ'?ÑœÇ_Î'ñH‘†¦"�DêyZYH$¦x¨°m>?"xÞfYŠ$³ÐÏÆª¥3ØM²™S-”Å‚‰q—…|ú'r®À:í¤+ëhgn�ÎnŽCjÞ¤ê‹ÈCÝ÷8š²�P')ñ-Õ£8Ô÷ ,e6”Ý䳩(À?ånyòA·µËnÁDeBÛõìRZ”\êE7€í™ÜÏL Y5î%^ —EûŠõyfn�¤j¶hÔzé‡ò9kš©ogm„¿wófF•ž°ÓÅ) ý¿Ý5@¬˜¾®´ŒªgÒ4Xé—ö…´ÝULP\T‘ôÀ6^­¨óÓÌÉ›*Šb‚(q£*¸‰b8,¡‚ñL¢¦Ý�y3CDñ58q@~_�¿g¨ÛO¾C,¾P{7Ûó +5„H¥(Ôà-Q$¨aº$™í“6rVºÒÂ2MÅPÅcã�íÛ692æeêcÊ·8àá +dÅnBiÇ®ÍR¦~"!m�Ã|ò©ÁåŽÓÏœ\32FqòrÓ,FøpZç\Ò�Yàä%>ÐŒ¬ä7ù‚Þ›-h kó¦%`i݈?ÔÔ`7ùhÂ<¢š›l0°ô_e;Ü �[Ð0�d"¶ ”‰‹oDRϦP:ÙÅ„:ÙÄ` õ‡QØ$P`½kJiÁ+íYægš_MÜÆþ6LMM¨¶ÓäKÙË?dF%M¨ÌÔhšª½¡‰Srpñ4ÁU°…ûò¶g¹ú>©œIîÝ��™)Q%èÄ×.“Ûi“­'¿T&§Øu 1-™ø´ÿ!“bHž‰htHcr³�“ç™I¾¦åŠ:QE)ñ0+ãsrÊv˜ÈI¿„= &&ÿK¸¯~0míŒj»B&)±Ù_‚ê kîïKCo?û¼4ÚJ‘f/ÙHˆ‡ð:æ˜T»4‰`L—`†[¹d?Ûp‰¼j×z¬»%þ´/ªÅA‰Ñ–~�HE]j))��?ø�K8Zº®`гt pP,K´£/8P�%ô|YÎßZ_U–#,•2r½²ú+ePƒ‚H GWblx…ßJa*€ó¬zZ)¨ì pX *âg•ìMª4«3UmD¤ÒÑz…A¡"èÕƒó”NÇ…—½gMÉOˆ[E ‡oÐvµ²64)��²a‡?°*¹GžªH,ͤ¬Á·b”l¨1­24t`yŸÄå’áG=éÀÇéC3tÒb÷Ñ„ÂIcúÙdP³mb¢ +õ¥�L“ÐË�‰›Ió}iœ£�I÷f�“,Q_zåivIä2£–Ä5â1÷A\B•” ©6)éY8XV}z¬™¼“$¯i櫘’ +?ÞgGR¸Ð€B„¦Å±¬)*Ù�zçƒ>J/2ËËÉ͸ƒmO–"!¸¶$J$ÃAný ø+D¤dBÜYì�,¥)F�`Pt!#ôRêÈ£7ÜB!±™S:åÄ>YÊ"9‚4FÅ" $AÞ¢; |÷ÿ#Œ­ñ €ø£?®'Oêînü¨ïVRõ‘ãÃQ‡�Ò" öÈ£Q†-áœ!{ôlë +v!�J �›yÆñð¨â}p—|~ï¡·Õg¸¥À0ñ U#”Ö‘·G¥(zætÔ©-kš]1DMÏQüYE'K&(o—;¡÷C£bÌ¿U1aD1 K ÍN¬8 J«ß�ï�2‹)Ž"6ÝèI¼XDåÒ6ò^xCÕ–’�þ7‘ÝÈo�&±‚lÉt¯ÁÈ*�ÚHãúY4zfõ'†�ìA1)›òÐâ)˜Áší‹7ûÅM8DÍ12Jš·&h.4¿×:áÈaùÔÖB² ²¨;�»L�,Fâ¢5Ÿ©ðªZ@jv6+Ôž? Ðx‚ +ݽ±”BOñô…ÂVÒ’;áh«|`ˆ—KÈòW^QuÆZù`��Šý!>ˆÐŸnÆM}}U{ûŸÝn"ªRphÁÙƒpaÙŽ¹dzXOÊ.¹Â\ºs‡FZÅ1Æ€Ò¼�ä™§YeÌá¥b f´¨^‰UŽþ—Êc�ÍñæÍòZÐO)œÒ8Væ6�l×4„9ê,1‡A'†.¼ƒR‡îUGÙ]N  ,b¼ÊÁÀ&?· ög#ÌeäœF.ê�o– 2®Ê%w¿¿ïquKžÒ²�©ö4¼ ·nJæì€ QjAª�#KâZ#£UAR”¼û«d’by%1VsÔ¹{¹ÒØ`SV)ýòÙ«+(=ׄ0G"ÞË®\¹_NÜ? wdÛM~9zT(<’îé(§ôÕ(EÍzb%û!Ú +!Ý +�úòÒËá#è'Øó�™ ϰiKÍåF;oΖc>Y¿{ˆ Âña£s­¨\CÐ×û!w™m¢ƒp:O@àº3w´åèÒQÛº7j.%\ŽâŒXù^¡�»bE\Ž3�œß;DZë¹.–å: ¦Èsl¥g½^Ž5@Ñ-Aœ)´�‚NØtb?ù|ØÝ™+Ø´Áž˜Ò”èÏÛÒøºš4³7c­¤ˆýk{B®kY­:-eq9ò•êÊÝšÒ‰Þ ¹Y|õ·üê‹ÃÍ·3®äêJÛZãè(€”†ð÷¢³íŠ&kTN>ŽäCP œ.wdhϤë+Ú†ÚC�_®ßr\cûÏ#û«Ø +²íÊÓ©ËòèWQ(_zò-˜ü½#ˆm‡_b«Ð¥©¸ê�%†‹‘Ñ\’k–7iqŽÝ™µIC�†ùObDš?Ó‹Õ\·%æTbÐJbFB¯Ò´MTDV›&T·u&ËÌy(e³é}ÍU·‚f„=ÒÎ ³ÒDÏ0ÕøÌ ßºøOhŠÜ(<[‹KÊ‘ïD.âÒ0ØÁƒ§Fi +Úó´n§$œ_…[} +]­•ž(Ø–pÞ÷_Æ ×á«®ˆmªÚÓY‰*,HPÊÝAšÚ4i÷Õmƒc(S-@gx°¨_AaV‘Ç1ˆˆ'< îã]�Úµ„P$7Sv.bЂ'œÂ}h¥î Æ¢{›®çKˆ‘è qÀy.”¥#ð’‰+ƸÕyB Ì«ä@ÛKœ(Ï©v®ÎŠrDÜÆS›^^ŠÓ¡k* šÇÄ*Ê�´e_£Îý:RÊØvê´‹Ä€ $‚Ý Ü�]€uG9N$^Ï„4@É‹"¤SÿaHÇ'¡‚ I#*TÔÉñ;¤Ú&Ç®Ôò’¨Œ˜erÀ{òšå„;m³UœÄL“ãÑ2'G6?}y·ÖIÞ(&Áä$4­ä˜¦©T¦|ø7rÈRàTÕqÀ­»4/r`Ww¿Q —9®‘xo^ªÝ@pR-“wæO_DÇ¢òl~‚ª±—ͿݎÍ+‰rH‰8Òn}žƒøûùø£ì;]BM z—�ž�šûm2ÏnqX¾Fš´î'g&‰Ýϲsl£J0*«4ÎU5Ãv•Ó´ä=å‡3'´"BÈ÷¬b`ðþyz§‡%Àõñ‚¥C?`h,p +žt„éX2¢ø×Jëu¹D癯{M(ô�S:É2Â0ÜÕø¬'^ÙuûêŠÐýÇ5‘ƒM@"ÍÎD«GF\Æ´0]ƒ ·ÁtIFÒéQ§W¢ 5=IX¬}Xçt~,ãµPJÊÂ�µ�9:ŠtÿµóFÓÿƒä]�ž•‚€@ òìÝ}lRÈ1Mââ=­ÿ"  ¼* ¡.E(öŽÒߨ �ÿõ„«¦±Ho–Êx‚°0l‚1…Ž¢ÆgÁK+Ta¿V9Tæ�é6e5.2Û áë§f1›Ûx1L1?mlc2§‡²7JMcì'?ŠÈeœýwíâ¦�ægÛ±„ØË<~Ét +s� ¤øÓ¿tÊëÒtn-oœ)GWï‚´~XnÓœ9dŒ}‹�áF^ƒB„R.ƒv"!+ÝóeµJO~7’ +ÅBu4‡/4d®­9ÂÚW‘¾è ´V’⤙¤5´«léšòç"©k)jç—¤M¯d yY0Ö jŽ€ÎÞ$êâö—N“Û�¡æÈ�jÓ‡Ò|ÁF˜È1çHÂúNo4ʬÞ»kÚ¢t¡ Ê”“f³�C¯ 7—ñh(#=š�iÙŸ»~>´àxžA;R#‹6—QLp߯éclV¼R*’�½ÌÃŽ ‰`ã×è@cøì ð\MŒ ü°3C"¢ +Z‰=k ”Ês¿”ÆŠË ¾<Ž„%þðÑ10\ä;â +°‚e ­ïðÀ|ihnbŒ7I-JC[æÊi¼»s s¶œpö£ä±Ú6;N�)ñÜž‡!Da¶˜¹4ŽÀktýZ?TD¬ úY¢aÛV>‡€®ÇËÛ§©¸ìHÅqó 8386ެבiøÖ*m£*%BÐaÅ/´`D3‹Sþäâ к Ðk¹8ÞMT�—éü™ÅÂÆà[è]r¬(Ea�H›>Âø¬„Ëx= š¬³Å:ºq¶!7,l«Úß�P Ñ¢¯€Š FHå#F®"¦~ð‡†€ýè¡ú@¿”y½n;'žßÒÞãrÿq}³àÒcÕÚ$'•$£8¸å¦=À"½{œ—‹ DØiQã6Í?žc úLvV +‰cCâTOnÚWaμIaE˜ñq²lO@TnûpäM´Äýl$…l¬bÈœd,¾…š~CA©j(Çèû�œl¥ôƒ¡žazÂ^¬u|º¦ø@É0"lë4Æž-8Òì_©#ºa¶ÜöNöCìpàªÈ¡¼¥´ó"$�_:éLÂy¶ˆQ¬_Û|Lî” ÙÙ#I5àw‚ÛçX†ÉÄIA^ +VvJL;°Áq2at¡4£¯··�Qgž¤ñÅ– 4¦—– +¸÷Qx¦â µ::ŽÊe¶E' å:ëð#!L©8'ÂâËMÝÃ’f”`s +¤7v@EÅe€�Œ8uÑ2åvÒUi¤{Ânâ�Â÷ˆõš¤% ÊÄ&ðQ•AFº%\w%e „¶P³'Ê ›W9U +·d•¸ÔH)òü»Þßú7éŽR6릛ð®pØRŠœ5d¹Ò/QIjëÖwãÊx +»õØ[§' ÂÜã~‘2¢á‡+o_= h€+,hÃT–àäXºV«I ±†ªÈ ëGp'úcÀ H•ˆ˜{3A œ [ÂE)sÇ-%O‘Ô+šâϩێúìî*HáÔ}øt¾ÎÈvIB[_õ‚k€”¨€lþ†˜ жwbqÒØüîŸ\X|ø˜^œf�˘”pgk sð°³ê¯¡á¬‰;’vìÆ—äF‰�üƒúy©.,­Ätw'esX(žöŒ°|-îy_Qþæp™ÿÅ AœžUøuIµ3íyq±Aï(±qœ«:¸”©Ï0s‰‡½OwÏW˜ñh´ÙqEÞÔ'Ž@Ìœw˜z;dYêÆã” ¸ÄÎ<õYj†j­¤I¦g¶Õq<²æÍz$o?<Ħ¬íÍ„l›'ÛΙSºxVN� ¤½£�—òóËöËUóˆ“ñ/È«Ðò ¿W?I¸\®+´ÄEy½æˆnN~öTœB¬¸‹14”gl At…ß�A%@Î2Ú3rœsfÕ(E=��&p@!©CÙ^OZ +‹�ÿIø8Ð`C÷E©íŒÅ8DßhF}ö:9v�¨m´.€ÕV®Dy9ì±�o,é9yF½�1vc…ód4z–aĆîk‘Ï©oŽÎ+‰'ä1ÂÕ`¹ˆ�$ý°#'€60x�!øÏTõãè!‚šb²qUZ™‡Žhûb‹Ã�Y´õjÎø�öFݲDzä³Í“¶YÛÅK{$EzŽÚ~ÃaŸyÁœí‘#@s­=TùñH"ò_uŠ%Â2 ¢.Wc‹2îkÍ0¤l†ôƘÙù–¢S£ŽXû£1¥ôѪ›A¶f¶*Ž·T|Îd£ÚOEÚàJ]fÃU�Æ&ÍÐ;°·d?³õxñ~ƒçÙwe—Is·B°z[�¼âEZpcT}5Ä‹€Í� )Áz$ÔqþW€Œ4E«~ˆGjʶ\�¼ÞÃL�6Ò£º éŠeRïÖe›ÜSDŽF{$íp§pÜXMÊmKí‘j5ÉJ°¨ÓÍ0;‹¸V¡W.j Pk5š1Öà^kJp?A<µÌPÊ%Ò¡‚Z%¦ÅÁc‰×Å­Ê�óJ#x„IvßO—l{ž`ÎÜR§“%�ŽZÈ„W©LßzœQ¦Iä‘C ¸GÞ½òÈ8@Vc'¯€ì©  3<çyñôœýóp2‘{äÄ2]yÒsVÅcaP>ìцèQò]Žȇù|Й:⬥ýêUGë…¯61ñ%šÀ>òö¦³ž³¿ø&€ *“;â§´Ž½pò0d×vø8ük@’=Z-qÕ}®çŒzy½P–³½Ed›së –Gliò¹À%|¤ú><ý>ÉFÖóoDz΄q­…:O!l²ØA�ôÊz˜_‡‚µ6xFxv �i}¼‹ï1ïsÙ’§Ó¾¸uÃTú$Œ¨TŽjèÓøš¦$…<-%ú_î¢÷noæwÊû+Õ��© p–è›ÃpO¤jˆÄ^•¯=ý¸åŽÂãê{tr”8A8Ymƒ}UÏg¦Þ)µVöL¹lÑ(+›‹ôdÛâD¶8AŸGþ¥ì@I[š&)/¡ò¸b⵬šêçÁl9�–›¯¥·� §$ºÜÈs‚4[¡³�ø‹œTm\§¤HaþEÑ2x�Ë ²P&÷ew³àq‡Ê_<[n]?™}Xú›K�¦™ìÊ¢-Íeûg»îÓ~-˜¿z‹ëö“¥„æñ¬ŽEfsÞ©-d_‹‘ɪµ€SµÚ(©ì!ø),FoÃðgHC¦£TÅãTŠ$�t;¢m:žsÑsoÞfìÕñã,%¢DÄ­„–'\°«C)yê¶ãdVù{¾g³ÏrÔcrK¬Ÿ$i@–P5~h �±‡3¥(Á†WL‡ÜœWS–témíÔRÀE² Rô0˜ß9mn' …ÇÁüm§ß"™”y•?‚læÃ‚Êìc‰-¯ºû +Qvij['Ç×�òÚÞC´Þ!Ý8(þª à¢Vófl9N�yý˜t;npèÍÕ—@Ëêä�°6#=ÆDÐn”´�'1«B38�ò–[8ö7ï"®ñ +Ÿ½D+­%=ɱuFב)¸{¹ú4ÒH°¡q"¨äWÊtKr‰œYÁ3Ðeç§,ï:6 ­Ë™¢‹+r9ª^›3+ "×2ž½²‹9&Âÿ¡{ÿŸh£ÿ7hþ7Ñ#üÏ@Çð_Jñ_ÖOüêâ?°—ÛáPûÁYh]—ÿ×ùøÇÿññÿB;þ_Žã”ÿ'ðâ?Qü_¡ˆÿNjø/…Â_e.ù�QâÌi’ã‹Åbýßc9’äi²L‹5Žã¹GWYºÈñs�i­És�{·6I’-lï­µ.Çr÷Ø:Ë–9Ž®qïM’çY¶Ì’4Éq—¥9’ãhn²,Ë=îsl�#Œ_.’4ÇñÜ­s»¸¸l×y’ä2äe�§ë<ÇqÉq—$yž»|™°r<ÇÖyžæÞÛµ[ç~ y�§9ŽçÉb±\eYŽ­ÓÅÅe·ÎrÈ�—ÿãÛ­sli­c±X9š-³4[-™‹$÷º®ãÖZïÖé:I’ÔZŸ0ÌvºÎsÇb±±u¾†¼vëÜ­ó$Iò$IrÜ»u–$iî½wë$É�âž-Œ$Ï×Þd,w,k�ãiî½Ï’4Ëœ—$wY–ç8Ž.’Gò$Ç�âî–‹å['IîqÜçɳ$M³eºJÒ4ϲ,˱,Gs]W˜ lï]Žæ.G“$És³X¬=ºÊÑ$É­µ>O“eîÖyž-¬Íœw—¤é:O9î½Kr?íK�'{ýpp,+B£KeN7,«ÍJS2LÒ)€l2WU]uu…²M&¢¶Ø£-+³èšª3JT‡iM ‡ìos|“Qy�]Tmk,:TÕJœWv¶7Ù‘z”âĨ2…!@õ¤@ЈD + qb€4på %rhRÁÒOî�Nd‘‚Å“Z¡‚¨Øç­É†À)a\ñÄP Tþ6–²¸Bƨ‹+`¡ˆ.® d-²¤ A@A#‹3/ÑMh " +0¨T 5 ;½á!Jš¢(Zë¿&e8 µöáãP|h]Þ€Dk¡W 8@ëä*‚hýC–.\´€h‡+iÀ´nÑy¡ +7­WÒ°âÊ�Ö. D9¼Äh­[Šè€e L­…ÁCë½�Õ‚áÿÍH€ÏYþ$ XZë~P}ñŸ‰%-Pþ?˜&Vþ)Øäx¨z3eü¯²ñQ‚ÞxQñWaäCÿ˜ò_ÊZkHYübX°'ø'AWü:%Í(½¸>xÉ.Ù¥o“Î}é„>]“ÐGt_+àùÒ¤¢ˆI3DŠ|N;x+‘½4žÝ�FˆF‡”$¬¥O7©Nœ ±û¦öÂ?5¬Rï÷4tû=AÍ^«šL1õõ !ùÕ¬8KtªÛ$¿k� ËŒŽͼÀâ ¼�§d`ÝZÔy¶�¡§ÚתÅj]MLï†w»§ƒ‡‚`àvúl4¹™t[wkNNm&í {žf¢dN4?'"¯™ô(çõÁEr¯¥]OÎé„m·¨¢ŸÔ”®é aB_’„›Q)áf¯PÂÍ„3!Í uÒûÃ3c›åtÒ]“Ñœ¾’à¤3:ÙH¨ú\0»Õé…½´#¥#;»9ÖÓÍl7A¼™(ám‡2ÁéíÞ¨¢Ó¬FjÖÞý쀖t;ïkeã6É/Œ› ±HKº�7¿àÙÔì#ósò*õ.A±T¸%x=¡‚¤t8�’𹿤¹ÁQéP[D“„è +—À±ê�ÔlHÆÇÆà¶“re�.“rvÙ™mÓÙ6‰hMeo¨{[Y´¶ª3Z«ÕR!{s][,¶n-Ng–µ¡3+Çèz›YT%®6Tèçak‹Ó[+lå´�Û!M–ÑZ{»¡ÃšÊ¢¬º®h¬]u�ç[­]k´¸me›LCSÛMˆ +…7¥Íó ­ k±Ü¦òí·BÖ%¶45n‡(ͺ(q½­hœ¦rº®lL²lÊ[%¦ª‹¶j,£²k#Æ´aj» Û-�‡®:DeVuQ9%²è�˜²¨êºDY&ÒØ[A¸è²7RÄ÷%ÖÍo[+¾pïgª–²NIDvG9@G>"¹%j‰ Ý ±ÁébŒÞ§Ýkå,bÓ�"LÐ�WÔyN>2&ÞK…ªÑñ‘‘y‰Ôø„«Oº™ýˆ‹¼¦àÌü¶JRJ½ùI*§'Õcâ­¬Uƒh6:oRQWä½V¸ ñU‹¸±v×ò\i:¿Á`NÎëúÙå¨X˜Õ¦‰÷Ù$ÑÄÀ¸1>Y)8sRQýPÙ©²Ô�¨ö®›Tè[wæÜscâ¥J|dÞóå If~a\^Va7C_’#°ŸÛkóBóÁèY|a` )8sR±jðIÓˆ<Åø`IHŒ^«#!žïÅ„t#4$¤úA‹c¥ÝðHͱ¯USŒ(©§krv®¢lÛå#¸Y…[¨j1R:©ŒŒˆˆˆ‚$JÓ`0$Lƒ0 +ÄŽŒ‰�â€P +Â@AX(†Â`0Á`0Â@R,‰Äh¬íø-]QiøÃrÖú ›MÒOÚnÆ¥—ð|+fVôV«†ƒc,[èúu3Ų%Þ1ŒPÈ +UÐ]ÊÇŠ‚‘DDéuí6>¬Äjô~ù=™{ÅÏÄEjøJQzÍæ¡ìØxFéÍú|,ÎQz¹öõÎ03ò±e\ ô,jÜ:ý !r|Í&&¤hŸùóZ—Ÿ�/o£73ý|,ó¥ôr¡‰—CÔÚJo|´“èq¶,,²äw o,j­�ͳŸƒ™#åUh—ÜmF2‹—©ë˵V+1sµ“â¢ê~%¬vúš‡dswŽ‹ZS*»C¸îÄë�ýË]¯Co‘%6\9ˆ "§B�ýmUƒo­Œto4C‰"!Õœ…³Œ\«‰Ò�o­µšµ³¨RøaGzú!æÔQitö23â3�j>¾5¥ ¶D¬sñ!nª@cíjä&zˆKË·ßZk/bÙdî¥ £$øÖ’V†MhÂdñeê!|j�}¿véÚU ¶ùM8H¤þÕg’¯%Ù¿å4Ò/±Ö´vƒØ4[Èþ@ƒ ?¾5Õn„+;m­ILoí¨”?nž[3C™Öôü“Ÿ·KÕ9èƒæ‘gðÖ.0�’! ½?Ddk‡– 3O?øÆ§ó(Ó?ùm¾J êŠI¦fƒV/©]à°–=D™4�C®°ˆtª¶|Kð"Y¨ü|׋éô¾0 ´S£ +ÿ§cYšƒÛ‹™Æ„žÏQÎí é¢ýdÿÝÒ× -³D"Ø•¹ÛEkCÈþ];D瀃°ró_~é¢2¹”ÏV=»t|îb‚!BC2öïR:r°:lQÊ«ò¨7˜`:3öo.bfL7NÛuðrvÝ]FkDs^çOi¯? *vÌ™J‘fÎl8 øÒ·’ñ€ òuܼ›TÁ"!¿Ã"IàºÑôãsšc½1Íó<™ÛÉlï×c˰CªX.°\üÒoü5�Ë Ü„xGíV„Ç6^Ú&²jœ7ééc¿»gÇ*&@‹‹”‚Ä¢–¨¼éÖçbÉe#šÉle�â1®œ‘rüˆÏ]¡4¸(|0<"¨<Éÿ�§F~ß>8Sí£ãÂX7Ï̼u•o{ØÚC;¤˜¹RXÐßx°åúþüã®:àT®v}Î-®�…;¸JããÖém¥»~ÿkíýñw¡�°(ÑŸâ¾BeÊÞwþÙ}Æžÿô‡i€ºµ÷­NòÓ=DQX™‘_?;‹YÈHõI'ŒsX¤�LàâWH✠6­Úñ äúÒkô5� +¼wL³JG»+â¡[X‰Y5ÎMöôÉ…¢–9`H'�æ3ì!ñ£O«+/ìÀ `_ 8ÒÕÑڦ׼ڽ fT\e¹&¥S¼,À2ˬ|Ø®µ©0 ½àÁ- �}8c?Õ×ä}€4[vŒŽjR´.(XÜ6ê;ZÆßNW0Ì<ÆqÒ–½Íƒ’@lðÔÇÐÌñÓIŽ�ÎÈ+îê‰9¡É—»A2íË€‹÷”•( ‘òš“z"Ú˧ÐÈ&DhÓ`,Ð~ÚÜÈfád³/á¥WòvA.Ó ‹pøBŸ/Y-ù½Ž€”¦ß56\è¢hቡæbÔA-Žž~IÁ 'Z¢×‰S“(‘™ŽÁeQz‹Åº…„³ý‹�tèè—€ˆC-Ëè»8}'6°|ÅùÁÎß�GG® c@QcP³$.Rù8Ng!JJûþL©ÕðÐ}Y)B6 ô">ë’–úqd³®Ùønñ3¯·sÒ ‰çâ0ÌJ¹ôõ*-úÏ*-ý㾤fµÄ#O|â9ïK‚ËÉòg_¿ ÝËØѶšë5�'¼Þ³î.üɸ”p¯ïÀ(çqøÓq7oؘn‚ÒeS%¾Þ$-ë Ò┢ÄÜ7mÊ‹§QsÍ‘M™�yöYòé<.þª¿ø¹þù¿ømV\¦U%ªXoH]±JäË!*ë!õù] ©§ :8ã »i¼î™i7Ÿ¸g< C!�ù¼mú1gÒAÞ(ô bKâô[Ãs¡Ž ÷àÊú6·þµä¤M7¯'ö&_éÐ*ù×fÍæ Ûmf$œ,;ÝÿˆŸGc4 ÿ3óM†ð÷b�! ¾aˆqnâ+U†XÒÃÃ#WŇd«YåÜáÔ¸ïÇ1ULô0¶�9ˆ.ø»Þ÷tZ ¥d$wóÝ1ÅbnÉàŒâ¡8!ÀÙ.`u‰cÑ�h¿~E'êBCÑÁÕÑJ2D]®ÞQÕÿ.V\i6» +69–°i»ö<¬6>-%ÜZÐEœ Ý„Tsú©lÒ°ùÖ=hæ°�—… üív‹ ~L>C�M8—þ‹ÀtÖSE÷'pˆ  UKÂ�`‚øðuŒ² mtL AÇ¥citDCGu#½˜—D*�Â’F&Šâz"-yH+=dÙ‹ÖŒ%à a¦ ªËÄÐcö=®^~; v·´þÙ˜*G ê@”‰©˜:÷Ú�àW;6±„PëL+’ #(‘ê]+R1((Uì¼U4�/ï¼ut#_P*Õy«¨"_PªØ¹Td 01Þžt óØ%Wá�ÊwŬH¥¶Qʇ+%•Òê^üR�mØ® Ý…_±í°ÐMά2FÆ�câÏ_‹-·ÌfQ`ý¶lÛ¿KlNa2ä®U4µzš–êÕ¨½À¤·|®;1ëŠðXio¥~Ô¢ÜÁ¦ŠÿÌl¢l•‰XÃÔÏoún +Ý _†£ÌWì!�öîĦ¬Ò,RIuúâÊD%‚qéÑ�‹ Rie•ˆ¿ï ›·àËÙM\‰á^úEaDå‘$ËÏëÚ>c®^{½L¾ÄÂ0‡9Ç SF2{€±pói=Ñ@:XF^uK¼ŒÃÃx{©DX¶Càk‚þ�Ý–[ÐÌg yhŒ÷^ï¢H A~íNøYHBÕ§-UD¨DvÉ”eŠ;5ø¢ˆíqЃ>ÈÌ +hOµs‘tÏU Jj0)!‚pöÎn0¤2fÙµcåì‰áôW\~9úI¬é6@+K!ë÷ ª(´ëõ õ ˜|Z‡µ@ZÿÖBàUou½J¡‹�”Që¾ú!‚Ò×Õ†\?Ñ ÂÏUbzºq³£™T\Föϧè8ܜȠšýOê°ÉÍŠ:‡7•½³áTƒ¾nMa£$ +°÷êÕy�ØqßJ*@mˆë‡Pç“ÞùU´;²‡¢õà``Ù®I5Tw‘D³Ôñ{çi�oL*¢²2­’'=Ù=OÂûdÅ3h›Ýý»ðÕE,3^4Ù_Ú1?r‰<{ôsð©X^uǶSŠÛŸÌ�›Uq.Ÿ˜üñ~‡®—ªÂ–”’z)š.s:9LÀæc+½�Ç‘ÑÜÝÛÖ +°ˆÄUß—ï+C¦;ÝÂt(¦UmŸ&Å:رb-›ÏìþëÔ "­Tf+¿b ìÚœx +gÑ•-0¨�O +âðvt4qø çdþlnÜ‹×fÈn×ýúA´D²ï<Ùš'3©‘ˆsh,£·N¬ÝF—6èÒH¢³ ~ 牺Z£Ï?]KÔ¢ò|J„‹S�”ìaY©â•:i[Ÿ9trê)±"ŽÛ´¢l¹vä8½Flé{ÛG§{téû�l`2á› q̨ȯHgÌI +.Š�éÁ”ÊÑÉkwÔ|Rù¬1´BüI/vº/‘­Ekõþ{é-ˆ¤”‹ºá<š²áàD#›Ì _ƒb¦pAİ :vn~u¯Ý)ÆJ |ð"˜¦îXÔ¹Mᶪô›ê‡33ë|j—ËU¼Ö«#plÐÝ\ Ÿ°EáS¯�Ž‘XmÞ³ˆºe•ïqVxN~¡hçÊOвQ�°ØãË®r©eƒ†‹¢Xmõë¹ÂêŸü¤sÖW¿tõÍ•ÐùIœÆ­ _iÑ+]h ® µ‘PB¹‹Ê5éGmi·PÚç��A]$Ä )ÑW/GÓ-:Ûtá"±Î–œ¸r¿9}k\¸!4ÜÚédÛ¤‹@$@ƒ‘싨m­€Ëä»(‘á—É.¹øz«—³¦~ä^“2òá\»cJýÕ„Ë^üŠsŸ7¹P‚smu6 £7¡0ž[Ë]›Ê­UoD�Ù!‹Úä›Mfå´vη4�[µæ¢Ã[zCeµÆ¢.­¢+ÍÖÖÔ4Õ^¨ñ³ÿoq…Aƒ˜€(fdzPH@‚3 5Q�Hüˆˆ$%1ÐÆE+迆' `‘FsOYpq'b&¸l³Ö(WzPLŸ\•axʪ•Þ¿¹°ÒûO‰ÃÛ €ÃüYjþ¤ÔßÔfœ¢G•^ +ýe+[êÖƒÎI=˜·búâÏŪ§÷Y©ô~lÎòãPé>ÖÇ=ŒSz½ž>^”1|©õÕ=Rwe {¦ôÆO4pD¥ô~Ä!¥ Þù[7ô§ÓúÀ‡Zô>ùðG´‹cõ¡º¸¸«xœÊR¨Ô$œê÷è %Épÿÿÿÿÿÿ Œ·µFN“IÊ”¤””ænª1ðÊÉ¥"2WÎáJ:§PÊfL¤+N:=!žåo²ÐPX¬}xEF¶SO%t7F‘;£ÂP{év<‹’iòU2FíÉg;Û¡SÿòÔ±:(\ØØD-ݨ¢Ú¡c$ �«r¥·ÉÊS²ý¤h%Út1k%Äø9Ñ>ºí„¨0LK¤aââ…¶ë`öø¨T¯:ðòÓïxGºÝUœZtŸ# ŠI˜¡ u `¸ ý¨Ö©Z'f: )¿’¿�ˆ)ì”PJ ã]š°ëXõVD�²*?´#¡°TIØr¯œ\AÕRñÔwzdQ²r½*žŒ¬áÆîhÓ”ÎìÀ—ˆ®&/qY{lÌTò°O©^áé@R™»EÆÿšý +› +ÃíŒæÞZü•RN­«øtð]¤Q‡“ÖXñ%Á½ uPìî¦ÙzbSw�ÔÍOLÍ…hd�¡”×ÕÔÛ ŽQÙ^Õƒ¨ƒC¯¯ïÎvozêÐìÃ^‘Dbº’3wÈ㲸ÕÌ!K��ÌÚÓÔ�á5ÓÙ�G™K™ùOèGä_((ÀP(ð ,”0ja àf€¸@*�ŸJ(@ (¨‚©Àîes¯‘¬nAÕ}*8€Â@p”`<aH +60eH®‚B�¸¹X0¿�{€H#ùK*ä:(\Ë+EZ‹©T÷¶�w¨0¡[Ej31wfSÓRí¤ëµ»­/)·uîgUgëèr¯XÕ—mÕZÝYÅ™º¨ÙL‰KŒ¬Ã­Æ4#áÙ(nN¦E6Y,ä†÷æðäN:Ž‘éäQ/�K¦]Ü;0Lûcùgt1¶ÈP!Öá7Rù_ž§¬Н²#5í ò^ɧÅlGˆVwb�"÷xÚïî�vQ�QV¾Ž³Ã£Œx+‰ÒG™´È^Ø�¨îÒ³’ÐánÌÄG”˜WzßuV�Tˆ'½¹Õ¢t(ÿZ‰‰ûú@#eB¯þhfŽÎ\nò0ãN��ÖÎ2M}硌ItåܪcJB<ëY©ä%3©©Ñ¹þ•ÑÈ�:Ó_Œ˜sù!7š?ÜøõÈRs÷’ÏëJ7T±¦9áïÌþJî¡%×ÜfšMÙIöXïŽS"d +Ry.®��‹}¿±•Ÿòr¤…È6õ# +éˆQV27Æ��E�…aåð‹É`W¤lª¤ñPTÇ|¨ŠåØV!=Œ�n¨-ûèw«ðt?»M�ÕæcòÙV’ˆ9$5B +2l/(&ÍY9ås¼w ‰ÉâNNj~ð¥pJw^¹u%£x$ì­O™Æ:BãŒ�(®ù¢n„dAךÔ6»œ÷O�™jÊù8¼R +f5'¤+=z¤ í¨g=R‹ƒBÏ—óÍE¹ÍâIòùЙ‡uím:óË„üVÙÐÑüDóÓi$0”Ì�é�€¡$Yï¤5W<ùïj…ÐÏU“¿¤1„¾Ê”rSăñèädè\Ó/Ú̘�'D ‘#òŒÅƒÂй"2»„xç�*v…ˆÇÎŽdš¶7eqgÖdK:uj“Š˜ø~taœ�ÜúDM95¹TE‡êÆŽj À#n’›°š¦2DuVFcS=èg5ÕŽËf^9•õ¾T¶¨ã@VwSÄÏÕÉù�+}FkÝš£Û¤�‘\1Ç�ÀœgjnF` à=FoÊè3`Ôš‡Ré :ï§ ±Zk¦Žx®*·'›²“É�ÀÙ ‘ L¦ûW3T¬‘:Z#79)WÑÇÓ©•DÕWw¤ �,fvgC�Wx3ÿ ºÞ|rœ×*eöp1y–.Aâ�È8CoÌÎEŽ»#cÌ EˆwvÇkXm’Ò" +׃Âp2§�UœÃ]ÍëäTdM�1h«9»‘ …‹dï›>l:F¿ ÕÙÝŽ!¿!²OfìEQ–®T)Š<ôWo”³ë«©Ôƒƒ½wÑ…<¿œ&Û;Ϲs¥ú¦DþCä�É\Z6¬iÆ2¦!OpŠî‘83VÉŒ&Á¦u3º¢+[CîÊ S§ŒfìB®s²‘þȇô9úcȤ^Bd3Õ¢Ê E“ún _‡ÒHÑ.U ;ÒE墸ëàš…E5!âaHb™kM�3ô‡ðî5Ѹh!<9Ö»Iòil)s”4ËÉâa¨n]Ùm4Cz%d<õrºÝ”Œ„ ¨Ó†‰D¦IÐ*ÅT MÒSH ¸8$ˆÈ¤14ÝÀ@ŸYA¡0Å$RD$�P"Q�6Ùô3’Ii#"“÷ñ1èºå*ÏD º·ÿÆð],¦E º éq À®r÷ƒ|¾øåx™ýÏdÇRͻڿ&):ÀžÄî/Ù0¢1¦Wì}¬¸i³LtnêAÑ5Ý>üÇjÉ­1ÌÞ-�/ð‚–@Wó¬¿\‚†q¾Þ²ôê´îz˜BÇ|‹‰±ž?óõJÆëÄ"�ú¨x{�¨•r`¼Ü\aOŒE‰î¶A¥D£‰L3—®"º šMTæ°¬õOÜæ¯]. ï<~/‡ÜU‹L»Ê;CðmÓ¼-‘@· �­åÝÚž ½:2³´FÃÏI ƒžÒÝ]ˆèxfÌ/ÒL +/þ™((‡/÷B7�:î3Ó©èˆeNƒÜ‰žWœOýåÂîž©¢g¬}“°ùúùCY�¸f½bL ×@‰Ó:²¢Œ‚w'Ëùõd-û测Xµ×ÏP5*N4‚@µJF…B¾Rh¢êÊ?VÁ¬mÔƒa÷ÓÌEØÍÁBFAoàa=Ž–qÙRÿQ;ý¢ÞÜ~õÐØ´tk§¦Gì~§‹£*zGW1¬ødÞF%oWc½¹£l87Ð2 7;›"´Å|BÚîÏ¿±WUPºJ³x:I“ 3ûû„>"~/CkÒ&N"îɈ÷Õ­P›Þ%Ú3hIà}Ö,–:c®¬Â!^GÊϯN ób8½4ŸôܲNÝ ¥;û¢ck0¸x…Ne|”ŸÂ`R^ÛŒDr–õh…¤+5Vð.WpzØ1±i]þ-7:½=¤Î�©Ç +C•"-«îŽH4c:ÔUb‡/´rçjYþÝÂÀ=á¡#9¢Ë§~邪*¬¼*]uEÕFS ÁèUÑd÷`Þ!±G÷9Ri€;°ó-ŒÒ¾vFÞ43T¶M¨÷°HË$:Ð̰ŽFKñ<’ÅÓûБæ½å®·Dö*ÊÊŒ©b…¿¹xp `ˆ�5a› Öb=³¹Á«¼¸E= Ð`‘6©y9÷óÙ‡qªÝeaàŽKʉ¸’•ÑШñKÃ[¶ÌaßÇË»â!ᜥ +8”i$¸\Ìà„-PÜV1‹!6ÎÏ™ÞÌGë9&êÞä8–6¿¼ºÒÀDN!a{œE"° ‰=››yøõúÃøU> …$Û¹œð5éõ¿'®­û{š_6|î^_nk’Q݇’¡ä(Uß#Í{0Oìð#Gi$¡“†ô) |!�Yaª>h�6xk�?%¯¹úÕ� ‘&FÒKË�M¡’»Ñ¬è�9•Qè>JAÖçQâôÒ`éz+Q™êÃð„@û8}Ïs…iGUÒ}é^@:U“9ô°æ½�füòÛó`õ–PÒª3 uÇÜ p•OŒÕÝ=Ë ¥/í‰D¥ø^X'|vÈ5þ XBe +EÃâD)žxÈo¨K0«y%Ù{‡š" +Ñ´_�CÅ­¤b#=EpIþtÄø×Ü&‰¥M‡Ó×|³üÏâ'·‡Û3÷¤Œ ο³c­£=ã¾r@_Oì �Ý«ä{ÕŒ§\HuLÜÂæ|þá&[ ž‡˜L‘ºœh�%󾿤’l™ç¦tMU³°¿�¬TïýÛgrçý]Oq°" Á¸ ‹xÅ_!V°Œ%øþÜf¿§m—ǨÈËe6Þ!*L–þnn·Tù@[‚¤‘Ú€·òÄ$;Üy,bìíçFøc7¿î‹—½n&2,clÌ™ìP+’]‡ÈD‘ô¨ˆhpÉ›ÛÕó’ËEéÛLÔR~v@zJóÿDÒ~ÎdÌŸ½x—΋2Æß|§VÖ|fVÜI¾÷#‚#p•jÄTäià7H¥�ÇØÁ™ 4yf-`MjÊ‘›‡&NÙû„ϱâ¢(²Õ»ìuF‰•ð¹;¾–ÃC#³àÁ9  1¼ÖòÍúÉR!ÜJ3>/úT‘3 À;�Wwˆ\ÍÆãƒ#èúÚ“­E j3þº9>šŒ 4'»g²h屿“üõnhÀŠ+Iše…ᬘššørúé_Mã§T2–Y†¶¤¹xeñ âw1‡v𲓧�etŠ‹9Þ‹ÙI;ÓŠÂ>(3bt ®XWçùÅSŠ4`íbÛêºùZ®Ý‹i ÈòÊœå¾Kx?šÔëtÜ=«h0‡[€s ‹bl�;Ãã‚“´#-7,¢&nòÜe�›¸iŠ„é‚�"~øÖÔB¡@Ñ*c�Guõ�¶.S°ðËß^µiþœÞ–Ú/Ô˜•�œŸµOÚ}KP*ðA–†á‰Â5—©¿ø8p +CüÚ+€âöÆ"ßÖ2r9¶©DâYç³( ˜øBÙ ‰´V"­¯žÈYÇZÏeiö õÊA=š�ãaªŽÂ¸ÉßêÍEJM‹ËØ<ÌmÈ}M‹¹ —‰­šEÝÏ÷~ö¨Ñ¨Pûß’ÕkøðBhø×mò?åWÌ—¬BÄ‘MÄ'FwÅUDô2¿yrð6’‡3•WÄ⌊…ÿhHUÿ%\Æ•šÏ¦yäåâ—Û“U>¦ãŶ§º3ïƒïQQ~02ˆ91—ãéBú¾½UT u·I’†ŠùÁöÌ€¹¼èå¿<Ðj¿·è3áaŒ+Û¢ åæ)p·ú˜\ò÷~‡ÔcKltp&K…'*P°BßÂuDdk£\Vo +6Ò¼v þd! Tpj‹*m΀ÇøJˆ{æ‰Z×ms +‚ôx¾Žlí†c˜•{i1 [›Ül±‹ê«» jH˜ªn‚BÃÃÍÀÙ­÷JÖ%r²ïëQ�+{l½yΞ´�® 0zð¢Jmÿ6wŸcʧÓì�¢:Ðü³™‘´¤PÅ_ZO��"C¾(ZÔH„]{øÞŒ6b|òžŒ±ïKÁKÏ€y‘‘´Ëki[A”§¦á÷ã³ êfØNC)=V|üÎWÆoÀ"t¡nvÝ ]…Ge”X0Š߯=ߦœ¨¶E�áhÙCû‚£Çˆ«ngA} p cH[dgѲNÍ?¢�7(:ñÓìÄ +ù*mˆ œ:g¿•T9²ÛÜs»ëV/î1@1s8w°~ÇK!0ÊÙÿ'ºLÄ»Ö"ZY×ÌEsØO_Êžûоbî¨%Hœ—]Ï5+:2ÊåYº¥ûQÂÆ©G»ÂÒëè>2?$¼Å›zÍj ŽzJÁa8TOiÎFñIÙªHi Ä½á7ÖAVY°ô’àg×Ɉ}’êí4—(UY�¡_š&�¯ôŠ+Å]ô +âm1qõØsÉh(]+$®m°ÁXM+^”>>mØ‘0ÓI¯Ú}âÝÕ«`©î•Þï1ÂÍoÍñþž×Ó+½bAé±jÈW=úÐ+¯‰®ôêT Ç +¦~¬ý�Èx}Ö8 ôFbºÒk}£«ÇHÒïWH?¬û#(¨ì*®MQÉñXØÁ-VbRZ¾[M- ÷.ššg–ºÒktœ¨�ÍšÒ™Y£Y/wÄ%ç܀͢ºf±Mp€{°|x¢FŠå@c2rUNëÐ\ ³Ò¨Ì}ܘ¨øòXCI¡|@qŒ×/l �ÆJ;û†, ô¹ÒK¼8² �¬$Öù‡‡Y§>ö­HmEÃŽY‘¡à©ѶęÇߥf8„Gr©?*Á•Þ?ûi2[«Ùì/ ýwM<‰îï*þ +Þ¨Šrˆ>¶4á&åJoÀßѰ{ÕÇ›¦qûsƒ+Äž+½�‚�mÅz7�±Y4®—0’f£ý,¾Ó‰w´#¢ÑúpD~`:~¹]tºlµZ–)1€4)6¬*B€Þ1ZsKÚ\9�F¥¦ƒãr³’ÚL•�Ë>stream +!'Ê»-=c˜ÐýžB7Þ„ˆå^NYG*&£Äœ«ýêqsd#A§‘|Š9ïJrgH/±v~ø¨Ö²¹% R.¤m~ä…¹ªLÎG„Â05™Ãµ�q´TP((  + + +¦M +%SS5�")« :W@¨òº¦Ã½õ`�ãVÓÍ*ßa–¡†æÕÉ­´ÀP¯Â "ÙÍ{ i«~1©àgàªsä:®î×�+@�Ót(1"•¤Œb8ƒÛ*Étq6šï¦ ‘_-Š-‰gj¬èj´ª[E®‘Œ,¯éPd+a^«w¡»’œW^-h2PhªW2Ã3‘´Ê¥ÏÀQÃl¦w´^ 6—“1ãD™+Pž,Ñt°‘:úˉš+/GâÖÆ>ÈP‘m$vûœiŠèLÛÐkE¼�j5ƒ_ÒOUÔØÕ 8Á¡�)N~³ÑU_{J•³Ý¾ Ï +6{W´âù^eᴻǑzCSÿ +½rá’B'Œ„@0øÒ‘!6Œ$sW¶˜B�*·¹º +¢! %'Îm­+sÜÕUÃÇ"L/Qó‘"©JMUÕ�}‚DFdg Á ¼!”•!‹·aƒ’Ç=hDlȆÖȰ¨ã©G‘¿ç ‹T®w”[W”Ô�h�jÔ˜ŠôN‚âºSœbÑŠ£øÌ.Œb—‘3ß/Ì++ÎtiÜ%XŒB¬RÇ+ïrg`S~åFE© +™6’D�WŒ³R,J¹« 'J‚8ÅÁ«ØÝ” �™OÂÆÂ2VÖŠ±lâ®Õ=æÖSŸ‹Z9"/ÍÅYkªÞØ:(´5.#Â�#ð}C^ÆïE=–…¼Žb¾A÷“ÖubìÄ­ˆtŽ3ºÑÀnvÜT/SAî„_ôåb®EqeöêXÒ¶h• ÅU¸Ç®'°S(èGd2ÊeU£ÜZƒûN´…™Ò¸»Åd¿0—MMãnˆD9·‚çIeŒPïA‚Þ,Q¿éˆì6¬•`P>é©™Õ8#©¡°“¬:¹¢ìÂNŠü‚Œ-JÜO»Äq¬[Dd¼–Ú'Æ¥{œKŠ« †áêédº \¼’ÅTyTíÅ̘%fTƪâä¯ÚOãàQPÕzÇœ£Uኲ¢¹´ÌÊÙ3wá»J=¸2î®J"b9z¬¸)Á@bŽ3½±2wéάÏhTtܤ$XÃÕç*ì=aБ&ê|ÖëQØ�îñc�XBNr'‡P<âX¹þT¦¢¤çÄz Ääß�c¥t1NjO K #sq©ÉWAªjOL¢Û/ÎåÞ�ë“°Lß$ž;„•�,Ë–$~l¥.W[‘|)Ó=ò;ÿ9–¢×;gW5Ytñˆñ>Ǥxç+]‘›OFgqϾÓåLWñI.ÿA¯Õ]v¡Ù£LIÉJ¨¬8ô©í–šª 2ëPÉlÝ*FþTyä®/év´bfkÄšöÄCÓì\4»kK†VÊÉÐÍ*r«1[Bd+É Ï?8°˜ÛKQ¢¾­hšqøx=ݯ“sÔOÝů uÛU”Dê�¥YdšóEÙÞOpTs-W2Ô ÑÌ”™eÜʸndþõ ›‚�œ*÷™y`c/›X¥‹CÙz¾áɘ2f½õЋdôtDXr5fuÆ—Ý)r”ß�ÕŽfŸB( odžÚu«˜/‚ÁD[œ«6ADԲת(¡xLzý¡@/Ç�ç�ðN�’D€¡¢ G°�‰½Ù]—Œ� êüœŒp ¡PèDR&vg¿éXðD,áºÔÝeÙ _äf8E—ºÒIùLdJ¬p¾ÕP Gu¿ÎÈ}�ó£�•sU\tFK†Ê1–®§z�Éééò�a…¦gžÙtj\¶á��$Ìi©n/È�’ÈX°0'U‹ñq9"BÀÀ( ÜŒΊÔÓ`¸} J.CtâUà,ŸzÑ\ý¯Ì†ÎW†˜Ñ§�^úû^ŽšU`Je‘™âó} ½¥nq· +¼|Åù¡X&åÑÄ¥¯Ó7¾’RÑ jkfLÓIËÜŠ‘ÖÕxýIO†z?]«L†DÿÄÕ ‚£×ï¢;Qü_Gg‡hÚ#Ý+Ølî  + + + + + +LF“Yƒzëß–<¸rx7úÇö…c< «Tœ.ÏIIë$®4Õ±}å�•P^-÷+šé Fä|ÐÅʈ3Vœ#8OÑÔœ‘ðæ¨3¼+Â�ŽˆG³šÐ½êW>IQ'h—yc%qVrᢠ+XÕ"1ÂdnD~mc„Èï”e.§òê%¥"’3Qúå*@´þƿɔ\øž_.ê|’¡Ì>%R6Ã\ƒŠîÖ…É@‹~"ÛˆO!RÝ�žÒKÙ6bUÑ£ +°ª*ެ�¤•²ëhhBŒ#P šñµbèl7ÃQqÌJ¬CQ•€©L̪իš¡¯îjHuUéLç£�Ũtôõ±D�ÓPª¡Ù„(£€ ‰†Â$—s¥�F ($̤“�”�a 4€$‚l]Ù`¨A;S}[Ê–Îà,Q@©J¬1¢aI ]2^m”ƒ“NØ’ jLæ ƒí¢‡ÊƒÆ:Ó é#^.Ÿñ†o¾Q÷þi6uôhéo.‹òs4jÙ ¤äG®„Cæ/ü#Qìí6Ù�?gì¾ê1Aç =,R/9P¸ÑzoóHÊ^ÂXìJB�j¨¡)ªÐ�Twƒ›A!üÇ*çC_Þ #//PbW�ù ŒD$‡N‰,,dðÐhítÔ}îrÒ<ž—1dB×$_hé£ÒƒQ<v/M å÷U>Lñ§éÍ8mHlf¹†61Òmçm0CŒþÛøt§j�ßWÑ�QF#‹Û`Ú)*Ñ”Â�µ,!n}9ذ6‡ (Mû�„rÝŽ$S„²‡—<.Ed"Ø¥EJ …viûRL¬^´ý„Jt¶ øµ›ÂÏrÛÏÈëWºì$ UÂÇ3I$¡G‰†3höZ … `ûÞl^ç÷X'ðês^]|gò ·þ×säôBÃÖÅÏ æ¦Æ$±lì� °&ZâÑAG¾ßL��»ÈÙ,6 +vò~’~j?/•xå¼Çjߦ1Q™u9…YYL¤ÑèÝ=“‘€ŸL¦)©æ9�"µß˺&MõPdͼ£MC…˜÷©Ìú&}´ñ>(´Ð¾}`@Np�‹�˜XÆPû‚·…O +…z`hÙël‡w—}λ~|_{‚Š?úÏcâ§f_yðt*�\’§¢$šÔ ë4h +’ðtLUÖF¾uv5)`mÞç§ó ßÌû^è·iÛcÓ Þ—ÀǬ‚¦¬£Gökíæ«NÄ:}ÙVDäo±Æö4Gö§‰ôõo¯ør­ BW‚pM4Ir¹ÑîõŒÙ´ê‚�8­™D>yÜ�^j—cCÙ7«Y�$_: ᳇s<qAÁT28¢s†Âû}np× ~b8ç#ÁT^Œw]Í )kbÂ…~ƒb³h™Ém?ïçÑf“§ñaÎ�Ñ1c†Í5žÞ×(¹+.ÉSa˜¸�î«=¢ò›!�|–@~¾•`@_¡ "Ñ.3ì{6%:Y‹~ã¿0|ó +{*çUÒˆD«ñ¤2fbLÿ~$T +]¼ñÈÐaƒgF¯ìÃuøÜ‚”´½=©}f¿…ßæµæIö\e�Z¡Óµ< ˆ«ò‘²j  $9õïn‡0 ýjÄËHâPÓ¡Ó‹Z9Šó{oê®Wb[EgEqø×æð,!¼B\Y%Àš›Òd+ÉÕ +£ ÑŠ&kèG‡ÌŠíŒâPæ—švyú¬QP¶/Xs93åÅ=_â³Ä©‡›˜©æyù.£²Ñ +g­ôý¶¦�ÜaðöIÎ K±ðéÚå7¥J�ç1}ŠO£|’¯¥�lŽ:�>¹n—)H +< �<S+¨RQ(¡œ#¢üÚԸ̦˜{` +!€™³¹^­3=Ðz³ÕJµY KÓYô�>vÍŒ:‡7Á]É�=Qâ�<�*<á�݉ºÝL¥Èê�Š�LìÄãØ-ÊB¬î)3R/VS¥fU‘8±ÄàDÍN†’&•a·^Põ S=}+©6Pq—*õ+ÖÕŽÍÒ˜Õ‘3¡ü*tc¸ìT@ŒìÀ›ÇÔJgK™¨;i°\…L¬z£þm˜·@ Ú^㯾X¡Çã'ûc„ßW‘¥Úò“µ¬7ÊAj‡ÔaP€ÖÕ¨â&î-ÈàÛn‘™‡”ÏÁÔ8)‹Zkø@2A#h*Š)ÊnP+ JÅßöYÉéuoºQbê&v�éÃäGs Ò`!O¾“òN¸îfÔy�&Âÿ´ö1Ù40!›}NÚ‘‚IWñ�#rüB ß$C’®cÄ0à˦× Àüü´”ØND7™ˆO,èj|ëüw1v×| âDe*`íÍg •3Ö½°å¡b—L,Ä’Ó„¨0^Smæ.'t ûN;È)"¢B2îB`W× YKž0’h9üþN‹¯Ç`ã‰"¹MJó¼Àe<|£Bçë%q€ #_#:J�‡-OqÝJ® œˆJ(§»Ú"0ß3<ň e‰³½{žE„œzŸ(Äi£±Äÿñào~üã¦H?­z‚"]vÖˆ˜ÉŽhÇù¢’Ž›Bž¤â¾)\ÞMQ”§ª‡¬·ö“–{#¹‘?ˆ ƒí0#¡Ú🞔¢^è&“„¥ã�~Š¡u7™¾ý•Rü²¤Pcb,ØÉcð©‡X İ&@‚õYöN(“¶ŠM ¦Ó$hÙ¹æ'ˆ"ô{=³ìE0×I[uD ‘ˆ(EMGÛCœÉV-ÅÕÀ\ n£œ€ä ‰NÐ!�åÇ÷„WûÂE2½-$‘½ãÄèd“·9$l)èP$÷òþýƉ\y)#ºj[„XGpÑtY!0x!„>ôB¦¿ÚI­aFÈR\dÀ%:„XN–Âèg~�(µh|J„°ÐdËPƒÆ PÌR¨D#’o­ÐŸƒ89K‘ZJÌ´C/& [FS.IJË€PT§ Ïë®åyÔÅ +-BdÊ288£•¢�¯Á1êr£Ðük Žp¬œG¼’׃hp0Ÿ‹ÜÝ6­Ü!­Šë=Æy¬vpe�D\],ñò®NÒ¢MÇkyO’l’:‡¡ïʉCsqgp(’:ñ˜Á�dWzn/4G\ôq¡áw‘³û¡¨&äü?¦œ§¢KA> çJæÄНŒ¾ ,ãôÔÛ¬‡ÃQR¡sò¶Åàè)±àðøæƒxŵÁ* ·÷¶²�PHÓŽ ðº ø$ƒƒôž‚ÍþÐTAEBÇs”<éß‘L~ÐÀM‡ýU’QÁÌ‚Òne¡ƒê($òè�_)}ÁãVÄÆ"èùŠTµñuÁøÎ&�y!·à`Žv³–å (®ˆéy}¼¨½àhºŽ)uëÎC‡Ð ‘rªàÜŽØL½‚Få-u”–:út©Ú+茕ú@ŠÞ¡èÝ˙ǟ…?¦ßGzVc·‚£‹ÐÝFñ|l8Œù«z¡> ‰�,Œb!ݦP>¹?<¸fáê`EG7L#àÍÓ£9âIÑê"J€A Ù( qЊ`°‰ëؘ2Œªz\}Bep +ŽÑ0M^äFB;¼W<äc–¾åF`üÑuWUÎ?úµ3j1þ†2“hÔ]7øF.ó†øåG÷ºØ ³ò¿ˆ–Ìpr0Fºñf7S�^¨JŒùcÐIË­Ÿ;…+&ŸÚ�ŽeÄÐa(4[뿱å2º0��»ö�ãåŒÏXçåî)Á‚»† ç@¨|Üæ[¼0™‡ú 4þ„ôy‡‚gJµ®|¬¬°LƒÛqëSI ìDoòùó6È© âÃÐßÉ‚æþJ@›Ñ.ܪ¢èzSéaJ©¢²ø+)-nå$U@Ôóç.»Ü8Ú²T銀d±Æ9·<@ e¬ò%è ’¢þ?;ÃȰN§ùWK£˜ˆWgM0£Ë3NÞ¼SåW¿ãÿ u¦ÿ©÷�p©ÁKq”õð¿—Équü9A¤t‰x»ö�nýjq,l癋ŒmgM·a*õ/Æ…„?§¶ +¢¦Ý�æ¸O³–ÛÀ¿ò[¦HÁ_-4]êWîU£ø•¦ŽšDÏÞçE+ärò�É1A‚Il['h!&¿$$QËeÆw° +¨=R’v§M¯šØ•w̳%ø†_V ÆmTø#…ïe�Sj¬HfM íÁ߫ΧDu—⃘àOÜ!M÷pÁùíª3{(#ËøHÝûsŒwvp�æã(¢jgœK�þ�ç ²²´£íÅYëµÁ[Ñ=!¹˜ucKvkëùB5f„0�> ”ºè ¹¾@.sèùÍ«ƒå¬,ºxCeðŽ%@MA÷»Í±ñ°CÝ€@ôß¡µÑTË]ã¢y@šëh±Eý ¤ôHìÃOyÓaÀävÚhA˜Ú!ü&aÃJ¨‹ÿè¼"‘{~2 +ÏÐù’ bÚJ œ…q™o(ânÊ!ê6ú:à•Z"A†æ3ç"Òù �m€�‰–Íz"šôla0vF6î€Ü}7ɨnIoø†×-ô¿yt©ÐÕQqÏ>÷ ‡°¯¯‹¬r©¾é7%Ò‡Ø&„B_% °“(íK–}ii?`û•2ôðÂÜ™ëmm.ª»øÜØc[)¡vFt·h +ú"彋�¹ÒyTÄ^Ê)‘=º!E—sÐÁç~>ˆ0‰fÄÑFÒÑyXä$úiW·œùìo u B‡Ù½·ï¿µp’™9@6ñöáÏKD{Ç»”¼]áº4 ìdA&±<˜Óãõ±ð¢!¤*Ý<]ÈýK7ThÙú3Gg’Ÿ<ºî`U"¾�å}wåÁŽ­g;nPS´Ù+/!Óo7Ãô—~Û¡zÚå­nù¬úÛ¥m¶ò1õ²–Û4 Ï<€fC ®�m‡÷©uù‡*CÿÜÀt '‹–ù‡" ”ó?DÏ.mã3ðF)÷GÅî­)Ö�¡z*ÀGzÎ×JÝ1Ò’'Fß[Mï�ÖÃÑ¿éÅ~²>ôßY]=h ²Cû�Eàˆö;Š|ן﫢•ÁÂW=r‚ÚÆ`Lt¢„Ÿc¬iWFW"Ã]) HAÂ}“r?ø ¢sgùŒ] +ŠA‹`®5ÂŽ’+–q5¼!Ìî&—_›n¥ù†¾§„&aKö"n_x…PŠé¤½$¨ŠÛúâ¡JO‰®\dÏ›†>æç`�v›F˜²Ø´Ý¬. .�û‹ÃTZ&O¢!8ô%�:<Ì( ‹Ã!’ø½áJð 5@$ °ç~:Œ eCüA ý4?}x5¾ˆ ,xÞ4å{J©!ˆÃN™¾@šò¿Ê-Ebß5ŠÈÔ£KàÃè@‡ºiàF® ÔgZwz2B¡Z‘œ>ŽœŠ�äjÒLÈ��úCihÎÖh^Ÿ°ýLüF +ÃÚ¯y!wò¤¬VLEÓ€Rþ•þƒ6.�³\ØO]ò &ñ…hbç·•{�1àâ ºM.lƒ ÔӣŘZºÀK®Ú µ¢cîƒXF›PoõSGÅ!Òuy Mh`‹¨:ˆh›ïh¾t� ¼øŠð Iy2Á^ôa[ºÛGJ¯åµLvËXøî1ÿ¬s÷lÄÃaÊv+VfkÅa|MþsѶuÆEÆ,ªâ{f…b–CúF“éÀýjg>&Á€(‘D„T·˜‰Ø[ð�AÎØY8&¸›¾T\Îß�º£Ú†Ža²PœâÛÁûÔhl¼[ã‰Fœø Möë­‚�i¬3˨šò¢(6Ë ‚r3„å Ðnî!›š·W›auB¾yüŠg# A6¨BNEð3ì¾´y,È!TEIc´<ÿrñ^c3d—ˆ‹ôìfŠ0-2¨¥�HUÃå½_—# `þ1²E:ô¶üéêÄCç^¥V´ 5€ñŠú¾#óHRéÈ é>᯵·3J«bDjT‹2c<ÁØ/™Ò_D^èÓ÷`±«¥¢p}5nê6S´=‚Žï®µÐ‹—óä'@*ª5LZnê5hÊeƒ„­Ïðáf\—çMçן=‰â?tyìßkúö]‚ñ^7¡¼ÉL#ãÈŸäÓÌ‚eóFµëš—¨Û&{­ Cû‰[À�ù÷¤­W8Œ �[^ ãÈâ¤ü3»2«T{ÑærÑeÂÄFÐ?š�_ˆ€R$fœ¿‹¨QÊ€mœï†ID˜Ð}˜Ùúý= Q3ÃÑÇ¢ÝFŸ_Yå>³QÈÆ÷°R ÿZAÄìGÄÉUxH=>€Är´Àä\úc0°™Ú;0œ­tÏ; +@šÃ%wäËŦ&t;‚rLcm׃•¹YZ@·¡h" Q¸8¼SÄ Kk¢9¤qßL�¹dÐw£ÎÃÉK,Åjƒ­níÕ³³àþîq +Ó³¿ÑhKIÒ/-Qly³Ìg�£8k[¹"6%:®Ï �ÝkÝýÚ6w×ÕÙýŒ–qò/)^F:ÒÍn SW[RáÏÙÚ¹d0Ê·˜ ÊõàæTcšÈ$É#ov÷H^ V»=ËŽdgjqMíLr�XDV¬�ùž§ó¥.¡LyÂ!Žx`鯲9³!T"CQße8,'Ê©ê lÌw2®amÔ*ÁÿóݧÁ†µ�jý‘³u¼ì~´íð�×<á:ÖvÊñ@9І×óIŸ`‹¢Ó ”R‹êY{!%²##‡ë(üâlpƒÕ6ï%MGVU££bLéûG1Vf =ºì«ÀXÃðŽ#!ø€Ø/ްûÁ†áÈE¼¿­d $çxý å£ô]k*¦Õár¯Ÿè$(.µ6ÍFžZKÚ~²Rz¡z�°˜ý,‡´FãjÄ:Š@ ÍpøÙœËå ¨ÐUÞ4å+�|Þ9õRÑ/C�Îh¬f3*Ñ¡3™®úÓBók®¶VÀß婉š³+ìÛŠŸOóõ�oµvsÔ +Œì¡RË™†Ï¿ha-Õ”§O•:­"Ô™@/¯ +¬ð ž×jtËy™œÂD¤±*âw lò™c*]izfœªW™¢ˆîHèçÜŽv�g´Þ‘ß’ììlãn´½Iû¼N—°‡õÎÍú°íFœö’\Ö3S.“£—0`›O¿óÑ”í¥ì„±{Yý,³þ,2f›^“ïÍ_Ì^LÉ/ʖܵ~JÐ wùææ�ˆ|}ŽøE�У !/ÉŪ~;§µFÜï²ÿ§oiªÊË�Ž\¿WÕh…Ü¿"yþØY—¥Mž"µÙzÓ]"[¶8ܘ]å2 Ò$jc±Ö–J[°Ýuô#•íÄ׺µ·Ú?…ušÏÄ^ÉÅпÊvùÑç�TÃl8¢^=„lÿ£Ã—ùÛ‰GÚÁ|m=^ݪIMõRÜâ‘vÄ*!œ_ÿhwüòßIP¯]¤^RÛvkZ8ºŸŠÌ�MmHdXHÀyÊNšHáá×ÑB3�N²ÓE4)¸‡agaðà"jß-’誤½žësÁÁ8dK žt÷:Ñ‹2ímäkÍ!¥L.U¸í501Ú·õrö¢TtUÈ"è«â Uó(ï´¿ÑNÞû¥/G2XR¶ì½ªTƒñN­.ž»ÝÇEZ„‚ ÂNª(¼v_Dï K².»(¤$ë„ÒñYc|`cd³ŽÎ:U&‹B2à–«�.L|ƒ1pñ?oìúä|Ð»È ïÉÄë=TFà'“ƒ1·. .“ë#ú;ý\÷F°‹úSÖzgz´%Áʘ»1S´¹yÛkb�¤™�é÷€Y7\o‘±"‘7z5°„£gÖu°Z> ~×/§hãràSëÝ=oÃÔÛ`ûظç>ƧÂÄÝÿ¹©Qµ$tPÊ p­‰ Æ6ž�ù^i ù¤Ü‹3†QHb«zuR°„²ÏÅÂ�,N 6|äh�÷y6¿[÷æ/MˆÁI³;ˆ ,ŽŒIŸÈî| Œû®?æ„Ô ;„h¯t0²×"eàXµª…ÖrÆB�ƒh¦8hèïhvC8Ç”3j.œ±Ú[%nŠc"Sް©»Aï‘l‚0v»ÚR¬Þ^”bL]Rb™+™×ƒòÁ4°žŒ€P±ð°N¥×tDÔA„½“bʬ8XÁž$šî�(ˆ¨Ñ_¾isº»ËkTËä‰Ì¯ùãù9õÿŠ2ÜäÀnw3’ +Wlác´ðþ¹}×Ñ’)Ô2c‰ž†SËû×ì�5Ö” g\÷Wd\Nd<Ÿ,�Á/rùžný¬R:D‡J>¬d§!AþyäòQ�%„–ŸÒ¥ty¨Æ�§(pdað‡v[,Ýú±àý§#çk¥ª¿ºÐ8ƒ%¸8ÃQl¸OèdR6ŠÄÌ + Ø&¸»ÓäÚ®H]=�Òj%‰(Ë/©¾g³…Ã6ê +Ñ0ã6c6D4gÚ–2â4›M{m‘(ýû›�U£ŽkDL‡�²Õ�( Ùzc¿çÿP":é°«„cÃ"NléѰLQk)W 7äÃ^ÝWC®c#íÇ8NÞDÏ +„ë�¶üÊBäàíû~oÐv›ö×%­HÁj�202•ÔÏ^N—â‡çGš`‡±ú™¨mmÔ† cH®kf$"wò�&šA[£ŒÃþ‡®B£¬Î6ìw„a§mœdTâW +iÝ«sÝc³µ¥ŽËßäÓÚ„ðmÒ{Œi´MYQGôŠ¥Íã—ŸõÁ©âå�(ŒD­' ¬‡uZ.ÖëËÉJ41ÁÓxÛ?vV‚-߉%°6 ƒïBýºüÃÏÒÚ}iÛ)R¦¹öÄÍû‚kÚAO¸'[Ô‰;*}OÒü¿qe+JúXÒ±÷¼E¢y‚ .ÅUâ¢ü-?ƒÅd Eó+W^[üMoŠ»¦~f�ϵ‰ìºcúÅOJåå ‰D]e3ó†fû1¨í¿Š1æLiׄ·Eñ3mÖ–ÙýEF¡X6p©�ä QÎ'ýÖŠRSºúñFò(.i«ö0QÊ)žMŽ5ˆ~tƒF_x>jnJtC±Ž¼ùF“§1»¼N4=ŽÌtï +ˈý\ïjcvl$H‹Q÷#õó™eh|;^š5 +òVrt’+­AIÂØzh·.¬„Æ€&ˆx·&¡ ¸«"·†ù˜æn·ÆJ\ Õ˜ŽPZN›�µ2·…l‰ˆDëAû5ßTv¶o Ñ›ÉT¶†UC¼Ñ:þ>Ò1IvîØÎ¾³x;:¶ßbmؾ}ýú¡p1S3ЭLéòÊñJ6c æç +Õ»ù¦aÃboVáiŸX‰j¬¾í¬°#·#áDÈ•g¬Ì«vÆÕ3L¤dPBš¸GNj4’M¦†„-½g‰˜å��>ÍöâæÁbÂ6í~½Œ¤�§j„üY;( ÿC¬ + Ùî†&Ï‘ï`Íèx*x¼b ㆱëÃj)ÕÉ&›Nòs¨…ð~àÖ¢wø>5ânâiE ;Âu\÷ i#~¿«2Écç³óž\ÀÌ ¦@,K×äôbéÐɃž®Å X‹%ÑF5à¸�Éh¨t°§¼w§G&ù<Ì­®®¢;S+ +VYL³i³yò{ñÃò“ùÈÓ=:@åf² Õ¹®fr{!€-q¡s¼uÝZ»ˆ;·Ê…:tGgTuÃXÚ=âÚN1¤yõ‘VLJ ô»ñsO4f?ú%L…rÑuq­ +º:šÿë0;ÿ�ª¢@u|¢FI±}±ÆÕ“ +X{íÑ–›t´U—ÙÎ<Ĉ4iø� UŽîr.uTU¡ô’°Ítáoª|=i±V¤jâÒoÙ†ÉtÜ(^³�+7ް„h‡¨‹"&û24wñÀ’šE•LæÕ¯¡c½ºnöF1o57Ñãµè%°bÇ¢÷ídý—Xu3L¿6ùªËÝ«¾7¶Ä½D•Í„µ,…Çd��‰œe¸äLèÜž‹?TMF.‰hÁ$´e"ZË^Øjüí*“í®Ø +¶Ôš—®ÑC5åwEÜ)•\ÛOœókwÂ,J U€Ðyß\^v²ûK+tŸ1G9KÌ=Þc¨lðc]w]Źxó›>Çt�$2ý„�}0¿ˆŒ…¡T'ŽœòÝ;¾)� ‡uψ��uR±›QCb&©7ì;«K5ßI†¬œsD~Û§Òïþ�ÎÕï-ò·n Ò#ÿ;a m,£ÒvEŸq<³Í÷˜%d^‹á¦gd2ûJ%„á¹cƒÐƒúÃäƒ#Á(¨L–@x�褡øyVXl7ó¨ò¸EÎ\,Šï•™ Ù@°} ·u>@=Çè{Õêþëe~\‹]ÅóT¯p/Cß�÷'ôx鸀ŗ›WÒ>\xðd~Œ–Q]¤¥þV^RA@G,Ú!`Õ—O¸4íÄ‘{DÈâƒñd¤¸œÂ…“œÌ°øU ê?/fǪ@xdÚÞÓ#Ûø=K±ÔÞ6Ýn$¯\_ª…(³0¶Cï`üH�ý9Ÿ jDZ€áÊOÇß#[¯Þn2Î4#mÇt(¡‚ N;ü#Ž.w²Ä„3à{¼Ї¦óvy‡”6­[ü�×g™V¤!‰öO¡äãiçÀÂ5Ö�.úXüÉ ¤U(H†Î×T�«l­aq>—X#•U‹~"Vç()oGý,ÀHçM´ˆÄ3Ý|“бÐ3büÞrŠþ¡Â&ý Í$ŽÝë̬ÁUßãÈÌFõem¢Ú÷.)à–TP†¨� á;‡jµ2ªB´zé2îèy J®éûès.FîTíÞÊß>.ÿ1ø…P`†öz…^ăX ƒ\•aÄaiÚ,9®Æ\ÕaX‘-"î�™õ3Õ_A™È#ÓåMnîð– +*„jØœLºÃnäK©n‚Äm9!RDV7 +}“å�Tjêă€CuQ“P÷p¤€¯ï)¥{=+’c-7rWMRj�Ð9²0ƺ<ž’É”EÇc�l7š‚‡$¥1øŒÌ%ãÁ¬+ÏèVC(4°m’°î¯gÜÏÂë�×m®§Ÿ=Ú{×üÁI»NÈÓô·nè…ÜY«§Ê åì± +ä_jAÄÌH©ð cÚY�Â!!SÇ �Ô!gõ”­•íÑ©RÃlºo Óê'(ŽÁ¥�é„}%¥“E¥-¡¸®qK3Gû�Ôñÿ�o4»ëŸÚo­¨96ÆPAî6ÛîÖ�˜¿D…ÍÌt ñV„�ŽÁ®?/HÕ?Ø–µEFÝ”‹gÿ�ªì¦oÙ�Í®õ†ˆ(r*&ו¶ ÂV ?{Xfä½ØÔ„??­µÄÐóØš>Ò¤.zWÜô�Rì-T/È¥ß)uóÛC%Ex±ÌA"Wx£gÛÛ”'ÚÇ‚5>æ Ér~0Ö:§¹=’'"¡Røú‘^`'UqU}ü¶)û'ÆÎ/ê%£r>ñ ý6g&â*‡JÒím®—y‚^±ÂmEzÆÿµ®»õr;‚®n��kªxÏ €ôÚH[•¥I)8ËQ®¯;÷yf鮓¿Ef}‰È\m`ÓD@Å�ogíq£ÑxÈí±6KT”(ó¶¸o`+¾ÅêP0”üë3Ð5=c›5‡�ªuWØ"P’ÄàØ¬âafº Ñ–¹#�¢ŒÔ€ÒªÆÈV5 +-mF#Û� »®Ú4cg«_³In¹p©# Ãw˜~¬œH®or�ÅjæÚ¾ ½ÊàlÙéðn½Õ��À3 ùê¶;ìO�Ò y÷îù^DBáâƒ2óg_*RUÀ#=Þ�¹8‘r8 ±FÈXnÑ$ÏÎåT}#ó&ë=eSxžk%zôw²cŠ™™{ž bÔÙ±Â�€]Újx…Fußì³�,á…ØáF™"QZd«Õб½A-j|‰M²“ÿoС’I.Fãa3ÂtœµJ3MzHR1ž³îø ?Èw ·|eƒóÀ²n^ªByReªaαjÎM(î³Ë:t‘N ¾sýöaÊ4Y“ä¾%ÕhçŠÓôvÕS§ù—Ø¢¢¾¼sÌ¡©˜Š¬Ã@l0õâýF÷}a¢õý‘âô´»éäšPƒHŸk'Fú_¬mÄ¿˜@‰ëù �`8>°òH CgwιDÍÜÆAÐàU¿Ï­~±†ü݂Θ>–>-š’´ù3 Bÿ¢)$ù2)lƒ¶GdÀÁoMêñÒà[¡³Â~âàÌ#9[ôQM�`PÓ¬•š8(Ò$ÞKõÐ.uºX�`Ý?­¯:B×@�f›0­�c5°WâRÉx< ãHN�R=ïÁh-�MZJ“PT鉹·+})m¾q¥I™RØ9¢¨—„ö[Êã÷¹è³Ñ¡�$ýER~®àã�÷Œãl-ÐE +%¤‹a¦n7•°!”_Á|F¡‘Ep}Ñ OI$˜9A”Þº7O.£´ä£ÀϘÙDx„X=#F“õhƒïÖ=If¸¤3/"¯xËÔN�M ïFì ®e|®DÇ$ãÃ=F¦N èàËÐ(u ËöÊø˜,;íFOEþ- +q–—tªÛUß+çà¿_½Tþª™KÙp!�Ê?¶šÝ wâ;þ‡ÑòK„ˆ› ˆtêxcV‚|x™.µO]SzõŽ6©¼~:ÿ äº0B +ßÔs¸AÐSÈy‘îò3U\B¢º4«øõ"�S=åä§PíéÕŠÁ´¢!ú{ÒõÐÆfV +,n¹à¥ÄT ˆš³ö,/Dѧ˜aÓ,®c{3È]æÁ�Ìð„HÅ]S�ч£æ*Àp½¢Õýøô‡ÿ~ðz¢³‰‘Ó‹*‡‘šI3=€(%YZ П­+ Ú£®þeŠçÖ›Bcö‡'¾Kü™°dMÆËf¼ö÷.sp•Ñp'+€“õ¯i¤àv�=t¹5™šAW‹6D¼¶r°°rÑ(Õfû@4õ �B½²ÊH‰ª1q�TŠ!¦.«ö©|¡§VÝ>~€ˆª¯ãôt�§:±Cg]Æë¶½¸ÄßÈ¢°Àdê§«ô¬­47tGØ:à {¨1®Å”$ڽ撚à<ÈIäëýîõ5C{¡[j©=Ÿ}T™¶ï®o'ñèR‘Ëö¼ì�IéVo0F i¢_\ŠŽhå—Ç.‰xŸ]F˵ùÙS²úßf#Wd’!ÂÈÊg™}m"¶±{SI®2ÝË-–Ñ(Hkñ@+!jÃÐub. ¶ŠowNñ4�K•î¡ì×ÂFðÇDØJº ™o¸ ‰˜Ã¹mì +î;kˆð�j“œøEÜcNŽN]Úì�Eh®¾(< E8ySôÉ6JN+­ûzZ*÷€uÚ¯qÜ-ÆÙ ‘# +l¡¢–ƦÑ–HžàF\´¿utá‡?£ÀÁü[sµmòÐê\z«Î}’B³ÝÒÙfÐÙˆà*šáââÔ匼£LúÄû•ÑdNº†A.�§ �×Ù ý–¾ß¼×£LRÊ”dºÅä\UbþÓÚÚÕRD4ªR‹ª" ¡éÁ|,w ˆv)Š© +¨Üµ€�ºLOµ™®ÁH +0¨«G䉇 +¤EY½Ê*T%U!öú‘WÑŒi•Nñ¹º¥äÄÖåLlˆ3b:_2Í<…äxQ)à€ P5 ˜W�ä±"ZäT˜|Ú¯�;œ™Ü !U×ñ•§ZUMí�IÈ!¼ä5ÇÝ9ñj ®5`|^ü5΄;àŸ"¡ˆ§íC%¨ñ+y-` 0¹°ä)Ðk@3!$ðƒkPE·,¼€�€(&Ì–k‚Át«�ÎØ�±ú52SD`‡vp“¬$ �†‡È©Fxg$ì#©Ó¤h@�*@  0`€@t8 J�é«8€�¤2’2ÀÀ@ Ôê¸(¦pµsÀ@p€Ô#5`€ÀV ”ˆ `€# +P©I‚ÚvˆJ>‡D¨’€Ÿ™VÕ˜ý(:Ó’¡aq„ 2½&ä„©@€DÛ¿f«ŒS«j³VskWæ˜Z‘„z,`À.¡¾bB…)0á“B‹ôv8SłښÒ�RÅ3*Ôš»€0D¤BÊšÓ”ú�ÂBµ÷ Eˆ€Û?µ,a ÌuB݇áø`‘ãpˆ ¶†lYk€^»&ªYtœ @€ÒiÁa"Îæ µ¶1Sx\ ªš¡§\¥Nâ0wIžÚXfgeTd0#b¡ ¦î0Zz\ˆKé'ê‹FWÏ0€Õ?vêÈ6ÔDÌ#™…;xEDAÚQ!�ƒ!df„–s,yysðÉàrk `A* C´ÐÖAzÛ¹êåfD(\ÎÜ5ÝÏ”Å2㓥ƴð�ˆ@‰rÍ”¹©7Ñ­XèXæ¨ÇŒáÃ&©@óµ£B"¶õ,v: ñ¨Â˜Çp’(§Ä"ræBÃà2¨$n õçkÕOé4t�‡�ú˜jÂÒC� Hµç�?Ó ›ê¼[Te$ÂKøŸž�.�ÎÔ«’A¬V‘*GH•øåzî ÌÔ}ˆ dßÑÖòBý Câ#‹¡�kNh-É0(pkS¹âLŒ®.Rh}¤¸õV–®‹:*t©Ð€2ŽÏÐѽ¿!炚¿½Ä(JãË¡û'ˆÁ�,‚�¢)t®(MÝŒJ|l òô¼5蘱šà€¾D�…]†ûRP�5~WÌDK‘YùÇ“¹T¥‚ƒ'«âƒ³¸*ŠnÇOŽª-HPC-Ru×a�À%D�­ÕÒbb¨$˜VÈËÖœ&„“) &|’ðÉýÚƒ-ƒ¡ÆÉ<,W�à;gk×=¤_˜@Hè"~㤘 LóÑ>&”“j\І fD*PÍÐÔœzºâ0Á9“’&ÇT ׇ ˆä±ÅL“¡Ê”"a‚… +-5ÁK6~î„`”Á’�+× ¢š@äõ7Ù‚‡²3W†ˆj&¨S¥%D¯Ðì¨I +H!áK5¢¦A³™ -‹Õ%Pð™²q 8çhÎGO ÀâbÐl!)ÿ­z¤èˆ˜²Kl�H)BÑCô`Lä�‚†P'ë‘f> +‚dâÓ5¨Ë�|è†QÐZ[x Y]uYX…ø³ÀªmBº Nži¦ŒŸXDr‡á�»‰ò>A5T_°Ä­ÊBêëDxPZB4l +,±Æ„4<(’¦%ª 9<ø„tT“ÆâAc–ÓÐ<ˆÕ|iWЃc †US'¼„Dñ¤(&\d¢(>1íÖDb¥’öÂŒ‘šxÉ«Q˜XƒÏ§]SKÍÃ@á�táÙdxÀS¬•|Î8•YáAÃc%ÇP¸l°®a‰”œÑçгP�'"„kÑY-‘õ%Cò�i™=¬Ú^^p¤Síl.u’®)H J&NÈRXN–�C…faÓ¼ÁМÚ0T®µv5T§hõMà—JO^éQ!4:€ÓªŒ„U]~vKN ”£A’ F–…yw•Å+˜‚¨ÍÁÙi?ÐýÏ�&° 14ô�Y£„dIˆ��Ô‡L1QÅiˆTÎ�9EËb`‚S¨)‡�"•gÒ(^ÙHœÝwj�$ÌMˆ‰jPÅ|lŒGP�üy6áJÀÝüùU€6vÈŸž I/9áÔdbòPT3óÍ[ 'ªâ¥”¯(ø«/ XÜÐN�@MÿŠ—tÙ�KDùŒœb<;‚Ó‚aÕÍFžšp™ê�v¸­¶ß¤Õ_÷g¦ +Tì¤Ðòë kɂ˛I0®�¬$ˆ5ÎjH’hp@{ÃÑ“?Qv¨*á¦Ã7Æ&âCÌ© +«¡��åѸ‚g9õ÷¦½ 1±RÌ’aƒ’•�¢Ä ñù—hÝBU11q°AbUAÒJ'u/  c×äØËm”ŒÁ`”Ç›>¸©xea“¾Ö‚F ;^O¨T³¨÷¿†H>Ç?ÍÊRÿž%Áð"U~^‹Ã-ÊÈ ±€ +€(´›&¬@�À#ðÄb©zë ± =a•03ê¼ÆaãLsFCæ0�ÀÕ­,‹kz6±wö{„½¶’ô¥^5],K, ×&ÞÂ23ä…¯¹„Ý#J)6Ð>ëŠÈâ#’vÓ°`b,ë <Êu(9»!�MT,8}B(R^¥Ô÷Ó2%•°@n)cf�šŠzµR ¯³ã Lˆì.oEëeq"ZXð ªæ¨@ Ø­Ì•Ã�ŒŠ*Ñé2´Š.ÆC›ªÌœz�1 8®QÏ@f/N/±ª©èЯh×LW~É\lGÛ!�µŽhŒ¼¤ÊÀ–±HU´ÇHg¦�H] +ßFy5E‘0Cm•dGP1Bj ¸ˆ„<â^"°]�x�yw"ª5'v¹üw�M¥ƒLÓ‰ÖÞ¿] 0Æ“ãè:bÑ&»8¸Êù Ù"甡ª4ŠªñØðê÷²k3&ˆZ«¹¸“)KÎ…WTA”™Òë$#v¼ÅaÅä)Öuª²4êÓ–%ä�_‚f ɃªTU»F$æ}Ÿ!•ˆ2ëžNQ§¦CAnÉâ3?Aåýß$õ +N(î™AÒ¼ñ?(ÑöìK"vª$‡N^¹Õ‹.ñs-aø[å¢x_µ×žØd± ô +G*âR|£†ò?ÞF 7ª+"ª¨Ò[Œ¼RTôü#�¬ˆŸÍhAQË3ãš›è¨!:¤m‰d¨ã;hÆú‡ôkz¶>%5†Ø2¢ï—D‰œd*üh5òºGâŽÌÃ5¤©0Õ—¨ÄåC×i𠽍ª^’Yìñ-%¨#RÞ%ÂUoÑ£Èþä7. +=‰ðHýÚ >F;\áV7ýÝÉ ù ©äû„-¥8Å¥ãV5£Jô®Êa—P �ç§!UH%#C=¥J¶ïø +¸æÅÑÄäñLdþ'¦<«3ÎSm5(¨ºZ„Yö {ÜZ±dâ%TeSdBlˆE¶Êš§^†B8zñ�{¡¨Ÿ»娭¦.–5•�úØ–—S.Ä}KÝfÞêS%Ñ7á½uœyˆˆK$R&ÑÌD9á¼yPÍê��IÂâÞM¹Äî*±þÚÓˆ y…¨E%KŠMQ%S + +þERAáxµò)Ù-"R3©Ò2(LAbÈ?$QÆ—ÌÔOQ´1U€"”¤£˜º²ðV (úºWeªxtµƒ¸ä[*P'„”«‰©·"^×%‘)2زÊ#QK•Á­€Dpãn%ÉL˜”†‚È]p€^a@\À0À À8À�ªP*YÐcÜ�úàw¹„)ÿ„Òðî�;sj`�S (²QŠÙ¨¤Ò%¤±LŒÒ¬SŒf61S€qH ŠÆÂpÜ€ãd‡Â€À@(Lr‚†²D3C03œèovó(ìéì¾ ÌWrGé)8Š…r½ó +›F1¤Ù¶ñZ»Á¢ø5Òðx+ŠÁz³Ñ( +ö\²Æ}b $ +ÀX\#^F<í[�u³�È»¢ïT}ÕPüã˜ÂСÈð†Â¢êô˜¡˜ú1ÍY +«8JïûGZ%ôÔE[C(8éP×¥ƒ"Œó3(vF?½VPpzè)IPø®}p&ë4�88HÅœ-› šS€âåiÿŸ ß¾TÿZä|þÄnµÒÏHAÐæ'Æß&ë+ÉC}â—8 æH+>±CðhË8ÎöÄ”˜1ÆÕ¶­‹'Rzb6R±ûÐöêï^�<Á“çPI…L%¶Í]@ Q‰Å@Ò/¹®>%þ‚†ûVF¦Äeð�îRÂfGhs΋žt†Æ+9Tަ!J,ïDß$*÷ +%ø¥Zˆå}àÄ €Äq~@‰‘Ãù †S'ËÀV³ÜIP>ôÿ0 õä$ì°c>è,b›“i@ÇëW Û$rðƒXNb  ÿv¢3NbAó%�v&%ÑÜ +7¡G0ï ø½�+œÄŽ–=b%§ÅM;‰)b߲ŤVÀSž„ Ó(1šÉ%v½ž³,¤D”ø¾Aiù‰ÍCàÛQbRô×p�…ϧ.‡*6'�ƒ*1H‰Å‡•993öŸ¿†ïûÊ�N‰ˆk°–ˆJðÛ7½6^ô‹8²bör÷•AèÅI�«)áˆ�‡P4eJL,øw"¦_5 Ï”(1rrL®Úú ­ÀücÌô¾��çUyn¿ð’›•"|_åˆn‚ÀÖªWã¿«Õ¹¢F�*Tm¤Â2CHÚ½gÈ.%(P†›×Š4¥ÄlGÑž¾†)%tŽ9x�(OU�`‘E$ažUÔ{lõ©Rœÿ²ë›¸S0ãnpæ¬é� ‰k„”¸±‘ÈšSO"2‹S?/qÚIŒ�Í�ÓCÿ‘+%Ð/ì8‰"¾S;MÁIl/~ñoØB€Ï"%€7‹”Il³µëˆ„}Tç-þí>n7µ½$HNöØò™2•„A©”@ ÆQGÍ$Ñš%¬+I”#`½‘�$6hvžÍèîÜNe‚&˜s÷ö^7j¥‹4hl�ÄMá.�‘'ÏHìÁ×Ì΂éç‹DCªÂî‰%J ñ=‘(òVÎH^?]� ›Ó‡äP¾°ÊFôU?büŒ¥¸¶e±È‹y4$ò&“l¼ “WH¬hThF‹p6ó�‰¬PÚu†‘A¢úy„B¬«ø,ðÖ:§5c`$. +A•äzõù#$E¢Aù„ÚÁßÐЂ)ºš°&Áæ-˳‚»6¯ƒ>úH»{‚ ƒÙ¼5Ta#ô‹˜fßA†×<¢C«¼¬ØúaÉà† +‰ì;bÌaA/^¿]Ì.?ov(¼±<¾?~›Ño#FÖâAˆ +?òº�]f¼Ôz�0¡¬ ¹Ð©í'ë—Z�8#Z¡ˆÔ4‚µuÿj¾A#²ÝO©- +ÙœgRÔÌûskn¿~´ÖpôPêb¤ +\Nœch+¦8ZšàÄ(îKÁx&öò­ƒUÛ.5´ œë?ÏÒ3àýÙaÈçŸBKíí²ð6$Žýy­Š\§5˜îÁehs«Ü˜¡~ÿnà�ÉߊCãBÆÿé$^4ªÊ›èXŸ@Öh퉎ç¹ý†»× +ëÚ"±�ýÃùúC ÇXŽëPqÈ]¤7oÁ ªëm0;WCËqŠiÙ³QÌ.¢cÈ �¶TÄ7-ß™൑G$yÉg>4 ¿‰ÃcŠMÙ7Jg!Øyã?_s¤ë'ý›#•) ã�Ëã&{ô3ÂVD£Rd•îòëXþ¸Ü®ÿ +ähpà¢JÉÔœf™%‡Ýí|Ò Öõ?¿²7H](‚%È¢l™Mpç(ghçï?`÷¤ŠyŒÛ½TϘ˜×qêîRI6§®QB£,æúý1T9\û>v ôÚbs²Õ†+ŒM-Ø•b¡ÅXN°³ND ãë¶‹Ðø¢�iÂð‚jÖï°Ò£ô×aæ¸L�áÚÍšÈ?š™bô%û÷lÂÞ�b´ù—‰âØH +!Fµ`Ô¾üýôg|¥žôäÁÛÞ×]QÏ%LãZîÞ�喝‡“5±¹/ÁÞ¤".�¯^‘òiy›~©n^ƒªc”ðÜ©q–­ø…†z!«b¨¿øÏbácÝÞ–£¹·÷¥ßpš5π͟¾¦½Ô»O%î’Q^*�ö€oÊé1[éÉNó–Â0Ö[÷ÛZ¹Ž2%¾B0½#¨Ws·<¹$'�Û/dhé5�=õVoK Ï•a` ܱ…‚³«�5ÝÍ2©Cò³‰aܳÆ-ÛÚÅžD#ýÚ‰>Œ�JVÚÄè'>²ã�ÆÕ� êJ‚ +lfÝ™Po¢P¬åØ?¹W™ß ËŒmÚQîRSîTe±¯Ú}‰+1ð:þçIÐÉgÖ �P9Z¶…ˆ’'^½˜r¼£maMÄ1<3̳ìCƒ8¥ ªX4OkÉTXÍ¿f³´s�a˜@QÂ5)p_ÌÈ¿‚Ô™ÈÔœ²¸³tð¡éhï/-=ïc[ë‚�gè[Åwò®½JŒ›LÏçÁwuû}ó�b�9+%^ËîË–= A+ž ùúµÅÿ/Uî÷’ò2eAö†‚ø514uÑЭV<Ç�5_l9[:L’3JO‡íèD¬·™ÍìWvÙíÚR[M…q¤A­= •ÚÿL"$Eh`yMSÂçU…Éðr½ÄjE²ÜþCY “‘t)bæê€ÿãP³WB¦V…ˆ\.ŒI4y[‰Vãê5ƒŸÕÖòV�=Ré†Õ8ÑcÔ¢ÔÖ¾ Ñ7Kuˆ+�, ptãÒ!û%|¿LäCe[ÌóEu¶\&·Âá^D�þ¸ÀH&Ú&U‰q`ùba° ‹…Ÿhl +i0&ãξ �N^žÆ R¯”„–†.Ïs f¼eÏOMiA��ÞÚqIÉ2(×Q�½«á~¬Â%,kRó›6ë|QýSa#Ò¬$£fwT�éµ½Äßaq‘y55Iíaë¬IiÛ:Mr®3£0¦�;å¶#7)±Oæ6–kó~x®/6Þ™Ê694q­5{ìV)[L´ªHÓŸ†ºã2ìI&´¾Õ4•ö`Üku(€Æ Z“_’{�Ìh`ni0ðð”W}zžI{Ô®XA&ˆ£‡$½ÅMŽá`æþë9rºÍ¤Óæ¼Ù8º`Ø?¢£ª·ý€p¯Ð´¾MÚãtÑÔ®™_í¬ÉhÀ¬æé,âŸF(í�i®œBÀÄ ÷a½$nõóлˤÇL+„@ìõ”Jo�òbm:lÄ{wôò#|XïɃ¬²¢¥fÙ™!EV0’t1!…Ÿõ„¯P½»�s´x±Âæòa%¼ˆiŠA¶jªE<´cÍo„¶¬cäۃ倮M†}ù3W –`QE[¬Þü¨zÉÅÉ¥kÿr=jЮñÝÔ?»�çõoFÀtiÛkn¤hŒ]Æ%?³áÊõP +Ó…ê3�vÖà¡7ŒÎCÎÎU}<ÒØêïä—.Bø7ë3΀ի'ÍB.Üá@Zæåä0ÁÕãB¶vbqÓ1W¦®_âŒOϬFëk³d"–­}Zdöˆ‚÷î—ë¶#©ñðës­¢úÑÁ.h›”øQÑZ\0Ð)Ê' ÀÍ�Mãø"´†ªã $Ö¹�ƒº(j›�–d`‰ƒnسõؾ ïu«R~òªqI¥ eÄíHu6f7’4Ä¢�Û£l´Ró9ä 6ü¬QsÔ¦ŠÐ1ñ8|)Ô`¥˜žJ ŒYq�€st‰bÿLÅ ™¦ZýßbzæÝ“�Ï—]Þ4�«ž�2öAe…m€Þ ÇøDiÓŸ\ûÄr¦"ÛIt/éÁéÿb 4Tfs#a”j®�Têj@LÜ3ì¼Ý¯™R�fï?¹“óOœ)Ó’¸³§—ú)ÚWjá(5æ>/„8ÎFºÞÜNö€Gô·ÏT–<ÑÝh6ùÁ +'ùWòAyVèåÄ¢röU);ÎbÃr€\gHfvÑ»¸¼S$½I'–²¸úà‘PÆc�cUNƒ9ñeHý†þ«ñ•sIÝVþut3Hˆ£Óv€øÛäJâ!änÉÃÁ^®ppÃhAm²&ÊÁÚß„1](?ôȬMXœƒ/Ì>3E{S®¡Ñ^ e.m¹*6]Yt�­ÏZг4gäeŒ8?\#Tª²–R3¥\\º6Àˆ2=þÇM\Vvù£ÒJǘ(Ô÷Ûbï�¥ìt H¦"Bs�«Ô¨1)Ê:N ¥Š÷KÚnüHýðIØ�7QÚS ³AX¿ê^­t° ^‰Fw�ü¥ï$-Í@öÅÀ˜­­7Q‘Í[aësÖ媌Lò!–‘TQ me¬ˆÿ©�ͦÐ]‹¯iÕ/Œa”ˆ·lÔ^S±%ZvÅœz +2VŸª‡5ÙÉ‹i08ŒéÑùZ0S¢ KfÁªß'/†RIÒÍzq�¦Øì¬©À4¦Oauƒ\‡T�÷Á¼ÛÂ^U{ìõ ~¶Ñ_ ?¤rUú¼ä?x<¡ +ÀÔ¾“H8$ ' #!úÓÙJ./FJŒ2s�-G%ÈíCýÒÍÝŸiJ‰S|#CÕ?ÜÓ€UQR”f"³Ž™@ Ãý­ Ì>˰CI�® IÐøÕ‘yµ(Kà4R�N¯|¥»•KžAæÙ4†|ïÓã&({š…�|Qžá_šH]';xá$4ÍÍHƒÎ4Å 4ÂpÅwPßÕ�Ê‚Ε°æÚ¨vêhGß3÷Ý”*ÿI%ûfèÓ­ܤ›šb‘§BxWÁ[8£û®ù¦Ù›çÅ–Žq/%\7AåãU<ûBóù28$P³(D‘•l$O¯¢ÑàÅ9±êÿÔžeH¬bwçYÈJœÌÎK\†¤œ|ר¼ØQƒ5]�”·çù ÐpÊ2ß´ Ú>‘#ÂákFLnƒWi‡*M,ëŽ~Š–tº`DKåqNÊÇ÷ÿí`ÏQfN€©&½Ð•ÞÅf(ÌÌ0õ{E&q)Ì^ÿm™Ýãb gfhyÁßoÍÌÁ-N?f¼`jâ–ÒH™r{ƒw²É5¿Ÿü²›Þ¯Ã†oØCñiDÍj¢&­I�mÝb$‰tÈe§Lãßä´1RÂt¶·ùHfÙ�_›¢fÝd»¹xè€Ñt[ì[4Õ8ÝOx-°€ »`;P-ÛºE$‰tÈÉê ”¹ ½èH<3GÚØ/ nM†•­mE$Á$ä:úÂeN#QPÏw@¬Âý3˜ïêëIöWœbޘП¨LJ2=ç—�õ™j`.¢~ùÞÉ”ä•bºpP ¿È‚&FÏ*òÝþUWs^{ªè5�vjr<>VÂHp�âËLµþìDõ�ØÀ‘åß*‚¹MÔ�¿x›µ"v9Rs1]ÉLÒ&CYPþ’+ ïÖg˜âB&äðÈI�«Þô� îÖŒ'à_‰ §ËR‘ä¤b«jªÉ·*™ûd�‰ë‡]ÀäÛ÷TÂ0öÚÚO½D¦'\ô$&ŒNöÝ53ðûÆ3˜ùoO&îD +Z³*Å?¡Õôš”|Ä@Pð@‚ˆ½INõ/¡­ÂÊpÁEW>‡Ã2–ŒÚEßóœ*ƒÚ¿MÚaà9CõU`Ÿ%jÉáYl¤o†P6ÆÈ"à%�аž §+S6ÕsY;3‘‰0`5ND²žnðöLI˜—1¹…è½bxmƵž€¡pøB�Îì/íLŸ÷ +¥ çU~Oã|»{ï,(ý‚5ùºyºä Ùë£ÇZò?Àº`ÉA` }Z�LôÄ…±üNW€!ùJÞ§¯BΫ�ëí•3 <Ôz h6>FÚ#†t®.`b¯ÅLm1˜9Z^mÒ !BÔ¢ü'ÞóÿN*0:ÔÉP¶¨Ì àYô‘îÜX9×ÙÖi� ˆ6Í8ˆsl^øÒÈlÚ lÜSœœ0{'Ä*Ìï+ؘM£¾4AB€>MÛïF¶íì.P2ÇÓ«’kŒ#Ü�Þà¬xÌ +BAݲ ñØm”·,‚{ðð°në5O¬¸–Ù+æ³™�0°°0åº.8ÂùU€H¥¾tÓ\›å®§—7pÄJ%®t5†¼±›9 _'ͳ×Ìpþgh‡×@V5³eñ¹â=óM-”Võ¦„³™1�âÄn‡š8Ý™±vA®É“mf�· üŽD>�¸É¹oý}‡ȃHŠ'!2Æé#‰=9ñìcíøEîäÁ%i¦p›IJ3=ÔÆYÉ×—kfh7?Ú�%£t*[†£X¼Pø„ë=á°‹M£”8/·Ð{o¨Ýü?">Ƙ [Ìo„g„`�Í€¢¼£x&–¼O?!Æ_{Õ¸ûRaƒFý…Æ0Õøh@«`ÁµRÛIâõªY/% Á�gy¶v~‡!‚*ƒM8"˜Y~þò‚ýÚ›�å[Â{3”O)šÛjxDK$þDj«þøÉR ÖCÔ/)Á䯯@°£I¤8L›JÈ(Î&Zª�òöW| ´¬ôùx'–û.Ö¿šŒÂeL”#|:aæ3ÁÓ7Lïé|]¢ÂLz÷ã3±¯\1¨¬±œX'CòY,A¢à’<‡Ñ<–œú_&g•�Å?͘Ì/Y.“‚Õê’„8•b† +ÝÉïd%#KÄaðCh�¼kç„dO}<»M¢Ñë‚à_õœÇ]i¶û–Dï»Åxã+�]žÃ¢ÿìÖLµ/×.ûh]hNòŒ€7E4¤vÝi�þ²¦÷)¾D¡°sEñ‹wnŒæ›ðŽ�?’…qA +‚"ÓBPHNk@ZVìoø”ŸPÌ‘Âà‰)ö/Ô3ÜÇo™¨ïHQ)‘ÛN@ÜÞØIâë÷w•7I£‰d(’�ÆõÞ(fØsTÑb¨Éòçi¢<‘Çߟ :�04TAC{9`DÌÄ1SBiñ°!Q +²�íR4]h‹‡‹W;8B·’ð7˜ÑS|&‰3ËBÔ ¿tå}3rˆÌÌHMuLViPùº%[¿JídÎkO±ïÅ…BqÜœ§‡2µ=཭óÞSOƒñË“ƒ!оÏÒ¬-u�DÈÖæi<ͪ„_g€'I¡¬åÆÿh£Œ† èR&™dJ2Ð�Çxr`ïU»IãªjÕ¶¢ø ɪÃäÜ£—2•Ÿ4Ã>\hI+Âj³‘ùª‘…æ1qœä²»ò©ÈV:!äf›gñOHDÝT”æ¡Z§ñPÅOùÎ!Qæ#„¸-›!Eêl¢P-R¤JQÔh%)œïg}lk¼bh=II�}-µÏà•ª‡�aV³ÿî'|ïîJ •ƒùHñMÖ¡‘y�¡9WW!Øzc³Z±…`9 +é%R½�ñ:’¶¨¦"H3.•Ä .¬ò.Ë�#¢ˆ•*ǧÁ­�>íš.Úpö QNBÄjbåà³o¶H)å�ÉÊÒèx¾jØ]P” qš°ÜV¨ÏÔÆpõ q=±­˜g2±7\lI³ª5´EMÄô`ø‘�HT´‘ö”Fq8« -±ªDEuZ—iùù´Œ¡è¶\t¢‚NÞÊ”<•N8ͺE×i�b$%3y zø¦—hbFcŸˆb‹•kéâe•ÁD,^)éޞĘ.÷ÇŽÏóÆ¥4%½!ÎD; V¤Ôò8W™—�虉 G—7ÁRfuê� @Ø“KÓHIRªŽOȈH|Q…û�·HÊAÉ”¦h?è—ïÒú5„ËÁ¸NË*ÂVŒßôpS–x's9Ø’6Dwù G<©ØÈ6A\Nî²Nw¢<%冢Ԇ΄¡Eè›;|ÊËÜú+Ä—â 1åUѤa¢¾�ʪ”ÂD™^«Ylè*Çe+t‡(T› +•‘ =ŒÂÁ�|ø êÞ mZª í¨Ð�|ô{Â:¨B>çD„[X#3°�Â!AÁ`Ó)¼˜<2–ƒñÒñ¾X¶Ò!*RÊÉ ëp§|º„x àŒ6€ÀðDÀ� JÀÈa€hÑyÂ÷ËT“Hõ5E$ñ 7O8jLñà8iÄ4�{ {¦Ó;ð©d^@b4ÍÜ�ºK¦Ñœ!ä‚C&ºQvAÕ«àÙ]„œª—QhÕD‚èSuƒ±v$ˆ®°  µ¦È7g± ¡ZÇÛ·¡ +D_kb+‹þî÷K#³zë“�BËH”ú꣆§x¢·�õY�6Jµœz )*Èû¸“=‰w%NˆÌbítòœ‰á¾'Idúdn + +S§‰Õç» (P JçuÓ>Ÿ„×kä!†×#Jæ‰ë ©—Z�RŸŸS—°PöN�8d˜z,L½Â)?N„©òDYN¥ºK¤ Ù\wp�1Q5‹D‚ë“ Å4ê¿Áu‰…uʼ ®“|휓)KÕe]�zýÞn©·D¦BëC¡u¢ß ºl*j…[QvUBë¡uš +­G­V²X¯½õŠúM&y•)ôˆNO‡uʹWÞ™ˆ˜© +«Ëéò°z�¼~±ù‘ÓBbõeôP&cêI¬K£þ:Cˆâ#5™ŒlCõú9µõ™q(z=ʵ“ßÍ Pt™IOgñeRÌOݵ¶µ¢CÑ/¡è'yaš„Œ¥=CÑ¡èy¢Wym�Ô|ˆuÎÌÉs¢ ‡¤Ñ�èÝú^F 1ë²Î«c ºçù)JâUÄO ÉzŠÅl†TœgR¡Ð(íKˆèôÖ÷²;—Š�a1N÷Ú™4K˜7Mw;NŠW¢²™µ†Ó£J"A¯ª©p© §“cæâ¡}¡ºäTC†`°Pd¢,¸ëÀ'«t`j\×¢š ÊeÄMH˧¢Ò[�Á!z,‚ph¢!%ýÊŸ”�ªf‰1ÈÖ½„¤²0OîÜÅ +–ÁÄ9‚{¨�¸‰>§ná€çѺpG-‚/Œ`^É'ÌŠ° �¡dzy„Y°÷‹�nSH(T¤ˆz +¬M�;!™N^¨ÑqµäEöÓU1ŒÖ+$,ˆ'’…«L¤—5kAi[i”ÐïΉ°nó÷Z5ü��� IË;´$Ð4û�´ñ>ζ!UÄPlaÃR"a{•‰E�ˆ¡ž<,�/MðDÕ«œ8ÆÒÔ-’Ñ¿'1-’…ÐÊEá#”á,bÄU�p³O�þ%Léh! $§rB‚6ÒGÍ™.ý.C4ccfFqS¤V™ˆ‰¬U69’5³�`/U‰Å‡X·…6"õ¶�Ô‰•rDCuÓ”�¬P†áÚï(©N¸’žRLãw“òJZ¡U“Òä (…£¢ÈÛy΋Ž'‡Töq-¾^H÷å1£p'H"rì¢9nQlÈ9¤2 tÙq/Èkf& òš‹Ó¹ÐŒ£ÃôâCfÎ9+â´š¹–©�cÆ$å)E%S=qbj]½åTQE�„˜ANÕl"Œ4OzQ�»ÆŠÁtŒÿŽ¯êŒ°ðZS!*ȨäÇ9.•‹6ú×é#\-øÃI‡´ÛÆn¶¨(‚Ãj8ø “^%}éj‚ÚEn$üÚ*oSlÁ½2a ë/ÃÒÝ3—¸Cm2õ0…y%º*ù%_1aƒD çš· E" µ ÿÓL )�Ô®uÉ¢r²¨-Iݡވ©„z¥›´1&c3BÔt4òÕ¢84ô?d*(ÉB½*Ïg›¡Y‘9fáDaÍÌh±G�,U �<²È�M¶\fL"íȇ²ÂÁ%̈)q˜$J5 S³5ˆ£pcY4L¸âCajF¢F\DSžô’&©oÕd™y¼:áÒeˆb8Á%JšS½à,ö™©BÖÊEqõŒÍà�sGø/¡Šo0‰JùIW9/îT÷J�U–)#³rqÒ¡’jÍ–‘ Þ¤� U²BŠ“q·øs´ˆ©Ë +.mÎ Cž© +|lC©Oª¾0Á‰�BÒK§fÂY‰~Sµ¡ß£ª-*â} *Ú#(xG’¦U�ÓpÀŽüU +5¼ÔBU/bÜôM&¤B„p0Ÿª\­u!rÂ⯇ÈJA¾”a³"CMèiPÖmk:tÛÓ !<4BâAHD#‘q6V÷¿Ò…îr×M®�ØzûòÏÉc¢I†âAîå±KXºe i…”C¦?¨BzRE!T‡ŠsÝÅÕÈT¨.ÿUÚ„o©ÕØa›‘ɘI˜á‹Œ.Ä$Ÿ��Š A)­¥ ½q}"³jSËòY˜ä!ÆhŠM8üƒ—äÁçâ…^f%œqÐr½"SÒºH‹ @líG5cá HÑe˜žšÝ� /–Œ)Ô…&�BÖ“6!SdC[�c:�‹zˆ—¦¦c…¾”˜ë ……HC½w£0 $€€pXP±�ê…@ h à‚‚ËYÂ|8…nlçBMDX@±F+½6ÔGÎoSL�âö!,äÁ"1$5Q×"M±JI–ÈÊÓ‡ùi—[´i±¤ª"Ì©Ð(”i¡J¤(@1?ˆÍõÆsuaTêªìEªˆpž)LSИ&ùg¤Fž0†¸€yч¨† ¹!üT± ¶JB 0ЃAd�Oµùž� À«]DARtаdÊ ÕÎjÑZ( +ÍÅd‡ò¡¨j©*Dä³ÌXb¡­êÇW‰ÌVaþá™'°%�¥âÃB +T ¬g##Ã…–‹ˆ(¤&(J$“$$¯¨òÈL¨RÃ|�c +bi„´‚˜|G°…ÃòhÖ8UAÆR±ËŠN�ƒ$œ!éÈXʵÐ#ÒA§1_È +fž”È2d¢ÄÑ—[+¢¾ó×ÃX$ªá!‰ôBž²ÎêX80ùõ@2ý¡bSVU{½—‡ƒ:I ,¨¬…d ÔE¹ÌÄãÅ©æDz:"¤ŸAQKß-£’WR‚‚Á„°L&Òƒ2v@ž¾À9ÀàENXV ¹•²™832SÒ�êÀ‚La°…RuºtÂD¹p?óS%õ'2ÁÎ)&üÖ²UÅ\¯Œê4©‹‹‰}YÌÁÒ+º„:[qÉRÔ¡\ïuLè”|@Ì.zë×Ò2µ0(Pc¸HÔlAÁ^S­—Èܬ Iù]"lÚ½„JKPPéÈÝkzæJ+´šh[WA+øՑ0.‰[£^"hJÓ§EqFèT:�uծȕXMÚ5²0Ó8�ÂL#fº 3ñL´bÈL9�©-S51¢’yY‚²˜–…>5p ‹1 �ä—ϽÝPâÞÔŤ�9%L¥åD¢IðlÐI.´ål�\;Ì9�Nw"=.Q1{e±dè˜S(L +>ŠäiÊ- ?M#~R¼"æ‹@g±] 3jV:�ÎÒéèŒìê`‰�w4Ô9©"IuR…:…"ƒ8AÄ)‡aÄ�è¸Ãˆñ±%2¢T…S$rS¾”r%–‚|"•“*’,˜H?D© ’9 ÑeÆØè‰ü£Úún â§Û8Dô%qŠH†ŠøqU$R!aEª‰TU¤YjIß -Ò8²Å)^Èz�âxéÇ\¬àâÂéL¬†Çð"_Œ[D:¿¬Ø¡^kÛÈEÞ÷1DtUŒ(ãÒjXtŇEÛª—Ѳë­ùD´Q �V‡H  ¿4_ÅASp4J刄�‚£óÉf¢u +e[rò„;R�¢ï¬1 óµ�е¼†t´îˆ(æ#ýLa.cFR!(@[ TØ…»$þcøô€‘ÍÃ×*󯨺HÓиÙB¢ŒE0ÐÀ�r•¼lEE�=K*A¤’�ÁKŒrNÍøoæ=�ÅJLÃist«s’αÉó…WlÊQgÌ�6BRظn�=´#0P`Ð)©Õ'|’6Þ±L�¬%[…7’cHJ>Ô†°Õ°Ùtᔄèjæñ`LuÀ’6Hó+üÖ1ÐᨡRƒ/Ž¢1LW‚‚¿F*›O=M„ÉZR#ì;�\ƒÈ*|g†<²¢ÌS ê„˺U ‘†2 %’P²ÔÅMÉ3qÍЧ{” +õXŽ~Ô�X×3&è¾-ª +öz¯n1F¶žH%¬‹èDdÈù¢@FmÅZ5ª•~–mh1§1•ýYÔnW‘ë£:"þüQ„#Ã}dB¨ÀŒ]¤²[ žªX¡üa0@�ï§* ÌÉæ²ðŠ#›h(«©F§ÛÜõ Å<>ÐÐCá—&7‚ŒCh¶+ ‘ BV0i¬@%4õ„DC¢¨Š.j¤qVФ¢,Ê3:öoÎs<”+"ÍLÊ0;Ó�M ½—.y¾ 5~9c*J¨éç4çdVî*¶„�0]¢&Ô�k¡Cßô,.›‡r&—L•_®™WiÒ ™ÕAÖð±MT±Š³2(ÄhkI‘Æ@F„]bªª2…ÂBø±?�} »OÎK&ìQ‚.íŸ +ÏÃÞÝ#*5L+rbØåXD¢ÔœgéÉy…(ŠÉÃòPˆ-©Ÿ^Û¢6I”× —™š.‡ed"žiý­¥àm#óÇT©"¥¨&¿qD1ª˜Ó®ƒ; M#¼<•¨ˆ,áçÌ�¢©1YÁzŠõ@ÿ̈'ê 5S“ ;B-„ÅÙD‰WCD%SuþNRŒ…Q'›�v’c}Ÿ¨9ÑÈÃX-Ñû꧘*ÙÌ\¨Âè1Ñ–¥Ú�V«�p‰ì®ŠAâñ±nê�*šöº&Ø.=†ÆQCŸ‘G™ DÿœÚÃ�OwTeøDfáÄÒ„oåië—¥µ-sߪâe,– +ÏL9ÂgÆ1"4ZÈ£¼�ÔTÄÔ‡©È!¾¹Tˆ9‘T<­j¬‰GªÃj´ð2§1cÊK™‰9bÅ¢˜ÚË®7ª’A\T”¯Ð5‚?]"Gl¤ö’¥F19j.OL%BÞÙ\‚'æ/oª©ß!“ªMI)L µ$MvW4æT±ó )$aã—?ö�ñ¾Å ©©tÁ6ydL�é±�À@�)/Fó‚‚¡ó³ú¯¸Sµ/E M3¶‡"�ý²íÙÅ•k‚L8öLHè˜:¡cÙUÆ$S 3¦Ì^E$õi"Äâ&†¸w“‹wg轉èÝZèmúÑË´SQŒŠ w;2 r 9ñêÜ%<…kÞ-Y¬ ÷ZTL…£ìùD %áç(ß­3”¤Ó"ÅÈph©œ$”¨Gë\t’”x—�ö3vE¥*K²N”Dª\”ÔfB2OÄ´¢XH‡„>#ºëE0É."¬U)LBüHˆ&q0ÉÐ̯YÁ$uqÑî‡!q'©©üá$¬û’{Ä@$­‰,ʵt�H.5%’PMIQK!JVâ ™L•�”deKâ,/ã)šÐª©‘’·¤=µk—<¸¤,YB†EÁ%¤EFÛÈ}!_rŸd#5•ô�(‰žä²ÊB„Û°Pp5å…þ0Ü!)O6 K�a×ëqÐLhX$|*º�%$üG8ìUÕ~œÄ4þ�aÂU1aÂ3a+LØ5q¹„¦öVQ84Ž +.C…[y-î¨Páš[1›aóh®¡Í^968SqbUÎ ! +‡Î¤Yf¾<3Õ§Y8£ñ†Ž‡[Û¤´“lÚÀ¢Ö±_ºíAli‰e|€—Û€úHtZAèˆ�“ûPBà ÀÆipªqjŸ†9AÁGôàQîUJP ìÀUž ++íÒm5KZÏI\ÙLc›‹½A�[>[Î÷ÌD‘Š%"˜XÆ#DÞqä�JÉ s:ñs +:=¯V2ÆÈHM3 :…º¡µÁÍ&3ª€"ˆb¹JX»K¯™ªqx<*S°QúPŽŽ�Ü–Ÿš`Ï)3 0êŽZ0ÉmìR‚‚ª¬g;]Ä�¤óD½ÒAUÕÿ7¢É) Ç”6*Hy2;z‡‹t0ôV‡êF}$PYh%±[:¨`£�˜†˜©!’–;`wª'nGM=Ë! ™y°¦zú�)I7õF„Ç¥ÒÂcXN0Ižšt#!J:˜¿N§ˆAJ6·!bšiÙxX–Šé¯‰‡—t ÝâÁSJ¢ä ´"3~qnLH:ƒSJ%Ãp,>Åš®\E›ªêÁ–îÌ7á`I‘B¶):w‹ÏÄ I“’Í3` fXYY ä?ªÿ‹§âaät6Ž›¶òά2fSaf´È#ɘS“ÕDdPˆ¯ƒ +–D`ÌI!ô°õ1«ÄÇiXÌûÑZ ‹Ù_T qº0_ŸÅŒLá÷ªª.C•”oYHQyè5š¾ÖÁM¬…!›dSÏ$xºC.µØÄ!j•!½Z¡p…¨q&Ì�v>LÑŒ5^Ù¯Ðú»0å  +Rë€f#*´ig"¼ÖÁ¥â˜„ªµzŽ]và™¬V"<Šz à&ÕbŒTh}³ª¾a›j„q³^5ô—C×לdì¬bæÀ{C +�èÖH³Ÿ}eìàXCå;gm®ÙHe¤!‰aåƒFJ–  ÈÎeþÂÁd'ÂÊ“ ¹ "ÙÁ;ÃKˆ7ÊëÃʈbβƒr± Uµ¤ìNåg,SvÀ™ÆÝ±ûú”p a�ÂNŸ¨°ƒ¨¢ "Œª9G1§Ó£f$†K�‡ã QË›˜%²ƒEÅAÌÖãËaÅ)*éàAäqfguì@&�J+Nª>:ε©ø:ì€?�Œ÷âS5,ѧ¨ÎhF®D‘%í°f%ƳåGåSL0Ibí òB¤:³Ú ’—î*q¡Ê¨$Òõ±"F©c5ãq@ +†ÅˆÓé;gü ÐÃ9Fñˆ¥Ž5–¨éý£¾c*S¸ ø™aŸó"1it6˜ÒMTðÐ.Ë®Õ D® §" ¯;Ø"!0Çh¦«1""FÞ(.ÂYz<×Ëa²më?Roc…~ÅÊNDuu ¤ýļ’ƒŸo’x(3Ñf« ÎHDBwH38%˜ZQŠA„>`b  ôýÓ8ýX ö¢6~Ý´ó[töFÞÀMäö<]ŸkéË9Î'«¿âUL’¼œnÝsÖ£yݲªdºîCS^§¹;«Þþ˜È!"ŒT“ƒµfXu”€—‹Ü¯Cê_°þüœ3ïrATíò-U¨Ø•éH·bJK�Ã×ì[cŽM„²'Mmô©»†øBBWK�ÚpÇî“ÉîyôòÈrîö‘ˆ°z¨³(Ë‘‹pã37q…ͤžFÎ=[{eª�1;!Œšìµzä’·´Ü ,bíª}uJ]‹r¡<ÑûLë®’Jˆd²fDÓ!„´ðKm‘¦zÑïíøJ9D +7k5�X…Gå-¬êwKÕ4˜Uʸ„XräC/O˜ÖJrÊH ;ˆ¯ëÁ =ŽG#Ý€áAå +ÎɉµˆÜU|ˈµgÐT+„§&o<‚°ò’¿ˆÐX>ygVŽýŒÒ&äSm{è”.«ÉW8©ß¦u×­É´™¬óÑÿç(g]D8ßÅ�Uð¶æýs¸km¦}³VçlSú—˜œ—(�TDDý;#ºÌ¸•! ©Þ0îÙC¶6ÈbïWú%&'¯yçˆ]üÆa_kƒ&iÁ¤d*¥ˆÀ_À„¸·€ñêzOnD¸µLÙ,khˆ�J#¥Z\äší?Ï;„ÚÄ9J#¢–q>”ÅÚE¿4¨oÒE|‰ÇVgÜ»ªØÑé>�0vd‰?)TǭãK©vW�Û‘µâ¿TÝÖ-q�:¥K0ÎN|²ïñÑů¸®ö3yÀ œ†äŒì¼œgU10¦õt¨OÕb7FïR".BÁHô¥$."& ¬ò4".£ÓB™bZ¾`éŒya +€)&N¡ +˜äTä#ê]‚äªòÅd}´Í¼%Øš‚iHѤ¯ý�Rc¸%&æïƒN—È¿ i÷ÇÆÓ-ˆŠåO.¯yNóçMÝ8ïµt}g%uȼ½èNRfUV—™Â²,Š{]‘É,µ¨%¦yyMA]Yz#@° +à ÙLÀµ=ù6¿˜@”�•ÇÈ(œÜ>ˆ…‘×w®m}&.Hî®Ë}öA Nݹo’Z×Úñ¼‚kpóÍ›%æ‹&Í·àÃsú ÞD�/œ\²5lzÎãB‰ô òvìBÔÙ¢=;êláGF0xâ¡B­Æ|´‘Ï8J\I&_݃ˆäÞÐ2WJ’˜þu +"Ñè†Ò°Á‹w^:%1ƒ"¾À ˜Þ„uE×n›th=ÅJE1AÉ&†I=ˆ¡ì±–¡Ið½tç\07ƒ ³pT³ªY±qØSÆ›U¡aÑ›I==u³Œ_óð¸Ìƒ�ãlŸ`¡‚Í$&ËsYÀ�™QáA€EÁh—=”yyî _Aø.oq¢§+1÷£Û€¢÷õ7KL£¬A3˜ót¹Ì¤Ä¤º„ŽŒÉ +žðCO‡B†z#ܽ-Õƒp"j6÷ 7%¦ú˜žø5JÌî„OÜ2¨ö ØßCvþ§YzíA´M^‚ÔƒÖ ›zùCcá:½ +QbZ�™ì’ÒéÆšëA("aÆ"BtîApô×nzþÈ9ai SŸ™†•¡älô úYf]×M@¥V:=ñÓ«Qƒ¡‰ÉÞ˜Ðu¸ %ëô ÚpÓvÒƒ˜Ar3ïAì˜Ä84 ²ß©ÁÕ‰™¢~H±ƒd‚–i és‚éA*¤P@oÜÊj¾sžvh@ˆ¹êCÎøÀS�ŽéAÝÐ3ÂP°Î¦˜ÙËa¶x™Ña¹‘ +�V\Ý…ˆ!º«`[½å;ÁaÖÙ�dÙ&ýB@öp¼[5<û¤˜¬3lÿqÇšfuŠKñŠ–€:ÊPaŠ©.ÆKÌuâá©n1i©ˆt'øtÌ`�‡€¾ü'ºV‹#3Å|ªõ‚›®]ô]CL1WW•) À óF )¦¥L½ÛõABhÄV³×�>(:BôMHÜ*OŠi�ö’þêƽ3BŠi’Ï•h(¢æ:%Òˆ9M7þ ®Ær1+�$YÑ1)æ*²ñždA¯ü.WlH1ÿ2X%/C^.½£íe~‚�*4 hF™&ÅL»Læ+(ò¤Aâ‚ɰ*7$™Óö(ÔÂð�—b x=Î�`¾ÉÄSƒ"ãt¸™ÅÒÐÝ1äUŸei~of#?Þúá"úXd‹}Çðƒ0®l¤­\lŽb^5n—‹ño,‰÷?Øöb,«DjÓ!�Òe^liø äžØ��¹ð�ôAÔžœ£Àñ÷Àš€ÝSi>­®’ÓšU«Ö1Vñ^èK7öAôd­Ó[·úÂ< Æ—2.¸Õk>‚,Ø\ë md°j|¢0—žbÀލ[Ü!'Œk²ÈÎÄ!Ú·ÎÞ$:Q̦‰Q6ûkCr‚´óAØÐK[>ÅwSôï?ˆ?\b™ñ m½¥(æ× ˆÁ}�¥=zÿø"]]?æ�N‹bÚª¾)®ÏÖLs`ÊÇ·ô î§fß~ò¹*k)b(”vß³¦oSLC¯äP¡û—w€SPº?¡RÑ>”8„H�+9/K|4Fu§Ú†“£~ìë–cC�À'Üñ°¹ ! ²Ô !ö´ú²’ÇagÅB 7ÄmM¸ØT±:Ä‚`:µbG03›V#`Ø)q‡E¬ä•»¨äÌŠ9–ˆÈ?,8ë)ç¨VL±@Öµžrî&̩惣«$5Rü BRàÐ% JM·b«i ³:ð„ø‰ 0Å»†ÎZ¤¼P º”ñi¸�!Äe¨¾øÊYâ`-7` Ô€zAš¿²ì „µI*¯hàæó×�Î`¼ƒ…\1C½?PªXi ý½bêFšãö;¸4SC‘?¤ÆoBl¯—×쬘Ó9؈WvèÛŠT½˜\¡ÔìmM4ac[¢ˆ¦Å‘Àƒ·ùJ Ãù“�ý'‘%V̻Ƚ&­ëh[„¬è– Åq|?Ø a)Åä +m›à_~p ú¹O W­w¨j|è1Ìæ'j�ˆO3€ëuEÊÎ…,ävP)Y5—ó‰©Mk-CøÇHÿLPyƒjt…ãÑ×öN6 Í4ÙÜ¡;d“?–ábœ-Þ8ÁI©bU:e\=t¢ø¥ï/\¯Œˆ�b Äç�Òõç¼¢ýv®ƒxÔí“J»ýÏ@ FÎÝò +}à÷®,Õ٪٨\CôÁ•i4•­ø÷s"ˆ8Ekas„ЋE‘±†ÈOúuaý!d�(£bŽßÄ3“'€d_­\k4¶$ÀL÷B¬žÀuÛÌ8ÀN®~JzØy±­+û£ÓžFph‹<ŽÞË‹,Ý|£ÛòlÈÁÓ»‘ML«ÿÉ€ZTXØ÷€ãQìçÅZ•Éö¬( :ž„L�sÈòAQ–±ÒPÍ*‘b4J¯J[�z½¸!Ùu™œ"’Ã`²ê›£óýŒ§}i˜WeâÉÅ&cÿ†ÅtŠÐ\ðD†þìi2½'«ÁQœ¶Z”‚åtëÎù™%”yHìz@ ÿcR¢&0½°S$w(@èåàC¾€"<°èGý—éyý,~´‡Atm@>…~³Î6w¶®bÒ½ùÈ’Ÿ¡xμôvñÌ`W‚Nµw0õ‚¡ç¤óiÅ1”é|Å À +ÐJ¿?þ%,ÆÈþXdÇØâ)7\¡àEà7âÌ‹^uRHꇻaÝ>Û\ã +§ÝÒ®Á�¿"Å æTnÑþ$å�%�n1 “â$âíâ’Äa›�õ)˜Ôƒ?}�¿›—Þå�ê,lO@02÷‡ëHÝX8¶„F-�?3„ËøÇ"PXpñ哿b‘Ô +ư!V^|Š•ˆ{Êhš,�%Ž)ðhŒB„xÝ’àž„pÇ¡¢”£²¸‰IÓ8ž2ü†eÝ$fp_d‘Æš¥`\öø•˜8%xâ*áBŒ¤o�TÔÔã`ŽÑˆã/Òâ +Wp‚}("…xHKÍ`4&ŸO(©Rá_ �AÄ ˆ°ޏÿ&Óçrð¹ðbíg&PØ{Ãxª¥½zG·ËÈ÷ù÷+¹½B®ƒª´rž�“Ù‘Wž1wð€±wàÎŒ·�ߺÃÙ xý‡ªëÅ4¥ •q•¤N ¯Ø¸-Ÿ‡S¤”�Cî":¤Â‚ÍÍÏhÏ; ØC÷&­ÆT‘‚.âº%B áرð3Éž/á®V´³J,0>JgˆÖ.OÌö °µ$ z%‚ ¨{:únB« f„¨Ë[€Â�÷RI÷%pkØt„ÄáŽBäþa4\ t¨Y�òÆï˜ÎGJU_QÃûzlpû³^É1�êëf­�IJ.å£=¸&(CRoK¤ÎÄ"`Fc °ƒÝ�ëºéKËh+—KŸŠ!–¡–~Âè«'dŒ§÷±ÆîO4¢ô,Ô¯Âß›±ï`{ H#/ËÂôJ»¸1¶u‰3‹iì+Hp Š{¡½9ýÊÎM�Âôr:pkê“oUãdéCÜHˆÚf£iPm¦¶ªjÜ=ÑÐɸa”3 Ó-·òrÇÂ*ª‚Y$yÝ9suø…í)ÖZI˜/@ Ÿ’ʪ€ÞOL¶õ]—‹Ü|©ÊY é¥1Ô\˜Jm©¹©Äæ,eÂnbP}¥éÛa~à(�Á­8ø •º[Ôfº÷wÁa0ð4¾rÑG$Ì_ýt´ÙÒœoÊŸ7Ý1O¹ÂÀœM�ÞÔ(åq£WÐÙ~äÿ‘Ù4ýoèw¾ÛË:»©£ëÇJx#•õZ>g N™l¨lê,°·Æ)™œ”õ~ì)ú¼£Hˆ Љ|Ò ?˜°M‚™ø’Kæþ–<¶Æ­¤•]jQ’ï¼ÃÈYc4á?äKÑLã±Ù‡—÷ÜYL?æÄÁeËòüWEP{#ü™u\­Þ;kC¼0ÌkÜC V(àën™MóDz)ßp�Š7¾(YÒœFö¡!Õ¢næÛY–®'Ûè—aÖAk>Ä–þãS &jôP!2ßdVÖ}cŸ¸ Þkf}‹ùVe–V…¦|Ýeï_#þ`þþ$C䬔Ÿ>8æQ"j2O¶õ&ÕëR �Õ4A®% +!§Úp†üAJñ#*6»ÙLÅÚûå7Î)‚ ‘¹Ó4ÞÀ©ºF»U`iN»AÃ��º£\cêsŸ²EÕ™r*ä¿ó†ãwؽÚÞf¼�wÃæf}3òèçeС�S¸"SôÅ¢ªl&¦ãëxN/ÊŒMrÝû[a¿'Ä„‰Ü›ò6y‰'£ó°‰~h%ÙÓ¼wì7ò‚E`rwÿÛ¬SX|¼Ð­£³…î&Öî§cNTš´Ëï@\©Öx§ à~C'Ρ7D4²ãwhéì#¬h·mÚ^HMä.ÎÀ- 8®û�Wߟ¼y›™¹èQ4[`}az ‹s6,¾C i{šf„¤Àq“çã ?`UÕ¥• ùÈRßNæÀüþæbn&ÊÁý¤­Í+~  6䀒댲ªtб£,šÒ.!æ—܉czéA}wx@è…o˜± Ÿ'š 3ëfŒ9='51ußšÓC‹«}›kâ"³t8¸0áI}æi±;–{B%5sŠK=�ÊšŽF. +¯á »˜§°â*î Y‚÷_ã¡g>⤲3ô«Šß,Ùœ´¹~ˆ'yµL/–' ºù„ ´P¿¸à�ªž` çhI Ôÿû ùygïÚoNôò³n‹ãͶ‡(xcthä2ìâ >Uà\ìE_L»xv¢'ʲÚg(¦ûb×â�ž…AqAmøœñø1Û��¼›vÄ{ÈJ�KÓbØI-°��C 2{ý£™ ÛTÚÎx®ÿÀò¯뀌|ÙÝ�´?U®Íˆ'~5³˜k¢„ÔDÖ$§Èg-“v*žîAÑxT5;Ïÿu}(Ì•é¶ )ò+¾b‡�‘8Pï˜Öç¸/îi2 -¨¡Ç�^ ÍnôÊ>TÎÇV‡ƒfSÞ6°žiþ”q¢s¥•D³8ÌJcCXÉœRÄCŠŠ{b^p¢¨ò dlOZA_Ä*9MÙ_E<0ÜbõYŒÜ ¤½ Ó½ê#œ¡_¢x¦œæZQ7Dß®vT +CBRõeµ*{�º Êšµ�_{“^!“ÅkM/Ó×¶È ŠÐŽNÆAØ>&õng´‰rB … >W��œ¥q_úö¡É1kÁÙà€ièîAµêN³r;®ÚW€UÍŸZoÍkÍBõh$~¨³ +Ep5htÇcë’(Ò]â9¿´w–Þ¥�¢Øîó Ѹ€ˆ¦Ù¸ööõ÷k¡/m–D?õ¶˜ 4ä“!ïí¯äï¦` +«¸t)äŒÍ³B4³y)‚—΂‰pe�‰Ô[oÓØD¾õǵ<3.5§¦™“‚jPÓ"à¬Áû•NZt¸qÙ4¢�ã¥&–ÜêbWòÆ×–ÒtE‹óc×mQo–Y»Ê$አÊÈiâÓŸçhL: â =žÔT˜ÝŠØ[ıƒ !…Y9~C>LTº½KfÆ^–"{žþ¨f¶œUì @Éó$d¹8œzß”ò� Ý{¼²ô$Á—4,YÁxW½€‚|™X(™wuâ—´þ.¯g š6!9¤‘}Àw�qóØO¨ÊpvNq!¤×™Oð™?Æd oŸ·{¦ D±zxîP$m ›?q®coW»õ×ÞUëR×\‹Ú6%RPœ±‡;º§0;“.ºù«WwþœB6& NÙ~qÿ÷æ…,uéÚ’‘£Æ‰•ä£"Ü ½~—g°š#&V… +�¥þÞÎ:™Ó©æÂ`È“q‰HÍ.±8S +^à¿KÁ¦vñÔµ“n¼Ö¼d÷'KõcB¸Œ ½Ó:.@4k`Mg[ˆò2•Â''¶váÒ×™Ìwªx4ÿx½¦Úä{Þõœ`�;[¬´hT7ã¾p!,Ü"ŸNB”Òýˆ,S&ú‘¬þ ØuWäDï@®¦�ñxÝ|weRNyGê2¦Ó_ã>�JF'W\£0æ¸ðî©æ0f´æse+à —(ŠK/Â\�°K Ã(A…Ý ÿyò_n´êPsS0¥Èoé:äA‰a%#ðH]O°Å¹VµÌ® ívñ¢(\ÕR Oî¬ï)¨J{дȩìX­•MPñ‡ÂÇyù%š™x­¼¸z*Ðh»±„vqM¦ÇÁMt1]–T8ÕÔ¯xAH³:Õ&v�}ŒÍf¸NHË÷C‰'Ã^ é©ò΄¤8�@íÿJ´cú‡ùïñÅ9™J)„ãqa"Æø »rº¢#>¹Tž ʹ¦ÆÚ†"ÍÙTØÆÝÙO–Пaêמ` ¥9 R“Œ¦9#ag^ãµÎUÌÏ.^L¸ÑU²]m¦?ŽfØx‘pî£ÿº–ô$„°E‚˜hR©�CåüI#/ÿ¾ZÍ/¨¡NLºÍ™„[Ê)7…½ß©¶‰Ç/Á>þÔY¢ibC>÷Þ¹gj™eËÌã­`lñaó¼7óv=bɦycrÔjÁ·PÀTë+ Êec·g§›¥ëü¿£¸oõ¦Ùv2jÑ ¢™—: Ý)êƒQJ_I�VOÁÖ³W�ê|€üQj §�p™Å•ýœMi@?°-¤t>0@ï¾4¤O½Wy ß>èæú ‡ô&é#ÃjQn=˜Öãth)ˆG¤¡…Úa`±˜ �ŠfÍðá6 >Á £dú)ž@˜‚<Û.aÔÝdîSI’‡Q�à÷X挪G6“ìTN=4çÇ´ÃZ�À¡¡™w†“žÉƒñËú@F–f§…ê�>—ý¾ùÀÐtèÆ·™~ç#ƒ1ÕÜׇ¬sXî¬ è•‡Qg…e/"Ò… ÆòþEÏŒ ;í £%ƒöFc}ɈúßùUÌAþ–¢é�Œj¦<�žC5¨w%ÁúyŠØt`É9Q”‡U5¡{‘beªõÚL ÅôZåaÿÒŽÞÖ}¦¨1;†°lÊ%Yãav )dX²”PAðýPz`t CýoHÿ×ÿSñ+ =-D×òA÷›vmÓqë¾SÚq> É¿Pñ ÆxµÜ œå¯Ô©j bêNCg¨ó‹1§F”á¯~I�õ3§Éÿ(jaš2'+Ûnq–7Ó +r(?�×êêÜ´ñ‡ÃbhF<\ÃC˜{Õ1zgS0cŒûdsYÙYô”)ôW4%L²ah$Ì\ z)€<ë}që^ØË3yîxöéâ&˜�ìÅuÉÆÒÊW°Üú*®îT1*^z²)4ñ�­”Ý’ÊL$×™;‡(Ý?(Ãý±Uö0³v‚ìgñ ÜÈ)¥ÛŒ©4Z;7Å,Ãè²ôÆ'Œ^p‘.¯„š)V³¥$»/’Ò±ÛóàQâˆ%hä“/<˜lYù€D„ö|p˜žx(™ëñV:~sV…O^úý¸b®Är¬¨òÊÜÕ÷,ǽ’‹Õ.»¦†Íï4¢/üÛù5â�j•‰Ð”X$D0f—‡)Å \ì7f¥GšÄ¶Tª¦×aÃ8öÑFƒÉ‚Û¦Lã¡�‡:º½âÁIßQѺg<ãþM|ÇÃÕ9�^R«åî· 9µŠ‘2©÷!6bÇÉxeSlT1½ úŒõä??5¡wU둚øbšÝ”B«Çº~_b`ë¾´Æn¤«æf“* ØõoíËVS}¿[EÞº5f€J—ÖxTDÝ’;&MÍY¥0�nOÀHÄ/ Dª$BÔ)ÿõ‹ö#“{b (…Øö’ÅÎÉôê= k~'¢ ù}ÜNù¬9*ÜÅN3Ë£L°Éò©�ùm¾1#*™/ò”¸8Ù»Œ^³D“÷}¡@• +`ªJÄ'ð_e‘Ì¢&Ò_š2ñŠœÃÛ  Vhÿ¯™*SB!ˆV�ÀÕãÂüQ"šÕ�Ÿö.°æ" ⹋OÚîŠBÀÕ#r‰8ÑŒ ä'ŽA"̧‚ —Tð¥F ¢Òú‡¬R;Ý#J>ýA„ø)OUŸDè|BÒ?B-¸Î™G B®#•˜¿L¶¦„6UìÉ–=!@#[ %Š‘¢Ô8‚X�wHG7ÙÚDGWD�½ì±zä·>‚ÐÞ4�Eüí;@5—x䘧݇`‹‚ü‹þÛ(ê"¸?õò§½&â-z T¤Ê,óÕòäì‡[Ò>0„Å� èr&1x Ê»rŸã_û�˜šo+hËv[ˆe!Ià´š'ÄÚññ×giÜô@¼¤£�r} ‚Ë]nGÔ À½CdXAÛš/‹ÍÀ‚HýlÃ`ƒQ7±ÞØü•‚!ï7˜ghZxABvyº£G%¾UW‚LPý~‹—ió‘ CHŸ‚®º1nžh£A :ñe‡R@Yn Ã$•k&!0R”ÔXÚ%3«‚€¨&\eáAbÏꯃéAxò¡¸0Gj&vׄ„Ñ©šœ M!Ïë�ÿô¨Bá� ø¢F2s‚X×ê"±‡ „ªMq6‘V˜~„OÞN€np‚Í'bá:6uŠÃÔDÅÀZqQ•MD¨Øûý'‚£Ú_Ô_¿vÌÁ/‚ÀgŒµÂ™$–B¡¤û¤ÐK¥%$ˆ~H­ºß"�ÔV‚ˆuE_×4n¢KìH8hBÔn bº>nMD +¢+† +Ý´«RôÁ“¦ªa +">/Ï‚iò¼CAtµÉa›;Æ‚™ƒÔ–HcA¼µN6£É‚ЀÂ7£p_AÛ^[L bƨ`}·Tƒa˜amÞ›>E”v B?úî*µwrtM ‚¡½&²Â|öÚ-ˆ¿Ù0Š®¥++z½ó×�ÅÚ‚`+{M®<Ó‚°X‡ªÀ�´½[X×pÐ#„{æ¿lºáZn,ˆ¢ÜŲ‹$h«,ˆžŒÌ¨Ò àqÙºRÈÄ–î.]W˜šŸ±‡²í˜›:_Å´ ö9  HIÏ‚°B¯jðYžý« Z�«‰—RJ;úÂï*,ˆºP¸nné: ‡-ˆÊŠÃ´‘Qৃ1!a´”¡×êD8ÎÓÂ-â¯Î7hh/‘aÑÞëâÞåµ° Ú ?TØ++kHYæ?‡+Tb£å<¤¦C0ð+­¾9€*ˆ+™ÝgÜõ„‹.sQ9ëÑÂtä†YA¼ÉÔ\ ®ÜÄXÅ„å�“·d5 „§_1 áxÓçKí +bãºÊ„EK±/8éa‹£b™} Š:ä÷\ñÄ"¤"ü»TdAlZ× �æŠZ»Ij!OÍ#hÔDX'&`¸¼mA'Õ­ÓÓ Â1…y#à]T‘˜gGº�M÷-÷}4&3ã +bi EL¦TœÐÛî�5@´^Aì·Æ×|“ƒq*ˆ…GÖ ¹�iU¤¬ª \Aì7¿ƒþ"ÔlWìô5, ö>ZAHF �¹‰ +)ÀØ‹áPÏvVdJúÞGt²©;"³È,VˆUiÝ 8àu#é.ÖDP"T«¶íݘz¯Ï¥ÿź‚ðAu(]°pÖ1ZžÝ¢±ø *{w©lAl–@<†*«`„…Õ¡tðȈ)dAtêw¥ÒD§òYV­õrÞé®1@ƒvRË%—1€áͶHRØ‚7 ‚i²ÉM¥„Æ‚(Ú«C3Ie[.¾Dd(§’õkAìÝ +¹îf¼ ¶‡¥ÅÎYØvÄžIo=k  ¢³:Â�†Ø?›pƒ€ºÃ{' ’6„Ñ'×±­©ß~D_ B“Á¿Úôð“cêJr rî§R€;±êc)Ë>[§àýbkw鈋(q…ž0ˆÀœì6›óŽAÈ™û'•& ¥ƒJ+¿åkMRăîà/ÁwÓD�¥$h|”ÂY.¢;' â Ö¦Ü-ã)bÍ»~¨Ò=0gaà¥0ˆnHÀG¤¬•`4¯Ž_NG=ë ê>çç´ â?푺·Š-§bÐQJ_âOΆÀÁQý~ ßà95<Âûª�„/¨¡3ó ­ãà1`ôe1ÚR2ßÄ#*y¬X²#Ö>zˆyN‘Ñ™ '‰È‚0 ¯Hê¦ AfÞ4"ïÇ�@l„õ€wå[v²Ènäˆ"÷ÏÊJ)dãˆrÃqÃëàè‘¡ò‚bt‰#˜±…çŽ Y|–T¥’,‰·ZEnfž;Ô“Íœ«Íë`Õ†‰6w±ÓÏSÔü5Î*SiHiÀG�/Ͱ¸|¤䎔:~ó:üб�WV ~‡eΨ:d3ËîEåäCóüJ;b‹ÏX¢~´4AŠz•ˆ9*T†ØÄ’ILlY¢ù† +zèþ4Æ.ðOe³Ì¢G†äbá’ÈúŒÄ–éJ»W/ãÇ�T � %zf“à€pïœÚ¨²1z‹Xu¬gÙô"ôl}y©bV?ž­Nªk±+¬À;V¯¾FØ�,vôA$$¼wñkègw�OýÑ× µE÷ #²†"ÅTÖZ¯¡HÇ Ã%&Ù•D¶�\ùÈ©fF€½Þþò‰›¶þ©&À§xÛ¥°fm_»¹â˜ƒà‰P}ž‘8*T8Îgß_¹ŒS±Ín© +eOtÞe¬‡`Â:„‹ ¡—‚AàÉD¶‰\€Sô_úœ³žÅ7`vC„>øÇÿæ÷4ÙNº[ ˜ÒCÄ™'sEÅeØ‹ñ®õÛ§lv^£BUU`ºå†RB�l0fßï­¶½®£F æ> +[#}¸?âl]Ê!(,˜ƒüb‚žÜiÇ�ëŽsîYÜPS D¯Ìiy�F�uJžòÀÎwû»Ýxcsq.ÞAÊ -‘úåpŸPÃ-èÍ$³üV>Ñzž-×;:ýbŠàWçpæHûp�Y»™Æd#b©M£  ØË Șê˜È^˜�/‡ÏEWYkwD,ÉÊ݃Ší¨…ù¤ëÖä»ÊÝ<Ò*³‘"‘ƒ$DWhwî·¿�šà™¹³é–£�åÆqOCOÇ?k÷"\„q(¹�6X–òaꉧWBÒYäƒhd ‘ƒ¢Jc˜‚¡Y¯0ÑN�ˆÛ¥-}5„st`ì¢�­E@eLí?úØ�¤[ƒ½ðjj_IÛk+ù¥àÎPÓ OyAƒû-þ §g¼xÎÈ“ŒN(åTºò»ç„:ã´ïêÍy\I»ÏÀRèU¢ë´´¾Â›{ºªEœ6vç9á3µ®rºDR´Œ$Äê}ЛpGܰuxÁž½N+4œÚ9�ÜÜ6ÏÒ?N¦Í‘…îurº�m®í†‰W�‹ã)ɦþJ]zõ&¨S‚(!Ò"$ +JÌ“4K0€³…£Fðah @Ó�/ð1V@­IzIÕ"—±ÉSÐ;2ÁP:<ÅÀÍõ#™ô#è:ew±gÇqè%¹Ãüxlõ²VÊFêÂ6#ÜJ.oÍ%»À̉}  àéoDÁ̱êŠ4Q-KKÍQ™£=ÂP×'~lbòð·Aq·K¬«‰he<¤]I™R¼?}dÄ8U&ª‹­f³ó¾¿Dþ–Q‚F 7Õ!Ò66Ä1IE×kNÌ„L_!Îú4œBβһA \›9µ°.®c,Ù±Ö7íò¿”4‹oÞÜÑm÷©„ÀÉCz8 U%µŠ—òÀü¦�’dì£XðJVýþTÃÅ.¥M SÉŠP~ð¸�åUóÔìa΂?}U7¦�5¼�¬>ݼzñ{-«·l$IÔýõÎö¸îLÁV’2ÄKî;ž5ø��t³ ØŸ�t\ëõžß‡Å­K +¯">U/2N¨3ǯßF°¾JãZ2³¥ ÿ./–¢“èDQ‹î2<²èØ +6œeç!D»çÛª°ç�æÜ¤ÂÑ6Z¯òäÂ>ò9Õ…{ +¶ø+&qÚÌp¶µdödg×DšäCSr«Êpõlä½Óy%(° e6¯Ð¤¡¸r-müµTúÃKáI”ꫨAúúh'}ÈÔº¶]?�®øaB?Zæ÷²€.�,c/íÜñ£ë•á\ñ,PVmD;Gé¤åqFƒšá¦¨àŠËX±9*×EÖ�G•&ÚZ°Éóóð(ÇŸº‰á‚Âôà½U¡�g>Nút™«ôë:'�§DµÂ‡ŸlÐéì^`;�K@ýÑm÷¡`6 f:±çsH#Ñ0 Ïâd0S?îš‘˜²‚²cùíóú³@Õâh8D4-�S5”À†ÀÚf½Š¾¸CchoÒT>)'-X LÏØòºÒ É· 49¼­¢Ÿ_0Éü£ <_`_¬¼G  Új{„ÙóÀâ/c¯~¹](ñ^¼Ë‹åêÌ-ÞÀ|º6ÂÑCš2•9U“hF’[\´Û™†Þkl3-|„ÈERÑ47@cG ¿1n6híæŸûÖå"<)Ã7#ž‹Q+ÿµk™÷Çè«Úl‘3ú^0pS*AiK•ÅLL"+…inÁ~ÈD³D\T•ïc„Ÿ„vš² ?ïmÝ‚ ²µÌ´bú¼ùq|’V;UÚ÷¨ÛÌš»€o¦C@d•~ÿôæ\•%ëÒ³®ú?ª_’Iª,ŠŸYtKn$èÌv…Ê»ˆMìÌb“‹rÑ(P'X‘ƒç?˜¸¶gÚÌ€‡¢ìªƒöÔ�)¿¤_e†ÉÑOç+•ìÎð +{¥ã1Ieû¤ŒmD»h\\©/ÚBnZ +wÑ”®íyêô0 +,ê³X#ËHÞŸ‰b:o2œÅcœ¨UšBG* 01V�pà1�­ #ê¡uløÿr:¶Õv²Ø?Š2ݶDí–�*1áÚãD{|‡øÓ@oΉä~þ·P†Ø” ¬Bšg6žšc[PF&B¹–ï¹~ÙÝ5ÄתnýL,=huÐí ÉQ¨Ÿ‰ë‡ Ä«ûfr ~5 §:¡©9ê4RÇÙÊŠ æ¬4ˆ:ÈØÉCe( 3õó%¼Î ãé©ÒY.×#èežvLgP‹äÁ'•çäi’\gé•tL‡v$’f½ž{ŸŸÒY3SbÜ Re TŸ"Øžá +ÐHïM @�´øÚþTçߤž$Ïž1¶ :y7sMyD#ffý³cÌš}Q穳V@)uºHxíSù‘šÄ€(�CFa«¢KÎ\ì–hMt¿`L„yÑø7?E—¥ÐIŸD®¹-†î° +‹i‰SA§Ž�é€\§}1¾‡Ø×ôé©ÂÄôhSí<¸/ÁÓè?•©™ô¨ìe4¢êê4Á/4¬¦ì“‡j>^´¶×îét`@ïë l¶ÀKþU.$Š)ÞÅŸ0’ˆùºˆýYÙ²R7•ö +I¬ùÇ?€[Øb›Ä{Ȫ¶—¶�¤oŽ0Ḧ&ª [¥aŸ¡4ÄD+†ZÍÔ‘]GÁbY +z¦ƒ6†ãÓéÈý�¹]‹tuü¸�;(h¶B¶zxs:äÇ¡=#¸Õˆ_y,›ýkß]å¨Áz\°¬I­–œÛ,$=—îÞ¾ +ËE1â�NóXÍ~ÃP%¿‚ +K4–ò0ÅÛóÙ�ú’ŠZ{ËIÎ + ¿2�kÒ†Ñ:ˆK¶ ç…ûÃö—ädaKöŸª¾N`w€Ñ“mæ2´‘’(•Û)3 ?ÖÍ=¤^ N5£°¢†QG…lc9ùŠò¥:¼ŠgOqç°\ >ÃE�Ñ‘Ç1~tÉ~u÷DZ×úMõ©›xVp¸'Ãþù‘¢Ë_¦àS-´JÅxR©A1Ù8p>–\s ¦mœ*Ú˜[á5{ü•qécwÙ^ÏθÕfFD†ñÁß–qVX„©‹�”Ã.t�Ug �–‘êzÕÛq‡'"ÛÚí=вaú@-¢eBä—~ƒRÇñpâ,oßM­z¶ éŸäjˆéËâ–©bÄ/¿Œ¤œ]n?ìªÀp’çÍ,fÌ>-Lzk·°�0pD磉³VQNÚÚ4&ËÙÜ6Þ¹e!_”ÿݬò鋆œ@^�‘º !ÍÙ])YÝôëßpq™)$w}©ÄÖ ‰£¢ìd=M'*y5Õ›/,0*û !uÈ4–,±t�K®,Å7-|H%\0€Ó@‘™GYëÏ ÑÍoWE��Çâ6ô¿ô6)WŸ³ðQYÓÆ9Ûü2€¥ B�$M8GÔ' û!ä6&œ]"æWN[•3iÜ™C2ç|Ä•ŽvÀ¨&’²Ô>•QLhÈ£q‡¼¶èÓ?�ÖÏ•ÊÚ%§¯õ-kõÜó¶æ’n1¥;цº„Nƒ×±ºrö½Z£ãìVP-DÁFíï_ßÓÏǯFé'EA»4=ÒµzÐ +´¹Kv¦«1½ò�ßáØÇÒþYe'r„g‚5Ó6¼yܽàýRáü¬O¢¡•T¬yü©˜_ ´üm–å*$òš*òèÓÜ67ÛŒC׎´×+v�©!{áÚÌYÃÅvÑqØ7DŠ•Xáa¤6yOŠxþL‚^©0Ì“wžŽ~R¨ÌˆIÍU'ÅC�Fm†Vºòz‰5V9€aF wT‡ ©£lB) ²6�ÙDÂù’�¨£"à8ö�&Wµ“„΋v)SŸÀÏP‘ÍÄË‚º¿bè• ‡o¨QÀ7�±c{ÈÌdqz&¨Ûjw¹ç±öІ5 MÌ|1 +E§|¡|T ~i!`zp Áø9š¾½ûXÕ‚ã¤<‡oJdˆA#dl3»·mXé)͆…!C‚Ž%+UjF-’ù² ¡“p…R]‹}E¥ wÙ瘦G*ÆY<ôMC(÷¯�G6õ�S-ŽTˆ¨tL5²»ý�åШ(2’&Ç0\ vµ{ˆze%¯ á˜ñ¢Ãÿ¦˜­ñ¯\áßÕBd§Çô˜O)!öj€`껂·¨ÃNsÔ‘[ê‚ÑO%‹Aùe!ý€`Ó¾!3¿ÓúYÓTó“ÎÒcÇ0£™þhXáFµõ³à+å\àz¬pLÄ�d]FÏ�2+k!µk<Ü)2õ…¥Î�þ®9`94*²i�YÙÝÁ‰Ï¿X4LŸ�ÝKùêišÆªO²Ãª³_ê(Á²³v#|UÚB``áÒÓóŽQDÇgh¶ƒØÑÚF@"B„ñ»�ÿ,ß“ƢVÇ¿\ÞÍAÕw@;3¸Œ +„R3™}ÀA àñþùœ¾_¿•ñÌ�vB�ÞÄ‘{ñß3·ý×SR:’p³ÉÛL1ësùx«®Çrvͼޱªscš¦CUGu.ã\×5fL¾"õy•Ò1‚ü˯Üá* ýäDoÁMÖ:–Ü'9¿#j?c@-±Ü»²ɉ)�„ëºsì‡6BÓ @‹5›ò"‘H}®V ÅCA“ ù€ßŠÞSCæùVw$ÇÒ�ŸRw—ã… á¹E†ØÜ5fµÏBƒ–…`cÖœ0N�¯1WtRË.…ÅŽ°J·O…q£ÌÀ'þ`MÌRÉ6bÅCBéò¹_âÃ[µP»ï$#ß1J›Cú¸ܦÆ?T셶̯þõ<êV0Œè‡bÉC¨$CŸøBKxa#á"!Ñx;,ûð4B)ŒÜßàÂF„àÂ7èõþ5i΀jb„¢�*d¦EHû?ñ-/÷íz÷ €{O(¿$îçhú)ÇàZ‹{ʯ)á4ƒð\)=vqÚQy–¬„‰¦0ÆP K½XŽ\(K›i`#èUvº€â‹NØ¥çr¡™†¬”6‘›™‘b!’úÁªîÏ# ¶²v%îOÛW/ ¤4!•mP' c,™úêuª3Â(VÚoQ0JÜUoää þ£qŽFc�Nˆ…-BRAÙ<¹ÀN@¹™bá(ó3iû@M" ÖÏø"+³É^%B­;˜]F=…oq…ÅðÍ,¿�„Ä\©§(ìîØxüL{I‹nTdpè¯Û–�¸:XJã*œ+Ùdo’¹m™Šàm 6ŽGþ¿¹àfñ¯õ8U}„ t±!MT‡º!ã/%+àŽ‡Â´yP»MK¾e‰MÑá Ðóên£U™ÿ0 ¿Euá­ã�À=Ó鈣/öå`F|ë¸ôH¹ŽéÍ ·ð¤ +E$°Ÿ™¹,ã ß+‡[€¢`�Õ‹Ìl“ñ­Ï)dKiþáLœ—ûoR^ä”„Ë |¼ÁÊ݃Wdã3™q¡”°s…I#\Áýe(+Û„Õ{91~ÓÖ‡‡Gñ2øx�Þ6E�ÿÂ’/� ¬I9�BÜÛ ˜õ8‘–‘ñ>·,d¤õÊ;‘hè�¼>pàÞJ®–�31tGÉ žr�¹kæ¸W“á åËíÖndŒ4¡¬HÛËE2#èr`zݘ1)c� bÚ�,,Ô�Êh¡´‹½çæVg|…y’ÙïÕËêà ö<Ó)>€KÅÊÍ´âÖˉ~¦ˆrð®-ù({TºqE j å°ñɸ†žþ�ÈUZ8”fÛ¼ÖÁïž©�s  9å½ †¦ÇÈWÛžëW\pxfÓZ…4*H5Ì€î +ì ðvѸT «¥*g³Ç7:igëôúÇb`  +a(œZ‰S«¸ÖN1—ØÅÏŒ|{O¸õ@ˆ 0Ù8” ÁÐòy^dqÖF)1ÕQeŒrvàœ´ÿ¸ˆË] 4k ÕÓ*lÁW–¥‚P ½l ³€åß™T žÕ4€˜ÑÍ'à!¹�• ±ÝŠ ¸pÂ;¸ø™3~[`,Ž!Ge>Q‹®ì€ÉÎúz‡!{~f-¸è÷Ãd�˜h4=I¯dDµuw€ê¯ð$"’¬‘¹±]ð^m¾Æ5™5z …ˆQ5ý‚1î9¶êü^–; +i•˃¾ö.&O°�ðs4ʉÕ2å1Þ;¦| ¡Í÷ ¶WýÓåT#õ/�«0™»ItF”–nø0+E>i¬_šÄ¥7¢Hò…DæE-M©ÚÉ‘ýãedý Ó�IÆ­ÊÉÎ*_*_L/³Ô=Çañµµ¥rl°EM5 –›c*Uhb{‰¡ÃÄ^ÕÝSöX³Áž¶,(wü{3‘öÿiðŸEÚÆ9ÑKf̬€eöÔ÷[WXßÔÒl@‚áþÐv7v9¶+Áâ Œq�FÄžŠ’­PÆ@Ȇ|´:� 8£ßHz!•ÉÈ~aG=}u¯(¢üi¾Ãwd¤¢ ×ô•-F(["U€|6ÈYäˆÃòDGGÞ»­\6Fì‘9eÈ¡h?²DÜѯ{¬1PlT«‘{¿úbÝ�U4üW_õ6ŒÑl,ïPåx&ë3©ê)C0I&¯/``üQ)7.Gükd!�®>Ãö¸ÎËP�‰j°ç­"á�–¨FûNÁ"s™WСÌé#šC·Áw ÙA=¿Ñ¤r«6cEÉNV‚¬½ñó,óc˳7IEò•Í` ¿œ ;V�3í¨SAIV8ïòJhs`&¼4xg#ȰBI"Å^HL]\«ûãI&.TO¡P±}éÀü*ÙžsE¶§~O®@|˜�íù|=õ¼U,ÈÔØ^tç5ÀžV]U3”[BÃÁ UéíoËi5GÂ%ÉmÊ=fH hnoc‡ :2›ý¿÷ :5„ÛÄãUFóbk‰¹p©f¨õ'Û†mÛ>@[جÛ"ɯUuiïBùFnMÒ„E²2¼k]î{¿¢ ¶éÞ,F +óÊÌ[Ó�æ˜Ú†Î+�\Ùò-�y�@]@ØV2«Êöp¿"~1¾j1óùrºqÿ¿ ™Œ*w1ʺÿ:±¢œR§â¨‘Y�ÆûG¹5.À^rÌ0'Ä<üäâÍ¥é k‹fפRêJo™¡ª” % +çùS�PoÅ*ûƒ¦1pèEÉcõ×\”ªUá¼Ðº³˜˜aÏ’L"2Ó(ÞHtwp"GÜmvA÷Œ0prÞ&U!_8ð¥Íp(oRø,°ð'.JâãBU ³H­‚4¯SaóáÉ÷SŒn‘‘«~= ”P_ÿP`$AA¹ç½.XˬvB¤’œtèuPcæ::lC`ót A‹¤ž¹EªÖÞÏmÝ«$Ç0Åffv„‰8˜ü Ð +é•°ì9f¯�Çìž[Nþªr4_Šî™ž Kû§ÃïŒ J-†f4:‰‡,˨KæF…<Õ] dú?-ƒÕ ëg$ÅòKžŸy·BÄË!@!ª€óä®à«ý¥_N2§Ô‹ZýOf†Œ ú€³‹·Ø�ð„ßa‰Ír5¬Eù6º6_¡d ò`:[tõò=Å0€ªB—aÜé3Ô¬êª�Çž:ÆTæ£ÕZ/&8\Fb¤?”C6Ë–åñV0Á¢Æ¨è–bhº:õð[Èõ�ç“»bžÌצ}Û–f7‘¦×¬�„ÀÁ]SŒÛH0àÙ®Ü?�÷MÖ,eäY›6‚`6\7~ëx\ö'€äTöj(í“ H»7ä�5Wµv:!^`/`’™OV˜ Œ ÚüuB53°LfîÎn)šêÐò†Ì“¥›,GÅê=…IQ(÷;q“,tKLZ,ÇmœYdjt ±gœ°n~í'àÞݸ,eÃV +c`nÏÝ…7ÿ4“jÓ¬7öâµ*Š©ÊÚ†^çà…±Ä„’*1ñÙ"¥ª]ô¦×oJøÛ u'ÒËóá¨S7w5%NK¡ˆm÷– †‚>yUÄÅ. ;Ç¥ømаf:ÛÀ"4SžHÛb~þªà0Šm™K&=LgùI˜bHûÊ^ÌXŸÝùúâìªéóÁ6™¥lHr¿:Ìb–£‡”¯—šBñÇ�4öº ‚ÝþW7dI¿UÔ˜Xg¨º²NÍË„âb[¤€¡QGšë¯7NšP¸BûÝý±:‰]�g¸àFd‘B€ÛU§nqõyáíã�“™íº{Yj%½8(¨ÇûTƒäw0nøž*YÉ�¹oF�!Xÿð¢BÆwËm‘âz¥hm°Ùœ‘ò ±uølå"i,\—v5Ó89'Ù0DÌò{>€ß…^½–j•Inʦ…#ƒ^w"è ‰ÈöàÓ‘¦Ó dÒ\´–‡Šêm…0mMßt/b V!Aâì9©SëmlÆ&U¸±Â«�Q. ¶„[%¿o`�5hµ¹2p@±-±#/î5¥¯0 pÀìÇôÜ[v¥Ò7O07�€Ô˜Ï‘Zevý¢b¹°ín«±ÈhÞ°’™ÞnÆPšçõÕøËî£/A�êÕsY–a+uŸ?YàYã;àœÃšZ¦$²õyš6}ìsÙ³ë%|uÅ‚¦ˆ@è¾Å¬zªö«4ôó¢+ëé]$WR J+²‰$I(qr*0!gõa‡])÷:¦Éø"¸*û¡iHH5ÊuOz×åZª +¶‘‡bhYLMpSŒ-Y>@¬7ê6€>©�: 5¿À¦O7¤Õµ¢Gò•d sÀW5¬¯Èz*�úÆ@êN·^A_�Á˜+¦ê°ø•r¿ ô¬+—Œ@$�è8â *äÇ´£¯Ö§³Bƒ×f‡è¾¾¥´ROŸJjßA#n¯ Bó<}�eO!@\W˳˜j•z~+g½H†Ê +—¦¨{‚èXy?’!XËÖœüÖÙ)í+›ÅgqE±¬Yo½Ç¦{œž~‡äÌ�@T0—xO "ëi5ÀÜûoÙé3øz^g|¯Òîµè'EþпÞv ¸Öï•UÎì}2Ÿ,nGÁ.žwz¸g~vD¾f”UMk:Y¢ u'¹+³O7m”3~JŸÀP5Q|’ôí ]þ¢=\¢Á/í7í饪¾®¸Îª8 7\á=´µgï½J2¢MéÂsÿÚ˜¦I¡-"Fåv'±ñ7äéF“N€&‚«{/2ÍËÒîL“Ü„ùÔò刺pPM7Ë5EmË?Óì–٠Lj[a#Æ—¼Íå®Õ"ÆÃÚw¬Ô*9Šžø´f5©0–üq$j×hõ# ™@Dn÷L +ÈÞäÔÜ‘¯ËæÜxæ§!;­’,j\‹o¢ða² #g¹„gXÌø)üîIºX’BñB¸ß)LŽ|KÃUÁàF¯ÈÁN¤Šn‘Ò'Bv‰\lò&Lfàê æù�E Y_Oh2ûÙ¾ “÷ +÷óLå<€á–ˆ¯‡nš�wæ'�†ÊÆŸ ΄z“=®‚£]ò¯Œr•ËiO8=cE»‰2»òtÖ™ªrmˆLe5âX?H7Ü·nÀeé}N0~7*í²„œºl3i´ˆÕ0Y¨LRâ+ +ÌHp=Ëø=¯nt$©¶L±~¤¹‹‚0(Gè‘3“û¦#NÇB®qÈ“•9J_ôÉJ®m"óDæ�Í ƒ¤¢9…°ÅðÞîØÀ°ð×ÔÓv×h<–¤½ž¢»#2(ñW?´%ôÝêC"q'] 8›Ð$(¬Pn÷¶Ö*†‰¦Iׄ¼T8Ó‹¼HQ•«Ä-•:-Ø)BÉbŠ›•€; džÊëBX(÷äìÝ»}C…–h—rÇq7av¦öü8À‹±¶(Ú\áÀV;iºˆP&ÒYÑ,3ÃyËÿ� @ÁÕ>æÌéÖ'!3ŸPš8³žw¹í�Û1eÜ×ÃyLž¡bÀÑÆ‡(–QþUÐõ„àÞ(¨2Öu=ŠÁÓi´Â‹ð¦ æÐLzürê=ç¹9f'ªhy¾[”z›Þ‚‘EL&q“TNérA•Y‰\ÃyzÔ•’QúÔ'Ù™p1– ‰ô Ýí=œ›0d$‡–P¢¹"±ÏI;·õÝI›ÐûîÁýŸS¸²‰e 8 +R¢\ŒqqÀ�â‚ Õ}aP=ŠðHÁ ebûH|ftzBžá$h�¯zÝ Ê˜r^ùùG×H¡r8&�&‹üèÔ¹S `Þ' bÉX†)Ú#a¥äi®ßO=ÔŠÄXùäR”vWàš� Ñà¤S +GýzIÝšÅÞïV¨�ø•* 'ÈÚå­ý +LGdK1ÿ@fš¯ª‚5Â(¼~„4n» „âœ<€±ÝÍ +'¥ÜªCÅ +tmöRBØ‚p}¿i'ÛB¦dg(X†nY8m(¥!2�”ð×6ôÐfÛû·ðj¥ÍMyÓÒõ�Sxäf¢¬…Ê^VÞ�DèÄM^ÄDÍržaœ*™ˆnhA`ÚÁ}ƒÉ¼-À‰æ‡fY8‰¢¤Ì¹qÔb ˆŸÒÁó«ÇŠ�Ý@IŸ�ÉPëÆêU{Ƹp‹Ÿ¦®×ñ2>2G«¹ˆ»>Ás {! +ö,~Ž ,—è£iÎ{ïà+{“ µr3K6©3SM˱áþã‚�ö[�ò®�5e&XÑzv½÷0«§&̲Íz�{Æ7­* w»³°ëY¤©ŸÔ"ðȪ�kaµÇË�צ&Y®·×}A:¬�g¥HX 6;×[,ía�Œ£&g(p øXÞt9¸…¶’ºr¶Ì|¶4ºþí‘þ~–²œ*¥y‰n¡©â”©Ämt­¾³¢ñ°²¡œ…‹qe5pkp‘p=…Áeêa’.y�Oé#!׬SðêàCôù#.É }ß`&˜' Zn¹`…É™• `ïî^à”�Ý v ÝLd\éKÔhxvuN«í“Hi´~¡þÈðf=°©ü#!F»Ë‘$Æà§Q/»ïÈñ0ì¨*'¼¿ŒæùúAÏçw1ðfÛ‰qÔ).lƒR󔘂,>Fùk9ÝEÔ$8„ÝÞ¨Úú�˜SÆ ê£¨Y¹Tˆ©Ïž¯Ý8¤z1S\«Ž6Ð?óQ]%üÄk +¬­‚k _ U°;¸`ʼn +.ºû…©qOЃóð˜kd‚ uDp«Ò.Ö6šèÍ•áh„ ÿ-�†ªéµ81lùÃ%»�Êãf˜r&‘ _ž•6ðó\r‰�¡;‹–”7ÌFøð5çΨ"¯ZŒ1Ï](T•°¹ôø�ÑžÏJR€Øoþ��[϶€œøGA%Ž +tU Oð¨oÈåX8ÈÃ?‡î ½ã拞9ƒ�…J-Y«�s�ƒ'š¤ÖzRŸ¹N0Æ:;Ƚ“�’`Е‡pù—9�z×€šŽôò¶sC÷l5©ž*‰”)£™l] àÝ{ƒÆOh”0~¥c¥ç’H„Z+l4­Ð�B7)´ÉíAÊé�„‚b‡/MÍ‚ijÍj ÓY†XÂ90¸m™æ ÛõÖVú„µYY‚“Ñ ÎUÞŽ;â$rYeGê‚ìüü/^ŽN˜×é¯NG¸›¾ÄÌûpo€>½E¿„€øMôÝö„?ÿÖ"³^ U¥¢{±2ï¸aîÐ ÎP‹7šW¥ãŠwâ„K¬Ä±zƒµiûª÷ ÒS›]]pØÒXøÙMȺ0Ђµ"&cEù&¨ä¬U£ø1´v•ðpl§’RC†S7ô€úOE6—)ÜMFõ�þ€�§·Ó[ mŸø_ái—{¶Vó +”Šïà˜o FÕ½‘ÍEPVw¤§aÊ8 oæ‚ÕX…a¡ „Jöì5d–€0tûË/^LhBI]«‰ÞÔì9Ìê�¤À_\í—ê†=€ýmLÙ†í:vÏzÙ‰±�8Ò.ù™ðý¯þ6oÿ  ÄAÒY¦��dKÞ[¼MD-�Ùï»;ðŸbsU4~9Üfs:’ÖÒ‹´²J"· + ž‚S Œ_W)ìE ÍÌ ,Œó„eܽË2ŒÌè@ 5ÛüÓÚ3Ø*\Jïµ L¢™¯Ášt•{âÚJ)V&\ÇÅ ˜EÈÒ ÚÇ—Œa°¨æÏ˜=%’3Ní‡-wÌ‘÷œÝˆ-ò÷ÊW(7|!0Ý@­"a¤(£È0"½Åî7|s±/pè¡­A‚¿¢<ö Â÷¸¡ú2…è„PΖim�Ìñ6s˜ÖüQˆd$zŒ_“É Ë +gÜé2<œåüÿ/1Šíºï¢¥ìåpEÔlž øòVT!Þk0aŸ·cC¯ �­³RÑ(i·ŽyƒÂï“»dF¬ø:ô¥Ú¥×Ð=›Dö’)’ß�ûç€á‘f`�…¶·pˆœr¨ÝozÕ´ˆR.¥ì^"èQAé9°Ð&Ãzx]|4¬ ¦¯,}Œ”¬`ïce Ž*T¥¶[«AP ½ÿ�<€PAQ?°uvø�'Š"Ë,Kµ|VrÝ„g8ëWÝ€³'(õGÈ0K¨ÌñK�߯+w$Q0b«¨•«àšAž•›IpL²ò «2lÍ-V ¹M’ñv,$ ]PpSq0%";±^ª_]•{[C£&›ÿùDÛcY´Ý-ss ,—¬\®zHÚ®îs• %" ¿µÚðYUfÈoÅŽoT¯äRÄQ¹Yî<çSù ó©6…ÎÔÉ]Z°ö|öæ«j�Àr›œœÜN¼¡ÛåšA”Žlpo‡¾¢kÀ + -&Q¹­2—šš¿€8¥U„#ztÀLïž)È„.>, Å‚Õ +A ˆåµ!­-¿Ñ×1èmË–÷�ë_Þ-YzÄõüÌãOÁV•{X2[DLd÷éhÆ/A:`£,>¹yŽv!çúa¥tÈ7äüÉjò, ú}¥ñ¥}|ˆŒºVÞ/˜œ†Û‰g{Ñ; ö„é¡ùÛp[ç$�P……ÿï+q«3¥~ÿtS­!ö€ý*X]Ðq‚ ˜±h¼6åf°ð™Z/ΚýC†d¶þ�žBp�gÈÏk(½p¸€¯�t•$Í-x¸Öv{u(Óò¹Ø˜)®”'”í,ö45Ím¶m¼~ð•£'ÅJøÛ˜Ÿ²ÄFéÀéâã;2Âá/ý­ää9{|æ!Ú‡Ú—zã{ÆÃŸŠ6ÕßÍ×,ጳ’—õ`‰‰ª:Ò¬¢V£+’2W>H1—LãÔ¡ næ^°Qpmò<Ñú9´ ·o¡#h�Pò�9¶Ï“FŒ#ß§røGð|õôÅHìP +J?+²‰ H’ž‘ƒDrª00"Î*s"�ñ�XÿÛ‚Ó¥Ãèß.·€“)+m°NŽ-?ÁG�„düþý)4gÄ¿¡4Q0$ÙþéÁ[ð`Ñ@IÞ§Ïüë‘fØ>‚ƒŒ£´3CbØ-:`~D&›X`I¦Eî»þFgm[pýÖNJß“&Î�P÷›Ù”ü×4™¤)æäIý vñrí·ˆŒ›5:^éÙª�x#UQÀ>‚X˜rßPÄ�z�`c:…z`�ðÎbJS”ÂêG¦qZüZ»¡pè„=ç*h|ü(­†•y}½Ý«ó¸Gàm)ŸµbòpnQ6ü4QxL´ÔG„׌r³_?B‡°¥xA­è½Fq}¤†›@R#œ ðï¹¥�<$’>‚‘Þ°!3È™JAD]buá�T$Ì%B=€�pŒB¤q©3 ^¥–Åë6ùòAàï•SÚ#V¨� MªGxhÞ#ô‚¿ÙËØ#b¾œYÙ#D¤>…GàÃÚÏÓ‰ªAD6í½!«6¦3Ø#k6ÃkÆ’ƒ5ôHbÝ3�hŸïbÅn„Ù ÌÓ#¸LWÔþÝ#vˆªõe÷ˆï¸Tb Dw +}Ü#HÕ�©šæÄR£¾Úd˜�ïÉød”ïÑ/z,Ydûf¢†×#BD0¦îÃß™Zžò<¢³øË5C’G0 ÜÍÁv¡gGÑØpÀ^Š%ðǤ*˜SL1Ü¡zDÊ«"F=¼*€ºáG©óF‚�‹‹è1="HÿÔ¸�:µÒ#Žèm$…g¿S‚zÄq¸¤Œ<‚ª¦€Ÿ˜ãëåÁÑ‹ã\uô…¹<ÝM‰HqŒ�ça«£ °áÉ#øwÕGÆã'¢ü�Žÿ<âsך]“º@ñ:�ÇÒbÒÒë˜4Å£í¸AnµŸ=‚ª=‚‘f: �ñõÃ…ÓìG¿ŸÆ_GGÚÜ;dÑÉÖ2“ê‹1loIõPÐÒ}ÓEKà‹’õÁ#^NL&‹„jǸÉ÷xM™“ÏŠ’”GPmà«ú'mÆÐØ ùÍ#’«ê6žDÈ#¶!wÇ‘¶(†Ì"Tü(À¬uŸþ¦µìç Ψ"Z®e†`b^,fk$áçc<Ìå �‰Ê8ÆR@œÔúÑò0Ú�‰;DôÝò’…㡈Rhåµùp`¿"‘­ªå)«.9¤õ8!H½_Œü¢Ñ›Á˜ƒé Ó|íê­©Éî$V+ +nº-fƒ‰ø1 dbvN°µÄÍZ•rÓ‰kôMäÏNÁ�Áä{dJTȤ Em�–Á² *˜^n á¾ÅH|oÝL•]Ø×ß�Ã~ÕªE r½Þv‰LGô &Äd ™(i•Vaù¡»."šùl™ bË+©F +ÊOd‚v4ÕÄ„‰B&–’’ÏB¤‡L´»¯ —c©Æá¶¸Nd¯_ÇÃ-˜`É`fR÷¸Êcs{üBžsÚcRjQ(÷{ÄmL5ÂjõÐ*¨áº*- U”ÜBʰ˜à€çHHÈüb¢¯Â)µŸ1!–ÉVgC©²È�™§Œ"ø=ÀmÙ˜pñ„ÝEKˆ%`ÓÁáÇ]ž«ªæ!¬”Í` Y‚œŠB8L1�hƒ�_–à̯à~W:ìž‹‰5%hDÌŸÃp Y3GnYB93½”ÜÓÕ„¹Sf1ÑãL±x¡Q�jpá)¸é# ½¥ài$ +6UÚÒ¾Ý.µ²t)mLHçH幘Xðù‚Z£NÕyú”üc&1? bb±œqM®zFÈŸ :Ÿ> FAoßÁœ�)‘,!@f‡³g8Ü[‘‹”Y| —œ¤VzÆÊ¹`˜f˜ šA=K0’/E²q1ŸŒ–@ßò�n�5ÿºèÊ@N(¦§ò‰½ù~ÜXì›%t²‡ M)R!–ŠBBö¸á Œ-ÁfµÓ|<Ù£p¡Ñ‚tR‹”Ò$Mó½Õ jܳiJmÈÛb‰ÙW™ùž4Œ ·à«L´¯@‰1á:/ ¹ øµ” îåÑOv`2&© ƒ{·ØÜ"f¶Çá„Ø¸*&^×Ãìå#¯O.µžÔïF‰ßòl§@ƒÂs·?žu%&¶„öÜ EôÄÄ +ñ“ ÉCX0ª©Ñ,—˜0†oSéÚëÇÜ©§,ÄÆ{ò¨l��¬˜@fxc L%B¤S-¦ÚBK�OóÅÄ©�¡ßY§î˜x^š™n’³Ø— Ae,jtá-®c¢–šÃuÑe`þÈ“†1qå® –çeõ�ãÔEý<ÒÛœÔU½ÆÄì§û–+ß<à»þ¤ìcÂ�7‰ÃØ&‘B…gÞ8Qt‹Á6df©ø1�°5BEؘЎpеtí0&D W“\‚Œ  pMÿÆÑcB�‰@ÀÔÞTÒT#[Êj)™¦p\è§¶_y11qçJD7fæ ´@]gÕ¨Á±baüB¡ÔX°&”ÈùƒgB‰‰¤™è¥ÍŒ|G-wÐB´§„’—$øøAЪ;ž*›˜ð^ d7 E¼ã‚¢4JLD�øsaeyg”EÌe ‰éOH ± +Ñ5öPíµùÙ,—ô- ÌÂ×âbRv$�ðâiþC·ÐÄÄxƒ°ÚHpž +墑øËƒOÄ€F"ó‚J½MSÏ)©‰ ó€÷ü¤”‘W“T”Ñ·öÚíB÷Û �ElÀ/ý‡_Ú Q*&¨;X¡Gߣ‹ÙiP1q¤ÍàëCýAÛ Í䵘y¤UDb7VsÖ†|¡ƒ¿ù¼F 5cTÌ’ + åªI3L03)ö[þPÚæ5×LÃDúCÞ¤»Aú0KÞ7§ÕrL’ò­X!«-gRQ-�“‹&KÆ ‚¦Ø.öRåV±Û,L4Z» I'L°ÂùèÜIR’œßi±ISéí@"]ã6P^˜HËS¯&©N·WId„©|pM0a"qêì�äâ±þ9T§‰x¤ÛטwEp©mü]˜ÈÞ¹Á ìÀ.)LÔßpÓs#ÆSí'L¬pÞi\d“¹Â©d&r·;pT;L)kD¼t¯X]�PSh|¸v¡Ò Ò1=©!+ÛÍÅÐ Q¡ck™Ö¢¸1!*Á•0å�må8žFFH‰b™ñÔCRxÔ)ÒËÙ{½³w •Ÿõ"•ZQ(î àv’Bͽ¹ÆsBcr‘¤HWøÝÈ%Òešp¤ZèA O/8C tÇD$ìqþ,@[AJô‰æ.ÃU ¶’@®öË�� ª*Ð%ÅCæH€¡„C¸m%È�Êç�)LŠ5zNÅÏ�òÔ¤XÂMg(ò<©ØÃÃO j¤ G”&…å°åéÙNŽÿ¥áT×>ûÊ ÙI>Xùû#tì½-Ï&ë'öå‚m~‹‚¬·Œ§UJï³"›Šdí*Àƒª¸Š»˜Q·Šf˜b\Ô´ +ç�!�ËY…AÉ.ÀdQ-¢È�TUHlÚ~QHœîC°ùE# ÞØ'DWªš)hÐûÙÛ/jUh~<vÛr�ÆQÇ@8Ög>£ÏfÑœg’¥€-âÍpÒ4C¶ŒP¹™áÛ˸+Ü.Ž–7zJųy7GŽ (àE$™më1¸S°Ô+¿¢ÁHeðÓk/£w$½bŽÆ«ÖNÝÐP!CE›.…I‰ +w´‰/*ô?;eµ¨0"1¨ + +ã¨0@`µCRñk- ²R±bm âCPæjÀÿ\½ç'~©èÇzd?ëÄgÂT4÷eÇßRQ>èˆç”ŠÍðq£“Š€Üw¯™†mû°ÖšËHLžms �D*zC3¨PÀè*Êü.9w (>ÅL/ ‹ž¢lº¢ïtº¨>‹§È¿¥åYh �"ãs�˜UÁ8ÅÓ¡Óþ¦ðí>FZáÕm¨šâ@b°#Sù™éL�÷òÆt𧛕ç¹Rpèw ó±kÊÀÿ7'µ"£"WНlN_°YÆ„MN‘H®€ÛCþ”=ô  +h*û#CúV÷z*¶ê¤öêÓD'�%I:ÿÿÿÿÿÿ¿¢—ó9d‘m?Ú‰¥�PI¦$¥”d¤z³³hÄ©Œé4Ìæ‹^0SïˆRIù"‘/N¾÷‹Ä¥˜ö�9Ÿ *¾Ï¾8 +½&uûYîùƒ¡* ŠÃ�è¥C«Z2—rw?<84¤Œ}NøöÈñ.Pìî¨Ù”Äf_÷EÂM¼kl…¡@a°"¾U$¨?I¢Ód´ä½HÜ¥xs̼Ÿ�á±ÒhçúÔ™iOL+[MUµ¿Ô^$KjdBˆöQ˜u6ó–A·€Ù„Y¥ün/yd™2ö´íE"Ï&c&ycy)¯ _¡¼.î%ëÃâËrÏõa¼–e‚wW”çv^ÇRÙ3ÓyU?Q¹sÍ‚UrwY,™Á‰’Îz‘ø¸œR6I…cv{q�®IŽ/S…Aa8†ÏÍPq0ŒÌ¤3L¹D†Ñ;4ÓÕØØêb:Ö‹Ã\M&öŸ"gf/õ,€fÚ)£iWÔæñÇr,WÂ� 6Ç…Òº}ŠñEb˜zô2­HtúqIÃ�¾t$G÷è(èÃe«‘©‹/tIÌÀÀC.$/ä\ÁÀk � ¢Á�RIž[@š>@/˜€;P0(_�:‰BÖdÓÀÀP5Æü‚ú +‡TP˜§ ðT'SݬLsãÁì�oLzYvYªdüà-;y4ž“9ÓfÕ¥Üi´GTekïGr§"á”i‹Æ2¥Æd3­¬$u*R e£ùá!Õ$ ½rÐÑ:6H,NúÜC+K–š>ÙÏć-×ÌfÒ©AxYc—úçܵ³ï—ž¤§§ðÞK+i©ó£Ð&‘%5óN¥{]-�™)W*ÚIžjiÇ)ŠO”æÒX©6_x0¦Dd$ò ‘hjYUf$xD.¹-›,»Waö�{–l2#™•±ªŒ¨ei㙑‘•IÑý»ú³^®‡Â@õC*†Ca°!³ ÑœZVWr™]ªDhb%:“YÚ(•DgI6x @A@‚€ ‚€ T'çFÙ£à©Lú±:Ô’(�Èn0 ¨7'Q =kq0ö²å–˜Ò9段V™¥“?ÏüÍZeG)S*ŒÎ^_g—œºaµí¬¬x/ßå®0Þüµ’Öf ‡Ž'ã1R'¯:˜·�Ú�]á-IÒz…¹QNÕüSuªxÊWt†ægèÃa+ºZé¬]1Ó¤šÙ3»I�?IÝC¢‰âmcŠ%~úò\bÙo¬ƒâÖÈl�6aÖTžU ó™ÁŽl.‹C”u6y—åÍ—uŸ,–uSgû˜™XVm£ÝByÔ¹¯¹~ÓüüЂCÕA«a!Þë†v¦JKT_Ÿ×ß2]5;ÿ~sžkt—˲<5ÎêÐl9 +çììÅœ—ÍVʈW¨4Ñ)‡É¢vÌÍHÓ€H(ŠfÁ@$‹M{âP‰Ãà¨tÅI’‚(€"ÆÈ„XP¶eàWrñì w€´�S”\L?�HJ®.¤ž—8•\sÒ¢É`n¸±}‚5ì´/ÌšÖ`þlÔ$†[aT§’+:ð¤Ak(¹€F/ƒÙ¹LJ®©i +¥`šJ®àME• _ ‡Ý)¡äÀݸ¥ä +�^X³! Oµ¼:•\…+àâKÐj(-H•J.ØaßéRPD%׬a—|òb‘�…;~‚±}"E½iÓ8Ë�ˆ„ATôe%׸¾Ûê�î*¹ÒNö§ J®ó…à¹ä¢x”Yèt,¹Ô G Mæp¿äR[:Ûe}#çç’«‚Ð(dÉåÑú„®H^rAº�¢™Û·äbZô‹yÉÕ"=8ï’‹î?B–Ð?^<“¯ÕEû¡6̼dÉèÎâæ·ÐΓP³³:aëÃ{^ªÑ .²�i¿äŠÃöœUÂ9Ê‘€¦å%W|Ab8�“ƒã+ð­97²ü’K³7­ ê³äšþ¼ÌS÷xû=:Š›cÍ÷îèPK®+¾.Ì›RŽzÉՔ⣄K.�¿«Ò[¯sG½Ö¨d�‰Øt£îfŽPÑYëoˆN`Ù--=Z–\ +áÎK®(€…,;À¼£À ˆ2éÚáéÊ<(`8�éãSÌá2eíÇ�õùlØ +yª¯H ’í¯Û¬Ãæ’€òÀX{ÈE¬*ÅcwäØúƒ¸/¤¶�8þj±nÅöDd+ª#‚•ZpØbÜ€df*º¬óÆsñ·Æí7³ïïÀ€‘YÎ×ç©çPs?ÆÏÎ%ïáŠXër}cÂ\SOVZõˆ \•�(;tAþBÍ- ÷ãRéD…ñPáðì0³NÒ‚ÄÝÊ 4ïjßhýÇe±gWŒ€­G4hd+�(ö{4‹žÿ¸ºЉ úu¸:‚Ÿ‹íØI@ÕWsT¶CܳŒ¢ý¸AéŽMjä‡nŸ\]B ‚/A¢+ ¡�æäø!ýš~]ÏtózåÖ� GlzÕŒåM¡ÈÃ(SO0@²LìÂÔ5Z�IC°)_3äêpŒÔ/X�¥1JÀº!”¦k5ön�Ä .HAÍç!(g&U‹µå+öœ¯2¶2°~–¹rßœú9TN¬•~æ: _ü)îÊO–¸),�(‘n2é…�ŒQ>Ý{$‘3„APµ�WêxGê¾ÑìE?x'¡#�ÐÎ3ç„$©y3&Ò—˜‡üǤ1,dVòMF|xSl ‘jæS¼»1±‹hå6dÂIÚØÒ¾5y(Ù›ð K*4y¿‡-¹í¶” nF�#27ñ|°³d¼Ã_Í–½ÚL<,"ۘζ¶’ÛÀ•˜nt z ³Æˆ™³k8iÏhX 3ÿ ¡bž(‘.þì?¥â ¡™õ‘¬NèqͰÂgä$umKe¹äÊ]×aTE�xÔ»«c;Ló™�z|Œ‚+¯åƒâ_ãuÒ­ÄÚ/Ï)Ý8‘)óœo•ƒ;¬š½Àò.h颓^èæT~ºÑØeýÌÛE2Ñ‘”±Òg}ñ'ÆïñH“H.p{ØL4õ`�4‚×�ß�†B „�¸�.ÒF)S¾ïlIîÅv�ôDèìEPž°v2X´µzíSMN° õÀ—+Ö#ê� íüî^*‡fÎÁeR÷Òt‡Å +ˆ›°»RûEÁ³œ j×~€Cª¥�½ ÿÉö lNšJ„dä¶Ý\ø¢Âõ§‰iôRñ‹G¿Š_STíùFÏÂY³Å­&xôæû&�"¥yî‘ÆìSÃd”H+ƒõw·,étÚß™ç[?ít­‘žìwÊ&u¹XuN-hƒ?'X’š2Ÿ˜¦¯Þ‡LÖD†â#ùÌ÷F¥JFpÁxDL– >¾†¼Yóa[R F�ý`ú» Uf•BýôH$”Nhî¯V/V¼Úï¸R°6wö+ë–gßë{“‘ å–«`‚pö©@°s‹›/Iy j‚M'øÍ![aפ겆lï�7òøkc¹˜[…�h%·Ä{ýU]@á0X÷OTúõÁ:¨å…iPš¹Ô#”wåÀê bÆ6ó3Ô•ðT_fÙ©Q¨KÎæŠù=.ˆêÜÊПö0ûÐU��û?QÀÑçÁzGކ +‹Ó)£[»(’òÏgÐ\AòXÑ[1}´K{Ã� Ù%|èø ù«økËëIiÏ€òN +||¡ÊÅö)Y´½áb³`¾N«_J›\äO¬|–4‘q#Âë`;>„Ë0YL—"Ô¯T:C*ËÕá;þx]CÏ(Ù0à îJÙïw±±€‹Œ0ó’ø8pLjÇ4}rXµÈµÁ�ÄÑ¥ç®p'=Úa|#òBd5ømgÀHyß~G“Ò¢þ ÅVù~ÚÙNxÇFе�s,8Ÿ›æoq|‹É€?‰f×CöV“Å©÷U–¹ˆxT•æKÇ +ý¨0&ÑÎZ´¹UE0õpÈlãE‡Ö™ûŠÛöê”nF³ñ.jõèw?¢ahò@ƒ>IÂÒ¬`|’¨d­s±9s²#,“4<Óâô-�îµpñ,û_ ½¯å °•ï¶âáD¤«ð86 Ä…¹q¦; ®lè—ü§ž}aáÓ'«d3UHª,5·Ô+Dì#Ö1§æO˜Ë?¬xÁ °Äˆa‡¬¶ò4NðŸÉ뚈tz[Û +5‹¹mqî…áQ †O@|çü‚$uÅk¯'IqO·6‘‘å h„L+Ðr�5�v3Ž>á,½páÝ‹€M¤$d©;Ž—/§÷—ÂÊ, €{û¢‰º•²FÊ>Øè-â[¢ÛªnôÎÓ\Š6ŽÎcð‡wp�ê!‘Þˆüã´jÃã¸� +[ê2Övíg¦š ,ëÇÞ›yÒi|M>¸5¹š{­j`§ýîˆiäDÒ(iå£4‘ÂŇ‘ЩÚ—<¢|jŠ?òyæÃLt F§Ñ—Ý +±iùÇ©×Ù +Ãã<¯v#&Ö^ZÆ]2¨Ã=’³7– ³ U6ÈÙ‘¯I©£Ü÷ò˜R½ô4Ï ïù‹ÔyÌZÖo4DU �M-Y}¼œÌµaï»áÊíS–ˆU¾¼±¼€6¡z0a×�N`ÇÍ-ýóé"d—;r�e«Ù�Å\WÚfgRöë·†ó‘(Þ¶ª8-àSðx ¶ÖîÈ4G£tí\óÆÂ±è–}p4¾ìÌÅåÖ¨5 áß¼,ÐOHX¹"üóôùѺ“I>¤v¤$xG¯)| «£©ºÿp6"ÃCFެ¤æF€¾`ÂsØæ¼K´[æÕ�)ðßÚ²#<æLh»êEVÂÎg�sE`ÛÇŸç‚o8NžÛ tkÉàSIª#%×Ö¢$¡ªðŸëÚ�…ŠPV{XNvfö[G¹â ‰–ttiôÙµ?Ÿ;#XÐ…_.î_üM°[A$ÆüKÌœ +¹ds] °§Yá¶N&K¡Úߤ–%H(üGÔNÃQÓÏ则q^ÄØ crîšþmú½ Ø�׿6³*<Œríò6¨tŒ•W.b $%>¨„w¥º .E=Ø­4bT�ØDøôx­fg8’ÿœ®òEàQ¹ÔD*Ì&°-“ïúJX/ܺ\MâЄ}�nÌ:[ k½LànG/ƒ xÝXo]Ûk4w™²KܸþnÂ_Ä�"ó¢ƒÆÏéÿ^´î%VJ{5žèäÂO}†Õ¶Œ ’/�mÔ‡�9~o”MÃhgá B¿wQ7¼maŽI£ë‡‘q¿~ºoòCÈK_u!�|Ë"~˜·‘7­/ñ¯ô¡Exm¯€—ªG›7ýhºbd™±òŸL¡fK§í°R°¾®óÙN&«Ð‹¤häÀ8�óŽXä·G•™ÖtïG1b&𪫦Ü'_‘o6ëÅ]òÞ–ë@ƒÇ +i÷ä×S•XˆÇZvÕ–‹à‰,(Ï4’.lC8âqL»¸�Ú8Û�b?òâ¼Ý2&»/|;.®yZ/èºOµ-‘ºÖ{Ì�âDq6Ÿ|€¥V"J,A·ð‹rýä¡(À¨±a¾ ½íBdèæÛ¯þÌ÷ê–Ø[Xm{¹àä’âÖ¢A“®¶`]r'pÃЪÛ° �^ž‘é Z7ë1jHùrÕ‡›�Nôï>ÈM 4ˆM¸OP²R'¶/ôâLjÇçÑ¡vß÷È ¹OÈ�¦C 6C1gqÉðBw +”ÕÀCS!R�d¯B–€³§‹&\+LZÛ0ÚÅP[iKÞr!/?÷Hº†Æ22"¸6€ÊSø2F÷I£JfFàUY?Ìhƒ3ÍÚéhVGc}€dšöº íÏ‘ˆcžë?�°Aâf„(Ä|ͧ=Ž´„{. ¸þ\ä‘NcŽQpßu$ ´ö8z…1TÞ ìôÿÃ-œù@ÆHé’Ñ{né«4ij·…å\Ó=Ä ºú8x1,¾vä³é´ÄoœELaÄ=ö%œ,‰½<™ðO´<­<�s«’åxýÅnd≻Űþ’�x9NØ +NÕT9ôöxÖ8�†�†ðÐfGRо�EY!-3ì¤ABÜ“¤%€XˆÚ3ôaв°ó¥ýÉ¿¤EV,\a�¹ÅÂwh_@�B¬±hšIé(ã.Jè�1K¼ÄÙè缃¿‰´e¡³"ŒüU•ÚsKP +d“Ãàzû¤t[/"÷µ­B 2ЛÌ";ÿäE<èa¸ÿ­­Ź¢W�¢Ï/Ç +Wñ� ÙTÊ ¬k€è~¿¿iÒTàûá·–�¥žJ>¬ÙÒ¿e @B_4ä^r¶œ‘Ñià ;^�kŸñs’õ0`×u~jì¹óê ä°3ñóü†¦9,6˜èà5>y:VÓ…lôÖšÕz; žÞj¿ý^+ +nG0/©ëسUпó ÛËåÅ7lYK4fØÐ-ÏÍ„¡s¿°ºÏŽ´Ö/�~7cK¢i.Ñåj†êä?ê.²>Gus“fÄa«–Ž„e+\{ü�´æ`‚©NÛÖQÃ`›B’Š:ðe®½Ó8ZÓf;œ7ai¬� ÆO‹†¦ÎXãkEg£ƒøÝ0šqðšRHé—…+—¸ uo¾¦ïÿÁ9¥,­µpm�‚b悺joêG݃5¶ÿÈ ÍyÈ5Õ5ñy> éßvà+²æV¸f�+·&ØÙÚEÄsÌc3Œh/P§‹wÝL°ê/¡Ð´�€(∑皯£gŸEL´sF½FÄEœBqoxGÓ÷ÜD#ÝÍiX ÓÊ %ÕÂÉFøó“‰Ñëô¼Ür°³! Ž…p¦gÑŠRÚV`‡Dë_¼­š$‹©3P\ØnQê �û»63ÒjÄ5Œ7˜+n "íl¼^:µŸí0,Û¶¾ÂG½È|yWWæÜ÷hM(§”ì©•·ñšg±¶B 1ˆ£i§ñj¿y£â‘tOêâ÷ùøØ}Ùã\Ój••"‡Ù–1Ú0il©|UÖœäË�0¸åÖÄæÅÊd®YÂ,ÍI6ôn2œJ!΃¼S´;KVHÅÖö[¤ÚÇÝ?0—òc3ý\%ÿß]™éDxE¸»}³‡T@Žß-ß:AuXçÝKót¹� CXø”+óëÚ7Áä!: üb‡3†)%rõ›íÞ *`ZFyèšÂ¹ pýÈ*J“ÚÙÛ^0ÚÄ®%̺ðšQùºDj*„_�ÊÜÒ0»X1„‘6…Vî –vµ­Kâ52Ó*Ax(G§ð«Ž$¢Å–ú&Hš=ûºÈÆý²¤Æº*ëOæ’ÛšÔ¯iƒ,,ʈ`‡ØçÌê�ÄÚ:ÀŒ¾e+@osMK%hSqµû,Ìe(Ý¡wâít2[èi*v%òPž›­‹A¸—:PrÃrä®ÿ[õíîGš.QiziqãÚ%ÅÌâ‡ûÑ/ÔaÓÕë�ùûúVqß°°ä3fü7ƒM¥Hè•:Ž×‘Q$Å9&�ëAé;Dši§­›½«­Èµ˜sñÏ㨠;ëÀ?0ÞsQÓù Mÿ‡ÖÄdÚîÂöå,/P×ñNR÷1ÞƒmnÚ!sYÚœTÎÎV¶(L—!¦ŸÊ£ ÄÇ–‰gó»Áä6ž&ÔW'uçÜ¢WçæòJÊø(·ì#áЪ�µÉËÍsÈq*IsLIy‰P=ÅÞ©† %Á=£ýOxÛ3KÊ1œ^IÃòùYÈ™JB=—RqÞÉ7@ýÞuŸâõ]Ù�Ul„¥s–KbuÑ+¬Ü“‚gyÝì­-„q׃¼�rùšAõnɧ1Ÿ—è4¨”=5àõ†ÁѶ¹–Ë[ô®ÕîZRTli—þ…{ëi5›ê_¦p} +º�ß]Ù*à¥(ΞFÛh‚½¾í,îÊP-%qÞB[âzÀ™X‡¯9Ô¡-–Ž>›�T÷Ѥ +¢½L\7±Ÿå'VUˆæ½Òë/^j‹¶Æ›ó›o�K±{h%êKÃêC”P`ÛZ?3¤JW¥_‰1ÀF‹ r¬Ðdµc”<´È¨Ý‚:œ˜íWÝÐ!jð(&vƒ?ûéD£|VRíd‚~rÓ hz¯œqKV[ô,õüîõÒðÛÕ^¥áCbÏqqï©6Î#váÑFwí�ßΜ„_ý9·¬ëÜPí@™J`âÖw]ã[d”¤OX†ãÝ>‹šõ‘ǯaYSÍ +pÑ~kh„ ‚¬™:TŒÔUHôLàg’ìµÞQ’�[Rrþ!·•û�½p¹ƒ¨Cü@!#lι\�A¨ bÒ†•'Bñž`AÔ#ße¯ƒ6„¸‚‰\ŽV¥Yœ ¤-³X_�ÜË�d7aÒå/gÖÅCEÍ—Èi�¹½…Œ›n}3+/Œ°¤à›ûÑòÛ„´)’’=¦eˆ„µwN È}f{ô¸.vÂJbluN’0%[PÃ8!²R«‹—8]E1à �Ì�Y´ä™¶q ð5Ûo s(Ò ¶:#Ÿ'²,›7.xÿ¿nej~4“3$W(ùm�ççCÕóR‰Xã}£¬òo¤HõÿºÐ ú%Ú™k[ãuÿö{Ë|ú»ìÃ*EU(!PGš¤ *F„æS…@^Á—+7·LY‚éê�«†U cq^âãͤ#ZJb¬Ò„ª2dÔK¢ÌÆJ‰Q™‡ï Õj¯_=ñf6'åYµì¼Ù裓qSEZlˆ´Aö�N)å�ÙK�CãX�!sI˜Ç¨ŽÆÝ³/ȈùÔDÜ#q"/3¦¥Õ«æÎ:ÛKÿmXÃ’(òO©tTU;)‰Y'SÞc©¡0pËÎ$.DçÚçb3I„õ!6 ?²>ã"±øEõâ%2oœ�Q?¿AFG“2µ[‰´e?š7á�B6lx!²¤‡¬ñÒº±^«úòMS»¡í£K]„¯Ît響¶{O–¦$ŠDÏ>æÑÊ·p ’)¾—ÓCײéÍ8U^•¢–z³ÆqÑÝôµ*¥ž¢é{$¥Í“ާÂÛcùYû¢ÃÚáÞÈ<¦$A¶kdڴ£MÑ3Š}A¸ï�ðx#w"•‰ Ý%¢«3­ƒJHE¯ Ý��¨_‰;tªycì^5Dc2|c ¾\üÔê8ô1#$Næèl-µ©>–u:9šÔÃ#¬_Øê,*ÓТT§þœtÚ»#²}”‚ÁÂB‚ßB �“”§ÂA€Ìh®B€ßPèÎà Tjv”´µTji¥¤”—J±†xcÎä#Ï#�$IÎH‘Šw$ÑiB�’Ê>²)RE/ûMv£¿Í9 gE;ñ¥�§ÆLú_'R3jŽHDܳE$Ry…jÈZZ;Gzì#”ÛôETfs32ÉY&>‰¦ò„&$9Õ?¶�UìH.Ò�-–?¤|oáàÏé4hþúëf·“Ýe£T¶»Ìh0!ÃÖ*æ ¢û˜[ÉÆî‹tÆØ˜m+�Z½0Z-V8ˆÛUÀ«ê�ûmwûò|Õ…ª”תavòë8£HFÑÇÏjœˆÙ;ÇAD§)Í‹þÃ¥·zô€ŒR R•ˆü"ïñk Ùqwb¾«+Q�6cÄN´©Òeœ<«(D±�¹¿ ¯Ô]/:¯z!.É¢Jggº’È`Õ8ZõbÀ~–á”CÎɘŒÉ˜LÉ”ÌØ •‘‘é�=v¦}¦³}®ÏLæ1Ë ¹l8’¹ŒpÈÀ±¡hÞd¶”é!eÓùî{à4ݼOdð&“Éœº�…웼“׸^ÏxÆõðø3:fGÇvƒcÏà˜ƒcË�ñÙ¶˜†ÙR³³�WvÙCê +gרÑsw*Ÿi( Ì•ì  +¦qµÙ¸]e77Ȉ4—;ÿ\šíÈÎg>ÓË,7s +  ,?Ý=Ú³Žö!Hbœ&üF•9ÄÁ_ÅÄÊ�éä²c6ãªq·˜ÄQ•îS£j7D'cLNd»VG‰S2@ ±wžŽÛƒ¶�ÕÕR&öÚøÚ„®Ö¶ÉIdT±ÅÓùâCº’QšÄ©BãÄaY©Å¤(35Rï¤/ªg¿›±ºqF³¬NŽDIòßñ ™ÄH©$IXˆ¯�­e%ÃVi¯®Z&QEÆÇ'åF=åˆLºíº+Íkl“¹ r®6$ÉŒYõ¤S%Õ¬CN‘/flÕ«5-«ÇNêꛩ8òOO~9þ0Ýå\ç2#Óޔţ�IþT12{èE¿ùbt&2„ª:^Caíã&• +‰Lu”ÜUÆ|âûy#wÌU½N(ö2�yw’2Vµ†27ò¨*d3jw/߇?ž»yg¥Q²FilL™…�:ë´¾"µ;É^2!NÇ>ˆó1ÑÅ0`&u1zg˜¼¯n™¢2÷ß“ÑïºÈF†£43R)ŽŒÑeú’Su™ÿý™S¹4ó¬îòÉsG5¤>�Ÿ”]cR¦qÉolª.w.¾R£Õso%ÉžÊnÜY73^�üÌ!ui©†¤Ž{®§f”ú¨Ét¡ƺžÐ]ˆcÓDÚ û5¼yÝØ˜é-í‘ mj›ëM7aÑz¤³ù©­qT7Gõ9ºÊHK¦½ÃÛ :bÇ©ÎrfT?Ë8–‘XÙ]aý¤‘"—ýXBòº™ØçÇ× ÷J#"»¨Îj)S�˜´k!y„ìJ2Òqn‘C¨|+“܈ydHèj"í�›«�ùTÒòˆ*¬¶tìü�¢O;Õ>Æ?#Ú�UÓ1ç8%Ë"µßÌÐ]e=cûÆLÕ-6jr™ÆÌ¯†‡25"²ˆtmÚíëäÞÀ£�‘£ëd�"7Äà!A;¡»"*'UÇ…lc޲%etµ*únнª'¥aô£9âè†å[Ø"Ù<¹¼jÔKâTTgÏ]¯J2,:©ÿŠ-×l ÈÃ@{‘²x©Ÿ^$%²q™Tö÷8¦ªDÕ6¡‘qX�HÒO‹[<Ï  ºñ¤¥¼ 9»üL>ó8-•ÕZå©�@Xެ=+{Ö€»‰�¡Ž'i%ÒÈ  X8P…ÊȨp(: ¹�Ðiô„*®ïz+ˆ –« +‡²á�£è¦p(£zˆùÉÃ!ÎJ¤L¡âÍ�¡2„£ÕàüêsÇ¡sÖ+†lnªl +‡ºZG²•µ2Lή„OÒáÞ endstream endobj 25 0 obj <>stream +ôäÅ]�ÀO1E@PÜ8&v„ó@ +îКAAB`‚ÁÁãg@,ôŽRÎUA VPþ)ê Y‡ƒƒ©™™ Y8…ÝçX½Âaîµ¢áª1™Â�n±!~W÷¨²4oCXÝ™••l~@8( 3+pAqžóN1c`Ey'G‚ÏÈAaF+S S‚ÁÁ +¤$6sðbJÅÝaŠÃAY gæàó¬àp¡)„“¤ 8ܦ 8(((~` fB„÷­‚· Á\a%S”[¡$ïoÚßÇ’±ÊˆùÑÝ™21à'©õ¤<OÖ‡�J‹]™.4 DçnY¯¤êSHà ¯+§# ÀP�Pý�Uê;fú‚„ä¬F¯ð¤/졟I�IU¥p «�ª�0 HŽ&‹hX¿¿,$¥Brïë|"PUs�‹œ)ŒTâÆê6ÎuñàÐè±ò0›rw.P6SC’l?Ò(ó¿Pˆ¸ãëCXu }k5Z™£�y>ÝÐøÑ©ÄÝÕxfÒšr +‚hl&ÛÉKÌU¿Äœ›¡PIÑŸª2ÎÐÙz=ç µJ)‡ÐiÔ§ÙØ…TÄ–œ·#yùßIŒêuuÄ„CB>&•Í1KÉ•Ñí:CG�´Ú4¬dLˆš2!âPkv²9�3eå�‹¨”óÕAO:633ˆ ŠÆÃÒXD6˜ÝÇZâ�ñh"Q“ Å b˜"@@¦†Œ@Ü}…»z?ÆÍYþÞaY +7Qˆ ?éúÄ%½¾Â!”«@uoŠî× wÁÖL +@¾Âé€PEücÅ5©c&|² +¨¨8Ñë8bd‚¼¼#ý@x)O¦£ŸÌƒFÉsk‚ôüD™uƒÏKwXÉQ†>^ “ÕŸ¨ÝRîÈŽ?IT�ar~6©jwU€ŒåeFg<@uXþ¦­�F…â=”yA�`4´À–ž¸h&Ñpéü)ðéμ-ú¤Ã%¥"»ÂG/sõшÏ9OÂ@¿c'±ù{?©X Ü®GK~0 ùøA8xþöôYB~š3зãŒ] \ÊdÂ5”²<êð3q¥R!¢[«@8ˆ4<̽Ï?³Rw¥Ì7¢13&²Ï½ú2Oí̱xmZÐ^œ#ÛÝh&œ�Jݤ‰úâ'lýo£ ̸“…_¤ —£±bÿï ÉÞ…ýoD.yl—O+c§yZ‹éó`½.ñAÙ†a2ä¾³2OÎ}«)�UWQ"êñê~Ãö[­Å ­´~‘{ÑÍ=)ú5ɹ-¬â» ,‘nÏÂÓÿzùÄ�F•ìg”=¥°R 'úƒ3lcæ´ ˆg”e/Î4lå@èï© }�‰;¼R·]¾V£ˆyOð3Ytm4ìhO_ºÏ apÌX�,¤"KŠ#™J�2Ó^©¨M�T×ó‚µV6þE)œ:šîÁ�Qx÷ï·CDxÐweH“ʱØ)*9rg­kfšÂEGŠÂϱL J¬”ü2�‚²'ÀVðs�‰)¥dƒpÍÃMf(ü7§Y6!±UT¸k�Ï@�ðíáŽÇw nšnêìH ˆ�k¬'½�É5Þ*•©|î€FëînÑ}«uHÔ‚?`²¡lF7t&Uˆ¦â\�@*Ð{ùL¼@< Žµà„ƒ¸Iz^ŽÖC‹eÙñ,Æl�飧›’ìö¢úñ¨t–.7º|¬ÃJ&ýôÅÃt¹¦´.bÙ5]˜àYÑ™šLøyLh�í0èß?â}-¾2OhIí>u}IRQÞ}5©RrT¤�Ø7¤äÃN;ýãéÇ›¥tþ²¼”(g•üâˆžÄ Qý@*¾Tø6éP2� å1åUΈÜK~”ú´ f¼ÂªrÍR„Úæ~¼'‡+‹ÔPÐUÛ[óð4(ôi””LP¾  +ÕÄ“;sû +Š¿[ÿF*¶%p~»�>°-c:œ rŸZÆã¡Ø:àV\þ=]«%‰ÓÛ¥=¥ é]ŽÝͽ!+&øT—xò—Å‚(1n™m«±ÅNùÿ:Yê ®GV„Ò×õ¼À"8AN1?sq�C–cpc_ê7ã¤Õ°½æT¥‰44ö AïÎæsB¼RÑê°ôñ7¢�ÅúÙ­iþœ8àéAA<:è+P Ÿ)”ü�ŒÝ÷Rs=[”:€ +].„}“ 3™jé‡ÊiÑáÕVš g«÷Aͼ!K*'TÌi»&`”?_ :ZŠÖEÿ¯®g�ì`cÁ�<üç¥gª‰TÑôw(£‡fÞŸ«,mĈïé1#æàÛjŸßKÝBræ™±xtplû}½Ë|I&k]qÚž ¦d0-Ù;÷ DðšÏ�çw”xS^PðŠqùm*»sÃ_�ñWLW•ÅOM†î‰U ²Ö8°ìb…³°‡Ä‘V7]ä+SµÈÎw.Žm &Ö¸�"È_}Èýw«E]l«•ß¼Òž/%F xhƒ³š 8ŠÉ$A^CŒ)dÀìPÔ㤺™Vf�{�²68z×K­ Ec”6†«a#̤õ¼W`'Ðã'yAÃ]D ©uÓv‚³g ë™|Õâ™�Ĉ(BK)‡q1Šgtï]‰�8‰„qîÊ~ñ`ôoÇV‚þJ�›«Hñ¤ë’®¿ BËI +ÉAW¿Úâû/ïÃú9Í�Ë +ä o'ûÒ à­JFì !(OY·HÑ($·ñ}NMSXç`A† š»¬ÒOšÇd ++òÑ·áX%‚Ï—EÀ¸`†jf æÿ'èñNÌe(à�þ¾»/ðaÍbimS]ý#kHc“,h@òçÓêðkSÇ¿ùäjÙÜDB3^Ì4�«ž”Ñè3ó°+ú 숊sÞË”ò°ÞÀE–Èê›Ôw¯çÅᔀnçd�ú°˜=J"jâ¦V›×ºõѲ•æ!c­Ž;Ýè–×/†>EGèL'ÜsqdýI´Nå_Ø¥7F ›™ˆÈ鱬üF˜Öí9¸ß½s;¡Ù¸ØØ‰¸ó�:•0Îu1ºRÚœ� „»“…Ø.]S�+M�ÐK�$ó:ÕN®n uâÒ§#"?~°N,ø`):Ç|^C%QŒX› +®¢HEKÕñ{›¢pNÝ'ãнÞ3È—Iù±2ÍçrÕè}Ò¼»çœ¨ÿ@ÑäÇg]òîÞ�E±¼™ œ¬Þ&qÀ¨¶ìùgâïz…™ù­ýüö$)þŽmÒ×JâÊ$Î}³m9¿/ÇM™÷¡ú» ²ãa2@Ç*lýb'+Þ¹Çîßìm*Õ“¸T×@6È•ŠÕŒÐÎ)ΠΣ~Jו¹,cÿ ç*UFîà �ž<º”ûõáo¹ûKºJþƒ¯Þš¶…Êgïþè€Gzh|vA§àpBß& •.s5£QPž í%}ÁBY\ƒdæ9ŸÈÑçä´¤Koì‘þR)v1 +¡Ž•|†ghÅ ´ˆeíGß”ûXg�;ˆ & @SœÃ2 v'ø�Èöû±Õ)ÈV + µt¨2ˆLtÐø@7²èÀ 4ìÍQ>æÆƒùYQ¨†îò4½þ‰£â€bü%‘ÿ Ølœèë1Éùr” +7µ¨k‡hÚ}W4ŽÊ1ùyÍ5�^bÕ6d(¥0‘uÑÎ�w‰r¶Ù;;.j}@U**a‡~V\dÅ_ˆÇeÔ$¬vÝÚê„U6ùÈ΃Œ l‰ IÝlj†ö‡–_×§²”NÄG•[}òËž«ú�M�Ò(þƒeµ2C“ÙbèÊdøÁh@„wØæ +…µS=«ë ™Hí‡î' +§›lj6W¯àe\ÒêéÆnP¸¨cÉ@×Ó…;"~!ê‚ë(^óü¾4ú~ $²sP�lƒß”`» –¬l³‘FW6=À7ÏUi±•éD±W6ç éú¸+^¦AÚ®uœaÿ—õ¿LTß•f+¥?�QøtZ¥Ë¾þ­ÉjÔÇ›ˆµJ‘–;�Þ¤j×6üZm¼¾ Qç F¥æBêÙ¾¤9ÖAxÝV)kÅá Ã›1S~BQ¾}„’uZâô$Ç©ìÙž­íUÈ6`1{ß>$Írñ'÷ÅEûÃâMÕ_±He¨š¨±¸qº2¦ø½š©NkQ?e¾.óͦ®N òñ‹°ÖTÑp�öUH1Ê‚AñªÎÍ “«&$‚"!Ö\™ïè†wì´š†aÞùÄÖ©OÏÐw„*é²¾Ïg:wFÝ–æQA­@áË{Ì*LžŒ#ø§AÒ,(œX´¦Uà.,xÕFuÕWF}}u˜�÷'4Ó;±1‡Ph’ˆ·L«Þ®R-ñÃVZé‹#°€�šMdÁþ»-›^}†R–õ OV‚E2…Fã»Aò[¾¥z;J�ŽüÓ©úÈÚ׎î'â^”¬Pu•ìgôðAWWËûÁdÏÞzãê >’èaÇÁ-ü¸ÁtÊùÀÁ›?qœ»œåI'‚Ž¿ê‰¹? ââìå E4ßî2¤ÊÀg-ìævìl7´º#¹žD?ئë§Þì¨X�ò€bg!U8‹¹¥Q«1–om{Waf.M'X[ÝfyÓl�9t-Âd6.ÚãÕÆgˆ éÞÉéÂJêV¶Hƒ±�]´4®™ÒºÖE2(ðm¹½OqÈq¬Ã¹3· Áý(÷,‹‡ÁJÉà6Ï—hÆ9º.§\Xå?[A¹öû¼Ñ hдóæ€s ý»?HáP)œ—¹„&RÒË�$|n¨{©ÂÄxèûÏVì-ÃIù5 é1ö&7tS ÓìC•¨/�ý¬âí;3Q�‹ôúüåu¤v¨Ì F¢×ªm ½ˆMÑêè6moÿiKeã·‹À¡»W +è· +†÷1¾ë'–)¸«ZÌ�-ù6šp;s4~|Я0„ñÐè@ßeª‡Baõ¢;%³ÃðP‰©jŽ!^ �‰ 2_ãì½!*3ëŽsÊÑr1‘%¥ÇÂí÷¸¡„î_õ_úW”·Ð f~> q²¦&„¾°VWê +„"È�s^Ä9u±ï©Ý=s=ù0žò +¼Ô¶� •Sè'’:É&l"ëLŠ‘n”õiX–-Àzú ‹CõµéymÖNšF¡ûM-- +4�Ûë»õèX…àAQ')@ÉTÝËúk'CØN%Î|ü�y ®8G»Ïä¶a&]�~xZÁ×i¦êCæ�'�;Áø„{›øtýr1Ë$¶wůû7í»�e¤†¡>ž!‡² –Zê‰ÉS\„Coº9€<-ð@âL•L_RÄPne=ëÃݵ–Mšxfð^HL£ïŦǩ¡Ö#�AÆäXZãÚ’õ§æ>–5O̪‡”a”õ¨A¤‘”?ù¸ý�ᦰÊ�f�ƒ{Dƒw¦•’G’&¨Bš2ú„Ǥ±�ØlÙ�>tkN[|’Š‚;ð +&Ë×Zß<«…†Y k ,uQ×p¥àWæë¡}t¤ p|RuV;�ŠikŸ5üT}t >ЗûÕØÍ;BØöXXÄÍ+`A/Ÿ<8Ÿáh?º�á]ôqÄÙàÐÅ…æ Ûa‹÷¼G1²³?zÜ«ÕÌsíƒ_ç;ÎÞK°„ÖiÊOÿÍÀÏ÷!6bb¬˜hoÈóŠ©®I©–€3< Á" |9njzöõ @÷c[t4CõÞ¾á!5{VQAƒ”�¾&ª¥ÖÆS„ ‚_¶$HEùä~Ÿh'i‡2&¦¢ý(å*äkS"©‘�uR +5Çf>ÏÒ‹Äm'¸·‰ÞSW!Ù94t[›+Yý„`SÀ™†µMU{€ µzöJ šì&yZ)ÍfÞbLÍ&sâqj¥¥·Cø_xü“çt®ž£(î"×BSè…4Ò„VM(`ÆãTêv”‘šÞ%â^B©•n‡×!Áx¦ Ò(br¢ �"Ñî¿Ki¢¾Í…©|>¬4êŒ÷麌å E‡x8…àkÐŒ¦9ÊÞœ �Ž:|=YêYÀðÂP€Á’uäWÆ6D |KÛJT3lþâG,ð!/vè/wEä õdx{�VkŠÞTüÑÝFD ¸¦yTxT…Ÿy‘Á›«p‹âõ3`ɱ²Ïº£xU>8•®¬¹‰ºáD…‘,ÂùV|HôP—›åV|b{)7·ñîfã Ròª[mPNn¦ü …8à‘?DÉƒŠ¿r3åEB¨ ³ò9#Þÿ#m*7ÍC� �’°NƒÖñÒò39߇$-d’ ïL#Îê†Ã$…_5“°´æ|5ulßanœœ¼½¨°!ETÀ +á!ä½E¼Æ{D—Æ’Üüð ±Y«ªø",Øôå‘ï @48¤�4­ÀpŽÊı)tÒ˜ÈÒ\¶àÄÀ­6¤| XÅ´,uäœ +'Žœð.¿õ34�›¬t)Ò„ô>ÂqSöïß@Å6ÎWr« U1 ä†åGIpÍxB�âûC+yðªÌ/ÂéÃ4a×$$'L]O¥«¡¹ÙâŒÈ¶»Jˆ”:6À¾šë¹É+¨Å¾¡‹¥z×ÚeoÓ»œ‰iå_sAà0Ðkê(�ñBN7¿-ÌßíÿÈ�‚È‘@IË–›Ú ãµUƒ¥¿8k™Ñ–gzQ9)wYÖ]5.Ƈ±®f¶Ë¾ðܧXp¥•ò$wÁƒÔáæ^n’r�ÃÀ'$’ôcU·*Ù:H§çª�4Z"°(À®ª‘ë”"‡]€½ÊÈöÄ:zûMÎtè^¨0‘âÉò# qe;k|€ “ÑsÕÓj% Ù‹0q�êeaÆ5÷’Çœªø|À¹€_$_žssL²V}$°‰l,3Úg*ô¦lN1W'óáYÑcU¡D-e‡R×à¸3wGm×ÄýÄ:¹*?nš�rƒÁ’,@ë ºUuê°“UáÑ\{NÒS,ëœ|õ�=Æv4¹+ +xe2?½W‰Ba“uŠÔ4Q?FÿâhI -xüd��Íz°°³�_ ^³,H@’u.²Ç@�\•@1ØOÖ9ÁSú²Rl%)·W  î6}Âbƒ1ÅX§ W3Ùæ�o û(ŸÍ-ᥓêçª `–Ñw0Z„­ìœTqÔÓ0bÉI[&&9»E´D/¬sm`Odº>ñ¹,™¥Ý¹¯…’½£;Vf"ŠŽîô²'¿ÈäA¤WcëTrWVÏŸ&2†}ä· ©KêqÖË&¡Ü‚0*îè²ù= ï*]8®¶Â7{¯OG÷AÇð°ßÑeÁ^ �Éåƒur'X̨šn™m(I¿„ÀÉrõW'Óxˆ¬’w�UW‡V´“kj£_¤‚'°˜“gä ‚­a0ÕÕ3ç–7L|D5¥Œ0“™¤'ø‡¤0/hnÇžŸèæp¥ÿû†¦æ¼–ØTþÃEíN_Zí™ßíô÷³ÊÉRBÕ9ðÅ�ùÉ-¾Ž;XQ¿½,‰Êš{2•Ê]…ÌØ C�K!@iúe Ï\áÿë�ĈŽeƒÐJ‹¥ÅèÌóV½*n¦�nÏb·�`dV·ý;9¥XÉ\/Â*;F}wª�¹Üçµôaâ8�ÖíËXsG¬«`¹Ø ’ÒûøcìÆ/Mb¾aìv…D®µ1v—÷ä ÇØÝôÑEÆNæ8ÈpI‰£Y *w-Á�Ý„·s+3ÆnÖZk3ÄØí)ïM›'ÜóX³~y–`ì¦Y\Ù™‹Œ2>1;Ùî‹� HÌDü²?Q/„ÐKj>Ænð /ÕØËÐh‹¨aΪ;žá„—ùGvÒ.I zd÷9sÞ®E�l:’�둸²™Æï2üøMO:�^SULvÄÙ (å~ºê, ©u/Õ79(k;¦Ç>VC”u—f·ƒs8†f÷öVºëHÍnHI̽=×f·•Ó^,‚U©“ZÁ"˜›]hžÄM�³³Îî¾Ï%/s:óT¶„¾¬…Ü9»J‰=«8èìæò–¡ê�Á–s±u>E»´äê'„߸ׂp²°<;¹XÎdç4çÏn€-–Ë«Š.‚îÙ-¡—˜¤—,cYõ)bÿ•14âëá/x¯5«5{|vwÛ]FŸÝhXÄUnùìfGÊr{>»õÌ»ôÚ³6½7ª#pÒ,ÇÞrÉŠÈŠ"`:»SR“Og#üÅ/0|ƒ,ªdÏÎü ç—Pô3øüRÕ.9¦œ¾ã¾16FÍ»ü©z TØ¡ºÕDá Ý;õÆÌûg·@š°ú†Sñç^Ù³Óg +�Ú×¥J9�Ц Þ˜"q ÏRzHlR«DMx ‘�sÕÒªJA0�;‹K<@:*ú�\Æ[:;F„^Kk‚;Vá$Ôׯ!½®,å©Ó¤ÝS„Tt…Ú ?v7t ¬®é=½ €ÆÒ�œP�Ö»õŠ€„Z®u¦v¥ZZÆÏ¹¹ûz{MQ»혽µ:Q;��QÑE ‚™‚"9 ïæ¤Hí~»ˆ«åѲ£ë¼º}˜„U’ƒ€Q�}jò«6$˜,§yU1jä6a u]÷dÓ¡Xò£çš“<£º‘1e›ì:¹Ñ j>|OžŸÚuÍcˆï¤ÿ‰îºï©BRtO²Õ¾ë 6¦Ã&wä]÷Å,Ãtâÿc“x×Ñ)ó§Öx��¦!gj÷ wªð:mœkå(ßTß�×1J‹h¸o?�G¼ng¬æ<( +²17y]�ADÃâu÷„Î9–Àqû©]]Ã'Ûñº<xVuÁ ^÷í7Dø„.FÕ]n5äIq¥ø•™œuÂhW±Ykéú Þñ¢ùfÊÛ>¼.Qºë@–u5u,WŽû¦&`£ "g¯Î•×¹¶i\…°¥âdÈŽ’Ó­‹n»]üÎf{aX‚Ä^÷¼ncMOFP›…úÁR +þ–.Ì.Íëmƒgoƒ:‘ôºûp*“{§Ê]ööêuZÞ!¦Þì~vŽ�è†ïÜQh™^Çå›K¿ðݺ,zé }��•�3€�NZd3Ë™‡Nì”dÀÎn«;Sã7]pY‰xÇ€]å1ú+�†Ç¥Ï²F,2Ä»8LHìÏzpðwÀû­kQ@ÿÎ8…aóÆ4“â(á‘}|ƒ:É m‡)ع{$?2Ö`'oåÅÍä’ƒP{R~–´I•û¦æ?�6qÍIŽ`7Š�À‹u;—ygL± íŒ�O˜:îŽ:ÞÀÞÃ`'ôX<´U°Û¾Ü¨_•‚ÝÑô¦Ñæôšà`çØòW¢xt{ „ æÔÍh¸ñVçÁ¾’vº©‹Â§D2gG*z{‰ØÐÙMaÂËÛÇ%]©�Jƒ]lˆ'ÿu �êÔ4(�áöL’ öm‘/T T½Y� öê¥ÝÎ9çð«þÃkn³“cû+?3ïìØÉt¸5 ·±HÑØ3 +¶áÒ•$Z¨ŒY8ñ�Î^Y ”—ëW뢷˜ +¦¢¨°›Jí +eiæÎ{A>&íä vQ•_ì“M÷zö|Ÿôm>ó Úý¡ìX(a|äÔ�8 YŠ néBÔ„ŠU¿Á +Ž=’‘ “sÅ?èü¥j-$#WEÄ)Èz½Uºïwšâ”Bk�´KÊEJÚ€¬…C{࿺¼øœ¡4Q­žYhï�„Axè³.„Ñõ÷n,Èès¨†½Aìö,nÕ; uv$°¤+�&èéa ĆÚm!ôíma~F„ƒ‹ ª-¬¿ñ£3ºÉ”ͶÿÁ4ˆ¶C³…�Y%©ÕÙ‚ÛL&U5‰5ˆ@òz€­yг…�Ú²›’t¶à“Hdæ -p–5õ]�½7[hvH?¦"M‰áVËöÿ{ñ{9[(æM“‚FíÖˆç/UuÆl�Ë ;îtc“8wkß±îd ÕAŽ2Üv³›<¢Bã=�ÙB3 äÚ— s²m€LrÃT�ù^F²…< ¼‹öå¤Sê‹Eî”8ײúj,p QuÛdóÈ-DˆÞ”„’f±¤@¢ïúqÃ[H6°…•¾ýƒ[Ra¯ÐÅ:EV[ôè@$*cÔšª�lŒg˜[¿Å2F“? #}oá ‚p�µ"�m˜à«á…LÖÜÙC:Rãà•(÷â B庯P¡ajmcвy0ì°D±CÚ ¦íáÔûû„3Lœ4Ñ(¹`h£~@…Ê%~ ÿ8ÒúŽš"Y\š]⮳äA÷-ú+ZK”fÉž»ÞqéTXÜ!Ô Žˆ?»€?äò» r6Û.dZ2ÌM±v!úêˆ ãváïêÚñÇj€ß"@»�ÖË¡œjt»;h œjŒ›tä¾ê.Pè¦P=x×î‚I Kb®áS[ÅMëz»L`OCµX7mÆ ä§Ö*ª/ýJ»tÌ©jÇ ‰`~ÂÆŒ ±ˆp~`˜�é8ñnï*ªˆN߬´€x!)Q‡, íxÁoêþGÀÀéñ}.Ç Õ…Eºû¬ÈÅ jiÍB}^¬û©/qùò�|Ú�º 5æÉÿŠ/ÒÔx&ŽBæSd¼±­hýÛ¸¤Ø$%�PñæL„ÃìÞæûeŸ ä…*OÇÂ{îyAR6à”x±ä7MãA–\Œ À˜jž{c™dA®O–ŸZŒÇ¾**‘/ÐHld<ŸC!¥¨Azm{å üºZʶ1H¾°�0­lÞïÓ®�¦ªCY]Sñ•/l%ˆ�^Wi‹[¾Õd .×,(n†Ü¿ +Ez4²cð 4(YΫcø—tCk‡"Ôb¸7‹²Ùy­›V�xÀÐLê Bû9)>˜š¶M³= áºÑt` öÙƒ¾ k &B:â :2—íŸÄ¹žÍ;ŠE´,QÌ|âY›÷?´(NÍ_XiÕ˜ íçê¼ÈÚ0qo§)°×å´$ü›q§@€ƨ7PŒü¼ äÖံíI`. äB‘Ä¥Çá‚ ’iÁ b˜y…†X–W¢]y„d©��ª7ŒÂ÷bêqá)ÂÝ|gšsg}lS#¸ž5‡Aó Ò¼‚ÃS<T- +CÉz'»,ÏÖ—{­.ÈFmñ>ì,A�â[L¢C‘T)†f?Yr�ùïpÚ~EŠ£š÷lÌ9 „¨$áS/OõƒŽÌPµÈ*×ÿ H ZÅ>F8ŠìßOih%~!3¸�@à ,:"ö©Tu³Ç¿Â=©³�Q*íŒ>ÉF±”ˆÑâ?P÷±(µFzŠ(w¹¼ ù¸Dî‘Ù.)xÇäbkÉyý8�¤Ëuã'á@ÿí¥�Õ‡Fâ˧óŠè�ÕÒ®ÆÙâŸËÆJtùrЧÚíKãØ…V¶…³uµ áqǯ §W1ƒÝ%…�º5*Šíj9þ*8hºâ×½ç¼Á—QðQ—ÅŠšËá,;°;YxíÔr¥š�ú½ËâûOrö‚X=�c§€€îâBå;oýW5Ù9•Ãì‡�ÿñêá �%€¢££i 6«-;ìIàsé[2·bhJŸ8v XÝÅ›S+Ýx|ºŠ�¤ZͶ¸­ÙUˆy€T¨¢YE©$'ÁD_ô1J›Ã± ³ŠŠ^WV2nßúÀ KU-`Žaça›]2‡uõ€�ò/t°ûä0e{CéçÞÊ…v£P¸œþ€²K±‚õú)&^S€lh6‰:{œçQTsôí™Éþ4÷gÜJäbÂOQ¹›Ã»é)W®s½Óç"CEñ¬¯V�·„h]‘êº[Þ+e©‰°GÉ£:áã|¥“w§<ò…f�=åí4$,駱£\@¿œ}uΡñ0wePñµ<ÔB �=&›âæ5a­K6lfŽA䪙îôÕ“×Ö²"‚�%ªFÞýÅÿ©_Y˜Fû]Q6’cc ÿôò¶ðŠ»«¦Bƒ¶‘ …ˆÒ"úRE½�B�ª#Ò -И"R5å/cÂRÒŸ6@‘ùä½1 #wàV1D‚õ€šq9äîá›ítê•øæ1±Û}¿Ʀíð¸¿ñ25IÝ•”>ÁãîèÒ9ÀûŠ�‹?aŒrѰ˪Š3–£Ý#¾FX´dæCé�}ò@(ðd6¿½�@)pÁǺŽPjÂ-d‡RÓêì¤À¿ |¡’Øa`Õ ¿ôÓH�ÁBYz˜ý�6tBú7Oô÷0Í�YžYLž}8ȼ�²{ÅϯŨ-Ä- âe½>Ô˜²El�¬ê@O¶ÖÑ WæLÎSµSUúT±OÛxnÜeù†j1ì¸Ú°úU@"…H[C¹Ù,&­èIß!ã¿SégB$Üö`r˜mÒ®«MÕ5 ¿DLï¦?R@�_÷bÓ„+êùr�èàËïºv¦"fñã]úw*ñÐÉÔâø„ b¨æ ?Á5 0ë÷C-€1–y?ÀN;Sq#~!‡•HA=6Ñð…â>{]Ö�÷äœå$Æ&äê'8™C‚4›�ÍAP«.X¯y�$M<âå4¾2bYûHtH¸Ï� Œg—„ó,­!º\ñ:®µHŒÁÚ}”ùjÔN´l槪yX'�}-ü ›è®6áëN�Ï݈P"aH_> » ×¹Gx8Ÿ×i•óÒ%]AØá;ÿç¨çµ.`VJ{í5¢²Ë![8ᨌ3pœ«>,Ïò>òeÏÎâë:2S­$nE‘Ô¸ë~“Wæ 8ÜÌŠ7Ø> s}µUVïÚž®Ò c¾ñJä•=ýãè^ß©‹2){ îýÁ¢iåô>Q?•8sÃ\›#�íQL¯MAq€~ü�Ï‘D;–×Ýëv£üÓÿ¥û¶€Az꾬×Z¾2ï/›Xt•x²zÙ±úŒa¡œÂ…¬Öšêž©"�SœÕE„}qà7�Ÿ#é˜þ@¼þ^4éCBfF�ºRL™X Ü¿ €ÚÿCìe‹§Ì¯Js-¾uäÆ!­\õµf;‚}36 àŒ.DéºEnm¼„p—A4<<\R'.ñeÙÖ\¸ù§¥õé5ÓCŠ�Ñ” y„w4d>äVNæÄ‘í¢Lk¸Ù=¾—hŸaAtè^ _hFe4>t %9£>¥ºúpHylýg¤xu`=v,ÕmŠý �¢Ô´Éšýny7˜ÅÇ|ÜúêJ3;Í2mßÜ©³ +F°õ#µÅä.’ÂÔ ã†õ–ßytКø…Dùûˤ­$À~ɬ‘xfî8Þügú+…¿]î™MŽ",ƒØ?cO浨Ì@»€ü´±+o{—Rž¹üx`¯§»æ—õbÍŽvº0åo§¤„Tƒ|—O6ø`"ød#£÷$…Õ�ÜüÓ»eXîð°Ï0óNWçe-8-9KThä ç9òhyƒà°ý•΂{ÞšîòEîS�-^ÏZjÀj{3¾ÀµiP]0ËÎþ}�XËt­'Såyþ&2F•æ‡4Ï;�(ë …ÕÚ„fšn`¯¾}10EÉ^q v)™²Eò�Ê»žu‹ ov?¨ÁHpù8zuí«ûQköu}(ëº)ò:$=üx#ŒÓq+¡Èoï¬3¼,qª'Øeâ5OG4©83@ ãíÑRaOù1ÎÉê¹Æ£ÊbKpˆMpúÛå¹½°*LýW:S ³¬Î +‘¼vÁXDsUÝ|‰gÙgI¿Š/[ÌDk ±'º8Ô’ürظÙŠÖ°—1›JA u®;�Töd´pôúâG"«l¦™•(¡áÍ{Ù›R-Q;~B–Þ\kBÍ" ÅòéCô“ñÕÁTsGè…óèbÚ*/ yb4ª[4.ªÞdµ‹â/›Ò›I-RG­ÚL%ÖCOòV�êrþߢ_ßµþÔ�ĽïX¨�PN’ÆÂvù‹áW0^”6ç%Æšû/+EŽ×Ö—ån¬¦(ʺ ©“kr̤hŽ-ëtãÇLè“÷Kòñq¿N5]òî‹È2“æ_3 ØFÍ;Aih%u.³è/hàÎC˜©«e±Û”ÓGÒFq¶“‰�ÈXn>;Ü%¦>9€Ë‚ +\f M úY©0WßY›5NøÕ^Í£­q�¿FE%�O*+¬¯ÊÄX£�õ‘MDK£4áj]DÏñŸBÉh�‰Ÿ|Ó2›ñµ:;L êÄ`M�|ïN œø£ \`sòÓO}'ùµ R¯¶|Þ˜!—p5 +­>Z™¨< +®øP˜æYLb#ûâìè-ï{óÚ—uqŽºs”‰³;±½•¼Ç´ æºq„�7 3ž�WþÎA-ÍI2EáôzŸ¹Ošv…�ÒÃTðö}Zøh?Z¯z‰ô(¼°?x�CMÍz ùdCH`JašrkÍŽ¼‘jìÈ">#µ*€r¿�Ãì40|Õ¸ÿˆŒz¹…š\ê<~`a )ç€>Ñ�(ê…g€š\l�¬É!�^zY(¾Ð&—ÿ›ipRë¯É| i’m~"ÚRÃ÷0ÙyÛ«ê4½G¼Â¦ZªáD¿~ë{ãäz_CQ8¹¢µ Üž\k¨Zz=¹žû¯ZÚÔ«Áë�2‚+(—Ì8&Ê5pVÁ©y(×ÿϳ‚Ö}ÑöÃhA¹V–ÙfbP®ØÖ¨-”ë5mXáa¡g`A`(ºsv$ik2îÛ™ ›Æá`ÈÍtå’)w‚Ð5;X(WJ�ç4J(×êWNs©B¹¨D^ÌØ@0”ËY0ª‹D(×ÂûÍÖu+”+—©LC$5”‹¶g‚¹*…r•±Ÿ� A åJôÚH \[a<ÀÓ ?”«˜RœZ¯$” y‡|“Ê5\AOö’P.;ôë ­¼Ê/Ó»›! å*OdÍ€´årÿ°Š„C¹v#‰o(W•ÿ€iÈ‘�¡\Ånñ4”K<ðAåÐL®á2'l~! &/êW¥HÖ:x3Ê•ÿg\Äü¥XR®6�ž]„B«k3Và”�›¨œ;H•VC€@0¢Êˆc�Á™ ?€‹‹ÞËP)V>Ò˜šÝ=Sòºã¿F°Ýœ�÷eø±áí¥¸•B»P†Äór¶ñgJ�ü·�y‚“Byˆ& +Q³™àG6±ÝG$F]¬€ µ‡„)l³âÜ‹+m NDC¦eZ€§i¹ÍÌØ@ͬ„“Rre÷>BÄi` TYPçÆÜ,’\h �¥,²iž0 …ݬP:QyëØ&SÂM›éI4ïl=‰CQˆºÏ¤åNÆ¢(>ŒýÃ(¼’fI–Iq±3be·Ì’ £‡(f9)V‹aI)‡Q-4JBˆAEIôP/S±Ã¸Ä(Šq˜ä4‡áã2v1¾FDÓ¾n¨yÊCeB�P Ü·�«›|”ÈeuÏ"O•lÔŠÓÛïôwÓ§ËóD²n­÷lþ…k_·ìæo•øsWWØ6quow¨¶N5- +C�@ r"@¸FÆË"‹nç˜ÆšBÔºÞÑxkD*VZ¦Å@Ô[Ü#ɾé•iD–OåÚ%D޽’¤NE1LR¥P„äa@ä2j*6m§�öKB‚ ÷WƒØäŒEU‹—·êlL¬Ó@\éýˆw¤,&&Ð,ìþÁñþXQ?"´kDÿ? ªC#§½aT5=cí¿µ´ß9 lÜ¿Ѿx½ø—è/Š|àËþ/í9öoXœ a?¸—ë„`Ö¸RP‚b›ëù4WÞ‹ÂW")IÀ‹ï×à]7ëñ3µL½”�zþ'˵5¨�¹# ïghyp-�ü¥F›tï(¨õæ0Üá7L8 ç�Ð…óÓÂ(˜ââÌiÄVÛ@cѤ@íeÄpRn± +å +ÊN1'õ“5§�([èÅ â— ó†‘\Ð#bd-þ\E‡oÌs�KœÂ+ÔYÀM–h¨ê\"&+‚´´«Nw,½…S `}/v¼"Ñ3*Vh �ÐÌÊks8,`*�‘Äá£bÁ×Qâk‚Œ,AMÁ:‹TDQG* Z„ Š$&S#"¿©®²Ð>G£ÿs/©» ªZ�5¸­R.Àl»”þ¡ÊÄà@ËĉçON£¶œÏÍE­ÃD 5êÆÙÍâ½ÀvÐaï|­wºÖ½×z'œþ»¢ñ©ÔQ,”‘»RÌRÈžUìAÈŸT¹yÖñÛ\r¶Ób�702oЈ*RúT}ý÷Ds4á*rWàbȪd¸Õ­àòÑ©6_–ENˆói`;²ó§éÝ›ôë”Üõ­¿:Z(ÝËä“#g PƒªÆ‚; ¢l™*Z t’¢,=”UmÀq ÕÐÏOîN­Î÷¿pæ$<1hÈí”Ô¨ˆ*§\o`»8*UGfóZ"zŒCY"åg JÛœó÷È� ÌŒ¯\y@Î�f/àY·:Lã váàâœä Hñ7ÖGÚDµG¦¥¦l•F4þï  †¬F¾ö"R=é¥WÄþåÃò¨:!xWˆN+$ù#XA)íÆ*»8U¨‚ŒCJLæÞ¦ð¶ „�¾€MäÎ^Ê_t†þ‚|çg k?d8+"PìA§àÛÉ*-­ —TÊßž1£Â#ï2\„]üš(n<q°>,ÍîìÚÉ�K”Çéñmeaé^S‚|‹Ç82«aÞŒ)¯1� +ç—N#¤\ÞéÚÄÚF¬ÇÀžtïŒe鱦¿ìî–E–lt¾…¿nU¿4€DÕ´¨ÑYØ; õµ±÷”å¢ô¾¥Å¾‹jšOG”4€�Â-º‰µ;xNïÛºm>LÄKNA”Çñ]×�K»þ âµë!ôéÄžr7˜*˜Sȇ׋ßA÷MÆ>èq5µ¤">9‘L™¹«/ýþ@}í‚JZù«u“ðì?Úå˜ PKšbh=ª¼m“ßÌœõ�áÝ;SJNô« ”�ZѨÖ¹°™˜Ïç8ÇJ,óYÙD¤«K¹ÄCª’ɳäxçÈ�·¸˜·|qTVVž4±—Çâ@ìæ`Sð +EÁ¤Q(Iò˜¬ªBµž9œ£Ï$ +ÞÝáý0ï7„x< MøB¹£øs¡@ (xqücº á�Wç"ž~W/Ÿ4�îÂûv–gOW&4±è6<fÊå²hòËŸ¸²óþeÎ�oeÉTÈ–)š2£I«‹S4gBs–œ+¡ÐÜH–^)¢¡]:)ws‰5óVºcr¬Êy;w±º7ñ+žëøNë`‹”4‰ÏWzqÐ-±ÐhͪüK z- wZ¡ E�¡àôY +6´å|‚Ùüpð)u/ +\†G/½(ºÅÁkí×Ä4g¹g-#L:•µæÓ’{»}‘šA  @w9U`ù>@^ÏÈÒnòˆ¾vP@˜&-ÓÒ˜9N¤ç¤Ó…Τ'zNè²G½¼9]»—�i”²óKøÖn¢n| ~3SÌÎÅ—�HI&¸ƒEèaï i¾„ÿL ºÑ¥M¨ß¼„Òo–zfÕÏ…šCœn`b †ÍÁŒÓŒ„(a€‡ñ32 &ƒaØ�. ÄAeH â ìÁý‡v5ià á@`†Ÿ^z–5­Îd¶i,å.) (¯«ÜÙ†�ä.ífù_Å·ZbU¬!”²“TIéZyeeË©ôIVŸR­�dÎ|ÐáQ=x±;;âpw5%EuQPßwO3e.ž3ª'kÇÅ­çΟNŠS®j<¤”»(cRV§•./t*�­b�ìgˆò'µÖ‚Wê/äº8Zë{6ÕÅ!DzR�Ô:uqÔÈd‰ìBV”©º8h[—e=�\Æ.w¬ÊÄÊf¿ÊæL–ºhD1ûzyÁÎä¢ “¦2«~Ûk’Ù´Ì]$ŠƒÊÊu¡*Q =r¥¼,±¦aŽ…ê'Mߪ'N¥”(GédPJuS�ÿ©Ê‰¬V$rq¼ÆZæYIb=¹8ì}›P¹g2æíú[}f)ÍÄšÅA~º¤Œpì—¢©{ÝLUã�ò·nWß®"[Vz5ßáfíyåû�\’or¦°ì:²£lj„%-2S–ÉEá¬ê +ÿÖndN}ý¯Ž˜ªds;™`×K,±#Ç­.™Ä"ÛmU„–N.ªÊ=¥ª#´Þ»kSeU'™“‹ƒ�HOóP!_´bMF4rq`fdû‡V�V'§«mèzC× +ÎõèŒÑG®ÛÆŠ¬jì}ŠVTðššÑ8éñœl¦sˆü³�ß²7qšG4.:=sÐŽìcøº0ïšEéÏÝþu–7˜3ý½SQÚ÷ÚxÍ«tÒŒÔßÿˆ(eþâXèï�=dïß¿FV¶”ûë³ÎÜKu¶¬´ÄWR�ñí[$³ú^³zçýQÇ9r|o>E:~,ˆo•hp¨f8Gy³|®W£ëѵhñš=ºú\ïõ¶žÆ3»�Y®ÊÅQG'‡Sbz–íâ°¡dËTåâ �i¡#L¡ëÕ¼â³Ì)Ö=�X¦`ºPœé”ɳ)ó¼£òœÙÕeljç-t&±«Z%ÿÚ1ÏÅÁœŠDAQ•”ŠŠ* ï5š³õ›e�×n ïÜÛFæÅ+Öãâñ±ëâp=éŽI$ùº(X‘Ðoê`Ð/K³­K”&гucÍ15M ÅsòJ;9ª]°™yº7é~™>—\Ú +Íú. +hÈâ)'õd1_ˆªc—'1*ù숩†¨’T3ªLS–!��àN¥Y�¯º¤Œ)4WI¹´H&ëêW«A—fˆp¦œ¹¿ê$`sÎÞW#³™fÅB{ΜDMË)˧Y•aÔz†�:ÆÑ‡3V6Hžºâ@ªB¬•¥ï¬2†0ñª +=¾6Ç8R�W‰÷Þô™‚ieG‰«Ž‰F@«kR·ÎÁ4�@oa +š•qˆ8 jHÒ``Ü�ÂÀŒ3#q8XÑá J?�A¢‘fHqÔ »,£ÐPƒ�¨j0Ã<1Sd¬ Œ&nF%ðŒD;v%pÓ·N 4�Íë¨+bºŒûæè>—Q‰HXò�P�ôtÌe%4V•—F ›,£p€@NÃ Ž£ƒ‘†CVƒIE†"â@CT—˜Ï}Ý8ni$|˜�?˜a@$^ƒDaúyK“8¤á<3°�¥$šlD  €80h  €@4P€„I€ ‚R"ø±4œEã›a¸1CÂ6`sä�Ä¡i¸fÌÁP"z08|„3ݳVcTWxצhÁß„»¦Ê¨)œBOÍfñe˜ý—µý¥€�•‡&¼ÛÌüÊžW6waÆY£8  kÐ5ª©Q7e–;k�~5Ÿå•ùæ—™Ã$×H¦I.ñ\©LûÔç3C[Y�œî¦£1¶I•-¹œ›#™SJ™†þÑ)ëüë +ѵo!ÕhºZŒC¨DØÒ&¥Œf@c� �IÆó `4ûª604.$’Æ£ÓéLTRÀÀ˜€Ì$ üÙ¹†!Íê‹eÍÞÈ…ùäy̥û>ùYÒÜJžêP�¸ÌéG–ujÅÚj.5˜‹u@ÝÔïe +ˆ„túuB{°«ï�™…ß¼S¾÷³Jãôàiކú¿Õ)m°ÂüRµV§ÌÃÁÿzòN…†‚îéâŽz²S2V–Ñ ôN?Sò<⌦;o½jæ~BÏoä—9ñR¤Å•7IB…¹™~Æ'ì!°<™%àV´Ìö +WaÅ–��댅º�±Õ�Õ(#¢©5±Ã˜.dÀuŽýßUóWÙè±—®£1‰˜OŸôùêÂóà»]>= 2DÃCB>Q}pF'†ßŒßôX<܈úÏ� +rØ,œò‡¿íÞ07´?¸´slî|l9œ¬ý™ü‘M:)ø‘¹¸ˆ Â1bnmaB—äÐ7„Â�Iv`™#‘6r¦LiéŠ#Ê¢­ƒCþTlŸ‰3�p{5=üF“^=¤XÖ£¬�?,Ǹ¨)H³Žç:’oLý|°¿q]Õ§‡o§‰^%jéWÖ"U�î„Þ­©gKLdÜÌ:¤7—á§÷5áßÏ&£! p£," KŒHßO¶ÈqV<“A�ÙX2?–²=(uKB;°kº%¸�"Ãќֿ¤bR©÷ÆO U=±Q§gëwœÁØNOs\·kÕ.°,¶ z�|tTºÕµ-/–*�ŽièëµÓEÿÈYl[z cŽ=vt=z£Saó‘k§VÉOe€³Wó_f—$œ +<Ñ<ŠU�‡;[£Gb!ƒ[Q’Ò¿Ðwc5z^ �œû¬3’1„”›Îf!áW•Àé€àP‘(…Å8B#ÎF¶Ò,‘ž¸ý£)áØIJ]‹slfôx«?¸Ú­Qìy 8¯â*®ÕäÀªÜ‘à ÅÓ)¡ãc+ŇÉß¶bWY0ÑØOû`ª}?¿ÌšÿÒЂƒÞÈf2 Wn7Ò\�¤ô¿GR£ïÅ�›´ÓGÎV0={}«îë#Áyƒ¾¼Å•⠃Ηgû/8)­©rOOoо7i¡}+ôãë@Ïæ¹ëYZPË:‰¢˜Ê“Ú< Ú�!=¹q²‡Sig§ž¯co ý©X$ï,ßþGu¼1ÑkõUšR’Û Æ~ˇ0Ê<}˜²âîkÒÙé‚öFdxvw$h;@Õ‰IØ#û¹Ž~B{eÒ¦ã%:œ�zÚý|;÷˜ØÙéchtã¶ÖÁ/’¨‰©,v§¦º8ÏNëJ‡µbw<ñ ?ä€nLiX~›qóð9¤ –;�΋§füýSÜó+³£ÿ`“‚‚«<=ìB”›<{‘Çb +o^)8;5|¾´^Á'…LN9ŸXðÈ\’ÍslÇ +6”9;ÝùðÇœ©ûÖBÞa²sÞž#¹£~Ì)Ñ]úkÓ^€bÍS¨Ê�>/'ó7@˾iwÇ ÁT�ƒá‰àEñ:ý94fŸà €'}·S4rÎ¥×Þ~÷„¹ø@Æ(ó[´ª“¾¦ÐFWÊïZ©3c]¡§*Êk¨4žÆŒK¤õåö#JÄ¥¬³›»¾ªk¬<»ë«‚.>®’)H�(Óx?+¦É$Êõ5}̾nüÍV&Ї­Çq¦t눙ބ´¾(5ÝpcÝp4u|mº*lž—ð‚ÛÔa»üÍÞãmÊü¾Õ=öpm}¤MéDÜã| ßÉGÌ,®Å˜àZèæšÐ&v¦v(gŒý�ËU ²9�_¶8$iz“¬Œ#ÙUH’Œ&Y™O� Éãy}‘%”Ȉ6ŽëK +ˆí­¢¯¯Ë»…Ò”Êæ uᦲ¯/Ÿ°B{ÒÓ�-†FyiÐQxÚRª«÷J˜%32Q;] Ž÷ÔJ u¬â` ¼ÇŸH Y-2n#cgÇs�/]$:ÑÊi+IÃåõå \Èw«¢p_F´[µâó–ŸÜF*$6cÖXïN¯/¥"ÇD# +TÎT] |uÁén‹±"½—ä¬ðç[¤)¾_¤ÕÎçÙ¹[_Í•_ÃÖòòƒgL˜(NÙ u5þ�ˆþX_tJ¿*'ùí jĦÑRì¡ /Ê (›Q“!⌱aú!ä»À�'= l‘nC1•¤IZOÃ)  8–qI‚•¹¤•ZÂesl⮯rÒ|£¤\²r©]Ò"?2·�?î§õr}µ‘ÒãØÖY_yb#³¥s‚âo__8�|év‹O|¯{ŽõÙ÷ÈEº�ìÁë+̆Ê:4¬/¹¿l/Eë‹Ï˜9—òúâÿ(¦£·¾Â_�Ÿ ÇŠŸõÅB¯hNQ]_”ÈéÔ__ôÁìãœðú²Kœi_öm}ÅùÁvôèÒǶ +c•,º»tÞWîå×—,>„í¥½¾žèêò¢Iÿ¸M]äXµúl}lëÖsðÅÿõKס_•Ù1×5s:8¾¥Õë‹o_(¾CÍú"_6?Çõe•É4€Óñ„ìq}]r•D*±¾\¡Ót§/®¯Âó€ +t1H_ÏÃ,;±Sëëló3Ïúp}v&Bî7qØhëËoÓJ,ÄõÅóîñK’øTýĺ¾ uN¢¬cë+ÀHõôÓ¶³¾ŒV©ûÞèÒ¡?^_Wá©>g{}UwÊ ¼¯/FHÃ%PBG©­aÊ¢ÊSº¬h¿º‹ë«n‚aŒFlàóú"²d·Þï­/§÷R‚·£õuQ�„ÅÜt}ù<í\_"VD.ý¬/bº³ã.�¯/O¹+n¯/Nò#šõ•—NÒ”|ëëå…Y•ôëëE=ð°8a×—ÝuÕ6 ëËýSñ`™¼Ry}±c‡›co}1öŠS’×8ðE»¾dÖƒmyWëËÿôR—CwZ&×—voŒåäbg g}.�ÄGå$Ì[�‹òÏàÂÔü§ó’§tÝVÐM’cÜó^_žyîÇÄ}ÑÖW8HNÅž_œeYiµóúÚ—$ƒQÔÖÿÓëú"‚,¶\î­¯ C¹µºõuÐ åÕBƒ»åÆúº°®NÏY_<·ã>"kG¡o'åú"›svǺ1? ñËÎæ˜ Y_l~ˆÓõEqã¾ãào2ÐÖW;ßÅij}¹w‘õ­9cк¾œq—üÀ°¾*;€®ßh})ñ-›Ib}™f&=¾ª²ëk&Š&±lʴשÄ:Î)ú”›²¾‚\Ê¤í¡§ €–Ï®³ÜZºBµŠw)þ\_—%$³³—õez*úËû¯¡\_=ƒ·ÜöõåüOûã:shÜúâP#ÂG€§íÿ@Z_G7XïØ?­¯<C]¨¬/µ¼8‘Þš�f}‘ûÛ2õåúº~�¬ô +/“:û×׆8yX|}õ^]$î–×6ž@:…=;Tæ]¥ü˜ŠzZvFÐúêR¶œ +࣬/R{Ò1v}•ÒëÒ×¹&nÒ¦ëKj! m�%ax`Æ£·¾ÄRuŠDà0Q"#¸ýò’•§së+a¥Óc!w}¹>¨}Ãy¾�õu›WY%0²¾È�iÿåúzC›¥ðæE­¯æJT VÃú +^ ‹¸�õeÞ²¨ðm‘ëËiÀ…F®¯lL䧆�Äý˜Ïe_I«té¸lÍM D‰ a}‘;K†4´¾|ãç.na{b²ë«èašu}!Ö×— +­ZX]_d Hø[m}5¥¸Æ¿hrn£(^_ÌV >ðáb žžÍõ%ƒ%Ð%¿Ó{€d§­­¾Ü9(g^ߦÐúbU+­ÅìõÅ_·\ÞÂõEðôŸ…?Ë×—­táìºÀ^_èþ|á¤Ç¯¯Þ-Ê¡ÌR×K?U/äÚm}Ý­ÍÀ]­²¾dki +îíÈ3ëëŠø0ûõ—ë+Ò|VôÕ×—1^×ßÛ®¯ýño¡!œ˜¬/Ž)k€y<ûÖ—ŒòGBh�Ò/Ùb®/K©¢îY ýúzð/úbÄi·¾Ä¾ntbpús¼ë+:>ÀÌ[8ºÎ�˜õå¾]0!ª~Ö×ÝeÌ•†KSÖxV†åeZ_#O£}Ä®/×W¥‚%¿©+?Òú¢5Ö€½³�8¥*Ú¶lcmžy¼–?¸ŠÈ©;ý¢Ð“×’^üq/Û¼çˆj}EÙHܧb ;hk;Hùq}Ñ~¼>ú*>¬¯øÔuR�][åõ·Ìò9jw.ïíµ¾êïÕfQ«âúBó„ݸ»¶cÈe¡Ã¤`‹x\_ž1½‰‡oµ¾*‹�l©úÊH—Ô:‰—*$L,]*$Ö¹wŸ‹äQÖ~Ÿºä2ÏvÎæi÷�4f¦<·Œ:)½tuÛq£â�±S(‰0‚Æ) ˆw5Ý,§‘gvõùm€N¬>ãh½ó›—É~¨k�"““ +•1¸b;£€uT9N?M7¿¡‡·�þSÊ+ù‰ÙuËœï—`pNÄÖÃkL"fƒ6/ê¤1Uú&ßP¢jo½ÆÇBzË/xz";R'ÖÆß¹¦SסNªf¶†yqÔ×ÇýŒM)¤CÕ²×ý4óSÊ•Çl7s|Û:ßÂ,%ºÒ­Œó=š²Í]œY°7£c‚c¦Vš+hÐO તxìG kšB"7W†£ÐÈ!Óë›S?w*Å-Œ1›ò¢=¯RzJ?ú¸ø•記?ÓÞ¥êpJø1¡–á1']ñ¢˜Ø©²LLººÌà\Ü.‹Ô+‡C{¢íe¿¾@ü3;HŠ7pš2× 4ëT·�9(˜Ü¹!ˆ~U£�쑱dë„€ ;Sɦ4RÐ Ê1`˜¿m ž=–¨ ·£›ˆèûƒ:dbs¸z³ U;æ +ò•\Tþá°R‚D ´§D:ñ�ŒFýæ/Ê›@ÿ{1Ã!p6]ÉX´š×�ÄPóòhh)Ô 3`?:’–Ͳ:I£B3aû—ë$ÍÎÈd̃õ IÚÐÜÙåÅ.i�\à>‰™MIëFü‹ªÆ:I[Ýá’)iRDÑw¾s$mPa�•ºì÷Ί£MÒ’hËÌa•4q½àös®¤MtH�´ +mp�aã®lWl+i´Õ9NÍ�¤í$+8sÛM%m# ƒ0VjMH%pœQÊ¡t;ZI#f"¶q2v¼½NPmáÁˆ¤D}Æ6Œ–m(åÒ®ôÚD�æy!HHºÙPçÑ[&w.К€ÉD.Ý�îú6ê˜%2¦´{RÒ•òGc#?ô‘Õ§¥²‡-þôE¶·&·)PÏà²É6‰x–ߨ;ë†V~�>§Åqõ§n¥Ñþ"0AO7WûùÿdzQC"42QzcÖSz!nóÒeñ�w€USº\¨Î´-Š4áõ~ÿ[‰ˆˆcÒ¸»�G§N3ƒ‘á\œ^?*œ-Ùyó“n ßr ™Ï§·ˆCŸ® +ðdµ’]³ëõÖ†îUzôúŠà\ÿI\*#ï6÷ÿâòqŽþ;¨³�Òšã»Ôo eeïtüì$Œ¯·ì;�× 7¿­÷±â“,™¼yøª'z½äw{H>³ôÙÒ¡�È�x·î©Mí µ”vœ¯âDáËDqãŠeÃmé­Äí0cr\µ�àN�Ôq¸¸ãÌ•½´•Tö�«À8ÖL*¯ÈâiÀ"A望Ež'¬q“iPðgÃ=•ŠL˜KóM¶²…ÄþH§ neáùö�òjöRT€Í]І÷Ïös¾MbÂ7Ò‚X3DY±»Ý@ ÛJa/LÉâ‚ ï§¢>N£ä·ÊžãkÝ ò§¬,]K2Ò�"ç˜Øºœ=׺™1]XÈø ¸úQðFkˆi‰æçWºQs©>W ž´®…p>ËB˜ÏÂG?7c©Áû5„Ž ¢ôíæºúÂ{¾íâç@…ÓÉÇ~$Û~јÖ,†­»§:_ùÞ O'¶$�¸q?sÆi× aÄ,g$#±Ï¡ž a¬ÀTàjNV~êèùdH* ï6�ó¨,ù)·¼Ô—U[îãMÂ'm=~NüÀ5±q™ßXiB˜éË&�èÿW¦‚Xr‹ZiÃAF×Õ B ƒ�yì�ͬ5¡ô…1S.v8r"®ÿ#J¬•üUÉßD¯™]WËl±¾rÿf¤žßéú€iŠTCl^.4?ãÑàêoãLáL²ØWýV5Ø Í1_ ܲñŸ¯5Üþ_ýð«Â°úõËsÿ˜C%�;k:˜èÈ'Ìs–vº¨î‹Üt¢B<Îhi£Ï+×R ¾,ÞQzܪ Ü(ÃÞ[D;N©À÷$ föø7ÎÑ Ð14„ÿN�(MÀ»„î�C\!Üá>ªÿ—”+L/ú¨‡Ä¸ÛkÊ‚û¬wþñð C?9 É�lq忸Oqó®·w!oˆ„ëQDñ­yYÒ1ŽëÜcbR×> ‚ýRâu†Mé*ŒÒQ6(š±—×ÑOilµÅœåÅk>�‘ +5¤BÇ1›£ ùÚ° °º2Žrû²Ö#r¼éð£Ù™*X¯LVÅÙ'úOŒLw+lb8 W˜©£îYäþ‰ªÉ ¿)DpÁ( +‘=烓¼†0¶Å £yáFúµ7Ïc åE¯0Žèr·^÷ø©ñ× J*Ûl0»Ú´É¶Ì¼þü¼�UKÿ‡X™ÇÄn]CW[ðç•xk3œƒC:À‚µã„ì¶ñaÀ(Zߊ„”¡K~ozA‡Elt«ëßcoѱ‰ïô5gÀ‰±§Ù‡ÑP¢³“ø–0¬+fîj¦Ý¢ öSZ™ómáÑáf›ŸK¯¾"­‰9ÝD�ë �2‰˜ÆšàcmÁ=ú»(°â䃀à²ùHÔ"WQ¨�éÉý|¶þá‚ÏÐOFöKµ®˜Z£t`>.ÜXüØY6 �ÙA$¶å_±ödѱ³9:ŸÀªÊӧ혭afª{³í7ï–0” ¤ø½‰¼X¥8mº«ko%NÄÊTk~Túƺ)ï£kU{Ao $XßUëM¦ém DM-vŠî§¢°»³ìÑýæÄ?­ßI©‚¬ѧ‘ºëw½3#ðäìkÿÆú@2ØÜlWggá‹X÷©Ô0nwl"zDÍ +ï»Po_ÝLæ ®rmÞN<ÐO))ñç—„N欙˜š}>ã%Ï”f¹Î2©i9¤³Mñ ]û™y'ßJ9Q�ÿœ5Ôì\Ú,/]*¶]ñÝåç‰òÓ£ç ‘z0–·k^È(Û¶ŽîÖßâÇ ¬ .e>W�\­ûXêA9Ý]z‚¯_`žâávdL¡IôìåãžÏ}ͬ‹ùmB×w:È+ùs5¸ŸŠþ ó'Ç‹s‰´*¶Dqº-ˆf +lW ˆcod"–NnÜ”¡g='®æG¤ØÀ9‡‘ÈZ^®¾eÐç¸Ö³h"΄4¢£xpu•˜s¹±*¨r)É§Ä Nkè¬K¿yYüºãmˆÜÑ$ÖòûŒgĤ�7?S E£TG¥ŸgœB´ƒÁU¼Ä8k½§|ƒ?ê*ªfû꯼^r$QŒ³Î‡Ò7¤ü¤ùŠÏjÞœ\€dHÇÁ¶¤{qεzÌ¬Í Fò¾Ì?Ÿ[ïŽÛEžv/Ö.ÚPÙE«é´Å.Œ™Á#�"�:%¸OŸE%x ƒã3*Âçaå8…TQve²HdŠ —àZ\©ä]gKo!ç#ÆÙ¯~è\±ï`{v®V€á|gÊ«WóA|/c9ðÃX5àýçó±å C@e|â»ùnILYøÎ ˋް˜/4ôì!Î<Þ ^Õl¦kRïìÝ‹kqÅ[ÈÝ*î¨è˜&/sª…S^èAlZèíµ:Coˆí:P£'ŽØ·w>èVË›�Í[é³ÒYƪ`ú^×Û^œ§L©§<šÐ\×EóÀ ·žd�lc*z*ÿì‡H7ÑWÜê;ggr˜i[¡7He¤tjLø¡³«z¾²Á8OB:` 2EaÈΪRþc‰ËjìŸI Š„`½w6«Aר@n(RÏýð]’Z£\¨÷F}ŸŒés°æL¾ÿtl�1úRÿ<�ö¤‡voP—æõDPâ³ÊNª”>Eu—ÄLÝJ¬ÑlÃA‹Æ8) €ôûy=¯5…k콸qǺM±0¨[àz¥ÅÎÚTŽ^�ì®êo�Î=�-rŠyàÒä;X�h‰í÷NkbO!I’”N;�u›(ž»±*öÉÎÕ�Eb+8/Ê?‚`hi+ +òN:§ÀÂÛ�L¢0™%µRyGЧ”!YüPùø›7½¢�Ã:_§Ë-ö'H8�gMAþÅ%÷âSPJ_¯!ªŠürî­6 UÙOÝù/1¯Q¬¦fÌù^�tÖÂßA{SÜv•&mر×mT¦×¤öä¨�ÅNxÊjè¿ßN®0Õ­Ïá©°†|¦‚ƒKÎ2¯-P¤C¸ãæÖ³¯�e­Xà²Z ®ê±š’µ’%l|€‡švî}4ÉÈiDÒ˜+¬Ç\ëó_ ê‘‚O.CËvŒƒ)ïY –Â×HЬÒ^(ÑÝx/Ör£ÞFAj–·ym¼ ™¥H­¼¦ÆMèúD®5Z9DÆSrÈZ¨Æª9ŸÒÄñ™+L4XשǼŸ_|W>¬Ðêªæ9 ‰Ç/AÅ;º}ˆ>çg¦§>ÒeÙ•ÙH…œEQ »?Ö‡ù¿[ —“m'·Èš3–Í-$R⌬ðOv²ÏÕgÒ²Y¤?›ÚÆaAdûïÍ öWx.If­ÞW L +…_vöb(äXÖ +õÑà”²¿×6;HcmªçµÒô™Õë/8hÉ +ßñ,ëµ.)jp[IÀÁ´ x¬ù/Ë·uªù)S €üPçQ~vTH®œ“Æ(uŠb¬òС +ŽLÇYG—òáñi$Lc'·$¹Î'ô‡eºº6Ï%óû '.ýì€Æå¦mïz–�3$ñŽÜÛ`!)ý VÚXV©ÂkºÓWYçáU ) +© •äàIf†%¨_´¥ùþ­ŸëËÁú¬þ7<ÀV�C1„î«ç¯òrEVvÒ­ê`4ƒÛfÃ:¼·é½�½Ù$-¨ÔÏëÞj�Õ„|KwÜá»w# ´�ôlÆfÞ8µ6Ëö8ñ;9íȽ¯}Ý�Íœ Šx—Yüíñ¢è ¡J/•!ò¾œà§+%.VM #ž¡U“ÅÃî™2gþæÊ‹bÿŠÐ»Ô rÍ •Y-‡jˆæ[Ñ'±Gœ{]ÑÛ6žqXjPeC@‹Mµ2Îsq.J3†œ#"Ñ[Ô/1�xzz¬”F š-+µ7‚úÕÌ…¿…¬Æ0f»N"B«$ÐnŠx) +—Ó»ûηõO™Êðµ ¾úv6îí⌛ëÖQùç0€Ÿ¯)Ï;à‘»dÖ‡?ÆL—çüQ%[w˜PŒC„p–\<—ç‡t½:mü´6`QÙ€,oÚÇóX û�h�ÎY7Z¿x07DÍiÛ)±gZS¨°ò qèŒ÷e²-ý‚ðâ{°aCȹ¾ãÂ&´æbJ®^Ifs^‚›Ò™ÍÔ7c™±îaJ¸ý±ˆy#lcÁØâ�äjÝ3>”<ð ÑqCÙUÍÝ%Í  r‘‡q•QÀÃá1ÒÜbv°û‡+�ð¼sÐ×N¾¬a ÙÊòðuSrÄIlô©Î>U�N×|*·éé ¸îEÛ§ãDÄÁÅš(SŧŽ(ÝãÏÒ�ìCRyôÆ8;�O¨2¼Iû>ok踪KÚó¯”ÂôÓ ðžED¾àSR\Ó‚ÒÍh‰P]ÞÜbnÿÙh«ˆßù¸YÚ-œå6£½g$EœJtÚì˜<Œ×wž±+�G·öm +{Žy^mônÒ€K3‡©ˆ¿�¿/a�_‘8û Íöüx¯#î½Hz¡ï¼ZyG?rïà Ò,>-X�“0@d‚yˆ;Ýü”�–î=¥ + Éçô@#>ÓÂ7¸õÝã^ùS·b÷�î#—'o*ùºµÅ³ï1&Zë°_p™×�,¹áCÛϪ{ø|&o~³£–ñûL~'#—ÕÃTPýOs8ödàoØßQýÈ¡é"{G0)•_Ó€¸�C·#ý{¼*fE+›40TÉïØ>o¿øObçG[éH@Ìʉû°ýÅ2¢·Ÿƒ{m¾¼G¹�¿Pý†ç–fc´€J¾$¾b$ E¨ÛÉ„8@²1î [¶ˆ]×}j ”ì+ŽŠ¼CO­~»0xüi, šQ[ä‡Qûãäx!MÂ+µ¾:ìá›û¦"ÞÒæU F‡[p×e½ùýjI;b(¯‹¿~jucÖ«¡ëºØ„ýÕï¡Õ©qZfõ®W-‘v,;YTÀLkwjZÞÒÉ%ÈHØM8©ßâÙ᦯ɨNCýqA:V³UÄC‡n2 +Õ#/“W¹Í0Î \[‹DÁ8Ôu D@ †ÕyxOâ¬ç!‰VŸ§ c2PKÒÍ´þq6üöª’’VŠ.Û +S¼¾¸5dF­wü¬’% +—ÎÓ�þBS<¹/A*WÈzsË`þÁ­›Æ�p)¦íC2ü+ÇYÜ‚WÐ>AÔ¢$³ +  !  +!#%(+-/171/-+(&#  + 047:<>EDDCBA@><:740-)%! + !%*/48L\l}�ž­»ÈÓÝåìñõÔɼ®ŸŽ~m]M?2'  )4AP`q‚’¢±¿Ì×àèîóÿÿÿÿþþýýûú÷óïéáØÍÀ²£“ƒraQC !+7DSdu†–¦µÃÏÚãêðþþýüúøõðëäÛÐͧ—‡veUF8,"  #-:GWgx‰šª¹ÆÒÜåìòöÿÿÿþýýûùöǺ«›ŠyhXI;.# $/1N^o€‘¢²ÀÍØâêðõøûüý²AÂÏÚãëñõþþýûùõñëãÚÏ´¤”‚q`PA4( +µÃÐÛäëñööñìäÛÐĵ¦•„raQB5)åÿÿòìåÜÑͧ–……úÒÅ·¨—†tcSD6* *6DScu†—¨·ÆÒÝæíò÷u‡˜¨¸ódv‡˜ îUUîø!!88wfUFFUfw77 T홇ve˜‡vd‡udTD7*·¨—†ucÑÅ·§—…tcSC6*þµöëäÚÏõ¥”ƒ�ÎÚãëðøõðëãÚ㣓�p_OA3(n€‘¢±ØÍÀ±¢‘€n^N?2þèà×˾¯Ÿ�}l\L>1%»ÉÔÞÞÔÉ»­�Œ{jYJFOW_fmŒ�‘““„ztmf_WOF>6/'! + +  &-4;BIPW^djotx†‡‡†xtojd^WPIB;4-& $*06=CIOUZ_cgjmoqrstvutsrqomjgc_ZUOIC=60*$ + "',17RŸl5{å[ù@\�Ú@*¥&$¢šxæÓ ºc"°M‡‡P)Fž¢ca°,+h{T ˜ÐàäËCé@¯>­—4ê¥|mf‘’Ìzèè!D¹Ö¼SÂç¹á1ˆË:D¼ü÷E�½&´TŒ�H·N¨Ùc4qn1 1ë(®:ý�›U‹ÀÅž'ùµÕH1E—^I©DâPŠÝ"~ä˜fpé7Oºm +bÀ#1ÿ¦}mnpŠy4téesÔǃô§dàT +†ç;2*ò;‡Ð¥ŸÃ.7‰".ŠWƒØ@­Zµ }„� ÿu!b*ÁQEÖ©!µEµ@Sù_¯§<ŸžTú”T¹äù‡¾S¤nvöc¿žêÔ=5ž¾*.ŒÍ?Ý×i™ÐMÐÚ·^` ÆMÑDaÞˆ:Àˆ�x Þ*-…Òè˜ô°ù›ªS¡¢RtYÏiSuð ]01ḓÃíä¡,ª+…sÑ@W.ÕX9(mÔ/kï1.L6d-ùÔ p24USW½:V &-2^!ÏAÛèó&“©¾L·ÔR“º’ÙR�˜"Ö×O6WE-ã,©%#�[儿R á�Â:Ó”Dgÿ¤bÏäÙ9Z¸Ž0¨!<0@:b·u”ÉÎÍ{ 4œ¥“®žPsg- a%DÓ^8ù¤öð•a{ŒQi'a:YI;9–C‡¯?}d›JVä?º±nÐP¯Ø§�Q|�‘=-ø‚w�“_Í,²Ýy¡ÙC/R+ÞžB½kì]¯©|ÒNe†§’!DX1yŠ˜ÕÉk–Ä áã�¿h‰áòb‚¿{0æÓ bç±´é¸Q9%9þF׺ž³sÍ»²ç¿Ê…àZ˜ §3„SM÷ZXñYan%‘x�™„ɘ¡4ªg¦0§bƒ�…v“ &â4‚ä·ŒÇÂÖ7†0[y¸¢#üë3l†ð —Ã|ê^óÉ*ãºüz0îHÃî@AþaIz8‘Þöóɤôîtª0MdÁ«7uuºëú¤Àz œ*áÄ�˜6®¯Ì±ðÀ°ðâÙ¸Åb¯IH_kP%qM¡*œ}Ä8û4œ=V&Ö,q’ÅÄwÄÃkŽG2„EQ²Í#t^�…&d¼¥Ú +Ú/xlÌ:ž?õ�Qή¡;àm]ñØ…ý¬W'ÖåÚ=›ÊÓ+KO™.ƒyêÎŒø\± Â& ~ç¹ûBoðÎ�øè ÛঠÁhÌ~0my”ÿô–ìq™7‘Ä+þÂÒâ}+‡-Ÿ‚ú#]�ì`æÖåÅ'"–‚Ë ø/oCùµþ~§ñ.š]ŽÃ¿ß?,°nø—"@ŒðxâÓ È˜<Œ°«�O¾):>1X-KjáC +l÷k±w²%Fرu +jÞvð[–½0»îÆ84sežÔoJêÏF¿¶š� ?a„ƒ7 N„éæÌïNœ«MJEÐzÏî¾ ä—½ãcy&�†£táçð'ƒÎ¨´ƒù*ËFÉ«yràZüVRca’Ûðœ{q釧ØJ''.(�­qB˜5 Íiß=ÕØ"­¤ž%SKØÖׯƒI+éá0(Ò–•£¾аZ5Gøûékµ¨o¬¢KéË:M߇°zAÏ"FÂÜÔ”V5_J]˜Ÿ áðÒ&Ï^a[Ü[ùŽãô‘­|ù7�q†‰Ãsº!ßGµáh×G"L7Ø@¤ïÂÅY} aÔM|çnß+ý¥°NP+œö,°FÙÁ°„0k¦Ö¾wTçâv‘c álV{/ÑÎ~ÿÁé4Z áçÏÖ"zê§„°»þ¬„p55'¥Ú{ 2Äñ†'OÈ“¾ï*l +D[ö¾Ä‰O™Ù!w„0 Ž`nó˜û>þÇÊœ i·‰i]Ó¡ëÓ ²^Þº 9ÞüHxÝô«¦4ÚH�", ï +¿  ˆðSŠÆA­<$UlÑÞÅZ†ïã:#‰»†)Yð8;ô ‚Ögîãýˆ ¹i~ã7‚»\eÁ¡ +ŒàNSY0¨ƒ3˜Á«`Á æ1eØ-¦ßZ “[Q3»õu6·^ãvëkln½ÆìÖרÞz�Ù­§¹¹õ:³[O3{ë5¶·¾föÖklo}ÍìÖÓÙÞzšÙ­§±½õ4·[_csëuf·¾ÆæÖkÜn=Íí­×¸ÝzšÛ[¯±¹õ57·^csëinn½ÎöÖËn)ì–+n…ö–Ân9r+do)æ–“·ÂvKao9·É&iÿvúáuÃF:,è°±aO ›ötØÚ°¯†=ƒ¼íµ¶=j}®È;r³œÓžšÈ9Ú` l; ËNZ½©ªwSUÑÂ5Ÿ¶côDÚÁ“MB9$ž‚›À(Ñóh\9&FôIîB1f=õL 8¼g!›U ÈÕ‹: ;_À¾I �xN(Ęò\�UיǼ89Ã$L~³¯J[d²Ðªõ'¸Và˶èn£AÞ*ùY¸çÒÍ"�%m+[d*ž�¯iåÎ$)Ù¨Ü-ó¶K…&ð«;Ò2 ’Ö£íñ‚Ï +`'9| +.eR’7®Š«C�’-.¥gˆ/•$:±ƒa`­Æ½WÏ{Ë忢KI²TƒÚ]h$Õ;"¿4hxj„&‡ŒÑ4Å!“/KSjh™ÈÍËÅ�„:˜í[L¬*}#]UŸ»ñãe>Û]/'\¦�hMCøM´Q_Š|$N÷—Ü\£i;�¸\¾Û—NËfm¨»ÌY¡¹Ëƒ7Ž�3î úùªŽv„òýu ‘˜@=.Zd·Ÿšº m-ªöè]©èakøn®éëÓ 0tðì�¿„6–_‡ht †„þT"öü.~[->¬Å%ˆïHEÆh{Bƒ_&åà(v©˜nöÿîÐ R µp¯ù֤ϻyxêŽÕÀýZ_X½_ë[T¹>\/Dh^�§öÚ+±ÌI«®m‚@Eµ÷~ßAuÜ™,"£ìLŇü1M°ì5”É ¹|þˆ)‘º1ÒK’QÑüxFŽ"w€ÄÈM7ŒãH€ÉȬÅèkæž±—?Ç·5è6²à$¥ø»rš=„ ñêÞ9?ß‘@Ò~gç ûœá$efKwãz5¾è3]ŸãËÀ¥sÀßÄø²Q`LhÌ s—·£«ŒÃ˜Nù‡€.$%WD¡ Ür—ëðê$èØ'U_ Ž7Ä{þ¨{±¨h˜¹Aƽ‹ Rc¦yÿpuÅþø”MU ”.½SwòŽ�þ4þݼ “‡ç"y&žö˜šÆûòiªÖèf³ç’�'‰f›ì„½3d{Å�ø:@r7·@-`Ü+Uóþw¨†×¤&¬(6Kýc5'ûÆØL‚ýI¬ÁFÑ©Ÿ¼àÄ@YT�™îÕG–Ò¹äDqAu±`!æÈ† O»I^8«öL iÆC�’æš ~#±`Òœ\Φ=ÎÌ÷=ß‘bÖ‚ÍvÛ @¶g�—�‚šÔž—¨4©P�Ö*סîr“F¬š=ku +Ü¿ZdÎþ¼˜˜­´æ%* “ËjÒ$©ÌØp{ÕLô†Š8…!Ç Î2‘­ìñÔz¤ØÑø“çT €8/Òß,‚­Ðx +€;\ìÔ!Å5»es"xùÒpXþèíqå +‹®â1Ÿ¤ë€U0 +À +¬ˆ(@ÃÙ_®¯�ÀLB¦2íVà+0Trz¨..Wê耔 =M0Ae0‡Å8%ȱ;427¦¥œ¦!S‰ ÝQ3d¥ææ„ïÕ‡Œ4•É#1z‹×@8¸Š×8A•Û#�Nb­¹q‡„nbHµ]²¡'qXCixbU e¢VÉC5ÑLFQ~YNófwDí2ª‰ijÁpY(N§‡>´*éõ)††�TPO$GyI`´<¡*íZÅЕ¡h‚*¤ÕTù¢"Ε˜«ÂÐI¢D8�ã8 h—c¥Mûl«ËH°Š\3}dÔ%ê ¥’ºWõÕ�’M,"‚”µ‚ä ¤jfèA8’ÆCµÐ‰û4•J¤B™ú ê9£àü±&Qãȵ$"Ô±!-MðM%�l �eŒ× gï„T`Miä& ¯)𦉠2ŽWÃl¦ Ÿ�*¬*楆ˆþºÿbn‚Ö»áoÿß)ãhó]Df‚ª�„0´�ID|—UÌÕXÄ›¦è{Ž?ˆ(†ýBM™ß›ò"ݰDYRÔ 'rÓ“oβ:ùM¹\­ M•�Ê�#Ó¢Õ(ÚzÛI%a™ 裥æ{b‘BÔ«Ê#̗Ь_sÅÏ^ãGŪ?Ï*$º §Ã²hü ‰˜ ÌD™åŒ±…ù»\$r Õ© ”!2¦&&§ ¼ÒÁÈÕ˜ +ļ¦4Ñã’ÐÐB HTð0"kšÀ¯¨ÕXD­e ‡CKèèçefRc›RúØ‚úù‹A²pî�…#8æ@LPª #Šy„õÀ«ˆSþЧÔÜ5ÇD„;¦:bh>õ¿(1 ÒÄ€ J¦>ÿàPqˆ¤È3¶CÊÏÌ–*GËõQ‚ ÅW`èÙŒ¹7C�Ë-Öhf’z¤˜;‰�@ÝQ‡Ô‡ê ;iž¼XÀ�0Cr2] T|òÉCf9¦Èc²šátXc˜˜–®—7h˜ò”7p+¦¼A,à¡1ß`‚Œ1Œo°˜p8$¼ +$ÒÊ7˜¢‚)Ûä[Á”�ŽìD(;T¾ÁBI1¿Ï£{tÒ]ô(ç_÷¢â¥~/€‚ÔÃêßê+€,¼jAá¸xLY¯ +å7ø¾ðñM`ðX: 7�ÃÚ'Aå¿A÷J˜˜|$²¨�¨„êKÚS‚‘0b6Tø„Â!d ™š+p �œA„&t‚”Áþ‚L¾$Lö¨a†2Ÿó–J¬"�z¨L ȤP‰#çy Ëù‚\ˆ"Äw\Ø0_UHî%!¦òb6B#ôÖƒK8xÃR¯‘¨ +ñª#�(Ô6ð0õ¸(œ(ƒÚ„à YøV^¯Óô¤p@ VjNf ÐÄÂ9œN,€‚+5å`j„Ls´G‡44 ``œÊ`Q‡˜èßmæZésˆ +§¦‡Æ ÂÏ 80:ž, ë6.¡@ó©ÙE8 ©&¶9(Ú†&#¬"ñƒ)$ á@”Ú. 4�ÄT„V8¨Ð�K= Ð™Úÿ¡DH™ñ%Oˆ Ù +N„³–¢„.G†9L¢#Ž«ËÒ„é…‚Ê•;„&(OÒ¤ìaÁ2=‹lZ(�Lò0š:îq›–„˜mÂxl†¢ÃÚøÁè=ER2«°Õ;{ðY†jáßV^°, f™Ëª"‚Œ8Œ\ƒdx‡ÎX˜h(&E£N(Õ‰6RW…!f×§ã 6!L3¦ÖÙëò95HÁ¬ã€€�bð'*ö!†%µÎ‡X� +a(â��뽕p ô@¿$\¦T5b” ƒ%õ +–µBQ!F2¶£‰;dJÆÁh&p𙡨À€Ç@‰ÈˆŒHGDF>2#R$B"!% %1 “L8 I‘È”HhI¨D +F¤FäÀ¬Û6©P6ª@Ù*“`d#Yɶ­j³Gurä¶Ö¶Æ«Ì�ˆ+.º +Ñ=H·*aXëØmíhÁÝÞMÃ;î]7"²Æ¯M×nþrqœÇâ�— „ã¶¢ÀÀ6˜ð 3P'ê‘ L”!Êe%:óÕKü +»*”l@€  ˆ €@!+Z�R=øp�­j�H\Á8E¹¯¥ û8šng¦—W¶Âßû¥Z‹Ñß §‚!ì(Dݼ)Ÿö¦¼Ìa¼ÎД¼°¯_½0šéáëRÐ4u‰?[çÕŠˆ«ôÒ#xÖ“xñÄæ3m4ÉÓ/—Îl™Pß„¯ÓBI6pC‚DrëI«DS¦52ÏüoªŠ£1…#5wÉ™ˆ™¨<-¡¨Õjq™é«sIÉC¨ 9.N¬¤…Žò쵊-˜üT”›é—2¡÷j¹t‘ eQM`+V¡*ɼ”Ÿýå—àÈea™%\õzm’í3 +©"’bUˆšF�ÔEÛàÕÕ‰/}Bšê0H¦µÏ&”(M`w#%+kxªQDK¦$Þí%N/õ)dbÖº�¨˜žƒ%1Á†2$kóQ%¥Kò’˜7É=‰ Æ"TáOR¢H¡¹'ÇN•Ât¨O‘Q„� •rYâ3ÁbJõ0ÙD±Eq9t¸Âëz½§!‚šø+H ùÃmÑ&á‚ ]YW#¡¯‰Í!†(“Á'X¡f2.⨓ÒÁ�»7bžù‡#™)tÞçž¹� ˜'Ìfâ��õ—z/BY™˜9½�ôÒ’#”=¢{à%dB•V �Oµ»øeµ¨ ú¨pC‚BoK´¾{²…Â'‹Õ&™Úai¨ñ!Æs§3C2›iKÉD3Ãô +ÆXd&Ô’’ƒBÁÔ‰‚óñ¸"›&hQI]L°)¹HR|Ï)NÁ¯Zoà©»îIí¨Š–2³7¨˜K=—ÅŠ,0ð²Œå�j†Aí¹…¨@õén¡m@ ôW ¼ŠwDòˆ3CkH! +‘DšHÒ¬è°b‘Ь"£�¶Câ‡Ô²Úgý•HKZRKˆ5–ð‚ꬄL˜ ™Óp#&Ú’izEÄl@4Era#Œ=Äù%\¼O¹J…(O Ê‘škä ‡¼Æ#«á +y±uÌ0ˆ�‘c‚B†Á³U —‹Å0Ö:"D¼¯Ñ�lqhHÕ�q†Ç%ú˜Ó v|4•ÓÑîSS‘�¨ši¨P6$é‹“Š�!q�µÊM9 Ë›Ç÷ph9>e¸x dž³qïdÏÈ©8ªŒä¡ :A‘Ʀ¨!¢˜M= ŒÉB�j"ÿ”ƒY½JEùп�'"[†¡ãºtôIôË +‡Çã@³Qý Õ3Ä9ˆ„+Ô0³"*ä2­”JüT86C +,¤’*KçQ“7¦¬Í|RÃV"[,ë†þ ZìÅ Á#«ò†‘Nß½sQÖ)FÕ¸¿ +}†4ªqSÉ—^\2û“¦ýä5�àpÀ@(P^@¦s ñ[¨j÷Ö/ZB„¨$½„@ÆèÛ³ŸtB†±Ý4P€ˆ¬…µì¢!‚M•5œ@C,0¬(•Z¡Ó"Ä ‘V2RAB“¶[ÈH0œ¨éI +¬Z´ÚÆ.}QKµô:yD„~ +9 pYáy J¢)M¤ºÈe~ÑAJ'h„‰ +¨©�UÉ0ÿM/•¤; .OcÀÅùM^âgGH•P|”™w¢/÷ ÒËCb\gÌ®õÎlJ~ªÛ»*,U''¦2c=´šÆžyÂÝ"„§·"5ñcú(jš¤Sb§3Tÿ÷ã�Gäf³Ï…Ó&8¡äþz–Ð'Â'·Êó7tÊóKÿÑ*̘ò"ÕDU'|¤2>wñF¡<”‹K<¦X…6adv(4^ÆõK•C§C�>¯ÑsÈ”üì§gß•´oÿmˆ¡øÐGR4‰@¦jUP©t1‰LOy¢�¤…Qñ z *_”7™CÑ‹Hæ“§‰4Buo3á0DdR%”OÄ{´‰v!h>Q‰²ty+k5p3\�®—¤¥Ê8„K(å�2QÅñU‰Š–9-Ub €3ëÔB"BéDo…úe¤z"*‹ +"ÜjÌ(�11R^(6ë&8¤ZQ£"Ø2Ÿéœ¡ÌÄbÐÐŒ”\è´`ù QéFh01e‘Чr4zŸHa-ÓÆq`L)Âf!-El[7Ÿ‹#"ä�£SÃx Çm ˆ0UL¸$Ösâ Š�æ:AeJÏ‚1ñ!µŠÊrëŽïÆT“аy\¦NG˜Ð Šh“YÑÊTÙ^!ã™ÏЈG£Èj5•1Qf&Sg…yR>‘C�ΠÜé:IÍ ŠøÁLç1$ó/Ö�ƒ H*(5'(Ñ)l¿Æ&¦]8 v~"da�H…c2ÌðÓ þÙ`Z*§k|–NÐNÍ¥ÝB ¡¨ “�5ƒE’.•ƒNà—(í¥T%ŸM°Ð fq¢}4‚¡‘‰­-6˜m¡R[¿)°^0LƒºëkpÐà€&Q¬ðYV„U°2à‚l¥Ø`¥ˆ"�»™OEĆÇè3”–"x¢TÑD +*"M +¸¬éB§eÀMÍ9 Ä(rÍ-Cc¸¤®¢q�Zª¡äAA!¡ªTÄ…ÔP”ZËÀB\…©¹e@‡©¶‚+‰5œB�Pr�¨©Ÿ*„S1ô© ^MYØÓ8!PQ&PÑq�@(}cªæ–§êSö\¹�AÃ�Œè²ý¨}¢†ÎpLœbe %ƒŠE $b¥"$)K�à§w§Ïá"Õ¡jiD¿ÿ‡.ôž‰U¸KO0Éî�$¼ÅÙIj›œ.ÝTšŠž¹å5PΤ*.$a5Â.N‹>³\ôFg¢Š^ñ¿>Ë€ ÂË2Î̦h"DUP½1n-’î,œì1H9òJ²YÂ\: +bÓ<K19H6Ÿ°~TB5ŽG�:Á8ËXž˜\� ó˜¾`·ÔP΃‡b$¸lK£ÁmPG�à,¹©¤� YJ%”¢‘0Â*¡S˜RuÈ8EÑ„)Ò²EäXC¡D䎨÷ŽÓkDeB¸Í….ª9!Å’Ç.âé<­K ² H¨Ôy1pK&V)híêYR0ã¶«ÒIU4ª!n‹ç�Íl\�ë+��<¦º‘FTdS7U±j<sŸ Zby”ÐñÚeÞÇ#¼hŸ» ô?bÁERCÕ"­°Ï O‡3¤"rhF•�V:b`È6@%Ä®éb”¡‘o , À?–�/�8…9>éå¦Ô 6ê%dâBò2 Ø”VÚŒÑ Dcg&„ªXñ0aâ+Œ�F$Œj¦Ó>jZ”)ÚP&MˆÁd¾jQ6”$*&$K…QùYPEÔSb´f‡OÙTèÍrxŽ·p®P*Mæq‰3%óÜ ää5Q.áEÝyM]ÎÀàáXª²ÓPæ¥RmRå+¤­UB„"Ãé(æ" +‡õ¡ÝÀ ®M/ +ÓÊ(â{„JÔ ©#mu¦A©Fõ‹Éæ Ž�i9¢ú–ŽŒ²:¡ZÞ…lmWÒRûyU˜¡¡�Ì.lºêe�i^þŒ?øeØC$?U‘`¾n™Ÿé‹3?}1?bQŠ’tÌá`}f²g†N>ꌑGŒ°dxWèèWbÈ0JQâ3ÇÂEb„~r†Ÿ[“d2ÓÚê‡QC6R”ÒPÒ‡¸(NÝâhÂäºs*”e\ÑGÂÂoq‹[W�|S¦{XÔàªèc =¼t‚ªDD ¹rÚ[.=¦xTwbaü+h™�˜˜`6êõC¡F(ÒWŠi•ê׿Å#e%‰Á…òÄù +bÝŸKç×çJ3ä‘°©!“Æw…‘¸�‡G†“:çAæu"S¡0òG8Ä&&Œ”Pe:a¤2‡ ‡Ë&�hÙÝípNÓ¡.’Â�Ä·Ó^ DP‚$b‡|ºð�…˜7Ø<„?Ù²@¹ÈC*¸P™]þ6je kÀ‹™¨ÅÉçlŒ˜¢Å‰&Œ#‘šÎZ3áU/#M–uªñzUS¶D�ŠG§ù©­°X4ˆòèfèþxå!•cTÞ`\#[Ä)*a +ó§F›E„´Ex¸¨Ÿ_¨tqꪢ…¬hPópH$ H案@ŽÂÉ~€ìrEb¡H(� b–S !ÐJ†s)Tƒ÷{V¾7=6ä‹ õâ§! +€…;üôÝ83*ò�ŒŸ8U]Vò[`�ÑA3îàèälŠW>Ѫª~ä,ê#s¬›²Áµ +DÇb3¯óÁY½�؈§Ýƒ$fóâ[:¼q„7ª²½´í–/”Ÿ¨¨f ¾Î‚4;âú±+ûu™Ç‰íðW?€©ºyaËr©  g/™º!Ïǹ`r|yŽÔc ð‘9åG�NÆK9^¤}ˆù÷+;ù+¸(K{éÙ˜_2Úš”2h,8DO}áÁµõq(BénãêTÙСcÈ«K§W Cš°!‰ík1ïËìÑ È�0Ë;ÂÃÍ[BÜC(X²‘Є´Ø< AHz>bãïy8²P).·“sêÑEwf¶÷(6ï~† ´×Í×?HE®ZîûÜÆâܰ€ÉÚóè +§SrPÀ‚ý ;aå½�ì“Z€Îwås\„³•)% öåCžåi/žÑÓkµ²ûF!{ôCeLjGBã5·h6%ÑäÂq¯ÉäÄî…lÆÚü÷%ÿ6GÓ€·¶D2¢%‹êÄK€iîJ`B>èÿ¯SÜ?ëp'l 3]ž¶\É ÇŠ^CÎ’õ/åR¶Tb<ÑPÄH\(¦/  ¼ŒŒŒ9ñà Þ%ï¸Hà/Êö§M·]JÕc”oη¸€…ü"j‰Qˆ¦3q„HjpZ½:òš½+ö…å2þeà vǙĺ¡ KMf9!p¸¥òd>±-gŽ4 ÅÛz…àÀö7øêøISB¦¥ Åu™}Ú+[ªŠ÷ùÊØ¾œ$êæí- �B¾0ÆûÂõÁï¢t&ëÆAy÷\Ÿ ÿ%�ÛAËÒvPUlqù�¬X£iJ7ßÕ/Ç/ˆDN�#ñ}9¾h„ÿûjà¼ÛÇHAGd:W!zs@}�ž–àB(j]×�hSíDØe =1šØ¸Îô»¦$­�;Iúá–?YжP9 ¬D6º/2;"�¾�Œ'ðõð鉬éŠ0ú4 üFÜ#ñ%={Œûóe—÷vXUrɆªA"× ¼½QÍIG-™®G¾Ñë7šô™¯o Š-c,8ø +úÁ0CÄâô™¾Ä¯à%bùj0¿TÖrG‹Œ0�ƒ¨.×ñ©QÏï~üï¢â$‡ÂmúëhW×ËþÚ·?XLí£�ÈVÅ÷ ÿ=Âs:Ð˰�S1£œ’%} κ \¶.ÓªŽp¨d¶–c»­eÅ’”«Ôeýµš&“ÑÞ}û÷N3®Ôr‡Q<{G3ÂAAgP¦vÝËÿ�aÏœ8o‡¨õí丶ÈhXÝ_Ff–wê fµ� 5pÅyRŸµé—pØ#Aùy/ůk5fÿÍ+É»VCD”U…qcœ\¡�qª]B¾$Õù[)‚†Ì!º‰AÔ¬qM4n,p~Z°zÖ“d°L*FH`•ätW¬ôK~ Vö”Û½Ãy�ÒB¼›`ÝÚotü›ü‡“läO:±�D¥cª�¯á_xu} É:4šsŠ¿Z�®,ŽÖËä¼ íÀÿ"û4€“$ ”ŸØUû.B§âKWÔ£O õCð®ÝÌÇÍPçõ%ê�Ì›œ¶ðo±N`F÷Ã�B.Œz"Ÿ½D ¯î ¬#XÆà­LäP´U†£˜È˜µ¡�v¬÷Y¦»ŒÐ³þ6qˆtžºòõVô×!çÜKÔôÓZ&Žžw}.~Ö3-ű¯Ü¥QŠž�ïÑÎãTŒ¦Ú,¾r,üüö+¬>ô Œß’þ%Ch p�@É%UÊ ~?੾ÃSF„¦iãC¯EZ÷ê~C¬8œXõààh{!?f#Y3A¸>¸›¨À&ñ½ÿŽ +Ht +Á\}2)ÝöíÔ»nýÔ6. +Ø0úꟛ&=d©Öó²I ’�†‚Z“—û7J·Q¥ÀÈ`À©x22šÞc>&YÞ Ds  Y?Ûœ¤Ë\Ò-bÛHyÞ¡¤�Ã[¨±ºu’U|„ò÷ëK°$.Èo±„ªäˆ€Œ. ÁÜ�_fb �[ðü’|-aℹ6!Ô0Q°ßË:–£å?eïàбýžõýGüo­z±Ï¢‰~„ŠàkT–­~6» ãE~]ÏóÅ䯨D¤u�™ÐÅåÌ|+•ŽþÎÏ2´¹u¾wL<) ¥\€ðÿ¤Õ' �©²`ùµ²û'šgÅ4u“ô,Ât©G)w‰Û?ðòÃõ‘~ÏG2�ñ|µ:ÐÞàB£ÛPWdCìvëIâ. è<êØ¬�‡kXDIÀ¤÷DZʆØ~�/4èŽØ42ôkÄ)¼ÌR{Õ[FFBlš ËËòÐBÈÅ„µC`–VÂaA¤°Å÷CÞE¢<Æn%3âÀFw½ïìÉáµÉBÁUXI5¸ÙÈÎ'Ñ y·÷´âÊi¾ +�ãÀ¶% ÖÐP»Êï§:ßS²%ïö¢¿ž‰<ÈœZÒúE«-4=¹›Ù V€Ð,Þy˜Š¯éýËÔD™õ¸Çš²ÁUÞ.)§Úø¯1°:)ô’Í:åÜ1Ìå.ŽËãtLSY=‡âÁ¢JÎ@Óˆ Á+\nóדS#îÞ³ÁÓ=ßV©²ß#†‰-s?L.0DòpÉý¯×óKbÙ.WäÓ{Ê;òºbâ8Œ_c7j°S©¡Oã™yèõŽL3óô_ |í(±ä•… Èá\µ²¤W¦6WÁØcž^E M®Ü@Ÿ÷©øî> EÀ·]¤üp¿Õ7R…Q£|O�¤j*©« ¿vl;ôêÄ–Sl,Êc×쀇?eZw¾!FÞñÊçS ²pn,³)’VÎ÷‚�o:ÙÇÇî×Ê¡DýœáAÒ>>?¹iý±�ÏPûJÏAc«»ùšuk7úÖ–dì <™Ú jÚñ~A +^AÈîaInÀèlÝÅÝ"Ÿ'ñdš²œj¡•º}� Æë+«õŠræ»Æþ¹3ktOãôAâ8üíƒNÓ¬Îe3== �Ð'£8ø£,É$í~,õâï1ç¹°Á‘y÷rA„ÜyR·ÓÇ�3Gô/‰™¬Ð?7e�ºHOðIAÂã"|ì0"’㼃À@:£“�®›œC³ 8M¦$Ä•!doÙú§�@M â ¹¶ìq�lzÞ•Õî¸âr#ݳ­Ö‹= $�8o‚®âH5cÿ#uƒ�0ô¯)â8l ‡I‰\A܉<jYîÂ~A~�£Ê™{‰kµcšê!Iâ„*k9m¯…”¸œq´[˜é>b±ð)Õ¯ûÿà˜ÄÁCg«Ø'¨ÄÍC'hXâöMdKjÙt„  A+p ýÐ�[*3µ¾¤%‹rZ#{`‹þÜ"37ˆš¥ è*³¸c¢]*Ÿ#h’§Áòœï~Űr[ PË/ˆrP¿™(ß=CŒÏ^Njb/¸à §Æ�† áAJÔ­“}u>â<¤%€ã�®þ÷åC�� Ÿãè sQÞ`@†Åôø!AOu‘¨³¬ÿ“w= +[�Â+[$êÐüæ;êž +ËÃç›úH¶+|ì{œ%-ˆèÝE꿺T�ƒ))…íRË{ÍÚ•ÿ�ÐSã†ý¼äîÁ±øß· Ã$ 8 �’(¡<…+(–"œ©†ýÌs”À‹–5B}Ý-—Xâ|²Ð« 3ƒ!+À0B§Gv¡ÝçêÞÕTpoÚ +ù|>Œáû¶v’²˜ÀµÙÄ1�g|á.?pÚ,¦�ËØý¨}¶—;pù~Zv; é˦•Mémôè¡>m…d ¢eM«ˆ�)]’¥BßB¸+íZ¦D?†pq=G­é´ÒGQ‡[óó»yž ±²6u˜“#öæy1FSI�.w¦-mM–Ζ 7¯Z¹O£�íjtŽg7½ÀLjN +ÿì [Uÿa?Òo©êZpø;?‚ÃIgh^k¶Mžû­ñA–yÍõ>˜Xš¡R Ôœc¢××òF®:Î4%É8n«\ +©šº¬Â¹ƒãŠ%Ô`V�2Ô’i©9 ˆÏDÑz ¤A9˜8^?}[ËzÈÓñaüåÍ u°Æ:a€só`äzó3´›œÝ—E…B,D—vWD=ÛÛ¶Ôá$@²²Ì§ö.™> fÚ5ƃ0;†W Âagëh’‹EÍï':û½&@sKÊÙˆ„,OÌ Iöc?û¦_žíÛö=^jãoP/_'*€ÎÜ{ymg_ð¯³^}b¢1�ݦEâ'¨†£>q³£‹±Ôsj�VšQÌ�ý”ûF¼‚ˆ#N4·‰ÐÞáê§ûçÎïiá¢*†ÊXðÞÓ·Òû÷vlˆÃÛÝJØÉ@›ÝaÉ|vu|c6•‚?‰ù—Œ§¬«,Ä¥¯äÝÍ$1 +e +à'g + +SM `!TLµD®÷ÊØÄ�&r¸3 Æ÷|�ƒ‚’yÁw•š¶…øó%O5©»|$;e~ÑŒHVEÎQ6¿� ¹�¢7–})�¤V ±äƒâz’we³'w@YÚWô=�@<4¨Žj’YÈvš’ +qÞÕ$ÂKññËMÁAˆY +hˆ·Dbeb?Zk„2##ý€î}½ÜøJ±E‹5�ƒ�pï)kmm¨ˆw{9gÀˆ¡£Ÿâܮɩ³*Ea\ixA2Éú\‡ÒaÈ)œIs-@*Ý”¡ KKÎ ÛíŠIŒÑ óYüv�˜A¥}k{¯àA3Á¿^£˜¼ÀŽ3vq ˆý£íf€ ]=DÊ¢ÌAuC8¶3O|Vµ y2´•ƒU�H°SÀ¹Ž&í…™]›«™ I;N=KÀHû6óÕtðH³Èôg¡š–ƒó¨NwLá%"岿†ÝUðåÜ÷ó-ê‡Ôð0xšf5Ѩ ‹o�ͬÆÍQ3â€0Í¢æé_Üœ|ÂN2«²½é«¸))^ aä�u©u +†GÀ7O‰ÕˆŽZ¬H¬”ÓŽÚ2¦¶šéEI`³Y<ªÛÿ |©tðUÇPœãåŸG"ùCP㦇™{÷ +­š½'Ì-=ÐÜE¦²\§>¬«�@¯ñ€×=Àô«½U))´nH“ùtÁU›™ ø˜)5H Êÿ8ÝKÅŒ¡›ß ûQqæ�Äi÷Ðkè3>ÜAïöq|ˆµFXÞ©mj{F â›èK²â?cËx½©—: ì�–æÊ»¡q >‹!¶ëy†Í2æz°Ó(¾¤ „¾!“ób¼,%'èAW{q 4kï¨Æ¡´;, ¥) �„À…£W';;d´dýäà÷0t¹C pótq;¢¦h[/ò×±� }q÷u<~o×â·Âƒeú ú‚²† ÝP‚]ß”,úßFìÍ“xd'Ð_�«ÜU€ÿ¹èžb*F¤kc°µ‡Ñ)p£‰Ç'=9C8£!´ð84Ÿ[÷UúR‡aôÕKPE³�ËÜAÈܼ£K„šI_ç�:ýñ¾×Ld¬£ ›ñÖsµ£<6ƒB¦zÓ¯Á؆¡`Du/©î �Éà)XD¼äsÆŽî�â§ ½ Ž iF”¶5q„GýðÌž¸ž€r™|jQð%¹9޼šÑ=ï]섬ôÑùD ˆ¾·jçPÃíèÉgò ¥‘é#¼-wBäCtô-]««ƒu€§°±"ñJ=xÖX°3ͦ�ðF³.Þ*ú.:$ð*û÷iÒæÝ¿ÛB£Ð¤µ œxSãô÷hDÒ­ï?÷«ýa×ööP¦÷šÇ©ý"þ‡¨V.$jÕwe®}‰^f#æJ”¾i{<„LwþG�ÁžŒ�ÔñÄd7^ô�‹IÆ[À"JRA Iå%eΠ“º�“‚ ,i|4ÞRƳ¯ÞN¸šp\á¾ ï#PK&ŽâPDzˆ4ÇiƒÂaU‡„튾dÄÙsÑ‹G`bøGXZtÈ÷‰ŒÍ(z½AÇ:¡‹;%“ÿAýI00êQœ?Š’fÌ#™Àq|ðÄN^ç¤!ÍdöV|Ôäü¶ÆKùM� +@9×LV¹ þجNNÀ9GU7ÓsŒ1�ÑD‚óªìÉÜ×ÿxƒÛ³¶hÏà~ש�üxó ïZ_Û÷{ƒ‰‹ŽÔc +¨dN¾2 ž+שÓ°‘ð=–`‘+Õ«7¤¢í/©•3Mâ�V§À)uN—oŒ¿8 ® ‰´c¦˜ 5«| RàcñMO±þOÏQ“*FXÄl 9DÁ�¥b*�HDÁÙŽ¤ú2{O�./§ú3ž%,©TYJZ©Š”K¢¯SÐ^‹�òmG#ÃF[„ZÌ +d³Ú*§³‘¼ÕWIºì�ób *òõúÕ|cºFJÿoBƆÔÕ´€GÀ Š× è|Õ²1ÎR¥N)ØT¬Z�80€ÇK²wùaÁÀ!`T‘Üæ FaääïYwÕâG,ký —f¨MT£Ö_³øIÌO,g€¤¿eô2 ÌÿÚ?™‘]ô›�º‚6¯ÄÄÍÀ[O!ºóÕWš‰qê¬# +·�hë%·3e’†®1—6J€Oñ¼VrK2á&¥ã$ñçŒFÍѼ3`!]Nôþ ÍQõEª³Fd+•\J¢Ð£4=j-ºy¤€Œ¤w#`[B'¢ËãzY�ª.Öê9ãàm1ˆìnÇÊÌ� ék—â;á¡AogÓ >OÉ‚ÂÙ„§ÇéTz"ܼ{Üd=ço,ow\ +³;À»<Þæ{ R=¸š½ï†L`ìæ“ù ÝW´ß�ë%7ŽÊG"À[DDö¹Ož‡¶„gîÙxH qÔ{fÐjÝC&n p í8•1ÀצX.{!=› ð»®�Éôñ×ÕÜשŒÄ—4ß1)™Ä‘©Œ…¡Q6£EAò8º Œ²ã­(ô²·ÊêKH‹»nV|ÊóI� ôìwï9Ëo2Û’¨86Ï©t#œ› S�Þ&VÝŽÂÕ/Зù+d>~QÅÛWŽR�9)ú µ„šx™ƒ ÇJÊéü*ïȪ—·™#•=_U@EetÒLùR¨Ã'au‡çoj`hˆCp<éí|=&òï(ö. ªûuÞ.N…,ˆ.¾ßX.„–‡C•HWº¾ºì+µŸ3b+9S4uœH¬Ä’9ÁÞPe"t,.î>ï©SõÆ!VÝÍ¢Ëå^³€§{½*b U€Ùrx¦ù6Æ×Òqé�(î&ZÕ`ÀÜ�gf1‚[uî™Ë‰¹ Íb5sá� çXeÿçÇWÊ©’¹D ioTTöäÀcÌ-Ê=_�OvR�‘�ßèaÃt¹W Ÿî´–qô€6õ½Ç�†i¨DGÅÊxGLÃNµþåe†�ÿ©aY�uŽj�H ¦ Wð»ˆ�‹î�s®hÃeÔ*—]/yŸË�nUÄ¥#'#Â:•áe¦º�÷ oÇÙÉc$ Ç …IÚÀ+€!üM5Úoœ"ô± oüXSUtÍœ 7 [ËqWƒJYÁåna#Ÿ£GIq�VDôîðöˆ±àò©Ð\~Yó¼. +¢²cÉ�™XzFM�²v‚K|ó>«…¾'ÈF¦ç’ª_娢Måå_ËN¢+ã2p·„gªW:G¨å…ß�S¦ÀS'ε  åL›,�“Þ}ºÄX>³7ð>�Õ†°ž(õžÑá"y°è‚ UiÏzUµÑKK¦Œº$—L�ýÒEÇB^ÏHÞ§R€D +�EfÜÌÑÒ‹Ž&rÃ( c|!Lr'—Ë¡\�üs¹aMÀ­ù@rà†›™�0³”+­Ýývâ´n&0G¶Ö½î­Ëä+“èVÖÓ¡è“‹·�¯n-Ž0iò +—s&1RJ¦p–{Oà©»+I%iO&G}²&©® ð¹óB&â ¶U•Ò׆S­øQ]?Œ@òï-v·1®+š�y,S´íŽÀÌlƒµ`R{k³À0ð¥ü»Ù¨ÇàÎþ)´«åˆGj! ûU«V}E]ä¿HÕE�ðè ¯F/4eºˆNÌŽ‘‡N„w:²y©†¨Ôð7¦øæþ×з¶ +öb“Ég¥ÌÆþßSI­…-ŠKJ¦àY_¢×à ¬Kx/b²ÌÎÛ?Πûú Öè�8ï Nð1=4sÚ­Ù,•…eQ쑞Åì +醿¼"r ?1ÄFv{‰û£¡y‡-{Ùwlμ:u11PöÿòYíXÒœ?Ù*�±É ÷”pí{n'%x¹•¼®Ò©¥Ø‰I”œA5æ9Š}%.²…Ö4þ½Û@Ë×¹Fhä/jB‘³ŽÊå«ã|Y±*‰Mq€©Ã”¢íÛm×|Œ)Ê2ðLÐE—µ¸.fXU ¯¶9dÇœ9ARZ/ŒÞîѾ*AÃ�5q`tð…&´þ¼/Òy|fä�´ÈÚ›K>%›Ñ69¤©6ÅÎÖ”ÔI•ȉT­¯inƒ¤>F2yœ³^÷El_¾©f§ø~­6~Ú™FGÛõ¤ë܆Z"zo[;ìò˜zü4�* ]doÇ]µwÏbºy¸JP’a†Ï%M9“=Á–ѯÓšp@ÎÞÛžç€5aÎgºVƒ®ï¹0¦Ã$vª�aœEÛÈ]“a±.o~+èŒÒ�Aše‘øÎ œ41hÅ·èúô¬޽adqÑÍ l/noôg7Îô²ù‰ð˺<)ß\J tì÷Á >ÛcRýÆeE­�@á™n' µ1j³‚S/‡)^ÉÔ�ô°Ï�ƒ! ~G<�cä¢bÀÙhц(4Ä�ø—ï}#MÛ^çŸQè.jùG`r@s-˜µÈ΄±~Aü ”§TEéÿ +O;ÄUXÎÐ¥‡�Äó4“€Å—MOî\Å0 =z¨ÄééÛfbÍsn™“]ðè9”b`à6!¼÷ÃÓ�cO¤â:wyqÎÀwˆ4%›³0/�EÜ0-/ôùø|en ¼u²ÜJs §_Ó�o,�y¢Î+`}˜ e;·¯Ú½ä¦)"ØÜË÷häq¬1~ +D=Ñ"•Àñ¸Š¤¦çÚ�ͨ ôp™íj/Ê.ˆ¬³rh.�£ð”zžfJa“…‚�ÅÔ·Ø�¥Æ2­±¨„�UN ãƒÓò#Í<|„ L¨C™‘Q¬¶æ¦uùo�e÷Áæ�V[ +Ý¢SXU]ÎïÛ2«/˱c5³_@XX:¹ V–€Î†pÉ[1÷6©É G´ï›f2pcî"DR,Ôëºÿ^Hs–lL!$ò¤ïÒ]r”2â:‚¯L—ì¸`¾¥Zl¥îþ•ÄýêÍ6©jòž V¬“·9gxFsü›-F“%´‡ï€Øx š�¨vÈ®§ 2ì�ó¥i³HX„8MÓBƒ5;½r7éÍïG±2—O©tEØX�ZÔŽ­3¼¥Fá͇œZsZ5Ì« [1¡G"É‚Øe´@Ü„?Àü +�´ÉFY"EjY0¢'' 좕‰¹eãU‘ÚáÞÆ2ü3f]ìLí2{To)ì›ëDDïE¼¥ÆùGÀÍöÄÙéb,ö‰þBžyÚ‰º´Áßìm|áWHi§Øw‹D™t¨g–2�mŒ¤rWÌ’O­�ÊAá k¦Î‰ùØþvJ«k Ïx›4F‘vPº¢ž)/tïp¿¾�N.ÿܹŸÓá_”‹ø÷ÿÓ°ÜÕК@¨° +âÀ ŒÅk(~7¶¯ZTY¥ëÞé|+A±­� üJÁ0ˆ4ŒÉÆäªT +ŽÔ\øÂšµ ܪ +’“,.ÖŠïNyý§¯†'Ut\HµO¬kK޹GšœŒemÃVxEÏY«ÉÈõ/¼ÖêЛ¾pËP­•�¨Çž´ðÆÖ@Vçÿ9Ñm(fPÍ5×ÈœuMÌE‡á ÿþ횢àXTEŸÏkV!…´rÔâµZÞ²#@éèB9Li\²ýt é€�¡³Æ®�ŒMY]½¶ˆþúÉ¿– 46âï†BU1ö"±a™ÆnDÈGKí™Eã¢(1|þþ€³ œ¼ ‘Ó�Zä,e1œˆÇ„×È)Æs?s=îÿu¢�}xËAy KDI4àPq�Õÿ¾ÚÍZ€â@ë!šreãÓ•;nt©póÕû;¸#ÔÎ\˜H¦#ȸ�þQV¸O�]½ä·ó½ì¯N*`Àb­œ±° �•÷‡jè¸Q©¶6òc‚¦bCŸ‹ƒîweÜ=ù‘˜—uc F]E4 ‹"8IMàÊö¾ê¡ $šÈ�š×‡ŒÍ°1ƒë �õ'™Õw:¡eÇêöÉÀ#¯J2ˆjÉLüÎÚÌÄn¢’ãä tSg™Ø)×Í•aŽé‰S¹kº‡å2ê$ŠG„>;%øc–6ºì¬-<ÙôÇbp¥6*úwÊê,üõ o¾*ì �} þÿ“�š<ãðóS¬4Î%"°au�ÀÒÕúFnÊa»”ŒÁ&†*Ë|ûig¹;àÙKÛÉm¼G nìî­Ê¨ +®ÂwíÑ´ÔÙâ²ËõßN˜MCœ¥ÑåK•fœH‚PDÄï±ÚOîñaÙ =�!ÎEÊ¥jªs•mWGÅ .�#Âw?‡þÎQ'?þ81UÄÄ%¼Z¾RçȬ—bf¦Õ=VO�txBÅ.èƒf�øKÞE^%€€j’¼'õi; ñü/˜ª9¸ %e­Õ¬¯dE SÇ»'.¢Õ¹Á‰Á\ëÕ\½Qv�èhÚƒ=;eQR6TNÅX“ƒ�6æ,j3Ru©™¤¼tºú6+C6î¬ÈXÀkmg)oLÉv£H¡kÊõšÚ 7µ‘¹ú„ØVm†þÿUïÏ[Z °ÁöõFêë;�¾]È‹—„aYüS_¤á0YÝæt™Ï–‘÷…\Cè^ÆÌ¤ò2�îOÓPà`’t­ÍŽ[9à]‰[™SQ4™›‘…€:»j™›9–Jn´@Hù'k,"õ.÷›&ó±‰=.³t1´dà�«Ï+œ*S.8\€$Æpéº�ap­AäÎÇÀè’¬oi̯é=bØìãP/´lä«Î3’ö’iO,´¿TžþôÌCQS¥h„¢ÊdÔÓ¥£ï9vã#)ŠôÜTh9ÿ¾Gˆx³ {‰YÃÞ±¥ß`UÒÄBÓ1Úö´(¡%DʸKk$TÑRä| Z} ;IÇ +#J)?VhD³TDÓg†ÿÌ{²\g¼g peÌp" õDÊ$B»µíŒ ó7í=¼g·´ „KÌœùYÌl˜""¬Ëdž‘–Öãëa§‘L@AæNÊW ]!g3>H#tá›ÞÓ¸4À¸)¾˜ …#…ö$xi¨-D5VüÁ5©èà•2„èh×= ßèS±¦ä>S€òêÝå â9ÄJ‹a¡�Èêæ©aã·-*oð’t“Ë•„2-%!‘éù¬ˆeI ƒˆwÕ$×BÁ ñð*H”i�mD²—­·Ç¦Ñ»Ø`—z"nÖž�Xª›¬»0„’Fb]}"çàíaáw ‰J!jM:³œ’>D3'…•ÊVŒ4M…¹wšáº°ØŸÄ’ç“�ô6“u×W†b·êxT2í�ŸÑI]#•+õ½GŒWf%SÛ´šÓ~boÜ90ð=½G!j%V¥’Ž6"LÆ�ñJ5ÊŒb½»b£ Ž5^kåWU5ZoÚù´éá†ôˆ…ì•M8Cîq²&¡83É6²|�ó™¹2<†´Lãõò¨tËS¨F€ÂK%Ek,;q×Khè�Üù£»ƒ©Z0mŠþ{éÉŽÞèÏô€¦ÆL�%ó¥ˆ`:×k‰ÁF,5gb‘ûû%§£0|H@\2®+ðâ“øp@ï*oC}ã¶’”Ù<0 bí®üÜc·6Ýó�‰Ç·W'ÐbäÈ㾇b#6Öñ¼4g­0%fK\òåõ}»k*ƶzδTÃß Eߟ–�« ±únf6¬'[¼áØÊùe,Ô±ëÑÖYE+\ïõýIÂÆŽCœ)³Lô1ðe�l‹àÀ‚ ‹â&뇙r�›ª�³äÄGM¡ZÐ+[+Ô¸Ž!Qd×VTŽ\S”æ1¡QÖ@ÚXˆg¾ùmÎV¿Gýoã^R„Èc±aòÓö¥z20Ø�óLеêå/„ˆÄ®¡ÑËh6@K4({ 3Cc_�øW¶€óÍ] uMa @ùeµªBþ�C9’‘ë�…m-‘“F”F#ÏÑâbö•f;H ®Ø™\Ÿõ¢J°/›¹ žEÖâž%=;†Ö\�ô l\Ç­ãîÏl¤ª²òp»·½iJNŽôã$—$q¾9ÏÈAÐñ×›?£›1¶¥c™¥÷޹#¿h�…[C…P0) ôœ²¾xh€YsÜ—3_5ÀµûÎrÙ�€¹j¦×_€OÒ>�—¡6ÜÕGq ‰K±¹üŸ–TÞ»´•ÁÞV:<ÖOUÜN�Û`É!š³1•RÔèéo½ˆ'l*yžpßa±ì_aÝ  Ä6꺭Ü)Œì(2ºÉùÛÊиMÒã„du*ƒfvR˜#�8ñ+ƒFû=²w9JåsE!'+� ×£°Ž“6£Žje:ŠÓ—ß:z7Á§:°m]PÏåð”•[ tv5 ‰BX¢ùÌ­æSòfLIÿÏÊ3Y¢Ž<#Ïü)#DP¡±TƒtËU©BéÞ>t3ž¤”Ó°dmº¬ï.üwf%¥±ª.2•§‚Í|Úº7n21»TÄé:'a¬¯ïtkë¡Q#Y[`�Ow³ÆN>UÚ]ðÉ9ˆZõhtž�Ôˆ4â=ë½EÅ˽¸swC(*-€ëòrç ÷‹ûÐ8ìÒºUhÞÔâ�Ýðµ™8ÀË»ˆ·Dáb3yç%æfU¸Ø4ÌÎ'›v ’©.·�¢Âl®-2ÀG —!ö0Þó¨ÿo²X¹àÁ\� ó:ͣ¼~“·t�ƒX»¸¯ô[°lðF…Ût| è ¢y�«»Ù<„’¿äó-t�ÚaˆB¹ìÏYKò­ÁÅÒèR³8‡‰¨±€_g :`ÂÏ]_*:L‘�eª¬B¸Ï·@aJFkÿ-œÓKi<ˆ¹<\ D2@êR;éÖ ÄÑñGçÛ]ÒpÁÇeÖ~@ zÅ•²m¸Ð—‘^Lña§ÝÌ0`¿k¸0F3ª�;TäÉ� ¿mÃF‰lë¶Ã.,às8•Ê… /Fø•ÅD£oI¼rÃ4Â>\P ó î¸fëwÂNÙ1¢sž–ÉqA€{ùÈ„Þ6õçÉùV;i>‰)>¿Â…YbÙK.G +$[ ´0ÝBÎ`6VT0W‹àqAÄ�¨ÜÏ¢ Ï<§Âþf«Y SÁ­ãB�Kˆ€U,�í“R Ï‘)A,ab>`.ç &f¹€ d—ÛmåBÚà�mß­\¨ÚNÝOºq+D 🖠ž ʈ7ÕwfÃdÒÙ¸6ãr0Õ}\9ÒF;þ6´\Ѐ€™œ„Vý¦Zù»A÷fbYpô—cÈŽ¨ÝΕäžj'8hû«­z„0úœvýf|ºu‰QÅ%y@6ûÁË#0§Òý½�µŠïx‰æVêŠn^T†Þ�1†N±<‹lޫûõ@éʾÉC謯šo¯½=;Í ‘^/ŒüP™ld �s7^`J¶ á^^ØM—¨6YÉ œHÇiÐ÷„ G^È*†×�d‘Y¾AŸrŸ]†M>ò¬ÙiWwï#/ÔtÞÕe4Yëâã¼àîmž”Ÿ&�6ãsºÅ»¬7ZGX/œ(' ÕoB A›œ× ;ùÔéE^`°g—î{½]‰m4¦Ñô%v†=” qö½õ'íÎÂb‰àë…GÖÌ“4¤(8þ¬at—Ñù¼Ñwi½<ÃzyÉ¥VF«f`(½.î%ê… +ãÇÐ1]o½ ÓÉo}‡4ºz½@¤24uR¯ õB½’Bdo+ñÑZð½ »±œËãä÷BÕû&`­‰¦]÷‚üíÙ ûË µ½02:rƒï³*†>í¨!Ë4RÞÀ{/œÜ–³H6ÜšŸè`‘òØùBþpœ³(¥Ïù9ÅÆ©‘”�Ó“øÆRù±/ŒŒº7Í‚ü +»‚lÇáxµf&}_¼]yÒDYüX&ªó 3={eËl¸ï㦥ÅW5¿�|?WX6¿àsvìî¶n¿À›ß¿=u®½áúÆýƒ�9¢4ø… WËÜÔ7s‚üÂèèÕæ'Ü޵ù�_�]õGd¨ÍȈ=ÆŒ_ø„ر,µ‹ó­_`®Ï–;mm�Ì�ÍŽ{÷†6‰¤‰~a¬ÉÁK‚hú�ç|>¦&äl7 " BÄ;x¯±Ê–Û lœMöpü­üñc³|ô_œª»Âáú\J™¢ÃsŒHø$4�Žü‚°“ÖD7O�¨ †Ø�‚,µ 71·kzØ/¦ èt/˪að¹½WtpµeZûZ‡}]&Õ4|e33¹p RñÔâ4œi$î4j8{ôÁ úi Ö|QóЈ"‡Ã—Bc< e�=ñf3= ¨ë;õŸCêàiZXxn#†¶`§ÐiÅ®S“�!!û”«0@ÒÞés2ÇÏìÒq0,¥•ë?„Ð~[ƒ¾½0 hEÂÀýÄ¥‹“ç¼®˦¹º¾8óÐâ­ÿj CÖÏ Ž2ް#c�Ääx]VÏ�ꬷKh$÷y•d‡b¼³’R™ÞÐ1kÙlØOŽË,X*ª½tK”D[ߌ"D¬ÿ¼x(? ÒY Þý ü ìÜ=/¹½UìX^í +Çöc¥9Á̳ž¦7çÒL88‹ !xzÃÇFßœ÷.þõÐàHzbö m︇,Mý0„¨yóADoàÂ÷NÀwñÿ¿®¼Q²y.É-‹ÐŒûO–ÿ•38>@¯&Ô–†mÄuÙ¹²ÜLÌTäÏ·yQÑWŲ¿Ó°k:¨��PÃW0l.s錬"Pä Ÿ�´G—Á°/¥ ©aƤª¡KKnÓÔuÄtYTH¡Ù%ž’Ø +»úY:E.GŠ€pªð„héÂ?³‰ü’ÂQb«Q*zK½&1»ð¢ÎH�Ûˆ +!U¤»üØf1-@iê*û°)Ïü‘�¡êk“ÐL&r\éÏYv^“¢ŽÞÊ¥Nñ8ôÓwn=·À«r¸WTÅåMG@ÀZ´›1cÞh Ë#·\ëÔ¾iù +T?lií’Ç¡±y¥Q4(çæ{ôbÙ#³#X¹¾%+Nkd-<&¶U¬?!DÛÇ׃KÜÇDWqá20ŠÞ…3€7'o‚‘]Œ5§ì0p6öó�¨/�-AÞ#P‚× +«úadoÏ�‰ÆòÃàÝ;J³`\\ÓP§Y´U½Q©�iõà*PÆ2#a~lèœzùüpAñ ªy5Vå| +Œ«+(ì‘Ïñ!ò]Âaò½8Ð>—,˜à›�| G›(¡B ‡w–u”±”cwkÉÚ’'gÚGÐÉêh»Ú”ùæÌÿp%ŒØÌvYï!äÍ&È„êt¹3¼E͸e«/ŸLZ¢!!®Pk)(ivÕÇëT?$­‹·Ú¬«#¯"܉ +,ÃË­úy<7î±Ù×jRÖ‹ûª-SÌC§Ïö3>JÐæئ:,VÌí$ÊØk/E£M/ek†çܵ !^xHu†S?ЛVI%àt×ú€IÍ­I|Sëó#1�Æú©U�SãBh—Ëâ¡~® «søw½à f Mº7€gLb =,á1¼¿m9›ó,ó|%Pw»¸žÁuÛjloTÿbs°çybÆÐ{S}‰lF\É&>äCÝŠ �eZ(9ùj3m»ÁtF +h>÷š3lèTñr›{ý�ÊŸóƒÅ Fpp鈃;3=»ï:1¥„·%ag+©œ�§=s|Åî]ú_x…Ü+¼HÃH=Äž¸'B¢+Ê@DÛx·¡DŽ¢ìs!‰ßÁEfüí‚|c—®cœ`p°BÂÑÇÿ ¢²HÒošAŠša÷á%;! K+‹ú<½Icµ¸!@í$ðr¦]=@tkGßÊK¹9[à…eÌ^ö'Ïè¹…¡{G�&+rïþq™ÁAôïž|CvªIre*7Q)Û^l±oS“ê`ñ �/Ì—‚ºzÇçºÆfáñ?uý�ã %Å\û}ÅD@KÕCþj{U-}_$—h®ß v×û$+o5a«ÛÀ+�7–úÁ'Î"û¥ÿ?Xοê׫ï÷É™v]…ËÎËbÎÞ±�yõ_ú¦"_O� ~ï0¸�ú¼êtM¦=SgÆ�qëK]ÅˆÌ•ÃØüGöuå?MÞ7®ŽäÃQðøàË›ž ü5‡KyÝðNn_Ä^úd¬8¶œ»òõ[‘Z¾cœÑ·…MwrPä�Iç­tâ+à[ýÝͦ362; æãøÀ¾šµݪ(@Ë�µ&ð‚,Íû6¾µ�Ø™9p¤.•….`áÎ6rTÌd܇(¬Ö"sÖ<Àº!7Ž*Ò#deê+ÂŽÎÄ+%0Ì^"ÆBò`̓ßKXÄ]aŸ<1`� +ŽÐ“¸ÝéŒ;‘Sÿâ±· S*8sÛ`³ºLƒ“ë ½2ƒ /v\ÆÞçÓM"kLH"áRg˜…îÜþq¾›Ñ >;¤Ã¦±>16¸z=��û=UÝÝ0ƒªÁñŽÆ: +iæÜWØ\\¡ëÌ&W€4~ýQޱ¡{$ž¤Á/•wjgšÕþ ß·óP™ŠR†@t0©Yo¼ªi!ôk¶©ÈŒqŽ™y~C¹²›}ŸH:yKVuÚê_»V\ìõFЇÉ3üÖL»RG¬ÿÖkI@Mhu@Å­ý�¯Ì"96Së`£ÅÍùl'š·énˆþ:®|ƒðÒ=★Ÿ{á0þoùáo×Ôø×B–@§qh«CÔÈ4ñªOĈ„Å™{@«ÐÎH6š*°.>ØOðžÃâø¥ãGFDW¦œÊó(1ãñÐã§Õ¦í9À=ÂgCD›¶øf¦\ ²þ)b:øèJÈ5løœ»†Í€úô0ìüXtöö¢«^Ž"pxh5ûÊ'‹* + {É]Ãþ“À¯ÆW+ûŒPMò޵ ÿ®™)ò£'ÒÈ8$öó¢1Æî(C)÷YÌ¡UÚm«–Rv3IXB&Ê´þ?÷ys!ÃÇ£{q½ã»I’"R¾Ò㤠AW|çB­š!J¸#¾û~_B%Ä ò©rOcBl‹ÖÙœÃw㈌ %Ì™s‡I ßE ÎPñ'*„ï¨ãÀù–„ï*n«<ß‘ +ªK’>µî¾1iÌ’df]`QÁ˜ÈOÝ8ÖòÞ�¢Ì8伨{÷ªœDOËü'Qỳˆ­kô8óô�¢Ù ÛT �ä–`ì:îVrÙYˆìzês#ý(�ÇÞ`«Ð7þƒÂ[ù? vÀ‹iK0ð˜ðvƱðžz*o¸ŠµÔ¥<ø9à7‹lȒʰm©œ¹cÅsÀ jS¬1%¯É¡•1¼ž‹x¹GüVˆf¼z.ÝMÜDI„áu“ÊYÁð:ñŽÃ Ãcr­5ô‘´VLÅ…^Y3gŠýƒŸwŒù§€ÍN .)Uƒu¼Iöé—­ÞJL@õtéû‘È;,`Ù•áøâoÞÊ.K¿>Ô¡&‘'…G ‰?j±�ï@~¢ðŠÂÂÿMPxŠI»æ6òçû$dž±€‘id˜^l’7 >…OÁ{eË´C.wOx1h�μÕñ…7-w_`È�Px‚À£ÌNâ£ðtXwÿ¨nÕ]î ̃Â[©½ Y/•€Â놽 ŽË®Px=ëyÏ"6MšAç·Ë¼|á �àmyJÙFŽ^-]m}Ÿoß `|Âûc˜‚ÑŠ×tÂËó<ª®$-8¯ª"d¥B½Gš +¬÷$I>e]ó!‰²„79t:—mŠ{�do}yÆBü¿1iÕ%¼gUä${ˉøð¦>|Wƒ&­ÉiUuh —ð4àÛÞ¹¯;,á5˜;“Tr­Ë­íÉv([ [(ZP02ˆða:Hó 5\æƒù©ºŸ³&[F:†PG4:jFÞ«Ï( cYžÀƒ¿DÅ=3«OÉ¥Íé=¶¹å~²î­lùxPÉ"žð#õHصbpÖÏÜù)©ñ€”¾È_o° �ò@èP#£dûÉ\¦h*ëg=ïg]5¡âÝî]¤êpAž*—¦ÎâÞ6âÿ„šÒY&Ažd*Å�Ò„�;AûÒjc?xź2qAØÜ•a-–ç0»‰ÿ"*ÿ°*¬`‡‰Iß‚o�%œ?KËþÜóïFm^Ï_>ßÝ�/f¶æü6Ü!2u2cpùÊò¼E•,±AÖ¼J`¸*£J¨!c j-ºªZó9)ž<ƒ6lØ”/ü¹ D°¤ÀµRI±Võ²]¶tþ{Cò¥CŒÏôÿ½zé{.˜Ã3é¨J߇ÑJQ+uJó˜�”Á»J¿„Àè�(Ö*’¤�bÀá(WÏýVmâÁÌÃðvÑ. óz¿´ÔÈS+¯z×¹l-.ïü C(kã=˜·$ Ùg«1 k¨ÃÐSþ"Ùq*â„�pŒ¡¯¡= .pW³Švø›YÙ­$d–ãA&—{a˜æ1Á0ü³%1øƒ þLÎ6ô•¥¡¶NVÕ"¯¾Á…wIåNTšÁÝâJ]ÔÉý…§þuÈ]�e3 šG+l·@äœÕÔh +@67@…Ô\˜ aGÝ$ô;äu„Q c94´ëøÑêñ›\rØUM¢PÒ†?|3�íØ€ÈÑó'å„ȰC¤ˆ{¿2#Õ”ÂÃØ^‡;®yy©B@6òîóå9‡¾¿eñD%Ñׯ�E­zývú½ØžÀ´”¬èFô5 '¢Ž(gT�R²¾¡k ïÏòÉѯâü.ìƒæÐî«waƒOo3X]—•û¥þE@@HTh&9Ýll‹·¢;± ›•ð+9öìÖòÂ]ŠnÏ þ•¶�ì�]¯„QÕ\¸Ôënˆ� ðk½¯kY±"‚¸¢èÐçfT¬ÜNÆÈñÛ‡€yû¥—hÎ)‚o˜ûÜn£ïr� +iŸˆ@] i‘.?¦Au6ï†xW;]—ä!ÞûŽ0U*ª ÿs>¾7A¼õ5ä’{ïYW¨�f9ŒiŽ}Œ‡åûhÎ�Ï(:<¨ãк:¸?ÔÁãÄ>½O6JmX–Ãë>ä–[yŠxviò*óm@àcŒM†§»~,ê�Ÿ:$ ÿ zíiÆ ~¡@l=ØJÑߌܰ„%jt+´ÛÎ!"hZ²“|¶�í+³D¢u„VP• åjI69HkÄs ú¤ˆmêö‚(R6 ™°“K%;Ø ÇZ'ÞàIéVQïã:Y +½yšÙ+¨Â<ÔSÍ ±[}Ìf€¥7­ÑP«� µL*�Kô9QPâ©Ähà*Šñ fíŠzÂOýŠÈLÒ‡Ü,ÖÆÁ+V£®ÓþMðÄq±A³iÔ®P›õßN7•±ÕvZØžUxÏd¸¹JÕÄè€ÄZÄ"�†o×…Ø1XÍ^«ƒ�]}h½Iq³H£7pŠŠô7B< "2xµÇ°Ñ€ú@´ÐD’ôBDõ3¦¼ÅÀèÿ�¨ Üá¢àºæÏ +L‡°ðê Î‹„�Ÿ+‘Ó,:ð&ùX/´5þ$ŒÜû °¤u%Æ6kEj\§ÌâÇÂA)wfôè·™!ƒšÙŒi>5¼WoE©¶½XWÀ�œ›1ªHÑÖkÔÂx¯”¡úJà\A€6eÒÉ«”¿ +¨öb~¹ø¦š–ß t‹�ú½àû¿"ù¸¤ÁE¨7² íߺº™ÈcãþãN} «ëлæ:ª»©UlÓm‹S,'»cCoÀj£¯ sŸSèIøLF’ùœtøxÑžYª­. +r0Eæ¶.� ·Î€u®Ê†æ÷·­™Ù6bµ�Ý'ã6‚Ï"ƒ6Ù�¸r˜^Õ:ÈK‚2$±ÚåñZ&*ó §dý7{…6�¸¼`ýD0/Z¦™&\� µA™¸3¾Ûž&ûn'òrµ[Xf%3)]3a^�öÅèpqŸv×|u Ù¤Ò"86ÉÛ,Úgk±²b¥Ãa³°Î îÈÝÒ‡¬–eù\(‚¢þqK[¤[‡¤Ü=Î! ¯*D TCP¨s± +vØBij­V_Þ ‚öl»±½5ä)U^~¼v%»`§Ø4ojQÁÝBØ�€cd3—óJº°üÞ ÝÕêV ¿ŽѰ9Òs•†Êç€ëåeêΉ�nj•åuX”D�,�/jXï…WPÀO­y´cáÄ ˆê;j�±|·KZ—MˆsT|�–°Qðïi‡Kù4”ä0‘Åz·Y-Ÿ’Û(�WXø øÏêgy¤Ûñêm€oó­M^ÀµŽÓªLÁy– Ó¡3�ºÕ;“<jñ—iÚt.ô/zÄ$n¬éìeË +ß 4zÝy%Øo®º~ŒáÙ ’òjMz~¾¢gÿ®\¿¡µÀ7–©kŒåµÖí0÷ur1Ú�ÃDdE8_«7§Š$Eƒ­Ñß¶bݰæ‡yÔï|#ÝĽ ±³¦¹®Y ôÝ.h¥u"'# ý‚s¡­çùðõ,Bõn¦jo:¼ô7ÆŒ t±;ËÌ^—µ[7År·^· ÄR?&Ó¾=‚hfÑå´éüæ‹Ë1¨,"¬”(ÿÎ[Ʉ֖£ 8óå@£”Öâ_ðY„Fº8°b¬O)¾êœ�”ŸWŽ<œŸ Dʶd9 (lQ°CP&ØÀEF©‚j$f%Úñs¥Dz’%,r¸nÇô�ª”à'¦ +£*‡e÷ï›±sôƒ¸>ÜGÓ|̲ýF8; P�º¥Ëq¬#4Ç +ÄUn­—Y-øµž6͉ Ãb‡UŒ ¢èíóŽÂÀò£Eå¿éÚüàÅ&ðŽ‚µ\–Z|Y©uœuµ9æ#»Ø[£ÓáQ?²Ï3¯Æ“Fü¸ô¸r9‡;HñIl¬$¾$_¶ àÑæbÚ  v¸Áþej¡²ûo�sÚŽX"±–£&ìt}À"ÕDòE(™3â�h_ˆeÝ�8Æ'Œ“,-ª¤øÞªûÃÞgI¼)á7XÝ# «¢Þw@¯›¯L®÷&nÈgÎ}_Š€]‘IR4qoØ>'I—ßÙÇà>ý¤’)@Œ9wK^f³“ÖÅ8A†¨X K{Ãß8¤UÜGúŠ‹KÑŽ”%®WÑFº+3#aÌë†\$Ÿ/¤è¾^Õž˜éhQz´‚h!½-À3z·÷Î(D/ÎÙ¢Ucz»&DP6i£ì;#ÿöD×8€»6O MŒF…E‹)S1›Ùc;×ìš?C`J¾QàZºQ°«’h”�¿o<`Š~:ÿzBz“C¼gú0žhgaê��œ¨”z×0“8€V +šèrˆÃ.¶óŽ*"WQù2tKÍõ4Ñ +»,!ò AC™Iˆ§Í`HÒ ´CÞQ4"Ÿ‹+©Eg$4ù�4#dg³­¸þt� LÞ§©}m—Ï©µæºs‡mç%&µ­ÿ²÷é1±~7^ºå>ãYï- +ÃþŒ°uF>g}…‘Éãû É?Á=—|ûic]Ù†»Tê¡�õŽòJ8ö³ìÈ­¼^z&œðs˜…õY¿ºÖÝÓŠ[oßu¦�á¡Eglt�;8ÖÃ?¦üýì^ÇÔ é Ú&ë„Xë¹$Tåq žc£ŸÀI B±_�'Cü@lC¯µ; ̧ˆPx‚í¿¥)z�]¾Kä�c¡¤‹U¯õ‹š™túµ®‚/‘ý2@×ÚÀ}Êþ·³—1ôÊ·îaËzÕÀ4nkß„—×zûMÅt2"ä òb°I 7¬ðñGTÞ5å1Žê¯Ä_|¡­�¬kjÜy 0q +ì“ , "~0��Õc‘ž&õ.F«ýE…P,G7%ø…>7¼ÕãM:Nf�0Yj}ùÇú¤2b›u™> [³qdýæªý�q@ {€JS6t@K+E¶ñfK]㵄²^µó† §ò×%À�¤bÅ„( [sß„­¿9ÍÂ3•"¶N©žÑ§'ÚÄtR�kߨ"Ö%þõŸ™ C”Ìxªwr!•v3ä¢â·AlRªi€, +­Ô ]ZÙYy«Ì‘0é~ïÊ4j9T0²‘6–O{àïE|: Á‚<Y‹ wÒÄ’ ¨íc�§ûA“öJôæ…Éá{íZ7ô€`K|ó™ØlçKGóЬëöñÄëT%ˆ^h â} t0´°§„²�5zDzD`ËÚR!/~¦�ˆ™¢«rè;I|%c®ƒ F¡î[ ™ØÀ‚R¬ìö@ë±ÀAr9a´›î‰w ä8Ê"}B6p�ãìßÒ‹4×™3a +;ì ¶Ž—BŸ¦Ï& ©Hó‚�F5”‚=;Ö!^J-.$’ñìMF*R:I—rK_îÓß¹—&nµàK +{žxVŒ•¯�~œñG©3L‘txÎU(Š…þ üÒ·~iY¬Ì_Gä«Ì]òJÆæH§„rxÛGˬW]wÒ#FíÛà­˜Rê)F´@îâ3Èf%¶ë_—œ`ˆ; •fá„¡²+�àM0cžåZÝ=ÿøî +Úá>QâŠ2+bÒhð¹qPGQÈ×dkŠeh‚íVk>¤ªLÚl­[êã ì΃Š58�L)2u¢ +1UG'áPû¡yg}H¹‚DßNž?øàËg£CØô"{h"ËÕ‡}ã©„mVw7b{ v—‹S‡Õ*1Åt‰´Ôý"#Ú +<�†XÌÍ 9|ü&ÎÖšõ€ÉI»¹ š~IQǯ¤þöÒë¹ðe¸|pÆe%PmÚŽ‹( >Êqò,Í�Siã›Ë´Êú`Ìq ÍB iÓ=*ÍaÊ3œ_šã#Ö -�±†ÿþ8~âÇÿÎ0«»�VtI“ ð›«S"^³ªÑ‘hËmdRÄ·Y�|12ÊCLyâüŠÛpWDÄø,�§Ñjv-©ôÛ?þÀ¤Ê^¥4ß×yÏË:Ù‰RéLB9Lv)° �p1pBâßÔ³c›÷ +ëçIÂ41 ’àÈ—žiÆ H°‰çZN©©ï3äek:™qÐ$J¶&{­úDá'€ë1{î†ËËi»tðþɪƛYûØCV/Õ[›‡z”Z�œX÷׎KÇôÂ´Ž +ÈÌ‚QJÉ„”¶-›rv+¤Ð�ç�wˆj86ðçK®ÖNe´JcæŠêؘ©�œÙ¾Ica¿©ÕjÃô1Äb½‰qÜ‘2}– +õ½>}×B!êz€-Ù�·Jâ â';m´P­ðXº˜˜Å$U-IõÝK4¶:i5K ÝÞ&ï#Ÿ��ˆ]ÆE5áŒ�ŒmM›(C éGô +ÑïÍBL©Ïs�¿dÚŒøÙfy jŒ1 ±ýMš’ðh‰n‘ÆAõ,ÅŽ�loÄàÆ}àT*bMóÊÓZóTJ×cc‰å ;õŠÑ:sgš>±ÎÖy;m÷K«äDaêÂÚ)°u¹Cæ’ pÖ�-ÿ¢Ùžiß´Ao:Ç¡#��â×�_å�z ©;t¯:š\ðQp¿rb:ÍOO‡rÛ5’úÓËåsÌlªÃ†`{]彫 Ô›<³ri³–‰Œ–0É’Ù¡Ùüïˬ%gt{‹©vB Zæ�èü8|bó3,+éAÀT*ú9èð{x¢8qÕDû}÷Hc¡ã·a>†V“0Ñå-ã¥�lî03î±±ªÀ‡÷‚33Pó­ý¨]zœræ@Ô²rQŸò^�€?�'ß$µEÓ"ò=õÙÓè3”JzWþD`)H +ÚiR«°¢k‚cˆvwWDHS€��®JVV ›ãIC§äAŸBÝèj’VøˆÌLGafѰ±DP1á�?èjª^>Q0e ±„¤9`ä>Åk•á™@ÒÓ4TG5á¦Ö¤¨¼ë`õÑV&¸DÖ¤ÍáÀ9…Í> ›YTym(‰*sD"èp¹G:á6PâÂò‚°6$4»‹ý!2ññ¤Î º>½ê‘Î'^'G�|�—Õ] »P÷Nò»"Ã{_`Ì?•<žèmJd–7ňnÄUN ”Á­)¶Òâæ–¥dÁ¢ZðØ�±g¬úˈÙÈ#»G/Õ„î--q…˘µý’”…-"Y*L\âð»Xƒ„‡8;Ìši&Ä7!á0wÉŒÂÜ„DAF6l‰àÌóõ„•<¸ÇÔˆ +R(YâûB†¼ ß™QÕg(øÅP°'UáolDúWm�%–y1‹Å‹â/×i‡ØgF�¡ˆU8«È“pL>CCårbd]¦f¦Ç' +î:SŠÄÔ>!Ê<%Lk\2“KÝS΄š]Sª*EP)aJ©¥JÓrZÖ[ýœÂUܵ$6W¢!ua�»Õhß YKQ];ÂìŸÔH¯üTÁ ëàUOâr�T4žåLØX5q=zQ…ZÐPmÆ©ã?$PD±†.Á­b¤n˜Š™a-6S¡Åµ°�LjÃ;ÙÔPu[M�,8(eoç€Ê.¯ÅúÀ�Vï8Îv0ä�ÈÊ×,{§žçgF*“0Bð$ +T'‘SÅ�A5$ât&Ñ·ÈQVÒ‰ÖFiFª^ÄaÊ!Ræ€ QŒX`Yj’ŽM/;öøiŽÜ6(¬¦óˆ›šL¤ ,‹¦ˆfjþ9S "V7Ñ®<Å)SL® +’PãÇD,ÍK/ª �„Äx¨€k¿DÀ‡OΔ $w)’ -~¨¸ ×0 ˩ī ¤qEχGR"ð”ÆÂÑúˆ›„òžÌŠ'KVšó·Ì៣nª¤:�êi£¨Øx‚¦"´¸eˆî:gVl2ªH yÊÅ¢”Ô!ªA›yGô-rB%Ñ=&ȦÌ<ý §2(,5U#4¥¡Ò|HuËŸfÖRÇSXEE熼’ƒÄ©ihœ)Z»ŠàH�Y̦E¼¤jÊ9£¶ä¼iá>}³©'DÎoY’†P˜Ê!ÁõVƒÌCT}£9Gº[”Cé ¢!FàCDf]Ñk:­5¾˜f¥#´ÐPx©UZ�5Þ+'�%‚—ÐYQ, §DPៃ©Wq`œ$€jvÜRÜ©×Jmä[RÔÀ …«Aê©s@=I|é�æ¥Ôõ€€ •–bJ ?£$”ŒÎK0‚‚µ§PQ"�5Z]PA‰×ìLHÆu–D\ÁÕ”êÙ øY.þÎò†»DPÒ$^ô\L“4¤™¨¡`ŠÁ;J-…{實ÓÓ°ëé“^@ +@œ²Ø—•Ú1ÏU*uæÝÿ°‰^BDHDÉî`òÊNI…bñAð@4lB*<AHØ/TÁj¯‘ð2’¬‹iús^2^†AWÙ½ˆôaJ¼Å¡zy5ü¡0_>Q ‘Uê‰!Ã†Š²wô{_Ìœ#q…ð…vŽƒøâ‹ Ä3GˆwD¼Ê³Pe©Y<aÈø<¹Ö�õ W†ö"(ö"ý°á…ŒvÄ‚jÑŒ„/˜ÐOØå ‘@®ªú=³x°ù'ðCéÈþÌ®‘„ÁD´0ɬ ©©R )zÉI© +1÷à##r‹H�CˆÈDèâ ’ “·Lu�HmD•¬‘ ’¿ÊAVÎJB>™4¨ž÷\‚'Ðë÷`ä3‘K=î˜å¼Â_r :°@Il(tîú葼d‚̬:·èE¾Œî³EúË"ÚaõàCë1%ubë4ܦÞyÉÔCtñ¿ùi±oüË«F÷`:”ÚÌ=@Ìò>_#*e¹',áÏ(4�›JA<# „±å|£Š¡~ e¦ñ¼†±UGSÝä""aSYdÆCøNù” +m0æÔ�5tWDöúDå$“‰N¸PÅ(„tÖ’²á}Å +Ée*ˆÄK$35RTANKµ ;˜� +Š˜XO+^b>}LàÄи1Ÿæú´kÌ&d áÞy‘¤£»Âê(a½ÂÇ£™ÒÚl/w—*‹Ÿš%Ô›ÒTpÉLaSápM4&Âë$R–Ò£aRtÙ8�‚nuŒx™‚Mu´${mw´•¾a¦ð÷šÒŒŠÊ¼^JI‚¨<%›b71kÏ38T?e¯ÓÙûê$©ä¥�Na(4šÆé£’TdÆ�ªš°lC� ú_ò°Ü0 6Eå1Cœ"ü¡ ƒžÖ3#ÙV¤ôAìcåJ©öTÃÚ* :mUXòiJˆ¤àpV4lÙf±ÔwU�cR˾GØ·ÐG[Ñu 㨗V25¦oQQU$J˜|ø ’É5s˜(Lká(zpÜ‚,XûT¨¨�†±‚¼rô6P†X^ 1Jy†&G¸(M5Å÷>‹iuª%³IqçŠR" *‘‘TÈËÚ8c+F¤D�´LAYˆ�Œ†%�å¾ÂFyì°©)‰;ÇH‰ dº—ãOäÇ‚B'‹GùåK¤Hâ¦8A*Ü¡ƒ" UBXZ;險=›'¢P¢Õs°¹ÎTKL»fB•‘ÏÚØü4…’q‰ {ÃE2Ã8¹"¼ï¨h¢)¦Dñ'e1­ãa«ˆZé܇yq› ˜‡TW¦škÕ?†,Û¡Ž¡ß•Ö‰@1@A`â(0 D€.¿‰U8û‘Gà(n¤O@x$‚ @À®‘ø$D&” $²’ÑLnILpP�V“°!P›µéð9c>Î8ÐáDp@±ŽdP`�+Hø°FK uÝ‘ÏBT„„7(ч� +’€(ÑA¯LD8*„JΧÓPK<®Îз´Bu"Fq(=œàMQ š IPZ"ßM^Á)2¡TZ" ™<"�Òˆ„ÁÁF @��S!ˆÚ$&QäáÖ„Pi×R'zE®x¡¤¡éÑ•‰,"°˜%:ÑïçS²tDêc/’8z¢YúW;Œ^ÀÑGž�¿*Óê¾"¡¾iÈÎþ'g’öоޡ‰BñfCññO¨7Æáµ(ÞðˆPžÓG*””¨xÕ+ˆO ã{F­;&~5�?މ¡ò%ÄÈ-áøÔ<îÒxT¤zf$ðqýqè_/F-NæêEWG7/â0N"Œ ¡’¿¸‘þí†õ¨êQSì�¿0H’›Ú¥é…UÁèIÎâKbƒ±{oxïêýaÛŸfüW¤þ9¦æø¡xÇIºÿ²××?#¡ü£¨z©—ÄKzÙ¾ãçâ‹èƒïþÞ(ѯj0Ô'‰ †ï7‚ø#3Aüâ)êãŸ2þJ8?™Ÿ3î[høoÿN®’º%¤ÿ_ª™¶¼Tú§öªEÅ\h¤|<âB÷Ã�W­Õ—xššö‹ê'hìP¼+ORÒSHÉ2/Wºvo³¯ÂZÔoö“ÿài¨ÆK…úë¯Õ*R�, me€È€b�²¡?¤%Ä*&‰Dû€ú¾<8R1ªÙ<@‹¸ ½Yüeä%Æb1€Î Š¢´-)É›ªÚ„„6¡ˆ…8VÓ`Yb¤Pj3 壆kášpþ í^ágÆÒ¹ýEæ»âñÜûÀiU +†<„GA<ªh /„<•1å�>±¿ÒW +þ<ø5¾ÒGA />stream + GýO‹v ãXÓ•¹‘Xˆ¯n•/h¼ñûnn!¶®¶™Ž¨rçbl…á.„kô#ÃͦhGâ&gwRóS̓»8�á]«:ä•Hm—7^F ‡ÁÞ¢A¼U4ð«³$ø«-Ä«ç[W;Ék   RP?S«aºvãèˆAº;:j¿w1áÝû±?"š÷ºÜÑ5’Û$;Ç4°£ °®Ì™TvTzÄEB!¸šƒ*szr§rU´ÀÀdœQ0Pb¿+"®ômFÕyº'L.îe!¶ oó‚lÂÞA¶Ù„k˜m�0Ûß@[ßÓ|;«¶­F¼F‚ 縅§èÑOKc¡8'»lîbÜM¹«»…wµw±™¤ƒ›ž1î>gÔE±FFt¹Id zH³Ìë|&èÅ]£˜–ŠWÏ_„z;¹[㻋æ0Ua™‰Ý Qcƒ©‚�êDu“‘¬�‘ `lVÈ�«ùÖlH('QAœؘ¨í4ÒUTú.cäaXS�hV¯|1L�Ã(b†ýX�ßf×ð­õpL-³†bŠ䨂§Å‘C:¡#í¦)’/–EÈk!.¢•Q™n!Šß·fÉ¥@G„™,ퟳJ:Rj̬\ú‡ñ$Fpì{¼èL›WVó©É&<­�1øá� oÍQ"æ!IJ7ø9Æ$S W‰è@rù¹¼k¹¨¢›ø“$LÓ‚äJ�kÈ”6?ïý¿«RLiÀw§‘<Üè�¤¥SMÜÉ £Gæ?$îúò!ÎLé¤ù  f¹´�ÕšÒ‘¤C�ä¢,��-?H dÜ”ì«Â%g�JÅE):W—üÜnG1AMéX>¨ür‚:§4Ô®•;ètúr(¶:¥s=yUÙÓ˜ælæo¡ O¢™\Ó„e +‡˜Ò×Ù}‚£ºy¦t·£H ¨z1¥ÍKó7Å.nûê*. +[IïcÑ‹ãLé‘@òÛ>¡ÿLé¾ÿ ¡•–‹â.¹Ø¢�Mé²Ò²X[ën¹(´Î¿@.: ªõðˆÁC¶)éã�Ó�$¼�lGÿW.ʱ½h¢�¼uJ«ÓöPSo:vJk965q$$ú,. +˜|§žWJ¤ÆR•Í8°Rðükç#‡ðïmN]=�éu‘,z’*«I(#å’F%Ÿ´7ýò›c4*2f&ˆÖuyNŸ¹T4³î%F‰&6i$¬Ø1[ 'Ñä瑦‚Î@tún.ˆ ™T�†¿t|0•Ç5Lzšý}ÄB›04€{ ’°ó�q0üÃD‘¼0í »ŒÛELc†‰_’2/¢èÆ$åúv |´€)P?I�3S™#üoIK† $qÝq Ú ÷ük_ ¯P:ÉÑ ÿæjåSÆ ée$J! K~o�dçÓi\Ÿ’|ƒVg¤kd™ƒ¤ºÅTï#BC;w�©Î'–$ù�Ã1|g\sñ ‰ h¼|òãAR&R |6kÿõâA’_Û á„êA/µD(Àqr°I/W‘T<$¡ê@Wv¦`òJ…�‘À5ó )•‘TŠws'%áNŠ¥)³U>v’Ìö …~¨0ì��D‚Ž«TS‚>ð„¤0aˆ}HãBÒk5¶·* $ÖéV=qæ$÷@Hª M�“³ñ‰ $ÔÜÍ¡¸bl„¤OÈtçæ?†°ã’ê#.EO>By¿ž<æá’ Œ°¼î3pV’hxõë MG!$Åx­w݃õW/„�t\s·ÙÝnI’ä!%rÞê��û~ +öInÇbäpʯ7¨M¤MVïðÊìAÒS¯q?uòõÒ¾}~ú^’¶¼~PæZQýúcƒûzÏ#„5i(ŽF�@³Û>©ÚI¿@ž_hˆœŒ‰’ÁòïÝe¬ué¿NðÔ[ÖýXp +-C$ifž¿˜§`–î€\JÖ§=ð¶‚6ÁŒ4ò€˜×# +s +8ð (dàl2#ç¸"� az©¡*¯¤ù§ ÔÙÎaGÌ5¤˜o7ø  ©È[õ$á—C3?V¿Ê¡14ø¢rE‘1/HzÐËꢀں I¬RC9 …LY�d@�ÚŠ:V#ŒBé,HÚ7³± ¢:7€M+†#Õw9çŒUF¼ I…ŸN2½š…š» |í­üÚ}= -Hºðdi³e�þ;I +ÑXÆ É÷9øÙ 霣ãšdv�”€�èÐ '"�ÓxÝ7 çA’ßG þWö€uHCU”Tº]Ü ':$ÍŠtj=‘-ïåbÒ¶7°y6HJE«ØŽ”‹6H:. ÄP�Ã|š’È ARTÖØß®Â AlG ì\Ëf +©AUW Ó꫹_á:ºARE£Ûæ�ÿÎfƒ$ÔyXvp]Ó I£b é㩜ÌÃÈl�T +Ї:fd‘7HÊN3Œ@OqÛVйI ¾„Sj9t ’ òy-ý‘KI‹ÙTDþÇn�„I¯Ù ,Âû"¤$]5 Ä,Ï/ȧâII©Úz’kïÖ`s�¤Ó¡Ð“ñëúYÓ {Uºì ÷EP‘ŠON;$AiQ«?ÓjÄqIt5­rlÙmÜA7óé2×=‹ØAÒ5Ј7®œké ©W ^áÅѪ7©ê ‰­p©$ú`ñì ©]Ú–ý�ÿJÈEÕÏ­INfÖúãoî`ƒ$h˜f!¯y¨Òbƒ¤¤*Ù=°)¨A’>†.û½œ +éÝ IéVªl@°�$…²‡DKˆ“+aƒ¤ÄÕTÑ•ÇE¯Ði���:1Á†HÐ I×ft–Z�Bƒ¶¬j�„Íe‡[:>á4HÒ”ôòoìI -�’%XgéWKƒ$ŠEÆÜ2ÄèsPƒ$,á œàc¬6HòýYÌAø2ƒ*LFÊk'4d¼"½«òÇíñQÒôSÌö{ù‹ó�Û é6>=@À52 ’fÒª'çc…B“üC“¥AõR"AE4ö×tÓ §Î[µMTôB ôD­1Õ‚9ßd&ç¶ÍA#­;õɸV$$¹Ú‰Ò¤šë€ÆšÉ쉳–*r!h�¤Í‰ÒŸ~Ææž¸ÅÀ�Øã¦\LõH½5¶>íÈêÄÔ­‹$:SÙjø‡CˆÓYcÆn�´ ‹ÒˆûP|Ä“2AÈÎÇäÈPسDi�äÏ—s;'ÁCÌ&a�D jÓÍ#P]”4�A’Ê RØÊ>ìs1Hj�E1%oŸx̰‹s1Y»¤¨"y¹ý…KYHU9!; EyßßÁu_ÐM[d”�pâ¡È(–4~$"¿£z޳Ã4„Ôæp}ÝÊÚDâ¢2 ÿpþ?ó…f5m몋ÍÈÌôZqUÅŸý|Ç�#u×CÉÝê›Éª¬Ã]ºeiFT•\ ¤´ß^å¤ „`äÃEih µ§­^ü€!¦Z2"¹z«;&Ñí®N)µÏn_ƒÅ¤¥Û^2‡…ÐÒéñªDŠ 7Ïï>4-Ñ3#„& +[-¹ó)p0–Y.Éúô +ü�ØÓµY®ÔFA,ÖØM„ÁWQ»[RÝÌl#RíaÀU¨º\EéÖK?±kš”Š}âŽDžƒQ†æP0f5•Òï¸�#T™PkYUÉ¢ör‡„[tdšA`å÷™Þ<\ß]º/΀Ø�°GÐ REЇY„“ãò=z’ù&Vͪë:ƪS­O Ù¨%JáƒöHóô«XÈ7‚ÔYîL¦-}ž�÷Z�ÃÔø…÷6¿þ /h 4A ±û  Rì=ÚˆÀÀ’*€ÒYªšú;#(ÄØXESˆ¡i²èÃBY6mæ,+‹ÈS–�´¨ÅZO:T‘ãä—LÏ,�7jW¬’-úGì@… Â�«8¹ì„jö…Ž2 Ê\í¥ w.÷»‘¦öi\ß?ÅG&�7€¤ »5fu7ï©gž;:Å�ÒfÛÍ[Œô¨œKRƒd3³^1ÔÆž~ªÿ«ΰ ­-qa ~è>‡úP°ªŸøŽ:ËqÕŒÎÌýö°âsMº1œ·Øôi„×y…WxÂŒjJm@xàÀ³²ï²Ö³€¹ Ä&˜+Î-§¿�ⱉç-3ÖÔ±.ÒÅÆ?Þª”ÿ›3a€ø•c¨4üUkÚ¾ƒcQ.ž½m¬ÜµEM +¹6Ï5ÍøtÑÂ:“pªj$12jO£<•ÃY�ÿ¡®Eeý8x»ÔG(¸Ýáx¦èµ�1zèpËìQwF¬áòLÓ÷©êLSÌè:: +Õ²áä`Ø™þ·+Ýp%ž„̦Òá*ENÑz¼fÐÜ ˜W޵f›/é›6îpÑ}Ï⫬;\¼á©stƒÃE±=ä‹òíy;¨™†£bé ª2Çù�?“áõÞál=FÕá…Éy8àÞÖçq§†¡�¡=\Íš’€×ÃõóÎÈ7*Ìæá´;W2Žp}ŒåÆìù:—#4ëU'åïÔPÖ¤ûú�ÁjÞ'oUÊûÔ§›åýxXSÖ¢œèX>ŒeHôv¨Sr�ƒ5OxíuÄ ¡¨�®`f§äÖ Ðäì‹eG¾ËùL¤n S�Z x³Ó�tÀµÙælFKgLáË CJìs×¢$Duhˆ) ÍJõ_‹4ºÉZ³¢"C�UÝ)Ë>„*£%WÓñ¥ÁId¡ÐºjÑnú1µoáÑ€‡½2…D[,À,3  ÌâtP„l])«ð1¥wûrˆDs¸o‰©7œü3R€¥éYè õIòÏ$ßJãÊÏlCdƒgŒúþ¾éô+£ï"z46Ù©ß +[÷Nû†èȸdøbò‘0JKJ/©>7?½hpQæ¡3æ,¥j Sg¨i›-Å6‡UÂ3{׆åžUˆ¨§É+Ømp™$�ÈéÓ'¸Ðu:Û‹»œ•/‡’æÕbÈLÔŠÈñ?œ '›x0Ç vl¡�H妋Í{ËØ…}”y~dæØÕ5ðn +ÖÔ®™TèÌ dlÍy \^Y™¦Ñ¤­Õ-íUÕ­ XjÅâ,ì„kè/KQ}õûiõ]Ȼڀ¨×UÆØX©q2Ó‚ªC’CE2�[sX=sKŽ‘ÿ#yþƒ/ÀœwøÆ­\N›v‚/Å3؇8´!×D5!‹Žm°ßWUƳEÁýÊë3$QB®rvýâ0c½Å®¶«*¶"ÙßUNOÎaVQ~Ÿ›–ÓD(¯s±—’UƨjÑÚ¹£w’‚bç:ª%ð?wW ;»—iÃÓµ³¥koÉõh5»’¾÷ÑÄK\'uöóihæ¡ôV÷d€GÔè +¼”´t‡oEŠ)lv�†©I7„)œ+Æ¡!!]áT¬…LËõ$š:Í +æ¥ðß—Mg¬¹þà.ãI¨Ä«zbüH©U~ +.‚ÏÏ“Šì “ ¤DFZÔ'Ìåq«L®ë  ñò¡·<@`ɧC!Í B¾Á `G_kÔ: tWkJ)Ä¡H¡bÿ™÷�¼4ŶG’šx/ÞÂ>†Ægq£¢S©Ÿ'�gudNE3sAqùR3ÈY%‘Ïh]NÔR¤×’Òv3OãðÜl�º'•ï¥þ›ù±d—!r‘ë +­}\­–¶ú™%UCF*ÔØ^dMÿ²ý9ZÉúºç¥´H/Y,¡žÄV#ó²!m˜º¬ŸZûˆ¬ø³HöZ¢3'–ó¿ÁJ04�Ðú'§¿Ø©Á숂¯ì›ªa:Q¢ ¬ \�YÅJ¹R®IDª§;8E Š“iq�á)Û¨”ÕÝ™íéßöªW‘�kã`–¬"ýÉCiRr*L0]Âö§+Ft­ (8sEß_—¦a:!¨¥©saf(W¼aðÖ$@ʹrOÌȾžÁüÉ랣áì½Óç¦ö¤áà‹9µ7S²Œ‹ô±g³¨¤LÏIÝ^g‹£¦ÙN#C`¹Œg=—srgIÏ3Ürm?Q Ž©ÉLîX 塇ž 4�´–Tx¬Èp¢á£Îâ•åŒÜÈ2gmÅ :”%}z0æiÕTÂöÙhÕ_¬™÷ÙÛâ3A¤�ÍxÍLXU©‡¶¤»SÞ¡µ löÛªI¬YìkÒ|Yìl:ã#Bã·¶FbètcéPrà¬q”ÀÙYFÞ:W$š¦!íÝFã˜~WÃÖØ~´)ú–¦EEÀ’î Ck _ÂNµš>9:ç}wqd*‘Èî#a !†¯ &�l:èì=~Ú.ªúÝC"7õucY~À…÷›æ¶¯-Bn{&ÿ±ï>cÈìLWA‡± ŒÂÂÓ‰žØ¾®£yGmá< +Â! ²ºN�2]ªL5l=^!bÛ~Ž5¢_äÄÐi2Uð2B3 Pž ±;5thª•KP~¼0KAŠÄb%zÊ­=$‰à}¨wt×ÃhH«÷¦èUR܃ñ­|99¢6§3ãúÇò¾‹ÿ¢Œlè,ØØ�äÙþ:Ïëè>õ¹Ã^Ÿ5iBÀLøíܪ·­Þä;xÔ� t•O<ÈGsHn€P¾`ž'ºñ˜UCo„¬(51áP1nýÅÒÖ¨'‚³ª;q$‰ +JU‘‚*à*‹’ŒäРiñ#HïÀð5"ˆIC: ¼ûb+úϤuþ? õÌÄ Ñ·ƒaÇTc4yȬˆ÷ Wè+¥¨¢=© iÈä? �"¤�êELCL‚-æjkÜåBÄV?BFœ‚¥ X•rì3–,¼¤¾üÄI:öm˜*ôùˆÙÇe5ŽÛã®-Î8* S÷tSt³SX�±ÌØÛ‹B¯ˆJw=ljÚÚxŽd �4Q9&Ú†ô>ÀRÔ¤+ñ6¶0Ä+ói­•¨÷[&ß:›ÀÓ"ß4éJ¸¼ɼH¾ϯYžð¯\%6ÿûžÒõ¨ ös!HfÍDÏ8Ø=i9?»eøGxËó¬Áív q Òâ^Ýü·$7kEã'hGÜrÛ=°v-±®s‚šü©‰…ºDµa2PÆl«…Ö*ÛzÁÎsê“EW�ÜmiÃsR'bTK#‘¾“�" Òý·©¶#ºGŸ}!›÷§Ðìm#4#g +ãþ‹0…B©ã™KsÍî­¶AØIÌ‹`µ—Q’—<�²u§EŽJ6BöÅ«úÁ"d÷Q4T”ꮤâ\vM•Å`93©ª�N¦c;*D0‘²HˆwЖ‡¡Z©®Ž)ÄÞ-A… W½9‹0íSS&£§Ô:­YHô2k£Øx[û}«êý·fóç¿~]ÞyîØ¥ÉméÚ>ƒ¸hk2–ðõ.OÅHÄ£ F'—ñÛÌY]Î;UÝ€«C£fÙÅ ¼àÖÛÿT¿òíå×_š +Ê òc|Ôñ¬Müß3Em®õ¼"=1ן\ŸÐçY*XOÀd{Ï¡ÁØqDÎŒÄÐÜ裠;r‡ xˆ0)ªBÜ"·±«ïøÌÏraEWòªmÕ'è_pÔ…û…‘+fg¦QéÊ¿!Î1µþ[€8$^�PôCêj–î †'�ÜŸSÛ´�§vL{v¨ÁeHW³Û—Ír’| ÝïЊ.µmRè8ÑÝðƒŽÈMËD–—ím@QÔµ{dÃÀɿƫÙfÁû“F  8ZgüJ[1)y{T–R‡�¿,hû Ëý27 +Vó$îŒÒõŽñ|.¥¨ ÊÚ#B»CA-–*¢±¾k+8ƒè?8ÀCÄ”`XÔF0”ôís©×=‰õ +C�÷Žîõ…2 ›ìí¢­ U9õÜa+o!´¹² )S1o“ ˆ¼t±œ7�ëg!n7Rn›BÁ×·�0:ÆM¹‡¿ïJð �uz+­mW¦w›Î¸uÏÏ^d…–ØBÚ4˜‚hÓÕG´á_€&x¶‹7àu‚³‘fSV_}Þ}zò*àL¶!-á>�l~½­“«ÔǶlcÚ…±\gk+6ï–{Ú†“mµ“ø %d®B (?˜)¤sQéq^#òņ¶'V»ÖæYgMÇ´|±y#ø6íÖZ¨¢ÕÏÖ´n®ðõœ³C:Á‹ÔF±²-R zëdm[/ºÚ¸ØŒ…„G Ë\³ “�Š®zU–‡õábQE‚)ZÓ%ñ2¨Ü´Wh@�Ñ¥¤'>½wÆ4 *ü%8,¼47ã¡),ÀYëj˜:‘3×IÄGò +P7ï ®u[9ËÑùd ¯÷ET(D”¾Žö õ]&³+¯�©þ–üv"CDš¼”×DÅçÆDým·R\ã¬y —P ãh¥oÜ>Þ¢•F';ô ëð÷²–^¬ñ6૎ӥaF=b h U@\˜í‘“#´nÂy08jàq¤r& ¦Ã¯Y›Ž@Û)ª~ò´� ±FkØÜÝO¸äé@�YSTD¾ô3*$¸öÕu›�©‚¨£ƒŠ`HB ÓqœYÓ§ƒDx6*¶ÈÒ5žbTøKö±8àè&¦?ãÿ.˜0(ï°¶‚!q!^› цB4Ù)*Ï?<Ü_÷¥æXOï’ÿ04ˆ¨Ç· d~8ÏcÌ&N…T4êRT–ŸTßÔ4´Ä}ŠXÇ|è?Ð<±‚™â$XÂdî}Ìu¬Øßœ+öO¡W»ÖÀSíØ9:§6ão`­Ž#nÁô¡à iT>”ïÍ-V½äux#¯á ¶¬’:çï ðÞ(]¯TT1ˆrû@ÛLjoè™­pË.°X-#U…äÓh0ÂÈ“ˆîŸ·BB1¹ü(–åIT¦=“*!,–Ì[¤¡´åžrJ*ɳFäÈæ~ÚGºáÃv� —íD×Edq7{¢›ë±™éô Í8u´alpEó? uÇpå[ñ"¿îWv—/ä¾)ÖØPkwØ vñ`ößeip‚@`y`Ìôö×ÏéÌvÊXÅE¾ø¤CÉ'®�ù‹£uÕëxkß0dÒ¯:‹ò@Y \J‘à¢Kø6ét�™†+Ž×Åð>ÛGu�îìëÉyÅ‹ãÆ“‹�æÕfñð´8ÓD;@‚¿@!}ØéÝ£þŠQé •JJ‘Í×P}HRÿ›~`ó7x½%üFó¢æ�õ´"hth\¹!5ªKÛ¬2?ùÐ/œIEESeõZ�± (^㔞®Z�Sadš‘H½%ßÕ’iíÝ9F�’²»¬ùt6\ZÞN¼syáUãºÆRî“"r…ˆ àö�âC«‰ÝØ^h00‘Cazçœ$¨«žnQ9„W��ˆ–Ð1Ú™¸[VQJ>»‹ÿ ê‰AÅVÅšì¼!ë–Ã@�5guçk´Å{ÇÔÓÿfLß �4�›ÚüV¹ÍZ5Æÿ]Ü?E/ÃF…Áh#Q¤ƒ$²ÁÆUÏïT�=äºé¨vzm¦ŸÝ³Í§äDZ$×)”¤ÔYUdZLÃÁò6ÿƒïºóÁnR­*‹öp«¤ÅúÓ7ǽÂÔ|ë“0PÍé#.ŒFW3Eÿ}kÌ‚ÔǸ�†'éøŒe 2P®d˜¢KÌe¬RÏíé/ø¢ÊÎ17eÊ8c‚3e»vDòµ^9þ!¯Ç†ˆªWR°cÀjÓš—ñ¥#æ© º[ô÷f­¨¢ÿâq† èäP±öG£@HS†pGµ[êèÚ�Ð6�›c°1O:‹ø—í¾¡vyÁ ºX® MÚMKË84>‡WÁN$¡ãÇTb•á°çP¸5© o½€Ÿ·¾tdè<¯¢q„Dûs$ð²ÔÑÿx_‰“ðƒ#ï ÁJ·¯r;z|°°<Ä8¿®aPW+ÑlÑì£Á¦ÓǰfYîx¥è'€`�ÿNá‘̪¬(±B5Mš4ãðçH}JÒ‹nÅvÍQ”q“CýCrwNQ‚²Ûܳ�+3Bk36n`øŠ´°Ghyi‘M_åª4ÿš¬ÑÇÄÂúªc;ÍȤ‡…y; ‚"1ëq@0ÿª!v”:·bÜß �öuqÈ>àW/£�§&°ŠL¯† § +ê[V¹qP]é÷/˜ï�?æ!±GË´†ã�å �›Xj®)×�S–8:�3äJK0ܰ]·+�ÌX 3D¬²;aoÉ]*¾„ˆÓ¹·„¼ ‚F¨×ÀMq±,"¹(oˆŽWÃw"ÈVÕ‘Š«Þ3¦Ê_U"‚Aêcoª Žy:ž©A�H’÷tnmL'øæ$ý`ö¤»ªky0&léW‡�19À6º³IÜêž6�ª ¤œ6Yf&oÅv>í%#x‚ ¼{Œp¬¿Œò·DŸ50µ 4r ?© +ÅqÌœ ¯ðE‚axÐn¨ëéîÃûi2 +WÏž €ÌUçDþ|�Žk-ãËÈJ/žDDk›i\f*¹É}å—ÀEf’0­!y’7`S�i�Î6‡«´ÅH¸¶”c\`;““mÙ \x€ªP1QÉBã|3ƒ÷9]81½í±{Ì 2"—ï3â+™&™(´yi²UØî—ÙƒAѨås˜'çŒ}<ù–ŠHu<ó ƒ%ð�“z&²“'ƒC YPª/è#CºÔ ¼Ø8yÎÒ+:§½‚!$õa¦c�;uG)gn;5¹Œ[Iè4(™„¦ïYDÝ›«9ì8‰ ·ÜIt¤znr·ïøE¿Å¡!zã Hß™GÅNÉ0§¯]NXšwÔê¨Iëú*6ÖoÅà "k¡H7lï!VçQTlˆ�i¥öçÏ´ƒsa�t¨§3B»3tΩ|‚¾Ñ&m¾UR¡*¶²|fcúY%¯¡æ÷±O Q#,J +û,<óÐY±Q/ñÍò�ñ8D•ùŒ¬¿.m}„ƒ`÷ÍGYFlI;xpÏÿ¢.¸ªùL2X—<—T}Ùôß•p£Íg?= Jú+HjJƒæ³/º¨êÊQ‰Öâæ³>¤íl0݃షù u»xh¬n> ÄιrDeib¼yov‚õmT%Yà%ØŸ¡GšÏœñÚš�¬6%ŸÉöË/WP†­~Ý4ÓÛò‚fª¨ÍæÇê�,¬zÞ’>Y(q`Ñò*ºN3~™�Ä<ÇEâ]]ÏpÃÃúü¬xÉ^E϶#ètëŒÄØ)ξXÏælV„V­¼R¶ÜS Äàó옉 �2²Ü¨&õ¥ûRA‹©—öµK´¬œÿ�¢jX”+&aÊr‡hµû�%ÚÓ¢‚FŸ»‡º°f*)²J—y¹RÐD¡/øvñPk{ðè&5•�Â+Ùü®ð¤,ÑUHŽ¢´S� ö‹G Åé­ +¿Ïîˆ I¨¸%hÇ:~g#U‚¦Bë¬æ§:l%hõokîŽB?t8 vËûHf}9²Ù?=;8Ü’ø�f6¹à¦¿aHÕ1›.&:—*^_¶…P8ÒS&n‚†Ù–«‚ÍîÏÀ£WËL€x4ºÄ<õ14&›©xj¿ï P†$Ó×:*:£?®D&hö…¡TmÌ%¤Æ‘ë˜l%ì�]AÓ ›Â’··=ù‡P,‘•s5!:A[�_ +n×zL—+*ÏfuºÈ!ÒÃ…É_†=©y–l`Åñ™Y+qÚŒ€‚™ apuÔÆ‘è%’�G p×í\þ T]‡4ÂWØùþZ ’r™ ¡± uúoYE4(ßùpÊDiA1AßÂè¿×è`e° šPßž@²_T&háp}¼!¶]|‡jÖ0õ±„uø… šÿ¼?€éÝs&hT²³Áýü Z¤ãÈRU`‚ž m³>¢Ñ›LKR~EãªKhë2ŒP9LEA«äEÐq{e—B;î³uX ¶Â@HÇM¢T½1ͧ*­:'hÿ4–œK¤'hy:Ek¤˜cNÐà ¶Œ!_À� i§sVÐbz|eµy‚Ö÷búÛàUæüÍÿb•$y©$¹j¸9Aë(¿6»sWÝ8;ž Y¢G +KhèþOÐV&/‚´a$=A&× Côê|ACKbx:˜Ú|‚Öì¡ 4= ¥n¥?a´K߉hGA#y:þö´´ôDA{kJÉRþ°9DAK”öØZÛÚôC-µÉ±äð6"QÐæY&ô&Qm]L £ ùÏâM væR +¶_ÐÂçk$�¥ãϓ㘦 ÉJ3o ¹ª)h¬y¬Æpiìµ#�é9˜ðÄ?‰4. ¢ç£; ¬©IÕ:&?œA%7Dk€CAÓ´�Žû, +š®¡&Íc¯Ö¦�QÐ4mdÖËŒ‚–—C¶`øˆM´ã;þ¡,¿MŒèH‚‚V”‚u 7µù¦ ¸­·)#›ùIhSÐpÜY!¨3CL +ZA¦oš‚ö}ê¼X6œ*È.läG)hGm`âÉT’‚¦@×¼{8›¯¦[D^ ‘Á"U}´Ÿ¬×µÜ½›‚V°q‰‚F�W8”ñèN%�OÐ*‰r¹†QJ ±?AÓ Ç«8(¸'h¹9[mí‘ +úÖª´ü"'‡¿,¤6®"v~‚F±ÓcÝ>jä.�ßà¢A9@Éù ZQxíûQ#CŽ,§ q4(TJ3% +Z“0u +*´ú7ÇÌä�¢†‚VíÛ³Å$ +Ú]GÑÎJ�(h�¨°Cš×1 +LëÍgIÆÉƒ  þÀ5¢_² +M„,ʺÛ žæ¡¹yèc ¥‘´K�Ü~&ÙW�ÿZPÐÔæÜ‚}ÍžÍAWžƒ>[MQИ¾´˜ý� ó‘ܧ ©®’×ÙqGAóɳ4m¨‚u¡  aVa±„Ö‘IiS—B4ˆÔ²JÛ?ÐíƒÈ­Œ-²{üÄÛÀ—W&h…† 'Jå2TêèeO÷ál™ õ'Uú�røI"ë1AƒB÷hª&Â^E´Ö*YtŽoMÐúªcpUƒmš Ežyc.-º9r4{´ú:Ò&hËfÊxó\�ÓŽ#4ÛF3Óê4û�©Oý6AK{MõÃÀ_ â_›&ÐQ©Ì&h‹omtoUÚMËͱ7AÓ�‡õÑ1£ šfaBÕ�Õ�B^€¬ÁW74�8«yš%É/¡æ'hX™ªbh‚ª€I«NÐÚÊõ8ø ]q�ÒMJY ª+ƒ€}MФM¶aNàdp7Akú"”! �VXvšÛ&h–>ÊDE÷øá$°ˆ ÚO^ÇE²¿ÍÞ}F™ }zÃ_�(&h¢�ùKœ”<·&hlI€eëãæÿÍF÷:wwIŽ$œ !�kU ½Ø>F`©"˜ —ÓÞªLÐ~V÷�äy¤M &hÉ<›‚0(3)€›˜ õ£&¡‹3A³ ZIýÍG}íG-LÐôŒLCOÖŠ’ 3¯9¶µÑ 75ZŠøÍ�JÐZJ¦òö”Й%h7Ü8 ¼M{öAómJÐ`®»¦MÐ`Jì”·�E\ýc´ÿB¢Å�üFz¼›x=$Ì„>ÀÖ˜1bB«JñÛ„‰—6ͤ¡yÁ‡Œ~ˆ1ŸŸ¹§0Dz;®˜/*aég¯ø½3Ä ÜF s¶ALWŠˆX¯L@ŽL„Xà¼0ÎX©±-/?ÌUªÓ¿¢�ÔØùø_‡¬0…vj‰a[é�ˆæ †é¥sˆ–Óˆó(žzÙóòëN˜—À`èSÞ‚5ûû GY¤]û ¸¤s9‰)òŒò´<ãC^ˆöq#"Dä�r•ç^åøª!vŠ)…òƒ‘˜ºä¿×Ð/"H`"šŒËåW«,®wßh w °¤¾T­1�?ã¬{eî?Ÿéè+ÌûL@ð¡û˜D�o»g3Ë<¼×ë÷Ûב\ÁÒÙJC+F sªÖó•³·�{ ú ¶TŽ‘³H4ÈßQ|-ô6]yw5ï”dý:Ul�Ëò`.{V3mùJ4Ê=úÄߟ0“ØÁò]Û‚À¾È̈2\á®!�c†‰u $M� ôjE†h:¯‡½œöì³s¼¸˜çö´·²² +ˆUŠÖœŒñu?B˵þˆŒŽÿÇ=ÿQ ]’õgô +÷Ò>ÛnM‰v<¢H?y äáß#¨'ï_O2 AuÔ0….ÊBŒâìá-R¿ÖuŸKTMSåS±•mðôDß9Þ{ëVéöV1µù8ɆÝ=o¾©+ƒÖB† ¶n³ J@>ŸÕUØá—°�Z[E„/QÊoF+F*–Iº¦´�¹"{MW_™î¦×Ãí0ËŽ4;¼â>^Ë#ˆd™öÞE6J… +\TýWeþ@ÚÉŸÕ¥Ô7ËŒU‰í7^)Ñ®VÛ&“9HÏŸÀÕS€Ñ£Œ�»Ã—F„›Tm+q*¢ÆÊO´”x‚î+,×�Í2"iÛ"`_ÿ…¡„´â€¹YÖÈ­ƒŽªMÉmKD½>&ã>ØÓÔ�ئÜÍ-~·>¥Vz«u}?ÅY/m7~0gE@„\ƒ¡"*©*A“L>eà¹j,¼Qé3Ñöܲñ¤mD°�GUK@o «x´Ñ2\û?bu9\Cý%>²ÊëÃ5uð’æ†.ùÓ”�RfÉ[«;Ò¤ÁÇ}E]ll¡7·Â{ëþXÄ5åÿ!òáRk×Б‚…A2³'8Ÿ Ù�Â�t,œŸÔ€îËŽçIšE“ðÒ‹Zñ­w„k@' ÖîœÔHUì ÈÃŒ.&5^&t)¼½¬ëT°Ì> ‹¢³ˆGë™?9 ”T1TØмPïÙ*Œer×c,9¹+§1P©þ¿Ÿº_G=ü ã–�ÌéÉ„¾u‡ñ®W«ÇG&‹'<Éù¿{‚”u��#3„ÿ{nº(“ºÑåAqˆ„x ÷Ðè°†5bb{߇ßwh‰½ëþ«‘œ©sòý‚ÝoÌf„*¬e¤žð×gµƒ›‘¹¤’9Ÿ‰)ôp?À â�KuŒx9Óoƒ6”n´…cz9iEp ä!©eô¿JA‚õR-©éD’3ß[Ã×é4é]ÓsjÎË´T­°š¢ByÔæèF%­ÔÙ}õLÂáoÜ�¼™×åž­�Ù A襺ç®�p%†7ã±”Y½§xÀL–¸Â„Õ‘W&¸l%ÁGp ì™AÍ «)ÿ¨( +¹‚É´s*ª;-�mÎ#;¢§†.É=SI9]J/#OèìÿHñ?xVÔ¦…˜wHž©·¢Ö)[VŸTZQïG›"/£§�ì ‘­Óå s‚£CÛ¡ÛÕÔZY”¶Û2ÄŽÀå¦GçQŽEÈ?‹Š-@U'#—å7”ÆwGßt@QI†RÅ¥x§Ð ò'+=™•ôva%ÿ´~ü€áÊŒ+{£"ÅE±|F‹²qQ• !»j åÝ$ ,Yª…–ƒÙÒxÉbß¾¨AÚ}[cŸ—ù‹ú YC?w±«õ˜ú»½c¼y!G"?E-Û½‰©­XÊèd F‡òzŒ1'VŽØŸÏÔ¾Ü_3¶�Q +"þ¾2è“·~ +iƒ91'£jvf]áÞ›WF?îȨ Ò2*À~Ü%L?ÈuñÈÕ¬T<33ÁýçFÄ}î]qC�&† :,þ3L¯ÇJ}†QB&˜F÷ÿN”n6*…3kÙhx_¤?s飯8WÆN{é<ü%"pá#ôIãÒÂå#'€Pe@çÜÞŠÜkk£|ýÆÃõY[tl 9@Ž5Ü�#¡ýܲàÝŒ`úf¼×uñˆWí +¤iFD +"3@ú?·Páò–¥{÷,„%àÈ= =ÑHƒR‡aQpe¿ú�!,êJ‡’©;OÂɇ“†"tdÖî\~=“*v…á^”OM»Ä.ðÓB¡c˜h´ ‘Èg|Ÿ‹ ¿øÿ:‚≯Oº±~©³[?ЕåÿŸ@¿a7¼›Sf¬JÐÉÙ—v¨àQÐ8qbeÉ/“Ü&?üÁ0Ý8×–‹ŠHŒæÚäÏŽìOP‡‹á„1ÀàThžâO‘G�Q%gDf0JµFr2Œ×òurùɲ˜X¥zOaŸÂ˜Ä]ð vΏ¼ÕD½’( ˖λxU�0³s-Rì±ò‡µ8]8·bþ�uÈ{Ù°öôp;”8÷Å€Íæ¨Å¦Ú]=ô‰êyê÷Àìí +Q˜(Ð’—M&`W”cHgùmð°e)jàÝ5\4D€FõÀêÁßRQHä!5-[ŠBNª¡0K"Z« þ2 .æôÙŠR°Jïf–™mE­õ=0°¼E‚èÄzR@è1F]Q<½k¦†˜«®¨‚‰Ã¥ÞÈê4ù�Û \¿§F¯(чºŠªa‚€>âPÕR'[?¾Ð´;|·ñ’ +Õ,䟕ÛÕ²ÓÁˆB! •6l 64JÜS£ž]2¥ÁrW5G[טyI`Bmõ‹pø"Hñà·À¿Ã=`—–Ô튂8ŒF‹ZÖ¯AE=௢¹RõÁŽÂ Œ2oa•MÔÁxÎfÂÕùìc`\@›qf1ÈhÉs¾b è»EEõ¾5ûØðPNóÿâ"…‘}n—æ j«lcÇœîtý Œ:ºu(òa†OêÍ×Õ–Z³†a4;“—º÷¢þ1#�wkŸ:Ý rª¿`R qè „;ŒR»6Âu¥h%1låÆ4†N[$¥3qÔô±=›#³Ã�½4ùbƉæõ¨ÆÕÂã\Š4FÅ’P -i�Ïܲ#£¨KKP¯ÊxÐ**ýÍëuŸCñz–€–•Q”ãÙd%Ÿe”²óª 4cÉ«¸ä*Q¼Ûb Üóìä†IÆF=›QjN ]—^¼Ë&ÝA(žó"„…jàfGMg”âAÀ¬!¼‡2·Øtü=3 ÿ`µ•#†ß3yž`,A‚ÄKÏ(:sŒ,m‰µÃ xlÁVRmÒœ8¡Ž¹)L.â_$¥IYêʼ¥p#J–6‚"v ²ZÝans´:F'–ö‰‹ú’;;Ë€Áeî¦T3ÌFL¦¸b@(¤ +<Á7ËÍòvO87óù·Ú;‘‹³7£HÉB ÉfØ#F‘·ï•#n}�Ê(zv&&vR +&ä¤TÔÛª:z¶®Èµ?L„Ĉb4UÉœk´À�=>-èN¹«µ±Õ^×yÚîòû"s6ÏŠ ¾KW®*ЬQrl +,o‡³bôÍÞ�¨+¬‹“Ïìåö®»6âTá�Ç™ÿ1Œ^²Ô냿•^HäË=<=û,P䃄)Ú0ȧç>µóDâ€$ F…b ES +ÍJ켉l‘v Å�&2Š©mÒn±�åM4¶aŸàÏ5Y䊺,Ët–J!‹Æ"Ïœ ?;––�j�b~qø Ÿ:,S¥F8‚‹Ö:¸s,2©å�_Nk2¯D0`zvt²%/0°è�Ö`bg°Ðê®\Y�Ya?’AtªÚ§.÷1ãF—ã/= +±Åv&ö½Ê/qµ¬u,Ü5 ÕÃ%ÿ9^ÊŽ4ùy,ˆÃ€JŒo'QS%XʵtêN³poìBðEB ŠKE›º«r f:£Müà˜ô:]ã¯Âö¸týÜŒ²Ê6Óþ®^<…Œ$çØC3bJd 4õ â‡5äÐÄ�»#[ù«ºÄ¨oD˜N'ÓNZê.öH>×C¨Ë�°,¹š²µ.«ï 7åvƒCW°÷ïª�;ċΌ3ÅÕ¸ÇT,mP‹ƒ ï �Ì`Õka`&9�M‰h«"»Vs¦n�ÜÕ€à]üI�/[ +”þh„ß*Ÿ@nðö�<ÅæFf²PÕŸ2 Ã<îŒñ×dÒÌÁz"ÆP²¿Ê—Å•bó±ê ñ Çj©'Ð*¯d…îêú«šb¬8"–î¹DQSŸeÙºÑ ƒ +MØOÌq’c†\a¶1u©ìÃáŽÚUéðu2kY¨A+€¬,Ôîg)Æù9³´Aò¨xòú,ºúÇ%]¬’bƒ^‚˜Æ®÷�ù+œ™+ëTÍ®]8fˆA]Z=”Ò•q®Ì¬kËXå…“9˜±le¡úÀy’ºpHÍy0j³ +ŽS¢R8 ÇìŠÅ¡ô‹ïNÚøÔcÍ·ÂHïЬ�6Ï£޳8Kp §nXÙêB·8í©àáAÒ_…ø;€)z²*\AÝxÜ71Ó*œ^Š tS%¢ªp = nÿMùYáôzŸ!†ÇâžÂõ,<bÏé·0P89ÄçȪˋƒd‚¦0 5Ù3­†AH£¹L¡lrˆ×-”K¸(&'Æ”�.;¬\Õ_TyׯGXð$«¡âkxòÈÆ­aSê&ìõ¼q0ÖZH÷ì˜ +©oQ—ËaÂV|&r6óœIÁ/Q骅ÄÉSšAúÜó~`-ÕïiËmî@”¡>³ó �eÙLƒ°¯‹=BÍègCöbõzv¶7È[žxît¸¥SeêTP”•uÐóʼnێPgc»‚árð• +æ§WJD‚`¸NCçÿ�¨G/R‚c&øH +ĪºF69þë�aêÂvËšUMñ0¢¢ˆÐÍå«t8Ó|z º¿/ÖKße`ã-½£�u÷qŸç̸üKÎŒîúßÚ£þÌr +Ñ™E9=ÙæÓlYƒµÁœ#ïµæÆaò½øò>JðëµÏíàáôËU[ØÎ+é¢÷pÏÑFž:8‰+@:®gÚt¬Î›B¨¬ø<ÈìXlˆºŠ9矷L[ò"­Nªî1Á–S&®ËALJ2¿ñv¯¡] ˆË,‘°~mÊ>…z`Qν‰rñÄ“âÒ)¶Þµ Ësº}!�‰Ù¹ezš›KdRQ•‘{érÄWu—x™j§í˜)þÁâD‹ü¨`Úª“^凇3™Šï­™·1Në™eœÏвš­˜2õ•ƒO>ÂµÌÆ#Ïõþå +VEª!A@‰\ò‘«ôŸc›©"A †0×ÞR£©$�*v§ÁA7àP~ + Î*8Å4 ÐÌ<6žÆž¦' +s_ <}C�Á7Ä@ +Ú„z÷f¦Dê5 Ç^X‘úNоӛKHº±µ/+mDjôðYer㊠�qõ�N%–¨P0Ðnì�/¾�mSú%Yß�=üOÌÖUrkÒ¹KÂC’µ8Ä÷Ù>Ö"H&¤šó':/—H[³EiÓò� ¦ÕùŠÍA÷¸€fé O1Kù˜š¶îˆÕP±„"Ñqõ¶lbïíD!,Ã?Xý)D¢ö áZ;æ'J¨@°I¤Ä‡âoËb"‘?eŸ:Es˜\�‚‰�M`"ä?Z 芘Ɇ½3/jþÇèUBÍ> ¥_ï“ÀºF%F˜넉‘…'ÆF½ìÑY ‰mMƒâFòÀg&Mö2ª\‹Ö® Æ7wbRá*†Kˆa +ò$llô)y°¶:ðRX*eíâ�'ï¬RQ—÷ÒðgQF- Ü”?2Ëí‘”65d76Z†(jõ`XQï�ë(*׺5˜Ä¼®y +Û¡ªLùBy�ž§`Q[ȱL¥ÇU«/£/¯$]\WTör:+ùšoÏ!MžÈ�Ôè™nÂî¼ZZB�HtžB tÊ“ºAš Òû®ð¥±@wÓD]“~Y5ƒ¡ ¤0-9ÆÊ2›óšyûN4wÛ�-dÕ+R¶4�6¦=3õ ’�èC/`ô¥�á>H†%}}p ©OJYæ 7Ë�Q¾˜¼RfÏx;OÌÎ9{È’�³V7aNà +¬ŽLö0KúÊthdžãÁÍnM")Ï2ýŪl­Ñß „“'Jì˜bý¾—™œ[a™lNæÇÈ=7¨ï“G$DÄDÊT`Øóe0ˆd3®9Uüní+•t„‚ˆ¹/¨É€æÎ®7Ã6@ox Èsš}1ù¶Nwì| %)P¬^JÁ…ó³J21¡¥Þe°1"¦ãŠI( h®žT"‰“Q±»5g¾á‰Éa¿v@€‘ZJÜéR½E¸i†ˆ’⛫,W± fƒ:ý¹TH(ü�Û ˆÈè±QØAÞÎËÕ,p—u¦é"ÖÙG¡™û�'9/Ú\¥Ä ƒ{e4d£N�VKKè$ yó˜±ùéQ;n“¢0¶¡#ØYþá¼üªkÄÄDôÑ@d‡ï‘b(àšZi\uêKJ…M¥ßA—)Å8„Ûûi¦ZеIÝ¥ç¯Uê…üÖ³ŒwCšŒÛãòP“Ó·ú™NM¤škÄ+ŠŠ»°ë6Rb�¡õ�«X„õõdJK]Gewš‘ ï +¼`î>}¥û ä9œÁ{ù½Q£1‰ÇæC„}å.RÃàxoo‘]6blJ}·óäÕŽ3©�áhšH�òCzNzø.Ààt&gT|L¤÷'" Í"².•¾*·®‡'ctŸf.ƒÐ¸„n¥‡õ7™Ì42`–Gf^,,ü�Üþ­ +‡aw4Z�irÿ}q&‡a ß2,Q…;ýSCf©@¡ ‹Îpi©+PSJ˱‰B0=ûH¤ah«9�NCÏG +=ð¥Ð0ÑV±×ìI++B*qáòEGµ‰Èë—ˆ¤_øò³"ñ)j @\±�ÑÞ=\*):øMÍCb‘6ÂZ*‹±dµÏ"¢ÿÛgÌj·et]B4Àkrr·º „ÀKv€i&Xª�ãŠ÷.wÉf澆k´‘Ïê&œ5FeMw3?ï\ +§n  ÞHZï  æ¼)«B\Ø¡¥f÷8*Uv�`—�ò8òüáĿŃ` ‰>Ø*†�áhÞzT°Ú2 û dÐ €XcÊä­�ý³�HÇ ä.s '#ÇÚ¼Î$¥Ú½$�\Ôû›†ôÍÖ}Pš"^¹¶,.Û3ÈÔ–v³;„ø3N ?{Û×CŽ�DüEù�‚"ê“m­TÅÖÄÄ.^Ë%-€¼Qû¹ÂÀ9fÔðJ¹ ‡Šö©>éXNÁ-lü¢a¯f +ºÏ» ó×TGvÒGÝLI+Ÿf 0 s�¢ ïù]´@??ùü†î*ZÐ%•KOÁ—j,”ÏÔ8¨ï¸wwZópjr�¦tƒÂ/˜HÛ¦®3 +/Cñ415© %Ϧ_Ýd ˆM9£ú¹ LºžØü'¿àÐæ…l‘ŸÑÄ3·æ…tÌ—ÅIW)†]³@€l¤.)þÁ– +Ä™ví¤V8}í XÑ’@¼±çémÜ�!}~GJì-¡s”w^Ek1›†(‚C¼+c!uSúбæ{ˆzæï¡ê³WÏ»¥ËYëÄQ+„:)°:›$|ô‘¿7ß�6U•YéBâ¡N¨‰eâ-f�S*iÙç�*Ù<GU•ßQi6âþ>�fY‹ŸÂh_žž»ÁZS¥tmºÕ€ùtpr¤âé£7âp”•#èæù~ Ëð»\؃gD\¤lU–®JkêŒv¨�ôma—Œ•ç!š?Úä|~K²�ºFƒvbÛ ›K(²ÛOO§ÕKT{ Wì—ïlz¶JÉÙ³Nœ8XÙŒ„®¬²y0ÃJtÀŽqù;YÃéqÆõ˜8Ñ¢ܼNìXôwâ(%tªXE­'N8Îd iPÍH£�¸˜ý®]P±$ŽÏâ°–jœ8ãA¬ +¦C‹½>ˆ&®ïOÿú§­ÄÉ<�Ô‰p M| ‰Š€PImñ-˜uàâ\@„²Ð�ëJ#³âÅgÉ&(Á0ñ Ò¬�R¡Ñã*Ü`çÏå¸eÓ£Ük­ù>Á—�­éù)Bƒ¯®E…]„îØmCt˜*Oc*vôïŠ�D»þTG(+“4†wšQ|Ñîià¸%M¢·{3¾»ía£Ä°ì +¹gn„"Vè¯3öÜŸÃÕCæœ>޹ãÊ+ Ð_ÍR2Ûðž ×â­Ïhžé„²jv:p%ú’ãq›—äU-©È&)çY‘+ú¨šë=YZhAݧ@™ñl‘K5ÙŠDZÆ`9Á*XÊx‚’š…áߌÄuÖ^�ÊïŽ%¾�z±Z”²&ò¿œ +ÖvrÌ¢QuhF–6_“¦…LM[XØôŸRÓ2–EÑjÌ]9pVÞ†ਡš'xÔàì�\~Þf +mLr¹N5¦N:v”ÛX N Žã<Ï�E\j+-1R-ê=æ°¦WêkÐ!¨8—€PÙµ"nÐû‡´¹ƒ˜ˆ·îÊÁJ§ü»’�÷"Æ)vÓG—ÈÒ‚òMp‰—Ðð�±ó&é4*l˜ .™²yÔ¡€çζ䜡o)Lðwö9¡eÍxg\Œy- PH‘{ÆZúóŸÎ†Ð¬ÐäÇøfo[7)±5‰¦ h§‹åßk´áøz…!S>ï[`w*ia÷™UÇg-.XC­�"tô¿Š4qô·Æ°âßã0­è:�õx`ü_ràd ÷ÊK{Çu­¼Â§à3t£9I‡ 0¨×v­ö«ç9Ѥ’µÝ� b3O*=í 7¬QxÐi¼•\ÒäÑæe*¯úDÄ—ËoßøA»š;ŠÛôvç²èÒf® ä&Å4¤�põÖ„Ù–>.ÕŽ©*â4¶(f×UñlÅÓb{½Y›Ð¶÷-J¶ÂñwWˆá-_{5 U³%+šD.¢÷ý³m&„Z¦hðÀ~$c…̳eešRÍé8MgŒß`lµÙ"¤‹^wÔ…æžMÈÄÒòÞƒçé™âÔŒåŠN;xľ§�³S¤öe7Ù=®ˆÉ¹Û‹Õ û< Œ²©m >4¼„ [J ³ßá¨,h´•vôl¼å{c—Ü„n‘$VoÁ“£áâ{í­¢BѱÎouô�·×,˜ØRs…>~^Èú=ñ™§ƒÂØlUë˜82q;Y‡3ß?CbÏæì'˜ÅteMžð’T Pœ!c!ò†xs6š„@œYÄ+,2³\ŒkV·�°…`¼T }� +ŒEŠù>&;kiÿÞ­î�M!žãŠsÎ[ÜÞÒIdÊ�\–÷k¬Eª˜W ¢TnNBUAÊü‚êøÖD¢¨å‚�]‚ûAM¾y·5 \vXÞ„l¡ ±ü‚5[ÚûÍz ÍŸ¹?ŠuçÆ2qµæ?|}ïe×�ý2à}¥¶‘ËŽìü²5ܤ½~9³Ö•>.�[ éu8äbQBÎâ<�4-dw6PÈd–,\¹U?/§:BnµVÕ¾BcÊY×gÙŽ¼s•7ºQþ±Üb BBT¬#‹¤�õPð[•Œ%Â𥟀ñ@£ÉRŸ_÷z¹Ÿ8³‚Àý‡ð[?䙸cÿ9‡�ß¶nk‚_³…º Êdxc'–A;¸îCЇÉèvКŠF£Å³a@gçÃ\Àºã†€Ó{”»÷A%@ëfR-8@«ÿ�¸Ñu­».&)¤³´¤*E€LuïçÝ„¸·Rˆfùäå5 ^r&ö½Tp®˜Ñ÷ëÝÚÿLrq•Û!OQˆ¦ße ÎXÃãd1¹9WÄ8é¤m‚”í[ż ;UéRš®ðUÕâÄ‚Ø8ËFC‰ôȯ=[¢ŽÁ°ïB=á”&Õ2v2¢¾6ÃZNРh It pG{PÁyñYH–ÚÅÚ’ô~Fϳ8ÏãÊðjr;Dp’á"+;b%X8Äêà ÿ£j$2Àg²¨,-X#[`�K_=i_•jR$ˆy8RR,“«@ÜN oç �#å3-Tñ%ïjacGµ‘¸7×YNõcí2Ý+U ~]Ý@D÷h„N‚]yŠ�sÓ»Aif¸ª7 ÂÆE¹-÷‘¡Î¹hÞ¡‚X´úõ¼ÞtýñmB‘k·<ÁA{Ú£ÂSðÑu¦ûˆÛJqW8b™’lbTF›pŸÜaÿØ�Ð黎b;îD%L†#‚QøÎ›Ê3øÝóhò€-¹Ï/y) ;'€ méÍ&È(Ù=üÎ[Ÿ¾-j„sÊ%JÄ+E`ÕìV�Ã@¹\Ǫö*aá­Åíµ±™äØa£ÐfÀ>,qíµý2÷D +NhÅFû�„›wäñœ +×$ùñˆ EŠ“ïáöÉxÉó�”ã®Qh;:ÈÝéã�pך•Ðã„Ùß�è¨úC`A‘w-çýÛ_¥©Ý�!G#‰C³Q7#N|H© +³ôT´ª�YìŸájYú4…RyÆÍCV ±> –ùóæ¼*(–B‰.$‹Ç,&êɇÎ[:¦á—µ¾ðÁešI[‡ÎІµ$_Ž7NMœß\AãP‡¶¦¾Ð“˜6¦‹×äÏÇèâ&:$©XM�aN^,±Zê¡HZc@«ÑÊÃäá J¯ÜüXŒoC™>Q�©E{À åÛÎZ÷�°µ)ÁðRÀ˜³¼ªRxL3#çy ã¬M‹›±lÊZ~O‡a®hâED2<þ©Èè'�ㆠ+yO"¤I^χø®Ú‚|{—eß Ô'¯ÄE<^ÏßšHDRÂë­Ã¾eôãÞ}}‡?N*›ØXëöÉCKÆ`KàSO"=!i{ÔfQD¢Ùi–ÓPQ-$P`Éj:zŒ¿„áØ„Ü]®?±·B»iàSØ$c§Ï“GThë|#¤°‹À¹ ö¢il?’¤=¤ ÜÁ aýœ]t².¹9r„.÷Þžn#Rã­´åG�l(ƒŸ«©³ª/ÐÆÀ…§`KŸ“`b"jÅ“c‡¹4%’uh§¥âé|ïâíq³v_zÔ!£ÛÙq•ܨ†C8ÿo(Øé�ôõzj–8Y^v#õEÈð-ZàN&•ózÚ�[�@¸GæÀÁ±rÙW¿Ã§×b²á‚àdÙÂFsgcVsŸ8Ç®V@Š-B f&>ˆ�RäO)sc}RØþ6TÀì^è‹Þ¨³MRu7f{ÝÏEð¦á÷¿V¬ÏoÊ~—†°Êà"Ɔ½ge'ºXèàºGvjSæîÁ}“Sªp­³ZX´ixäi=,@úRD%¥±ý¦ š/?{`_!iKwZ tY‚~æ´’¯PO ™TÁA­<�„Ó�Jy0câ XîçÙQ¨LŸà-då­Ëì¡ +uþÍç°ÏÉ·7Uù‡ÖÞt'Ñz�:Õ:8QÔféýò8̾¡FÒ4MMìù߬yó&@Ýv%†±²àÇ™~ƒœºëé¶ô„t¥ÿ-¤ôØ8°;ïUãdÛVŽR™Ãê裂qÌ2g‹˜xU©}�T1‡Å¦¢qürÉMd¥ §§ìqôöƒWLçƒ>,|Ή3¹t +[_øð‡Ò'§6N«±g12Â`˜•pJYßÔIò6®9S—úgÐß^Dl Á\l·}×Ë'Š-Ls((AL´�`'Ñ„$Q,~=!‚j8J:åÕ­jøU!MPXTãØŠ©Ã–*�äbŒ(\@TMIÜbÏ=jñv¶ +�r‡•Q�S¥Ï[aSáGùÁ*ÝýG�+DÁz=@”®ˆLðˆª�T…Y4œv ìK%Sjàøqd¡"VïmæÃïŠq#*+Æh�¿åìµ ¤Íòž¥Ž°ì.�pyøFyÕljŸ‰s¬ueS�Í«À„å˜ÜG§ì&г6Ê~Rв‡ÜÒs•:CI%ºØÙL%Ò#|zù¡ ½ÍxB:qã8›Ð„–ú´VÐ/Ø0ÚÑ/�ëz@:,¿`è9C×â?·ÓÅYG”ôa]ƒ +Æmâ[‡m±CŒdkøÂ„×ÒïÿovÑ©~^*pt1´lÐa¿c“ TÙ>wcÓ÷|†6HÖC õ†ºa1síÖ¦éI•ú´AÙÇûÁ´µÁÐçm±$m’¥áÄsQò9Vz�U±{Ò�jÜÑR\9¾ÀŠN| �ÊÄ/‰N°=oàb—Ù½‡&�úíyúah^¸zð¡m\o¡ÐõÚ–6Ÿ/�†Ö·¬4A 8]€×ÚÏî’¿Q&@,æƒP¸Á5±8ò ô«f²R™ �M!œø�ƒƒÔèleÊ�Õ›i�Äl¸Nî/·øœ<¸¦È�˜M¼äd6¼ÙPuò x}ž_\Dczû‘9 ¥ …szaâëç œo,RJ2É$I0¶ ‘.“š�T�z5œ” +Ú<Œ,ÝoÅ ÁŠ"’ TÙI"Z C +‹�°BÓ[�� Šgöðgýk†Š‹oŠ$¸ÈurÈ�œ�Ãâû™±L�YAu¢�ÂFòAGËàQN­ ùLÎr ù IÅ6},JdR-�ö§šýƒÊ¾6L\!Aâ(PšÛlI(²¿©NLmÓ•C8†�D…“ÜB^s k$T¬ß¬ªk™‹%P+÷ä" +×å�,cE3Ó�òMi+J¤ŠdsªÛdB¯P3ÖŒ‚8�– ÃgæªF#œ¯D(chE*D¡D! Ué…¢Ž-¶TÞ‹Ðb.ÎׄI]$.�†BTAodÄÉ«m,Á{Ì Ž«Hé¤*ŒF¼Ê§°�s¢Dh1Œ"*.L +)ÕQcÄrâãÂC7n_Ò 9‚{óD¢_nVpj¶Ò8#ã1œ�I¤†²FuºÖí4Œ#F[�ØW×¹N•P¢O3ä³U‡XAÞ�¬/Îܸt&,�—ÖJ.ë#:I稔”Ç’öÔ¥&LúC‹>GË(üz9x&#BÜb›‡6ƒ�Âô½†h%0ež-9\—î³X‚\&ɹ²rGˆ?6DŽ]·ú]1¿Û™"ºP agZØy¿M´>’A²ŽÈ" +-LƬÇO“¿ñ±8”H±¥\L”`¨É •%%�L�K¨‰ÿö`by"•cÇ…+JZÌ‚¬×qN6$õY'æ(ùAÈh�© ‰ffÐv< I„µ/REúɨWæ%°¡Lõ5î˜\ 3  +K@F¼Ö+13��G¤8óðP&!¡xíÄS9-›ÇCƠ˳Z�±ö¨p8‰‰!ƾ.SáW�Æ-DF–€”vìÓqDR%â±îø?T ®¡E%›¡²ÄIFTµbDGóžšÊº˜Œ\èb¢Ü&H»˜dCµÇU3“ QÚÚ&‘˜ÐQ]Éf›–(13OÄ€F­˜JAAS§15‚Á†D�"Bªõ«ä)êN‰TµøT\B– ™G˜"~²b¾¸)‘¨ƒ4I‚¼˜ñ"†X}0F,ÏnZHk”0 +  +…}ІÉ„S„L0Å¥Š"�bõDQŠÒ±š½ÌMIHu¤p=Q¢T +o¢6áˆxt�ù"¥ É©`gtx!|Ã%fÈý ‰1ÉKZ9Šz +%1¥!Ö«ˆ)*QÑ‘7JTYÂɦÑõè’–Ñ÷9¡² ¸U–� +Ø(‹p3@0Å–ä' +w #d”Ò‡9 €%à- +òÌ Í5âˆq± €‚Ü¥Õ\¸ÆpÉLIΩ9ÿ¸~¡š›1)pD¡æÑ–PGæ1¯$¡sºçà +žs>Ù)UòdAöÓg¶×Ȧ;ë×…>ÕQ¡;Gú>¾¿L¯Ýú(t²«~Ú(厱øˆH•%ú�a +ºDþ%^Ê/ZîNùí ðyµ/ÆDþAÔYA³múoBþ±?ABsªŽâ¬묺´ÝÈæ'ÉÉT¬PõN<÷ÔZŸ +€^w£ç^òöõZÃzêÉ�}¨žý´·¼'ò”_±è‹OóWþʧË$ +öý‘Æùãô_zúG6ùX'Þ£_îÖÏ’¢×?%¦Óü†üÿgf.J\ÖéB‘ÖH|2—q�yK?]ê™Á€`*ÁÓŠˆ`°ËÀ{´ÌoˆZ¾ü§øÔu×Ì( jA¯[ÓƒtêxʺFDê_Q%&»%3áÓW&sølf¾iœ±£¢nY6Ó±A:J“кˆ§úèëôP~þ�(#G‘m C;'yÆb qÄ#4ßgV!Dò¢X¼á·>i$H 䑬+Ñ´Œ1E jRŽ�MÝ¿ëkÕ”Ú5þÂÅSL;s‡Ä¸&a�\\Råk3Uñ¥Z*s·jTÞˆˆ°1œOÒ-ع¥ßc½¼B¼Q†b12ÁQSd…Ó}“)1ˆœ,“LN[Æ‘ Í“Š¨ò5VÐŽls„˜ÇÜJô@A%%äô5¯0È=�ÜÆš·ŠÚ\ˆb,‚½5DJ¶½$mccç’i¯�G�ZJš`×D±¡š˜øªhb}·jÄÅ+¢HåEpe„L�ÃÈî�m¦ ARýÚÈ´ +¡ŠŠ#ôBÒ -øbí@¬*’™†Ê)œ0¡ŽD© ôñ74= i""D‹BÐ'ü5BP](|B#RªAÂX0ƒ¦?SaS)ÔHz‡­âê™ ª˜Vº¡”Qù§Y,t …èM�¿…4fNK²ð¥cTåøÊÑ’š% +3¨�ŠÒ7z”>ÙPˆRHô¸3~uo*æ1Ñ'RN¡jãÞDr8œ<‘°TÂŒÄÃ*G¯!åÔŸúL‚d%ÿ6ŠnÊ‹'ЦocÂuÆIý.�ê§ž‰EBl·ÿsž$ì—‹U5$eϱU2!fÅ"R +•×µp¡ÆmUPh¢ ˜D£)(Æ{ôš( ~cFøŠ„öžŠˆ§Õ4$«rg² ׂ%ï;®°EHÚpMgjNDˆ,·Œ¯Ò» « UfMÉ c“4WÙS…ªeÀSD¥L`ÝEÔb×Èfu¯»Ë‚êî'“‘P·8ÐM­ÞµC¼±å4W{ +Û¯zž˜XdZd>4=Ž å™Ú5�K„BVhIC:.Gh]CKct»S²©f(™Es'Âvz�èêTi¤á4OaÊ2àG-pÀ[Íø$HR $;�:U½#àò@ò ˜äšÑÌMRC0U95h‚9Ab‘È/âÙÿÅ0<"?jÑPžñ¨Â³„² `ž]èB4ŸPóú|¶_ˆBmÿîýáû÷ +AúÐG?ÑI?]&”^á‡ñ30ÉÄz£5íÙz]"¸^\õÿ"HÿWßÞý+̯ÿ«ï 5È?¿HÏ@ÿ´ø‡úé]DÁH/}ÍøUþ�_”EL=ø§ƒfpËE.•…ÍûÅÄÃü³VTôa §—Ô¦­pºPbŒ�þ(­Æ‰V�"—´îC¦ìÒëš+™i‡&QvV�ÖëŒ +­CÕ‹½Y1ªJCTÍHçvoj„ÝaØQüXŒpv«aÅQU¡½JmÃ.)¼­qMñ!êÉÖ�iËÚ,nIä5mOädƧ¡t†3¥ ½ÊV‰¬Œ�GNµG¦8h}|ô`´?\™<<üª—©DlÎÒås�CdúMAöjq¸Â�i…ßP/…|VAÞ‘ÆZÔ?ÞZTx"#ŸQýp;"Õ¨žFé0czÊn§3–u6æÚ÷Õ—Æ"n…äEÔ²K<š¼!-4\Ëæ`• õ¶”ÈŠaw$LÃò7JvüÒQ{Gõ˜¥6Ž–Îœ° \ªfn+6¹Ø™w–PâÏRTcqq–;,²,Ê|ËzËáÒQ¢²ŽØ¢né3á)Ðí‰/šXë²^BâÖk‰ÍûË]³DåŠÅÌøå–¦e‘ +¬N}TåÕ  ¸í‰š¥1S¥2‰˜ÞÚ®%ÖR1¾(-ÜnÊ»n Û£²¶ŒØÝóWtbÏSS®ôE4aÊå1ÊÂ`šCE£ƒê@ôZys¡ë·N¦?{•Me¿FdªÜÉ_µà²Ù/jlyl“\Ó!9Ä ((vM®!!󃂂ØjJÆSÁŒ?Ÿˆˆ(ý¿ß °CßW„Ÿ�Ä}æ#/ jâåŠUŒ¦ sÕdЍ¶xEë7¶VP»iÝFA—j¦'ØÄ‹Ä[¹^õj±ï«HàÂÏû T…Dñ¯™È˜Á³ÐÍ^”ÂM”  +¬(¦¢BøÏð]Ø Jå'fÑ]>½2Q5 ÏTUUŽ`”xO ¨U‰ >"ìS&YßðE�>†¡�/F?H€3n÷‹h$µs¶QÖGðì +Æx,Z9Ÿº]â‡W§Æ£ŠC#>+ë¢×Ð6JÌ,9‡õð�Ç!Y£1‰bTŒ^‰=Í#Fº â=GY4µ“D\{�<ñýQ•×Sh„(Ϊ?Ñòtœ¼„6DOÔ&å陼”TvDyJã*‘[–ˆ>jfëµá¼EO¥h8"²¿yå¿Õ†ã´’ñIŠ6K$gÇ“:Ѫ’]²ú(¶P|jÔçàÈ­-Ù)È´§:ºÙÒT&2Ž}­ˆÚý8‹,ÎAùlbWD•=vì‹NÕ=…ˆ¸>í㬠+éûUC„h%[¶~�6K�›h•aÌœuû€Á±Òµ/Mœ5 ¶ô ™�ª«bVQW‹«–˜‡_õST1«�**Fæ97Y�ŒëT�–б‘ª_hF\”Ë>dª‘q„:Æ$8ßq÷< Ö½N�Gbº¼9ä ïkb �Í!1;cö ë(jö9ÊÒÞÚwÊóÞç|»·gXŠŽœÑïì.ˆÕv‘’ì�k->«Ô¶DʦŸ�rÏßµo¬RSm u^Ï™¼¦P8;`+7´i pÏ8–n8˜?W7ò‚sJÿÆ4€% +y"^îlÒfjh`t¥/ÇWm`zÔÍt&$3â9¦ÊŒç8«ÿ²ae;æ94§Míì–z?Y°ÁHìÛV!ăà>š×–�b —8™ e Í Yd$ÔF /®HOc `còšÉÑZÛu�‚±UÈ_:ÑÛ¿å$‹~nÇw~ÕŸLEÝruixïð«n+�-Õu2ב@`uÎꈖۆj|2%Ø�e;p§@gŸ?„R¶Ñ�üòb³eŸ›4´Í,LmÎC =Yu¤xÏVeR@äH^ŠÎ uãèàËBdÐ#zÜÄËBnÝ2Ñzõ'ŦUƒ×AA$õÑ£€òë°î‰½ÀÀôËxu†¨‹dX”þƒØ½ÍhqÞàëI +–**Ú +cá3Äjœî�Ùm€ý¨º¡x…æ’½ïz0ÒQ¨ì“q@ù7µsN~Lÿ¨‹å½nX¡T£³.ÀAC]´Ç”®¢6–Ã(Ÿ +ýÓ!!…›ÒŒŽàÆoS–mׂ9Á*¶Ã O`IÔ¶‚]€\]U+Ù˜™0ÿ‡ì(¨ä&ãt`Ré¶YÿDb·zŒOL{d¯H]ÀÁDmèb‰.ôsÒ: põTõ€'v"`£)bD6ù?²:±¯ôŠ +&–Э¯ü‘¨oŠ 1_g×=Zúê@”Å£+øOx¥X/¡ñzDÀz.F—†öh{“gžœxŽü„s¤ŸbXí/áÐ-Éw}–è‚I¸WÑ”[ãkÇ�£@eÂQªn«�1ÄYFƒ9®IŸ°ÇªQr99N$¢�0Zñ,èt»€]ÞÍ(Q™+ +ÒDšöÒÒ�,ž¦'‹Å0€Ñ�¶ÁqqÎQæ5WIüüçJ×O[°»úý5Ï~öÊfsÙ„ÆÐ�_‹%åU­³µ–tOÇïCdÌZa3hvõÒðì´üµ×’ ŒN:m­ß=wD§X�± +Þ›ZXɽª,],Û—p=ý V&Þ�EV=6±eú÷dÉôžÃz +Ag¼w[ñW7%ƒû­Õñ_DÏo»oÌœ‡Yéô:Ù#È}±ò’àìÎé h–‚…€Œ~W0''…``Þ^£|üúw,D q{�”#éÖRFuËÁ5Hì)ë=Í%ÒŒh„Ü,t,Ռڽ/op®äE”Ð`4#U(¬@ºë5–â£rdÌ,é;vÄÖ_03»Î;uËý}T{a5ŠÔ„@d��ș߽¿!Õ'É·Œ±½+0”¡{~HÛ^Üž!.¬³Áz*ØŠýP0…u0*^H¡ºB2$"KèT$� I$êW‡Š0À=ìr>ûÑÈù/`¦dÈ@4� úÈú+õ³J[U>ó~±"‡i,à×bPSÈ÷²¼™øD¨ÑO{-o÷ mïÚâÇ¢hÌÝ·¹Àx}ñ€¬‰·�öèŽìA™£TéÃÞ +‹¯¾—Ü`ù­ÒTBiâZä»`wüKLF¢ã"˾°UzIú¼€Yqúô‚.úèY…ïI Ì k¬¢ n]œËcëËp1f(”œN±0-ÿÌÐÀ‡=1b%çÑÓ:\ó³çY'¡,_×ü/Ý� ÕUzœfÙ + F +Hºõ¥[ –of‘˜I�¼t汌Žó½O Kâuê ÙÔ�nÎgÌ™Yø!$=J®>𣴊yo[Ü£>#R-®Üé3#H%g +Ø4^@^q­Àè™z79¤çÂ:¶˜&ŒUl8H2�a¾7£p”`Æå9õ@îp�ÁÍà��ƒ p/ƒÁyK.¡H ,èZÝ&ª¬ 0¤~Ñ p ʪ€2Ÿ-‡Òûó0_] ll?�«ÀÇRÁè@7’df=Ä¡¨gMV QÔØð�\ ’Ç(`tãÙt™Ò>ô±Ç:Ö Gè38æ`tþ·ˆ‹†�ô';â«þšXØ]ícƒ³’Á:™Ùk OÀèr^¢´c0:v‡€¡³qëiÑa0º·¦˜ÛÞr!£•�÷ äGq‘m8ëW¦>Iæý_š|¡Ê}$Â5S3Tg‡é9ÄŒ™1Îõõg.šÛç ¹§ñ¯[9�«z6?æGã ~5‹�J ’Õ;ÈÙµÙû¢k§êîZù‹®‰sSÀé¨�/ºW€SGapt|Ñ1ƒØBè×ðþå6ð‚{Ë¿è 7×§1:£{' äìEwÛ�x4삚[½è–·PÁìU°ô¢ƒÑs”ˆ€W?0]색bÐÿäMÞ�37ìã¹Ñe%Øð`è5Á婆sHhè +L·ãá×Ü9ÕFÒW½zS’ã[õ”>Ðn‹Œ½ ‘mù¦�ˆ·Å ÿ½úM]^tk!(R¤ó9}@õ¢#­äÝ3}¯¸œ-^pDô™ú�Uq\p§÷‹L©�‘o‹ä\­÷DЈO×ð%PÓ5pú^q4ÀkpÖˆUĵ1#IÅÍ÷Q{n�Ó*žÛe¾¯¸/~;#„Ð1ê£G[)¸ÖŸJè­nÅeAl!žôAõ¢#Aô¤�`"ðÔÓéƒE/:‰TuÓG�)Îæzc_k…2"d§††á,šaÏûˆ‚éÃPQ…‹5¾Et‰ªUF®úýô¡ õ¢ ]~HØ‹n…ìmu˜ëE·…(°¶¤C6DyÑmm|Š»}‚ ¤^tÕ�‹ˆÀ‡ +FSœ RôÙ‹âù|°œºA.$züƒõØó1‘^t¾¹šv>–¼è–W·š^t¡–�f`Ïæ@/º'yÐ+vQ·ʋŽÅìmüñŸÎÝ^t´‰ð¥ž�/:gEÃЇ/:Ï*L¾VÇ<ú¨éEG˜AÁô„>fY^tü[ÌÞ‚3o/º�ÍfÀ cŠGÈ‹Ž˜OÝÕ}ÜÄËM½ãWΠ*íï¡s¢�|&ǹ}àEíV±Mv[) �;/:ðósD×~*ÐGœ]¾pÚž��—ŋޙ§„—âu6/ºiö_VFý½èòtQ²�>¤¼èüÍ ZG'‹>¼½è‚ä[¼ §}ŒyÑy_…‘øP¢´êEjÏMEÑÇË5€PFÙ¢iË­s¦A�vùì¡�ó;’‘dpÀ¡�Y^t»úãÆ˜LÔ‹î ÝÕ˜‚ú0/:¢*4æ…>†½è�º§p̲Ì5yѯc`ôN ìùPáE‡»³rú›�)/:vÌN—:’^t¾T7…ê|ļèFÒ�²úÂóv(hóó¢ûz>Úò/ºˆY˜¢E¼èž˜á*•é|ŒxÑQŽ|¢}Ù9õ½è.Æœñ9/ºÜhr|u¤?•v> /ºLT/:¸³; +sDò|({Ñ…@yß#ø³Å‹®‘UÑ ¸oŠ/ºM� ^cŠ!:·ÏG,/ºŒM áE7ÂM8е,âèEÇ:oóïç#ñ¢K†kL)Áóùè{ÑmKQç%nÒŸ�š.º#gn˜¤€õ|ÔÝ]twOÈÿ|¤j]®Æ5{>tuÑù¸‘°"Mú=9ºè¾Ž‹ûƒ`ÝRøØìÓoøóáînÄ¥Æz�'‹È”ž³÷txìwÑyÑ”¬ÐÊ:1¤‹Žd5‡NÎÇ¿uѱx†€ó›•Ø‹IŒûƒ]Mïè#7çƒgu!×õî á|»èàÏ;†Ó�œ�bÝ©—•"æ|TtÑ�K0&¢ Çs>ÈtÑ‘ h·ïº¶ÐEws¬­ÝóaýŸÒ¤=ß®Rúù(zÑñÞg�­—’¼èòµ\¬ŽŸ�M‡ˆ»À8Ô��~^toy�|ÅʉPܲXÐçö†‡û½èÃð³‡y¿dÑ&ìÝ(Ýq>â^tK9¿La¸çcpÝfÍÒ¨Ë=ÎÇð.ºõÁš�o^ÀæãgÒÃ&ŽV´Ùp:£ùPî¢óÎDZó¡êEç743¶,pó!ò¢£�k”„æƒÓ‹®4v›åášq/:îÖbPcNHþ·�Ç2çEWù /HÃC‚�n›CD0°:{Ñ.¾·|ôzѽYú|S±˜2¹^t„xaâtï 0ó.:DšXv˜œ.:Rv$DÑ]óa™Ë êzë*öÀjÍGS- ¡â„7fóuѱöðW¸Kó!í.:F^L›æc|�å&휚�þÿ– 4mÃz娅’µ„ê1êA¶¨vLë¢['¨Ïyˆ ëùˆà84�õrZÄhr‘Ù¥çÃlExÇgø��L»è¶û,ȾóÛŸSÏ„QÛù¸~ =»'V7ê|HtÑeŒè(s烇Žü�³ãÓùXÂÏY•Ùèv±r>R]t„%û:œ˜.:ºÞ²FG§¢“ÛEöFõùóÁ.JG¤Å“êò󡢿�E—gX×ùxßð»/ŒI¯Ê¨A͇±‹.£¥Ú¥Fá÷ÝXgê2áíl‚.26­L]äîõ:7,¦.Æ ¤²_¹%æÃÈÔ&û¹W÷0Ë.:k< +>g>¢L]Ìs¶‚�\c>0»èÐܾC}læCÜE�¼*~„ãN(3é¢û†aKáÁÿºè˜±âús aê2®�Œ€ˆ5ü.ºb×—ÌG‹©+ÐN¦—EÚEç'3në¹|D]tDT®®ÈY>»èŠ ÔJÙ|ȼèÂl ‡“Éš�‡'ß7Àœ�‘§m¦®uçáaì0Uvå„Ǽ´Þ|”ó¢[¦VM¼7Št14ö¢[ +Ç•„kj Ýô¢ÞâÊdã. /ºíhà;zÙ\>’¼èröG-4÷¢#=̘çEw·å£¿¼è£$ÛòQÔ‹îûK5X6-óÑéE÷Œ D5!/:¢&†^QÌGæE—ñ6&LðÀ|téEG�ÙVm>æxÑ)5(Š6ô¢óˆÐó¿ ÷¢D°hÎ|Ü|¹½ê]q¬ÐÁ|¬+>¡©×¸ªÂÜ_œùPô¢sÇâ§Yh�°Ý5óñéEG¯ óÑåEG,‡bVƒBt‚¨L¬±Ø|t¥/ºÇó³§ù¸~Ñ!¯ ó�øEG((”ÓC–/:y5÷”4ßÈÓþEÇßzšzólTÄ�Ñ}Ñ9? EžnØÑø¢Ë‹ßeæÁ¡4W~ùÐø]ô4clùÐ~ÑÙ/É…Â¥ÅòÑ2ѽ?ÐP³|ä~ÑœzÈrù ø¢¨sP-Y>F_tp�žGmùèÿE·~k¬‹¶²ý9ÌÇoÄ˦_Ÿ1wÞ)¸=ÌãŒ—í¶±lÔh¤¦Æ70:—©§è�%Šq»62•wse ì Æq\(oÇ0:xìá3óVƒR�ñ%µôñ¬}^¿KBÐ$ÿú]ipèŒîÅ+†‰¬?`t›³�ÎÀ!¸`¼JÅž§°0XF¼ ++öz}±€‡ß�˜Ï�äûA¾ô7äúÜH¡K€eÙo(­\¨pgT‡o(LX(©¥N°ÛzCŸ3?ÐJ›o¨'PûB» ¡û†~¼þAÁ°C´`tÞ…ô³\Ò7´£ËÁþŠ›ÞÐÞ�Ñ1waýÞ�>¨:ÉÀÛe&oèŒ.EsÕ2F7*ö‹¥6C6o`t“Î�w�‡îð90ºR°Ì�¥Ä½!+`t1îdº¼Á\†¼¡]PÃV¶Ênè�`tK©LÝ�ŒŽ.VšVº¡™0º@¼hýú€n¨F'yÈ$Ù–nÈ݇ѵ)¹¡9rbÇ¡øUë6ØrC(atɲÕå´5↲€’Ý®çŽç�±� ï‰ÞmÈTÝ)ÒwÐ/Ûo¶apQ +£#Ld±ey˜Ò†¼ÃèèuᨓÁ[*³!oÝjŠÇœ«lF—iÿÙĆ>.Œî_ï”džºÃè´DÖ_³ äÃRlÈŸ…ÑÑBfAaC·ÂèNu™4lÈ#Œn»Ö3q�ÿ5äFwàÝl Õg{ �Ãè¦\ó±õÀëžtñÍÉWa!VµÇEŒnØ€¦4ƒ…h£›�R·{þ„¨’�o{—¨Uâ8!²£û„];!R‰Ñ­yäÝ‚0:‡ªq×›ÛÈߪ¡Ú e‘ žÀ‰ô›Äzšé¥]ßH…{¸°µKg·üßèÆ±ùðfUòÇpn¦ñ t8�â)å㈵‘Þ€S6mÀÑ/�ââ¾]Ábt´¡Øÿ†B Ÿ ¾Ý]C¥IŒ¤’oµ=ëå1ºñÒ +%'àRˆZ‰Ñ±ŒN,>á7�ûÀ�"i‡èC&F÷)VR9Oxè±ßÖmâ'j£[ópý0ÙÃb€ + tÛ£]1ºÖ±u¾@× ?btYo%Å#ayÈ Œ.Ù«ØKæ.qè£;ÆýGr�Ñ937ݾ!`t°ï,ö«,½€Ñ…2¨UI ’€Ñ%ÿÔ2.… +D�`tùƒõn¢ŒNC®Ìa[Ç D|0ºœ¬ÐC‡`t" ˆtÀè(Ö‚5ò±  }Ñ¥®ÑL3ø«%þÙ±'%ñE÷h¶Ü?Znëôû¢›ÞÛºÅ+|<¶^tgÊT`ÈDF½è¡O5'8•1Ñ^tyËŠ5™È›Ýø!Ó�Œe"^Ö‹Ž>rÊE™ÈèEGúV�Ž6’™ÈÌ‹n;—1ž™‰æâE— ßs³ÍDÇ‹.óLe-íxѱ°ÌÓŠt¦vëh`�' ¢ŠÆD-Œ¢ !_?‘‰’vÑÉôÐßvc¢¾\tý,?ÅÝc";\tŽ„rމV.:´q_Á4Š˜ÈÝ(�¨Ü0ÄqÑÅ�–˜ÂD.\tW² éAi1%ä¢ó!㇉ª–‹ÎÒ�f \¸è¬ð3ÎÙš`¢.º0Icæ'ñKtˆ‹îXº¼””·.:;>—¦ëª­¼D\t…cs|k•¡\tV—ÈìñØ +f—Èë^À‘.QE.:³9tAè¶{\¢fòbkжD~U±µo}Ênyn‰xà¢ÛWþ…Vµ¼KÔ�‰åA›/ü0 B.ºõc‘%ÿí eÃE7¢ ?G�ú Ñ3.:nIÕ•¿$º@‡ÈÏE÷Ý@‚Õ’ç¢SyÇ5®·m¹èup˜9æÚù@ØÆ·(Ã{îË#¢1.Fsƒ�$úø`ÚrÑ=%„&6ˆ}%ZÝ í1‘KHu%ºá¢[ë–÷ üX®DK.ºØXXŸ ‚F|ù¹æê~I=¤sÑå×t€0 + @‡´jNï}Ç0QÖJJdø>·…¶Ç2.Váâä˃ÍEWŸèýÚTÞSsCWî¡ [9‰ŽCrYýü˜¤p{WÔlÂ#N˜¢�C–…Z”~+‹Äm‹…‹NºÇÒãBAǼ¶ZKˆp¹èê�}Ò÷ ÍEÄS˄ڒ´°ûi’¬×SrÑ}Óˆ:RU¿û¹è¬{ãäD4,‰#.ºivsüýPÀÅ?.:¶E—}lF}4& SÏ•35füi¡N?›ÕƒÈ“ ^Oè�Öp†zËHÀnöY„’Ødêõ>½A¼NLœ�ÙvÌ"]ˆ‘DWZìS¤åñú—]V°˜¦fËС¸îßl!+ÀÈ11�I¤IË€3ˆ÷ðLm/5÷DIÐuv èØÑPZÂv âÝÕrc#�‡D^îïï¨y7X3ômÊÒ%z‰H˜†vk襉ÃbÏ“6‚›²{h*<alƒÕPOˆÏ�v×E4j%ÙÁŠ’×(@Âê”ô@ò½Œ\:6cA¼y(èøÒâÒþHÞ$H}”A’ˆH®—#xÔ˜è0´S¡)ˆ—p]ªUö°ù‹‚x3ïÍá6Y®:M þJÄÛía2Ç éáójæ57<)�‚<0.ÙÜ·É¢» ü-åìTçB1•7ø… YŒ€>l@¬Á +üu¯�¨ÆPºG‚9 º›çp:Î=j½Ìu⃤“ ÂåqUŠVq7¤AL¿é��‚xçœ^¸¡BI:Šà²<“PQªC‰Ä‹SÅUG^°¼¥¥¬š0¹ò¬»¡ÄÛòÞO�sfÚÜ–9‘Óð.W�A8ˆ·GD1Ç¡îZØÎ¤ìÙêÓ̬‘ …czÛ¹BbOœjFAXF¢8<‡k€�\“§{-É[Øð±9Z Óç³y´¨â…°_áèN± +B¼‡�æù`±e•/i”„jW¬M3gÊñî»Ä²Ã#¶*ÄKó.’mÓt5ñÉZgâ%šË'Ä«w<ä0‡KÇEƒ¸ ƒÓ´nÅQ‡¯Üs¤òIi¸g]•HS‚H¿á 7°Üi’�J4ÿ¢Wd"E„ñŽñ¶iZ�ßrQda‚â ÀŽ$tú‡ËpÒ@?É`N¤Õ2|–ÖCbß­ØpF¸»"S)PP…xÕ{DÍáì’©‡ö4˜wo è«4I¦Y¯:¡t³»ÃÍ¿ÊÇ1 QFA¼ 2÷wûIqGó0³<¯¨½÷BA�²ÎIç¢O¯BƒœæÙÅ( âu¥Ó–ˆ©Aƒx Ÿ +šj8ˆf!^¨/ºê—fâ%ìÈ(ÓE÷jÍÙ|‰ŒBå7×¶÷Ñ@vx�‡™‘ÕŸã ñz¾¨Ê½OˆWÃßÉ—oPJ#ÄÛc|Îo>ñt +”±ã>w!^K÷Uo”2uÄv)Ä{&4ÌÉî„x%¥R¬û†%Ä{·XU� 8E!^ØÞLb‘È/Lˆ×$–F‹ó�©âE3ßÉ3‡;Ê +ñ–N›cò*>(Û¯¯­›9€À¤Ëå·õ±Ç—" y.Ëíž 8`Pè©$^¨o­/Cl} e�„x}Uf¬ o]ˆWÕ):ŽÎê�B¼MÆ —£�€'ÄCŸkDB¼Å&f„˜*®L1$!ÞïÄÝDøëœe?ˆwŽMCê¯jâõ} XÔŒâíäÏUTLŸ…>½…˜2*ŠY”‚Ìh�t\×*i Š@� ^†¨ð·]Sd Þ?³Tô’tÄ»]/‚»nñýÚ�xë�7#@¼\’e/T�xa¡ö¹‘õƒx�·Ñ–*×-P â%ÅìŽl:Ù âmX-¬+tc„XÅ&¯ ñž¤KƒpÄõîO/‡1úö�tA¼8�Ÿ9SQomA/oD¯ŒÓle2? â�>=]ØÎ¹ñæÅð„þY¸ÙñÊAÜè½.pï1«q(‡RST¯€1vÆ÷±¾Tƒxá�(�c…†>yPâ-(í8m¿‡-*ˆwtÎ… °± +âMËìËîÞ3(‚x½ÌǤQMlщñ¾E:ÔÙ/‰äĻ׆¨¹úâà0Xà»ä�âmÝJÅOcÈ,Ä+x§¿cuªÐæâ]Ç’Ã5„¬µ‰œh„xSgãÎE',MݳT ¾Hˆ—,€ÐÜ. a…x³X©ˆ£E¾„x�¨ÓSë6 #˜ƒ.<Ãd4Í˹Ê0Š6ا{Ã)ÉÏV¤˜]ˆ7åÎà£ÕA›!Þî²ñØ;"\!^¦�©²÷Ô% Ä«�òø©$D'„x[®·dLÉ ÑaŸe$LÎ` ñžs>úÑâeØ—-&Ý(Cb!ÞuUÛGÖ‚ÄH°…¾¨„xaZ8Õ¨¦9�B¼Dä-1бÿû‡ Aq)Äë íHF+ž`B¼�L*(Ö�êÜù5úL”ðN¬Pqo�—ºêMÝÎoÑý˜‚xÃö`pUƒ5… Þù0ªöÿ* â œà¤Tw=ŸX‘v¥/ Ê—® ŽÄ;˜b5¦Þ«ÅÑ´x›¦­Œ®_F¤ Þ�ëM›K‰.ñù‘Òr}£‚yKZ$§õŸ?¼/Y¥Fú9oƒß¾Ð—‚ÜNÂ�º‘¦oy7šþúÈxµw,Í:]ß%J�~4x÷2“ýáet3%$Âdþðn#ï©aÙç.1òo¶\~ø€_W'QĆ’Z³òëÐ;µó66“2h�Ò7#2v‰#Õ¹’L¸˜tÒ±)­®Ã‘c;–År¯`–¨ ÔÇ5x®´ ^‡ïÞÙ¬‰96¥mÔˆ•øÐ»`*ySê1ÂÐ+&Ÿâ}!NWÂÄ) )ïÅC;Ňùâ-®›ð½Ûd‰ +7¥&fxî˜0bËH˜\ú)=éd+˜û¡”ݩʄx(¾Ññ×oK1ßÒÓ»E +§Ô_îûn�:ôНyx v<ÁAˆ‰C Š’vbµq"Ä{pÿ,Lά§�ñ?³)-H…Ù­koàxfSÊ“áêH«*gk»Àãþu:Wx'u›¡.ˆC¼‡Ñ[î#>-†Ë!^²g( +Ô¬9¢ÕC¼ëÈ]T½8¦ 6"^¯íÍñ§Ü¦ùuñJŦ@ø*޵ñJ!Ù$#’ûÿ1ñv�Ì™�÷0bœˆW†¦¬©u"–LÄÛjFN8LíQ"Þ¹6¹B¤IÄKG6ò]÷T"ÞäÜa’Š]J¯5‡fÙÝWÄ«�^€¯ ?¦UÄ[3àþsE¼¬ ÚHWž_ß·7^úê–ßé•v.�.Uø6,ÃfÄ«F¸{cfÄ;·9CHõ1Œ�^#Þð�ã¤õTïʈ7=§©ªÓƒVÉEÕ� ?ö’̧ØA)áÝ·Ø–T%tEVXÄË›+*�†ûˆ]F¼§¤vR·GʈWñªÕ…[‰PÛŒxãÌ”ç|äeŒY«Œ’¯™-Ïn¹#Þˆ#`+Ÿ¯Ä“/kèJd„�ÏïP–"Ý6¤¸ G¼ÃÑx¥4ߟ¡#^e#ĔеG¼µÇ¿”Uî˜ñÎÝÞŸkãÕ•G¼²›++…ñ2ˆ‡Íƒî wíUC®Æ´D÷á! =Zß7¿Pcœ¬¾Çœò¸ËÕø(%«¨éè/ÎY/åIDÏÆ2˜½Š@ãar½ŽÊq4+»ao‰V.+Êâ +9ôæ+ãc�'´ÀíV©ä�–öš8nw阉7̪WtÇ꫚!°Ã>Õée?rsÖ·»Ú—+2Î7¤|�犾t ‡ƒ¸!è{ãû»ýëîl}kÔ.¤É¸Y9à&® ¡Gß(?ºƒ±52PÑVŠz* -FµHno¯8[¼¦ü@³Å•fÃC= Y÷Á<Œ½{o¹}Šcs®mѪ”ðŠr…fåÀàW¥(ÊÅFÙÕÃbó?¦$*‚÷�ùÁ"RæÑÓýñXÑl“Eš»Fð+…%¸Lèš±n:º +žuv!&´bçEð�µèxžIh» Ö"¬? Ài‡T†× ".ÖJPô�µ÷•ò[舩@~nÀ¡ÔB[lB-æ5Ä÷ßnæÛ~Zù�`™^—6;;¤$D“ø•CÔ#ý:Ã~%³+Á·7 [e +z€ AûW’U/tß«;‡(� úº³:Î=w*™O>¤Á½_ñ9çÐkl7`Â"M"u§2ìe!˜½¬ï P‚Å£¼±GƒjÎJíU’¿Ïég*¥c‡«n:Kª2…ŸK¼d# ¨Ñ» &°ÞõÂG•sê„vû‘¹±G¼6° hëw!1@zÀéï(3ùõ> ƒÕë3JÌ‚/˜ ‰÷þL6%|âb½&$ÑKæ\¹ÌÁ7N¸»ìœN£Ë²%8¿º>‰wËYWrùUÓXZÕ!WzJœÕÀ³ÒmsÔ–Vñe3µ/Æ„j³ä¸’±ª›•ýaUJ¼*e%MÌÖ¿™¦çJ¼®·w¥ßáÞ?ß³ ±F¢×à{YâýKR¬J®VÁø<ù\ÿC¦[â}³?¼$Ì)z–yh‰×ó3=!dÁ£�8ÞÙ%^p¬dÝáÚgn¼T¤þÖãª× ê…�ž±×Ó‚Ýoì�È 7Þè~ήôuÍØ³héÄwh(uŒE#ÀK@ˆÊÌÅfó}s�…·vN£Q·¼EvËGzÔao‹*ÉábL¼PïoÂS+ÇXá˜x‹›‚1ÇÔã¤3ñâ,èÖÅмn¢ÖÑX4í&õ(su‰d×Z<`ÚËçÆÄ«¬ãcÓR·‡Þ-+¢6ñ!b8 ÑoöOÞ!/ìT´�!&ÞvÁ&Ì—ï±Ï2ñÖ §J4øˆeâå}MíªJwácä<·Ê ˆ{Pè±cH…z@·DÜæº�&Dáöþ0ø�³IF|#:£×[�B�áà0ª ÎDø~z�–Yªð'_LÀ¿¿g¼�x€:ùýõ©Äx: &Mò=¿@l®õ Iß ‰  Qé‰X8L:¼§ýNÖX:ôNîË©ó ðà[ìWWä•|;€tÍ3ˆ˜or„Óçxt +¯vg…¶Ùº�•ã?xQ7…w3öàyÎSêðÒÈ¿|�^'�6£S±"Ñl°“7–NxëÿKš†é+–s‹3mÿªnUr>ýzÌ»3KáP�¹©µOx{|S͆g]%�†Û-:cíà-#áÅÚª?(Õ€»g½bN÷ÕÏ�áîDóÔPg7�õ`¾ú ¡à¸Â¹UÝ:’d$¬ŒÀ‹ð†$¾]TÑáMHU.TQá…ó,�ŒGÂKP©AòPx…èm˜„ðâòX�]ÑøàM>/Ãë +¢^öæYŸbüà5#d[z|ð‚YùY�ðaÝÙS…ŽÉn€Á§¡xVV¼Ê¼‰ûgž0¼×ƒª )fVÓ +Bjˆt2¼LÈY÷é_0ïÁûÎ?iõÏ^èþ/P0�»”.Ò#GŠï +2 FóP«ñÕ£b2£Vƒ· ¶kCY4xù×Ì:˜”‹òa@`R¼'}Ä‘•b?:ìP¹‹IûO2¾5xØ`*r8hðšùXcœçÇ5�Ñ’5«ºòÀ?\‚–lp¼à¬OUôBö±[ Œ–…# �! +ƒ—àxV‡�éˆeÚÁOpn¡GaïGÖŠI¤·àµ¨Š�~¼¨fÉÖh§ +Q­l9– EƾË g[øm_ÅGTôao? +^'ù¤4Á;j´æÈMðþ¡RÏj ©0–u鮓¯È{b»¹û~wðîaYïâ£&¥€Æ0§$©;}щ#‚É ñÅ®ú¤*­ÑÝÕ‡ˆ£rá< UïQ�ÑÜEn/%ëÁ„¡îP—è,òÿ9#x¸x–ðÍ^ËD,»ëuÑá 4‚×{zø�N„�ãâk̓ù�o»&¿ÉY!xA!EûÐ x‰z~8.%H¼¡yx©Å@pÀ&"-Vy^Š¿G´6·LsšÔïùXžqÝÓº ¼A‰QÜrA™^Ý?‡æ!9-ðV~ +þ?L ¼§iXÚ}"'1�¼À º# Ê'QZàõõÖÃYàåUPC:A]àË]ý�xC,ñÝ[z�WWþÃ}‚Õ¯Ï!�zöÔ¤2 ¼óàˆÒÌ‚üÝ9^·À»€ÔºÕ¯}-ÑÆÂ�s¸×ö:ãÒÜêïoàÓ& ÛÒZ�7 ÞÍ +¼ãË8]Dsa ¼_�¹µ¹9ù 1»Hà}"=�·S<®Ñ¥“‹À+/Žðé/dDƒA7WsÀ˱䀙‚'ZŸë FÂ(š¢i# ñûvnP±=™}À«ƒŸ$ÂÆÌj@àç™+J¥®zÎï¢-“ætô€WÁ¼º Æ–çæ€·çÙ˜†G‘êT1ã5H—Ë¡8çxCYxÏìåZŸÕo·•U‘¼^Rõ’½Šö 8ÄÂþƒ…¦¼�’r¹ðþ+s‹4óooÒ•ÕT¬Y�¯°ÛK?£eÞOJ³«t¿qí|•œÙ_q©¡u3º§¯¼H@¿ª¼ð»ù$2Lç@xÜÂ-åT?HUÏ夾_žf-뺵”��p9)ÉFpj&Ï'˜9¨ŒÝéœe€÷›(àÝEq/€×VbÊÕ½­ijaÀJ¬Ó€†V‚«‡`ÊÌ<Ó�ôTçÿbÀë-ˆÓ$¥W­¤·½Ë�­:çt¼ +†e¦ «u�s_‡�!� »þÓeÒg#/6™ÈxŸ¢ªo¡€× Tš�É(ÀÛ¶´ûOF¼‰F:.¾´Œ^áº,f›`Y ®Iˆ)¶ ÉD +fáÊ17:ÙâUÙÉLºŠs=üUœ €áúXw ¹öƒl'Z¡&Ù0Þ°«»-Í\5 â¿YØE:B’|#î› œC�;›ÀÛçP%Ä ¤BÆRÖçPUå#”Úu8B̵�þ�æú‚Å ]Ž^Ñ�.GëvO·k8‡†ºBÏÚÀÊü9�RÆ(„X€éÁÜ÷«€ÝàÙ +0!ûÀÍÂ2JÄ"ƒH/U oƒò¨7‡voŠðÃýƒsÖ‚:Æ;_#ÎÍ¡(@—NÂïZ}¢u +Ú ™*^‹­P„Õ ŒG(3àd#4Wžê€øÀ/7‡¢ù} /|ÈvåŸÍ-æ°.¥|bJ<#«Œ@8ä4e¬8ˆ´9¤õŽšìBô×7�,ÔÛÕYóÏ<šñÒÔì²Í¡%"Á]åG.æƒr™…žƒz¥yí3Û@Å· ±±–5œ+˰¤b�Fêõ£1öH$§RYôÄ$8٪ٗT >že° B×d¥¤Sx‰ÆÁ›Cè_Ør ËÛ¢¿v)f­�(³¹ +Øö²@è‹` +`�µà¤4³9RÊ¥ùT\iÚ õº—‹ ¦Ö¨¬¤'Ú X�RT¶S +'›Œ2²âœ€`ÎÅiÓtª¥…ÁšC)—Š +ýù2ψ¿Ê>jÁ�é&œŠ‰‘§”,K4Úª¹Åè*×þŽ>q2Õ–ð¨Öþ¾ŒÝÄÅ–†“ÿt:Kz*es¨ƒUk—%§Í¡=ÒÏHtYà‘'¡ê©TÌeµ94úRšl ìÕgE¾òƒÆb +�<µµjý&Z‚9qâR8c]Y˜'.³2z<·p&äeºF�Ól­ÙB4“:KÎæÕX�öå,CÖ +@B�Å7f¾(JòOe¶Xµþ‚)`5‡·¹Í°L-±æ)ÚõÌ-º#m4¢ú°.$¬�ª[Í¡PIP]8°p†V²áw곚WúçŒÃ(÷‡ MŒ…?DoÍ“I`�˜0vÖBbßfûÛÍ¡‡Áè¸h[@sˆ”‹›‰~ÈŠæPLîEÂõÍ!¸�ù9p«9TçÿAAé0¬k]xéùž5a5‡HJ°ž·xû®94dÆÔ,“"£:Æ&½bA/€›rÍ!øÑåG+·­9h%»k�z §jY>)Õò\†­MÿGî9Äïôß k…mÅßÒšw«76‡V½ùu¤½0nF�4®ª#ª n1ÔöåÁCWws(8›ª(ˆ�¸9D[›'^L7‡¼hò¿ØSÖSŠ‚)”Ì †(šD]Uf,¶Ôï¢ DB—-¾ßíÀÿÔPwÕ.›rZ¨S|ºK ÎÂt¨Áâ”ÎÆAmÛë›C *g 5´ƒøYÍ£B=®èƒ…¸9têWBÍIr•ô$¤m(¶Â,nÌÁk)ßÞ ÛÑ“$i3u±•½ÕS_ÙPHâmD±K¸ñnÕ×L‡•�Æhoeµ!èd=OÈùÜ +Ë?Å×£˜»U"4 d'�Bš?�kh<ü'¦˜ÕS:\åÅ’¢0ƒ} /n͸¶¿ÃCï8»ÿ—â%ˆ=¿™À�xB¿ÌxF³;Ið&p¼Ð<>@�Û5�šBFÇšfO� 8L~òÞÐHùÞ*ꥦ™Ê›Cmªºÿ؃ œ2X„rsq;ØEò‰6‡R�J Êð½›C¡¡ÒÅ[c.›C1"AE–AR–Ș¡„ªýœ¨ œ¡hÓ1SÛ™ìTs(Èž„×ã³³Îm£9Œ´c­tSs`ûl,Þkô™%i•xÍ!¯ËÄiˆ‡/0�³Òs7°ŽÍÈÝ�2P RÝA65 +[/|©9¤aÓÙ†áHÍ!ìÊy—ü4@ô‚�ÑZÍ¡'=ô…Ô¦¼¬9lL؉A¥ÖÚ\LŽ¢Á8KªæP¼¨Ðš!zeù5‡¨YŸ{*r.´¥$וEr/±#ZsèÔ^{3|—Y•œk bàn1%˜5‡Ä•Š€=Ou®,ýÔæ^f7ãX5‡t¡¬Üt·ªy@ÒšCóö‚3¶«!~`Zõ›‹¢Äv +`뻿æ�¸ÂUº�ûÎõÖ*¶<†¸÷„šCn …ÊÒšC+½N‚?·Ó8»)j‘Ð1å@ÚÞ‰÷Y¬æP—qð¼‹r©qhý{ú¿f”"šC!Yžýï×S4‡æ È¬Ÿ€Ù§9ÔMË+™�öÀñETƶi­ÎÈd¬ÆÍ¡à¼-C\ i&šC-ª!(çÄÍ!Ç'(våo[ 9ÔÊk€½~8Í!÷%¥ì”ÊÑ$G-RP©AÁ¸Bx8AºâLp]±ÄÁ¤äÓÅSù !‘Ê�áÙI +ŠÁ–D‰üb5• °5èæ´†·Ž�éáÌ–‡Ì!Õ’—mwBÏpöY–Yov®ÖŽò „1iê�\yKÉÚ쉾ß!ÐÝ^ øKÉStÞ†®ná�¹„�dH"ünaGT–Œ¿°‘TPÒºwíÿ4–vˆY¼ u�{O‘[ÌàܺKá¡‚L;sk§¦PÝIc–ò€˜) ­['º¬Þ¾û�¾:îB\6Øq’Ì¿YXicmýgAޝË!D¡°{�Thf†0s9¤9‡"里#]Üлûšö'Ëö à³çØõöD^í%É&ˆÚiV5v,ûÞJy9T¦T¼43«^#î‰5/‡äDRfôií<:í î6ö Ц×Ë!ßÅ{Æ|ŽPT´ÈtÁjîÇ^%WN¿%~*¹ÄË!' Åî˜ó “{9ä ,8fñb¸¯jä‰�”�ëߪ|vBKWly‡Á¥ù A£ˆ¢£8�5  SGûxñ0DM?„sŒ?ާÃÃ�‰˜ˆÀ«‰¥ª03p–å!s$=–_¥­báJ¥ÍJùá ´ò(]Ù]lg”¼°íHU^áݨ¹>ÄŒ Ÿ!Hjhz3ä„N U£I³ +9˜f—vI^À=S©Ô ü|9ô!TYñpræþ—CÉ'Å’BÅ`}9d¹I€ìò6Eì@ïó„~^Iù–Á\‘‰Ò›ô4ŸN—¾6ØïŒÛïE#Û‚{ÿù5ÑIôÚô"`úU[^§ áv9„Ä2‘€«‰AÒå�f5OnSįŸË!{à§ëÒ'¶RærHn­3@¶]F$³Ë!!?KxU/t—CM1ñZF Ðö•jÇå.‡tŸøtÈ–ÏHŸr�qI6]Ò„t.‡*³X¦ì†Ïå�›´®Aá1ys2.‡`oÖ{¢#fr9t&N¾ZÊý&â£Û;.‡¸¸nžx-12@R—C¸|6I¼ÙOXÿ”ÈÐä/ô.\EîʦBòÏ%m‰NÊ À»Ó`÷—º*›ã¹ª¯[p9dì¾¥F=4R�1—C�˜#S¹ Æ˜Ø¿Ë!ü×XaÖÀå�K‘Æøµb—C�{Q~Ñ .‡fÊeAn?2¸ê ‚�� #’/‡Lpä¯à¢k¥ör¨R÷ =5ÝË¡‹� ÔÀ— Iù_/‡¸‡°hfˆ)è¦hózAùåPM8Y„¤|C¬x2`±œdÚ§_�fvxXmx3ÿå�reÌlÇ!lõÿýË!ÿ?!!I]¾Bq–„ôÞ87/‡¬‹"®,*À!`éL¼Ú×Ö’=»—Cƒ‘QÌ—C³˜š5Ròrè @}£Î0Êt;5iª]Z%e•².Ì/‡RÎPÅ3Ã'Î…€â‡§šTŒ²j”Ã�{ßrÿE~ÀDÿ2†¥a£OÒ³£xqRêüÄ?M?X[E>?”“Xãæ¿ÐM2¿ÒzAMOç̸—CwL<ŠèHMÍgd +Ö¹Éh7/‡Á>¶˜U¶ú�øßQ‰_i~$~™ºò ÍD{/‡  ÔQÓaZ¾Ñ®PêYB#8_%Ì9ædÌn/‡Î�¦jÎ�âr¨Ã«·Z(J!øq9ô1ò�Îårhsü@Ñ:æ/.‡8 ÚSCÆb.‡@ÿ˜3%åƒ.‡¦‚[.ex|ãr‘Á}·Ùå�–޼m u94ó¤5hÆ÷®ÍKd T.‡Bz1Æ}jBú÷AZ… 'Å yÄ’0¾l™X“ò,/Éës¹ÿhùÖ è·å ‹L\·—åP+”£n ®ŒåßÓ‡ÿû±Àt[8ѪaË¡5²aË¡¼}ÄH_vO�dŠ–C |ÿÃ&¦Z�Ë$ÌwÒ-‡°#Lbw«å€¦'ð½Ù´òSö 1è}[½B˜&ÝžL̨(xË!´aRHƒf›Æf€åÐNi—wï¹*Ë¡{&ëC +±öW3�åÐdwᣊ˜öc…;,‡w™8«v\ÅrˆÁî*{¨7âü…&Ô]?>é�2 ql9„ÄqDÇ-T«%'ôˆJ/ÌÑÄ{ƒEM,*�³hBB¢2ò; ‚acÐgˆÆ£t�¡2²hàž­’ÍP-ä’(¦*v²ƒ+ƒ:ï3Ú!2‘‹.Ó´œ×hdƒ& +-T»ï# _(y0ûÿƒ9´ŒÀJà"WŸj¬§¥ˆúµ(Õ¦D¡HáçdÌ! r4]FæÐ£,ãhuÌ!©V—QÅ@ðØ~RõÉþ!YÔ‘øºtÒеü�ºÅWõ¯µûb¡Æ†9d;€WUcduH„a]í\Vì°%A‚9TÕ¾àÝ3"‘£Ö‡µ�ZÏ}ä§PÔ8Æ”’×)…L@÷QÔØòˆ ÛU©il‘ës:MD‰ÂZó¶†jþzpIÃAÜø�‘B²µî‰�£yu•™#1�H4ÒÆ‚+¢Ÿ YPÙÊÐ΀gÚ¹ö½À­R"Ý}£[B£ùè{„(T0Pò˜LèQé[L'˜ŠÂƒ"+9œêࣟ|ÍØçŒï ÒÍò +],NDÂà(ZtC* F½u/JóüÜG³îÃF¼i7âÆEiÀs¯p×sŸÌýP€”êÕ†4�ô+Wêy@)œ¿g æ“iý…Ö$+�¥ &½§àA�Ãò©E§¿éõ.3»ƒ£‚§¦ÉÔŽÝü2àÌV&[$‘Nô£§yreU¢SÍþ;øz½�€6�"ë?uÄ¢Ò#œË÷å>dÛrE §ß’ÓsPº)“óÈ`ÁÙ¨–†e€äùÖ:žÕoŒÃVaP#xœ÷í£)(®Uê¿ÑxûpÅ•w Bô’Ý>ÞCqM‚ H»}¤8J*Ü>èRÏ52iùÐá>fQ\æã>@Jq.ªs-÷¡�âæ!&FÓ�e/ǬÓ`Ü"@,#Ž-¡¢¸ábo=¸‡s)®ÅU(q—¦84añ� q‡‰¡8Œ£¨¸Q—^lûЛ⠆·ò*ŽÆ^hÛǪ¸w7S¬íÃÂÅYÁȲ}¨MŠ›¼ü•è‡ÃNÜ5¶�ô¦C•;<ãEŠÄÔ1¨9·Ý°àYÀôÿ‚3šÆ±ãÕ1–t’ZGZ°Yd=.üol i�í`VîáÕ>2!ltÈBDš ¤Á†Úq  ýS 6A¨úº�¬Ï)àÁ£?<û¸ 'y4÷a=íw|ÌøÁ> ã¤Í^=‰1yƒªµa«PӢɟ¼ð735*k6‘|ˆ¼‰åÒ­$´]‹;Ó‘kÍJÚ\”>XÕ¤ïíbgt ðe²·Šê)µŠ$ƒ‹*9Q®z¨­ð컌F£¶0û i,Ç’N1´�îd5�€§’ʉ”€ª}ìýìUјAè8sµi¢n• +GˆÁЬŠZ´�SJÙ4y=²AI{h*R¿®±Fo â^T ºq‡�ŒÕ>žãÕÖÙ -_» +*9bºÿô0ž¦È�ä…ëÜ<ì£É€!Õ_*2Ö€µ°£öA—š>¶Ìj¬yœËšRÏîÌÍФ}üÀ�IË"Ì�¾„ö‡”„Ò7¾xsâô¡ÄÊÖòÃTÍ4¿qª}ï�Ö³|`|(Ak�]:¯ú[l u—‰U4›ÿ7|1èqŽÈè;Tߡꇕþ°ƒÇ4û°„íw°ÎážÕñ£}¤8Xδ‚Ò"IÇõÂçà@ûHŒªŒè›nâªÉþYøÒ'à¢À˜}ŒOã­uT{½ó°;Ne–}h5T<` þ%ÅçGÞœ^öAÑ]N¡çF{=t”Z²¥À£În{´ +L¥KÌñRqÂQ„o(<±úÕ‡…VŒoQØz¼2š‰B…l—¯µÌ–¸È�}À°jpuÐ{¸!$%ö‘Ž(2AÃÀ•ô5‡‡ØX²%Îi1ËËùZÉ ô™yJ!€žŒÇÇr <¥‡HùÝžè'j Ðò—i•ÙÄW˜,ö·!!ûi)aÕ.·Õûx Èpê»/FAV—ê^] ~\šû`O;Á6Q‰» Voê$�=õÏ@g„"_I…•ž]ˆJ‚DÔI)ÊÎàr¦"¨Uq‡ Vø^𕳙ðv^Z¾Rö5lg4“´®hÛ‚Ëzü öÓeE‰È>œ~e\™Ùd•¯dëš]‹k³çõ\öb™/Y­Y‘”}\ë{„ºgûѹ~˜ +˜”ùp²ª/šY©²^&îìC>H:G,² º«½ÙËž¬ODf‹ã—ª‹‘Zu<û€ûV�Qôu%öÖÅô¸‘䈎ÏÔò|ßú‚)ª—»àÞ'¬Ýá +Ô/5ÚG3�WP[ÑÑV0JGY ±Ñ Š(¨ÎÁp\,¢qÛ«"ýßד´E°÷’IÅŠð +[Níô>;ûЕœÏí*Xbs�µfÔ³�>>øËèö"§Z8?ûX.ô¨gãO·Ä„ŽIÍ-¨­ºQ¥è샳¼ãex�V„ïÎJ öÓºålj1xæÌ Dœú!:/D“ú)ò¨ô‡0ª qöq?˜ðÇ “®þa ¾{•êR7$“`tàgŒ×l³�Ûÿ3¬ÝÔ˜Ž{JÏ> 6+rÓdìT +×ÙÇózM¹FK…êÙõ³äá5ç‘»3ªE»P°V"®ÇW”¬IŽÝpÐ@ •²�Œj9ö¥ÈÐ)È¢�‰¬w²ªŠ8ÖÄãóD�6Y›×m—¦Z’}%õû¢Ò¤cÔ*¦—�rl—%#Cë;JÞ³íŠÈä ›´có[Z7•÷0«êˆ2þŸ.ŠÅº$ipËöéã‰Î ”Ž9ZT‡ –ޏgý!ö «ª´ÈºjG±�îèJ ÁyΧF+¸s”,îÂ…«±tèDšš;¼5=æ·i¾a¬˜<† 7ç…9#Ô|Ô„4cÏà£åÓ¯�½ ÑR0qd2`Ê„×Ç5— ·_®ô#l*¾Ã>ò6†õ‡™¬^€{ªD8öá^Ø-ÑÕúühw8öSkÙæ)±Á¦Tó„ûgF%/mi<ÞÀµnïw5U• #"ê|Å×�°ô™«¶ÈÑ}9 ê½) ‘<¾Àöùæ”7¹–íŠ}¨ŽîlÇ@Ëø1rŠ}œ”Íå :ø@œõùÖ{F;/–}TŽdö¥«õV”Çbè_–EK�=8O 3>€Ɠ†^U¡¶.avÀ>r]¤ÌÉêÀ™°£ùµÔ<ýS`.e›ró‰ßw7ørô†}ˆÁˆºõyÒ•žÈ(ïTø:ªêÄA÷ܱH^út’”¼–±,³Õµ0(Û¼gJ_4­*Ï ¤Î”àÂ>>— ±C0‚è¢c;1hKšàCe©¯gdªØ‡6чJëŒ+álþóð![ÂÛâÄ;úñ¼á¿Ð)  ¾cExÙþà]ºNŽj³‘®=Z3öñ˃ŦÌ8±»ã[KöªB/ŽIÚ9]Ζ#ò6lÞ´5�Öý°Ç + —(_?Dˆ}ìô +‚Æ+{ðOZ[±�ºr�í÷,×Ww6öá~¨¯*®¼†Ì[äª ûÐšË´Óø«ègf,/1òßÀQD�ì�‡ë6¼©ìCò¦ŠëÐ\E[AVG,ûðï›FÏV]À¡òËÅZ²�N¯×V°¨?¸{dŽY=o¯0ÞPj‡R ±�ŒÁG( K‡¿ &¯¿ö¡Í2Œá¾¨ܯ+]ªÛ‡}|�ì9ÒÔ»?²€�'¯œ%Ûâ óÃÖ¹;öAyÐ)²×#.•OÀc{yêL&2e„V™WöA!„6žQá¼ÜÁiŠ6õ¾98¦²ï^²ÈÓ�Ç'¢Ñ?’ºC™äšÐ½ãàt–`äÕ0NÎ*™âb|[B ®œTÄá‹}H£†â‚ŠUõµç•¶ ¡ØÇËÎÕ4¨­Jr"#úB•ItûøR»¥Gò[”ú“ŠãO]Q‰}@u¦z Ä3z«×í ˆäû€Û—“ÄÓ +|³g¢(‘}�¦æ\kÑ1sDùìß“,{^›¢+{Ÿa;/íÂŒuQjÑ|-ÊnUObó.† ro§'ꈭ¦}`�©1lp/%¹3èèGš õºyöa*bïNbšÊw®]�ºÑ«´¹S²@DBm b†g3e�J-à\Dû$ÙC‘ïqA£ñœ–ÖÆÎò‹¤‰í·ÓMu SöOå\‘à¢J4B+ZÑg[ICº¥T+Ôi—KS<û…©Ò¼ÏˆÂ“ ]ƾ“�’çt¿¹g ÷¤ÍÐR’D„€YU³‡›Î>ª®ÓìÍŽ—-5+uPZ\èÁ“my¶@‚�4û¸„À‡\ÒõZR»ø:ôrö‘ll˜´±¿úžÂ¤ˆŸ}Ìôx«Õ^…Ú ·f´n'mhæhF÷(I³:@À}I®Oc6|Pg¥åecÂ0�Ì�ç÷ÉFð“ݬÞëßUÇ”=öÕ(‡ÉŸá׳xàƒÄG.0ªÚì9î¢ÔÂÌÞáÄ»¬z; 8^4ÓyÑTɯ·Lg‚ÿ’¤ùWÝšsvE¤N�¶ûgÛÍ·"¦0åŠ +Æ*rùƒŽ½ÈŠà :ÿRU®0¿ š=ó’kÈ4@RmLêãb=`ÔœO›aš8BšGšU¦�ÞWœÔFN¿3/ÒĶEF&Æ"‚é;'a\Ÿ üKOÿ i¬0`Z©c\m�Ó)d;¹bâ^*mÞôC$0 „8åz3b¼¾¿WŽ2*òm„dh¬Í|i~9ñâ/ÝfX�´Ÿ�Vd{XïDk†+sêý ߃°ÞP©êL!pQ´þ° fMJ[laP¼€0A$ö¢/¯)w#ˆ‹û ôר>ÓȲýÒ|yÐ\ä@vždÝK?«K­ +>±×Tˆø‘Vµ]:ǶÜD+áìÊD‹?/W‹tMI×êóçx*Æ‘…ó¶ó¥G“�¹KLb`¼pFJØ%zv8Oÿ½ }'$ìè-ѵ[paŠŽ„Úy×´gA!C˜ñµ'}äoug̫°C"XUœCIù¬€ý‘€ÿ�mHY\ +÷ªj„.Yÿ(‡[Ú@ÿ•\ûƒõØòÂOšAØÒ_·bä¯�iîžBµ4ʘZú¢ô�] ‘‘N°oa0’aÊ�µêžêàaFyq'„tA¶ '¡9úñ{OBï¿ï8hÏ�'T�pdøwaié`ÐÛàC=áÓžÖ¬GeYq¦é!!êÉ‹QÐÒ/èõež‘ª?�ËAª�I„TŠùÕå‘oym©Õ‚U�@!�!W^y+ÏCÏžUAΔg5Ñ!þŸ¨5#ÐÒ¼¶Ò¢dP°œ¾´$Pª:XRßœz0þÙÖ1àñË&-Áñ ½œzëWn²zœWõ´HÕyǽdäý䊰thÛgð¤)c0“l³Èçæ0a=¦T%†ä€wGÔECöÑÀ°@aÇÇOË,Në9ø\—W#NÓ÷·=@E¤¦{)]Üa„òÙàGŠeW °èwsã4ÇÎÔÏz×Z‡Äßd`ú¨¦Bd?dGC9Vk\´Em¢kðaGE]zCv܇7™Ó¯xI·âu´•†SÊzèÔºr¾¨¨ÇG”‰Šjy,Œç8×€š'v‡áZüN–Ôÿj—‘"¸‹ä�SXr)«")e4ïX}7½jŠ*°M:FØý{‘´ÆÁÛô¶ØCT�:�+ZÄÇ4OÊ‹îal¥± +Ñ;o9å¼È€¬uH:ûÁ­SÑ]�û#¦Þ‹i¦!îÄ® 5ÍL|z"›Ç¥·´³ñj{¶2ž¼ÌÃÁPT,Ü<ÈèÿºŽÏ‚㕉²¤ò±D�¦Ç¹–¦�Ñ…ªí�X.È÷c*ª´B϶#½˜wkÒëán§ŸvóVç�#ºh�ä°*�2`qU”ö=XÕ½– A¤Mÿö‚ê~vnvgZJm6}�ªôLEÑ“Á0¦š lú QÃËuÉ.mª‰lz,Îô§‹™Cøšæ�)sk!ž†bÑ I˜ÿP1ÎÀVÈEî¹_ð…Ÿ)m¢Øl̹)«P~p‹ðW\‘Ô]r b„Z¢§õÐImo`c섚ñÄŸö͆omt£«î}X¥Àî¹"NŒ‹ÈÑ ãÒRr”h\5ÛŠoûŠ”àIB½ 4¬®é¿µM#[„~Ñà +ŸÖÞßÑcˆnqO†`Z’çÙ�ó� ¾l¨«7<¡Þ®v(NU Ú[Ò@$Ôk*oàû·uNò46€™TàQ¬kZ Õj4òÈ©@¨ÕÒ¦VË+ÔÄ"Œ”’PéÈ4á'8¿ìÙTœl²„ú¡{�B⊴Ć)z9}RAš…Dµ- 4×—�^çÿ0ò‘² +Qw¦ø Ö­š+j©úä¸QiÄA=/édìý®s¹gÊA=$¸’KXîDØ"’I�œ”ïÆä}d�Ð+û;ÉÐ:R,�}ñ*C±ŠxHá­ÿ?¦¼’‘Ÿ£@3ý ·A »$[ð;!³4ûŽàlµ—Ý ‹v%uFz4Ù¦¾º²élÚÔ4¦4-äoœfMÄ67^ž4~žÚ`.Üv=ÁiçÐKum�<M5e! §:Ó´w“l.w·š€RŒ[­ ¶æj5ű„]‡ˆI¸Uì>Ÿðãr+Øg£xdO ïÆéú$*ÆŸìM]é* '-e²ö‰* +&«èxúß †ÿ|{€â0ª Vìa + í86O²_9”Ç¡ìõņ)îƒáÐ�î¹yN8M©<Ýo¦EeTñ­Â.î~¥¾ýƒmi±‘uH�86 +ÈÝײð³Ð‚"$ëË{çÝþ<—'2qPÓfÏ�æhÜT‹’c Ì3 »ˆeצ4ÿÓeáøZnXºØ¦WÛšéæumÍX„$ª“€ÿéYŒpLµÉˆŠžcïììMø¶LýÓÒ3‰Ü€!RŸeý8Ì/-Oö F¯:ì§£S^Ië꧕ˇ+”©åj�v�LóHu›úª.5 iÌût|ÌúcÚ§�­Ïe0?d‹íuw—�™h-É:Üzú´�3èñ½- „TŽÒêïüvWMx$„uHŒ¯-5ÅšÖF?§.“xv(f8Y9J‘åìÍ},ªp��2È;“ø “zTÝì“E<µ�”nm‘H¯j¾>0ýÀGà£ôÁ°n$ØØ"Â�ÔüÕ¿Ë8:Ê Ï(†ß3eŸUQמ‡¯£¹‰¾ÍÐ »½§/ +ÿüØ\`3óÛÙª°o³ .V”m*Úú[té\n%{@JÙ%¥˜Ú gaUê`j`¹×F«ÞOa€”cdˆh[ +¹ÝI³ +ﯫ‡ kªç¡,ÄÌ) pØn÷dÃÒ3j¿5�*†ÌWêÄÆ*«”º¬öFšù +kt$b]ѳˆdú‹¬øJ›ÑÖøT9¾,n_S•¯4çzyçÒ•ž–·xiIâE!Œ‘‰st|QÁ‹á_ +h•µ³©JOø†Ux͘-¾Ä]”ÖÚÖ,»oï¢Ü»4ÑE½‹b�û¿«”š\fY·G)0éSëh¨U„æO* ut´ç–WRévË_”`‡UɺђäjK¥£NÁìîò]•²‹²�«¾î’ºÌ1‚¤Ò +Ñ`ÛMp$_¤Ò×|ÿÀ€ýOJ©ôŒMHjÐ>€»,•ŽW‰ŸAgX<Ç%k4"a3íʼnmFwH*�£ ¯ÒpC„0”T_>i%ý«nB`Ê1Ç.L©ôФ˜Oq± ºÃ.ÊNü7y#¾®L™‘Jß~“pÊî§/•^ò×>ÔFjI¥¹‘!¨” íº(ùð€Ý7_TšP PVµPQi¡ÄÔ¹`X°•ŽóÙ„M'g.J;¶»’õ?Ö£‘¤`½C+Q@Ý}Œ{Œ+ýcý]Ò‰’-­Ñi${.ЏWÓ•†»¼v%gXº`kQ‹º¨ô_38vبÍ1©´Ñçè)‚�b÷o$•Vî-¡r$©£ìÑEÑj¡ä=2Ö¤™. +†Ú6÷`ŠÖ¦‹bëf7÷6  £Ò§¤îÞÒ¦KÅÑ9¿Ðñ„-iuPiúÒ|uP •Þ׆ݳ<©‡ÖG¥ùn÷»ŸÁ¨tùö¥„A@V¢Ò»Y³¿™Ü¹’Ý¢ÒIa¿m ˜‹’iúూ×´¡Ò|«Aêqß2Xî¹(Ÿƒ–” +¼£a. +=ò#Ì%v%èfNå~/Sùpé–¡³.Pit+É–¬:bÓ¸m$“^3ó²±D!uoÝ¢ñý{råï)MþÓd/®«ê¢°^Ȫ7«•~2âØ4#”:m\]”¯/ž³ü�Ø T©E gääI]”w³Å‚AP.?D{]�õ¡ö^/öb'4Ê¡Tp'IÚü›ÀöÛÆìC7]À0w"7mÚ)yÆUq�3.1bóOƒS»wДöÐâºQ ÛiHhWþ”:F³ð"F“8&×Äi¡1¿±¾ +;ä#Óõ¬=‹±f$2²©§eŸ }sŠqHm© Ù?¤Ã›ü¦”÷WôáØ$?™îR ¥L:GªQÉx|^ÑüæŒ83R$Äš¢˜ŽEר䦿ÎÇ×yeÉ��Ÿ±`åÄ>Ñ$ÿMã‘Ï‘–„HS—]=‹?¿œÝ�f´Ño÷òž¾5üy@êü1ã±2¨e*ylxxßCr¼î"Uµr9ï–"¹[wᢓû1›J�Ê®ò÷ûØõus¯î´’ó™a¸ã“d.ßЕðg7ò§ÊweqËG•u6!»jÙnñp0À€(€èÍxCÒ¿LzsŸ¹;Q>bWG±¢‰Ò ëGó¨ØX5ŽV­ÿ7s5r½Â¢ªÖ�”3—¸›nF êd760DUV¯Vb+y óX§æ­2Kk†ù{Üz+wãdÌæŸÊ¾.Ó³˜ü¿£�ÑX±òÇzàÀ ÿ)¹ÇaÕçfîå’™¢1W|û“>2­?‹ŒÆ�íÙEû�äšÌǫ̀—,Þklh±ÉHjÅ’RW&?R&—EÓÏžš „5½ 0t&�ŽË$w"g¢H�ç’›1 ¬uM ¨œI&¤à0WP(Å•r3A~AHÁÁP`ƒ�X°ák‚æp„ù&ì@0…öUà©(༠Ü0ÂP �0Taª +Ä fX"Àf3×BXc³ç§&B4)§ 0 Š¡`EE.ÄÍL¡p ?БJlX@ =XHhF¸c‚ÌPÂ~ #À¡4ÜWpõQÐ� ”&ì0µ‚Ü¡ »‡*�@./› Ђx„¢.ØÅ° +RP ·‚‰+ +Ž0„ ,z&–›ò|¦ÊÀdk­ãÅ¿ýÞd¶vf±Íq h›ù¾­e{4yᇲ?Š:­¾] œ²(3 |À}qéúÿ%ÄgmíH–.òrÚÙn«¥�vßpÊNPí\µ›?ˆûÇ~ÄB¯ÀÌuª$o¡­M\Ò±ök uU®ˆ•–öã¶ÚÚ)O€•rÚo!¦ÍRÐδok§ï´æ¢]W\í8k©�k.£Äqv¸_$­œÅ-”vG¿ûN×ûE÷|_ÐNG0ZVÃíÀR¸+utÝA?!ï±cÕ¥:êѦ*¶ÝÓ™xÆ4e•©AZ¿¾Üâp—iKA[;³b,ca–¸×\ˆYÂ_g˜��g ˜¨H=¥×7ÚÚIRÒ}<è +þüÌ9æÔÖ@ÂiZìÉLÇ¥”H�íì† °s´Œ\ôÌ´�¢dÎa{[;ƒ +ÒsÚ© x§…Ç´–©M¨z‚­±êÌ¡rß·µs’\’­Å†#±ÚqRŸ®Ç ÂS‰>mÎ- o„àHå>ù8ù\9+)Çá›eÑãØô\U-Æt"D¦ý9~œFàb5ø7ÍÃ$1vÊ¥Q™Ûspz�xE‰ƒŠÊ‡ÖÀhÙÓäîž?Îýôû +l¦W·R� ÿû9iÔÁšJ£ýóöÿ p¡Ó^S„ÚÚYŒ ŒržKZh`öz-TP­­�»­‘÷BÉ£\míäV‹ì1_•m�¢£I ö‰Ž»ûuÓÌÝíb^ 9kƒ¡³àU¹Áêð€i¯#uˆóÒˆìö_H!‡§mí´§°QÙ�¾QÎ5VÙ²§è°W`HL§?j Ü±„|ëªy!FÕŽûKì§ð€,pñf˜åÍ€óʯ®:ÜXwá Rõ"ð«´`Í0âh «WÜ¡›‘�iñpM9_�·Hé.œÇ4ñÝ-EÕ:�i"ªè¾bãËN„Ç4ïÚOò,òîüx½�m^¦ “NYB^«ÖØ—¶¨ÊŒ��&�ip‘‚QFª•æ ‰�ŽÐ÷š£<¦·v/~¨|žT­äÙf$¦òPéñEnNMn¯¡Ðµ|#—°äŠN¢À]ì^¯¾`~¶ÏžZü2 ó˜†%V�Î'þ#�iH÷œ¸Hàh£µû1òÂÊ“¹+$û¬áµÃX§ôj7C‹5á`–µò\f-‰Zs:3ZË‹ÒÖ Oô6ÂaéËÞg×µìø·ÖØµ™Ò8àóZÇ(‘âÓµoãïšZ„öZÓ$~- Ó𘦠2ÊÑ’Ûs8W4Aæ“'«XVóÎcš�­ËGú‰{‹hÚ€`¡à’å¡]¿†O¨ä1 ÈšnÉm dBË:óÏa¦ ùÝ%ó9âh ðcÓ„9ïÛRÉcš'7¶7(yL“3?oã"ó˜&ødqãâ1Mu±(3€Çcš/ˆ¹�’&Ø<¦)ÅX�izI¡vÇâ1íT„“£Ro4ÞPð˜¦�+"T(¬Ìñ¡ èdÓ˜ÚfÑøØ5¡üƒ{ö'•Ç´5# ‰íóHÓ,“JÈFÉcZ�û»þ/ô¹¤xžë�Ç4á©Ø„1yL:yDù‹<0�iyžqEÉÎq-Îcv�ЬaŽ<¦µÉ7£`�iÁ"3B#“Ç4Qi +½ŽÇ4Ã�¹´2´å1-´Û¼ñ’Ç´yžw*5žñ€�B¿$ :{à1M,Ðü­“Ç´jA½x…˜Ç4=¼Ÿ0_«Xò˜–}ßdöÏcÚÖÚQ8àFð˜–Î�ó+"�iÓÑ•¸u}yLÛ7£”Ç®î\}Þ’Ç4Ï+«gAä1-ë¨c8Êçr£H<¦yÊí`b5�aš•ÔDng¸Äm_Ú¾‘@à IÓÊÁHEò ø<¦Ý™4#í–FÆEÓdŘÀ3ñ˜æÐÌ„×yœÇ´®{"éxL»‡D\áW+”Ç4yIÃ�d*· =ÓüÇÐMlŠñ˜& º`l<¦2ê9KKÓ‚|Fõ#þª@á1Íè‚×Pk +hÃcZŽxðfã1 rz³À›œÇ4-X‚.M�<¦‰æ+5~<¦¥kFjhÉc¢‰üÆ…Ç´`„'Ö_/u‰<¦)˜ã, \á1 wÊLþ•¹ÌÂjü§`\ yL[k0ºô¥5zA,Ç…¤Aâ1M›�½›¶¼Óö„$•Lç+Ù€ˆ>“Tö­xÓ,I׿\h�iªZý¨B3žU<¦ùÇc³‘Ç4kZ4¦F´NyL»Õˆ=Ž `x&”Ç4oð$í<ñ˜V£,§Ù¬Xn¿»Cà1M>À²lÈ!–myA8Ê©²@ùæäBwÓ–)ž6H'ÓnC&‡d)ñ˜VlhÎÖ¡â;ºæ1­_çÚ+5Lë¼Õ\xL~ +¸ÔÜyLÛ“„ÌÒj ÓŠbÄ'¾;�÷�iK'þ)zsŒó˜¦REÜÞÄ’{I`›Ëª•žr¦¯¢Þ°¢N—kìK³OŸcbæ �ÇcÚ|¦$Š_´<¦Ùv»åPÝ–ò˜†ünÆK!ÙÓÖ÷@ ç”ú¾I0�iÃýÀKâó¸¢h<„ÁcZ•ÉBMŸnâæ$�i—Sú¾<¦…(b æ´Àzùæ1íZLŤ°ó˜&rŽT¬�\£|=‡á ò…Ç4E©úÌ|L6_¦ M:V8³‚8xÂÄ +?aü´É�¸ —ŽQÓÂKHå³3»0�Ç´§n;2dœ@R8¿z{œDÓ2”"iFxL³6ž¤²lW˜Ó°Ö³#ˆº’†F27™tÈÖ TÓ,÷604ç1Í]²HŒÜò˜&²ÒŸi4°a]ÙÆcš¥üVoÕKÓ¶+ºš�l˜<¦¹†“øãÉ!±øÈÒ“jšPÅÍVÄcšh9¥Q©ÈcšåõO~Ò/æÆU�Vh˜†Ì©–Y%“Ç4'ž~w–r]£ÈL=,$*ë&wç‚ +ˆ(,IR€(°S�kðPæTäP–AUu r)“ ‰ùå_•cSK¨Èœý~n&ÃH:5ÀÍë;%»ƒ?ê�p”Æ›ë$¯.äPÌïÄü©T¤% }w;Þ}©ê?u+ûtKÓ˜�H6;ËŽÁQÃöäžnæînÔÁ4V¹ä»[Ï)yÎba‡ˆ[^ÙjIA˜@ <åAÓä�Á�Ipœ=›œ)ë»/£�œˆ ¥­�É'd✿øT¦nç>ëL=�qÕ4ùÐ|^ŽÎ89“ß\X̧R»†Èç#Žê³óçˆÏØË´é óÇð%Ÿe‰Õ3v+þêÌBoÓ#yå¨cì1óhÉò¼Ë““‘*´ä{Ä�X¡õ,ÈÄ™ø­—ÜÓOœºæCøsµ•–[ÌáÜ3Ì£êf¡hpÄ„Ú\*ÖNgh}Ï ^ ð¯ÙLS³Ï ÈÄ1Äó] �‰s¸Äx&ÇyÆ*dw§q]Õ˜aqo­}d“wÀ'$­k£»Ã¶�ŠÅš/í!!žädkï:ð;@íô’Vº?@kÖ É�{Lœðø7(q<æ$�Ô«äž›'S^s­ Êu-PDV¼É£diì”wÀ~fBk·F˜7Ó×0mÁ_×å÷¯-ŽŸ8êVW8zÍb‘�¿±¢Â3�ý'ÒãÙþJ§Í<éûÑáÄ‘4}Íî4>»c�R§$D…O8�¾Æ ƒ½3r§—+KvйÇÄ!Õ g¯‰Gh”PEšÚª<Žnw'€¨ kÅÛ%–å´DÓØp� +EÁ§ Jí¢ÆÐaø´x[#u³3Ä'œ7Zþ”@Ùmí4÷ƒ}ˆÏµ"0»¸Þ�Oô>ƒŒôý‡+\æ"ÁI_Sß]² 8´œ9 +[ +²‹�Æ ªÍ¡ÈÉ�ÄÖƒ£s1ÜIœ°Ó®}ZÅú½:Ù}Mšpžj Ûœ q÷Üʉ�MðT„ÿ­ÑŽ&L'„ÿMº;G¡l¦V.·‘x•N¤²š¾Ý|NPƒøl˜ÑßdZŠcBÏ|='R\Є¾�º8cÍÃ8æ„ ?Â4ô L?œ#ÏTz¸x�—jÄžTçz±/ˆ½á!ÛJ%2^�„ ¤“Ö0'ƒ{æ�€dø2¼—ŽÚ›y1Æè|Ã"nöÄýíCFDzo?geÞ?lœIt¼% +Pîÿ½¢ä�ý o’’úN‚ŽW¥\«2nß±"·õ©¹åPªÔ# <Ü&!´ˆYãØÛÕ"#�íDoÏw‘fjŸª"5Íö{×fÆzDé×!‘ÍP}Ž:¨�”fÒ¼0�]þÒáçÜ”‘S$¦ÚK‹ÍhDŒ—ìÈÝ}NØ EÐ@ÔëÊj—\ˆùôwýh—Iø\W'†Ë1Nþ„n¶Ûì²QÌÈAxû%Ô¯ xô~$Qž‰h² +à}}¬Ï?ʵ1ƒ^QÌBÜ*Ë)+±l D¾çT�#àÖdGc8ð"Q@(V!uêp +×0LÄE^Oq"„#•‘+!¢%�ÃP·vñ^ü&r{¨MÀQ'P$÷z5Àçâ%}X4O�3ž°y*—VTTÂ牦iö8À�VÊÊ[mš}ký6ÿ.+‹'”eeªzpz[tÉMñC�õ¡3À˜TÌ£Kü©a3Å7¥õ—–Ü[ Ý`€õÉ«»tþCÞØýLÑ’æE¼g*‡qƒ/„ƒÂnŽq(ØÎ¢YƬåÁ˜—‹}AÔµVg7^9N-« +Æ.úÂ|sPý%F*óP+Ê4!˜ÞÇ®ÓJJHöÙE¹AkBð”›q6‡¾Ì4Š¢’:9$šGàñÆËl‰[b¨Ý técA»,iU#š1F¿Ï�¢ªÀüð ^Ž´ã«Ððe¾¥m~00 uá™ÀCõÓ„Ô/v³ÈÌÙ+å$5ó\¥QŒ@ÄŒp¶Çi@Õ¢µd�ÚHøhãeDã\ì²BeAe Š"×·Ì} lW}‡MS½mì3-á%£8çv§€Éß×H � ô.Ö¸±#{äñË’@6{ÔPNÁ P UgÒ«…hÀ¦�ÛGa‹nJÆ‚Ûó 4¤YØæŸ4DEo{Ñ…´.õ-ÇáÇžÛ""ƒ¡¹MöгtØh—Òœ$&–›YlÇl0q,oÍ¢d�nïQ”õw0 #˜†"ýãDV¿æ¡n�›Ì´ì`Oî˜Ù«g5ÁA}ëü1oõµH˜ +ël ¤ýñ?%c–†·i©pu„w·®gÝBeÆ\gdV‹PxŠX(q›w)dmPC0ºê`'KψðˆèÒ¶.ê¡®¢¸U³kÏÀ*˜f‰Ötù5X*®0eXÍ1càe¥fsu+l·ÚÞt$ªéê¥ÂÂæ ˆÕÉCÓST§C9²…3Ap óîÑKÎÅ#�¢‡%R?ZQ°j°×e‹�['à +ÉØ)Ê÷r1›®AJñ{Ü-®5 +îÎGøÁ瀕ö-#&Ü~0¨5€ÚI „i‰"üJòÖŽVPDNJ`BkÌ+vÍez×ñk'úúÀî¢þ&B·m“ú¡Œ�? IÄ`6bÇÆ–3еïú*úKœÙ==,,l”1*æÖ»H=Š*3u òÓDšüàJ›‰s.is +V )ë§b~).™Ã†¯'¶Ú~%mYûô‚XàµíM†0´"{ûnALåò,2A7SC“Ð9¿Ž©}9×ô�C4àü³À_8–"9ãgnm¦ãPhÅIÆ3€³`l÷z;mã¤ñÑM¨À gÀ›l_ü©å„� rËèÆv«NÃG(WŸÉaŽÞ",0á¶&›;㥕”49<ˆæþ«í¨w‰¼3êF^ðáOÓ©—� ë¦iovÌŽ¿ðýãìÐò¥læ–È0J�>.Ç•Æ;ÙttgªŒC)Àùždëѵ‘Cv­`Fügø³xºüõÍ–-8Q(¢=eºn'Ÿ×ýa\±/DÆÃIŽÙ¾�.ldUe9ŠÁ«õÙwqQ;¤ >NFÐ2ÌmA�"2�bG4Þð‡Ú6Í+ÍÕ/¨�bÔ´Qá+L£ž”š¶}œƒ8ã“~pæõ#qûŸ’C‡n«5,ñ€¶J»4¯Sž÷g†Rz€Æ[ËÔ_·ÜOKëÁy¾8qÎ�οø1ŸX®ìñÈ`«h}² ~-�>àh=ѪX4?Æxr†9©b +È!¾7wåSKË3RR¯ÜŠe¿öU°�T‰C§Æ»Å²(¬ÏâØÆo´1¹KæÚ‘9O……@$¢Ú?Œ&U&3õᢸHDæK�îWY° +KŸù©ÎfN�D‚d¹·%™Yãûà×7 –ûcä†ß#fY§™^¨RF?*ÎÇÅPZF"” �¥#_xåic•, øòP<œoͲáàPPõÛB2Õ7ˆªºi´G°“Ù|熖þ`þLÒú«XC²òG憠m' +O +Êý®¾žÿ +€W9þ²&¨»ñÑ™Áù�‰‰+Ý]«÷IQn“ÝÏ”g8MKõ0#ËÙÙ�e“Ñ=2F‹µ®ÑÍ‘;aM3˜+?亢q}ÏÜ–‚jh¶½2$Â5ôÐðæDø3n§âOó:èÅJ•X ëòŽS½‰‡ÿØÖ¯¨ßc¼£AŠ|”‹}„ü Œ÷Mq{ +gZD~’à:m†¬x/FÖÿ³¨E4ôÂ,¥I•M� +˜AÜec*“Òïì$ìHÙóÅÈÞ6€è4 +ÔÑÙGG~úÚrŽL"ÉhÞ¹Jxíc5Ðö”íîüËINí?3;ˆ!ö|t™aØOκb—Mô2c¿Z .ÏF6D8êNì.C—[m¼{{FÉÏuã)ŒÆ6S@† ó›Ðç;–z©ÂYÄ‚£(z—áuŽäO–ñ*HBŒ¾RƘú™Sšâ‘C‘¬× ›‹¨»ê;ÆþW©ß†ÍSb�ë›áJf(ï!ßíU"RmÌÈ>Y|טÚ+KÄœh°-çs»wüÛr#QœD+­6¥ºóŒñ&•3ü¼H_®�Õ—W9•¸°FÃYÄ“}‘•!©h¤°×  «Ëmz¾"à¦t¢iOáE»xévŠèë×±^4%%õ9•!Û—Ço+LQÔ¦¿+l«b±`, /šû ¬1Å:=ô€-¦ Ùz4<ƒ³z­\¸�c˜b(zÍ·õÕÏLÝwÑ8ž)Œª”/í«éÀáYh₵Ue+šÕJÒ˜.íÃBbóo–A„€€„¨1#¥ý;!…)ƒAFŒ™ºhb B€@ ƒƒ5h˜ñH0T0‚ +ÚÊÆ§eÐÞ%øg­t0Rçe +Y¸À±Û!8°ãbfuˆ…b›~q)ÊÉUº‹‹AqNè‘u˹ …½cGÁ¨yI2m%“7Ž{&¨´¬K/­��êÔ>à† =!µŠ|YIYQ?›®ÍK—’Z4Ð/ÀB6@ŸÖÎ×éX;ÞM|·Ø .t W 0 [ô¸;�PÛªH\qÎ} çP­�œ¨�ŒæV§Ÿðã‘eœcÄB§Î¡žý¢Ž¬¬ Ãäç`Ýßå1’�êLYkgTæG8ë¬]PïÅJ çÃ`²†:{ßiÞ÷|>Yk‡ìÿÊ*g)äÐ< lPžÈ.;âYk'Éq„ƒ§=.ª“u@²µv:M.鬃j!«y¦ŒIá¸ì¬Cˆÿ<º•›½×ò¬ê÷ Näs‘«8þy ¢ªÄ¢+Q8BÛF´EFdT€7iý?5ÍXy'EöÎ+Ö�"NUFÅÌ)�Çé�§Œ¨²êw¬– å±UútŸqŒV9f·¨ÒÌ%¿úN)m‚°Fæ@ƒ”ƒMpCú£ö¡y†•# $‰RL +"‘ åŒ2%‰7͵t8·ƒ´zÒ‘m€àžÅ!ª£œ48ŽÂQXþ6(hºúõ¸,¶ Œ$=�A,o’0°1³Äq Ä]ÁJ¼ŒJ’ÆÁ¤”Cy¥ €@x« ³1´¢¯‘í­OC3:Ÿ¯Ò:¿È“Ÿu_t½ ݵ-#¦á0�·²õTÃõô¢$£뿟d®·Ì&ÖÌAŽ_tšÊÂQ8*)Ó4%ªú³&4ßÕÇ�’Èj8·üALœ£¶e�+ö¹¹»Ëó�épªûU+ŸFnž ÇÕÒE‹T˳�ó=j–*­x‚ä¨òuV3IRØØ r +ÆPqŒ"PÈË@à0†a†�åQ B„Bˆ�!†bˆ"D4'IN\ª£¬ (¥S¶WFûö£Ž¸™<1zPuÔì’šºj‹WZ(­Ý)}j½¿gágÙwgMÏÊIC�UÉÇ�1öˬÔå�º:ÝÄ»HÝXU¸ÖâY¦2ܘ!]Ì ¼ù’äÞi¡ÅŽ("ùíø�©wÉZèý9Y´·0f˜´—¾§«A¾Ÿ“ •¤˜GRô¸ +ðDô Z UI†VRÔ«ì:ð|´Le¸ ö^å©Q°DË«7Ï‹¥[iý宑Ã+”.Už�\*é9ëáž4-M‚k݉‘]SýMgJ×"6éR%\¨XL¡›ñè9Ë‚•ï&©œ3¡)Ò)-øŠÐ5Gòj^ó}A¬v?qÛÔ5È=;ë­ô¥u¬Eºû¶9èÙG­‚@ÄÕ×Y ¥ÐÇ�W9QFÒË"›Jø6 ý7w:í3¹º0g´ŠØQ‹Š` ãOãÑùâÝ}7ÈcßZÎ2ÖlÛö¥ïDÊkTåõKÒ“@ƒÓz׆Ö3¦§Á÷aˆ9øâ§—@�ôO\2™ÎÂ$a!øIœ@ŽìŽX³ïª,<•Ïôv£QM ¸ç=rÄàÞ|Aý(’Kçpðµ'¢ _VœœØèÓyië룆„±mY^w¡D™UÔ¨GVƒJ&�¨ Ê ‹ÛæËU»�\µò@œ¸%ÆþÕ¾±È%fp§Úæ¤�®é5Ô,,…Q Ó¤„H�PVä’a롞 ¸)~ÿ‰x€ÃÝ´–w#ìb¾Fõ™W<2³FsâŽ{„àÖÎõ·¹h“DEjòLÜGœaG¬˜Ø€óCYÔy£»HeŒAd6AM26ŸÊýì´6GV¢ÜÑ<:dV'¢�]ˆè[‚ÏÑ\ësÕéO°Ø?Ì\mFY'vA¨ËV4]¾@¶Æ§:Áêc[Cò垺/Ñèg�=úMíãª#xõKÎ,ë¤×1ö©Œš­tøÉð^ª´aûÀDе|ƒWËüy Düòg˃ê›òVˆÇ—%zÃ6ð‘Ìÿ‹Ÿ@ÉÅÚQ@©G,?Ü ‰YÕ “�  7B…&fQÎ:d�ŽðïgÇ/Å¥�~©Ký�bß“IàºË:˂ϔ2ML*kpñg$™£ó¥,¼NK%;r^ƒ3ÀKóÅÚ9¾‰Ñ‡ Üv‰»ñ•i0}‰øà‚ƒÖ80#…U¬� ŠRbílÚínàð:{BgãTE:y0'µPéc¦èA(T™¿E¸|X;QŸ«3ö奆4Û:CÖ°v¨@B\'@¬§Ûš!бÎóšv�+Þ­ „Iæ%ýð~ú ˜ò¨øñ!%·@ž ¬�Oò¾…Ì<¤ÀôÖŽ¥':+0xÑŒ U­}F�l°v¼ýÌ|DÆ]0‡*@˜\¢`V/ñ$cà\;Þc��} ØñÈ�ƒS_µxc@ü®¯ÞÁbŸ´ÿüæ±åõiG0)©ðpªê ¿TfXVÂkê­ïBÝÕgã~°ªŒA/yÛ¡øèñ¬2>E%�ËÍ8™< CCH¡OO«6Ní¼[«´Z½/­½-°Þ°¸'(ö†U2›l¶;a�»èŽ-Y�@á9×|ÃMÄþ6�™Ís)e½¤?R¹Iãâ¤4ìIo¶Ò@£õ @’�ö�¾j³£ý�î ÕN÷"e`Ýìz‰ÙA²ðX¡°½É h7‚f©´epŽÕØú•Î| + +˜ï~jÄXÏÍ-5Ýý¥šŠ™P$ +2†Z"`{ú›€4*†@'ècVˆµã†ä í3"µéiú*Í—7‚Mè?H�Sbí¸"“Ë ñ±ÛpÕŒÔz?—�%/Y¸–:¦g0Ÿ¬�6Rôˆ=¯3ÙT%�;�ÙuË'ïÙš»_WÙ(ö­'kç‡ üɘknÏ(ð¨¾cp÷|?q߀Á«‘¬’™%ÌÆ5êT18þK;WºtàÑY�àQK `€WÂkÄðjp³vb}rëw‰a›!:;ß‚Nf턚EÌHÙn‰2kG½»Ÿtÿ„¿ m¯¤ cv©¡­¸\8p¸UÃÎrä[|1ÒuáÛ«c"¦³vŽÊZ;%>ÞaÌ-TG•B-F(€Î²ÖK¨çŒú1ššb„\º¡&�%I¡ÿÿÿÿÿÿ?ïzÀ·ö7勉ؓ‘U’2¥$%º0Í΢ åð>‹ýR°ÌG'U6~gݦ†-­Š�å³:‚Áœ{µEyiÑ´E¥�£MÇGJTŠ“œôÓÓªgml¤Z—RásdÌ]zœ™)  �Ë ¨Õc}qФ:6 ¦V% õêäùFy]kuùµ­T®q›Êd—u¤%G"Ô®H]&&oIÓšñÃî%jx5vºçÄ«y¾2ÔÝÝùz=¯î­kgÐ]íf+Ápfu­5ZcËž5+Á`Ì£úªSݳµÃ<®�ÇX¬õP‚á¬hÈÍ��ïp »¢ë+«£ÁRÆ•±\|ùJè&dyÆ«lð"báа�!ï ÁÀs�‘³,­R*+y¸¬÷˜V°zCª¥ÉCËÊ•²Lît¸/qÓŽ˜äÎ YÅœëht‘Aסë«ýùõ{šãÄVBãÊXïŒñKÄÈ5”š"º¼×«…õQ~‰¿‰¤…~†«šÊ�z•`À’Ïì•øÉS¬S�!ë¡„�N2ŒÖ; Ö»ñƒA”<Çáy ‰±êF‘Ì]Y¨f¹£be ‡Ÿ&™2Š¢ºm&_bV½4Н›eÖŒé«G{Ý ù²_óB½PD/œ®„ +äÚS5v€À`è΀¤Ð¼P1 7U @€älw €Þ@áTW àe¡@�SÁ€ÉàDn&5E%Õ +ãå,Wj×F¯TpîÔ¹¡ñ”òÐï*ßÈ�Yc%¥â¶j=¬�ܘ��±):×ëRÁ£Ú]WRq+3ÕìþQ K‹¬£6òH¥Sugi½=¨yÇä0¼² ™éñ1�ËLæÿŒÂNµgÈr�™.Êõ4bÊC²†§ÖÛŽƒhC·i-‚42ê)µçn庙UȦ%•IÝÍug»œfãDªãS +²¤âò9ofÆPO-#!–i }H¥ã\Êæ1?aŒ` ®î°Ít"Jg*TB’ÒðH=¼w(ØŸ5ôª(›#¦}¤¢r™ÞTÏ�ýÄñÍ�‘ +ŸIIEÑÝ5.Þ˜)=›‚f.7e*ά¿ÔÊ*ßÑ¿¼®ýRUï_æ²2×ä§(W.4ü)ΆdcXZÅ {ŒãsRó”�®JŠê.ÆVQ?¾ó'7xû°¨Š+aIÆz§x§B¤ËèTÛÁ#3;9……,ŧrs¦¹QîMç¡!t§�…%s%³–¥(ë½÷¶â¸]ÊxžÐŒ§Æ™ŽØ:ºÅ8�GÆÔC9“Ìʤæ¼ÉëdXJaŠÇÜI0½•¹V¹ÓÊ%4äp”ß�ùI88)©Ñ()ÅíÊÙ•†cs0ˆŽ°<¼G!D+ÇS.—a}L>%²ëGWJbv’•ƒF +EµÎ*N|:³i'e¬j5¦ )~79·†-…œ« EI¹–y!K)á`RG6<*f/�d*Ué�¹Rc¥É ’_Ž¢+á€4„náyÆädW÷\„}d�רíç?—ÿ}[÷ÿn7ûí´Ÿf”  ¼»Ý‰ãŽþCÑItE;©?28ƒ˜ÿé=ñ¼}¤Nõ³^£Õ�éÃôÓåŽ~ã“~¢ ½úk7Ê_÷ïõú°ôNÑìÞ*�¤s JzýK8Ã;×þP·SÂÁð½„N8¸]@P@p( ( ( (  EŒ<7À¢œ˜¢­ð<€95¦°WJ4uf&c>§[BwgíÓW¦oÎ*Ÿ™³V�P‡-Ä9¹Âgfއ1Ûð=»³-—ª$‡ÕT„˜ýÜÒª6jR"µN:ƒL*v¯ô&óZ•Š™—9Äæ†„JZ£õ¬x')Y)/»ÄÓis–A5Í•–ÒRþjhÆå!´M¬gåXÞ‘¥‚HW•¾†½xJäÆÙ�&«kÆåÆ*>®^g5c㪎¬ÒdpàwN2ã¿n"Râ±xÉ7®1ü§p,B—ã3>6ãŠ=St2ÃrLB4—+Û¨2GÓÞ8QNúéUës½�ÊrFF‘…ìnw2ü‡õè ÏçÞ°lAãjF|Ô¡“7±™,jL&b¼š¹*ϸÅ=‹ë©Ëêê2CÖ‹}äûHiuºÅÂH�åŒÌc*þµv4u÷ªIMEx¢ñ‡Kf<îf!#ŠH‰]d¯å°lwbá×ùû˜Ééž)ÖKW§kÆHv*ª!õtÄ›&-rJ®‘ÚÐ:—*qíj;³�_¬JJF#w?<nWÇ�øsg6x1…ãÛw,ºÆ‡Šö¦ÊòØ Ý Õo½ûÑ�I覆¸Ä®äþÜ ¢¾žÚ°ôã2ÇëÎJjEšÉ¥HárêÏP�9\S¤8²1I¤Üïkd‘ÂÚ:IŠ©œ™tÉX1b¼A’âîEa¶SЉü¾³RŒœI(IYI�êHÁ·Ê¾br<ž"ÄIf\&‹W£;ä‰bf(R¿h¤ ã+w£¼â×#í¦õçtEq½£ÞsR˜ç*ί“Q'ÝÙÌ}Wqbr£v-ÑXF�Ôs/j…Ù¥å4q�W–=ˆ/{¯Q®l±®bÔr]ën}WŒO¨„²)æI.�" €8$‹f�`4ãûåRC"áˆ@*‰ä$@c�2„€™) "P«ºÚ"&}‘§ˆ+ì¨È ¨aSB Ã~ЬÁºÌǃ·Ð\¾z¯TƒˆÉ;ìYñC«:ÃnfG†N�"}&˜åïy˜Z ¬S*›RÎÿ_·O­'Ô'Â'K›€ˆ⌶šyŸx±[ÌF#–…S˜„õC³ö°àHØ©‘H1%üÖ]éö„~#AÓŽ²ëOXÖÝž§ž+d l™ÅwÌÜQh^ ‹uÔ&"(´Yf‰(”¿ ´¨0M@­=…�,0…¿9(´Õ AC/�íça¤ÚŸpú’ƒ =hH' ?$�‘Cà# +3Ù#\1ÊŠÿ…�ê¡X×󎉌Вû¥Cÿ©ßUg¸™¶#œ!5+µ¯³Ãb» endstream endobj 27 0 obj <>stream +µÀ9îš�)œ,`ÓÌ¢$y)¬�ŒÝ—“�gL‘ É›Ž®”BÚq=„ ¬©?9Á%@þ}.rÀ²ö‘²Cçʱ£qe&žfIý™~gÁg¦pa’…ãä8oë€ ]}^Í«ïÄÔ“w:N)¾N�ñ°.C¡G·Ô|€EÊ:¾èõ®¦Ðµ¯'lÉòì=g³oM…?~µ¡HeÑâ7Â8Ì«¾òë'Xƒ#ŽLØ?Ó+û½ðZèÞUÛ¾V£zëóò!Ñ6È÷Ðzû«¿Ž›X¤®OÎ ¤U<¢@!îrCDhinMÙ™†§ù<ë¼Õ¡âgžJýy:ú‚3{?k@%~¼¾0½•Õ(EeŸ¯¼^ÓTؼ�ö5Áî\„c¢w,׌-�=OÚœ5Еî"…˜2ä�ÖÚ.B¬Ð×bUÃ*p¾ +ò$5†'}?…„ŠÞù31µþ*Ò4%ÐëÁ žKà˪¤|¸·yKŸ(æÕ%’ á"YÏ +·äž^îM| +5­ËE«±©i�ÎB4Œ?W…Àé=ß›j÷™çcbuË™²iO1&­Û”u(Ù- #RÙ*Áù8áܾ†¸Êf¹€OIÄ9#¸~{oêXÄ864?�³r¼¬zF•wIJÞLÝ:êª~ã±è!JG"¼§û&çEæ‘J ¼4ªÊÙ©Üïi£ÖнAÛÂï—KÐÌ_E¬8¹‘KB©Ê‹Ñ ñá6œNðD¶>-”)¯þ´ ëg˜Þ[•ðfòX¦~î‘X2å{‚0Ë’5Á2Û¡v)mî“D‹õeù×½Â['¤¬¢³‘H¹ÜÒ.LæTÚ%Ëé«­™¢”U¼*•¦9`¤Ã˜ó„‚cñ¬8–õ$¨ù8€?«û|’Ä¥†¬Y»K}=nY² ¶ë‰[u1÷÷÷°¨Z¬1ʵÇÂ…–�Å‚¹ŠbÛêGäʋ޽nïEAqV¤Ö2îèò¼Žé­–ƒ°“ŒÎ²t!Á%ûƒËJÍòÙ¥Åd´ÅpÂÿòŠÎ=|áÝðšùöÎÄý8÷dÆF×y²ÌXEgëâÂLÚ% XÕŠ8O�eùÞ¯6Ð'àãtcÇEïÒô˜Ì•*[WPd¶8ã½4Q�„Ev¾×Óˆ* F“î9Ÿ]tÒÑú0nN(ªnky Gz^HžªåÞTóü�;è>OãèšË¦ª‰2)œôeËìŲ�Ö6ó¦çN¤;ÓFÕá&u¾�éFN¼;W‡æ¤R_í¬ ¼ØÿÇa+$(pÑ +:À�W¼Ô!i~zÏv1)u7#ØU”C6>ÄF–×gâPa<`g½j%ÑúÝh)|8nnʃô›guÄ1h2�ƒ#É‘-¬ +tœá_T§@~JÆç°Éöߦ ‰~j¾ÌlcH÷®A:ò +N¶Ö±ÊFƪ&d[«÷_3™U R Ž‘ 1¿*º„E6Ú´?@(�ñ­ =Q*ê…œ¾v8³ca—a¶£q4—Cl*ç �Eò°_”,~£¥‹‰SIm=ü!ç�¿NAî�º«Aa®Fn’dZ»„%-hèçVƒ½K�xc=[1ŒSê´ÑiCÒ¢Ñúœ^Ûž bü�zœÜ à£Ã�Ž5ØIw4P4Û=ZÄNͬ;±ÄCá±Íd!{lÈZõyô&H�§D‰>³0¬É¦` ¹;:8Y¶vnxÈ â Ã¥¶˜®Fƒäd‹âé(Pù…7ñ½�$�øÚ‹…ͬ…<'ý¾ê‰NLgô ïï¦ÝBÝ~,!A‘†ªBužŠ¡ŒWÄüäJÆVÀk¦Ë€óž�–­-¨±f +¢Ž(xCš[1çúm›[wPÃ.EÅ`L~°-¢ŠÐÈé׺óýÇ Ü|;æBØ½Š¿†œ…ûr¯’p©“€NèBTóç÷À3r¯z»> Æ5à\WDp¯šVwÃ{,DpÆ9Þ· ¨L5ω³Ÿ‰À`ÃwÛ¡eùRk […ß[q1îÀ%¯*OÀGü‹ó^å ô1‡{¼WEÙvÐîr¯8vÕó°{Õ”W'_�¹WÁ Ъ…&|Õà¢âŠÜà«Ræ/J±ÇWyL^Ìšp|•‰À²ÉêfÀoµ`»GóU»³™J«:¸pcèðù*dÔãùôUÅ~bVýCŠ­¯¢U¹n#„Ãæ‚®Gû°‘À18ëÊ}Ì•¾ÊÔlžç7u_õv¹p¥)¸û*–]¥gTßWY˜]Mt~ÕV¿'¶œü*ª”†.ý*‚)òF³€¨_5›,:0ew£=B�…N[Ô_…Ãáðø*Yÿª@dQ|¦þW­”£6�öÕôFÂ<$罄‰7¶K‘œ%x`¤W¶á[V\šç�6 þ_?‡`¶Xà—nAšè_U/úÖ`%MÆÖ˜É&‰Ì´¤pN½û¨8ä6•©uß ¢@1[`åÅ}6�p}�ì:V5hâÇuó>a¹l1ÿÔÏ·›ß?ë}X5ÙIK7~)öæÍ +ÔÅ”2'˜€•òvrX‘ÜeˆvyXå1ƒ Ô9§a¾]E`�Õzì²ó�¡'Œô±ƒûårjÒÇz•sö´9Ÿ¶ñÅ(Xý«>+LhÌÿªÄ\ÄŠ8ÿ*…‚%ßÿU¦ÜÉ\S?Àj) +":ø«ì‘xY R¿jÁkîSÒNþ* O{ä§Úº¿Šá™€Q²­õWÑ¡µs`A^üU s�oYÃ+Š£ã \Ó‡„ß¿Š·a™=X ÉxR¤–ÕÕpL`üA�Ó#úD%dþUÒªØòénÞ“¿*Tܮ߳ýV¼µ+z9X µå�:“9`õ‚­°z,šLðóÚ°JΓWnf§V„ÏôÊ Åê[ÀŠE„»ñ1“Æl�•<W¨OX�(êÆÎÁùÿ0f¬5 ³–äü¬ëãÁç ÍúSÁ¬ÏØ,VíHtl­``%Ød|øcÿXƒ@xðFp‰ÀÊ�Õô2‚VÌŸÄ¡ƒV`•�(ÊúÚBTžïü%Vô¾­g·OXU�¼?üã +V?ï«ù2»€Õ¨MœJÓ-U«é¢˜…)½n³Ê+Ϲv$˜MŠZ_òtSvÍÊ$.´K@ËT“ÞÄl\[ì¥0Í^A…¸` +ìÐP ™Öƒ7öÙ™³zÇX% LÇðµ\&ê.Ú›`fâÀŠ;aÞÑ(X¥ÀkÍs„w~â¡;á(¢$¿¦Vùµô¼4 �•áŠÁ?æ�«HOöý,§hü`&™°˜ð/›´«—‹½�TÚÖÀO(vÔ–M¬¬Š�€‰,‚ƒÕÓoRAwx"ƒqÎQí“ÁjàYcZ²¡-4ïlj:…£Á-e1Ô¯m±t¨Èdl¾�ì;1é苪yä”û×*ýÒœ— ŠÞQ©|¥‡Õ©òø«B-Ù>(TØed@æ” ±ñ0U]r:c ÛJ£ÐƼ¬®©ΜyàóœœHé$¹júëËÞ%U)X +n5õ[4ÐJ]`Àœc)¡1ê± 9ˆ•¥?VµäFõ`¡}bŒ¤Z@(„ +ˆ‚!¯”‚°?’ù_Ìåhtç`•‰¡µ� ÌYµŒ 4ÒdŠGÔ¦w²íÊD[sš4?´c@õ›èr¬Ígn\Ê®ÀC%µGû¬‡ «iµmRø—»sí8ASØÚõD9ñÚJ]‘ÿJ{Vú:ù0á=|Ù‡|£¡{DwŸEŒÅþ %‡-Â;¯ò—=§ì®Ñº«»`Ÿc¦aس¡ÀÞÉ-È–Ú?ƒW‰òà„Ñï¼÷Ušg Z‡†ÕR÷2žXf7l¨ ^Z5Ñ5$FΑ ]²þ>4\!  zß7âU”³_0 ô\oÀóÆÊ +Ÿ�Ôp™�¡[‘õnFÍ[× ~œÆGÛÿ¸SÓ9Ìšèäâ„©ÖÝv.”le9ŽdùÔ¤Yi�‡¼ð¼UŽ˜ üçPJ§«Ú+wñFWý>ä\¼eâ×öµÉkbßøÍؼ…¥Ý­C‘*n�*F¡27n#X3b 3ÕeP®R�Ûϧ*¸ã�)|ÆQÏ¢&&§oÉ5ß¿œOØ4wµ:ãó†îãåN Î¥=¡—¢.—�ƒù+,ˆžuUŽW4ŠNß•†é^¹ýÐ�Lÿýëál ´ÖòLCÀÞNÀÑ]Œ[âüïâ{ßxç€Á š¨e³^gXvŒ&³Òi·²½þ‰]Ó ã§÷ ƒ^ ˜^0Ù­Ù~6w&ÓœÆÕ_Óø}Ö+r~ˆ}Ê{ª~vZDd�¯—J@z*•ßéL­—üh4W!�ô”�/x +’™¥µ€Ý?üÅÒJL�6¥sæ:"¦º#LÊùìÛ‹æ(aüZ2hÔ6ˆ_�cËÚÀw-Èð\EOÚɦ°?4Õx»¿ F[©i*`W /O§òµ%gt¹ë[™ø¤ä�â3—jì7”Æ+]AôàÙNåBo°ãYv°Ç¹ÚG–íÈ%5#ωiäeùô¿“KeqKòC:€D¡þ/­ËÜØP‹[JÅ+µ�»‹Š�ù>~(ÚÐ+Å@EŒ��J¾ÀÛDx´�û.!—ÚƒýçewxRÓö>Ù¶rjÅ»©8'U@í:ýâ�µ²Iºã%gÛhM(í3ï±Ò¶åÚdÆF(•] "Ðv>¥ÂÕk‘«Ñ‚£W²xø2ª°¬‡ìa £¬ç�zj�\ö¹qx„v³¶¯i}Å4AXŠŠs” …@êç–SPJþán®×…9²r,×Ó=�"¨\U +ÇÔ”m̧®jí‘{Æœ�â*ÊG!”‡äØæLìè7ß×äà Dš (•ª ¡øX-¦§­4�«Æ{µI!H&(Ï_-‡n‚·*hÆC!ÀÅl­íÁÄCãÀ„m"»øà ƒl‘ù…KX éàÃæÿ©v¬½> P�º—HX1ç&ÌáÜé_Ë‹rÊá/t{çœ +ÔTŠeõoµ§#š ìÔmOÀØX| _vœ&ñÂ%Û2IŒ™®ZÔ#l}|iÁ‡÷ToÎj=A»¾,TïÆËaReߨŸÍ‰†Óe¢FÕkÍ-RA§xÜšÜi™ Ês{é;'Š25Ì÷—.éš…¦Vü>—gL¸k%6}ĬK&y©]_‡®4ö‹@ˆrƒVFOL .Wä´}»(wrµÞÒ7ôÏÒÈkîʰVl|»ûŠú´'¤¸%O|þ­¼ñóèQê'@½ÒAºèxœ�«×‰‡°ÄKmP Ò#Ç–Ž,ÀžvP+—É~¤ ¨%Þ¦j-M²8'y¹ŒíûzžOÎ'ÿúØóÌÖk�æ£ù}V�}ð€”6²‘²dê^¹a >Í)?2®Š<41 [âЕ Çå£bBỎHB¥çåÆsù’—æù~Žr6à_~l¨1œüe§Þ{õ{òŽO'0%~Ñ Œ¤¼j¿Wž6² ÐÜ–»"Ä—óÕœ<„©b�¬Ï«ómwÈÌînÄíY­0JäU¼ gŒ2ï Ϭк) ”oà†ê{i£ö:±û玚2ãF[]EËå�y€2�C*B÷ ÈöJ›~ý(Ì­sýW›Þ•WÓW•J�›©qh•[ªÄŦj9CŸxw„^*‘‰ø�ð"JÝ2ÃåÏÊ—óР~B’ãºhï3R�]ü-B¦¶KDdsøˆ F½Ï¿-p¨rŸi”›­¬†O®_ðùõà÷´!Ha ÷pI%“VB9m0hö¥Ï§W�í:)'Ÿ»¿?IKƒŸøÇUf£žóX� +ê¯ÆèïK FF«ƒ¸ÿÙ_Óá�ccõÓP½ºÚ»¨¸üÛ†´Œ�5Z-yh±DOØ«¾—Ƀç[€òª¡}\$LAæqƒÚ«¾�ŽŒ*›]òúdÜõnß%»Š!‚#䫬 wªBâ'ÑËÞ†#¢Ww§âÎ Íé'šÂF¿¡{²¯Š?pðrŒ=Eï³$£El½ +÷ÖC_a¸P{QÚC|©öY­Ä­×gX�U01H〴6ItÏÓµÕq)›~¯‰ÞÜ¡®~A‘»ѤJN•›‘=áFêú»Øöž†ñ‰³rÊ®{–Œ[µ$ðF~yçàâs‚ép�Ÿ`M8L¼Ñ ÀiÕ¨ ½<òÒiÿ<¢Wù ªÝ¤B«VòÎFméY˚NjÁ­î³fÛðï:Þ.¼Á½�úã¼…šÛu +ÿ¨¶U¤¬)†kÆÕ?PJw‹3¥?Eýï¾z@�fÛEæˆÞ�I_u'+ Á³²jº`¼ã‘ÈF7stÄè%¤ºÀÅáïÂVËúh?-Ï<3H|Jž[¯i ‰^º³ÇEmæÅ»=`íNÖèOlÔ¥H‰Þ‡¬YDzWb'�¾ 4ºúhôE¢WCb£"̋ϣÑ:òñt®º®~àLõý±žF7áé"xëÿã™7è#ì áÜ_ÞˆÍuJ§œ89jaœÑ Š%Þî²*Õ*q©°ª*‹æFãHûuÂKÕ[ðv«aõB +7<ž$¡1ªÆ�Õ�«hÚkýEª Ñ‹ºK\=¡“1ýÑh^6©= +ËM²šk¤•mæ–j¦(=–“‹ØšOiž÷]CB <ï,hÖpÒÏû½�ø€Æ¬^%�Z­ i�DÐ.Sµ#Ž“Ò– +²K¸€ÿAÇâü;éè3ðFé õ[ô°îFÃñJá°ö@d_°Ñ/›7u╯4võ!%=­ ôÍ}9ÁÓnÝ´7%’Ú~E³çTg¤Óˆ€³— Î(uÒ\Ψ¶\‹S’¨SÝkFùÖ!>ŸC'~) uæÞüÏ�V±W�Î^C ƒº•JÛ¬€çª¾*ÿ­Pìƒë~RÑv´Uöb¹2)?V®ˆºD3¶Ž7A#N™PÇÉà¢;•Œ¢Ó +ù|Óö¼¸šÎ¤‘´C¥ùË4¦ÛS›0û…äÃÝñýµœÖÈìÐq +üù®Ü¶†×¹y[Óo Fj¬s�bÜ0¯VÌ/œçPM]�²^B¾›²Õ¹N§U"Ï qïÝ@ÑËÉ,àÃjв¼7d«$§B(¤Ar˪ ï¤$ZªÈˆRØs{L+däé?“¸‰F�)½T¸R¿,® JÒYó�œ¾xIžà4ágî~lCâdƒœÚ»á.ª\ XËSƒÎÔ}0Ÿ‡¨'IÇ/(XsZ®Õ»ŒXœeõµ½+ôöSiJ>çñ¤ž€8,¢‘ Ѱ:¹�S£ú ~ƒ¸¿Sðe…‰Q ×T½I¸6&%Ì ûcôƱ¬ Ôa¾{ðLfA�(s@íÙ3˜û€Î½b?¬ý\@ˆ>5wû} ƒ5j6’Äe´Q#¡ˆh»Q£.ÛaÐ|ê×àO3N?(ñ¡^;5Hffà +ó'H_ 1ŒëÐ N¿}yyÄH*äR³ ÉöWqþÉ"1 òËH4¶±U;m6ß4G“‡W÷Äè!ó<õf“$(ÈósáÏìÚmpe��¦ºÅË&�f2Ðý]É +F´šñ4XÊBŽÔ¶lƼ€ÖѶæÃ§tñ8�Ò¬h,dÓË-w:½‘ÆAùG,) v¹vÍMØ5Zyƒ¯KDÒ4½:.*´ÆÎW8Å˳¥8"8z碆ý7aä�¯w£¾tr&KG-Tb‰™ —5ˆR[RÛÌû^S‡ÆîÅ$dMÒ%ÒUbSËhp!qÊiÿ«–é§6­R}Mà wÊÑS>—åÁ¨ª‰p‚ð×ÒC”l–Ü4S;*(u–€F<°% ä¹’h-:±µLá»0‰ÄjÃ@÷Э>Ì2ÕÖBX3Y+våmm¢¢5M4†×‚bŒ@‡ƒÁ¸õcÍt»ñ†ß$]Ù“ö oÂsW�ÊñH… =`A ¾È@ì„Tî�áðr¼ãʸ dÍÒ£fµ}�B 9%Ù9ScYQ^‹ ‘‚ú7‘îyG™—!ؤ4l26Öë-ö + ØâÞ…=Ï”¾`ǤñïŒ>)+*Ö.Ž3HD±Ø[ZËq8½ð•×Ôúîo—áHþhgѶ:hެäÕ’4…|ÿŒæ™� —*˜›y—dÿœb=Ølt\ óàÖl_¯ˆ“в”ç)â�[4tÈæ\�,öÔ+Û°´ +ò� š¼ºp±Û·êÅ<·@^üÃÜ&iÀhž·ýÆge/ÊîÒÚ59µˆéœçæÀ„øõ\€“Eç_64÷î~¯°GÃSfYí\/&îk§A²>ùð¡¿“Sû¢ê0|¦*YF©X®Ì)3þð9¬pDÚ½ƒXï͆É)Ž"ÜÃÑcà†ñö¸¥9óØ·9íu!Ÿï¯ •Áºx©Lr›"8�P¹é¹'ä—¦�º;æÞþ寨l„="›)!+ªé”Ží]7㠲̢ÒN–©‘ÖÝò¹úü� ‰l¦53b‰|•£ZÄ>æJ¿Õ~%Í×OåÓÎèWc³kžŸ­Ð°Sµ¦v÷òG†Õ•PˆXî°œž~¤ +ïº>†FNB­‘Vj:3cêõÎtÊ^µ!+Y-÷Ý�¢Ì«hþá`­fq‘ÐHþ +ŠTºK,碒>U]EBÌÆdúQŒ¤óHžŒ•æêyæ,‘6µÏu“�‰|Dl�gb„Ä~;óWs +ª~¨~,“+iíZ«’—Uþ# Ðx*Kéˆü± ÌÐ#žiɪ5'¼"ü•\��«Îªâh¥Ä¨ó]ž^&~/'~Á”Uå4Wwu¼"±8ç kÊJD'™³£*�ˆ}-W3gÍ’ÿæ¹æfÔ5ZÍœIlD|Ï,:’BG¡Üq|$�¼œH§õ’A¼É:/‘¼„Î~BwkN™4Ÿ_?Z;E›«ŽV2E£u¤P-¬#ëjÄ P€@ ¡€x�‹hÕîNAœ4P»µWâ+ÿNV™L8w-LÞZ“Ÿi¦nëîl�ŸÑ’)Œ8DjW«}Û�q¬ Z5yF¬ãûDÆ^;rZt4ì™eb5ŸªÔ�¦¤Ø²÷|Å»˜bR~‡qîN2Õ>Z¬BÕI$÷”GM,MB$$X©6rrMÆQÖv†ýWv½2�ž×3HhÖ Mí,¢{ŠþÎM]ˆ(D#d&WºQ5•»²Ë´›¢!):ÝüÊ�¢9’irÜ7n]¢XÈôê9öRŒÃîØzCç3¹mf‘Ò>'s43SëÑàIé|cŽdSçλ!×!77¹9?VãæˆæŠÄD+>ÝÎò³êÏRœªêÔQocÇ»Ñ8t›£ÑuÔ‹Èglö}RC?ê{²CL¤CjN�Mx$ÕÔˆ·ª*ÌicììþÞÉÑ ­#o\è­ÉY�Š^‘{ ÝÐðµw±ª1㑨;?“Ä©†v€݉‘QÝôÆeÂ5Q�m8JVH èNÅÓø6æ¤ + ˆs Šhòù° ̈TCÆS8€˜ÂaîT�"q%rbãÓG…670À ‡W8Ô�bÓFtã>…ÃÔ qE'©¢tO¯ã†Ìtáà54V8Œ™ŒÉ%É¿Œ±L†’'U� +„©cpV~àp@T¹3¸á€Ö¬ðËP”¬�W‡¢�Pæ>ø,e†Á‡Õ¶°00˜ƒ……Ϊgà2S8˜ìHƒHTçÿx¥¶wŠ;Î�ÂaŒ„ÝXýˆ›ØÜ¼£?+`€bÉ|%C!Ca``hAF)®õ¡N„Œ``ÀöƒC�pPCác‹—\ÑÜ�êÀ5°0ÇP�½EYƒb Á5È”®E8‡š§»Bæ€ápàpî‚Ta¨‡la�™â7ÈB²¡Œ�“9“åèä/Y�˜^ˆ ™�ÍœÝZõ˜«R@WåDÆ]AjAxXd2"Â싞ç—) ¹+ + DAô?φf?g7+õKlùÝžAGr$G#â‘*+»Yn°Ž67ª>5¬x’ˆt¶zKäs¯Z]•?U2ÿx¡ÇTâŒ�êL;¾Ç1Ÿ‘1³ò§ +Ùy|Ö;Â2iسÔjuFG�1››•„rýx®VŽö\)[“'¨çM.Í ŠCˆ †Ä²X(4 쀞F""$�æ|d€ŒÆ #$Tø„ü—$½¬ãêƒëã¶š©«Àç?öùÞZ\oX“ÖÙóõÑUl0žYÀ‹¾è•qŽÅø`šŠ À¿‹ÍõŠ[½Y‚Á¿_ÓB·”[ xø_g©si±fŸBÛs +N` bùcÅC€ÁÁ·IÕ˜”þ L\/˜ÿÕ —_ÇDÝíd[¡=⺓ÀûÀð Ú*œ¡ê4’ìot:‡8�—@¥'™7d'6L6$q¶~Ÿ¬?(œ\„Å%x™`bÃÒDô°ãJ!˜8á Š�Mfä úø¼¡~cŸ›��k¦A9ß(sŽt¥ø#6 CC4¾'‚2v B÷EäŒØ�p‘_ĆÔ?”ïyw‘%Z? ZçéÁt¿†¬ÖŠbƒÉ©Æ +…½Z$rEˆãpQ+°9ÊzI©.wø¥#-ªb³Ÿ]¶h]Þz5Ãe2#“×�Q;q5ˆÜâ­dÚFp‰°ÿµ½—/!qV?ƒg¤é³˜¨Ò²c0-Ûyƒ£E6÷ž†½KCÑðÝm’r¾KÈìè~„Âïø´øOй¥rISmràu�m? NðCÌ€.s^Õ�ÕO XÄø&Ñ•Õì¦c¼À—R¬�ÒHqa©7Ú-ª÷™y¥—‘×�4À;¸ÊÓœØgùCd2�Dº ŠjIK—Z�WÙXç„:ßðuǹáûo”æÔ@™94¸Yâ­ÏÖ·C3òU”8‹D �ãÃýYµvUA¡°Œ:BHSòJ:�Á[èåsEä£�^‹ŽràVËc? \áY9þ’M�Hì°1ð7=4+`�h…BLOðav‚5ˆ!ŠÄ2Jey85[VP^°#»è ¹ö„Þ#tõ_Ø rL+,ŠÁ‹`ƒÿ‚¹ŸÓ˜1„mÆe[qÏ*�³+øfÆv f—ŽùpË:ø>á¤æÀÅÿ^(–ÞˆúÓÂj”üDÃGå�î—_¹§&’L®T6°€ô±»h¯9Ö‰ ™¬¦X· !Lòú¯ç â™wüBmŒc×Ö4|›F€?§é¢ÿD¶»9°A­¬ÕªÚH*©=V]"ÊÀÞ ïu ++³Í–€H5­­Â-%žq— Äà + R’îóDš÷Ä)Ã1óà2~ÃÏDø†<p°çp š 'œãº + Á`á4¦N«þ `«eðÄžªQ�a?!÷ÙXœ}ßÍÄY¬d7m¢+ó#™ök8MOjvXkl$³2ïM0ÛÞu’Û3NÌW;µý¸bˆEf8¸×Åñ¡ß4d7¦?&ѯáSŠ!e«Gæ +Å ðk]­%Ë�Ha¢n+_‹:'*ú5Ô*$f!�(vÛã·QFvk"q±äŽŠO™Ìõöú5Äy áÉÛ#Ÿ'L/©&¶F¡‰Ø21ì#P{X¢~ äXO8‰ãaW{Aè×àb‡Šµž”¨3Ì7Lþ+ã�km;šð€`WÝ\S!´¤âÌM_ô�9Öm‚+Ù ypnõ)H"PþZÚ:eaúî0®vî^±EeK+a蜇EE Áσ§Â½K¿^÷Ãe!ãÙÏ‘¿wÚ;} &ê‚a šŒïH“sÞ�Ôr’À‘Ít'­Z±î” + 9ÎÂjÂz¨CíÌtE�ìÌmôíëU…ðL5 ,‹'ÁŠŠú]Hè3� Miõ–"l—qQGB§�_«ÍDž6X²¦Wˆï'·7)DÄugaä^¶L™� Á¦~ÎC¹q›\¤…Ídzêb�Öçu…ïÍ(�a¶ÑA=ÄH±6”�oX=Bv_:ÀR£nå Jx‘�«ƒé‹fº]C ù™2!9”ð³[’ ü‚“¹�â¯q¬êG€�FŒéÍ3C „gC“ÌÌ!dwÞÒÄtÝžóû'8…òâ¦Ù#D~~˜ §×ùnJg5Ž“uÂu{ÚM€BCó&ÕoƒzèÊ ýšT˵ þ9×´-ºZÒ£®7JVÓ•u5ƒª´)–;4x“‡j(áO”„÷ÚT†N€˜ÞjAC Êvw«ƒ-ç\_á!¦ž%”'¬0… õ’¾hh#¹! ¬t÷ϱ¥Ë ÓKFñ\a†¾�G¾„ë +8Ëé Aæ�Y¤ ä* Ò9[Bv¥Ð”(•=ìODÄý—Ä~,ipJP‚ÄIÈ+C —-îwˆFkA 6,_@O?€±€Y¿õ2”à»#g«�]:XÕ§À_'ãàd´¬ØO¤Y弜zžï‘Äø“Rš (áEù»>s~hŠ6”ð�Uª ¾& ³¸z1ÒcN Û4xƒŸqÀ¿ñG¢ˆ–Ì�‰�Z˜<$Bhanð˜Ñ‚ÙÀ#D fƒ�D-˜ >!µ0³@ÒÁ0*æ$Ø3”àÒü…1y!FIpº]©5å³²3¶v?Ô‹¡„I¡t�¬¹C &‹U_dúq”g*¾ÍPÂÌlo"| Œ¸n�¡Edfºâ'±,‡àN]ì¿æ¡„¾åË«J¸;‹ñPBN¥Ô”ÛPB—7æöÒp(ù}Ec‹=”Ào‰èÏèP‚¡ƒ99”»¿•J òA?æ¬N0½E¨æ5w¡ý‘`‚T�ì<¦�¿Šyv(�¸<„öry(èq£¾Ò"Qœ ÀÂióPÙO¼dž�ÿ›J˜1»®’(JùUWZMJ°i½ÕêÁPÂe W§q(á`Rô%µ*c(Á[tâÌýC  A%™n %”D�&;Ím(!×yþ¾r娕à¼Ì$±T‡Àc~à¬ÇC “ŒS9ótØpC ŽÒmZ‰%<” cïá."‡Öxýšd¢¡<õ­¬0C þ�´ÕQ´[ %ü¶¦úT5]ûÿJ°Yª‚Ö8Ó!ûkULc±U â†}"’Á†éŠ~æ'ªÍ�„Üù¨` ÂBk‚7ÓR܇ +3ÉÚÞÝ%´Œ{™¦¥ÓPB;@ÌÖ¡‚KZ»ñ„µkúT‰kr‰<”@ØRéß…ÕC ò +îK@�_¤%Øø�Èš±ïLJÄÙhj- +•¡„ëV˜¹P %Ü[dõP½ëÒm܆êdpkå–ÍÌ+7Åm(Aù¯ÌWd”rJP«ã–g–4¯&(³ÀPÎé%Ö(A +Çš±˜¡�r9Q5eêytÿš?äfP\÷é8ÃÑýØÞ*ÍüÔôü5”Àg)¾ C ¯&t)Pœ›ý‚ SµJ¸s¿ïþZ‹ªb(áPñh¹¼ÒªJ8‘Ef4L’KÁ¡„Û\,³µèC ´¼PVKÁyK¹C /ë~ +Tö×Rö/ÚíP…‡Amõcið“,ûbby(a´ÚÏÚÁö£„—Áǫ൳˜¥‰~ê <Ây†ùP©Sðþ +ûÝÙîP™'>¥ûkC ŸòÖÇÑÊämÂò¨¿È¬Éu(Áz@JSKà•[öüs8”`‘ŒgÒ&\äJ03Æ ë�߇r_^þ„4�ÿz(œOq…ñ«†ò5‚#Ov?öbÿs4” ¢jŠw”K™®.(€šµ�ö*²˜…½üX +lê ¼Û½$²}Ñ=ÿ†8vßúM?C ¦À&Lwyèhl(¡Qܵ®9‡ô¡^šÈ­ÎC :…E5pÎ# ,¶jjÑ�¢õv€ÖƒæP�§‡ˆÅYJ q¦¬Amö×é�X¬ˆ%<8uK ×PÂí¥ZoÈ„ýµè™ðOUƾZ Š8ÿPÂ9Š®NØOejY,†n6®ÓÀ´ÐÆ¡„b,83Ñ +ÇÁýêÈ&ÛÞ•Ðô#܋˦ÕvC pggB~ % '‡I3J¨ÃXž›ÁP7öü­´Q«…�¡“OŒdƒ%Y\<”`q¡[M¶Å·ÆPÂGE¬>?”@kþTŒ9rè %¼¦P_âL‚P Š+©F�-ï®ÊÍFÊ~†¬xl³içZÝPšÅ¾°Kƒ%ÁWn½HC «†éˆú°%XÉ¥;~Œ! %¼Ôæ ¯Ã„†¦Ý¢µÎÇl&±¿–Ë”0'(`"C Î>Úd,ÕX0¶JZ�¿‚ÇþZž +4ð!‹Œ1ˆ|(Aôâl™VrJ°ØÔ‚•žÛýv(!Î¥-¸JÖ1ŸóëâØpçŽå¡„¤Òþl1Ç5| }<‘ %S•<~Kx|!�Rúþ–‡Lr\‚G–ïÙõUJ˜ï1Ér]f×ãP‚ìaªÖa©â .|ƒ˜y!³6à % Ižû¥ w^‡æ|ÈnX¥¹ùÜðçP±SºÓ�9Ù¾™ «VK_4¦¬Ò¡q[ᪿŽ÷PÂZ³³Q€&›YMó‘ð\ çš�8mÆð¡߃W÷Ò g­ŒYwaOÀwBï´‚¢ž†îS¬Œ½l=®Ù %ù³q�¾ŸJ‹X€$�¨_…Ρ„+ww{°IC m�0JMÁGŒJ,C «g&×îÛë8ÊÅPBÇn½!ˆ ?*ÅÅNjb ÒL6¾öòKĸ3·Ÿ‘ÝZn•ÝàÞk$X”-jm½ª)Œ È»<7_zÊ4‰¸‘•/Ñw%¸=˜Ô�£ Áê«l!âÆL�ùB©Ù¹ý_P¤‰û¢‹ Ù ðI¤æ{U +Ù°BKhð¸!Òö½)JX×��ÔAoôB6d|È�º)õó{;ow±¶î~&pG +�:9ìÈã¢:R2:¢6ÈÞáW‚Ñ% <Æ/fäbg@×ç—<‘»6¢)Ú¬eÂü6&+wÊYD¬ÑDsw"¨\Ï”w ®hƒ®]üŠ3ÒXЃï�9 òíNÆ}ª Œ¨ø¢³ðËÔÕèrJÇEÞB»2ÛêÖb‹pirÕûšD×�ž<ÿQ�VÛv­^Ö¦ÉPt\!×”TŒ«M 2Jµ�œÒÝ� ¦NL´Œ1zÙ�uª·êþî'ú¿Û {{. à¸ù‚¸‰ª ×¢ um€Á% MV· s¤JCNk‹A�KÙ;§Ê•,`vdK£ÃTÕÌFC¯“_՜֤jÿƒ°Q½èî¾L–¬2¨MÙ³᯿øÖƒ¥ HÝì¢æž eˆ¤šØøà3z/¨…:Ñp®èÙªq3‡öN˧:Cý� G+Ô…á¯DïÙšm �,õ�h("êÛAnû�ê£Tëóx úÙöŧKc»‹|ºG +‰mb¾½t-w&Ô®¢n{Öç<» +X@¬Áu +h⯪€Õp1;±V¢è9í»,4´ÕüöáÊFÐ%•/Ù!‹Ò ‘âßš”×2 îœÝI¡T Ö–'M#ÓHš[¥~Jðµ;9â¨f^y ⪷ EºŠeë”K¡b5M`Ó~Ñ!Ýo/ƒui¨ÇΛ6NúNIÖô¾‹–t¿év^Ë}7x¢?™ÀC¢ŒÌÍÉsŠVz Ø÷ó®{ЄË lµþƒ58cæ ä�…(Zi¡g†�nHÓYnFT»Iy^ž +ø»t�⺊5)×-í€÷5Ù·ånÖ ¼õ™ìWÖô›nrgÏgò%E‡]±ÐŠÞéÚу÷5 -ZÎ")g–Ú¦ á‡,®4ì'¥¼°ê1�hR‹2·ëµƒx»y|áŸèIþ­aý‚½Fñ…ùGå­ÕÎàÜç ��!p“`æ«Ø3ëÓ¿–¨p•ù!ð‰úÄÕmÈ‘$Vj·2# +ÒW­$»�ÆçîIxÕy/yIÈÖ€ Ÿœiƒc5z�›Í°ÐdE´«³Ìxÿ‹¡ñ!ú–ýŒ ŽÚÚ2 CiY¯Š‚Šú\,~÷kï¡J‘7bm%M¨8hVݼ‘ˆ€$K„V›â<…„]‚ÞçÞ•âè˜ÇÛé +ÚT÷ý.Ňƒ�µ8 qwœ¼îNýáÑðþìÉ!½e@N +F²SÔ@{—�Û‡y–Oó(i²4Ž& 2n¿+rPÆYönÊÙr¾JðzèYŽ_hÛ™�¶ˆLÃBöd Á]L%ˆÀh&v|å–a¥Ö!.<‚ܯ]RI¨‡¸ d*¬˜ÃÜ­]ïLB %1q)•,Ù*Љ,C¦÷)?°žWðNIB{À9ñwÑ3 ^¬v�²h—¤›ÑwOEî@&-ÈôlQMÅg,lƒ�Š8:Ê +`Ýq° +˜Têm^o°ZûmÏÐ{�êÄN�Âxþï#HÄÃÖ=ÚKM;’4§Cõ²¹Ix:ƒå}5½C¾.cNT= >Nj:=Ì»¶c‹bvì“¢¥Åì'¯tœt™;ì­$[aÁô*‡ˆ>"e›ýKä/&Ø�GÌÕaR ãØ(EJµî8 u`Šd™` ùüsªˆÆ\S³l�;ÕÕa"ÖUÄ/Œ× ” Á’MrûŽÿ™%{­±Ï®1ÊdéqO%¶�[’>zC—8%®"Ý:bòRÎ +Qb®ºd4ûù1ŒA–`+IJRÈ"˜-rØl4 }óOýXœù)ÖqÔe†` v#út°Í¢ºhàïÖŽ¢Gù9J•V‚k¼}PVR/NfºÍªG©N¿Öˆ”"-¼H­MûÝ&ÄTLº››ÇË´‰'v ÷0’ ´çw,ÞÃl°´àÈC«›{˜Ñ;Œ¨^+©Žkˆ²È !çn"Ïh8…ÉÜt¶ûªè�üªUBÙí@Xj‰Ð8ÔÎâ‡J’TIJ—ú<áq±äÝbSŒé&ÂBרq—Á‘Þ¬c +°¹vµ¨/l®fªmì²ÑÖ±çô‘§ÿs%ˆ#<ñGž +±ú:‰'é�qè†gªÁ=Ëç˜s–“ë‰3;1a gó} {C6ׇ›³=3[: +™On}[îýk:q¾Ñ˜¼š‚ˆ7ÅÀÂU,¥YǘQ¿hZ2`!còäêKy­d›ŸÉ5‚ +ƒ¸éä"¹¬'“ +ô#¨ïT–¤µµJº¸TcàjôˆmÏíZl cÛ;3_Å~6Î § ·‰óU¶ïÞÓf²#nCô»õ“Ôç äc�ô&�wµPS…» ZUÅÿéØLGp¡^ ´×F–2�Þ˜X”ìz’%ÏíÏ‹`Å„¯çP´|Qñ^&,ÀDíÎ�Íø¾ŒËðdÍg$HiU#)‡S¨µy29ÐÇc^Ä{uûVwŠ—n U…l'~Öfò¨¡xF] Ę’@ã‚¿ÞÚ—GÔá5} +ú^éýÝŒ ÿ®ýฮ£¢Z|MæÖìRxD¼úaMQÝ´ÊEXìT[K³-Åò–Ì97BUY/PNáœ9ÐPò¯‡17€2d”K–žaó­ÄqÕ`¤È°™×#æ‹ÙroTeLw1‘Wöˆ\¶‚%ÃFj� ”þš¤¶D•ÕÝé ´„É�‚gˆ”…2UF;ëëqbF(bÁ¬ ÿô‰zª]‹&˜£•§ˆz*¸“&ÈVl3冔F IŸ©NRgß™�ü²Å1bV-L&*åü±…~ JÕ‹÷O›Ñ8ÙE ¤…+ï`ü©ìIF÷eb°èÒb7øAbYÍ¢1�ˆt-êøâ‡àe«õÞ­“±ë® zÆÆE¾ú?Ø>ì½ðæð H“WQã@/›xùa€x5É*ŒÅ�#pS!ôµæP#jÙDNÛçqöS_/H…6­·Æx—¥8Ú­;ð»ä³Š-Ê âa$Cè3ºwÿ¸çØ/š�£çß(]�ï®ÐU-fò’øœ€W63鉑ýÿmÕW“þs–üQˆÒ‚;ó+Àë�¥sÀa®µqo~el.ฦ1‚–8JèùN6ܶy ¹%TXIžÇ-‰±²Ú£^@7ÖŸw i¡¾q º‘ç£ +ÒÞ;±)¡6x7ÒQ¢Eêï)µ‰¾ü¼4Ÿ0aÂè@â8ò „ظèÊ�~ñŽ¿{6+Êå g¥K;ž* <š4‘8#ZÕýȬÓ&]åi¶²î�«?t/Aá¡÷Ñ==@@©|¿Á@jùZ²Ù,¬k ½§C‚øPnÐí'q7n³ÄØgä¹UOˆœÖjŠo´XzH ©Ë A›{üÿ`BÀ&‹`{æ:ny©o¶e¢üFCöÜ\%êòÜd�]�‰óÌó~JoúC#`C–Ö@„%%†°ú dJ:?+ž2\¨ +]Ú5/Öò êÍá< 9a"$ï¯$ƒŠ Új©É€ªêÅ]!ÅÞ_«) Ùó¢ÊIŒ�0d–˜þAIbi´Õ*Z¦u¯4:GQJ‰ðYNhÀžè< IôD?°m’TˆÁgcbÈ_p†×fCn-Ψ�ò…åÏŒÂBª£7¢Ÿ3ËÕ9ª;L«xil«­…|!×é|±Ãyð… ·E×ŗd1HÓ%¥9—z§)Ô“¹’ì%P(¾šJìS�⨺Ô}eq zzÜ@&f²`chƒ!ó¸Û.¯Xž`È-_¿4‡ 9ö‚�W Ci»I8ÕÌB׫Ä�«JñI;ÎÏ´ü%üÅø ä3+LCÖ|^GÈS³¡²iƒQ\,¥eÚ_`°s¡8—„Зû7DT¨È[;uCCS®|™ŽÛ¦[œó�-kÈ;¯„QC.ÏúhÈÀ­!ó¯J·°ÑMkã`fä„2í¿ýZšcÿ?–¾TßNƒWCÆâ,÷ÂXÉpdYCnxÈçaˇ¼öK²ü,4ä´²;vB=²²M4Ç,¿q|p‘>sññ»J\ÂÆ[%sb +6ò'™hZ€/ÐtwØd¥‹rè ’ÊjÆU5)µ’‹�2n†á„Ãßü?Ózöb(CÏ�ålFŠ–7šÎ1:›–KT-ëRCæù3ë_0åwï”ëÚ9$gE1?÷Æ_HD �‚ò‰:y¤c tÔ0ž˜ Ä‹¸‚ÉÆ9ÆàN +Ðk™dÄ +­!KEzL±ú묯†|=‡dZ„âù†ïc¾o\lt¿PôÈS;„…ÁPCBTh$ã +hC–�`ÌàæÊÅ ×�1ìD&öùd©![ÁÉ|•JÓ~Æd…¬(•$}J½Ç¡úe6ÐkÈ_^S=Ñ + ™qŸ5VuúŠþÃ5ÅìŽ(3HVöx”Ž�×~•W£n“+¶JÈ�¡ÿ<¾DÓ5Å™ˆžD¸RW:€`1PˆÑt.v¦ÖZcê<Æ@?ZË×VGç±n8®ÈZUõ“óøR|ª±¼¾óô½"“¢¤Ý*¼yŒáCƒå'þºyŒ¦äLÌý¸jÌã§~e ò̪¼?óø×ÿ¸ÉÀsÌã×_ù*/ø¢{ôn¸ˆ­/Â7�ûLåÐ_`çqâºóW�¡)è<ÞÀÌž»á<þ‹wèºÁsòá‚5¢)�Çx��SV¨ê_*„Í“}òÍ;ì´ÏIº¡˜9�Þ¹>¥“`†ãG3mú˜=®Ë(^ÃFDm‘JIòää\¦S¢åy|+*™]Áó˜Y~•ˆ9h< éQÓ +à¬û$˜ÿ0žÎñ> n‹ë::�ùIßu‹Ïé<>%D\“ ¶ê\+OJTT¢—-í§¹¾ŸÇî¦áF…ž.®l;�­{5àXÆyühë…Ò‚‘¡h‡ÕéTäp�-¦¹[]bÊHjóøQê÷¿ò·ŽŸócœÈóeÎæqg>8gÂ$Ù<Þ·é5P0šs>�„ºbçNíäo‡† ŸÏãPë,áá�„GiÔþ§FÕÑkfRyc¬È𬨏!€Ko$å>Fll�irŠ“O<>Kô XÆï!ƪ\;àØFÑB/%™qŽÈa)ô¸YòN„ÄuÿWl9BheezxK«ÿ£)=N]g Ç“Òã(óýI +éR1+µñàó˜/WÔcç3ÙÎê1ü`ª®—±ðå%yÒ U‹&' ë±çƒ®ÜNAëñ#šâÿÓŸ‹¶ÒìÊIq#H:krlä„xe=,L¨¨{\‰ç"j›:æ/½!ò9ÖEZ•æƒi4 jz-÷€q7Ž'ÄÎíÐcƒ­òk¥Â|‰²•mSZÔÄ!†x#¥»r ‰f6‘BV¿ŠµÀÁWUVzóÔïùÑÛÞ± ¡m¤’)0æˆ0!W#.ŸÇ‡SÈùVâyRÜ'(=JFw¤êÆ)އÔ˜­ ó¹,#ïìaš?¿$¥*feöüŒŽÅ‘?±6a;.%ý–€æævNQe‹Èé­ÁŽÆßï*›Ë»Æ´ ¬‘…:ˆõ¨µH7úpW=§'Ö#ÔŒ+£l@áSêâƒÊ®<>Τ RScj¶Ér×9á_…81{‚"óxØÊ BU4%Òû�ß=²{3\b=BèóHÅn¨Æ$3ú<¢nb4ëì|ëGpÓ„w´ˆ¢b«øÓ 9IÖP=BÓóËru¶.°¶ÊRI4ñd'7êfÁ#p¶Û›ïÍ›¸€C×@ï·?o®]çL€i1œš¾GÒQ? ®ø2Jó˜¦e£rðÅImÀÄztâÖ9L¬Gt7ðÖb=òd…LÝ"Ö£¢ñX¡%=Yš�Y>y>*¨èº1a(>@3öeÇ]²ÓUƒD¨´" ±­4­.*ßÍÝ‹/ˆ—ÐõH®…{°^F†K ö¥Ñ‚Xâ§GrÖ~pÓ€ëJ�pÉ¢Ï#è÷³"|ºæ‘­bùÖæ§Ôò¨RÍú�>VS +7/TTÈq?‘Õ” áóŒQuøüXM‰2uR¾_8QRÐw¨íUHûã±é{Ý +îPCsñë#T–ʼÄ=HwA MkVS’d�MIÊ—…~¶Þ ÙxÉ‹ Vh›–7œác$ûù FP¢fø7 A™šáïB%µ†¿”Ôþ PR3ü€ LÍÐo@‚25CçJ˜{ˆ«ÅÛ›rb=‚€`¾Ú’,«)-NxT}ø§µ#ÜO‰mEÄz´D)m’u�X�ÄBŒXÚ3Z´øvˆõ¨œž%ÙRǧPÂë&±­ýÞuÅ(ãÄz¤ðÔ‘ÿ�}¥±K¬ tû—¡!±ñ‰û‚}ó( ûßë‘— )Xìè&Ö£0Ã+  (RW•ô –®+=Ùr Ö#i -`ˆõ¨Â'Ójñ¸‹WˆõÈÉãþ±ž­¶~Œni&;ì,ì§GŽñUº÷ÁÄzÔ…Ñ/ÆdT‰êMEç)x‘oXGÇ�¢| ZÍ$Ö#Èý¶|]둬×1(rÛèÃN¬GcCÕW«±šÒ®ÍÈòBC«Ä‰õh@Ù’ÕÑëÑlLŽÃÉŠX�ºï„°Aü&Ö£y`%M[b=¢�6tšŠX�¦›óùs±)hDbé³šÒÆ 8Sò3ODVSªyE±kƲÃÊ둨Û$Ub6ÚÄztÊîg=ÍjJE¿~‚ö!¢U]Ýœ±ÙFg•†X�D¾¶·5bn�DDb=²§* ï�,±�žnÍ꡹£\Q÷‰•ù þ–£a²¸æ±Ð —ŽÑ­q¬¦4·ìš9±�ð“ez'#Ö£¢{/ìÝ‚Äz´ÖŽD»&VSZʤÁÙ.ì³¶¬¹ÄzTsvV~ùXM©/«Ô¦J¬G˜àñ aÄz$¡«ùÊ(+±)×P\jHni&Ö#å¥ó¢`²úo†X�J¾î”U¬¦t# moÜã?Å;VSêÑúÄN@{]6: ¬¦$©¸")Ñb5¥ruæ±ÁyÀð)>Œ;ƒX ÀjJó*.@Jy¤gïμxd ±=ÈeëЕW=ýìß|«r³.ü zDôÓ¡3Љõˆš +¦’Û©bb=ò;­½–v'«.%¤{¤9äg»Hq™e¬8UWc5%QŒ} ï >—ƒX�h§âÿ$"Ö£90‹;—b=Z+ZKžX�f½0øÙN·Ôë”ÕÇÐÍë‘È�骪´ïs§E¬GG©œyÇz°‡˜û„b‰X�®ÓŽæC`‰õèZ¸³VN#Ö#vvcñWb=*G=jn±±µ[ éÊ¢êfÄz´\Ä-ˆ›X�D�‹Qo&�X�}fœ· Ö#Å6erXM©HÂ÷g?ð]yŒí%Yb’áâà‡%ySã$‘¼¨YM ù Äêˆõè” Å'�X�æ²Ûè×Úëëó¥ÞŠÉjJZrUøˆVSx@ˆf[°cYÿ¡A¬G…e„Å@լ؉õ¨ÁŒÁÄ%ˆ¼Ã5Ú¦?¢g‘:YËÁÿG¬G +>µLkb=mipl?&Ã+O±u¬ +Båø`É´)Ù�"~„|ê8f€¯ü> tõÞí^‹Ù¾ìž¬¦DuKÇžC$güôÈ€¢ëcœ‡ûIšX�D=k„D¬GÓò0ÿ³Ù¬¦Dõ†)^Ùm—jëQH›÷-îÄzU\|% \16±Q×퉰…6,«)iÐ\Yj÷›¸%˜Û‰õÈÕ­a­§iìKqîˆõˆ˜Ñ/g ++2F}TRöß8o65"s*«)Ý_LÛöÊ<±éŸ0uì©ZCßA_´ÄzÔ‚OŠ®Tb=šßé5�}X»»9hþ]XD:«)•ý׺�CFT‰X�Ú.²8¤ô; ÄzÔÛ/£USKÂIXMé‹Wâà£Há�çõëQÃ�¤­?ÿŒX�æzöq·‰óÄF³šÝ:§õõY¦÷b=¢Éãò™¦WXXVSšh-ä¹ÐñÇ’X�ˆü³gŽ#˜¢NŒwÄz$°ê»›ôõhb="EûreëQGK%Ãý±Môh:Çìs[Äã(%Ö##áE@.É'Ö£>Ásÿ&¹-ÉÕ|'ª®NÄ7dñÈêr�(Ê«ûÅcJ‹Žšëjª9+d-삉F¬GÝÜCF, 2m‡Ž-׸,! uve?=jéqŸÛiv°šÒ¡b'tíŽÓÑ$ù‘fJUe”æ#:AJ¬GYëcó{éub5¥DO3û¶Ö+«)mCË5ø[ƒÍjJiª´ˆ¯öžÅjJ1lDH‡|®��Y)©;FMNùAænW7;(XMÉ=\gŸz~ïµ®É] Ù󯀔pé"±ªûu4uË „¤T(dL²¶‹Ò®ÜlmGþr€“¥«)É!)Äù“ÎS�$Õ9-¯¦då4àØ )O5)XÉÕ”ú2£gôg*™Pþh‡~© ÿjJgØt±;@þf Ð^M‰™›|ºšëœP +Œ‡5¥á6”ج{YSr˜Î[fM‰Åÿ°/dMi­‘|÷_HSRN +vƒ’)uGšH�ÌÈš’zÒ™í~›Ç³¦ÄÊ?_¸lŸD²¤”ÇHÁJϘ6Ûø–6?¡5¥ÈX!Û; +XHL£ «{Ò‹+£¥Ö”¸rÀDÁ‡­)ñ1®)… +dŸkJ¤‰JHz•D�bÞôI%5vË®)¹O(0éÈIçòd€?A¯)µZ½->� Ú5¥»?�Aô4ëä€hN"ÃÕi%[G e¨ä9HŠðLŽR\3•iwŽiý}½#P]šRMF˜î#áAÌgóÐ x½¦Ö'ÙÐG”jËkJŽ{'…NËaž@èÆ;:$;�Ø®)Q‰â¢¼¦Äv!zM)Ë? tä$rç&ù5%ývAú–D%-6%®;AÛë'A}l™Ã¶€] JJçö8O®IGÙÑ lêuÒ‚Ï”ÈR×1ÞK._]âãl:ÜcF!Ëœýš”Isœ`bzöU›’ÐHá\Ø©œäbKÖŸÓ™D©UÔ^ª)™²_’vÞÀ v›R;Ä'œ �°)•ÿsMšä$òØùŠ:5AÓÄI¨”fy(QF4Á[å¿p²JVÖìå÷÷±!°)i$$Füù 6%ÅïtÊ„˜»=S’¾›ÒáYDs)é_SênªÂ1þ’½¦DFÿw +¶Õ=f<[à•k¬#m;#&_S*Ø1-I‡$ü’r�ÔmÁ’Ì2jpR´ÒôÑ* +L�褚l ;<“"™àÒu¼’h”¤ë‹/%"Ä‹ Š«ï)‘ànÀÆ$Ú¨Úöy*ZTwðÄB–ûf?)'5çÕè�±¨:eól¸�¸%-kØ”ú.ÈGsâ}„M‰D…÷:§ñ)´•ä”  +  +  +  !! +  "$%&'()***+***)('&%$"   + !$'*,.0678720.,*'$! #'+/258;=?@BCCDDE;852/+'#  #(,16:>BEHKMOOMKHEB>:61,(# !',27=BGLPTX[]_[XTPLGB=72,'!  #)06=DJPV[`dhknpvutsrpnkhd`[VPJD=60)#%,3:BIQX_ekpuy|�ƒ„ˆˆˆˆ‡‡††„ƒ�|yupke_XQIB:3,%  &-5=FNV_gnu{€…‰��’”™™™™˜˜—–”’��‰…€{ung_VNF=5-&  &.6?HR[dmv}„‹‘–šž £¥¦§§¦¥£ žš–‘‹„}vmd[RH?6.& %.6@JT^hr|„�”› ¥ª­°³´´³°­ª¥ ›”�„|rh^TJ@6.% $,5?JU`kv€Š“œ£ª¯´¹¼¿ÁÁ¿¼¹´¯ª£œ“Š€vk`UJ?5,$"*3>IT`lxƒŽ˜¡ª±¸½ÂÆÉÌÎÏÑÑÒÓÓÓÓÓÓÓÓÒÑÑÏÎÌÉÆÂ½¸±ª¡˜Žƒxl`TI>3*" '1;FR_kx„�›¥¯·¾ÅÊÎÒÕ×ÙÚÛÙ×ÕÒÎÊž·¯¥›�„xk_RF;1'  $-7CO\ivƒ�œ§²»ÃÊÐÕÙÜßáâääâáßÜÙÕÐÊû²§œ�ƒvi\OC7-$ )3>KXes��œ¨³½ÆÍÔÙÞâäçéêëììëêéçäâÞÙÔÍÆ½³¨œ��seXK>3) $.9ER`o}‹™¦²½ÇÏÖÜáåéëíïðñòòñðïíëéåáÜÖÏǽ²¦™‹}o`RE9.$)3?LZix†•£°»ÆÏ×Þãèìîñòôõõ÷ööõõôòñîìèãÞ×ÏÆ»°£•†xiZL?3) +#-8ESbq€�ž«¸ÄÎ×Þäéíðóõö÷øùùéäÞ×Îĸ«ž�€qbSE8-#'1=KYixˆ—¦³ÀËÕÝäêîòôöøùúûûûüýüûûôòîêäÝÕËÀ³¦—ˆxiYK=1' *5BP_o�ž­ºÆÑÛâéîòõ÷ùúûþýüüûúù÷õòîéâÛÑÆº­ž�o_PB5* 9GUeu…•¥³ÀÌ×ßçíñõøþþýýýüûúøõñíçß×ÌÀ³¥•…ueUG9 &1=KZj{‹›«¹ÆÑÛäêðô÷ùûüýýûù÷ôðêäÛÑÆ¹«›‹{jZK=1&(4AO_o� °¾ÊÕßçíòþþòíçßÕʾ° �o_OA4(+6DScs„•¥´ÂÎÙâéïô÷úûýôïéâÙ䥕„scSD6+ "-9GVfwˆ™©¸ÅÑÜäûøõñëäÜÑŸ©™ˆwfVG9- $/;IYiz‹œ¬»ÈÔÞæíþþýûùöòíæÞÔÈ»¬œ‹ziYI;0=L[l}ŽŸ¯½ÊÖþ÷óîèàÖʽ¯ŸŽ}l[L=0%M]n�¡±¿ÌØâéðôøúúøôðéâØÌ¿±¡ +'3@O_p�’£³ÁÎÙãøõðêãÙÎÁ³Parƒ”¥´ÃÏÚ´B•¦¶ÄÐÛ䶦•„sbR*6CRct…–ùÅ·§–…tcR·¨—†ucí77TBÁÍ×àþþÁÇÒÛãøùûùøõòîéãÛÑÇïõòï¬ßåûûúùù÷å߇•£°¼ÇÐØßåéíðóùúôòðíéäßØÐÆ¼Œš§³¾ÈÐØÞãçëîðòóöôóñðíëçãÝ×Ðft��œ©´¾ÇÏÖÛàäèêìîïðññòòòññðïíìêçäàÛÕÎ8w„‘�©³½ÅÌÒØÜàãåìëêèçåâßÜ×ÒËﲍ�‘„wly…‘�§±ºÁÈÎÒÖÚÝßáâãäåßÜÙÖÒÍÇÀ¹°§œ‘…xl4>ITamy„�𤭵¼ÂÇËÏÙ×ÕÒÏËÆÁ»´¬£š�„alw‚�–Ÿ§¯µº¿ÃÆÉÌÉÆÃ¾¹´®¦ž•Œ�wlU`ju~ˆ‘™ §¬±µ¹¼ÂÀ¾¼¸µ°«¦Ÿ˜�‡}ti_7@IS]gpy�‰‘—�¢¦ª­°µ´²°­ª¦¡œ–�ˆ€xof\RI.6>GPYbjrz�‡�’–šž ¢¤¦ �š–‘Œ†€yqiaXOF>5.&,493.)$ !%*.37;>BEHJM2-)%   $(E852.+'$  "1654210.,)  +  !#)**))('&%#!     70df23f1-8954-4ab4-a131-1982ee729cefba9fa7c4-4708-4ad2-aec4-dfef55e9aa6a9744229.371969 m 7l 999807902.607.858626620.799886 11805 cl 18835719c l532 096078712790971B56651374X21192582843863%_%_m %_lc %_l %_%_71974149271172.2922%AI5_File:Begin19215333230ÿÿÿÿÿÿ„½¨CŒ2„ˆˆˆˆÈ�30Å`(1Ë"Êé@ E‘� +A(A à   1ÅPRˆÙe=Ôñ°pc½Zð$G‘ ‘ÈË&ýe..Ñ¿N uZl¬F_êå7Ý™®1<`¬R1Õ‘u&r¬&÷¼FþʀDz1óɶ•ÈS!;¦"ëY‡ì™�¬e²fUd‡­È>Ó‘öU°V @µƒÚâÞãÆHqÏ«qÑ´pÿǸhÒ¸þ¸`+Üÿi\²®{1.˜îÿ7L÷žŒ ¬Šûo —Åý'Ž “âº_Ã�Mqý�áÂHqÏÏpÓ¶¸çǸ`R\÷Ú¸4+Üi\5®û0nØî7M +÷žŒ ­…ûÆ…Åõ'ÆÛâþWÃ…MqÝ‹ãÂdqïÏpc²¸ïe¸`RÜ÷k¸´)î{a\×ý6nÌ +×F÷~Œ­…{?>.«–É�ʶÙ!{V"{L…옊¬g²g6²–UÈšU‘¶"ûLGvØd­àWNÆ–õêOÖLÄÆÚŒžÊp ›Æôý¦ÛÇh“�:uj€ +áMÓê­¹,”![ |�§±æ³A3(Š‹c�Y-73±ðjBœ1‡êvVÆœÞÌPLE·9ݬ͘¥ÆÓâ¶b’!„åI¨Ã +K§W$ƒQú0ë(^Æò6AQÈW’¡ÑYÌäPr7x äGbû•G¦ -¸–TŸ´Á°D"i0òž„ £úX̦ւˆãØ‚øigðN7Œø1»D :Ѱ„ M’®ç£K=G@¯�Å�]”xÕwÃ4PWE:/Š,’ø–KÓÖ$:9üqr ƒ‚U­RÀù/ J…ÅmÀÿ>ÈÍ dÂytŽI³iŠG‡Fˆ®‘dLíò2:CÊÊ«@ìŒtaÝq­d�Ò/€©¦]ë¥LÉ” r ð ƒýK}ª^ + _á&ÕI æ:†Kõ4¦ `%°ç@aÕëàXyüî¼ÞâÊ„r‚çâ ª3¯·"–I.¢‹ ¾™!#X£ÃÊ?M+'– K –™·ø‘M‡e:Y»>�ÎK=zÝa«çˆÐV–Ÿ‰¾Øß9,š‚£^†¤Q‹Ð:ªЕ`ä¹ç½±�EFžtcÃ�4�¿.=nÓ›8œ‹ŽùœÆž/­XÄÙý(voÊÈR~ Pÿ½H�3H~ŽŠ—Gr³ßL5ÕN}Õôâ—_,Ѫ6íT½Ã¨/«q‰.±"ù"R15²ôúÀññÓ¨Zj‚�³­©Œ¹¤‹$Dø.Œ»¦Ì„áPQ-6)ÿéÔØ<Ûç<‹rmûùy¹û¶^*»*:±]ôp©ØfOU<0P…T×ËÉÿÎ’îg%;M.žbT kj½‘ô–§5ÁlÒÅ÷#­Xu'ªœ›vy[§\^ü{ɹӿ]×fÔ‚!Hóà¶êDWe +ôÔhÅ"pµá»Î¾À·»¨)óq+˜>Ìé,aÒ–«W*­X ¼ê(ä(wéY'ެR^¬’ŽV,2Z)‡Bv†–f×�˜‰à�w4Í´',¾µ=‡wœÈË6ÀXÂžÃœãØœÂc£¯«ûÄ€f<@Óü¼ yXc<È*h~ª³É­�iÌüœÖÕ!S§FƒZ—q)zi¿4æœ5KR^Žb霩 ­X§ÍSùÉd«®‚5K› P®9ŠåühÅ*OÔ’I”VhF.‹V,X„¿sZ± +hFZh<óø­Xþ£Vàø=ó¸+YD™aøbpB×IeFƒR1Å“hÅrbœÓŠUÒ˜bÐéþ¡løÅ´bù}ÿðŸÉB~a£L+V—$ è ú­X…<ŸV,¦µ¯ xˆ! ø'Z±êTùWIþ¸ †Û¨å(Z±nŽÏÒפåc¢üÎ}´bµ§Xg 6¬Oýå÷:8e骘‡ -\Hż.ôDnl¢Kkü4åk�DîzŒéÒØg)?ëFö9I\¸wi ±Tn)¹––#Æ#V&‘›O¦LÉ8¨¿òR„«×Õ]·ÖåºX²þŠCi°­¬Äbuò[î­­®¶ è>Ø:¦y¬F®@¸±fÏdû³¨Ï­Yí’Éj]ÿ“^‡>_öH•ûëþid@Iûʇˆä*Q+£0!ðÏ’(tD1ÒŠ•žG�{ »� ¢2HD7 ÊåË0.?äñaëæXjB|TßA4|S?÷l©ÎÊ=ΈY¹ã™°“B�`œagÅ‚ ¡X-dú�G±Ê·â/’z¨°‰´b‰)q€• Ó‚£XŠÄá\±´bå øU·tB^Z±:Óv•¤±´b-~ K¼«jw|2gÅR»É´U$«#>{}Xù5² �V¬NŒÂ Xx§ÓΰW…c5)Çù¬ª…=«ÒכъuÏgUçÕȦt‘ë£Ë/ô,:Ç¢Uº´c{“¸)ò>«ò, \ªúè·T‘”ñ0æ@ ú~ªÛö`Bû+“«×D+¹:�X®£ž´buÂyAq¸Ñž´bUÐ&ÃØ§Šé%ùRiÅêIs†¥ê� & :]*Å’å8¾Nª’7S‰rÜ™X?AEª†Þ E*�6yJǶ-ÖTº£zßpG՚ǨHqJ…�Q}%�Q5×Kéè1ª—Ž@(ª#sÎ$J/†à¡uyê¡ò¼PTEBÈó^Z±Ó T¨ZZ£G2>¶ êë(T…R[뉋¨8§¨D³+¨Z ÅÃXàƒ‚.E¡êgT¦{êÆ¤¬fbŒöX˜w¶‡é€š÷Pªò”+›–æ(%C¬íq¡P½_Û)£—¸ HÛ©nQÞèT9¤Kæý¶5:¥®Ñ:U;?áÚ‚&f–V¬þ=sóMÙnü`NÐ)N›b0mê< MŸÕ”?‚6i]ÁtoÅ+7š´ª;##^ÖART´âŸ¢Å…–øz¢¢K…; Ÿ™¼Œ#sé$&‡1LF›!‰R5Ç”¹¾ãH² Í +´f…:(Zµao-C£æ`¦HŠÁíèѬ§²oÒò§Ñ²`O[8CêláÔ*c,û¾ÑS- :[G 6¡f'Üvçx G*:´\Êů +WÑxÇÆKEÂÖÁ2¤âÇßùÍþo.ýŠä|rŽª™(<5:v‘|×4K¡í¼—¢Mõ˜RÆEÈlê‘LÚAÇÿ+¢etõ<�ÊÖ -†tOC9Œ…©+dÁ�9…¤¯“íaȲz6V k9ôƒD‘ðfɰC8Ã#âÕýn«ž8$‰Ãu�U ϯ¯S­ +Ö¥}y;HL«'ÅÙò—µEr X/›‡Z|Ué=C¯Ú»F¨Ïúz‘蕟‹ýaÙf �(¨¡&Û¤0ìDÈŒB„A¡Êì@�9 +ƒac A„Bˆ�!ˆˆ1È0VWc8Æv¶Ö³“`¿�>Ò¯¾MÏGû¾-oߥc¯ŸÙ”¡Ü]ú¶Ž»þúì\F†^ TÎ×É\8•V›TÀZ ì(kÊ.F«úQWýÒsƆíã=/= �Ä\²ÅìÏ3;ײðz�›]–¿jû8SX^]RSi¨1n^? YF¿ æã<:Îцޱµ©.”ô‚™ž4tø$˜hzLXvvJÍbŒ¾LœH(#–ù‰ÑÄ%…®È¼è‘#+Àí=$²Èº&›Åõs<¬RâÓ‰p\Å{ +­X¶Â`­ÚϦÉЮó€©ËÖïªÆŠGK™8š¢|Á�–²L7´“´"Â2ÿzÀ1¥ŠÀ•žCºùNÊÜzYô¯ÊZvð² vY-õc¢ËTU¼åb5É.Öby5i©3 +Þ˜Ìa†rµz@IØ̆#ó€u„¾Ã-í§žotoçÆ.""j Öo¶¡Þfƒðc;¹/ˆ‚}‘Á +/N;R['èÊ"ÿtH *­Gû®K?i]žø‹>§ TëˉTüÞ‘!íeƒ„çeƒMPÜ2ëøIî¡$ßQ5? ­D�E<µ°÷��¡�ÇŽHmëzjõUO7@Bö˱‚u™Cz*!bÌ[?2Å»·á#ª²þSŸh5ɉSZ†wçЊ)tµxœ¹)"2¶S“Pâ8.Y)zöŸÈÆ,…ÔDÑþÿˆ$ˆ* +²œ>ñAXÄ0ô{Ò =Z¶›9Ð{$“âaj~À`�Šeˆg,£FlÆ| uú ]ÆÐ:1^ûžŒyœù5`?µ’&¬ÿÉr^8UÀŸkkR �¥9ÏoÁC¼”ò¹¥å­å&Æ\ ˜€ÀS5@Ê“u­vÊ3&(U É”¤ŸL™`[X0_–«)P¨ 2„Mð�ŽÛµ" +6  -ƒ +úp‰#c„>ð|0~SH±Vn›–v½E³µ­}.77ÚÊ·ƒ¦Eü|Pš&@ÎNDóš¸ì!PK’´jÄb{â î™–d¦ÈÞXUÓÍÇ� +Ž‚e4†Š5ˆ~0$È� Fj…Ã�Ql•Wtb¤Âñ‚¥Ø‰É ]õñì¬dä»Íµt63K+C1½c¨Þj‰?Vá„Ãö·rVOPŒHÌIŠ~·[lw¤Jˆ†m*—¥Ò#¹æxRž_6   ÈBBBBBBA @€^ÉTÀÝB¢9£v¬T㿳֔lT« +d—Ú=ýúèSÄ*Ô˜z@Õ°Häî +DÇg¨e’au+Ñúîx%$Ôvõc¬Ìàåïw¿'û‡bF½lnƒÁ;ÔW�ŸÏwþPðî| +ÿPÈɽãþPð|vCqOæ`0àKæåQOø ŒäÀz[ øÛG½øoƒÝ8ûÙ‹ÆÙ‡Âƒ¿ü`0(`0èPÙ±¿VË +âVt„ý§" ûl%î#™aÕ­‚ÌLû¡¨©ÄY}ú"â°ÂF™Då{Ї‚,ƒD¾³oŠqÇxÌ¡èÇÍ :›3I ºÆ�ï“…r(Ú*zQõs"qÆ_ÜŒ«��k ø +ö"á"‹] ÍEý±ö"çWb’ll;ç¢!®Øž½GUº‹?DCUE¨$¢a©0s:OÝ* 1'V¦"4Ø: ®S¿“Ü`PÀ`@ØåR<%â�Dظ¯3]e;O„×!jZÙôVʹf(ú;iÌ qÓ?äÛqc©\cT˜ +¢Î¤h©GoCF¹ò´»–™â©TtcUVºa£‘OË%yÈ*CÔD¤ƒIÙsRñØ Þ¨p¶ÎmP†4ÍШGj‹Bã´Y6:]­5fCã“Hgø$njû£¥‘»¾ˆ¤z%f#²£©³•ÈDŠD͸ˆC½‚–ê‹îÖ¡;£ß|($Ìn�7’sóªÜ(ö†Ê1ww¦"ÊËx®µåæœÒÕdyaV–x"3�Ù`З‰�xx£3öV‘†Bne5¢ ;2ÃÉ•2JæXFÑ »û�QD¿3W�ct@°žD™æk}H6ÖÀSwˆ–͹Uá¦Æ5dVNh‘íqö•­½ƒ�\É/R®&$ ®||–ã‰YêhÄ‚„xuVBÃé ÄÍ7 j^×›øF®êWf]ï|sô�ÕF6UoÝ”ÈG!¢äÌãaéÆGs}Fº§��Eºp*6îé?§q¡�Ç$鮾ѩ[Q‘ÎÜwe¶Ø0ÏÌ}*cè%$ÊwTÂçëÅž«ëÑ?㿦̑˜*òö×�zÉÑÇ;/±Íx_�ÐÐ ²ë¨›|†8ìý;–»E¬#£d=}åZ>ëP/4ìÌ N³áxbjz¦:þÝËóˆà™QmhŒ–rqw¶ÏAÒÏ�f“[òȽ'ÂØ“‡Íî/NË_•‘6ƒÁÍǦhØC˜&gKû™WØ›ÏÁËCbieä­<3™ªÁzÔF溙Ñj&ÂsV'Æs�}=[™w*›a'ˆs¨„²I†MM3US 3ˆ( E£0€1„¸ÊN E"™X‰“ C1€Ð”B)bʪ�ö '¾ a®Ý'š{Ö”¦'Ðü²CË™c#€'!ùHU-Wœ@ oŽÈ_Qî3 +9…ŸL'ŠÞ¥TcF7Œ@ +~œ~œJÅðxÿe¾ºz±Ú7­",<Æ6?èÖ 0t.š+' g±±7ÅXq¿§�ú¶jÜÇëoÁ}‹`t³•à]P4Ѐüš +‡CÆÉ:7ŸNœÞfmÄ�_Ç>ÕL�î@*�D½�84†·˜ <£$²¥ +Ž$mQÍ 4Bô¡’?o]à¥Û$\…¶2Hßo%¥SFtUgF-­Ùt~á–¯O>Á¶P%lv)ÝÔ\kä‹ÔAÖÇŽ¸a+´}7(~F¡Õl2@ùH¿aû­Ã²î9®ç³çuJJ4<°¤²å”»Ùè±~ dã@  ,ù  ˆ«!a qÄ(»Sk7TVw7+Õ­xbmOEût© ød�žJaNh/ç0ᬒøeC»/9û�ŽˆÂôbfC ŒÝìÃ*íÑ9Gƒ|¬¦Q ¶b¢º,•i'å­:ÀÏ÷MÉ”Ïck8£gŸˆœì“%=–@OnÆõq6…n„?_Í5�È!†Øž&ØÔ»|I”6ÊøžÚ`8• S,O î6­€Ý+�jÊþႎ3ÜÌ�ºë1“/ +�§#s úËçŸd=p¬¨“Í¡Ø6~°Éï Á|Ñ�èÄ à˜^ ~LºÁýøsÞùBýpotDÝ„e7}Q�ŸË—Ÿ¿ˆA‘@W7ÜuÕ<ÝãM?¥ø;©!›�áP(Ea#À±µJOd¯ö�cØ5kä No2`Äz�5Œ‹¯³�«˜= ¼ê´±­#p_u`áPü‘d2€·Sý5\Ô:‹“Á¦é±Ç6Œi–å@²Ÿ`‡é¥ï`ï$úv8 +yºÌRéêÿFGï–?,–“«[‰Ž[2[§�¼¾ÑKÓU�›:å>Ñ…Œ:ã(àH¶�¡{@‰?d‹×kŽÊk2’ƒÉ ã �˜ø`)n ë]§ ¼wÖ¡¦‡œ'{$G7žðÅqƒ®Œ‘hHËjLŸ¢Â  ¨8ñ£{ƒ�î²ñŽT +ª …ÖG6@AØb°  6*%Y›æÿ'h ë…žÖ8¦zêß`’�@Ÿ·¢9�ySð:Sm±›ÿðÏž_„ðKúÞüÏBYÛÔ+,̵½Æ—&t舌`ÓXéWØ.�>@1ã ¼È ŽøycÔÝì¤_sL!¸ôïaøçô¥d:/G a +�Ä~XñÑ/Í®3 ª·§y<±ùÕP3 �|‚Pª'MJó½ƒúð¦­ÄÈS˜eÄ8à—æÀD™" +�®Äµ¶eI[âML }pÇXÚ)Çž·Rß`r•4’@YEÓ�mG©Y“•ï-ø +Eµ­m´f݃„£¦‚™‰øÆÕÌxàÃvKu$™Ü!dФZ6yêé7íET’MÿŸîIL%ò�O.…�h¬uSÆ+?t’‘ÐHh¨Øxg€Ô´W'¡­¹C¤.bè’;Gø1Òê„¢)âÀçÀ5CjZRÜÁ1Éì‰ûãQ$�µR5?†ž¥¸X̪Ð>”+[kÛ¹ÿôDEö§2Z‹ÒXâ1ª6OHë€Ä�eÞ?ê2ï%=ÒRo’CW öÀ=™7U $>¯¼¹ê ¿Àˆáô”â8o€#s¨„±£×‚ΞÖ×” ÍÙj•EjúPŒoLNYèQ©h¼o8+™Ìæù§ÿwÍN>ÊzRÀ4~ê+IxÀ@¨hLÑ]ÏŒ‚`„ +µ&RÖÙM¨é̘A.–×l°.hÏà¶½ø§+õ EÁÌyÄnŠ6"gýc{ŠÅÇ­(½•xÿ1êÐcEú©iqÎFÉ�C‘^Îã!ý „¥Bõgab?D’ÿ®§’ƒÇâëŽÂFÄö0ئð�”¬.Ü»F‡Ô^ý7Û†Î8PŽ„”aÙ…ÄwØï¶æ˜Ô´µ`áÓéÍ‘�¦ø† ñÃa'åíÉ>F!’X‰Ÿˆˆß‰P81$'ÊŸCˆ€a‘×,ü³×\E4R¥¨Á­6Í1¨Ð™3�0pt°Á;ïFUßù=ÂÍ—�XR±ûÆxæãZ#žÿ:”6ÑU1T–Âdž>®ñé+Bbº‡/K†Fˆw@›Ù߈kAËë³²>‚ D #„ìúgÐEûR³ãã´±Ö@[¼J¢{§J-ÇwÈÖü¬Q�P$kRµÇ÷¦bÌkvor„5'‚4Yƒß¡ÿG7Ú1•Çø³UAžFëŽy 2 _O¼·b/‘‘¿î×¼ÚÉÊÍ_• ÿÿ.­ôe M:tx`:Ù-“Ñ.8³í Ëű­ÊƒÚ<«–Ä( ä@Éå³c&^Ü>UΧ€¨|M·‘½Û½©dÌL¸Áë3KŽ€H„(¡-–4þó¢eöt´v( mXÓðÙ‘ „LÕ£I�RO¦Æ6Qò0Eà9B¶P-€XÒç˃,Š´ö_¼Z¤Y<ÿ&LJÕÄ3 Ùwð +Å´rŽq_p¼¥ÏÂNš—¼6'¸–2Τµì~]àá ë +ÔÀZ�6ÒƒÇ÷ �1}¹¨ÖUŽ|ìm§Ñ•ºüKá4�w:®_NQZ&:Ñ&ºÒ²j|C´)”ðD5“…ø:P_Ë6©#\A|�hÒÂÖ|“v‡é\Ù>Pú50�ò‰Ozô`˜:Z‘Q×fžÁz=R›ÓÍè‰*¨BU”â4:ÑjÈEÌi¹†õo ŸaŒá—Z¾¤Ž‘Z0\á™AxlÓ¿¿íe„îê¼qÖA1dÀ–.¦‘_%b_DñQ¬ž#o¼w2Uˆ�À-†Ïð¦uÁ�'2�µIØÀ([iEjÊþæ‡o±ÅÜß#¾Ú �=ê¥ì‹ÒŸ›0%ˆÌÕ4Dà_5+ › µ#¨ð4ƒN²Ð:6ì»ù›œ2›ªC§°.•ɳÉ&ÜtÖ"ïo‹#rÁgPâ –è[BÂ+_“jð#gCì\…†CfqsNOS�7¬z¾‰áÊ>gú­¬9/íV—ƪÐ羈àO ‘tÐ-—‡H—)ð&«…ô™x`nß%þ¶«m@‚ÂeÜ€7 “Âaë¼A_¯bÂ?ð. 8q±I°wú»Ašˆ~¸•£­ÆÿùýÒxº'?B�"@ý‡•lÿ¼–$rȰbA2 cÒÁ"ÅÏ$V-iý& +†P™�º?Â,.Ÿ´Ö*�QŒrO:Y¨ ¦F8�kÀ!{êw"Ï@Ì7'ÔL¾0Ùá+ÿ³CTeD±ì›µbåŒèÊÀ6€zö˜%Ë´¤"û¯ äÛ‚Ç+“ø«àp5K‰À«ÿÝÌ©!n4¤�ØÝ“ïź£dÖÝ�ð;nydmênæçø—ð†¿juS­ºÎ ˜cÿŠ@Ý„š§¸, µþ�È4‘✌ãŽg)ðz¯7 Pt@IJviôŸò÷óFtWŽm&œõþ¿é¸žÆþ#-¿1) ÅÒJÀ×÷ðo·õz»tVŒÁ*R²£„¸iË òÀ×hûeî²ëqƒ7DéÒØ:ÿH!ÐýÛ\ +Þ Rÿ¬?©ðpÝC0¸a4z¾ÂõR·Ì¦ðlf-�½Zrú^ë�©®Xt»ˆ(dÑUD/ÖñìSPs%TOäBv'K%x©ÐéQâÿoH»‹ˆÔ$З7+xÏcã'»¤¤nüÑ�òWñÙ¸ïÉNJLwZ!'6–ÃB ÍLnû¦dz×=«îÜ8ƒ¤Y>_ˆ|¦${Ô7D8àç�W,ážðå§ËŸ|Œ[aVEDMç ¦Ê*|IÕ7@4ðq5yé„hS®qÌ‹‹‘�¡¶´%�ÎC �²¡’˜a�8 $21ÎJb�ÆUs;¨shªFb„˜PßPμÌóiƒ=N”[F¦¤soR âÖÊËÂ2•üDÌÒ5<‡l"ìÀ£ çG‚]l>E0þ Ê£X/ ù‡ö«Á¨ìÿ=úÊÇ‘ Ú£³vv;�잣¢Fš¡‰L®‘jŸë�/Ûéﳂ ¤š…\ º›Er*Ý¡g>°ßÈ!J#æ!z_œÑ•ïè¶_£ŠÄFâë(“7þ*›Ó‹NÏ6XÐsý‡E‚—ê±LFD]7a 锈 ¬ÀÁ?Hõv­õvË/—ŠÝ_Æáò·�®'’nû¤ØãOB.Á@ùJSgA�¢ñ»KüX É~‰X`[üµ! Ì èôò–î´å#q;ƒÓ,’‰î2ôFJÀ"99 .FŸå£ùWKÑ»ŽøßuD�KÊFàª#£\­Ç{Î~tvÏ�â5Ç^ZÒ�okÛ ãGÕVW Øiߟ#†þ=O|b{ˆv½OZ>L¸+Gr»*õó�‹-h·áô þ4» ÁD!¸-+Ô3‡”`·�¹6¨EüºÂ)ŒÄ¿ê&�µu›Ì#.A"tÄ*OÃH§%Ã&¼jÑHYËÃ0=ê/ c¡©:�ô¼ïž¬véĸʅÔü×#DE/tº=.=ûÖmÝ«>áŠè—:"ð’Äç¡hJ�\ÉöMë£1øÆ2Äq¤ ˆ x$¤ÑÄhaä�f€ MS‰½Òf$ÐH“¿Îbâ,Ù_&k�X$§†!BÀHö—Ùæ õ#;lõŠ0íY†Aµ!e’Ã|´Nm_B\{Þô"wæ¾òåù±ê†€¤"XôKv>·Õ)®ùkz”-´Mßž÷Ò¿„«ž�Q1Q�ºÏ]á+…1?�^6s2ˆINíYÀB u$2|ðJübСüÈÁÍXfQRT\¢¨f^ªÈ|Päë -Àå˜M¹ì6boÍŽ]*Š¡{êi'ÃyJéRJªŠÎ.P#–ˆÏ*ìÂÎËÀ©é;”ñÈ¡!}m†CE<1NŸ Tø ƒJ-øA+Ñër,4O‰ï·Èoƒ¸G²¬µ…¡tÅ +:Èzu¥¢�$ìë†Wè�*œ•3`'h’6y ŒØX' oˆžRdïL²½ÎâÚÀ +")´”Ä2ã¾Ô±`W%-"»"Q�ÿ©:Ö*™t%ã!QÐKæÑŽ,'ã:,ÔBž2¦«Ã‚ ™.�³À²ò8CãášË1Tb4ãý‹v71›˜ŒÄ9cÕp,´*âÖ˜9êT›Î}¬9 ÑŠv'^k6Wž³%¿, ²´ i™p¸¢:i,üÊ´ ‰=c÷õÄžjon°ˆ7Å,tR7Æ„…WÊe4v‹VuiIÒ"ëÕ«v=²±WÄj( {f}Õ'äõÕ¡¡Ï¿™�K£Ø«)yaµVø;ŸÑÓÌyÕPx�'yU*£LžCŽã ‹|sÊWw׊�sG ÌK®XGV5ªÐ©UMÖ{zŽ�WÕœ†M–ÊUÕPx])úË%IùQõ:ËPm˜yfÁæç’ªÎ:N’:«×[Dô•͘°àÒ˜£Q)9鈎¨,'4^¾*´›÷!]ÈR…2û¤‰¨jXn̬ègÉ {.‘XiÂW±`e'aIÕ××Ü}˜¬È'æ‚�Ô®ç^•‹Ô=îwñìÇÜÊþû¯æÔBYUçä¶Ê¤¡Ý˜Ôœ¯d4P7fU›â-d&Fiá~¾„,9;Ã*$4 = øE +®é ²”Í%³Kìê^B"¡FS׋€’œÎWtÇ« è°äaVNÉLeF†e ÍÃØ—ˆ‚F ’>ÒB#$ꤑ¤I˜ƒµ/:ix€€ID’$?•DäÑ0‘D’H +]K³ÉbϪ¦r¤½7õLJ¼ªŽ§â㨒¿bÙ±14¶NIª¡1OÏŠ›¹åtø–lMÊq%o3^òPiëÃE(1À1IÄ@Y’8HM§æ“D‚ôäÝSž´)i4õ-²,Köl�'Uá<á Ð"  8��������ÀÔÉ�Êd +§Ué<Õ9¦1�ÔôS[>ä / gñ¨³=æö}Da#dD3ÎÈoô®~C-ècì¶AÒ½ +4G ……Æ‘Ðq÷�˜Ñ¢Á"¢˜q"ò™Ìì1fbUå*�+—Mçá³ç&Š›ÎXÚqBÄ!Á7@ƒWQ|ÈÙDÑÖ4îãrM£5‘Q =¢ƒ‰�±Zþp�"ÅùX…yüÚÁÞ�²qkÐx°87„ƒŠj ÇâÑx™Ã46¢�Ò=ýa'–at�MeâXatäQv£þú7Ä$…gˆ‡gTÊf›(ÆÕuF”“8И8 +]†é“ü†qÌLMV»ã£6QÈLF2Q bõL6Ñ™(Fú–�(è£7Ù�29>Ž\ÃÈuÃd3QøÈŒF�®<æŠD$�3Äî¡Ý\)fR"<�JbÀf¦7²wöóEFºº);Á¥C�Ån¼_‘ÕñÈNúÏízT6Ä.z|ªÖYÏ"#fá"6–R%]ÕkŽsîg\œ;)é–©¶+‘Ø‘42SYÖÚ^­ØÐÝÔOÓ�Ù�k?ϰÓB$y¬2¬”yÍiI[Væ¶qÛÙ%34NÖÒð-Þ ¼+Õà=�£Òâ[Y �ÍCzÖ("9¢8Ïò}æ»óœäÌU(ÚL¬BçS½®ê!•Ôº¼PDF2ì¿7b®I]aŠnjkýéõwvîΧˆWrv·ªá”oœ]튦•;Ò¸º“›ºGÿá š‘ý|rV2ׯ¸v’Qs3= 2ÿèÎdîcGŸç¤†�B4ö´ +w£¶æJ<®•:Éeg$õŒãìŠÊ¬�ifæöãMMФ›" ö„ÚÊç*EWdF&cã!­"s|¥¤Ä6dvr4—³vËšUM¾ÞE¡“9‘![Þ_ã2î•W×£C«cWZQä(È¡M…ã…:j tŸ}˜!F:BN�Æ�ïæ””�™±£»$gS±;³¹LÇ•X„fs¡›Ž«ÿõ] 9¦-b�GWžá£™sÌ4=º"ÙŽjúxhå©»ŽÞ£ÝiÆZ ��À”ÈÜ�R%µ¡²)'0*;Òç.�ë„ +÷(«wuÖç<óÞ�­gFc"³b¯=’ +?¯¢í¦d6ñ«r¢œR%/ÓŒ¶)'!!áÐ#C¾›áõ|V6ÄÀ‘lPQW6ÄÆîhܽæ>ëæ4·“n4£‡—T Ô(ã¸qfœ0á¸ÌeÊüdl´c23$C eä36ÔIÊùýfUÇßÜϱÇ�DAÆ«Q§ÈÉѸÏ:nN3ÓY3`$/6ÌÌaG|¿ÐÇQ„þÏ`QÃ2:ìØ~#Ó! +‘¢yÑ_DT" +"DacD.2Ì"ŠQ,ËD$ܘóh6Ém\•ÌèFˆæ=œY‹Åò�n*ò›+±);¢ØÍ}«œˆu†ˆ�E]W`b°L�¡À l@`p`0à  +;ÖÁ�0u`pƒUÝp0àl00ÀÀpàcÓÜ ÞÒ+ 7´°¡€Bƒï à 8:ù+µc¬_ņХûÙ\tÖ’‚O�ðƒ“’ÁuƒoH T`¡Ð + +ìàÈ7…`›3Pq6  ‚aÂÁ€080pö�ÁR`(^ØP˜Œ¡@x#®Áïà lŸ� ¦À dëžÂ @ú€WcxA„bÃÁ„2 (8(´ßËÜz=GkQG8>l“JÆ*(„1( ¨Æðp†‚:°¡sÃÝ€Z °8�Þ ˆáè†#˜ R…¡ 2ppgá¦ä:¿™"óU‰ÕßQ32ëmˆØd~Bº²“ùð„óÃÇ ÷ž‰•Q"õT›±QB%S1áI¶Ë È�íÈú­¢…¶éÍ]T¾"š^¾Z‡Š¾Ñ ‘�Üù'¡ùg-ÞE"«Ú é|‘é>o¾êŠ©ÄJª>)£Ô I#!¢¿ï:ïZ9èEãûÉßn#~jÒ©g÷’9ÐXXšŽ<1ÍÈ;töž�])eÞ3F6JQï)t8åxl:)ŸÓI}kÑSB2öDŸŒgĨ„S�©Ùôeti“+ñX)NÝQ(Eòº«G-¤AGÕ³ELòû˜c‰¯¼ÜÊ4ï©éy°h¡#1��ØäúØRR²1BÂ@€�©£Q§°¬†=e(ÌÔ«œ’ÏÜ@:CÁö=eïE@•®ã#f¶�ô:iMz1)]l§º¡ð·ÊçÕCÒÞ}Œíb…RŽÊèe(üf­)½“%g+ÊÈ _r3;›qª©Ë,F“¤Öè³PI\§²õlZýÔ?^väúz^iå™×�£b-5TÖû% “�ð)“�ÒZúüá£üNµñ6U=£˜è�ÂUìõù‰Xäw¡!Ëѧ!Ú4�ËDÞõETÿ'úʬàßçç3ÏØ†ô3^Ù�³qFs‘Ïyèn2::�ù´Q¥éR5•ëêZ½šcf3có®ø¹­Òª˜¥#qJFŬ2š‘3Å/iɉ½\R  ˜¤¨ätXÊvŒfH# €‹ÇãP8,PqP?¨X&"  Ie³ÁLÑr1Ä(E@`„ HäƒùcüÿèI$É÷ÀoÈ×6qƒµSÚ5rax"…;ù±:g¤ô�öäû6tZqªYj$Ó:*ÔBÕ¦©Ÿù=…ùr ¡L%ýo+p'ocßð4(ɆÁkH;Uð#ÌÿpüÕ)e?ønÂ¥xƒb%™´–ŒdRÂÖÜŽ„WŽ�xê…Ü@¬à@‹¼æ€âê+àÀu*þÑ ¦&ѤÈÃ%0à@“•’w¤ó(pð +O¼S%ù7ÐTÅŸCðpC”0d”¼æÿ€ÃV˜þ•èÒ|$[ù‘Ð�Ð#à�ÔD—mB؉�üþnÞ’À!Ó,õ&uÄçÝ7R÷†Q0ZÞ`»¯r7`Íç}¹ðê)¹éÀá½AÛíg ˆ7ÏuzŽ5‰‰©ô‘t8Øi:®lœu¡!<Ž:”çÌ*6ŠPæ}ƒ1j�€šs.ouÑ"n˜»� ­ /_Cÿ7¨Ï™Í-É~2\Êñ àÅô¿lwïáÿ-™Á—kÐS°óÕ¬›öGTB�ôƒ�ÑÎêZÁ»¢;BÞÁÖà`ýΪæ¾R’ )�äÿ†ðæÓʲkø:–ÆÝ-ÃL¶¬B Ãö©aVeD€Un8Dà†-ÿ’)%?`ÛJ¬é�†œ@ñVvÒ¸]`܃è �ÞO "ÓÚ_àÐbÉp’Æ�ÚÞçR8k¡Ý ;r—ãq:è À ½Û8› I·¦T˜¨¦�<Û ‘ð¦8i €ƒmÓ´ßä °c©±)Z»„ÓBÑìÎ ÷ŒœåxЊëÛ UàÐ~à'I§]âÈ]"ùŒ6`Îy#‡·ãùPÅqàØ´w¤PÒöˆ„ËA&²²|…•V½Ï~\µ9m¬´‚÷:*·«ñÉðg/ÂOùó­S~"ưžOD)U;C¹–½ÉNdú)´÷dc«pLH»†3t\D7D¼œtMB×–û|²ãQ.½HZþ†àlÎ4-Ò]þ"n1Íž“!áñ‹þžÎ)¾ðÆ ãdº•*v]~¼–T¼ZÖƒŒ^—a g½)º–Râ]¢ð7Ô-Èu»Ïl*Òþ˼îµtëÿÑYøDsžóÜ’jAÒ„6�ð74õÞÓ; +©!ùý¦G¢Ó4½Ô™¶¸,ÈÉ+:Ð’$þ†¸½#a¢�M’èÆïú8nü 8Û-LŽ`ŽEIy¡äo òúz•1ò7Lê/êø3@Á,Y‰:U` =6AG™A¶2ˆÇÏî‚á÷[aǾ2 +ÔîïÛdz|0öçñ_Ý�>P¿Wò÷¼Þ< ™°ƒA}"V€Ü/¡Ãþ˜‹XaúQ3ט=¤11âîZ¾•hTÓ†T±ÎV¯¢X°þq¨©ú œ�¾o/†QaD!ÝpRÈ-dp–÷ÓüÀ(ð8¨’G?ý€*üÄ ^úòsC-î3?ÈB)$TZM~ð J­§ }â0á· lØqƒ¥XXÞ9`›Ë ­o*ÌŸf~SÝ]áØ}û-ýœÓðSŽ÷ÊDz  ãÕÎ Âär`‘ñvƒÓ½v†5ÈÍ/©œAžii ž8n_ωmAXˆwƒ¤‡ëƒƒ(}‚ï~*{ì¸B_û‡¡ƒQ5~‡úñãì&µËE+£&2©^KZ•?þ.-™‡³"ºbR�ðñ"øŸ&m‰�¿è2*ÅPÞH +Á#Nl6ö­Ö$ÓH‰½áD÷ÚÄGox؃AË”èŽùÀ\ÖGII>äÐäêu³Ásòó{ˆS6Ü�¯˜�'”¹!÷@ß“0xg_G�Æ÷ùà§CˆžÇâçË1£ +xÔ•>Ÿêi%N烼¿R*Íÿ*𹜥bÍ´$òÀ3b󖵄áù€Î èƒV¶äYú@ãYæudIÔæï¹ôéòAy/qSù kaJ¹|ðˆ Á|`3À’Ýž*Î÷|æ@\¶çö4dO ̈¦�€`I‡{ÃÒ±ûC`>ðéFw1œ1PqÑZ@ÜuEá71çÑ?àÎ2} a‹Ö›Õ‘Ú{ôúà†:=Ö™•à£Úô�âTa¯!D}ðÝûÁG˜.¥áýÐ-¬Šú€úVàÍj§ Ã‘åXô¡=»Z({!šÚ‡Xœh>‚ÂÇq(ñŠh2ØõàsšÄ¯¼±ù¹£gÅb> úºÒ�„�P'þ?p´q&ˆ˜Mì}Pç�Rž>ÌÐì,û]DV¿½âù@¸°©ü$nBäÿ‚’¹á¥÷¨ˆçè ž¸½¤2*ˆ=¹Ñ�>¨ØÑ²ìÝ$g³C¼ä,½\Íò|p27@ŠØ’^a¬\�>(,?gú «­§> OÀ,5jœ>H…Z1Ï9gœÀù\VL"ã:æƒDžíÆ‘!�|Ðn˜±&2V”ûø ¡ ßÚ7dù@5ÞÂüuÃ!“€Û;ª˦Ã�¸Ìr†U¤sÅ.7°cÐè3>¸Æ�þ_½ÈUdü7„䇗ÃÝâÜó$ßꂊÈߌŒýŽ€*03áµø@sABé•ãƒSƒ_–.Éæs|�bQBwÿøà c§�ÿ‡•|PùíþÑ‘œ89>`öÃåvÍøà”Œ�ðO|À…´£‚yÅ¥Àc>�úäÊ5UP|@$~ÇìèÎ(ÆÀø  ‡-±‹o-:„7RÇ%äH üc|ÚCWC¾(äù ¶47$�qÄ$½(lO1уË\­˜%ðàÇI@Õ�>x9w`Y³êr ~F}ù;p0ø ¨ñê÷€A(Ñ{ dåîAá«»„°óË{P0¡Â÷nô<˜à¢ëã=¨òĨÙ@÷ ’)@¶v{Pàs*kw+s…Äö€�ÚuÜ;s·™ÔÈãpšãq…Šçd/¢èœ+‚Qÿ¿jxÂ{`-lJø§÷Àe�´3àí÷Àêû¹³ÏÊ÷àHM%¼Sø¹{p•D1€6«¼ÕöB¡y÷ ÷êx[?ªzÎ,¾¨—�UĆ|N­j”ŒP+·Á¢|Kø—ÎRk“…»Älô�Ëx�_(Ä~%Cç=Žê®Q$îuº&2Åã=p–ÞêºÜ½uˆ t5ïÁP•@Šž;w,‚HôÜarìÊà¾,fêô0BïAÛS¡ñ™ ðä-àš!Ù߃»ftM…Ï5íTá|ªÉsŠÁ�ÅdŸi‰ ÿS¾žqø@hÐ~ŽcaÅØ 51Ã÷ kÚ߃£pÀC\CÚðÁ§&?HàBâƒ?Þ@¡ñÁ'±óGXÝ¿�‹^}RûC>8²Nã oïèƒrµ„Îë;|�ÿÿ ¬†ÇˆâOõõůãÝÆ ëìÝ!XßwÙ—†÷Ö´_¼Ž{çäƒ+‘óô�O>�õŽr�k]¿ #ÌË3tñ� T­ên|'>@z*ú&Lì^#à(ʹîr@ˆ6 �¤Ê2 +Iä’þdwøÀ�“8éŠfárcCÌÏ`©Ö¢ƒyv òÍÃÏù_Oøà +ྠkÏ­>0x™ÔF��½àƒðY‚±Ž€B8Í·Š6pƒæAGÂáûGµáƒ„EÄSa*ñH­æVãƒÿðýR ²‡›A>@Ï�ÉÆ2‰�΢Êpn¯ø µ6´j‘²ñùÉxZY?dõ87r¾âƒ^ó~i£µçðÁ6’ú /åe¦Äñ +Ââ¼mB-SbRe|`þÈÖ §çeï¶Šƒ·ŒðACœ!/<|@ñäRü¯\芈5Ć pá€;E�5x¼×X©µûܞĪŒIðï�¿Zv 1rFlŽû{:r+UNvá=H�µ´ÀM¾^ JÀ^wiT¥BgX…:Ý04|pƒß·^ü¿í o”QõÑ^)8¥Óf„z‰|�ï ”á()¤ÍSL¬ wvê�|ƒÕ<Ð4Ë!@�»RïØÃ5qòÁˆhËŠ,A×ïòCC]L´È­]ž4s�ãGvùs'›JAʱ¡£>@²2ã{Ô³%oär!€aµ7¶|Séx³f=9>µ5õ>ÎþJx_R ¢;8´DÍhSÞ–QßOÅßðü5J¯Xo·/Û\a®�"Ì ¾E§äx&gYðZ¯�¤MæŠpχƒzêW�£˜AmÁ�ðFjÕ�›~J¿<óBƒ¡Ââ„2A,R’AáïÀ+X.j&òŠ Á^6n³{J…¨æ{Ù‚…dúÂ}Â¥û†’çš�AŸëþ÷Ÿ;�¡�š,/„ûU=ÕŒ¿ö¼U¹š‘´(—Kæ3Yr¥Ht0®ÚÆe:Ø^͆Tûaäþ\ÓxÁáGF}´ÒzuHF°/¢»{ÆÆ+7ÍÁ![�»«�Ö®¡‡øÖCqfÅ|ƒšüs'] D“çª4>š�éã²Ë¶ÝÓKóËï]oï$ “šwpïÍæ“CÊïF²'ÍXàà;ð6¨¬#Ÿ¬ÜÆØDz¨-2½e–‡oä( Òèˆ=‡©l ·Ô“sXfT�>ÌqõÌ�fˆ8(ž\تçêE º?ù¾‡!ªgÙµEiÄQO¯¦ªàY&±û”ðÓløaÖXÏÉã5“fÏÌG›=� ÿpšGY¦zôèò]ö©Ð͘ní[ýâŒt_»K’‘L‹��ëòÙJ‘5AûiCØ«ÉwÏLåq"ÖD2 ~ +�Ï’ælpV’Æ">ÊH‚á"…È|ëù èS3PÿóÎùM2T”E›¨çÞ"­³“çiø&wŽc6¹@˜Dl¢&+X¾€�á`RSOj5¶#i¥3h-»° Ó=�R3(¥èjàŠJª�Óíz¨ÆðÖPÐ&ìVûz�oïu˜£ò’-ò©|ã<ÖŒ¾Ü“oÁqÿ§ñ¡;�üïÜ“„$¾B•,€ çÿ:‹–ñÄWï©õw½û—þ£nBÑÝÉuâ™T,PæfÙ'1È�Êèåv{÷¡Š‹‚Öx�Ôç¼w ¯ÿkTÄ(‹Þ‹Ý¥�Ù2ÄX¶sxe!‚üX†Žs8q™5àBuu÷“•š©vÕ¤�âÆUÁ áßR!âEvv4ß|ØÏØWˆëTÓ—9¢�›‚HpIÿ6@]°µ×s í„vß‹`²hp¿®ºtn…¾ƒhâÁglr( ¬˜ˆ-´,ui´ÊÍéH2ämÝSWé@�2Ä +¢7º2‡{ý©>qðEo¢H«#ìÉä¶7jøAªt‹¤šü³x—‚m!PñØ"9L¶6ÓwŽŠ{Ðÿͨø"\‚–ÐrÚ{˜¤ÙqðƕѬÊA󚊣{öóõéª2F +ÉZצ·k]lO}cŠ­^0AüÜs¨R¶¸]»9b¹°ñ<5ÄT¯iGÆl#°­àm0„— Y¤c†P¸ÖÎg>ÿîX)¦BÎwØ6E©YΑ«”oTO•ðŸRXH0�)¬ÖÈ6´é£¥/%ÕjÐDQ`�%oó²Z¯ê[-RÀÊ‚-cyƒ·—H“kÊ�T"=oé¶W‚¤ï¼±1pTtkS ®â¨B qµŸæT˜ +Oÿ±°X|L½3¶ŸIâ1²™ÒØ20ZsË8\cGŽô³¤÷�³Ç9ôã�ˆ�½±i¿1¦²MÇNf­ÍzcÃÞ•F¾G;}èâÕKpêš9’ñ0’`ý0ö×#;Ë�£� 3ÉC�n’Iªž3†úF…ì‚ÛD˼U’¡Yg±k 5Ëù’¬ö‰3ºÐÀ½Ë‚ÆYKŠT)Y»ÁsGÊÓx[m@èál;)‹dž™æd+‹Ä·¸jµÝ0k²WÆšì‹%b|¨ö ‡MhÃll`ƒ-“åòu>¥¾�‘3´ÚG•úÉNï1Úçfêalm +q³ëPN¦z6œi­X9%§dw×âNš4~¬p®gø”³C^[%p_(äÎÓ)b®éDr�³­]ÙýN´� ¹à¿6àhÐ2dã>^ÁÑG-K†‰žÈÉ’>Õ�!@îì«ÙHΠ$š÷çÆË„LⵄÜÑ·P†Ì´°œQÍÝ…äm“§Aq‡Bµ5ºüÅz†]¨sq×› ÆÀؚ̕‡5ÂÇOõÔv8|ñMÆ¡Õ vÈ^g´R‘»!K+H¾òå$fZ倶õMÛ‰ìáŒ$ +}22 BÞ §Ãñ0©;ÅÖàÚ}…J˜=A¹—Ö ü­ÁãpòMk’]% +êƒ´Ñ²á¨øi2x–×¶ðá/aø«Ô´™“E�Õ�ÑX$”Ñ¥°f²øµ‰ÚhZت•ÖîQ> ^ý¬¢ rñdâÆŒñ¬°}c.Äaì…=nØ+Yb¹�µ\2{›gù �d,ú\Æ}F‹7#x«˜R΀cžÉ$–îdàmáaN½GäÕ_¤Ù@_è¸ü6ê%WN +*óŒ¦ÃÙžŒ÷>%γS𵿆 Go vâËÙªÃq—ÅÃŪìƒë� •Á¬ ýç΂8À”úýagÔ•¡«S�8K´Y^/‹qX›Â”æ 9áb=3´)åR&ƒN6uøj#d¤Y³D…iº.w:äß„´�mtõ/bã�6bÁÆ8“Ñ–yФi‰?$�‘àåR +oÞ¢Ÿ ‚Ù1œœQ½ôM÷£ÎDÁôù__TfɾH:í¨©§úEëçË€©� ïDSV9”T×$[~¹°ao´�0˜7浬È\ +ߨ‡'v¡ê>À�#ê6 ¿–µð}ír"ßâÒY”3_ïÞ�¿†ƒ³}¥°”@™7ÞŠÁÎVŒMfÅE¨P>F{�@kú©x}”½Ee´;.pæ´ì5óuU?hš7ï¥mÂ){Í�õÓ'/ȾµD:‹gX/Ç}awB"ë5�…Üþ‚ÇÃðï`ÕPDͧv@m?§z.¾èîÄRLå‰Ü[¾<’¿­í"íL²J�’JÓ}K„ý8NÅ*iU »»k/Ú˜ßT­ùL-êå�î:mªŒÝØ~d©ŽÙ:úC +„õ®göÜt©5ìCåâꀿØ%DDJä¹è +‹-·lç…¶ß´´<¢ÏÓ˜N0'¯nÐêÿFÊ«–2„:Ê ,‡S16Y`êê»›¡ÓMÑr-g»ˆnç'zÇ6îbDñ)šžhã {ѳäÕ�4À–��ñꃒòA’¢ÜŽ!)8LôQQEùÕl¡¶Ô 5'ôüqa¿¨62v7ŒÚÇH˦Ûé²î„’æ }…Ðbü¶Ÿ´å¤…Po“l�0pVϬ9VèRÿM(åGœ\/&]YÆl㡯 +(ÿ´äc‘'NFtÙISã�0.Ñ•ïÔ‰1ìò±H &Õô›õQ[ܦýpdZSôX/PJ¤_PG“UËOÙdµy}”§D··P@�ž&ìW‚g2dý?“ 6�ò~xä4œ6ììa ¡ÛM„¦ˆÏ¼PØ+ÌõÛ¼­‘Áô¯€ó¥heYÓÑ©æyé:†6L\Tí{ôiýKæ#¨qjd¥¬RÑ5?âyM± G¸Þ?+Îóô�iš–MFLÄÞTB±dFåTÿÉYRW×4’IN´bÊ^tŠR›Ë˜9ßðWŽy¤Q�{yªŽït•5FËÁØbž àÂ%KEŠÍ ÐO±×oÂŒvÛ-ª“‚ø‰'ªäÅ ®ú¦òˆôê ­É‚àíAŸ[X•AñÔô5;‡‘�RráÞ(d#“‘ÅãOÉ™ä¶Ü ‘­úLõÇG"nÙ­+Ý ¦®ÉE9ò»Y~Ľ©P]b%׸7ÕÛ¿ü‡ºñŸzßµ?êÀùœmpÏ`÷¥�X‰#jJëÔY£á#É|ÕpwÜ¡ ²¼oêäg°Ý½Ñi,SW½‰ w!Nq£�†ò}¯¿¡©ûÔY7ôˆ=S§÷Öh”õ ŽVN¼÷M°22lèÝ%ìl#�ËÊ?’”ÖgêlÒåßmD )Ué¦ï¬t¸HLÕY>š+qÆÖ‹ÚF‚+‚�·9²�¥\1¬/ãÉO¹Ú) �±‹©/*/˜:NÒ6!—7+<7i ™}·Í0õMÓ_^j3á»Ý«Á�”ø«Í"úF°L‡ä3"bøÖÙº'‚(‰ ’OÆ$NTo­Y…)7Ü·0ªsÔŽù¾š™9Ÿ؎û¹’ÅFqš›´‚a4w À.H «#þ(–šüÛ.|l5¸YìÊ×ÿ`¹"¡’;ò°iàÜú 9Áé»>¡[ÆÏ‰Ö ®ð†WÔ™…w½ºN•}”÷ñ]l°öQ3©|`6ç­Dé2s""©–Ö¹qÂCÔ4OÃK"¢kãÿ±øŠög¹]ã†Aœ…ZBZ¾£ì¡òTídv'§Ù´k8€ÒécÀ«e¼j eq7ÆN8º¬í$q‡p°¤‹<°GJ@ +ØU 55gºB¯a`oéVñ_„0Ü€R+i4ˆàO¬›"."�ΰ׿EÏG퇘Lñ0WRÿ&ê¤ÔG,ð†Eļi«¢VRû¯t&˜âi\Åk’¥ëR<ê¼nK'^U nªÿq/ÍÒAÜP:ˆv»(˪׋‹Ù×rËú,ïö¾R.hW¢Á8dÚ‹Ú¡%ˆ§]-EŒ¦fOGÅr�§}òŒÎ}ƒ*BáFvª†1×>qßú/ ï E –ŒÎàéõ¢MŒ±#ܬ:íµ¹¶%)¢ D+Qûí/ §«â¡©…wDE¤Üï6ò{ähåÊŸQ#¿ôŒÄyB#§�²¹IsØ9Ç9í”ûè'8R‘!�šw€¡¹%‹P5Ù"5„‚zº%±k !î €c«€H} &—ciû¹ 5˜é ÀCPoxzºG&™µD†“у†p)¼^­ ��I®ƒñ&z�4íhs‚‡èŽÕ?÷ üŸ;¤Ù\䓦}à3XŒäæ³É4WsüÁîk]q3Å×R�äêýlãcö„¼1-·H¸p,ð÷GËq¬êô¿_ôÚ 36v‡Èu½Œ>°H�&“]äG÷¨$ –Ä1a^šôsÇù¼vÐôˆZOçöâ]è Ò? ¶@�ßM&Ì A5°$‰jBæ\ Z�òã¨_êAï½¢D…B`£…�}²Ig…æŒÉ9Çu\ÏÕT ôÅ`ú§�›ÇŽ@qDñ¯tï°zK¾ÞQAÌÂÊò›áy×µ52õ»°Ëõ fþÍÛŽ[ñ¾àñZÅ@qjdƒÇBjb†�W— }ÃÓ¹œ”FJØ÷fýÚ×7†„¥QÇãíåy,>�C«Áby\‘ØR¶á4$Ä.S;£ˆ•½¿¯µ³¹` „+_9ô8‡ +^…l¶@U’¸“çÁ‡�RDêk!C×h)þ£ÇžRÔÉÇ´éˆWo6ÞúV€‰)öZ¢íãc¹•vs$}X�Ë Œo|,àéÝÙåcƒ˜+�™˜˜òÈš T:5ÚÒ”õëySB*[É ¬*òá[aA‰?nÌè Ë,F"ØFÕºY!·eY”OäJ}Rj†ž<^Ø$b�q¹Ú=ŽÜ1< ô.áÛröªâÿ:£«ÿ:+È¿º„æ'È踖Õ)¼F¹-ˆ|¦ÚŠ,;�ç…)o“¼Â�ó¦Q'j r}ï?ll]¯³Ü¦d��1b\,ìkˆŒæÍ¹;Ô¿½ 2óÙeÞòŠ\¨"VŸ¸„ ×ÑHU·ÃlA6Q±íþ¢ÎÅ2�(änþa¾1M!×h°x¯Ôò¡õúôÚb!ã9dîxµŸ´š�~Ò®�Pd’‘X.NµòtÑ-rºÈ�³m‹ö I…!z]G òOë#þYîÐH“â*Å~DS�qÁÉî=‹�A€•›”Fnf’™¿“C–F¬EHRr¾²јQ½Áœ8WŸ”ãq#gc�‹ 4 Q +�+ŠÕ¶#R r¡ô†S[õ‰'rØ'k®¤5å#ΙÁÿؕȸ< G+ºÁ<Ê f¥‰.}uý¤Òíòï ǯy¼§Š`äâ«Wõ¿^ÏšY:Pá±`ì`2—£/2“ÔBÄAê!á`ä!â¯?n5(8 +Óä2WŒ,Þ®XÔ-�™ÖÕ �#-JSd©d2‚…ï?¨Ñd‘*ú\7ùo@Ø¿þX–Œp¶è³]ÿX¸t]ÆÎLÊ3�Ñf;Ö6ø Ø�Òþãž 9Ü¡0®Uh>Ð kÞyH“!�e7wƒvWÍ�Éa¥~�³LÅqdÞy +äÃzÈ7 cá*gï½7fäâw%âõP÷¬Gá²^p 3§x¿½È’œt yv™‰µÏbrÝE¶‰Ákô¨J XØ1S õ4HE0M‚Œ\öH ÅA +²Ý !’#¨© om–W@Š�”+Èß°¢ò™”ÿ¨�ä»ûq‰²g`Œ+È»/cŸ�ý²ªÙŒ¿{³¸Í—íÌ Rà +ñá*Z‡†£–šË¬R${¨ +7»9þ®lAfÒqA{”�*âI¸tF·¬œ;J¨pí¹`Dý� ìê¸ ˆ0}œ3fßå©Ëǹú—c·nqÐ>Á:E¥%dw'Ë +ØâW *<Å„Ü4¿¡®óÒ™‰‡N�gÅÛ�v�È*5ã&³ 9ÀCÖLÑo¼Üvê2FóK±˜7‡ð´Íp>xDt`EX¿�E¼[pæ"‡ž}r»Ò¼Â#�dË(Of•�þ)#_ÜñXíB&_&~+C–nÿz¢ÝŠ'�"bÈÿLúÌÇ£*¹3ää….mÈZ‡Ö=Î HéA.cÀ»P��2c1O W 'sÈž?hqlÍ!ë|×’|?£¾!yÅzüJü¹‡\áÃi‡,”é±´p8àU¯£!T+Íÿ¯9�Vù D–Vx½®PV—— µ�[‘ Ì�”Oƒ…¯!2ëc’&²!"ӨŠ*¬0äÛ¦Ôq JßfóuJÙŽc /{IÐx—åÝ×™ÑÜ�Ö:ÌcÖûa×ùIÎa +·~ê)Š`+ô0hÜᘆ‚ÈÝv„ ôþ\„ Ò��È’º%Æf¨y…—?�.öz.¾ï.�È"²é—Km�Û§ª2[OµŒÕå4ybG‘QC¦°¦#  ì“Ü� +€Â©!²§¸)J óe¶†D€!dx rH~ÀFþÖ-P»ÿ:åáyc±"3¦¿óݸ�´“Á¡ö¥²Tóõ=GH· N˜’‚‘DVŠRèá§iMyæ+‹êK&)އãIå7lè)hhIt=úëíj>í?:‘Ÿ Ç�4•À` Ç!“M "üIWxb-lïÕ(>½_�¦ vÆQJ’þŽõgY$"bS€E ©¼¯åðÙo`{éÞSˆ/Ü„ÌÌŠš–Ubfyd'bHp¬÷ùDÙ¦û_ø}ö£ƒ­T¸_ÞhÐýʼ’}ù.€ÊÁa ]jû9ª2yxÒ6ű+èÇ é›W éʾ ùL'¾2énÊÝ%J‘�thÒ< !³"92z�lÝÕû©) `F‹S¹ +@ö§N0•tS¦Éò™f‰Oð¥€ÎÅøÔÙ?Vå’ö@Hç«Ò‘%%4°p¼ž0 âg?N¶¤gè“E(ŸN‚(­7o²¿e$:$pªóep~£ÊÉÊZr5Ñ3™P·b¡{&ãhK¤NI4оØnB<:JºéÝ�0‡y°XÄo©+¢áxW•ó½tY¦ý†ÔPäñŒÐ +±4¢Î‘‹0Êû@·(ñØ�Ù§߸Î�PžnF:€ûjp&¨W3b¨Ã²—ζÀµÀþƒNLÂé÷s.²•ƒTU_ÀÉÁÓøÃ}„a›Žö®#dAº–ÕøÖ2˜ �/;âŠôR ¥Îõ÷ïN‰+�±óíF‰iÌOüs5)Bæ×S4ö¤;¶$ 0?i5,¸¢®”r¥MÆ�’œEi%/,Ñ#tSJd€Ð@Pú©$%‚R¥ß¢D§‡¶8šï–Vi]*4V’ж!Ä™5+¹¨I¬´!K²õœÀ%ɸÔ{.F‹‚jÚDx,ÌD^ǃï·ÛÉR#jU]wXM¢«n…òóõS�mä&¸ 5ë _žÜS›XÕaO‰4×@?¹ºÐGÀX‘ äeXñ“—×'Ó|]ŒÊ‹!DšK�� Hõ¢gÎé¨dµÖ÷9åXy¼Ç¾óÖ +"Œ¥Öê•Ä�ÊS21Õ…8ÔKp+\" s5§N•ù³yD¥¢-Xzƒ{ÅEcU�…äνy=!ôå&MToøXÏ1þó�œ„OÚ@õ®*h¶ÙùÚf _ +&¿AƒóY�¤Û\{tâ‹ZÓšCuRüœýŒL;�)-Å^ÀŠÿSÈÄÒZ“â[Žä�NÿµÍÆ›6Äì¢?/TðÃÉZïš»p3÷¼@ÝVXkk£q!fJ%øGí¢2 kt'ÓÚñ†EªáŸö¬®ªé|�('+ÁPQÌÄê+FB”ƒ=?iÅH÷>.´ël2ôÑþTý-ëÚ�P0°p¾¡0;ÈWZ'¢Ü„ë âLx‘ݨ-ãyÃÝw.r1 ä㲕:�¶ÐdÿÉŒJäšèøŒ#(°°–Cs¶Ëv-fPN,~f­v>óV«Ðéýb臚¿ù²�Lû\ypÈ�„5‚’Ð +%@vM¿ÀñÒÓÓ ?(ˆGŽŒ�¦�)!À/ +�ËØé4s�®VimC“_ù˜9–$¢Iˆ|w˜7cÓFÕýܪ˜ˆ ¨Þ‚ âß™ÓF>ûhAö€þ)!·ÏUÚ²Holñ‚xWžxš~À·­aÔ°Ù�¿î¶éIçCê%ÝZ;£U¨=¾4¡Š�yôßÙDªs7\ÒH§3ÄfgY2* ÞÅ„”¼‘»Sôˆ\Ë$÷%²�À³\l„ +ÿ½øS»Ä´+Þü'ÚÐð<ÉK‰WÃQ?t?õá-óÌÍ¡ ,8ÿupd/£©!)ÅdB(¬'&­©Ç¬ú)E|Ïyóø 2uh²_¼@R«Ä£ÜrÞ%Z•ý8ʆ­àÄ+.aOܤˆ´ZØôïx’­íú±÷¹¤ühæêg^]Ë;q ÕóWœÜ 6©„8á—»%2÷ÓÏe¾eKÄW¶Z˜C¯_ +s,EiÁºHvÍÊ�çõ€\ÿoij(®¢Š 8ñøóI¸ÌÜmFUQ1øBÝG_ôÐ +ŽD‚DÐ Š¹„€$8¡j÷áîç„ hÆ«3éÏâÛÜbìFÝ Ðjø­ƒˆÉeéãš³8îĹ8óçAÚz¹6û{¸tø¶)Î - ¥<0/t\2yãÒÖ Û›Ñ|wÏAÎDîhÆ¢H ÜGÅo�G¹‹Ž7sgÑv�TÖN±¢•ŒtãÚ@ÔFCCn“RÇŸ-“§‹E"Q Vuv\ËJÓù® +¿”EŠïOÖ½¦žg>KQé?ÉYÊ)ÄÆKÑÖ?2)�Pd›šo¾«Ûü‹‹™ÎÞÝP‘@²3Šóƒj‹ÀØ +Wû8 þÈŒüÀž&4ó¡Êp™¢ÔqÓÍD�—Q¦Ü„9 Ù%ÁÎæ$?4(:mÿ%h;ËÛZH$å™ßù3íú ·&Z$Oš1 Õ¼]ÀÛÅÒ8ÔPMÜDäPÄ)|ö  Î[øIƒÙ̹Öâ¿î.H`º,ã +£!àê¿"¢ï€ŸL–Þ»)©Ó¹a/ˆt!º´Õ|ç¼1$•€Òî%ÝÃXÍ)T&Fôí]¶Ðò26*ÿƒ¬\_&¯æw8¬`7%¡Økˆãx|*W˜^›n|]¾s¸Ñ\%†Òtû𤛻S¾B +Dð×›×ö¼‚¹[¡þcêÔ²ç|f÷z#±†i¾ÞR†ÂÏV öÆArýx{Ôþƒve¹D3+@y{ ”Û¥àAØ.òvJíxàÄô+2T�t€B£ùŽ+N�ôâô‡MŸÛõ-íˆwC‚ÇÅ“ŽÑü°_]Æûo˜Â®Ïf ²ÇŽ hóÞO…‰ÇðñÌ`|�Ä&Óo,tƒ‘û8»c„Õ:ä0�¿?þnÑú\ª€&<_å~�£eÚ? ~|oÅt„EÔ±æ¤çMWù´ ²ê�2cs[²íû÷JƒëÏ CÓcNfQ“íϱ:ð"õái�PD ½3£®Zï3´P~X9¨d‚ùa ƒK2kuZŠï’#¾œmÌ["�·>wÙSÁ´Í í¸d®´;EçÆðòN°7Z†í]tØìCÎ-àìxjÛ@(ž1áñ§ŽLÁï“�è¯QxÛ=¸KTÿ&�` ouu,Ì£ÇÕÑèiuæ)ñ3ÊX‚lËçÃNMŸàƒZe¹:PXÓOôŒª³&kŒ®‡ƒ¨ [ëȶ×ÜZiɾé„À� +©ß4šÄÑ`vñž~Ý)pÑbÕDrïÉÆ>¦¥¾ó{í'omrÎÇðBÏÕ ½–\ü¨ ¨� +ÐèÅMÃâÙ§0¢ 6ÉsXÒ–ž9¹w,¼¶õÔý~©o*O¢–FŸÅž6Âz= õ�ÈÕžR™!PÌÍ(�•¡Ó òï42� +b€¹b’Ÿ>*œBP n šcƒf,~ÓX}LÌYã÷RÎÖ±ëÜUC"ðìêy!wÈ¥³C”7†Œgæ!Zsàš»^ød’À‘傤–†«Nê߇dðréÆTHW âªîõÀ@)PÁûþN,{�mÉü�¢ɧ‚†9cb2&�?Œ÷A1™§‚ ”c¥¯éùTÐxpÈiL}Q›¯M`�`]*DkÄ6�ÒðíEýgY_„5‘Æv½Pôk‹BÿgøèÝÀŽ„.Uh‚¡g®‰á�¯¯ +F±[= ãA­ +aýèUxÍÞ‘M{@Õ “B•ª°-Û/¥„ÙoSU�µ¡ì>k¬*äŽyØk6ìQUØÆ}ø"¹UÌPƒë8!†+ë|M�ð�ªB"�ps­€ïI„ÂühçUëðÀØ÷NÆ–[cz½ØºñP‡3Oçß‘’Câ€Ó8~UAò�¬ªB€5Û6’¤-/’ª<ðd2?]Ò�•'« +�üØ~Å0^FTÀRà­sNî`ß'Zx :iG ˜lö–_åH¡Ø¯YèÒ Éýýøõ*Œ =…Ư‚Ÿ¬ +Í«$_±xÇ1B‚‡ ÂÉp`%šŒW�c#=Å€ ¯–†QìÙÊˈj¦yÄìW)‰oÝ‘‹„9xßh˜ŸŸDAÆ +Á­’üÔ.<=A‘èÆºÖÝ ‘.*:^+žÓ‡k“èn­*§»Üh¨hã·•bW–Â3)òÅ„¾›ŒLý¡öçΰ-oP’�¡Hôö +æ;ÜÙaGëA�ÂM¯Ð1›QÉWàHmø¾‚ÆÖa] e€¯°[Ô(‰€¼²é‚’ù +3¸ü%_a(vI”DÆù +ˆòQ¿D,¸¼Ò]3úp(tôW˜~úó4´FX ´ØìØ@3¯›@…æ¢k5.™ '¯ÂÅ*„%7Öû"ZX Á¾ ±_Xèw—wJ°ÞœÐB™�QJŸbéì­á²e£�ÔÏGkx|MæŽuïãÓû|òˆ¡>°Ð†<ŠŽ3T@eºÃ¡?ûúÀÛQéS2õ¶«Z(¡¯WÄܬÅ× ©}#¤nwmç ;Ž�vXü\@ß6 xÐ8ãz5„ܰp¼nÖß�²T0ö �X Úw“Xm,tØÀÍýÆB²™ùŠ äL…ƒÈÝXÏ3‚ûW%TeV­á4Yps«¦´UDN"†t#šˆPÆSçí£m”ïf!ÎGBK‘$ÜXe!ó…É. –RZÿ |ª r( c³Ã+ØÚÔLQ²(ß!D¥,`6ÈD@ÐH6£MB’ßpQU7¤ä>ñȃʂ¡·MþI§²�xå3À&�AˆP=_B+ 1ÐÄ6ÝÚ\â.H˜ÿ›?Z-f¡e�˜\!*¼ÛËÇ,$@•¬fÀ¹*’Ž'l¨È¹{ ¶~û-Õ‚þñYÐ!Èý"EsÍÅ×qoƒìYðw˜=sÑåöÃc´®{,&ôj«ChÒ& ;˜Ž³ ƒ~’ŽR0rñ„B?'Ù¿ih#„*pñÞì7 ’{Y�1…¬è㊺/´E«ic7E SL×Îr;TËËÞ¯îᛉ,ˆÍSÄ�z¤Ìu¼+ð<m^Ðe¼ü"Îú‘ÃH彯[•EæV‘͘,™‹õæp2•äñ€3 š0– Ê<–b ÇÐiáƒ!Õý@"~ ÃK3\÷€èA¶ñÇn ï�ÝħU ëq¦«–>nRjÁ~ÊõŽ Ç‘¯·¬¶{-ÔÚý ¥À,r¢Û ¦6AÌC¾(ݹš$T‚G¸á ¨ÃôŠô�t‹ëCÄ‹r8îûu‡;X5½Bï[›¹V²$¶¦n™ŽâÝGˆÀ p(¤ñ%r<ù€ƒ+Ïë)Þr¾q ¿ÔŒ3e½ÁP™ð}™tæò�áà”ƒí¶›rÀɱÂ99Ù4È’è^V©ˆ¦T|eë¯çˆdÊ!0Ö¢c£/W<&Û©æ"[r¾Ÿ$ßô‘ü ë”ãàrDä#ÁÈñVÊ^sa,rSgæÖ~A5=Ôù šåí%¾Y¢SeæN�úÏ7V>…¶ÉÛ„XPsºa Cî,~>¶ð´�,× c¬8¿‡pæëûí¥8R°r $ì5ɪ Ý*& Ðñú´Âù�æÝ¬«)%˜smıew?ò¶0�w‡… >O"`5‘å( ºú†#Ã3ðoD&c?.\O\ß9pìˆDÎ7¤àÊ7ª"á–)À­*t?¨£VB’‰!†l?"z�}þ'ž¯ÂmÎÄÁ5*ˈa…ôõ)nf¸q¦Õ +ÁM’FÀ˜D'gL@ â�‚)ð ÆéÄþ 6z‚PÿÔˆ;)„°µ¶lõ›uðÝ1¢Bˆ�S‰€J%}5\>YÄö;j|Ȩ[5Q�K=Š‹ 8G¤â\Qø„•w^dŒuG ‡=NnŒY6ˆŽmÕÞŒ*Å�°È‰4bá¡�wÛ +œêôAkì–×[ÑM“™",éõE�¶@ÖXÿDïZ€ò¡…7 �AX­'6×<ÖÄØ�¤k£FA”Š—Cé cÚû� /à:÷ø»7_­Ûº…nø´ ëé›u¤zp‡Øåæ·råƒW+|_ €KÞ†ÈÊ%tn~Y¸�éý”8ÏP¥Ši:”“¯�(•WéØ!½— RͤrÄèG â�†j-鯗;A뮄1mr/uÇ&�/ùyK4~y­80gËJuÿ•ºzkUŠ]D)«€5ÿ§î´¬Ôe ªëm@ó‚ô¤õM«¼°¯µÎÑáA ‘@›Š$ÁYW)ý`�ÊG­ °Àó:E öÇ­wðŠPn'íøÁ�Ñ],š9L˜/�sQi|¿Èù�á×bÏl ,ÜSÁsl šÕ=¾ƇÃÍIJðá ø!¡oºÊê)¼œ0F²µjçéݽG…µ¡<í“Ô$¾‚ŸK˜|Ž3ƒ|É1G _LÆl Êêù–}¥Wƒ²XáZ)ƒˆ”Ï£gdGè-ôï~O¦´§žöA­€Â”l+|ÒT'zcó¢ÿM˜kA§–KN„`ùÓê®÷c-¤qSeÝ|'ù2äK@gØÈ:Ö’ßóHì­FãÚ¾‰©uñ/Œkw³(iœ/ŸC\“-¼o�øæYÁáã‹‹œ�‡s() +æØS¥{y%ªfSÐ_¬¡²¶x%Çmkôûa¯î‘!*ê†`s½0M@F‹ÀûQŒ"cŸµ5yXö¸Ì&¦I¿½‘�I­-ÙÕ|t�Û� +� XI¼mtðYêO߬?âÔ†üW�r¯Ö�PoÓGz.ÎING=’_°¡È$7z¯.Ò÷B.†Å•—îxKì­;R{U!ˆc²-oYx%·v>Rõ¡`1SÌš&n$N$Û„Çá„çAúLxˆÙŽzÐñiPºZø®FKq8Ò›Êð^#Êá뾈ðõzhÌÄÅIJ3úÏÔ3‘~CÞa>Óeb1¨ûCL¡Y‡9+Ôþ†X¤$Èp«KHw–™ÌÌý‘Éʃ`32{—KvA�:ÎÁ¥. €øòS#åkŒYrâ\ÄÇ,²NXÕB ÙãIÄlükÑ úÓðå#šÑòÛù<`‰¨éºá¼ŒÉÃø=¸›Vݺ!G¨ p¡¾#z=^;±I\CÁM¢TŒnÊLŒ-fFôÁÒ種ÝAö§4�øÄÒG‘fÇŠˆ[¢ucùÁƒÂCdØ0‰Î•z NüÊfs§ª!«f¥§� ¶Ö‰÷l?Ƶx”�BG©[þ€Ñ'ÉÝ:à˜ý~´¤¤”žq`p)J6ö7¢UET{ô�"Uë Lo‡O-i´�Š�­mIºmœdHÚOY»>Y°ûûßHôUïC£xOBÉý«Ú¸§´wé€F!/$ Ú]Ǻ'†Ä¿@‰ƒO¬ ò#¬2…!6ÜCÞO¶ `se +œøð›dRÖzÃ(6BJ~{È•i”Ùþˆ~¾F*ÝùÔ©’I¦ªQ.Œ{ådÿ!“d¥åo‡|tØ~a•:£÷EÑmÊpsaJ#bxlÉqnU�ºôk1`ñ3�½ÒÈ7@¦LMY^#>æ­Šô1±®¯GÔÏmЃ£ÎÆ›‘§cLBÛÍœÄ3 ½Ý#]¾Œ5¼]C¸~�©Íؤ4“€¨‚™‚+ׄž‰nqùèÔ�º—ÎÑ`ÈxÖ®ŠS0&ŒAÍ)š@‚JAñ¡D@òãÀ7(¹©ÄÆY—÷Þÿïë/4®6’鋘:.ÊXZv˜¯'7ªXH%(±½ë»`t£óÕ„‘v²² ŒEO|X•Ö6­öÇù2·šÖÕs�è+�š˜O·¹1L4ÿU„Ç'÷ÿ UíÁÈ"'‹¥ÙI1 W¸žÕ-5ÃbèLO´w º&<Üÿ°¼: Q^W}Q·Ú—tÊ`¸S6‹þ_\Ä3+¿¨²é‹¹"ÃX’[�QN ÓÓ_¹¤Îä>h{¬;LÖ{ž—<£ZÄ/¯EËÍŽî·+Ji~¯'A +•¯^Â8µ’,ÁŽ#R¹¡Ï¦‹ùÐŒ +qÁ²ÍÞ†ÁÆ‘¥æÜüVÂR(-™j“’´ƒJ�p)'âxŒ[d²có€8ʰe™ñ�&íö³`PClêLL!ψC{| '³Tæ�Øk,ƒïÐvBáG¡Lþ“ÇGºz(_‰ˆÌ÷¦h]™}8±L¬q8jJ.ÆÐ7[Ѹ/ÈÇE?<ÇÁªCÖF«‡%�‹ k¸ÄˆœãƒQ¶•È£4´Z§sˆˆßYƒ1¤Í««Gouýó`>>†ŸBo —bpv`¬ábK£÷f� öå]€©¬Pƒ¯†ë׎஑Š$ÂÀæÝŒ†«b‘†­yŸ('޲|•'´ý˜vàw£NY­áÈ« +ÐÀð4PHhÊû|é7\Pk€Ê{¤¿ô‘ÖÀ—À°;EˆË|‡Kp‰0-ï•A#²Ãµ<Ñ�Û¸—i_t˜Ø—4ï·±º8w¸ 4�cS‡kù2gŒÄX¦Ãµöá´ŸS õV HcfƸÃUöÅßïóÚ᪠+¿â°‹¼Ã¾˜ô>ÛŠªÃµƒ3á*ø® +_΋8.<è¿.úBöÔ�à—ç…CÛábÑ Ã$¼@Þá +¶n B"o‡+–[ûñ×)”FûÅ¡©¦Súˆ˜Yì°ÛãT3ü½®‡)ˆo¾‚¬WœßìQ°[?wTÒc³W<عÔÑ‘´…º©Ñ}øCãõ½tŒd]@¤•¸½éúG‡W#Ö[·�•…8ò£e*òÐ"Gqj¸î¾.ŽN54y;¢*ï/8Sj!nx•�.R\¹b-†s+.:�ƒ2�6¢— —Y¥Yæ Òs³üÂ%)7—èïÂeÓiÈ_¸82KváBlmŸú•APèñ…Ë1šCîÂÅð„¦ðÂEN»É¿p \ öÂ…á0e^¸/h¢Çí×Iß <±w…ç…«kQ›Y¼p‰œ@ä/\˜±€(æ#iÆþý rKúµ_­ÿ%ÊhÉÒ–4KOS3‘E~vÌÄžkãæë Uí#�óžàÖ[Œ×àf/Ó–È•Ûjç3,c±p­4ìÞ¶YÙ�&|½\_éš,içZ U¸D =Õ9{<ͪ. HÝ·²© X-\ñ :.H&[2é‰nR.Ò¶p±¯ÉO¥…+.–k±ú,{ù-\rlý?þƒF�%ÅÂ…h®�8�c�çŸ!¾u—šfVbçsþ[™?¨:B¦ˆ³{çhi½ ÊÏy)ÑÊ1¶ÕÜ9^ú¹âñ¼¹súˆ,ÏÈš’ +Ƶ�õÏ-ì:È”Tä§ÍZÍ4±$¦,3 v»�±û½î„žA6…#&’zߊqokØd¨ìƒH %÷�¾¥HÞ=§[Jïì$‹p$ïq�”A/MQ¿Pö|Õó�AŸ1A§LÅþy5îëðßa4@¨TœzކèË1:Êh ¤ÊøØvqüŸH™£Ö–ÞæRÔ3í«“–¡Cw˜K\T_ Ô )…¨X>…Žï¯ã±M…™àcŸr5NÔ©EO,QÝüX bOi•H=‰õ±�³˜ü§$’>4ó—ãO–ùs'kKAhð4¹Ìˆ,é4‚ ùñ9Iß`q0ÈïF®Tè€a†ø­èA BÀ $h¡�‰‘I¢.l" è×Á,QPÞ}ßÂò9»Œz/7Ð�;ÚRÁä—÷étÙ;u+ à ~„ž‘­Â�ìÔ˜0Çõè²óã­5Ý¡S)vc‚ÌÝÓeþ ‚N#þ [EnÕ(n.úM+€6Û"(Æ òo8©¾Äü䃎Y»¼“RŒQåBiü9éßP÷Pêßàßþ R:N\›Åïé¼Ãõ˜á+î5ÕB×XÌÀƒ¢GÔoØ0?^jÔŸmP ÚÒÃÖO‚oˆ3œ§–Bwž}Lÿ æÅÁ;r¨ç´’nôM¨né¹ ‡á“£¾´ËxcôÙ2鼿*8*>Y°d-�ŒR %yh±Íªâbe “ +Uh*ÐÌ�²RÄd ÷ûoJLqvi_QÝ¥ $Ï=Ñ +4â3œÚÜDM¡Žb½Tû±ÃŒBtŠ`6¶î½®QA�D¨�—¤ýÏQB„DFd$’™<@p@‚0Ã0Gb1ƒ„ # dŒAÄSZ +Ã�1È_‡Þà/Ó —d¦j'¶9Û"Õ`¯+¸è=«” Ýæ(l=ç(ã0gëŒÎs(Uó :€¬�#X)9+„ÌbYÇ +‰7‘2ƒŠ F12‘ËTW¹>G Ì'u·®Ö YÙ*%I¢ðÝaÛrWuþ$ѨÓy \Ô2­|¨ß³Ͱl‡}OëÍ[W´zs§)Úr +”Ë!óD¶¤8;² ÊÐ^Ç›¸äLÕ�(02§1YAêQþu¨‰ã©¹ìÝœD–­†ó¸¼:êéÎJ.<ØuV–Àß zƒ+yk°#vóXñ¡¤MÑé¥Jb‘¤‡uP‹OŒ-@·RTzТ°M ·ø[x<–¾ÁUÈçÕ�¿lYÀ]tæ‹^Wr`3°×3—é{�§�oþûfT`Nwb»Æ*L¦P‡µ¸)vÙáo é¡ÿß.ZÆ.;O’© +R€¤×¨À/`?Ó\-–lAeÈßðÓÅ­ü qË΂Dìcûù’³¥Äš "ûÍß�2¨Z^ +s•ö§¿�‚z6|¦whR"Í1J`ÿ®ðã@þfUÃ�2¯øÚ\éoX.ÎFÀzRn(÷Œœo¿jªó7L�è]ú§Ãï¤Í{àÏSDdÞî‡ÿ\ž¿á¯îÙ™¦�%¨˜!)ÓV÷S`ý —6ß¾ß�ê>aùKý‡;¾íoH"L›Êv I?Ùî®ö7P7ÓšXý8ã�.jrѶ%z×fÖ ŽÝé–(†RÉž)ßëÀAQG#•ïo ‘†‡f•{ê*^ÊBÞY�{…A€R9”[.œŽj€$>(Šëà×ðçÖÉËïá¦ÿz´³SD²"ºÍÑøoÀò�Ô˜™¹ê}d“€M”È”dJ)‘1Ö¶W 2U259?D¢|˜Û +þ }Té5=¥R%U +RQ%š137<×#¦˜Š+×�…à!£JLNOÑÑ'PNMI™|"1¢óC„Õ­:�©½Õí.>F +ÉDâ ÊÄ ii”DÁwqW£%©Y ¬¬œÝ Š�@&‡ÙDšI¤2H:#�©ÉñÂ6ÅT[afkpuz~„‰‹üˆ¬ÂA‘LM$F0‰\NBöØ‘£pïnæfˆéicÐfVâ�®¾À +t`Ðãd¤ä¥¥eeå¤d ��‹9 ic¸òÚ°••á‚ׯÎÍL ÎŽÏuÈié)ó?µ•¡êÂ,o)(¦¤œ›žŸëPQ…¤%§¯c©÷©I Ɉ(¨Gçæ%B„/läx¼ä…R„.­«©Qštù¡8c΄ˆ.*"%˜ªK„‰9ƒ§©«­]ºX‘2ªr‘P][Y‡ªø‡ÂR] ÂEHL%£RH—Ù`G!_ +³¯¦%¤S®°ªR)ýÌ”ÄÀ�†�ÛÙî3Ä@õ ¨æd#b�»ÚXÝéh‚S TÕ.\´lR:ÞðÃC`–Õ�Ž®;x~ˆŽ”Z¸xЪiè‘Ê·#=!ȃC³‰€õ ¸oxY~ˆŽ”› ¦X´)ZÐ8lœÔ}BEȨi_yq€]<$3?K©¨²fù2CÁÀŒÂñ$ý„8†: 9PâäÔJš¢$)ª.²5ô él%uµU œž! 15âx´<jŠzÓTÊk�@ƒËóClœÌü,�rK–-×#'~væfÇWÈS‰“ÓÔÕV-Š˜t•WÛ{ƒŠ>„pŠš¢ª²fÙ2¦¦¢ÀDÇÉÌ%¤R¬¬VˆòZ ¶)Zô2BédbŠzK«–-|y=jÚV_elszàèQ©¹dô´Šêæå‹™ +JR¸èÂáÑ €rgh©”TU. ´²âø!AÉX`#N, g£GIÌNQ.¬«ª©SL›ì\�˜b ƺpw|„Š�”F’ˆ–žRI½Ò,¬xЊeUÕ +ª”'M<5-óÛ®¬gmW£õwÇðÑ´ç/ç¾oç4´/¥£²w ;´sC#“AÎ2a‡~vnh캬¼V臇+Ÿ]: +òy1¡¢M;+ùU*ºòàÐÄÀHÀ† <¹6mˆ®  +‰èåj"Q�/O®í „*Ý„ êÁ©‰�‘€ç žŠ5À´æ¬RÑ„£¦]Õ5*(ÃN�ÌËŠ?Uò!JzOl +�ä‘h‹¶b¦¤”Š€vlfšt•—q>–l^a4ôk@n­ìËŠ?aƒzphb`"D}­0í,bzfVj (Á »\±­©l…� K0U$â\üš2I‚ÙxÐ�kxeØMGW›§~åÁìÝÞ Xn~’†r +ù¡ƒpF�›6LËC! õàÐàl‰¡½ÝÑ0ä±f’&PP»lÉÂÚA•(N<�H6Þøs§6ÆuA*‰ÂONM LÕEVBîE Ž•› ¥S¬„•'¡G.5°@Æ[™W•f2š c##áåe[}p‚.†:€éde5õÔI‚0òÕ¹��aõ'ì•çÆ†çŠ}êY´)Zôòˆ,â9:¥ô3s²Ñ/ML€UA¨g&!¤¨/€XZ.þn8Rj‚¢šŠ±|ÄøBŽÄ×TÖÂ�Ï�…ì× ¹¼Ï�wÞ½ǰ<÷Î÷þœwÏyïóö:î²ö�÷Îy�ýÌýæ�+ó®9ïž÷¯;çÝwíe=w 뮿ü{V—y÷¼ÏœwÏ;N6–ÿç]kÙëì÷¼xwÏ}÷¾ùîžÿͽß}÷¬ï¼Ç<þ½óÍ; ûÎwç]þ³÷óæÞ}÷=gáÎ;÷Ù¸óþûï]óìî¼÷ŸÆ¿†aîüÎ{Ë_þýöÝÜíçr?wæÚ­Žcîö³ß¦½¿ÛÕ¾zÏüÝñ¿Ý¯ýºk»Ú¾ýÛww÷=Üå¯<§i_íæ¦q»Ž»Îjíù‹Õ?þ\Þûk¯»¬cÎe˜ï.ÏžÇ[î³÷ò‡çY{ëcõ÷3¬ýÿÿû>ïYoóxë¸ëwþ}þòî°Ÿgíçýb7Öì ðzïïå=Çòœõ2ÜeþåXs.ϱÌ=¬çXÖzË\ÞY¸Ë\Þ��»áxÏqç>Ö_ÇÛ¯åhý¿þëùåðV¿0š–½ÌõœƒÔ¨b}†FDDDD’&ér +Å@ Â(‚„†Hß` )ˆ�†a„YŒ3„B!„Bˆ!Ddfè(… c,"L™wÖò,}¤/@K–mîdr]–¾�,ð5²1}Æ `­ÑËô ¤ÉUÏC^€¨`ˆé`U/×Óz�BqÓ7”„F.Èâš¾AãmC)Ê3™¾aW"]ÖäeTòÙ"hÓ7ð·îê^1\€ÇÅ6L4}“~I„pÓ7À|u*T^üªòbúùÆš2VÓ7œD; ‚Ñ{3ðŽôMßPoEw›çô ×…x¹tÉ©(IçÁR`Þ³6ÉÓ7°þ GlCvú†-—VÝÍ@e„uúØó]ýôÇàOß°œ‰ð†erSziúÞY–4¾éwT&\úJ|œ¢JéRW•Õ[lЧô rL±·lîÒ7\Ë"ÍzMßlËRÜåµÕô ¬îÊkú�7Ê:r’Ìž¾Áu2¶oD2­pܘè¼úÙárÈØpúž•áбÙ{„<}DöÇZõÉÒéü W¡†|úøÚ“eôŸ¾(‡l 9ÕŠMJÄJÕp. ç&çx¥?MHrÌ�$Œÿ˜¾¡2�Ñš¾á„Ò«öòÈ™‘æ$Í¡Lÿ-Db”7}ÃX‹Æá?W¹©±}Ä6¹L•¾aÉ8ÙýhO£ø^f*,‚ꔨ²"ä:=)Ò7”%¿ J°z�¾AXÔ�ÂV‹ƒ{Aú†L®Xa¶e…ô 1�QuÃù¿M¿� e;¯ÖŸvØïX6o*R´x!޾áõxL…‡uO/¾2ˆ'vÈ<Êè.:8@¬7ßïGßàXd–FjÐþ › ì¨åT�«=¤‚ÏŽÔ2¾ ¤ÂF +Ïè^i­qx‰P7;/Ÿ)ƒ=.0xÚk¶ê?�ÓÉ•ô ÉNÕv\¥oØÊ3‰1:œÛÏMDçÅô —Ÿ !($•}Ý@±ØNQ>K÷ó¿XlZ12}ƒZ}úÌÞ‚I[C¦o«â¨–e�^ÄE÷ªíp™×‡ÁÁ HÈË+_² S¼ˆ¿dT`ÌjŸÈÎðrD*þ.OFÁU,Màew: ±Â6ÇÎíò9ª¹Ëï¢ð.oÚ$ÈÄ3Öpº�\†—ï€&Øïy5_ßž÷¼+ +9›?wÅ€ÞH튞‰Ð_cÖ! ì"d³$ÖE‰¹¨.ò¸­‡…€vUõpÌ~[Qú›/]a±®¥B‹â¹‘ºˆÊg��ØDÆN³‹rÁ¬Ï— -8g„Ñ8¥´»§‡‚ìgZK�Gï’ÝTµdò0!·d@Ö�Kç /nßÀXKã¾a“É’}úñà± ï£,Zwåâƒêùzɪ¬}É Ó ¾Í,iIn(Ì`úO˜vZÕÉÁ~Ž#'Gy ¡_2à˜V*næ+Ó¤/R”:�\2çè <ÎôK† \#ìá`2é}ÃeÏ— 5¬ü}ƒ�BF¬‡I]UÖ˜Àoè¬rŒÉ€.VXM·£2™ÊÃ8&“¤‡ea§˜#ÅÜÏD:T¯…’�Y°^#wãA¸d2Àvd~ ¤8Š+X2츢q|Û‹@�DþÏn¡µ7ÅâhœIçwQp ;Öùü~Ã(Ä‹á_Óxø àÜÕÊ0H‹ß0üG\Dn£ š þ³Žß°ÇœÌ…ü†¹ØsòÆžò>Îýøª<¬6Éóž•ù óÀa,5¿aC4ó†³íóîÿÝKï9ê“Á?Kôö˜“¹¥ßp«_â¼aÓR¿a»Y�T–Ä*›<ü­ß08²ùú W�Wì7ŒÛ³ßpå¯Ç®p7¢• ¾ž‹í7¬Nýy.˜û {¡N,ò‹Ðøil¦t­¿I{¿ÁéÙ»@ÊÂËñs¡›ë%dõ¡'iHuö;Z¡c7ó¿~‡lnHU‡‚¤a-k�€VÈ U‰")û&4hæ‘`«I³˜˜Ï„Ц©›ÞŸ+1òƒšÔ`V‹PõôÊðoÝš!ð°å¢È�~ƒâ†¨r}l@]ÿ~ÕJ,�é7ŒÎE)­ë@tòw÷E¬}ú ¿˜îxȳýë@«ˆàŸdêAû÷j\æD,çb¢Š)ÅMòÖðC7²'óS�õ>oÆ›=i)ÜEg¬5ÁÄ8û ̹z¬_û oXÆu`:–vh“ÞÁ-}׸r¿�µQ +©ù¯Áÿ¨ð`ù»ß0°QÈK¸UÁ/ÁÝ=Ï " °Ö;½Ý“©¹ô:»ß ¢xôY.=«DƵQÄ•‘§#CÈ”¯Ð£øÒ“çφ¾ß¾s_¡¡adò dèÉgs;¨ÿ;È$�ñu§ùèQTÜž4hÉlïÍ4#Y|€®93ªnÔ Ú¡!„X@çLh3‚xªB³+„HàÈG¹Ì›­7*zÕ@JR(%¹‰@<›�ò Qö£.UÁ3E�?çëd$êœá@:žMl Ø, æºÙŸî�k�YTÓà¦3BªKé´VŸŒÎþp/L}-Ò­Ž ºU–ø¸g¶–!›º¶Û:ì*·AótèæsºˆM§èÕ@HƒȆ þèÐ-+ ÚWFC8µçÕÓX¹¡ÈUm#Ÿìµ ¯…)êz°%éü©G¡ö-2]ßzº=¸ /ÆuX”^šîðjã¨%ÃÒ¡[ïC!�c¬ƒŽ�p“ˆÍUFØ +º%g©+�xö!Ö•&´]‡nhשR—еâa»¹³z’$ÜdÎŨɛ¨Ùá²}RyO룬<'6ªB A‹3Ñ¡\¨0¥tèæIA熤ݤ‹[Jxø ˜ sc#SGö[Ý„T.«$‰£vó�.E‡nR tnŒ +Ÿu߹‰›å2R¸‰ÛåK'Âò¹Ûûâù Î3D™ ^p÷€Î.�Û6üéX@Þ9ƒtnÖ@£ãFÑ&ðó5gÅ 嬹V¤Ð»Y&ø…º›EÏîfæ½€´%¼ÙLòš0Œ#zÁGw%RM7Iz9ì™™r3°m«V*3�÷6ä¶Öªéüâz4­+˜[3 ˜øœ©Ã<&ê;té:· Ÿ–9[07Š[™ÉËÍí8�›$w9Ÿ£²¨Ö*³A ­ÿ );�[«RvÎ)ÃŒ’Õ»<ž° ÊfôɈe¢8CM6tn5(ºàsn:'S«8•Ï{“Å*¦ò½(•�•çÈ0¤ò±½á™1*jù¨+¢òM •Ï,¾ˆˆ}Ž¥PJlCwo®½©YcଲæœÁôc¢úG #bÂ)fl‡�+;tbãvÉQ‹0ܾ ºtÞšå¬`M’á!ÏxÈá© 8ò‰,“L)I)ýöK § p¢œ¢§'¨Ã»Q}ŸìáÝtÒþ“Íi¬YŒ¥j IÕô’²è”¢8qcîòÞ‰ê„Ì0~w:\“Z½ó~=¥,çPÙ3�Έ¡\„”³.—WC¬ËXÎÚT[õYqÖ†â|=Z¬%q�#®i>=²*†›!|ÎÞ!ÇCõÜDqBßH㌑�„HÈ�zÊ|>ÑTŠ{ƒ‡ZaÅ(V5î4$âq�˜ó¹A¨âõ{ÖóuÐP•LX¶ö PAÓŸAoÉY�œ�IQÿ¡Y"J*ÄEš8YþŠ8ÁÒ`: +^pˆÎy:’sîÚÏèP> +Ttz„N ãX@ ²Kd„š=™ÚÌá¯ØˆµÈêŽ)„-vP(eDA4{P(*Òçʲ„„G™q™ÁÎ_l»VÈ@Ïl�[zw–Æ0;@ûJKï²UûFZMŽÐþXHg¾9ɳ¦¡Î²$Ô‰;›´ã<²Ú¥Õ:­ÕT¿’øf3ð_ô 0uAHHH¨ MLÝãâeLo�ÔÄËŸ:e­ÊŸžCõ¢"Ùçm!Ju-Ò|îöBMZ�÷«aužBT$uv$mª–³êäLùŠDÂb/!¬ìS3þ$¨¸éxWp㨱¥(/ñ$ZÅaDIñd�;•…”!goÉEÈä +t>Æâ-2.—سÿ•Úç™c’G‹ÎÚ‘ÒÏ~\,]ãâ4ÌEr cg‹ëƒUuçŒE’½8×BX¬ôòVö˜bQ>Å[L†ª¢YqQò,‰”ñÉÍèu…†ˆgLIÅÉI ýtì¤ØJdBV¦ç’nDÜÉðˆ´Üû„DUk)¾uv�H5ýÉó®ê%ÓE‘ 3F› é‘�MýEÂ3fs~hìÌ%¦1ØS1QQ*%j ²¨9²BEBûHOŽŒÔR®sþxô¡@A‚ ˆÿ#�FÃNÔ7›�à‰�å"•†�ÏDfÊGĪÔÛŠÂUe*‘ЊŽcŠÐÊ¥$&Ä©)‚gâ%vP DClsæ³LºšÚ]�F탃:ÌÏNQI%ÞàLŸ6BQÛ$,H�„/„æò¾§qrqûx¬H„2‹RT‹åùPýè’.Â5sŠŒÓ,n2«8¦¡úOᙓ¨>ç¼Ô¨IÅZz_Ï�_%‡Pe%Êp+8EÕHÒŬÓákYºc®³ñòÐPÜP#Fj5Žáf),Dô«>Q»Úª†ÜGVUy÷¯¦JGËA ˆµwÈsŸ%ó´•i�%>Ò¦ÉØ`죹ì™(æN…hŸ}bŠ ™”ˆR‘¤óäj3õXch«¨©<É‚Q¹ÈÊ™Æ*h}jÔug¿¸°FœÊ9Í´%dêbFÈT ª4ŠA% +2WS0Éù‚$"žý�‚-¡óãRµ?]þ¡Íg©fª­œ@¹gŒ ¬‹®³îƒ®éz·ÄÝCœYŸ¢è4K\ëóÛIÕè3dypS3Õ"YŒIIH™$øk>/ +mVÁ<¼ å®W o{0u9Ë !Ž—Ø ²DgªnÛ©I LÌTµi•Utøè#ùÅóHÇž ’…ÔRbÄXa‘ó—ò”9SïZ* ÛÓêV3x¢%ub4L1{0U4bE‰3/Sˆ‚3$ã K×q‚6æ,ЊêФ4Ãâ•ÅP*S­£La%ªÂ„c¦ÃDØC¼ýàÑçœZ!iYô© ¦WxÔ�D™~™•–Z+^)»‚œC$( ‰Æ›Á :¡ÍÒM™6ŒÌ¤¦ù8HÌ5,Œ\2…‰Ü\P QP‘4ŠrÉ¢F¢¢ Ç +NAddÑ L–à0�î}£ +Œ‘ÈÔÝa]¨j¦ endstream endobj 28 0 obj <>stream +Љá©Eƒ„ÂÔ»‰ PßïmZ,´¥x!¯ÈÞ’eD3Çg"Žšž¯ùÇ·@ãù0iRÀ Û6‘mEXp… ’…¶ÁÂð„*~ÜÁSÌÁ3ý@) FÈÂiÊ`€7fBÁ3LÈB«°±ÁayÀ`AW¾ n/d¡Á‚ª™¡ ¤ÍfJ¨Ă4ÚW]* -²4ˆ Ðà +•‹¢À ]ŒË†Q(R< P`O øÁÈG@x€I’À9¡@±ð |dÄˆê€ à� ŽÀ#ªX a AŒ¨”Œ¨„˜•9íièÀÄB¢H(È0,·ˆ4".~p�rŒ!€!F1Æ TMUqç�~?ø7×)M7Wlö\IaR)ðñòÌÃ�äw;È )¸mb±^@Šž[ìî¢oùö0›A)p &i(+Ë8?0y Ãñt13ª?¸ Jz©—H‹¥ +Lå‰5¸„ w·†A�þd¼ÎÌŽÅG’z—QŽ :È�±mŒ >ähQ�Öv\ç4Wͧ¸TßgÙ)Û?Þ:1Õfk ê_¢¢'Z ÝB"áÜ¥ôÉÁU¤ß8 OCµ E^è TbR¦½y2tC“(y­Y2qe®šÝ¼t(Qv2zòÖEÊê꘨–¥-·x—,œéœ +­^ÆÕ—“»Õ\(e¦èU¥‚óæï”RV†¶{gµ:î.ú|,ªt²Šò1‘ +¢¾IçúqG +¸úů{èZïFsÐÒ¸q›S²ó]Âd¡0�»K�F³ų +«¤A®U"»s©#Fâ@eG±TôÚ)~ ѯbÚ5 Ð Ht§}mÎ\X"«m3€2¤ŒÕ‹�E¢¸Â mBy䞊@„á=4QÉŽœ»(”b +F”Êp  Œh‚iõÉ…eM�ŒÈ•IÂ4¾£! x¬ÐH¿¾UÈ ŽÀÏ +^À�ÊÕ† +ØØ*¬Ñvus%^ +% ²ÇDC„ €ôºf(=M3OÜDs±\!doÉ¥‹=³ëžqÅ·A˜qâ Å+VRþ(ÚËmIý´wÏ ¯PK*lyȿɯÞ=2¹Øà_°‘HËAIá!°øf´Y´ +2™_3¤P †É'hp00RÃ�ø¢†IAÕL°‹Ü'ΡåñqÉÏúýN¸`а4%ïÝJ)e4ýô⮚Ä,b~¬p¿�üÒ"…üä� ó<ÞI�Ó€>ØìÆÌÔì0Ym�„38᳞0€0»Ù¬@1dóýˆ·Üø“w€Äjhû¡¢{Ä,eHKÕ“†Àìíõˆz-â3_¤+�ˆRŽ4õ`Íš™7YKä‹”ï¿*ÜK€• w±Q7KVé?��ãþcˆ‰pwªWÅèyRy#Þ¦VÀœË I“¾ˆÉõÁ  ì¸O2�¨:7¨`ÁÐh¨Uâì`1og@@e?»In…�|Vs¿þäŠÇi£,y† *x@Ô—sfþ™üO QôÞÌà�Tmö›9ÁÜBÔ×"‡õQ~³èt9áÒQSqYÿ;\&zlyn á(‚ÂjØèº6zÝGúøx¨™ÞÚ¨k’„ã+u£v"D •}”½Î&% ø@‹’ª$¡ú< uJ•g³ÿÓýè)Ü2P>mIœe^—}N™—£¥rI‚ÜùDº¨¸N,ø¿$Ac÷¤hŠñ˜M†¦în&:}‹† Ò0IÐ¥¾Æ…$ä�'óŸ9Ôâ:¶j å€Y¨Mv&^`|H'«í]#‚Ç�Åu5t4I¹I& ‘"§Ð½l¦‡GN[YŠ& ‚`€“ªF†Ó$¡$ðMtØ>ƒzv.¬ä—_ßËŸüý@&È¢¨:Ö>¸îÍ¡$@�q—Š„2Š\ bYm†ub¨G½œ…ð ã r\áì( ÏŒ?:êÝ2á …EBÙá b6†Áìž”j_e–Ü—ï¶)�d!Ï×õsûððù&DZ8žð*%A4sÀ&Óv�ùé• ú�Õ+÷蟘8Ê�"÷ÌÒ&[§» 0„Q@LÏwáG«Ð8÷€c&VÙw·7ÝÀãÕ0�Ÿ'iMå’óT(ðIÜ¢ +b„Óh¨Ú£’{7á›cUðܹüå;`¿Ùõ¡(o±R‰Yø€ ~Z‚a‡>лÀZ ±�”V¼n´’@Kp¨hº-Tº?Qyò™Ñ^›¶’Ð…¤ã4�ˆÌV¦]dn\ƒÛ‡=`HHÄfâ¥È„Îbõ¢žLó•? £Šm, |àNk:Ö£§‘2Á’àc!�á­êó’2`I�KÈLT�–Jþ½t{ð<�"�a€Ëž°$0ì.ª,V‚P£J+Ýö·ˆ3ð‘%â tC³ÄKLH¯– S—4ùÇ’ðÙ[ƒ6¬R£ú@;µ„׌#0¡“CÔy‰%Ápy †0a­Ùßk�%¡¶`Á¡y'e, Å¡K«ãsøãXj�g¬(Üî4¸äŽÉŽ}{]â7¸ŠGjé±GÊnÉ2kÅë §“@õ§Üzh“Af­ë‘ö‡y°2ào�âåàÄܼµ÷ªs©û?K!Ú÷ðw�±ãZÂã(̓ 3øS%øÐmËÐoªÂÕé° ~ÁùßE8 ãë²nG+oóÙ©Â'1JmI8:zÈ8PN>˜²˜r‚~ª Ï•ª¾%¡pø‚üJ;£úЄ +yKBdÙ%œëã’5åxÞ’6lý-á�^ú´ðÆ~SÐ(�ÐwÞù¹À’Ø ûפM^„·$„÷Éá„ÀŠÌÑÁ%á †Á\®àŽØÃŒ L1”j¸$\µ‰—§ö�. }ªÃ'@ŸpIˆ¤6œí�. ‹›¡@”� +—„4E'‰b¸$ÐýG%)×C·æ£á’¼vLúnC¸pI¸œµý—w_|Kº'�æ;µ¥Áoá’”8\‰gs%&Év´,. =fýá2 ×ð଄ëøDqI ¢rS«è�aåsKe\Ê- |²ß’p.{¿ö–„͵4»Ý’0'SF;% ʳ»%a “l'™Q}[}KBcQ\`±6è- °Ô© +'ìW¼%¡¦Ü Ë,É[€Ï{¡óƒKþ´Œ»Zh…*û—„Ž(ð¹ºSdA7G. à´ÏfÀÐ- ݨ6rÊBQAÆ- $kof®inIª_¿ö�¦uKB�ÔsA‘xg(Ú+‚·$´­mÝ–";Ó'¯Â-. %†’”ýz(„Ç¿ÙÛ·$$]ÁíY­OÞoIàÔM6ÂÙÍV¦·$\#«ùG…ÆxdþœÀ%aŒ…€,$°ÓÅ&—„#ÌuIX\ŠA¹qÉ%�ßÙ—I(æ‚eÛ�W%\’W§Àæì×vÏ�·J7g÷ê  Ö•l]Ê%œV Ä¥�ýS|,4iB…ÖÒBØs­ÝG“jjÍ5™…¬^4ô9�ÿê’€åÎBh¨]í KÂè­jÕÉ\Ûýu +9]T¯Ì) '$tIÈÑ�‰]PÓY’. ñèJ±!ÓN1îbÍ3.&ðŠ×úgØÅ +* X…G‚³©K-Ò*¿.ý'Ú%Á£œ! à¼É]™G»$LElu¥ Íö&Ö. Z�p­BFý"e—~ÆiœMgŠˆZ—*κ6l�©7ãêç’½)1ÃzÓæ D—„ñ¼é’@›Jí¢¥­&«K‚àù�pVAkæª. évÏäº0Ç�}zW—­=’4§KW¸´¢›ýå™–¡Ä⛡ù}—„4jûŠÎí’—úчÀÇÖ. jΗäÖ8í’À¥[ €ËéÑi—„e󳸋IfÇ. ³ØÙN#MÍ.o—„vxVp�Œ^Û%n-A¸ß0ýa—„Ž´¨OJO¹]ˆ•R$ ‹§“†Ý%A²ºì9§xð]¾{ÛVl£Û%aíÊÐp¨r^’ºÑ. Ùx5íš »_°KÂRßÔJTaodwI ]nðeH—{'ï’ ÄÓ‡ypqÖK.5)X'«c•ÆÊÑ1j@јåã·\@ÜcüwIˆ�‰Éˆê2ßø�ï]RðŸÜbNŽ°Ê˜ÍkÉLBÝ#H'­‘µ3cɤ Õ^×Þç}SÓÿ4ncÓ~M¦é¼p­$Äë$ŒűÓÜÕñ\7›˜™  Ü}a'QÖ1‹Óƒ5B%�µ¨$|Ö´„ +¬b?•Òg\Ž¡£¢rZgö+SAç}`�ncLÈ žÁ¤Æ«ÈuÅÉÆ…’ ‰zIð²3wEB\„¢?÷Ç {±s,^œÙƒnàÊ‘¤ä¼ÐI®Ì—¨8„aGy„9ÿsÏ(˜ mÙðš1 Ýg¯˜á°n1oÚÎYâ&º¹/ˆÍøÄfë�Zç«iJ¢ö¡Zà§Àç�,*Õ¢5 Jý‰‹�í7åZ<ÀýÒQfFZ¾UáfÙß2kÍŸv{6%í¾–#æÊi”…«ƒO¸ +ÙHô5ÐØ8 Ðß 3­�}¾‹=\�Uê8RÉŸ;Ôþªè­{:Ä€O4ëqÜÑáŸWdÆ G˜„|"»qé.ĵ%Øhé‡eQVXP)�–SØToé§D™ÇUæ‘N™¦LƒÄI!t®Jûd9tÕØ¡±¬ê¼�)C®„5£¸.<ùå“7$¶eS‹H(ó½0Œ¾ë“Óh<{ƒ ôÝ�&{#ÞÚ%;¢ïfã82Š’£=è}ò‚Û$NK8Åa“¯²¸æ-Í"ÔòKß]wT�ë¿$únt­½N…Öû&ÓCÌÁT¬U9˜’ wSkæyˆy7Ý ásí7¯$ˆé; ta&!’ +IèÒÈÚÃ;Ëžï/h¬×!kl<¼Ð[·ë 2y¯vù{ìQ*‚5ë%Àm^?å ­B k#ßH˜ãƒûá5ŠÒÈb8y|¿ðMᇶ?c�)Ó(×ÿñ‰†I‘½ÿ_�äavY¿£‘‹—yÆ©B_bK#""HPC•…!£8sn/2ç¨kA™<�P¬©Æä§$4�H¸% ª3�Ðé!RƇ`¼¢»… ëЩ J©&Ø”ü½:šN þÝF¾8�-t"Ë|™ £ ¹78&HÈòo  aú™Èyë þ!Ž/ÿ¶ äþGèÀâÉ_ß?BЕM >ÿ|ÕнÆþeæ­Ë0óGààÇÚ·¹}m�fÍhoù#$¾\’RŒÃA_€ `þýO ÁxðGX_^ßÔß�@#ZÙ¶a~„Õ£b<—¡ãÚÿ@õ,åGWeáड़”A—.®2~„û^Ö>B7½b!?­ÚGÈïhYÖ }„EEC9‚ötFãf²ö0ƒYs²}ê4u£Ì×1à×�C”ÙªùÂÚªq+õ&¡ ó0¹'TJŒùý F¹Á™�p݋ֳ[>‚6R¿|„­5­1§å#È·¹µêÖ›¦™�1i®€DŠK’a^&þÅ=Bmkê^Ò!rƒn��¯ÑÀÞÜ!û‹àNÌ·Gö›ùTØÛ#ô@€<þ;;Î!ÄêdCõs±`=”ž¡ŠôW2Ó#Ä ä!=µ×èJôëõÈXgÍõ ¼µCy°f +í�Ûmï§�¼—ÝœÏz„øí~mrᕘÈMK®îîµñ4UÂφ€@ñàºôYV�Wœyú¯îaÆ”G Rëc_°Eá‚ñÂ�GhI„µÏk^]}êûís‘ƒçsщ=!¿¢%<$ÿ‰EBÛ>œÆâ “Õ¨ù� ¿ÿ ÊÊ(8ñH[åƒ!‹äcó8²`Ì<»sî§kX–‡ç‘ט�²Ò »�h ˜þ{n^IÑ‘J°È ­ýŽ ,FÚ>¯ŸîΑÃñÑa 4pw1æþÛÁ;õܤô››Ý&@7Ê î¥Ír»sÎ\�L²\·JìŽ *–’Y�DIkÙˆ ÀØÜúÒ½ë,£Ê¶qGÀ<àÝ(£è)Ž/K»…D’;9ÿ@�^ ¯í÷Þk–ˆ’Sô²ºkGè�*—ëÕÚöÚØ©”Úb cVºhG"‡iM}v’7P¶g9;#CòêâöT´–�7ÎïÈœ¤eGhè–mæGv„l^Ïq +²#Ľ딱ål�ñÃ…ÿ2S.Žx­¿7ÊiÎÀr#‰¥�0rÒ[!~×@gÈIËX¡¨Ú°�šju„w�Âÿ+ÈhKi§uLò;Z·ª#Üx¾Y/V©³�ª#ð ¸UTGàãbjޏ1H4¸kêÉuè>„©&í?PÚyXÙu™ÀÇШ#`Êô;Ýô u„2x 43ð‚YJ»•˜È�I6Â:›{v˜ŽP¹V{T_ó" �FŒ W:BÞáéy5@ú~"AGHh¥‹S¨ :™Â«LtÎÄÉ:—‚ŽÀ¬ÅälƒŽ@ð?¦,× +:Ã` „��©î „µ¨�pà†Ä4rèE¯¨þ~™�D�ŸÖ^/ÀwÃO ½�&’Ô¨(©ýá®UÆ&˜Ãë9‚V©Ù¯X¢�ÌÏs„9:-Lz’Ú‘Ž.Ω£ºæ%i§k¬ ¿"§vÚØË½˜ÑãšÐ!Ð�¥ÑEí"?Š_Àê3€ÆQ»›ë÷™�UC¿E,⿈‰€o­¼´q°ûYýZÃ(§9!©åPÕ¢W'½w4dånͦÒÄÞ+AËÜÆMˆ�íëÎDØæ åÄ](G +Ý�ì…V-øä¶í4î±Ö!ëyÉ�c£,ÛQcünQqïb)õˆâǽ›ìÇqZ9BYyüØ5ÐPú×Ê»lî¼ÌIMDdÐ$nIŠ·O¹Z§¿&¥_@¿�Í´h뺈û:í5+y+B"ŽÀ[ˆzºRÌz•ÉÉ€\&F ˆÁ3ßìØûï\ýS>Ù½ÄÇÙœú²]/®ÍH9s4‚Ã(FäòlI¹MvúBˆ cžŠIsrÓ抟<‡•F'üo‹hY0á,ØE!‡H³à +ìÉV¹¢.8Z€åŠFël_Fä7�Ð誳»Ø¢`}ÉXaƒà`ax OÏB]R,ãh~‚?á¦#íúRÁa1”l0tÕUnc¹Cpø-Ô¡ÊÙž‚C¨råT|ÚÊ•*·å*tt¤ÖYÏòZˆwÒᯒw;”~9ÙÑ»4ö÷KMX~ ÑO +ÁŽ’¡T¿íƒWp¡o�µ°.Ð…}¨kl!8„Ï,âgÛÑÎå13·9±ÑB_ÕçK–$ZOš¬�þÒ®‡à Èsqá^;Ûm0i¢¹`öåòôX.ÔåÓ¸¹6³!ÁÁlÐ…'´‚höâöUIºJ‡lj)Î4‡rÎÖc´(9¢ìÂG‡#ÞcwÜðlõØÛÆLÐÅröíNKkòÚÎ.f(8®¬c§f$ç ³¢ˆh‚?~œÿŽ6 ŸÖ¨s4X:¡‚ÌG°‡ñƒ6¸ S Žq‡†Àˆ¯Bƒà ó!ºþr1Ž8ȶ�$¾Ù1_òíý‚ðÜéeð‰Ð2ŒnèÞB~Ñ·þN†J æ4†ñ‰:µ æá8Ž6–5ÒJˆì·k3TÂÔßÃŽ‘Á/Á¡ï˜_ZøÐîÄä%8ˆ6Çì6V5øo1Á¡–Uî] X(e1�4ˆ¼cÁÕwwÓˆ§\’„d,Ôâ(«;h5€‚ÃfZãé[8…;tÕ:m8Ôù”ŒæÎFæé5pè-Îá�¼è¬ »8™Ü„?…Éáˆ#íosåD×Ò7ph1U¯ è +füÈã´ìNX_Eñ0ˈÍ(K£€4) yÒøîHëw«ÚúòÚ9phú!ƒÅéËÐ^äþ†|ÏÊûY·$× /»ÿ­K›é=*iDâÀòäßÀ�”9©JÌZ¥Ô•”¤ªÙÀA–KfÕÀ!¿J‡¦*t’5p ûlœ«Ï±¥�Cˆ3hýÎA�%lÏÈÏ_“À$C�âË *Š i´HQ¨ob)ØRˆÌȽ 4ö-rž”p Âa�˜  8ˆWÁˆÐ°4pr(CV30‚7ÑÀ¡3‡B_ 6Ò¹+ ºdY4þ>A‡zÐì :õÐÀÁ/Ç&ÄúDކøÐÀA7õ™§¤ŒDÒÓÀAQw<0i©ŠOœ4pPpB«Öë64pèWÿ>t® +?4šH‚•ƒad8,ÕÁ9©Œ 'õG‡éM?R�ŽÐÀAðê®*ÕÍ' èkñn³ +ñ’þ(z8T.°¡¢ãY)óhà°v_� ‚„‡5p¨Ik˜Ö ×5p`¹xá\­ú5psÑ’�áy‡êN©�CǬ!9)§¢_Õɶ�CÒè�'KÀß8ÄòtÛ©�ƒ~B¾ŽÉîfà ÝÞnˆÖ>ô8¼RÏBE¾hà X§˜Í9î *ÁG‡¡H©æÓ1šÃÞ00ëa$œ�Qà@´ÔÀ!,oþ³ûÇœ·ÏÈGÕƒNQßä.ZðÑÀ!üBÙÍ„ßà4px AR¤æû�¶-bÇ(aÁ' ~à ¡0“ÖP WwiàPÇÎ;djFa HÜç è%6hÎR‡K6ଚ€ öSVWÄP8dô'ŽÇ|ðÓp‚Û÷ƒO÷ÚÀ�õk­) we‰âßÅÈÊDÛôî Pw­þ�²ÌÀ¡ý-K°2;ÏÎëŸX`f… §¶ÖÑ<>GT*áªÒ“åÖa1‡Çœ¾·nh%¸ž8ˆQÕ²¶h¬C*‡œc~¤ojk0ð€2p¨®F ëæð‘�Ã7˜làX×¥( _8dsã£6û–ÄYCkuŒ +ø O{Á‚ýƒŽW`lŽü L$Çš“�ƒz+{N©ú�âK "�T2pB¸[«±�hôVK·xò5¡Wk‰A2pP¤ÖÍIÛõÖMéõì´–²C —�ƒø‡Õ¥ÅµÆ�u”�ƒ›gmè'qp¶‚©àðÞ8øÀWµ¸`…_è8{_èo|ÄÀ¡i«®!ÝÄ�CÅRGšà±ÌÉÀE7÷µw­ 0-«àÀ¡Ý€"kX:|ÊÀáó›·„+o(¢ÂÄBhØ-|c9¨y±œ´Y…•Óßà +ÇVáÚ‰>Œ¤„1pP—ðÐZÙ ‹Õ3— ¸ð)ËÀAHëáÇ·Q}C:8)/Úã\õM ö?é°Ô4R²)ã€R»uë��êFÑÃm“Õ{Û¥u0p¸ØÄ©öø†i.8œb ¤âò€�ƒ^kã`ÛÀ^aà@ Ö6.DwMƒ�ÎÅC©èÑù8ýé"‡ÊæŒÿEÃÀ�¼ÁÙà\65aà ª44`ï…C4ð4,�!/pÀÀ�ý¯(›t®48È +ã¹z Ÿ ú‡Ø´p60p(êFJ£ax²à/ L©é¨"ÌÖN¬‹ƒLfkaàР/w9 +[Ã!P;0p8½i¶Ø–Ie�‡yµ•cÎ-µúž¯ÊcFáK‹�„��ƒ°yM(Êq’�k‘Ó0bàP~Ð|�×X;ÅÀÁÔÜŠòÔÔW nûET}w}ý1pè†KÞý¿¼C  -�ÁÍëIìˆcà ”£.¶š£1pH»oAÞ# ×eŒ�ƒú}%�%·’7rÅÀ¡“S÷ù \…F ôcàÐÝRõrUE 0p8¶¦<µà¢xh TµE6 %p,¤{ +¦`5Ô +Ñ¿e8 QIù�ø[/p &Øvt8ö Ú[ÁºbT=zä´ö‘aiO�.ÃA±¤G¬1 ¨úó>�X Â:*E¦/³Cõ›ft zB4Dš}Gx!8ØŸ§©Ó.rÏh=lLÊ +ZNña L´á¯ÀA‹9æ yúöáY�Ck¶.9�ãóÃ$BZ +€õÙˆÕt7¨}}j[¡Ó¤Lþñ`GÖ ¡=L)Ÿ»>àðäÍ]ìÇ'ɵÈ7úYÞÅi‚µ˜0>à 8l¥ Ya+UNû€ÃƘîÄZCࣕ.,ï[A �Ckkv,]”=‚ÀAé¥KùƒbhGwKˆð”9ßêN25Ÿr­ØÂÖm'$»à[e¶BCp`­›5[L× 8¸ö²ÄœpprY*SN°ö%8œ +Ó{Eà� üm/¥–±ê°'�à ¦ _ø{*úµAà r�2×ÇÄq1²ó’ÍŠVOit͉]`û‡‹Hî„"Ó^”�†ûJæoVQ¾Ùù€Cn�ÃÉ«”hÊ3r [×®hìBºNÂUùÙítçvŒæÓ xjÁ�ƒuë#u–—$Kt½HïÊ3µØK'I­Ÿ8h�¾Æw'Zð‹À¡®§Š8È‹ ÇR p@L–M©CàüE%$ix¹œmN� ¤ĈĩEÁuÒ….š8Ì-%Z #ÃÛ �ß¡e¤FWØTꟲ/¼­)ÈJmŒ´†Úèr4=l”ö ˆêö†î\$œö¤á°<‡ájÑ…W$Ð2âbC³8L=±>ÃÛ §CBc¤aÚpHpèúÅeP +«ç/h©W,ÊàîÀN®e` â ÐëÛ†ò¾½¸Sç�ob,Ŷ‡ñ VÀápE8ŒÓ"6o~F;WTçIxÉA ú¤2ßÝZvóë¼à96ƒMþôv2¾AVo ;òIù]PÉrè2„kKjËdÕ�æ¤?ä.¨— ˆÆÅQê ¤FÙ@À¬/Êñ,Ï.z[ï¸jw½W”R)·ÞþO¥ÝÍ¶Þøã�¨Zª2‘íµöˆî®^ë¤^šõ˜ÐŸ‘SC@ ‚Œ¤D2ŠÎ?Źõö  þÒþ“,#Ød<¹nÄÆY†Ãwë] ]Í�­Þ˜êÂp?\cø2|1KŒá´ßz‡ÏýŸ«ÀÙàð[¿#lU‘¨68(Tm§y"ÞOð¨ß¼ù€¬�ëU’ pÐÆ�Œê«ÚMcCV®UK*—ª³ë¨ÙK™ïbY´ÜX”ʈ»8²¼K¤—ÃõÉEà@)‚ˆoøË®Æ¶ª&jô†¾� +Ñ{ãÒè�ÀÁ%‡)A‘�0d—À�[­Ý³1�ƒ1BQcèØ"z‡.ke•f7÷^ =Ò9œ¥x +ý )pú¦¶]òø†Æ1Ùnfõ—Û|w›„�ƒúä}tÅBê©À�§uªq¿ô— ™«ÀÁů͛ئE‘Ì�¥â´ÃßM‰é.ÿ‰2šú· `niF¨a%©re¸Á«êÖ ’PoT5�< ç4˜7Ø8À[Š@+ë äû4¹®,À®B>Äa‘»Ó åSÝ,  u2La²ÄBíÖ�¨ÑÛ¦�…�²(„óäbÞî”@¬øÕ8E¡bÞÜð@¿vËa&zlfg~üÉGAN߆°bQ�›OwV#A†0æM¨9CY�QÔ!ÓÖ¹îÊÛêýôa €TÄáÒïl²©1èòd3P#Ñ]J«˜‚u'pæ â˜=éN+óŠI®Ÿ˜ý5]"§¨Ô¬2.޲Ê97Vâ >�‘bÌe½]éºP]Åø,å–À!Á­ éùæ 9ιá̉ƒ…sFLàPþxŒ� I$ã0E•¸mìK'å†Z®é½åÜPÿ²Dù�œ/mè4Øb‰I@êxC|– §�}&ÀäúZáo¾úãµÕ) *untŒöíû2Ãå µ¿ÊÓΉ©L4 �8(·]�à ée^÷ÿ£X#p@q gÆ|–°�—‰D)B†t°u +OáAƒu«ø ÜÕNEà@$8@eJ}qœšs�5p“Js�‹žc7ó€À�H%�C1Ë’<‰ Qð1Öâ]E³ñ¤[!28ˆu³‡Ø_öRµëvöß8�ôÿß±¢ët8$d©áÉ×d6 +$ŒgóÒøÁoT~$p÷K~Ø^úœ‘Ùþ³R“£"pPˆèÚÛĤ^Ø�•¤v8”V1¡ ¢=›öa … " ]%æb^C^=œËBàrXÂQ ) ü�ôÏ!­ÎzbWë¨ �CL öâm™ÅÑ‹åœâùv8Ö!pñzÇë8Ü›‰�D ÆßÖÙ¥�{g”¢65O¡,%½{-Z ++êQ�‚À¡£ ß³cñžw@À?±À$‘ŽçÜ¿u ä<0ž~iõ381ăÀáÚnÛE»h`ÞƒÀýnƒ#*¥ úësân3B�Ã^?¦¢²Ïx›×Ä#ø€ƒrýþ—fù>àa¯ü†xÐ$8`+¶¡ë‡.Ÿf1 ©¾³IÔb%Q–;à@ÎùÅù«8ÐïM#a-¡ëlÞ8\Pãq1P)ÔT :AC¤8°K×öåpÀˆ'�Ù€V¬;àÀ‘U¿:o{ÝûEé€C4ïc~ßð²”q7a߿˞›¸áŸ~bû é‡ëÇ›:¾C“5À]—Õ{Pÿ&'éNü5ظp@ÙÌзÖç:�ÿ È.Ÿ®XŠL8äg2à®ï_N»P? vªÝÛÔ à í áă3_ÉM ú�iÔá°u2»º6¼}ÒãæÖÜè»#@+ã­Ed¿'@n[….¡¦ý……„¹N#Mñ¢¢Ï‡ÑiæÒ.ÙX á°ÜòÅ ,’”îÑ�æÌ„¡hßL°¢ŠIŸ�»g6_&{ŸØÀh‡Þ .“·é!/¢ªÒ™ã«\OAñ±Ç9IÞÈš.ÌTû[\„à€ÀNeÈÎ (Á1. +oƒý/EÙÝWØiç +¸Wp,eÕïa» 2™NÅ™Þcˆt»[Ñbîäô€ƒÕ`�DÁª ç$V0Y–üúr‘Èéêé-C”•g�cáî\¼Wùúõk›õŒš�¸‚'#/¬ŸÛ ßî1½8e¿Zñ=ïÀÖ® Ž#"{k½ø€ÃÑyß,Kû ó官iÚèRý¯ÁÁ±fÜyA±ú.¬—ÂÓ" +ÓkY [¨œB-„ýqô†àB°¦¸?!JÁÇLaLíÀ!»Ž!uQÁꎈ/šØï³�Pf‡¥¼¿¬�L(Ùü¨Õó-,1ÑíÃ�‡ïÀÄ–raG8¿º¬ô ÀaßÈ�Ž/ú ¦ÊNÂɸ²  ý‹€[§´Ð¦$Õ<žÄ6¸ªû5Óm’³b0—„ wR4¡e¹¡ˆþXñX2Q€ÔN!!¼ÄÉò¯›ü¨¡D{Ý1¤PR“D€ƒT4 +Áá³B’è‚l™çj^ m"•°[+ÊÝî›·®àÐÂÒ½ÀÌíIsý”‡(‘›Im­M•Tܹ¬º“üÍ{I ‚¾%71þ|Ÿ°Ø½!ùMF¹$çuÔF‡²¿¡g¦Þà²V€œƒÃyËþ=vÅ'Ó; +¸V6Uq]"ðƒ�ˆv(�~3ÅG|§±e"úµÉwD� zÔï”ÊK‚{¡Xól¡”6Ëp20º%(¤5XÃ%z*•è7ÄXl»'á±¥Td�:ìäÀJŸð{·Ev 2™kd¨@m­Åu184â7`ÿV©Mƒ¿!îRwJœ2ëpÞÕŠ§ŽnN6t‚kxÅ=ÿsº…üO 6ÀîÊI ®Ù„ÜFK ׬´ ˜Ã岎XOŽé`­`Âî.ÛÇZyÒ꼆ÌKÞà£Ì„{åIà­¬í‹9}.Ù1Åå°X¿6¡‡„~µQn¢0“`Làjøiª›rò#µMðBÖ§±¼° ûŠ}ƒ".NL*ûE†6wó3ë ñLNØdzY›à”N¸Jþ½—u¾T?±›£DÇóO&»„«pV=!Eb E¬[Ä“KAó&N¶×pBðÇåRØ#ÖønWNÇçž²¯ìV|ÜôqRIhâ\NÈ�*GDQ² µ®ìi/ã*‘\@þ‡uhÉŒÙxzm8Wm8f¤o ëcÌí¡lô ÝÁì0IßÐ![ÉÛŸTó”+˜óBœÜ†®qãЂЉh‘DŒ&}C¾¹—¾!—:/})`,R;Áš¾¡�yÀÙô ZZ…Ñš¾�ZmÐ0Jß i)¦•¾WÅ´£_—¾�r˜¶¬Ù¥oX–Ù4Šô D"oeé€ô ýÄ`“�¾6’†Æ`Ò7ðT¡‘å"éx�}cPÒ7ˆºéI߀ ðƒ#…ô k oô&}ƒ˜è‘ Nú†“×a2J–ô JoñbÒ7Ü8ATîÍûX +÷Hß@]ãð4 éxæ ô³!éb[�1>ô1æ†�‡aÔŒq¤o¯œêÐGIßP&œJm:éx¿T +S‘¾�ƒñCô’¾�UdúMú !R•DúLz.Q]¥o¸,hB›¥ô ]ebéðù! Ax¥oã°nÈÓ]œ0I¬¢Ú;J*~>}ÃUÐZÐÿérMÓâÖ¬éZI ¯GÑô ìOx-´é¢«ÑI×FAÍÁ�)¦oÈö¬I¢mC5æ>½ô 9Ô1á` {Àìñ‹þ�&}8…W'ÈЉô iœéÊ|×¼d–~œ©krFEC®*êìÖ&–AŸnÅÅ£dl=é ®nOú†Òâ|`’¾!|vM¡ä‘¾¡ñUpä£Î+�DöSQD—g0œúy¼xò…ePg˜k"céÀKT ⨤oлÑz ³= +<ô&TÂÒ7À±áóåoú líS„êà¸2èªIÉÀ "�aúX‰š!à¦oàÂõ.<\Æ4}Ã8X1‡ALßÀíj1˜‰€Ïô w0�¸ñ¦o‹Ú.1˜Õ&Ué²+Ze¦ê¦oH7<‡^ÈävÔƒ»ÉK§1ÊC�Qz–¾�AIUôû,Êš-2$@m’j”�ƨñÿm+&… ôŽ•fx¥¤M;“¨®Â80L ŸÆôl�p¢˜ÊL#¢×°t0‰‘vB $P51ϧ.H³Á76<0™r¬.¹üyÉgÎbI #÷'Ä õ**q>&UmDeV%ÕUªÎÕlªæT¾ë/ÓÔE6nýL©VôÄU5PÀ5µ~.ÕOëTTdŸÍÈ4ª±™ 9{Ç(ç»@—Ÿ†Â6q· 5æçÑ�êèût"¿2Êw¡Dä5#›–ï{Trfs¼õoµ�ÏV5ûѬÀïj¯ +3Êù• ìêшÙM(2û'ýMðuópã‹B1!�/·²ba‚ˆ1¤9 –Ú¯=;b}$SJÍÜc¥�å·ù}HÛ¼Fc$Õ�©|tn&3ù‹&¿š“SMb*™)LîBÏæ"a’M2¾2Y sõªÑY U™‘hŽã]øg®Œ5ŠÏY(‘²À™a‰Qîc=ÞäX´ê¯ìa⺲©œ…û+ÂZo¢Eææü¦ºß +GVêç*i„â/ƒ1ÉÙY áõr�™ç†î‰ÒeS–ãèTuI« ùº˜ ·¿VZÝÈÈüJ²‚YìšâÕÁb©™›‹÷�p@€eGöiäfv‚zïýWäó +áp ²cÕ•ÔO57¿»®ÌkFväW •Šì:ó�/Ç3"#«²œv+ÏtoÌ>¡¢I‘s+Z‡2ó÷+ºZtFÓ¡ùtŇ,¥i +ÏêY4õv¤Ì‹™.²‹„¦í^,AŸGq,^‰ˆùïÉçÔIíP�åD*Æ"òezuqT¬ºŠNHøX”Á$@��]v&C&´2HkZvÕ�ˆïmΊü²‰ íö �}SJÝ­cbÃ8J°,";;Â*ß«¢¨‹E\½ñ¼B·»Ç R_Nñ]ÐŽ>f3­—¬‚hwÓ"£¦ˆì—J®lÝ ß¹×Ýåª +W¿\C³iùukÞ‘!Q«niÕ¸ýͬB†¤TŸ³ÉT¡¨ê̆ViÍåbªˆŒ÷tl(h'§„]Úömv·VaèeìÔ½FòÖ+|åO÷¾1T7¢³¬ +Vt›C�|c¨ 9 hdæ¤F’ùZzõ*BßáŽî¨ÝjÓHÆp•!£Òr´pf.è6c¨+$³˜ÌùR3ÚVaˆŠ#CE’–ÆP»IÑ´=_è¤7EÚ¯ÈhU¸¹wÊŒ|IZ¡¡3&�ÖV¡J? ÀijÈ=T¸BƒA‚%x¥=œH0�5â/Ìj  + !…9Õgheò�B�ÍÂÍ6u'•Ïøˆ³V< ê¯ÖÐ�‡Ó$cÎ* ½M Ã!áæöšIM¬�UHý¤¯b×ãš �êˆäâ!ÆeªÐ*!b¥jäÎÂ%U¦¶|Úõ÷³±ÌÏ…³³ÑÇþ³ÙGìŽÆ“^\ìÚôEì+Ž%Œ…W;»„vÃDÊ+9¥îÇ™”�V�1™ºÅ˜ÍsE<‰1LçBYY§0GÊÕÂ¥sfÉñDî4„¾®i�èe.‘R)[¸ó‰Ùô;šb+·1²—™G·��¹¢R2þC¤í«rÉíþ2³÷â϶@¾³Ýûúœ‰�穘‘!ĺ`a =–M­,ÌCfÓBÑh¹X\øTZ˜¶vúBí´06�;Å,¨Ôi~WBf| ³-TiªN[ ÿÎ3½r¬ãL-Ì‘kE¼©¢+¸„X$!"QQN-œÙî+Ý!e6H¸¾rw±?;ƒw"¼“ç–yÎH3=ÏŒ-eê”ýóø&eVøŸ¸s” þ^,Õ™eÿÒ³pÂE¼;Ùù0›(à»9Í2Ç*Åo›˜67»Î:­:]š¾Î¦šìA:ÏÍì,St%k5ç±ÌHë‚=ÿjƲž­2BD„)›sÍmÃs•g<¦ÛÍI.œ¢¹2ÇET¦ïUeÇ“:NÎ#E([;SÑŸ3ë³!{ˈÎòÉL=–�¤g{'GC1ígÆ'04¡¬•gú$ôìêîÏßõJFC?I”^-""Õ‰ˆŽhj1Œ’5É6_­WtV©¿R¥úècêŸ0ýÁR�ß 3ûi£Ñ¿Ñþ¥­ýø[øïD}SôÕ•<êç1Úõâ@ JÝ ûÇp±VŒÑ�U %Xö‘¢(™} ޹ Ó݋ܢš¨ûØ»û ÜÇpw1ª“^½bˆ‚þDǰ@<sYÉ„Pè,7ç ß+&&‘îöŠ)j–„ÍEmš SNSŒ,¾ºŠãAþZ”Øï(6ºøXþw¬|Ãõ€P–#›�Œ�áò«"} vww!lj±ªš¾—_œÌ 8pÀ@UZ•XnŒŠH†ª4T +‘ý÷ਆBaýêLGuÎô§ÏXÒ�øæ 2j§¨Å»œÄ½U°óh¼�QÁ&zÚ#^ $ð€P�›±#²+õì�á®6”+©—eeJ�Ð×KÚ£�ŒÍTïþ)¹°¡‰ëÍãf^Ä’YÇ£Ÿ*„7s7Ò•Ä�µä˜ã’«0²[]‰äyDÌT¼ª[�<¢¶&dŠ×¦�Û±“ “÷!)û ‘f³G‘¦‘ðå’Nz±Žd™0ÖÔ�ú¢¾ÇP§Éb£ +þûáM<ב6ä`û"’"1¡HИA½a ÕÄç#•wŸ": +Rꪩ—32ëqo}]Ia-áüì¿û”ÈX´ã'Å1TEd¦E3¼éK9”ËÂÑ;œÊ‰Ã” âYÄkÑ7c7%Í;TáÄn©³¼®?É2­Shvjœ¥Ž5z¹ª¾‘è‹“Er¶8dÑÂXUÖ#¦Ž­Ø»ª•Ñl¤”'Î…±U¹c{d4#òñNXûØEURig¦÷H͇Ċ2–Ç´TŠ3Û3“ïT açå:©‹k2£›¯lo§­KTRÎ|ëÆ;—_¿kùg› I8†òMYç¢Èã!Í8Й„ƒO×$ç: ‹6S{0T*»C¤¦N¹Ç3¹f6½ÖOB;::Ÿ+fóqJÊŽ¤üøˆÎžªRñãiÃÆ~År÷gÊ*·-T�1Xä›Ü‡ô›“úºŒÑ»7”G¨t³H•MB¦h�£€  „ ,‹‚ÕÓZ‡D‚±P@•JÃ$AcŒBŒȘX€¨Í;h9ƒK~û�Ö�r.¨®;Ƈ¨ð_FháR<ÿ_ü…d’‘!s&ˆŽsŒ Ù­k¦“õ¶© +Å`0²@Aö’ �‹2xB,>ÃB¼•GÄ�ô‚ìXó’<í¶Í�‘@\û¾Þ#ëX"x¤'t.¥_aL´QŸ¨š†2uÃ#kØ�wË@RÄ�*SÄBøq1§Å™­¬�bÆZcTž`eÁ#^e°Ä˜‡DŽ mñæW>EÊmà#U—ϵ¥‚¦] ÙÌ(�bàXíQ°çÖI€µ×–L±}uZØlplº õH]«ä¿`C ªTÉÁ\Åtg ÝR¶; +`¶|·Õ3Àjö?(Æg†Òàxv[�¤ƒ+!I®€s§¢ƒ.hüh›ê‘ç¬=�S»@[¥ƒŠú,˜öð”{¹O ÝP¼­_bÌ^¡!˜/‚º’ »‡90œˆ!$¦,l4³¶§ûû)/ùšd¢:h5ƒ>�ƒ�ÓV—'A*V“ømï!+¡2À:zÖÇ­g3¸w…¯¬æ”o*b)l®V½g»›xÄó·øÕXèÄ�ä+Yõ ª°Ùâr·¿p ¼ý›F¢œÄàó†h B„üYp{W ²~ŒjÆ{Ž ¯+ üâ§±«7 *uã©L}=º‘yA _ItÞNÉ�ì’…©åÛ/NÎò™^C’ó ’‰_3A:IÕr|áìh«Â,t®Ø0¶{¸BcVÂÙÈ/}nRuþê§PtÚïPˆL‡dË&¦Ð0³mË^v Hð¡xì�–”úÚ¶ìÙ°R=É~"]Ý==™ÛP}í(A ƒ¤Ç…´”wرìȶ³†%cVl—5�”HcÅéŽ5~ÞRì‡úq…!›Óß_á¹}¯ !B˜ÖqðÜÌ5®ŠZfG�Çåk#•&;³9V[VÍÒH£Ï:íærQˆä‘¾Cc;ädU ÃŒÀ¥”snaPŽx+p´w„%#y勘FÓþ¹x…Zû8¿";Z5 aÒRå|“4�ÀÙ£øÛ×\`Ÿ8'w‚²fØ¥™Õ¢­ÊS5Y}yÓþ^yÍVô̶LkTwêO< {±�éç j{(›5./© ­Bµ.=Á¬£ãèÀ p"É À"b´2,N[ÛÊ­™ÈèÓc;0õ° • ZˆY›!êBJ m·wØúûz¢I„‹…¢,–ªÚn¦ŸÉæj´.ˆ®ÛüO]hÿU‚Ý}Btf�§ôöæŠM§u†ÊE›’o�¹Ï¥�„Ñ+³Í¡`S¤âÕ3éψæ²à¶?Ï$}‹_æŸÖûÞmkÒUåF<¢¥«$D›Ÿ KûÎìKó7i¼ +MpéߊïNòo¾ƒïRÐWI|Æå6ÍÉnK 0u~ü ãßÑ0p}U§2Šgµž?2[ŽZF%»|øyY«NÐjþ-ì(ì¢Ð-Ÿ™ð|˜ÝÄ7O¯ãÅÒg >1ì…òbë¢ìOo å­`Íñè`kÄÅ»á–/·E·”°€ð�Ö!«¸ j—–ÉSÿxöè “pm+;Qbà!–ÎXãRH%ž8}\’ä4og½E¢¨“=$¤·Þ»FzaScÆ(ÝD»±q¤FÕã}I# ~ Ñ”FE_Ú¬ßÅóaK‰5&³ Ä™ímð–ÿJëE6ôÎcób2Z�‚—>ý0–±e·À‰ÃtJÏ% D±�FÉï¢Rñjað¢]z«çF— ïöjó„ýè ÿàW4Šì0¶õÌàÅCú�êèŒ)E%…rófRÑ{Ê]¥? �õ²­¬Lï#ÈùþË%�X•j˜ØRyQG þ?˜{Ëw¶Uú–Šjh­©Á°ÃÌ~ÙÅt&íy´ìÿúsßd0T¦†~çh”±³_·!¡21þ ñçÔâ�Ù5±ãO/vfPvXŒN>êÀˆ�sðsûQÐ$ @ç)#½‹3Y‹áT5Ø@Æ[«È¸ z�þ[ÉHƯ#›Óz‡ø}!ž¼oºQOU«ÿùéç0þ,ìÕó’”wצ‰D'”Z·ŽW¼y`bi�wiôÐâ7ªw©±4sÝÍ} š“Ø:Zg2-%tN��òÅPËÇ0kßP]ÞFŒj¹0vɃ¼]{Kú/ªn²”¾\rŸé� éõexø6rÔfÌØ‹«Yî߯Ù<þ¢³øB)û¡ÑUss:;½ …gk ]º«JʪØ)àgXv7öÌž'�­OFœöÔ¤€ÏÁ}µv3º¸hP¢þ(>R¹Þœa²lâ ÀÅ5ðÂ+X-…½ôï¹Fj•ûÂɈf»“ ´ýt@ØíóIû�•­Å&0Š.w‰Ê“à�‘ÕAX¾ÈIf)�0_x„ ±íðâóT¼_› +òƒ;¥+•À ³êž{ÔŒ$À¬R)�ÿª¸[/¹ì¾`òÓŠœ0i ¥it°grríuèš’1ÂC¶µüÝ%Š[ýnÉy˜zÛc¥»ÒzÞT¦à.Ùj÷z±ÃPš›HŽs�U~ üNØêÒq½gwÜ¿ ˆy@3=_ÿ4´:uïN‚â+¡Œ¸pO­KAX8E¬bÎ ûÙºÕSR¾š–6¿\ +º¤í—�‡�ë­lŒ¶Éaç‚¥­b>¿\èŠ!A8 çôwÊ›î)Gô)óˆñÆ——Èlš¶FmàVnfP¡È²}¥mHJþvW“Í¡LÅQ+T¦Ã*ŒfÁÄøë×퇳˜4oŒÝW?w<ªÄÝäo!rðÓf»‰Þ¬€ü\¸ ý™|Ü-˜Â+:mõ}AÓ½¸¶5`±9Wf¦ºœÉ¿4¾w¦ä 4K º- ·e•ضAÛô÷¡‚l›ŸdÛÈ9¬Þ'°h=ËU„S®t­Ôʶm.þMIZž’dp¤�hS–´¥DXwŠÄµ*a¢«á´§êþîH;ïu�ÇF–ÆòÝË0¶7!¥ ÉÅáá†éBB™Ø„Ë-y‡ÓiÛsò °½Kóä/MŒirˆ¤Ê’çúÉèÙeÕ�MtÌúKÖ-“ß•'3WRPŒË¯W)dm2ÈßÚÓ ©`2tŸ´.¼È)”+„¼dˆ°ý�ЉLNïa}Ú9eÌ×Ì¡È{Ü×AbŒ²V×UÍÖÙƒqܳŀ=»q¸Ø¿`ýËçýÈ*å X/¶H/Q�¿!^D±§~î…ü=U][Öü<@,- ©±*·“EO]>…\dÚ¤£šŠ´ y°E[—átRÙ.ð¦jQBAõ5“UÛ½N sÒ‘m®zÛ‘¨š|˜ý;Mp!wY†_<¢ `‡â;ï…‘œ|s�À¤1Gxec’Èféô†3јºÉm_•%�bܰ;49N?ýÚtNç÷?–Ü0îú.¿Ö¢ÇÌl]mE¨¹+¨o&9–-ðýaÖí4y¡ÈD½‰®ÕC?ë ©b²G˜�È’` 'Ð]Ÿ°$Ìê€ä–$ÌŸ 6Gã(J¹®‚°|X©Ö£ êa↠Éü¹ÄŠbœ†:xѹ\)°âk9´„d˜)$©Š _˜3c|;sÛÀt�wõ¬R…^˜;3ÛÁÁ½mßÀ°?Ñc¶ÂÜÎŽ8r¦¯q: +3Û¿A„S£Ž)̳Qi´ý’Ä©› +‘�€A;Ÿ~&„™Ÿ®”޼DÈbZ|€UD 7Þ ÔÓÓÉíNújQº$¿5’>"MJÑŸ©V± +"÷™ 14w¤Ó¯C�™(4³‡Îv᤽c]D´R´’(tÁLþ{äÙé¡Z¢<Û-W|G* \¨´· âé7Þ/ …àY‹Ì(ï……°“û½“Š]Û©àî“Ús�ïi�ÄVKI× =fÖ-ãSÂÝ®\à ±M ]Q2®l]e�¿hmëœØ«ô£iñ¥äɨ/r"­hOÿ­…i·™ùzdWWG÷S‹h£–’øÞáI,9{™³ +L@k›ä3bQš�Æ|ßÖI‰o 1áÄ„L%u}gv�6§[Ò¨¡oÿ? Oæ90ε.Y¡½8Ä‚6¾.š¬] Mr;‘‰ö‚=B£ÎÜY´C/‡Ÿ*’¡ÜKdvì{ñB té=D±­í-¸5•€ãäص8“:PÝÖ”d™ÐL2$û¼¦f÷;û¼¤�ï÷J½1´¦^|–8„lÚ” mù@CXs#òTiØå¸ÿ'ÀQŒ²]Ó»CkÚçÉÅÄîªÆÐdôò!xÖ qyôS<”Êg§èÄ k_ƺI‹ïKDi7ûduü Xs€+éÑùvE�Lº;ÁúHB–�ø…r@²á!éyX÷뵎—\%v_ +‡@Œ¢µBÊ|�‡â#ÓO’L?•²RlíxoØ}>O®×Qucëš®Ï<ó®�/a. ýÇsÄ9ˆO¥HB¿á4 t»¸¼J 3öUõØ +1ˆb]i=«ˆW¹e@[ëÌûbjŒëk­khk/â™iœ-x)®ðôcu¨žr}û]èx�ÿϱ”Z§MÆ„1´¡$ûÁ»yc&Uò~ÓAÃe§Æ%ó_ÔÐñë¹wî0žçXb5®5…+’Jñ(ˆè¬rè8K…x= 5g:IËY}B—®â©¬Èþ…°Z'^yŠeº³.àªu’>'•��ó%Ó S­k†Œ®^ç†˵�Xcþx#©wá~?µ;n\1ô²hŒê±#"”íÀ£ÅÄõ?C>ÚßXbL®ÑüÄ:ˬ›&o®"Mõ7òÖ-šûýòkžy®¸q\Õ÷Ë›»2göúÆÈݰB"5*„+($mŽhÚ!Fʵ +ÔE¡dëž ss÷’×nºK/'”ô@ã› +Pù7 +MÈÁ|Ó\÷¶Ö7·ÂÜpá¾ð¹”9_Ì(æ–ºFÁ²ë,ZvÀr'‘7ì&œîÑV_´7æ® ƒŠ©¥ œ:—Ùý«0ù øÔøÅîvëc°ZÁÀ#ÈQV»†-=4ûa›¾bä(! Ú¶n¢.Â$â3ÆÄì !TU¬Ë0%‹hãêæ¿�w•ÄŒ­úܘœÂ˜"»ùœpõR¡“°'às/¡®aüªjF«w'tBÀP� +¿r# Uß?[TyÎN›ªŸ]Û{'+ÔÈñ©µ•h}>Ç/¥O ±ê€O ¯ý6¼xݳàÒï\3-î–Y¢ìXœì“¹°í$*×uQ,Á6î0ï9�æ Z áš³ŽV¸éx<MÍMã C­~àaêÅðJŠŒL2÷œ”ˆ„±Ü ©¿¨†çæ=×L`‡}Ç6Í?–ï}ï[æ ŠMÓ"Ï÷üØ1ÌË#�+ǯµ•tgDU¹\Ü–0v]çÅÞ¾e@Lš+Ø@ƒ„æ»(¿ÐÇn·Í’e ï'£‹lx&ccy)\õŽòÛ2þªu» 4�³œÑfÕ§|#w²Ü‚sé)�äz$?⒈ܘ8®WŒœ èוÿ6%ïM\\\[‚ÚJÙÙV³d¤Ÿùµ‰LE§$[j±úÃl5îPípÉÿÍÈ)“Ík�z8ßdŸzĤÐ-?¦rÀ1ëZ™ó@ûƒ2ÌÝ1$­²lPÌE3²rرI_¾½ÈÙ¦-�éu–ɲ&ˆ½2ݶ’²\uFŽ_¦§0uûÜî°ŒœXFyë 惊éE®Rÿ@qÜ…0‰C›Vüº>¦û+K¢èz7¿<×ÊíÌÖWwŠï¡dìÝ:[f@ɉ×ÈqãÞvsº×§HLÕß‘fqO�TnÕ\#§þð¿¸åØ +7rçhœ+‡ˆÐâMê†gÖ÷Õ'µ#E«-pj NjDo¯:®Ú»‹gó0>²Ûl@P\¡«]l÷G-iºÈÊÁØ('þ"Òžt„#~3eâš…-:?l~Š’�P}€Óñµd~ÕiC Å‹H´˜dü”ÂNò£ÕdÒ¶)Óˆ|ô†nÛßúæ1ÂOnY½üiÎm1™´%i:T,Z²fØ&˜�iÆe$ŠKˆªwtWíz,dm#ë¸)ÎÒ$Ü:v&¥I¥ÅkSWø…œ•‘}½àÉ,—É-ë\\câÞ|Ó²žÍ”9e¡ùu&N�7Á™«Â[PL +SØž:x¹ç¨ºÑð „£ãñ\øÀ¤–,ìì •u‰R–;QU + ªxñ­'NÔdL›ýŠí$DuYÏü†ôJåtë•Ä»Jps¾:Z#ž¾ˆÁ�mÓG”ŽFS&*Y¯(%p%æ;067µñ�„+Ju` +jjÍÕ +]•&oàd2ÍD ‹QÖ±õ Ý=VQ÷2H$'Ew/ š¼íŸIÕ” 04ykùV¼{­’"Ô+ _Ö¥ö-š¼Ð�Tâb5ªÓwùI�©\@Ϲ¥ì@È9ð¥¹psÁŒ¬R·^… œèKAG8J$‡bcËtp>«F·w&k,¤ØgwaêEƒ]‹­ + P<‚·8¨}œAV 82¼cÿ”Æ+!…eí/rU2ƒ~͸w`¡Ÿ|£hB,Xº`j¥$‡| +‡fŠ©àÁ'ÍpO<¦�VJ^AþçX”“u.³þªs@S(èPµJK"È V �üþð�~ï•¢b‡¥&EHÕç^ãBÊ«•e\��ª©ñ‚|ÍG~uÆ7X=Ë�úáí+X!¢2þ %7é9¢ìÿ8ÞÇ¡¯îß:ßö�A¡Ì©€å1/¿².ó&sp>¢|^'ýØxêÁ[,Ü–Ú��9@r‹Ü–ã�;Zô«ú£ÍV©9¤KhãdÝô\aöõ·%³÷gàõ�óù‚ëœ F”óÈÆ½Š¬j#�…À"PÔ”.°y^niËo¥ÇkÞ�ñtX̸ +3¤g¶’ï0FÆqý;‹û»lxy:Í_ùT?,™U�'æè9¦v7U›ÖF2Ñ+rÅÊ!¡ø–òˆ¬âW‘zp!ès�÷¶ÄNdO +LƒGIÄöAó\!ka0«Ö.ZJ ?v¢x ÔE…`SìRjåì̳Ѽ„ªÊsX,/¦•SԆÉsA6æ#Ÿ²ßš�e†&8\¦`õMÆÔõ¹¹íIBÑtʤ=6ºÑ¼AiSQÉr�ƒÚ!Œ¦Ø¤˜3þÐÂ¥On¦3\0>oœ´>I­Ô6ô#kÂæãLU²ôó_‚˜.S ˆ;û†h+·‡³?ôJ!Úf¥âÞ™"¢Å�ø5ÔÆ…Îv”“Ë”må‚꺯‘ÊQ%IJI_٠嬊'H>dä.gšüÐc`®g!ÉÉ5Så)ÓDõž2*D;ð%?+a§Ïà’´8ú¸ÚÓ]ÃAí´vFùä(�ß\®T–”ÓÛO¥HN¥9šß¼WbFÔ Ò¦2¾;«–Œ�æ;œwCìˆè°Ž2³‡¨|`‚n”?â œÞKƒÏx-H]ƒ[tÒšja§šÊ̪7àj]Üӣ™åʲ¼)B|¨·$'“ŽT�”'Œõn‡@C¶GR&@¿!<–"ÚvU«Ø{½‘‰,å(»‘3ÙîgÅ÷�}Ýþæ °+¼£l°k…;áN±_þ_‰D^Û† ÕÉvÍ­‚uLVsI%£ÎBè0æ£R�–šØöL_еB¤§>R¿ÒEÅôðÒ&$TcmàP¢c¶jš0õ²pC@#DäL«!œÐFö2 *tÔKéÏ•ÞrRb]¬Ï­¡ãŠn ðRI}›M”LýV𨹵TÿÛ¢ÆzAw¼Åဧ~G®�þóöôÝþî¨Ë€F õY‰$=ÄqÓ�»#•ïÑ·¡ƒ@ós£]!QïXáï±YËBâ={ÉÉ3­MWäjœ¯JIÂ!}먎®%½)Z…nkäè�zIzN³·³\£œÊãµ… gtH5¡nª�•êª�;ùh9lrr>›!7�+ònR&Ræ¾ÇÚa+mç¬ÆÓä82wùB¨‚N‹F'Mj’X] +¿Š8‹SŸíbu�+/”,±—ê£Ø¡àÂx!„†ÉT´lÔÌ1VÄSÓ“2þ‘&áKòùm"§bõßÚ“xðê`×äŒ*êdÎÁ|9TG¹oDªµÜwcZÌD¯ß›e™ŽLXǤk´t;ß_B°=v=ýĶÁÚ¾#I/ +Êj±ì‚pîíªþ7UÌ¥_œST{¡Íý)[çz+¤£�ö¯�W�„…¾©Âãå.ÕZ,òŸý¹ÆÑ×Tb�²Âʺ�!zD‰8¯7»–ª#èŽk•1ï˜Þìî|yù¨ j5¨6î;ª<_ÑäMYAÎo*ï©â¶˜SSZV²ºÓÞ6¥žì“×÷Gø Ž(N|‰`žÇ>ã`'F8F™Ý@aW¾7?C`f‹t¼‰ãáöqùùàE“LØÕ4êkÓ¯ÊãUƃ ÀsÑ0Iq‡¥‰ñ³à‹Þ௴?©DÓ9ž% ×U8…SZ�šÈ?Q™~g'^;’z4϶!äÀDs˜”Aw~©Þ4"½2/ò@ †5³9]‚Ê¥ +Jf²�—ÈàkäÞ¥]‚Á@PäÒø&7AøË3+ÉDÕϽìe à¤I$^Ž‚­ â-!ß’£¡Ò9¶çæ¼�G“Þf¸rlûÂ}…(€ÚßoP¸ÑàÙö­«�©nÛ•rlpß&ß­3hzAµ –qLŸçDá4E„�íf_%qW؊ݽ/Çÿ�Ôku×]�6nÌiÌ2M<s–!÷áËmO ½RʾÎqq¡ãø{Þ‰~²�6”¤ðx‚.øÄê6«h1 –¨Šˆ¹êÅ\&KΉÏ@=f”cT.G�ܹ–#ÑY•×£ñ_ÙOœ" µßþGîœðš™X�@:uG4§Á+@Y…’›BdâÓ0h*6ßËu�Í¡ºÓñ®}iÃ�¤9&Ÿ÷¸ù wÇ4´PÒRì÷Óî@€Yèg´Ká0_ZÛ.'$|‘6JXÙÚ8»RG-r·`¡Š>€Vèb¼x6…d¶¢¾îgB‚8’–²%`’T»né�»ÉS#Õ¹Ú¤ï¦(z/X‚4+CÃI;65ˆuÿà‹ Y|ª¬bµè_Üï JµÎl<A”®£• ™M¿R£åZ3*<µÝWŒÚöÆL+ÈŽÇY�Háˆ8“îû9ÙàÄGš­máUOWSˆ^bx™¾‡?1Œ£4† +²¿›É 1(Ó™Åê2ç \J/e¾hâYèWhnwÇ–yÆ@õAg�þDç!_$. +ªOé o’u¸L}Ôa‡Lti +M~([ŒÙ”Å|ŠOJ^8ï½]B!#Î Ö0]Œ†^Š~ãqÓ™iyfÇlo· +ÌmãìÑ"kü@ÏQ@s<˜1½`6Ù jÄJÑ<,OÁÅÆÄ|ÞØxú!Ùõ�›–;ºm´‹8ޏê\ØB_Ù`¯%«îÄèùÑ>�¿ä­�øºÍq¶y8¯*¼‹¡XFŒJnZô¨¹`ùzcoyô4Ëwj<"Vûã’¨-ާj?¥Aå膣œÆxüÆz JßBG³‘æ3-ª˜µð€¯»—6…¨u ·¹•c9%®²–ibk$€ºŽÆ��ïã"0¶ ün0ÝVò`CçaQØNè¬Ä«VïII²G×Üœ15 Ë~Z{wÅЮl–¤Öi�65÷À]ÖäÜ(ù“"“²ÙBÓ0ñŽÿ¹Œ'è‘cð–vËò +ÆdŸÊòŸY9|\ÉOVµr‘ŤñÍD<€Eßæ0�ͰŒót™'ïAÆAK¡Ê"ŸŸðá£s[E,¹ü¬+ +˜€2.Þ±h`¢úˆ*‘5\¹}5áóê–¶�·¶0Ö“x ×¹êrnêÜ&ÆËŠ8KäßóŘ‹^K“]Ú“Y°AÊöf¿À„2iÊr1qAëa]IZºÓºä¹‰Ã5ä…Oâ)ã9ÅÖT\±ì.̳6¶h{4�“±Ÿñ4j9ˆN˜5��’ÈØåA Ã?ÆS1ÀòȈ¹3ïC¢ˆ7FˆŽHQ¨âŒ’ËÍñÃ[©¢£ ù”}½ÞÒÆf.‹€‹˜YiaRÈÀå]–•{h0ÀÍ= ¡wÂéK˜ÖT ƒM³¬øko>¬B]eIKŽVê‰Úý;ŽŸ®°ÝÂ!+Bˆ55ZÒ‚'^EÉvÐÂ4Ú›äÕ½Wu€t ÒœG ÂIWž³ržÈ)Í/ס/õ´¢½‰gŽbo½%„õ+!§ÛÎ×í a¦‹»‹ç20my�ñ®*H\Z,+'ì>àvÄÚûhY{>ꚨ /“"®Ž©³¼Å3—,ô5'I„ÊbC:ü¤,k÷ÒÝ¿3²e»|”Ô, ¯ixÑá,´QgÓ²�eˆhË´HyF³»¥¼�tp¥½èOŽ´Ë7øþ!¿&véÞ˜Yý'í)Û“l´ÙtÒý¡²ÍÙ´HêDdë üN а(-ÿŠË?•³7õa=�Q�„$)ÿ©¯Ã¯iK[1L‰�©Û[¼ˆÏÙP {`XCËXœ +ðØ0~û®*½þ7ÙEÖ3‚ ?úÖûN1Éaï+3_ÆîzXhœ¹\�„Ú�éZl(¤/H)ë!ž€Ÿ\ŠÖGa1<¸çgŠ•Gœn7Òå”K|ª¯û‚HGþS ž£&Þ£`j÷§¥Œk÷¤FÀ±{IT²Ê)pl-r"8g×ð@€cz¸=šÇ�ÊnRŽE_�6êÜ׊'/ÙEPƒ +ÙŒsÒ…©÷x·1ÚXzó ±Kƒ;Z#^Y )šÍ)¾d¬‰'F{¾¥ÊÏ"»»±‘ýtHÜXAÇU€gÄ_iâÆ âÁ*þ»·´ö$ mësQóÛÅFÐ7¦ÿ>"¾XÉ[.Ž¢{ÊrLÈ~êð¤Xó&q§­[gŒY“ÉÚš„x É b�"d¹ë*±"2å¹èä0}²5f,¯ºÉ~„µ1ž˜ 7EP~<âßä‡È >(Ì¢!ŒAÅŸËxbæˆÝƼÃ0? j™ü6¦èv‘ýdE·±pÌY�ôNÜ0ÜN•Ȇ@¾0ÐQoœoc�&5év­N@ænclðÍ5ûåe&û]êjwqKXÝX‚d€T¦×scÛËNO|ƒð®€&cuƒ¥ØÐÚÒOÜ|c!=7´‚/{xÄÚ««Õ +2$À;­1áf5®�í¼�sÎ ièb”H” ØÙô? yF…ïCuM%jNS *�1H‰>â³yn¯†gkÑÃgŒrs«£õVx=*”kã`¬g;ÑB–ò5ÆøS!meå¶Eé& ”®Êeq‘½sTÅ-�ðô¢øÃ˜égÂA ëušÉ±´Hœ /cSkñl9³ÜÆaÃóB�0æ$èÎ??çupѱ0&ñ€In©ÆDYÚª(©?¦šG=ÑTÔƒ^À aËÍ¢ øaN ‘SR Ø>=6èŒ%ª½twP\‚U$Æ\æ$9àÉcQJspcɈÇH{`ܳÃñÖ:ó ŸER&3¿8Ð!ðE«*XìT*/áúÍc~@©·*CÌɺ�1KKѹò +¥‰‘SÜ÷Nsv#E:‹>›�{w%§°gßœAÆ2Òº’ìOdŒ;ö„ nGÖ峑1 ,'²íÅÓ+i„oÌåaéGUÐÙfÀ°óÍ268nyG`…ää02Žn¼E�m«ß8cë½z[„`÷ðNßé±fˆÝXÃRQlþs£ä ¸w—„k2ÃMAìs ¨"gúíéHL9oåóCŒí*ܬ‡q5FbLçM䄯UÁ~1½j’™¬-Æhqšo„ÀÇøô-3hùмø9Bçb¤³Ö4ˆ°¡ë‰Í^¹Xp�®ªú„¬ÜÎ8J{Œå..P�˜)&|sœUã†+ÝÚFíAPyq%;:b “‹wþâh‹ÕqTå.@´™`ºX$ÄÅÒW­Üß\Œ;V #íüÄ}´SW›d¯ý«ãû[ó&Vó(&×Ê8·Jlx‹>Qÿ'qQj„paˆW:ê®4ÐÖ<R.ÉÒÍs,”ìb”VDÐókoÍg×Å,š1ÂŸà‹˜°ºù¶u–™.¶Þ]ÒÄ%…,øÔØÅ¬�dš&²xHÝE`x ô,¢¯×§ó5þGzsœÍÓª²1}ˆÀ.æ‘ÑF‘{·‹al:ˉØÅRK�tkœ>[Ss¢L¸jzÀeß.Ö4ùHNÄ£.†.ÙÔWíô¢n<hn1Tº±uMr'sysR/ÍVÿÊ] IÇŽÅ!DØ4×oèïb^¶ª*@�"ós°ØÛ)j)¤PÄ‘éä±ô~Æâ.H9䦽—¡I t«u²¬ZL¬ó‘ª>Ê癎ì¦�©I§x ”.œ�C0TH&eƒV›6w;ŹgnwËLYý`ÅИà ¢�ŒbÈúÒ‘N$ /ÈÿŒk3ªÀH>*´cpOóéÒKc¢ Z–(úÝÜrã ÒCà¯jL ²Ï@DÔBD¾vZh¬?çKú…G/†½úÔ‡/s:b¡!HlÓÑÆô5XM59bñbä¿6�ùhyÕ«W�b˽‡ÄÑ%m昒KíuÇhÙèªŘ^,E›0=³BVY¹¥Ö¨ÇðÃ4�Å‚q!‡AuÅPƒO§ý` ¨%°åGò8t}Î�¦L™eÈS©6w¿º`yE=:–˜¤³sA,8FƒQ z=ÕƒF™wjjN�lÛ^ª)©cb „GK¾H¯à +á„ÁÊ“RB ï › có•W53]P*[Æ”í¥f ß5Þlé5Ø+)9ih1ãjÖ¼µdã•¡lß”Y¸¨^NG®…IÉüĮѰ.§5ú¤÷ñ”_#õ¦\™�àÙÄ»�`G€){#K§ßmžÂ F~v¢n ƒ­oÒŒä�:ršïˆÝ3fnÇj³˜wfôÚg5ÕÂI[׳‡�î:§S¡ÒÇ5ý°„ç; ˜�m?ª|E»!j]3M~Dò€{æ\nªiÀ´r´ Ôj»r÷¢P$QèRX<ÌaÈ…*³Â2G{‘øã ÉH‚À'ÉkÃNžÁ`H)¢)ו>fKq[¬5ìZ '´Ôäv(&XsŽ+Z&«#]Þê4€G.„�ÛÚ08íµg¶÷Þ�ú4eRĈ¤XÅsæã•?ɘvº™Á£àŠnE»¶;àØë� ³\ÁlóÀ(Ý^!î?¸™{„fѽHKÂhÈèj�ÁÛÍ? ü@úº6·tLA{2Jø’M�Ø+Äþ#£Os˜tá¾zÀ ÷M๠nXØØžŠ [�¤æc¤™×ßsŽLr�S,£"ËÍQ.Œ!`Œ} +À<’.!ŠÈPXÑ¿ü"âmYà>qäd;GOÐjR�É—C�ñ/OÚqº3¼Þ2ä�fB&¹òüWƒß9}šÄft—‘oy+´öÞíÁ<Ñ}ׯZîªÅT“¥öå‘ù5ç‘ä!ø¡„Rà2¦m<ž§qECÛÀDí�©Úµ€À# ¤v…@œY &!�òi‹Ç|Ð|yŒ£‡=<Í:$&Ò…ÞⓇøÙé±´¸Øaãs³ƒ%…{°cÞX’M¯Þ XXCåÓ!gË��¿Z_Àˆ¸:®À0Òæ-†‰ž=Šö<Ù¹*àŒbþkÚúC±'ˆ>³8Á“Ö(L®NÀ…)œŠ–°~¾#tŒ”œÌ%kørœ'ÀlMàü'z•„¥!Íô•‘^æÐ³80zÛôJ1ŽáB£J0žøt‹×Û]§Ò}‘ã–YW¿pPÄb¹{0�ŠO¶2!‹Ï0gßqäx$˜YE–²0ù³néx\ %ß<'*®ŒjM8"Ëœˆ™ŠÍUæIÑtqÀ½Ýùñ¢?ØàÕwªÄ2}(Y�ŠZI�XôÿP +…‘|Ê3¹–+$ ò?ÿt«E²É„ÃßÓVò`Ø"ûb›Q¬a @™2‹m cçó—V–CÎoY{2 €h7W'þI$Z³¶<Öà–Ï»ÁèËôšK�$ô4 hX¡ à>Wo0ZcÒHŒÉþK|3?mKÏVÇì§‘‹£Ã8DwSìÑö=ž�žŠÆ+¹?NÎ*^¹xë-¡¹R±ÚÜ©P¬cøëß1\2�¢;õ5È–°¥½PI ŸH©�GQ¡ B�ÜãàÊ‘‡Y>†ou {Ì�J5ùø¯µ òât¤sºÏ’ +{Ïõ%¦0…ñ +�+mTMSÌ+£:3tUñ¦ŠêFh¢ þh6`*Œxóè)dÄW˜â>\,o'oX®ÝÂÀª¬,¬d;­ÕrÆ„~š,¦]ûÌ,‰lAùÔFcI—ØùUYGéf§2™¶…ñK³‘·ÃKë´,�f߯и})áÂ’R§$«‘ aô¡ËiÛ•f.pèdSz‘9•(C¦=á×�Ac Ð«V&Î4œFoaŒ0p™$ù�Ìøˆ«>Š?gCùTƒ·$±–"ì¿v»›ì;Ó¸p‰xÐ‡ðø‰·"÷ì:~s­8½ø‡[rÁWTM¸éí{¯Ý¬ÜÖ*u|¨=è°Ú `³lÀ³ûH0/^C’`.ã)!¹QÆŽûØKS‚�µ• bó#!Guô<‚™r¨¢àÄ6›L�¤ {ƒAOd-åu¬ü}Þðeɯ˜e@ðÀ�’X{7áË£Ð4aoŒ�@÷�™_èeη¸Â9”]_¬èû›=gA$Ñ<0Gº’…F¯Ì# +[ÌrÓ#¯äƒG +ÑËRJ@qÀÆÃÒHPŽ`AŽGk”=\’h¼Ìâ=~’P–«5‡<�ø£Ü9M¥Íwòº‰pÉÛÞ2?PœëŽ�Úöµt—‘Ð¥df%ñù.˱4°dJÇPll`Ÿª¡,ÑV`K)à;Ž:  ÞýîÞønÏÒ‰Æú§ +Ùài•S`zÊ;ÿ�P�9yÕG±‡*©Ô©ÀvÛÔ‡™/ø^� ©JD¾ããh£À^N�ùê1Ž $ÏÏtdal«l £=s\åU¾†0Ÿ5*„²ÜðlغC_¯rè¿Öƒ%0Ê{�Gt˜Ã£Ð·˜þ¹h¡FÒ7�T•¡"°ƒðâÑSÎzŒœÀ:©µÃ|æ;nÎd`¦cšùM€x0%°"³›Å �ƒ t6õS!•7)° @Á +¿ ”X²óP`yEÞ¥Ïëí¦Í ¬#zF˜”!åfIåΈJ{˜ {CvuõfÆÀ!§'jÀÿ\`î~;‹i ¾06zÚ  Lag€)Úg�AHƒ6`ÓH-°QÈu62~^,°ØðëþÐ)~~q�4�h�ª¨¦ÒzO _Ùu Ìú#‡i�SŒ±ØÆp9ºf O&h6¢Û=€j k™ h;:ðñ£ƒ,+º@§âQbDkŒúbûå„çhLŸ †™G‘†(…ˆ3J] +HÀеûëºÈV¨,HN:Ò_Æ­ sômCýÃV¿É“Ú(HÜ|CyÚ‘ë‡�Ƈ‚$1£Öª Bpί^:šƒ'n"•ù@:%4¤M©FªƒªŽõ +ª\IU%È8 ­ò­ø†•Þ@?HÝÀhRÓ õdÑ”Ld}Ùª�k"2¶N=8Æéü€�SƒÎM04Ÿ¾Ú!ÇÕx‹v„³"œ…«ï’¹ï1·Z€­È?æW¤‹Xï#ÔIG^óÍ2x·…¬7<å‘ùÜ +ÅüßP!žãùU}Aˆ§8Pa–EÕž7ØP 'Pç,uþ�È«éwYHÁ(Á£é–Ün‹�Àf¦÷DÉ¥NAfpäc^Ðäq¨Ú‘ÈÖ©#¼#‘©Íïæ{DüÞx�é$ƒè�Ew.`ýä/’(9%¡s¥ ÒF f(§ñ�pvnÀŠ‹[JºªØ(ÎÙ”wf-14–^– zZ`âRêYÏ _#cÚûÏ<­ðÁí„×aöd­¸Þg- +\+ÉF{‡Ä—À•ÖSÃÑÜ0„2Yž“ù™N ùÉß0�w¸ëòñCÉ„�ZŠ­f`¶'…°þtoŠ+¥¸+¦MèêÔ÷ìyã£�]SM5j+G) endstream endobj 74 0 obj [/ICCBased 77 0 R] endobj 70 0 obj <>stream +H‰Ò÷wVÐ÷u6PprqVàrõ)[ã endstream endobj 71 0 obj <> endobj 78 0 obj [/ICCBased 77 0 R] endobj 68 0 obj <>stream +H‰Ò÷wVÐ÷u6PprqVàrõ)[ã endstream endobj 69 0 obj <> endobj 79 0 obj [/ICCBased 77 0 R] endobj 66 0 obj <>stream +H‰dWËŽ$E ¼÷WÔtNÚù¾î‚8!„8À½ìa öÿ%"ÂYÕ= ‘¦ÛÙùpÚápäÛOŸ�·?çãÓwŸ�Ûß·|ä£ÔžÜÊau&ï~üóûí×ã/üøöÃ/ùøóÛ-&x¯½\pÿ80j²bÙüx|½}úíxûåK>¾}9¾ÿíøùö³9·>�ºÿ笷Ï8éñí0ýß]‡ÿ�jGï©älG+iVãaÿz»çTË‘ÓóÀ÷Õü°ÔÖÀ)úpüÜ�ç­~ý†Eu/â6�›�ÔÚ8pÈœØÕfjýÉëSGä±b�XC\æñ~»Ãó×,�ý´á.ìøR“ÉÇí |½×š€¯úº’Ó«’2]G‚ªÁ•‘Ê ‰íºNFtÍ{k©,€`¥™‡ÌŽØ�nœöÓÓsäý9R›\Š‘Žôß+�¼I³ -…צk CKÃ#`]‹çØeÍ(Ú#M$”6oÁ#E[·ÊØ‹3‹§®ê>ÚäW ]1Ð:[\v­KvËM¶…\ài2k%cf=h›¹ìZš²[z“�«À öìt8œ¶âÂ, „÷Æí–q>lë¦�†ê!’<`a¼›§}Åí[Ó‚–VŽ‘¾¸!gö`7®4¦5âUº.�‘¶#ènÚ½"O®˜uýžV‰@L/éš�ZÕ¥zªî‚Äè.ÛJx…òõ¡‘Ì´Ã.Ù•“¥kþ#r4#ßDo‹�{!Nr +égDW|°\"wˆ�ê—YÄðœE–Ê1ø@ …˜ Çsd¸|‹ ÎL#�Þ”ÍîºpK™XÃ@e²9fÙYì�fsMøÅdÌ<ÝÁþJj„3ÒÔ%Á_‘ÜÀ1@D¬CBÀXÀLöZC•ËB™ß&0NE†½<)£±ŽŸŒÒ±]¥œ±3ÏüjƒeÑ7XqPåÚ6ƒ:Þ/{sÊ}”Ôq•Í5÷NpÕÓ|\Þ^Üôr�Í +¸À^õÂÎÖçœûȨ§˜Q˜ÏaÁXOn€Çò +?/n»lÑÞóbglãj•ü€H¹Ç}Ú˜9ã÷>ãPÐùˆ‹!¼HW"�è†Í|Âdqr¨(¯g¦{âX¸Ä`®.``ÀÅ@�dnÆTêÜóR1›=Ñ»õú+lWÁ_hÆH®�_5ß\ZÌXÅd·éQS勸‹\É€ä5ØÖ£`ÖhÊS%uЬØÂéQ�«!St£r˜{/QÏkEI‚<‚eX‘!± �ÎNÚ±‘ð$!Œ4Õ¦)Ø–Û“Æ: :Û+Ñ¡"ŠEëàIm€ÿ]Ô;¹ ³ôï±0« ¨ÙP�qðA‘mj X4éfÑ[ØsÚ–¯.ÕG, …ûZ@£e܃%·�·Ù2€©¶zâ×bÁs «4!ΪFùMVäWQËD›n ›È-^F¬k�騸;÷‚�[•Ýä7(/~^UÙÂ@'UV lÖ¨/"Užs—-‚fc¯°ð‚°3u?IC�Á.ý$‘kd„ÂÁˆÜÄérØg¸+ÑfíòÞ¢ÝrÄã>Þýia—¹WìûòbZ„u ùX¢©%ñ»6a {à>ÑÓ¨Ã'RÚ.ø�¾&‘€*}X(ú Þ:ƒC ¾�;íÇéÐ9ð~C^»]6pBîØÛ�–N{Ü”/ïÛØ~Æ&ç>Üùª¥T¨v'ˆTò½ £ÂdGd¡@ÜP¤Ê$‹îïû•¨¶¥-ÐQ�sÐO†FãdÙõ´ßo+-uÍf‹_çF= uð8¤F߈óO¯â�€°Ï²ãÄÊmb� ¨yìÅ(-ñ#Ô +pR᳃Q—�u@è°Kþñ \€n– —a»'+HGêÎdIÙÉ4EÛ§…CM�÷e”CK�BbÐ,$"¶ð\bv±®��R¡ÞQçiÒÔ³*Ñò©ÃÔ¡öÈ»tVÑe†®^ÀÅR+2ò61CÎŒÚB +9SŒ;‰tÀÐ lÔùú×@Ë벫” —�ÌpZ‰†3Õ.¦ÒM;O–NïÑü2’KHäPÊ$alLùm[]²¤àk[ò"¤8c^ÏÊ™Õ�è.¨X‹îFUWÙ�R=¢®âäsd̤µ&7'ãy‡pÃQ8@á“DÕV÷Qì]HFÖÙæë›D¢ja ^…Ìâ*Æ¡wKÕ»ŒYCœª|Ô+ƒÙÝ70�7Á°�†+’„XIÀvueÏC ³JÙ×}¿Nü|ø”Ò³z<�ÖŒ“J³ûDé52ãa+ +âj”T‚ .¦v�£:®ˆ`Îýè#áWfä%"dŽº_0×B›ÓåøZ³ƒ9� ¡±$dCƳFjD×Úå}•}°™gvœ‚²f>ù„�–‚$X¥ÿüŽIOÂs¾Æè´†²ºÏÕW@3Í©� “gB!ÑS L +ü/+4f�±uî¡MG,oÚð*×Ðkdþ³.œa–�:�’ã*ü§hã#ž¶-8§^Ud‚±â‰Ë]µKò ŠÂž¦r*=týŽùìv|÷°å%§¿xBüH‚ðé'ŽáËqÞÝÖÅ2œ7Cð5Ju&„¬Í‚’«dÞù[;–ä‹Ê +É):•�ˆRÔÛHç ¸Sa_Ÿ£_6&ç°:¨¸FZ˜êBL“�šŽš‚•ŹìËÛþzÜ.3gÆ|ˆÅÑ/à8Çš¬Ü¢=Æ‹¦è PZŽÞâqErŒŸXQwŒfŽ— Þ}÷÷.3·ˆ$’T#�Lއª2ò�L=k`öÂeÑ4àl�誊2Þ% ,¬ÜÎfåSE_æ¼ü=õ.·(M‘‚í ;:uRÈ%^J/” ŠÁÅ™ÉFP3Îiñ… �…½ pXß3a5¯–¡.†ˆç|á-„J4Ç&ºDHuçmN¶¥É@€pšPàTvté‹Ö\!ák +$DaÝ­K5±šZÙ�ÚÉ: Ú²dV‰¦G‹é›³�f ‚ûPäÞöC*g�}�)æÓ�e&W€QøÐ9…„Z¨àa£Æª�ûçB<­€u�‡DåÌNØxa·t*Š(ø0Ô +çõª­â»A§,G–Z“B@F”ÊUO#:ªÔf˜V$#éù柡§ß+1ìÑ&)-=‚БyØóQ™0Ûø“guö°xˆªµ¡ ¢£›Ô7_{ºïÔ‚6꡵芚6Ù ê³Á˜ +4Óx¯ò­£cuÒéj£ò¯› +˜ùëÓ\ìÜ ©…�9m™”À +ÝúoìÆÏBUs�Y¯Ù ´É®r¤ˆa ˜ó +> *[²Ç!¯ !€ÿ§ô1c/K„g±¥9»{ü˜Sn ±7‰g~!`<ó8NÞjVK¼‹c€^³û)×ì Æg¨£ä9qá 1HÍ,Re° ¡½ÓAç¡zetr.©y)Í@¡°‹±æš)±~è·±­ gÂôN§æ¶�Ô˜¾p¿(´ž¡•çÈ…y\.œ˜ò˜³ò7�å!Ñù™+PžÊ“—ºváPÈûšÏ@Ì�ŽQ=ño·òdrÜX‘·\”�¿‰–‡ì¤ÆýI[€|r ÿÿÃ�r[[¤ï¤& é�ôÁ @9’6ƒ>›êÚ†‰€à ¡ô‹Ž/ú´©œÛ~ÿS]mÖÝîLƒf¨BÒÜLèÎaòK7¶/Þ»Ö CtF%`czwï9À¶ªé¶ì�Ãbˆ£ÖX¼©}ÅVH%¾?X�ñÛqj8$¬p0. ŸöƒâR ac°â'À(ä°2§>�¦ZÁv ‹;@³,"^iEp¢”÷1µ‘hÁPì.hû¨™î°ˆÜ,F˜® Ò‚‹ˆC™/1 ŒM©kÖYz\ß,ÁÙX¹–ÞLÛ�õýòõ„‡�¶¢s�Apm7&eiyBu‰©“E‚?Lz¹=V‚ßœªóÀ‹¨P>NmWJÍÓÒÎßH©Ô<0†Æ„·íÖBNpí¢lùðë@˜Ô¥=?1o]çQè´¼Œþ¬pÃÏé¡-ºî‘ÏÊ`}�óàû·Žyÿx{ÅŸ_3W·• endstream endobj 67 0 obj <> endobj 63 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 80 0 obj [/ICCBased 77 0 R] endobj 64 0 obj <>stream +H‰ìWË®·ÜÏWô ÅÃ7·V‚¬‚ ðÂÞ_8Öb,À¾ÿ¤ªÙӣțÀÉÆ‚ ;]l6yާ·|<>üýc<¾ûËÇãöáã÷ñx{?bˆ#éoãß9ŽãýíóíÃßðúç÷[<â‘K Éòae„ÔÒñÛO·Ý~Å«½°7Ü/;~8>ß~=ìàvŒJ�óhjjùxûE'ão¨÷–tX°�§Qð4 R;Þn{µ{gÖ‘oៗ Ì,ô‚f W=o¸ã›qÜ$<î9t‰l⧇ΟÆÀ�÷TyÅ=Y( [-ÄTñX(À=�ÐŒt*ÇãvÇÕ–ž°Ñ$[—� Ó턺—J§îxœ\‡X"Ö +dì!CŠŠch€ûµÖ�±q†¡gØx]»Ð)ÕÂ�—J 7œT²ì‘sH0EžZLKŽºÎ‚ªü8 )ÎË·zŽŠ¬¬·™zßSó/³ÄJþÎÒ21.¸çÚ¤mƒ™P¢Ý‹ ÷Kq`ëÂ�·æ0²PqTRÑÖ��Ú¤cezº37¡è{chR˜§ÚÔ‡T(攺Sš[¦.—e O“›hŒª½5LA*æÞ'ªIá6›P–bÀÕí˜ü­ù^Æ€!BÝn3k/B£ ëÜüeqÿwe¾Õtp,z›eáé v¡á[£[ßTE ðoºD_DJ!2ÇH +ÓTÜ-òl“U³L^= º£>ñ(­¨1‚T¡0Ó x`qñ=–ìr]eD(-ŒkaP“º»H§ñ%½ˆŠ&‡MO:ýØ Œ’Pº2ˆ¹]=÷VÒ·Èà{–„�°©»ë“h*™’Ѳü±‘çþ½çÐú*÷¦�pð¶äÚ•ã”ÓSrúîgJ·!W­У✥�™Rí¬½Êx»¨H¢]o6R!:¥_sù),ÌÀíþc¾Ø»¼ ÔÜD¨¢Ý­nz«�Ÿ +j ^”ýž&‡/we¹’Ùqû¸88ÕÓëðC·3 €,ïP�yU•<ˆ€Ò+¾€R»0s˜"÷´Ãof¡º¢Öõ2•9Vš,ëšøì²<�G&ä©àŸ¢Eoá%Vf—žV"úV$ïT–f,·êz!{ˆŠlx&?pµ³4ÙY5Z¦ùŸ5�›MÎÓk÷žçÕ b^,µR¼’¶®ø`D f^™£*/TÓ5¬æŒ¥¸û¿D,ñJö 9·x|äæmÆ+aîR(²`�%îwõÌ¦Æ La€t‚U@m`®æ‹~F#e‘d‰r{]k놦[ª|QLçV‰À¦�T`íšž˜E)I†,n2ý/ +)vѾ6šcI^Thù#¤Ç¼6:’$+æxKÕÇÃo‘fYIùì¬./ó„È5eÒ{½ žÃ Ýdt°ëÕ�ɤp¸Òz,x�DÚ2L?f!º»ÊnO¥¨ŸÂÀ¦ûýŠ…Þ– >@ïhG]=ÄYÏÑÃLH—?üÙ¥ÒÇKÚ‹^NýŒ¤Ï¹êWX JK«Ìù“gzÛä Q±Ÿ7ëBüªT¨�#xg².DoY¤ � ˆEº=I—ã'éB^:\¤ é_æIºÒ¢4^ŒICó…t™ÍEºÀ3F;I—©õ?I—Ug,NºÌûù"]@N é²UC�tYñ[œt�fŒ~!]À­�¤ ¨´MºR½�.p’QNÒE†RNÒë“tÁxj3^–ÌÖ"]h–3]Hp­'éJ'çš‹ :åB<�„kªV/¾µ›Î¢[S¦_lk*?Ù+ç×:PLk(íÑ+Ï*N³ºèÊbY�öx’¬®úâ«+…�b]"�m‚öq~Õ¼éŠ^m¦׮£“«ªFæÜª¬XtjµJ•W åĪ,¦âÔ*+�domN¬Ö°x•¤vZY±¾6z5j�³Ñ¬]'¯(¿™ò±£<±+àXÝÐh§ÐEnõZ„TUÑQ½dv‘ËK9¶Õò�ϼc³l>ª$^™Åå˜1úL ˆNÊ’ÂEvmk#.‚ØÌ\öG>'ï«pòÆ» (dYC*:Iƒž±”òÖ+2~5úLFXZ\2Û˜]>MF)‹é¥HÎÊMCª³ªÜ�Ä›uóÒ¥Å.Aœ« “¦èï +K2r1vÄ@™+ÁÑÂI圈Mµ‹±X™@ÝÙÝ‹\æcZ‰>|øCúâJü�ž{MÔ·µ•E¦hõÄA@›{yr7ž³b‘™ž8Ê|9™2ljóÈ‚ÊNæ,RQà¤9³€v4U°¾¤Ú@�NTÐg­ÄO½ù$V’º+$·Vv¦×£eQâ DmŒ6-^ÅxUV“7öžÌ&ƒý[5¿@ogQ1°b;Ò™&©D–MÖ`I´�ë™÷EVý¸æ!\Ú‘±ØÚ1 )zÅ¢ðÉ%³ù_Ç¡ñ�ñE—™¡ Æ™òK‹ENhâ1¿kPPÊ�M{‘g®}_+&ƒ �7Ä;ãî¶¹;ï6ÕÆ(·šO‹Ûžo¶5ï"†_-[œ>*¹yååžDåÝÀ…Òv=vxºùJ=×÷îß«Œ…Yc²f})�äˆU¥ + §°ÞÝR¯ÎD¢7ÀÈdGÙÊÞw3G‘¤ZÐÌ«[féÆÎÊ_Q�á=1õ“¤ '/¢@ç +‚w•œã±êt™|UFܪBÓ‰~™Ù–®Ê ¾§G_¡?��Q�¥gŸ ‹8™ÎLºÄ¼ZrFb_ EQF˜ˆ–À +l:[NÜÓE—§*bd×töÇ)l%]Ü�n$ñy»`îˆh/°ÖÓm±*K¹Ú8ä?NL.?WDÞD"#�áÇM ƒ’Æ;@68ìjšyÅ�[¨(G0r°iÎÃFèx,1j£F¨WüØx«ð€ÿ~8�µðÎϺ¦�< ¦›Ô½<Þ¯;8aÖÞá‡Îqÿ¦Òü»�ߊÇû§ã¯?nIí1ÛÅ”ká”k0uêRƒ„!<–z¥�|ã?ná°Ñ¡Ddü%Ä +íšÇ +Ç"³«£~±ðx.lGí…åW‹p {Ð’Ý"*Fzê‚#¿XùõZ`aÒQXÿz%¼Î^ŽçJÃ4òQfÓ |ÜöNèy¼q=þí¢&»ÖRfr3_îìA^Ri å6è˜çïÊò3'VØWÑR)‰ñ®õ·ø¸=·v}·©ÿ¡ø¯Á¥9@ó8j‘ÁZ%ªt³ŠQ­;)¯ðAˆµ·¾r9ÿ!ÿŸ­ÀýQvû—³o¡÷-ô¾…Þ·Ðûzÿ� 1!•�!4¹´�àßû^øí'Ýgœ¡Žãýíóu¨j9äë$P²Ù/shÂp§‰ óN6M³x�Áªq^ƒd†0WiJÂOâä8Y'ÆCì1N¨;‚mÊÀeãÇm†™ÊÞ=BE�¯ƒ`QP­} îǸ»îßRù89e�ß2Õôå‚8À˜vŽÆYíð» ¾‡L°1c¡"¸y&¢‡¯–Ћ6"Ò2n«pm2˜Ãd€5·˜W1�Þ0IŽ,�;ò+Ä 1ÀÐìD¸Ô"Có²Ð‹^g"ˆ;aÆ*¼†ÝÙwgkZèHxÀÄÉÔH=µÝäd$C¬ô…Îç +'ÓÀý±‚8�þ‰ÿ&»Ü‘ä8b êó¼@+êÿ±2u +F0dH÷wõ2QÕ;¢œÝÁLw>‰L€pž’Hùr!T5›Í'�•˜˜*ÍöhåUtSÎ'\ÈûµÅ&ݯͤtf%„<­­S—Ë-;�iÒ:ªïLW� ôGÙž>˜’‘ê§èu/¾¦©×'�O••þÅ5ËM¨a“0T²Æ_Bª™”Ò“‡Ó«z�§ñ@£­Tv2w¯PÁ’³­‰£Á1O%'=…q…Î#€µ»÷~"‰§ÎôËj2«ªwõ%ieW­hD—�«¶¨î‰ ƒÊ‡gVr¡Ÿ(¹RWÑÎŽê—¢¨K)BríÀlQ�ú¥êR×Êô“{ÅMµçû¢ôý†\ï8ºfC\5R!·aC`Å�gºiÒyE)Äɯº ÷ûB–ËëK kâdö•ƒ,¨¦K©4ˆnh¥ј¯©J31Öiï·í|û ù•D�ùºl?j¨ÄöË�xÀ~??�b¼‹Ä éÂËxįJ%vº‚ÇUÕˆ!Oº¹eÑË�äAÉôÑí D�¸õê‘…z· FAt&0¥ï +Fj8�$ïâ')�êÉyƒnÊêÕ¨ŠÕåš‘?óS|�¸uµEÝÃ�]¥4äWmôæÊm£ùz"5av“ oôi|�¼_šÑs±ÊŠû +‘}h°åÀÅRœË³‘s)ò!Yi™6«+!E*ÅG"ê¬àÞ@LUü^¨yb¼6§°\Ü¢,*u¨EOÝW-Ã*ǽ8#Œ1ìš))çÓ4Ž`฾ë¶R},%dd€Çj€È*ˆK‰E2«…³;OÙ„6·�2ŽÀ›©G&)R‹Dª8œ%Thü)6ç6ÇpmÕäÝ_)$²ê,król�ÃJýªUYîúºÖëï(n£¯Ô¦_$éM§–°°ÎhB3“æoyç©âzÌ-*sÃnìc@bã<‰Õݼ~�¾˜f�ZéÈMªÌsRQ©MqIc\¦ â´  G%é0z/NI¬¼! ‘ Òz´Ë=±»µlŠ?a:@ñ%ÏY5TO–Ê·V¿f BçhÊ©0ÞñÃcΆ~³Rõõ–þiUhæ +Ô[×€­‘ЪF<ì²ÚÐù© +O;`=‚ÆM'àP¨\©6L«À·h¤ˆ†ÃZ¸ÞŸè¶Æç¤°‚º[›Ç ´­yn‰,“ÊÝ®’êq3Ì\=GÊóÃ?%k^k¡ª E"�…ëHH�˜G¢GLeÆl×O%Yb$b;·«m4DH:ˆ_ÊQÝŽwM ƒy¶3…Jƒ>f2@H³Ù¹f×Jr&»AÓ÷€i²ªj¹óµ¾éºJÿÀ{š6�(˜—ú±þåbvUÔ"a¡¦=‰Ô¡gœGùÕ¨VוÌñ~Z;�?Þ.‹Ø«§g½abÜ÷8uÞª1.é.µX /ò¶ká í3Œ({.^ØgÔÐlQU°ˆPî^x���0x$ç�5ßQó°Ð±Ÿâyç‰iý=ð°Ã¹M°b 9Ž€�®¡;|Ô°¡­6ÜZ¿¡=¿FnÎÓv‰y>söü7�ÏG¢ïkQ�ç—òÜK£vÇ¡3.„¯·à7�ÐΈÑ9ñ§¯ÑSÉ `�¼ÝM‰üM ÏÜ©!÷Ÿk›�w¬µæñÿ1,§Z×–¤DÄ;5Hô}–“h+è]]×:BDÞLú­¿rüÊg˜nÁ™ò×ïtu ³äpgiž±P2·L¾s„ø] n;ºôÞ½/€¼îi¡ˆ°éÞ‹ÜVÜÝ1÷Τp†ˆ˜á¨Voza ëŒJzø|™ÞÛÍáÁŠƒ¹@Cø ?4\z#¬ +Öú]!!-FsÍž©ÖQ»sh ¨1‰¯¼#D¢!ʯbz%ñ†áØ.xý(7ÝÇs«ÇŒ:aH¢ˆª|©‰U`V¥î^Wé¹¾Æ .\°s-?yí@Ößßþú…«FØ"l#t™N|ùðQR–·'ª+N�*þ(U`¹y,"¿9]çÁƒTè~ÄO+Þ1wŒvñŽ'•r<†ÛD·e5�ja'´wÁ(é~øqÖ�cj.í÷•Э÷< :õ^&Öq#>_Ã’ëñBDgÝ`ãšÈCÜŸ>4æ�?ÿο—ëÄÿ endstream endobj 65 0 obj <> endobj 84 0 obj [/ICCBased 77 0 R] endobj 61 0 obj <>stream +H‰ì—ÉÊ$×…÷õùuûÎÃV-ã•1F i_hXT7HýþàïDdfe $0ØÞ¨ièú#ò1œ87âÃ??nþñ1nß|ûq»}øø]Ü_¶dÿ¶/�Ï·Gõó—[ÜâVj9•-ÕrÏÛo?Þ~ºýʧCq,¸_V|¿}¾ÅgÞô×ÿkúÙ¿r‰ÎM[¡—:·VBlim�Ová§Û=†ZØ3ÆÜø{µ¼¥ÐÖà +ûÉ|îÛCëV?¿±©î›tÌã–Fhml=”995ÍÐú6BæÊ´B_}›!Źe#aÕ¡mç·ÄÂcSãïëy¢ð¯‹3)áÅk[%Ì6ò»73m÷L”ø)ayRCš‹ßÆÊüÎ0íØ{n¡ ™S¨�•%…˜Y™kX‹ßR¹€Àä:agÇ®I�¸Ìíy»§R¾*ØJvs`r³Õ�1âqû[ïµðÉþ\!Ë*ù„Íd¨&L¡ ‰×íf¢C4ï­…²0y…‡‰�ØfòËÒCó|ij3“\ÓIÿ½ré”ÿ%dÄBZŠÜ–i +C #{À]sMÖäÚühÉ#L*Y^hGGSìèVµ‚³´²äÐ턺_�Ì8í ]®èM¹!É%›\ë2¹Åfr…Ú�ÃTÖJdeÝ$§”M®¥YvKo&Çj`†=ºƒ]ƀÙ–;¬B!òïVÒzäÔ“)ZM†¤ì°Hò-�Ó¾ÜûÖlC +º¦/m äÊrÓΤ´z¼J7'д=‚9'í¾#NíÌæ~«øÓ‹iº­ VÍ©jΉAÉJNÅ­¢|ó0MTÚ‘KÌ–“enÿá9šžo¡·ùЦ³ˆ“EúÑå?*Ïñ±zÁ™% ÏYL²rt>°„b«1NkOnº8°³ì».<Ñ1¶¾ÖÜG¤ž|EQ>GrÆzqÓoäåvžÜvÊF{/ǎغkUü@¤rö-ö›vý`åôï}ú¥ÐùðK!r¤["“Ð�¬|"ª8µ*Šë•iäb¹ŠAU�C¹:��"·râ†Ì Áxb2’4À =Eé…FäÖë ¬ÈÙ +þD3šX¿öøp™|Å*Éä6³—ôò%îF®b@ñrê^0k4ËSuEUŽ +lq»×ãêBÈ4º±raÊ}.^ÏkyIBÎ2ªÈNH’SH×KÚ9GHx‘šfEµÓrŠíEcˆÎv%:*¢$:tSð6ê�ÚÈRtúϾ˜UD¨²aoL†ŠÉÉPæ�tKþ¶èÍQh[<_©®çXuQz×U(ÓrTÜ"ÞÖ“¦¢Ëöæ¿æ^Šn¥IgVMä£?²F~•Zºôè6—U€:â¢IÝÎhžŽŠï: 9¶j²µ)”ÏôÏ«Z¶PtQee³z} ÙTyŒÝd#h½ïcì;R÷ÈAä¨>C¿¢!ôFcÈ¥$rj†w8hÌLn7óÀ¾Â]…k7ë“?·Òd÷'w7o&—ËÜwìþÊ cZÂH�´L£÷É ¬ÎwWì„A4vÅ}ò¦©už¤´�"ø÷wÉE!�*}^‹¢wâ­Ó9´(áûu‡ü8 :OõÜ=�28wìÇ’Ýö¸¹h¶ÞeóâõÕ:âs'¨ñNþýÒ?�êenè27´ëÜPÞæ†ßÝF&¥ž¢Þ eî¸Î[f¼WÓ +x¦•M'©ekV¹KJ*Ìfµ^²ÕYM:Ãôä½i±—D™¯&_Ïd×ÖYMu}k�›×•Èj¨©÷ÚÂìM)SuÐÞ�9^ô}`éÎÇÇÀ­ Ý.I^¾çÀrtÑÇÀ¢ÈÍ—/páŠù:°œ®Ë©Ø—#3Wªù’|ºUµeÏKÃ…¢‡%� +µû<½)V3cÍq™ý.?O™Lö]žÀcѰBýpjâ%¤‹è5TÌUÛ¤£ÞÄç�Ç$¶¼•@Ÿ×JqVû‚Ç&)sÞåç!.¨;ú~ûŒ³qûùÖÔ¶Í2á3ãX(�\þ¼_W¨ë]ÐiÝôÌ�¹š°ÿéöÍÛ‡ï~‰Û—_¶¿ý°y(Õ×”t å®8íš¶¨-VÅÜ/²�œi„O�XŠz�?pÁx¶9Íf|PcMd»µ¼ôA�Ž )òú6½•òâ]~JV“s¬æÆ~ÐÛ-ÿ ?þrDñß +Ü_–¾"ï+ò¾"ï+ò¾"ï? c�Rf¸)µû¼z(~ûÑîÓ|94eÒáGZйm_Ÿ¯SJ§O`Q¨Ç¸x„,ÙˆþH +“J×Gw¡(D'Tlìà'k“Ý IIkƒ®ßé@ʲ� ×C~ÞVXL»ûjë÷Žƒ:P/ç%Üöû«|>‰[èUt¶s9€!o‹³¨&» Ø�MÓqÐÔY²xQQÌZ•n³†a-^9…ÛZŸ[N¡Ô¤(R\�.Àº¬ÆÊ|L¡™ìiÔ`Ó)q)pÐâ—bTû\$a:àD,hÉ !ËVÍ«(ý)bÖ¨§1µÛòd §O�6çÚ÷ÒhÔ£y�ËæÉ¬Iw�Ù ù´D(k¸7Œî*¢aãfÉM>.Kƒnª6ìú_˜ Ö)ói¶mD…3) ÄiZ%LK·ä¾U�ÅîŒ$W�ˆxEgv0)#Ô÷¬S>`kÚNëJÏŠ'C1aÞ�–³T…AÛ Ë¥’)UJr8½dÍj,PÄŠ ÈÔ0œšKY̰¶¤!*$8’ˆIK†B¿ŠD'’á@b0Qhö¿â^ »‚z@MbQö€ã*vIœÉ²FœªÙ8Kõìîˆçï¸8’‚;Ãò$+U–L²—-¢N%!ZîÀl–“úRô…ÐÕËþqû "dR"‘k«þéVPQo\ ‹¡&üéBx°´AþG 3® ãá¿2Å眱¸({É`ˆ)VˆaZH©nƒ$ « ¼ðbô¡ÊÖ>H5 ÔnŒœ¨L`JÝe8ŒÐdCb³-%?J(jHK*VOË XOÑh劉³ª‹²º•vQ¯A€E4äJ·Â¹<–ÞuàW•KqɿɮvdGn˜ûº€¶H‚ߨµ¡O±‰ƒµß¿ÊýçÉëä=Aš!A ÑÝŒg2€©qØ'4�YcèøþF‚™b Hò¤îŸMìĉìЂÁŠæ,Ù©_¡ºÚ{ûøÏÏªÕæèjÝœo&DP'�Â!–Áh®PWÏÃ3|n£}æÁ�þ¾…‘“<؉0òωž¬%ÙgÉ&‘7C� $µÐ’Ðd¶–pwÀ™âÄdž@èšOŒ‡‹£ 2în {rh€ÃÐV[¸ªÞ—@ÈÀ GvÃRXó%‡b q~7Ñ‘šZ³ŽL2F êÒ|D²ÌîNöxòXMðæQÐf*üTX†+‰&u’ÍÁZDE%ã(\{*œS½å”}Ñ(‘ÐUUßdª£2®\ÑIáûØûÉ÷:ŠJ'ìMd.ÔôÎU[3ì ¬ô&•v•¬ ÇdÒcÇù˜f”!\”';ƒF{æ' M¯^Ã\,QW LäA©Dt”Ñ#JêÙ·M+j}"’&ø(5]cŒ¦’t€oH¨ʚ⥙8Cb¶H  Ž%¡«EF‹$�Û·÷¸¡QÁuhsS‘yÈçðoeA‚_ío4L®£õ6ÀVHè!ã�„é²úäú%ˆ§cXOó¸è8$*wi„ ¬+àÛè)<ð$†Æ¹~øu|.<—y`h¶ñdꆞÛ=”µ<ýUN‡5ä$™z�RéØºup¡LWÛ–µ#õPöPq™@;øS+ÊØ©ýª[‘éÐ$¬Í"ÅÑ�÷¢¬«§¥ +}HÌ’¯±p °À#1UZ^Æi‘®¢ßCÛÊ>ÜT1@ >úM +Ô‹:àÓDÏ3È-”4urG4-àJíç¤J_wÉëi0š?Þ1w„³‡ü3ß3ž»Go‡ ÷âl΢¥æ1?S�RæU—/Ÿˆ¶Y²ÊÃB…ê`‚®�#ïP*Îã6³™4”ñÛHÌwÞöëÏ‚I¹aK“‰;ƒ¶Û9Òn`ü2ý·Ž6îÑÞ¿ž\¤Çû… óþ¬Ùû¿å|ú¾æ¼iÏÝԽ˄Ò08×Ûð{‹§Ï(ŒäùË—ùdq ¬¬Û½+¡~«é‚I›û×�ÅÈ`@ÞqEäÿÿbJOyaÛÔ2ï¢) êAõ!! 9ª6}B}�i% {Ãë÷ñèñ£Ÿ5‚«Ô¯ß1ÕÍa«Ng™5ÓRç¶hB{N«ßq“[ +ƒù}èÆä Ù…FÆÆôV_u@nMÓmç» +�3ÉÄpGlÞÒ•ÅQz%>œ_Ø‘ñÝy4rVXІ/çA{©;að°)Pð9»ÛœÓ ÈTí”»êâ5 ì‹ÈWº%¸Ð ʯKÄÒ¥Dw �}"]@Ú-wF¤n6#C÷ uÁMÄ¢¬‡˜ ÆeihÖÙzlváÄŒôÖ“76²~þö§ø°Èà�–;^¯~üýA“‘¦ƒ!s»,ùf©¶nUè9™v±uÈ’Â#U³‘×R÷'DßîGd/!ÌðØñù˜vLã¡áán•#Å) ÞÇÀ3å~ø‘ׄ iWÇ}Åjö¬Gÿw3æ³3 ¾:bê~Á'òZ÷°ÞÆuðþåCy¾ÿñû ÿþ`À† endstream endobj 62 0 obj <> endobj 85 0 obj [/ICCBased 77 0 R] endobj 57 0 obj <>stream +H‰dWK®#7 Üû}kDê¿ÍÈ*‚,r#ŸÅ›“¹?�ª¢ºÛƒàϦ¬E‹¥O¿|>>ýü9?üøùx|}äÃêLÞý(µ'·r<Ï�ÿxü~üóøôù·|¼¾¦¿ãÛ C?aè¯o�¯Èø³£÷Tr¶£•4«¯/ŽyJ…7©ÉæÂçHc9>gšÚöé-µ�·T;fKÙ1ÓkZ Ÿ¥¦ ož>SGä±b�XC\æññxÂó÷,�ý´á.ìøR“É×ãoøú¬5!_ôu%§W%eºŽUƒ+#•AÛu�Œè šÏÖRYÁJ3™±;Ý8íÛÓsäã©M.ÅHGúŸ‡NÞ¿$‡Y�–ÂkÓ5†¡¥á0„®Åˆsì²æí‘&J›·àŠŽ‘¢­[å ìÅ™ÅS×umrŽ+�®è ˆ-.»Ö%»å&Û�B.ð4™µ’1³´Í\v-MÙ-½ÉÎU` {Ž v:N[qaÂ{ãvË8¶uÓ@CõI°0ÞÍ€Ó¾âö­iAK+ÇH_\€�3{°WÓñ*]—ÀHÛt·í^‘'W̺~O«Ä + ¦�tÍ@­êR=UwAbt—m%¼BùúÐHfÚa—ìÊÉÒµÿ9š‘o¢·ÅŒÆ½'9…ô3¢+>X.‘;ÄGõ‚Ë,bxÎ"Kå| „Â?̆ã92\ >áÅŒg¦‘@oÊfw]¸¥L¬a 2Y€³ì,öF³¹¦ üb2fžî`%5Âiê’à¯Hnà‹ Š"Ö!!`,`&{­¡Êe¡L‚o§"Ã^nÊh¬ã›Q:¶ëï”3væ™_BmC¢,ú«#Ϊ\ÛfPÇÇeoNyŽ’:®²¹æÙ ®zš¯ËÛ‹›Þ.°YØ«Þx¢ÃÙzÏyŽŒzŠ…ùŒusÓ<¾#¯ðóâ¶ËíÝ;cW«äDÊ=–èÓöøÀÌ¿÷‡‚ÎGÌX ùàEºiD7læ&‹“ @EyÝ™ì‰SH`Uàƒ¹º€�n�¹AoPÁ4‘¤‡TÌf7a·^o°Âvü…fŒäøUóÀ¥ÅŒULv›å0U¾ˆ»È• H^ƒm= +f�¦Æ^a=:þàagê ~’†0.ƒ]úI"×È…ƒ¹‰Óå°ÏpW¢#ÌÚå½E»åˆÇ}¼‡{ÓÂ.s¯Ø÷å5Ä´#ê@ó±DSKâwlÂ@4öÀs¢§áw�Áà�· üG_ +“H@•~¼ ,}o�Á¡… ßÇ�öëtèøx ¯Ý.8!wìíNK§½aÊ—�ml?c“óßÝùª¥T¨v'ˆTr‹^PŠQa²#²P n(Òe’E +÷÷ýJTÛÒè¨Æ9è'ãq²ìzÚ�•–:„f³Å¯s£ž†:xR£oÄù§Wñ@À ØgÙqbå6±ÈÔ<öb”–øj†8©ðÙÁ¨ËÀ: ôŒ +Ø��%ÿø†.@· „ K†K„°Ý“¤#u粤ìdš¢íÓ¡¦Îû6Ê¡%‰@!1h[x.1»X×À@©Pï¨ó4iêY •hùÔaêP{äC:«è‰2CW/àb©y‰˜!gFm!…œ)Æ�ŠD:`h6ê|}ƒk åuÙUJ�ËFf8­DÙjSé¦�'K§÷h~É%$r(e’06¦ü¶­.YRð5�-yRœ1¯gåÌjHtT¬Ew£ª‡+ˆìŒG©QWqò92fÒZ�›‚ñ¼C¸á( ‰ðI¢j«û(ö.$#k�lóõM"Qµ°P/ƒBfqãл¥ê]Ƭ!NU>ê•Áìî˜Ç›`XHÃIB¬$`»ºŒ²ç¡†Y¥ìë¾_'~>|J éY=žFkÆI¥Ù›}¢ô™ñ°q5J* ÁS»ÀQWD0ç~ô€‘ð+3ò2GÝ/˜‚k¡Íér|­ÙÁœN††ÐX²!ãY£µ¢Škíò¾Ê>ØÌ3;NAY3Ÿ|Â@KA¬Ò�ÿÀ¤›ðœ¯1Â:­¡¬.ÂsõÐLsjãÂä™POT‡ûù‚â"CãÆ»ˆ=XØj¾Òñ@XÝ +Vì€ÂÌz¿8(l?ö�V×Ld‡éÄ~Åd,ÕHÊ@©^f„Oô“‚ÿË +�Ydl�{h@ÓȇÄ[€6¼Ê5ô™ÿ¬ g@˜%¤€N£ä¸ +ÿ)ÚøH…§m ΩW™`¬xâòE—C­À’<ƒ¢°ÛTN¥‡®ß1ŸÝŽï¶|£äô7OˆI>ýÄ1|9Á»ÛºX†óf¨¾F©Î„�µYPr•lÀ{"kǒ܃`QY!9ÅCç¡òâQŠz à<w*,àë@àsôËÆäV×H S]ˆi²SÓQS°²8—}yÁ_¯ÇeæÌ˜±8úçX“•[´ÇxÑ=ŠBËÑ[<®HŽ‘â+êŽÑÌñ’ÁÛ¢ïþÞeæ‘D’j’ÉñPUF¾‘©g ÌÞCx¢,šœ ]UQû¤�…•ÛÙ¬|ªèËœ—¿§žÀå¥)R°}aG§N +¹ÀKé…2A1¸83ÙÊcÆ9-Þ 0¡Ó£°·ë{&¬¦âÕ2ÔÅñœ/¼…P‰æØD—©î¼ÍÉ£4N +œÊŽ.}Ñš+$|­a�„H ¬»u©&VS+R» YgA[–Ì*Ñôh1}s¶Ó TpŠœÂÛ~Hå,°¯1 …Ã|ú± @Âä +0 +!"§�P KOac¡÷o�Ÿ]@¬d?!ÙßÙç¡Y2:9'Õ<™f PØÅ�ØRfЬŸ:Äml+ð™p½³‘sÛGr L_¸_Ú–¡•gäÂ<Š '¦ÜsVþ¦³Ü�Ÿ¹åQž¼Ôµ ‡‚.Ø×,xâÝéÕ#½˜'“ãÆŠ¼¥PBþ&Z´“÷'mòAý8þÿ‡¡uJµ¶s•x'9—–>6PŽK›A]uíË€à ¢¿nç:>×§M�à¬ËõLu³Ù»3 šÁ +¹ævÁ„î^~¹Ã�m± ï›ä‚‰!:£°1½‹u°­iºM{ge8ƒ@ rÔ;‹7¥WlUâËñƒ ¿‡†CÄ +ãrði?H.%;ƒÕ~\a…¬fæäâT{l» +è¢è¦EÄ+I'@y)ˆ)E"�¡Ø\�úh™î°ˆÜ,F˜® ®‡2_bJiÓ¬³ô¸¾›‚³/ ¹v½™¶;ëûåë�‡�¶¡s×Apí&e—xBu‰©“E‚?Lz¹Çzl¿9Uç�Q¡|œRWJÍÃÔÎ߈©´<0†Æ„·-ÖBNPvQj>|†“¼tËO¼·ÎóHtz^FöpÃÏé¡-ºî‘ÏÊ`}�óàûëmǼ¼½âϯMÑ¢H endstream endobj 58 0 obj <> endobj 86 0 obj [/ICCBased 77 0 R] endobj 45 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 46 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 47 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 48 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 49 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 135 0 obj <>stream +H‰ìWËŽ$·¼÷WÔ4‡É7¯:†±é>�µ‡¶iþpD$Y]³^Ý$_´Xìt‹Eæ;#_þùz¼üã5ßýíõ¸ýz‹‡•RKG.-$ËÇ}/üöÓí‡ã—ÛËë§x¼½1Ä‘ô·ñïÇñþ†×ßãõÏï·_;"þÙ1j(uΣY¨©åãí?7¾ÀßP;>-é°`O£àiþ¤v¼Ýöj=öά#ßnÿ¾ýër�™…^pÃ,¡áªç w|3Ž{‚"Ç=‡.m‚MüôÐù3Â8ðž*¯¸' ¥a«…˜€* ¸§šq£cƒNåxÜî¸ÚÒ–;8‚dKâdº}†P÷RBéÔ�“ë+BÄšC�Œ=dHQq p¡À26Î0ô W¬k:¥ZøqâR)�㆓J–=r ¦ÈS‹iÉQC×YP•ß§!Åyù6CÃQ‘5€õ6Sï{jþe–Ø@ÉßYZ&Æ÷œB›´m0J´{qÁà~)l]¸ñÖF*Žª@*ÚšÂà±Q{€t¬LOwæ&}o M +óT›ú�êEœRwJ3`kÂÔ᲌¡àir�Qµ·†)HÅÜûD5)ÜfÊR ¸º“¿5ßË0D¨ÛmfíEh4a�›‚¿,îÿî¯Ì·šnŽEo³,<Ä.4|kt+"à›‚ª$þM—è«‚H)DæIašŠ»Ežm²j–É«GD`tÀ'¥eB�*f:,.¾Çr˜U®«Œ¥€q- jCwÉãt#~¢ä£Q”ä°éIÇ ;�QJW1·«çÞJú|Ï’ÐÝuô6uw}’ MUOr8R–?6òÜ¿÷Z_áÞÞ–\»rœrz +CNßýLé6äªUzTœ³4P8Sª�u£WoI´ëÍF*D§ôË`.?……¡ÝÌ{—w�š›U´»ÕMoòSA Ä뀲ßÓäðå. ,W2û!nǧzz~èv�å*0¯ª’CzÅPj—àfnSäžvøÍ,TWÔº^¦2ÇJ“e]óŸ]–çñÈ„<üÓC´è-¼ÄŠÃì’ÃÓJDߊä�ÊÒŒåV]/dQ‘ Ïä®v– ;«FË4ÿ³¦ p³)ÂyzíÞó¼º!@Ì‹¥¶"BŠWÒÖl‚¨ÁÌK sTå…jº†Õœ±wà—ˆ%^Éž!ç��ܼÍx%Ì]*Eì±Ä½à®žÙÔ˜�) �NB° +¨ ÌÕ|ÑÏh¤¢Ì#’,Q`¯«BcmÝÐtK•/ŠéÜ*Øô‘ +¬@Ó³È#%É�ÅM¦ÿE!Å.Ú×Fs,É‹ +-„ô˜×FC’dÅo©úxø-Ò,+É!Ÿ�5Âåež¹¦Lz¯Ôsx¡›ŒvÝ¡ú1™WZ�ï£Ñ€H[¦‚ƒéÇ,DwWÙmã©õSØt¿_±ÐÛ`ÁèÍᨫ‡ø!ë9z˜ éò‡?»TúxI{ÑË©Ÿ‘ô9Ýü + Dii•9òLo›¼!*öóf]ˆ_• +µsïìOÖ…è-‹tᑱH—£'érü$]ÈK'ƒ‹t!ýËίš7]Ñ«MØôÚutrUÕÈœ[•‹N­V©ò*¡£œX•ÅTœZe% sƒì­Í‰Õ¯’ÔN«"+Ö×F¯Fíq6ú�µëäå7S vƒ'v« ãºÈ­^‹�ª*:ª—Ì.ry)çÀ¶ZBþñ™wl–ÍG•DÀ+³¸3FŸ©¡ÑIYBR˜"€£È®mmÄE›™ËþÈçä}AÞxô…Ì kè@E'iÐ3–RÞzEÆ FŸÉK‹ëOf³ËÇ ÉH e1½£ÉYù iHuVõ€û‘x³n^@º´ØE"ˆs•tÒý]aÉ@F.ÆŽØ(s%8Z8©œ±©v1+¨;»»`�Ë|L+Ñ�H_\‰¿Ós¯‰ú¶¶²È­ž8hs/OîÆsVLà/2ÓGÙ‚/'S†MCmYPÙÉœE* +œ4gÐ.‚¦ +Ö—T¨Ó‰ +ú¬•ø©7ŸÄJRw…äÖÊîÏôàzÔ#â¢,J¼�¨�Ѧū¯ÊjòÆÞ“Ùd°_c«æèíŒ#*VlG:Ó$•ȲÉ,‰¶¢s=ó¾Èª×<„K¢B;2ö#[»#$E¯X>¹d6¿âë84Þ 0¾è²#34Á8SþÐb‘šxÌï”r'FÓ^ä™kß׊É`ÆÂã ñÎøß‡»mîλMµ1Ê­æÅâ¶ç›mÍ»ˆáW˧�J®E^y¹'Qy7p¡´]�]žn¾RÏõ½û÷*caÖ˜¬Y?”FrĪR †SXïn©Wg"Ñ`d²£leï»™£HR-hæÕ-³tcgå¯(Èðž˜úIR†“Q sÁ»J΀‚ñXu:ŠL~TFܪBÓ‰~™Ù–®Ê ¾§G_¡?��Q�¥gŸ ‹8™ÎLºÄ¼ZrFb_ EQF˜ˆ–À +l:[NÜÓE—§*bd×töÇ)l%]Ü�n$ñy»`îˆh/°ÖÓm±*K¹Ú8ä#~œ˜\~:®ˆ¼‰DF Ã�š % Œw€lpØÕ4ó?nu j Á@ÈÁ¦9 ¡ã±Ä¨�¡>âÇÆ[…ü÷Ã�¬½½|ÿ)?¿ëª6ò€¨nRPùòx¿îà”Y{‡/:Gü›Jõï~<^>}ŽÇûçãï?nM�í1ÛÅœká”m0}êRÄ!D–ŠåÁ|ä#~Ü,Â5`¤CÉÈLˆÚ6�’E¦WWýbáñ\ØÎÚ Ë·áö¡%»ET�ôÔG~±òÿ4ìµÐ¬£°6ôLxŸ=Ï•Æiä¥ÌªðqÛ;¡ëññˆëño_h…)¯µ”™èÌ�û{À׆´h¿ zæù»:\…�Œ ‰UöX´WJ#r¼ëþí|Üž[»¾[‡ÔÿQþÏÑâÒ, {µÈp­’Uº[Å©Ö�¤Wø DËÚ[?r9ÿÏÒá¯Xôþ(ÛýÅKÜ·ü‚ßBð[~ Á?ÂŒ˜¦ÊÀÀšŽ\ZHðó}/üö“î|yÅ�oðïxûåâ2�µr�ÅhÜì—6a0Ô4‡Y)§T¾ÇPÖ8ëARR˜É4aá'qê�L£%ö§[ �A8eà²ñã6ÃLeï¡"ø×A°2¨Ù¾÷—ºïßRù(9¡�3õå‚8À˜ŽÎÇYíð» ¾‡L°9ã£"<¸y&¢‡O—Ћ6"ú2n«pw2˜ÃT €5Ζ˜u1½Þ0…Ž,�;ò.Ä 1ÀæìD¸Ô"Ãõ²Ð‹^g"ˆ;aÆ*¼ˆÝÙwgkZè(€‰S­‘ªj»ÉéH�Xé «ÏNµñ¿d—;’G D}�‚hFý?¶B¦NÁ† éþ®^&ªzG”³;˜é®Â'‘ |g_àp±¦ê“ç)‰”/BU#¼Ù|ùP‰‰©Ò€Ä¸]ÝÔ„„ó ×÷~m±L÷k3)�Y !OkëÔårËN`œ´Žê;Å$ýQ¶§¦d¤ú):E�¯iêõ P¥Ee…?BqÍrjØ> •¬Q™�j&¥ô)Åáôªþçi~—NgŸ6zså¶Ñ|=€š°»I†7ú4¾GÞ/Íè¹X{Eƒ} +‚È>4Øràb)Îå™É¹ù�¬´L›Õ•�"•â#‘eUV po ¦ª~/ÔŒ1^›‡SX.nQ•º +Ô¢§î«–a•ãÞœŽÆxvÍ””óiG0p\ßu[©‡>–22Àc5@dÄ¥Dˆ"™ÕÂÙ�§lB›ÛFGà‡ÍÔ#“©E"UÎ*4›s ›c¸¶jòî/ŠYu–5Íy6Èa¥~Õª,w}]ëõ÷·ÑWjS�/’ô¦SK Ø Xg4¡ŠIó{žÁyª¸s‹Êܰ†û�Ø8Obu7¯_£/¦™G§V:r“*óœTÔƒëAE\Ò—)À8-(èQIºŒÞ‹SÒ+oHd‚´írOìn-›âO˜ƒP|ÉsV Õ“¥ò­Õ¯¨Ð9šr*Œwü𘳡߬„T}½¥Z!š¹FõÖ5`k$´ª‘»†¬6t~ªÂÓX� qÓ 8*W*‚ Ó+ð-)¢áð®÷'º­ñ9)¬ �îÖæ1DmkžåA@"ˤr·k„¤zÜ 3WÏ‘òüð@Éš×Z¨*h‘Hgá:R'æ‘è‘S™1ÛõSI–‰ØÎíj ’â—rT·ã]SÃ`žíL¡Ò �™ Òlv±Ùµ¦\�ÉnÐô-`š¬ªZú|­oº®Ò?ðž¦M' +æ¥~¬…¹˜�GµHX¨iO¢uèçQ~5ªÕu%s¼ŸÖä�·ËÃ"öêéYo˜÷=N�·jŒKºKmÖ‹¼íZ8Hû #Êž‹ö™54[T,"”»Œ}_‹ +<¿”ç^µ;�q!|½¿�„vFŒÆÈ‰?}�žJNëäínJäoyæN ¹ÿ\Û„¼cÕ5�ÿÿ‹a9Õº¶$%"Þ©™@¢‡è£ °œD[AïêºÖB òfÒoý•ãW>Ãt Δ¿~§«K˜%‡;3H󌅒¹ešð�#ÄïjxpÛÑ… ÷î}äuO E„M÷æXtà¶âw&…3DÄ GµªxÓ KXgTÒÃç‹ÈôîØnVÌÂgø¡áÒaU°Ö'è + i1šk>ðLµŽÚ%˜CK@�±H|å! Q~­Ó+‰7 Ç>pÁëG¹é>–˜[Å8fÔ C²EäPåKM¬³*u÷ºJÏõ5fpá‚�kùÉk²þþí¯_ø°j„-Â6B—éÄ—%ey{¢ºâÔ©"á�R–ë‘Ç"ò›Óu> endobj 137 0 obj [/ICCBased 77 0 R] endobj 133 0 obj <>stream +H‰ì—É®GE÷õùŠyØZÝðªÑhhaï –µ¨'À~ÿô¹dfV•{ÓÃÆ‚Õ#3—7Èÿü¸}øÇǸýð·�Ûå·KÜR�!÷¼•ÚCNe»Šß¹ü´}½|øø)n·÷-†8³ýßõÿšÛö~ãó�|þõýòÛ–¶È¿´õz©sk%Ä–Öv{»èÃÛåC-ìcnü½ZÞRhkp¥ýd>÷í¦u«ŸßØT÷M:ævI#´6¶Êœœšfh}!seZ¡¯¾Í�âܲޑ°êжó[bᱩñ÷óy·ËçË¿žœI /æXÛ*a¶‘_½™i»f¢ÆO £È“Ò\üŽ0Væw†iÇ^s mÞœBí¬,)ÄÌÊ\ÃZü–Ê&ÏÐI;vMjÄen÷Ë5¥�ò³‚­dc—1W&G[ #n—/Øz­5€7ûs…,«ä6“¡š0e„2$r\·›‰Ѽ¶ÊÂäf&vbw˜qÈKÍý¡©ÍLrM'ý×Ê¥Sþ—� i)r[¦) -Œì#tÍ5Y� ¨ó£%�0I¨dy¡M±£[Õ +ÎÒÊ’C·ê~u2ã´ƒt¹¢7å†$—lr­Ëä›ÉjCSY+‘•u“œR6¹–fÙ-½™«�öèvgZî° +„Èo¼[Ië‘SO¦h5’²Ã"É·Nûrï[³ -¬èš¾´��+{ÈM;“Òêñ*Ýœ@Óö朴ûŽ8µ0›û=¬â;@L/¦é¶‚Z5§z¨9$%+9·ŠòÍÃ4QiG.1[N–¹ü‡çhz¾…Þæ+šÎ"NféWD—ÿ¨\ÛõNˆ/¥ž”�ç¦7yTÕý¨tÁ¡X¯ÇÓÇ»l^<¾ZG|î5ÞÉ¿^ú§sC}šúŸÌ íyn(/sÃ7·€I©§¨wC™;®ó–ïÕ´žieSÅIjÙšU +³Y­—luVD“Î0=yoZì%Q&Æ£É×3™Çs묦º¾´ÎÍëJd5ÔÔ‹{íaö�¦”©:h¯Î/ú>°tçãc`ŒÖ†î —$/ßs`9ºèc`QäæÃ¸pÅü<°œ®Ë©Ø—#3Wªù)=øt©jÿÊž—† EK:j÷yzS¬fÆ.šã2ûU¾Ÿ2™ì»<�Ç¢a…úáÔÄK0HÑk<¨˜«¶IG½ˆ÷ �I„my+�>¯•â¬ö�LRæ*¼Ê÷C>\PwôÓög?üø)n¿¾_šZ·Y&œf< ­“„§?¯Ï+Ôù.(µnzêÇ\Mø»üðóöáÓ—¸½ÙþþóæáToSÒS8wÅiÛäi£^wOæ°7Ö�\¬áõ;âñ"Þ/:²4•ÍiXd{í;$§¾i÷7ŠûCq¤êP©M‘/ñ¶¡£~Šùªø†u6k¥á`¨éíÅ',P¿¡:æ.*p&M;‘bò«Lô‹Çöt +ü|ÃíǼ§-j‘U=×'ÙÏdÚ§N-EýȸaœÛœr3~¨I‹& ¾ÝÚ_z¢N÷„y‰›ÞMyò*ß%«á9Vse?èå–ÿ•/Iâøoï/Mßø�ßø�ßøŸ‘q„F*3•Ú}®=¿ÿbw~øÈ�·w›G‡þg"ˆ´sÛÞo_Oƒž¦›NOÁä¢ð�ñ<Æd£¸$QL8]£�ˆ§m eÀ±q…Ÿ¬N~0\%­I ˆ„ãJ·R–… ¹òý²ÂÊõXmýáqP§Êy ÷ƒ�ýþÃ*Ÿk¢Æ:L£íÜE åCÈÛâ,ªÌîÂöcÓtl4u¢,^T3Z¥;­aXK˜@Sá¶Öç–S(5)š]F§A�Á±°.« 3ŸÓk&›QâtJ\ +D´ø¡Õ>I˜` Z2jh³ÕEs.ŠA?‹˜5"j¼í¶<èk£PèSîC£‘fw.›CóÊOì²=òi‰PÖpo9\UXÃÆÔ’›|\–ÝT…„ý/LXë”ù¿4Û6¢Â™â4­:¦¥[rï*ÒbwF’+HàúUÑv0)#Ô׬S>`kÚN›K‹'C1ɸb9KU¨Ä bP´\*‰�R¹$‡ÓK&ЬÆE¬Øâ€L éÁ”Á ›K¢H‚#‰˜´d(ô«Ht"$…fÿ‹ îµ°+¨—Ô$e8®b—Ä™,kÄ©š�³TÏîî�øÿŠ‹#)¸3,O±RU¡aÉ${ÙR!:U¢åÌf9©/E_]ÍÃV®é7‰6ò�ÒSC¬—]’A\9R"—ÁDz-ÓŠlÒôTÎJ™`Õ0óÛB¦¥×.Õ³†‘É®4îÁÅ©Ðx×ÅÓ"ão²R�pk/ï³ìo—Ï#S‰\[ðO·‚ŠzûbX ™0ãç'ÂË€¥ ò?Z˜q=1þ+S|΋‹²— †˜b…¦…”ê6H²° +ÂK/FªlíƒT“Ð@í6ÁÈé�ʦÔ]†ÃMÖ1$6ÛRò£„r º¤bõ´ Šõ=€FP®˜8«º(«[iõ XDC®„p+Œ“]íÈŽÜ00÷)tm‘¿±kCŸbk'¾•ûΓ×É{‚4C‚@£»¹Ú<õðëì%¹$žÉ¦ÆaŸÐf�¡ã[ø!dŠ� É�º«6±'²c@ o(š{°d§~…êjïíãw1.Ž&ȸ»-ìuȹC[máªz_!3œÚ KaÍ—xŠ�ÄùÝPDÇDjjÍ:2È@5¨KóÉ2»;ÙãÉc5Á›GA›©ðSa®$šÔ]H6k•Œ£pí©pNõ–S>ôE£DBWUep|“9¨ŽÊ¸rEw…ïcï'ßë(*Ý]°7‘¹PÓ;WmͰ'°Ò›TÚX²&”I�çcšQ†pUžì -›ŸD44½z s±D=\50‘¥ÑQF�(©gß6ía¨MôŽHšPà£Ôt9Œ1šJÒV¼A ¡(kŠ—fâ ‰Ù"�‚:–„®-’tFlßÞã†F×¡Í LEæ!ŸsÀ¿• ~}d¾¿uÐ0¹ŒÔKØ[!¡‡.H˜.«O®_‚x:†õ4�‹N€C¢r—FØÀʾ�žÂï@bhœë7Œ[ÇçÂs™†fÏA& nè¹ÝSA™QËÓo`Q•átXCN’©')•Ž­[WÊt%°mIP;ReE— ´ƒ?µ"‘¡Œ�Ú¯º™MÂÚ,Rx/ÚÁºzúPªÐ‡Ä,9°ñ  <S5¡åeœé*ú=´­ìÃMâ£ßT¡@½¨c>Mô<ƒÜBiASG!'pDÓ®Ô~Nªôu‘¼ž£ùãsG8{È?ó 1ã¹ËqôvØ0q/ÎÀæ,êQjNó3)e^u!ó‰h›%«<,T¨&è:Ð8ò^¥â;Óð盡#¦î|"¯uëm\ï_>”çû¿¿ðï_#� endstream endobj 134 0 obj <> endobj 138 0 obj [/ICCBased 77 0 R] endobj 116 0 obj <>stream +H‰ÔW[‹Ç~Ÿ_Ñ`»„éíê{?Z+ÉÄ$1fX�„`ŸHZ;GÖô÷óUU÷LïYÄ18/Ò¢3S5}©ëWU7ßÝš›¿Ý:óìù­Ynnïœ9>’?óp|¿Ü|ÖÛ‡%Ôfkk¦„d)'³’s6zoZ¶šùøzy³_,%\À§dj%[™‚gËE×8ëª7ü›ù·U½ÇY, b0Í'‹¢#kÔ]"Ùí]ßá,5Þíq†¹»ýûâÍ'ü þk–_ñpø#“‹-Ñã\Š�>6s|·ð—wK.4¼Ÿ–»åûåÙPnfþU|ÔáͲ‚kG#�OÐRnÁ£¤l¥ˆ{îI)™Ã»åWß�®�Mæêç?=ýðó[%Þ_ÿëðí²ú]›Á™ŽŠ9üËI8Y0»à@ÿî"8¹Ÿo‡™EÇsÙPJ3!z[ +ß|õ%ÊÔ®¿,/˯ØFT“¡ìp£¼Â¨?˜÷ŸsÆnA1œ¯Þ€»ÝlB‡£`_8b¥ã¼õ‰óçqYëY÷/;bÜOè´ãµý}|ê[ÏÎÜ�î—w†ûœö¾ïîö¢3ç�ºÁ(©ÉJ½Í_'6YB¨6GÇ\}ån_úòR?E|Z�ò_Ê¿ßcåX`P\ÆVαœ[Ù#©QÓ˜ÿ2­ŒýPÌÙ9}âÓP +ÔlfÛ|ÁJNY¹+]�þ޾džGü2î:ò¢ ÛälCê |—6¢™ýí’k²¡9GQ�YgF?É»b +ੇJÙ,Ï^™›»{gîÍ‹WFïýlÞèMÎ|ÃUˆ¸ +!ñþzóò�3Ï?t¡Éù` ×§€ªáat¸ +”¸±Pª 8×Çh�§‰‹P$á ë´³(ë ÜÌŠ(ƒ¾ší.B +džR3äŒãò„Åç´ +ç™E„à"8N"ï`Ѻߵ1º<8úœuÚY“"kè?îÚ-ÔåŒãò„uZî'¯ÀO(õÀQ¯îŸèn$_8h¨E›J¤v÷Ót?Mî÷�›� R€à~Qâx° }µ-êSžl"Th{Î:í,µmxÄ— Æ]ê4|ò ÆqyÂÂ9Á!Y|zÄBNz—÷“‚϶†²ßµ1º<8úœuÚY“"kè?îÚ,4äŒãò„uæ~_­/1y8 ÑíK½ÚôºÎK`8œcù [Uo[ðUtøA‚ט¸ÜÐ$ò°/:Ùnè²£õZ`i èÓ²VX”‡6:Ü ¬Eõ +´Qž,NblŸõqÚ„XI@½q’fÀºß2è£j+‚½ƒÑ¯gu²ßp\:ݧA«¨ý(7Áü#óùÉ|AÍ÷ÙïñÂ÷tá{¾ð½\ø^/|o¾“»´€.-ð—\²!]2"]²"å ùPÓsF­E¤xä)€/’¥L Ù6©±î"±¬c U:¡–4¬ !LY½¢-®™€Úrä1¹�J+°ÃDÎÀrô�2wzpD)Ñ£Ñ×áP$ÒÍ_öâ,3•sQâo›dH'R6˜Äšã±/›œë³Ó×�îêÃÇëMˆ¹úï?](®‹¹údþ,×�›¾¾ÆÊŸ~ûx�ééÇãõ +O\ýf~�IíêÇ÷Çûײç�C0 [ó ­Ï!NØ�ž—7£ÅÇ+£½å\—_ h•‘‚›ãÎÇê «59Èð~FÙdG"÷ƒj ®7fÛ`s쩦b¢åõƒ�‹Æêf¦Sz¾ï²£S ¤D®'g²xC/zG{È ÒzBôWD®’<µÂ,+DAƒ²¢®1"zn.A¡¸`§‡P²ViJ¬PG-;w +âq�Ä3òãˆ�„sc@‡«-td,dÉÐc¯ bB8ï–7¬(ÂX�°ŸÚ¦*"¨_Û©MªNŸ6•1ˆ\г1FmÅ#ÛVçT@ñWEåR�—I±^aÏLVð,2W=Y §9¯ðÚ¤¦&ö'[óBiA�I¬Ël.©U(¥3 •t-bKHâ�ð0~›-A|ÄŠƒ +ê:ÇaÂB³ë?!«FâÞ”„�À‘�#Š•�Ÿå*qUOµSô#Y›„ šÕf‡6ÁŒÚdäÉŠ %ô)ÄwDibJ±‰AÅ TÐs½¤hÇâzU0Y4$- +·PIÏ%Ë“h—Ð$TˆêÝéu­cÁ%� ‡Š9+â¹Ø³µª…¸cæp+â +Î ILñK‘QŒsƒÁ*C@%8ÆÄåx…zæÀåˆ.9�øWsÇ‹Fž’v ùŠ  Çeæ‰ê ºàÔ�…Ѥªc5:r¦*yÄq\ÚHJdzÌ8#e©¸šÎ©‰&[²—Àw‰ŸXë,PÀÚð;’„�_Ö %¹{”fôZxrìi¾æÄ±«Äqˆ6a—US²êú=U³æTOì\%8çAÀ‘qˆŽB¸aEÖœV”àË&~7š*�ƒÐº5’ØD¢ Ëy\qÕBI“© +€âÄ¥„Ú²ù¾Ò…Í_¨’KM®ˆòió,dO´¹½ø7lBP�Â¥ðˆ7B ÆîÁ£–OSô� ˜lBP‚8ÍpÝo²ª“È!@ÓİIAˆï…Í%šÄºGñHÕd +¼y^5µH¼ÍIÅi(¢æÈ!È4ãX–p‘ôf*ˆ•·äívhÈ~ÀÃ(O¨¤ª0YÔãY| Ôc“†£¥¸4iÝjQ¢ƒa/¨i� M1¹dYë$¾€ØÐ"61 +‡¢�T´ȱU’<‰u¢Ê²„dÔ Fo#cÕLkLͨ0AªƒUhÓ ¢¼W‘g'‹ìSF'•ÁN(®±×0IkÞåÑñ% {)oNú^ìÆBRš Êé†à¨�*Äž¾ƒN"�?D©xL‰¥ºÁ¼ø�eî[«*èûR-ÀÁ `eƒ"XcI5¹&ÖPÉž«¥“k¨FÊñAJ4. ŒåŠâpc�­Óˆ�hú!°êê �:öû;yâ1ªHÐÊúªÇ¡ä꓾«L²·Ë:iõ¤SsÕÆ!bÑÌ£~Ô©‘8¬×4‰[˜è¥Âj©ä·o y üÝ-mØ[Úø™–6ì-­Ÿ[Ú'UoErúGZi·ç´ E˜'1R–D’Ö"«¢¡}$1W{îg43¥§(н ãÚR¦¦�{�67}R²+¤lzA'a÷ù殤sá{éÓ6:‹õ{]õbm£�©9Îmto{]µíSÙ‚ ûÞFÑ{=ȸSÎÌ–—Ñ’2äè&çÑÂá5ï^À^S*3"k61TU6ÎY§™íCg¡ã‰Y‡CÏ=T +@;ï€R…�Fz„G¾Ì1ç,>yT�_ÔàN—`(„U|pqÄ3÷EE§¡¿+ÝÐ1‰WBR{⪷îßœsÎ:ͬÿ±_&¹®7žßUhRªo¦²‚ â¹`ÄÙ{ÿ@¾CÖßè~ÅFhr¯x¤b»Cr�óíé1é¼µžhRô§ŒÒ/Ð_êyx,››éúËóL_bž8pwYn.M€ļSîÆ¸fòp�ŽM;vRláº\þ<™msf£O+ÓûI^ÕTk’§ñxÏ97¾ø®‘ÆÚm#m3’Ñgè½5“�4p Ä”d«jÞ¡—ëIãíŸoŠß/ÿÓŒü°×wÙë¿êçW}—«>ùüÉçO>òù“Ïÿ÷ùÌ¢®hA‹¤>þö“Ýah³ $$Po¿?=­‡9GÖ0&¢^™O{�ÇvÈNX o{Lm©ñ‘"oaÕÕÞiÿˆMÔšÇWil_q¨¥uÈW:VÇÂ>8,¿|±ª¶Ynx¤æ›ÖÈb+b®ñ–p)EI°JJ:y|KðŽƒM.=)}^vÞL1ƒ×ÛäXã%g£ç°@";hï¶êFÓ£Û2!&Û`µöò‹Ô%hß…#øæŽ×&òÐÂÛð{“£²xØÆKŠª£½ïDSôÌ¢�mÏÜinžlÛœ¼¬³š§ú’<)ÿX½fÂéþS ŽjE�Ær±"9º’ÉeÉmÉ=Yaƒ„Ú�˜3Z”èòP*Yû?ç€ÕÚ–DÄÐ9ÃSŒxþî)"“W†2éXrlù‹\s='ø\µI„®7ã/c1ĶêÃù÷w«zÒD7ÏÅŸY>,Z3x/MªàÖÝ6 rlImˆ�íy±Âð-¼Î™ÅÚêÈ–âeö€Ó哃™@r‹w ®Êóà6äò™ýºüéõ”¥«“Ò#k‹&»�"ùéÅÐðÀÞ'ä٦غl1§üDÞj4ÕI¼‘êʵ¢Æ7­x½« ¶êÙYW³k~Ͻ¥©ú2¾•á…‚P;hâ6iTžÙ�04 Þ+q+ÞQCõÞ«±ø^ ‡wbuÅJ?™vå ÑÈ/ ðˆh ¤ÉCÈÖ«kÆ3.§YM®`ªjÊëÌzIÝJU–LœÁ‹®ÆèM?lpqA´ï“�þËÚª ÞñVâúýŽT£>É=ÆÚ³d3ƒ–ª¾!ÕÊ1ä–ëÆE džú„dãp⦊؈Ii>4©Ûh1ʲÔ8wXU-yQƒô† C¸Š˜*ŠMŽòîâG” ÅC¶CŒêYOØ´ª2¦F ¿vŸûÃ6䥉\ɸdÆI•ÏÒ·¤uáóËåõ¤×׋]ÏnΛýßÌøªG†ëGQúãpôЇ©•yQ˜†æ½+Šc-‡�oÍcûÉ:פ¹õ?¯û–ð¾?|³Z[Çyùã ³Ö¿yNÒå¸Ð§ê”­nг[•Ù'Í6Ô®oò¥�ª#ùäI[>ÍúfNëHE#‹�¸4Ï6ë1\kèÎ鮉±ŠÞм#§Í�Ÿ¿»ÁðºVÛ)[›_Ë síœÛ2£8O» ­pŒó.³ Úû.ÓýaþJ8ð¼"Fl»Ì¬]ÆåpëæÅ#.ÚK¡rm< *LÉ~·!ðÆtìk÷“lvk ¼ ¯Ñv7ô–4½÷i)HôÖˆ÷úG�NÔ�F¢h]ýùuE^_�)0½ƳrËZ¨;òˆÁ´®ìêÑ\lwE^;²Y§Aꟷ_ñD¸ý닺ž%$1¯ˆ¸“…íôé~ú>¸ò’øÐ`iÓ#Û’^ί³ÿÚ—¢H0ê�-´ +j dg +ã†û4m=fº%Î�õ­®_;ÎEÛ¯çí¤åسbb™ ZU9ð‹ Ý}@‘Ñ÷Q¢­­åð?»ò +½(2§ö Ä4דT¯»b�Ü ð÷lÀóëHzæP€Ï�Fó2Oš2 æ(§»v`½ÕWèu@'Cvh³»ëðÐzÏ<¿¾�”²1u)•rBÜÛ³ô¼CfJ:~å÷e…aø _ϯo ×‚“›BEN©¦g3S2–+�àÆ —ÀÏÍÓé +)C®”É*뤗¼L�õ`€› +�Àî’ ä.)$ê8”[R@a½É“"Ú\Rñ´QE›eyeÉ;ô:C»KvhódʬUg_§á‹�ê $=$L+ÖQÕñì­jãì¶‹õg/Áß½¸C€ªr»G[ŽØI»^ïÞ�¡Âb)%s]Ï;¤÷ècq¨yÔø ÅCmSâp .ë/�E?>b“],g¦‡tHzÿ£„(Ý,‡7=ïÐË!«lþ»óÁ«” (Ý�Ü?ÈôT‹yä«àÇè9�§=°YI èËÏÈôôÅ„¾jzèvÝ�š0†c,»Þ!Ó³¹Ut›½¨ju «2Rj%ËŒ‹0Þ¡—CÃôÀàV“vQHyd½|®j}‡Lþ]Põcøn­ Ï90¶÷¼C/‡š¹CC€cÖˆx9Ìâ@݈ðz9çÅ¥§ ;Öx«}ÚR<6»Þ!Óƒ,æŠ×ìËvš¾ +,씣bÚ‰ù ™žéa&LÑò gŠ5¨(WF]„û½òjŽžâªw +7ÝR Jº)&[zÞ¡Õœ]“•®þ¾H‹¶Ct å¥çz9T»ÓM(v¬Ø(+ ´ì@KŒ¹ô¼Cÿ¦½Jrä8’à½^‘(*öå*@ tï…õ¡(@Ãÿ23�ÈŒŒÖœ�@³Ã:Ó3|5sÙÁtb#ÿÕ° ÃÙÒ¤O6K7BšÐBH¾:å}… +ª¤Ž+ŠÚ *�Ð=A]t†~…f +Y9€œO£Ã|r´í^�OÐ{™¾y¥íXq¸¾'ŽâôY®9™åt䆳 G-þŸÐ%BÍYàb˜ô ðšö ä6EÒz”ÊHR¯Ug@š†;ë@ÓuƒdE§×Fö h,ˆFÇqòü*O’ñVÕ;ô6(ô¥X5Žv!Ðî]¶C²S¬d8e-cÅÆ?€¡N‘”h@žq¾Co«Ž0^ èÞ&ƒÑ~l& „Ÿ;ô6�[Æ4«Qâe’ ~h“Ê9Ç1ÓÔ&+D; qi6(�DS4Ú`õ“’Ô2í7èmPº‘€&Ÿ4‚U3„;ûl�ì`ðûÁ†"ãŒZmƼ]­™G3Q"Œ}bƒh'k¯äEȸTµy•† ‰ÅüÚ Ù)ƒ�üè¯Ü,�P8AŽæÅt’Ÿ÷¹CCÝy†B+*´M@ '±|1áè+¨ËXc‡Þ4F@ 6§¡ïš®@äÀ ms.›fú½7(§ ™Œ£êhàRdú˜Ú4‘:L¯Ð°#‰UƒQõ¯€ÂBÀOÕ:½¿CC6‡Å4^Ó®~ˆŒ2Ʀfm§�zoP=!^5åj@1 LÓª2sPlÐTö¢¤þ¥O;%`Ü2µ¡ð»ì,к!,t3V‹4ôöI\ªWR›Í»;½¿<þ|¸ã÷E$¸0úr8ü{.gÏ•6ñ'³Lu×""ž�×÷ÇÏߎŸ~ýðÇ��ã—oÇ×ÇW˜CÑË¥�=X!bë ñ{ÁKkNHßs½ üá:7,#Étؽ¨�ðÞGû4 Çi9`ˆ…r4Þ–eQ½Õµ‘@‹dØ¡š èŒøÊŽóùʱÐ  ©rœ~Vò_ s�Z!ŃS©™¶fPÆ…8Ó: „¥èÊÕ{«ï²¹•ºJoƒÞ tÅcB3ŠÞc­ÉW” (²+쬼 lcà»rT(uxªtmóEG#Rˆ’nÐvC¾<¦hi(Jp?oˆìÜ!åÝöŠê¹£QÅ£¡Ä-ÿ ²ódÔ ¼Ÿ ÷2oOˆ|Ä„†�ß!aÞ Mç%'�œ^œÀðt!¤Åù -!rTgL³6¤l\ç +Èäv™fŠ&lñº²Q¿¸Ú”p_�?•ßÁšÒ¤°88Qo¨¹!o:é%hΜ{ÐoÛV®&˜N™ä×ÚÙ!ÙÁ’äËUrž —¢„˜Ã"�—JÞZA[应?™º‘0f€?ád]Ûj‡d§IcW*rNÏšiÖž�]b ]ÁÙ!Ú ö+ÛeÃ×05§8 �ÎA„M¦ŠeçѨ0r¶r£¥ØB]¢ÌšfYö4Ìá�1cäÑqò6€›^ËN­É Í2À5ɯƒ}‡hÃ/�.'x ?W.ÂàrÒõÀÉ3;D3X;‘þ\¼Ô*J'ŠMµ‚zTdðƒ¹m^ìû%¨¢„NèÚX]²à6Õ:QÔø¤ûÑÊ)‘ß!R ÜñšgµãŒVrÉXšï:Ûâ6ˆfØî f@\Ó(é~)¸yçØ H&rPв>™‚»#ï;bg4+]:ç}¦Šˆm&~caz¸Aï;äÛØ&I††Ðh‰R�S@Ë,æ´Päf¦ï�ì$ΕR‹ºçlÃ)C _IÒèÌí ’ø‰ÉPÐõ�sŒ@Ê·P´¥€¹c,ô¾C¡Õ)¶=ÅlpT Bå¨5F�Hèúf»Ø ;9uAq¾–é;ú¾ùcªzÙ³¯ÇŽ\Êa•¹0¬ÔnG­ŸüäYJ"£®ñô‰u^�ߎ?>ÜñûƒŠ¢@qvø÷\Î`&GéÙÔmÈFV"῾?~þvüôë‡?~|¿|;¾>¾Êz¯Ȇ§~ýßô%§ß…?1éŽ/\àðú&ƒÁ%�t ÞÀ^1ñüÛ÷Ç“ÎOÇ.yÒ9¤ø‰(E"ôçúƒ~ŽÌüëñ_^oùetäÇàëǰgăK [héB‹ø‰O°¬‰Ç�ãé`O_b$à�³Ð7 +óhË–G¯âMü9üÐí(,>Ôf#qÆÀ–¶;$]±¼ÖõÚbX»}|M7t¶Þ¹¥l_GDÅcžÏu­rÓÄå—\»[®gg åa�¨d©ƒÓ]àÍpŸ#Ð Ð7`ÁKæá½ÍŽ£g×kAëîbøþñÃÃPÍ ¬¤˜'_`á*°ø +,]×£Á(b�#àì÷c +þtB`”p@^`@cƒ’j™8Ëc< Šº¬|jŽLµÁõ"‰s¿{eÇyuŸZ ³Œ×¯¼úÓs +ª1åq\ñ(¦ˆ?Âõg$ëâDµËgí æÈOè9nÓuÂõP×ÿ'þ÷‚žæ¼3üµÑ-Ü dþÌlªã‰�¿ã²|áÙ4% T0.Ÿ`ЦLj}vœÎ[�óû<ƒ¾¢îIm8ûñc‚¨sH¡¶ÌQ}G\—GE¯23K¯ùŸERªìU>›-ÔÔº8E¦—'oÏRA+º„)!›NºB bâ)Û³¨-=ÿˆ1‰Ÿ¬Ñqœ¢¥Î±Lxi¦ÎS>˜GJoÎ:¨p˜uº“_ôN˜AOOÆ1ÿ¼žÍ‚C•ÛL(ÿŠWØ\Iñ +Ôz–JDçÜ­ÄìÄS|E�¢Ù j%œ¯ÌÁÌÙ�¦ý’ºNÙìrÕ9%ýÕ%�b²üÛ›Ážu¼¸ +¹²TtAܳñ Ì¥Ñ­Í"„|–[U*ØjLå¥ò¹ÂÞ`"è2U�¬1¥¿Ë¡Ñ9H9ªKÖ<ZïyÄòTÛ‘ÎÛI„N¬äºv ùñ¥vKc%Z»‰ù“Pûx°ŽkŸM‰N§ä +gËfo×µv†@§'g³W ˽þ‹ì*É­$×�{ŸÂx†æá<ÆjáêE÷ý�Ž�R¾_½±3•EƒÁ!*àmøEÂÁLëd©vŽåŠ~qš;eþ¢Îa|×!<¾º4á«×?¥:\SQØ âæÕpêrêá–õáŠáš6�KürÝ� ù£Êö§-+&BÁÐ~°Š#Ô]LK ‹…ˆc¹K¬Lõæ ÝCµ´uDÓ«›ÙIepÓm¸aaý\`çv „`xùþ†¾™Å�0BXâì#q=!ë;ÉÍV`»Iˆç"æB“¢û­Œ,SåZÔùriee›EÅ2”«�Ë»Ë&� ÁEåM«*Ê·ø©j HxhVÉo¤Ò—ir:ãC9ëñ‚Ý0 [*Õ°³ûÖnBi¯:4¨…mNžCk“ðÆÆ-ÚVPئ�4Ý´-†�JïŠN³Ÿu’Í ÆüÖÄo¶û`šÑaªºÉ +³]–Ñô{ÉŸÇœúÎlI …ÅÞ‹�£ESYóÓJ–Çð× {µ·ä…%šÝY˜m3‘œý)¸ˆ°j‹ò=v—CEyhêx´©XQès|º|ÁKÝ€ëçá^¶šÁ6=j0“þâÆ1£Vg˜¯%ªÎKÙØl är³8Òç® ì´ÏØ„€Å4'„õç‡ùC�8Ž5ZíáŸÞþûC–Žþñoû¤oÃ×·[Y©ñå¼â³¤ÿˆÏÖqè$çfõå�~c£hd~ ŸE—Ô‹ÐÕUEà‘­o鈭xð'‡ÿ�æç’zœI…Y›ïØfŸÕ™Údž­(æsI²‡Ç3«ÜDºç~¿?üe˜Øñ¤<¤pRÝœæt �tÙÖ«qG{_º +é éŒ#â™�;6æõI…‚Q´ñÂõ[âV.Vêo62ÐqýDÍ—¢aàëÍ šÐÚó~ ¢)Ó¶ÚCFhe·€”šW'R%,ˆ;R ¹nOpUKäÞG¾š¨ß'ÊU£Y¶J‘É-gt”cêMo&?â®CÞ’%"�J÷âƒÛÏkSžlYO§±�MxYD=) ¹ÊF­Öc ô›«Ñ@!›Yae:•t@@l‹ØÀo„:ˆ€œ ÞKL\VtH{}tÏ3zÐ8xq¾Â%¦8«±¦»O—*×øCì&Þ‡àØ‚`Zba.ºjM‰Ý7%ÂasS ð{m‰¥ø%…¦ºˆ(ŸÁ“£®Ê%™àzRG ª(�#[SOêÃGIå4>‹u@jxbÈ!°ghûM­J­¾cx(–ƒ@Ópÿídêʸ ÕéãµXŸ'Ù¸›æ%ékáBèo8kTQNu>+Š =B}áá÷¡97gWô[é#–ùfY2J�ªvK£¥LÝ•1hª³¨öËf¾žÀ‘ I€ÂshgÁ"þþ=,ØÙ7â?zUÙo,X4´$å·›‘€žF®hMºŠ�YåUã$¯$ïf&î¬qÞœàRb š`‰61$ùÁIŽs•ÄcŠH˜¹ª\©‰ª§§ú + Ö†�o²Buµ¬�6âM5·S¼�ÈOËYoöê×c ³{âk«uÐ�lœÏHåw¾*U0Lnßš¨½²C@‰¿xe1vXUiôbÚÃlÄO1¯lõDîLb…çÙó {)ÎÀúôˆ„:ÌGù�'EZ±ZŒÞάvLJ•ÍŒUˆÛ“ãÔšËb!|G4êûÎ’V(�w?ZìÀ�ÔaSøà6À4C + +W$z:ÒÍ£b6yˆ[ ”I�wuwCôùÅÛ)8!5'5Pj€!܈£çÈ2Âè”Uì5å`TÐs—¶‰ª_±ù‹`9¯ìÌ”† +2˜ºŸdò¨Tb¢VŠüGSRåÙr{µµÍO_á~ðÐÖ«*_Zž…Èr¢²D§tûƒQódíæ«Wqù$³k“ètDhu…P&ŽB”n|Ã6`}ÊvôÖk6î�ó9õA޶›§™@ΦÂL5!7çE©BqÒôH\MÍ ÷‘Qä—Mˆ£¢Z'øåa!²Ø“BìvO¥¦=Öa�cODCoù!)ónJ&ÔãD–»Ÿ�AõPŽ„§¨¬²YD¾¹{Ô�‹èPÉðÍ ›“á TRsÇH]1zµ(© +W>‚ØèŒo^ôwÃà�8 a‡#Ä�^7%Eò½錤W|ý�—â“O€¬¤æ Þ5/ÞýýÚyyý‘´s¸3z¹ØæÓ¢RO¨¸?"]+‹–3Ù(ä’õ„šâ€µ0ñ¥L¸P}If¡…˜ÔâyÖµÚǸ‹CÕ"§`J�ßjIºœñ!�_pÙ¬Q(#‹gíø|ÛãÏF[£³(†àÌxwœó U_ŸÔ!Χ¥žÎd�2Û¨EV&P;ys‡€ÓÙ’=» ¥=Ûh5Þ66®¬½6ycœ1í2\ÔEV�g”µ­¦†Ye¹°€g…H¨¶‡EBwbüÑ•–³±.žlWKùk�m�%0sòL6>BÎÅatO°+Ò…²È2‡t5}+J¨’-†û�”$3Ȱ4EW¹üŠù¬…°ãm˜É"�]\¤�D_âο>ˆe:æ¢D¡Cc¯[°c~Íq‹yÂz«ôÝ¿‚pg`NC‹Ò—Ëõ¦j÷çš.é×fŒ:-TIüþ>žBx\ueÂU- +uMÅ3ª\Ö£âyŒ^>؈Ò>\9¦ æ¹@D-®@SHL_Þ²‚ Ù–(äYé'Ø�ÅhÃ,³ÄfkØšÖž~$mOÛEp™Á½ù…MüË�îB5"R�ìÀvYK» +¤3X½¾ap»PÐô/ûU®#YnýþŠþ�*1yÓ /�¡õ‚ƨ•¡ý@qðSÀ˜+Èh 0]Áw‘™‘‘‘üdfÇ ÊFݨ:†!ZRuøU S±"úK, +Å`úk,ެ[{²5Ï;�ª›€ùÈ,J*‹�¯ÍOyÃC +fÖ™¶PÌð›,"@å¦0lY 9•p… ÚÇ‚¬ ¢e.Qƒ +[ÅŠ Ó†z`ð ÍMí`ä²rójUɱI ³©¹!(\Ý»«b•ÊŒOš³@ÜJ9¾>îx‘pÍ «KbDÖ± 5„BÃê0U%èJŒ �ÑB‡¢ëh˜Vö­Tµ¡È3‡@z€Hã&’óÙÎbx47ÖJb|š¥Œm2ö½ 8ë×WuŠîv–$ÿxƼá®=uÒ˜ŸO~V;Š4_8„ö³M!ç1–¯V¡µïÍŽ€-5¤(:Ðïâ(¸d¸k‹¶¤ß|V¸˜¶ÏBÿ’4ØgÁkôuóYÀr n@äæöYq"û,à=ñf;‘9OŸRèËg…EÎ>‹¶ä´YQ61¶Í®ý´Y@ô7vZ ñ¼9-ºöq:-ÒcœN tp¶ÓÚ´ÛN ¨ŸF ÀÎe-`Và6ZȲz¼�Ð6e6ZÀ:®��ãÖéæ²–zÉ6Yî/Ûc­h[¬)’m‡5´dƒ¥Ìœþª«Èm¯ú^¡²¶�£­HOO¶ÜŽ{¦­UcŒNgUµ)«j?)ÁU&.g¥ÿm¬‚¡¾FÄû,ˆt–…’â~«.œ›~‰l +À‰CºfÌ"lÎ67Ï"1ò°’´YFºóEu³ÐtE�=êÍ�žõ…r˜Çšº@V+¬²Ñe}aŸg[ö¬2Š„!-¶ìŽüî¢È)Îãjõ ¨b]Œ'ήZ�´@tÉb´ç’l[ˆ’G¤ïh(j–œo¬é¬FI€üPþ¡CÀµßz¢|˜ºÚ®ð⛨Ëu̯ƒ(ì_À�ÜlÌe² +—$˜,(ú8O»HX®vo�R‰òíGÅ£ÒUdu!€bcW$Ýá‚Ê7þÖ¼=¥D—Ývù ßa- `Ï©J.pЬïá+ä P¥Y%$¿ÍfBÁÅcn—ò×¢8ƒ�E¤¿µ6¿ü;É÷Š*S½­0ÕÓƒ?9É`†�Ò8|VZKûŒ¶ÍÍÔÞUóM‰ Uå1H;1’'aP‹¤�£ ¢Õù %‘÷Y“bµ×AHûÒD•ˆ-�ÍÑ ×ò'JU££ll:ïGœ\•‰”Qy]ÎF«œÂÿàÏ{[…ÏèPÆÀ4Ò×½«ò˜R öùb /¡¶Þh¢p}Å�ñýƒ væîý¦1�=‡±*Ù1܃”Íì:è<Ö5°êæ_+>“ {mþIÉèåŠò‰ò�…äž‹5ý0 hÙv,&3kP�Áѵ;)l¼B áÕvJºX_írô%_Ö�­7¤"Q%Kjè?ÞO"ËÃEåÌò&ÊS»YÒ¹c[_í2[б·¡ÓÀ�[ +ÅylS‘¥m=|*ml 3"—êyŠëü…ì^ 8O?oH((FñJ ŽóQR!µÎ|üþ‘WÓ}ÇJžÕ KšNûz`ž›Ûx[xÝh%W…²”x"ª0± N•�Òž±uÔ|m–Û_y}Ä‹i Œv æ£P½QT19c­M-ªö_XÒï+¯så8Û iýÇ'J9û×G§ §œ!œK8Øo¿·ë%q¬Á‘(“ÃE^]øëoŸùû�ôùÇ�Ï¿ýö¹£ ¯[ÖºEùX¹í­‘lã:g¥V®óblħî1z[Á;`ùB¬¸6q4Ϧ°·jÎ.§E£ÎÏøuâ�Ç wÞËmÙÈö +vÞÑÒÏJþx_ùŸE—®ˆÔÙ££Ë¡QbÆév(–)mÖãxVJåû +óq{†›º¿Søç¯~ÝÎÊa­fd³Z÷—GoˆT,X„¬æ_ží'YÖÙ +¥—+Ðrž"µ†1B)\¹ïN[¬³½­¼´²úý™ç®wþüÕ?élßÚógDõ[k¾9úÍÑoŽ~sô›£ÿ7ÅÈ8 Åâ<‡Ÿÿù§>RMN— AÁÿk~~þñõïÛ !k‘'⎉©õ¸MZØ@åÌÙ'žÈæÒRA¹g®üÐéúúàxÚ�KxfæãÍB9=iEŸ þµØ3àÂŽÀ×ñ —ŠÔäú„3åÕ8D^×pìë)Ž„·~½Í�Ñb>Geü¡¯q±©†ï<0´–Éi1-Ü–†¦Wþ�·�¡)6cPÍY¥âZðDpÀÏŠ¬p�E…á/Ü�Ès¬DW qfD‰–û'×y`fM�¦OŒ®AÂüàx[çsaÒô¨Ë©“{‚É€<]áÄ ²* +�…ÚZXQÈ$8OäŽ3:±7ràk¯ÇÊëZ©àx{%1µIɈMéòæ� +Þ/D¬Î�¯ß +Ç[B±™Ú6¨’ï±1ŸdA EyÉ÷óÝs1þ¼¹æA³ÉAœ´o,´ÊÆD�ˆsÊÂ�ÌËÔæ)Œ©COàÑÅ/1êA¢E®#”ß:§pRA½N*àxbδOŒ2‡óÎu<î¬ÞµR¦¹”R§„7ƒ“I{Äé³ÒäPÕJånÉæ8�.\»`Z +,Šp-´mœë€Ž0î9ôŽÙ‡V ­¸4®~Cj¦Äb2³)õ%¶v,{X#®Ù˜cqìë5)y䯂<ëfv…ŒÙ…c.WŒô4­¼ ‰ßƇzS{Æò@‡`,íz¯ 4Ô$þ2õK°�# H©ÊçT›}ìRÆBÇç3ó +È ¿†a8¦Puþ‡¸‰8 ÁÌÈÔ¯B‡™‡á­‹“rÀ¯™ )¤ÞH…¶ýãƒ%¼ºµâÓØRÖ¥¨d¶˜S]ú&ú¥?s‡Ÿ©Æ42ïßï™`Ž‘Ä0Þml!y�x+Ìc†v¿•ç1 +õ„_ç†O¥º�a+ΰŸºiúÛ ³�Hì¡C‰Å)™²K¨Ð3¥»§’yŸ§Ðx‹àu²#¾>[îY±Jû)Œ3U¡­ +7S+-ougô�3‹ÉL¤ ++¸$1+UßØéž‡z@ó¨SÀðJw~ _ƒµ|8Xh¿�÷Ÿ“€XÉÒ°Íй»ìAà©Nw#8J¸Rõ©g®�õœá‚�9Qíj§,΢„d«fan‘¯Z,³û~\ ¾¨dùFèJŸ*ñÄ€ „¡tkÂsÆN(Vhʰ¹Yw2%n ¤âí©Lä ¾Ú\%ý[Û€SþIýP…­˜Ë@õ"ëKI|ôj’S”ô–D¢yeJ+`…UÕ[@?7qRE'o �‘ +±¡WÇTë +îŠÍêu¥èà ›`iU°N�zeuÔm�ú/[5ùÀµ°ìÀ¹îJ.â>„˜IÎÜ<ðœª8âÁw³³ã¦£rs»w3ÍÀÓ*r_‘‡åʨ|+HB1®KUB<ÂïPè�á\÷;8›pÅwL¾ Ë@LJñ”�áJcõPCHü­$ÿ²B+u!ôwød·:‡—WXÕ•SŒŸ!+¸½éWe6Wà^O #xÀám…ŽŽ$KŠ AK4†9¶(¸A�w"'¿«Md/XlJjÇÂcÙgd·ò†ŒûÙ/wåj’"ûz +½À}ïi—žƒõ,k öý#ø2«gÎHÿ‚Ų¤ê3}©ª¬¬,w¸­C€Oo>à\ÄWqÝŠM“â¿o<í÷ëQçÊÇË.ómýºÏÛÖ¾ïý%ìý �mîçÆ9§+Ÿ})�%¢.U qI^µÛ�àºÍY)K®7õÔ-W©�%¸n¹J¥Œ6nr•RQ†OµŠéÞvªÕmßÔê^¹©UH"{T»Ôª¨ªOµ*þ]ÇS­ÒGZè¶S­Z¯­§ZÅÛ^ÇS­J¿Iœjý–Ó¸ÔjÖ€6Ÿj•–]‚$N¹ÊJÊõ)WQgskËUì>ú]®æsÜØrUúmO¹Š]¶„Þz•°[¡X°J¿Y3nÁš5°wÁÊŠÌK°bGˆ¶`• «ã.XY½?kÞ߬˜»ž‚õÄò)X¹yå§^…¦Ëq—«¸—§Z¥‰ôõ«�§›V»¾w3(0•$<•*¼”ëM¨*[ù©SÑ›«>eêĵyS©°[k—Hu‡<%*ÞÞôéVf[žâ¨ 2Ô©²™oâîÇ¥MiôúhKSj'‚·•éîµ[˜’÷QŸºô-RyªRþôK”ÆÜ¡�ª¾•r£»v5M¨Pª»*e┉ç‡�›ŽüieF=í7üºA"Õ¢Ù¥D6B+"8ÝÏÏ"&ÜO“Ór¾Õø>æYÐ’ê.{f”j�dÁ섳M'ƒ…ÚýyñĈ5¹ÅhFúx”†S¿Ô»Êî"5ÈT“K ™ ÙSáŠiŸèÑ�ÔèòiĬÀTÅ\Œ7Ï’Y B¯dŠ.§áú-Åm3×ø:”b ÌBÒÎXA[™Jè2}ñ–Œ¬íRIš#T8r_/&¡ÏJt=H¢ x½¨K8b‰Úöh…B¹Dʬ‹—ÉGð•l.1¬ + +³®±©GêWÂ[PÀ¬„OºüØ£Cù <äPü›4µ”=^ª†Yõ,ÚAtE›jàE§§¢d)ˆ)&ml o$qg N�p¢2¤%î:¢Ű+|âp.$s‘UЪ?¼L�T$yÉêN9ó¿g8î$¯´„Z¢$EªÃ3ï#˜ˆ(›³!艑[Äã4«dŒlÁ?ó¦U3�[Þ‡­´iÇ…8�°<†H'†Ñ…y ÝãC¥ÉIx„Hå +Õl!u™ã»mZl`ª¾ã–G k«�˜·8vÆ6Ét6‹«BS±•†þ$¡¼tÒñƒ´@ùMª 3C=áâ£Ç–ÃÈ!.‘7ëâÄâ:æ×¯ùõ¶~›‡2ÎÞ Î1nŠFaz´´ +ÆœŠM•@e¯6þOzÁþ‰M½îMÿ�xU,”û0nÄ+a æ${±Ëz½�`Ó°ÓG̶ÐÛ¼¨©lZñLPC…«©W4›vÕ²£T®•âîzSSð•„G‰jÓk´�b~ùêQ¨BQ‹œïã³C&Z£©7×ÜÜâbXÔ {ø�]^BCíè']•-¬ŠõdÎA¡%Ýzô½§ª³�\¾X=ŽÛB·DÙv¢0ÀgŽðé%7ÅÛ4êäàCn +ñ•.¨7àdÅ›îvrãyùaéã¶$^ëç +ˆc…¶ÎhÒ)IõáAn$yiŒË>ùË’Î*D<_4ÿªŽaÒȇxöDœl‚8ã�_–>žK§Ÿ$ú/¯Ô(YüÛK·Œ™@ò8«ÚàíßÇí ¢HÈýEúbA‹°ÁFúzýßI¯¿þòú§Ÿ^ϨSó-Žú^º¿�LsùµRØ—ãk‰ ïáú¼Â!=«�޲$¡W´ç4 Ìžpv¶~Xúxùúñy)€Ñuâ¸!§'¤!°?tò—¥ÿmÔV ;Oíëuâ%,N¹R#Æ�öH‘Ñ`ž<½iºD�?/)U÷mîÖ÷ƒ»ÎùrùûÍ탞¹Æµ»<7û¬£Ô4À&”ÁJÄú÷NÁŸün'YjI‚µÃ{YРÇ$°æ²ç…¹KúËÒG,- ›ç6¾ûùêßÍÅoÎúÍêù¯Æø›¡~ÿãøÇß8þÆñ7ŽÿpÌl—™ÅòðÄ«ÿùWß”5ô½¾þúþ�ÛØP¢s4Ah2ˆÝ†ÀGeþÔ õ`V {éíàÄ/4འ֘ßp^Éd؈ˆ¦·¾†öø�™{I"Œ0È>M"©cÖù5G­2Ï£¸¨ÏçE<WâçËbÄ�îóþþ;·É.­·²��Ö×q!��Ø`ŽM�r¥n4úxKÜÿþÂl›Pƒ*T*d’ +rÄ.�¥ï5Ìî'V€\q–@B5¿)K¤àíf0Ì6{.ðŽÑô{–%WràÊxlBzi5®ˆBèÉàá.Q/ ¨‘ÏJ‘U™íAƒoÀ}©v˜[¥·Ϭ2_*KEiãƒ?³(ŸDO™ÝU1h®³]í ¼¿ü ö4¹FÜ\Õsu°ð¨¡µŠ¾q`¯Â‰&K¦ÝZØu‘ 77‘ŽÒÛƒ�OU4•Q1Š\H¯ö + ¯D¦SqUŽ úTè'K¨B› RtDlR„Y ªû²ªWÕZšiŒ< Ç�o·ÍžÔÔ‹ˆUwðá¦6æQ\yåP�¸8ͨۑ]K|TÈyÕ•·zŽÚ˜b UH `³…��Ãe—a2¹ñÚj[è.á*QÛtJËÞ{ì†Q{÷Éý0!uÞÞ!øT¸B¤ š;Ì‚ÜfšÃ “»A…î@FGÛTX}òPy(ÖºPa”ƒÑ‰U[;‚{ó�9Úœr·� sÞo£9ßno°N”lðD.¶R˜§!N^Úa¢\¾TûÂØä¥· –ùM•÷«©s™öÓ¬ì£4#E‡@l-Š +šw¶ÀQJ”ΛBlqZÜa�èT�AR&—?S/T«Ÿë¾E�슯GäS5ªÒ9V¢öãp´MñÀé¨cç§åì_Öѯ‡®RRK|,w='ÎçNT…öò%R¨‚ÜÝ[øPû&Uæ<ä² {[ÕiŒ�e� #m]ëu¹%êdñ*/ÏVn¥Ü�}g’:̧ð%ò£à~FkWV{ÄÇŠ;Gâ½(άEY„O@¢¢ Ž5$š#¤ šŸ,5à&êÓøÐ1`Z!…†öS¬y:éV„©ÉY½/(eÑE“¯Ñ܈¾þ¡x­x¾‘B™œ†GtA6S „1R.T-Økú9À¨Ðr³«þ؇?–ó§xÌ´„Úd0íß-JTBÌÔ*íÀ_z’+/¬è®!CÃÖÖÇ~þæ¡åŸªßêÐê."‹¤x„B�Sz¼E‚›¨9¶†�·^ÍåSÌîCv£BkTˆ´!ÁÌrÖ/j!OÕ�n½fáw.ê +"F–[¯IS›ºˆ�$9%�Óuó &ðcSQ¦š‘›5õ$k“æ%sµ$/Ï—®¯nBdeºsª/Sž†Z…`R<™${¾¬“N{ ÿª�¢ÌëP1™¡¾oTy¨ûÅc¨©‘ýR*«,Qx!îu«E:Ô$áyQsS2"(5yº�H]Zô’¢¢*\>õp sïy„ž¿Üü±o#*âýáÇ?þ‹ì*Çm‚}^á ªƒ”~…›IšüÈ»”áTÒʦ´9G¦)%²Î*g­(qyíÀ¢þ¬Ù ©žÍ›áDØ|àÖÏÕžËò2´ü¸'š™yØ™xî„(Ë»$+Öö‰väΊ^yÓEÓ_í6° ~ê;ca8ò‡‹3øÿØÈæUŸÙ|Úåá!!¤K´ÙŸœ´d5i�¶Mú*É;ù6B±�Ï{üŽW� iç]¨º\#8šñVlFÆ-çÅúFÁ � +¼„, +¢*)êÅÆI\©Ò_T$œ64q“ŽÚu´ÖÑgdQÅ¿:–rÓºMè.%¸‘÷«œ¦gHÉ;Bͽ+Ñ�zÊ”éV¥½LxEÚ€~�tí2˜²Þ¹%\~Ã|$?"�z‚ãdVz¶;"â;‡¡ç„`9D¥¢³å ÃW (*ß§!Œ��äöC²Òqì­¯·OÁ%àØ ¨hdjbøí÷ñó„¢í 5Òmå™ÃŸ(ºX¨Öb•§k±÷%ÁÉ®"‹ae�"»GªûS¥Þt~ã©õéžšï ±"®ÐqŸxÒœ­Û`Êqó°�ˆ+x…)o¾n¨�ñ-§i8È }uî^ãšüº¨Ör”@yb¦�ûû —?Ãd\Ì endstream endobj 117 0 obj <> endobj 118 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 989.9805908 112.2748413 cm +/Im0 Do +Q + endstream endobj 97 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 119 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1288.5635 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 120 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1444.0992 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 121 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1477.9467 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 122 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1206.7531 638.534 cm +0 0 m +0 -40.303 -32.672 -72.974 -72.974 -72.974 c +-113.277 -72.974 -145.949 -40.303 -145.949 0 c +-145.949 40.303 -113.277 72.974 -72.974 72.974 c +-32.672 72.974 0 40.303 0 0 c +h +S +Q + endstream endobj 123 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1477.9467 638.534 cm +0 0 m +0 -40.303 -32.672 -72.974 -72.974 -72.974 c +-113.277 -72.974 -145.948 -40.303 -145.948 0 c +-145.948 40.303 -113.277 72.974 -72.974 72.974 c +-32.672 72.974 0 40.303 0 0 c +h +S +Q + endstream endobj 124 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1206.7531 910.3017 cm +0 0 m +0 -40.303 -32.672 -72.974 -72.974 -72.974 c +-113.277 -72.974 -145.949 -40.303 -145.949 0 c +-145.949 40.303 -113.277 72.974 -72.974 72.974 c +-32.672 72.974 0 40.303 0 0 c +h +S +Q + endstream endobj 125 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1477.9467 910.3017 cm +0 0 m +0 -40.303 -32.672 -72.974 -72.974 -72.974 c +-113.277 -72.974 -145.948 -40.303 -145.948 0 c +-145.948 40.303 -113.277 72.974 -72.974 72.974 c +-32.672 72.974 0 40.303 0 0 c +h +S +Q + endstream endobj 102 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 1403.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 126 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 983.5602 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 127 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 618.6061 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 128 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 935.1868 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 129 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 565.9668 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 130 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1060.3079 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 131 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1093.1047 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 132 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1248.6405 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 110 0 obj <>stream +H‰ä—ízš@…1ióakLëXiquš€€†û¿·î.hDITX9?:¿òáÝùØ™3ްµ ×®ãH"#"†�…"„¬‚M„ì*²!ë`K™ ä©Çò“ö¹@�Y“ßä¹&ç²é$yõ‘SXž=XžŸa>/5ùA°6‚õí6«^8€�qjè m]Û.„L0½­»'fÇ�0í)r!ûŠü.bE¾B�¿ÂÒ<‚¥™a×YÀÈ ½Tý—+p†›4'ò 6#_‘×9†Ø&…\˜,€õ‘‰ÖÚ�434Ø�q1ÐM{… Ïa‹ ,غ²éAÆU¶‡šSz4Ë5‚ «¯?º¾rY¢êë¡‚ sÙC¹\„\ÈúFѼNt–.ëò‚¬z.CÄnn²¼�Ô�2{-ú/ Xö¾— ð•n^”¥ý“]•× •d“cÊÞzÏM ƽƒ�býpÿBdðkï³QpéqïÕ•TeÝ{ á2ÔþÏÞÁUU÷íñ ÇÓžÁyX‚9ì<Þxìõ emQÖNw¥}¹4V ¨}p,¹¬òx¯E¾&‹>°jòî‚}â·~°N5&ŒIonE½žjÛ$ .ó£Þ®/1¬¶“½×˜ïGìÑŒ_ÒüRÇHÉ5KDèÑtî¥vÏ�'¿G"ˆ<Ábaég�·'S业bn7ÏŠcfc�Œ#?É>š‘™´®¬XÜåËæ©`¦Èk5Ëì‘Nr?=L…—„~S!XÛ ?·õ1Vc3{¯ˆäâƒ{ÿCu›YülãkÿôuîG endstream endobj 89 0 obj [/Indexed 59 0 R 51 180 0 R] endobj 179 0 obj <>/Filter/FlateDecode/Height 140/Intent/RelativeColorimetric/Length 1431/Name/X/Subtype/Image/Type/XObject/Width 122>>stream +H‰Ä×L”eð8†À€ A@ÔÄZüQàºÐ… ¥dq�º™l"Š?j„?²œsHk]�M1G%édpÍnT ¢P P¦(?"áñ¸{ú>/Çý※÷Þ{¿ß¿àîý~?÷¼ïó<ßç%!ÜKë}1\BŠ)ÍA�i)=…"~�"Ãͦu(ò7 ß@‘O€ÜŽ"çƒÜ‡"ïù1м dêŒ!¿Îd 9™ÉR ù&ûcÈ2&aȱhò LÄ�£Ðžóóhs;šÉžr,Ú‡¶o¯FëUëAnC‘SAn@‘Y—¬A‘ÙÙó[ùÈE(²ä}(òy�ÓQd%È«Qä�ŸÁ€�ŸP:æŠ!ÏE{Å` £EÎD[ÎÇ@Þ�"W‚¼Ef‹Ê–|&/ƒ|EÎ9E.G›`=”ŽºaÀá0äk0yäC(2ÛGâ1`·!JU(�9†\…“S oÇ€%)ÕaÈ 0d%LNƒœ�{ÃÌÖcÈ;`ÈW0`òÈoaÀ2€ûÝ1ä +�?À—hAÅ�K±æ×b ȉò7aÀ˦rØ©àVùm6ä7`ßnö”�äb6äu0ëË´–v<¶A>dž\„oeð}ñá¥ÃLNökgðyña׫ î _þ‚Át“øp‹§³smöNP3X.:,ãÖ‚Z©âàOD‡c8¸ÜIlX6ÈÁ¿‰>»Ö�pð?¢o!iO8øá³bÃ{¹uLû#Dv%_r.ˆ–^‡Wˆ ‡·ŽÃ�–‹ o_Æ´7šWú² ?Wr||nÑ{‹yåG Óx%.PŽ»ôæB^ùä'Jëøä½Ú§ƒ•þüàhȽf{šW‰Î¥e³øÁäK¶9kUÛ|�w“¸Ù»mÌñú\7µ¨j3_—Ìa5"mËY{gbÀ·—ñ†¹w‚{6e—M¸´JÊ&•Pàk®—ìœpÕyöœ|C‰õÖ_ŸÐ¬p{¬.!¬ËX½,B/é]zVjLj F©•×*Ôz·_nŸK±™�dÕ¥ÞG† ¾8ÏN˜f‡kú…×�>ƒÛcï€ që†:Ç­p÷¹ôŒŸÝ0Éd…ÂfºÊïP¿‘Ûo¿KœØ¹:ÃE �ž/Ìu&›X­é7ÞËÆŒ\Mq�.qj€bw§™_®iJjW„:×nfÕr¦üznA—‰Û�(�K$-Pî_/Ë_º$]P›¸-©Â½¬½Ç +æ[ü*ä`§ Koe¸æ’Ù½l”NþÂ#½Vkêþ)Ð%¤˜Õ<`þ©s|É )KëS„»Ï,V±quyš~ñ©Ù]¦Úª8AYBܹ·’íÆ…ìo2cé�"\`—�BV¸ÑðøæçüjÎÒŽÝO î’nÉtÿÍËþYkÎj.mtZébÎVü,÷÷ülå$–>8ⶉZV½?N{~™Ìª+’y¾âÍG9 3ìÃë“Tè‚{„é +–"�Fÿ¶ÀöœŒrKḦ’…ª4ÉQw™‹çz,²£•rÏ™“퉠6 ¬ºz‹Ô±,!þY`·Ív4 Ê|6�^Ü" #n4a‡Ëßðƒ…Îk ÿw&ÅCbŸžíR$rzµ6ô³«ñÄG¹ïÈ7¼â눶0)¼-­cíÀ�µß)¿/_訟ñ´Å-Ä84Ý�Õ%g%G{š54#mXmmu%™²ÎÂÐ÷­—õ¿àV–ò#ÛeJ„¸ñ­|d*D#ÙÚÐr·wª9UŒëÂÅ'84zMJæÎ‚¢Ó?*oöj¦—N6g¿°¸×² +ê;F-È{'‡ï’µ[ó¿ºÜlxÃé–Š#~BäÆìŠ&UçJ!ªý/Àgù=ü endstream endobj 180 0 obj <>stream +ÿÿÿ9>333.)('''&&&&%%%%$ $!$$!$$$##$###!# ##!# ##"##" "" """" ""!!!!!"!!! !!!!   endstream endobj 177 0 obj <> endobj 178 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <> endobj 184 0 obj <> endobj 185 0 obj <> endobj 148 0 obj [/Pattern] endobj 175 0 obj <> endobj 176 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 162 0 obj <> endobj 164 0 obj <>stream +H‰ìÎÛmÃ@ÁeþIþ0l‹¯kJ¼]T•î´¼-érKóÖÖõ݌ܼ֕»Í}�ßæ¿o=±�ZWì¬Ö÷:¹õÆjݱýZ÷kwÖÝúÛ¬u—~>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 5024/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖy8ÔûðÓ=…aÃ,Ö&ëØ² Ž}-m48®®�­£Ü$FžN�’µ“«R¶¶S‰¨ëFŠq+�Â(ÉîHŒÊ¾gߪ{Î÷÷›QH�.Æsþèýÿ|ž×óY¾¿ù曯ádV,:% G˜Ð¯ÿƹ,TÇR} ²’� +³u pA¨U«Vqqq/u¸¸¸@á•Ó¸ÿ×T\Ü<<///äâ×õn.6î‹mÓ.ÀBðò!ùP(AAAôÒTB¡PüüH>÷¥¶i`!ùQ‚ha ‹Ãáñ"K<‡Ãb1ÂBh”’�±l_c¹øøQha,^DL\B’@$J±"½ð°+‰‚¤„¸(‡@ò"¸¹ ™þm ãâ†\B¼¨AŠ$#'¯ ¨H&+-EÈd²¢‚¼œìjQR\‡A£�¼?QÖ$¹xx‘(!¬ˆ8�$«@VQS×ÐÒ¦PtXÑ]hØ¿§P´µ45Ö¨*+ÊÉHKŠá1h$ܶÏÒ`˜$Ÿƒ'ÊÈ+©iRôô�ŒMÍÌ-,,Y±ZXØ¿¶°077316üNWK]•,G"ˆá…ùAÛ>OƒaÜÐ0œqµ‚І޾±¹•õÆÍ¶[¨vööö‹ ¨agGÝb³iÃ:KSC=í5Êò$‚(-À&ú™]ƒv † ‹H�äU4t�Ì×mÚâàäìâæîááééÇ{aaýØËÓÓÃ}»ë¶­Žö¶¬L (êJrRâ8!‚ûÓ´i˜ F” C^£cd±a‹£óv/_?ÿ€@-ˆ•} û×A´À€½{vïúÁÓu«ƒ�µ™�¶šIRD…D°ú ØJ.F”UÖÔ7[OuróöõÚðð‘°ðˆÈÈȨE'22"",4äÐ�à@¿�ž.Ž6ëLôÔÉ2@ããù †ñ QQ)9Um#+G·ü‚„DüsòT\|BbbÒ$11!þtì‰ ?¼?ðŸ^Û6Yh*ËΠÍ×2ãC ‹åT)ÆÖTg¯Ýû~ŠˆŽM8{áÒ•”«ié רDÚÕÔ”ä‹çÏÄ�ø9ô@ ¯‡“­•¡Dà�Õà%ã!ȪRLÖÛ»ú�‰;w)õú²²oçäÒéy‹�NÏ͹u33#=åbÒ©c¡ûýw8S×i)ËHâÑüˆùš· �Dã$d”µ�×;¸í + +9vúü•ë™·óîÝXPTÄ`/> £¨ðáƒü»ô[7Ò/Ÿ‰�ú)ÐÇ…ºÖP“LÇ +"Áζzjr<z:æ4�Õ2A¬¸ŒŠŽ¹�³Ï¾°“çÓnÞ)(©¨­o|ñª¹µµ­¤cq�J´·µ¶4¿ljxVSþèA^fÊ™˜�ÀN›L´•HâÔGM{ß2)EM£ ÷ +9~.-û£¬æySs[GWwOoHÿbéííéîlo}Å|V]Zx'+%)ú�¿‡Ã:uy"h×t˜|(¬„Œªž%ÕÍï౤ԛ÷Š+ê˜Íí]½ý¯‡†††—" Îàà@_OgÛ«†Ú²¢;™WŽî÷u±5×Q^-Ž›6{œð0‘h¢¢¦ñÆ­>ÁqÉ™wÏ^´võ¾‡3±ð° +Œ���ŽŒ ô÷t¶0++Ì˸Fóv´6T—'àÁyÎ'‚æ MIZDhæ‹dàÓ$,.£¦oíä³ÿعßyTÓÔ“C0Xöfrl¨·­±Š‘wíÌQ°hk¿SY-&Ä�˜)ƒN#!»Æpã?|Æürã^Éo/;û‡Ç§8Õ2˜�³ãEíã»ç£Üé´Þœ€08�Y2ø45Œ7mÛ}èÄ¥¬û¥Ïš»F& g`Óã| íIþ�_ŽÃ' .+1ë8Ù�A^ÓÄÆuOHlröƒ²ú–î°fk �qNŒt7?{úëÍË'û¹l6Ö�“_�¹2øÑ°Ý¾7ôtÊ­‚òçà8¸f¿³Æ Þ�p³“OÙãjcª©@ÀÎ|6 xΈŠÚfTwðh¤æV4´öròزɱÁžÖ†Š‚Û)§C÷nßb¦¥@À},ÃÉsªG`xüÕ\ðh´A2έٴ gCeaNj|X€;Õ\[‘ˆÚ\™zhi i¹Œ*&x4Æ9x¿Ã‹6?•E¹WÂ=ìÌ)dø©�-ƒþièXØ{Ò"ÓèË&êkgV1rÓ"hv²Ô¼2%K{Ï ÈÄt:£Ȇ—OFOKŒ¤yÚ[è�¥DÐsdH¶Ì+(2i9eÃ@VÍ §'FyÚ[ê(Í’­˜-ŸÍ¼âê¦e–%Ey±eÈyedýË%kª.ÎKOŠš-[1¯ìZ^qMSÇ2Éú?È>%“ž+ãèÇ齬£©¦8ïÚŸÈt—W}žæÊ¤ÿ¢2ÝOʬ ¿´_e³eû¼¬¾Êþ`¿¾£š<÷8€·‡ª…0’@X H¢Œ°ä„�)"„R-Ë¢‚ÌÖZáQ¯\@e© ×"CåŠ ‹A/ .{ÊÙ S=÷y“`eè© öÞsÞïÿÏ{>ç7ž'�e° –Á2XË`,ƒe° –Á2XË`,ƒe° –Á2XË`,ƒe«•ùî·5ù”™Øî÷ý+ešÿ#²×¯f§ËpËË4ÿ +ÙóöÚ²¼´Êp‹eS³¯^¯¹løcdiyeµíÏ?›¬­––›GõÝOyGöÅbåÙðg•ÅR}]9²�oe_@²�oeÔ¸´\ZmÛg’1€ŒNËM�¥ú¸RŒ5 ï—¹úRc?¿ì~jL¨�‹�±'Ì¿D&Œ#hÛ¸ú„ƦæÒè@Æø ²IÆPo+½ô~JLˆ·‹�‘»TÆÏ–¹x‡Æ¤Þ/¥·ö1&×Z67Ã’Õ”ÜKŽ9álmDRXV†U Y;Ÿ‰N¹WRÃ’ÍÌ­¡ì K6>ÔÓR]œs#êo^N» Õ$ÑžÅ24�îrò +ŽJÎ)®négÉ֌ƒ1Ç»›«Š²“.y:Z¨É/•ñ Ð’òêVŽžA—’²‹ªš»Ç™k.›fŽ t5Uf^�<}lŸ¥žªœ +Á³þ]ÙzJRNMßrß±À ×3 +›ºƘÓsk8hÐLOŒö?k¨(ÈH ?åá`AV‘Gò-•IȪ�¿uð8‘˜QPÑð¬tbZ�5¢½á<›/:êžä§'„�t·7×ÝŠCòq/”qó!Åñ[uÍíÝO†%¤ç?©ë€Î5lç›×¬Õ„ž€²¼[Wβ3Ó!nâå^Çõ‡Œk=7¯�èf¢Ž™Ý¡€s—oæ� �½œkU4¨d`ÌÆÁj–ÜK‰a=›ZJÒÁM_/�­ûšW#¥¤ŸÐh°œ`ÆXí\›IƒJ6;�Yc壬¤‹Ð¥aDO€ÀÆÅ²MÐ#@2Ë Vàîïåõ�/F^rŠöÉmoX%c5³½îßï\ ?ut¯¥>ti@-×—ó²/¹À…® 9U²…Ñ“añ·”Ñ[{Ç&¦ Ú§¶A.J6ÐÝRSš{óò¹€Ã»¡_pip–¬€Ì–mfvý¨1)9EO;û†ÌéYíSáXŸ‚`³`ʆžwÔWf%] +öv¥˜j+³`¡Œk74iEMck'ÏÀÈÄ;ù�k[»ûG T ØØ¸O’×�knfšÉéïj®¡=¸�ð�SG÷í4 )@¿ß3Π�_Xy5=‹=n?ž�KÉyTQßÞ;0Ê`NÍÌαqœ¬ØÃÉ+àš�™b2FzÚêÊ ³nÄPý}š)+�Ù4h<ÐN¢Ž)ÅÅ+(òZúƒÒªÆŽÞ�ÆÄäô „ƒx¬¼^Q8‡¡ïÌÎÌLMN0Fz;ž–äÞŠÿ帓µ±–h&ß‚1ãܵ¼‚"8‚º¾¥ƒ[À™è¤»Ëjš:zû‡Ç^NLNMÝÌ,;s+ +ç0øÌôÔ$s‚16ÜßÓÑXMû-ãרP¿CödUy¬ð¢fη“%�ߢ³�â|ü—°+©Y�kÛ»ûGÆ/'˜ÌÉÉÉ)V¦WöYðæÄÄËñ±áÁ¾î¶†ê²‡™Éqÿù¨£µ‰¶²Œ +±°™ì?)Ð3€‘E³Ø}Ð'(">-» ¬ª¾µ³çÅÀÐÈèØø8ƒÁx¹Ê€OŒ��� ôõt¶Ô=¥=ÌJ½xb¿�9YM+"ÈÞÌwdóECKà‰ÚÆV{ÝüC.$¤e=,­¨mlíìîíëYq Óà#ƒ/úz»:Zèå%ù™©ñ‘Á~‡vi²K¶¨™,¸Ò I“WÕÝnãèz!>õîƒG�ŸÒë›Û:žuu÷ôö>‡Ò·Â°÷öötwuv´6ÕÓ+Ë +ó2R®F†ø»ÿ`mºME+¼LÉ vBEC Ä¤ÕõÌm�<B"®$¥çä••WÑëšš[Z[ÛÚÚÚWp¼µµ¥¹©¡Ž^UN{ô[öí_/‡ûq¤|CV#H‹"—)§hܼÂxe ýß9yø…E_K¹“óà÷bÚ“ŠÊªê:½ä?+ t–N¯©®ª,B+.ÈËþWrBÔù@?wG[s=’’Œ8Z`ÓÒ’qж�‡OH+KÔ4Øaëèæó˙ȸĔÛwsòò +‹ŠKJi4ZÙ*Ž—–äçædÜJ¾AýÙûðs} "^RD��gÃÒ’qÖô‰ÁÉmÑÔ7·Ù{ðx@ÐÙȘøëÉ7Ó32³sîÝÏÍÍÍ[EÀñû÷r²33Òo&ÿójtÄ™ÓþÇ8X£§A”Åb„@/—)ÙÛ~nâGŠâäˆzÛ­v;»yýH »}9!ñzRrJjjÈÍ:›ššr#ézbüåèÈó¡§<;}¿Ó”L"Êâ0HÄ&[¦dì~~µÐP¢8Yeu]c Šƒ‹›§ßÉÀÐsa.EEÇÄÆÆ­*±±1ÑQ#ÃÏŸ 9ý“ïñÃÎö6;Œ¶©)á±$?4d\Ë•l~Ô ªa°xEUmýí–”=N�xúœ<J¥žYE¨ÔÐÐ�à Ó§~ò÷>î~ÀÑÞÆÂDOK… #É‚±†l9Ø»4 iy¢ºŽ¾©…µ�ƒ£ë!w�cž^'¼}|9ñûÈÌŸóñ>áåyÌÃí «ãžïví0ÑÓVS–“B|�›†Ãá [ÔuôŒÍ,¬(vöû�œ]\]÷³sà#Ã9æêêâìä¸ÏÁÞŽbeafDÖV#*È`EÑ‚ØrCö¶h,ÚF>”ˆ„ž@TÓÜF6413ÿÖÒj—µ� …B±]qÀaë]V–æf&†d Ue>stream +ÿÿÿ endstream endobj 163 0 obj <> endobj 188 0 obj <> endobj 189 0 obj [0.0 0.0 0.0] endobj 190 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 1403.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 191 0 obj <> endobj 193 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 5024/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖy8ÔûðÓ=…aÃ,Ö&ëØ² Ž}-m48®®�­£Ü$FžN�’µ“«R¶¶S‰¨ëFŠq+�Â(ÉîHŒÊ¾gߪ{Î÷÷›QH�.Æsþèýÿ|ž×óY¾¿ù曯ádV,:% G˜Ð¯ÿƹ,TÇR} ²’� +³u pA¨U«Vqqq/u¸¸¸@á•Ó¸ÿ×T\Ü<<///äâ×õn.6î‹mÓ.ÀBðò!ùP(AAAôÒTB¡PüüH>÷¥¶i`!ùQ‚ha ‹Ãáñ"K<‡Ãb1ÂBh”’�±l_c¹øøQha,^DL\B’@$J±"½ð°+‰‚¤„¸(‡@ò"¸¹ ™þm ãâ†\B¼¨AŠ$#'¯ ¨H&+-EÈd²¢‚¼œìjQR\‡A£�¼?QÖ$¹xx‘(!¬ˆ8�$«@VQS×ÐÒ¦PtXÑ]hØ¿§P´µ45Ö¨*+ÊÉHKŠá1h$ܶÏÒ`˜$Ÿƒ'ÊÈ+©iRôô�ŒMÍÌ-,,Y±ZXØ¿¶°077316üNWK]•,G"ˆá…ùAÛ>OƒaÜÐ0œqµ‚І޾±¹•õÆÍ¶[¨vööö‹ ¨agGÝb³iÃ:KSC=í5Êò$‚(-À&ú™]ƒv † ‹H�äU4t�Ì×mÚâàäìâæîááééÇ{aaýØËÓÓÃ}»ë¶­Žö¶¬L (êJrRâ8!‚ûÓ´i˜ F” C^£cd±a‹£óv/_?ÿ€@-ˆ•} û×A´À€½{vïúÁÓu«ƒ�µ™�¶šIRD…D°ú ØJ.F”UÖÔ7[OuróöõÚðð‘°ðˆÈÈȨE'22"",4äÐ�à@¿�ž.Ž6ëLôÔÉ2@ããù †ñ QQ)9Um#+G·ü‚„DüsòT\|BbbÒ$11!þtì‰ ?¼?ðŸ^Û6Yh*ËΠÍ×2ãC ‹åT)ÆÖTg¯Ýû~ŠˆŽM8{áÒ•”«ié רDÚÕÔ”ä‹çÏÄ�ø9ô@ ¯‡“­•¡Dà�Õà%ã!ȪRLÖÛ»ú�‰;w)õú²²oçäÒéy‹�NÏ͹u33#=åbÒ©c¡ûýw8S×i)ËHâÑüˆùš· �Dã$d”µ�×;¸í + +9vúü•ë™·óîÝXPTÄ`/> £¨ðáƒü»ô[7Ò/Ÿ‰�ú)ÐÇ…ºÖP“LÇ +"Áζzjr<z:æ4�Õ2A¬¸ŒŠŽ¹�³Ï¾°“çÓnÞ)(©¨­o|ñª¹µµ­¤cq�J´·µ¶4¿ljxVSþèA^fÊ™˜�ÀN›L´•HâÔGM{ß2)EM£ ÷ +9~.-û£¬æySs[GWwOoHÿbéííéîlo}Å|V]Zx'+%)ú�¿‡Ã:uy"h×t˜|(¬„Œªž%ÕÍï౤ԛ÷Š+ê˜Íí]½ý¯‡†††—" Îàà@_OgÛ«†Ú²¢;™WŽî÷u±5×Q^-Ž›6{œð0‘h¢¢¦ñÆ­>ÁqÉ™wÏ^´võ¾‡3±ð° +Œ���ŽŒ ô÷t¶0++Ì˸Fóv´6T—'àÁyÎ'‚æ MIZDhæ‹dàÓ$,.£¦oíä³ÿعßyTÓÔ“C0Xöfrl¨·­±Š‘wíÌQ°hk¿SY-&Ä�˜)ƒN#!»Æpã?|Æürã^Éo/;û‡Ç§8Õ2˜�³ãEíã»ç£Üé´Þœ€08�Y2ø45Œ7mÛ}èÄ¥¬û¥Ïš»F& g`Óã| íIþ�_ŽÃ' .+1ë8Ù�A^ÓÄÆuOHlröƒ²ú–î°fk �qNŒt7?{úëÍË'û¹l6Ö�“_�¹2øÑ°Ý¾7ôtÊ­‚òçà8¸f¿³Æ Þ�p³“OÙãjcª©@ÀÎ|6 xΈŠÚfTwðh¤æV4´öròزɱÁžÖ†Š‚Û)§C÷nßb¦¥@À},ÃÉsªG`xüÕ\ðh´A2έٴ gCeaNj|X€;Õ\[‘ˆÚ\™zhi i¹Œ*&x4Æ9x¿Ã‹6?•E¹WÂ=ìÌ)dø©�-ƒþièXØ{Ò"ÓèË&êkgV1rÓ"hv²Ô¼2%K{Ï ÈÄt:£Ȇ—OFOKŒ¤yÚ[è�¥DÐsdH¶Ì+(2i9eÃ@VÍ §'FyÚ[ê(Í’­˜-ŸÍ¼âê¦e–%Ey±eÈyedýË%kª.ÎKOŠš-[1¯ìZ^qMSÇ2Éú?È>%“ž+ãèÇ齬£©¦8ïÚŸÈt—W}žæÊ¤ÿ¢2ÝOʬ ¿´_e³eû¼¬¾Êþ`¿¾£š<÷8€·‡ª…0’@X H¢Œ°ä„�)"„R-Ë¢‚ÌÖZáQ¯\@e© ×"CåŠ ‹A/ .{ÊÙ S=÷y“`eè© öÞsÞïÿÏ{>ç7ž'�e° –Á2XË`,ƒe° –Á2XË`,ƒe° –Á2XË`,ƒe«•ùî·5ù”™Øî÷ý+ešÿ#²×¯f§ËpËË4ÿ +ÙóöÚ²¼´Êp‹eS³¯^¯¹løcdiyeµíÏ?›¬­––›GõÝOyGöÅbåÙðg•ÅR}]9²�oe_@²�oeÔ¸´\ZmÛg’1€ŒNËM�¥ú¸RŒ5 ï—¹úRc?¿ì~jL¨�‹�±'Ì¿D&Œ#hÛ¸ú„ƦæÒè@Æø ²IÆPo+½ô~JLˆ·‹�‘»TÆÏ–¹x‡Æ¤Þ/¥·ö1&×Z67Ã’Õ”ÜKŽ9álmDRXV†U Y;Ÿ‰N¹WRÃ’ÍÌ­¡ì K6>ÔÓR]œs#êo^N» Õ$ÑžÅ24�îrò +ŽJÎ)®négÉ֌ƒ1Ç»›«Š²“.y:Z¨É/•ñ Ð’òêVŽžA—’²‹ªš»Ç™k.›fŽ t5Uf^�<}lŸ¥žªœ +Á³þ]ÙzJRNMßrß±À ×3 +›ºƘÓsk8hÐLOŒö?k¨(ÈH ?åá`AV‘Gò-•IȪ�¿uð8‘˜QPÑð¬tbZ�5¢½á<›/:êžä§'„�t·7×ÝŠCòq/”qó!Åñ[uÍíÝO†%¤ç?©ë€Î5lç›×¬Õ„ž€²¼[Wβ3Ó!nâå^Çõ‡Œk=7¯�èf¢Ž™Ý¡€s—oæ� �½œkU4¨d`ÌÆÁj–ÜK‰a=›ZJÒÁM_/�­ûšW#¥¤ŸÐh°œ`ÆXí\›IƒJ6;�Yc壬¤‹Ð¥aDO€ÀÆÅ²MÐ#@2Ë Vàîïåõ�/F^rŠöÉmoX%c5³½îßï\ ?ut¯¥>ti@-×—ó²/¹À…® 9U²…Ñ“añ·”Ñ[{Ç&¦ Ú§¶A.J6ÐÝRSš{óò¹€Ã»¡_pip–¬€Ì–mfvý¨1)9EO;û†ÌéYíSáXŸ‚`³`ʆžwÔWf%] +öv¥˜j+³`¡Œk74iEMck'ÏÀÈÄ;ù�k[»ûG T ØØ¸O’×�knfšÉéïj®¡=¸�ð�SG÷í4 )@¿ß3Π�_Xy5=‹=n?ž�KÉyTQßÞ;0Ê`NÍÌαqœ¬ØÃÉ+àš�™b2FzÚêÊ ³nÄPý}š)+�Ù4h<ÐN¢Ž)ÅÅ+(òZúƒÒªÆŽÞ�ÆÄäô „ƒx¬¼^Q8‡¡ïÌÎÌLMN0Fz;ž–äÞŠÿ帓µ±–h&ß‚1ãܵ¼‚"8‚º¾¥ƒ[À™è¤»Ëjš:zû‡Ç^NLNMÝÌ,;s+ +ç0øÌôÔ$s‚16ÜßÓÑXMû-ãרP¿CödUy¬ð¢fη“%�ߢ³�â|ü—°+©Y�kÛ»ûGÆ/'˜ÌÉÉÉ)V¦WöYðæÄÄËñ±áÁ¾î¶†ê²‡™Éqÿù¨£µ‰¶²Œ +±°™ì?)Ð3€‘E³Ø}Ð'(">-» ¬ª¾µ³çÅÀÐÈèØø8ƒÁx¹Ê€OŒ��� ôõt¶Ô=¥=ÌJ½xb¿�9YM+"ÈÞÌwdóECKà‰ÚÆV{ÝüC.$¤e=,­¨mlíìîíëYq Óà#ƒ/úz»:Zèå%ù™©ñ‘Á~‡vi²K¶¨™,¸Ò I“WÕÝnãèz!>õîƒG�ŸÒë›Û:žuu÷ôö>‡Ò·Â°÷öötwuv´6ÕÓ+Ë +ó2R®F†ø»ÿ`mºME+¼LÉ vBEC Ä¤ÕõÌm�<B"®$¥çä••WÑëšš[Z[ÛÚÚÚWp¼µµ¥¹©¡Ž^UN{ô[öí_/‡ûq¤|CV#H‹"—)§hܼÂxe ýß9yø…E_K¹“óà÷bÚ“ŠÊªê:½ä?+ t–N¯©®ª,B+.ÈËþWrBÔù@?wG[s=’’Œ8Z`ÓÒ’qж�‡OH+KÔ4Øaëèæó˙ȸĔÛwsòò +‹ŠKJi4ZÙ*Ž—–äçædÜJ¾AýÙûðs} "^RD��gÃÒ’qÖô‰ÁÉmÑÔ7·Ù{ðx@ÐÙȘøëÉ7Ó32³sîÝÏÍÍÍ[EÀñû÷r²33Òo&ÿójtÄ™ÓþÇ8X£§A”Åb„@/—)ÙÛ~nâGŠâäˆzÛ­v;»yýH »}9!ñzRrJjjÈÍ:›ššr#ézbüåèÈó¡§<;}¿Ó”L"Êâ0HÄ&[¦dì~~µÐP¢8Yeu]c Šƒ‹›§ßÉÀÐsa.EEÇÄÆÆ­*±±1ÑQ#ÃÏŸ 9ý“ïñÃÎö6;Œ¶©)á±$?4d\Ë•l~Ô ªa°xEUmýí–”=N�xúœ<J¥žYE¨ÔÐÐ�à Ó§~ò÷>î~ÀÑÞÆÂDOK… #É‚±†l9Ø»4 iy¢ºŽ¾©…µ�ƒ£ë!w�cž^'¼}|9ñûÈÌŸóñ>áåyÌÃí «ãžïví0ÑÓVS–“B|�›†Ãá [ÔuôŒÍ,¬(vöû�œ]\]÷³sà#Ã9æêêâìä¸ÏÁÞŽbeafDÖV#*È`EÑ‚ØrCö¶h,ÚF>”ˆ„ž@TÓÜF6413ÿÖÒj—µ� …B±]qÀaë]V–æf&†d Ue> endobj 160 0 obj <> endobj 161 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 150 0 obj <> endobj 151 0 obj <> endobj 147 0 obj <> endobj 149 0 obj <> endobj 144 0 obj <> endobj 146 0 obj <>stream +H‰ìÎQ‚@Ááþ—6~`…FÙy&]'¨*ÝgùZPåŽå­«Ë¹« ·y-T›Û:]›ß:WëyϺ^³¾ÖçZïk<ë~ gÝ­Q¬{õ”úÚ›u�^þ&ÖýyK}寖ÔWnlùƒX÷d%6¶ÄǺưðX÷b‡1ÊeŒ2F£bcKt¬û°ËeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQƨèXäÌTÆ c”1ÊeŒ +�ÎRce ªÔYj¬òca³ÔXUè,5V:K�ÕZwèe ™m_±�WÄl÷•0ÄÚg£W÷lüj�}juÎ^mµãWËìL«¡v¶5¹FZo¸5åvmusî«Ôo›?®hå!À¨Q‹ endstream endobj 194 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwT“iàqW)I „’PD�NiEiÉatAD‚+E‡µ!RÆÂ**mÆY,ÑÈ c[¤©ƒ´ ",ôéMÜÝ÷K"JX€0Î9ßïÿïžçÜ{ß›|÷áeδó Q„¡„>þ›ð2Eõw�¹ÂT˜�ûzdš7ožˆˆèLGDDžûÞö•,€G H(¨é‡[ÔáÛ¾”öžTâ$JBR�–’’ÂÌL@%4-)!�BŠóm_H{Ï*”Z +##+'‡Åâpò3‹•““•‘Æ %QHdãѾÀÅc!%Ð9œ¼¢’² +^UU�õ©‡_AU�WQVRÀae¥¥$QqQh Ÿ‘ÍáºDD!–´,NA¯FÐ jiëè�Hº3‰¤£­EÔœOPUQ’ÇÊbÐ(„·iŸ'oŒ"bZZN^ OÐÔ&-00265#“Íy±˜jøß“Éf¦&Ɔúz:D uEœ,FÅmÚ§d\#R#‹SRÕÐÒ50![.Zlcgï@¡8òâ4µð¿¦Pìmm¬Z˜铈¼"NFJ4í“2®KT´ «¨:_{�±ù"'çïW¸¹{xR©TÚtjxzz¸»º,_êhgmif¨§EÀ+Èa$‘`œ“ï´_\—Œ¼2Ak�±Åb‡¥.ޫ׬õ÷§Ó¸Y7µð> Óý×úùú¬ò¢º-w²³"éÕ”°Òh¤¸è¤²÷.)Y¼ÉÐ|±ãrw/o¿€��Ûv‡„„ò²kjá´sûÖÍ辫h®ÎöVfÚy4Jœ7͉]sy.UM=“EË}üpÄžà@ÿ•nNÖ¦�LZ1Ñšñ !)#�'ê›Û.£ún Ú{ú—s/ÿvõzÖÍl&3gúa2™Ù7o\ËÌ`¤¦$�<¶c½·Ç’Ŧz*XŒ„ø-ã RƒSÑX@¶]Fó ?rêÌ…ËW³rîÜ»ŸWPPXX4ýäßϽ{›yã +ã\r\̾à�«=–X›�JrR(0L�–q)§DÐ5]ìLóÛòã¡%�»|-çn^ѣ⒲òŠ +‹U9½€ +¬Šò²ÒÇ<,Ƚ��™ž4&Ú`_wgË«ªÒ¼lFÒá°M«–[�Y¢¡YŽ-ïMÊ‚IZ9ÿ°awLbZÖý’ª—Í�À5òvtzž ‰££�¬«½‘]ùðö•”ã¶ùºÙ™ê¨Ž—¼“ÂâµMlWølÙûkÆ-а†ö®¾ÁaÈûߌ…Oè倖=ν‘z:2˜Nu´Ð#(HK| ã­˜¼‰ìà&yòüµÿ?{ÙÂé€\3Ë£�Ž õwµ7Ô”0É?íÞàµt¡þ|%ðK>Ža�¥- 4:1ýf~Yu}[$·_3ËâÑÞ�¾èélª³Ì8slÏf°d†šÊã¶À ÝWÒ0XäüÃÆ°#?_þ½ˆÅnìèá7læ]<ÙÈ`§åå³?îf¦ß¿ÕÇÅÆ˜¨"‡F| �Ú}CëåÿÜûïßîh’B‚A²·ÃýÝíõÕ¥÷o¤žŠØéçnoª�Ç +ÀD z”®¾ÛÁî_Ï-yÎ]1h’Âqñ`Ý 5eù7/Æ +Zëá`¦£ +ý( À°xS{w¿�§S³òʪÚ»ÁŠ ­a@Áz:kË ²Ó¢‚ý=È$Uœ )~�ÌÀµŠŒ¿x3¿¼¦�»ûB…�íÏ’]QÈLOŒ +¡{RÈ$µ‰`ÐóôŽJHË.¨¨å>JáMò#«�ÉHŒ¥S)æ$5yŒ Á(žô�¨Ätfa»©³gpDè°^>,):4€êh®; ~s +•î+ƒYÈš=X«(‡‘3C‰ŽýU|Ó5w¤‚ßćõÎŒóF„AøEQc°˜$FN«n¶`Íu•E9—> £}€q¾=Ø¥œ¢Êºf¡ÃÀ!„©›0‹‰aê‚°!aÞWAØ®u4§Iaß,̉¶n ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á°¿Ì‘ +þfþ'ÂBhŽ“ÀÔaƒ#£ïffþ#§ˆU×$tػёAA˜Úd0êXçŸû‚!Ç`ÑI f!‹=[°¦:VQãó0zhtâlÂ:?À¨“Àpj$2Å“•˜Îü?»uåÚÆüíÓ!ƒY˜Ífìcƾ̄�ý�dO¯ +¡M9 +¥7urdi=JBÚ´¢ÞJŽpN*‰éh±ŒJDÉR¶ÄØsNŸ÷~žjTç¼fxÿzÿ_÷çû¹®ë¾Ÿ‡Í0îÿÖTË.Ê9–8 “‚`ÿøÃð`A‘ iÙ…åœÆöîðìø|XzâÖ`/»ùŒ¯Â¨t¦­G`D|jVAY ›Í‡lÆae§'l ö´c1”ˆ˜/`³q_wôÂ�{Õ/Úºûg6>6Ìíio¬)/ÌJKˆ ò´e1¨_À$ÑЦ±µ[ÀæØ#çóK«Z»û†FÇgo–aXOۋ겂‹©q�¶L:•0&.‰Æ+Ò ­–ø…Å>›WòøyKgßà(´d³$ƒaCýÝ­ U¥ùRv‡¯r·1֤ВS`(¼‚†�åâ¡?&�¾vûá³æþÓ?;0àúc|t°¯«¥¾ònÞ¹äŸ6ù»ZÑ(ø©0 +GVÓ3_ôÏ�è'ÿ}ó÷'à釷–dáÝìíh®{t'7óЮVº,4ÔP0ñÏ`sÅH¬¼ªŽÙ÷K×nߤ¢òhû‡fm–Àï>x_ŸT_9ypÇ_g }u +!“àý÷@¸–ùw+Ÿ¿î|?02­ÿÌÓ> +ÖÖ^‹K{·­óq4ÓU%c‘ñ¹0ø!3¶võÛu(óÚ­ +0Ë^Ë ÙŒÒ ذ±á�ÞŽ×Ï+Áî�� ö²7ÑV!É"%Ä>ÁæÌ…Þ ¼¢†�…³oÈö}9…eÕ -�½Üa ãÓfȹÀ†õu·7=©¸u-óPL˜¿›µ1�J”‘þ Æß~,YU×ÔÁ;82.åÜõÛž4µu½²qˆÆ³ÍHþ„Xãc£CÜw¯ë«Ê +s2ömñu¶4 )ÐRóÄæÎùã-™ƒiíêºóà‰K…÷*ë^½éî²±ã<?Bsøù°>Œ� q{;[k+nåž=ìí`ª«FØ} ú(�Yš;ù¬ÙŸröZñýšúæ7Ýï¹C€Ù œ?… +¿:çÃØØÈð`oWÛËg�K rŽØêçjÍd(ËÉ +Lþ‡O,V^E{¾­›èŽýDz~¹SÁih~ÓÕÛ?08<2 +pcx*übpÌèÈðÐ ·ï]gÛ˺ªòß®f&ïÞ²ÆÇÉ\_Cú }›˜%‘J3°pòY{è䥂’œúWm=½}Ü�Á¡¡ááá8£B…W èï{×õ¶¥©®Š]|ý|ÚÞíýÜlYÚ*ò8ü¼ +ÂÀ½Ä‘UµY6®+B¢â�œ¾\PRQ]×øº½£«§÷}_?—Ë1àˆþþ¾÷ïzºÞ¶5¿xZÉ.ÎËÊ8¸ks�·£¹�2åNNÌZF¡é/pð Ýž˜’yùÆmöãÚçMÍ­ío;»º{zzÞ�ô +¨ÒÝÕñ¶½åUcçaÙÍëYÇ“b#×úºX3µTÈ8ð¡„ñ[†ÂÉ«0Œ-- Û±'åtÎ/7K+*këš^½nimkoå­��‹ÛÛÛZ[š_5Ö?ã<¾_RtíÂñ¤ÝQ!+ÝìLõ4 †!'ù©eE5–õbŸ °èÄä¯ܺ÷û£êÚ§uõ /›šš^ŠPÞØø¢¡¾î)§ê!ûîÍüËgÓÞµÁßó{sCº ‹ú¢a“-“•£jè™Ø¸, +Û—”~&'·àfIÙý�*«ªk8œZ�'Bªåpjª«?¬`ß»ýkþ•‹§Žî�Ùâïådi¬¥JÆc¤%¦6Œß2 )4ޤDÓ7µqñ ܳ/9ãLö•¼‚ߊïÜ--++g³Ù÷E(//»WZr»¸èFîå §Ó’vF¬óótZÈÔQS$Ê"ó¾›Ú0¸e@&�ÁË+kê›Ø8{û¯�Þ½?9ýÔ¹¬ËWsóòoý*B@yaÁ�ü¼Ü+—.ž9‘š´'&ê‡ÕËÝ-™:깉A~ƒe¤ ž¬¬©gbåä±èf6Й<ÕôY“67 ™#¼êsÜ,D$ÔÌ2g˜òÿLÉÅ6– endstream endobj 145 0 obj <> endobj 195 0 obj <> endobj 196 0 obj [0.0 0.0 0.0] endobj 197 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 198 0 obj <> endobj 199 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwT“iàqW)I „’PD�NiEiÉatAD‚+E‡µ!RÆÂ**mÆY,ÑÈ c[¤©ƒ´ ",ôéMÜÝ÷K"JX€0Î9ßïÿïžçÜ{ß›|÷áeδó Q„¡„>þ›ð2Eõw�¹ÂT˜�ûzdš7ožˆˆèLGDDžûÞö•,€G H(¨é‡[ÔáÛ¾”öžTâ$JBR�–’’ÂÌL@%4-)!�BŠóm_H{Ï*”Z +##+'‡Åâpò3‹•““•‘Æ %QHdãѾÀÅc!%Ð9œ¼¢’² +^UU�õ©‡_AU�WQVRÀae¥¥$QqQh Ÿ‘ÍáºDD!–´,NA¯FÐ jiëè�Hº3‰¤£­EÔœOPUQ’ÇÊbÐ(„·iŸ'oŒ"bZZN^ OÐÔ&-00265#“Íy±˜jøß“Éf¦&Ɔúz:D uEœ,FÅmÚ§d\#R#‹SRÕÐÒ50![.Zlcgï@¡8òâ4µð¿¦Pìmm¬Z˜铈¼"NFJ4í“2®KT´ «¨:_{�±ù"'çïW¸¹{xR©TÚtjxzz¸»º,_êhgmif¨§EÀ+Èa$‘`œ“ï´_\—Œ¼2Ak�±Åb‡¥.ޫ׬õ÷§Ó¸Y7µð> Óý×úùú¬ò¢º-w²³"éÕ”°Òh¤¸è¤²÷.)Y¼ÉÐ|±ãrw/o¿€��Ûv‡„„ò²kjá´sûÖÍ辫h®ÎöVfÚy4Jœ7͉]sy.UM=“EË}üpÄžà@ÿ•nNÖ¦�LZ1Ñšñ !)#�'ê›Û.£ún Ú{ú—s/ÿvõzÖÍl&3gúa2™Ù7o\ËÌ`¤¦$�<¶c½·Ç’Ŧz*XŒ„ø-ã RƒSÑX@¶]Fó ?rêÌ…ËW³rîÜ»ŸWPPXX4ýäßϽ{›yã +ã\r\̾à�«=–X›�JrR(0L�–q)§DÐ5]ìLóÛòã¡%�»|-çn^ѣ⒲òŠ +‹U9½€ +¬Šò²ÒÇ<,Ƚ��™ž4&Ú`_wgË«ªÒ¼lFÒá°M«–[�Y¢¡YŽ-ïMÊ‚IZ9ÿ°awLbZÖý’ª—Í�À5òvtzž ‰££�¬«½‘]ùðö•”ã¶ùºÙ™ê¨Ž—¼“ÂâµMlWølÙûkÆ-а†ö®¾ÁaÈûߌ…Oè倖=ν‘z:2˜Nu´Ð#(HK| ã­˜¼‰ìà&yòüµÿ?{ÙÂé€\3Ë£�Ž õwµ7Ô”0É?íÞàµt¡þ|%ðK>Ža�¥- 4:1ýf~Yu}[$·_3ËâÑÞ�¾èélª³Ì8slÏf°d†šÊã¶À ÝWÒ0XäüÃÆ°#?_þ½ˆÅnìèá7læ]<ÙÈ`§åå³?îf¦ß¿ÕÇÅÆ˜¨"‡F| �Ú}CëåÿÜûïßîh’B‚A²·ÃýÝíõÕ¥÷o¤žŠØéçnoª�Ç +ÀD z”®¾ÛÁî_Ï-yÎ]1h’Âqñ`Ý 5eù7/Æ +Zëá`¦£ +ý( À°xS{w¿�§S³òʪÚ»ÁŠ ­a@Áz:kË ²Ó¢‚ý=È$Uœ )~�ÌÀµŠŒ¿x3¿¼¦�»ûB…�íÏ’]QÈLOŒ +¡{RÈ$µ‰`ÐóôŽJHË.¨¨å>JáMò#«�ÉHŒ¥S)æ$5yŒ Á(žô�¨Ätfa»©³gpDè°^>,):4€êh®; ~s +•î+ƒYÈš=X«(‡‘3C‰ŽýU|Ó5w¤‚ßćõÎŒóF„AøEQc°˜$FN«n¶`Íu•E9—> £}€q¾=Ø¥œ¢Êºf¡ÃÀ!„©›0‹‰aê‚°!aÞWAØ®u4§Iaß,̉¶n ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á°¿Ì‘ +þfþ'ÂBhŽ“ÀÔaƒ#£ïffþ#§ˆU×$tػёAA˜Úd0êXçŸû‚!Ç`ÑI f!‹=[°¦:VQãó0zhtâlÂ:?À¨“Àpj$2Å“•˜Îü?»uåÚÆüíÓ!ƒY˜Ífìcƾ̄�ý�dO¯ +¡M9 +¥7urdi=JBÚ´¢ÞJŽpN*‰éh±ŒJDÉR¶ÄØsNŸ÷~žjTç¼fxÿzÿ_÷çû¹®ë¾Ÿ‡Í0îÿÖTË.Ê9–8 “‚`ÿøÃð`A‘ iÙ…åœÆöîðìø|XzâÖ`/»ùŒ¯Â¨t¦­G`D|jVAY ›Í‡lÆae§'l ö´c1”ˆ˜/`³q_wôÂ�{Õ/Úºûg6>6Ìíio¬)/ÌJKˆ ò´e1¨_À$ÑЦ±µ[ÀæØ#çóK«Z»û†FÇgo–aXOۋ겂‹©q�¶L:•0&.‰Æ+Ò ­–ø…Å>›WòøyKgßà(´d³$ƒaCýÝ­ U¥ùRv‡¯r·1֤ВS`(¼‚†�åâ¡?&�¾vûá³æþÓ?;0àúc|t°¯«¥¾ònÞ¹äŸ6ù»ZÑ(ø©0 +GVÓ3_ôÏ�è'ÿ}ó÷'à釷–dáÝìíh®{t'7óЮVº,4ÔP0ñÏ`sÅH¬¼ªŽÙ÷K×nߤ¢òhû‡fm–Àï>x_ŸT_9ypÇ_g }u +!“àý÷@¸–ùw+Ÿ¿î|?02­ÿÌÓ> +ÖÖ^‹K{·­óq4ÓU%c‘ñ¹0ø!3¶võÛu(óÚ­ +0Ë^Ë ÙŒÒ ذ±á�ÞŽ×Ï+Áî�� ö²7ÑV!É"%Ä>ÁæÌ…Þ ¼¢†�…³oÈö}9…eÕ -�½Üa ãÓfȹÀ†õu·7=©¸u-óPL˜¿›µ1�J”‘þ Æß~,YU×ÔÁ;82.åÜõÛž4µu½²qˆÆ³ÍHþ„Xãc£CÜw¯ë«Ê +s2ömñu¶4 )ÐRóÄæÎùã-™ƒiíêºóà‰K…÷*ë^½éî²±ã<?Bsøù°>Œ� q{;[k+nåž=ìí`ª«FØ} ú(�Yš;ù¬ÙŸröZñýšúæ7Ýï¹C€Ù œ?… +¿:çÃØØÈð`oWÛËg�K rŽØêçjÍd(ËÉ +Lþ‡O,V^E{¾­›èŽýDz~¹SÁih~ÓÕÛ?08<2 +pcx*übpÌèÈðÐ ·ï]gÛ˺ªòß®f&ïÞ²ÆÇÉ\_Cú }›˜%‘J3°pòY{è䥂’œúWm=½}Ü�Á¡¡ááá8£B…W èï{×õ¶¥©®Š]|ý|ÚÞíýÜlYÚ*ò8ü¼ +ÂÀ½Ä‘UµY6®+B¢â�œ¾\PRQ]×øº½£«§÷}_?—Ë1àˆþþ¾÷ïzºÞ¶5¿xZÉ.ÎËÊ8¸ks�·£¹�2åNNÌZF¡é/pð Ýž˜’yùÆmöãÚçMÍ­ío;»º{zzÞ�ô +¨ÒÝÕñ¶½åUcçaÙÍëYÇ“b#×úºX3µTÈ8ð¡„ñ[†ÂÉ«0Œ-- Û±'åtÎ/7K+*këš^½nimkoå­��‹ÛÛÛZ[š_5Ö?ã<¾_RtíÂñ¤ÝQ!+ÝìLõ4 †!'ù©eE5–õbŸ °èÄä¯ܺ÷û£êÚ§uõ /›šš^ŠPÞØø¢¡¾î)§ê!ûîÍüËgÓÞµÁßó{sCº ‹ú¢a“-“•£jè™Ø¸, +Û—”~&'·àfIÙý�*«ªk8œZ�'Bªåpjª«?¬`ß»ýkþ•‹§Žî�Ùâïådi¬¥JÆc¤%¦6Œß2 )4ޤDÓ7µqñ ܳ/9ãLö•¼‚ߊïÜ--++g³Ù÷E(//»WZr»¸èFîå §Ó’vF¬óótZÈÔQS$Ê"ó¾›Ú0¸e@&�ÁË+kê›Ø8{û¯�Þ½?9ýÔ¹¬ËWsóòoý*B@yaÁ�ü¼Ü+—.ž9‘š´'&ê‡ÕËÝ-™:깉A~ƒe¤ ž¬¬©gbåä±èf6Й<ÕôY“67 ™#¼êsÜ,D$ÔÌ2g˜òÿLÉÅ6– endstream endobj 140 0 obj <> endobj 143 0 obj <>stream +H‰ìÎ jÃ@Áñý/�8Ñ·%kß,t� ªô¨×M�.Ï<Ÿ\ÝØ�h]É�{±Ûظ���«%^§n©Øa-Û¯%_û·ôl³–~mÎÒ­omcëµôéGÛØr–ýšf–î¼›d–ÎüåŒk{¯¥'ÿM0KG–œqÎ.hsv�3ÎçŒsÆ9ãúÎ^mcÎ.pÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÕµVÎ0gœ3ÎçŒsÆuŸ5¬•3ÌW]kå «®µr†U×ZM2kT«ifmj‹X—ÚJ¬ñ¬Em5Ö¡¶Ë×6céÚN,[Û�%k±Øíøª�Šng_£oä5òF_ƒr—Z�ïî¬>ýüìEK_ „eQ× endstream endobj 200 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4961/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ì×gX“Yðq¥…$I( ¡HKD@BY@¥PV:¨¬€ì�foˆ€êà€uÅAD°¡Œ4qéŠHW¤ CWÊ„Þtgïû&¨”Q‡Ÿýàÿû{žßsι÷&ß}÷-<Í<.óÿdá�þü<ËluÕ|>ªËÑýmÌâããçœã€’üü��û›.À*A!!BXX Åuà2 !$$é Ü—Û&\€…F¢Ð""Œ¨¨¨ØœÂ`0"hRá8¶/mä,$J#*Ž•ÀáðxArNB àñ8œV\#‚Blû’¶Á ýF¢1bXARZ†(+K&˱#?ëp +�ɲ²DiIèDP°í Ú5ŒíÅâ$¥‰dyE%eU5 +…B�ƒ€2jª*ÊJŠòd’´$ Û ™~†O’O@�D‹bñRD²¢’*U]CK›¦£««ÇŽþ,Ãù\WW‡¦­¥¡NUUV”#Iá� ‰àûÌDÙ0!aF'E’WRSפé-5615£ÓÍÙ±˜U8Óéf¦&ÆK� ôhšêjJò$i<ƒmû4�C¢Å$$‰òJ 𾑠ÝÒj¥��½ƒ£“““3—%ìílVZYÒM–èÓ4¨Ê +$) 1$‡ö˜ˆ^š¼€¢¡c`lneë¸ÊÅÕ}½ƒáééÇ{VaëéÉ`x¬wwuYåhkenl¨£IU’“Á‹šö&N Ê«¨Ó L,­]ÜÞ›·íØåëçïÀÎîY…󱿿Ÿï®Û6{3Ü]œl–›ê,RU °˜OÑ&`XIAMSo™…µ³«ÇÆí¾»÷:t<8$$$”Ë€Áǃ�Ú¿Ûwû&†«³�¥±¾E‘$ù)h§c$EÊbS+ǵŒ->{ ;y.ŠÉŒæ:LfԹȈð3a¡ÇíõÙâéê´ÒÌP›º@ömÆYò +C°TmCºÍêõ›|ö =Á¼-!ä:W�*$\‹�‹½|1:ẩÀý¾›=ÖØZ,¡-4qaAþ™šÏ�éÚFvÿöܾçè‰p楸„›IÉ÷RRÓÒÓ3¸NzzZjʽ䤛‰q1̳'÷îô^ko ÑH14b¦¦qf‰‘�Q ,6²°wÝàs øGæåk·’Ó2feçäååçp�üü¼¼œì¬‡™i¿ÜNø9:<ä�ïF7Ë%Úœ( +ÌsZÓ8³ÄJÉ©jšÛ»nô=|2âRüí”̬Ü¢â’Ò²òòŠŠŠJ® +”——•–æ=~�š”ùÃÿMnFZªrRXÎ<§· �Ó”é›Ù®Ýàw$,êç÷2³ Ÿ•V¾¨®©­«¯¯oà: H]mMõ‹Ê²âœ)7¯0OõßèjGÿ§†²,A …˜Ö4vË0Ò +Tã•k¼|‡1ãn§eW¼¬mhljnimƒÒÎUà­-ÍM� µ/+ž>NOºzþôQ¿ .ÖÆ:T Ìô¦™€JŒ «¢ihéä±óà̸¤Œœ§e/ë›Û:^wvvuƒôp¨FWgç뎶–ƺêò¢œûw®F‡ÞÅp^n¤¥BžhÚ”a‚--[¨kjë¶e_hdlÒýÜg•5�-íoº{X¬Þ¾¾¾þ9(ÓËbõtwv´4ÖVçeÞ‰‹:±o«»�™ÞBE‰i› S%Š—UÑ2Z±ÚËïXxÌÍôœâªº&àbõõ  ÙuØßƒBƒý}¬žÎö¦úÏs3n]>äï½ÆjÉbhÓ„¦Ê » +%OÕ5µsßv0ì|BÊã¢ÊºæŽ.VßÀàŒŽŽ±3>ëp +ŒŽäÐ`?«»£¹¾êYvjâ…S·¯³7Ó£*HcE&�sÞ¼ù`˜QIÃpù*/ÿ ˆØ;¿–×6ut÷ �ŒÂž·ì¼›u8`ãèÈÐ@o÷ëæºŠ'ï^‰<à½z…‘¦‡AN'°¬”á‰$*Í/,6=¿¼®­w�=±ö² ö`o[]y~zl˜�jB"â�aðª:&¶n¾¡1iyeu­�lz-ŸZè¡�†d­ueyi1¡¾n¶&:ªx ¯ )Œ‘SÑ6>èês.:5·ôIKkt=d£¬ž–'¥¹©Ñç|\k«Èa„‘¼2 9-²µówg¢nÜ)©iéf�Œ¯éç‰óqau·Ô”ܹuæ;gk²–Šœ�LÈp„»­œ¾ ‰HÉ)®nî€dkxÑÀ5ƒd]ÍÕÅ9)!ß:YíÞAÀ™À<-.û…¦‘…ã‰ÓW’²‹7uö ¿œ‚V`�hï ˜z9Ü×Ùô¸(;éÊéŽFš_ÈŠ£ïË6 „Äd”Ô Ì{]Jüµ° +þ¤¯áEã\3øƒ^Uøk⥠�ÃæêJ2bB� ïÉ6 + +mÆ*ªé™:¸Ÿº��u¯¢¾ ^εjÔ2x5Ûê+îe%\8åî`ª§¦ˆÝ,$¸q¾ þ�F¡ÒýÃbÒ åìYÃqr‡92Ð ­fZL˜?�J�žñÈ8O­ª6ÙÆÅûLdJ΃¿ÀEã6mÕmï¸-×ì¯9)‘g¼]lÈÚªœ‡vN6ó á”9+|9ñÖï• m½¬Ñq¨imUmP½·PËÆGY½m •¿ßJ¼ÌYeܼçlv9Á +èïwp?ɈMÏ-©i~Þ7Äž4®m•pï¸.›`õ=o®)ÉM�eœtwد`Þjή€4tÑl]½ÏDüœ}ÿaC[ÏÀð ��¾åâV%Pµ7¯llx §­ááýìŸ#Îx»ÚB×LzÞ¼wÑT´v[~u<ðbBF^IuÓ3&kЦ�í G÷v%ÄÙ ØëWÓ6Âb>kª.ÉËH¸xü+ËÝZ*¼× üÞÞ]4qY%u=S{ºï¹Èäß ++jŸv2YÃìñI`{õú5Ä{ó>q‰á…^×ä8{˜Åì|Z[Qø[rä9_º½©žº’¬8tÍ6ükV_4hœD²Õ×Ç/Ä¥Ý.ªªoéd �Ž�OLNMM'¯—îñé驩ɉñ±Ñ¡fgK}UÑí´¸ �Ç¿¶"ë¡aλfÜ‹~áúûíi>!?]ÏÌ-~TÿôYOÿàð({ìåøÄÄÄ$'SË |”9Æìïyö´þQqnæõŸB|höûõ58ðhÞ5ƒÿ> ÑbX…­:dË#ß„F&ÝÌ+®ªkjïbö³^ �ŒŒ²Ùì±zÁêgvµ7ÕUçÝLŠ øæˆ%Yg«V Íùœ¿'›ù €¦©ëíµu>ȈN¾™÷ ²¦±¥ãy³¯ŸÅ|2´‚@çY¬þ>fÏóŽ–ÆšÊy7“£�'œm÷ꩃ–ÍûÌÊÀ Å¤Tµ Íìݼ‚ÎG'eݹ_ú¨¶±¹µ£³«»§·— å?ËçxooOwWgGkscí£Òûw²’¢Ïy¹Ù›j©*Hƒ–�ûÏ#ƒÆ)ˆÁÈ*n#í9à@ó +fD%¦gç•UÕÔ5þÝÜÒÚÖÖÞÞÞ±¢€mm­-Í7ÖÕT•åg§'F1‚½hö�¶)ÊbDP‚¼Ã„›­§”aûNcË/i^�aWãS²ròÿø³üáãê'µuõõ �Ëtº¾¾®öIõã‡åþ‘Ÿ“•5,Ћö¥¥ñÎí9)Îbò´ŒÓ4èµó”WV47Ï“gŒ¾~#3ûnAaQqIiYyEEEåŠ +”—•–ÜÍμq=údz'=ÝL]YÌ~eydpÓÀË!ŽUPÑØelqÈÅÃ78ìrtBrjæ­ìÛwsóò + +î­( @~^îÝÛÙ·2S“¢/‡ûz¸²0Þ¥¡¢€/Æ-ƒ›æ‰•�´�dsªãQOÿÓ¡¯^‹OLJù%5=##$kÙ�Ngd¤§þ’’”íêÅÐÓþžG©æä�&#!Š‚gù�Œ;O¤�(FFAY�d´ÏÚÁù˜§_à¡ç/]‰ˆº¿ÂÄÅÅÆ\‹Š¸ré|è�~žÇœ¬÷‘Ô•d0¢BÈg93OM+OPÓÖ76³qp¢{xù� +ú>älhXx8ƒq~Ea0ÂÃÃBφ|tÊÏ˃îä`cf¬¯­F�ÇJp` Írvž0M¯DÔ š˜YÛq¦¹{xzyûøúùpsrÉ™9éïçëãíåéáNs>bomfbHÒ *á¥ç` Êæh"âR¸-ÊÛ4u ÈûXSvtrqu£ÑéGá[r¸ét𛫋“ãáCTëûȺšÛ”·à¤ÄE>›¥!P›1X9E`ÓÙeH¦˜š[XÙ´¥RíìììWpœJµ=hceanJ!îÒ.E9,f³0 +ñqØ <hQqIüq»¦¶®ž�Ѳ± …²—›}KÎÌI +ÅƼÇÈ@OW[s;‘°/#).ŠÏÅ"0˜½kHdÃâä ª[ÕÔ5whëè�Hºœì\Và³$’ŽŽöMuµ­ªEyr¡�Ð;¶ŒCƒÞµÏH”°¨FJ‡WPT"(«¨ª‰[W"QUUE™ ¤¨€ÇÉHaÄD…QHÄçÐ;¶ ¢Á…lhQ1 I)¬Œ,N�—‡£°Ìp�ãñr8Y¬”¤„˜¨šã‚'¹l¶mÀ&ˆÜ„B �¸„#)))µâ€"Œ„„8P £Q›�‚°kñ†Íµ ²A8Ð ¡ÑÂÂ"""¢«PFX�*ÄâºþlÖÆÅ "H$r'¨®Š!‚\ÖÒ\³6t>_Å€r è¿9¬¥º¸6ñV;PU˜µd×wÈu4Œd; Ùu4”¸ŠÚ[F&0ÚJᇠendstream endobj 142 0 obj <> endobj 201 0 obj <> endobj 202 0 obj [0.0 0.0 0.0] endobj 203 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 989.9805908 112.2748413 cm +/Im0 Do +Q + endstream endobj 204 0 obj <> endobj 205 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4961/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ì×gX“Yðq¥…$I( ¡HKD@BY@¥PV:¨¬€ì�foˆ€êà€uÅAD°¡Œ4qéŠHW¤ CWÊ„Þtgïû&¨”Q‡Ÿýàÿû{žßsι÷&ß}÷-<Í<.óÿdá�þü<ËluÕ|>ªËÑýmÌâããçœã€’üü��û›.À*A!!BXX Åuà2 !$$é Ü—Û&\€…F¢Ð""Œ¨¨¨ØœÂ`0"hRá8¶/mä,$J#*Ž•ÀáðxArNB àñ8œV\#‚Blû’¶Á ýF¢1bXARZ†(+K&˱#?ëp +�ɲ²DiIèDP°í Ú5ŒíÅâ$¥‰dyE%eU5 +…B�ƒ€2jª*ÊJŠòd’´$ Û ™~†O’O@�D‹bñRD²¢’*U]CK›¦£««ÇŽþ,Ãù\WW‡¦­¥¡NUUV”#Iá� ‰àûÌDÙ0!aF'E’WRSפé-5615£ÓÍÙ±˜U8Óéf¦&ÆK� ôhšêjJò$i<ƒmû4�C¢Å$$‰òJ 𾑠ÝÒj¥��½ƒ£“““3—%ìílVZYÒM–èÓ4¨Ê +$) 1$‡ö˜ˆ^š¼€¢¡c`lneë¸ÊÅÕ}½ƒáééÇ{VaëéÉ`x¬wwuYåhkenl¨£IU’“Á‹šö&N Ê«¨Ó L,­]ÜÞ›·íØåëçïÀÎîY…󱿿Ÿï®Û6{3Ü]œl–›ê,RU °˜OÑ&`XIAMSo™…µ³«ÇÆí¾»÷:t<8$$$”Ë€Áǃ�Ú¿Ûwû&†«³�¥±¾E‘$ù)h§c$EÊbS+ǵŒ->{ ;y.ŠÉŒæ:LfԹȈð3a¡ÇíõÙâéê´ÒÌP›º@ömÆYò +C°TmCºÍêõ›|ö =Á¼-!ä:W�*$\‹�‹½|1:ẩÀý¾›=ÖØZ,¡-4qaAþ™šÏ�éÚFvÿöܾçè‰p楸„›IÉ÷RRÓÒÓ3¸NzzZjʽ䤛‰q1̳'÷îô^ko ÑH14b¦¦qf‰‘�Q ,6²°wÝàs øGæåk·’Ó2feçäååçp�üü¼¼œì¬‡™i¿ÜNø9:<ä�ïF7Ë%Úœ( +ÌsZÓ8³ÄJÉ©jšÛ»nô=|2âRüí”̬Ü¢â’Ò²òòŠŠŠJ® +”——•–æ=~�š”ùÃÿMnFZªrRXÎ<§· �Ó”é›Ù®Ýàw$,êç÷2³ Ÿ•V¾¨®©­«¯¯oà: H]mMõ‹Ê²âœ)7¯0OõßèjGÿ§†²,A …˜Ö4vË0Ò +Tã•k¼|‡1ãn§eW¼¬mhljnimƒÒÎUà­-ÍM� µ/+ž>NOºzþôQ¿ .ÖÆ:T Ìô¦™€JŒ «¢ihéä±óà̸¤Œœ§e/ë›Û:^wvvuƒôp¨FWgç뎶–ƺêò¢œûw®F‡ÞÅp^n¤¥BžhÚ”a‚--[¨kjë¶e_hdlÒýÜg•5�-íoº{X¬Þ¾¾¾þ9(ÓËbõtwv´4ÖVçeÞ‰‹:±o«»�™ÞBE‰i› S%Š—UÑ2Z±ÚËïXxÌÍôœâªº&àbõõ  ÙuØßƒBƒý}¬žÎö¦úÏs3n]>äï½ÆjÉbhÓ„¦Ê » +%OÕ5µsßv0ì|BÊã¢ÊºæŽ.VßÀàŒŽŽ±3>ëp +ŒŽäÐ`?«»£¹¾êYvjâ…S·¯³7Ó£*HcE&�sÞ¼ù`˜QIÃpù*/ÿ ˆØ;¿–×6ut÷ �ŒÂž·ì¼›u8`ãèÈÐ@o÷ëæºŠ'ï^‰<à½z…‘¦‡AN'°¬”á‰$*Í/,6=¿¼®­w�=±ö² ö`o[]y~zl˜�jB"â�aðª:&¶n¾¡1iyeu­�lz-ŸZè¡�†d­ueyi1¡¾n¶&:ªx ¯ )Œ‘SÑ6>èês.:5·ôIKkt=d£¬ž–'¥¹©Ñç|\k«Èa„‘¼2 9-²µówg¢nÜ)©iéf�Œ¯éç‰óqau·Ô”ܹuæ;gk²–Šœ�LÈp„»­œ¾ ‰HÉ)®nî€dkxÑÀ5ƒd]ÍÕÅ9)!ß:YíÞAÀ™À<-.û…¦‘…ã‰ÓW’²‹7uö ¿œ‚V`�hï ˜z9Ü×Ùô¸(;éÊéŽFš_ÈŠ£ïË6 „Äd”Ô Ì{]Jüµ° +þ¤¯áEã\3øƒ^Uøk⥠�ÃæêJ2bB� ïÉ6 + +mÆ*ªé™:¸Ÿº��u¯¢¾ ^εjÔ2x5Ûê+îe%\8åî`ª§¦ˆÝ,$¸q¾ þ�F¡ÒýÃbÒ åìYÃqr‡92Ð ­fZL˜?�J�žñÈ8O­ª6ÙÆÅûLdJ΃¿ÀEã6mÕmï¸-×ì¯9)‘g¼]lÈÚªœ‡vN6ó á”9+|9ñÖï• m½¬Ñq¨imUmP½·PËÆGY½m •¿ßJ¼ÌYeܼçlv9Á +èïwp?ɈMÏ-©i~Þ7Äž4®m•pï¸.›`õ=o®)ÉM�eœtwد`Þjή€4tÑl]½ÏDüœ}ÿaC[ÏÀð ��¾åâV%Pµ7¯llx §­ááýìŸ#Îx»ÚB×LzÞ¼wÑT´v[~u<ðbBF^IuÓ3&kЦ�í G÷v%ÄÙ ØëWÓ6Âb>kª.ÉËH¸xü+ËÝZ*¼× üÞÞ]4qY%u=S{ºï¹Èäß ++jŸv2YÃìñI`{õú5Ä{ó>q‰á…^×ä8{˜Åì|Z[Qø[rä9_º½©žº’¬8tÍ6ükV_4hœD²Õ×Ç/Ä¥Ý.ªªoéd �Ž�OLNMM'¯—îñé驩ɉñ±Ñ¡fgK}UÑí´¸ �Ç¿¶"ë¡aλfÜ‹~áúûíi>!?]ÏÌ-~TÿôYOÿàð({ìåøÄÄÄ$'SË |”9Æìïyö´þQqnæõŸB|höûõ58ðhÞ5ƒÿ> ÑbX…­:dË#ß„F&ÝÌ+®ªkjïbö³^ �ŒŒ²Ùì±zÁêgvµ7ÕUçÝLŠ øæˆ%Yg«V Íùœ¿'›ù €¦©ëíµu>ȈN¾™÷ ²¦±¥ãy³¯ŸÅ|2´‚@çY¬þ>fÏóŽ–ÆšÊy7“£�'œm÷ꩃ–ÍûÌÊÀ Å¤Tµ Íìݼ‚ÎG'eݹ_ú¨¶±¹µ£³«»§·— å?ËçxooOwWgGkscí£Òûw²’¢Ïy¹Ù›j©*Hƒ–�ûÏ#ƒÆ)ˆÁÈ*n#í9à@ó +fD%¦gç•UÕÔ5þÝÜÒÚÖÖÞÞÞ±¢€mm­-Í7ÖÕT•åg§'F1‚½hö�¶)ÊbDP‚¼Ã„›­§”aûNcË/i^�aWãS²ròÿø³üáãê'µuõõ �Ëtº¾¾®öIõã‡åþ‘Ÿ“•5,Ћö¥¥ñÎí9)Îbò´ŒÓ4èµó”WV47Ï“gŒ¾~#3ûnAaQqIiYyEEEåŠ +”—•–ÜÍμq=údz'=ÝL]YÌ~eydpÓÀË!ŽUPÑØelqÈÅÃ78ìrtBrjæ­ìÛwsóò + +î­( @~^îÝÛÙ·2S“¢/‡ûz¸²0Þ¥¡¢€/Æ-ƒ›æ‰•�´�dsªãQOÿÓ¡¯^‹OLJù%5=##$kÙ�Ngd¤§þ’’”íêÅÐÓþžG©æä�&#!Š‚gù�Œ;O¤�(FFAY�d´ÏÚÁù˜§_à¡ç/]‰ˆº¿ÂÄÅÅÆ\‹Š¸ré|è�~žÇœ¬÷‘Ô•d0¢BÈg93OM+OPÓÖ76³qp¢{xù� +ú>älhXx8ƒq~Ea0ÂÃÃBφ|tÊÏ˃îä`cf¬¯­F�ÇJp` Írvž0M¯DÔ š˜YÛq¦¹{xzyûøúùpsrÉ™9éïçëãíåéáNs>bomfbHÒ *á¥ç` Êæh"âR¸-ÊÛ4u ÈûXSvtrqu£ÑéGá[r¸ét𛫋“ãáCTëûȺšÛ”·à¤ÄE>›¥!P›1X9E`ÓÙeH¦˜š[XÙ´¥RíìììWpœJµ=hceanJ!îÒ.E9,f³0 +ñqØ <hQqIüq»¦¶®ž�Ѳ± …²—›}KÎÌI +ÅƼÇÈ@OW[s;‘°/#).ŠÏÅ"0˜½kHdÃâä ª[ÕÔ5whëè�Hºœì\Và³$’ŽŽöMuµ­ªEyr¡�Ð;¶ŒCƒÞµÏH”°¨FJ‡WPT"(«¨ª‰[W"QUUE™ ¤¨€ÇÉHaÄD…QHÄçÐ;¶ ¢Á…lhQ1 I)¬Œ,N�—‡£°Ìp�ãñr8Y¬”¤„˜¨šã‚'¹l¶mÀ&ˆÜ„B �¸„#)))µâ€"Œ„„8P £Q›�‚°kñ†Íµ ²A8Ð ¡ÑÂÂ"""¢«PFX�*ÄâºþlÖÆÅ "H$r'¨®Š!‚\ÖÒ\³6t>_Å€r è¿9¬¥º¸6ñV;PU˜µd×wÈu4Œd; Ùu4”¸ŠÚ[F&0ÚJᇠendstream endobj 95 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <>stream +H‰|•tTÅÇÿóÍÜ¥I �Ð2÷îÒI H“šôH¤J‰´  ¡z| õ¡B€Aš<”¢€�Ѓ  �„”…'=iaß·›= +GÏûΙöÍ�¹»ÿ™ûû'Ž7%‘ +2ªnŠb+—AƒãcƵYЯ¥c‡�œ8l¦Ñªà“ØæÆ�r;é·Å@À3~¾a,'Š–º÷©Ÿ8Á;î Œ=8uP‹ãqùø˜ Eó‘Ó¹²FÅÄ-—‘z–Çë#2aô{‰®†DßuÏC¥é ž[eÔçÌ΢Vä`˜p‘ *NÅ” )“�á„?£kdD$¯ÇS*Zø(^G[kÜs²¾íÙÝáiX�JºïPÖ£Ÿc0ŸÿS1\Œ?ˆKN‘Ô›úÐvÚG(�²è&Ý"—,#ýe�¬$kÉ0ÙP6‘íd¤ì%?�³ä|¹@.’kåçr‡<(ÉòŒ¨âÕxµP-QŸ© *U}©ö©ýê;•¥¨Çº„ö×ÁÚ®Ct/=P�Ðcôûzž^£¿Ò{õ1�®Õ¹úª¾«k—h›�Ì–f;³«ÙËìcö3û›SÌíænóˆyÊ4ŸY¥¬²VU«®ÕÌ£V„W­D+ÙJ}A­rµj{ÔŠ²÷³²Ïðªåë¨ð‡ZCþÛ7%sµ“ùéæï5&ì¦ðæï:æèfÎ,Îb:¯ÄcÎÜ{ÄìÝŽgxŠB¦ï.fæi¦­Û–±œåû•ÎýÑKÑ»|ã.xHº›âw&úEOãq˜÷£Ù3Ø/ưcl`ÏHb×p{Æ$v ·g°kLeš&³gLc‚odߘáqŽûxˆƒâž¸/ˆ‡âMÑžJ“•¡²äK~äOd­È!:SESjJÍ©…è :RK&ò`BCi §X!ÚQ��DšN3h&Í¢Ù4Gt4—hͧZKëé_‡¶1ÇwÐNÑZ´‘¢›(#Ê2£ŽÑq:A'é�¾Â�2è"]¢Ë”IYn’~ÌúÈ ’Õe Y“©_[†ànʦò ÙL´ÝE%¢e²œÆð!É52…]`ná¶ðWNÃW]U× ?Ã_åF Ê3Ê©ÿªßØ2E€º­®#ÕR7ŒòF•oT4*•�`Ã2´aª›â-ÑSô} »á0ª¨luŨjT3ª5�F-ÑKôV9Fmã5£žè'ÞVꞺo„uŒºF£¾ú]µQm�We:i2Éb/ÛÏnö=�¥sj«xJKiÐ=uKÜwÄ]QÀ4ޢGïÒÚ(ú‹n’³_=T_P%ªLÁ4’â�õˆÒéŒx,žÈT¹•îÐ]q]Ü7Å-ªGaÔˆÓrZA+ÿGu•FEudáwoݪF@¤b‰¬*‚b7ÍN£ ¨ î 1* h´d"šÑ˜˜‡¸â‚.(.¨¨QÜEE‰k�Ï8s3j4šèdŒ‘îÇÔÉ™ùÑuÎ{}êÞû¾ûUÝïÃuø+þ_àoìM9 |X'–Ã&°\–'gBK`Vú�^á4,â¡ÜÂ#y�æ1`†a|‰¿£¨ÊÙ«0`«ØjËãx<©‰ìä •š¹Â�'p«œö÷é²ò˜®ÐUºF_ÈÉñ¥P*õ£þâ¬8'΋†×Zà_Rü Å¥@`t88A;úš®C/0Ñ-º `�Hˆgp¡ô-DC Ý�Xˆ£Fp ès>¬â¡RÉ^±&fg¦²fR°'…¥$`‹Ær\O:X¥°‚œ¨9ÃJX…®°Ö`”ÁZXG.°6àü˜9C9sÅŽ¬?l„M¬*`3l�­°�\¡¶ÃØ)¥nì‚ݰ³á3Ø û¨=TÃ~8™ bíñM8Ì6Áö)…cPÇá¹ÁI¨…SpÃqœ¡PÇbp#n­PgÉ�ôd`kàœ‡Q.6ŠÍb‹Ø*¶Áh›Dy’>‡‹TMûÙF¸—)®ÀUÜ@&2#"CBÎö²}‡ñp ¾ t�"ÈB‘EÑC±‡¯°‰¼È[j£ÃtDNüxVF l-YÙ:J¤Þ JG P'-A;tF4¢æàœŠ…¸ —c)®À�X…»p7îÁÏð ÂÃx�â1¬ÁãX‡õxÏáy©â¾Æëx¿Á›x oã·L: FŒ3Át̉µcnRß¹KÍ2�Íg ØB¶žm� +¥’mg;ØNV…sX?ö1+…´OÞïï‰i¢c .Á¥ø>ÓÅ ñ¾ø«˜%fÒ1ªá�øcþŸÒq:Áæ¿ÐIžÈ3xo>ˆäÏøsþoªå}xO¦Stš¿âMÜÎt†êÄ¢#O᩼ÕÓY®òf¡(�£ó‚‚§ó4>€xÞW|"抿iÚ™�ÅâÓõ|QÌkQÒ—Ä|©Ú•±P,Pö‹Eb±rY”ˆ%b©X&gM©X!VjúZ¬eŠ +è¾ðkPÎâ^vEÙÄÎ+?*»Åš³Å‡â#1GAmpsÍÈ1Í;ùéýôAri±ì�Y�½7—#§3Õi£‹)c›ïñÜ$ý�Iú%Hø["‚ä/Òlò2zê ÒÑÅâgt�Ðù‚Ùevƒíup€¿0zz€\¼Ì&6ãҩʧ;±fý¢=·Á³ Ö¦ OLIÌÈì™çVÈjЍ‹?H�ìÖÛ¡žÎ­,:{í­Uª7¸|kqÑÑ¿¨eë““YAA‡Á“Þ21­dG9+‘•4¨—e´ý:l·æØnj2£ùž$pŽôyR•y¸+f“¢wWdÑän0›"õîZUàtý*´W›n¬¹— C"ß7<ÍŠÕr2d«•êau¡º¥º4Y­±óA·Æ–n* Œ/ÿ‘ï2µiQJlaËþéÍûØ/²¾®Ú~Eÿ#o I¡k·X¡èüX@ Š3ÑgÂ°ä¬ §7Üû$v0ôh®=Þ4R=½Ì6á–%/ñò%YÖQ®Â¥�ðñ)ì½âÄÅ­Ùò+*Ôï�úN´ÚQzSE +ý®¿–½­ø(™Ð FOäç¡÷ÔšhÐG`p|~jRá¶%� ø’Õvõ¹Zª0°ö䢿&ç²€ìÔ©Â9ò˜z·ú�z¿ª+}o3Æ +žàñÐ�oÉ™Õüƒ(ñj¯t”ýˆ0š;k ñóü£!à�YW`\#L‚2Õ¦nûY--‡­U;öîß~xwî>cwª¹ê õž:éŒ<¨6ª��þ૾�9r›ŸÐ,6Bé¢ô’ ÕØ§¡ÔB@]Û£Ùä‹F½g?»XÜ …–‘¸`@Å袢û60bŽ›s|bLò‹kE²ÞŠsÎJ'Ö [<ÒÔ-0i´Å29£ jRÚà°±‰1 ÝÆÍõ8¢¿Z<*úÝ 7ÅŽ7'ø·r$½ùŸ¬AÖÓIVã­% ´D¶6U&îÒÚsíHdM +¹»ò¢ú#„?_S�UàÛÎ`}ûíüiåö°¢�¾»ð¥:uŒ9ciˆÁ°dIý. Ï12ö=Û ñ´ Qÿ—"ȬE‡#……ï王ùæ“ ê}Ð×ÕÿæøÊ!f[­°m[åÌèaùÏ®^}tëÎÄ»Sµ˜I*§3U‘Þz@+½åbôÔ +–(¾æ§NÖ-3Ê4Æ’_çVd½Û°”WAp+ܯŸ[ªéS0ë×:[…eJ¿¼”Ž¡úÆŽÁÙ9/'wí:×gb@à�œɬ§ªýtJX`/�SIɾ½qq7^œ\“›Ú+.}Ög.YÙ½{fΰ 7okƬ‘£œÉ`¶ôí[¶±¡xxD’·ÁÏ-5uB¿dƒ!gúÐ)–�“—7zШÊe�ä¡‹Ö�¶3&kypÍF¿¶³Ü,Õ¶´ôÉSÒ2Þ…¡á™Žrï‘a=FxSuZ¾-=ÝV >qlc³Å€�´8›Öoé³p†Œ-�Y[´¶³�ÂßqT I2gñ¼¦ÅÑ6[pKlÉ×ö…HŸsIâÞµuŸ÷ÿì òò¶‚VãëxV°´Þð*$Òñåèðž™P«gI¥ƒJ6÷æ¸ò_Ú«5¸ªê +¯sÎ>çÜðH“&áÜäI0I!ÈB…@"Xj´ìäª0-3ZÄ +ÖZùQEal©Ö^§”hÇH !äQHJy­Žp¡’ð0!«ßÚ÷ž4„ Aí�ùæÛçܽ÷YkïµÖþöˆ€ß?ÝÌl*—k”–/0’`äø�Sî¾kͲ¦ò‰ø°™^d¤æÞ‰Ñ|ÄѯðíQ¢•åíÝÀ 3²¡Ùóû{µ)™£C×qg»?üÞþ{Ò»ÏÜ7×ÿhOè©g’b§ÆLžôÉĦþæ¥53> -}¾Gç¾F—7rSûvëšØôÒi‹Ö KL¾ôâÐÔA·Ü’Ü;oᔥ¯åħèû#�;ð÷Ï–ÄåÖ}ú¶ôZ¯½Ÿ¨=°©ÁßøQ\†/ýb€è7ýÊ¢¸ þ5ã2ZßCÝ|'úÊŒÂûµ|6C´Vi£]D“T»aZç¤ÑL3�ž3+h;�¥òh(þÿ9ú>ŽçQàu85—+SDÕÀ|à»@>�<”÷Hý,“9ø6ÁŸ5ÛÖbWKäÑ0Ø2sŽÅºÝ©hü–ý4°N™°k¤±‡¹WËÜv1-vC\©×>‰ `±°:O¦:Œy‰ŠìM”欤 {0Ì4¾‚uÉnÃ~Lœ3ĬW1æ]¯Çé^ìG´Ë°žÉø¿+�‰o¿,qÚ¼Vø®/'²>òl10s-—øÔ±UGCdÝeï� wÅ:%›AºM`ç!Žò( ßœÅý(Æ<)ãcŠh€þö¢™ÿC†Þ#ÁzZêí—‡È^è}¨�ÄÝ +T/ÈÞ>"}d-0ÿr³ˆ~ÉC>-1,q¤ã1#ñâH¼i¢ø¢}BÌKÜaì:ÌSä}ܰÇóƒD��ò¢†ÍàDW²ÀÐ$WP¥ŽFûTð¼Û<ŽïTSWÉ5Ä;I\ª÷É/9çH.HþcM¿ž »ç�K€R`VäÝm—´´Qìj«Ÿ³ëxx(S l„.oÀéÐø<w»ÚöƦ¨í¿¦Eük܃1Çôš¢V9*_¬Ko�C~"¯e%Ÿt­AI�ѹ�|—}–}ÔcÆR¼ÔÉk�—Ègbߢ·u¦’úÇ„©ÄM£oÏ$&$¾½º&µ s:žÐG¾%}ä;‘šÆ5^MCŸbSè#ûlKýÂ÷í?ãûòÏX'¿Ý‘Æ G;«g ’Ku”§’i¬ÎýYT`ΡÇÕ\] 6uN¢éÿAÞØÜã]RN)å£v,Þ•ÃÏW¨—]Ž�@ÂÁVÝ>I‰îxò»cðß~Ä(æ�_©Ø‹õJT»°—ðÓÝF½ÜÌ裖t'Ûå[Îi®Uç±6XÉ/çuÔsD“Ĺķ± +g‡+×çWT¿ÞŽ~í`Ýñ_õîš1—8óÚbÙwY·›åŽ5”Û¡˜r}5Tز-gºÔ0aɱ±—“W3¿Ýöûo¼ó¾ÿíÏ{5K¾èÚ =#µ§-¾îR—P“n–[¶Í“”¢kÚ§Ô œe%S?ýÜ@÷èTDÙ8#}6D9ä1©Ï=ƒzé±òî,Æ?ËÓ­¾œ®Ÿ÷ш–g¤>OR¬yš Ñmú¼¤Ö‰†jGÏžø¶™Eù`”?óù¡ ÿH<ÇK-�¦¹e»ë3 µ²5©^z`ˆ¯š† Î_ÓïŽÖüö1téMõ¿fü©o6þúܬ-Z±èkѸ_ͼ©}ýPŸ£:çÛbïŒÖge‹vœì={ïšÏõÿ+óί;^î2ú|в¾×ànq#¾ª Ý w‘ëq³¶l'·FË÷Í}= {Ö÷ Ü Z³§³nÄž»w$¥ï¢óÊ(Á~�ÆùÞ¦‘îS4²ƒšw9Q¿ÖêºXFÙ1”íƒV‘µ÷…¹¶Sׯ¹6f¥®›Ià¤NÕ:OÞýUjŒÖ�Å”â3(u8Eß+¸.&Èu�¾ƒvïdýÃÐ"« SQÛ¼û§¹3軌ÜK wFŠÞvÇòaß|Üöó1w6qïæ£îøˆÕ�wн¢Ej-ˆš¤5 ´�ùî`­ý–Dô�œIR›µnó4ØWÍ �ä.ˆh2}–”G´lXÖf½ý¶uPú‡4÷Œyúê)ч¢ç°–~uó®Æ\›Áâz ¥€sìéä÷u� Éè#q¾~ÄQ¢hGÑxàLO¯yÜ<¯hÌØˆšÅ�(¼ñâ“øc£Uv)­2žàw€rc;�7*ȱ>âcj_V?೨%�­Eüo+È;íÁ\n�á}Ö\þP½‰ÿ–ðE«Zñ~n´Vóy+—·ÚY|Àúœÿc}‚ûžÅ˜‹x²Í[Ô]ü¡õwÞm:¼ÓœÇ{ÌÞ|Ä|‘wažnÖqµê·�¿ðg>¿ëø¸Ò.à£ö8Þ¥²ø²Õ„ø˜Šœü7Ø…”cÅq•ÙÀÛ¬:~Ëlä�­Ûù y†÷•*À—ænRCù• åw�f!o±âù_êUÔ�ŸY—ù¸u‘«ìò)ë¿emæƒêWÁ×ÖZø´–R­ÑüPe�‚O+¸Éb®³vr=ü½¤Fé¹®˜Ô´Ú +cüL®G,–[Eü¹UÀ{�©|Ò®ãíÐT_¨x>£Âç">a/ç½ÖcxžÂMv€/ª®”nÏÅY±€Ë©ÕOçŸèÑKQmîiñæØÃýAt¾¾ ¢úÖ]È51©”ƒ¸˜sxjD�ð +ûK¨§ÎÀWN“p?¬Œ ñ ã§gäS÷‘aÖSœ“K=ìrèàËæ!¦J/ø‚šHw¨zŠWàoO>êôã÷pOs­u|¹å8ù˜c7â±Ú­†là¿ì—pTÕÇÏ{÷¾÷v7!'Äh˜ð�Jió’ð#I*ùaù!ÊRÊ„j6É&Y’°»Á®– U:£ãX§¶£m¥NµÓÚŽ�–¢U†Ê�Ö¥¡üʯ¡’A)©’‘Àé÷¾Ý Ó ¥8¶ý£/™OÞ¹'÷ž{îÏsnŠxß�”"§â¾ý%ÞK9ü‘Lå^óÜóßæsÆK¼Ãˆbý¾>ì¡ûx·’�”ldòæZ~ßÌà×Ðÿqñ8_À~Þ¡ÀÏ{~ÃoËù°9u‹É2Þà}â9~Êx†O7rŸ|—�™oòay~îæ3æaî1_ÐW`í×ðI©ñ ìõ�²’·™òY»¬å|ÞXÆ'ä$~Û8ίcý{Ñ_—¾{¢‘w¿çýÆßx§ñ<´àÿŸ±o%Î�E8äÜgÕq·1{~¿§ââøXË[Å;ü¾ü<ùd?o5(@Å8³øMýî«p>¼äWˆqà~ç[í”k:UN¢r0YÌ凯ÑD}Rüjm/ﱫ`eikž©ÚXOø¾#+Ž+Ô]<Ö]äWx¢àWàP\Nä WÅÓ…zÀ{Œü¾LP—AµBÝùq0þ8Ç §pbÀx6Ó‹ +ïnØ4Až#¿˜8;WÅúúN‚Oo8T«Øò¯ð¨1o”Ïz1nï!ôuجž×áy÷ð¸.ûœèØîµÖÉ»A[«ð=¡�õ—Yq\q­yOšL~ErX~–�«¨Zq­qûvaNAÒa´I3ã2¨VŒ¸·l­´�ä�U‹wI-•{öà�²{¸‘֙/bnnpxqR1¼^/£ÝËTne‘ÄõÙB�y¶h>ìƒg�9äW˜wƒ'Á΄|7|ž‡œ)þ-—’òåoiб +q¼–J†Ñ{(ÉXÌlxø´u”�EˆÉ¯!_j£Û‘»M7ÎÐLŒ#ÓØ€µ~÷ÙišŽ»Pš7S©±ž¦š^J3§P™iP¥ÜƒœaîÎ~Ê6öó€|вÐïdk2M“a¯ž2EâþzZ ËH3⽡ü¨Ó:Å8ãhŠøH_è94FV öá ‰»ä¼ü"üÈ }•‰fä�¯Ó#�Æ;åÜÁ]x;<‹ø†·¡XG¢ cø•)ЮPÄs–ÓS*îñ‰âA*DìòéÛa6ô?ÆëGq—b,‚ФAIb¥!ö•àŽ+â.Ü=ûåc´TÔs·ð^ù÷‰‹Èç×ÀÇø”Ågqâ~î?–_áW‘ç;à}Øc!o6^ásÈ-3’�/Œ¡ Ÿ´û(]T ÏÚ©oŠ£Õùzh´Ö¢å\Aá0Èÿ*ÅwùIñ4Uˆlòè„ïò(�W#Fs�w0‰»’÷’°Ž’a�æWä6Þã‹1[m”$R­KMbˆŠå—è.ù(î¤ +Z*×P�8EóeÕCèˆá«)]û÷hghŠÖ‹¸9�{õuT‚9OÓK)C‹’OÜLµ'¿wÄs9ÔËÒúxHÿ!r�§iŽÞÌïâ<ôk?¡QÚ�ȧ�Dyôˆ±Ú%þµ>�tm.%iÝT¬ÿœJ´!ôãç¿ü3Ú9´Ñ@ú\…¾ú�ôói=ñ&ú$ºMû&ü;‹µ>˧Ä*Ô¥~éÛùˆŽ\SßÁGå6š#—‚|¾€5@¬™‹7¨_´Ð�²…²°wòUÎ�<ñm'÷^«ö:öÞÈ¥^ÅûbÞ æíÐ=G:r„´MØeµ ·náA%ËMxߢ[ KCwF”"¦ÿ‰>‡¤ÅÈMô>ä)”#‹(M;—@ºK£E.yå ¬é9Ò¤kð!�·y‡g9[üÿOQy¿'‡pRøì÷‹¯bϦi¢þÕã�•‰ó˜@ÿ¥Ë™dH�Ì©ˆëe°·9ÏBú,l•È?P•±uÒ$ô›".âü´b¯ôâ^éÄ>¹•n‘ç©Bvcÿí£\Ø/8ó·Qªx�>ƒ~ �­8Ÿ�T%ï  j>ÐÎ/j±/“©Dù ÊÉôdÓÜ_E‰T3çòÖ¿‡V +¾?ôÖë`ï§f0ÎÖ8xÙÅù{¼Â>fcSŽÀF—ÿ2‘UE{)…¶�¥JWüH§œL�_ÖïqYÐM(i‰z7щ„lBLÈ}]»55éE³�Úƒ Y£<1¬×)E”%dý¼„,!Dz ù§ Ù¢¿Šý•¡¦P4to°ÁnDv}{G,jjŽÚóÛÛÚ£±Ž í�u´7…ͱûÎhƒ�_\œŸ‹?3òìY­­¶S;b‡ƒ‘`xu°!ïã†å�H t¡ÖÖàò΂ü‚ÛEì€ ‚+ỽñêÝÜÓªo¶Wbv]Ö›B‘h0 7Cmv}0 ໢3Š4„꣡ö¶HÞ’Ù‹ü‹—e_Ñkny{kÃõ©ÿWÎS%…¨ DÁ½¤²Aå¤zj§ŠQØ©Õ ­Mó¡kQè;ÐÂ&¿#µ£F­:P/F9Ð߉:Ê^>ã7ŸrÒ Êƒvµâ×¾ÂvÄ)ñ â»Úñ&oÄËÑO„ZõBŽ¥àø[ñŸ�cEùu¼i@�•ø†QÛ†�ÆO4‚{  a6š!+k1|뜖Êß&§×¨ãM|C°¯fOiÔLÆË+¨Ómu”55çÊ“F¹„fÓ"ø±˜–QöÈãÃü•£~+ZÙéµ²ÙõµýOÖþX)¿G¹Žðó�¢y endstream endobj 207 0 obj <> endobj 208 0 obj <> endobj 211 0 obj <>stream +H‰|UkPYî&tGG6»CÛ “¸ÝQÆ×øBž*à³T5‚‚‹ J“Bx%º#DN¹Jx* +å*#¸ ”ê®2 ¼Gf| ¢‰3¢2.»Öìéxqk;lMÕþÚêªS÷œÛ÷ûÎwúÜÓ8æì„á8>="xÛYÔ‚uòXeÊ¢�5V!•e¨5ŠƒjiHJ\ª*-U%×(âK×$'K'!ÔR•B­PiÁÍ<ª<^ªTKJM‚B%•ó›”üy•"^ªQÉãåª$iªcçÜýÿ‡JªL‘òXÒˆ¥Ã“iø Z*O‰_£¤N²Ä¥NѨ” +õâ%d;2ÒÒeÒxÅ~ ÃùsÁ°Y6ÖaØZ'l†;aa8î„Éœ°]ž‡aŸðuÅ6c[05v{‰GâwœV8e:õ ö +j�§;ÏuNun fû‰6âߤ’¼²£ �kÇyûY» À™Ë·o�È'¡uÐh%ü‰€QIÑMÎÄIá¹gr +ï“Ü Ú±BO$jªÒ‚±‡3Ý8Ã]¤Q.Ò†ƒ»ÁÚN¤…\¡è6ÿRB? >(Hw­áº¨\ $Ð÷PÁSéí~Ä,e|ð#~$!�¨ì§{a'A�–47�nœb&OÇŸŽ+ÛÛ‹"ÝEc<ÔÀ}¨OÇï[á‘MpßîGð³ÂÚCð§&2·'c$}$^¹/!aŸ¹h­¡'Q ] êq­·�ü•Å-wûⲩ©Y !±ãhÞ–múCqÌÙmĹºk¥­’·ÅëâX£…z„¢©bªm}û†ŸnÔ5\`ŠH*ëä"üiªíˆÉ˜„‰ÍŽ‹ “ìQ\¸ý +ðŠ7&VTjTh¹ AHJw²Â•³Ý¨¶ÃDzåVÚ 0ÀŸÃæúý¹H‚d ɬ nûL<á)ö™¢M‰ÌOPG—Y̧™¾Ê[M�’WíË>g©6$رzIè®æ.=c:m*.‹¤ÆAÄ^¸¹#´A•˜%Y°nœÇ;Ÿ€à›Ë†Ü*öl?aQÇ”ì” ¯ÙCóѼ×ó`NÏõrËyVaì‡À»àqo�âg.´tá)si¥ø…Xä…fú"!šƒæ¼˜óÜ,/­e²îÙ‰ +C˜Ä{UL3±…w鮓WŸ¼�¼­ö‘gE'�bfõ�}À�îÚðj¬Ôcn)§£©±¼µ„‰lÔÆ´øK�@º-Câç³Áå‡WZ/°æ‰Bþ°4<ªòls8˜8tµ;»CÒÕ_Úr�½Ö|®b¨R�¿5_5×3ž¨–Î2é�e12]´2B²p÷£×,5Î�ß�t-ßUΜÈ-ÌÉ‹ +ª´ÜŠ!þ›àC60ØCn6h%+ +K¾´0ß”·6Þ–<½Ä¢Z4 !À£qSb²1ë“–uøp¶jŠ þæMŠÐ÷<Š.ý€»Þ|¾�_7Nç=¡Rã-v:I£N>xN][®úÒq¶V[�Ȉ|'ÏÀqžÙ*{4íó!Ú +›ÈÖv@YÄ¿H¤„‡ÝÄLÍBÙz½6WÏ·³Ý«ÒÚ£);òµGó)üW_ÓIÔ‡Ž²Ì\v¢˜i+kmêàulâu|eƒf!¬ðh �í‰Q3&’j=6L‘Eq…±Qbц^î£^¾iàÚ�¨åŽÒHGëµ>À  ¿6úØЦ­Pn&w_¼•Ú-ò—ç°æz¿ES·'l=Àòi<Î{J’æsÔf±5†¶•3ÔXoÅ­¯;%£×—}Ž«‡E6we²¦b“¥D,B:^µçSCúŸLT×�›ŠyÑ¥f Óki¹vGb9uÜtŠ¥Jž +©.óÑ?%[#c7fóHêbþkb%Y´§0z;�ämìqè¾9âg‚«çéôº¶œ›öv>»·¯Ùÿ+6¬:¥²Q|å⥭õ™¹g˜sÝDyÚ¾Òh‰GXhж¦ÝÖd¶G]£‘‹ã&…î�©¬8Ĉ�Æx }.åÆh4euð¨B¸ýÔ¾šCŒºêrN“¤î—'+ؼ^"ß Ï×H¢õu�,”‚kr–‹!#ðí+~(VÚeÔ_*ù‹s&tÄ0ùô5Pq£¬ÝÒÁGËöÒÝߣL÷a<9áCn@y™Ûsv�þ4Ÿ4´e_ÏèX ÇÜ×��¨ sgæNƒ#~¤=§=û¯¡pÜ]”Ä×Ò·‚úñ'Vˆä[2È�ó¢Õ‡—ú^Ö�?v´Œù0Ýj_/<{ Ò"“Gé“ìž8Mx°X»1¸ÂW(ʵp: ,¶X,Õí·<°™ªØ½.S \¦õ}d›f;áòH˜Îÿ•þ#À *õ endstream endobj 206 0 obj <> endobj 212 0 obj <>stream +H‰|TiTW®¢©jˆž6R)‚]ÚÕeðAPÔˆTYgtº…FÖ¦YÜ"hP07�A"F6‘E¶Ž0YZ¢&Ã9Îä>23ù3¿æ¼sî¹ë÷îòîÃ1}= Çq#ßÞû|?w QD¯Ù)›×²ƒs&úÜòÅ4Z‡²?|øàI@ãøyéýå‹ÝŒ0=~í{D© WI×9:ÚXÎS»ê`)µ±¶¶^ vÒ/d1!r©Ï‘x•<*^꣌�Q«ä2+é‘‘Òˆx©R/W&Î+wñ¨Á2©"^*W¨ÂåJi0o SðñJ¹LªRËäQÁÊÃÒ˜yËÿˆ‡þÏURE´”Ç’úF+æ%¯Œ—GËÖò(1 ·„Æ$D«” +y¼ÕZ7Ÿ}GbåÒ R™ü†áüÁô1l©!fŠa+Ø: ³Ã0 Û†aÛ1Ì ÃÜql—>æ#À‚x¾¯Ø.Ì «ÅõðUxÞ£GéEê½à‚ÓN»þ7úÓÄÇ„5qŠxE2d6Ù#4† „U±ß®0 3¬7ü÷Gî]OÏlàÞ5à<]Ù ÈÔçÒg½æÒIÈF­4Ú ¹L“HŠÓ0/Ì�ΑxØŒx™äéyÍK"ô@”v-Ú`Uø$áUÜ&xA.ýXE¼'“Ñ*±(—¾¼‡ˆ'ä<ÿ¦m=YÀ»èÚÉð!¼x›a¶À{/ð–^¯­½FâD)=\y^9È›]M#“5h1ŠfÑá¬WhP ¬ÄA¨3ˆÐ +öÌ—´®ÆÙ!§ƒ¦ë6ú¿gpmþiˆ]KäºF3“Œ eŒª‚ã±YÉV’êE¦[®î¢�È"E™Zî’nBÀ4Ö¢Ú,ac+Àdü,O{½EÒ­1ò’[»ˆ’Ûõ·Û˜we»ÝÙŒÕ[�²qÛaâ+¥ôÃ·Ý ë7‚ñIw5}¿œN,ëTi°ѽ×í|²1ŸÍR3?–Þky&öDŸ¸º+• +I‘Qx«¡¨‘)ßï¿Ù)ƒ r¯'©é±Q™µ†õÕ„» ‚Ùí]’¯œ/\{a` ϛŠ·Ò\u½Öœ…¥}?gKxCr"dÐYB°…¸‚Ûù· +«—e“jE†B!FQ ‰V÷€Ã8ÌN +8×Y �:É`ÔEd—æT1`ܼÇAÃÚm÷ÝàåW˜+IØA$Ýy’ÔÏÀg3o€ n(e‹C/2ñ'Ôêãl l$@Cò3ƒÖn°Ä+Æ¡ˆ‡¶›µ �%dœ�cS]"|ý <<ö›£OÄÈY‡0`�=àGéô ]|!‘’t2ïWí HŠJrŠ4Èrî½6høW5›Ÿsù› ’GÅõå�™‘Ç>VVž[†ûƒoá¬-|Û _-Dwç •Ü$ÑÊWÛÉÝï0ªšÚùâ_&!7…†�ß 1ØâTÆf ©¡«o¶5‰G<‡‘"í\WúÜñPH4é5¹Qäí(¶u‚å’¬NzC`kw6û´¦aðºdBÙ$ß$Þ´IB i¸ûôð_¯ƒ¡>ÉìÖ »]âæ{uZ‰(õ98=ƒúgxÍ8\™¼M¥¯eÜÒ”�ëËí½ÝPoÐù´î`&'GÀÐ2´Ìah <·îÆ*%ÙäÉÍ‘{Ê…ÿ11àë¨ôur–Øq¥ôë{$8‘žzæ4+Sí�öb¶µŒ¼~ÜýœÎ?•ðèâŸ~ ×N q› œ@á¿ðGgí SùÍž˜"û œ(è¡»ÁŸ ¦/×\¬¹pÏ ‹¼ »š÷çnäg"JÕrµQIF•¯©^>î›âÇ  –ÿGpýç Ø4?:y¬œ¥ª®õTï%•_�ƒäÈŒ?a(ÌÐbØ;Ú™Ÿ_Æ'æ�ÖÇ}ß‹Žs‹t‚Á,ú̃Æô§ |ú¾¢£ƒíxZ1zbÀÃÿ¾§IÒäeSŠ–2nži§ýØqú\QEN-žSæÈ6ƒE;ÍÍÐnÅaMN‚D”’©…³ ÐòÀΙ3¡Q(à¶vûÍž[Â/5œ…(�OÒ~w)"ÏgÜ`Æž—Ô?d+îÔµ‹Ÿ$Ô*“T†z®g\÷¥}ÌŽ{Ò9y¥ÙÕÌÛŽƒ6V¦ÑñYç’YQjêW7‘dÔ<Q“Ôÿ/ÄWö'w1`;4õþï&D>`­*CîtˆÞmzÝ^›tòº„ª-æ;9t5*0ß�AŸÚ9›Zöì=« ¯ óéÿ'›={ ‹eQSæ”[â¬}’Q÷7*´Æ�Æ׊D$zEPUQ¶1öÉÎjòȰr4Zg +c&kHˆå/JLéŠH„ÌvuÝ�€à1ê8çhœV®®¹/wá»°d±Ûûh\¨¤Ð›¸^ñèJ-óËE—P6UˆöhÌ<�¡˜ªwmpû¹·±¢ú&ÿJ©ãçw_�MÕŸR§¦Ÿ’„œ õdÈo¶üøÕ·jV´/µ�ÃúðjþsøÃK:EñU ó¹K/èÏ<A]yÊÉklaq)~ÿeÙ¬âWa5²xcæ]Í¿TÄŠÔ©=°©Ì:ðê—pqLÀ…@"­ù6ëJ�x2Xdƒ>[�„È™O®†ÕC�ó¯Ü‘ï NDÈS<Û-õ°HÍj:èöóß�þ—†²ÿiâŽãxš¦WQÖ,½•±^r7Ã{PɒαÑÂܲEyØd�™PRĺ8gÁÒ‡ØJ[!´EJÉÒq¥­µÆUXEhi;åÁ¨ 0-™£Ù$¤Ü6ÉÆŒ‹1Ÿ#_Ø]²ýï‡×÷ýýüF<мY×KIf¹#Rš�I�eÀγ ¤±PŸ€&¯Óñ›ÄJ´¢ŒB# $Ä ,ŠWkvXÛÉ6«ÁpêÄ7\W`æȚ@ ]Ák ¾» X³â™™;ù©Í™®CßÜÖ�\ +G.öR#ÆÈ1R‚¾6nªy_ÞtSÍéÀNG¹d7I³9hÉAs¿Ÿ-Èq�žÀ€ŸL ÅS׉ÅX]9…’9˜ûƒ^šL&.O?ÇêŠ)t!ãbP휬Òèl†VÒd5­mÜnëㄲ±IÓF¹0|ʹ,*Çú÷iëåÿAàmyø]BŠ÷ô’S�tâB%a”�I1”Å÷)ë5zÒ�áéž{¢²ÿu¾·gØ­î…áÊïBa»dH¾}'z íz¼^„¼¢x„òTµGk>§¸÷�+"æÑxê?’¯idt¿¿�Ä72¡É9b}æíבðÓw‹«LÎ[(÷ ›öË%è®õ+vÓ·¼>Ÿå>û WzÈC“:ue� }½n…ûWÄø¼§«»ÏAÔÐV('†G]òøûÔµrÉËŽÛ|ík@¾*œ8'3Ŧ:¯ ÎÌ­.5M–ŒRÕ‘Ö³qùXôâlú’Åö5¾% +¶5 ©‰¢êª²O kÍÔmýùŽCòÃ-ºªƒš³¡vn{K‹‚õœp�Ý�¡-{öý‚BâZ_ÓùvR?ü]g‚ˆ]ø2D93"—ý¤«ƒPŸŒÍQ0ÒE$J,¹jÏjùYJï0`eð4{‚5Ëh³¸,=�äg­¶†P_xHÁ°�‰Qù‡~ÍÍÌLœ#=nP‰–1×xojZ.Ñq2Û ôq°÷Y­Èk÷t÷È{\ÝÎÓ¤©±å ½¹ÝÐzÊÐ~¯0ìM’ãs³ÉÕ¡ +áïÂblºl;ê8rºõ%7Öµ�ÛG·ÃD¡ÄF³fŠišŽÐ:BߥÅä°ö`~Þ™üm‹[™mŒ7ÿ9ö«Ø3²]Xý endstream endobj 90 0 obj <> endobj 91 0 obj <> endobj 139 0 obj [/ICCBased 77 0 R] endobj 111 0 obj <>stream +H‰ÜW[o›Ç}ç¯X @A>ðÓÞ/�±l· �¦®„&@Z4M[t(Jå¸þ÷=gfù}Ô¥i^S69ËÝÙ¹œ93{öݹ9ûöÜš/ÏÍìçY*e°Ö;ø”Œ³! Õ6Zš-æn3ûÞì±ïì�Ö|8Ìœ�nH1ÕV£ñøZ£÷9Ÿ~]>Ø“J\®Ôb\ÍCs©–ÌúzöâsvqeÍáʼúÁ¼™½éö¸dJmC^ JΉAêž1Hw„䓱ø»|°¢úlh6›†ëaއ™Óõîäú³sè\Œ“¿æ°Þ�ר!&‡(…L—òPÜq5È2Œz�¶2޶fþߪ*èÑþ˳½×‹Ï/pÎåöàsqþ—™7ŸaÏGüû9Ãýt¦¦Ágˬå2”˜ +½âO׳hóPKÄ÷Ýìž½¸œ=£[¼tÿ¢²Ë÷3§Ä5§Ô ÙUàÁVsy=ûqþr±Œf¾9¬ïäËöö~{³_üóòÑâT 2àÍå»ÙüÕâò#í+³ÙÌ¿_„`æ7zö§ØPnÅÌ?/ðÛÁlfevÛ·w ÏÌW؆ôÍ¿˜û«ÕîÍf¿z»ÛÌ»Í/ gaÇîævsw0÷‹Ä7f+¦ƒXðãüúv·¹Þì�îÍgœœÚ KÝŠÌïÝŽÏÛû«í·n¶wF Ü›Õíín»† ¥t×ÏŽ›w7ŸîÌÅb‰‹ÖWÈ…l……ÖÒ­Óíp¬vŸ6‡_�η¢ëæÝFíÞ?ñêrš×ðGÌ|òóŸK‚g¿Gn�_cn;¶GbÙmæ'Ø‹ø¶Žlh¿æoZ*÷w¢î†àyhÉ<ÙÛû£‚)ÜŒªÞ?R¿„`±Ëµé_>›ÇŽeå7¿ßH˜îú¥<ópÿÜ¥éz?]�¸7Y!|8°·õp8Gpg_ t$Ü™/êÞ§~‘œ×kä’?mVïvÛ=rÚo +GG�Mœ3^…Î1øˆæ#W}mÖ )‡óöº§u¢‡Ãõj·ÛÜ­’Î.×�2¸¨ÅÀ‚6Oùa…Rûi÷“¹yÉL<´ü¡ B#˜ÛÕ‘™>,$²ÿí•À+Ò+)¥×HÿM@¨{bkgÛP’Ak,9…‰ª}º«;¥ê³ËK;¦ÄiÆ£41ø5¢oõŬÁún·° Ûþáåæ°ý ‚–ˆoCŽ á~¾ ¡yõxè±vzÀŽÉL„ºþOûÅsYlnhÞÆCqµÙSñü+—\v� @¤~ÆA´Îh°æ� 7µõÿÒCO‚Ñ�|­Æc@ˆÑÕ)ŽÌ+Ú`ã‚Ö +j[?xôúÇŸëÙ2A;�¿dœˆqÒÐe˽ýûñ§~ô‘ÎIu¿¼/Øã9+ÊÞÏÞhŠOq� gp©Ç‘jKÖ�•zž¿N YbâgÔWöüµ/¯u£…Yöõ×òç·D8Î1äi Ååq„}ˆðÏ!ƒÍþ^#|m‹uâSŒ59Ûÿ7'I8Á�?â߃Y1Ú0Œs¿W�¯„ÿ7?Xøé} ¦ñöâOü—²Ž}Ø�¸%´½!aŽ_ê‡È�kîkyü�Ñê‡Ôlj¨˜<ÐÐõ HJÙt¬j8×ÁaböTC¡!M86þ†Œ‡0Z=Ч©=õ„—+ˆž¡-4ŠA^"`,s _¡HX3‚8s‚Íh˜  ¬à­1N-AÑÖc'ÆÄÖð‰Ê¯°déq%úNô‡A-Tô'PÉàÓiG‘‹.ÃbƘɋh�MòÆ¡†©P¤Å6xZ…^OÓP®pÊ …"Ôe¹B@—) É\62£ˆ™èëfåÉÒãÊnZ‰ILÒ2é2âÒJÿˆ™�ñKOÓ†4nf DMºÂžC9´z¨2T"2½à <»h/y‘; ‹;êÌ+}ìW£;&½éÒN¡kð"ÇØDNª({‘Ð%˜µÀA•Ù9/r I²rÙFÁ3�˜=Ž4P¬®©Ã¬ „~ûæ¤Òìd!E'Hòê½£ox�„ÜÔ{L<€'�Õ•,�CÈ™=ȉ'Óªñ +9öZO=‚Þ;m?aiŒmEÜÇÓ,è &Yɲå*Ne2‰’½È.¨U¨`¯;,Ó9X/9iâà_4GUóMô&Ý‘¨ q£�~F´éËEsWåmÄ¢á¨A$)G¥I¨ò ·šáˆ·Ÿ‰Ul™F=I6³‡“ð"“È1˞Ş(&/ÛüBfÌ<Í�~Ij„;†*N‚Â4¹Š/b€(ˆ:\5Ú Z+R¸¬“Jìu>áD$؇‰1Ëx"” mù”qJO<ÓK¤BH‹¦6a¡s±¬‹Ê»QÄó —‘‹–™ØŠGq=Z;RÓ‰�à@?uBÆÆiÏÓ˜sº#0�Å)aMÔT€ŽÜ¥vŽÔ6ÊÂz“cÇØªk‘ô€HI/,ýÓõõ‚�UÏU/›ÝÑòBG²äÑÜ�™Nˆ¬MÙ6%r�\áqÂ@LÌÕˆ ,x! … 2WˆâŽ)ˆN8Rð†TÔä&0BÆ;a²—zÁÌ·]TøJû-€¥Ó-8‘%¦¬†*Õ‹¸ ·’Ik�]Özi%Iž"™Pdá°¾ð"pZŽ-!UØFªcî}ÐrnM+Ü¡$ẨSወãK#&ÂJ’šê,ÙÙ4±XDk:å9TDpÚRyS* /Ì[y sVÙßëÀ,2 ì% +ÈdxB±$_È®éô”´G'§­…-‡¡Å˜ulR¹�epAÛšB#eÔAGI-¤mv `ʪ,-ñKz`ZÈRš�“@ž B�eß{nR™H'+.‹Ž¤éˆð�º ÛENbwj‚Ø¢d ™L�²µ¾ˆlT¹µYdág¶÷Rú —µá:ÙrÌà'iëBc�C>’ȸRtÀÁŠ˜‰ÛÅ<`ŸáŽD‡Š1‹õN»-W¼ú㳚W�Ê¡öÝ_º!L‹0¢N4_šÐ�³¾Ð ƒ¯^]XV´4ü2(ô¸‹À¿¶%‰Téîd¡¡è•xcU Lx¿î(¯�v¼³eà„ÜÑÕ%¹m=SQlÙu¡Û©JŽ><ðùéÜ˹ˆO›ê`þÇ¡×iX9ý°vDÒ ܦև¾,nL¿ÊD<žl¦‡Ôo=Ä“×Cþ•×C:}=„¯‡'FöçL‡ÉʉNßej’ѪR=‘ÔÄÁ-I7BÉý‡ý²WŽ$7‚°Ï§˜ +¿ ÀU„ž@†ÎgÜi ÞÚ÷�ЗYèž!7î,I†‚ÙÀtõ“••¥úì.ùZ\nUlDsäP¨Õ E [ÁÎPje\zKëöÐ"”(/qÖ�´ûAÐý“qeÑ °þœ½}O.G0ó9¹KëÑ=¹pOŽB¾&—SNŸ“Ëò�— ‡W*Ï“ËåÍ9¹\{r‰ubþÊ­<% ·^ÖT3œgrœ ÷ŽþØZCœÇšPŽ´kû¯zü¼óþ´ƒEì´µ(;{àp[ nˆ@ ,©ä*dÚà€Õ-/×T|1¢ +ÖL®° 5� í‚êO[ï�­Ë? ©ܾ�tûçK—›ubªéö'CO�÷§7Ö¤†;},?S¢TžØ¿þrûËß¿¥Û�o·¿ýr‹h Χp_{Ï&‚ÍJÏ”üäºF£õÖ§ !ö†®Ý4Wඤÿ„vÙH®;IcúœÏ{ïöÎô>ímP°ƒ4Xãá6Qн=vlç§½ÿeðuå .gA75a?ašëì\ó·v6’¢™â4—N�Xåe²Oõ•É…Ä +ÛÃç’0"}/:DºSÓÐM" ð:]H÷‚'Y)ËM˜¶ °Î¸ƒG5Q8ŽÜpz-Ä™·±@«Õ]JÇq­y9Åê€�[¤E¹®B¶8ªûªi\å¸W@Ø‹`±·—k‰Œ!æÃTNÓ *!Rµ’=•­ä�ÕѪ�µ.Šif cWTŸ¢ wúÜBNM^pèJ²Ô"’ʇM«ŒWU�X`^‡“«RïÞ(j“´Vu|}±>È¢w–©Ÿ=K™ꜗŧªÀ=t²²S·1êëMÇ–ÀÏJË(Yå/ò¤¼ƒû”t½ç2ÕrÁ.̎ý&«îög”Æ0éÔJQ"«ùNÍt™™ÚNÝœê5ÎT† ±ZhЫêì–½¥�W¾�ÑÄB¢-z˜Ëbu÷´! +ƒ=(9˜¬¶jt?­”Á9û¹ `èi�ªq&ì°ØYÐpV@ª¶—TìkƒŒÅp +¸w{¸ÆB«Ø¥´Ú¡ãS¢Vû67¡€Dár2ꀤ+.Qò±pK ¤û7 +®ñœäV0AwuóÍ‚GÎCB%¢L(W;ÑZ-:c™«Õ¤LßR²d[‹î +\Ô¬³�º„Љ|Ôü‚Ų̀íú©$·5³•ÛÙã’ç—˜ +R]vxiÂ<ÚÖ¢êEOm¦¨Fnë´{}ô˜ìM·@)§!TÉv÷­¾è´”‚ù¤9'¸—0VÀSÌÏG¹¨·�ÓžD +*Ñ-DzÂMv&³¼ß†Òâñ,óXU³üþÂÔ¸ÎãTy³†jÒ]ª VäeÓÂ@ªç0¢l¹ˆamM(éì¾*g5åuq�x„�#8—â¼禡½¾÷7÷Ðì×�›ömBºftº¤wØ(ÍAñmóïv­Ÿ®Ý?{nÒÓˆ�¹?Çìþ1œ÷§@ŸŸEîŸÒs^¹ÛmŶž ?‰î>#ÛÿôP  +NkÇí—ˆßñÈOiÝßϵ yyØ "ÿyãpCÕÌ6ÕLD¼Cª@m�¶�¶…äÔ¶åôªÎk=¢TWjýjÈW�¥+p¤üø�¢.±,9ÌÁ™[ªÑM³„ï<¢ý�]<¸m·…`÷n òºõB_S¼9Ƹ­¸¸CþŽ$wñ0ò¨V%oxn‰ÕKzyo„$Ó·ÇrqXZq0H‹�°£¸ÿIQËY·'ØŠÒB¡K!XUÍÝíÌ¥Y †0]yTˆ@Ó�Ibx2ñ aßLðRÎp[ÉØËÈ µ…H"‡*^*b%˜‰©»Ö•z®¯!Å… F¯é7Ïu ëýå›é0YðÁ#4¡Û�·ïX²-ѫĻèw/¢¼+ZÓÓi×eCC@^wÛ,bÅ1 €ƒIÝùˆî„{‰ ËòAßXÔóÀ-=\?º-«ª”$¡¹ ªIçÃÛöR’µŸŸD?»Î“ªçe²gn3âù´0V2=>�â¬ÓÙ¸&â÷§§ÞCÉNu«„"‹òýìÄqUB¢?Ïù!ÖòN°)€ |ÔðpÙ¤˜ ©zý +bª¹ª5+•¥ªûj¢P;vŸxZ‹8ºtB¼ÍA«Ÿ!¤Î[0A &„Yá£Ç>�ùûK|¸—|_M¶¢2$àÒ_]m�XQX�W–sS“œÆ#)É,¦õ›§[ ä +^U—U€MÅÕ{�zÃJIÆ(“J©ê9­˜©‰9Wš>¦ŠâÚÀŒågé %Î\ªe�iµ§¯‹kº½J m… +žÉËäá–Ü•Ý9ÜÒbã]Ý,2¡FáVwÌúÕògŽ˜CC¡ëF6ÖZížZ]âšÛOXu=¿ãÖ±D�q`v1À¢ôý�<ôPÙÏ)–„yzÒ�Zƒ^SÖ€&í^º§>…©” gœl ´ý$ÉdŽU¶šUø5–Óe³¢ÉÁ\ÇPÙMéKH­z¬Z«Hï>᱌�ñÔø:]OfÀÞ�ŒU\8cÊâ=F\íG³•hƒšÞBÃ�yíÌ]{ + AÝê¾!YÿªT¢�ŽrXí.#êßtWIŽ7¼ëó�¸/ïÐaìƒýÀ±$Y I>HSÙÅ"“¹DDr"ÅÛœc�¥RAÍ-$ŸÀ5›òÀÈ,MWº³vס‰d2,ðaîÓÔ·Ù�m¹1!Xºq*CÂé•éãÆíãŸXõtÒ©°02|÷éŠFOÀ '�<$‘Òâ袜¦yæ’ÖBHà™ {à?&S#'ߠ͆vbæmêHh¦¦áÅ×ev–ÅVÆ_ÉLß„•M‡O�䦦Z~­YBýfúëö+’‡8;õ©Üq~âè©"iûÑÄýh‰Þ‡º œË)Céž¶ØHE4Å3d:Š©²Ô”´¶šÒ‹Ü·k*¥y¼¿GƒJyM1±NÍqaùÌÐJ;ëz]º+ d¼0 +É¥›™¯–bâÞìÚ[²,öÈ®!“8‡ð î¦äðÜÁds½ûS)ÉÏsÂûvM”…±¦ôxU Ðbž¹8�M WÔÝ9�ø.gF¸ÁÔ²]Ã:¶i¿Œ!!N€‡˜+3ÈiQ‹SÌîë¯DÜ»J¤¥vª€�‚6 +«s]5B9-ÈV �]Ó„�·$1#[ú<Õ¥‘‹v÷€ÀEÕdÄ]¶\â®àMÄžïê¡"«Ý¥rà1³Ì¹CÝyHœX¾=;î*ˆk3‡ä­è +,¢j쀼¤:mž�Å®Ô�éÂ`¯obèÖyWÚ°“جs l7ˆÞdQHšÓ<8&!Öô(ž”?«Hi’Ü©íœczÑÈ�ÝPY +ñ1i@S`ÇQ„Uëã]W+u�j‚®ËIs^m~7õð›Ë1L©cdjÇ3ò²î¦~â­»CêW‰ee-‚:ÇàK7(ðPQ¶Uï2Á´* ¨ÍÙ½qŒênÎ}IàÒK� ñHì‡b +‰-‹¯»�|(&+néÃõš¤3šJE’ ö·k$`¸Ç¦.K™Aš�'€e¶³ŽG’œbNa«f/v.!WüÉÜ÷ùñiùcW5þN@¹Î¦:·0êñó±“ñú%Sçh§1œr‚íðIý¹Œª"îér‰ œJйÈ"xg`B¸¯ù_Ç&H#�_ßíûw±—F6½œ©šN…ÞÇü·C2— ú…´äËÌâÒzMµ¢TÕyÏø¡Tÿåìöºò�g\ÄN$RÏ1Ó|ÌB†0%XúšJ)‹Éƒ’!ƒ”£Q ¥A·‚F*½Q£îk„bâÚøÁºLŸ6¡7!];«è¸?WgŠØÓLEO5Ã’ì^iÅ[‘é0 ,ωœà4't EÂÁ$&=Å7«zƒbœG–S~Ôl°zT­ï•sDšªèføžŠ¼$Zcm³ø·K´é-²DÄaw)á%ÑKѼ[]Ja9ºï…î¡ÕÃÛü°9k4ÀÊ5FÕDy1…Ki‰ +çî}šóŒn(�l°ÔRTH3’RÞõ*³/ae[žy{Ö1DsÖR:<À/QK<’œ¡ä6×G¦#a�º,N u…»oög3l:K;¡Xeˆv�/øŒAjêÔÖÒ†ÒZK�RkEG†ÒZ ­)Á:k2�ÌšB«¬©&¶Èz«´þae…5L»XG²éµïhyÕEeVW-jÑâ*ÀÊ8¡­,­Zh‹«ª´:¨&7K«BYÉk «DÌúóø•pÚDN:Z=Õ÷ñ+)uY­€òQ^Ûw°-JÌŒ�utSf HèV!�@“ FA¯ûÙÈçf²üñm=2æð¼RhðÈ*AǦÑgbuXÌS•“t¦ÉÀV”Ø9â ¸Íæ%Iò¹˜\‘´Ž©ÐS +åAÕäX§rÐ3~*õÜ+±„`jþÙ,²‚³áØ`ž…6‹�º%ë½(–æ‹¡¡Þ A ÷v?‚)$F¡‘v è´$¿kD 4eÈv”Œ¶£ÇÁãÔsVc[œ±BšÉè§Á§Ì&WùX¢× O€è`‰ÿ·ÛoHÿŽ�”U°îÔtv–7W㹪&ð?šÓ½£†Á—›]Cæ×£:éÌRRU`å\‰¡S*M 6ëcˆî¤=p~j*“~@’K;%;„¿'=¢.ZèâcHßdÆ´ÈxTÓgÒO%Ï`½fW 1¸·eGR Dm'&3Ë+)æ¬hsTg<ó¼DàO1á�¤ÒN¬ýÄÂÖê„)IÕ+)…OÞš›_ñuZšqP¿Q-þûåŽÍqa§Ø ̪ß—:� ÒGˆ‚Èï¡/«ºgg�Ÿô~Zp€íž™îzdee µZ�EAÚò¬y +ÃfŸèY+ã“ µ7uðzïǤ¢N4uÁ &üŸx�WáÑx2X~£ÏKéžOvX“‰Ba` ™;�M¼*V±ðxÙÝíg·xO�f©çþ~û/¸’JoIMC!¹p¥”c5î“áÂÖ;^êÕÕIð¦TýðXö^œ5 $#‡�î²èœ7«þ›,Þ'S?…ËpAc²èÜÍ‹ƒ.†Û"î`ó³;R\ƒ87é”PÚ³;@~: ‹2C�ë7=ûÌXÄëÒ?3Ù5Ñ T³“Z…„‹‘2 1±BÔŠÌÒn^>++4çÁ)ý(V?ÇGïV»Y™�l… p#N‚l ÈEÕ;uoÔà''µÊ[¬Øë_®%Ä®EºM΢¼ì.là{l"¼`#V|×Ë3Š~/ä§Ü{±'Ó·Ië¢âs!dä�{S¶�®ÄÍ‘ÍçÞë ½\�÷Q㹊R�Q/?6z±ÇY+L]ËÌî‹iL{;“hmô9õ<1\X]š½#A—1½dûËcçýE`Fbè�®üÜ9B¢þ“e ÷z±ˆ‡RŒO™’<$ˆ•ÝT„„õ ÓîAç®5sµÏzP8£BœÆÔ©L:Å–Ah=Ù®”ž"‚�Âv·sÉ‘>’‰¸€©¡ë&QI$VðÃKY, 6¤š*�r$¢¹áôœˆ3oc�–‘î}á1‚ü#c? AŒT3¬ºŠ›ØhEHj4úUä9’ ÷Ÿ•j9œ¿ˆá*…µA¹t�¦eVò@ãÌvIÑ’F˜ŠÙ8rñä.bRwë +Gb¢ô+êmzò’e"©HÉA°ÔYÀÊûB‘žº’º½9‡ß”k¼¬7HÏb=ý臮)‘ÓPƒcÉ^�S§:âðT8š§º óë@†¥×.Å­Ž‘Ñ®lDA9 +� �wM”.žQ‰Á‡¨âÖªî³ê__~‡ô€ 8¢vkkt×bÔ¿Ã}BiàïOœÇk±ó^�ªÇñà™>ˆbw–¡î–•†Õ~ã´x« +ÜC+;y£¾^tlJü¨´,�B=$ãNªÛ©OI×{Î +,'äaŽpY[o²ªVÀö¥Ñ�€tj¦('Ñ2ºS/�FLe¥n µËT”,†½ªÆn2£ÖdA)à•/d4±�Nófe1«µ´.…=(9Lmeo~Z)ƒcÔ½t`èi�La,;LìLX8* YÛSÚô^àb±œî­»\ÃBÉÒ X¥´JÓñ! QÓ�ÝœÌ�P@¢p9Píൠ+€“t…—¼/¬#:Òí‡¾í¶˜ Zuó½‚GÎ]A¢L(gÙ ï¬&:}³©I™¾(¤D©¶â͸¨WG!Ûe ¡ù¨÷c3CmÕ£¬Ó¨—ÍXv‹£$ªgžH+HyšÃ£KÆ^–U+ºt™¤¹ÕNçXÏ­DÃÍQÊiU²]íV“ÛR +æ“ä$NY +™0fÀ“ŒŸ[¹¨·�ÓD +*Ñ¥ûêÿ²ÂzìÆòö6”æ?w™û*˯/Œç>N•7|�±»T@Í­ˆÓLs©žfˆ2ËE sIB)gë«rV#]•�iGÙƒs +ÎSo.ZëÃ�¸¾9\²Ÿ.vX· UÈšeЩRÞn£$Å·Ì?̵º];>{n¤§Ãs\cv<‡ó¸zæ8>¥g_ê¹[-Åà¶î„oG ËGÃÈò?<¨‚ãÀZqÛãñë õ)©û±×FÈðßûË"ò¯Íªf¶¡f"âíRj{´}¤-$§¶-§g¶¼ææ� [q…Rφ|6P_ZöÏ)êäËݜġÝ0–°;›·¿ÝÅ�ÛV[pv¯¦A@^5½�Ä×oôinKVÜ®~{�;M<Œ<ÊYÉë6¶øj‰%½¼6\’éÛ6­8LZq0HŠw·#Yÿ“ –³Öž`+:Hq�.…`ªj¬n`.�Ù…‘èÊ&4<ù$º &6g˜ï lI;Ük%æV2ÖÒóÄBmÁ“È¡Š—ŠX f`ªVëJ=×gWâ“װ7÷Ú‘õþòö… Ø®Y"ݬü`ÄCa6E‘_‘jWš°HÁÍyõÇ$úëÝ2Ýx‘íŸXj-o-±ušNÐ7&VÒ>pi +ÝU>ʆ¡ù N ûÇëš ÖRÚ´îO¼q�çIëä}™ìË ÿ½-ô•L÷Ü#?k;ë×xüþðã&ƒ2úº¶uÍíUus�!!,Õ¢ ãýƒH²qU°†»žIú¬�üBMpÔo3�ö¡¥jHÅ’F– ¢ÔÙ´˜.=Îgˆ¤ó#‰“ëy_ý)C…-†ÒWãÙ›H ajÓ¹›DŒ¦_»«\5¼zÒ"$ʯhZ¡ŒBš>ïJ*ÕQ}ŠñAmï(ÕyØÐ@å¥qÙàÓÑö:˜–"õA2Å¡7l= +½ß>ì'Štš" 6:!H¥t-%u² šZ¤�ªÓâ"Y–-®F”ƹ~XºwÞ;¥šI¾£ñã(’Mò_8åŸZö°ñ+Y4zÀ]õ�4<0yŽK  eM2¬å…¾€¹d¯¢8Yv½ G8y–uµ†‡ÿ“]åHrÜJÔç)x�V`OÀVÈü§`ü#G÷7ô–Du“tf&1U —·ì×ê`�RX†xŒ£˜dȸ�‘�¹Y5 A�Z›â!/XM3ˆË¸R~1{ô—< :qW»Óf™Uüª©ç¥ém‡=“�°Š¢–ä¿nŸž¸Y¼²d¤ˆ+[ñléZ–óÕ—ÅËPÏs¥‰Ö†°†qIÛº>¡�ä·"Â�zÔ˜V] +’¹ÙJUr£²ºNj6?Q†©µS˜£&g˜JK¸FûQcú‰¹dζ…ò3£Ç¿8.®Ý paš¡wW¤q4"¨ ­®Wq…°Ø{¶ L;Aý}ÌÄÔ{x|Jop�‰ÔÍ*‹©¥ðfÓã ÛÓsÍãÐbE|Ý¢KÁ\ÜäÊã.BeTñ j}Nhp9'›½—xÀ(pëoĘã7 ,|m}"NdáY^vZ°…Ì,SÑZtÅtíÐÈñõÄ )¯€À‰‹^+da3üñœö�¦� $(àùÖL,v¼ŸyE± &ò°œQ XohŠi1ú`—Ïù@Û õÞ»¹õÕá�§ùý®¹xrûÿËJ;Â4ÏJ1åÁ‹,Õ‘â™1ˉ�³É€Då¼ �¸«Vð¥ÜÀÄZ=}�…&rÛ rÁ.ΞBX…‘ÖÝÈ+ÅçmFÄÐ0ï^ +îølf¬”áöûÚ²ú‰C£�X9å4Xt"ïÂV a q]ž*Öi¤ÀìR%¯uÈ�nNŠÝµ…6šfŠKÔ¾u�ó9žH`‡A†¹�’jY$R¨2{ÞƒUà|£âZæÅ5øüĹ•¦#Ä�&< Ez;Vóh²ZŒþÍ/ ÍB>ˆ¡& Q 6Áq"aæèYM-¤¦v–‡¤Vtµe§¶'­¹5»ŒßàE -„m2ý”cQò7ýÂ{ai4§´<› ++ì˜å–œ;sù‰�Èã/­¨wç·>ÄSç‚&„g¨ZXXDÊѤ 5_ìlLy)K±ð™ô‘oÔeÂ^q¡ÌàoÂÖcˆi� "ÏJXà`EÇÄî:zŸéì‡céôÕlË•æû´åãíê¸ï|#ïËki�¼+­ÅLù±\HÀ@6ráµ—ìV¥ ›Oˆþ7-9d'L:�÷‘¥»_ãDt<·»ñ�{ »ðõ­ÈwÝ}BìÈÏÝH»QÍ3ÔY¾2Èsú#÷?Ýù7Ù �@^Ô£.]?™£U©1Ó΂Ã…:ž“£õ òŠÝ‡y# ¡H|”¢~€VØOè5Ñ  f6JäÎ +Vµ"Ž£YLƒW[Zc&½ A8Üâ`Éy´ÙH!+„Àp¹˜£åÑà}=б¨øàêeÌ«K˜×'t…Q^ØøÙ�µfG;ãÛeY VùG¼ÍRï Áq¬2¬Ûò~§}5k…BH*†ÞÂOB½*N:Sxn™+ÂA;]»bÕ‚H2 Ê"GvYs.ë¢çÿÅ HÿCꯔžíã$ì"I:@ ¤ Ñ¢N¨ásÛꀦ”*M}r +%[‰ ¼çÎW�K"’E……êôf½‡ùëúdï"8ÂÀÝwê§lˆ.�õÄx¸8ZÀãá²°Ö��MŒšÚj«¯ª÷e#d`ûñí KaÎCPÒ@V¸6•iŽ´³é²] ¨¡jÍW$ÒH Ñjyú˜Í"#Ȩ­7˳¦S‰* g’Õi–W•°£PþáZV Œ©…Fš·’ò ôM¡Þ–y9«m ßû9ñ•¸Þ¡HEò0$v*& '´|eYR¡`šÀãmìcÑùœí(BHvw³•O"š`½†Ñ!Ð5{ÙÞ‘L��idéö&רRHˆS³ø(™]:cΦ¤Ð¸á ¹@b“Ã4gŠÓBÂhÛ8ÓµHnu³#VpïyC7¿C±Ó1y©�®LHç2š–ƒ0&ZSh9,'·zat +pRj�ÅÏ—ÎŽ:nìe4  Ù—»4öMëdÍFaá‘w Jt§ë¸�¿å%ŒW¡£ÌG_©(È2RyÆ L­R�k—œäÑ‚B.ŒÖ¥:§A²®RÕÒ%HÁ‡ä‡$ÍÔµ“ÿjETC2³'Ça$¦+/!Nã§ ï &¬1RŒþ¢­gu!G|PLÕ„–ïnRWšm* q:iÈg¸pЋ,Â~Ö&x^�ØBjAIg!&pBSFò?!ŽÝE ¯§�hþóN¹£.�Ï7„Œç~Žƒ·»E÷â Ó|Šzt4óÔP:9qá¤$¤r­ò²`¡:y@ç¡Ù;:9�à|ôf¢PÆ/÷a»~S’ýù`‚CîÆ¦‚¬Éƒ s&•·ÏHÉ�ÙËã¿tµy¯öúõæÂˆøbZ¶\êKL – 'b²ÐÍ=é±þ"Té…Q£û'N*ÆËg=’ |GZ¥Ý¦ÄРp·Êña5tú/`J¹üHK�!¥é¼¯˜·žïQêô»ϳóþûžÐ�î|#ë^ÖÛ8Þ¿|pÌ_ÿûó;~ý'À–Î`ð endstream endobj 112 0 obj <> endobj 113 0 obj <> endobj 114 0 obj <> endobj 115 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <>stream +H‰|U{PSWÏ%ÜÝ:é.wÃbnçÞ(õUQ@DÀúhU_DT`AyD�I� j�‡"á© ÈR*"oŠ ¶jAå©Ôõ�€­h©uÇi¿‹‡Îì 3�Ù¿vÎÌ7çûΜßïû~ç|ç`ï�o!'"oo/OÁëÄVag°1 G 5ß’ïÉOãÃï·üÌ2×rwÅOà1!#†‹)Y9Ýìt7ÆÙ�»ù9–lÖÌÞÙ,òÐMÚ_â0E º&³3[ ˜%‚ææ°q>ÁöˆÌ3dö„¨]¨+¬>à_/º|®¦á²êBD„2þhøù¸KŒ°J D ÁȃœD«j¶�|ÀºC„èŠÀ9š”™uøb%ÿ±ÿ‘�¼bH4qrª¸¥¨åtó<#q:ìthéátÀF¨Ñ÷Gj §„ýV—&!ø9©c]­¿¸hhiƒ§`:ü-Z¾{_J|(}v^UßYÒA½)Úʤ О\[/4_Lv}Þ½í—ážúÆ:� u»ñ4p‘]Ç éYÇé�ÔÐPo*HVsã`å?á€~D¦a=F *Ñjt&I,±&»òãy„WÃõ¸ +x€�Ãf–å®û- <¤¾ÑŒn8Í>å(Žü ‘ôOP/*É3OÓƒ×[z©WÝë?aÈ.Äß¿iµ×¡Ö¾ÚpÚPT$îOay#Xã >»lL¤WF¦ùQ+·ƒåÛÞ§À¿rQ¬’9;„›T�Å)´v â¡hùëå°´ÿj™é#4¤�ûm°½�5ŽAÑs>Qn¡±¤Bü"´-rF´-}±V<¸VVRGënã©‘2½7åøi|``ro‹ú +šž¾ Þœw’f3B^©a�aÃ]ìé<¬Yg˜?ˆæ_üpfà~uEÆÅ´i/H‰+ˆ¦B§EE2!aº]ÛÅêí;†f�ÂëH6 ‹afXŸhÕøª'È'ì6IDNgnÁ D³&°Ý…B|‰=Z�ÄãK`Áýž†ŽÆèK ¡ç?×ìñ«8E'ìÀã›î¤Þ¤ú†JÚ;™ÎÖª!à‹¡^@>ùÞØd¼D; :‘Î�’¡£¥Iþr_Ê.àÑk†œËÞ»cwÚ‚•ÑùÇrÓtbaWφQîP±ÑIÐOòG­'¡ƒ(Ï->e¢¯”u4ß žÕzz0¨nZàfÛ¼32:]OÇéR•ó ð�#!DUJR⳺؊Ir +œ­Ù$ÇÙ$ù¶}ÆE¥VEÇT©ê.U�ÿ*›©Óœ�¤…ò¹=�Í1sJ:Íø‹œþðŸ€�DG7¸!þ;�äÐ{ _D ÅÈ-5%Es,e¡�ã;[©™ñ7§lÎwÆŸKÆ88·{œ¨£ã3Ñãä“Qëq®–Rcé©bº½¤¹ý;j°^º‘AmãÐ#(Ë+Ë7Ñm¥M—»©»õR{ÕŒC£ÜíZ½£Ž%(èD]’F7Ï@ÜÐø5{RnAGã˜,‚ìÊ|ˆo$òBsCüþÔÏLk–�|`Ö¯ÝÌ™_Dw•v´ÜäôÛÉé÷õ$´ +`ƒmó7iP Š6dGÆcÜãOœoôì_¸Û�?ò¡Ž=!BâEvhZõv%üæÃ_ÂvX¾ê-bƒ§è]‹­+¼Ý]œw?þíeÇÏï¸EŸk`Ï0ËÑÿÙ¡Ó£È_4eF" özì +ˆßÆa ,s|ƒæ»ûDì g¸4žd>ÃÝ c Ño—x"PdÊ+Î+¢Éé�òëm½ÔÔÕõŸ ¾ï§öÞZû´Œ¡È`* Ñg\ÕÏô‰ÿ23‘}£ÖPÄ]b4ѦöÎ[”©0ÛPÈ�ÅÏdŸñÄÉÜtjï��� L&AÖf½6Ë”ëï#JÒûÍe_ñs~Ó9Qb}WÚ5 +½Ïïiuùšñ>¯¨h7Ô~ÕÓqI{ì ]u/‹;RâOÙz{yìk ˜ˆfúUÕê`qhL”×áÀŠòxZˆ6¥ßĦÆùSì´ÍÛ´ã>*ø©Ž§U•ÓZ¨úšSåL枥OÉRSþ)õ½ ”€Õ ²F ¼¢ 1ßN«‘IÐM’¬’ëPGÔMh³´it˜6$d/å{ë%•ލA€6þüïñ«W›ÎÑF‚L:åŽ?$²³Û»ÅBH̓ï_qo~ÅŒ”¼\ÁÁÒÙ$ü1ñRpr¸¼§´Ût“{ÞM>%å¾? ­ÍcØ$܉؆2µ>i‡Nø/Ì"ô]©W“on‚ ›Í„;ÊÑÔÔ›ãǻӺS¿õ‚laè\Ga_²{øefšõ(mB9ø4÷¡`µåÊj‰rEYܙػ³ù•à~¹> endobj 219 0 obj <>stream +H‰|RiPSW~��—ai´¤�ÒÄÉ{�E ¸Ð¡ÖE£Îˆ#š ˆ@IH°l)& £ Ô +ÒRD�‚lÕ 8S*RhiÍ Š%¸´.CÇiÏÃK§}áWõþøæ|ß9÷;çž¹8æé�á8¾xÏ–äÝ’}¡»”z­F%—º5ŠáL€'³Ä—D+QÍÛ·o¹Ð¿¼Û½„«öà +ïƒ,¾›!xù,¢(Kù¦+0á‰ëb¢vÜÿóYß‹7ì‹>eG‰xd2~Ã3-v²Ÿªž�¤¡Ú&³õ^»-²ÕUZê(ÁÉG<ÁpõÑrk©(i¯lkuŒ´™çÆ5©Ö”]B>]:êžeð1§8�çHã%Gñ xc·¦îꎹ@%¶¨Ï\^n;?Ðg/(ùRÜü÷TΡ†Q`â¶õÉ]û§³¨QÝWz©Pž�¹íà�3§sÅüë&§Ì½q¿Ÿ]Pèô1Z&ŸŒDýD�¹ ¢X¬(�É’Dk5·ŸQЉ.óPÜSéį7ntžsœü/ÖqïæŽÊÞ~!?“µÁë˜ýœ:Ö6ÏïâÖšªË+„æòcebcj¶J—Ÿ›§.Ê+oŽh®íiìé¸5Ð35k ^„¡èJIFiZ™ú q´­¤Ãta)tðKlL¾ Âm6[‹�@i¶»6ž¸IvÐ׫Ê×çGo—�«Ö÷�¿ÇT‘ÿ +08“À endstream endobj 214 0 obj <> endobj 215 0 obj <> endobj 220 0 obj <>stream +H‰|TkPWîvèPwÜÐ;³HoºG�P�‡Š ¬Q@ñUh\•žãÌ0 ‚îª Oƒ†7¢¢Q^ +‚:,1hd‘·˜òÔõ•„¬U9=^¬l»[•_[]uêž{ú|ç믿{qÌl†ãøvùîØ¸t½,Dë°E¦ˆ�1í³Ü‡8geÆ1sÅÈ e¿{÷Ο€‡óà×ÿ4÷SKÌ ÇI‹ñŸÂ„P„ˆ^§<¬RŒÐH�V­r¶7E—™èn/u^¾|ùLt‘z‡Å…È¥‡ÕyŒZê§RÆ©dy˜£Ô;:Z:¡–ªäj¹JkÚܣʤ +µT®ÐDÈUR_<¨àûUò0©F% “ÇÈTQÒ8Så7iøÿ%UÄJy,é®X…) Ðð›j©,6l�73%4.>V£RÈÕŽË6ì<¬”KWJÃäá†ó6Ã>À1 †-Á±�1ÌÜ0l†¹bØJ û3�ùá˜?�X†ŸÂ±Å¼ÒØl;¦Äncø¾?ŠŸ�e1kï¬ÖYƒ?�ÁÌÁ,Öl˜p"TDñ†´!W“×ÉwÂ5Â/„?›o4O3dñ;‹D‹ÞÙ»g—¦e´poZp>~Ô"È0ãҌۧÓHÈF÷ÅÈ Îð‚DRô¥LÉt®pšÜ?³/Äç$×*6­�)¡&2èÀo…9èÄu+jëÔ—#"T‡Â–+kX‘®‡»Öƒ×N@鄊Œvbd倿¢XEe�¡9@ÑðÑ0ˆà„z‚}Èžô?oXˆ\Ðêà…N»_ƒ'lh{ù„�×r�à – ¥ê@'52ëHª-\[â D;‘EŠtýPßî�q0N +¸ FFŒ’2ÔId—WæÔÑ iÛæžÉº|²kåöOËŠ•L¼/‘Põ ¡Ÿ†S¯€–µí©dËCóiuŠ^ŸÌ^2yàŒ8õø·ãΓ³£"PÀ•�iì½7o5Ã)("EGÎkáþ#Ð̼÷­dîÙGè h rýJŠPÉy­Ñ-a¦jt¿w7º Ep7,l´Üȸå}ã'”Òh'%eF7 H^«A‚ª‹qS{'ù˜§‘I}šÇqO‘­ø*¥üË{7â)Y +�ŸM�"kd~yΣÂ媽9/Ž]$Ì�¡ê_Œ\œŸM¦»†ˆÓæ¢JžjITöòdàÄØ^$O–•§_¦G¿¹d¸ÅV×”Þi·~o¿ÊÔ†ú—¹Òvžø›Œ÷çUf×Ó¯;‚�7ïY«Î:�ÈŠjxÄæ.Èíþ bó09˜VQæxνhG^¢ù32åò‘Îø—Gú¢ïì.5Ïö—·}=iÝšxKq…©—m+q¤·ùŸ<~€ß*Î)¼’ÓHÿ3½Cîbíµ}�#ãLŠNð.xÃÿß`ÞMÁ’ î „<ž>å 2R¯3¦<´\Ï¿x�R{àŠä5¼%¨ˆKãE]ùÝæYäYŸB¿ó®£è­Õsx��Igô‚  +´î‰ëR¼Íõdjÿá¡Ä¡UðÊj9é„^h\´:ßùzòXçá‘„xiµŒ„µ¼æ"­®3R í ê´¬™Ù(•Ì­’œ¸¦oh´?ᛃSÈv뎤C¡LÙâBõíÂfúǼõ¡lªmË\´YXS† -èm­®¯`²I*9w+qÜÅ”á¸>5í8’êOï—WÜ{ xÉk=+êÒõɵœgD%XŒCí• ‹%”!gˆÈ&7×¶)ûhÀol2Ý~BsiÏ€ˆ]Ѭî¹Ló#‚õAúHæ9T‹ ³ó³>gºKÛÐ/[V~ÌR$عnÙæ=�íIŒþs}^žµhgj‡õáõüa²ëT‘Gé¥ë{ÁlêÁ0î\Ó;Ï–õùê}»iä¼aÈÙ¾²…%�/οȊÚuýaZΫ×ĸ~*'(gc £F½ðz|`�7�fÛØ"×LÙ<³‹Á¯îV0Y<Ówb�L»–n¸iÍ WLçˆSÒ�¥c(ƒß‘]aÛiû½ßÿðËÝ¡ç]wö°ÙºÌd�µHŸÚk:`Q^?y£.´â̳Y…¥Ö“2`‘3ZàŠ„h Z2ivO¾,.¬b’;ˆ”H¹ÎŸ^±Ösôlf‡¸=÷úð$ýc¹K@:+By˹vÃê~|x\žÎ,º‘Åeáãs]ß\*=y¢€Éï!r“”¹ÑtÈ�£Q‘lHXòk��oÏ´«PÔÊ÷¯àÀ&@7!�L@3Y’Yp:Ÿ¹SÜ|ãý´ÒÏ“EUÐ �E76EF§&b”Éññ)*s=|µ‚¿8.ð(‰ ?nùÀí&¨à*áWL' +©©&£»8J£ŽŽ¹ ®ª¹P~%�­Ò–G2"ÅL¤ó“yæ.¼î.ïƒÆaÙÜ(™ø…D +¨‡m°—X@¢…È#%)I{,‰·»•ñU�‰²‰¯1ˆ§#<œÇ#ï½1ˆƒè1êûÉÿ-EYE§ ˜¦ÂM_ÑÝÕ^,º9­Ââìâœ|æfÑõºº¿:À‘EcP/„5ö�›÷E‹�e’µÉJþØÝÓÞð£=öïS²i$e8õáEf‡f†ZÿW?ÓX“|Ô“~M¦™9yŒ¡¨¹á>¯ß&^¿«Ð(„Õ‹nøzìß§fô$Õ|rˆðüÎ-]7»‹73Ü~&€*î¯bd½À¹!‡©¥ðG°€ß>`ë0…XVï'~ÛðošÊ>¦�2Žã!ÍÝ9‡ýƒ£I½3wš%šø‚3¸ljç˜q“H¬K™”¥è^dƒU`ζWJÚB×±hÇ•ÒhÙ`™Œã%ºÂÌ2a®æPFP^ÚÄ¢¢ÿ˜å9ò`âs›ûë—<ÉïåûËóû|·½SÔª�;,>LŽýùº?¸ï4È�e÷ø'¸>uŠ8h÷à…½·*ïÒ¸ +Þ/eþ ·¨4Çò޲hŒ_œK˜ +÷y +>¢âE +á¬ïl+C®On�LÒkã»^†2íž uþðÇ6µ6 >JßGª·/ñµ=R'rj±´‰nóÌ´0úÍZð67yYÒ·D�S{ã�—oø°†uâd¯ëi}ÅgtJþ¼-*ɾ¹ ¨Ù`HQÛwÃr“ÄôäÊ}ýðÎ+¬:\¢ú{/OŒ]嬘®»Xû)}›ŽÞ¦ÎÙ}ðzaü­ê®.¥ÊN–ç”FF³l÷ˆ¥¬­ÊÖÄu|*+ûg 4^}·‘©êüÚr�î»tîËëœÆ\|½«šÖÕ÷M²  ¤Å`` ù·üœAú�i÷à‹9&~.š™0‚s.Îaa>á †<ú�Ê;ItfÂ~¾û[éüêøø`HÂƒéœ +[À]Í£J^ãNd?*å‹ÉS>T¨7MØ24¢ { v#åJÌe|rPÛ�eˆ}t+åÀì^ßÿŽ #¸qˆ¼”R_D©‹ø¨ÇÈÙÀ„?"ÜFÆ!hÚ +ÚŸ §\ÄÁvTõM|?trËÇvݳ.œ¿a¯»�ʽ¸ +º¹ÃÜa^zoˆX"æïr@³R^ŽLñŠ…2¯ÔäƒM ÖÂ{”ÃÕèl`j‹O¯2k*Ì5�]{•]-#þ‘�ɉ‘•ÀÛ@ þRfà¯ÀkÖc¶# è<í½ÖþÊ `Iˆ>ÆÓ³¹?žèHû5ެhä̆vc¿‚œ |%4|nÏ.˜Î¡þA&‡¿ _dÚýç{èP¨ÁîgÉ™p#“ÞºãÂg´¶´®¢’-5py¨ºG‹#æé7w$PÐJÁ¯† rþAOtm¨ßjîbä�§Ø=ƒ òŸp‹A,L,\Ž%ûB»Ÿù7=¾±�è8š/¢³ êË?e‹Ëªs³©Óÿ£Ò*ˆ&d‚pxDx L§¡$u‹;ukìéÄÖDKê3âùtÑ­øO€ñ ûš endstream endobj 213 0 obj [/ICCBased 77 0 R] endobj 87 0 obj <>stream +H‰ÔWk‹Çý>¿¢Áv ··ß��ÖÊ21‰�Ñ’ì=ìÜ•°Ö ¿Ÿsªºgfw#ÖÁɇբ;S5ÝÕU§ž}õ͵¹ú˵3Ïž_›åêú¥3§[ãåÏÜžÞ-W_‚õævq6µd’ ¶æfzȶähjó¶—j>¼Z^c‰kÁð·ð·7•à,xSÛ Å‹4Ù%g^¿;œõ�»d˜—×_/Á|„*?ãÿWfù‡?oJµ5Èõ©Û–º9Ý,ür³”Ú AÇûyy¹|»<;B_ºÙÿªiÇ#E_/pÍñdäñÑD'§àQs±Ñ—„s"ÎÉ9›ãÍò׋oΗÎfsñÓž¿ºýé�ï.ÿ~üj9„[»�Lç«9þ˽.ð²`îÑÿc¨àä|žî³Ú˜—�¦ÄÔ«“³/>óÙß/�?/_—_°Ñû–�/gÊ+`ýμû”;6 ºÐüïº=ˆ¢€0\qðɦ€g 6„ðàyZ™–¶íKÁŽ”6 ƒv\;Þç§±õžÌMô8|0ÜÜçDØkxWü»!æ+€.)Èü€¬¶ëòy&dÁ G×\|æ®_„úB?%|:8å¿�¿åT(#Ê%Õû(‡˜a£ïõOeì‡aÎöÄJC)ún ±yÂFîòr3 ¶ 8ÿ” ûñËÊë|3ZCýlÑv¤¾ðÚg43Ðß,¥e»s>©˜Ãž1$WME�jÕ¥ayö½¹zùÖ™Û·æ‹ïÍ<71ú5ާ&œÚ÷ àþ©!0Wv§*cÈñ»vûzè~;Öß9ö“éªG9ó%›—Æf޾zqãÌó÷+ïBD—Ë&äˆvàkDp«iey‡NP/B‚bÁïp„OÐlyÀ:o,Ÿ«uPnÏJÙúÐÌz–GåH=nê3§å‹rzƒkËž¼le÷�’|p€´mg­Œ¡Dßg�7ÖÎ�•5íŸgm }&ã´<`�—·;¯ÀOÖç\bPÿïèR¨ŒUß“Í5ùÿwî÷;÷‡È)$ª–¨{p€*é3Y°¾Ù‚<ó}Ù1QÌ´ö>ë¼±Ûx‡%.A̳Ôiø0õ™ŒÓò€9Ñ![B¾ÃB)®l’b(¶Åº�µ2†>}ŸuÞX;CVÖ´žµ"4õ™ŒÓò€uÏý¡ÙPSp¢;Ôˆá'í_û%RV(ÀªÛchbîDÿ}L�‰Çç¨ìðí}]·&q¨@Zú¼õ‘¡Ý HM3ú• +ÞBKúü¬�óÊ@ù³ÅvJÒ A�§Lú¤ÖÊ;sUJþdŒc¦¬AŽNË ÇãTÜ€ +{ ^¯3ECÃnlT¸ ¢Iq¦@~ùBD�g,îM,Tmf0{‚'Òøï±8@ì·uÙ¶œEðÝÃO»¾LïìY2sm$PAÁ©Áøµ¢æÄ î!Ÿh¯ĉ¡XX‚-l5hONF00º +£)C΃íG-¼Ç:«G˶mAjàNðÝÃÿþŽ*’P?[lõ)f"¢Í†ˆK[ÀECã=Ý+3ÎKöIªEt¹ÖBõŽHš�¼÷a%,Ávv^\Aa‚ÄÎ¥d­Ò>Ó Œ>¸V¸I¦�‚zœ‚ñL|œÐÛàßm"|åÀCÍpõ¢á ¢ºÎ1L¨4]‡ø‰E-÷æ,„½NS`C£ó‹<@eŽîÙb@û¼¬ÍÂM³éÐ.ÃGcr%Á TìA‡1št 1¥1¨…Š*7H*�vT7¨�™µI‹é\¨¬rÑŠÐ)ÉW—„ŠIý¯;ƒ®uT\¹2TDAèÙHˆçÒÈÖ¦ÁŸ�áVÅÌ ILñ oC‡ÂÜ #h2T‚1&.Ç»42.Gt‰4Ï_Í� 1<%í@òˆÑ�tÅ ¦ƒv`�S7Vi‰êÆÄl¢ÿr““™ž +g¦löª®¦sîbÉšì•CýD«‹”ZÃw$‰c>r�P’»çIiF0ëö™æ‡’»Jœ¦j³ lºjjBW]¿¥jÑœ‰�Rœt5*pdÚՍޯ»ÖŠ¢9­edRR_Võhj@‰BëÖ䉂"ò@E(k25© ˜x ”P,{+]\ý…î!¹Ôåˆ$ŸVÏVN«Ûk˜qCAÝ Ð>ÍPØ#xù¼‹¾ê¥B‚$„ ¤@šá¢kȪM¢‡š.Àf-B09q((öFPìiô0Ikn�¬òÉ3"öÒÞœ. £ÙÍ…^i:”Ó,ÁITL#}'�E¡ ~HÒñH R° ~ ÎckSÃXª 8šYhlÔ +Ö©)¢¦T© •*9rµòФT#å(H‰ÎÆÀZ®Un„òç•Fì$3„0`+ÌÕuçò̱LªJЊ }Uñ§E(9ú¬ïª“ìºî¬ÒI�ë:|÷`øL‡„díÌ^Dù6¿±Q$V~D?“ÎI/BW—,Bi£õ5F:°•:�ðg(} Ì×&Ó“÷2ÀG %9¼CLŸ«=g“:Eq|¨ÛA,’y(15Ó)×±ÜSÞÍ¢; À“ãB +'ÅÎÛœE0:!ÙÖ£ Äí½‰),gH‘L�§ƒïؘ›á„‚€(Úxàú.í¨9³‘¡GƒœA.vGpš�µ“=�ÑÓº´�òÚœû7ÙÕ‘k·÷:….@ar8�!À É ùþ€+ô ¾¡…~“�:Thþu"TâÁ‚¸#Ôpì ,£ŠãhÜûÈWõû„B¹Êúe«”‘Ü¢q6µŽjL½é%€„ÂGlÁß¡nÉ‘[¥ûòƒÛÏSžlEO§{‹ð²ÈzR,rU�Z­Çà7Ww…læ„•éS¼�¨OËYoöê÷ÄF%râ³E¸fãÞà˜ïsàÄ�vóåš4ù‘[ê#QO±ÉA»y tØTX©¦ÎÍyQªPœ4=VSóâø¨(êK¢Uu’À· ?DÛ¤P›î©�´':(pâ‰lè-?$dÞE‰djõØ‘ãAöóa0=”#qRLVÙ"ß‚Ø=jÈE0ÔD1|óBrc1œ”J¨b혩+F¯%TáÊG»;ã›Ç‚þ.ø»¡G8Äqö�^žcJŠä{ ÂA+®ø|ÍÀ£üä“ +©y’w˰ç�S¿v]ž/E;›»¢çd.ö9øé„¸–»äÜXíé8�¹rÓE�Áª6° †ê÷‰…á8?lœÁÿÿÀù¼î™m àm›‡‡„�)Õfƒ²UhéjÒ}›ôÕ!ï÷Šm<ïñK¯ ‰ç*T}^‰´a¼›‘qÓ~Yß(dbB SÁÀKÉâBT%Iù¡ØØÄ•.ýEEÂjC騪ÑÊkÞÈ¢Š?u,å¦ïŠÐ]J°�÷»¬¦kHÉ?BÑ]‚•hH›žòÈ´«Ò^&¼$m@Ã@ š§¦ü„;·ã +¯á0É�H£npœÜÊ<鎈øÎbDè:!(ëN)i¶\a«Eåâc:Âè ®6ÉJÇÑ[¿¾ý-¸|›ƒLM ÿþï_ÿ| èh`¡�äM ~€èc�šxè<݈֗'¹Š+–…î8]Qý½QJÍß­¿‘ìég½Ð*¢ +M~ÄAóhÝOüe7¾`à/Ìxw¹¥üÅ^>NÃÁ9¡ÿ÷Ùý�ïäåâ¶ÞÈyÐÒ1aaüû’ÝÖ;$¹cCNÑnv«Z ]¹•¤M—]l±šŒ—ŲÄ>;€3}¤Qµ"ßáןP`!‰è_ÐÊÎYLûEƒ]O` +«Ž¦²Õd?"7hˆ??ñ›�^Ù'Ô¯ )$«W§3¥v�Ý€„æi„Š&!$Bëd—ª[¡‘iÆX{®Š«.ñ­0:³úA Nh@Ž�›ä4[-²BAUÓ +IZ¥Ñ#o üá·㛄¢PÞ0 ŵl⤗¢À�ÔÀÆr£h“‘5›xTÙ�óÎ&o÷ìÙ ÏiòÐ HØ,ꆔ+JŒa¸Ù‹!ft�ðtÙžP%-ñí + ôåÊT_™2?ÎÁö©%«k)Âa[.�f©Éx]C¡(d£¡°jå!¹™½¡ô{yÕ!im{Ó‚Ù4ÇÚÅòG£ÞÝò�ñ±;$ÒöÈv4p"E)u<¶8}„D¹• +ß9ð’tˆ^Æ;NT^â«á€Z ‘"¬ø ÐÔ)\ÀÖ<hœ³¹�R¢ìbŠ‘ A压/3U8–¢+3‚^@­mÐìÇPXÛ)]ª'g”£³ÜV„öµ”mA<íƒå1ÅÎz³W¿'¶®0(eK·j¥V²û|^Ÿg¾"S0Œ fï#¡Q*¥á\¼²;¢ª2úÇŒ‡ÁˆŸÂnQ"W&®âäY +BTÚ%Ýè»x®.™ØKk•J,aMíÙüÑW‹c©)Äíg k![‘>6&ŠR}È5(Õ’Ï ¸:ª?¸ zš)¥ÕôQ¤y:ÊÍ cbÐl:!n�Q7´ƒÜ�}þ‘äw~A¤ÖI ”Ñ5CÆ·ËÐÙIºäìª ôš:Ú¨€r—–‰©_±øÃf9¯|˜) ``I+Q>*…˜ •Úÿƒ“V¹‘ÙÕ2Ô±=¢�8´õªê¬J-÷Bf!)+`J÷Y¨û‘µf¡¿èÜ~ô*,ŸDv-Dǵk“6D²Øf9ó ià•Þ\³qï\È +ø�®I“µ03-QNÉ{ü(y tØTX©¦ÎÍX‚³‚áhz$¬¦äÅñ©ë«HU™bNò÷äᇨ¢Œk¡6ÛS(ö|£ƒ'žÈ†Þ&{Úv%’©ÕcGŽÙχÁôP�ÄI1Yeo¹™Ø=j¨E0ÔD1|óBrc1œ”J¨b혩«E¯%TáÊG»;ã›Çzþ.ø»¡G8Äqö�^žcJ‰ä{ ÂA+®ø|ÍÀ£üä“ ©y’w˰ç�S¿v]ž/E;›»¢çd.ö9øé„¸–»äÜXíé8�¹ú�ìrÇm‚hŸSød}(ªRænR$ir 3o–²WÒJ"µärç“CWÛ8üÕb`› Âå§~F †+¹¸€ÿëÁ†0›·¥gWQ𗧇†�ÑrPhdµiÁ¶ }5È{ðm…°Mú½Þkê^äƒv^@ÕëC@ªk ÞÂffÜéx°~P°È$„`£¢†GÈjAV%ûc±qW6ô—‰«-MÜÐQ ­uëûETùÓÄ(7ÆÍ ;Jp6ïo8ÍÔÐ’MvÄš{.V²]yê”íVÑ^!¼ m`¿` zÛ1˜Ø‰œÜMKxø�ð~�zˆã0+ûØîŠŒï.F…©“‚¹�"Ê(MôV*,_Õ¥¨R|ý߆°N†’[Vdeâ:[ßo_À¥àSØ,¨hfjcøåïþû„¢m 5ÓíæžÓ?Qô¡:y-ÁQ<]«³�7»B=ÊB‹ÜSRî0нÙ!üæ®ÍtÏ6æ+±WÐNúÈ�–lݺS®›{ìDEá #Byçt� ¬%�J#ÁÈ0×äž1YS¦«ÕæGÙ˜ž˜éãóý¢Ë¿%¦È endstream endobj 88 0 obj <> endobj 96 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 989.9921265 112.0078735 cm +/Im0 Do +Q + endstream endobj 98 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1256.8147 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 99 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1281.6877 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 100 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1420.1028 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 101 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1445.0425 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 103 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 624.2292 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 104 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 649.6835 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 105 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 950.3395 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 106 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 975.8118 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 107 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 818.0099 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 108 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1093.46 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 109 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1118.3995 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 245 0 obj <> endobj 246 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 227 0 obj <> endobj 228 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 222 0 obj <> endobj 224 0 obj <>stream +H‰ìÎÑmÃ0Aºÿ¦ƒ|Ž#JâZïØ©`ZÓ�—•ÊÜѼsua7£õInÞ‹Ýæ¾Æoó_ƒ·Ll –Š�Õr¯“[6vPKÇöké×î,ÝúU6Ö­¥KO ÍÒ¡—eféÎ_‹ÌÒ™wKÌÒ•ÿœqec¯Zú±åŒ+?K7zœqÎ8gœ3ÎçŒ+>K'úœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3®ö¬d­9ÜqÎ8gœ3ÎW}V°ÖœaθVµÖœa­j­-1+Uk‹Ì +ÕÚ2³2µM¬ð¬H­«QëÆ*Ôvb…gñÚn,];ˆEoǯ`í4–ª Ä"·±×üÚðkò ½&æøkJîÃÖÍ»k«ï>¿}ÑÆ�:ÊQË endstream endobj 247 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4971/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖwPÓwðú<ÈHa„„™°aDÊ1ÊR†!p(µ ÃJ±HA"­rà±l9…Zfá(Çë�ÂI(Å„–R)±b™²Žçy¾¿_‚Êpˆ¶÷üÞÿçs¯ûŒï/|€D�Ù´îü­0‚`Â?ÿ—À²V_õo!ªË×ýeÌÚ¼y³°°°È”……qѳ„EDEÅÄP( +fÝ�Ë€rbb¢¢"Â|Ü[Ûx.!Ð+Q1#..�Åb%%%¥6$ ('!.ŽA£ÄDAï„ÞÚ¶èE¡JJZ'+‹Çr�—•ÅÉHKuŽg{ìCc$$¥qx‚¼¢’2‘H"©ð¢ºæð �HD¢²’¢<�“–”À Åx¶7Ñ6Á0àB‰c¥pxy%¢Šš†¦Y[‡B¡èn@@m²–¦†š +QI�“Š£€ ¦½ÎÆ›¤°( +\rŠDU 2EÏÀИºÕ„F3åÅl�áÿœF3ÙJ564У�5T‰ŠrÀ†A‰ +¿a¢0l³°(Z\ +GP$©“u·›˜™[XYÛØÚÚÙÙóâ°¦ðlggkkcmeanfb¼E—¬NR$à¤ÄѢ›_Kƒa`Ã$¤ñ +$um=#ÚvKû�λ\w»{xÐétÏu”ððpßíºËy§½�åvš‘ž¶:I/-¶ ¦½fù ƒ•!(©’õŒM-lv¸¸Ñ½}öùî÷ âåÀšÂÿq``€ÿ~ß}>Þt7—6¦ÆzdU%‚ Ó^Ñ´E˜$Nž¨®cH³°sróòñ <q$’ÁÏÑ5eñבG"ÂÃBCúùx¹9ÙYÐ uÔ‰ò8É×ÐxW ÃHšzÔí6Ž»½}ƒBÂ"¿<s".>11)é亓””˜w"æø—‘a!A¾Þ»m¶Sõ4I0Mø� Å`qò*Zú&yù~y,6áëS©gÒ22³²²7 YY™igRO}�{,2ôS_¯�,LôµTäqX |¡+e e†ÆÊÈ“´ hV;Ý}?gDÇ'›ñ}^~AaQqÉ9�ÒuªPR\TX�Ÿ÷}Æ·ÉñÑŒÏ}ÜwZÑ ´Hò2Xp¡B«4 ^2”„´QÓ€fíDÿä`øñøSi9ù…¥Ê+*/W1™Ìêu©º\YQ~¡´0?'íTüñðƒŸÐ�¬išD9i ¼j«µL #…WÒÐ3±ròô aÄ~ó]nAiYeõÏW¯×Õ7°X¬Æui¨¯»~õçêʲ҂Üノe„øy:Y™èi(ᥠU[Ñ4¨e`–85 +ÕÒ‘îw(*îtÖÙÒ‹ÌÚ¬_›[ZÛÚÚo�t¬+P…ö¶¶Ö–æ_Y7j™KÏf�Ž‹:äGw´¤RÔp`ž+šÆk™¸´‰ldîàSXVu¥¡©¥½³«ûNOo__{ÝEz{îtwu¶·45\©*+ÌI�� +ñuw07"“ä¤ÅW6�×2IYE }S[×�ƒq©¹Å—jêšnvv÷Þ½×Ïá <€2¸®À%8œþ{w{»;o6ÕÕ\*ÎM�cìjkª¯¡(+¹¢iÏ[¦¢CµtöŠ8‘’[RQËú½£›ÝÏ_g ££#ÃCƒœ~vwÇï¬ÚŠ’Ü”AÞΖT•Uš&+«¤a°ÍÞÝïptrvÑ¥ÚÆÖÛ½÷†FÆMLN�Lo@ :“�ÆF†îõÞnm¬½T”�}ØÏÝ~›�†’,½ì<áab¤äH:T+—½ÁQ‰éå5¬Ö.öý‡£ã“S3³³ss\^æ×~�¹¹ÙÙ™©Éñч÷Ù]­¬šò‚ôĨà½.VT’œfé8áa¢$dÔõÍì=ü¿ˆMÉ;Ϭoébs†Æ&¦gç¸ó �yy²æð €RóܹÙ鉱!»«¥žy>/%ö {3}u Ô’qò†)‰W&Y8ï Ž:™YTqí·Î>ÎðøÔÌÜüÄyÊϳ5g±„\˜Ÿ›™æôuþv­¢(ódTðg #²2^ré8‡©B1±qó=“’wá'V[OÿÐøÔ,¸^öügÍyÙlÜÙ©ñ¡þž6ÖOòRbûºÙ˜PT–�¾Lx˜ÛvxE&¤V\kîº;869;\ëò¼Âló³“cƒw»š¯U¦'DyîØ�¾Î—d"(¬¬²æÞÏŽ%眯-ã OÌp Tí¿žíé“îÌÄ04­ú|Nò±Ïö‚qj)ËbQ"/d‹kFÔÞú¡+fj~ù•¦Nв©9¶±®ç6@››MëlºRžŸ +ÆéúáVmâÒE{¾fº4;�€ˆøôÂÊ-ÝýC�f¸�Ÿ@ÛXÏöìÙ“ÇÜ™GCýÝ-7* Óã#<ìhºË –‰KË«�5ó:pôdö9fC[/glܲ�‡Á´§OÀ¦�pzÛ˜ç²O=àMM^Z|© |šd5¶˜;î þ*9÷Çš_:Øàa +Óàq>`wüRócnòWÁ{Í·h(Ê€ÔK2è4qJš†.>‡¢OÿPVÛtûχãÓÜÇ‚j¯i�¹Óãÿ¼ÝT[öÃéèC>.†šJ¸—�þ@§ilµk_hLêÙ‹W›ÿ蚘™‡d‚��ÍÏL õÿÑ|õâÙÔ˜Ð}»¬Œáã\"ƒ "™jíêvâLAÅõ–îûÃ`ÍÖ2Þ8çg'†ïw·\¯(8s"Ì×ÕšJ&.y6x2øÑpÛ—VXY×z€ ×lqÑÀ Üi­«,L‹ ßï?Ëeà9#é˜Ø¸ûƒG£èrýÍΨ@àù ŒrznÖ_.φ¿»�‰ zЖÉ$ +ÍÖ=àHBFqx4 ™× ^4H6ž�ªâŒ„#î¶4 +‰°ŠL…=´‘‰™%U¬ö>ðhpy¼à‚g£¯�UU’™ =µ••2蟆©=02)«„ù®eÌ’¬¤È@º�)ôoc™®©==�‘”uŽÉºdÓïB6 d·XÌsYIŒ@º½©îJ†/ b$e¿Yv#ˆ/Ã<—mZ*ŸÍêÆ[ìw'cßj¬Î¥²MËež/dãïF6þBæùFYiuc{ð]ÉÙ�Õ¥¯•©.— ôãÄÿ<-—©®.3{ß2³ ÌÁúKû~dGx: 2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2Döÿ*³÷ b¼/#ÈÓþ(3}ß²ÿ[æñPïk?¯WYgŒ™a0KËLLYf�B–ÊÒ¡1Z¤c­.GGЍN‹¦s«ƒn–:Òjk¹)„’�NÊ2%„¸Œdgkéu¿¿ßŒBN÷DÜÏÿÏóz¿>Ÿçy¾_éÉH“ÉGÞ�Î&Ùèû‘ÁÉd¤/’¥å?{õz®È^¿zVœ›ö?ÉXŸÈºæ†¬ëk2ÙwÉØ§Òr8Ïê玬þ''í{"ÙwɤEdÞ»Ùñÿ²xöno™ôçdTC+–w;>5‡Ãdü¹ ã2.''5žäͲ2¤NA†T$QVN^Aq©ÙsM–�äådÅ ’‘Ÿ“© K¦W`xlJöʺ–NþÀðl“ ð;[ê*f§Ä†z1-TâdX"…nÁôÜ“|«¨¼–‘Íæ©…-DÆ«-/º•¶Ë“iA§±“ɤX‚–Á +G��¿žLÊ,,{Éëè› ²¾Þ˲Â̤“¿îôp\a EÀ"¤&“ašúæn;BO\Ì((­inïíŸÕç ~œú{Û›kJ 2.žÝáæ`®¯IÀL"dx =³5›>uþƽ'ÕMm½‚¡Ù\h†½mMÕOîÝ8uðçÍkÌô4ð€L|™¤ZU}ÉrûM~û?{ýîã�oDÏÓ,¡}=No_<¾{ýìïûý6Ù/_¢®Š–“O6O\RVA…¼ØÄf£ÏÞ£ Wïo™Ø|YNMÇxÕ:èS›–ÎX0h³ed3°àh€Ç |i×­2ÖQádç‹M$ƒNèÔ‚³‘”ù ´¦©­G08òntv&íÃè軑AAO[SMéƒÌ$p4 C ?›“È ƒ� 7ÿƒQçÒóW6´ÂqB¦}s¶°eP˜­ •�óÓÏEôws€�8gŸÈÆÎ^Cw¹�‹ï¾£\ÉåTÔòÚ{ƒÚ·fƒ¸ °AAo;¯¶‚“{å�£û|]ì–ë«ùéhŒ-§‚òB0hÎ[‚Âc’2 +žV5¶v�I¡}+8¸6¦ XVõ¤ #)&!Gâ’3î—TÖóÚ{øýƒÃ#ï„p"M›G¤÷€kdx°ŸßÓΫ¯,¹Ÿ‘w$Äg#S?iÌàÿ¶¸§‘µ“gÀ¡ÈÄ«9E¥U -íÝ|ÁÀÐ0áÁ�–DÅPŸ‘ááÁ¿»½¥¡ª´(çJbä¡O'k#8LøøHö1N"EßÌÞÅ'„s1=¯¸¼º¡¥­«÷­``pÐ �õnZƒ6Cƒý~oW¯¡ºœ“—~1&"ÄÇÅÞLŸBœæXœŒ*™flÍt÷ßìtJFþ£òêWÍ­ݽü·‚þþ���AXCÓ’°4éÞöõvu´6×W•ß½™|êè~w¦µ1�¬ŠAL S§¤,J‰DÑ7µÛ°5042!-3¿¸ìEm#ïM{gwOo_ŸÏ;C�}}½=]�í­¼ÆÚÊRÎ݌ԄÈÐ][6Ø™êSHJ(YɉaŠâ”FbTÈ:F–®>ÁaÑgÒ2î>|­®klnimkïèìììêž¶ jФ£ýMkKSC]·¤(ïfê™è°`WKC² +)=)Ìq¦5uMV2Ýüö„GŸI¹q»àQ)÷ÅËú†ÿ45óZZ^Cj�¦àâ–^sScC]Í îÓâû¹é) Ñá!~nÌ•&ºšÄ©,3 �VV£˜Ú°<¶ï ‹:}éZVÞƒâ’2neUÍËÚººúúúW3(¯««}YSUÉ-+áÜɼzñtdXˆŸ;ËÆTŸª¦ŒF|nÙ˜i2òXž.Nv–&úÚêD Ù¼©,¢‰I@h8y‘ž±ùª5¬MÛü‚öür ôpXxD›}db³#"ÂÃ:°/$pÇO[Ý]œì­ÍŒt©d ÙT`ãÑ”ðjZ4ƒ¥æ+í™ë]ݽÿñÓvÿ€�»ƒv‹ü•« +ܵ3À»ï6o÷MëÖÚY›ëëhª©*) ¾�š ¡ ¨BR§.6XjfµÚÞ‘µÞÅõGwO/oï-BmýJ‰Ê¼½½<=ÜtuYÏr´_mij¬O£�‰ÊX”lª!ûhŒ&-'�QÂ/P§Òô ML-¬WÛ®ùÁq-ÓɉÅb9O[ ØÉ‰¹Öñ{ÛÕÖ¦Kz:u’ªZ^l% ö—dB4°¡R²‡'‘µ-Ö£-]fj¾ÂÂÒÊÊZ¤•_©±:++K‹æ¦Ë–Ñõh‹4É$U&oå—À 4xC�m²HŒ’*Q�¬IÕ¦-ÑÕ7 Ó CXFÓ�°’Á Ó ôt—д)šä% +)+-)!ÜÊ/�‰Öà{1``C¡qªÒ‚…êšZ +•ºh†¢R)-M õ… ˆx�B.�ä_�‹©lÀ7„< +�UÄ)«â "‘$Ô‚iITL$ðª*Ê8E€…”ûÈõwÀD‰ +Ù€qr€N�Á`±ŠŠŠJ3h�Åb0h°¤@Ž"®¿6fÄ&ÁÉÈ<‰DÊÏX  !''+¨æKˆ%—È6(ÓïÅ ºù’’RRRÒ°df aÐJRr>ÀX_É%bƒ�ÒI|3�fb€ê¿;‹dw!9ä: ó¨ @fBœE†»à޹ހ‘g!»Ž€2WQ×�ÔvË(À£Îàf endstream endobj 223 0 obj <> endobj 248 0 obj <> endobj 249 0 obj [0.0 0.0 0.0] endobj 250 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 989.9921265 112.0078735 cm +/Im0 Do +Q + endstream endobj 251 0 obj <> endobj 252 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4971/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖwPÓwðú<ÈHa„„™°aDÊ1ÊR†!p(µ ÃJ±HA"­rà±l9…Zfá(Çë�ÂI(Å„–R)±b™²Žçy¾¿_‚Êpˆ¶÷üÞÿçs¯ûŒï/|€D�Ù´îü­0‚`Â?ÿ—À²V_õo!ªË×ýeÌÚ¼y³°°°È”……qѳ„EDEÅÄP( +fÝ�Ë€rbb¢¢"Â|Ü[Ûx.!Ð+Q1#..�Åb%%%¥6$ ('!.ŽA£ÄDAï„ÞÚ¶èE¡JJZ'+‹Çr�—•ÅÉHKuŽg{ìCc$$¥qx‚¼¢’2‘H"©ð¢ºæð �HD¢²’¢<�“–”À Åx¶7Ñ6Á0àB‰c¥pxy%¢Šš†¦Y[‡B¡èn@@m²–¦†š +QI�“Š£€ ¦½ÎÆ›¤°( +\rŠDU 2EÏÀИºÕ„F3åÅl�áÿœF3ÙJ564У�5T‰ŠrÀ†A‰ +¿a¢0l³°(Z\ +GP$©“u·›˜™[XYÛØÚÚÙÙóâ°¦ðlggkkcmeanfb¼E—¬NR$à¤ÄѢ›_Kƒa`Ã$¤ñ +$um=#ÚvKû�λ\w»{xÐétÏu”ððpßíºËy§½�åvš‘ž¶:I/-¶ ¦½fù ƒ•!(©’õŒM-lv¸¸Ñ½}öùî÷ âåÀšÂÿq``€ÿ~ß}>Þt7—6¦ÆzdU%‚ Ó^Ñ´E˜$Nž¨®cH³°sróòñ <q$’ÁÏÑ5eñבG"ÂÃBCúùx¹9ÙYÐ uÔ‰ò8É×ÐxW ÃHšzÔí6Ž»½}ƒBÂ"¿<s".>11)é亓””˜w"æø—‘a!A¾Þ»m¶Sõ4I0Mø� Å`qò*Zú&yù~y,6áëS©gÒ22³²²7 YY™igRO}�{,2ôS_¯�,LôµTäqX |¡+e e†ÆÊÈ“´ hV;Ý}?gDÇ'›ñ}^~AaQqÉ9�ÒuªPR\TX�Ÿ÷}Æ·ÉñÑŒÏ}ÜwZÑ ´Hò2Xp¡B«4 ^2”„´QÓ€fíDÿä`øñøSi9ù…¥Ê+*/W1™Ìêu©º\YQ~¡´0?'íTüñðƒŸÐ�¬išD9i ¼j«µL #…WÒÐ3±ròô aÄ~ó]nAiYeõÏW¯×Õ7°X¬Æui¨¯»~õçêʲ҂Üノe„øy:Y™èi(ᥠU[Ñ4¨e`–85 +ÕÒ‘îw(*îtÖÙÒ‹ÌÚ¬_›[ZÛÚÚo�t¬+P…ö¶¶Ö–æ_Y7j™KÏf�Ž‹:äGw´¤RÔp`ž+šÆk™¸´‰ldîàSXVu¥¡©¥½³«ûNOo__{ÝEz{îtwu¶·45\©*+ÌI�� +ñuw07"“ä¤ÅW6�×2IYE }S[×�ƒq©¹Å—jêšnvv÷Þ½×Ïá <€2¸®À%8œþ{w{»;o6ÕÕ\*ÎM�cìjkª¯¡(+¹¢iÏ[¦¢CµtöŠ8‘’[RQËú½£›ÝÏ_g ££#ÃCƒœ~vwÇï¬ÚŠ’Ü”AÞΖT•Uš&+«¤a°ÍÞÝïptrvÑ¥ÚÆÖÛ½÷†FÆMLN�Lo@ :“�ÆF†îõÞnm¬½T”�}ØÏÝ~›�†’,½ì<áab¤äH:T+—½ÁQ‰éå5¬Ö.öý‡£ã“S3³³ss\^æ×~�¹¹ÙÙ™©Éñч÷Ù]­¬šò‚ôĨà½.VT’œfé8áa¢$dÔõÍì=ü¿ˆMÉ;Ϭoébs†Æ&¦gç¸ó �yy²æð €RóܹÙ鉱!»«¥žy>/%ö {3}u Ô’qò†)‰W&Y8ï Ž:™YTqí·Î>ÎðøÔÌÜüÄyÊϳ5g±„\˜Ÿ›™æôuþv­¢(ódTðg #²2^ré8‡©B1±qó=“’wá'V[OÿÐøÔ,¸^öügÍyÙlÜÙ©ñ¡þž6ÖOòRbûºÙ˜PT–�¾Lx˜ÛvxE&¤V\kîº;869;\ëò¼Âló³“cƒw»š¯U¦'DyîØ�¾Î—d"(¬¬²æÞÏŽ%眯-ã OÌp Tí¿žíé“îÌÄ04­ú|Nò±Ïö‚qj)ËbQ"/d‹kFÔÞú¡+fj~ù•¦Nв©9¶±®ç6@››MëlºRžŸ +ÆéúáVmâÒE{¾fº4;�€ˆøôÂÊ-ÝýC�f¸�Ÿ@ÛXÏöìÙ“ÇÜ™GCýÝ-7* Óã#<ìhºË –‰KË«�5ó:pôdö9fC[/glܲ�‡Á´§OÀ¦�pzÛ˜ç²O=àMM^Z|© |šd5¶˜;î þ*9÷Çš_:Øàa +Óàq>`wüRócnòWÁ{Í·h(Ê€ÔK2è4qJš†.>‡¢OÿPVÛtûχãÓÜÇ‚j¯i�¹Óãÿ¼ÝT[öÃéèC>.†šJ¸—�þ@§ilµk_hLêÙ‹W›ÿ蚘™‡d‚��ÍÏL õÿÑ|õâÙÔ˜Ð}»¬Œáã\"ƒ "™jíêvâLAÅõ–îûÃ`ÍÖ2Þ8çg'†ïw·\¯(8s"Ì×ÕšJ&.y6x2øÑpÛ—VXY×z€ ×lqÑÀ Üi­«,L‹ ßï?Ëeà9#é˜Ø¸ûƒG£èrýÍΨ@àù ŒrznÖ_.φ¿»�‰ zЖÉ$ +ÍÖ=àHBFqx4 ™× ^4H6ž�ªâŒ„#î¶4 +‰°ŠL…=´‘‰™%U¬ö>ðhpy¼à‚g£¯�UU’™ =µ••2蟆©=02)«„ù®eÌ’¬¤È@º�)ôoc™®©==�‘”uŽÉºdÓïB6 d·XÌsYIŒ@º½©îJ†/ b$e¿Yv#ˆ/Ã<—mZ*ŸÍêÆ[ìw'cßj¬Î¥²MËež/dãïF6þBæùFYiuc{ð]ÉÙ�Õ¥¯•©.— ôãÄÿ<-—©®.3{ß2³ ÌÁúKû~dGx: 2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2Döÿ*³÷ b¼/#ÈÓþ(3}ß²ÿ[æñPïk?¯WYgŒ™a0KËLLYf�B–ÊÒ¡1Z¤c­.GGЍN‹¦s«ƒn–:Òjk¹)„’�NÊ2%„¸Œdgkéu¿¿ßŒBN÷DÜÏÿÏóz¿>Ÿçy¾_éÉH“ÉGÞ�Î&Ùèû‘ÁÉd¤/’¥å?{õz®È^¿zVœ›ö?ÉXŸÈºæ†¬ëk2ÙwÉØ§Òr8Ïê玬þ''í{"ÙwɤEdÞ»Ùñÿ²xöno™ôçdTC+–w;>5‡Ãdü¹ ã2.''5žäͲ2¤NA†T$QVN^Aq©ÙsM–�äådÅ ’‘Ÿ“© K¦W`xlJöʺ–NþÀðl“ ð;[ê*f§Ä†z1-TâdX"…nÁôÜ“|«¨¼–‘Íæ©…-DÆ«-/º•¶Ë“iA§±“ɤX‚–Á +G��¿žLÊ,,{Éëè› ²¾Þ˲Â̤“¿îôp\a EÀ"¤&“ašúæn;BO\Ì((­inïíŸÕç ~œú{Û›kJ 2.žÝáæ`®¯IÀL"dx =³5›>uþƽ'ÕMm½‚¡Ù\h†½mMÕOîÝ8uðçÍkÌô4ð€L|™¤ZU}ÉrûM~û?{ýîã�oDÏÓ,¡}=No_<¾{ýìïûý6Ù/_¢®Š–“O6O\RVA…¼ØÄf£ÏÞ£ Wïo™Ø|YNMÇxÕ:èS›–ÎX0h³ed3°àh€Ç |i×­2ÖQádç‹M$ƒNèÔ‚³‘”ù ´¦©­G08òntv&íÃè軑AAO[SMéƒÌ$p4 C ?›“È ƒ� 7ÿƒQçÒóW6´ÂqB¦}s¶°eP˜­ •�óÓÏEôws€�8gŸÈÆÎ^Cw¹�‹ï¾£\ÉåTÔòÚ{ƒÚ·fƒ¸ °AAo;¯¶‚“{å�£û|]ì–ë«ùéhŒ-§‚òB0hÎ[‚Âc’2 +žV5¶v�I¡}+8¸6¦ XVõ¤ #)&!Gâ’3î—TÖóÚ{øýƒÃ#ï„p"M›G¤÷€kdx°ŸßÓΫ¯,¹Ÿ‘w$Äg#S?iÌàÿ¶¸§‘µ“gÀ¡ÈÄ«9E¥U -íÝ|ÁÀÐ0áÁ�–DÅPŸ‘ááÁ¿»½¥¡ª´(çJbä¡O'k#8LøøHö1N"EßÌÞÅ'„s1=¯¸¼º¡¥­«÷­``pÐ �õnZƒ6Cƒý~oW¯¡ºœ“—~1&"ÄÇÅÞLŸBœæXœŒ*™flÍt÷ßìtJFþ£òêWÍ­ݽü·‚þþ���AXCÓ’°4éÞöõvu´6×W•ß½™|êè~w¦µ1�¬ŠAL S§¤,J‰DÑ7µÛ°5042!-3¿¸ìEm#ïM{gwOo_ŸÏ;C�}}½=]�í­¼ÆÚÊRÎ݌ԄÈÐ][6Ø™êSHJ(YɉaŠâ”FbTÈ:F–®>ÁaÑgÒ2î>|­®klnimkïèìììêž¶ jФ£ýMkKSC]·¤(ïfê™è°`WKC² +)=)Ìq¦5uMV2Ýüö„GŸI¹q»àQ)÷ÅËú†ÿ45óZZ^Cj�¦àâ–^sScC]Í îÓâû¹é) Ñá!~nÌ•&ºšÄ©,3 �VV£˜Ú°<¶ï ‹:}éZVÞƒâ’2neUÍËÚººúúúW3(¯««}YSUÉ-+áÜɼzñtdXˆŸ;ËÆTŸª¦ŒF|nÙ˜i2òXž.Nv–&úÚêD Ù¼©,¢‰I@h8y‘ž±ùª5¬MÛü‚öür ôpXxD›}db³#"ÂÃ:°/$pÇO[Ý]œì­ÍŒt©d ÙT`ãÑ”ðjZ4ƒ¥æ+í™ë]ݽÿñÓvÿ€�»ƒv‹ü•« +ܵ3À»ï6o÷MëÖÚY›ëëhª©*) ¾�š ¡ ¨BR§.6XjfµÚÞ‘µÞÅõGwO/oï-BmýJ‰Ê¼½½<=ÜtuYÏr´_mij¬O£�‰ÊX”lª!ûhŒ&-'�QÂ/P§Òô ML-¬WÛ®ùÁq-ÓɉÅb9O[ ØÉ‰¹Öñ{ÛÕÖ¦Kz:u’ªZ^l% ö—dB4°¡R²‡'‘µ-Ö£-]fj¾ÂÂÒÊÊZ¤•_©±:++K‹æ¦Ë–Ñõh‹4É$U&oå—À 4xC�m²HŒ’*Q�¬IÕ¦-ÑÕ7 Ó CXFÓ�°’Á Ó ôt—д)šä% +)+-)!ÜÊ/�‰Öà{1``C¡qªÒ‚…êšZ +•ºh†¢R)-M õ… ˆx�B.�ä_�‹©lÀ7„< +�UÄ)«â "‘$Ô‚iITL$ðª*Ê8E€…”ûÈõwÀD‰ +Ù€qr€N�Á`±ŠŠŠJ3h�Åb0h°¤@Ž"®¿6fÄ&ÁÉÈ<‰DÊÏX  !''+¨æKˆ%—È6(ÓïÅ ºù’’RRRÒ°df aÐJRr>ÀX_É%bƒ�ÒI|3�fb€ê¿;‹dw!9ä: ó¨ @fBœE†»à޹ހ‘g!»Ž€2WQ×�ÔvË(À£Îàf endstream endobj 221 0 obj [/ICCBased 77 0 R] endobj 34 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 35 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 36 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 37 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 44 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 262 0 obj <>stream +H‰ÔWm�· þ>¿B@€âÅΉõö1>ÛAƒ6Ap Ä@[ÉÖö%]Ûˆ/@þ~’ÒŽn¯Æ¦h¿Øï 9ÅׇÔÍ··îæ/·Þ={~ë–›Û;ïŽôÏ=Þ/7_�õöañ+WvìÃZRu-¤5§èJ¥µåâ>¾^Þ`‰¯ÁÉo–ßVM‚_±€ÖȱoƒRiºKϼ½ë;üJMvÈpw·ß,ÁýU~Æÿ¯Ýò ärY È%nkåæïùònÉ¥Bƒ†÷ãr·|·<ÛCÊÍÍ¿fÚ~/¢öo–¸npúøÍE¯§àQR^#eÆ9ç$NnÿnùëÕ·Çk¿&wõÓž¿~øé­ï¯ÿ¾ÿzÙ†­ÍA¦§âöÿÄr²^ÌÎÝÓ?º +^Ï—Ó)™� îZc)ÍE†×sÓ³¯¾ D™ÚõþçåÅ~ù‰jr”=ÎÔW¸õ{÷þSáØ|¨® µ"ˆ®Ÿ�è! +F(vÄ+¯ÂÞ ºßÍcTà蓹¬PwY©·ùË$.KH–(îÈš«/üíËP^Ú'–OÆ~©ÿ~�“¹ÀŸ8Kœœ¹œ;9Ä©YÒžNÆ~æ×ÆR?ü4“"µ5‹o>c#§²Ü ƒ-¨OŸ³aß!x=5£VÀg�kCå+~az6K¢¿]rMklÞ›˜ÝÌè’‚/®Ÿjñ‹[ž½r7w÷Þ=Ü»¯Ü8—%û%k¼œÊ8µÍø~jR+Ó©ÆèrÈcWÀnâÐB£íXztì'ËÕŽòî+ék¤}Ííÿ|óò�wÏ?t_‘M.¹�"ºU@¬‘ð[á‹<a\†b�&A Í–'¬ãÆ¢TVåf§•Bu§³ÈÁ -nè3‡å Kä´ŠÐæ™¡o”M—Öí¬£ëÑç¬ãÆš 9±†ýã¬ÍC]ŸÁ8,OXÇå~Š +â´Rz‹ÿDw'…"¹J�×T˜Jüÿ…Ÿ¦ð‡(CH4-�{€*å3X°¾®u¤æSžâ"ôX{Î:n,óm|ÄÒ� ÆY4|ú Æay‚œèQ-!=b +‚Ï›¤òZcÙÎ:1º>}Î:n¬É�kØ?Î:yhè3‡å ë,ü¡®¡p +²;”‹Tûöº›—Àq�g… _Õ°¶ªÚðŸ‘è¿Ï‰`9qyŒJàßÖ†£ËÖ$vžÖ„>.» +�’L»–ávhš‘NT ’ÒÇg{O Àßš¶C’UzD?eгVߥVò£3du²ŸpX:ÝÇA›ª]”ŸºË#÷…É}ÑÜ÷Éï|á{ºð=_ø^.|¯¾· ßÉ_Z@—„K .ù�.9‘.y‘ò„|mͶV@’×¾× +ê*»ê‹ÞÈ�¹b¼¨®FÁINÀ2¾‘kHŽBSQï0‹×Lmä8ʘ|‰¨¤ 7˜œå˜>p»’¹ÅäbbÇ-ÇdGìÕó§­;ëeÎ{Ö<]¡È®Pdl²Ö™kP¼ÊJomß_Çè®>|¼ÞaúqWÿú›�åÃuqW¿¹?êÕLºŽÝؾ¼ÆÊ~ýx�{Û‡ëbqõ«û4îˆW?¼?Ü¿~Ð=ÿë%ÌhC�^^x 9ò„›d3îx¼_¥ÚõWÃ*X!Syçcu´ÕVž€dÄ?£qJ(QýÑ7ÐÙ›°Y¸{̵HéŸø8h¬nn’Ò+~Ó³ +0XA…¥£œé^ì•d0F4 wD>èÌ Õw8‚¥Oî‚ …X K°Ab/ù"S-(´ì PJ×MIÌ.bæ¨e#y£ ž´H˜4›Ña¢v!«Ø$§A°¾WÕg#‹î3²×€êÕN)éÜ{˜–µl�‚òL’‘’öÚÞ¼- ½Ù�…d´”·Ál‰*r/ßA'U(hX;žPê©î° q�ûÖj†¾ÔptÄØhÖDSdM.Š E,4²×jéä®*T£äD�Mƒ`¹¡8Âõ’Öiä».D¶À\;¡S‡~~'�2#æAMZ•a¯&þ°(¥GíÝtÒ½]×ɪ'“š/è6K®÷�&5Ò€õž¦yK +½U¬ÖêÇýíh¾þî‘6n#-b¤�ÛHæ‘öÉAI [Qœá‘U6íy›ÇC‘æI�”µ�t´ÈfhìME,Ý^æ«L�)Št¤·”iè“Y ÍCŸ¶lÁ +m›AÑÁkÚ}zxF(é\ùÞúlŒÎêý>FW;ØÆh`jæyŒîc`£«�}¦[Td߯è¡z£ÉåÝìy½$z¹[A�îr¹Zx¼æ- +Ø eJ‹eÃL•ËÆ9ë8³`}ì,L<,, K�&E ]ð@©"¢QÞ„ÁÍ™¯÷˜s–ÈAÔ5DÊÀ'8 +©@<�\྘Šg¬ãƦn×]ïÞ.8$×Ö`˜%y*áÿüº›VÀ“˜‘[Ý�š ’!ëÝòì•»¹»÷îáÞ½xå†ç#©äGžï¬YCiË4&XÄy2H8=òØKä4Ìw¥;)¦ùJ(ê@ÒÕøßìW9’#GÔñ +|`Þ‡J3¾`…¥£q„š8ÿ7[w�̪¬êiJÚ +P�TTÆå¾ð²s…¶Úó¼C{ytLÞœ—êhú¥¢xÅ ô¯F<fLýyl_dßî4œ +.ˆq§Üɸòá)]Ëc]�-†•®ËË_‹ÛÚ3�kµ«MËytSÎ�‘FÄkŒ±à‹O�k—IÚr«Oã}¹j^@à  @6 À"]s†6³Úé1$¼Ÿ Ÿ_þÓœ|³×§ìõ�ÆùÍUŸrÕ»žßõü®çÆ‹±oEq\¼ùï_èMÐ9�JÀ¡ ñýþýõmY§côX[1AjÆ<¯¹Ÿ4GN¸Û³s«‡xñ¸ ¤÷t} 7Ò�ø*´ù*aQ >hã§LÀ/´£8ß<µî)[ÅdQÒ`:{Vq“B@‰²=w‚¤ì?ÀU¡¥s2äJ‘ÚA!pÈ×`z¦„g”Q�V¸YÁMÈ1ŠÜêà�Þ‹uT%‘êéä'®‰¾rè§y�yž�çmžÁ Îùqæ^ñÁd1'�ŒøÑbd@ð™Ð|V‘å„€§”�Ó"þ.J\v“«S1Yn¡JeµÆ³7Ù‰ª¢KxaõCe6Š[ tž¢3d}j:;W•¢Ö$5©&©K�°~¨êЉ8ƒýx3$5Ô¬s̺ +0º&ï_ŽŒ.èkSa„å[79K¡Ú¬R¬*!'é˜Ñx2PV�s‘@"Û4r_Å/X Ážð´�³—I)gr±u·$¤¢K¤dKÐ97/I›³�cËzôY‹ ØÊ_`¤�ˆÐÚÑIíF•ãK…ZLœ“ÊŽ=^uö +:ÊQcåÁÒUpÑ!¬LVœò,íhâ& ø,aÖ(K +Hdhpv%*q�A7FP^­ùÚ“ñ@ÕjU�Ç„Õ�Ä,3§­éBèA†@a8‹E“ƒ–eŒŽ²_;‹‹4«2kÈR�ËÍV*�ÌiWÎPªÝÊ�Wñ¢ <æ”õ^³ú—ÓCÜI”SДª�A€•ŽOR�º)½¬´ƒ‘F½#bâ…:jšÝ~â­½cíG2º·d Àhd;€A0Š5”ø žFoàœµãk¿ôNT‹ƒ#àÇxja�†>éÍ€v³Ñ§ø£{Ýo¡)ÌÌÄ&�Íkî4·ƒßf�‡wêytU�â£~…pÍ/2Ž-«éPH)ÄÌdo°tNã\ƹ56ˆ«#çX-’·sc)iü¯5@½6‹94ΰC¬~÷B—G…bÓQqÌúÅ9Ǽx½‰p•wF<¬!Äb8–ÑÆ—U×£Løæ>ø3’›²Õ�Í2Ò$n¼[;L¶I�èmúÐà{¬Ð¬EngÌ¢±Ú¢ +‚¼ÃÊnàtÆä`& ±øƒ»^ûÁm8GWö«Œ§õS¤­Š’nQ¬Mš¬¶:�ä»5CAZ³9ÁÈæÖÎÊ9Ú�äÍA“�Ä J�ÕÁQTðMIÖï‚%[uæ1슽×&½$–)ç2bKÇ‚ã �Ûh‘u¦ q|dä-ÙDuÙf/×âGF:ls*fÌ“®W.W~Z��¶€FgÍê;‡žuΖ`tUgÔ±ëN+vYб;kºì½ }7`ÂÉ^ß~ÒÛÌ Þð’üøýŽdQþ£¼ŒÆ3Ïr#•sƒ¦Yc8—˜'q� {œ<‹Ã‘7vÄ$&¤ØÒÄiCaé©8·©«ÆyPé‰à Ê@A�M1ϞѼc«!YÊv«zä¦UvFçja¯�Ç×~±‰lÜÈYŒãŒu’í3ì�Óxáëfçq¥mÇ�ÍÎîÎÉÿû0BU�G,×ÏÄò;Öao¦f!ÄAa\š÷©HŽU ß*bû“¹�MÿòÖ¿—»J8ë‡ÒâP«ùñ #å_¿7#ét¼Ð¶êÕ7ÉØ-Óƒh› +wô®©ÆÒVÕlóÄXl¶6îü¦wM¤Ä•ÅV\ ÏÒó±\séŽáX®‘c6xËãNDš—#_>U0¸]IHÃÉ•9懘Á^Ûû3œ�}Ñ2…­­Zf.Ú»–©v1»%8p•‡SËìÀÐ2vv÷ª(y¡.•kµ±„°1AHúÝDÀ#p¦ÂO²v]Îò›"ð‚lBu×x—ЭÞGQ0[=¢W9å„âê‚,jª¿nWd»EDŒ‰©µa=K÷Hù€¾Ca1Í£º*š¨¶»"ÛŽLï¸Hý÷þ ‘p÷?oèëž\ ó’ˆ+ª°,ÿ=–¸gje-`ÜpÃüzûõ÷û/ÿùâîß¿Üûý>âŒÉ{_â<‘ån™åV8P½»¿˜‹Sp‰Ñ� Жm)®´Ñ¸WeÅ=bÇà¹[^d`=nó¸çqž-óêÚx¦pµ÷3Ì]�-º—Œö€ý„èrBf~#Œ¥óT¥q¤ÈY´{AÒãÉ•èø•½/HX†Wù%ðº}€¶ sÙi­Ø‹\‰ðœŽ Í ø¹X9]!& 1„"ªŠ�U”£Œ«N€¹ +XH.�…$¡PÛa\ˆrãNV^àj’• ;ZžÅQ%gh[¡=$;4#"dÕë�<øâhúÑ +¦¤B‡w€ÐÕ~ +¥Z[Ãvñ~�ø»&  ÌÚ®^â4i%€Û[´Û³±± JQ¹fç ñ>ü7T,kø‡†Ç&üã›yx�”}ÿô…~AœÉÊ!ð>øôjRº<)N;gh3H��O ~Cò²i©PœÅçÉNVÎ=¾röæD b׋ZŠ@q¾@²SŸh>@°—eÓ®�ÃZ3 µá×’�VÒm´¦ÊÙ€ÜÔe(©Q,ÝÂ8C›AMvÀàj„Žq‘ qJ2oÞG·ž!ÙA|”í1Än¥`ä hó>gh3¨(\ôv o€µ€ž È“ÏÐfœç‡�ÒôXÁ] ¨(Ãp›~�!ÙAT?}ä«×á;†¾,l”ÃfÚ‰y…d§[š‘&¯úP£IÃT³-Â=C›AÖÍÞÒ�ýŽÆ ¢[4‹®“Ɇ�34€±kPë +°ûà‹0hÛyJvÎÐfP®F7.鱤U–@*Ñ€ h}Ø9C²vb#ÿÕ`†³Ò5žÓ,�Ò„–�ä«SÞW¨ J긢F{Á„J#ôA¿à^´‡~…f +Y9€œO£Ãü?Ú«$GŽ# Þëù�¢b_®ôBñ^˜QŠ4ü? 3óˆÌÈhÍI4;¬3=ÃW3?9Úˆv¯Ç'è½Lß¼Òv¬8\ßGqú,לÌr:rÃÙ…£ÿO芡æ,p1Lú xM{ar›"é½ Je$)�ת3 MÃ�u + ŒéºA²ƒ¢Ók#û4–D£ã8ž8«h‡Þõ°y~Š•'Éx«êzúÒ ¬G»h÷.Û!Ù)V2œ²–±bãÀP§HJ4 Ï8ß¡·UG¯‰…to“Áh?6“ÂŒÏz›Î-cšÕ(q€2É?´Iåœã˜Œij“¢�„¸4”F¢)í°úIÉ +j™öô6(ÝH@ƒOÁªÂ�}6Hv0øý`C‘qF­6cÞ®ÖÌ£™(Æ>±A´“µW ò" d\ªŽZ‡¼JC†Äb~m�ì”AH~ôWn–@(œ Gó‡b:ÉÏûÜ¡¡î<áÚ& …“X¾˜pôÔe¬±Cï # ›ÓÐwMW òà ж9—M3}‡Þ”Ó„LÆQõ4p)2ýLmšH¦WhؑĪÁ¨�ú× @a!à§j�Þß¡!›Ã€b¯iW?DFcS³¶ÓÎ +½7¨ž� +¯šr5 ¦iU€9(6h*{QRÿÒ§� 0n™Ú¿Pø]vhݺ«Å zû$.Œ +Õ+©ÍæÝ�Ž^�ߎ?>Üñûƒ"\}9þ=—³çJ›ø“Y¦ºkÏÇëûãçoÇO¿~øãÇÇñË·ãëã+Ì!‰èåRŽÎ,ž´ç8Λ?!ïp‡èÚѳ³ìŸ€kŠ#B±Cï *p¶‡¼BLÎ&œŸÊ$ÔR�ó:x=>A0Ò!¯æV¬ä´§z~jžçm`y‡Þ´¸qBÓûù©3>ó:x=>A&1¨ŽÑ´aP2ÖŸ±õ„ø½à¥5'¤ï¹ÞÐ þp�–‘d:l‡Þ THxï£}†cŠ´0ÄB9oË2Œ¨Þê�ÚH E2ìŽPÍtF|eÇù| åXèÐT9N?+ù/†¹@­�âÁ)‚ÔLÛ +3(ãBœi�B‰Rtåê½UŒwÙÜJ]¥·Aïºâ1¡Eï±Öä+ÊÙvVÞ ž+éo�Ë1É+ÖÎè_pÔ±Íñ%>…Cƒá»-˜ÜG±Œ¡þ½í] �.>L¶1ð]9*”:Jß�ÐlÐÂ>>´Znj+Š6ѧ $Ôóˆ9Z¼f;Ϙ/È̲P0ŸPâ– ˆÙy2ê^�OÐ{™·'D>âBÃÎï‰�0o�¦ó’“FN/N`xºÒâü„–9ª3¦YR6®s…aDr»L³ E¶xÝÙ¨_\mÊ8‰¯ÀŸÊï`MiRXœ¨7ŒTƒŒÜ�7�ô4gÎ=è·€m+WL'ˆLòkíì�ì`Iòå*9O†‰KQBÌaÈK%o­ ­r]ÊŸLÝH³?ÀŸp²®mµC²Ó¤±+9'ƒgÍ4kÏή1‹„®àìíû•m޲ák˜‰ÓHç ¦ SE„²s‡hT9[¹ÑRl¡.QfM³,{f‡ðƘ‰1 r‡hƒ8yÀM¯e§Öä„f™àšä×Á¾C´ƒáH—“<†Ÿ+ap9ézà䙢¬�H� .^j¥ŦZA=*2øÁÜ6/vˆýˆTQB'tm¬.Yp‡ê�(j +|Rƒ}‡hå”Èï)îxͳÚñ F +9„d,Íw�mqD3l÷3 ®i”t¿ܼsì$9(hYŸLÁÝ‘÷±3š�.�ó>ÓEÄŒ6?‚±��0=Ü ÷òml“$C +Àh´D)‚�Ç) esZ( +r3ÓwHvçJ©E]‹s¶á‡ƒ! �/‹$itæöÉ üÄd(èúÆ9F eŠ[(ÚR ÀÜ€�1„ zß¡ÐêÛŽžb68ª¡rÔ£ H$t}³]l‡†�œº 8_Ëô}ßü1U=�ìÙ×cG.å¿°Ê\Vj·£ÖO~ò,%‘Q×xúÄ:¯ÇoÇ�?îøýAEQ ¸;ü{.g0“£ôlê6d#+‘ð_ß?;~úõÃ?>Ž_¾__e½‰× +dÃS¿þï?ú’Ó€áÏŸ˜tÇ�.px}“Áà‹N:Po`¯˜ø þíûãIgާc—<éRüD”"úsýA?Ç fþõø/¯·|Œ2:òcð ‡õcØ3âÁ¥…�-´t¡EüÄ'XÖÄãÀñt°§¯1ðÇYè…y´eË£Wñ&þ�~èvŸ j³„8c`KÛ’®X^ëzm1¬ŠÝ>¾¦º[o‡ÜR¶¯#¢â1Ï‚çºV¹ib‹òK®Ý-×3ˆ3†ò°@T²ÔÁé.ðf¸Ïhè°à%ópƒÞfÇѳ뵠uw1|ÿø¿áá?¨fÐVRÌ“¿/°pXü?–®‹k�Qƒ`±Àpöû�1:!0J8 /0 ±AIµLœå1žE]V>5G¦ZŠàú‘D‚¹ß½²ã¼ºO­†YÆëW^ýé9Õ�˜ò8®ƒxSÄáú3’uq¢Úå³v†sdˆ'ô7�é:áz¨ëŽÿÿ{AOs^�� þÚèn2f6ÕñÄF‰ßqY¾ðlš*—O0EÓ�cÄ>;Nç­Æù}žA_Q÷Ф6œƒýŒø�1AÔ9¤P[æ¨>Š#®Ë£¢W™™% +�WŽ|ƒÏ")Uö*ŸÍjj]œ"ÓË“·g© ]”�M']!P1ñ”íYÔ–ŽžĘÄÏ +VŽè8NÑRçX&¼4Sç)Ì#¥7gT8Ì:]��É/ú'Ì §'ã˜^ÏfÁ¡Êm&”Å+l®¤xj=K%¢sîVbvbˆ)¾¢NÑìµÎŽ× æ`æìGÓ~I]§lv¹Šêœ’þê’N1YþíÍ`Ï:^\…\Y*º îÙxPæÒèÖfB>Ë­*ì 5¦òRù\ao0t™ªGÖ˜RŽßåÐè¤Õ%kž?­w‚ m1lTxWtšý¬C�l1æ·&¶ø°Ý»ÐŒSÕ…HV˜í²Œ¦ßKþ¼Í©ïÀ–”PXì�°Ø9Zô0•5?­dy ݰW{K^X¢Ù�…Ù6ÉIÐ_�‚›�«¶(ßcw9T”‡¦ŽGK‘Š€å�>ǧË,±Ô ¸>ð²Õ ¶é)Pƒ™ô·7޵:Ã|.Qu^ÚÈÆfc —›Å‘F8ÿsm`§=bÓ`œÖwœæ5â8Öhµ‡zûï/Y:úǿ퓾 _?ne¥Æ—óŠÏ’þ#>[Ç¡�œ›Õ ”¿õE#óý,º¤^„®®*�¬h}‹HGlÅó€?¡8ü4?—ÔæL*Ì*ؤxÇ6û¬ÎÔ&ólEù0ß‘${8q<³ÊM¤{î÷ûË_†‰ OÊ@ +'ÕÍiNÂH'�m½Jw´÷¥«�ÎP0 ‘Î8"ž ¹cc^*œ€ˆ¢�®ß·r±R³‘�Žë5_І�ׇA5¡µçü@ES¦mµ‡ŒÐÊn)5¯N¤Jƒ=&G]•K2Áõ¤Ž@TQ:G¶¦žÔ‡58Ž’Êh|ë€ÔðÄ�C`ÏÐö›Z•Z}ÇðP,�¦áþÛÉÔ•q:ªÓÇk°¾ŸdãJxl𗤝q„ ¡[¼á¬QE9Õù¬(2ôõu„„܇æÜœ]Ño¥�Xæ›eÉ(>¨Ú-�–2tWÆ ©Î¢Ú/ ˜ùzG‚$nÏ¡� HˆøûXôfÁθÿ¹Ð«Êþ`Á¢¡%)¿ÝŒô4rEkÐUìÌ*¯'y- y73ve�óæ„—ýÐK´‰!ÉGNrœ«$SDÂÌUåJMT==Õ·¡bmØø&!+TWËÚh#ÞTsËãf‘ÎÂÁiºpGVqìbiÒÓ¼Å�ÒÛ=»8f³©€C b²(Q‡’áô¶Ê&ºjxBÅõ¦rZâÛ£J@ *g æ:?üÐpJ­F…ƒŸH‚˜ ªYB¯k.T  x;'¤æ¤Ê@ 0„qôœYF�r¢jƒ½¦ÜŒ +zîÒ6Qõ+6,ç•�™ÒPAS÷“L•JLÔJñ€ÿhJª<[n¯Ö¡¶ùé3ÜÚzUå«B˳YNT–(à”n_`0jžì`¢Ý¼z—O2»6‰NG„VWÅaâ(DéÆ7lÖ§lG½fãÞè1�9àqã¸ùî5iò#Cê#QOäh»yš äl*ÌTrs^”*'M�ÄÕÔ¼pE~Ù„8*ªu²�oQ"‹�0)Án÷TŠ`Úc8öD4ô–’2ï¦d2A=Ndy°ûÙTåHxŠÊ*›Eä[�»G ¹ˆ5‘ ß¼°¹1J%U1wŒÔ£W‹’ªpå#ˆ�ÎøæiA7 þˆÓ€q8BüèåqSR$ß[�ÎHZqÅçŸx*>ùÈJjžà]ó2ìyàÐ߯�—çI;‡;£Ç3'û8~�×2JÎ�ŸÇAVÄÊ ‹0ž«’ØÐÍ@á¨~[ÿ1Æ™üÿû´М×]³ -x{ÌÃCRÈ”j󀲕héj¶ÎmÒW§yŸ~¦º�ë=ÞcëÍG⹊UŸo‰´a¾U7cÇMûÝõÍ‚ÑLÜ8© à¥dq!ª’¤øPllòJ—þ¢"a¶!ЇtTUiå5¯eQÅ¥¶¥Üô]»K öý®QÓ9¤dÃÈq�é£1¡O.¶ù´¨Ô*î�H×Ê¢åL6 +¹d½CMqÀZ˜x‰R&\(€^’Y(@!&µxž„u­öñîâPµÈ)˜Rà7‡Z’.çA|Hà\6kŠÇÈâY;{üÙhëbtÅœŸŽsžc¡!£êëS‚:Äù´ÔÓ™¬SfµÈÊj‡'’ÐsŠ “¹Íš1PùmBÂŒ°’ÿƒôYU¿¾V +OÆЂX—Îæß�–<~‚vfh�m{šuI®±Î�88¬ãV˜?Çø7ù¤w}�jåøÓÐ (gÅÈ´�|g²j@kž�#¯–r ÕvŒ.HÙ�ê×@˜Å� gè"•%.[áMò–DnÒ}ꎚ-’¿ÈÓc,7\Ú€\9e™^�•êKèmy­ž4nŽWLè�˃¬§¼DFö¸u;“;Õr–]=,2ôµ{4âˆòàÍNgKöì‚–ölg ÕxÛØP¸°öÚäŒqÆ´ËpQYužQÖ¶š:d•EäÂRxž"¡Ú ÝmˆñGWZÎÆºx²]-!ä¯A¶u–HÀÌÉ3Ùø9‡Ñ9<Á®HÊ"ËÒÕô­(= J¶pî?R’Ì ÃÒ]åòóY aÇÛ0“E»¸H;‰¾Ä�}ËtÌE‰B‡Æ^·`Ç|Íq‹yÂú¨ôÝ_A¸30§¡EéK‚eŠz +SµûsM—ôs³F�?ª$~Ï!¼]ueÂU-ꚊgT5¸¬GÅó?¼|°¥}¸"<:4rLÌûµ¸QL!1}yË +&d[¢�g¥Ÿ`S<£ ³Ìv›­akZ{ø‘´=}l!Àe÷æ6ñ/º Õˆ@H²Øe],í*�Ì`õú�ÁíB@�,ì´Š­a«9†Y°$ëðTS5"ú[(ÊŠÁòi,ެÁ=E�Z·€³•FÓ"ØüdU%•ÅÎmËKÚð_ö«]G’ãúóû3ª¬w¹ø4D p�9âÿŠˆÌêîáL +4ÜNT¿ª2###·̬3…PLó7¹ˆ•‹Â°e�äTÂQ.hN°‚Š +”e¸D *lC(6@Lê�Áƒ67Q´ƒ‘Ë•›W«JŽMb8›š7…«ûîªX¥2ã“ÎY n¥ŠÏÛ/®9Ãê’‘5@ìB�¡Ðpu˜ªt%ƈÇh¦CÑu4L+q놪 69`æHï/âiÜDr>ÛY ÷æÍ�µ’…ŸæRÆ6iq/Îúõ«:E÷v–$ÿøŒyÁ]{ê¤1?ŸüYíx(Ò|áŠg›BÎc,¿Z…VÜ›=n!¨é EÑ�~ˆ£à’èñ ÐðºNdÅ€L]þ¨/Œ®¾îo"Ï©.þ™@Ͻ‹À/¹Ë�–¨çoñßþ ºØ>ýû/ÿí;ÓÃ{Ë—Ó¹ÑÃŽñïݬnÏÊ$qž<̪Š�‚—¼<Ú¶Xœ � +{á†ÇõðXÕ)ËÑᱫ¨yŸ6‹Q›uëeÛ¬Lo±Yt!ã°YÙôíðY´%ýâ³Ì‹)|ú—¤Á}¼F_Ÿ,Çà ˆÜ Ÿe‡!rŸov'2çá³L +}ú,s‘sŸE[rØ,+AŒ°YÀµ6 ˆþÆ�CÙr;Þ3ÝZ5ÆèpVU›rcUÝOJp•‰ÓYé7VÆPŸ#âuD:Ë‹BIq¿TN�M¿D6àÀ&]sÌ"lžmnžEâȇ•¤Í2ÒeÏÕ›…¦+jì®7ô¨/”ÃÜS;hèY­°ÊF—(úÂ>϶ì³Ê(^@„´¸ýcwäoó.Šœâ<^­>¨ªX㉳«V'-]²ísIv[ˆ’G¤ïh(j–œß8XÓY�’ù üC †€×~cPè‰ò6tµ]áÅ7Q—kϯƒÈÜ¿€¹¹1—AÈ*\’`² èã|ÚEÂru÷Ö)•(ß¾+�®"« 7vEÒm^ðFùÆÿÃuoO»”è²[”òm®… ì9UÉ 4ë1|™ª4«„ä·ÙL(¸xÌÛ¥üµ(Îàd)Áo­à—ÿNò½¢ÊTo+LõôÁŒŸœd0ÃGi~VZK÷2-ÌÍjïªù¦DPƒªòh¤�É“0¨EÒÀÑÑêü…’ÈqÖ¤XÅ:é¾4Q%,DbÙ z-¢T5:ÊÆ¦ã~ÄÉ«2‘2*¯³ÀÙh5à€Søüyo«ðÊh˜FúºvUSŠÁ>_ÜÂK¨]o4QxýŠÆŸè?ѱ3÷Øpï�¹ÇƪdÇð¶h¤lfÇÐAç^×Àª›®døL.ìµù‹’ÑËåå! É=×ôm4Ð²í¸˜Ì¬ @GGÔñ +9€†WÛ!ièb}µÓ9ÐO”|Z¶^“ŠXa”\RMçø|?‰,K•3Ë›(sLíΒ΃زøj—Ù¥{: ¸«A¡8�0YÚÖÍO¥�…0#r©§8Á_Èî¹€óôㆄ‚bÏ´à8·’ +©uäãÇ-¯¦ûöJžÕ KšNûº1ÏÍm¼-¼. ´ƒ+‹BYJ<UŠ€Ø§ÊNiÏØ:j¾6Ëí¿¯¼nñbZ £Ý‚ù(To•MÎX+¨EUÃþ Kú}åu¬ì³½�Ö~ ä�³?n�‚žr†lp.à`¿üº_®—ıG¢ LyMtpà—ß?þñÛgúøóóã×ß?"Êðºe­K”÷Êeo�dçy8+µržc#>u�ÑÛ +ÞËobŵ‰£y6…½Uçìò´hÔùŠ_Ž<Œ¼— Ú²‘Å +vÞÑÒ�J¾½¯üߢKWDêìQƒÑåÐ(1ãt;ËdŒ6ëq¼ +¥ò}…ù¸<ÃM]ß)üõ«ÏËY9¬ÕŒlV—ÁûuÁË£7DÊ,BVóOÏöE–u¶Béå +´œg�H­á¡®Üw§-ÖÙÞV^ZYýúŒ‰sç;¿~õ/:Û·öüQýÖšoŽ~sô›£ßýæè߆£™ §‚¡Xœçðó?ÿÒ‡@ªÉé2!(øÍ��?Ÿÿ¾ ZV²fy"Z·Ë¤… TΜ}âá‰L`.-”{äÊ=�®ç�ãiß—ðÌÌûÍB9=hE þµØ3àÂŽÀ×eö—ŠÔäú€3åÕ8Dž×pìó)Ž„—>ßæFk6£2~†ÐW» ŽØTÃwîZËä´hŠnKCÓ+ÇÛÇЛ1¨æ¬�Rq-xÂ8`ŽGEV8È¢ÂðîNäÙ+ÖUBœQ¢åºÀÉun̬éÑô�ÑÕH˜OŽ·u>&Mu9uòc0�§+œx-Â@VEá¾P;C Ë +™ç‰ÜÁqZ'ö�l|îu¯¼Î• +Ž·+‰©­HJFlJ—7¿Wð~!2`u6|¥xQñ­p¼Å›©mƒ*ù+cðIÔP”—|?ß=ãÏ;‘k4;9ˆ“ö�…6MÙ˜qNY¸‘y™Ú<…1uè <ºø…"FÝI4kÂu˜ò[çNJ#¨×IOŒÀ™â´Æh€!sxÞ¹ŽÀ�Õ»VÊt.¥dÂ)áÍàdÒqú¬t9TµR¹[2‚ùΣ ×.˜–‹…Ä€"\‹mç:àÁ�Í÷lzÇìC+�VÜWCjN‰Ådf§ÔSl탦•7b!ñÛøPoÊaÏXã´¥Aï•�†šÄ_¦~ r)Uùœj³÷(e,t|03¯€œ Qðk84�)T=ÿCÜD†`fd ê‚W¡ŠÃ™‡á­‹“rÀ¯9’I½‘ +mûóÆ6^ m€ø4¶”uª*™-æP—D?õgFø™jüA#óýû{&‚c$1Œw;v!y8æ>M»å¹ÈJ=àóØð¡T—3„Bà ñÔE3Ðß™½uf ±[‡3ŠS2e§P¡gJw%ó}B·qˆày²_?[îY±JñŽdŽ3U¡­ +7§6VZugô�3‹ÉL¤ ++¸$1+U߈tÏ­Ð<ê0¼Ò•È×`-o mó )ðþs+Y �Ñe7�§:Ý…àX(æ�ª?�ºãÌõ±Ó¼``NTAQí”ÅY”�ìªY˜[ä«—Ù¸¨/*Y¾ºÒ§J<1`a(Ý5aŠ9#Šš²;lDn®;™7RñöP¦rP_¶vWIhpÊ_ÔÅQØŠ)° T/²¾”äÁ'A¯&9EI‡ ÍW¦´VXU¢úy'UtòÆx#R!6ôj›j]Æ]‘ Y½®¼a,­ +Ö©¢Q¯¬Žö¨¡?ð²«&8–»0‚A®QéÀE܇3iÀ™›žSµG<ønv`vàÂtTn.z7Ó <]E®+ò°\•oI(Æu©Jˆ‡ù;Ô0*d8×xg®øÓƒ _�å ãÃñ”�áJcõPCHü­$ÿ²B+uÁôwøÉ.+t/_aUWN1þ YÁíMUfsîõÐ0²�¾-ÓÑ‚ä’"ACÐ�!EŽ- +nä�ÈÉ€¡‰Ä‚‹MIm/Ü—ûŒì­|C“qW‡ ú´ª앎ø2®ñBªibüã‹?�Mí•×-Ê<0â«ñ¾@ñ½çÍqlè0¶ëïÙGùzv·ÒFý?CÂáª!\´Wÿe¿Ü•tIj ìÏSÌ ôO×½Ë%‚'À`ý,k ìûGðeªú2s,–À8ÖŒêïºHJ¥Rõ1$¸nSRÊv×›zê’«ÔÎ\—\¥Rzí¹J©(çZÅto;Õê²ju­<Ô*$‘<ª]jUT•�[­Šçq«UúH ÝvªUëµy«U¼m¥ßjUú-HâT«è·´÷K­& hãV«´ì$qÊUVöTn¹Š:KËX®b·Þžr5�ãÆ’«Òoã¸å*v^zéUÂv,…bÁ*ýf͸kÒÀv<++0/ÁŠ!Z‚U‚®ô§`e¥·v Ö´¾%X1Wÿ<ë‰åS°róL·^…¦óñ”«¸å[­ÒDÚ¼Åjàé¡UÁ®ï] +L% O¥ +/¥òªÊVºu*zs–[¦\• +»Õz‰TwÈS¢âíCŸ.e¶ä)Žº C�*›é!N¡áv\Ú”F¯�–4¥v"xK™®^»„)yïåÖ¥¯Hå©JùÓ.Qs‡ +4ªúQÊ•îÚÔ4¡B©îö©”‰S"žî~¤O+#êi­¸á—©Í.9 ²¸2˜Áá~~1á¾MNKéQã똻 % Ô]ÖÌ(Õ É‚Ù!fN ¥ùóì‰)jr‹ÑŒôñ( ;¦~-¨wåÕEJ�©&—2A²'ÂÓ>У!©Ñå=ÒˆY€©Š9ož%“„^É]NÃõ[²ÛTšœ„-D*W¨v0` ©Ëß-ÓbSõ·l�®¥vbÞâØÛ$ÓÙ,® +MÅVúM<B~8è¤ã;i�ò' +šTfºzÂÅGÛ’ÃÈ..‘7óâÄì:æ×¯éý±~›»2ÎÞŽÞŠFaëz´´ +ÆŠM‘@e¯6þzÁú‰M­¬Mÿ�xU,”{7Ä+a æ${±Óz½ö`Ó°÷%$Ž˜m¡·qQS^´â™ „ +WS/híªeG©\+ÙÝõ¡¦à+ 5ŽÕîïѲýùå«G¡ +E-r¾õÏ™h�¦–Ý\Su‹‹aQƒìá76y Õ£�t•—°ÊÖ“)…æýÑC ï5U�mäòÅê±?š%ʲw +S¼s„Oo©*Þ¦Q'RUˆ¯t‘@½ +Þô´w7žooß-}<–Äkí\q¬PÂÂVÅM:yW}Ax‡Išã’Oþ²¤sº +Ï'Í¿è�½›4Ò!ž='› Žxà—¥�{éôóƒDÿå�%‹{k–1ãHžGQ|ü»=¾ Š„lÒ_¤/&´Œn¤ÿñ§÷?üù—ýý×_ÞÿôÓûuj¾¦ÏQ_KÏòo‡i.¿æöåøœ"Èg¸>¯pHKj =‚¬Ièí9 (³Îî@ÂÖwKo_@ß?/0šNìä´iìÏ�üeéu„ÈNCûZD�x ‹C®”ˆq¥=Rd4˜›§Mçòç%¥ê¹ÍÝúypÓ9_.ÿöpû gÎ>{i.ÏíaŸu´W °;Ê`îÄü÷NÁŸün'Yª»j‡÷²  @�H`Í dÏ c•ô—¥�Xš6÷6~ûùêßÍÅœõ›Õó_�ñ†úýcüÇ?püÇ?püÇÿ8f¶KÌb©{âÕ¿ÿü«oJúÞßýö�ÇXQ¢£WAh0ˆ=†À­0jÐÚ˜Õ:ÃÞþ:8ñÀ x¯ÎóîÁ+™ +ÑôÖf×ÿ!0Cc/ÉA„Ù§I$uÌ<¿æ¨™Çyµq_Ä#p%q¾,†@Üh>ïïo±s™àÒzåyh|´¾Ž yH ¤Àsì^Ù!W2áF£÷×ÎýßÞ˜mwÔ  +• +¤‚± dé{ ³ë‰ œ%��FI/e‰¼Ãlõ·çïèU¿'YÂS³•ð˜í{�¯÷š½pLN#PEæ†]æ8*¡¢Š{rRp:·kåãm[Ý2±«Ý¯jCá%ýu8#Ê1þ�8¢¿4ƒl™+ôyÛÙ¶®Ú¯ÿˆÞ�Ën„iÚʬŽÀ‡°odXY؈\Šlâ¸å±a–@CVþÄU./�Í£›Š1«*ñ¢´WÙµD8p–Þ•¸äèl…Ìw�&ÄÇ •|M’�s»ð…ÐÃä·×üªö„çLr±ÕÂ~ñÚ ªö&_ôô +vÍOx*„cƒ„ˆÿ`m¿þ#Ž«.ÖåÓS±™TF*ýÕ•ûtê ð™ýÈi �œÙÊT'Ú²ØC‰è¯Ùô EK̰Ñg�æÃ)`ÄtðËl^�$lB“sË¥YáSܺ¯jzãeŸ`½WRàÊx¬Bz®%®ˆBh»ÁÃ]¢^@P"Ÿ…"+„3Ùƒ +߀û\ì0·vJo +žIe>U–ŠÒÂFV>‰ž2º‹bP]g«Ú/øöö3<ØöÁ5âæ¢ž«ƒ…G ­E„øóƒ[N4Y2í–Ì®‹¹¹Št”Þ„xª¨¢ªŒ²™èPäBz±WyÖ 2�Š«r\Ч‚@;YBZM�¢#b³G˜… + ¸/«zU­¹:�ÆÈm8~|»löìU½ˆX5njcÙ•—‰‹÷uÛ“kcŠ�Š9®Ú òfKQC ¤Ê ld£°r¸"¯2ÜMn¼¶ØšKx‚r”Ã2�Ò¼ö«a”Ö|r;LˆG�w>®邿s„ ·˜æ0ÈänP¡;�ÑQŸÜUе.Tå @tbÕÖŽ ÂV}`Š6§Ü­ãÁÂÏÛhÎ�Û+¬%Û<‘²­}˜‡!N^êa¢œ¾TûÂX䥗 –ùM•÷«©s™¶Ó,ì£T#E‡@l5Š +šwÖÀѾS:/…Øâ4»ÃÑ©ƒ¤L.+~¦^¨V?W +Ö}!ŠÙ_÷ȧjT¥s¬DíÇáh›â�ÓQúÊOMɿ̣]/]¤¤–¸Mw='ÎÇJT�öÒ%R¨‚ÜÝ[øPû&Uæ8ä² {YÅiŒ�e÷ #m�ó}º%êdñ*/OVn¥Ü�mtg’:L§ð%ò£à~FkWV[ÄÇŠ;Eâ½(άFY„O@¢¢ ŽÙ%š#¤ šŸ,5à*êÓøÐ1`Z!…†ÖS¬yéV„©ÉY½/(eÑE•¯Ñ܈¾þ¡x­x¾‘B™œŠGtA6S „1R.TMØkø9À(Ór³ªþX‡oËùSÄì>d5:!´D…H,Á,%ý¢6òTÝèÑk&~§¬® badyôš}hS@ñ±KN ätÝ4‚ üØ=+SÕÈMšzvk“ê%sµ$/Ï—®/nBde¸sªOSž†Z…`’=™$[º¬“N{ ÿª�¢ÌëP1™¡¾nTy¨ûÅc¨©‘õR*+OQx!îîe©E:Ô áyVsS2"(e÷t‘º´è%EEU¸|êá@çÚ³…ž¿\ü±n#*âõáÇ?žÏ´I—¢3‘Örqû�ÍñIg€BH�3x—y1칡¿vG^¶/I;/�Œž/‹dŸ?‘°Ü +”œ>+'²V¬t+Œç|UDlt3(œyê_d—=n„0…ûœb/°Ë‚1u”2§Ø&E’&÷—òÞ÷ưÒV0€ÍØãy??#Õ¿\\Àÿõ�`C€Í[Ó³‹(x�ËÓCCȆh‹?Ù)4²Ú´`Û†¾ä=ø¶BØ&ý^ï5u/òA;ßAÕë) U‚¥oa33î´Ÿ¬,2 !ب¨á²Z�UÉÄþXlìÆ•ýeEâjK7tÔ�Öºõíˆ"ªüib”ãfÐ%8›÷WœfjhÉ&;bÍ=+Ù�.> endobj 264 0 obj [/ICCBased 77 0 R] endobj 260 0 obj <>stream +H‰ÔWm‹7þÞ¿B»­Ué]ãµ.Ü%„ˆ!9B2±½ÉÍÚÄðß¿§ª¤iíl–Éq÷Å^<ÝU-•êõ©ÒÕ7׿êŸ×Î<{~m–«ëgö÷†äÏÜïß-W_‚õö~q6Öh¢ó¶¤jšO6§`J%Ûr1^/o°ÄUoø7óo«*ÁY, bèÛ …Dšì’3¯oúg©ñnææúëÅ›�På7üÿÊ,¿ãáðG&[¢‡\ŠÍÖØÌþná/wK.4¼–›åÛåÙPnfþUÓv;µ{³¬àšÝÞÈ㣠NNÁ£¤låˆsÎI1™ÝÝòýÅ7‡Kg“¹øõóç¯ï}«Ä»Ëí¾ZVm Í@¦£bv¿`¹Ó^{Y7ûxG?vMœ¨ÁJPRS¼fC)Í„ç'*\|F‰2µËÝoË‹Ýò;6Õd(;-¯ðîwæÝSQÙ\)ôµ",²›}é +ŽFDVŠ6z<ƒ·ÞûGÏý²&6¸n_2vĸIè´ãµý}|ê[Odn¢ûá�áÆ>'ÂÞ ÈæÍcTàèRw™W�•z�¿H채” ì�,ºøÌ]¿ôå¥~Šø´:å¿”ÅɱÀŸ8‹�œc9u² &RÓÜÿ4�Œý0ÌÙ¹ŒâãL +Ôlfß|ÂFNe¹[Ž>eþEþ2þ:òbF­@ÑlCå Œaz6s¢¿]rM64ç(ª˜uftIÞS€Oµ¸è}d·<{e®nn�¹¿5/^™qnäìç¬q|jÄ©mn§§zϵ2�ªŒ.‡vyì¦è›o´KŽ}²\õ(g¾äöFÒÞÌîW/ïœyþ¾ûŠœèuÉøдe6ÖdÈ‘5ìgmêú Æ~yÄ:,·ST'K èí5þÝ�ä ç*µhS‰TÂÿ/ü4…ßžE‚j ÜCø=T (ŸÁ‚õÕfÔ‘˜Oyb°‹Ð`í)ë°±Ô·áKB‚4giÐðaè3ûå r‚Cµøô€(ð.o’‚϶†²�udt} ú”uØX“!GÖ°œuôÐÐg0öË#ÖIø}µ¾Ää4d·/!®öíu�—Àq�gù _Uo[ðUløs$úïsÂkNœ£yø·µáè²5‰µÀӒЇe­ð(Ní–á€hÐ4)O’ÒÇg}Ž ÀŸMÛ!I+=¢Ÿ2è½Z+ï\«ùƒÑ�²:ÙOØ/�î�àUÕ.ÊMÝå�ûüä¾ î{ò{<ó=�ùžÏ|/g¾×3ßÛ™ïäÎ- s ü¹ç|HçœHç¼HyB¾‚¶Œf[+ ÉIßku•MuE.fH‡\1^TSã?''`ßÈ4$G¡©¨WÌâ5@9Ž2&W*ità“3 Ó.Y<·¨ÜR¨¥.;`¯4ø«¿oÝYîtÎEIÀãŠô +EÊ&m�9á°Å+c‡\Þ¾» Á\¼ÿp¹bú1ÿþÁ…òþ²˜‹�æor5㮣·/.±òçû?>\âÞöÓþrE,.þ0?ƒÆUñâ§wûÛ×÷²ç½„9­÷ÜËK´>‡8¡Æ&ÞŒ»^ï-W»üâjX+x*ï|¬ºZË�Œøg4N%ª?à:{c" ·c‚i —þ‘�ƒÆêf&)½â7Ý1«ƒT"w”Ý ‚m‰cDzäƒÌ¼P}Å‘ûäêy(ÄJX‚ {ΞjA¡½`§‡R²ViJlp3G-7 +êq‹Ä3òc�¬DpcÀh­³{d4dÍ0—® jBïP–7¬hÃX�°Ÿ1Ú¦*2¨Û©£V�>iôÆ zÔF¡D½Dö ¼ÎÕ€ZSCåP�P—Iñ^áÈL^ð¬2÷=Y‹ ‘WxmRWÇ�ë­y¡´¥€Î$Þe67Õ*”¨€æ™…Jº¹%$ñGD¿Í– 1bÃA �ã4a¥9tÈŸ�Õ" oJBHâÈM'Š •ƒŸå*q_OÝSì#Y›„ šÍæ€6��Ú䮕DJè×ßA¥iŠ)Å.ƒPAåz)%ÐŽÕõj`²@/-Z·PIå’å+h¹§‘uQ¨5þºÓëZÇŠK"NQzV&$r±WkUñÌÌéV$\R˜—"w@® › •à“�ã] ꕃ�#»Dñ¯ÖŽ‹8=¥ì@òA2�ËÌÓAt;ÁÆÂhR5Œ±½ë¦*uÄy\Ú(JTzÌœ8£d©ºZΩ‰%Çb/�Ï’8±ÕY €­áw _ve�PR»‡AiE¯…¯¬½Ìל8w•ØÕ lºjiBW]¿•jÖšê…�&u5Êdœðª×°aEÖšV”àËQýî45 ¡uk$ñ‰dAy ¼z(i1UAP\x ”P_6ßWºpŒº‡ÔR“#¢|:Fº':†½ø‘7ìBPÒ¥ð%o¤œÝ“G=Ÿ¦ì41Ù…  Ípëoš²j“è!@ÓıIAˆÏ•Æ/TU‘ªÅx-ê¼ji‘D›‹ŠËPTÍ‘S�iƱ,é"åÍT/‹´Û !û#   b#º$xïDÕ3dIɨIŠ•‹ÕLkL’Íè0AºƒUhœÓ ¢¼WÑg#‹ìSF'•«�PÜ9bïaRÖ¼50ÊGâŒä´—öæt¡ïÍn,$¥9� œî`Žšˆ Bìå;è$ +y‰C”ŽÇ”xª;ÌKXç¾µª�¾/ÕÌÀ66(‚5ÖY“‹`Ba •ìµZ:¹V�j” R¢qc`,WGƒ\Ò:�܉¦ á„-0WOèÔ¾ŸßÉψyPE’Vd諊ß/BÉÑ}W�do×u²êѤæ +º�CÆR…ë݃I�$`½§IÞ’ÀDoV[ýø ¿}ÍÁ¿<Ò†m¤�OŒ´aiý<Ò>:¨" x+ŠÓ?°J§=§ó˜`(Ò<‰“²’ŒY ½é£ˆ¹Ûó<£•)3E€îC÷–2 }< ´yè“–ÍX!mÓ :8I»§‡g„’N•ï­OÇè,ÞïctÕƒuŒ¦æ8�Ñ} ìctÕ±Ou ‚ìÛ=Tïcô ãF93{^.‰ŽïVУ»œ¯¯y‹öB™R™Ù²‰¡¦òeã”u˜Y°>t&žÈ, ‹ç& �w@©Â¢QÞ„ÁÍ™/÷˜SËAÔ5„ËÀ%8 +©@\¹Ä À}QOX‡�5LÝ®»Î¼]pH®­5Àpää©„ÿóë:­€'1#7ï+º!5FÄCÖÝò앹º¹uæþÖ¼xe†ç#©äžï¬YCnË4ÆXód:�ÊÇôÀc',–Ó0ß•ÿ°_íÈn$GЧÀMÿ«]Eè2´>bC4@ËûG(3«{¦g¹ÖrCœ‡× LM×/«r%¦z hê8Õò^ÀCüÉÎz­ÐžçÚË£cò–²PGÓ/Å+^ ¿5ò౤0cê�Ècû"óC¸ós®¸ ¦�r'ãʇ ¤t-�u=¶Vº./.nkÏÜ6k]mz_Σ›J‰Œ4"ÞRJ_üÔI±v�¤-'±úïËU3òr"næÙ€‹ltÍz¹�h§Ç�ð~2|~ù/sòÍ^?e¯¿4Îo®ú)W½ëù]Ïïzþaœ±C(êÆÅ›ÿþñ»Þ�cT +1Ðoߟߖu:¥€µ¤ÌóVúIs”Œ»=:·zˆ—€»@pO×r# ‰¯¢Í¯ðP�ã!_�±jgìϦL|ýÀj_!`ˆ®ÝY+u*a)šÉÊP£xòøÉ;¬ ébô*pê;K¹Ù†«¸ÉêT Ô*¨ØÙ[“4¡xõ‰JQ?e~¡%€ÀøæŽ¨õ@Ù’)Ž ‹J”Ó9°ŠM +%ÊöÜ’ºÿW…V”Î)�+Uj…À!ߢë™=RFAZáf7E Ç(rÛïô^„¨£*‰´@� ?qMôÕ†~š÷˜çyÑy~Í3xaÛÂ8s¯¸ƒ` + ‚Œ˜“{Aüh11 øÌh>¯‚Äò�BÀS +J,y—$.»ËUˆ©”¢,[lRYf<—�¨*j°Œ¶0T¦QÜ¡ó�±è²é¼mM)2“Ô¤š¤.Âú¡ªC'â öãÍ�ÔØŠÎ©èN(À´™¼3¾˜¶¨sj¦Âˆ9É·îr–BÕ¼rj*¡MÒ± ðd¤l:—*7€$¶i⾊_°¢?hç ?²RÎäbë¶,¤¡K¤dkÔ¹X�¤-ÅÏÉŠž}¶ê¶ñØi !´~ܤv“Êñ©Bm‰ &ÎYeÇo:娱rgé*¸èV&+Ny‹žv4±É>kœ5Ê’’œ·š”¸Î ;#(¯Þ|ö`<�EµZÓDà1cµF'1ËÌ©™.„dXT†³z49hYÆè(ÿõæb‘•@a y*pbù£Ùjã‘9íÊJµ{9ð*AƒB4�Ç6e½·¢þeÇô˜vRåT4¥j`�`£ã“T nj¯+í`¤Qx¡Žšf÷�Ÿxë°±ö=x2à4ò:€A0wŠ5”ø ž;Foäœõãs¿ôNT‹ƒ#àÇxja CŸôƒf@»Åi‰SüÞƒî·Ðffæ“Ææ5wšÛ�Á�‹o3ÈÃ;õ<º�ªGñQ¿B¸�™G+j:R +13Ù ¶¢Îyœë8·¨Æquä«E~6–’ÆÿZ#Ôk³ˆ�Cç /1dÀëw/A tyT(6Ǭ_œK*k�÷ћ耭ñΈ‡7„X Ç:úÃùáoêz” ßÜ&R¸)[}óYFšdÃ�wk'€I›‰Þ¦ßÓ`ó͸�3‹Æª%y‡•màtÆä`& ©†ƒ» ¯Jýà6œÓ–VökŒ§÷S¢­†’¶$Ö&M6_HòÝ›¡"f>'ÙÊÜúY9Gû‘¼9hŠ“xE©³:8Š*¾©Ùû�C°¯Î2†]õwàÚ¤—Ì2å\FléxFCpTr-²ÎôÀ7Á{AÞ²OÔ­øìåZ|/H‡ObNÅ‚yÒõÊáÊO àÒ�Êá¬Y]"ãçØ‹ÎÅŒ®êŒ:v½ÈiÅ.‹:öÍ›®„àC›0áä‚ ï#?émáïxÍaü~GŠ(ÿÑ^Fã™g¹�‘ʹAÓ¬1œk*“‹¸@Ð=Î žÅáÈ;bR}iâ´¡0JôTœkêªq”�Ez"8ƒ2FPDgSÌs`tï8ÂjÈž²ªžx…i•�ѹZøkçñ¹_l"/nä,ÆqÆ:ÉööÆi¼ðùáçq¥×8Ž»�Ý�“ÿŸöa„ª"�X®™åw¬ÃÁ;LÍBHƒÂ¸4ïS‘«>¾UÄö'K›þå­.-v•pÖŸ¤Å¡:V=òã&Ê¿~3'é|¼Ð·ê˜Ô7ÙÙ­Ðƒä› +wô®«ÆÒWU‹¾yb,š¯�ƃßô®‰”¹²øŠ‹áY{9–k.Ý)Ë5rÌ&oÜcG räËO nW3ÒpreŽù!f°×ö>Å g`_´ F¡Ùªe梽k™æó[‚W‰p81µÌ -ãçíÖÅ#/Ô¥ r­6ž6&I¿›xÎ4øIÖnËY~S^�×�PÝï»·ƒá}³5 zÍÈ('ôWdQSýùqE^ cbZ3¬gù–(Ðw¨#,¦eTWCõÁvWäµ#Ó;.Rÿ¹}C$¶Û?Ð×=o‘ÌK"n¨Âºüw_¾O¸<Â%8Ókã†æ×�þvûÇ¿¿l·ï_nÿúí6âŒÉ”z_â<‘ån…åÖ8P½»¿˜‹Sp‰Ñ� ÐVm)®´aÜ«Šâž°cðÜ=/2°_ó¸çqž=óêÚx¦pµ“ö3Ì]�¿-º—Œö€ý„èrBVf~#Œåx¦njÂå ¸"ÌÇò )oµ‰ÅàúÖçâ«ïÄÈ&âÈŽ»¯€·G-ˆTc„[ÅØ¨?uÎYz�t¥shÐ7 RópaDú‡{ðưÄï½<àÜa#à™œ�gh”~Ø<¿õW9÷æŸ_Ø7á¼ëô]§ï:}×é»Nÿÿê*À«P©Öôï¿ëM(+£îÜüív»}~[„WˆX¿¶ÝæšòIµf>Œ}ÿâ&áÁÅRã#IdÏǯ“ÿÚEQ@2Ê *4ÃV  +„fÚì†ðqÛzôx‹xUÿ týØq¼hþºß+‡Î +bÎ" Pªâ�¯„øî +X}9 lÍ €ÏdzåzPÀžÚ.¶¹iz¼+d{¤&Àï3�çÇ'ˆvº1Á+ÄÕ<÷ÅR‚À´¼¼kÆ}`ú +½hqd‡¦ÿó]G„Æ}&ðüø±dCl4JãHÑæÑîIO;$W" ãWþ¾D c^ä—ÀóãôZ!�`tWБ�¦ÑŠ½Ê•ÏY@àbЂ�€Ÿ«—ÓbŒ¡ ”PU|¬¡¼eôXÛ¸« p€‡äyH2 +Õã*@4Ð6îäEt�®Þbö²aG˳4ªä ½VhÉÍHÆYµÆ:æ¾8š¾@´ƒ‚©ù‡Ðá tuXƒB©fkØ.Þ¯Q·ìTXÛ-H€&mp{�¶=Œ�QŠÊu;gˆ÷á¿Ù¡êYÃ?4l›ðO0Êðþ)ûá*ý‚8“”Cä}ðÔ¤tyRœvÎÐË!u6>=ø†äòrs nŸ $;E9øjóÇ0'R�º.XÕRÚˆó’�ö@ó‚½";˜vÍ�`æ€Ùðë ÉÎ +é6yS•â@1uJjKƒ0ÎÐË!“0¸¡c\db€’Ì›÷Ñ­gHvß ±@­9lÞç ½ª +—=†]#8àí gÊ$Â3ôrÎ ÃN5=VqWÚê0lÓ¯3$;ƒê§�|õ6|ÇÐW£€…�rØL;1¯�ìtO3ÒT?Zr k˜€ŠRqÀÊ Ü3ôrÈ»9xzÒF¿£q£è ¢ëd²aç �àìÕºü>ø"ÚÞ‚5 ;gèåPiN7[ÖcY«,�\“5:`}Ø9C²vb#ÿÍ`†‹Ò5�Ó,ŸÒ„–�Ú¦¼¯PE•´qE�öŠ •Gè£~Á½hý +ý�ö*É‘ãH‚÷zE~ ¨Ø—«=€ÐA¼fÔ‡¢ ÿÈÌ<"32ZsÍëLÏðÕÌg +Y9€œO£Ã|r´í^�OÐ{™¾y¥íXq¸¾'ŽâôY®9™åt䆳 G-þŸÐ%BÍYàb˜ô ðšö ä6EÒz”ÊHR¯Ug@š†;ë@ÓuƒdE§×Fö h,ˆFÇqòü*O’ñVÕ;ô6(ô¥X5Žv!Ðî]¶C²S¬d8e-cÅÆ?€¡N‘”h@žq¾Co«Ž0^ èÞ&ƒÑ~l& „Ÿ;ô6�[Æ4«Qâe’ ~h“Ê9Ç1ÓÔ&+D; qi6(�DS4Ú`õ“’Ô2í7èmPº‘€&Ÿ4‚U3„;ûl�ì`ðûÁ†"ãŒZmƼ]­™G3Q"Œ}bƒh'k¯äEȸTµy•† ‰ÅüÚ Ù)ƒ�üè¯Ü,�P8AŽæÅt’Ÿ÷¹CCÝy†B+*´M@ '±|1áè+¨ËXc‡Þ4F@ 6§¡ïš®@äÀ ms.›fú½7(§ ™Œ£êhàRdú˜Ú4‘:L¯Ð°#‰UƒQõ¯€ÂBÀOÕ:½¿CC6‡Å4^Ó®~ˆŒ2Ʀfm§�zoP=!^5åj@1 LÓª2sPlÐTö¢¤þ¥O;%`Ü2µ¡ð»ì,к!,t3V‹4ôöI\ªWR›Í»;½¿<þ|¸ã÷E$¸0úr8ü{.gÏ•6ñ'³Lu×""ž�×÷ÇÏߎŸ~ýðÇ��ã—oÇ×ÇW˜CÑË¥�=X!bë ñ{ÁKkNHßs½ üá:7,#Étؽ¨�ðÞGû4 Çi9`ˆ…r4Þ–eQ½Õµ‘@‹dØ¡š èŒøÊŽóùʱÐ  ©rœ~Vò_ s�Z!ŃS©™¶fPÆ…8Ó: „¥èÊÕ{«ï²¹•ºJoƒÞ tÅcB3ŠÞc­ÉW” (²+쬼 lcà»rT(uxªtmóEG#Rˆ’nÐvC¾<¦hi(Jp?oˆìÜ!åÝöŠê¹£QÅ£¡Ä-ÿ ²ódÔ ¼Ÿ ÷2oOˆ|Ä„†�ß!aÞ Mç%'�œ^œÀðt!¤Åù -!rTgL³6¤l\ç +Èäv™fŠ&lñº²Q¿¸Ú”p_�?•ßÁšÒ¤°88Qo¨¹!o:é%hΜ{ÐoÛV®&˜N™ä×ÚÙ!ÙÁ’äËUrž —¢„˜Ã"�—JÞZA[应?™º‘0f€?ád]Ûj‡d§IcW*rNÏšiÖž�]b ]ÁÙ!Ú ö+ÛeÃ×05§8 �ÎA„M¦ŠeçѨ0r¶r£¥ØB]¢ÌšfYö4Ìá�1cäÑqò6€›^ËN­É Í2À5ɯƒ}‡hÃ/�.'x ?W.ÂàrÒõÀÉ3;D3X;‘þ\¼Ô*J'ŠMµ‚zTdðƒ¹m^ìû%¨¢„NèÚX]²à6Õ:QÔø¤ûÑÊ)‘ß!R ÜñšgµãŒVrÉXšï:Ûâ6ˆfØî f@\Ó(é~)¸yçØ H&rPв>™‚»#ï;bg4+]:ç}¦Šˆm&~caz¸Aï;äÛØ&I††Ðh‰R�S@Ë,æ´Päf¦ï�ì$ΕR‹ºçlÃ)C _IÒèÌí ’ø‰ÉPÐõ�sŒ@Ê·P´¥€¹c,ô¾C¡Õ)¶=ÅlpT Bå¨5F�Hèúf»Ø ;9uAq¾–é;ú¾ùcªzÙ³¯ÇŽ\Êa•¹0¬ÔnG­ŸüäYJ"£®ñô‰u^�ߎ?>ÜñûƒŠ¢@qvø÷\Î`&GéÙÔmÈFV"῾?~þvüôë‡?~|¿|;¾>¾Êz¯Ȇ§~ýßô%§ß…?1éŽ/\àðú&ƒÁ%�t ÞÀ^1ñüÛ÷Ç“ÎOÇ.yÒ9¤ø‰(E"ôçúƒ~ŽÌüëñ_^oùetäÇàëǰgăK [héB‹ø‰O°¬‰Ç�ãé`O_b$à�³Ð7 +óhË–G¯âMü9üÐí(,>Ôf#qÆÀ–¶;$]±¼ÖõÚbX»}|M7t¶Þ¹¥l_GDÅcžÏu­rÓÄå—\»[®gg åa�¨d©ƒÓ]àÍpŸ#Ð Ð7`ÁKæá½ÍŽ£g×kAëîbøþñÃÃPÍ ¬¤˜'_`á*°ø +,]×£Á(b�#àì÷c +þtB`”p@^`@cƒ’j™8Ëc< Šº¬|jŽLµÁõ"‰s¿{eÇyuŸZ ³Œ×¯¼úÓs +ª1åq\ñ(¦ˆ?Âõg$ëâDµËgí æÈOè9nÓuÂõP×ÿ'þ÷‚žæ¼3üµÑ-Ü dþÌlªã‰�¿ã²|áÙ4% T0.Ÿ`ЦLj}vœÎ[�óû<ƒ¾¢îIm8ûñc‚¨sH¡¶ÌQ}G\—GE¯23K¯ùŸERªìU>›-ÔÔº8E¦—'oÏRA+º„)!›NºB bâ)Û³¨-=ÿˆ1‰Ÿ¬Ñqœ¢¥Î±Lxi¦ÎS>˜GJoÎ:¨p˜uº“_ôN˜AOOÆ1ÿ¼žÍ‚C•ÛL(ÿŠWØ\Iñ +Ôz–JDçÜ­ÄìÄS|E�¢Ù j%œ¯ÌÁÌÙ�¦ý’ºNÙìrÕ9%ýÕ%�b²üÛ›Ážu¼¸ +¹²TtAܳñ Ì¥Ñ­Í"„|–[U*ØjLå¥ò¹ÂÞ`"è2U�¬1¥¿Ë¡Ñ9H9ªKÖ<ZïyÄòTÛ‘ÎÛI„N¬äºv ùñ¥vKc%Z»‰ù“Pûx°ŽkŸM‰N§ä +gËfo×µv†@§'g³W ˽.ô†¿£I¸˜é9�Ô»ïy²Ž~r››mþ¤Î*ãðšW›ẫµ&îjÏ_­Z¬§Fcc'{‚:„œú‹ý*Ç‘$9‚z¿¢>ÐÍŒ;B]€/ ÀÕG¨Y�ó€vxdæ9â Ì–eçînnn~éËriEwO[F6’¾œÇ�¤9€^„ýhMʉXÐõ> ì 57Ó”±ñ€ œË•ãΣœõÂôP/-}¢êOge�ÁYvxãà Sô]€SÝTB²ƒ<Î|»±o$)$ S$-ÀÛÞOÊ:&�CB³”Øfâw‘s±IÙýTE¦›©ð^ôùtk%U›MÅ6ÔQa—W¦ŽuÑEíMT”å³ùé.i I¸d(§›¨´i™®xW�¡z °™TK•8yn­*vPöŠSƒ^XÖäÑuï!~A±E]J +‡Ã0‘†ç€^‹e£PÀ›²S}ÎÒEÉjc«R‹ölb3&LÑ¢Xa·KU¿§ÎsÁ¡çœÀz¨ @œ�@œ5f˜Úš�ª<–¿fÚk¼¾1ǰÛ7&c’› Ÿ W¨Ôhß�›”U‡ª‰G¤LE²êÀ3Ç£Óæ¸Õ¸<¶0Øb[<)Xƒ�ô»×7Œ^ß§¤:M½È`q0PË­â(#ÿ<1¸SñÛ`|!Ðg|?à“±o4DZ½Ã?ýúÏ7!}úéß>“ž�³Þ¢zujô¬ Ã$�êmôyµC„=¤›ÖšÉääÞñðÓõ#œæXa2³ª¡õý�„^M‰^ê0–x�€Y“Ù—uhß‹Ÿ×;þãàä\r˜8L¿üÝÄ ÈѶÚÐ KˆÍú­Û?1£ »¬P2·*ŒÆòØ„†âù§ÍEº`çô6ÂÙ +“sàØâ¹üe“ZÉ_"ÏôaEÿBã2ëÃÏC Ó×°Œ)^�¢%5üá@ûXŸz´�ñ”¥¦ç«Å¼97TÉE×[JL©¦Š6oÒ™èrËO9[Gb—e×ÐíFÅֈ @Š­B=œ^--Dò×è’ûÛ%5(žY¤†…JCfØÏÊ$Ùß1íÄŠ@ñ< È „•ÂÞrˆÓ­q�£vÛE×zV½²IžYJkl2¢Ó?˜v +O]½³ê"{ò ‚Ÿí¾Wβ)ÏPvÍî&]*#ë0fú“T‰ˆÌåU•ï%?“¤Œ"p5Glø™xÒéjÌ“OƜɪRL²åÍA’ •/^ê€áæ0;m²Q—«Û6xGéöö°ÍsyÒ›s²Ù;-Õ¾`hñž¹JiV4¬$cu¯V&ÿ°9ƒ .kyQSR ªy4,´tô³™‡MôîôÕ>Bó²KwùÑrÛË€êÝç ÝÒï«2uîó÷‰.‰ßŸûd[®£º3qTÝ~5êÊgt5´¬EÇó3¾xêÁê2ÖŠ8Ñ–‘ -0W‘µA.E+„‚ïB,P3šž?àÃrÚP�åõ�þݨÙ -?ж†?Û$82“{Öwy³ÒšÕŒ@J{»Ñ8Ï“K«ˆ¤A3 Vn\n”nuyYÊFÝÈf9^l©pËÂT,†Èþ‹’r0ý5¶ž˜¡=Y‰šg§£ž7û�YTÔb4íJN)˜Y1…PÌä7YD€ÊMa8²@r¹÷¢tAû˜@p‚TV8}8æjcÆ +�![1ö“G'fŸÛd²Ã,Á³å8$†ÙÔ<¼fútÕ&›mÆ'ÍY Ã¾Ô†ï†µ“53¬Ê“‘5ÕÖž[ŸîX7?�©ÄœÐÝT™cyä)×Ñb©¸AuPÊ0k¤÷qˆ4n%Ö tícóp`¯d!æ§YÊ8&SÜË„³ýWEÑýÂ./Þä¶}ïÆ]gê¤1?øY�x(ÓÍëP<Û”r†±ü×*´â^;ÆÃ‚šRô]— £Çs@€EÇ‹ž^J‘Å€,]~ÔàKKèIÏ©.þL Ï}ŠÀò§s£%êù-þíO|¾ éûOÿöÉôð>ò-:=œÿ=~|þñß< +ŠÔ×ͬz_â¡Üm[,p:Ÿ vã†ÇõôXÕ �etz,ÃÓc ïËfQ êi³ n½l›)îåf³èBÆi³rÒ·ÃgÑ–ô›ÏJn¦ðY˜_’û,x�¾n> ¸–ÓgÅú)ßx"û,à²NŸ•¬Úá³’úòYÉ"gŸ•´†ÍJ%ˆ6 ¸öÓfÑߨi1Åóæ´èÚÇé´H�q:-ÐÁI§´ §ÔO£`çF ˜F UÖŒ·Ñ +Sf£¬pm´€”�¾tÜ\ÖÒ, “åùk�¢°XS$ ‡5tÉkxà ÕÕä¶W=®PY[Ô(IÖÎÞÊ3ÓÖª1G§³ª:”�•÷L[+UârVúׯ*1ÕÞÑ^wA”s°½(”÷[w!ú¥m„RNœ¤kÆlÂæjóðl#/+‡ËL—½_T mWÔØÝo~ôì/´ÃÜ['hèY£°ÊF—húÂ9ϱì]e / RZlÿ8ù;yŠ¢¦ˆÇÝêEPͺ˜OÄ®^�´@tÉb´÷’l[ˆ–Ǥïhhj¶œoìé¬AI€úPþ¡CÀ½ß˜z¢¼M]mWzñMôåÚûë Jö/à@n6æ2Y�KL6}œ·],W»·N©DûöÝñ˜À€tYS ØØIwrÃ'Ê7þÖ¼ýØ­D—Ý¢}Pïd- `Ï©JnpЬÇò•ä Ð¥Y-$¿ÍaBÁÅc—ò×¢8ƒÈ"R‚ßZÁ/ÿ>ä{E•©ÙVXêéÅŒŸœd0ÓGiŽ•ÖÒ¾@£…¹Ù@ã]=ßTjPUi'F2&µH¸š [�¿Ð9b=”«¸BÚ—T‰"±�lŽ–½–?ѪZec�ó~äÉ]y�2j¯«Á9hµà€Søüy«ðʘ°�ôuŸª SŠÁ9_lá%ÔÖmΣÿâÄø‰þ �A;k�÷~Ó˜÷ØÃØ•œ‹‰”Íœ +tîëZXuó¯• ŸÉ…³6ÿ¤dôrEõD{ÈBòÌÅš¾M‚ZŽ‹ÉÌ:T`puDïN +ÿB`àÕvJ¦X_írô%_Ö�£7IERa–,©Iq|{�D–‡-ŠÎ™åE”¹¦v³¤óÄ ¶,¾Æe¶ãlCÑÀ�[ +Åy„©ÈÒ¶ž•ÂŒÌõŒâ +‚¿PÝëâéç ŠY¼Ê‚pÞÊQH­³ßßòjºo_É“«t BÓi_7fÜ<ÆË…çí­Äà•E!�,Œˆ* E@î·ÊNiÏ8:z¾6Ëí¿^y¾ä‹eIXíÌG¡z£©Ò䎵‚ZT5œ¿°¥_¯<Ï+;¶'Êú÷Z5ûç[§ 9C6¸— p°ß~½ßþ^®5‰‚0¹\ä51eÀ�ß~üåoߎÇ�o�¿þþˆ,Ãë–µnYÞWngk$Û¸âá®ÔÊ/ÖF|ꞣ—+x,‚+¯Mͳ)í­š³ËeѪó3~ž8ê0ê^&hËA1œ¼c¤Ÿ�üözå–]º" +PçŒÌ.—F‰·Û¡\‰Ùf?Ža¥T¾^a=nÏðP÷w +ÿüÕÏ[¬\ÖjF5«eðý~ÁíÑ2•,RVó/cûI–[¡ôò +´œ±@¤Ö0F*…+ÏÝi‹ÛË•§®¬~&‰s×;þêŸÛ—öüYýÒš/Ž~qô‹£_ýâèÿ G±2%DC±¸Ïáç¿þ¡�T“Ûå�¤àß5�ŸÜ­T‘²–òDÞ±1µžn›P¹sö‰‡'*�½´TPî#W~èåú|ãzÚ÷ŸðÌÌûíBùø ý8àÿÐ;0€=.œ|])=àRQš\?àL¹F5.‘×ßöõWÂÛ ?_öÆÔÒü•ùKH}M·Å‡jøÎ;–Ö2¹-&e ·CÛ+ƒÇÛÇЛ±¨æ¬…Ry-x"qÁUá"‹ÃÿáîDž}%uµwF´h¹_àæ:7fÕôèñÀêšH˜o\oëüXØ4½êrëäÇ>Àd@FW¸ñ¦²* ïëßì—»v,× Ds~`äó~¤òRèH�”3ð Æ‘ÿ-ïÐ�á•Irˆ¦ûôP(è�iŽ�«�„ò¤v(ÎÞÜŽ =ÃŒëú9G(¯±»”ÎÑß- §ª†¸$¯ÚmI°¾ÍY%KÖoš©!Wé�-¸†\¥SF7¹J«¨Â‡ZÅ´Ùv¨Õ°oj5<7µ +Id[ÕNµ*ª*ëR«âß½.µÊi®Ûµjzm_j•h{—Z•~s’8Ô*ú-§qªÕ¬m^j•‘]œ$¹Š'åzÉUÔÙ -cr»�~—«ùX7B®J¿ÍuÉUì:ô*i[¡PL°J¿™f Ášµ°­»`Å£ó¬Øž¢¬tuÜ+žÑû%Xs,|!X1c~‚õÀò!XùòΗ^…¦ËºËUÜË¥V"}_bÕñtÓª`×¾ +L% ¥ +/åzªªV¾t*zs×K¦NB›7• +»µvŠT›�‡D%Ú›> eò”@­!]�ªšù&N¡á¾NmÊ ×C!MéO^(Ó˜µ!L©û¨—.ýÁKy¨RþôS”úÞ¡õ®¾µrcºv M¨Pª»¿´2yÊäóiÀM+¿x¦÷Sxlà׉T‹v—â .„ ¶gpÚÐVCJ£�/#f¦jæbx³]2Ë!ôJ¦èã \»K±1�™«?íJ±ÆBÒÎXN[™Nè2=íù–Œ¬íTIÚ#Ô8 +_7&®ÏŠO=H¢ xZ½èK8b‹ÚbµÂt¡\¼d¦‹·‘�à+Ù\|Y)4fÝ#¨GêWÂ[PÀ¬¤Oº|ŪĒAýÙÕFp@‚æ¡–ë¥zï¨GÓ²+ªª�Eœ¶%“‚˜aÒÆ¦Aà�$îãL²Á Ntf‚´Ä]Ë[Q »=&çàB2YÅ!­Úƒ§i+EÞ²º•œˆùßv8¾I] µxKŠT‡í¼g"²lœ AOŒÜ<‡YMð@ÆÈâ3Þ4ÕÌå¶½‡­ŒiË y \`Û: Fæ�t÷U&+ÂÃE*ŸPï`ÀR—ÙŸ ÓĦúÛ¿òpt…Úñ}‹c§¿&™ÎËâ*×T¼Ê@¿ˆG@(ï�´¾“(² M•efh&œ|ô9¬uA‰âE³ON,–AËùùk~¿½H¿MƒCçÝ Î1nŠFiº´´ +ÆœÊM•@pe¯1êñOfAüÄK½ÆK@¼jÚ}nÄ+a æ${±ÛôzΦn§Ëw[èmžÔT‚Vl'¨®Â5Ô«-4A»ÙÞ*§§Øt½©)øJB�£DµéÝÇ@±x¾}ŽÈU¡¨EÁ÷ñ�­¡©®¹ÙˆóeQ‹ì²;vE µÕº*!¬ŠéÉœ�BKºÍè;¶ªcŒœ±˜z7G7‰v¢1•À«FÄô–›òm4jÅ!†Ü”â³\Pw ÈŠ;Ýídƒçãí;×óæ¯õÃâðÐÂÂV#m:%©¿ <ˆÃIÞZã²�üÉ¥s†‘È7ÿê‚ciä%ž='›$N¿à'×órq>)ô/ïô(Uü÷[73@²-pV�ÁÛ¿�Ûd‘”mæ‹ôņaƒ9 é?þúþ�Ÿ¿¥÷ÿ~{ÿé×÷#ëô|˯Y×ý†ü;`š3®�Ü>ß[yO׫‡CzÖžd-HB¯hÏÊ€2»àlHØúÎõ|ûúñêr`t�8nÈé iì‡Nþäú{³Ž°Ùyê½îY'_ÂâT(ÕsÜ�4æâé éâI~u©T÷×lZßî:çÓÇ?na/fæ{Ôníù¸ÙG¥¦6¡ v‚ öïé𻉫% Ô÷Å¡ @—H`ÍTÏ3Zú“ëé®-as½ÆÁ÷c_?ý—…øÅY¿Ù=jŽ¿ê¯ÏñŽ¿pü…ã/áøÿ�ãŸþõÏwý?5� endstream endobj 261 0 obj <> endobj 265 0 obj [/ICCBased 77 0 R] endobj 257 0 obj <>stream +H‰´W9®#ÉôyŠº«s_Üi ²ACã’Æ`ÐÓ÷KÖò»5ž„ð3ŠY™o�ùéoŸ·Oý¶Ÿþôy{|}„-ÆQ·ØÂÜžúúû?ÿØ~{|úüsØ^ß¶°‡‘ôÙø9Ƕ}{áç¿àç{|Ýâð·˜FÞkLø†/!ä²½¾<øÛ—Ç3î©lϰc«gÚsÅY{kÛ3ï9óIÝ^�ë}®¼ýëñ¯Çß?ÖpFæa½ì÷ÃÂ^2lí�̲Ž6îˆO1xžçõ«“W_á¨ü {„ÁÿkÈØ�âÞÄÿ\ +}N{ê\“°6AÈG °ß�Þ��¯M½vÛ¸jã�‡¿””¯gÜS‚ûsÆ.«ŸDdâ^zŠm 6co9çÃóÓ/Û§Ÿ Û·_·?ÿ²^:�GåeK{‹|T÷�hÄàÃt´½{ùÝ£·÷ ôîz ‡<üÿååÿ°ÊKûÈ£ÿAᥫðò^¹ +/ß /ö=Ö­±ð‘„±£d: Úâ䣾ϴ%¼3¶±÷ÂõÇs–ÍZ=·Û.?4 ªpOyÌ-ŲÇô½í��Õ•jÁ¼šßiúGwiÙž'L™x!‡=Ç�áú3—=àÍ£´Ö8Vºñ  ŸûË…`ê}âá¿×ãWØõ,y/ ¿ºËN«l¶íÙwYa,_x±GÅûX1÷:H/>v¡Óª…ß'.…ŽÃq�OI ö3ãc‚¨“¼PkvT‡Â\BE¯33·($šœù×")]ûu®­udþž)3½DÑkñRTtù( !™�öÙ„ª×¢¶#}âsî=+Gt(;u�eB£™:ÔOnöHé­U@…ìÓø0˜ü¦@à¦'R6§ý‹Z[õ˜n3¡ü¯°ÙŠâÔ{àd\§K̈!*Y({ߤV47ÙÁÊ™€&Þ˪ޣ —¢_CÊÅù÷›Ék W!w–Š „�ƒ@™+«[‡#„|&–[W*ØjLå¥s]co0t°Æ”r|—C«s�rT—v‹ütï$yÄòTÛòˆ5 ƒ¦e’ëË�½O§±kT:�…ÝÄüÕ¡>b÷y4%:½4ÎѲ5Ú\·s�òälöNÂpžèuÐ~G“ö#× ©wßrG?{äÎnóg«¬]ƒ×aÚA—­nMØêõW«6÷ÔjlPqñjÔ�Èr㘎�|rEsO›F$~9Í_A³- ûÕUAÓ~@ɪn¦!bã8–3­•!ŸùÂôP/MQôÓ™ÙNÅp¦½§£nB åËQJö*G¾Þª¯G1$ C$.Àn�ëY²öIvˆh¦[MB<1W5)º/ed¸™2עχ[+*Ûl*¶¡Lm…%HLk*µ7QV”Ïæ§2¸¨�Âᢠ o¤R‡i²;ãM9ëÑÁê2 [*ÕÀÑskUi/;4è…iNïpmP}�±áE™ + +‡Cw!uÏm[0%IàUÑ)¶37•dqçÎáÚ {VU3&LÖ"YåÉš(ú>dÏ»ÞsKPB�8�89Êšajk¾šÉò%²"YöoÁ ÓvÇÂhÌD¿A +..D \Vû¸Ê ¤<M<"Ej,)´y½:ì`ZK=€óvp�Íf°IKQ5­‹:=4\½Ú|Q5ZŽLr¹Yi„ñï£vʶ6aÁv¸ëz­ó|?Àyí@]E«=üÕÛ¿B:úíï¶Iï.[o^}¯Ô2ʳD “ˆR¯½�K¨lošO(&£�{ÇÃOÏÃRš}.‘™” �¨/jjE4%z©AXâEJFMBäx,£½_¯=~0| 8§&Œiwß.ÌUÒ@”­4Ýbñƒ~kÖOŒ(Ê]R(º¶ ++�å±/Åûo‹‹xÁÆémÛ2ƒ`¶ê\ú²Š­¤/gê°¬Op\b~x<¸0ö¥¦1É î‘Á¢, ¼ÐaÖ‚ïz´°âIKUï“yulÈ¢‹¦]òšRU=´Ú¼ŠgV—›~òÙ:"»$¹†nç0Ê–F$9’-Jpxui!’¾Ö@ÅXßN±AöÌbi˜¨4dºõ¬D’õm¶ÃJ, dÏ’ \˜qÉ[Q`ª5^ëȇÍ2DÞÕ¶«¶¬¢g¦Ò�¨ôO¦‚ÂÝSW{=ä`¯BDгÍk¥,«â f×ì®â Ü—bíÆ +±ry�*Š÷”ž‰bFpq�Xð3þФÃÙg=spF³Jv‘Mß”!ÉPéâ©ènW§E6òât5ËßQšu�5lõ\ÔæœlÖÇK±.èºøuÏ\…4Éf’¾ºW ƒ,–ÀD-ëò¢¦$A²ùjXpiog3w‹è£ÓgÝ Àçi•îô•å!/Tï¾Oè–~ÎÂйϟ]²¾¿ËB¸LugÂT-¿utÅsu5¸¬®Žç1~xòÁlæŠeÑA#4Á\¬¨-¤Rt…�óMˆ ªFÃóõ06äcúúFýnÔŒ¬…¦ %mv[E0™Á=ó;}³’Õ�êŠ@H[½• pg-ͬ"]eTó­§Jµ:}YJFÍÈb1í¾Ø’ᦉ)› ý©*ŠŠÁðil¼1÷$jœ çõ\”­CFVR³õѰ*9©`$ù´ˆbDïdÊ7†áÈB‘K½g… ÜÇ¢&ØAy.¥Å\,̘!TÉÆRŒýÀàQ‰YçV‰ì%– ‰ÙrÝÕT=|Í´uÅ"›mÆ7]³@ÁºÔ‚ï†u'«®°"MBĪ)–ö¼õYáöyÓÓ˜JŒ ÕM‘8–FRu]*nPT»"Ìiÿ¬Zb×¼®èÊÇêáÀ^IBŒO5•qLƵ–gÿúWyѼa“¯RÛ^{à&›˘Ç¿+‹»"]}}ZïV…œnLÿZ„æZkÅ,!Èé(Š,‡¾¨FQK†«ÇÓ‚“Š==/WdúËô«~]šŸ$Õ9ÙÅÇ,ô:¬XXúthªô¼‹¿ûˆ×CHç¿ýÝ–éåÃä›wz°Û·×oÿMóA°"ImÞĪïK4ÊíQ‰…šN§ÆB »q—ÆîåÔXÅ%¶4–Ñ©± O�•5¼/™E‚(§Ì»µ|È,PqË7™EÒO™•¢Î^:‹²¤ÝtVt3-�…ù%j°Î‚Öh󦳀K>uк~J7ž‚È: 8ÏSgE³öÒYQ }é¬h’³ÎŠº.™ó*Œ%³€K;eõ�•C¿‚?@nõv¥Pèθó'Zƒ'Cûÿ—™¨êîaÜš§�1Îp²« @"‘p J¨ Ò?¸ ËˆÞ¯L +5‘oQ@UÛ”^¼}9÷þÚiYè`Àks WムEÛ. +æ%Ô[#U¢}ÛîxL`˜T®)#‡°Ë¢n‹†7Ò7þöàœžv+Qe×Õ>¨·�çd¥hpÀ¬­åˤ Ð¥®’Þæ0!áâ±—Òׂ0ƒˆ"B‚ïš _ñ’îT†f[f©G,f|å ‚™>Rc�X)-CH`Ô%n¶¡ñ®ž¯*9¨¨ŽFØ ‘Œ„IÍ¢®&ÈVãh _±&åjùÈÐ¥‰,a‹$¶!™£%@Çò_´ªVGÉØtüyŠ®L„ŒÚëlpZ-8Àþ?ïc:£� ÛH›×©Ê0Åœó9$¼ˆ:øFEä1¾‰ÄÄí'ƒ$6ÖníÂ1�µ‡±+91b,!ëœ +tl¿VýøçL†×xæ¬õOLF-—UO´‡$$ӷHÐB˱d2\ t®ŽèÝAbã7Ä^©¥aеYOå@=‘ý”½&±Ì,¥šâøþ‰$[�3ò)sMm�’ÆØ’ø—TŒ»uEl�IÎ}‰ +·5‹¨t±EÌÈ\*GgüÕ=ˆ§?Hh(fñ, Â¹å” ­£¿ß|Výn{|pU/�håë¶7¯ñæx]”�žI"-%FD# wÆ­²‘ÚWGÏA׺Ôþ»çuËÈËbXí&ÄG&{£©lpÇš Zd5Ü?³¥ß=¯Ã³c{¡¬¿ÞÑr·oÿü%ÝÿýãÖHêÉÔÁݤ‡íòßãò}N\mIapÁð90i€ƒ¿ývÿöË÷tÿñýþ�ßî+ÓлyÎK¦·çr¿JÀõ3&îK5Ÿ1cuÄ«®yzóà È~+·U8õQ•úZ·3J£uç³ý:ìUËe®Úçèr˜­2nÞ0Ö�n¾½{þ§¦:"5ΪΠsy©qËíÊg2fœ}Ùß–”ùîaM.ÏðR×3e~ëÇ[¼\ÜŠ£ª%(ñquD«´ŠŒÙ„\@êŠÿ4¾O­ø2i˜ð:ãaÍ6Ò)»ðî�Yñ½y^òÌv}Æ„½óÌÏoý ãû⢿*³_Üó…Õ/¬~aõ «_Xý¿Æ*V+Cd“{þýï¿ô²oÇ«>~`µLÃõ·ñï÷û��ÿ794+Hc5¨6­Ú첡áB…»j8d :ØgsŸ^øâ'JøqãZÛöWxfø~F;”§'¥ë3A/¢§ ›Ãœ¸p<ÍîPµ(——'”,ׯÊåóüi8Ÿâ*y9ðãmß´jãÙ ói(G±Ë‰KU¼ç�e7n™¦ìág©këeðœÞ;/ðp,¸îZD•çŒ'Œ‹iTé‘Ç�‡O(Aj{¬©µ¸k¢uóÕÁ�wl›Uԣ鎕×¢ï¸ë£ŒçĆÊ{?(›_öºa2:˜¸Z‚ ±Y”…ÇD?u9¦e" *µƒ:µF;.²íó®Ûó:=¸¯}yK[PGnr“–ôÂDf€t7¼%G£ñT¨ãlÊÍе¿æ +Àè|’MÖ•å©=�g�Éüó—0QkêÚI÷†£S5’DÛ“Ë®Dž“³‡ll)z�N¾! QͪìÒMõ-cÈN*# ×„'D ¦­1@ÈèQwúñ°3[“'�ÀRJ&;%œ L&ÝÑ»ÊeÄP‘§ð¶Dë Û{“]šÌ4•X8ŠtM&°­Üaw>Û,ìæ¦'fëò€nñ À¸Ä ©$&‹é©¡µ10�åŽvñ°¹Ò¶õ}I*ñ#€ºáÑ!}4Ù6ftŒ80-ü!‰ïÆ‹ZU ›ÃÝ‘Æ.Ó¦n„  +Tô$>Yú)3#€H.ªçÐø}¬V†£áu0�u…É� ?{˜9E‚JÔ¿ ›ÈC—éÌlF_ð[°bäaÑk‚à p¬�†dbs”B×þ~c ¿]Üò©3ódt2ÇÎÁ.mý䟱ÒÏRãÃ-îç a$!Œ¿;ˆäuØ‹aÃtûÅ<�Z)‡ùq\ø`ªK ‹!Ãzê˜y�ÈÞ<ÓQØÍC‰E”,ÙIT˜£â݃ÉâžÑm{‘àÙÎoÄæÍ•«´ÎH¶“õ�ª^‹ìІ§úbwf¶³)PÌD¨Pe°saç$¤ÂSôŽUî±ÙœGž‚ uÅêÕÙË@°��¶ñ…Äü9�‹ÃBÇš²ÀC“îp8²E¤¤¶ÓßçsX4 ‹:hu;iqdă53k‹z•4»~�/È/jYž^iC-ž˜°Ž4äœ0„œ¾ + +…Ú2ÂkðŽ“â:R*ÜÌÔòËæ.ØEÔ¿¸ vòOì‡æÈÅ$X&ªeIbRrç“€W�¢¥ 5µè€íiÈ/óº$›&æ½qÛÇ¥¶çu[m¾lä…ß®ó–µÞ÷q {]èµÌuÝ8g‡ò9ö�ÒFËŸ©jåU¹, ê[3–,©ß8S—\EïLÂuÉUtJ+í"WÑ*¬ðV«05Û¶Z]öE­.ÏE­‚$LëÛ¡VIU>NµJþ�ãT«˜#%tÛV«ÒkóT«ˆ¶ævªUê· ‰­V¡ß,µC­¶~ªUŒl’Ørždù”«Pg}iÉUصի\µ½n,¹JýÖÇ)Waû’ÐK¯"mc) Vê7iÆ%X� Û¸ +Vx¸p‚v¤h V +ºÜ®‚žVë)Xm-|K°Â\ós Ö�å-Xñæi§^Mû¸ÊU$¸ú©V1Dê<Åjàé¢U�]½w1(`JI¸•*xÉòE¨²ZvêTèÍ™O™ÚZ¿¨T°[)‡HÕ„ÜÑ^ôéRfKž"P5d¨SVÓ.â4\Ç¡M1èù£%MÑ;‘¼¥L׬]ÂuoùÔ¥Ï(åV¥ø¨‡(�½ƒ ]}iå‚éZ94A…TÝõS+#O†|¾Ü4ì“§G?-�~^ ¡jáîâ‘Å… ƒìšç»‰‘îÓÄif—_Çœ MYÀé²vFªJ˜)„YºŠG®ú¹kc„¹Åj†òáR\vDýtpvùš"9È”›‹‡L ìñ€@„"ÚÇÔjˆÒðå-Ê3¦lfÞ´KD/e +_Ž�«»¸Æ(ÑmZò‚<àp€"ché(À°ˆÄ< õA^“\ÂNE*^ÁÚÁlAuéô¹º±�%ë[ß²StUµ£óÜfÝF™ŽÍä*ÕTØŠ†~%Á…= 7ÒÊYऊa&±'Ì|´«r˜ã™È%Œ¦Ìœè%ƒ’óù_gš�á÷4˜xãØëÀ‡9¥FÑ0m‰‡¦VÁ"g榧@PeÏ6ªñgô‚ú6žnúñ²XPîIÐ/…10GÙ [D¯‡¤lªk[…Ä ³-è-ÏÔä+­ÈLЫ +gSïe ©´Ë–­¥2[¼t×FM�¯(ÔàŠTk�¶/ñœÖ©*$µ0ø˜– Ñ +š¢—æê‚´89ÈrÆÈ(ACaˆ]ù*¬¼èIç”B½mzè»NUS™cõ˜C‰R×…É^ï1u.0ßB£r9ˆÁ¦x¾.\ Ï€@V8S»¶ÒxŽÝ�éܘÈkq²q° „‰­€`8éxËúá�8¤‘¸Â1Ή畉~ ‘4ÿžLIHà äÙ q\#‰Y¸2�¯¦)Î3.ú£A�vû÷OÖ¼\º(R&“L‚¹g+l~îš'�I¤­ ÇPcP#!'AûóÙ?�¬¹œÌáÙL™GÝ·Ì|5µ§Ä϶™c+V×sð¥�$Û”--p›hÒDsH"‚I}rPgWHK"¾nLçnü´4)8"=¦=ÑBú“�žW¦·Ï<î2÷EÍ –TR¥TwÍzª)8ÌZ¨„bAåõ@•ì'®—@a +–âÊg†�Ó@sbÀ-Š!×ò^™Îj*9×mpܺ]¾úŸ†¹qØ«•ôWó¼1ÖÛäyÃó†ç Ïž7<ÿx~»ý#|/zeDÄgâgŒ¹̯Ü�îçÅñ+‡AŒ—ãÑè÷Oã,†×`½Ž”Ó"x +J)/ìýÞÝ}9_>¿¿u0fÓû0ÍáôõuVüÒéÝ=;ŒÝáãé~ 0¥T + endstream endobj 258 0 obj <> endobj 259 0 obj <> endobj 267 0 obj <> endobj 268 0 obj <>stream +H‰|’kTSWÇï%Ü›*εÍí¥4iï½J—�Š”£¦¶«X•*ˆ�Vl^�LÁÔj³K‘j±Š¨A$µPìÃ)20¢¤ÅÖR‚�±â²Ë5Ý®™æË|šóa¯óßÿs~{Ÿ½Žùûa8Žn|?aCbÒ¢Í:slÒæ0åâw2TštŸÃ +\ò^™Å 7QÅÓ§Oãøv6çdêÿ)ÅŒ¼Èâ7 >•h“f^eÔ¾!R²¦«h²rŒ“Ag}#6qÃÎlÿg^«KÅÄ…c³±¹Ø¶[Œ…cï`ïa±Øjìl�%b°MX2ö¢8T1�±/°_Å)¾Ž¿�÷“ùûý ™)yU¢“œ–üî¿Òÿ€ÿƒèÒ.áa.Æ×º$¥þ‚}2~ÊNBºÊ 8HÀ}ñè +>1u@:E¦Lï!‰šºßù5åGÙ@†wC€$6æÂ‰SÍÌŸëõ¦©i Ù.Ž:_— úëpc¸Ô*;)ôÐÃÂrÐ3ƒHOˆU>žŒ$æ’hç³HâyôıëL?l&èû‡ÛªÛ]|®œ<¤=¤©ÝÖ�6Q¥Ø?>4&¢… Õ‚Îx¦°g‘ÂlrÃ~¨%©0±äÕA°LŸ +ƒ«pp 4zпIêÑ—UôaÄ+šŒdžEŽÁŒ ïd¤¹Ð¸¤ÔœR�0aý/Eð 6a"œ¤"‹…/·[eßz!sœn?ǘ›oæõ)@9|çÉ£„oÙÁ…6«›zå_¸¾¹×ã¶Õ³´»á&AÍL:«@/…GÏ ¹¾ü´Ü]}sZœ|åæ—¬[¼AËR‹l}Ûs¡´¨>™Ë ªQº@XøÉ9G[»VI¦=F Ö&|¼CÃO êÏ_®q+U¿«áŠ¥h]Yð4CNw¾×;1Ð}¾å[AÒÖ» Š¡;w;Ší»Yu¡F§HÑ�úýÍÁQ…¶›Ú\!fÒ­²–qhôÒ�ÂüÉdµ;¤­9I® +4sþQÆ¡ùwÀŒ‘¿¶}}Š-Ñ•QÄi?WÒyI.ü,UNU2…%Eö"–î\•¿Q¯ÙòÓÄ_ߺÛÿåÖÄÃ\…­¬À&§bНÃò^îÅ[~�êQ‰ †\¦¬ª¼æ˜|\Z‚æD )š‡æ�/„…ÃWŽÔ4±½Dáv�-N¡üK'8¸²^¦ç@ëÏãŠG á‰%…Öå +yÖß—]|¡—¾�Bžr*OJ?bÒ-æŒÌzs“«¾áL ×”Û°�¥ÐƒºÜÉd+îñJ<�ÞÉd%IYDÌ2�Í*óxÁ楇Å]NüHÚ[J:ºä/bð*a‹¤JDÀÊ©õD¥­|ï>ù>ûÞý»YkJ¦Áœ·#ÇX˜³·~EP}å¥ÚK-ßw_í…eA¡ä"t¡H_œºÛø²ƒÜÓXÔb;;Zƒ¨"§�ç„P§ÓÙà$QªsØ)eëÔÛfÍ(�ð÷™Þoå¬?�æEáÌWÅ endstream endobj 266 0 obj [/ICCBased 77 0 R] endobj 255 0 obj <>stream +H‰l—ÛŠÇ…ïû) +AºP«Î‡[�MÀ�¡Bá�-Ù´Š.üúYkïªîê#4‡oþÞ½kW½ýñɼýû“5ï¾{2ÛÛ§Ö<¾'ÿÌ·Ç—íí߀>~Ûìk4Ñú½¤jšO{NÁ”êö–‹ùß/Û¯øˆ­Þðkæ×VÕ‚Ýñ·‡úc°âÄš<%ï|úП°»k|ÚÆùðô�Í›?àÊïøÿƒÙ¾â›Å?grÙKô°ëbÛklæñyã_>o¹TxÐðó±}ØÞoïžá�ËÍÌ_õhÏÏ4õüëöÔîÕy›Öóü_|Üê¼~û�|nŽñ³ûw÷ÄŠtÂ%=jBÔöPJ3!"øÅŠ ¯þâ’Ë®½~þ}ûþyûº9O½7ü^Z@$€ì^ò…œ÷a�ŽÀï1Å à{@FÛ t\�ØË‚RÚ‹§éþ.+¼ þ ðØ^ Úiu�wlÙc›,‡ˆÆé]'èþÀôŠŽ M9Ñ8ÿxסîÏ�í:¶O€…Fi¼íÞj´[ÞS'’£x ëSú¾@QW3pUÀc{�ŽÅÝy=ŠÍè<"v %àäÝCà*0!$ MW4· b*CAv'%Q +Þ×*ŽkèQ]Í»ë‰\�†$–½Õ˸`Ĺ»OZNðÎïÖG-›„ ÊÉB¯’;:ft†äD#’>¤=αöS¦\€¦D;(˜ÿ]§²{ssPP‹©Îa[N?G)㡨J¬íâð + nÜ[!€÷í*ãÃøã{´ïˆþðǨ(kÖð Wd¸àW¤~úIöæ!Ï…-vPžþ໓†¨ðXNv;ìÜÑ¡H:ß5øÉK +â±(ÈVã³ ±“$ç²úXÚkðB³´Aéq^�Ø);šö’ØÁV( +’ï VµösÝ‘Øa͈wЦJIAªÒe(©^,Íõ�qG‡¢*v +Ü;êQ�H’éyëÝzGbñí(écˆ]9 `äÔáÏв„a‘ø lƒS íТ‚4á:ó\·“«<†…Ù”r7\ǹîHì R?­ç«•~ö†XFÌ:rØLç`ž‘Øišf¤ÉIý”  Ê2Á( +IAM}àÞÑ¡H»Ùiz$Kê {·h]ã$ëvî¨/�®^ZW€úƒ?ø>¶­S�C·sG‡¢TtÜØ(�¡¿¬‚˜ƒ‚ìÔÖíÜ‘ØÁtb#ÿE`¤±j·Y¼-¤�¦…䊕¼Ï(£JJwQV{ƆŠ=ô^>�\„3ô3)dåd +¨ØK�1LçŽÖE;Àc{�Žiú¦ymèÆv½Ov§Ï俨,çANÐ;í¨éü'º¢DT­.ø±þ¼'ÓÀ÷…\‡Hº£CQÌ=I©?V¬‚8 7Ö)€ïÓuAbE'�õìÈXºŽCÿÄYE+:5?÷üRž\ÆKU¯èPäÛÔ Z�½]ê½ËV$v²– §¬f,ëøèêI +ÒˆóZ¾?&[ˆ 9� ºöCUiàG|îèP�›û4+AÄÊ$)ð®k“Â9Ç1âÐ&3¢þXuPê�A×>€ÖOŒZPÓ´_С(Þ–DŒò·k�ÄÔçïµ}$v0ø]߆²ŒjµêæmÒš©7%B¿O,ˆvdaVádIpãRu”ÒåUì2$d=ׂÄNî ÉõþJU…ã¥ÀÑü>«Nrß;êêÎ1ZA · há([>«pt%˽—vt,¨�€ìuNCßUq@–€U€ž‘QªAÓwt,(Å�T†^õ2p)2]ª6U¤vÓ3êvDb¯«�ú×v a!pCµŽÓßQ—;£ûc2�‹ë"#÷1�©YêigFǂʉ¤ðŠ*WY�¦¥ÊÆ XÐPö²’ÚÞ†�ènÚ?Sø]v&4ߦuÓ¯7Ôõö¹¸0*¤^¹ÚtÞÝ×ÑcûÉ|Ù¾nÖ|Ü("± ƒËÆâß›éwÇ+mäWf™ê®D<™ÇçíÝÏæí‡OÖ|ûd¾ÿÙ¼ßÞÃ’ˆ^ÎÙ4ö`v\{–㼺9 ‚­¦%«Ù?�­G„bEÇ…2Û|šQÂ&gŽW%.Ô\ÌéÎ�í‚,YÈ3ÂÜ +åB.¢A[,ç«ÆïÃX^Ñq¡é'§¯:ã3Üà±½@*1¨ŽÑ´ ' d¬1>!bˉø>ïDk$ï³­¬üáú½â2U‡­è˜PæÂë{íS1c e�!泩ô–eP½Å™R¹@³È°;¡šóèŒøÂŽsÉtåX tÖT6ç9 ÷_ðã5#‰§R3l#(Ì ‡8Ó „%‹ËÅ9­g“+6)½ºâ1Ј¢s¸Ö¤+ÊÙvVÞ‚úžËñOÈu0‘W¬�+пØQWÄ–ƒOñÉ Ÿõ‚Éû(.c¨§÷®Š�g^|˜>ÜÆ°ï²)Pê8©¤kAÌ�B”tEx°¶+òå0Es% (�No bçŽ$ïz¯(Žw4ªx‚cmx«S“ëñ“Ií,ˆv ®¨b‹ÇšË¬ŽºÔ´B!’¼§á,TìÜí ;Pj@PEŽ�A–pTÊmëªÀ'e˜¬ˆvvË—ÒUî��Ž•�TLé �³jgA´Ã=,£<ñõ¨GvU‰ô‡•m‡ƒÂsê]ÚYípÿ¢JˆŠ\Ž üƒÂ‹r{Â@ +°U­¦}AbÙ�à&ªr}ƒòiL—„‰i§¤JôWŽ~O]í …ª£1“,"a�Tž´�÷^ùJFgE4CmÏèpŠ6y â¯ÈïI®›˜„Ç+‰éfîHÌ`b¡ +’月k¢Ãßà5¨é0.Yš¯…6fñDd$ïèNt›XAÎ<½�Jd DGÉ�:‘«¦X¹ZqT0 m‡ ò!d¡À +›Øsy+ ^2g�¨¬õ�P0õâeuyÞƒð{Á�á~ÁNoE’¡í»•#˜éŒ'% •YD[Ô + /{´ÂÛ#'Ea“¯ˆvPô ™/¨¨J!)U`BºÖvmŸ¥o{h4mŸŒ3Ô’oµdm¢O12–PK=æhñì™í4b>‘‘9d!c>¡Ä5ÿˆ·óب<¶è˜æí‰¸�8€Ð°ã}²�0o�¦ÓɱFÎSœ ŸtZHÓášBd©Î˜f¹!%Ýu63ŒHnÓìBYzñº±Qv[ªd;‰�à<…ïÁ5¥ŠÂâàD½a ÄÈ�<¤AsæÜaýflÛ« ¦"Ý\;+;¸$¹|•œã† SQBÌá"�¦J^­ ­R™ÊŸ›ºraŒþÀþÄ!ËÜV+;U4v¡"çdp¬™ªíÙØõX̲|“ଈv¼þÈ6GÙð1L�Èé�à¹Î±«L˜"‹PìÜí`ÎÖÿÓ^6;RÃ@¾ç)üþ‹ã\A{ä°âÀÞGÀf‘`ß_â«v²q œ)3©‰Ûévwuµ&Z‰-ò’4«ÆeK�aUˆÞNLq— WHv âW[¶x+M1´Ò@cRè‰}„dò‹j—G?�Ÿ/gÃÐp²Ùo}f„d†±“ã_“‚Ë¢º’:ɺ©� �ŒŒaïÜ�/FHõH +ZR¢6›X}nÁ‰*©*ÑZSÔ“Fì#$;¤SVG¤ ÜY”í<•(“cÌ­Kk­oSÜÉŒÊ=c†Ö¡1M’.ò£ðæ›h'r˜œA¡dCn +îŠÜ¯H»§X tÙÄ÷‹ŒHD3ÙÌÚÚ€è~…BݧI5C ÃHTY’�ðÄ6ÌèL‹DÁR›é+dv²x¥¬Åª–û¥‘GL‡ ~YL’&ßÜ 3ƒŸ0C¡ê«xL@^$nQ´¥4Þ€0öa€îW(ÖõÛ^žÂ ^ªA@\Eµ­£�Õ ¨úÚf±Úí,y3(ËùNÝ×àU¯[Õìm‘Sùw]åzµ»‘ëoý)(•¬mFO¿u�ÛôÙ}Ÿ~LÞ}›¤( +Š Øó™»{:“—ô¬Vmœ”•Õðo/Óû'÷îÓ³w¯ÏîáÉ=N�fŽÚdYA6ÌöóçÛÉÁèZt…éÜë�pÁöT04ÄRIŽ|£{¥¬=ôßË4Ë7{UÉÕÎA8â™(%!òçüîû‚fþ6}Õëu›IF'm†OÜô›1g$§¡E8-JºÈ"W¶PZ O;ÎÓ±=}n¤Hà�o¡¯æ© [�Ze%ßIäGµ“Xz&Z™íAHG ÚÐv…LWtË6[Ö¶Œ6ï�ÝÇÔ»!·ì´Ï[¢à³4®­š4™¢BwÖárÖG�š‡Q©T§§û¨7Ð<' 6Àö`ÀËÍú7;^ž�Ë¢�»�áëæÿÃÃÈfÚ#)|òç‹g‚¥¿$X>,õ & )Á ¸êÝASø³ ¢£D‡¼€ ™ Lµ¸ÒcšuZi9ûðñƒãë—SK endstream endobj 256 0 obj <> endobj 269 0 obj [/ICCBased 77 0 R] endobj 253 0 obj <>stream +H‰œWK‹fÇ Ý¿â.�Eß)UI¥ª­'!«B² ¡± Á68³ÈßÏ9GõMwŒ!†éî£[•tôúôçÏ×§?}n×·¿ÿ|=¾}}|úü×v½}¹ÚÝfòçšøÙÛº®/o??>ýŸøòøôjo—]¯ß?^°(®×·«~ÿû²ž÷ls] ÿ¾ïëÞ±¯ôqÛ6¿^z|óÝ�_þñ»×>ŒwŒ�ŸÃ­nj:’ç}ssÉ^¿@h¶â²Ùöõ¢?ÿõÝão×Ï�_ ‹®»F÷nc\Ëpší~½ýôà'þ|±u{®ëÇÇ ÔX6¾J^rߣ'O½-û;î·Å¼ÞOAÜ *¾„Ý# Ï»}vù�^†C·qõ¼#ú±-<ëÊ{­Òðíñýã/ôõ6ðtXnµuÛó¿ô�¸ÊYÞQO¾WÇí´a3]=xßWÉíÓÏû(È»6ޏ{wê—êöyÏ5¨}ozœlׯjúÍïùAÝ› xgS +Ufùè7¬ž*:týøŠ7Ü­ø7ì=Mvµ^F»gB#ܸS0¡� 8ÝK€_ëë Ä.¨km/<�€¥{—dË�ënË »8ðÒ¡Öä;± +“–’,úÙïN½€4¥Î~¯ß%Y»Œ˜‚sð˜zÕsum ×C’ìQO_u@òÍ}C·!|^ɬK¿«®ØVxÉ ÀÉõT6yB¿_Íßóà,<£° =b�mQéÆ0XÂݹÒï±kÇÐzÇUµ~Ä‘"LØ��·Iµ.M¸ƒÜª»cpìâuC0T€—vB7qoÀ¹Y™ x�: e®�«+W¸ÈŽTã¥Ô6˜8ΊMû8bXWÃÇQáA§¸$Ú€×+H+§ìëL?ñÔwÙgô­ˆ[²ð¸ÉðÅa'‘X|…`�ù/þ´Z0ûÞç€l2”ÏÛÇ‘�ãÀ;ŽK‚8)…÷¨‰.'µFµA¨ã´¦wÃrr¦3“h¥;Ànf¹`†ÝïnFk>…£â"àh𒤉ïñ›ñ”‡ˆ`[/þU’NcO/ª ݉¸Ù.ì©À€$<‹L|!ðVtb'Ixy¯µ ÐêÌ$á�§YaÞM¼ëûRþ ÆZ—`ów µ)Ÿ€¯42°¨<†<>™KL’ Ç'(Ókoœ½¸Ge(’ÇEhc˜ôÓf{™Žü0„#®3`í”dòÝÀnµB¯Ί˜µê +˜ŽGC²™k€û +¹mR×%l'm"ÚfI�¼³v�3L<…—2‘„ê;«3áP"fnšÂé„}ô³agI]’lz…)I ì +ã +[VN�lÕ™L%Ét˜ŠÚÆÈH2n +÷]¥‘Nå×pÎK"£â×VÍDít­Ðllf“g˼J«Ó#SÒã4 \ß*ø¬F©ß"j5pêØ iÍß' r?çŒ$Rmå¯f$�ÿWSÔ×ñê�ý¿1‡þF@$ó [�ÿ1©Ù=ß'5øF•Ö�'²jx×LSAú>ˆ¦; Àû + q` {‡MkŸ J† sh“rDÈóMíÕY›Ÿ9„[1žÐa ˜¾­çrØÅ”#…¸ÄêÎ�EV &˜ƒ �õ¹SØ‚²¦äxVã?kUØ5"øž»øÊdqTa/ lŠY •x4Cà ÂkF9«³q¹FÂ)8çY ç�ñ\îãË )¯™ ¾þHŠðj¯ÛðJ3Á9Χvëã7EYÉéÃð·A…Çý£Q ¤ê±7ÈQ½Q¹dôŠà¤ö+’‰¡0*º¹�š‘½�Ää«Âk¼á•é°êýªxÁjªJÕ‚¡o‘‹¨§�×%@èíËFT<Øe[û hžt� AÀµ×£„Ðmh(£bón»ƒ»™fæë}ÄgÙpœ‘X~�kR¦|Z*åÚö­Åo ºrX™ŠˆêkÔž×ÆÆé2©­6x-÷×ü!Vq"3�]'¢\�OSY_ÛËY“ûå•¶g¾^5ëÅ×êG5?]“K¸#$¦GïéWtÆbÖ,)_ÖãËg<ºþl$Øä¾ù â!™­°á²(Þçßþn=Úùý"ÁPR"2ÃŶ ÷÷ûéýÍœ_SßÅoCyÇýô4Ç +wHï‰yu!ßO³S{=ædEƒ_ù× Xº~}!wÊüay½eAUùËø›¿&ÎÊ—;êëþå�?ä +ùg7èGüøñßùûO½ú6‡}wñB?f1j¤bõÇ_ùÝ_þ÷ÿõûÿó3�Y<#ÓýîtùÓ�_þ¦ÆŠg¨3vR?ÿþ—_þóã»#}ÖCÊÈDäoîªÐÚ⩆„=Ÿ-ð\IFvÈá…H§v-* 0Êv0PS·Õ§<ç�È _뛘B$®|+¨ÿÕ~ݲDÚ�ŠTίƒZ´nÓ‡|Ø×¹”h/(}^�ioƒ²{™€oC·��ÇDç6K§…Æ’òžæ%E¡¸§N¢T·ÖÏ·m*O¥|‹å‰(AÑãgùÉE×CéQ‡_]´NԸ袵`›“�Åt(~£Îö“{몂n@ƒÇ"g»Ûpæä'ª–†ˆ8ks°Å½Xý1:ýÚ)åcM‹¥ åÔE¡°j…­»q½ú[¡`êU‹óL—×kðL}AWgìð"¥Õzì˜ÜŒÇ2Îù…¯Ò•½¸-." Í +ÏÈæç Ü©˜¶,Úïâ½§²¹Úêïî9ÔUߢ#‡rÔ§o÷^„gââºU[»͇û¡…RѨ:ÙäD�ˆ=êÝôjŸDÔo‹÷ÛcüØ bù}gÜQÇj™+#,‡•>°e p +<%)#R#ÙñÜËzܘÓ–‹¶ è+¼]*çtâ´‘ ¨z­²Œ[Ô±}É“JZ»¥]Ø~Ñ>&3>¹\y�ÒRM¹ö>™³£M…WËŒTÝq¶«T½p¯÷Yfá52"+´¡æ + ìwÓ¨dðj¹…=„�²ªd�cÁõXP}¾³ˆ«ú0(¬Ï’x†[ÓèÆ1Bê¸&ÞCˆ7¼*fˆäzFL8óY–Žœ«òÐmYuñÞ’� +fßà^3â$¹iY™ó\á8²¤EðdÂ3œKÏÑ”ÍÁWôZO°uG¡y“£CnèÈj”ªO¥hfaß9^1RWqq`ù×zíÛ¸ÁZ +mÙÉ+�G½-Ä“ðr’ŽÌ£Ú_J¾?ÝgPKõ”j9éñ˜qD]Ä®ð¸ ÕO(3h3Ò+}¥7r ||éø…Ì/²_'éF + ÛÐ;™„�¿bÆþØ5¬°…“"œHIXÛgº2@O?2` …ÏN�9Ë7$Cæë{Õ²LPÌÅœ¨rCÔ7ðÙÁ°=N$¬3¾»G¾OIh›…ϾýωYÀ´ýÇP <±]øEº+ø„�ÔÒk(£�ÂÃÔ±³ÅAà·”ŠA•IËà ÄnðèÝØÚÐR‘J|¢ˆ–ã:Š7/3jÞNzú°œTj!šÀ&UÝ×ÌÛñGÌ;â8Ô²³Æ9éa&â–±>yŽ-¹C oÞ÷‹O`(S Õñ Ò†ÚT›aŒb0¾›×á ·Æ%Swèw� þg4Lú�žNö1š™½Žë.Ÿ†®%F4³•Ë +eËÝ‹ët?m@7$ø�ÜZƒ0,ñ¸Úƒ‹š"løûsˉ•жÌbÀä¥"ÜÑ¡$ƒŸðå‹­«v�¬·þYãhêyÉHר9âð �sž«Ð-ÄÃhee.™,XI3yÓ±J6ŽŠÍk;,*H�¯u6[Ã*üg0ÕŠª1„¤dÀöU ¯qE�TïšÁ­Ž«së~"%¸ t/‰"\ ÔWîKzœHŒ«‘-FjDgô‘j¦«ƒÖ¬‘7g÷«Þ_8îq]ŽÃÿ› 2�œï>(ÆHáÿkãôi¨¾Âÿ'¦ó'Q'å^oöx³çãß½™Þ©ðüÊÉn ¢»~‚ÉÑ/“¬[©¶¾õ¨…§î¸ŸÒÖ.~ˆ¼«6ÎSÑm†z12wJC94ôq§*â\¥…c©è¼cŒ±~›ð7Rœ—H +Ãj{xêÛ{«Âa¦z¾oE� “¨«#�ÏÞâÜÝD‘ywò¥€¢f¾½ç¤wŸ··Â ?s‚†ŽS�ä·7⨺þ> ^=“�PeoïÇ;9T Leîîšt¤è­·3âYXîFH€U`(AÒìowÃáµÚç£Åã>|}B™4PÁ›Íž!ZY <ž Aã=¦ ®ûNŽFip ®*‹;XoïÖ9Ø)#ßq +¿å×z,u•�ýv'Qi° veü‘|ôÊ’·¥½Ý[qCöBX åµ´f­q;CAK ;ï§-WæN pÜþÁö>{£ÖÆ|ÖÃ}ôKÜ…ÒG_¸Ä}‰¾£†™RdK éVs�Åâ7ŒëîÔ00twDèûƒ÷]\ܰ•RWá®8ñ…BPþˆ0=Ûöi¼¥Lx<Ì4MÛ>b{ŽXM�¨ÜÉ´Ò´…®Ö§BŠž™"&€›.ptUÐYfd¥ÐØ|mœLn×ÿ-Ó:Ù¦#ð(½gœÚéÖãI-ávj=sƒõ¡¥!5!H[²¼ûzÂê»& !*—芑Ê6­¦óœlW¸0ÓðªÕ*X’?(ߊÂ;Õ|µ"ìåY`ÂòãÐuùÅ›w´(?û˜|TY1ABS­abˆT\¬[ØQQ;¥×)¾{¹”m< ]§£_›z·á}ºøwórtÒ7﬊×ó•x‘„‡/¶.—�ñZB}1ë¦4lj%÷PíѯÀÉã +ÈÛ–TÐ*¢¤êF¾VÐxÞ!z�Ú(Õ_ ]íÞ¶.]{ +] ?•¯Í$®V +Qy…†§yžôE³ÌƒL]J†1>õÛ¨o£e^¦®HÒÃk;˜„x±µÍ¯zŒ’¾Ë]˜=ÍB_ž +Ôhů¬ië&Là.˜‘¾?¡â³íîPXÊ/ºÂ7úÍ)]/ú +²„/) ªCª¶œÔzœåÀé»UãÓ€iYÈøt�Ó^ᤆq^.¹•ìH �÷*¼RiOoÿãæ!•¶«^ ôÄ×Tê¯Y4 ÜèŸyr×´Åå{ò:뱡¾t•’ø )k…�ç±qB8¨ö+4�‡ºL¬-häŽç°ÓQ÷6)´ìnuGÙåk¨¶é‘û +²²RuÆ´ÓC~¸s}ê·^AT–oÔýŒßäZI°«wnÃ+‡÷M'‰7óZ·AÓÏíñoƒx�¼½¢/¹¾DcB–Ñ•Ê�ät6¾Št›¬¢`g!«›ëø6m*ÿ+wÕ”|»rx™~_±,žó´ÓbÈ”‰+¶ÅŸm}¼R\ +~}Ku¡Ç%/®‰¸Cå�ˆâˆU{_©«•*e)ÞAO‚–޳@¤;â;TEQâñ$*Êí˱(*Ú¸öf¡:6%^§Þºn'$~yM> ‚±�C^)ÄŸö:,¼Ú¼n áç8Ž3÷�×· ÄXÅÕáÙìÂp|åõ‚Y,ÆqX…vw*ÖçèðXLýßo?ü§r½®û«­m¤ËUù1ÍúMÄëù+w¿zlÏ3ÿý›¸jûÇ—ÆFö;ü"ëñû>ÜaÌ÷=mÖ½øÉ ¿�¡W=ÁÖÇJ�ýûFT”‚!BÍúâÏ_^}:eßdGo_Ã/|^¯Ö‘E‘g÷Ç|ßÓfÝ‹Ÿ;èo§Ð#ÀW:q•ìêh›ŸÇ€»´)�/_-Ÿ}¤XhdÊ «ì Íe;ÈN”‘5ò[©œôX«‘Õ‹u{‡¿îÓ®i«Ôɼ‚ +ù¹OiÚØž„Ma–>+…¿x½*º „qó©ÒÐ�ÚŸ•‹»ŸáDk\ýe.h6­bLØ×NÉÛ®�5 +í?|ë÷EKžQI?@é.ÿøÿùËO¬ì9&>$œ¸n.®1¾¸ßJê3|ÖÄO¹°ûžuÃ-,ºóˆ�Ô-ëúŽ×­H޵xÒfwêӤ̑¦‰¬øE}c‡mȘ—µ)ê\Ÿ÷¿Í(àE±_·‰¦¾=VBž„øÙB«Ù”Þâd›mä4–†à{9kgS½”[PÐn陫Ïû»š÷Ì›1â˜ÛÜÒR¢RS„ç6Þw—WJ)jJÏÁ&© üÎ=g¢*{^o×\ÓjÛ)Þ3ýZÅp­u7æ—ÍdrËi¡^ïÆ‰ôŠ ÍœzYñ™p¸#ène¿Ø!ð<·òΛ´´°maW'ĤÑtœ¡eßþÇ¡t¢¯L ™Ñ¿Â£g¾š`{rs”�ϪDÎ÷†aì÷sÚuÞ3_�Ô…Ÿ¯7 c3Ï[bÕ2Kö8|' +rt¢ð$)jèÅ8^°Ru²‡ÕÝÁwó¾­Øª�LèÚt+Èð[>èûÙæ·çW%`@,0HèÑmõI5R­è‰…Æ% ·'ãû œ7zHQá]2ÂqØô®î€l`ÍÓ[^é1K7¶à×zG̵݂"þl=¹L€^ŒŸ$\SN§*,À¾³eTãsËTMÝ‘’l>vImöÔÂvœMÖÂK? #”Ã#s—‚3*qy=åÎø]rlRÍ +ÛUÿ>®0¬#ØJ¶|F¹–7I¹f€âÖ[@ç¡^df€‚b$µºO-—23ÿÙq+øX‹ª%ý'µ»?±g`å$x`.oª¦ÿi™a³éŽÜ›Î͇T¶-®a¥^윜Í^%Üw°MÙ�{íQïÉ÷î‹ã ££Á§„v÷cwV/nñ¦OóBv*BÖ΀þ¤ÅI <O2OFLÜ xí;b�pŒYL>Äçî‘1‚ècðµž=dDƒ÷ hëÑ¡Â}Ÿ°eÇ¥ôŸ™)GHé š\0pµÛy #´ ¾ +§Þå›å2•—–q{˜ö…³¥í—¾[:O:˜¸À3D8=éÞ×+œžµ/�Fh•–î“Èï‹w½#l(Ô²>Â+Fl—ÌÐJ6p錖Lqì_Æ}Hä’ z˜ùÙûöïT{¨Û/ R�'Ì^ë{ˆð¡ZVN9zzPË�}ÍÂë]ÂÇS˨ÙÓÌŠ3;š¾3øä¼ýWf8÷Z,@Áç‡>¥zܧN‹ÊÊï"Bu}¼êöù¿´çt½ÿçþ_‡íÖã² ì6fÅ쇿–«„?95du»3,®áÓnçöõ =yív¯øÉc7¿Y\ß“Ïf`êO>·vâ3W=×MÞÅ,ÞT– Áªv¨—/ØCh—ê§¡`>7ëí+°žˆ/±\ +ÑäED8,A�rTj®óñÖ={–JæÒPl�ZK´šÒZº÷œ®ÖE«Ä'JÉR²6vYáZDªP�XÌ ª–nôD^‚­GDÊ;ßÛÈ•XªÅÓ¢�—cR¢EÑr‰`²#xšß$ ¬§I¨ô°ô¹Ê^0ôvµ°H¿ò¡F�L¸…¢d¶}á‘w>®Zj-ßÇa?~`ì§å‰úç?x¤/ïôø +{sÝãgýÓÆ|çÂt}ëÿˇõ�û0½Ò-Hr:8w*êùõÃIÔuéYJ¿ßN±%û„Ïdã_ÿga£úñ¤„�:ª cpíµ“¾UW§ð€ A�‘óÌÛ·V¾®ž)mB'þ{\ÔÒ·LæÝïW…̓m4(6ˆ{Ü®º}ý!J^² ¤N ++¡d(x +VÔòÉuèÈQ¡­XJÆ� ¸Sû„–Ž/éÕ.zXd>õö��¾seÞ±YÔZ ¤ù%±žqûRÙa=_Fîšy»÷·ãÁº@ᓯmÓ÷ô�¤~ׯZYªldΪH—×)UT`êë-…©‰5 z l©3ý*Q®Ñ=öU"*ÚFÝÍ”Ù4BJ %™„A:7ÿ¢«ko+>é¡’~ÛI˜¨’X‹�€¡ÓKµÛ³+’¥ÒžÌÓ¤Ýq`èȽJ4õÌ*ʪ|õ<Ò½îº =¡Véº#!¶²[KK-ñêBS¿"Pt‚ÙºL_øUý²Uâ]æz Ú ¼W¥LSÈ÷”â=,w¥�à:!øE… øµ6)LßMlô[2cîfî.ôEåu0²Yh)Z4ßsŒ {´Ó¸}›’GÕÉ¡[UìPº“[¯¡5Ç×…U›1,,ôLæ�ÞC±ËÑùžÜB±-Ðé=ob_lL¡Ý��‘î©[J,Ù¼ +·Ö\Ç6@<�x^)¬ú>|0A­%8ý ¯HíOG<ƒPÒ[x ’iAò|$ÄZ¾´éˆ¤çÒ“ .¢2ÍÔ%!¨&JGMPH„®aö^¾Ð#!±^ÆXÝFOÀªB(Ñõ¹ò8벫žƒOÜ0€š)D¹^͵k™=誴Q� u‹:<„&R¨(¾„Âï 6 /ÎlA@|´£[ÅI,ï¿ëáäóp¹ ó:AÛ =ìçk*Õ½¿C¼ +MõÚþ¯é·«túáP¶/åsnWL%Ÿ&±ïm�E_ý§g$5µÕ©mmf2ÏLÞ�C "~•Ó¥MS(�9mö÷AWÅÖ`hÇ[L=VeV0íÌîú*Oô +÷ífÕ�Й¤ê…„KOÈm6�P3èÓ`f J%ÔtâþØî"&ΖiVVMl‚ÐÔ,¶©;¥{R[Øû¾ª‹Rå¯ÒHŸ“2 ØÕ 5v€ÌSסìà�XNeÍ#UņÊa8”™žˆk>ê\z«“Š7Š©ü¸âÑ—ZdŒó8.E’’KDáC(J’¥¢øŸý%,¤MæþÖyµ9 +5\à ¥teÉmxEK%[æ—¨©Ðù¡´Ð‘Õã6hy•vãЦŠXéˆåÒ}eBìÊ«¾fÍëÅ©éžKn¯DÌÆ¢¸®ý+ÖŸ#žS/;ÿÚy–¹á2݇~%?¿«m…76]‰x݇ôùÓßWí??È<°Ö~¡Uôýý~ñ¸?Í÷sÚ¬{q¹ƒþòµ¨tkó­!äH·o§PñBöŽ×T¸íxyBfÚIþÞ±–×S*¾dܦûLš%ËñsÿÿüíGùúíû׿¯¿ýß/ãëß_ßÏÕ(*5­è-‹(èû¹ ¨ß}« ùu[>‡Düæxpõ‘Ãnqîæê¾ì¡”4¾å¶ËB§ ã0mÞþ¿~ùñÇèµG•?p¬òûoLÛù Óö6(òGÿÆoºaj và,4D„ÛoFÂð…-'|ÿ[}ï´¢äÿ¼ÕÊ’ØØòÒ"·†¨âjèɇÁ¶üu¸Ž¢[ÁõÂ+‰/·lŠ;7Bñ>e:&ìP‘ãòk£˜ÐBñ~v¼ÖíýR�cet1¥ì´<áï>3gC ïZ?%àòýÛcûØV@lf½zQ¸·lJ·N‘¥eæ4¼½ñ½œ}²©QëÍÄ‚[Fæëþ¥ôÕ«jT +#G=›š.&T¹Ì0MÏ%¥h•KBw‹¨~ç^+ñ“=›I[M¾ƒñ#Â#Óo*½àÞûn,§²L¿†<½?)·û.þ˜�U�ËÊË“†IË~ñ2`”µŽQúºÑ_Jj5 ìÚ¬{¨FËqöXø¥ÿãPRËӿ™хçȈ(+5œ‘›ëh?ëud�ฟǭšëžéñÕ SF<Ѯޞaµ¬š§ïDAþdÆER´0‰ñv ©ežìjn÷nÞ·1õg§þõ’8‚æá[a|@ +I$Ô„BàŠ Ð;bßZñmvUð‘Xè–\-b›X¹šý£[HQáS3ÂqØõ®ž:8SX4ƒwz¬:Œ1ƒÆ±¯jÁ=ÑbµÜGr™½xŽláIÂuJ‡ƒ’`Ž“˜­†NQ}Œ[4uùØR×Ї°§nÕ÷×.±ç%ªŸ†Êá™9ˆKAçÌÕ8Ôñ'ÂOÚÕõ�î«ßdžu{Í–ŸYï€íMb ¸õ¤�›átêEV<¶¼N5ŸZîleÀäbG±z6ŽÕSKú¯Ñý}´Ìh‹"<çú¤jú?=36=t[Ž;½1© ¼Fp +�‰F6{ Ä}0þ <ëÍîÜ«ZÖ± ú�ðQë\´ðSÃ'Zp°zu‹7¥xZÚVP°vŒ’'�ðtwÄ™á³ØÐ\q`»d·œ2ÊÞ=Ø,¦zGO᱂ŸÐ¥ZfK•Væœa¥´F”b‰£UËöfx|!§<õ'Ëe€+/-óö0í gGg´ ß=%L\`Ç�²É©¤ûدF*û\�¦ª=ë-"|.ŽyÓ*ž–=âÛΧf†^³�Kg´dŠVÌCª ×L0ÂÌåœÛPí¡n¿4DHm>aöÖÞC„Õ²sÊ9ÒƒZnìgÞï«fÑÙ²§•×µ¸øœŸ|LíΠϽkMðóMŠ^“ûS|ªŒ ñ."T÷×+dËÿ&3— þï÷wÃeÆËøØ$óôk”jtÇPA 1_ëeXúí|B¿Ž€˜6àŒlõkw?ZÌ_ÉgSp¼ a^§lϵvw1«7>*ÁníuŸÀŽˆ7¥ÁihÛjD¤ÆÓÛõeÇëºÃ“ˆqX‚Bå°Ô\Ï×[øìZ™KC…¡´á”NË)í¡§ûÃéj]µT*àsIYä�`µ -Q‘ªÔ3¶òk¹eX•èK°‰Xùä{Ÿ¡šMu^óXo¥*D�¤åÁ¤GDð2ÁIAP)‘¸5=¬}®´ ¿]1l2®~hQ$ r¡*¹œ_xô��«–v™ñÜL{^f4&þ»›Ø�ßù“úؤ¿‹üår6þÎ`�¯ÿ6Xzü¨\jq(žÐçß<"@]·¡Žûí©öZ¿ÂxϲÍÏï,lÔ¾J*hÈ1ZjܾJFÕçZJuïï!^…–zÿêºÃã’œ~øa¤Ô:.�J>M bßÇ‚Š¾ú¥g$5µÕ¥mf2Ï,Þ�C "u•Ӆʦ‡©ÊþZ6]Çû «bk2t`$–ËkZ®,”2»#pè«<‘>TÀ¸ï0«ž„Î"U7(< \xAn«;„ºÁX+[P*yQ;Î…×c»›tXøX¦Ù9X3± BS«Ú”žTîEiáöΕXT*• úuQ%§ôÎÐtê:õ@“<$Ö<ö8ú_jŠ =”ãp*3¥2QÒ|Ô¹ôVO +Þ¬¦òÇ�¾Ô"c|ÆãRD ¹Dô<ô�|$Yú¾œ�®�4Yç§Ì�¢kããÔpí�dÑU%·áÕ,�lYMӠ盬B46ŠÛ åmKú�CóÌ•q‰QGæíÔÔ+“{W"*�«OU#s�èAëKÒ´œùÑŸBÕÓ^}*J�ø®zU°öŸêv91¢†!ÍŽ]¹Úx¹Ô¾ÚyºŒ“µ–ÖxF¢ÀûÁ <¯(W¥JÇHv®Û9¥J�kŒÐ¸7ç�éVl×"4'â5b—øZ»‹ÇãÑ’ä±%±‚ö,5„c7ƒ Z¯Õ¡4¬ë‹šuV·ÇÂ$ÕÔø8(b}¤#þJ÷• ñ^¯ú:3¯[¦{.¹ º-·'0®×+ÿá¼L’,Çq z•¸@¥‰3y§Ü÷õËŸ;Cše-z|R¢@ÀËχ©›SÛU3ߤºªä|a@¿«mõ%¦"®÷0?üMw•öõƒœÀ¶îöZEßÿß_¼ï�ç}=6ï½ñs7ýÍ5šW&|îŽïŸPž�ÿ}ü¼˜L¨§Ç¶G°óý;:-ÈìŸcTN¬ó£„†ËñᯘH‰îD¶(±NV4JQPz6«ˆß�D¥”€²½I�IQjSumĵ:¸Ò¥MÐÖ‰éZ¤(«Ýj ü”þDÌ(1üÁÌ)Y�P6Ð7¾ºñ»—¨é¸fŧ8±ò´ ¹¤zL©I:Z¿8Þljs‹bäVÇãI5W{\!³ã<•P@ %2eÀý,Á¬‚«C3"+±ºÓ>„!¬�Rg%5Ž×]o¼_$ˆŸàœ&iäM'À ”!�ÄìY3ݧ‚ÏB7Þñ¶R.ú|È nµ’J±˜‰·"Âa±I‰T.“šm£@� +V��SbyϺÙLvÞƒ­LÊCâô@ǶœÓt¥¿Ö“”�ì§Ø´P„͉Åü�8>.@”M°Ë.NÌljá†7gfÅ ÀÙ¸¤–mI¯Y¿|m†Âåø-àW²d»‡;´‹ ÌòÓBŠÛøÜ³é˜ǪļŠNýwf͵<1oš±9JU£‡˵SÉZOâЙ5½I÷aDÃÅ_Ä—Y½Ù‰•Ç®µßM­\¸õb2æãAþ—d–˨ÌX÷„ûuAO|/™jò\©A¦óédú5jÊÍçæ¦[I™µw2nHð°Î19�A¢¥¹>|L•Æ6ç©×É)Ó<;b…玈rÝ}àâ‘UÞ¯D{4ÛÍ ¢î¶5î£ dv¢Ú¤ß×�pÎõЍ=�RË  HûCÔ&~‚öÍœþ%rSÝŽþÂd<(ß4ÿ7mÜD[2€¿¿©e!QI;©1žÿOË¡~'hzp™CHÀ·ê¸û&…Ïý”x¸¾.b›8Õ.7,Ýá|Fî�)mógi¤'®ÆŒ_�/­£`ìîéÉ,³ƒF¾&¶ )×L(néiwDÃËš¹T±*¢H#•nzҤ݌¦Ìˆþï¿LL +§e® î$î¹ Â+0Ûݽ �ºYf<ÀKņ:éË‘TêÈyzµ&1üW ôH,C&±ÒQ:#æ'‰ÁL%}Úú¸ |ŽÖ¼©Æé»á /˱tÃÐ"€æb“æÔ(PàK,–Ö±:˜4¹ÿëÊZpKÜbҲر¶–>‹QåלÇ…\!o½dˆfЦϢ¶c®Å€%ïÔ(G•ÁeF{Ì/cæ�9?�/ë»W³yÓ¼üáî¾|ß̶ͽÿáÿ0ŒóÛ1üΫ߄V”œfꯢ`\ï  ûMpëè¿ú•ú§©ö ºÕv;Õ›xlÓÞ CèP§Qc´w¯×ÙßåS½¤.á~ ‡úPÅwyÕqªù.¯Â°¢n–ýC—…Ñ#TyÕOQC‚X³*n�§)Ü›ßÍP„k³y@HL5˜zòûÐ8_ABÈ'ÑCã].Vâ cÁsI€æ'ËÕUEhp¯ÜFµáº?7MŸÚt$’¢Q„­õjiEC# +˜">fÜ*!–F—QÏ»¼;ž5?7É�Âq¨Ócú»~ÔžE˜^Ù=÷H8uf)ŒsÏ2=­QDU:½ûm ËF�ʨY¬¶Ò»wÔ;aW·ágjB æ¼åf¨çSïïÔ5©ú²;·Þ’é:£Æìi¹|etV%Zª\\OÅ&uâªc+¾pÝÔÞxf÷ø‘êJá”âîWJtïîxÈ4 ui1aª�†ª›:‰ër<ï;ú2)h%UX1½Uñò)ÅfÈAaN])“¯sN¤g…PHÍ#ØêÇï|,.${}]É0#°�Z(nˆŸÇ¿Î“7À6e[£*Ò65˜â–êûlÀÖ'·,«tÔS` vÕèE86˜ +QK:f/7¡ŒFHçÀ8íôY.ƒG_(\”Êsµ¼\@¥4½YqÍ}‰þQ<"ß›F“¥Äñ=ÉŠ>ªzE~чú§ õçÜ/àݺé +—ðÍ|œ®C1Џ©¶ÈÝ +Ìç ª~áD¯Æ;n˜WJdçÅ`®˜Vñá=ñ€·‰ŠŠCìoPÛú£‡ÍëʰÉl(^_lÐ=�й¤q®kž»â×UàHʧíPÔ㺮1©ø5߸�‹9¡}Z›2ÜQT;L‹M€P¯9R81,×>)¤§Yƒõ/çe“›ËnÄÐyVá ÜýK½ž]d’ýá!ն㼇™Ø»%uIªb‘ê��Åqèç¼þ Û²ãæ؉g‰³Óñ VbürDl_¨›uiÚ4bZž×S¦VmA±œZ +µnˆ‚xUW«±¶ð·[?®ÏÕქV‘ÏyàDmòG7´ë P˜ÊŒ>2®vTú.¶$jDåTà•Š�{ðaÈÊï^…ìÀhѺñh6úé�ÿI>â}!«¨ÌX_+¼ì:^ð¾Ìä‹~­}¿~”wÚ_y/(ò¨Þå”2º�ÿp_�Ù…4)vC3�éÇ2~Úo|¾Q[9ÎÇ»ÂÅÞÐýý¾ºS¬ùµôýø}PÞyµ¡-2•H”Dãš‘ãß7¤Qrü¦!¨”ëç“_"ï…8RCíã ê“L÷t 3K%ˆ ¶›ä/$Ÿò=¹N3Ùl"»‰ôÿçlÈ1"„[—tÁ÷8»K‚àJ‚:ÜuCbTo…Þïƒb©ÿûóYºmb¥R¥Ó±NKe1wÌ•ÎÛÖ“%ö5_‘ª&¸.)' --ãã_ÿçŸt•pÚ?7P‡ò·/Kéê^!­….ÀFÅê .ãM£aú Dl¡3/>g�pÝ¥^ô…aø ér6!5¡‘Ÿ<ÙŒÙb뉶R¼kÎàÈ7Wq+Ò´ÇçøUOÔ*ŒZkð˜o¢¾#R4°›!Þ�>B¿½Vwñ$LÚxŒÕïáXBU4nMï Þ'#k�uÿ»Ü¤K0wæ~®“JP³OäØYa®“½Q¢±H*ÝýÈÆP›àwíµ’U‰92 ·”cBb‚G–ß´¯†�Ý7°—Ÿ²øa¶§ÝÀÉtúþ=‚ç*m&<œ.h'^„¡m”t0üTÉFñUànó·…'rž ÎwüÓÃTW}¦Ç û?.hd½– (GN.ÂpýQó¾[æéÚïkºŒõíÝÓ㣑Lð=±¸‚½ÏP�ž¬š§ÏDIŽ¡Á³Zå‡^Œw|€.ó$ëÆ{6ïÝŠ­ú“Ͼ.y¤»,tNd‡ÀÝw[DɈÙWul+íâÓ´]H.tsP2Ü *Áu³çØ×Ú€�‡Èÿ O@B®e‰å�„wF¬:Œ[»8þMOVD¬H‚ãú¤VDš�„ð¤àÖVÁNà8ÉÙŠšv‹yŒ[ôvÇÝ,?éno+K O.Qb³ùÕWà ÕðÌ6¶ºË�2ðt•'óO\«$~iùÂá¼ú½\aXG°×„üD-v +íq¥‡¤¼u [ œ®CÝH\†žì™Ò²q~V&LV +³:FáÇš^O2~¡…G¹æõÔŒç\Ÿ¥šñ1¬ºc‚–‚íÎ;¤Ø1^#¸…•Û‰zµ©”n#xœàYouç\õdÝ ª-‚ýËAìeøáDMŽAž<‘Ýu]ÈÄѯZfíL°ŒD™SÂÓù„'̌՞à}îŒ3Ã1f±¡µl ­€mï–}CFù„£›ÅÔï)õ‹æ2í—'óŽ0ï '¤ã«¾!=%Ì\à•¢œJ†�ý*§²Ï%Ò(­Ú3|‘ÚàsñiwFëYc;fÜÌ[³B¯ àòO²Ä- æ&Õ‘k¡ærÎ?h÷p·¯zÚtiŽÀ'ÔÞÚ»‰¢žììrŽŒ ™û˜—ýêŒ5#fKL+_\‰hùÌ ”翳Âs�Å +ü|¨´�{Õy¢>‚ô»ˆ\ݯ¼-ÿ—ø\nø¿ïï6m™Šû‚N�“,6•æéíz¨([ ‰DÉož E,ý>¡_ŸPÉm÷{Ä%—Ý}g�E›‚i@yÝ»¿ÕgÖjϾ®/³zSkØîr¬˜6Ãñ:ÎjÒ¼e(˜×ÝHq¶'êK4—N´¸1Ÿ Q9+µÖóñ6>îGÉsò ÂP +8�ÐrJ1ô a8­»–Z|.)KϬ–¡%*R�z¦ÃV~-?–@%úlA"V>yßgf¨'@S�Û<ÁÛ9©Ñ#i9D0Õ¼LpRÔTFXû\i/~»bØ +d\ýТHÜBW² ;>ðè;o›z™ñÜB{^f4¦À¾{ž˜ ßûa’>ÍÓWâ+íÍuÅ×úÓÇ|ÕÂrƒÿˈ��ÿ6bº¥-Hs:9OZêóÇ7+ ÐЭk©ã¾{ª=Ù/(ðù„þù;6j%= 4ØPKƒ;v­?ÛttJ¸4˜¹žuǶÆÛ=òEz›ÐÿwµŒ­‹uÏûViSð�ÕñÌ;T§¯?T#@ÅKu�4Hi%” +/Á†\([µô¨ÐQ. ¥âÀ<è}B[Û—öê>²J»c×`ìÚYw>j±j|å”yÇÒÚQa#o 3O˺Ãñ�XG°PøÉÛ~ûŒl�¢~¿ßôeɲ™5›2]f§fVUƒi¯¹¦'¶0H— ¤P�ä™þ«P®Ó}¼‘í ïÖG‹ BJ +¥˜„AÚ7?‘‡Í—uŽ%ŸQ͸c‘$LÖ I­ˆÅfÀÔî%Žú9”É’i%ët‰w,Ø4ª²¯RM#«Š²o½Ž„¯‡nHO¨7†žHˆ£êÖ§%—¸u¡¥ÿ"Pt‚ÕºÌXøUýrÔâÝæF:L¼G¥JSÊ�´â3­w¥�à:!øE� ú¶%ÌØC\2cžnî™nŒEæ 0ºYh+[´^yŒ {´Ó¼c»ŠgFç Uå­K9ytúæü<°f!fƒ……ÊbÝåªmŽöWr +Õ¾@»÷ºÉ}±1�ö[#�Ó°”Øòy4n}s?öâiÔó>haõ÷é� ê[‚˯0‹ôþ Ä4¥¼…§Ð¤˜6$Ï»IAìíC[ÎHFn]¹àö+:ÓJ_‚jB¡ Ô•‰dèžfïí# ‰ý2ÆvzZVB‰î¨Ï�ËÙ—]u¼â„ôL!Úõîî]ÛìÁP•�’\˜¬Ûôá)´è�BUù%~ß°c±fâ¥-Ý®.b¡˜'ø]'£‡ÍÝn. cÐ ñ<ÕÛZ*uÇ÷�¯BK£Žu�áq—Î8,Êñ¡üZÇSŧ…AÄ}¬±«_ºFJS¡.…uXÉ<³¸@6%ˆøUMZ›.¦PkÙ‡ÇÁPåÖdêÀ[,]V#+˜…v&:‡±ªÝ�Æc‡Yõ$u¥ºAáá:À r[ÝI Ô Æ2X A¥ä�Ú„.ìánÊaamYfgcÍÄ&M­jŸzÒº½…ØÏU]´*¿•Fúµh“€Ó z'dž†N]Ð$‚‡Âšp*ß|Ä� ¦ÜÐE9 §*SÂqÍKíKwõ¤ãÍj*ÜñK/2Æy…\à ¥teÉ}ðŠ–Fµ¬OQÓH ç›ÒBG6[Œû@Ÿ·Qé7Í3WÙ%G™å·ÓS¯.Lí]Õ¨j®ÞU�òU6"-9)Óræ§$ª^öJVQ +Äw­’µ Þåˆ@†x´:æÊååVûÊéé6NÕZmã"Éǃgx^�®N•�iK·kJ�í/pOÎ)Ó-Ù®kh.Äë)Ä.qº6-4^¤¥ÈãTbmcjÇE´^÷CkX×*5 ­nÛ…oªéñ1UäúÈ@,—Î+ bÇP^õ5kþ^œšÎ¹ä$ìñJÄl ŠëÚ¿bý9â9u³óÏ�ç]Ž£ˆš~¥>¿«m¥'6݉¸Ý‡òùñ?ÉUû× yƒÖºÓ/´Š¾¿ß7ž÷c½¯eóÝ‹Ë�ô§Û�x$�¦¶ñoª«¦7a†Þó+|LÄ�”d-½2�‰[$Û´ËJ‹X× Uâïó^’•qJãÆv>ìçg29æÛ¿c z‘÷"fˆ?‚ÛÓÀ§gÌT“œb“nžÚ¿¦Ê’ +¤?IïÉÜd4¹LS›5À”#‹Ò¡Ó+G†À2P2!‘æ8W�/kä•�‡`ÇWËBI§Ž‚.*Þ/`ßBQÝp#µE`-I’Aƒíl �-}Ùˆ¯ÏÞì‹ó±ßšïz+ë!îqTâÃÜxìÖæ¡øÄ¥K8©"‰1À8k\�w… ½zÓÛæû÷üÓÊhJÑCÛŒ]s5aÏw�…/,™Éxn;ãE�r3@‚+¯†I,úòJ5˜Jô-ªm‚Ú^EÝÛLÿ( endstream endobj 254 0 obj <> endobj 270 0 obj [/ICCBased 77 0 R] endobj 5 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 30 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 31 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 32 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 33 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 321 0 obj <>stream +H‰œWË®]9�Ÿ¯ØCœ?ÊvyÚ1B‰!BQ7J·ÔdÀï³>·èîŠtsVí²]®Çªò»?½¿Þýñ}¹¾ùÝûëñ͇ǻ÷)×ÇÏW¹Ë\ü›[Éëúüñ‡Ç»?àó?>?Þ}¨+W½>|÷xBi\>^þÿßWæÝËÀ2ü{ý®eî{æ×í+¿üæÛOŸÿþÛÿ|TÑ7þö¨>¨hGn÷››*¿`Ïÿ¾pLë]‡¿~gÜ=#aÄ÷¬µ¿®­ÿáñ#Ϋ5ãªø|=õó_ß>þzýðs¶ýˆ‹sÿzí=ï�;ñcߥƼ>~ÿà'þ}Öv¯\קdzcuÝo’çˆ;÷¼žë^½þë»]/AÜ%Úõìã}^yÏÀÚ�ãÂÕp¨¾&ö/׸c„Œûøøîñç/L­eÔ;_÷^÷hme+\´l`­8$ïš0¬aßFÃè^Yö&Áu;¯vqoÞ qŸ s†”òŽ9`xÀp,^wíyMU®~÷Y¿°µÜu!p÷ ô(ó—½�ónmÅ×Þ^ðAÀ$þ†{�k°rÀÊg«PO8y° Gça; pôsÜYšá†pÚ®‚½Éþ}¯åí‚zpVx»QyÛqWèÏU©Éž^°¨?}/XKOoŸŠ$¼Uºµó8oLÃ-˜Ë‹w éo›I ÂJ¼ê0Ö1p¨ökˆÕVðàÖ˜–pE£³·ñ1¬ÓPàÚdMM ¦·ªyðöÿc{ÃÖåQüB-X"_uû +¸×&ìuýäS ˜½sßM 4�~tãÍH/¯ˆâ9›© +¼–mòׄ­¶`…’1–%a�Þs*À öŽ«­@a’(YÔDh¼e6Ø^�Ë �ãYÝ¡ia8Cxlßþ +”±¢ 5Èm W2ðTp�§<ÛQrS‚V™ËHB<�WúˆîØu©KÕÎt=!ažgøˆH¹¶ã°ôŠAç�æƒ) œÃgÌ�k;ê=löj¸pÆ[˜A\½y?0�ôQ¸¥*¬¥óÚ ™h\·q*á°¯K´ƒŠ³à <‹�ÕÄY½b˜eúƽ½§Ø8ä`& +ðêÞa�[€Ã”„� käôžky‡ÝN­ˆrËuÈ΋`og"£û ‚` Uj°¾š$�· &âÚô»7S‘ú3$™¼} L ›‰×ð÷­|Š!Bfn+Ÿ€Û\®^x0@À­¾Vˆ#)a¥§êfº;õ4^fKÖ‘÷{ÇzÓX *ð¨þž&@H–�Ð%PEºƒ>„m#úBئtjBÒdà‘®Ð6�—BéŠå +[I�³ ­ó÷)¬úè\á3)ÌފЉ‰’#¡Ø#å—'š¤©ƒËV v‹î¢W“¨oë,â¡[ ?›ÓFu14Zk�œ¦�¤P)>cWù ’ªpn}mº& +#°}‚›®8ÚJ +HT|Àæ3¶]ø`ôÀl¶¨«ãIÂDîaœLxàè>s÷zVŒâSÕØ‰UnĆ0oKì9d¼‚m…%ÎÀøÄ3Èõ�輂¬ Édã¦d{ID×XTºDCÄûpcÉ3'é¦bË& ÎjÄkyÎjìSÀ9ëYÑMHvxôŠbú,lâÄú¼ÇY!O@ÂZ%†�…FÌ£�»“’Ù,‰b »ªzkâéÆÛ5T@”,k,ÎOÀ³ïõ«Wä²Ù +$8½Ì3Q.c š(«�z�œl +=¾Â£÷/fÐÊah*:€h†ƒÔ5rþ?Ã&"ѧó›îd™ +t^ 9Ô ‹»@•JÀhŠä�øô(`XºÕÕ~!Xì*€�H»)ØéUÀáîÍ<‚¦ÏÛˆÃ+`4svÔií)ökz’nÆ*ªî’-H‡í!ÐEJ»R=”ÏôñÈŸíŽøÈt«âpÏfÏ’ž§†Óâ%�„E �m†!SýW]D3ÏÞTQhªL(�%‰]—<Žy¶sÚA“žg$e£Ú–Ô�Æf%Êkw;Ž¥ä¯H’âEOjjXô9¦Ø.{aÙŽ3õz$œ^9Õ²ÓËÔ×(\]Âg次"ç¬Àî Í ÌµrhõLgLjÎ/»z<Ó#FÉ¿¿À �òõ3ÇŸO�ÿz½½˜~Êþ_}(~QdÎ�é×__k^?óúb B¾gݲ‰]£?½#�± áÅú…F-H$òÀ<Þ=¸(/`š…�f‚K·<‘£`P ¾(X¨>YЄׄ©}¾ÔÉ‹¨¦ áØ|é½ìb7ë¶ñÒæ<Çv|>W¢zNbÕT•ýQŽ @S‚ 2¢šê »¾†ß(èû¨gó†l®&rB^˜¯¸öR¯� ‡„l�Õ“X-©J H‚~ñÑå¯$æ¦÷Ȧ®utÉì`é¢HÁ”Ÿ·†¸÷!mB:¥ézg}, fú;¿�Ãä˜Ôô¤:ê < +� €;À’£rvlšR¤¾<’®.¾ä¡~ÛkK 0öØ/íŠÑ©+‚%Uzµ`5uå€Ô15¢ »fANë€{ÆäY™õ¥Þ‘ +¨àUý�3cx’DyáÍ€õ$†[¸u¥ìäb>d h´sñŒ“hâàS”O_þ^�àÖ¦³`4¾š[¥ÞåuŽØÃß;.5ÌÜ„í„ÏÔc X­Ãþ’cà~¬îõ„Q¸Ùœ'¦H¥ÎÓ³Éäm°íî-cоâúãÃv\ÓÌOˆxM6­)j=Ên�bßçÆpW¨, í3BvÖ êdãÙHD‚ä@ PàÈ©XPu‘ä~NP›âjŒ P yØ`”%×Buð¥@à¤É¯s6üßøm [‚ŸÂÓ_'hi™ô‰:Ï\»]¶W$ìðWö¿…š¤¹Ì1ên¿€¾J?=� +öÈc=Ša1SÁ@Å¥xwW55™¼Ç)à$QòY™WºÑ%9…g$+YæÜ%m-p #R{±‰ƒVP¦ÏÄ�à÷-ë¨kß!,Â䛋ºl†ÏœªdœåwDN eÛ‰ òß(‚íÆ +4ày 9^­ù +ªÔW�Û©�!‚ÝŠuQXÐ"GãâÙ�…š €8=1yìd{Rw‘¹“äC S"Ÿ¹¶uM¢èsÁ›{@Ê%D6â‹Ä>CcYÔÝŒ?PC +²5²c.,ÚBSÊÀ� ’†ÙÒÉÙ+õ€"4»@ÀwBeDùiDJ/ª" @؈ü"€  ´+çH¸n1Ú�ä±XzÚ*¼5~h¯à 0B›q`",M†O¯ RÀ��Ï[B©ÃóK›qn£:éWÛM©s>ÓvsŽ"Ë–ûÅBSK­_|.4ç!ue)`iÿ¡¼Üu4Iª ìÏS´¹½ª¬¼»H<ÒHØ­ƒ$Ààõ‰/"ëïže¡6ú�¬¼ç9q"¼Ø + B¯c|Éã²�ˆÏ÷QüPå%].l¹¡¢F¶µ+ЖdY“Z}Øz©¡Â\�ßPù©ëŠÊc«h8Eµò¨ŸÓp´Q%úÊK;ÕjºøPtR¬E´úí£¡þöHDE'=21ÌàHLè푟ÉÏGž* FJ‰r¯Ã +Ýš‰üo Ò^âwÙqÑ×Úx¡á<�Nް֑úÑáÛÌxG¦#ʬ—#Ú§=„åÐÐÕ¢Ï#÷»åü1Z&)’rƪö 0P‹ˆÉh�׌i6hq' +ºÖïr¿*º��^¶ŽëQiÛëñD÷£¿â˜$‚.Û+Ü”´Õ¸¯ÅDÇÆáÄJÜYLÁ² §y{;~o"àlcþ³µ?Ö��ÓÃ8*ÀÑ×1•—åαœ—%®;^ â…äퟥþ‡®ßªN(EÓ¶lú¤êPöcñ¯ÕÇ÷ÿ]e|¨:ǘ¯áZ¡ŸßçKÆýj¾�i³îÁ×ô£CHïPÀLq\ÊêÏç~úÇ[ ?þýÂyÏO_”(K +ú ?è:Žßùp†ýj¾�i_ôqŠßùíWY/þl¹TKÅ&9çó[…SY£÷Ñ)Gûíë_¾üôË·üñ7_ÿü#ãv½}ý“&øúÏ·Ÿ~¦Ëï¾~ù› ±Tàçwÿüû/_þðö×ïÂA‡Y +ù¡´¼†Åç{TÛ\æÍZö«åeÜÈþû“�sáùà>rPŸ«ž´+´Ž•/Ÿæºz®BĪÚôöýq¤ƒê‚´úïŽô«~r¤¯•ˆú‰VÅ!;!Z'²¢»“¨o@–­™YDZb„á¥.Xe”O{UFJ‰éÝ;.‘Bæ·ùÁmwiUù¥öýmOsï7ÿK¿ãøªcñ†I«••a´‹.¾¢aš1Š ˆ)‘à‚õžáZ´" �~º3ìHIe¥¬©Kê�ÊiaÄÍeïà³±ÊF…Ë]Oæâah™ª¬ƒwþ÷� ïp½~í�)}¥wÍ] W|ŸpÆÕOMe)3×};€Æéßjðæ%Á3#0Zgm×î®Û̺ïKVidãò3¨¥ãÌué±[æ~`œmfœ©¿j™d=-³[-\™rÝ�mdÀš ×97ëSl×$C´pß9ýóÛE×-ô€!îm\`Šz¹GiTô±î²\&š—¨ÖŸà¹²DÍÛIJ"-¼j½]Øý$Ä©ðjY¢-_­ÔSYѹ|á~gD'$…WÏ#j·6×}Z&UUØÒ>Ï,âªwæó¸ÿ°ÎáY/–DœeÕÝ ^8Í›­¢¢Ã,�çî~‹æ]ƒWɈ–©;zõŽ´7ßC³nÏšæ9…8ÌAˆ J�52'ò¼ïƒc z>ÑùØ;‘Èë¾7Á½AoòëvËÍé�Ø�‘Pï�{Ï=b­qŸÍ-8—÷¦4i鱚áìù¼N­›� m‡“ð="l gî¼�ð]ž¦HZHT«ëmìdhš ]ž!KÒ(stœO›¯“7ET”|_á?µÌlÂgPùL¼y7ÎѲÙÓJdªåæ�…ûJ‚Þ#xú%“°ŒØ‰µtì§ð°™IŸŽ®ËškÅ…`Ôî¤tw“Çò½¼«F† —¥(ý)59ïQ^ãy+p÷)TžCi½$îuª;|Ö°ò슆+kìâ{RKñsn½}"rQ8w¢“Îvz;&ÔâÜ�QuqRõ õ ;ª.xn!;‚>xï­fÍ]Ëѯ¬jú;ÛtŸ#˜Ó‚#CúCj8¦)#Z¼zyñ\F@ +nÔmZv†´V­Š,é…ÍBà}¨16M->©É2: +aÆS¦*·œ•×TËnÅ=ð¤&Wj8¸G“_»Ÿ¾ ¤xlªkIÅå¶`–®1@€A2A_é‘«*™<2Cà DËL�yÇ Œzp;8 }X2ÂÎlâº]#€30RÁz²¸¡rA�à¤$Ôöîµ~R )4ü8iÏô¼Q-±Hÿ¿ÔÔÃ+¾�ßÜæÇ¡°,/k¼ú1�6z4ðX1u°èîõ±|†×±‘.¾j˜;þáé®öXI`ŸÇ#ÚoÒ`KJâƒ�®Ç¡–‘ÞÃäÇM{çx[(ß|]ì|�uG&Gi &•CøDOÿ:ðòìzo]Ë:7R±©XîÍp +¯$ŽHÃåx×4=�Tõu�ÏŒ£¿o'”J*ñ$®„‡Ts¡q©ÙŠÖQ‰G�R¦vZJs�M" +wÚKM1nÓ±_$WF\64ô´˜Ü¹4lõ~µ³ÝŽæÍµ ]Ñ´Ô9aoõòÂ%|ô/JÃ9ŽR v ·;õ+©!n¸ËÑf5êe—ˆ3[ÿþ„Å×÷&'¶çÛ—_ù¢—_úˆþ˜Ê%DÑqÿï5ÇÛ¼Õܰ`oWlprôÃEkÀÒ-–O=Ê¥@‚ƹ݃/?Ų†bpø¼8}Êór4t\ /º8$µÕ:žîТò…�ö�Ï{öE1éÞýé�š£ŸÏTÎJdMqڟέÑ`‘`¨ˆ(az`õׇâïåL~+šKxÈ�ñp÷Ó½T, �T@½gó9– d1 ¸»ê–+_áåÛî„|¼]´N_ˆ],}¹Ò0ÜCî6†Î}HÈ¥Ü>ÞߦÆÊw¾ÀᢒnªÓý�ªÁöSÕ!–ìw Òñ¶Hq÷éǃt}ðéª?çÖ¦m†»ï§w‘rª~ +ë�zå’5UÇ€»+”ÐÕÅ­.¸g`¬µVyºW…‚2x–|G2¶I¥—o,' ¤muíÊ+G¿ ƒ1 Þ‹h´2x´ªáâS¥O�ù~)Ä­·×Ò¦õ5ÜêîÕ·ŽÂîù^u¨æ•LêÙŒXS¥RRúbtý×Sê�íb²1Λ*”*«¯Û›QÜ6ÊîÞÞÌå¯:~?›A¿ö·æê=„FEk˜ZOç¢kfß÷-mwѹ‘6Bž§7ïC°4º +ÏV zVàÒE¿]'$¯çG@mš—ÐÍË5ÆQ²u,eF� è’_­r¶îÿæÛìÙ�~�|EGÌ�>¨²æÜ÷éKyUÀö|¥þMå$Û%Æè»c„›îjÅx +]šc�Ý+ô,a`úê1”q˼»‹‹š’Ì·‡Ê8A´0•ëm¥Ð-8…5ŒµHsfYÙ­pSD,Ï ¢ˆ‹V”¦ïKgÒ½o¹;½I¸°\ô¥¾¯áLÖZ±kX”í¦È+ v +«P×Í �þ”Å«¨Ò_£wBa5ìö+ÑW‰¥^p´¾êÙ¡5�ê‰àÉ=(Ú}'̽ vÈ›‚²æÜéU�kœ<úXhM#ØC’;Sa™ôݼ¿Ð­¤4R1§m£áÎÂM<¢† RÒ€pö\öOÀ°‹° …å»ÂJ¿œEBMÏŠ!PÃ¥Ô.èH]Ýä<ä1I=OÕ2µ¾{®†ElÍ“!˜€×í��›žÍ4H‚Ww twÝüôdè6ºC¿žn¸;úÌÓ�Ø/ïl¦^Lµåñ78Uœ»»;J¯Û‹­PÑ ô:À—<ð-ˆø|ÅU^Òu`–*jdÿ‹ó*Ù‘,)‚÷úŠ<Â!›X<¶ë´¸"¡.‰3B#!T Áæ÷±Å_fV3 ªC¥Å‹=ÜÍͤ] «cK:µÆ”óBC's]~å§ï'ÔËU±! +jeªŸlHmÔ}õ¡�z]<k­~<(Ôo—DDtñ¤)!Ãl‰‰Ý.ùéü¼ä)jº” ÷YaH31ÿƒ¨ÆCün9.ö•6Þ)”-œWêd ki¤?bÆf™NQ ½lѾ$èIX + \-õ¹åþ�œO3€eœ".g\U¾� 6qYM[��A³;AÐE\Þ¥=*ºœ ^ƒlm׃Òvöå‰Ú¥¿ì˜ ‚ŠìÝ´Õl—×âDiãèĪݙMƒå\óŽH¿·(àdmþ³}\Ö�+¦Ó£qD€S_ÛTÉ�´œEW b¡ä¯Rÿ©ëê2dÒ˜6ú½Q�˜ cOVýJ||þïàªçù¡ãs=†'”@ÏßùÅã¾›ï9­×M\rÐ/�r‡õá3a²ÍëÓ1¦þrTÿùßÁ|ÖˤɆ~Îá‰Jú7þö‡öÝ|Ïi“Œ‹=ñÇ·Þa¼ø'ÃÅg·÷¿ÜüÿçJ+ÈÅç¾~£Ž"IDð  ¶ñàïûÍ�?ýùËoßÿööû÷·âà•�SIÆwýü×�oºýãíw_¿•Û×o·\õÛ×?¼ÍÛÏ·O1�3mÄ}ƒ´[T?¯×‰|][·Ùëy´<Ü) ¾˜9UŸ'2q¯xªÑ§ä�ä/+r÷­�N¸+Ã%g\·ö×·oß=þeLÁ7²A¿îK_¸õÅ—>ZP(ú ¹‚IŽ#µ/Š‹¡N ÀIÊŒ¿€ºÀ SKrˬÿe³�›…Ï€´!‹¾ÞìÙ~è·iùN‹×~�ÔÙ%¥-VpQ$(6,Qä¦#¤ ™ÖÜ€½-“+Å!‚ý*ùMpP;"×X[ˆ§Y-gzsÁ¾r}Qt¯§wÆâbJwï�÷42“ŽkÉ:�ú“µæx½3B‡^, ÄZœ¦ùèEUCeÅt GŸqŒsc�®­g²Ò´°azªºÿÇ6“;~�ã)u¥­û®€;�°Çõ �@òÌý4ÅÊÌþÑ�_’xy�U®­b=p›ÞÃÐ}ÁMï`=Zm[Â=NxΩ¦•õŒË-‹™Ï–5$ЧÜÍ0¦ìåx�¼Y�⨠R2�ãÓ_OqTeÕÂdƒv„+Y¡Õ_aK‹NA¬†V· +Ch‰.ÁI¼¶—è~;h¡ÊȾjoªäzÆ)ð/[W ¹T·G ^>ðh1’À{x�iyÛC…ž-‹eXZÞÏ ’êÍó�cÔJØðY -T›tT³Ð%Þ +8Ìëí`�$‘às½Eh×Ä»zÄ0¡ôc�Ú¬¥‰C÷êÄ«{†•§])©€ÜcOÏI=@|Zb;† €wtÞÎq$òuïAB¤À`oæWSKãé‚�8„©™îÁ{÷Ãê,xŸ¡Z•{ MÂ=v®áÏGáCÔËÐV8·i%[yVàÁ÷nõ!Šd Urú+3Qˆ/“%ÓÈs Z�X�‹oJQý}›ÿв¼ �I¤3ñ͇°÷Hñê=mG&Zßxl'h›ÆK/é„åˆã¸AË �ž’Ëé3(ä¼æÞ¶tfÍ)=ÔAä±u/wTC3á–öd‹îœW�¨�ñ|+â¡S ›ÒFu.4îÖ=ö4kHjDCñ§êžÐRõœG_›N‡Á\ö�à¤+²·b-Ê=`Ó ,­SOd=ðŽº +žZ‡ƒ +Þx3Þ�£{ÍÓkŽÐ}²å¸ÇP¶á>y`ž–Ø’c\€†ãK”añL¼G}ðœGèZØÂ'"^‰Gâ�xFŽ8ž2¢K!Iã‹¥ˆOR§}Zt"Ó¦­Ó +³ŒuZÞš#:_-'¬ÂhRE¾¬ñÄÃ*½œ‘#tSçö­ª5�¶7Œ¹t·#ò:&xq_eõÔÄÓ3ŒÇ1”`lY½Áì‰#±=µbõYbBo¦¸\ÆÖ—U �7t©OÖŒŸðèýEŽVj¥IÍ— ¢áGêÕ¦éÿÐ�xzÉGþæ}Ûn}¸5Â2ÒSÊû±�ÏeŸGž=£_.P°¤³TyFÃ:¶Œ”V¤å—»$+m£,(äRI DÔ±iZëtï)zä]kç´», +btœV{A<‹Dg1Xµj–Æ�åÿNX4;H[DzÊ×tÖ4õ³ªÈÈg‹¸¡(â1Í0d ¢>« +ƒ‰fŠñ¦”BÑeD�MÉT¨Ê$zèÝ® �¸'KV²ã–êq˜ŠÀƒíµ»ÜÇRôWDIñˆ"{ÞR +‹w•Ûµ_ììDªb@ Õ-U/+!°¶zI}àêN…L-¢,§–`uŽæ +çä;´šê�QM}sªå›üŒ¢ÿ¼`ðFùìxì�>Þ¾3Ióô¿Â¿Ž…]qÒ_õ]kÞ~Áwñ]B ›t®Nìœ|ZHc ظ´úÒ£Ä ó~æe&.ºù ˜VAé$øH¸øµåC±a°AuR°°ûdþN(ClµÏ«;yéÁ! ¯òåÚ«+X¶�«7åËs~®D5Wb’TeyvŽ`ƒTƒ  šÚ »¾†-‹ô}Ôœœ„TMÜ„<0M]»º×ÎiEB–D¼gè[†¥*ëÕ ýFæ¯$â&;AD=ÙT¥²/ï ëú>÷ƒƒ[‰«ûÔø¶Âß'n%)œ�WÖtøìK sû;¿�ÑRT5ù¯ìÞ@ªh�[¤HeŽfH¥Ù¤iÔ}éiÉÀº–¥ûë_|§K®ô=ÎÕ›‡êz(Á„ÊÃZ ÁS]¢îS7Ñ¥h)íÏ2ŒÉµö®W÷Ž@A:¯êïT˜a݉äûr)Hÿ¼FHa< +²N¹ÈÁôÚ 8µsðŒ ”t�+’«//ˆmÓZØ4¾šhÕ½ëÖ)ȇ¿wj˜Æ +j =mnŠÂ g°t1¸~Œ®ü„Q8Ùœù¦´ÎÕwÓfÕÁ"|Ž6SôǹÊÝq›.„x iÀ +6ųٹâZ§¨ø~  ;“ +HóŒÐ>k°ëd:D‚Mù Pp‘SoÁ®‹Œ�ç§ž:lÞ@�/VEÉÁ±�;ôÜ.iò«DÏÁý7~[Ã;ÛOá鯤µ\ˆ:×\§e_ÖZìðWÃ…Œåvcì{ì€wµíS� +æØ¹{$žÅü̾x dÜ+Ÿª +‡$ÓíQrdmzÐ}Û®z›ŒÃ56ùl3Í9Ëön�±57+:Hizß8îýhwìë»Ãk0 7û²2Þ÷T&c-»Ž=%ÑŽ¥á Ž«,ÐÀÍÍqÄ+ˆT_-'�Ca‡è÷è•Ø‰…^dp|÷Ü¡¥ƒÇ÷€hßì»Èë›äÃòM‰¼æ:îkŠE žÜrh/!²ý‹ï eg±ïáû5„ 'ëé #4Õ8À#h¨$i@‚f#y,¦ž¦ +O�€š+èè#4ÕaiÚXÞô +Ñ ¨~ëÑ1‡ºãæ—&£ˆcwÒ¯¦›êN±¦éæ2E;[® %okü¢y\(ÝCÝ¥€¥i±m*š ½AC Kž´1‡�Jô>«ªþ›îrÉŽ¢èV\ÈGçd˜�dÿã~ŸBLçôH Z÷ÞÛédC …¬2² %(C˜ÌÐ[«u‰JÚhBeì5 /ÉbCè +ð,Ø(‚œ +³/ßdUŠÊÅÆ;àkFYýÝ ¤öcñ"²‹+ žt³³y :‹z.VEBu%Ø{�U¡‰¨¸ÿ+£\oò/¾+PAͦè+ Ù”�%µ€ò©ÊxšÙIèÏ&øKtÏ‚¥ÔÀ§%¬›ý›Ø>ÌÓx‹ø8㬒V j°qÔežö‘*[³ª éj]"sÞ'º4ƒÕÚ +„£mŽ%Hç¢3ë(ɵ¨V ¯~.ñâ@átÔ²lU³±1Yæò9ŒÛjÈßE¼“1Ú‘³¥-O䌡}´H$8éÛ†™„;áŸI°¦#âc"·OÜ?qb`�œÌ4~Ã'ô#+˜ÙÝ%+£ ?þ^�^yî é×Ý=B|ÜÇ÷{oëy#NÑ铽TžáDQä~¹x¤=Òõó—{�@þ_�Ðóz<ÁV ìèQ +¡ã½D··ñö°Q 'wz.ãûçëÀå%ÀÙH¿ endstream endobj 322 0 obj <> endobj 323 0 obj [/ICCBased 77 0 R] endobj 306 0 obj <>stream +H‰Ô—]«Ç†ïçW ‚t±£þþ¸ŒŽ,ƒIbŒb!K²9Rpt῟ç­îÙí‰I¹‘…ÏlõLWUW½õVõ‹ïÖ|pëËWëòâá�[/ŸVoÿÖO—�Ë‹oXz÷iq[jiM.l5·µ‡¼•×ÚüÖK]ÿùãò–O\ «þýímhpø-¦8·¡Å›6Ûe6ÞÌnó]»:Ö7ZÂú+®üÌÿß®Ë/<ÿüZêVS@¯O}k©¯—‹Þ|XJmxÐùý¸¼Y¾_^žñÀ—¾ÿŽ£�ÏRu~»œX]Ï—Õ¿®Ñ™5—-ú’°±“c^Ï–¿<ûîñ¹Ûòúì§ß½úñÓOï†ðñù_Ïß.§�8k_Ñé|]Ïçs7>öÁ1¸gÿ·é‚3û²îó8c&\[¬%&¢Ž×˜~ö•Ͼøþüüóòõyù…}Þ·¼úâ0i?‰êŸ×�¿•�[-r¡5ÒArÝ1†U˜Lœ|ÚRàÃBxò¼,§¬ƒ¶Û›ÂŽ”n¦ìôíü½¿š[ïtÞTOãsÁíûœ){Kr-½·€ùJœKÊ#bÕå²ÚÊï³B–ÁJT8ŠeæÙWîáu¨¯Ç«Ä«“ë¯í¿ÿ&Ê©PŒ)Ê%Õû(‡˜9£ïô_f”ÙÏÁÜÖ“ê'=…Rô}+ŠÍ|ÈCYÞÆY¨ç¿äƒ}~E¼Î;FkÐg‹[§ô�¿kßÑ, ¿[JË[ìÎù4ÔœŽ SSpu­ðS«.…�–—?¬/Þ¼wë§÷ë×?¬»Ý$ô 5NVVû‘ÿï­† Z9X S�wì +ìö)ôÐýͬÿÌìo–ë0åÖoÔ×¼õµõü‡¯?¸õÕ?f¬¼ ‘&—×�#Ý*�k@Üjº.yG# ðEH8üa�Dø„gË“¥ÇÛ’Ïus8w\Jyó¡­W[æH�·û³/\–'KÒÓ©-Ç%âEߨ7M>8BÚn¶® ÓTß/=Þ–¹.íçßmÝ"4ýÙ.Ë“¥Çåý!+äió9—Fþò R¨ÂªïiË5ùÿé÷‡ô‡¨!$/á=Òp%R>û§o[¡Žìø¾"¦N{¿ôx[±�Ÿ-YJ€Ánk$�»?ûÂey²„žè¨–�?[‚ +‚+7M1”­Åz³u]˜þ ú~éñ¶t8Èui?ÿnë¡ÝŸ}á²éøótü„À¡…`…B¬ZØz ÍÎðï™èÇD˜øÏsTö�øö¾ºÞšÄ©iôãrjDÔGA»�VšfôW)ø M¢ôýõx<^ ¿-C¶»¦Q!ôˆie—/ã´ö[µj”¿/L3»®)N —eÊóñ¸ËÃթʺˡW2!ç +ÔLS¡eZ%3ypÈÑnÛ�›æBƲ1vèË2L‡nðÔV-ê4:­³-ͦ‚“uõf«ÉŒ¢<ÔlFÌ}ÅÎd¿êXºâNY$�5ݾ Õ@ƒ»ÙÛ +†”�”»áESJéÄV”&É!ÚÁе¦ÛdKõ‡Ü«ü:ºÙPÅÁy4CpÑÌ2å y��ݵáì`^0îÓPUŒA”U¹ÜÍ~d2˜» !r.r¡6J)3c-²¢sU›ßƒFýY»¨+ã¼H¦,…†ÔÑ®JŽPÁ)U¼Q›pämÛiT’�Îc³n�nº¡ÐŽlÖÖaœ®–7ŠGIUcçh1 À´]Ì$ªœoÅôÀŒ½Nȇµ$è>h„¶UxñvFôl±¾5†\H5gÜ»�"(Ç÷Ó|ßÙ–É�ŽÛü�ma/µ„ÆâÑ,<gìštY˜ "#Ê‹ÚH€Þ5!8ƒ3 É64�¨p˜tú¥<Éó7_w Ä K£yj„"†’w•L9xgW.¯l Ò°D´Oo5±®¢,j¢f›�\ JK”X…œª³’ R©8S^]X"ÞÓÎc…Ž "½G Ì£6¬y ‹ £¦én0Õ¢iÒÆ3Ž-M‡V¯RsJ¨â�îʈ۸ZYðÕMB�{9V¿ +eX"ž)i� •åM¿Šõ–\ÉM &7ë#Ù—ë,Á»"2ÇêÊ…Ît Žj’øVò¨>›òº£—à³ËZ³š)Õx|ƒQB­ÁzU“_TÐmBpïÇu`m—4dXeLYmµ[_©Ñ@£B!y¤(÷°·moiê/êIаZý AõfV{ “Óí3ùhTŒÖ(ç¸ µjþÅ>'¸`k^þH¥³+è$RXQ2Ê£í]P(~õ×u{°*¯›–S¶ú‰N·�­¹¦Q¨e +MBo}ïD:¾ªîX2¡ïYIŽÊ�ݧL¨T<ª[f´dÓ� Èt¨jí_4�T‚Šy•Y¾·1c + ¸ä/ï"èoÕ¾Ô¨N– Ø“Î6�1“!@¨ >ÁQ—óev±@ûž ñѲ™ÚðÏÒƒ»)6þ¤Ì¤oö™F£QÚû¼tŸ¬fº^‚€Ò¦[ÚͲ<朆ÿ«BE¤â.ˆ/j»¾S5A,E™1W¢#'K‘:¢—�ª>è8 ös3ˆ9gÎépK4bLzƒÊ9K`'9Ï€�sŽÂ%éj©Q‰Êz�Kè•aÿDv}²�æíq”à“…`î:¬�v‘>jSe3‚µ2Ð(› žªn/&éЛ¼Fo àƒÀ TÔìöpŠÜº¼8ÓÆÙZý•Y>£�ѹð�ØUÔpDÙw7¾BçÍ�5tŽ>Þ$}‡â*zcÂÈuD‰¥<øR�"�Ë-_5Yç/û£K žª¹l§´Ö2;ýЦÞ2†úaJÜâl¤•~Lnÿ¡f’4- Ѹzî(ƒöwu8¯¶Ž^ݳÛ¡ Í9kAè‚é÷–§>œrÓ‹‚îjØ%Àú²ë +Q²Qøêx³tVÍÎöñʺKCl”±x½êXÚkÈ›n#âê;’üœçƒøb\Â-SǘOSÈ÷qÌLC–’ á>�‹‚-Ì^í ÿW¹Øö!:››‚®™Ùªëò/ÞË9’ä¢:N� `˜ÿ�J3ž€W‡‘¡WáÞߌÏ=3« +Ø‘W:²«³âãááÁ²¬ÜÕÉ·³Uz­_Þ¢Ÿ²–�ãmçå¹=½ícmÇ[òÑʸ¼¢·q{ûQ«…ÄËYóª¤s^ +EÛˆ5ç§w¾µp©}¥ Í•Îh>+EÊD�1ö[ |ñþ»?2£ÂZ9�¹jÆ÷“³ëàöóœ¼î“¥µ/®ÇK¦xû>É“W�íû`À™é.ç…—•`;Oú*b;ó±.ç?*Ô#%±kMy*Ïå~ƒ¡U+Î ,üºoe°á4IF^¢h‡™Íø•0Óg³¤ÔÉao{¡ãuÙ63xR/4) Œe}^þè="ØõDpr"8:Ü;„Ru'0Z{ºB0ˆã|q€ðòªËÆÈÇhk;ê¢îþÀX�K „È4½Ë†wô¨wí¸c¯!�Xd$Óž¨7Švoìg/p^î#œ �;œ�š+œªÎ ;Å“ë¦W?â‘-ä6�ÀËùзtúyQI’Ôh�xöÁ†Bjø×m�û1Ëm²¹vp¯ç‰ÛŸ;y;ä<Æû�Å}ðùv7ì>z‰¹‚(êœhÄzšîk/{guÛèÛ<Ž¯Ë®°¾äጄҵûô®‘ ²ü>x<F³›äÇÇ"\€HC½<1SE²¥zú— 1°V2­LŠkb_‚êN±B[ ߤ¶6‹ÆëO5“Ï´»OˆãÁe^J¤Kt•ÖTqç4Õ@qþrÆM £/á¾Øóƒ l×öèÛ³ïv þµsœñ‘5sËcØ1©U‡Í¹…lçòvW gÚ]{Ü-;l]pOò_…#©­þy¤ "¥GDZîˆ�µÉRqGDû„8žUªêz"jÜ£ý`GÔŠåñ=h žÓsªà‚ v I|7Õ* ¥Æôe¨ðÀ=Sp5·_‡~ Ù•h�ë3t"ˆó�LH³?€I¶¼âm\²‡¤<ž¸$÷¥• —R³ýB%R®?1©°‡ —µ9¸É’!™–š'O¦rV¦¢e4mB³\Ô’!öÚ,Ãï€ ù-ÍiÆÛMH„Iä‰À>'ih å‰*ßo{£üíÛÁëq@¦GÚ'ZsKKO"Hˆ‡6V¦[BØä¶*[ßO^o9v�äÁÿ ©dBζÁ²2å¢Å÷ÈP }?yÝ';6Íà½ÃJÔõ¿o;5Æ Ò»£Jh‘%äññãñ„B`Aðôæ<К›ä�ÿíŸ?Ãû?ßÿñÛûÊs¦E8¸ó|�ÜÞ‘¯þŒˆiª$�€›ÖÂøLÒ·®ðh›+±È~51Ž+ï¢àÝÓG…ëŠo'¯ÇÉ.çu°€Òý¡oGÂÚGµóeË­¯'a–¡�"ÔÐñ +ËUQŒÀõ]9/ðSã�iqj >¯^*¿Ÿ¼îÂOüæ®SoKíì:õ†ðâÿ© +"øGJíQ§srשwõo;uêcrc¹ê$?KJ�:�“GYLÏu_Z¡"FûaîÒ�Ùx*ªþ·ì|þEU9|`ßñç÷‹ï¼èÀÙ˜7<2øí䦃+ë›®¢ìV?e»éàQÈs²hÞ'ƒ[—« q�Y4%ŒTRæ{$ð« Ñ!Ίžß)Wd…™sJrQã.Úƒ=¯2þUͤ‹0´(òÇÿý{½ú„¤§É¸Ž-�àúEÔpÔºBƒŒ6ÿnk(ÖŽ,[õÏ6¢jD¬C,|·“v‡ûño¦©¢äŽ}·ƒ3ùu®W­…Í@­¡¯h4½§¿ +Y,œ´U!ùhKï,t² ¦žžàö^¨[m‹léǦ¥¶üÜ­•Wjdm@¬&É-BÌs}9¼ã@'½X*Œý™%�ÒùJ0d;â5zØOô2ga=Š–âä¿vëo�ÖcÛ¨é¼]»‚¿ªE +Å2ø#‰(%B™ÐëVÞ­ $KNáB +’v\­ì‘Ÿã"Cì’èKzB dhy×ÕKl-&9>¦—+V){¥‚GgyÂ~Ü,]åи¬¹³½mï®Z-bÎȈª Ý«tëv‰.3ÎÒŠ’á3&+¸4´ZÒýyI×ÞvQZÕ5z² R_YõZj—¹²,N×÷Ü´$òó$o8îþO_Æ£‹5#t¦lõj�,fÖV#m¹¢•¬Ó+P³múÄ£T±Í± +àz`‡²tg38�~®¼DDÜ… œü—"UæjóƒZ±UŽ—­4h+x>AB]Œ…𬠔Wô™wâæ*Ê «]ÖÂÕë°‡±Ð»ž^ÙŒÍè�îV�fðÂâuŽKk—å­Ê�Ó¬¨!̶ìÐ×/�á¥�]–,HóËPšÅs°ÎÔífͬNJkGð~E/h»dºô´ e@‘\Ý�©Gîø�©º®Ç×óMyÁŠ0YÝ¿%ÆMweõlu¾©ç†ZåY ÊŽVæ›2´‹G-ÖÂVÒªa€ YlÎiˆ—¹’¥¤œï�½îêBm5¤´ mðþ¨­áVWðÚ."Ê©>6vCº¸úwþqnªg^üçI¯� +G­4| �µ މZ3).ļ�uw¤1?ßÄEó]�)SÚ«€Ý?=SH·½­œU÷Ì4ö¨O>Ÿ‡wZ=%ké¥Ñ£J ™¢¬iʈ’°†·°«Ü pÑÙ"â¦V§U9Ú« ÏA5}UˆŒd ŒÀƒWR)g'ª†EfG5K"­iªhÊ|­/þ븀�MVLžä�¦Ñ—t�7é-†ÄÑe‡`FËx1Þ«AHÊ,¡âÊ»�IÚ:®Ãa‰<—Q-Qü Lå+é;í«+:¢ÞPçB¹—ˆ°Ö×䪇uÞáqØ}2…~×}RCÛ�±NéM­loÄê1zv³¾Ç‘Ý,�E(É‚[O�EÁ½nV¤O¼Ž°âzxÙÝ´Ç/Ø„ìRöÅ3¸VuŽ3—‹a’{^d¢¶Ó,�Æý”V¢uGÚ–‰Y¿R2T‰ +Mf%ÇÞ‡”RHG(&âEDà[jkb©+IÒ,kºUYRÇR¨ +*]¤fê2ToõK“QÕÀˆM}V©†Kñ÷8ñ,ætän+RI®¶‘m¸e–¹Ɔhjð`À1X(k"‚wM¤9—ˆFkµÖ»R7KB¬ÏŸo¸ÜÏ7„[Æôoºµ†Z‰ ËšÖôyóË +”œ#Ɇ̣˜OÁ+&íÒGÒÿòf�»—¾Í" ÿµâ—ì#³~îßkã¢gAK3óÏfMÚºU‹æaÇ(ˆO€oÊšè/uJÛø|£!i·m2}LÁí,�ÆuèJ^ߦ_1ûÂåÅ +¢'¼ 鸦­ˆgUVœÓ; ˆ¬…‡ÂG7z11P!Ø¢ ì0®¶º™æRÚ·ÅÈ1ض ^£¤ET¥ÊŸLµÈ¶M9Çž$4?›ÀKÅ„¡ßÓR¥”ôhbÑrÊ•þÔ“4/Õ·ÃúDHѺŠÙ¬¹©ã¸Xä Ǭé¤I&.¼Eó+¿¿ÿñù\_Z0h4¿¬ÜëCðÃØb0Ý[LÈq.ÄiŠÇ:Vß¶$Н"P:€bTOÈmè¯q»Ìé¿ûWg ¯+©vmseñ’Ò]^HàÀá| L"Ûæâåý ®#ŸëxW<¯ZÞ̇gÇ¿õ¿zTIÐh‘è ¸‰ä³·U©¡]™xEEð ¦ê×-sz]•ŽÙc¥r€ =†„¹Xý[Aà ¨°‚€c<°`�Nê=òÚÒ†ÞÓ÷ʵ–Ÿ¥&çÒKymD‚b�JS-õo;Ziˆ!ÀJ¿Ír[Aý ‚ñÉOâ—Ô8Ýx9W´Lï*•¨—wÎLïH‚Éö®U)Üí\S +nç>JÑ Ò¨\<üRoS‹•V +�#AÁ+[·Þ¦E³£®kA[û€°z'„Qô eùc_å¨?fõ…+#Ûº}Zö벇¤õÃÇ¡ îò±g{¼}lC˜¾|$öÿ³_íH®$7Ðç)ú¤êÿq¡ÈÐúŒ•Æèq´÷�P&€ú°ßì36^LÈ 3$Àéj$�H ¸XkŒH ä«ñ½Œñž B}Ô ¹NEîRVÑìåq«væ¬Ù¸€7½3ðŸj‘Z€Cò½‘¨¢‰fIiÏaiÁï•ÃÑXÀ`§ñ¡ ¾¬Xµ„+V­¯…j¥·P'1,TÒ&ÍPÁ(~h@B·ºÂµBžòl +£ÂLp�µçÛüF ,ìÒAܲä|ïõVÉ�„Kñ%÷Zn.n‚•_“3Èba�ÌR‚­ µ²+h-¹md° 'S,hò(iÐB1^Ø,BPÒø1š3¬m!«©µ­ÍL>…±~Ó°ö6Ë¢?§ ¤¹v +^…Þ,ƒÃ|ކã¤@¸õMr¯Gé÷‘$±Œ†òÝb“Ç-èŸÊêúé+•ÓOô6ã¤ü”Nmuì4ŒÁbVkµºÚ«Õɤ¾µz0îi«£ÇI_kõN \�®‚,�Žg·¹°Èä#€„Æà]dGÐeýä+¹ «OkĘEoÔpºdš…蛢q\úC”^Df°±`«nzIàŦ®‹]”éL¨"ÖèÈø2ÒRå…µVŽ4^®#M‘s™ëxˆ/ˆÀe¼0ý\ô%uŽ—dŸ€¸ð1¡ÈyÖ[âç¬Áǵ_~àc¥7ìE–\·)wÑ2·¥ÝÊ6¦ä‘“Nó›âÇ—ãþˆ@Kejw4`®Ñ]ÖwˆX¶�¨ªìò‰TtdU/m2›ÔÁ—1´]…ä'/¾«˜þXX„¼us�ÚmØNv›ö5ã&"¹ò¥×úðÍY�ØD¹NLXÈsI äˆû׆ jJOL‰Ûs\ 0J +(í°5M³õX¶&]6Ú,kŸùÑh²aö¥Õdÿ.îgÍÆ4unˆ”®:4©ïÔÄx eQ�EŽŒš`Zè;5‘ûê¤&ß�&1Á0Yý‡-}égcо…4Z³JoR¥9ëKw–­=×Õê€o1ÈÅQZ�ëþžéÀƒ¨î “ ™6YÎQqœ›2nvCÀ!rd`PÊd�{să"Ë\bž®œ�9ŃÙíY 7Ç+’W­\¼ß�tzÄÅs.�ãVò¯z„ŠþçV±Ò䄽º¸ðäŒäÂöõ¾ý‡ (J€ s¾ìüÜ{>oÿíøÛ??ÜñÇÇñ�ßË1† ÇdØr<<+:LôîóT“Ü +'Þ†±”üž£‹Gpl2GÌ+/_�s2iÞQxiçh÷Þ/Žs9F%Í¥ïzG�Ôh vœ6ƒzõ|cޱ'N1§ ™ãÎ,ñfGéû@œ÷èõ-Tη2ãM b +^jXH{¼ [ÎuÅ Í}W¼`Jk~‹—¯èŽ쎜Õ(AD" h:¾šêÀB<ÀY˜î‘‚z‚7ÌHe,Az” óÕI�)d%ñìOùÚÑãDÉÇ}ÁÇ4YfmÑ©ã\ÈY’É0Â-@TÊŠ7Ã]ë +8ûG/y )‰®Î€‘±X‰{yj’ˆï¿öY^„S>­úsšzã*‘ü ƒGOÙ8Æ×6™3$ ‘¬.’Ç"ÜÃV:œÓVšÜ3C˃=âaæs„;¹¶X½€Aˆ`fX”Hº�r2ù‰@H‹._¬ò�ìôÉ “ZZ”á»CÙ9G»�t’æðè1É;’S»h[tãÖp)Q€Ór³˜c¹LAN[º¡0:,Æ” ciÀXL0�¦ °ª�©ŒzDL&·ª L+jÓ6æP:”É|–Y!2µ†’˜i€Îi¿1�GÝ+&Ú Sûy›Í¨Ž“jäR™Ž‚E*ÏóÌéSsÐX­§30¼`~ÞþMñÿBÊ9ms¥* )§¶ ðãäwp%N9 ›f™zbæ&(æÙ…ì+uSÌ·&šiŠ‚n.,E)Øv=�\†)'Pê,~@”jàb9ÙÀDŒ²QµÝ’oç‚°#H¾Å±tûÑX=3�äcá¨ìƒ<ŽfÎUàh›Là�j�…fµ +­^³õü¾:™f`þ\šAÔ"€C4$/!MÑØ³ùêÙDcÕÀDcÉäÀê¸iÆVÙáѹ .lò˜6Œ˜W >Ô"¼ +ò¦\±îÙüÁÅsxSÀþ³Š˜�Â<Ë4ôÔJ¹«î¬î÷·F-vˆÑQ‘ÅCjkÙ; +·™Rûè¨$[­wiuÔr�›‹)é:8¨Ø«7—ÊM™®q À$%úÍ�£›Ï³?6×¹¹äîàG‡�¥…Õ äJˆí¸béÞA:,7œ´÷Ͷr!«¼��/¸ØÆN®ý´ÒŒöss �2¬ãÊŒ ô<ÏÛ®Éäò¥K¯“ÜMëÇì+·«V8eãv[y¸8¯CØr'¼.+¹‘åÿìWM«É¼Ï¯è£ÄÒ­úþ¸šÅËÂÞüÀÛø0ìZà™Hÿý�̪¬Êî÷f¬ƒé‹ô:f¦:32*2ózydýL†ÏéçínüLŽÏYçÉî9ÙÖì7úY#«?©èp›îVV…›�QJ3ÞrGÜ™UÀ Ä›<cÙQ%Ö¯Ê�#^=>­£¼(ˆ'AÍúûº%ξë•v§ ÄQCì³|#|´,@Ê”/ˆ'›Â_oÏM·ñÜd²F +-Šz82Úöx•p‡Öf½Þ3„$ ‚‘¦¤$�‹3Òd°#­«*‡^yJìÔ¡ +&”0%CïvIkÊËuƒè˜f·UøÁ´çÔ®EíÚ¨ yvn¦r:w¢4 Rd8žY¡*‹.‡™FWÊHC„$iL¥I °´$àƒ¤TŠZ"&%—Ü’è^QP›¢’è@“C"ûlýÖªw ÌÚ“8Iì ÝÆ3åß•GG­hX™Â„µçëe\ÆÜÈ�LHÀÐTâ8¯? }íQdÜž$ÎvŒä°Ëùzù æ ¨ƒ>aÚxåð‘zª‘©Í*‡7ÌlI1þÀ@¿z¨'âêW21‡J‘tѲ£ë ±–.üÒÑà"¦öOR“25Íf?…]%š4ª¥aÃp¨Â¾æ-Ÿäªe#„n�©áRSšÇŽ•]cѹvé€ÅØø÷L@R�›AmM ×КߪÌSGotíêæœô‚ff…{ø’EÕ»Â2R¡?æ“窷G³àGª §ó^2mD»d¨Ð¦ªl^Ž~¤ãh Ì3ÔÒîÒñzt:¸dy´âÀކÁF¥Ã¾’g¯hÑ´ÌÍÂ:6çÂ] Í‚›ÉVëhntW6· +Û"�ñ�ÔE—}\‹ÇÜkP²„!ºà‡,‘r¢·‰, 1J–…wQ%�†&ÏçS‘È:Z¾øø5O±Ð_,�ðJƒ{»hU…†H÷â—amBPè p%Éá®:ܧ2æÁÙ|Hå\ ºK*uîZÆ“ú±Œ�ç¾®]/¯ ›†Ð¬blÖ ÛvCZ d�yŸ üUDƒi›–Ò¹s!:æLóçXUM¤q8Í]¶UÐŽ}—Î9@7½½4‚˽‡½£)õAÚêÏU}ƒSI5aZAÖ”,†äúîÂbà±)Öï©SæúÏİ5Dš‰GêØK­ƒ²fï`^\˜Þ¡Ù<@Ê;fºwÌ2uWè•TÖ¡j+HkQ[¢˜i¤€¤}fe9~S a[ÑyDØ!Ñø~K �fÌQIlµ×Q›ï(íw¼OgÿxÏÇhõ€ê0æPÏ]ÕsÏÍåTX0¹š³[ü7Ýâ™,Ÿ½á)½á™%9;Á;Á3 súþéû§ïŸ¾úþéû§ïŸ¾úþéû§ïÿßú¾ …“t<ã¾ß 2[Hy@–ny¡Ý\§žÙ˜Ð#t›�Mf+6î è`.àB^eQÖ‚rŽp¸^^Att^È5T7HyžäQ‚BWHÞ5€Ž>B· ©D$é÷WM~z8\/¯ * uâ°Òg"s-ßëgq€ø}ÖÅf¶®*@ñ€n"'ïGãSè½5>:Á¿{㥫â +r ÒEøä=B§³Q|ÔŒèþ:ܳšjkW…â“<¹¥± �Pã#‚3Žféák½c¥Ðô‘³ïƒ‚†øâa¢Q}€nšl4H ˆ$*–å"t@)O'¥-¼�Ôyt�¨‰µwtálŸºb¨õËlò5ô6E1感×ÞÈ@ߨQì;´zí!.»ƒY¶y"Óm£²·sÈ‚²RûMÜ)ªCJQ­ãX­¨Ñ¨DQ­•ù©(vl@IJ ©©æáujªy¸›šjŽíwŒuh§)9{Šªµ•©©ÑwD­7e­)�´€8Øø h µS<ÇÖLtyPW‹©m ÏJ +ý}w©¨ºF.M 3×^vEÐQ:`VC!äÆ;w©1b1ý˜¤• 2“ª!ö¿I‘$5H<$®GCh Ãp´¸O<�¨giòѤ6`çb‹_&»Ÿ@H{³RÅýŒ‰o¬Elôs�Pâ1,Xc0"FØŠÿyõ@|M0*ƒT¨¸Òîãiû̉£1¹LEaتÉZQ)Eål�]ъʸm6OEe¼ª?…ÍŽ\µ¢RŠÊ”—¯SQ íÁqæ�œ”Ûo']‚ì%G+EqD؇¢(äöÜtÁY•� RêQtÐÉÄÞ`Ñâë1„É3Í´²¨ê! ª )QQCæynÐë‹á¶Õ–c÷é)NF†'�]‡“ècŠX&l§Ãä11f¥Ã„G Ñ¥‚é½Ö¡@S‡©Ô¶Š3a•3¦»Ô—ät8{ ¦l¸¯ÃAÉô¹u�FÑåÏÝFæù< ß_vWꘉF""…‘ªÔ]t„”ˆWK##I!¸ÄÌÇ ¤@ÕI>k)¤¤ rÝSAÝK#×Nã!w=zxèÅÀ¥#ÚÏèýÝç„­/gnĵ¢Ðï ¿(æåÖ>þã…xEhR +P©£&PeRqI‘¦©‚Fb²¦.0.4J’€|=C H^rFj1X�k—«¯³@€ ¢ìK endstream endobj 307 0 obj <> endobj 308 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1284.0958 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 309 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1395.6492 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 310 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1424.2872 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 311 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1240.4216 920.9663 cm +0 0 m +0 -34.57 -28.024 -62.594 -62.594 -62.594 c +-97.164 -62.594 -125.188 -34.57 -125.188 0 c +-125.188 34.57 -97.164 62.594 -62.594 62.594 c +-28.024 62.594 0 34.57 0 0 c +h +S +Q + endstream endobj 312 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1424.3198 920.9663 cm +0 0 m +0 -34.57 -28.024 -62.594 -62.594 -62.594 c +-97.164 -62.594 -125.188 -34.57 -125.188 0 c +-125.188 34.57 -97.164 62.594 -62.594 62.594 c +-28.024 62.594 0 34.57 0 0 c +h +S +Q + endstream endobj 313 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1240.4216 626.1537 cm +0 0 m +0 -34.57 -28.024 -62.594 -62.594 -62.594 c +-97.164 -62.594 -125.188 -34.57 -125.188 0 c +-125.188 34.57 -97.164 62.594 -62.594 62.594 c +-28.024 62.594 0 34.57 0 0 c +h +S +Q + endstream endobj 314 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1424.3198 626.1537 cm +0 0 m +0 -34.57 -28.024 -62.594 -62.594 -62.594 c +-97.164 -62.594 -125.188 -34.57 -125.188 0 c +-125.188 34.57 -97.164 62.594 -62.594 62.594 c +-28.024 62.594 0 34.57 0 0 c +h +S +Q + endstream endobj 315 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 954.9224 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 316 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 592.1976 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 317 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 925.2646 563.5598 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 318 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1115.2338 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 319 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1143.8718 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 320 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1255.4578 1184.7246 cm +0 0 m +0 -782.84 l +S +Q + endstream endobj 349 0 obj <> endobj 350 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 345 0 obj <> endobj 346 0 obj <> endobj 343 0 obj <> endobj 344 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 327 0 obj <> endobj 328 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 324 0 obj [/ICCBased 77 0 R] endobj 303 0 obj <>stream +H‰ÜW]o[Ç}ç¯X @ÀûÀ«ýþxŒe»m€45D4Ò¢ iÊ¢CQ +)Çõ¿ï93ËKJчö!µaóν»³3gfÎÌ^|i.¾»´æÅËK3ùe’J­õÆŽ>%ãlcµÍ„Çf‹Ù­&?˜-Ö]üáÊš÷û‰³Ñ�)¦Új4�5zŸóùãì‹5©„Ñ…àJ-ÆÕ<6—j©Á,o'/~4W7ÖìoÌ«͛ɛn�K¦Ô6†àՠ䜡îƒtEH>‹¿³/Þ¨>šÍ¦áx˜ãaæéxwvüÅ%t.÷ÆÉ_³_n�ÇØ1&”B¦Ky, î¸ä5ŒºÆ +[‰£­™ÿ·ª +ºC´¿Æò¬C×zðåö¹Ü¾øß\]þyâÍ'Øóÿ¾EÌðC?�©iôÙ2j¹Œ%¦B¯øévmk‰xÞL®àÙ‹ùäÝâàÜýƒÊæ×§â‡šSjÐì*òÁU3¿�ü4}9Ì¢™®öË�<¬ïÖwÛáïóoE‹S-ˆ€7ów“é«aþ›6û…B6Ó†ÌôN÷þü7ÊÝPÌôÓ€o{³Þ›…Ù¬ßîdž™.° á›~67‹Ìj»x»Yíͻկƒ³°csw¿ÚíÍÃ�¸ãάÅfÀ(ü4½½ß¬nWÛ!pÁƒù„}£SäU·"ó¹Ûñiýp³ÞâÔÕzgÔÀ­YÜßoÖKØÁÝtzOMØ4½·Gïa�Ëzþ_ú#ï¶‹Íúa˜Unúü dn̹6¹ÌsvC¿®ˆú~M-O|œgì>î¡^Ü8ùèÕÞQðùÉÎ׃Ïîùrý4Ùû‡Ã§pD õxÿ?=Þ¥Óñþt@âÚd…(ðãÀîÖ—`r·Vð™EÏ”�ù,h"ô Ù¯ÇÈ!\-ÞmÖ[ļŸŽ,:q’ìÑYFÑœä¨oÌr�r¹C±¯o{ØOô±¿]l6«�Ñ*êìsÛ)…/µXXðæ),@o?n~6w×à™ÌÄ€–Ê „r$ s¿80×ûA�eqÜß(A¼"ý²% 4ÛƒG“j?±¹³m,É u–œÂ‰Ê}FöWwNåó¹=†ÄiÄÑ +ü„Ñ«Š7�úbV°¾ß v„aë¯_®öë÷*h ù6æšîû žwM·‡ŽµÕ þÌÄTCWÃÿái?y.ŠÍ�ÍÝx(®6{*ž~å’Ë®1 €Ô/؈Ö Þ9Ã�ÚþoôØ3#ú•¯Õx 1¢qqd\Ñ&´^Pß,øÑcxü»œÌ´cóñKÆŽOºl¹¶?>õ­�tžT÷Ãû {ØgEÙõä�†ø<ïz×zl©¶d…¬ÔËüM"d‰�#Î(¨¯ìåk_^ëkŒfÖß¿–?ÿ ±pÎ!�[(.�ö!Â?d†oö÷Šð!i[ä(Ÿ¦QÀØ“³ýs’„ ù÷þ}1KFÆ€qï÷êñ�pãaÐu´\…Ù»œˆé¬‘ùÞ(=ùéÔÐH›5V”‡õ ˜ “ïôÕ~³ÿôd+Èw!Óî­œ£œý˜ÑÛ7“Ñ?Ë TŒXn&èY>=•F~ðÖ“šÛÙ'œxZþHä<듞R|"³ýÜHb�¹ãr‘4W«ÊK'ÌØB�%Ћ™ó¸¶Þü(%à€V‹2›lBIk e̱f'iâ3¸8y¦ ¯4‰k1¾7ˆú±Ž¾!�eLš¹6ÖþŒ…¸£"<ý“§¶)à\NÊ�—²1Y]š¡]dÌHJ­!wFôåƒÀü +})噓O)rF”¢Ã2’·g~,j)N)‘Ŭš˜àmåL犊¦EA¾C/¦yÙÎi„¯‹ü¢7‘£`N•KÄÌW° B²óæJû#Ä<åšzÛª¬b2jòU\á[«‰d½’%9ÐJ%òð¹H›£’ƒ"—²,t>©WÁe€kT<_lRU3<Ø¢7¨:pMƒÒ¬–‹ nc‚* µ’½ºZÑt¸'Q*R +®©­\šPpôµ3i&F¨œLûyßÌ*Û¢;æK®=,�)��~4D ­\ç«D&HDY%ÐxHÌ_|”$À¥î€xp]OþƒÈ¸êr}áGNú”¸,õ½ðwŽ"‘åÚ$x#ž=Õç&¤±‚¡ mƒõà!àu½ÆÐ‚ è™Ë‚©uGQÁ"(‡ïH{ê*ÌÚ$)…¢ó=y1¨e˜UX8¶�ˆ‚Og]í·—räâgág'{4’ës‚õ¶ çl0-^êÎÚ2HùŽa}dB&€Û€ËÛ¡2—’Q3\F¨ +{;¤š*îGÍDSÐ’M“ä+2Ìë3Æ �X¥žInb‚€Šw£à +æ7“—à1ãœÀ…¤É¬’Z¢¡%‰€ËÖ‹¢!BQ€úÁŽ,iãì%Ž¤È FŠ¥"$`"vj$)Û +Û ³/%@�ƒ°Z�—žÆÞ2)Òáb“µ  +@ ÙZ¡´+š&|’,d:ƒSœ…˜È,3Ö*n‘=UH0©èBŠÄ‹Cú7›I !l%¡išËŒ K„NŒí©‚÷DzohC·ÔW¸[e&!Ù£*Åò”¢ÝS–ËP´�ö¥‘Ñ…A Úgª²€•bZD¡hz$$–ÓÅ*á=쬸Â�í|ÅÍJ¬R«‡Æ%MB Ê&¬;6s'‰Ï��ݼúÎa>sÁ`x8— u+] °ÖñÇ)¾¬CèüÅÛ|֖ŲH-j{K” +R—cÆ +ÎÆ*‘$j“ÔK¦�XÁ5ã­„ªJÈÁ¼QŠþÃYˆM<—²”Àª A)µ`D OaöCt`âgñ¶Š|hj„½5‰}È ø¤3„>/1h†røwcm²§È°ÁR‚¨íužå°ND:;€ 6w¤>V¡Õꀬ3­Ñ~·‘¶k“) ö#’`T†ìÀŒhö­ïGyâèØf¡þ–e,ÍEÆ28¨»Úv0 AF#Ÿ�|�RÃÆJùïåŽËnQÿ®‚àþh¸ŠÐ +dHþ IÏ iÿ:™ô4É!ï9ä¦]Ÿ¬¬¬ 2¶ñ‹M¶ÒnÛdúX’ÛY"�+ú¥+yýX~Åš�3Ê‹•DOxAÒqm6ƒBeÅ9ZŸ!!@ÀDrÁ¥WBHa&�M㢠“¦UµÕÍ4—Ò¾-fŽÁ¶mðš¥-²*Õ¾™j‘m›r޽t-›œEÐÒd¡j�¤I/‘çµBŠ9~±O`†>E€Gré>Ðl¿Ž�Ô´yi�j•îßpU*½ (^7´…edxÜU£ör¹C¨1‘�Ë(m�·ËƒÜKý—½¿8'�Κ¡ey‹´*^$«r¨FÌÊö1½T6ÃO*xÆø¡ŸkäE=¢�(ÔyV•ì¦ÑîØ®æÙ­’¼/É”·�“÷…�9F�rvì‡�ûäãurI“?�¾ŠSw;=kˆäãôÐbÔN“™Ë™²ÓäM„”j˜7;ýN�‹êN�)Kce½�Ð3—ôRºFV{b ?Š$‹À&õ1‡E£ÚSäƒy¡ÞÒ‘ÙÛT|Üö†Ëû¤}oT)„E¶ùëvøFÝ#†]øG '†�à \'ÁOTybhÕÐ9N¾±(�“@À‡¯ÐÖuÀ¡rL/™:z¹w¹[�I)!V·¬ãeY)×&›ô~›ñvãE‚1Rô@P¤ðÝñtCò˜­�P60±fîP N(/Ä9”˜¬ÑÕYBÌV5íqûÒ<ëÊn&ªÖÅW$û  1¯ëèÇšÿª½Þ¾ÍC/Ç>�}¼N–tNdB÷ñfÍÚ~Ãë>øu{u}ˆ©ÒãrÑò}ç¶îd†}ÀÖqØ÷œ`>GF@›ÚðæÔоðe¬ÅD¢Í^ 9é©dSÞˆS¥Œ^,òÈRëCµ‚Wz¬P©8—¡"�ì/ô3 �~3Ò°*LãŬ#‚¸ÊÍZÄ·9*{ +¼—X“k®  ¡Èº‘ñŒçPÄô¤ªxfàóÿ=)d#öœ{¸õÝ_g¸]ø7ÁVíŠë9ÛîhÎl»öl ;Y \�Ùýû1e­¦ýs�´5¤öJ«BÍ?Tl�ùGãH³<¢‚ ¼‡ž¨š$çcþAv£}šbœõi”õ÷cþ1BbêîQBõúsü!J×=ý¸#�ß þÀs]è-ítŸ"§EÖ�E\úB'{רèle=Ñ©l¦r£S²­ÝØd£>�IÈbªÿzT÷Yi‘n­»l‰—t’vG ¯Ý3V±½Ö ·k-RxµÌG´ÄûcM$óu�6 ³ÉrÔ^GKÃEûhª±X>„u¯˜_�>G^}4�\ÀÑøY€áÕ®�0^Šwk"L—žH¬bæ¡oGÜI�8bƒ@Ç.&B’ÚFÔÆ–{ÓK"çU ývôñã 5O´ÁS”ù_?ÈMî­i9Y­0u}||<¡P5UüÈÞ#ͼÄÈçÏûÓ_Koÿýíí/‹Äã‰ÂõGæg·‹|$Uí™öª0^ÁsÊG&íû™®Ò²è´)ÛyD‹'Ó� +’¯»é�0¾ëëÙÇóì.øó,€ÂZxöW�\Á,7!íÝÿõì�,½»Š¡$¶éQ†¡}ÑÁ݈!qþ—Í·»NàÐþ?Ì�‡ÙE>Ï"R?ú±¾jˆg?³q»Ëµ†\nÏ +ž£G×ywýÔ«®WùäiZåY½sô©P&ö]Ðj†4¬òŠb7y—qö5W¿þ **Qùöï›IÖÕoqVò‡0^¹üzòb�S€C §B7ÿï¾èãUÕ/3bŸ@ðr³L}±}#p¤Ë'¬\Ç3ߎD’Œ�6^yW|’¨Ì‹Xwõžô{ô�ê ¦eÖ´™ùì�ÿù‡_�¥!¾Ê>ªGœT—Q"í9Y•ü©ò  +{ÂWA0›ô4 šÖŸ¯6°¾²rب&rå«-…òxü‹IêVéñ¶j®úl'gõ‹HB–É\Þºj?×C#‘ š²küÎj¡”C§%ò+É)â„ríÇ'oRï€ +ÊñdË™+Í7éÜfEq--ž©4?+UóÖö——åe6Ë‚k–òÊR&û«¢Ûê›v�lQ³(!g)…±x�¦+zƒ¤ +È?�)u?º¬²ýUo’@tIJFÖ*l§mK¿©�\I­IËhC´•l¥ˆ0»Õ¬2”§år(ÍɵØÓ}®Çx˜ÍŽæeõÐñ÷ÚQw,Ä%7Kjf9tÝÖÚÙÞ6›‚*°ënì7–]ï…æsÏÊy½É)g$Ã$æ¨ã•­õ¥§âØAdÉcøõš!çâ]~«@ã6#›éj÷÷Ü ]ûçEÞp<ý5H‡Êx:e/IÙì4—ýoza˰FD UùŒñ±|R--‰m]Q×;I k18ºç…ê5ZÞ…LR÷ü—äUæ´4iQ‘ìVT5ß¶ÒÀ:ОOt3–/¸á5ÍX+V݉[Q”•¢]Š=œ–»¼PŽ&£7žŽlæ1ýõt+d©}ziÌeaÞŠs¦õ@9²F¯þŸGØiÆ/�áe\»,µÅ‚‘ÚØz\3W·çr¹2ÕU—L/©ýò +RfÙ…2 H®î®fóÿ1U×x< +Õ�þ:Ãe}ÿ–Hf}›®¬žíÎ7õÜPë<›µYÄÖØ‹—�²‹G-´×i Š&M~þåᜦ|›‘,%å|ìu×j»!EÓ• ^Ëvõ¯�"¢J½_k3‚…hžàü%âÜdÏôøç“` CoHæö!�B_7Áf/@ ÎÒð |I~ÔÞ¹i !WxL©šIôºhÿËá7œödwÒº›f|¨žÏ @§8¬�¤ýHS� ’*ê*Y¦ kÞ¤ä qÙé4C½"Rërtvu +_pMìk…¦€ú%Ó™]k[Ö†¤(DŠ*b“9/J]2ÆÐXј±²œA€RØÕlÅè)žiš=�Éô„kk¯‹M»$•O¦´*µ€ïF!)+®ð°²§&Ü�q]KìFÇ¥ÊT¾Š¾+UäŠ�¨�FI]sÊK6Ӊ˞â|BäÐûZR|\1õë°B±Ç§tˆ§"Û²zŒ¦Ý´ïy$F7 T1 +E©1g®`�äf7-Ò(¯c¬‡=Í{üò’Õ¯äZõu�ÁÜ “:k°‰úNÃ<øÒ¯šæWÙV‰Y¿R2Té {)Ô*…¯9ò[`9 ˜ˆ�oeÄÈR[’¤Õb¼uYèJf +¨t“dXt¢H4u÷Ë�ÑÕÁ=Ãg•*–9˜·¹É‰Ÿ`µ 8r·©$WÛ¨6Ü2aFÃØO¡+©NP Þ4ˆKâI>À š­Ýþ� ¾ + ŸýÀåy¾!܆�ó<¶ØP+i{‰qMŸ¿¬Á‰À9“ì"Ùßd ² öHäzÈ›˜w>Hû6«4ü§’0ªJv˜‘a¿öïiO¾€ŽÓ0õ¯aYªõtŠÁ¡î+­ãÑà ð-Y ¦N™ c¿~Ð�´Û6™>–äv–Hã +Dº + ‡.¿bÍÀåÅJ¢'¼ é¸6›A¡²â­Ï� `-˜p)Å•R˜I`Óx‡(ȤiUmu3Í¥´o‹™c°m¼æìÅ’Jµo¦ZdÛ¦œc/Oš?áC¸™04ã‡c¢bmT§dþ�ýjÇq,9‚~Ÿ‚àSý?î:� ­ßÐj ®£½? ˆÈú‘=+C�#¢�&³ø^UfFdd–—°d`ŽÊãù -Ã�PÈ”’¤#EC7plKEž4ÆÚ[µ´á6°øå +Ÿ®ž³u0×8Þ¬‘’M ãÆIŠì»QŽ}Üçf…ËË ÓUèrY=rü/âšÙõ¼5[ºm ¸S+C,“:g]ó‚#ÂÍ/”ܧiÂ<ÞÀv”ä¹Îòó(ó¦žMÿì3«Wq¤áU¢‚Â…*uo LÓ+Z^"Jdžç�’¿'^!zÏjj¼_A Ô0«¸c`pLò�ÿ9šSÖ¿\*£uú‚Á'–§ ™WËcE"`ÑÎ7É·¥š·'» LÑ®D¤*Dƒ*ŠÊÆÙ^“\©ÛLÛr¬OÀ‰Ÿxõüâ8Žj\Î%Þ&¦w@äåèeƒãðY2¼+™#îp® nÂvîžwà�Š�›Õ¡ófÅ;…Ú™ ;[ÕÀ��Š:Û Í. +@ã{›!´Ä7˜å{wÚJQß{Ö†–‘amŸÌ~,»q¶>|l¼Â-k”ÇÃÇÒHéå#bçdm>"- �¯Æséã%Ê�ß0C®SÑej š½^hgöšƒ 89Ø¥�Õ",À!}oä©4qX‚ö1-ü^Ù èì2>§k“/ÛWƒpûjøWôÃÕEŒá*i“–«`?Ì!Ñ­nw�½›ÂD˜ ® {žæb¤jÄ)Kû{o×J~˜÷ \ŠO¹7¸9¸)þ ¿%g’e¸5x4,#ØvÚ�ÝNäÃéA†áôbÊpš1a`Üò‰’â¼F_œÐ§rZ¥ã º0\6kWºÙ»ÒI¤~TzÔ³JG‰“½£Ò;pºé±êï]aûß;º6ʉ7Å'÷»FOžÇ‰`Z}YÓÁ,­1ÃÙ€9,¸Þ,Ç�?DÕ!Ò‚iÅw¬3Né6ÔE5fÆ)¡F5Ƨn–*/«µ²›ñêóÒÍ2Q)æðhì‚—?Ÿ©çŒ¯´9ÞG�yÆÃY�ÉD¾³]ˆà>Û &8Nüú�¯Ák_˽h¾u‡hƒ¸mÙ6°&•F69KoR„߾˭ =*Cqï}¦Y;¨®Ñ–£5CSd—g;¤š#«vaSClÂÁ—Ù°-¼2�ä'/½Lº3ƒsë±@^·i;�5í»t;BB¶je ž` 8;&–P®+(¦¡¤´ˆ³×¤´ðÒ:ƒJ�㎠+-¡¤pDeõµ[i–G‰Í›E–­Êü,3M— � +MÃwqÿ¡ÔÀ�ÜÈ£’Ÿ#‡õ“›h-¡ln"bIÑà&’úÉM侺°¸Éñ3-f‚bû§­ºô«0¥m!ÍÒ¬ªMj¯Š³>Ug9Ê3pR�¡Ñ"Þ�^1ú «Á‚øzakLk¥³£Ôp·ü¶Eszúºò8Vp¦:D/˜82C\yíè%ʧâyÕƒ]1X¿Ü8§c×—ì�>P´‚æì;Z©ÆÅñb·ž8\�l�—•ÇdzæÍ%¿A•€ë??� ŸSjÈ\ñŒ¥–ί÷ã †ZŠÎ7Єc¾‹ºïþþñ˯·¿üí›»ýñíö×_o–iï†Üvª÷ÒòK𮘼Ãí$—²‚Æ( BîL}Yâ6¼ß*W”Ífµìj3ViBº¿|YzœKÙ½4è€TiÍ+,H°P×·~Yú™YGmvˆ1 +‚P-ë…×Z,ÁóÈQ04�Åx±-\TýÍ+„—¥Ç±„Šñ1èå‚]ÒF/cô®lô2¦µ2’ó²t —kè7z¹¡™‡-ÍrÙi8ú²t‚eúmKQBH>ùÊXÑJ’ïb\Õ`ÿ’±ÏŸÕ ùߺ¤ÈDCQ#çS4”þ”ˆ�Ìו-�)¢%ôÄ-ÖçfPÇ +”œ®ä·ÃÁˆ™QŒâ!˜/c,G +_W¨ˆè©¬¼38O5À, Ø:»ÐüéU”1˃<«ˆ¸‚æ’�BÓvÕìÔmV­³€öÂãX€¸T-ÉÄÓŠÄe­ì>qB:ív•]{åññ:ô¯à +† ¾K€œ�¤=GûT¼¦µ˜ð+éý°<™Í<ƒ‰N69ü9Ý—£¿ ŠÍúð +Ýõ2??^Kó÷ìº0YKŒ0ú×ÁÚa¤=¢~Y˜”]y2Æ®4.ÿÇåêãeá…®?.‘ïæ’×÷Àò§ËÌñ{<ù‘ãÉVç÷0òß#ou«û[ÝßêþV÷·º¿Õý­îou«û[ÝÿÏÔÝݼ'ìÅûÛ]_ÿõ–áïöÇ'ÎÄCâ5íAEŸËåÁlËŸø¿Ô4Å&!Qѱ³¿jêdaD"¿Ú`kó„ 54€WšÑŽÇ_LïW¶ÓbN_l§þÆ w8¾4Å£j .ïx�Œ«ƒwwÕÈ(îÄ*"áWú´2ópô¦ûôér¢í% °0¯éj®Þ �X»{:Þn ÔLzzÔaÚ�`{÷°j¥Õ¯6¾ãATf ó§ÀÝ"¬ˆsï�Bïy‚³G!D8@¸iõŽ /Ðw¨¶Ç£´ï^?eô˜;"0wŠtBRc»âìÔnwÔCïr!8˜(�À·½"‚ °>•¯ìqz¹¢S+¶…]¡‘Q�áaÔ$G„Ž“Z‹òŠ�{e™ ;W¯Ì¡c,«�l;_XiÊHóDÚÀÔË'AÃbfбž±?Îg„èܱ%Œ·Œ <šÙºÙj� •Fâe•eZ6ŠhþŽ}¡Âz=Ð,W}:”Q“;Ð_GïÛå˜-�=ç.ÿL�²nÑöf€µ+–®•ÈNÄØ¨˜@xÀv)(!EäÈjÄ«$?€t%é�-s¹èAª’¢Š~ÙLú}:ŸÈR'mÐŒáÑUQ{‰ëJwV.AÖÜdy:êÄ^{Ú²éKÕÏU¥à{Tm•Êxë•‚r†Ó +s„Ê)ôŸ¾˜íª½©D�/¥ X")�7]b« =ZåúЄL¢¬ìÁÞ‰ñ +Œ5  D($—{GàÁçù§I\íq[@·êg-Ëã]D‚]…,ŸÍÊ7ðTËxŽ8æ +Žæ€Ùà‹ˆ*‘ƒaè8ÆàÃåÔùeZ²˜”ù;hϽ*Y›E)]äÕ´RQä‘‘ �R_€7%ñS≑‘‘¥ÿÌŸCœCìÑ<~;68tÞ„)É£Á†€kÄXˆ øî Yì=`´ ùayûÄH1ê7>ÆTUGyí(ÿ¦ð“š1¥’–U4]ä@q~o˜¼ž¢5˜ôàKlzQC6pEß$* ò›äeòÈ8¯t±y³V(j™ŽÖ,#Vò ZS "¤êÃáA²+ËÎfùAÍÚ�C(Q£Q +Û +ÛŒÆjXáì(µBë êiì=“ª—ºž…T •°�“¤ExÑ�ðY,DÊ‚FNq0ÁÞ0ZSXTO3píPî‡É|þ"›I¤¶’Ø�æ€(^Ir"Ø�­W9ä½£ ýÎý*ß6›$¤z4“8¦ƒ:eÙ”åc(Ú!ûêGTtÉ@¤¢”h}¦™ +8»d…bôšˆåía³«to6ŒzP»µqwÂ*÷6sMxC•š°îØÌ½ˆßyÿBí¶04,F2ÜIêe‰s ¨Ûj„·žÞò‹j ÝâÅßB±–ŲäE-Y{Ë´*¨Ë1c�N8 RD9¸ ^ +�Ì +þ7ÙeŽG Ñ\§ÐäGvs�ýú“8˜ûÇþlÊN4Žº‰¥P( z†ï*Õ°’üŚœø V"ß"·¶"•äj·Ö2nzØ!žücÂ1hèÆà. A\sº0ˆfk5ÿÀ?¹†ðï¯\îñ ᄜÍcj%m%>®éóf—88g’ ›gQŸ +‚WŒZHäºÉ›º–S¤õ6SiøO%aT•,˜‘a?×ó´'?@Ç©õÏf²T«*èƒCÝ#ÍpŒ‚€hðø¦¬‰S§t�±Œ× I»-�é땬�%ÒxK� + ‡N»bvÇåÅJ¢'¼ é¸Ö‹�BeÅ9ZŸ!!@ÀÚáRŠ+!¤0“À¦ñQ�…NÓªÚêfšKi_3ÇÀ¶lðš}Ë¥Rå?S-²l£œ°§Mš?áC¸ahÆ7‹‰Š•v[Jz6b©Ôœ*J‰ùÿ˸Œ %P„”VŒGš‰nê86‹|ã˜×¿ÚžËÌZ5ªª0Ÿm7‹«ô†bÔ›§cK;×áÚ.‘yU‚u­€6 —¡¿†P7§ý]OÅìöWR×2ÚbÅb£F¢Ö½�–� R|Q¿³Ã…é ¼žàuâÞxwå¸Ê½™‡gáŸVJÒ.Ú:Xm¢óÛÕ£!S™mEåÄ ¡j×í +sV›^Z¤h{ˆ’t(ƒsK”xÒ�¾èêªÂ?©OÑæÙÄ ·TãR+o7LŠ—¥Ñ]¨ÎáJqjT€é;»èÑè–j³=AØŸX'´zâ^qm ý³4¬GØI]˜§öCÁPiýƒ«’Ýáq¸ LºÇUµ(�ËUûãuºŒ"ÒJ¸]näXr6\n4‹?'…Vé.N¹Eâ/’Él¥qÚ:ÑmK,3ÉÚîó„½=/U³JÚÐävª’é÷±�bO©$_SºãsåäkâcöÙ¥œ…}ø¸NÞÏÉ�È>�—¥n;ÝoW½átÓ¦S§Ḛ́L™ÓäMŠ‚”j:sú‹^wE�)Kb×|�P3/©RªfP9±„—4ˆÀ&9Ñ›©@µ¡Øs ÇRèæe;*ÞÛ^pùê´éF•B˜da™¯íðFÝÃ*üC@#bèD ¸"ÁOÜ1”Û N|}ó‰GÀÛ^¡5*À¡rtÛtt¹-g[…Ñ'eu/�ÆeY)×jšô¹¿Åž8‚]x‘ôònÐ…§ ’a.´¡,`±8fv(¨åAœ…r9&oïê,efo5m¸=4 ª‡²š�©ýï‰d84úq ‡5ÐU{ݾ̠—°#°÷s2%\<z7kxÖ ¯}ðÚ^í£·˜*ÿC.JÞï\ÖN¦Ûn·Âa{Oó=z§ú_¿~òñW€ç¿u endstream endobj 304 0 obj <> endobj 305 0 obj <> endobj 352 0 obj <> endobj 353 0 obj <>stream +H‰|RkPWÞ%d3]+éRš8ÙuèTD�¢B[*uFѼ€HBÀ�J³£ ” +ÒRD�‚¼ª Ø))´T2ƒbU$øh} §=‹§Ýð«¿z|s¾ïœû�sÏ\svÂpîÞ·KºwE”F¯Ò®Ü�*S¤8dš㬧3»Ô�B«Qå›7obø0°-é\ʯwÇœp|òé§é‡µê¤d=³:,,ÐÏ�k0Ô� XÀ5L¤2]®b¤‡uzUšŽ‰Ò(ÒµéZ™^¥ôg"SS™ £UéTZƒCÜÆ¹Ê”ŒZǨÔúd•–‘qÉ$5w_«R2z­L©J“iS˜tGæ?4ñZ1j Ãy1»5j“ê9QÇÈ4ÊUœKúBEz–F¯U«tþ«6IwÎP13JU"Æ[Œ-Ǽ1_l¶Û„mŶa;°XLŠíÂö`ñØn—œ‹i°¬ ›Â¥ø÷NNÑN NÍNÏx�¼Þmç�Le}ì‹>œÃûxeάi.vÞD@%¤PœàÃ31h€™?.˜'bˆ@'Ø~Ê!#Q7iw¼\yÀ3R—Ï6_º¬û&9Y›™˜Ô”a¥Ic™ JÆAmÃ'¦yl8ëI¡:PÃ9Û<ö6„]lC=Pu™Û`€ÁqÐ/ÔMxLà œG'@-6ôA‚/W06Öl®&í¼‰¹êmÈ4ŒÁ$³Ï…!+š«€4G lÈw«dSÂ<6Ìã‹ æŽND ^$Í"ŸíqŸg*$gâø�¯Ööˆ_Õ|ª  hG¹W4r {7ömz9Ö±­YRIóŽoç�PJØ[d.4Iäù +EŒ8AÕüÃ~n¦É!ãm¥��ƒ”l÷¶h± {Yï¹x +ušíY{­‘b´ÈÛ—ÓÈû±¸LþØq£YRÁYW…ò' Ó…ÒÞ.{_4_Eå—˜ +$ÂÞ¨ÜÝÊX±ß¾ß^þ}ãÞ“Ñkû¥'éJcyžQDš �õÃà5Œ·=„š)+U^]Q[/š‘�Ѳ`$@ËÑò_ð½3pª¶U’7ÌÏ?¤2ƈƒ>éW3]>L o¿?#~Õ´FZJ“¨±ÁÀædÿ ¸û-À}íÂgìÁæÍ焳Ýs¡TŠ^—šÖ¨kµ66�+¥[ M‡$$:Ó`˜‹ÏÆmvžÍÃ>D�ýœÍZ›1ÛÝf£]x‡Ó¡›¨«¨«ª‘ôÖõt Š´l §Ñy;t +`­×•-ë¤ ûu3!ì9v�NT*Êå{EäwÆQvÑ(Îmóêc´²G)$Zæ‡BÐÊÙð>¸À»wa3ø¬œE4mŽ¢^wx…!>stream +H‰ÜWM�·½÷¯hÀ@ †Ë*~¥•l pb;@ AKr0RàìÁ?¯Šd7{f×ÑH;d- iV³ÉªW¯êæ‡Ûùæ/·v~ùêvžnnïì|¸Ÿ­±1Éÿ9â¶yžï¦›ïðúíýd�Ï~ö–M +y.L nN™LÁgÿýyz3Ñ,ú•5rVÛ¦_en»ô¾Û»¹í¾»ýëô+,þhŽÉ$��D¾˜ìË|x?É›÷SLª<§»éÇéå~ºÙïå›ý›ig ~³þü6;«Çá'…hE� .Ìû÷Óߟýp|nM˜Ÿýò§W?ßÿò¶.><ÿÇþÏÓŽ½q¸gZJóþ_ØnëÒ �µ§6u¬ê"šP¨†@a\J³ó0UãÙ7D]x¾ÿ÷ôz?ýŠïˆr˜)Z\¯�@ìoó‡ Å…s¦ðˆ²øð•ˆ_o<ã×±aæ³ßô b]^ßD|áýzB[[ÙÛžû«öéÉ™ëÑíò&°ý;«‡½�ëÔy+2”näP±IÔ y^ 4�àZxÂϾñîöõ ®¯<^íl•«ÿþ?šˆ Åàq`¤X¸‚Ì.ÀD*™¾V�™QPˈO‰À?1ÒQ1Q°ùŠ�*ÎjlAÎ[úš ûñ+ÅÓ«9£6fg +2_kn*Km€Uo§˜ƒqÅZòõ˜Ý(h'±MsBÊÉzf/°¼üi¾¹{gçûwóëŸæzï£y#*Q�úUA!-ïU;'ÌAÊóþû›oßÛùÕšeH? 3~`xþ‚•É/"² Fv³÷Æ2 ÀFž€Ô™è¸Š($caÁ(òÁçy¹‹�ç¾€mº>]p˜ÎDrNÉpDEDå<­'£®”¼Þµš>8úTt\Eƒ!‹¨ÛßïZjútÁa:§wC�À™†BˆŽkŒ ë'‰,*Þ„ä)¹5FèãbäQ÷Óà~v(ÁÅU-}÷3Tqö.‚õÙDD½š�½ +"”3X{*:®¢Š­ÛˆÔ%ƒ~Wu^t}ºà0�‰p޳w—m\OrMvi½k4}pô©è¸ŠCQ·¿ßµ Ôõé‚Ãt&:q?gÃɆÓÝœœKHÛáq7np8`qV™MqœÕ† ëÆ£1Á5&†î&ÈR:¢i­Ý»H5r�Ó.:rÃ%ÂR?ƒË-+&ƒ“¤Òö×õç¸APûI5PºÛ-}}¨fé³$¥Vâ.h×ô³Ú²Ýp˜ÚºýûºªÚ޲g}ÑJiÒQRë( KO¹Óßßæ&@·¤ßög—¥Q‘ qcí0_÷â£"’.�„Œ`Y:kˆÐ—£ý}T ÄÁà´ˆ˜Ù9ã²óÉÚ%% Æ7w34E¯JsdR¶a8‚ûȹô; +¦€uP¶’Ô¦@÷ãë¼®# bzøZ¤U2$芜Z®=½œ‹ëY��Ö°©$Y;@ʰ±Ã¹j¼TˆÂDY׸Pr·[¤ð‹&@i]#Ë”tL°RbÖFb]ÿŽUЕ2ø!ål|r~µJ]ÂU Þº¤½Ú-î:=ÖáŸ“[Òp,” vC&&¸$%Ø ÆÂ#iµ¸T¬’4E}{}½Ãù”Êr³T@„~H¦KŒ�Iø¡`îñ'§¡ÔEòƒ„3f=pgÿê´øƒ¹) +0•ü�Faô´ x¸ÐÕÝeTO9¶8íP¬=òh Fd/("n›ë�øAâ%Úü0@ÕMs–Šj€¦DKÁ\%h +Èå9£½Nê@FDX< 8ÃY?g’éJ?JÆá†EÐÝ–Ù·…ÓO£­B"ƒƒÙǽAÒî&\+M«žU^kú_$=ºC£Ý›ãbjbßr\¶d”üÂõ´kÙ‰‹‡Ï¢�Ã÷e« ö”ž¿ª/|Z$ZácR ‚LJyü¨íÉÃ#ÇëYðx×°” XdΈRY¢(36ºÀnm +(bªB-ƒ�ZlûËèºD‰,;<µtÙün¥`+\"´h¤oÀEé0 çJõg�5µB#Š}•=!ëŠãR |à¨=»‘,ÚAÃí:Aœ¬’h$ +g£a4ýàJ nCæ2ô@"›“BȪß"@Èkw}”Ip�LV}í…¤ËÃüî ^Iá0?°®ÞJë%-(c];xÆ!ͨVz“¤‡]Ö0~Vã÷Çuà"T T{¸b$––e2n.¡vYG«¶V{òÃ0j¯ž¥5Fx€Q�Á«ƒ3Ú«Ý⨳c‘¦\dr„ÞìÊÐAULk«Ù�oB˜Uy�fA¶ °©¡üº½¾–¤°m4Xø¶ �#v)Ã|Ö'‘Ç-ð´¯KëÌÒ8ÝK]?Ù–äkA:nÕaX×(ð)À°œtD�U_ÝÍ4xS�]­]ðÚÝA¯™!ä�¶MŠò4H*›]]ÿ®.£>SZ´,( ÚH‡ªN%\íà4ùhÈœ„ Ç‹èë7˜Ã(h.cØ7Õ�o•.ØÍ$Á‘ìI÷›p5¨j>õ­âktFÒ´«VI)Bq´ß}˱oÁ¸jüõ4Ó”Ä-B¤@šÅ¨©=*R÷´¬Uܤ=�BƒH«-kÊšzÃWmK¤«ðéDñ�²”ϤÛç§á ²Ðc +<Åäâ) ÑUHˆ¬Ö}É$4,”¾r"\ ââ„T?‡„È¢,:4rp;Ä&ñwXè ñ @Kɳ-û{èõȽm’n?nDÒx¡‘ë~tµPðÑ¡ìðyK¢¶?lT¬Q܃XõÉ’îa#JIc‰P¾XË7lsÚz�"i›ã1DµF¬Jÿo½r’`Ê +[¹�U„ª ñV„³8iQN©}ˆù-o$Í“ÌVkªbb�Tš�Èaúîñ¦¸ËAÒïÖ\·šlmoPÜPÒÅÿZ9MeLgݲé¸lbŒA”«)X³à02-©‚E&°´QGw¹–ÚÕe9i…¥‘f2‘diŠÛë.†Ï³¿¢!ŸÁWÍ‚+B²OËW> 8Ëš×g|u�¡‰¼v]ÒXü1˧Øú‰§%,�ãŠû8¾z¢© �\`y$„~#AydMJe#Jb{þ„R_ù-éñ¡îÏ[ñ8Òæ“á¯�¾”]éÉ£U-Ń<’´¶\Ý ÑNK�È#;­¨" ¶ŽFv¤e"ܱá(?²“G‰ôÅmEÕ�;yTK/D7Šˆ.ôÔ¡%ïË ëbØj²�„å ,Knd¬`cmªÖJßw]NY«¨yFÊÂYжêŒÉ]}Và|70f T‰íwuÓå„u¡ŸAXŒê$jŸ–¯an —/ÍW’ Ø•þ(|ÅP³$Ÿžš¯X{)eŠ/GXRqrÙL0'á'ºsÆ[-«�?k!¹´Ò×x ¦�N$ÚÖƒ¶£¢†²ù‰‹`ÂQF1Ö±ðã- ܈0f–Oa¬‹íP¥ýÈXõ7òÓŠë*JlJüÄ.™,ÕxaVrnCPœt2f ¢æÉ� ØG¤mE ÉLCu,Iürκ8M¸ð?ÞË^Kj†Â=Oá6–ÿÔülû4p((x}>ÉÉDY˜s<–j7Š&–t¥{e¯Y ¯”Ó-K`öt’¬Ýé~ɺ;Â1º^²( 8æs¸Õ?ÒFFþ#ÕjÌ�z"Vðóê•�ÍNЦ¨ü¥ pa$rêÎB%×,!�d+$ÄÝ3BSÛ ÕŠ: :›•ݬK:޶““;‡ò’ûé䞸ÀÊT‹’Lk4¢FáhL«�A¬�Á7}]‘(£­|Uü3â¶ð wÕq"Ú‘¢Ã`ÉÝ’0rh)e’SÒ€\¯Ù):ÌšERvx†„m¯.Wè~ûnÒ +°u!EøèfrýîJ79JpÙè^YS‚Üaœ]Ÿ)Y[Êá?^_Èo‘ãl›¾X£Íyå[ukDzu£ÍZZ LNt&)‚€?<RLÈ-÷ÜÇdyÃÖÒ“ž2ª¸ô*7)bø'ä³î¶ iNelo¢»2»HéªS¶ô)Ÿk«;Sä6~ÿ#ݽ3Öݱ´ë¨øÒ:ÒCx¡ézGÔ&PëÉÔ;5Ñ¿­˜è…t6 0chUÙnèøB«°›œLݤ©éüõè«éM[Í÷„^²tÛàí¾&,¦BD•eºŽ•$•lØîõõðj¥¡¿Ï5àß9¦˜JE‹JªÝ„ÍG4f}u3AOƒë`ÞABÔÑð¿ÛœzL¦™/˜ÉM=;( 9Ôu DÇ„º.aÒëÐJk\*‹˜±×x§÷±ltµ¸ÿ3÷Ätøn,‰ËÓg¾öô3h¢Kx|õðøI—úæÃÃûo)¼ý>ç™§=×iÏ2íY§=Û´gŸöŒË¼kœw•y×yœâ> endobj 277 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 278 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 656.8552 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 279 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 841.7519 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 280 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1485.8199 1183.86 cm +0 0 m +-451.46 -781.98 l +S +Q + endstream endobj 281 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1380.26 1183.86 cm +0 0 m +-451.46 -781.98 l +S +Q + endstream endobj 282 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1344.01 1183.86 cm +0 0 m +-419 -725.75 l +S +Q + endstream endobj 283 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1500.29 1183.86 cm +0 0 m +-156.114 -270.413 l +-451.45 -781.98 l +S +Q + endstream endobj 284 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1591.61 1183.86 cm +0 0 m +-451.46 -781.98 l +S +Q + endstream endobj 285 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1606.72 1183.86 cm +0 0 m +-451.46 -781.98 l +S +Q + endstream endobj 286 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1610.4 1126.4399 cm +0 0 m +-418.31 -724.56 l +S +Q + endstream endobj 287 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1610.4 452.98 cm +0 0 m +-421.99 730.88 l +S +Q + endstream endobj 288 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1403.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 289 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1603.8101 401.88 cm +0 0 m +-451.49 781.98 l +S +Q + endstream endobj 290 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1589.4301 401.88 cm +0 0 m +-451.49 781.98 l +S +Q + endstream endobj 291 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1498.36 401.88 cm +0 0 m +-451.49 781.98 l +S +Q + endstream endobj 292 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1483.13 401.88 cm +0 0 m +-451.49 781.98 l +S +Q + endstream endobj 293 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1392.4 401.88 cm +0 0 m +-451.49 781.98 l +S +Q + endstream endobj 294 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1376.65 401.88 cm +0 0 m +-451.49 781.98 l +S +Q + endstream endobj 295 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 1341.0699 401.88 cm +0 0 m +-416.06 720.63 l +S +Q + endstream endobj 296 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 923.819 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 297 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 888.5807 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 298 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 874.9901 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 299 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 828.8575 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 300 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 796.923 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 301 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 783.7511 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 302 0 obj <>/ExtGState<>/Pattern<>>>/Subtype/Form>>stream +/CS0 CS /P0 SCN +1 w 10 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 924.0111 692.5121 cm +0 0 m +684.989 0 l +S +Q + endstream endobj 407 0 obj <> endobj 408 0 obj <> endobj 405 0 obj <> endobj 406 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 401 0 obj <> endobj 402 0 obj <> endobj 399 0 obj <> endobj 400 0 obj <> endobj 397 0 obj <> endobj 398 0 obj <> endobj 395 0 obj <> endobj 396 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 383 0 obj <> endobj 384 0 obj <> endobj 381 0 obj <> endobj 382 0 obj <> endobj 378 0 obj <> endobj 380 0 obj <>stream +H‰ìÎ nÂPÁõý/) +øß¿¤®T•î3½-¨rÇòÖÕå܈Յ۸ª�m�®�o�›µ¼Žk]­£YãkwÖúÚ™5¿6gÝ­icÖ�úõM±îÒŸÔ×rÖýù—úšÏº7OR_¯³îË‹Ô×ó¬{2“ëŽ,£ÒcÝ�Æ(c”1ÊeŒ2FÅÆ¦Ô—1ÌeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQƨJ�¥ÆÊdŒ2F£ŒQá±ÀYj¬ŒA•:K�U~,l–« +�¥ÆªBg©±šë=,b!³å+#¶òŠ˜­¾f±öÙÖ«{¶ýj�íµ:g¯¶Úñ«ev¦ÕP;Û\#­�7Ür»¶º9÷Vê³ÍW4ó#À²Q‡ endstream endobj 409 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4777/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwXSwp}«lHI˜I2ÂF (ŠìŠ(ȈŠReÜ"ÈpS,å¡Å¢"Ô� +W�ðhq AEe[‘Qöaµïï&‘Z”?î÷ÿ{žÏsιçÞY³àL]fóœD™ +%ôðÿ¦.ÄqPß�Ì™Š@…¹¸Ï‚LsçÎåããŸìðññ�Âs†lÿ’P|ü‚‚BBBÂPDx»¨'(( ÀÏǵ}+mˆT‚BÂ"¢bb‰Ÿœ€JBL¹6ˆöM. ¨DDHqI) +�Æ`¤'' �BIIJ b" ýsÓ vqX¢qIFZVN^‹Ãá9Qœx¸p8,VA^Vƒ’’@Љ òó}CÓ8íâã‡XRy,^IEUM]Cƒ@МŒ u5ÕyÊŠ89i”¤8  p›öÏ.!„JZ«4O� ­«o`hdlLäÄd¢á>olld8__OGKCU¯ ƒ–DŠ sš6ŽŒ3FÐ.1q)ŒNE]Kw¾ñS³%–VÖÖ6œØN,ܧ­­­¬,Í—,^hb¨¯­1O+‹–@@MO6äíBËâ”Õµ ˆ¦K¬¾·[î°ÒÉÙÅÕÕ•Äk@ g'ÇöKm,/0ÔÓTU”—–W6ìBJI+(©i˜˜Y-]áDrs_ïáåíM&û°ã;±pö!“½½<7ü°vµ‹£½­…©‘A'‹Gö‹ë’Áªôˆf6öN«Ý=}6oóóßÌIÈÄÂ}:8(pWÀÎ[7zoXëê°Ôb¡¡¶š¢ZbHö•†±](Yœª¶¡©Õ2g7ßmþÁ{üx(ü0%""âωˆ P + Ý¿;Ðo³·;ÉÁÖŒ¨«®$�áÈÆj{�|l^MÇØÌÖq�Ç&¿àýa”È_~=~2öT\\ü$$.îT쉘訣á¡{¶’×¹,³\ OP–=âŸ;Ö0Ù.a¤péÍí\Ü}ýBB)Q1§NŸ»xùJÒU*H2o�J\MJ¼œpálüÉ裇ölñX½ÂÚÔ€ $�k˜ a�KLR§¦kbaOòØx€òK완Äk7o§¤¦¥Óh¼‡F£¥§Ý½óû êåóñ1‘a»w�ÝmL 4åPÈ1‡É^0!Q i¬ªÑÂ~•×ö�CQ'Ï^¹v;5ã��³²³éôÞC§Ó³Ÿ<~˜y�–r3éB\4eŸ¿ïZGë…zêxIî0¿lX0´¼Š–±9píØ{øØo—®ÝÉÈÌÊyþâU~Aa!ƒÁ(â- £° ?ïeîÓìG÷So&ž=~ô`€ïZ+�yX {˜£ZÆi˜˜”¬"a¾™ÉsÇ^JÌÙ¤ßi²só +_¿-.)++/¯à=åååe¥%ïÞ¼|úø^JòÅØÈƒþ>k–›i*ˡ£ZÆm˜8«ª·ÐÖyö=”ãç©)÷Ÿä¼..«üPU]]S RÇ[ µ5Õ«ÞW”¾e¼Ìy�v#!6ò€Ÿié"uœ´Ä-ã4 !%§¬elé°nsHx̹äÔÌœ¼×%U5uõ �MÍ -¼*ÒÔÔØðgíÇ÷eo ž?¢ÝH8ydï¶õNÖ&Ú*ò e£¶ ‚ €†áÔôÛ­"„EŸ¡¦>xZ𮼪¶¾©¥µ­½£££s2ê´··µ47ÔUW–0rÓ®Ÿ� Úèf¿d¾~¨eŸORHLRVI‹hµrýöý‘ñ‰)™O Š+kê›ZÛ;»º™Lf;¬‰‡S ‡Éìîêêhkn¨ýPZ”û(�zæçÐ�žÎ6 ´Uä¤À‹9r–ìI +#Ñ +ªú‹ìVû…O¸u�ž_ü¾¶¡¥½«hz{{ûØéŸx8ú@)V³«£µ©®ª”ñ,óÎåØˆÝ›ÜìÍ Ô°äçëÏ�¤4ž`dá¸~û�¨ÓÉéY¯ÞVÖ6¶vV/ÄàdpâáV`{YÌ®¶¦ºÅùÙ×ÏE‡úy8Yk*Ê€Y~落¤œ²Î[90üĥۙϋʫZ;™¬^5\ý¯‰g$±¿�Õdµ•o^Ô·vöôפ²†lƒƒý}=]­ UÅyY©‰±” 2ÉÖDK ,Ù(˜ ¨¤¬²öÂïWmÜ}$žJË.(­n„ÆvM.‹Cèïe¶7Õ”Ò3’OGîÙ´ÆÎTGEN\²0h÷¥äTt-sÛ²/êìõ{OÁ$›;˜½ýÐ'ßÅ–õ÷öt¶ÔU¾~vÿ湟÷o]g¿XoØþ'–s^QòªúfËÝ·Œ>+3÷Íû?[:{Ø › +»e}¬®Öúo_<¸}ñXèŽÀö«* B£`à¥T30wXï÷㯠w¾|WUßÖÅš:ØßÐ,YÝm`É^=J¹¶sƒ£ù|5,€ñ�„�k�ƪZ¬ôð?tüòÝÇy%ÛºYÐêO�‹3Kf{cuI^ÖÝ+'~ +ðt²4Ô÷b |�pF–Nžà¥LÍʇvZ±©jÖÑT]Zð$-16|——³•‘|”FÃÀ3²röÚu86)íIAYMSǔ YB°š²‚ìô¤S”@o+c˜0<Á:c”SWÓ³ Ù°¾©›$Ö×ÓÑ\[^H§]�‡ÌÅÚ\Ø/`â9ˆw•F/,×¢gz` :�Lvµ&ðÒâ_À¤ñšDWrpD•FgXç4À:¹°øˆ`W¢æ×a>ÁñÓ «`ädPã� ÃD†¡ÿW~‘aø"eä0*¦ Öò FFúk™X]EQNFò·Á’3rŠ*êfLq4Œ5•gŒ}aY£aŠcÃLþc˜ÉL„…ø‚?ůÂlI¾!0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã`0’OðL„ÿCX°Éæ+0ühXOßÀà´Âˆ368Ð×3†FÍÈaTÔÎ,˜ë'XóôÀj+9Ô1a³ ˜ð0,"žJ£3ʧ Öü æúU�híJþ?»uåÚÇüíê¥ËÌXfÆ:c3„ÁL²–’,#¥’dœœ‘†S'% +i;m¶zë¨lÕ©œZ%K%RÙ*[ É cít½÷óÌH¨Ók†þz¿ÿÿîës}÷sÏ„Æ$òaœk¨*Î=—ó&Áþ5 +ÃàU(t[3$:1#·¸òÁ8|XbL(ÓÍvå«0"…nÃðaE'¤çUÔ·vrú¬²87#1:„ɰ¥STð˜ 0‘L³q]·yw|ZvaE] ›Î¾ÑÓq¾¡–2€‰~›)Š””QÔЛg¿Âokìñó׋+ÁgÉž¾]Â…�»Þ×§o]éoØÕßÛÝÑÚ6y9ùÐÎ@/g+c2/%ñŒ÷Y‚Û¯¡oºÐÝ7$*.åJޣꗭݽ@6 Ñx¶) Ììç²ß·5Ö”æœKÚûÛpŨZÊ8´ø,‘™3Fa3E�à’©êЭ�½wËìͨ$¸ord—HIP‰jfïæ½1,6îôŸÙy÷ËžÖ4¼nn}û®½£³³ó=H—À�¦Á!ímoZš^Õ=«()¸‘™vü`k½‡£%M~(ÇÂF+SÓ1žï°œ´=6.ù|Ö­‚‡åUÏk^565·´¶¾�òVÀÀí­-ÍM¯_Ö×TW”çå\J9~02ôçÕζsõµ Â�c79Rxý•5gϱvôðÝ´}ÏÑ“é—sn<(}RUý¼¦¶®¾¾¡¡á¥ãõõuµ/ž=­(+)¾{ãêùÓ "B7¬q]`FÕV‘—AM(Œ_™J,Ó`®ÍRß mч’ΜË̾y·ð~IiYù“ŠÊÊ*�§𭬬xRþøÑƒ¢{w®_ý3õ䱽ᬟ×0ìÍ�(jŠXŒb|aüÊ`™ +ªÚTSÛ¥+|¶Dì=zâLÆÅ+Ù7nååß+,,*..¾/DÀxQaÁ½»wnæfe^H=0*,x½§«½MWC'~¿ÿ=¾0¸2x™XE52ÕÔf‰ûÚ ›Ãvï;’têlú…K™W²®eçäææ^"`<'ûZÖ•ËÏ¥ž>÷{Lxhs¥óBàÒ$ÈIó9Æ[¦¤NI�l0×j1c53€¹çàÑ„§’Ϧ¤¥gdœ9/` ÙŒŒôÔ”3œLŠ;¼/*|K�Ÿ—»£�™1ä’A‹#¾Vo™<™¢ª¶>ÝbÁR÷5¾¿oÙ½÷À¡#Çââ“„JbbB|ÜÑÿï��Ú¹-$ÐÏÛÃe‘•©¡ŽÆ®‰0x™|™ŠÖl#S+{'÷Õëü‚C·†…GDîŽŠŽŽ‰Ù#Dbb¢££vGîܱm +Ðß×ËÃÕÁÖœ®OVW. ä·\ð2y2¬Ó€ *èDgM]Ài"«&˱ñq@7µ�Îä©&ÏúlƒpÓ�‚«¾ÄMC„BM-sŠ)ÿϸüW€Ф”@ endstream endobj 379 0 obj <> endobj 410 0 obj <> endobj 411 0 obj [0.0 0.0 0.0] endobj 412 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1403.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 413 0 obj <> endobj 414 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4777/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwXSwp}«lHI˜I2ÂF (ŠìŠ(ȈŠReÜ"ÈpS,å¡Å¢"Ô� +W�ðhq AEe[‘Qöaµïï&‘Z”?î÷ÿ{žÏsιçÞY³àL]fóœD™ +%ôðÿ¦.ÄqPß�Ì™Š@…¹¸Ï‚LsçÎåããŸìðññ�Âs†lÿ’P|ü‚‚BBBÂPDx»¨'(( ÀÏǵ}+mˆT‚BÂ"¢bb‰Ÿœ€JBL¹6ˆöM. ¨DDHqI) +�Æ`¤'' �BIIJ b" ýsÓ vqX¢qIFZVN^‹Ãá9Qœx¸p8,VA^Vƒ’’@Љ òó}CÓ8íâã‡XRy,^IEUM]Cƒ@МŒ u5ÕyÊŠ89i”¤8  p›öÏ.!„JZ«4O� ­«o`hdlLäÄd¢á>olld8__OGKCU¯ ƒ–DŠ sš6ŽŒ3FÐ.1q)ŒNE]Kw¾ñS³%–VÖÖ6œØN,ܧ­­­¬,Í—,^hb¨¯­1O+‹–@@MO6äíBËâ”Õµ ˆ¦K¬¾·[î°ÒÉÙÅÕÕ•Äk@ g'ÇöKm,/0ÔÓTU”—–W6ìBJI+(©i˜˜Y-]áDrs_ïáåíM&û°ã;±pö!“½½<7ü°vµ‹£½­…©‘A'‹Gö‹ë’Áªôˆf6öN«Ý=}6oóóßÌIÈÄÂ}:8(pWÀÎ[7zoXëê°Ôb¡¡¶š¢ZbHö•†±](Yœª¶¡©Õ2g7ßmþÁ{üx(ü0%""âωˆ P + Ý¿;Ðo³·;ÉÁÖŒ¨«®$�áÈÆj{�|l^MÇØÌÖq�Ç&¿àýa”È_~=~2öT\\ü$$.îT쉘訣á¡{¶’×¹,³\ OP–=âŸ;Ö0Ù.a¤péÍí\Ü}ýBB)Q1§NŸ»xùJÒU*H2o�J\MJ¼œpálüÉ裇ölñX½ÂÚÔ€ $�k˜ a�KLR§¦kbaOòØx€òK완Äk7o§¤¦¥Óh¼‡F£¥§Ý½óû êåóñ1‘a»w�ÝmL 4åPÈ1‡É^0!Q i¬ªÑÂ~•×ö�CQ'Ï^¹v;5ã��³²³éôÞC§Ó³Ÿ<~˜y�–r3éB\4eŸ¿ïZGë…zêxIî0¿lX0´¼Š–±9píØ{øØo—®ÝÉÈÌÊyþâU~Aa!ƒÁ(â- £° ?ïeîÓìG÷So&ž=~ô`€ïZ+�yX {˜£ZÆi˜˜”¬"a¾™ÉsÇ^JÌÙ¤ßi²só +_¿-.)++/¯à=åååe¥%ïÞ¼|úø^JòÅØÈƒþ>k–›i*ˡ£ZÆm˜8«ª·ÐÖyö=”ãç©)÷Ÿä¼..«üPU]]S RÇ[ µ5Õ«ÞW”¾e¼Ìy�v#!6ò€Ÿié"uœ´Ä-ã4 !%§¬elé°nsHx̹äÔÌœ¼×%U5uõ �MÍ -¼*ÒÔÔØðgíÇ÷eo ž?¢ÝH8ydï¶õNÖ&Ú*ò e£¶ ‚ €†áÔôÛ­"„EŸ¡¦>xZ𮼪¶¾©¥µ­½£££s2ê´··µ47ÔUW–0rÓ®Ÿ� Úèf¿d¾~¨eŸORHLRVI‹hµrýöý‘ñ‰)™O Š+kê›ZÛ;»º™Lf;¬‰‡S ‡Éìîêêhkn¨ýPZ”û(�zæçÐ�žÎ6 ´Uä¤À‹9r–ìI +#Ñ +ªú‹ìVû…O¸u�ž_ü¾¶¡¥½«hz{{ûØéŸx8ú@)V³«£µ©®ª”ñ,óÎåØˆÝ›ÜìÍ Ô°äçëÏ�¤4ž`dá¸~û�¨ÓÉéY¯ÞVÖ6¶vV/ÄàdpâáV`{YÌ®¶¦ºÅùÙ×ÏE‡úy8Yk*Ê€Y~落¤œ²Î[90üĥۙϋʫZ;™¬^5\ý¯‰g$±¿�Õdµ•o^Ô·vöôפ²†lƒƒý}=]­ UÅyY©‰±” 2ÉÖDK ,Ù(˜ ¨¤¬²öÂïWmÜ}$žJË.(­n„ÆvM.‹Cèïe¶7Õ”Ò3’OGîÙ´ÆÎTGEN\²0h÷¥äTt-sÛ²/êìõ{OÁ$›;˜½ýÐ'ßÅ–õ÷öt¶ÔU¾~vÿ湟÷o]g¿XoØþ'–s^QòªúfËÝ·Œ>+3÷Íû?[:{Ø › +»e}¬®Öúo_<¸}ñXèŽÀö«* B£`à¥T30wXï÷㯠w¾|WUßÖÅš:ØßÐ,YÝm`É^=J¹¶sƒ£ù|5,€ñ�„�k�ƪZ¬ôð?tüòÝÇy%ÛºYÐêO�‹3Kf{cuI^ÖÝ+'~ +ðt²4Ô÷b |�pF–Nžà¥LÍʇvZ±©jÖÑT]Zð$-16|——³•‘|”FÃÀ3²röÚu86)íIAYMSǔ YB°š²‚ìô¤S”@o+c˜0<Á:c”SWÓ³ Ù°¾©›$Ö×ÓÑ\[^H§]�‡ÌÅÚ\Ø/`â9ˆw•F/,×¢gz` :�Lvµ&ðÒâ_À¤ñšDWrpD•FgXç4À:¹°øˆ`W¢æ×a>ÁñÓ «`ädPã� ÃD†¡ÿW~‘aø"eä0*¦ Öò FFúk™X]EQNFò·Á’3rŠ*êfLq4Œ5•gŒ}aY£aŠcÃLþc˜ÉL„…ø‚?ůÂlI¾!0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã`0’OðL„ÿCX°Éæ+0ühXOßÀà´Âˆ368Ð×3†FÍÈaTÔÎ,˜ë'XóôÀj+9Ô1a³ ˜ð0,"žJ£3ʧ Öü æúU�híJþ?»uåÚÇüíê¥ËÌXfÆ:c3„ÁL²–’,#¥’dœœ‘†S'% +i;m¶zë¨lÕ©œZ%K%RÙ*[ É cít½÷óÌH¨Ók†þz¿ÿÿîës}÷sÏ„Æ$òaœk¨*Î=—ó&Áþ5 +ÃàU(t[3$:1#·¸òÁ8|XbL(ÓÍvå«0"…nÃðaE'¤çUÔ·vrú¬²87#1:„ɰ¥STð˜ 0‘L³q]·yw|ZvaE] ›Î¾ÑÓq¾¡–2€‰~›)Š””QÔЛg¿Âokìñó׋+ÁgÉž¾]Â…�»Þ×§o]éoØÕßÛÝÑÚ6y9ùÐÎ@/g+c2/%ñŒ÷Y‚Û¯¡oºÐÝ7$*.åJޣꗭݽ@6 Ñx¶) Ììç²ß·5Ö”æœKÚûÛpŨZÊ8´ø,‘™3Fa3E�à’©êЭ�½wËìͨ$¸ord—HIP‰jfïæ½1,6îôŸÙy÷ËžÖ4¼nn}û®½£³³ó=H—À�¦Á!ímoZš^Õ=«()¸‘™vü`k½‡£%M~(ÇÂF+SÓ1žï°œ´=6.ù|Ö­‚‡åUÏk^565·´¶¾�òVÀÀí­-ÍM¯_Ö×TW”çå\J9~02ôçÕζsõµ Â�c79Rxý•5gϱvôðÝ´}ÏÑ“é—sn<(}RUý¼¦¶®¾¾¡¡á¥ãõõuµ/ž=­(+)¾{ãêùÓ "B7¬q]`FÕV‘—AM(Œ_™J,Ó`®ÍRß mч’ΜË̾y·ð~IiYù“ŠÊÊ*�§𭬬xRþøÑƒ¢{w®_ý3õ䱽ᬟ×0ìÍ�(jŠXŒb|aüÊ`™ +ªÚTSÛ¥+|¶Dì=zâLÆÅ+Ù7nååß+,,*..¾/DÀxQaÁ½»wnæfe^H=0*,x½§«½MWC'~¿ÿ=¾0¸2x™XE52ÕÔf‰ûÚ ›Ãvï;’têlú…K™W²®eçäææ^"`<'ûZÖ•ËÏ¥ž>÷{Lxhs¥óBàÒ$ÈIó9Æ[¦¤NI�l0×j1c53€¹çàÑ„§’Ϧ¤¥gdœ9/` ÙŒŒôÔ”3œLŠ;¼/*|K�Ÿ—»£�™1ä’A‹#¾Vo™<™¢ª¶>ÝbÁR÷5¾¿oÙ½÷À¡#Çââ“„JbbB|ÜÑÿï��Ú¹-$ÐÏÛÃe‘•©¡ŽÆ®‰0x™|™ŠÖl#S+{'÷Õëü‚C·†…GDîŽŠŽŽ‰Ù#Dbb¢££vGîܱm +Ðß×ËÃÕÁÖœ®OVW. ä·\ð2y2¬Ó€ *èDgM]Ài"«&˱ñq@7µ�Îä©&ÏúlƒpÓ�‚«¾ÄMC„BM-sŠ)ÿϸüW€Ф”@ endstream endobj 376 0 obj <> endobj 377 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 358 0 obj <> endobj 359 0 obj <> endobj 355 0 obj <> endobj 357 0 obj <>stream +H‰ì΋iAÁQþIlc¤ûnKw;ÏÐAUé6�Ï%]®_Þšz;7eÅkóZè6¹5<›ÿªµ´f]¯³ZãëpÖú:˜5¿vgÝ­Çά;õí?źK¿R_ëY÷çOêk9ëÞ>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwTSipwW�@ BOèz ± ‚(à&V¤©++2"`+渎 )tF”¢že18: BÔš¨€DDÊÒ{ €;ûÝ›Š(3@pçœûüßó;Ïûޛ̙ƒDdùËôóÿd™y%üð_E—©á„¨¿�ÌE ÁÜeÁª¹óæÍŸé€™óæA:Aoˆ«ÄÄ%$P(III)(èéžæ¡PâNPÛïu X@…i ƒÅbq30 Ì“‘FKI¢ TÛï* ª bA*´ ++'�Ç+(Š3AA�——“ÅbdÐR( 1¸µÉep] - I´ @á JʪjêêD"I�©G8�HTWWSUV"àåpi)Im²Òu‰‰£¤d°rxEe5¢†–Ž®ž¾™L6œ‰€9úzº:ZDUeE¼,VZ +%.6ii� ªKJ+§ ¤FÒÒ50213·´²¦Pl¡N5Âç)k+Ks3C}M¢ª^# •_Ú$.¨.Y¼’š†Ž�±¹u�­�=ÍÁ�NwdéÔ"|šNw -±_¼h��•™‘¾6IU�“¥ Öùy—$+GP%é�M­¨¶K—¹¬póXÉ`0™LÏéÌ`0<Ü¿ruv¢Û/¢Zšh“Trôgeï\Ò8y%u-S«öŽÎn ¯5ë}|ýüÙ4µŸð÷Û¸aÝêU+¿ZN·›oi¢¯©¦(�ý¬lÔ…W&éYÌ·wZÁX½ÁsPpÈŽÐ�aáÂDL-ïÛúõöm[7ù­÷^éºÔŽjn¨CTÆc¥!x>QìRPÑÐ3±¶ute®õÛºkß�CG"££Y¬˜é‡ÅŠŽŠ<|pÿÞˆÛ¶ø®a¸ÐYë’„² +ƒ)Ž}©hè›ÚØ/÷Xã·uÇ®ý‘1ÿ<~*6.>!!q&’w&öÔñ£1GöG„üÝwµ»“ÅTOÈÐ(± — ¹ÄPh,^YCߌJsñܰåë݇bŽÇ&^¸ôCòÕ”Ô4�ô鑚r5ù‡‹çNÇ:¸+dóz¦óª©>IÜ™,û¸°¹àû…‘W"é™Í§¹zùý#ü@ÌÉ„¤äÔë™YÙ·ÙlvÎôÃfßξ••ù¯ë©—“âO°ö‡ù®r2=’’F +È>ªLp`2²ŠD]S*m…·ÿöÝ‘ßÅ_L¹qóö�?å=È/àp8…Ó‡SPððAÞ½;ٙׯ&Å;²+ØÏËu ÕDW]QVF>³� C¡q +jÚÆ”%®Þ!{Y'Ï_¹qëǼüŸÿR\RZVòtzÊÊJKŠyT˜Ÿ{'ëzò¹“Ñ{¶û{¹ØSŒµÕpЙ�« . ,RY“lµØy•ÿö}1±Ó2ïÜ/|RòôÙ‹ªê—555ÜéLyY]õâYyÉcN^οS“N³öûy._lEÖT–ÇH�¯LP˜4Ž@Ô3[èÄØ¸m+öÒµ[?qž”=¯æÖÖ½©oh„Ò4½À3êß¼~USõ¬ôIÁ½¬ô‹§Y{¶md,]h¦G$à¤ÇWö®0-#šÛº­»¢N_º–�WTò¬ºöMãZZÛÚÚA:¦hH[kKsSCÝ«êgÅ?çÞºvñTTÄÖun4#-•�+01 4N‘¨oaëìzøÄ…ôì¼Ge•Ü7M-m]ÝÝ===½30§»«³£­¹ñ ÷EiQÞ­ô '‡z9ÛZèqà“ñ> Þ¤¤ (̘J÷ð þæèÙ”¬Ü¢²ªÚ†–ö®žÞ¾~o@�Á©G0€Çãõ÷õvw¶57ÔV–åÞL9{ô›`:ÕT&#ùÁ.¡MJHaÔõÌm�½7‡GÅ^θ[XZYÛØÚÙÓÇ>H�á©G0€Ïçc_wGkcmeiá݌˱Q᛽�mÍõÔ°Rïï‚¡¤e•4 )4wŸàýÇÎ_cç¿®®^ÞæŒòvêN€ˆ|@ëílm|õ¢8Ÿ}íü±ýÁ>î4Š¡†’¬4êC¼IUmÓN«âÎ$gæ>®à6´vöò‡ ÔèôÿN=ï ‡‡ùƒ¼ÞΖ†šŠÇ¹™Ég¢ÂW9-0ÕVîrôÄàwlÒb±ëÚ ½GÏ¥³ Jªêš;`×Èô< +G†‡y=ÍuU%ìôsG÷­u]lv ¿—ïŽ >14Ž@"[ÓÜ7†<ù}ƽGÜÆ¶îþÁ¡¡ê·™Š€Éú»Û¹�îe|ò`ÈFwš5™DïåØ.a81M#ª#3 ,*îJÖƒ_+ëš;ûø ¯™T�ÑF†ù}�Íu•¿>ȺÀt¤i‚#û>ûr*Ú& —yoÙýíÙôNÙ˨0Ø5³,! È Ê^–qrÒÏ~»{‹÷²…&Ú*ràãÿ ü�Û×1³uY´ïXÒ�»E¯šÚ{yüá·"�ýms˜ÏëmozUQt÷FÒ±}Ak]lÍtÀõ£Æ®~)1x5] »ëƒœ¸”‘ûäùkh“C¢)L ‚vùúù“ÜŒK'¯_ag¡«†ÇH~0u=K{7Ÿ�C§.ß¼N¬¥Kd›ÂÀ.»ZÀ‘Ý¿yùÔ¡7{K=uSP×·¢yøî8{%ëaqU}kw?ؤˆ\°l˜ßßÝZ_Uü0ëJ쑾4+}ð½?HDk‡•~¡‘qW³óK«ëÛzx"‡ñzÚê«K󳝯E†ú­t°6 ‚¥ñ0‘Lq`øïŒŽO¹]P +^J›‘ ÈÞŽ@°†—¥·Sâ£wú3(d"a‰L¡3¢RÙœ²šÆöøöE èio¬)ã°S¢Ãt +øÂ~Ã)’È6tf@8+!�Í)ŸEX9‡�–À +`ÒmÈ$EÜ0CGf`8+Që�X¯–È +d:Ú~ƒþ&Š£Ga1‰i9…åÜYƒqË sÒcFahñw߇yŽÁ:fÖ1󜖞Sø”Û4K°&îÓœô?'LcHˆ0á’¡±`–KW¬bÅ<–WR~¿ñYûk~ïÀÐðȨ@06xÂLˆ¸œ"ŒŽ ö÷v¿jkn¸WVt:ý@ÌöÆrcm˜äûßÄ÷³TTÑ X8ºûþc';%óüåÊšÆæ¶Ž®žÞþ�A€E NàZpÊðÐà@/¿óå nCõÍ’¼‡ã#6­qµ73PW“œ¾bð,Á½TÓ5]êì°-z'û×+÷šž·wtv÷¼éëëœ[ #úûúÞôtwv´µ<©¿w³$ÿdÊÞ¨­ë=éÖÆÚD¬ðN΀‰î%´ÌÜÞÕg#ë_~ÉþµôfUm#·¥•×ñº³«›Ïï�òFÜ«ùüî®Î×¼Ö–¦GîÜ(>w2-1z[àêo—QõÉ“ ›ƒ×´Lg±5ÍÃwsDlÒ‘¬sE×*ïÕ=zÂmyÑÖÎã½ìæ•x¿äñÚ[_´pŸ4ÔVU\½”—‘ºo7k£Ïß, µ aˆ™ ÂÀ¯�œ¢2Yo‰­³§_HDìþ´Œ3J¯WVÕÔ54>yÚÄm~Ò"~ òfnÓÓ'� u÷ïV\+)È=ž’¸›¼Ö�f½X‡„Wø¸aÐ,¡-C+4)fv+~!á1ÿù9=+ïBÉÕ²Ê;UÕ5jëêë‚4ˆ¨´¾¾®öAMuÕ�ʲߊ Îf=ÄŽfûzЗšê««`À•ü°a¢–�‹©€#jšÙºM?üsORê³Îœ/,¾|õzYyEå-�Ûâ*¯¬(/»~õrqáùÓ™éÉûãvmÛ¸Öc¹-Õ@ƒ€oØG ƒ[ OÒ62·s^µ–ù}ä”£'²róò +/—”””ŠP]\\t±° ?/7ëø/ÉöD‡o ðq§ÛR)šDœp�5 ¾˜`˜e’Ž‘ù2ºÛßý7mÛ±;>ñ`2'ýxFfö©œÜÜÓ gÄ Tš››s*;3ãx:'ù§ÄøèÈÐ`?oW§¥K(ZDœ"<È�`¢aŠdÚ†TGÏ56…†GÅÄïÝ—tðprJj‡sd.ápÒRS’LÚÇŽ‹ÙºÉÿ;�öV¦šD¼¢Ü'99LX¦¦e`biGweø¬g†„†íˆŠŽ‰�‹ß“Àf³÷ŠP�°'>.6&:jGXhs½�çJš­ùb= NäúÄ gÊð ]#ªõ7ô•ÞkÖ‡l ÝÎ + �ˆˆ„³cv™,‹ˆcmݸ~�·‡ ÍÎj‰¡Y§0éú$lJ&§ˆU%iéS­—9:¯tg¬öñõó +b27Š<»ÀULfPP`€¿Ÿ¯Ïj†ûJgÇeVT#=M5%Ôg]S2i”¼ž@ÖÖ72µ°±s 9»¸ºy¬b0¼¼AV‹¨Ø‹ÁXåáæêâLs°³±05ÒÓ"ð´¬ôç]&”I!eÑ +XeYK—bljfickgïàèD£Ó—Ãqž]&Ëètš“£ƒ½�­�¥™©±�®&‰€WcDJ}Þ5)“�BȠЊX¼ªšº–®>ÅØÄ”jfnaii%ŠõìWZZZ˜›QMMŒ)ú:Zêjª€%l—Ä\ð4…M4 NY•HR×ÔÖÑÕÓ7 P(†s 8Á@_OWG[S�DTUÆb n×—\BÔ4IRFVN^ƒÅ)«ˆj$™¬.І8�kÉdI�HPQÆA*9YiÀµëK.Ñ8…4)„´Œ, +-¯ ˆQÂbq8<^y®Áãq8,V £¨ �F�f!D¬/·k& ²!!J�FËËË+Ì5à p’ + ¤…*˜õ¿¹¦h"›�DJKKË@‘�K„'€“�HBJ¤škŠÙNBRøæ-à4pæ_…ªÙ²`d8ˆ7¯�Žü‹H5kÖLÜD|ÔtÜdn¨yeÎ7åÿù 0“C endstream endobj 356 0 obj <> endobj 416 0 obj <> endobj 417 0 obj [0.0 0.0 0.0] endobj 418 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 419 0 obj <> endobj 420 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwTSipwW�@ BOèz ± ‚(à&V¤©++2"`+渎 )tF”¢že18: BÔš¨€DDÊÒ{ €;ûÝ›Š(3@pçœûüßó;Ïûޛ̙ƒDdùËôóÿd™y%üð_E—©á„¨¿�ÌE ÁÜeÁª¹óæÍŸé€™óæA:Aoˆ«ÄÄ%$P(III)(èéžæ¡PâNPÛïu X@…i ƒÅbq30 Ì“‘FKI¢ TÛï* ª bA*´ ++'�Ç+(Š3AA�——“ÅbdÐR( 1¸µÉep] - I´ @á JʪjêêD"I�©G8�HTWWSUV"àåpi)Im²Òu‰‰£¤d°rxEe5¢†–Ž®ž¾™L6œ‰€9úzº:ZDUeE¼,VZ +%.6ii� ªKJ+§ ¤FÒÒ50213·´²¦Pl¡N5Âç)k+Ks3C}M¢ª^# •_Ú$.¨.Y¼’š†Ž�±¹u�­�=ÍÁ�NwdéÔ"|šNw -±_¼h��•™‘¾6IU�“¥ Öùy—$+GP%é�M­¨¶K—¹¬póXÉ`0™LÏéÌ`0<Ü¿ruv¢Û/¢Zšh“Trôgeï\Ò8y%u-S«öŽÎn ¯5ë}|ýüÙ4µŸð÷Û¸aÝêU+¿ZN·›oi¢¯©¦(�ý¬lÔ…W&éYÌ·wZÁX½ÁsPpÈŽÐ�aáÂDL-ïÛúõöm[7ù­÷^éºÔŽjn¨CTÆc¥!x>QìRPÑÐ3±¶ute®õÛºkß�CG"££Y¬˜é‡ÅŠŽŠ<|pÿÞˆÛ¶ø®a¸ÐYë’„² +ƒ)Ž}©hè›ÚØ/÷Xã·uÇ®ý‘1ÿ<~*6.>!!q&’w&öÔñ£1GöG„üÝwµ»“ÅTOÈÐ(± — ¹ÄPh,^YCߌJsñܰåë݇bŽÇ&^¸ôCòÕ”Ô4�ô鑚r5ù‡‹çNÇ:¸+dóz¦óª©>IÜ™,û¸°¹àû…‘W"é™Í§¹zùý#ü@ÌÉ„¤äÔë™YÙ·ÙlvÎôÃfßξ••ù¯ë©—“âO°ö‡ù®r2=’’F +È>ªLp`2²ŠD]S*m…·ÿöÝ‘ßÅ_L¹qóö�?å=È/àp8…Ó‡SPððAÞ½;ٙׯ&Å;²+ØÏËu ÕDW]QVF>³� C¡q +jÚÆ”%®Þ!{Y'Ï_¹qëǼüŸÿR\RZVòtzÊÊJKŠyT˜Ÿ{'ëzò¹“Ñ{¶û{¹ØSŒµÕpЙ�« . ,RY“lµØy•ÿö}1±Ó2ïÜ/|RòôÙ‹ªê—555ÜéLyY]õâYyÉcN^οS“N³öûy._lEÖT–ÇH�¯LP˜4Ž@Ô3[èÄØ¸m+öÒµ[?qž”=¯æÖÖ½©oh„Ò4½À3êß¼~USõ¬ôIÁ½¬ô‹§Y{¶md,]h¦G$à¤ÇWö®0-#šÛº­»¢N_º–�WTò¬ºöMãZZÛÚÚA:¦hH[kKsSCÝ«êgÅ?çÞºvñTTÄÖun4#-•�+01 4N‘¨oaëìzøÄ…ôì¼Ge•Ü7M-m]ÝÝ===½30§»«³£­¹ñ ÷EiQÞ­ô '‡z9ÛZèqà“ñ> Þ¤¤ (̘J÷ð þæèÙ”¬Ü¢²ªÚ†–ö®žÞ¾~o@�Á©G0€Çãõ÷õvw¶57ÔV–åÞL9{ô›`:ÕT&#ùÁ.¡MJHaÔõÌm�½7‡GÅ^θ[XZYÛØÚÙÓÇ>H�á©G0€Ïçc_wGkcmeiá݌˱Q᛽�mÍõÔ°Rïï‚¡¤e•4 )4wŸàýÇÎ_cç¿®®^ÞæŒòvêN€ˆ|@ëílm|õ¢8Ÿ}íü±ýÁ>î4Š¡†’¬4êC¼IUmÓN«âÎ$gæ>®à6´vöò‡ ÔèôÿN=ï ‡‡ùƒ¼ÞΖ†šŠÇ¹™Ég¢ÂW9-0ÕVîrôÄàwlÒb±ëÚ ½GÏ¥³ Jªêš;`×Èô< +G†‡y=ÍuU%ìôsG÷­u]lv ¿—ïŽ >14Ž@"[ÓÜ7†<ù}ƽGÜÆ¶îþÁ¡¡ê·™Š€Éú»Û¹�îe|ò`ÈFwš5™DïåØ.a81M#ª#3 ,*îJÖƒ_+ëš;ûø ¯™T�ÑF†ù}�Íu•¿>ȺÀt¤i‚#û>ûr*Ú& —yoÙýíÙôNÙ˨0Ø5³,! È Ê^–qrÒÏ~»{‹÷²…&Ú*ràãÿ ü�Û×1³uY´ïXÒ�»E¯šÚ{yüá·"�ýms˜ÏëmozUQt÷FÒ±}Ak]lÍtÀõ£Æ®~)1x5] »ëƒœ¸”‘ûäùkh“C¢)L ‚vùúù“ÜŒK'¯_ag¡«†ÇH~0u=K{7Ÿ�C§.ß¼N¬¥Kd›ÂÀ.»ZÀ‘Ý¿yùÔ¡7{K=uSP×·¢yøî8{%ëaqU}kw?ؤˆ\°l˜ßßÝZ_Uü0ëJ쑾4+}ð½?HDk‡•~¡‘qW³óK«ëÛzx"‡ñzÚê«K󳝯E†ú­t°6 ‚¥ñ0‘Lq`øïŒŽO¹]P +^J›‘ ÈÞŽ@°†—¥·Sâ£wú3(d"a‰L¡3¢RÙœ²šÆöøöE èio¬)ã°S¢Ãt +øÂ~Ã)’È6tf@8+!�Í)ŸEX9‡�–À +`ÒmÈ$EÜ0CGf`8+Që�X¯–È +d:Ú~ƒþ&Š£Ga1‰i9…åÜYƒqË sÒcFahñw߇yŽÁ:fÖ1󜖞Sø”Û4K°&îÓœô?'LcHˆ0á’¡±`–KW¬bÅ<–WR~¿ñYûk~ïÀÐðȨ@06xÂLˆ¸œ"ŒŽ ö÷v¿jkn¸WVt:ý@ÌöÆrcm˜äûßÄ÷³TTÑ X8ºûþc';%óüåÊšÆæ¶Ž®žÞþ�A€E NàZpÊðÐà@/¿óå nCõÍ’¼‡ã#6­qµ73PW“œ¾bð,Á½TÓ5]êì°-z'û×+÷šž·wtv÷¼éëëœ[ #úûúÞôtwv´µ<©¿w³$ÿdÊÞ¨­ë=éÖÆÚD¬ðN΀‰î%´ÌÜÞÕg#ë_~ÉþµôfUm#·¥•×ñº³«›Ïï�òFÜ«ùüî®Î×¼Ö–¦GîÜ(>w2-1z[àêo—QõÉ“ ›ƒ×´Lg±5ÍÃwsDlÒ‘¬sE×*ïÕ=zÂmyÑÖÎã½ìæ•x¿äñÚ[_´pŸ4ÔVU\½”—‘ºo7k£Ïß, µ aˆ™ ÂÀ¯�œ¢2Yo‰­³§_HDìþ´Œ3J¯WVÕÔ54>yÚÄm~Ò"~ òfnÓÓ'� u÷ïV\+)È=ž’¸›¼Ö�f½X‡„Wø¸aÐ,¡-C+4)fv+~!á1ÿù9=+ïBÉÕ²Ê;UÕ5jëêë‚4ˆ¨´¾¾®öAMuÕ�ʲߊ Îf=ÄŽfûzЗšê««`À•ü°a¢–�‹©€#jšÙºM?üsORê³Îœ/,¾|õzYyEå-�Ûâ*¯¬(/»~õrqáùÓ™éÉûãvmÛ¸Öc¹-Õ@ƒ€oØG ƒ[ OÒ62·s^µ–ù}ä”£'²róò +/—”””ŠP]\\t±° ?/7ëø/ÉöD‡o ðq§ÛR)šDœp�5 ¾˜`˜e’Ž‘ù2ºÛßý7mÛ±;>ñ`2'ýxFfö©œÜÜÓ gÄ Tš››s*;3ãx:'ù§ÄøèÈÐ`?oW§¥K(ZDœ"<È�`¢aŠdÚ†TGÏ56…†GÅÄïÝ—tðprJj‡sd.ápÒRS’LÚÇŽ‹ÙºÉÿ;�öV¦šD¼¢Ü'99LX¦¦e`biGweø¬g†„†íˆŠŽ‰�‹ß“Àf³÷ŠP�°'>.6&:jGXhs½�çJš­ùb= NäúÄ gÊð ]#ªõ7ô•ÞkÖ‡l ÝÎ + �ˆˆ„³cv™,‹ˆcmݸ~�·‡ ÍÎj‰¡Y§0éú$lJ&§ˆU%iéS­—9:¯tg¬öñõó +b27Š<»ÀULfPP`€¿Ÿ¯Ïj†ûJgÇeVT#=M5%Ôg]S2i”¼ž@ÖÖ72µ°±s 9»¸ºy¬b0¼¼AV‹¨Ø‹ÁXåáæêâLs°³±05ÒÓ"ð´¬ôç]&”I!eÑ +XeYK—bljfickgïàèD£Ó—Ãqž]&Ëètš“£ƒ½�­�¥™©±�®&‰€WcDJ}Þ5)“�BȠЊX¼ªšº–®>ÅØÄ”jfnaii%ŠõìWZZZ˜›QMMŒ)ú:Zêjª€%l—Ä\ð4…M4 NY•HR×ÔÖÑÕÓ7 P(†s 8Á@_OWG[S�DTUÆb n×—\BÔ4IRFVN^ƒÅ)«ˆj$™¬.І8�kÉdI�HPQÆA*9YiÀµëK.Ñ8…4)„´Œ, +-¯ ˆQÂbq8<^y®Áãq8,V £¨ �F�f!D¬/·k& ²!!J�FËËË+Ì5à p’ + ¤…*˜õ¿¹¦h"›�DJKKË@‘�K„'€“�HBJ¤škŠÙNBRøæ-à4pæ_…ªÙ²`d8ˆ7¯�Žü‹H5kÖLÜD|ÔtÜdn¨yeÎ7åÿù 0“C endstream endobj 274 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 354 0 obj [/ICCBased 77 0 R] endobj 271 0 obj <>stream +H‰ìW[oÇ~ß_1@€€ûÀÕÜ/�6-· ꦆˆØ@Z4E™t–”Â¥¢êß÷;3³Ü!Å8m!ˆ ÒÎΞsæÜ¿3ßOØÅ› g/_MXõseœk8—Œ7Ò&¸R�ç�© ›ÀÛ.ªwlº‹?]qö±«×¢1Úøà5“Xz-¥µår|@cœj„RÂyÇ„·MÆ;¯Ø|]½|Ï.®–œuKvùž½­Þf}„a·F)™2BD…4Ä�P(Q(# ãøì$y\nYÀñPGBÍáxQ1�ÌyÇDüeÝ|³?†7ÚxIY2É6.ÀáU܆R7 àÖ�‚{KÞä> È‘þ^»“ݤƒ'Wà6ügW“¿U’=@ŸOøû1ÃìÌ›FZNQ³®qÚ8²Š>­+Ímã�ƺ­®`ÙËiuBv4p*þE¦7•Hă$ Yxäƒðlº®~½ªÇš�Ý|«»ÝêvSÿsú]”"’D@²éu5º¬§ŸÀÔv3V+ËFïj¥Øè6ñþô®ÜmíØè¡Æ·Ž­:6cíêöFæ±Ñ dßè‘í–³ ;¶ØÌ>´‹Ž]/~©‡ííÝbÛ±]mˆã–­¢*”MÔàÇÑú®]¬›ZÁŽ=€¯I‡¸•µ°´Îz<¬vËÕ§.V[–ܰÙÝ]»šCâ&£;’¦fo=ß[m„Mçÿ½& äífÖ®võØÓã —‰Æ"{2“°tζÑ®›Z(òz·")OlœÖglï;ˆ�f 6ʤï2 +x|Âùº––މ±\l®ÛÇÖ¸ÆßÓ+¼IáxÏ�­Wí^²T�sÙôI-ˆ¸½½ß²«zŒƒæKÄ"’BC.S¦Ñ‰ø‡˜³ö~Ñ}Þ7o¢¤ÛëEÒzóĦKDÔÎaMTòÉç¿ÔcJ�Í‘%ßü’RcÙœYÇ~g�é‰ÞEÙÍ¥w¡è$°b:gyñÀÊ“ß-�s’ë²VDyH52ün׋B áU�•G‡†S! ÷»ûmM�9²}$Ì [*ÒÃðXùx´k.Ñä¬F³ôhP±òsè·ì1:AMâ#2!òçÅìº]mÆxÒtoDoìÐcÒIN1 E#5À&žô‚ÍoëX[kÄJ6È ÔŠ˜Ò¦ÄΠUc©7t D…®gm»Ø²0z§Ü†"ºžíò¶�êCˆŒå±\°§Ýb†Âÿpßþ„ºDtÃbÉ:Êj„lôï5ˆ(>Ž�¢�xÝ@4ûµ2ŽËŒý¿´…5b%½gS„Ö@¯½)ÜÀÊ@S +ðý�ŠRb 8~Ϋ±Á`Þ±àÐz��ß9Ñæuÿ)³ÉDçÃóïùxvS½M.‹>· Ï©ÉF—½°<¼"—йEø�V“Ë2mcþ`ã¼ÿ:þü7q$TŽ˜ ü÷êa¤Ž…ÇàM*HdÞ±‘ +%oá߯ÌHê7ŠQÏþ„¿ƒ�RsÕ(Ì|¿W‹—±5æi÷d“(À�SÛŸ£6èùÀœl8ÝKHR¿ÆEÆ`æ`%j"‚áèò¯W/¨†ÆÞ’ž¡‡ —&Þüå7«KD p7plj †é$® ^0@öãnĤ‰eÙVÇïhàÆù˘…X º‚UAÃyú@*7�>ÔQ†¤ðJ´€ýÜ`Ñ…båðªÃäJ”ÉÉ3¥l Çô¼k|àEFŸé(Xfx·¸[¡ÿÀ ºˆÂ24u\º†w‹LH†k"ÇÌ@Ÿûw£Q¼¸ÁàÅI‚^1¼#qˆPЕN=äðþ9£�Zi2ÊàÞ…ÅÞ¨Ÿ´0}8\”’?�÷¡z"hå8t +Æ`Ê,nsÐUÚÂtšÛP¥& ó¢­‘Üâ³´ÉS�\Ó“§Ï4» +!÷ãè* �B!½q‘5LÖUνœz +ÔñƼbÇb&BÊ÷\$‘›rþ#¾B¤31»i0,ÞS6X®dÙw˜PbN¼|Ï.®–œuKvùžeíy©Ýa +“.4ˆ[±Á¤'Y‚À†¡D ÅÐKxq~ý£¶”c…Ô– Hõ�ËáÀ—ý†C†h|#Mt·N½¢Ü!£‘Üœc¡mdÃ}™VnåÀ¡¡§1"5¨e[äNJÆVê –[ÙÍ{SÎæ³X[=©!—Á3Ý*Xr¹(ÚˆñcOÔ2õ�p>ýR‘ÒA¨c#¨:9Çœ�Ì*ÕIT}%“1Ša:@'M´‚æ m[&‚—±eåÙ¬øUl*†hé)äè•ÁYXªE�)“î"„ë1üïȆü�€ÊÐ;–H»§[c.—@ðó(l¬A%Ã϶7,%õ3ƒ-]n�×_l îW¸(¸¯ +l j +ÓÜsƒ­Š +¾ Ø�v¡ ¬M™gŠ–]ìd|ÈLÿWCÈžSV»ß‚ÚA·ƒü5;' &®dµÅNÆÚs럡Öâb`¼/�6ÕB9¶;kÑÀ¨ÕX[î$¬µ‘õ¾€Úb'‡ ©ÖøX¥=Ð;g­MÌ£Þ{ÃFvpoÃÙ|•!6“kb(¶§ÖRi¡Φ]†N t A•øZ*“ˆúâ Óèo~¾l™È¢Zé6w.þ'x5­WØs¡ëç!U à/}HÔ%µ Ï ©h#ù�ÔóCªèÿ¦¼ê}�*æ{îŸQ…ÅU5{fH-¦Æ?Rï�Ôû’©wª� ´¡±à }üòÍ„áñIï¬ endstream endobj 272 0 obj <> endobj 273 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <>stream +H‰ŒU{XSWŸ¹7¹Aj +´J/ † . op} +&ˆ |‚ˆ€F¡ʶV�‡šy(Ô®e»jÙµZj]íªß×ú¨¥ì®Õ­‚“ú¨®ÅjuáÞìÉêvÿÙó}“sOrg~3¿™ßIqQI8A9Ð8;%u&ØÖçÄÆÌK ²Ÿ»ˆef¯É*´q +­ÊÕýn¥.çl6€ ÀA•—“µBXðf€Sy)$�|a{ßé"ùðÎ[S\j?÷0�º‚ì¬4ç -À«’x‹×d•ÚãKxòÁ®ÍZ“c;�õ½_X°®Øvö<àØ HG�3¸Ø³jñ �t ,·ÛvºÚ(‘ˆ¦œŠ¢M—äÂK+1fÁ,Ë>H1­Ü(Í£ÜXÀÁo8â}�qyÑ‚Hs­ û +˜Nð¼É“#Œ†‰ÀÂ&øãq6P¯QŸS穯¨´€Ñδ‚£›èƒôv4ëÆŽg=Y)+gÙ6†íð’zÉ¥””‘¾"}U*‘Ž—zJý¤s¤™ÒœIŸ›)³ÙŠ/²£xAt¡š xP'©så* 4C�¢å/¡¸²ì–µ¢„ÿ +ELPÆ� ¬°¢ AAp1?5™¿7˜¯Z ÍÓ85±S|1¿Ž/"{<§çJ¸Q†g†Ç†‡†~Ã�†û£ášáï7s ö÷�íëê#=ê;Kl_[Ÿ¾oy_VïhQ±°ÇÊáËK‹I„أĎÙÌJô ø¿¶ØìÖM¸}`€Ã^øŒ`‚oapðÜ�[pöÃsxgà|á´C|‚ÃðgøŽÀ'p:áSxÇà8|�“pþ ÝðW¢ŽSp`®b:f`鸃‘B«°·àV ‹œ†‰¨Å…¸ õ¸cÎÅhÒ¹wð]àÁŒ5X‹E¸ëp;¬ǘ‰Ë±q).#dÝÅ÷p76c+®À7° #1sp%†`(¾�¿‡'ð§ã<ÌÅ<œ�IxóqîÁp&·ËpÃq®FÆ`2þq'îB7”ÀOðgc*úãT<ˆí؆À5¸?Ä?b,¦`.À,Ľ¸÷ãGp 0U�àgD¬°xÃðîÿàôÃ=ø+± Ëá áøPä è0FDtã {‰}ˆ]  +ý¸;Œh๟ðè‹D‹²Ž˜oáyÒg€PUˆ2h¬ÄÍ�‘IåG’ÃÓ}‘I…aÉÉá¾ +2/$®@x›É†hЋ–9¢ �Pí(£™7ßþ 7ðz&`•L�æ~¶øešo ¦Ñ÷àx�ø)Ų`‚â#V�2ÈÝÜÇ*ƒBC‚U>r™Ô�¡›Lï¶]¬ªDælûVîþ\MÉÛ²Þ*NÔÐÝCA++š ½è]Ã×Ö¤gh3ôúŒ´ô k~uGǴ¢W@1©ÈÝ^’�D&F;€Äˆ[�­¬¬ª¼p°ÚH=WkŠ7&jÔê�%šD¦uè˚ƆccCÅJ¦upvMúÂ4í;u©iié„7R]EêyÍ‚"·D *þ¥4ºJ5¿ìÀüä²ùÓ¢æëõ¦–Tݬ§÷òW–ʼ�nѧ§Ë¤Ëùïf74öôXnx;W.ÖØ2 ÇcíaÝ]h[ÜP[UPÊA äâccu BCbOMY^X¡î©ª*ß|å»·7þÐé;'r²-�§PèVÍ]ËÖÔÞ»»½V¿íQe縀™“I-±TÇt‚‡¥i�RlÃ�ØÙ+%¸Á””4=ý@Ô"÷ø€(‰ä)5Ä ¨¡KXz\½JvÇy’ßäRþô%[þÜAÉß ¦Lrc+ÿr¥µñpë­ÁJúWMD9Š<âªî~±©ÂÍ4Ú3n˳-‡Ï—•o(¿tüMãUµ¦´¤V•½@Y�±tǾìÆ”Å댤ù·t«—tq‡¨é%ùñ �¼/©KGí>!šÛ˜¢U/Í— ŒRmT´ŸŸßäèh­eNénlŽÔZŽ~~ZÉc€äád‰€^Žè…$Q|4úóxŽ¿ÎŸò& ¾ÀH>—ûw{-µÚ}±€<Ò6t‚Ç´äŽü&ï@üÔäΠ‰Ÿœdæ`ÏÃí©…ZµAêöG¢»:¨/OL™ñú”ŠO6æålºòŒBâ^”.�‘-W(Ó2ÊNÒŠì…¾lX¨¦bmí²…3â\åyQ*1+ ŒÎ,KI±Í\0!}’Pi›9›¾•I¯7ff 9‡ß}É>£$ÏnºÛÒg»‘¤Èën#"–“É;}Ú8qBlÑLJ‹â&N »¹<~Lp]%©êèììhuÌJe‹ådþŒñøXÿ-\ÑUéH£ÈŒ®(â)þßÏÓÄÿ2UͽEM¼G­ãjÿa¿jc¬¸Êð;wö²Ð––ÚXõ4Biq÷r +ì)åShv±.ÛÖ*´ÌÞ{vïÈÜ™ëÌ\–÷�5ÖÍšX#UÒŠmL¶(Ö~lúAúÃ*ÐBIúÚ"–-• +FM…å^Ÿ÷ÌÌ. Ô˜hüÕ�¼{žyç¼_ÏyÏÙ³Ó[\.ËÈ#öÉÇÔná ó|ýmÒ¡·´+ëj?©ÿ­þvý�ú ý2mwýíšú’³§4·þ}¶G/¬�=þÎ`˹°}©~+î³´©õ‘ê�§Œ«Ï¾¦çO‹ä– ±/ÕNßsÙgþ®}:«®4»ßß Æ#GÌ<³ÿì®æ²‘ºyêéÝ4û9Ü^5=³¿¾¯ù�óoZÚ&ñ_cÔÂÍŸÜÅ3×Ò‰L;Þ¢(³uLðým+«½Ü4DÏ4¥.ý/´2¨m®¿’zOý)üí1VQÙÛßË~x4ŽÓ`ÓDr3'(k>GÙ­Àhؼr9 [/àý⯣acUãp¦ ãwh¸i}Ýz ãuäšÝÉx6;È5Þ¤i™wáË¡lv~OÑ4óÕÆ?3D+ô7i�9ƒ²]Ę!ȯñ_ÇÈ�ñš7˜eÚ o æ^à iurYŒ…‡¬b½y ¶czc1uêyšg®ƒ.C­6šh@îR2qï1ïÓ`tpÃz�×€¹ÏA¦›'{1^Ïs0>†ÜŽYoR—±’î6·Òz¼w1÷¬þCæZms‰�º }°{CÅ>I3Ôúܧ}úßcmÙ~°éz2‘Æ{4ȼ_L²68ܪ8>WRΙ߄³ DqX/Ì™Volƒì„<î¾¥¸;_8÷så4Ýl}©Q纛¦“ În`œÈ¼wX5º+ócêÄûv¼/µŽ)_9+«öÊ"è§Ïå¼'l&·i¾ƒ3è~¦Ö½ÁûÂ\Œõ† ×žÖ×5^…ƒ<Ëv©¨¾J„k‚ï·9.ä-pý8ä~ÈŒÌ�Ú>õ ýÈ}‡¾XÌë�Þ�©(‡Ï©z[åЭøB¾ƒÈíçÜ÷Ü{Èe‹ò�µ`^Ó‘yΜÐ~ْ٪1ÉùYæymI¹V=p’Þ3·Ñ×ø Qû=ªrïÐVY:ù&dd‘ùªâp.óhÜI˸c'}ÒzAŸÆœ ÞO!دzK†4¬�ö\ÌǤ­{tÆuwöjW½�êìaý ä=ï[þƺ´Ï˜>¸ßÒžkºNŸ­æ&üs ÞsìqÛÒ^ËìHz±0¶G1領§ÔþŒãœRçN²ß•ŽGÅ{ã$ø{u,ðO,éù£ÎäÅþÕÙÃk‰Ü8µ7Ö��|fðzZÝT"¹…è,.t#ë!Ó!ø1òèfb¼#nh#Ûâïg/Áø Ñ™ýÌ#Qýá ú É9í—tä3Ó,42’a´6Fôƒ�†Ž“Ÿs1mNúàVœ=Çôg3¿Å|j3v�Õt~-|žª3-é[«�"µyšeíEøÿÜ”ÿ—OËô¬ú/ŸAú¡#ÚTífí~m‡ö +žãÚú,}�>¨ïijװŒOËñô÷?úèùèù?|CÔž õ¸—.Ã¥pü}QWïŸÒvŒê_Oî¦üÛ›–̳èp‚ ì×£ 6éÍHp†²Úä[Ð_•à&Ú­ÍHðºB{'ÁÍÆí žHWeÒX“€ÿcüºÊJrÖ4šd]“`�&X×'Ø É8_bl’i-IpxE‚-àÕÈ\3MÔbZ] +[À“¬Ï+Ü<ÙZ¯ð¥/+» EQq K^àHÚ|Ή¥2�XǶŽ|»úÒÖѶ@”F§c*Ö<Ä—�ìõý�Ü>�èªzN¡$*Õ^× á*ާxîs¼„d'BYà#Œj®Ì‰ÕžªXÚ�[C˜9ù�ãôÊ~|V+?ˆ»«ìeàņ*®JXƒTƤ5ÖZà¢à—¯á]‰°@XµŠï%�É×È^åÄ&—²ˆ¥ê•a$6zþ€§êŠëfl6Ê^ÜK-b ÄU#¢]F"ÈÉØòñ}WÙ_,ÞRšÁñÔ:ù•ªkc¾#¿h#¥¤]‹>Jîw6IÅfõU]xpË>ÒìuÙ•S®à÷Lš�](øVHµU\ÚLðÖûe0Oá¨óPÊr( +® ó‚íÆûÞ÷° Å*'¢ÒGeæÍÁÞ-Øîé,cçøé,¿"9¾SŒ ”é~é—e°{–m×Å¢à¨B>{Îa4�®Ã‹ëq¨E98'³šŒøt‰dma5¥E´Š’”}¯¦X•›¸Ø0.7s{äâØÚ4I4i¦b²;£±(!ÅeŠ8ÕÁý�´‘®ØdŽŒjp�þDì%¿¯Oq£©º %¨Š�®¶Sàc´Äý0®„¸¹8'æ¡MʼÛ=§U®E•›fÏÈyé9�Cg˜~ ¨í9'îJä�úCÖ§¸Óé�Á2¿ ÒÄèûšÛ;;G¥õáƒÔE’ŠäP•ʸÎÚäR/õAá9÷ÛxìS ïÞ¨ÖÏÿ.ÿ›ü£ùGòG÷\þ¸ùʯþ�í»±…y­y‹9ϼÑ\d¶›ÉIîšÖ¯®µ°ùÞ¡~í´�.òƒ{ î¸øËÿKz’ž¦gè_TWwpeÿýHrw¹KˆØÀ‚(BHŽ$H¡T6—å²Éåön�ADAé½+v`œÑ{lmÔq쎽�]ßî·—;ÿÙ÷û¾{åk÷Þï=�»p7žÄ*<†«p;žÂCx0‡>ú`®°–a(~„�…{ä!ÝQ€è‰ãÐKú‡Þ8'â$œŒSÐ}q*NÃé8ýÐ_ØÏ ÄY8çà\ Â`é$†`(†¡Ã1E‰Q�bŒÁXŒÃù¸ãq!&`"J0IXX˜Œr9òJLÁTéÓ¦¡5˜Ž¨EêÑ€™˜…Ù˜ƒFÌÅÜÏÁ£x/â%¼ŒWð*^¦ùÞÄ[xïà]¼‡÷ñ�°Ìñ >çøácy<_â+|�oð-¾Ã÷ø ¿ãæáoüƒ æ³; ؃=y{ñxö–ÎìDžÄ“y +þÄ_ìþ<•§ñtžÁ~ìÏ39€yÏæ9<—ƒ8˜çq‡r 9œ#XÄ‘ÅÑ,æŽå8žÏ 8^z½ œÈNb)Ëæd–³‚•œÂ©¬â4V³†Ó9ƒµ$ëXÏÎä,Îæ6r.çñ"^ÌK8Ÿ›a3u.`”-4ØÊ6ÆØÎ8M.ä"ZL0I›‹ñ—p);ØÉe¼”˹‚—q%/ç*^Á+¹škx•t k¹Žë¹�¹‰›¹…[¹�Û¹ƒ;¹‹»¹‡{¹�ûy€yˆ×ðZ^ÇëyoäaÞÄ›y o•övÞÁ#<Êc9Cãv,–ë¤2ËŒ•Ötê–)0ÙÒjJµ·r%ƒ;´fèð”Τºª¨ïúµ(5W^L˜ ’-BQâùÍÆbÃ)f Éý-yu’ÙÚ5)hR¼ƒ•zDHnLhj Ìò–09å–¶XÏiµ›£z7{a–©µù…Š„‹‹ =YäÉ‘žѽIV¯'¥`YZÒ´²Ã¶eº¿å-1ã’ÍÄB©IY²€ÜZIðnÝ +–D줮 Ô…¥†±ÛÄô¥î8?µ0¥XoÄš=›2=–Ô¤šèmÁšva9. ÕE4Köêj”vÁPcz:«Cײ¤®d'$Qg·ØñhÖ]Ïq•sÜ5eIvÏn3"îÎ'�.õv> endobj xref +0 427 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000047686 00000 n +0000000000 00000 f +0000836186 00000 n +0000000000 00000 f +0000000000 00000 f +0000055354 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000055427 00000 n +0000055755 00000 n +0000057394 00000 n +0000122982 00000 n +0000188570 00000 n +0000254158 00000 n +0000319746 00000 n +0000385334 00000 n +0000450922 00000 n +0000516510 00000 n +0000582098 00000 n +0000000000 00000 f +0000836714 00000 n +0000837586 00000 n +0000838115 00000 n +0000838896 00000 n +0000770859 00000 n +0000771364 00000 n +0000771853 00000 n +0000772320 00000 n +0000052371 00000 n +0000927871 00000 n +0000047760 00000 n +0000047853 00000 n +0000047947 00000 n +0000048041 00000 n +0000773101 00000 n +0000630045 00000 n +0000630783 00000 n +0000631312 00000 n +0000632093 00000 n +0000632527 00000 n +0000048149 00000 n +0000048557 00000 n +0000048981 00000 n +0000049405 00000 n +0000049829 00000 n +0000050171 00000 n +0000050513 00000 n +0000626686 00000 n +0000629948 00000 n +0000052671 00000 n +0000052558 00000 n +0000622645 00000 n +0000626589 00000 n +0000617506 00000 n +0000618042 00000 n +0000622548 00000 n +0000614138 00000 n +0000617444 00000 n +0000613945 00000 n +0000614041 00000 n +0000613752 00000 n +0000613848 00000 n +0000050919 00000 n +0000052309 00000 n +0000613717 00000 n +0000052442 00000 n +0000052473 00000 n +0000052706 00000 n +0000613910 00000 n +0000614103 00000 n +0000618007 00000 n +0000617649 00000 n +0000617767 00000 n +0000617887 00000 n +0000622610 00000 n +0000626651 00000 n +0000630010 00000 n +0000746941 00000 n +0000753193 00000 n +0000667244 00000 n +0000723317 00000 n +0000723431 00000 n +0000707179 00000 n +0000707583 00000 n +0000707953 00000 n +0000707035 00000 n +0000753256 00000 n +0000659929 00000 n +0000753580 00000 n +0000753919 00000 n +0000754258 00000 n +0000754596 00000 n +0000663260 00000 n +0000754936 00000 n +0000755274 00000 n +0000755612 00000 n +0000755948 00000 n +0000756286 00000 n +0000756622 00000 n +0000756960 00000 n +0000665954 00000 n +0000723590 00000 n +0000737823 00000 n +0000737887 00000 n +0000738292 00000 n +0000738655 00000 n +0000641620 00000 n +0000659540 00000 n +0000659604 00000 n +0000660254 00000 n +0000660594 00000 n +0000660932 00000 n +0000661272 00000 n +0000661768 00000 n +0000662264 00000 n +0000662762 00000 n +0000663586 00000 n +0000663922 00000 n +0000664260 00000 n +0000664598 00000 n +0000664936 00000 n +0000665276 00000 n +0000665614 00000 n +0000637573 00000 n +0000641520 00000 n +0000632961 00000 n +0000637473 00000 n +0000637537 00000 n +0000641584 00000 n +0000723554 00000 n +0000695439 00000 n +0000671633 00000 n +0000701245 00000 n +0000695503 00000 n +0000684192 00000 n +0000689826 00000 n +0000684256 00000 n +0000684022 00000 n +0000669953 00000 n +0000684086 00000 n +0000683853 00000 n +0000683917 00000 n +0000683683 00000 n +0000683747 00000 n +0000683506 00000 n +0000683570 00000 n +0000683329 00000 n +0000683393 00000 n +0000683152 00000 n +0000683216 00000 n +0000682975 00000 n +0000683039 00000 n +0000671031 00000 n +0000677008 00000 n +0000671095 00000 n +0000670854 00000 n +0000670918 00000 n +0000670676 00000 n +0000670740 00000 n +0000670498 00000 n +0000670562 00000 n +0000670320 00000 n +0000670384 00000 n +0000670150 00000 n +0000670214 00000 n +0000669981 00000 n +0000670045 00000 n +0000669178 00000 n +0000669242 00000 n +0000667289 00000 n +0000668971 00000 n +0000669348 00000 n +0000669493 00000 n +0000669641 00000 n +0000669758 00000 n +0000669862 00000 n +0000671678 00000 n +0000676953 00000 n +0000677124 00000 n +0000677190 00000 n +0000677221 00000 n +0000677513 00000 n +0000682862 00000 n +0000677587 00000 n +0000684792 00000 n +0000689942 00000 n +0000690008 00000 n +0000690039 00000 n +0000690331 00000 n +0000690405 00000 n +0000696033 00000 n +0000701361 00000 n +0000701427 00000 n +0000701458 00000 n +0000701749 00000 n +0000701823 00000 n +0000719852 00000 n +0000717360 00000 n +0000717445 00000 n +0000708300 00000 n +0000708565 00000 n +0000717765 00000 n +0000720230 00000 n +0000746905 00000 n +0000743362 00000 n +0000743453 00000 n +0000741625 00000 n +0000739040 00000 n +0000739364 00000 n +0000741927 00000 n +0000743815 00000 n +0000770823 00000 n +0000759204 00000 n +0000765023 00000 n +0000759268 00000 n +0000759034 00000 n +0000759098 00000 n +0000758864 00000 n +0000758928 00000 n +0000758695 00000 n +0000758759 00000 n +0000758525 00000 n +0000758589 00000 n +0000758347 00000 n +0000758411 00000 n +0000758169 00000 n +0000758233 00000 n +0000757992 00000 n +0000758056 00000 n +0000757814 00000 n +0000757878 00000 n +0000757637 00000 n +0000757701 00000 n +0000757467 00000 n +0000757531 00000 n +0000757298 00000 n +0000757362 00000 n +0000759801 00000 n +0000765139 00000 n +0000765205 00000 n +0000765236 00000 n +0000765527 00000 n +0000765601 00000 n +0000818841 00000 n +0000836086 00000 n +0000815206 00000 n +0000818741 00000 n +0000806084 00000 n +0000812734 00000 n +0000812798 00000 n +0000791911 00000 n +0000805984 00000 n +0000773882 00000 n +0000791811 00000 n +0000791875 00000 n +0000806048 00000 n +0000815170 00000 n +0000813175 00000 n +0000813491 00000 n +0000818805 00000 n +0000836150 00000 n +0000918697 00000 n +0000920986 00000 n +0000921050 00000 n +0000918298 00000 n +0000879134 00000 n +0000882686 00000 n +0000882750 00000 n +0000883076 00000 n +0000883413 00000 n +0000883750 00000 n +0000884093 00000 n +0000884434 00000 n +0000884772 00000 n +0000885133 00000 n +0000885474 00000 n +0000885815 00000 n +0000886157 00000 n +0000886495 00000 n +0000886821 00000 n +0000887162 00000 n +0000887503 00000 n +0000887842 00000 n +0000888181 00000 n +0000888519 00000 n +0000888858 00000 n +0000889198 00000 n +0000889534 00000 n +0000889871 00000 n +0000890206 00000 n +0000890543 00000 n +0000890879 00000 n +0000891216 00000 n +0000867289 00000 n +0000876885 00000 n +0000876949 00000 n +0000848104 00000 n +0000859907 00000 n +0000859971 00000 n +0000860309 00000 n +0000860649 00000 n +0000860989 00000 n +0000861481 00000 n +0000861973 00000 n +0000862465 00000 n +0000862957 00000 n +0000863295 00000 n +0000863633 00000 n +0000863969 00000 n +0000864309 00000 n +0000864649 00000 n +0000839340 00000 n +0000848004 00000 n +0000848068 00000 n +0000867253 00000 n +0000867084 00000 n +0000867148 00000 n +0000866914 00000 n +0000866978 00000 n +0000866744 00000 n +0000866808 00000 n +0000866566 00000 n +0000866630 00000 n +0000866388 00000 n +0000866452 00000 n +0000866210 00000 n +0000866274 00000 n +0000866032 00000 n +0000866096 00000 n +0000865854 00000 n +0000865918 00000 n +0000865676 00000 n +0000865740 00000 n +0000865499 00000 n +0000865563 00000 n +0000865329 00000 n +0000865393 00000 n +0000865159 00000 n +0000865223 00000 n +0000864989 00000 n +0000865053 00000 n +0000879098 00000 n +0000877317 00000 n +0000877624 00000 n +0000918661 00000 n +0000907050 00000 n +0000912685 00000 n +0000907114 00000 n +0000906872 00000 n +0000906936 00000 n +0000906694 00000 n +0000906758 00000 n +0000906517 00000 n +0000906581 00000 n +0000906340 00000 n +0000906404 00000 n +0000906162 00000 n +0000906226 00000 n +0000905985 00000 n +0000906049 00000 n +0000905808 00000 n +0000905872 00000 n +0000905631 00000 n +0000905695 00000 n +0000905454 00000 n +0000905518 00000 n +0000905277 00000 n +0000905341 00000 n +0000894038 00000 n +0000899670 00000 n +0000894102 00000 n +0000893861 00000 n +0000893925 00000 n +0000893684 00000 n +0000893748 00000 n +0000893507 00000 n +0000893571 00000 n +0000893330 00000 n +0000893394 00000 n +0000893153 00000 n +0000893217 00000 n +0000892976 00000 n +0000893040 00000 n +0000892798 00000 n +0000892862 00000 n +0000892620 00000 n +0000892684 00000 n +0000892442 00000 n +0000892506 00000 n +0000892265 00000 n +0000892329 00000 n +0000892087 00000 n +0000892151 00000 n +0000891909 00000 n +0000891973 00000 n +0000891731 00000 n +0000891795 00000 n +0000891553 00000 n +0000891617 00000 n +0000894642 00000 n +0000899786 00000 n +0000899852 00000 n +0000899883 00000 n +0000900175 00000 n +0000900249 00000 n +0000907651 00000 n +0000912801 00000 n +0000912867 00000 n +0000912898 00000 n +0000913190 00000 n +0000913264 00000 n +0000918443 00000 n +0000918540 00000 n +0000927835 00000 n +0000921439 00000 n +0000921677 00000 n +0000927896 00000 n +trailer <]>> startxref 928104 %%EOF \ No newline at end of file diff --git a/design/logo/Esla-12.png b/design/logo/Esla-12.png new file mode 100644 index 0000000..b8417a2 Binary files /dev/null and b/design/logo/Esla-12.png differ diff --git a/design/logo/Esla-13.png b/design/logo/Esla-13.png new file mode 100644 index 0000000..583a722 Binary files /dev/null and b/design/logo/Esla-13.png differ diff --git a/design/logo/Esla-14.png b/design/logo/Esla-14.png new file mode 100644 index 0000000..57abb7d Binary files /dev/null and b/design/logo/Esla-14.png differ diff --git a/design/logo/Esla-15.png b/design/logo/Esla-15.png new file mode 100644 index 0000000..461907d Binary files /dev/null and b/design/logo/Esla-15.png differ diff --git a/design/logo/Esla-16.png b/design/logo/Esla-16.png new file mode 100644 index 0000000..938dd26 Binary files /dev/null and b/design/logo/Esla-16.png differ diff --git a/design/logo/Esla-17.png b/design/logo/Esla-17.png new file mode 100644 index 0000000..b1745cc Binary files /dev/null and b/design/logo/Esla-17.png differ diff --git a/design/logo/Esla-18.png b/design/logo/Esla-18.png new file mode 100644 index 0000000..de77e79 Binary files /dev/null and b/design/logo/Esla-18.png differ diff --git a/design/logo/Esla-19.png b/design/logo/Esla-19.png new file mode 100644 index 0000000..c69fc03 Binary files /dev/null and b/design/logo/Esla-19.png differ diff --git a/design/logo/Esla-20.png b/design/logo/Esla-20.png new file mode 100644 index 0000000..6ec7f90 Binary files /dev/null and b/design/logo/Esla-20.png differ diff --git a/design/logo/Esla-21.png b/design/logo/Esla-21.png new file mode 100644 index 0000000..f4d44e3 Binary files /dev/null and b/design/logo/Esla-21.png differ diff --git a/design/logo/Esla-22.png b/design/logo/Esla-22.png new file mode 100644 index 0000000..9d7110b Binary files /dev/null and b/design/logo/Esla-22.png differ diff --git a/design/logo/Esla_Source.ai b/design/logo/Esla_Source.ai new file mode 100644 index 0000000..6c415e9 --- /dev/null +++ b/design/logo/Esla_Source.ai @@ -0,0 +1,10727 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[49 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Esla_Source + + + Adobe Illustrator 24.0 (Macintosh) + 2020-11-11T21:36:47Z + 2020-11-11T21:36:49Z + 2020-11-11T21:36:49Z + + + + 200 + 256 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADIAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXmP5e6d5riZY01 C7tba4AvbmPUdKuI5WUzyxNEskt7cRxS0j5U4/ZZWoamirI9Q/MHyFZahPaXnmXSra6gcxz2817b xyI67FXRnDKR4HFWP6N+ZGlR3inVPO3leSx+PnHFeQ+t1bgRIZUTwqPT26VP2iejXASA3Npvq/mb RfMWni28ra3HqN1HNG1wNFvYXmjiYMpd/S9YhanuOtPDAWOYEja+fQ0lHn+71jy3p2m2Frd6tf8A rtNLLqayP6sYj9JVjkNpZXZIb1Cw/dH7J2auySw1BoCz1HWvwO8J5+WGv3+s6BO97FOslndPbpPc mdnnT045hJ/pFnpj0BmMf9z+z1ONgtuPJGYuJEvcy/FsdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVeaaF5V80x63ZappHmaC50aJY0l09Z5JrdpFiWO64qh4VMis4ruGNTviiw+ZvzX/ AC986Xf5leZbq30maS3n1G4lhkHGjI7kqwqe4OPEGiepxxNGQCA1Hybqtxp0kFr5Fksr1ipjvUup ZONOPIenI7KQ1D8q+2DjHe447QwRG+QF6Z/zjJ5Y886FrGuzLpqwzTW0KIbskIQJCWpwPUbfRg4w eTOGthlBGGUZSD27RZPzA1AT/p3TGs2iPp25V7cc6kF2BhnekZ4jjyo3tjK0aiGUg0PdXdtz3H2M xsrCCzR0h5ESP6jl2LktQL1PsowgU34NPHECI9Tff5foRGFvdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVYrH5Yh0707/AE/Rx9ciYSR2kd/OiBmUI3wN+52XelKV36740Go4YGXEYji7 63SbXfKWv3+q3F3FbKEmIYAyJUfCKjr45XKJLp9bocuSZMQp3XlLzDPGUXS7aIkKBIjgMOIFf26b 08MrlAno6zU9l6iYoY4j4/tTjyR5d1XSrq5kvYhGsiBUIZW3Br2Jxw4zEm3J7B7MzafJI5BQI7wy /Mh6d2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrJoYp4ZIZVDxSqUkQ9CrChH3 Yqx+fWfLti0n6asU0aJZZY4Li9FsIpo4qVmWSJ5VRDyFPW4N/k421yyRiQDzlyVfqnlHXrBLuzFp f28D+pBcWrqyrKg2+OI9RXpXCbZHkwux0+Ka1jnnuLlRJHKy+mnMUj5VFSy/FtsMokHmMmCMo3Iy Fg8hfL480/8AJdu1rrd/bF3cJBCw9QUajqrCq1NDRt8jiFSK9i4zj1OSNk1GPPzoszzIepdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqG1LUrHTNPuNRv5lt7K0jaW4nf7KIgqzH2A xVit350/K/UbVNX1Ga1lh09Hliu761dWhSRvRcoZ4wy8yKbfaHtjbDxBxcPX3H7+SCg/OT8nIoDa 2PmDT4g9QkMVUBZhQbKoGJSRst0y31yzgEY0uViI3Tmk3pnixY02rvVtjlZvudFw5oChAnY8jSb+ U7LUY9WvLm6tGtUlijSME8vsAKBXuaDIY4niJIYdk6fLHUTnOHADEAfBleXvROxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KoVdRt2BISfYkbwTDcGndPbritrLnWLS3haaSO5ZFpURWtzK+5pskcbMe vYYraDbzj5dRuL3TRvUAo8MysCezKyAg+xwGQDiZNdhgakfsKpY+adBvrmO1tbr1J5a+mnpyLXiC x3ZQOgyIyRJpqw9q6fJMQjK5Hlsf1Jrk3YMb/MnSNR1nyB5g0nTYvX1C+sJ4LWHkqc5HQhV5OVUV PicVfKvl38ifza0uC8ivfIVtq/1owmM3N9Zr6fpMWYK0dwsg9QGh4uv8MJap4+Ig2RX2+9Su/wDn H382rnWoLy18mRaVbK8Ze2g1C2kQcXqzAzXUr9O1cbbH1nD5dv4zdE6jcH6xP6y1avpJv+7T4th8 Xy2G2RprOI77ncony/o2oaabs3mpS6ibiTnCJAQIkHRRVn333IoPBRhZQhw3uTZvf9Hkm+LN2Kux V2KuxV2KuxV2KuxV2KuxV2KuxVTuZ1t7aW4dWZYUaRlQFmIUVIVRuTtsMVYV+Vf5q2H5g2moXFpY vZ/UJI1blIkyMswZk+NNhIAvxp+ztuQa4qm/mDUfMOj3D6jBEdW06VY4I9Jt7d/Xilq5af10MhZG +FSvpbbHkBWoLXllKMbiOI910iPLuvapqjTC+0K80b0lRkN21u4k5lgVX0JZd04jlWnXauSIpnbG RBbS69e+rHC7NfrGBNXdWY8uNNuXhXKyHSzhGWQ2AfWBv+ObeiRQp5i0d0SFJJFuBMLcN6fJY26c uvXcjbKR9QdTpYxGswkCIJ474eX0n8bbM/zJexdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdiqlb2trbIyW0KQo7NIyxqEBdzVmIAG7HcnFXi2if85Q6HqN1NbyaXJHNEz1trf6zdzCO NwhZhFbcRv8AFsxFKb12xOzTlycFE0I9STSQ3H/OYlvb8frHk+6h5iqepdBaigNRWEdiMNNz0Ty9 cDXrK21+11RNOk1eGHUHsCUd4luFV1VjyWtPUA5cR198gR5ury6WXGTHJwk7/jdO9I0jjr8E02tR Xt3aozG1AUScGSleIckD96p6dx45WIeq7cTT9myGojkll4zEHauhFd/my3LnfuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvnO3/AOcVZrTULi+sfMmoWk8xkDPFbW4PB2qRUXPQ 4WEoiQoiw7Xv+cZNa1WBDqvm3W9Z9AloIbhYZipkIDlPXvQqk0BbcVpiyegaB/hPy/o9no1xaTzX djaW+nT3LQxJK4gRVAYrK1N4xXi3UZAyAddn7QxQkRIG+XT9ae6DrHlW58wCWys5o9TvIvSNw4FP TjWvH+8YLURD7I3oK9MgMoJpx9L2zgyZRjjGQlLyHS/Nl+Wu6dirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVSnUbfWobo3umytctL6UL6fO0a20aKxLyoQgk5kGh+Min7NRiWGTir 01fm1oF55puPWGu6Zbafx4mBrW7a7D1Lcg3KG348Rxod+XguE10ZMSIhPmW/EoHL62vEtwIC8zyo r9f10qRlZ5uimB4xv+cO7v35t6GIh5t00RDf0pPW+wPj4S78U+EErSoHQ5QPrDqdLX5/FXcb5c6l 3bcqeh5lPaOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvmzRf+cpfMd5d3ds 2ipe3Vs0sr21rF6apbwnix9WS4Ysab/YG5pTbdLTlnw0bqN77fjqgde/5yY/OLy+sLa55QtdOW4L LCbmK6jDtGFLgcpOq8xUdsNNtvTfLk2g+Y9Is9a1C5e31K/tbXUb62hB9OJrtVYBaq3w8pKfaOQl EF1mo0GKciZE3z/GyfeXLDynF5kFtY300uqWURma3dSF9OSNTy5GNVPw3K9G7+xyEcQBtxtH2Rgx 5Y5ISkZRF/MHy82bZa712KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4jJ/zi N+XL3EtwNV1qOSYuX4XFqNpK8h/vN0INMNqpt/ziB+W7CjarrbAEkA3Fqdz1/wCPbG1etaD5U0rR dCstFtw01rZW0Vojz8GkeOBAieoQqqxoPDApFphBp1hBcyXUNvFHdTKqSzqiiR1T7CswFSF7A9MV ARGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoO21azudR vdOiYm6sBEbhTTYTqWQjfuFOC2uOQGRj1j+lGYWx2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxVIfM/nKw8vT2dvPa3V5cX4la3hs0SRz6BTnszp0ElfkD7VIFqmsOoQTRerEGK7faRk6iv7QGB VOfWdNt5BFcXMUMrLzVJJFVitQtaEg05GmGkcQuuqJhuIZ4xJE6yRt9l1IYHtsRgSqYqlCeadLbV 77Sj6i3NgYhKeIcN6yB14iMuw2P7Sj2riqYi7jKqyglXFVJBU0+TAHFUN+ldJjumhM8Ed23EPGXQ SEnZaivLvtixE4kkA7jmjg1cWTeKpBZ+ddLutYv9MWKdX09zFLc8UeFpF4lkUxNI4YBhUMow0qcm 5XaimjAEVBU7+INCMCqaalZtL6QmQy1I9PmvKoIBFK174spQI5jmiQa4sW8VdirsVdirsVdirsVd irsVdirsVef/AJrWOjTixn1b6ytrb294BLDZ295FG83oxI8gmVyGVmBRUG5qTsuKpX+Yf5maT5D/ AC50vzD5c0mCfTtQvEt4rNALNF9WOaV34oho3KGhFMsxw4jSCaeWQf8AORWp+YZlmT8vbfVZaGBS ZTMTxBmKAGFq0C8st8KurTxR4+nFX2Kjf85WatoDnTH8jw6Y0VGNn6zQcfU+Ovp+itOXKvTHwL6t nE+nrSYz2sM5HEyor8etOQBpmMzeZeZLXyZB55nu/MEMkpuLqEKl1p1tNayItmsJRJSjTFA8yOzM achxH2WxVJPzo/Pe4/LnzPZaFa6JFfQy2Ed2shmMPDlLLEIwio4oBDhCsJ/5XPrWqwJ5oP5XwarH LWaO/MpuzH9VJUuB6Mhg4mPrRa0rvg2aYzgZyA+oVf6GQ/lv/wA5QX/m7zrpfluTy/FZpqLujXK3 LSFOETSV4mNa/Yp1w03PoLAryWa18kQ+dZZNYillubnUZwYL7SoDFMJgkUZSYxlzFFJESsldyTiq Sfm9/wA5DXnkbznJoMWiR3yRwRTfWHuGjJ9QE04iN+nzy/Hi4hbEypiB/PPVrtBr5/Ky3vFtKXn6 TCmYwcwG9Yyi3Yx1C15VGCOONkA+9tnx1G+7bfpZ+W9/ay78qf8AnJK987+dLTy5LoUVil0kzm5W 4aQr6UTSU4mNevGnXDPDwi2oSt7tlDJ2KuxV2KuxV2KuxV2KuxV2KuxViPnlDJeaZHL5ch8wWDrO LtZbZLhoxyh4hWckIGPxH4W5cO3XCAOrGZIGwssP/NjyL5f1z8trWwhsP8P2qakt59UtYYrc+osc sNXQLx+JGr0r0yWOVFwNfqpYcXFW9vDh+SVnLCy219OYvUAKPNBGC4ViDxfj+yDv9GZkZA83XYu0 MsxxCMe78bse1X8s7LT5nhkuJfUSleLxONxX7SAr+OZmPCJNn8o5AaID7o05eOn2q+EMY+5Rmllz d6Dsw/WLO0ude1BNX8o2+rWqOjWFybKKV2Jt4/Ud5X9TkSyiMfCpAQddsiWvLOY+mPF8aee/nl+U 2geYfMem3ck0tktrp0VlBbWojSJIoZZWQKpU0p6lKDamJlTh63WSxEUAwtP+cdYRp0E8Wq6h9UlW T0kWWIAKjHn8PEd65Wch5063J2lqBETEI1K/s+Ka/lZ+T2h6H5/0fVbe9uZZrWR2SOT0+J5ROu9F B/ayEc5MqcbQ9v5c2eOMxiBL393vfTOZD1jz2702wn1vUBqvkmz1IC642l39QiJaKRfUaV5X9XmT ITU/Dv8APASWWIAyIkeEVsednueU/wDOQvkDTdW/MAahNczRyTWUHJE48RwZ0FKg/wAuRlq5Y9gH pOx+wcWrwnJKUgeKtq7h+thE35CSR2MV60tw1tJEJkYSQkiNtweP2vwx/O5Kug5UewdFKZh4k+IG vxsyr8ifIWnaR+ZWn30FxNJJHFcAK/HieULL2A8cEdZKZ4SA1dq+zuLS4DkjKRIrnXU+59S5Y8o7 FXYq7FXYq7FXYq7FXYq7FXYq8y/MD88vIPk/zAdG1saib+KNXItAfT4SgMp2ljB8NxXLI4yRYYks Lvv+ci/yXvYpYriPXHSZld1cvIoKAgcFkuHVPtb8QK5PwZOPqMEM0eGXJMtM1T8mPMFnJeaWNQvL aJ/SkkQNHR+IYrxlMbfZPhTCJTiadTn0+lwmiJIO+svydVyk+n6ty9njpSvX+98AW+QzMxzzdCFj +W7pfj4vdrUxm1hMYIj4LwB68aClc1h5u/HJBtGXeVmtLwFmYGlwFBAPEMoWf4QwFR09wDiqT6l5 dsJLdXbTdQvGt1Kxx/WY5ZWDMWI9S5uN92/afp0yJjbj59LDKfUkFxF5Jt5nguLK+jnjA9WMtGSr GlVJWQrUVoaGmVSjF0Wq0+kgSJCeyL8vS+Tv01arY292l2S3pNIV4AhWBrRj2ByuPBxCrtxdCdCN TAQjPj6XVdfNnuZT2CVtD60bh7S+T1eXJRc8WHKtaFJ/h67cTt2woY75g8j6Lf8AC6uNL1K9mgjW GONLqJpCnMt9u4n+Khcn4n6bDsMqnijI2XbaLtnPpocGOqu+TA74/lPZXtxZT6fqontpHhlAaIjn GxVqH1fEZjHwwa3euwfynkhGYliqQB69d+5O/INz+Xcnme3XRbTUItQKyem9yUMYHA8q8XY9PbJ4 jDi2twO2cevGnPjSxmG303fP3PV8yni3Yq7FXYq7FXYq7FXYq7FXYq7FXxp/zk2tk350Fb5nSzNr aC4aKnMJQ8uNa7/RmXh+lozcVHh+p516P5eG0k/0zVlvKH0wLa2eKvFqVYzo1OXH9npXLTaY3Qvm 9V/5x/a2Hlu8FwpMJv29UgioX0oulT1r098py/U6XtDh8ePFyrf5vSPzMi8sw2UR0xIzMyH10jkD ARUXuzD2Hy9sv0fFe7dqxiAHBXw7ntlj/vDb/wDGJP8AiIzXy5u5jySHzTZeaIZH1Py/cXE9zIkd u2llrf6uFVmczIJlUiQkhW/eUK/s8gDkS15hMx9BAl5ovQH85me6XzDDpyW4I+pSafLO7kVNRKk0 aBduP2WPfC2MYK8/N+pKwqB9noKEyRjYkEdCcgebpJC88vx1DdsvHzlpgApVG5moNSDKKkgKK0A/ t65QfrDqarX4vd/xT0DMp7JL9Xk1tBb/AKLiilJkpceq3EBCCKjxoTX6MjK+jbi4bPF3H59Oh58v Ln5JD+X1j5o0uyOk6npNnpum23qNZm2v7i/cmSUyFXa5QSftncsfkBsLJV0ag83aw0ifzN5klv5C D9euIVRVWVwJJnBkSIH1CVNN1Bp3zX0OI33vo4zZY6fCID+CJ7uURsTy+dI/yXZ6fafmPp0ViweE Wr1fYFmETgsy8mKMaVKmh9sljAExTjdq5Zz0EzPnxj7x8/e9nzMeBdirsVdirsVdirsVdirsVdir sVeM/m5/zj9Yec/Mn+Jm1JrYiD07yF3EcfGHjwZX9OQr8Pqcq1/Z8DW7Hl4RTXkBrY0w3R/+cefy Y1N7e2Hme5TU7gmNbGC7t5CXVeVF9W1hk5FPiKlBTp2rkzlkOiMZEogg3aWedtAuPynv18u+U7eT V7O4tv0reTX0iCWNi5gopjEIpSPbYmuGJ4ty4Os0mOcgZEjoGI6550882rD9KaFFCVtY70j1AR9U mbjEfhZhQ1ZadadtsyMeWuTV+UxCrJ35fin2jprFtOtWPUwxk/8AAjNcebtwHz3o3/OT+u3XmmfQ 5dIS5uFu5YoYLSNUJigL8x6k9yi8ikfKtBvtQ7YC05p8A4iaiOe1/j7Uk1n/AJyk/NbRfqx1XyxY WgvI/WtWkW4AkjNPiUiWh64abrereU7rT/M+kaZrt/cyWer6zapeyW1tyCL6hpSOqsaVFKFq5AxF usz6THLJvKQkRe39ieaBaeV5fMbRWepz3Oq6fyM0EgO1FQnkWRa0W4Toe+QGMXbjYeysMc8ZiczM C9+7l3ebNctd6+Y/L3/OWGv30wgudJjmumEji3tISB8KjgvOS5rQfEzNTwAHfLsmIR3J2ThBnIxA skbdN+vv26bfoQusf85S/mnos0cOreWLGylmQSRJMlwpZD3FZcmMMT1a7L0bT/J3lfzFDHq17e3E ep6lBDqV7aW9GWN74CSiL6btx5SUG5265rp4Y8R3es0vtBqYYoRjGHCBwi/6I/rdyc+S/K3kuw81 Oul6jdT6rp8Qklt5kKp6dxGCrBjEit8MgPwsad8lDFEGwXH7R7bz58RxzjERken9E+8vR8ueedir sVdirsVdirsVdirsVdirsVdiq2OOOKNY41CRqKKigAADsAMVAYL+YP5MeUvPeqQalrM17FcW9v8A VFFpMsSmIuXIYFHru2TjkMUEMTb/AJxL/K5iC0+qEgUFbmM7f8isn48kcAeywQpDDHCleEahFr1o ooMpZPH7z/nFX8srq/nvpJtTWe4leZylxGAGkYsafuttzhtFKH/Qo/5V/wC/tT/6SI/+qWNpeoeX fKWj6Bo1lpFkrPb2EAtoJJuLyGIfsswVa/dgVM4dPsYJjPFBHHOyLG0qoocov2VLAVoOwxVXxV4t /wBCk/lZ/v7U/wDpIj/6pZd48mPCHf8AQpP5Wf7+1P8A6SI/+qWPjyXhD1fTfLumWGl2+mRp6ttb QRWy+qFZmjhUInPYBth4ZUTbMGuSNitLWKZ5o4kWaUASShQGYLsoZgKmnbAhVxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxVCKNQ5shuYC4+LiImqEYnhUer7Ur3pirU8WsGJhBdW8cp+y727uo+aiZCfvxVi9x5o 80xXs1nDbW9zJbFUkdI5ACSPiIX1DQFugrkCT0dTqNZmjIiEQa9/61XTPNHmKXV7Syv7SKCO4ZhX g6sVVSarVyOoysZJcQBcHB2rqTnhjyRjESJ6H9bL8vekdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVSXzB5b/SQNxYzrpur8Vi/SkcQaYwKxYwM6tHJ6fJuQUPTlvgIa8uPjiY2R 5jmu0PRtX06a4e+1261eKahihuYrWMRGpJ4tbxQsa1/aJp2pkiWbF55LRPMOpC5eNV+twyD1GZCP T5VKkA779D1GVl0mWUBklxEfVE7+Vt6fJaHzBpMNs8brFNcN+7Zn2dBTkzAVbY1oKZTtxB1WOUPz WKMSNpT5b8x182f5kvYuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kvi2x/OX ztb+bNQsLjzE1jBFezyC/umubreGRhHF6RmEYUgBaKoGwr7pDj5wa4gOKQ5C6/HxSXXfzF8+6dbW 0tj+ZVxq8kxIlgtpb6NoqAbv9YjhU1PTiThb30x+Wt5c6n5R0C41HSzqc13pkV3d6vNxdpJySpV+ QLM9N65EhxsmGJlvAEd/mynQpo5fME1o3l36glvEJ4dR4Hi5YIAFb01UMeTgry5DjuN8AiL5NWLS 4xMEY4x2u9ufdytleSc92KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVhL/lz+ WU2qS2k+laNLqzq15JbfUdOM/pSSFRKUaFpCvL4eZ6nDarrn8ofILwOtvoWkxTH7EjaXp7gGvdfQ Wv342qAS613TZW0fShbRWtgY7eKOOK3tox8NKJH8KryIJCjK5E9HS6nUZ+MjGRsfL9KN0jW/Mx1i yt76SM29y7j4PRYMEXs0ddweuVCcuIAuBp9dq/zEIZCOGRP808h3hm2ZD1LsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdiqV+Y9Ah13TTYTXM9qhdXMtsYw/w/skSpKhB8CvuN6HEh ry4oziYy5FboHl2PRhcBL++vhcPzIvrhrjgdzSPl9kGuLYxO6vLK38w6kLqRVU3UT0ZGf+75HYru G32OVkuizZYQyS4j/EOnc3pt3YzeYdKitHVkilnYBEZAA6D4at8TH4aknKbHEHVYsuOWrxCB2Epd K5jz3Pveg5lPZOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvhCy8/avp3nPV IbnW59Oshe3EpuYYIZ5vVjkb0qtIjuQNh16UHTEhoz4yRcQDIcrSHXdaa2W3Oi+a9T1IyA/WVmWW 19MilKH15edd/Cnvkm59dflRNrlx5H8tv9XiubWTSYpJbuc8pWuSxFCxbkfh33X/AGWRLVOBvkKr 42y7RG8zHX54tQ062h0lIudtdwqvMykR/Cf3rN1Mlf3dNh8XiKYQxniBMY1XxtkuFyXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUjFroram2mve27aqYzdmxC2onFu0hRZfSKNJ w5fDzOxOKqt15djkt3S3mEE5HwSm3tnCmv8AKYxX78VY0+qeZob2bT7S5h42jJFzZIYgzEdgRQFi CeIyBJ6Om1GfPxkQI2PWv0q+la35kOtWVrezxSW9w7isXpsCFWtOSdweuVCcuIB1+DXaoaiEJyiY yJ5UeQ7wzXMh6l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVK/Mnl6317Tfq E9xPapzWT1bYxh6rXakqSoQa91+W+JDXlxRnExlyKzQvLcWjS3UkeoX94LoqTHfXL3CxlST+6D/Y ry3p1xZ0xS6vLK38w6iLp1VDdRSUZGcfu+Ww47ht9jlZLo82WEMkuI7cQPLudpt3YzeYdKitXVki lnYBEZFAdB8PxfEx+GpJymxxB1WLNjlq8QgdhKXSuY89z73oWZT2TsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdir4LtvO2q2HnbU0uddutNsxe3EhubdVlmEkbt6W7KzGmw+VB0GJ DRnxkiwAZDlaT65rgt4rZtF81arqEr8vrcdwklqI6U48GW4n9TlvXZae+Sbn1z+VM2u3Hkjy2/1e K5tZNJilku5zyla5LEFSS1T8NDuP9lkS1Tgb2AqvjbLtFfzKdenh1DTLaHSki5215Fx5mQiP4D+8 ZgamSvwU2G/iKYQxniBIjVfG2S4XJdirsVdirsVdirsVdirsVdirsVf/2Q== + + + + uuid:C1BCCE1871B8DB11993190FCD52B4E9F + xmp.did:406b7897-08ef-4857-936f-de9e242aa408 + uuid:506671ab-ca0d-ab49-9d82-8726d3571451 + proof:pdf + + uuid:e8b2d846-2a8b-2749-8f1c-f744196db18f + xmp.did:7b5c93db-9617-44ac-a940-26816751b4c1 + uuid:C1BCCE1871B8DB11993190FCD52B4E9F + proof:pdf + + + + + saved + xmp.iid:d75e8c81-adec-4b48-8e9e-ae3661addb7f + 2020-10-02T09:06:22+01:00 + Adobe Illustrator 24.0 (Macintosh) + / + + + saved + xmp.iid:406b7897-08ef-4857-936f-de9e242aa408 + 2020-11-11T21:36:46Z + Adobe Illustrator 24.0 (Macintosh) + / + + + + Mobile + AIRobin + Document + Adobe PDF library 15.00 + 21.0.0 + 1 + True + False + + 122.136132 + 52.303549 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 192 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 236 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 240 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 246 + 146 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 250 + 175 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 251 + 237 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 216 + 223 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 139 + 197 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 180 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 145 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 180 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 168 + 156 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 170 + 225 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 187 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 145 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 144 + + + R=147 G=39 B=143 + RGB + PROCESS + 146 + 39 + 142 + + + R=158 G=0 B=93 + RGB + PROCESS + 157 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 211 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 236 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 198 + 177 + 152 + + + R=153 G=134 B=117 + RGB + PROCESS + 152 + 133 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 197 + 155 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 165 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 139 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 152 + 152 + 152 + + + R=179 G=179 B=179 + RGB + PROCESS + 178 + 178 + 178 + + + R=204 G=204 B=204 + RGB + PROCESS + 203 + 203 + 203 + + + R=230 G=230 B=230 + RGB + PROCESS + 229 + 229 + 229 + + + R=242 G=242 B=242 + RGB + PROCESS + 241 + 241 + 241 + + + + + + Mobile Color Group + 1 + + + + R=136 G=168 B=13 + RGB + PROCESS + 135 + 167 + 13 + + + R=127 G=71 B=221 + RGB + PROCESS + 127 + 71 + 220 + + + R=251 G=174 B=23 + RGB + PROCESS + 250 + 173 + 23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 61 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 62 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 63 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 64 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 65 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 163.085 163.085]/Type/Page>> endobj 66 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 163.085 163.085]/Type/Page>> endobj 67 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 163.085 163.085]/Type/Page>> endobj 83 0 obj <>stream +H‰\WËŽ7 ¼ÏWèZ+R%]½1r2Çä>HâìgÿH©é™5öÐSlQâ£Xê}ùã5½|y-éÓo¯éòóRRIb5—ÙÏç_þL?ðòå÷o%ýû~Ù/Jמèp|4LɽiWÓt}»|ú+½|û^Òû÷ôù¯ôõòÕOùõŒã—Ã^^qÔõ=‰ÿ¥÷ë�óôŸ0x˜i”lV4™æ%}ò4¾x»%·šJc&ü^]bZÇøCñÚÒ•ë–�ïàÔ¶·¹^däÞG²\çÄ®2s7œšµÍ$+Û²4³”™”û¬6èw¾,<½á‡¯—X�3ƒG­IJÍCE>&4%ši>ðñҲ̅çÈc)ž3Oß÷Оû€E%7CjUrQ¬Ô–׳¶<Ç¡3›Tzl‹t”f¦ÛåÉ¢óÉW6,0âe�?ZVq½|G¬Gk%xóŸ++£b_s¯¹ ޹Blg~2êƒz½çºj:Vže84TïÆ?"½[nKëRX 8�Ì¿feþ�Aô‡26âŽBGÅP;4ˆ�Q™JRœ•y¢§ÄLƒKõ½{ã +ìÅ•U³ùmŸ-¾3=Я0X‡£Ö<«:nm9î¥9V0‘š§‡]°o€EÔq«ÝÛ[­;.Í &ˇ�Á€ŠSV$ÌaE˜7²[ÂõÀbâ†ÞÄ©Äj +s#«­È¾wwèy•é[t@Í[àNOa_£^Õ< Xú® ªk[à2é6{ú–W Pƪ[ÌW`^=)ËMÕ91LK�¨0Â+ +û\‹zO–§þ�èÑŒ~“¾=Vtî…:yh?+ºâÁy‰Þ¡>¤ }‘Äsª#ŸÇ�o(âÃj^¢Ã ó| Š .l#™Þ½›¦žpÏeM746 ”c—•ÓÞ ©«Gì\]ÍØyg+ +³q!Ø2@Qp`DsÁš ‹@¢Í™®Ú\>¹”Yú)Pœ†k}HFç?Ű›=KÎh®�Þ^2m�B.Y ÈPfðÔ#Û0¤ãvâ­)Ç¨ÙÆ)F‡‘[í¯g´§6=%°U l¯'�0ÛkÜ"±¢N¤:$ë¡Mìø ^ç©m'vÙ{$v¯m¤ÖHwTJ5\ü)Û>°rWÒf +9§D²S,ù`"æ}’˜íälÒJTÖ£ÑÀÕ{U2‡IŒùÌ Ô(hƒÎñ¸M) ©ãN7tbvyp¸[{PX}ÜO.ÃRZ°×¯ßVJ¬XUwŸ�¸ïé!!­Ô?ª°XŒÓÝÛÔ(`"ç†ãµpzLãâJ4¶º` ] [¯5Æ}­HHGh 'ÂP 1®3ìC"<$–î–-RÀâó±E _+6û³Ìa ªÄÅÁ“úØ76{"Î1)â`YcAxŒæ~Ã(Ô :¿?Q°¸£»Ä͇¥íå¼£lTge•·Z0£‘d܃‰RY¨Ú¼0@©˜YUÔ¯‡ÃÃ`>™ …s ONáŽ�œ•†QÖ}çöÀœ?nñdennQÎqCîÜ ¸ôæ¸{ܼ±¯æí‚Ũ” 4›-æ‹ÌÆ”VØõ™÷ûÛC,nüÁ � YÍ'ev—1àjw9-#¾p`ñ8qºÇò³Þ�ôØÌ׸miÑHH-›¸Îí±f®´¨#LS¤üæ\V4m¶`€rÛpL\ià*Ä`0ã 1q-$0¦·'ÃÂЇð¶ZÙñ}Ü_ïÝ · KÛD¡vìíîÈO»^z,· vœ±É=‡9Çgïç/øãëåè»c< endstream endobj 84 0 obj <> endobj 74 0 obj <> endobj 70 0 obj [/ICCBased 87 0 R] endobj 86 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 87 0 obj <>stream +H‰œ–yTSwÇoÉž�•°Ãc [€°�5la‘QIBHØADED„ª•2ÖmtFOE�.®c­Ö}êÒõ0êè8´׎�8G�Ng¦Óïï÷9÷wïïÝß½÷�ó '¥ªµÕ0 �Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^�i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +�V�³)g�B£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±Z�L®Ä„?â_øóyxg)Ë”z¥�ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ß�Þô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ�;ÂA4ˆÉ 䀰ÈA9Ð=¨- t�°lÃ`;»Á~pŒƒ�Á ðGp| ®�[`Lƒ‡`<¯ "A ˆ YA�+äùCb(ЇR¡,¨*�T�2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°Ž�Sàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4z�BgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p�0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"E�ÒI2’�ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷�?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@� æP+¨íÔ!ê~êêmê�æD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒ�Ó¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™�˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…�EŒ…Òb�Å~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X�[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„�Æfm“�Ž;'_9 œr�:œ8Ýq¦:‹�ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%�—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† �ž�kï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»Îå�wW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™�™üšhšÕ›B›¯œœ‰œ÷�d�Òž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª�««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½�¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 49 0 obj <> endobj 90 0 obj [/View/Design] endobj 91 0 obj <>>> endobj 71 0 obj <> endobj 8 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 24.0.0 %%For: (Oli Johns) () %%Title: (Esla.ai) %%CreationDate: 11/11/2020 21:36 %%Canvassize: 16383 %%BoundingBox: -4496 -6941 6299 7027 %%HiResBoundingBox: -4495.94804706153 -6940.13106459547 6298.59592600016 7026.12274396997 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 %AI12_BuildNumber: 332 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: -1635.67677842331 6476.70710718047 -1289.46411954822 6624.96913561629 %AI3_TemplateBox: 1936.5 -1089.5 1936.5 -1089.5 %AI3_TileBox: -1865.57044898577 6271.33812139838 -1082.57044898577 6830.33812139838 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -9966.85988182891 10214.2826278337 0.047960166085065 1428 835 18 1 0 6 42 0 0 0 1 1 0 1 1 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:1848 -1193 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <>stream +%AI24_ZStandard_Data(µ/ýXä މb)À˜&ÀS[å³bãÞóHž !ä‘Lse÷NYV@0Là9º ‹±xÎq÷ +Å\ñ­�o£†E¹èÿŠˆÆÝEIÍM½Š8n¬­ô)Ã)N„ÄêRÏ¢ògT3ä…•¤ÕïÇûœðG7= ÇËÂäcùUIÆx +:þU§V 1 +3ýަ:ÌWF­º]ѰYœcý™xœç�xK™¥ß¹:ʪúÖ$°P°ì à\àà@ +\ƒ¸@"”à\ÐD + &LH à(X�Á "lð� d€0ÀP\àà`‚â +h…t€ +a¡‚‚ +)À  йÀÁ88@@¨@ˆB.pp°têä"SƒåbÈä|W›�Ó5tUtKÍ ±è•{u�mPY0a‚ˆ‰ðA€°A„dÀF†ã™[YÉußYr2¼Íݾ‘V韪›™§®( +7�á ?$@‡­!Á€ †Ã0”�·%(áD" g¸Âu�<,Dágã2Ì…ƒ08 +^8Ÿîp˜ƒÂŽwP8 ¦“CâÀÄœ•6ùÒšÏÔÌxlw‘oÚØVÚ + + 69˜CÃAåÑÔ\Hq¸‘{eb‡¦á`ehU¨„Ÿ¢Ž{çgfzʇÆîêfì#Õ’h:‹N�d¤‘‡ƒ´jó��hÁˆÃ�s8w?l×`gø�$±ðYè +·B‘¸D1Ñ�(Ä æe8ìà:�”…ÄÙʃ٬t¨© ì0¼0JÄ�°9™L¡œ8â‰â°Ð€¨+X!atxõŒaÊаÀ° °€X°Z…‚Á e°9(üàK¦¡>PU·Ð©vá ‰Tþï”±ËnƒUÝ}xH1¯ßÊ‘/é…Ó¾g›ýhÕÛe$}ïÄ‹Yy¨WC�{!ü�ýŠwóË ï»‹¤46°&Á@ ´P%9$ q8«Ã�óƒëª•�d†r�ÃI¢ ( m(mSƒ­p`¨†¢ÙyÁ‡DÃ-Æâ!E�xJÈD<—²Öäû÷ª×X[Ý { +Muó~HÑ!|ÝÙ¥ê%½œ°:䢛¶†/Ra覉õ-†Á6E«i lÛ¶vC¨²HÙeãêõlCŠ?Äc]âkC +¶†¦•ÇÞ-'W 8Ø…†ƒ°*»# Â%ÒÐpXPH gd2ðÀC‘hÇ:(ˆÎjfXPHΊÆeC m`XPH ~V‡éˆ"Wä…:”Ë Äcðaá#¹Ó–Cé Âò0Öë#Ó£0 +¥¡¡;ÐÙ}�W8: Ý Ѝ˶ÝÐ…b` ‡wµáÒF†w«’]UËŒgËN.ËÃ�k^t5¤è½fHn„BŸ¹;Ÿ2ëd™åfŠjÈ©ùˆ'ñtl³A4.|¡±€P £!H�LšÙë!-ª$ƒÆã‚$«¨‚jü.ƒT˜E Å!EËHbmóüö†&3³¢3+"Ò™\5¤ø”•èÒãɆ8ÀCâpX`8°:Ø¡þ4eOh�öûmL81O$ +<…+$º0 •XXXhX ƒˆÁÎ�`X`h``ƒ¨ÁÞ�hXhhh8 +‰ÃÍ +>ø`„8‚ ‰«^GMbêÐb)P¢e:(4QDƒG‰B.W‡³:и‡ÄAsƒ ^øØ&CˆF:î`÷ ˆ†ÃÝ=,œÂ)L CˆÍ� Ó„e +Fø +Ó2Páºp ŠÂA + ÄágE‡…ÄácP(D!ªêHèÐ0 53&×bë x$ZAN¡B +ˆP¤†RUgô]6¤ ³“%qlèj�4HEQpìÐÃÁ\è‚ë + =üg8ÐMŒa!�0+ó ÖÀ �x½nÊ’bX8$(Aˆј°�@ÜMƒy(C‰áp…7œ$v{ÉBâF”k@0,,Ô�XH$,Q † „]xâÃ-\â~vt3£5”‚KŠá¨fa4ΡÁ Vð}&[¡ˆ^©­T� ‰B +II±LU–¨íPg0†f᎗±Û¯ph8¼7pè` ¢Ð� ‚(�s FCðÀ0 ‡¢)ÒÁ J4P_‰J,ø¶` &;»Ä)ôóº5¼ˆœp‚‡˜eÈ¡†h¬Cr¨ß½˜íã‡H/‡ÊÎæ!‡ƒ ˆ@ƒ $P'È IHŠ¢( +…C5ä0äàÕFŒô£ 9ð`DgÚ•Ï&9О¢Ÿ¼¡!.¤8@, È (,P@ÁƒN�Ù>C¶1©rÈMêvÄ9«‘žÕ^u…dHq‘“šö¤ÄŠ·ó�††……†D¢á ×` Õ@ Óà†6p�×d�$$¢ )Ž"ýÔÔ{šqÑMsRDŸ!Ň¥”‰å¼¹©U•|tf,ÙLê¡úŽH(,H=e?XBaá §§ mh`h`````8Ô(,$ ‡Z¨iX(¡ã‰X�²¥C¢ +“áøƒ˜Ä(H%]‚.q‰J”4,âƒ8 blxC™ w +w@œÑùÊkXHÍ¡ +Ãaá ˆ_ Oi¸™“ØÔ�¢ò©¾8EZlH>ÎÕ‘uJ8r—RˆM™‡§pHA“ŒµÆSÎ,¹µílþErR”Ч†ä ††„StõB,�nˆ;0XƒÉñz¾9º:»»â§p ÇÐûó#ž¸ÂÎð† qˆ�‘A„Âx ŽÇ‡)óÝN(,04x<–©#è M“Âa�QI˜˜”¥RÊ� ”¶z ehCÅâÚ¶ÉåóùF8a…d8ÖØÜ ¦Á4T ÄÀªªC¢¥P ÅÐPbb´ YY™ÙÙ!,a S0³Ó}^Îp +‡¸»’c0CØYÙ0XQµ¤H�§#5ÌÂu8 f°‚Føl.�kZÜÐ…&ú^«T/0ÁÃy,šA1Rc¨ÄÂyPPH($ŒÆl`H0 N3H`XH4H”ìãS“RP9/¹wÔ!…å8ø«‰OWv6¤Þ(œšwü! 88T q�ƒ‚䳎/T7þB¨¨‚E?¤`�ò¡šé¹!Å]h¬uEìœ ¹lè®Ã!…fsGß-©Ö�$.pP ‚Áp†3ÃCM* ÂааÀ°À °�X8$ ˆ…/|ánÁŒ\YH ®4¥‚,$OM’h@4 GœÑ L„4œaá +µ@ ³à….pA +…+œ‚)”)Œ‚ª@QhH0$ +‰D‘8kõ:†üõxwºQõ,  $�¦UE{C'§füÊ6r4¡‰�²©‚vçÌÊj�‹( A 2x`‚LÈ@�0!B@  Å  €) �$DØ`€ ‚&hÀÖ„ƒCq"x Á.pµ‹dÁ&@A@€A$.(€`±Ád0¡.  Jð�$ +LÀ(l ‚@ �ð€ +Å4È`4ÐÂ&d0� $@0 +>0aÁ�ƒƒýu�µU±¢("ÕÓiÜ[… �¦„æKläæƒ4€@� pàà`+þVÁy ¨Ï 8À +&$D !$ `BÂ�ƒƒÏÅâZA ¤@Âå°…TjÒdqJ™¨ ÎÑ "*Ê›²êŒÉ »‚®§G‹ØñÈM6VwÃB>‘óè÷tWC£lG~ð#W«²Êh“~ÇÂEs7óvUz͵r#NyÒ»ª kÆwgæÁSFÑ?’²a&RjÙå»›9‹G#®.VÝOf¬:r± ¤¡ɘ¢‹‹>e»œ¸xT½›²gì4ÒÁ™RÕ ³iǼ¨Õ.wwÅA“{Ð ãÐÝ®ê4Ȧø˜ zA¶ÐíL÷Q6EIõ¢è#uœÑ°ÿJ™aë�ç×#c&½¢mo]ƒê|v4™Á›‚DÛ6ŽRgW&rÄñÑ=wuýTJ4ƒ®„DSJmlòkZefÅÂwRšÑ—üÈ]æë�‹û®Sõ)†.¼Ùj»1²�ÕÕÞ£»A³pÕÅ¢¾1 í¢�P�†3Ä4µ’™ÚUN¼z {7-�ª)~2ÞÕ2ÃjŠª»íp�ñjèš9±ÒõŽzFvF´ÁOá19—ëŒêØë ‰%wÝfg4Q�ô5$ª§x3F£LE­Î\!“\ë:!gpˆÄZ/]ÃF®u=T­*î§õžFO¯’)"eêèTœîªSg¦âe»"± +ÙÍM¨tù^S\õ74ÎX´6²»öˆ¼;ÎÐÅž!ÇÂe%�¦æ8C5gf¶èdõ°óù‰n>ÇÕ¨ •™oóJ‰î²‡YѪÕÐy�1…º Í�ÏîèΆ4©˜^«_ÕˆÚéP�Ü�ŽÜŽ#*樭OWDG7,CDu¼�[�Ô]Ù£DÅíãDzÎ$ŽÙŒévÖ1Ç¢rÞ]­†Ø35Êä�ØÝË»—¹x7�¢|"·úW'ï�#yhæ7%×WGNËV3ó¢Þ8{5X*h^‡´¼jé:#mA¡\]K ÙùT*ʆժTmqî:t "³.�[Ø–¹:+3ägÚëj¶A$2 M+±£úƒ¤âæÚ\iw¡ºFc×Ú;OeTMñî<î9ö�Ð�ä(NïÎ5ƒjèfçî§w5qPMAú"4r³ÞÑQÆÔ/Ñ}Nöw¾k Q}Nw¿ŽïZ3ƒ5�µöíè1ÕÂ'cŒ&_•GþhR_üW-îg!úFÄÁ;ÖÝd‡«;úV-ºJê˜OAŸDü;ÝÕ†Èn>4Sb½*)ò)F¤ô�Ý,{o·Ž³û~ƒŒ|v¼�˜¬rSôÄ&–;“sý.>Í8l-Xåiã6ÅÝ´hkqB&·+¹gsvD& ÑÍ�‰Ü ++kp�ŠêdͱS´³•tW­�¡):ò¼ŒÕŽÌ¯¸)ÉfD>Ù )‡Ñ�}h”¦(©QÕâè–)«­F²ñ8{‘|‹kµðœ¦Óxîû†ÛâLW7lf~2—LvÿÍywƒÒÏ&¥Ü�Su7bGiQï\ÝTÅ·µ(º!¡ÛÍ{b ê‰äFó+¯EÕÄ\£ž9I©ƒ.3{ýP‘„†øNAë ³Ô3­³žE4èZØüÔßÌpP/r�k1çÐís^ßžÆÜÇ¿¢Ó`§ð/¥¾SÇóÏGéÑõSß赘)“ù�½ãœ‚e¶6äZ]j>Œu­aÖâÌxó«Ë£Ø“ø#dc¬…Öü¦†Ã8ÅUÌô-VƒÖÂd2ó«Ý‡qnÆŸË‘FhfÔ’öÌF¼»¹ÚèLQwÚÍ=ëàŒéÞû0×ÝÑç\z�º�˰—ËÌñ^¿«Û0™ÂHŒ2ŸñÙʳŸ™Ð™r‹WN>¾þBf¶v�õ¬Ô1Éý-ÑsÂv‹réÿÉY:Bœ“Z˜T‹|Z4fF:ŸâŒ·Ë$ñ¥ÊamÁ»�TÑs1û˜¶�»8´¥È ŸIfÚ¢gVõ™™“þ8[X=ž) ‹ô²ið”_ɲúIéVªñc1f3ò“VÕ°Rò3!öÔ¤éB©AÇ¢dÅ2ëqn'�¨³ÊxÈHËñ³Tév,ìªQ÷ŒŒ:çMèdúð±ø_D¼;†.V¼¡{„ÆMŒˆ¿²Â"±dâåLÙDôv¨¦c™\uxªvœé®2¼‹2.¨týDfØXðêVÞ>Ídž>TŽ‹K~cþ¨§ð½øf,~DÕaO1ã"ú caß°é´ócQgV~¿:²ÝZ?–ÑNqf—:_3†XÔyå�:H¿“^¬›™;*Õ¬³|¦hÈùî–«åuÝèY\)×îGS;IL£ói&³È¸ÀJþ3šˆP™L½(eI)'™ Þê®ÑaAä§òÞÝìhJ†‡E­<$¢a¶á0›%Úê"�¼h/ òl=Ÿ^¹ ÖI4ì\tê¨JòD^ç*Ý�ÔçŠsÓÕM¶§'µÖÿû-H˜aƒL € Pð� ‰"�!ƒ *`€BCš“!@.ppø@q›V(¿›’ÇiSãæš™º��ìÊž÷¡é�Õ¸Æ,73Šc®Ëñ)ÿÒä[çY�×Ë:3$i�g‡4W/§ !ÚŠˆæâT'’Ú�É�ç%ùï#ŽÝ‘kƒf¨”z;7ì\Öa3Y$R/#ÇÆÍ>Í�LC×�iL"º!4Å-³;º»Ò-Ò]­2J¶òJ¡3ºݨAš‚nvÚ8#Õ]I;^SŠY7díL]l²Ú]�5STj£›ÍÍ2VtãÊdwGvŠcô«¢qÅ¢ÂÞîdªj6ŠXëuÍȉÎsóÉoØ]‹­d£^iO´šB·ÝœÊÛiŠ¿ëÐ]o^Òb®lþÈS¸fŠB?yϲšWdž°ÂŸÉô�ô7žc�ëžËrSrþÊî†u +ú.>}Tç̤FdT§ø�Ðòë�þ‡;…ÙUknóe Úœý“²Œvæ®j^¶´håŸE>¤S\Mîþ�s�ƒƒÂÑëä­N‰¼HL&bG¿Þ¸ðݧK¤ ¾gRSŸ˜3¡Û|c΂ôÞu…nfuÿÕ�xãgá·ö_k>Š|7¯šÎŠE^S�ùM¥…oB¹˜Ñ-vsɰ´pI}Æ�‹úú"-ÌC•WÎ�°Dèâ«aga¤4èLBŸÞ�…Ù§JgÞG{_%6wU¹«t-ÏÑô¾Ê-¬1'ý�¹ÄâsaDӡבƒÇ¢N/rÕh^s!Ê«v$ŸJ�ši#6UŸä¤ò¨¹°ª¥j¸Ž%ƒæâŽƒÆUG›6“AÅëWsrRÍ2½æç{]W6¤J|™—ÝVgóªò(iqèd´\”7'zHN7crVG·‘‹e9gìèrñÏe¦:ïè,e¸XÔMnùÝ<älL~5Z,†32r“9Žø>4™']G§%é�ù±ß�qQb'4§š‰¨žì�Ûýr›ØXÍð"Gã|f"=ÎÜðw'3¯ªÇ±E•´ÄÓ�Ù…ëúÌ�-Êêˆx8æ?û�b‹»ìˆ¿Š ÛMhh.ö±X¼OGì�æÃ£1laÅqqübÍ}'ÃlÁs,ƒvÑ£¡šË�Ù¢ˆdŠçɇx+/QjsWd\Z�=jVbÙ¼¦¬:Å‹õ†ØÕØG—úcŠÅñ¶¯¨:òtºÞ`±(þL´Ñ>ýæ^Râ©WcìÂjfH±ð”}xSÑ(_´¯Ä¦wr¬òi½EÅìl¶ÐT:Íî|ç}ÝÆS™Ut-_Šl|ñ6:i‰¨¦D7®"D'–÷ÏÜ ‘‹lüÌpX]˜ –/7 ª­Î5z×›1™|5å!­™Î“É�¢‡Î‘rÒCD–†ÄJo>ªz!Ó‹fäX½tžqÔ½~¯ô!_wiµ?U·v2ŸE<^Õp®¼ oü£ÒR:++K%4ò‡ZT ]:[öÚRþQ�:vá[¾yš¤õôÊ^y2ÓèYÌ·¢ŽOÍ"ªVyµÊ6³’­æÖ‰c6ŸÍ¤gBŸÔ#šÊïô&½quÊË=§l™›[øÚáÜ¥P‰ÕãÈÎKD²ÙùQ¥ÄV޳"}ª—jFÙÔ¹Ͱ*©¢�j_­ª™¹yÎv³ªsû¨¶ «˜Ý°ÒZ“«*9;W?ºž¡’[U¿ªWœ^àà°�û]}ªÏ�ŒÂ+«OçÌ +Ǽ4ú¢®†>çºqW°æ®Q3æ +3�ÝåÑ+š ¹¢vE£q㸚�F^àà�‚¯ˆNã1!úÉ2$ô ª½ÂÔ²ú<‘7äŠó¬úTµQU+HשouUœçs~½fxZÌÍãTÐÆÙ¹q4sùÙMcÌÃ’Š× ›¡9±Ð@!€? +&d°€L¸€'˜ p�„ �â@Øà„@ À4 8²„lªšzŠ®4Vvë­»šË¢ÊÑÙ†ÍéQ*²\,‰kd|CÊ‘Üè¡)éôvW™ê—$>—‰öïRcªÅñ%6�e´ZÔçæ9)‡t÷x\‘–õÖ©Þœ�«2(U¥qmá!ÙYçhxgìÙl¼ñ®h|Çé ©ŸÆ¯ÑƉE�?¡}7çöÊj©;–jmR¬uƒUÛéÉ�[Éç×XNìÆì¬êcNÞóo¤51¹¶Tte%gŽ;žqÔØ6ó«c³–•?uÙ �Ưüu°Sew3D%VVö¼ ÏÊìn—Ùº²󌙱|‘šÕÙ~En¸ZŒ{E™RÌAgœªÍB½£ +Ï„Lôù5sŸÚÑ4OL&¾ŽŒ‰Ô¸_qN1ŽŒûev‡Õ¥cg™›�÷Š}zõÞqÆ®Ÿâj¬n}V²9ù½�tæfIG|KrôM�µz7v�9ŠYoè–é»òŽ·k�?ãy%ÉæìŠHoÔµ8ÝsÆko|g­qUKâÞÎT2¼ÅØ«¯�¹Ö›UìÆ’šT‰MGS6n9#žNËU3ó�­¤E6V»a¯Š|³#£“~ooѱºà¥*lI¾·únd6©iF"ëÍr£taF"¼¡#±C7åÕTq]ðŽnn¼,Ö»5-©Fkl”5f3Φ¸è�;"Ê81{•9#g">ÑÙ¨1ÍÍ�¹ü`™Ùª�c¼öW&©öeåq‡|­™mîÕŠFLõŸã}õ:w5½aââ\4&sC®R{ÞŠE$$dn/÷vÄ&×'Cw¾”•�©,â[…Žh¤e¦; +ÿ"¡ø-+›‹Î+OÕ-]ki]-è^£R¦>IýÊ)•Äô#Þ–ê‡6¿³Qœ‚(ô’Yh~.©aœ‚ì/“™+:�ñˆ˜êÓM†U‹‘ñ¸j^=v·Õ¿ê�x®®FåØ�•UU•ã·j5;>¹»A2ÅÌXÇR-X6fvÒ¸Ýí¹£"é•ýxì½W¨?óyTÈD-ø“¶LbEþÙÔ˜éý*SœÝå°”Ù[Мå~–)8Jgö‘)“Z ¶Íq”Ìœ¸|jY5d[.µ8+«~™j_«ápµ ’ÖŠhöYç–v5§Ÿ}×j°ZXÑ_g¶iq¤¡Œ·sf¾ÉuÔ´õ²ãy¦Mµý [­}çiA7,USï^ëø)×ú=dæø«¹rfì#mD|ßF(t3.ãe�Kcá�;9º#á�žšeõç»$¿¹gØ¿|Å2¹o&N ;:É �oºU+­;³š!DlµÕÏýîhD>6êÐGn�;d2clÓGäµ�ëŽü+#šj¯Ä‘:Žq^.Ÿ§:ÎÇ¥e¤èîèr4MA­ŸH§:’ßè!nAg4t&ÅùÙp>Cs׫ô×ÚsœQwîXed&T´ê\ª$sZçgãÜ ±/Ë?ÖÜ™l•[Ù^“™±Q £;96¦úÆ4-ªSÖ!bMjžznZýTr¯—íèds³{N—=V6œ“õŽÆþlÈ¿j‰}¬:Gc§Ù U¹T*—‘ˆªSœŽXI4D;ú#¬3+šµHB²ÁÊœ¤Ê^äZO§´ƒÅâj´G­”Õ^Å:#køtT'D©k]Žr52Ákt®ª¬T#üG$·ñ+زlø…/£s烊N5êEÍ&£“"’Êèj7Ã%?nËûÔÔUIIJ›:™_$ûxUmÆf†>îÕ‰šzeìö¨ü»˜ŽÎ¨VE¾>¤Ž–EÕM¹èb**^FU£Š +þ'¯!�¢¢òëbUÒ‹Š×isƒeA#Uru'ò1]�CTý…ˆ=žI×ÛÐåÆV?¹dëCcÔÓUU“ˆÆL5õ±ˆÎ¨˜MÕoÌFM4Û‰QaŽ˜Üи"ÿÄurÔÝPë¦p¤îSÿ ë"R4#¤:ûîkènèÆ®Ãeºž7̨Ú̘šá¸êñW3ƒVâ±N�Ñt#ÖÁ£‚r#£Ó¦3»†ÍPŠ^E޹²Ü¸QARtã’qFÅ«JD·ÑБ­ô–D6*>ãÓõ8hÄ*ñ½Záp‹†èŽò»Eu´¼?�¤UÕ‘mEôV�È •èVr˜y¤öщîtÕ2c•œ´ìŸ†è~äIQ=îŽÅâÚOéŽÅͽ­3¹ ’*šˆìZG&7:Tü72ùh"=«>ìFN¿Žr\Â*ñI¤Ñ]©6Vè½ed Õ•Fg£kFICT´÷ì¼4TtªJSl Ç«k5C¬Õ*ÊŒÎcä²ÎdÜb¤*SÉIs·î:+Ýô¦©ÛTW¦bZr¯:¡Ïù¦®FKG«sÊ„ì;+štÕÊ�e˜B¾1koÕ’ÍOˆtÑ­®órÑds£Õ¯¯T›3á±H[•ÌK¬'÷œÛ¾ÎHv5ÂÖË:rá�.µwl.¿Œ“57&F"³¹o”´°Y…4'Æ’BGÿÕ ¿¤�ÑB*>´+©G™±+ÝôF*©aJ� jïh¤C±“ŽŒ±b ‰�;3J*ìèû¼r7Svt—ñò¾�v1©ÌB'z_vfã°›â緺οªšPÕ ÕuXZÐ?säIr›» Õ‹C®» 2“›3zšé³:;©§®Êú}¡âƳÓÉÒqš¡¯nÜÔÜÉ#D;ã‰È8£Ý”Žl¶Ô="ì0ª”±0é•ÍÜTãŠ7tÏkw6Å”2·3›ÂÆ´âyÌ5ÈFl£µr'Rޱ)ŒJFï˜wç“=�‘õ'w¦“U�nv¢²ÊcT$“;² É�Ú4—RF´Ð°MqT­”­ï±,ÿíÈHΈFŠÌÎ-Ò ±fç›;GtźYB®ÑÏÊmkg¬ U©ÊŽ|�»)èĈU²øÎNd¸tª\È6;—Ʉܹ»¡Ž£)®.t5î~swÖd—bÿ'“ÎpUÑÝwìtœŠS[賗ٌ͜õ\S°{�k7~ë­kú ¯óÖHˆS×+¤AÃÖH¨ ¢ŠÕíJšË¬„t¡+3“Èv×™²º”}X­¬ÆÌŒLÝmæêÈFŽÃwWw�ÃeA¿äîÄL†ï®EcSjjˆøLê¤ÕUÙ�¸êSvºœb-±×Íï©»»U1# ÛÉ� Ñ™îJ2†^ú¶�Üi%T¸ÅNý>å��v&ãaBEß›©sN´£MÆ UÕïÐN†^÷²(;™]_sCÚ{‘ÒÔÙ ß¿ÒjþlÊb’T)ëÙ™ço¨\‹ËÌUå!)³“úÑ•MÌÆl·�½ÆÜ¾)‘šš5«›b\VÇ:šÚ°—Qææ¦\ö›¢sºíÓÒý^Ê·ùÃÂâˆEÔ¿nº^q‰PQ}Œ>ȤØMQq¼\"½IR%¾ïRän¥rfíƒÎtÚ Y†\7ã–Ðló«Ý‡ÈLoÒ‘ÌœyŒŒ½ÂûÉ…¿ŸÈÔ%Óa7Ý7ï—ŒbÂÛ¹-³s˜,%ËÙ~%Cåû±DÃdJUG'ãËyœ �“¹�2.ÚÏd®&cvdy?ËÜ�2?™òˆÿyŽž¡a7‰H2ycÛNX.:aùä&ÓIË'-Wnî‘Y¾ÂmB¾'w%OS$y“1=¾¢Ñô¸3õ ��6=¾ÈÉÓ™cûê­.kã ?U»oM2åê�RÛœ?2G“F³rU5ÇW¦ö;�¦"ÝwþÆw÷²ûB,{ì†D²Ë¶ñWwX]›¡[FdO»ŒÒÄO½6c²kOG‰[m¿6jó"Ä·DFm¶NZDã×qדõm‹®×± _I¦®½Ö®½ŽÑш%2<öRí¨«ØEbų.ëéí=»±·¨¯÷_éÜXíª[ý·­Á×wv•¯´z‹9ú‡ß–\Ý~Çw&}ú–R¾Þ44^Ï«ìÆk±Œ‹Ÿ*ºsf­¢Œ˜¬§K�“Ö×aÙ#]Nùñêb®Í5eËÌh,­Ió‘Þ™Ø~~ç�Þ“lj‰ð¥:ºÃ*RQ¦r´Ÿ‰¨ŒÖÑ�'¢+ID/£é,š¶™!ûŒ3žÔË"ÒIYNóô£†CÎK:fßÛ32òÈŽhŒSfÑibS%ŠTý†­­7kš¡QQ U™5Î<9i IcF·²[Ñi¼ÖKŽcˆVãJ9³²²4 *MÆòI�u,µ^d‹W%rbD¾Ã¤ùqáÔ„^H­]øúÐHΰ¦Ì‰ùŠ�d4ŒNì¼åÓÖi鉜2XÖIƒõ°JªÑúRC,JÊt<�Íh_$¬‹{ Ù{戕XªÈŒ6�Ñ>o9�meSW•M¯ýØt�IÏ#ŽªÕ�G¤e“�r«ø«‘²•‘Qkm9‡x'ÿ\dè4Éè ñœ‰fˆ=b&»Jˆ¿úεÍÑø!›C%ö˜Ú¯�oˆì7vQ?²&BêKZº¯5êÈžsdIf+5]Ì�çOé�îaí¢šaÙº§fÐy⺵%ç•„Wó"™£ºqcA}gè½�ê×ì4„–úè?¤“ýƒ.OM(õ)b…¦}XeId�ÒiB¬Ð5ÒÞɦJG3v¡¹Ý¢$­k¢ä÷û¨”˜ ’’…ä³pÍ%ôÚœCcßÕ̓çÐÅlŠBª^~&5xæü2T +Ïæõi”…èÆØægf5ÔY¬ˆ:oµj®ÈèŽÌ©ákX£d«·iÕ6ʳ꯮yIb×ó�¦bµÞb«±¹9!OjýUȤEÍ”õCG2ô»©õ®2´!ëËr+‡Ž$÷šïμú¿KŠhê™Akm¤†~ù:hµ9!Ñg‰6DDßZsñU�ê½ÝV½HUé2öåNöÜÜJ$ñ���ݨ‰}"?¦J:í5ÙÝÔïÆk] ¯7g¼^Îdðö¡¹–ﯦÈv/®)ÝñÚ1cº4ΊìËØIx–xT¡oCªÖ’Kw&ST²³[éC²×üãÓ5±½ÊÊ4Iþ Ý(z�…­½¡�pˆWßqh†5>ªP‡.",ºŸ*DZT‡ŽHêÈGû�è¨Fï©ÎÆÑœh*G6ÎN:FNïmhã¦çÚèó¥¤7ôo„ôR}œÉ˜mJ-š +ùˆÆxó‰:7ÓôE/ê‹™I½ˆþiQG{‰ÑÊBµ¢ŸÑõ{+‰Š~EUd¬:‘Ò8#31ºáÑý*êõêçödP믣³*3•².²ÌYiI2äö,’!_èuYH†ú:�ÍV5¬;Ñ2/ÿ?ÑTÞ\Ùa7•ÌäHYÝuÕ"o‹ì:•º‰wîØˆê¡!£#Ïo-Ìf32û½oôé‘…}/Wb•y"ǢϟŸèlÍøDVËø2t¾4ÕU¡XÆ·— VÇtÓ‡Êuw"ûWq¹Þ«�y²×53ªêbm©¶êÅôaÕ™+ÎõeyøÌŽŠ#v7z»—Ùjž‘a¯›ã´„ê,º^ìlôjªëõCb¶ë}Ëèªe>렫ج7©«÷5µ¾ú›I�j.o�¬ú_ *óPy¨*¯©›ÝÇÉTogq³!ÛŠïüˆì«¿Ñš‰9UÞÜa¶Z¿Úæ:4ûíYTµ›+ÿV¯­F•ΊmVV{’2H×½\ögÆës5D³í´~T(B”:[oÎá;âé…¨uÌO+­æ¶&8+Ê̬ÃS\ÍÏœí¸û8WZïÌæ&V%+ÆxíKø1VT䊾XA&&ºSœÙ¦:hµ‚\^ ›éSf‹¡–ÉЕ­3èséžeX9÷˜âÿØpØ-†‹!Êh1ƲÍxæ~Ií¯Éœï)w³™_ó.óéŸEŸ1ÅølŽÄAÅen³M‡Ÿ +ÍŸV1ä£÷ôØmvr½*(s\YëS{«°–L_«ŸöK>ãÄ…ÑX’3Zœ:d_E|…hY­N5¬øq éÐfá)žôf3Ü‚¬©gTbEMÍê;-ÌÈA+ì6F}«~{µÂú3õ¬ñ ¢A.Ü�?SÛ.RßÔŒjЇxü{è6ÊEµÎdØœyÚ28®Mq½ª±aö°)xdß óœtæT„ã¬8³îŠyÜŠŸ\¥U˜Õo¼ë ¦ç¨dŒ+…Ö±DÐ)ÇRD3“³` ‡C¢a•\ùã¤B “ Gq$Èr +) š %o /TTAsÁ\E<9k.¸À2ÀîÆä1œ¹ 5.bæB§õâi³í¹sæ‚×ÿËs›¹pÕ›Ä÷‡\P„þâãékjÈ×pŽæ#Æ#”ǡ啋Ȣ¯üÆ‚NEŠ\С·]Œ2ÎòˆÈ…}ÂËÈ6Dá‘ QœíûŒ„¸@�•JŠPAH;\p¦N•*Ã…€Ã'¢o¸0eÉ5wÛ·pËŠPETlÑú: ^t‘’f$ºÖ‡–ÞK· i %cZ0G·píâËkÒ-[pã€b3ò™“sÐHX§†ˆ´Ž¶Àe`o]‚£McãY´¹?ù/ÍÅA�¶ ´äÿl�ìx…5u¶ �¸ÙcaÏÔt7“ëÓ Ç´?[ 7½�…Îî•W½‰¶“à³…°Ÿ¤{¶°|l¹�Æ&Nú¡8[¸ªèF­N¤Ð¬M6ñ W›àlATÜPt¼âbcö<[XàöÂóJÒϺxtÇ K nÎ^lsõ…CB´…ÌÄ*!ù“økAž,Î]´…k5]¥Ê'䳺Ú‚Š[x¿6�éÞx­…3’ÜBÇãejJ_äz� �N–Øx¤-µY¬Q'bÛ0¡c°èÃÏ/mÇÕSøöxÒ´àò ‘v®ÎÑ*Z\ÎÉʳð ´�ÔÌÂ?‘ÌR˜Ê‚œ6Á7Ìû`ƒ²ð½þrøà7ÆB�ØÊ!\OX¼ú–§`°�ŽRèW¸ï5#�bƒ±Œ÷‚+^rt Ĉ :Za°‘®•‡ò-à ,Z(�àöó—¦ÚÁ+ò¡©z¶:‹Ô?4««.Ðí=‹ káÎ"9Bºì ƒ-‚?~WP�Œh)¢åEËJM!x9{ûËùº¢EÖ2_JØG‹¡´0.ò'#ñÒTp>.·b´ãüÈ]ã"*’‹*)­,< f… šÍ}µj‘ïfâÄÒš°p•t¯zµHûè�Pn 0S-ò… µ=ˆ„ªè˜XJ-"?á\CŒ[N-Ò:ÿ uý<,³“9ŠygL�õK`E„ñ"”^bª±_¬ÈýË"ítÆŠ4…]À籟"‘1‘Qh†iºû)’à¯é"h»ø$OŠÏSD¸M]¶¿æ)’¿arÅzÇLûÙ> +"‚*÷O’ËsAñô³Ÿ"#|Œ +‚ˆ‘·÷H6ñ)b,xÆ"„=,¢†Ï/W�fÃ"&5ôLø÷fa‘cR ¥7L ‹,@D”9^MX$ç~Éô: î(,¢Ž… ‹,ÞW^ïäÄ"ö:…v +±Èƒ =ÂAD¯4yÞaD¸KBçXäyV,ŽÅiÚG+‚æ: ~iEêbã(ûpE¬‚Z‘Ø?óchÕŠX¹?Qó~˜hExLÜ$ñìµ"CXºϹD1jE +ƒý±�E‚µã©¢[‹¬ƑرdoâÌ&L8¹ýRÌ!ÞËD£-ÒÊD€™¯y²-²Ûà3�±ÚÉ2]ø5m3ŒE�Ë�E>³ + ¼cßµ‹Dp<ãÔZd ÷MËŒµHI6í›k‘¾‘é"É��ó¾H÷„׿2z@ú"Á³; s÷E‚CóH-¡•}‘Ú DqôE’E�ƒû"¦’Xî£/Öùœ^2��ó¾HèçŠb÷õ6È_„ß‹�7…Š"‘oä.BŒÐÔŸ“Šù bd¦o&Íõ/†|jõvÅ‹™“GYnâv‘ó¡ m�ÀS]d¥—<-ÚE]„¤�Y­q]ä7r(ïÈ.¢1XÉ žœhôôÆœ‰U»È¬ �åw»)CŽ–aϱ·]d3qX?8J¥ï\h‹ä|%1¥ÀdXŠæ—E*˜©’>>mY$dÃô÷·E#¡i­åáŸ%yn[ÿ#qow£-b&äáÊ\m‘#o2OÕÔ*Y¤+{…ø}Œ,’)AK¸É²HïሧÜd‘.¾¬h[=бFi®(v˜‹žÙо8y¸7Çš·"]³ÍC+Rä0 +ÖX ®|A¶ˆ¼­½v‘áXÉþ"³íL|rÒó_¤Á +õ�jpþ¹é¾a‰„’²¿]„÷uùžêîqÓáµÍ>yº¶ˆ^��KàݶäÈyäŸÇU[dÝ¿š]$¢²úIÇ ;1òçâ*�G!€zÍH®øùâÒŒè3a^®Ìd�àÒyÃÉ6Rû2ÿB¿‘#À÷�èÈH8œJíª¬á‡ú93Á�y¶1¡áA׃L´O#$¬ˆG¬~ò¯â8y=6¦Ôñ&ͼ›À¹ìI¸ø ûHî((É�ì#s �PÁ>*H€ +8˜�\CIˆsH@b&’¬¤üµé(ñ‰‹Ù ¦/™r¡ µ8À¢’&«œHpô(D3R£�H¢!”†0ÓIà—ÑäD2ý«¶†‘œjÈ„81Êls=ÆË I,Ip˜$⺰®’øþÐ%cáÁ–I— ³ƒ›„ÇÖA=wE”�W™Öéi‰¤\ä¾’…V¢iT‚')É3×+ŸðKJô2äÇFIÉô‹ÇÍŽlvIÉôá¹TS‚ß°•êR9«Ä‹ÚC+´¸¿‚Ó^Iüj,‰ð,9qhÑR’v¢¾Bl >—Ü7�(xÖÓ%ÄÜ'yIæ .Üö%Âeô%CÂfô%‰!¼qé¾dÒt¥ö%hw+øÉØ8¹/iõ¯Î<±/AJqÙ—°�‹Ã/Á 4ó[= ¼ƒ_Âø}ÉÅgÐéWR¬Ø—(:fLÀåF@d5&×®/éoa,' ‚IÑMATp;¹ &&?Gzѱè�o &C¿ii· &%bº�+L˜8¯Þ L“{Óìö‚°ÁDÝiçÝÊ2L¶9€ &ÚóFdx˜Ì´aŒÒÃjÀ; ía"Òøîòa"ãLG+˜Õa"ãi ´…ÉTBn� ̶0ù˜Ëá~›,ªöá­o™º Õ‘rtõî=Ž@a‚Nƒ±�á"û…É�,耹™yÊ?Éí7]˜”©j°°0Ñ(±˜Ýð@¥) LL Í 5~’´¥Z•—LøNŒ#È0‘§¢�-Ãäz5M²D¼Z “¤‡z n¬¡…ô=ú ýžÕÞ&Ëÿ«w 0‰Ãs`ƒª; i•~‰¢~L÷ss“H®£ +Mè +_·5—LŠî½¤áR 3|ñ^ÒÐayˆ¢ì‡T÷’¢DÜ�?è¾Ý%O›œÙ]2 +™ã»KtßÚßæj¦îp‘üÓù=Ë%Kp9„=̯çÜ’Iš˜uŸc[ò©´bŒ&*nKè„P³s=¿9À¸d#¦$‚]_šŸø½f—L~äQ……f—äRhW”è¤a—ŒOKSºMÙÛ%ÊÿïÁ{Xì%×Â<†H„†Ù^ò›÷ØÇн¤ˆ"9… Ö(¶—løFÎw/!zþ½v�Kø’•‰~ÛãtŽ/Aý€‰î'%‚SA +&q+â̱¾„ñ§2Ö˜rz—aÞ¡‰—[8¿Kº0žX�Äñ¾ÔL¤ã¬¬ÆKÀ´m”8éᯅd_…ÕqÇK*µ+üðÜ:¥ lV9;¼äHf)óˆ/IË"mŒcaªûHrœ /A•·BêìÂK�q}sˆï’ïO:Oå~—Xez€lJ€½K$1<ãýsÈú. ¿�æúÃô.Ùæi”͌<ìm÷.ÙiÉ8ÍV½Kò5<;­‹w ˜–Ûû.qÁðb0Æ>ã?Ü%(”"kIy¸Ä]Ò7 ÁAAѵ»Ä´ˆ«ì�º»äõUÈ,âî’—®k ÇÜpÊ%ö#fι\R6£]&Æä–,V‰º\’°îËSäþ]å’5”aO3—Kbüƒp¹DÞM�»\ôN “–K[� (_a-—Ô8Zjfþ_.ÑÖJÅ¡_ +.—¬PT?f—KæÙ ‰‡Ç4.Q`,örIÅk†zû”KÌY�/ftÊ%ÿÎ%z‹ÚujEË%•]\Ë%|¿¯}Ä÷÷rÉÞ¬ƒÃÊñrÉ6Hæa¹ƒ-k¨˜KîðkÀÑ›»%5™ÂºbTD-ùfY´/veµ$‚Ù>|%‡Z‚Ôš³Dù|ŠÓZNÍÃ,©>BUMVfe !DÃ41¬ë²ä¬°“º¥ËDNÅk×ä³O¼î+—%x²¹.Kô½ül*š›•%Ýì0«ì®²„§–¤ŸŸ^RèƒSKÄ�qäÚ€7¨%­µ6°‚ £j‰Wt°`~µ$,ÛÊÍ[òP0ª\ŸNíÉn‰rÎðPÆÐʽ[òƒ ªñÜ5ÇìsK&N_Xó´¤çõ+æÍ<ï¹iIR»�'{ˆœ–üLàË ž(gZrôÝ#ÚMKp烳ütš,i81@té½Od‰°E˜=ÏÎ5_ ÚP^6ò^‰ô’£8.†ÆWBµLZAP^úJ3cZj_‰n†„4‡=– ,yÙCÌ€æËŽ%†ÂGÆ},¹8§©Æ“à+aç<Ú²o}%åÎeþÐPþ+‘™�/¾øûÿJt‰!Ô€³—l%êSâÖ¶TŽ­d°¸«McœÎÜ�®`+¹¾-ZðJ¨ÐV2:FžÊ²ö­Äq +"YàY[I°#ˆ¥ ã\b+A½V"Â}œÕꨕÀní¨~+5h%ŠF +{%­s÷m’ÊXB§­Æ{–€á Ê©¯“áY2œÕÍÕ@$ŸŸ%ùe£À +©¬ô,�¢ +Ý€g+öY‚CKW†¦ví,™tÀ)'_8K†¹Õ�Ô,á+ºN‰¸x³„…fÄŒhåB@¥Y‚W@GãBk6KJc-‘ÚüèÁé(ñj °‘Mg­(Bk ­<7x½†Øm-Ù3^bé}j-Û€v„o†g„ÁZ"ìþ–ì—9Ô$ß’;% ×W&¾%a¨1P¼·‡µd8uà |¢c-‘ËË·ŠlóÚZ2(RZ·$A�.P>.e·ä5ùø¹ˆ€²n ˜v]¨òat· {|Ç R=ù»[R¾!Ó�©7”qKäZ·D~ÒT|·äf8b´�·„å}N@H9‚SoÉ$àz™ +Ûþ/ð–œ&!À{K¾M�`ÍÕÓ¼%¤ë–¼äöˆÌn T¢ÝŒ&ÜôÑUoI1\¬.Aöš¶ Zç’|ve€—È*ů:—h¡ÔÂÆüËçì—›x.)#Û�8—àùŠIA¾˜KÞ0œ�˜K’   r ¾KÊ¿•‚—ÌÌ*ã¨cxI‡‡à6_âx¢ *”_²øÁ¾„8ô¼ê²Ü—ððR;lÄ/zë .ŒU\^òö%†�F+d,¿dóÎ—`tÙƒw~\ÎK>%$âÆ­’_2šÑ~‰:­„±âL~ ¼Ê¨ +=¿DW‰vý ~Éôhe=/�î+¤û%«322˜„IŠ\ j}ÌŒŽ¿¤éCÍ÷aý™ªï—¬�_0˜”†Ñd'̇ÉgN]º€(>LJpPg4ýÃD%ªH‡@š‡I.Â*üµuY—$ ߆ É$ÚøÚ°Úamu©0û|1Ë£•3„O +|s–v l°¶dîJ%e åváƘL²�ñ¾+­þ°8>ƒñÞ‹ ’-ö/ “üìFô1¶qw“°ÊDy�™L¿ÐóSyŽ™„QÓZÏ(-ÄLz7™ÏɨÅLjØÂÎ'RY4+39ÐäqG.!R¿ÌÄÚŒn´»Yf¢ \ÿÊg™â+3Ñ8é?Ü™ d-Ñ!àþß4‘˜Õ¤ÅO\[¤õ5Q�6ÉÛ �›ŒÚ›¸¥ù2~¾©DjœX¦“Té7±œÌ‰ù9A>ê$¼UQÉØÉ wàåÛ�pË;ñÍúæòÖæ�,ÖíQ`<óN@ˆ½+ìܼñBêòN¤ÀãЫpæ�üÿJ,w!FÜÃPÉqÑâ•XêïNàÙA†8�݉›n±I� rõÇÝÉH/sw'ÆQܽŒe'—W7<Ö–�½½¬Aq¾Jàj¿ìdÜÒ‡‰nYv¢ÊŽ˜Åã¤ìd©q4ÉOŸìb>ꘂ½0𱓠Ìü_f;v²K2†ÇP‹�Ht®2ÙŠ3™Ö£ØIÄà²TÜÇN´¤9)¤˜;™0 ðDL‡±“`þ¶ÇE«·Iì¤8S~ì̈vR?õÔKnå:õŠøËÿ%× /Іzn@¡toS„îÛ†WÆMéÅœîOéĺ! ÿÜ¥·tB“ütûÓ‰f$ÕÁžN<)éÜ[§“Dj%ÇŒ¥Óé$ Â¿Kž�â餿ò=LBœNä'÷5u‚œØ’ti£N`—5JfÐ2Ô‰<‚âß¹(Ú$P'›¤`n94£N•>²@P'|pž(ˆ,çÖŠ:h)� ®Ø‰¬¥íq¬ã…ØI²˜¯TÀ¼jb'…°Im;‰Ý¥bßåºQ'¼LƒÌ ¨“ÒìpºÑá“bÔI+£«IëÆÈzô¥Ýú'¿Rà;‘‘©|(†j-.ÚØ‰X²`%e'XT|Qvµ’ÃC@�t²L 3`;¡¥îÏc'}”2O‰¼Ä°XósÜ[Tÿ× 1h(^'Ô$ Л#q�¨€FüédÓêÍCGàQd–:™Kï_N¡vê$Ÿu4°9¨ËãÕÐhñ!ê*Ž©ŽŠƧ“sÇðv¢è8a犷»n' +; ¸Ô ;�f¿ð ;Q(^JÑMc'^Ï’Qžî` •>9~ìd†+Èþ(C N�Â;À»‹ +©“È +s k��¸õ‹k¸;)qZ¹WT`‹Íw'0P'üÎN0æÇÈÅ_ÙIlM»“•9ÁÜC°LïN\kãv*ì"5òwSã�dɶfÆÉˆÙÉks»^'#€ÙÉÛÆÚS¸‹³“†g&Å “!Òì¤Z¼W«Ú³:<;yð‹JIƒÏNÚ›Œbœ«“´8¸Õ öa%_.ëDÄñȾL×�»TsBáO–<ä’…ÃÄ?$ÁÂÑçp:ºoùXžkb¬Â¾nš‚ 'oHyn‡RÄId›Vî“_…8*csx8aG°Ž8)Â3Lc¢þM‚Ò Üœ—ò7Áo°÷7¹ P�8�bf‹œø))¦9¡†§9 p�$F'9Ha�œU;Q>ë �‚ÞwB*�'g%è‰Ä´'„‡éƲåŒO;Â9—}¢˜ú !aË øOº@ôùO(%ðŸ(` ÿ‰3kBnºDÿÉè>4ТÅ2 ¢æ>Ì?ÙÏ€ò»Ö€÷%Û}ÒH}@Ø+”ö4lñ +µÙÂõvQ¡ ÝR¸6CÁS¡‹<”éÔLEnÓìNôé\á7A&…[0 +'ý¢%T'Š£ :íÃÎð–8Êø'ük%!¤´~*U)>MO‘í—dQRRt0ú�”5+‘gJ)Q0Jø•¢†-¥KÇSM¿”»�)ÄwSÄn†Ÿ(§Ìƒ<Èq§4ÊyP 4£¹þ¦h°Âƒ'T�·â0•¨Œ¿ö�åïÁ{ïo>¸ôªäï]öxmÊ0S ýÂHШFÍbÒ®]nu¨Ør%/ÂáŒø“ò›wĵ«]tVŒ?¬žDJ#°#øýÎnr@˜ êœG™hï @|70K•^=&Ѩ� Z(,1Œßµ¨äÓeÇnø³ŸÌª„°ânPß~x/8g’œ7¦£B<ïÞCÎÐÂîM[An@fñ2ri+×6O0�qüIÒ½ ÔA´œN³ÜµœŽtø ia �ˆÙ!?¼"xØÔ[SNí4™$Ál•– š +@b².Fȼ È`OZ(cŸõ%—í†ëˆVEZ iòWm´¾8ûû‹{ñÃ}K˜�‘Ë¥„þȦ�Ô’Ôh]ÒG®õ&êðx:ÔªÎáN“; ܘP3>[V€¡Ó„Å^{e  (5 +Dz~M{1·Å`úå­YÊøLk} ¸¹u‹ -_$o�h ‘¢qDe£v'%¢4Òh® +Ë5…uÄ‚YÚç’©XErB)&–ö-J—Ðò8H�Å~ƒf]‚ÔðeiÅBÄo`Å.�ƒ&Ê_eÆ kÁÏ3Ÿ.¤ð:Í#º™N¬nxCðaÐ÷p:;+&Ó[½.‚7ÆÝ�{Ÿ ³©Aþ +Ðɰv5FÜ¿mT…¥Î/¥¡A ðöZ€¸ª�ÙÌ”Œµ³Ò€Û=J[õ5Ì׸�Ô;ÔDÌ‹Ê ŒE>.î8WC*/l…táK§£Æaó}¥^tx®?Yoœª’À´K›/ˆÇÉxLv;DûD ì†>Þ.‰0¿/ÊÕ¿-Ék$[`Ó›*ÅjfAtÃæIÍšh1‹¸jCŸ£î &ŠÊAReCÈûjÊär2­~¸a�©;’ Ÿ×ÄEù ò×_Ç®äÔRÆßñ£Àð÷/~_à'¾ìwý׿É=5[×í¦Á‰R5tRcJåN£f*¹d +¬©É jÆ·—.!TBÐR€ÞŸÉl:Ñ9ê[΋™*ò ødz…OscÔ-[2·¹ß¡Ågø¥d÷Î;D,z„ñº<äý#®zºúO‚&œ�6ÇHTÀÒÁ.Å9+0ᛥ4h<Û˜®¤Î�EšS%WÓGØLXO{�–÷ÆŠÐqqví°¨&Kº'¬�Ïv<±jÂ{°Ï…­Ï^—[܉Œ1q„ð(w?(ïî�„�eÌýˆF½œ"¼¢¥ +´ÁØ™Ííð.Þ8ú=²ð�Õš‘ºx—+)#™£ŸŠe%�M¹Š§ÈµªÙÆè*+ÊÁù›@¡p ).PÐ,Ž!þhU.7÷è”Î8…ÕkìåŸÒz†g±äM¸a�¸†­‡¹edV)L€=ñ@™?ô‹ßá¶ä““7ðÉýJj�–ÅbEñYÊYŠ­¶ ÎáÈDáX› Æ€%–êh ‡³Ãê¨ÅnPô¾óêèt€ D¢® +,„1Ëѽ,ü%îså¿Úó=ö´(CT,cZ7FúžÉù µ á¨bÉõ`ùÊãè**,�:Ž@ÄÜ¿«údØ`©�ĺz²Ç>U…Ñ.Ã�Et¿@&–áà< GÑ2¤—†ª³'í#mŸÂl +o.<ÎÙøAåêÛLRY® Ñ@ºkrT»¯�U²…–ÇZ¢¼¤‰ƒ9 –óEp—ªT6ž�ºáãØýA×ô•ÍäûêŸÆÄÔcŠ�8Y3ʪ€wƒNýÈ̵°ñ«â׉ò‰Ï7R˜EßI±@æÙå7 £îÖ*d2›WÛh2@BÐÚÜú0×$":Ϫâ2Æ¢Qº™„rOÕ9zˆÃþ<ÁãÁCëã7qãÙ½ï~®[�0Â�„Þ…û8±íªïÛg£e¥nd[ îÏô³!¹GCšCýôkMSß,ˆëßÎÀÄÖSç:,ºÝ:×°#”§˜¨·4�»{B�,U;Þ†‰BctpnöëxùŽí7BaVœm‰Ô0Ÿ[�Yú2C‘ïÛdòÃJ�c~f‚íDA« <ò|_ý¥L'¸eƒFÔƒ+ô•L´)Oâ›5G[‰§Y*à;!q,ñý�".ƒº¾| +Ò³ä_ÂFÅ‚²¡­•˜ (vz—l <ÔàˆbÄ© ¼ge'#šù]8ã›Q©–€ò ¾Äa’þ ™+.+*¡’Î)}﵃ÜÖþ˜ÐûWŠß¬Ìu.åñ$:3|À5è ³îwÓ²)€i”ù¾Pn+ éÓ«ÁY`ßV (ÒÔO›o)P€Ræ'Ùî +=à± ¦ õbêI:{FBóIJºð‡ò¹©½ËÛ¿¬ãq¢+õ•l6ÌÔ8‘æm:ZÖÅŽ=‹vŽb»Yк\s¥E¸âˆ¼‡D›³)qú•’â §=*\(HžÑút“âÉ{Äw–ua°\ŒkG€G•�/ ÿ`Ó�Ì(kgRLÉÆ+éðßT½΀)`âücra­uÌ|U]L#>f¤|ힺqÁ£±àæŠ9z+T�˜zÌRÍ&àg×i#Äß…q o¬BŠ´SQ}TšÔ¨ÈɉFØS Û•F�¨¶ e<ä7M54J'Ý�û4#šŽyÙÝOÚ,Ç #ljžâfš +Aª>ã ¯uðËõp›æÛ»Â5zßð;ýDBMfMÌŠKj‰*]xC0}w8±±¾¼ˆçƒOøg«ò—BÉrë!*Ä…?Ò›n†°@»�¡É +hîeà‘—ù\f.!:PË '‚.§‚Ü·Íä³­~Õ¤ò¤Ê úsÊ Â +Y‘z}K ø|¼€è'Dˆ3Ä4oƒ§’À ¸â�YË{!¯·.U´"|Xn0³ÕúÖx"’ôzoÙ•Fl+c¥óu�€0�×+#Ñðòc§îƒ½×TæÕßù#½ƒ$|@¿¤âîþfPÙ…ׇtw°R>p8�«³çÿ@õƒ°ÅÕÕ�éŽOéÔwD?e™–¸ø®17ü7ÀVûùŽpÚ-{à˜»rG1]°�©k,]䑺V$ÀÀ +|nž;ÔÔ_Ó´:iÒ´¹õ +€¾o°¢¿y›õ.²~TÎÉw3TRŠ9zqU÷"„Äö©G -‰Ã«ä/…x¨Ã¢Œ…Bît›Z4›ÌÇ=cND6 �ÏNйZ$Œn™w 4®†¨“蔄‚i":‚>ëD?眃† \«¾W*­ÿêQsdT/îí³” …­‰¨…]!ÿÇarM›½…nˆmlp’lj,ýX¾Œ”–Ÿw…p;LÅò)Ø£„±îþ×`kTËEΜJcg8$F‰k!=_}$ì„„€Í® 6" š|«§c¿eu“ ÞIRCdÕ0)ØÀ‘™ùKÓt*�GÙ)’ªV·a›F“º~Jßpæ®iôúi#ÂÇ©åãoíµ¿Ãý(Ovì¡?¥1 +�ËSYzo"eÀ*ÂP{VêŒçký)V°eMÓË'Ùd!È´€½†WÍ•ÜéσG²>Ü( šLî¢úýœq<ÕŽ‘Í$ú€U¢é¡�›Qè§‹a÷Y³#R‰ÙÔ1bÜ».µï«kÓÈÊk’Í;‰'Cg‚³'Û"ÃýՂLÿÆÌ•Œ ÖWå°•<-RÕ[ܸ8_¨�ZQA:ºÝ†qž !o8©dnú?§üª´ëçÖÞæ3JjÓµu‰®MCmjWDØîŒ}ŠÈ©!¥ûIP°úÿ�/œÝc—š#š +»Ädòvä´Ûƒ«+1x'wCîX—毟ìVz`L\‚X"×vb— /¢'Á¥YDHKÊP”5µ'?‡xžOþëx”,ΫϷ¨¤½Ý•M"æŽ~³s +Ïâ*¦7t,¿‡ $ðX>»-†S:øÒ5r5I¸28oX'� ©|@‚S‹‚ÔW‚wÍÈ ­%mˆw$]¨¡R´ð¾+5Þ¿`Sí‰Õ\@‘d$Ü+´ÜèH$lñ¶z•ÚTŠàè¡ïîØ…TjHÄ%]°º’÷4ggo.´‚@ƒe°Yn"€IC íKÀ ¹ájúŽtpë•øP܉!è\§ø´›H�xZ6PrÝêî{ØLÝyæšØì$H£‘Ky"ʰ‰uãÉ>@F�Í=ÒAµØág{ÿ¾±Í >íæö…ùEïB !'Ò‚âÍi…\kçdWQ¾^[ô�v!ë6éæÊdÈ.åéçXеCUµµÎ#ƒÊñØ’bp½Qr¿×‡ 9ë["ÇÛ~fɳ4™è3D±rÜo4î“m„ jV¨ãc@üÅÐÑ“«¬ÈD?ÖŒÊÄ‹‡"(SíA ÒÚc´v®ÚFUDæ¢+ƒ[Ô¿mµO–̬cJ!(û¥�ÌîÁtwB ³ cH¼»Åè¬BѦŸJàÐÓHe/$�AÅ!†¤"0iµ¨ˆu4é°Å1]¢´:oz¯{mÔ;É‹Wc§¯’ü;-ÖNŽ«¡÷�2¶G[ú^¬‹þ§ª×0c“äÜ#Gˆ>ä$ÔôDV•ø[3l_¤Ú‰ÿqBSu[þÛólÀXëcV¢j ^Ñ«S ð%Ï“'BAõh�ß ‰aú`iE¢0ñim7Z³x +wOšXœgR¹EÅQO©9^¤¥½Ç^�2?«Î=Îæ¾^�þ¨Ý¶…³%Øût?"ñ˜�m]F#Ðþ*ªŠ¦Û¾%”90콈M¥IÖù �Ø�ð´|}ô~±5Jbñ"q<´/-–{�¯�ÙXb·”£-,E%œ s1œ¾Ðp—Õ€OÙí]“ɳ÷a?”r&Ô|"c ®bü¤˜)X¾"ª.>;4¢‘€ÛFeN¹e`¦xPjà.¿µê¾I[ïGêi›%)ÔœéÌ™ÿÈQ•]¥’cSh’í<ÔpKt­‡Úf÷òÒ¥f˜^.¯;vY«ú8´ðJõoœ5 +¹Á'ú|´cTÉæ•‰Ø”YEŽƒÆ™ºY›k�˜`M·¿Ž~µµlÀgO丬ªËw{Áj?Ë­ð€ñ@‚9 ExI¶ó7öæÙÝt+Bp™²g7{ÄMíUA—…1�âÉ…ú;ÈåÕ´ê¶°`CÇIÓÆ4:HÝÔzŠk‰Ç²r,beŽ69Z.]›Šé£³Ë68þ*whЖR€“¬NÀtÂâd)«î�ÈìÈz;Y– „_€BåO¬PÆî:aXÅLÍÖDZAÜéoà=Nú_Ckô +>!ÈXŸy­{«x7�bjÆZžJ_*8]jEO‚úT"@lH£h—=D›”ý`”—ýˆÐ`aüc]B÷LýC1QÌ;�/MWöIgg¸T€hš¼xèZ0ck6K€ÚFÀ†Wÿ>Õ@–J"IyùÈXqz趈¡¯zç) ϰÇ*>ÓÔ9H1~ ÜÒdÄ ‘'æ„7$ŽAWË÷Ï¥”UDƒÒ B >ƒÎÔuRQ-¦þ(Äæ[œ"q¸Ú^>8u&…m\$Å , š¢˜ z—On&úê�(ÏàEò÷O¥í7–DÉAß°!ãMŠ¢á9‹ÏgÓu¥9G¥ræÎiü+Y’Ï~E¥µ�µ½ýì¤l¶ (ðVßbÙ¢ÛÔäƒQºÅ3Ï)Ì9ôƒ,Ø›Ÿ¼8£¸¨ìkÞa�2ëKù’ØÖ�œ+µ³òÈž¹Ã±Ÿ9ÓýKð½åÄiOWQVkÃÜ¥k"¢Ò¸¸gMŠ×Å(}–¦”ÙlDÀz �Xi\;yöídGÌýØüPÉÇ"ŽûùË!ò¬x'HÌÔÀ„å1hÂÓÓëƒëU‘ÔúÕhBÓü6·Ûp8ZrMÜw¹EÄÜpµY>ì{ý½°V§2èœC&»±8û‘b�)ÃZô&ÈÉOÁO…¢À¯R´¥œÅDP +¿7pOLǸÌ4…¾†‚¹…‹ 2ßS&|nÒ�HM„!Q™w6BÀ‰4%Ûö™^·4çcÀ;ð[éD£ë9žÔ ¶ú“\Ã4ü0|:ÑM…8 ð1rÔ&…k®÷^[«Å^.âwÍð¼§t¡�[ˆ˜5Dk”¢„ž&° \Y܇õ<* ö2 + –ý¾}^û}‚å ¢Eß ‡öÒ�_jë¢{Í„­åá–2&13sì(â®ÒñqÛoYj—êx7Ì–Â-ËÙ(€ï[ü”°r·Ç(ÅÞ"‰OmrçFÌSQ�öã³·[Ŭ% jî^ôNJ[®Ù$d"$nñÉ!ÄÅ}óˆrÀ#olaíì&ÄËR%y+ˆ3Lí%©Ê½ÿI¨ñÛ9g$­(Ÿ*2Kš):`®ö>'E�QSC ۰ĉ'’»ÃCô–g|Dì˜7=‹‚¡›”j$Ù +ê”ea!�þ1‚WÂ2°Î +!JÁ2ÿ'Ã1°š,'Ì~ðÔ4ASŽþD‹;å/…`Ç6ÏI¿Rž ‰W„×íûôæú¦Ç9dekqÌlá¨Þ KcL!Eν–"˜^—?·]2L9݈ëð1% M+ì ”>\™lGnèål:i[©RÂô¼‹i{5 S=§ ìÉ1mð»-–¿ü½ ´ÖJmr¡\§a”%„«O bL¢NØ-,C$6©<ô µ +„C˵{6Í×w&¶þ´’Õƒ¡Ôq‚g/�´±¦¹Äƒ=(ÎAó>%XqûãT¢;mÂM_{v=d³¯‰8’#Þ·`K-+\ø÷)�À¯2h4€Ôa±T›N¯y>|$¢™JèO¿ähˆE ÉÀ|7ãF8vÖÛŽ‘Ík޲ª/`´g_1`tTc|>GZý�ƒUóËd«�ç˜è}š¢œ×¦Gââ‹ù)D‡ j¢Þéš-lpOå;düÐ{ë ùʼn/V×QmÿD·sk¦Ï ^2ª+Ï€²@ ÌœÇ÷$•V`vš?«®¤)#˜½0CAX׉x/›«Î�´AœUXîu¡qÞKïí{¬T„9eå ö˜K[Ç„&ˆ{ÊÁ©©UG~q(Œ_yC<�­"�t]JiÖeÑ‚ww’¨|Äωi+K¢“D”L�‰­�‡r·J ¿x1rÊÀ÷] ¢îŠ –)DÉ•YÉ‚¼’=7CEšP…7�Þ–¹¶£)K[Ç€±™=æ oØÙE�$�›c>Ó†Lj¨£B}·Œ×?ÐU¿»6ö”|—àxƒbîݧp1×Éø÷=ظ¹¶r¥Ûf±^ljá °ðï!´Ñ1ƒ±œ€P¿§Š¥† %~póŽƒ"‡ûl.ÀÂx°„{υ劇ŒÚh ,ºY%ò1(þŒÙþ%ãÌVüHîð%�™®BÌ.·!¿(\ÕÖ©êyfl!ñÞS »)_x@ø½àÍmsFn�˜?W­Ic¡vþÂØaôþ¯4cãÞxSF²¯'|S6‘|áé|þ.,È0k2 >‘¶¯*.B–¼”ž>´/Î7¼x`ƒ� žÓÐе$üàKqí6ÅûèÆ³pÿY£oE»Ó}ËЋE�Ö3ÿsò$fQåò‰RVOŠWˆ¬uää«à·ÌDð©b¹_„@ºøP2Ø5Áï3†²W j#ï]ÚÙݘbz-pÂüèð¢¼`úô’|ÖÒqÀ�wé´x+�¨¥•.®ÄÐð·[ÆÈ«öJYÝ®fC…@ 3vñ®çü|4kŽ + £tô;ø2çÅ–TŽ/r�Må{¾¯µv³“m|u³‰”3 9`R F:X’¢Õ ØÛµé¼gÁOuçlmø¦Ô9i¡K—øè\%ßG^1ÛIø Ÿ–}~æ…±³EÚÄð™hp #Pv%:æÌƒI”HÒÌjBŽs#J©�ﻪýjÈÉðˆ{;ËË»–Á ïØ@ðz# +v0ÈŒNì·%¾Ž«ä[ò™úérì�QÐE†`2Ù2Ër”ÿuXãɺ4a»Õ±Mõ{Ñ +[ h�yŒëû¾z1•‹†4Ð; ß{¡ñ—�Ãßýì(|„i9R;Üy´¯ÝIÇ­Ô[/®ýxã÷±8í?M¸z­r;äUZK¨‘ í…FN‹m}’A¥«%ñóï^ÆUÆ�¾ÇÊkí¤[*Tö}³S.i–‚&fTTÊÌ—Uü–n=»p¶WH^´ue.ßìAs-ð"o�‰^µÒ!nROàºW> |ý¬s¥[PDÒøyS{ÆJØ,•zb�÷Kå`; O»ª÷@02RZBãHO_>ͨU¯¶fS—û0¨%ë§æEvf+&Àê°ALÆî†D'.kMŽÿ̾ª8‘5ðí‰ÅWt™í݇o»¼"|>Èq7 S êf±Î£%¬ºƒýtb ÏcÊn`ÆÌ/Ü~wFèr“°gŽÙ›rQs ÄNº^z.«‰¥•°¿?æ§psq­1s¥ñ‚5ýç¿/dÒ$ïùØæA‹�+ ÀrxËÂ>®^©¥"ÃýÆñJÛƒ~ULq¼“† ÷™ö#ä6›Ðb¢¡¬§hÖ�8ÏÍÜ8•¢�.†m$/z85·(j.h«IAö—vY§< yôs÷züq­«CŠg\êÆ¾Ìœ!|jÍõŸßf-Ï:Ëö¹G�áóXþÐ;ÀdrjÈ$ þ]“ÚB©'± ­B¡Ógdˆö­ WôŒöú!e 'Š-Úœ»™>#ƒxè`Ü/u TºÇ÷méFÖ¹8êµG(ïI$»å¶0H²/Éb¸n"úüïÀ8—r‡Á䢹µâJnh„z^�°Š6#§¸BlðlÒ�&2ÙI•¤¨´DB3«õ|êiJ[Ì�V2‰ÓK¶j2û d<¯¯û"í°èɰç? �ó §#+—/Ò&àÄî�'d¶G-÷§îÜ\rá¾1 +PVâëK²ÊoŽO29Órï3�ìSêßߣ +«œ‚¢üvÐr­Xb2à�)2‚ÙJ3®��ê˜0ÜLf— ûAÖ¹¨¶›£ e0¾¾ãž\N0Ú©:kÓ£I�få û(Ò튙’EúÇsŽÁˆþò©CÕ³L¡S¥Ï9Ñ5ÏŠËÞ¥•ظe#Á\w ý¹ŠíqvóJp·u £©Ä\Fî,536R\"¦4ö†ac\Ç èÓðš8 I_PÎÚÎF�Šl†çkÏu¹3Ú ŽqËY^Â�‚|8Ó¤k8y÷“czöد9ß5Ëé57¥!�GÇ-r%©3p>ÉÞX<¤lùjLSa�´I,b´QËZÍLºÛ©þA0ꯘDfIâ×H™\q­”B“R ‰¾B¸€¥¯Ø¢éº—kiÒ $Γ¸�š}ÜÊ×C×åv^Ÿ±Þ�Wûä“ÄáÁ¦PõPß²Q!W.±‡ÞEX¥@i¡Ên¥Ã²ºý–¬O¼ñ`óÇ0á0et|!ëÅh¹ ]�F_x˜¤öéønÒßVm¼ðÖÜ¿?²Däò’—¶�‘�gxmK+Pa2•eK¶¹´XŽúbBAá�°�(¦&ñÍ3Èm󽂤ˆÖ£QL‘|T§}Æ?ÔbéSoŒéW\¯IÇu4a5‘ÄI+]¥’Õ¬¨‘&‰¬¬q‘v~·4Wõåc %Mff½bú•ˆBç-"Ä„CšPìÀU|ýF•ãBç¥xÍpò0w�ûM«&Ëñ&„ì,½h„]Í�ÆO*ö«½!ÅéRšŠÜôDϲJÂ+½*¦„–ç½ v3³àÄ”ÉDœt›Ö6CdüUMûÇv‡.}W¶”²�ª†aQo`Š2e=@4ØF+É›8CÓª6—!‡–Ø)vWÉx³'´8z´šÆ÷ª\BS‚¥1w‹x¸wlÖyJY/7OêoKF Å6ÄOFPÖNEÅ:ÀÊ÷¸íf/¿Œåõ0t /@›©±ŠT¤ô…Erµ<8ÜÎ[︅#ÖÆRL‰·†0@§*au—Û õ*‚±Ìp ã3£~=‹7±D'YÃ{2hHÿŒ¨³©k, b»v/j×…œÂµ°¨ÈBB3ÒGŒ´Ä\ØÞ·7‡+ܺJÈ'o}hp@,€eqþ@G¨^éŸõ4»6âí.΀þë՗²C„ç¢;Õ-Ü�D‘Ýýw:ˆ +ÊVââ=µïä$ÜULÓ°ÚŸñ¥¾çw¯å +Ú! ó\Jš‚ôŸ¯×‡î7Ãûø#ɰÒâ —ƒéû™%´’qÔ“ûØ©Ñ_å·ö§\ŸOw‹r&¼Æw�ò#3É\«�vªÂ-_ǾÑYãžXÑ÷¬ù•Sd»aµ+Õ{îÄ"Ä;.%üö¼g”íH�T.›_Ç'L!ÄÅ4½vþf¾oŠÎñ@³V[ö²ŒœKÁí+&ñ”ŠP.:›âãVmÏ«Þô};Y•ejlÒ¬óseaÜÞM¶/�Å´ -µ�K- ej^ËÇÉs‹ÁCÑ\nýº§‡¥p#®ßº7vе*Êù÷•&+Ÿ0Ê��ÍwW˵(P7ÂÑ•™”_ª�á\Ƚka›’Å›Ïr]”Ùº!ƒg~ïN´˜)ÒÓäëõäGzSª”4¢ZŒ®7Ý3Lf^©:b¦@l» «wŸ\Œ "BwÍ4ìoÕBEdrØè5G÷d` +½Ï4÷ʧb-•ÚÌKÊåò£EƆæ¹A"¤ \øiPúüCg1:òde^¢¡ÏÀ$ZêÑÈ ÅÕ@–[±ŠóaFŽ]þÒ{˜t¡f€:^W ŽB¼0ÛLO”ºªàÝã�}ÆÁIÄý»*7w â§,` @ä—$ ëF´§!¨µ(è·È�ü¡0âïÅíd.2Olögã +àÎ4aUCý»u“²�ª×Ì—ÊÚ¶ ¨ABVþ>â}Ê=ñxc$%åî²àý{�Ù%¸ø è[¿¹#²6 Àü' âT{³Np×ÁJÔ]IÍØ‡4-Ž¾Æ´#‹ÑóE±},{Å4)a +lKXx—r9?Q>fqCÖõ#ûõl;ÖgOw-l6#}”º•©„!äë÷UûÕF4Pb„T̹{Ô•~¦þŒ5¤æ°òÇg[bJ´ÕË“@:eWå'ÿ5ñ=£¶z³Ñ‡Eå´Gª‹ã –&8~u<î?!q’8™è®èpn�Øæ¢Ò}ÞÔ—g%·yB§Œi"ÁÂÏèŽ7[ŽÝ2« +õU†åè_)R†ÚäC×uÕ%âˆÐi’i$L‚"DäÚH«öÿÿÔÕUW@Kܶ_]è¿HU;œ¨ñI;¾Ž– M,–ëãÔ©|„ìJ žˆU0@VÝ–ÌÙ«S{Óþ1´©%ð&Ô,/±,Áíi“žÛ}�”Ôýä×`O8E”a¥@‚«G«>4#6Ú£Í7¸RhòõÆ4¯pXÉ(ÁN5‰m(«ˆ¥Gé"^›t?ý��.›$ÄÒ;nLä½ùƒCôb´m×^.: Èe•ò&j/äÿeƒ,_+zóp¢~šDÜË÷'¹S|R:ÙÞbr|JäzX*/ÿbþ#ÈO@¡9z¤^%à¬-ÊfšZ ÊU¢ª¢ü÷”:œ¯áH˜ãÙ}VÕò—/àX;yò¹@u7ôoš’ÛïÏ +*˜IV[2dÕ_˜f¹R1="AÓ£´Jü “a9’P�†‘,S”ÌúÛin«¬Ún}~xÑâ!SsjyTÈo¸œíiŠ6®j: ¥;Š…™*�âij^4|ÔòU¼ mˆn�^Ëç>,âD'Ó…äØÝ/DãºjüXÌ)Hfò†`m¬'K�{©g Ú§ˆ¿ð/âþ`aïöB>ÿ1L²_À�Õ›;‚´bq0"¶ójÅÎ�aV¬”P{ Æ`çuäð(Ì)AlÄ.Wvêk$ãw¤_Ä2ôºí¦%»°™ú¨ÜU÷9…û„ážâN¬*îÈQì⾩Bay4G±§5Yã7ÙÁ. +þA¯›ÈÞv(Ò0*¦š™#%’# +©«èhK]Тhàz\á3C5\Nˆ¿P-DÖ2—{AiM±ý¬å09Tðö¬(Ø��ºë…¡QÁÃ2NÿR.p�R‚ë5ÇF“Òr¿Àµ ÃÀQ¾W,wœ5p” Üe„võ‡�mކc€bäÀ¡ x †ERB»W&¹¨Í*öè${\:·çå¿‚ÿª3|�2È /�Ó‹Óå`Nº’Á¨KY»�²£ E¥Sä$;ì¾ÑQŠî¿ŠV…‰ƒ¸|«'ÝÛ=¡G@œ¦¢!äß¶ø¤)Ã:YØH=÷ëò!]Á«fS#ø[±’2°}ö:Ì€§1ðàÍSÕ“gê�²úã%ä)~q 5šèTíÚ—£b‘� ±ƒ‡OÕgf@;¸Àau’ŠP«^,;ìP¦\wÁ¸šRE=æ4$ÌAMˆÅ&éVRõiaI-çù[=ŸR‹il`ØŸ´wº¤%ìLOzˆ$ ’4R +à&>ËIz?´(­â¢D¥ÒzÀ�c~+.Øe¦˜C(P†ÅcÞsg1Êà/ð:c?ÆTέ ;oIt¢‹2p÷K§Ñr0øøòù†«±jD™Ï&ZÇRX@ôx$Ý-Að>§=w; u´™ýÕQ§ñl‘›JdˆØµ�#á‰#‚ÁÀI°áf\€e„ÍÖ|2å¶.�ãšéÚ’±…™gU!Ÿõl�J E»|²ëãóëÈ åM<΋Z6¨±¦œÞ¥s�ØÊêR’ï:¯‡¸Ø ÔüÛ ©YÈŠˆ·•¾‹Rú³“Ô“¾ÞöEãA™dIJå± 1²zØv>p=U¦Ý%¼|óÑyüÓ½¡Z—aà0ƒ¤ £d»–?õoX¦RŠÂôU"^”z0`Ý@ãnUê )‡ÿ"Ìyïö&×/%k¤PP\e¥ÚUÀ«ª› w_@»êܱï–ë¯RÉϯ.n;l]Á~ðŸ»#snGèžYyA¼:ôdî01c,iä‡Áùå›sí–·R.oì/Kú£UPñ¢1ðátÃ%·,\ZŒæ›5™Þ‹ÅøÂß�Kb‹ú½½ý–ÇAû“öìƒíw÷h<biþ4èXÇ -îÇ^ð-ä(!·h·„ÈH¿×LxÚ0‡ýX#¹”€|Ž‚nJ©¼r¬W„¬³&} õu(²ÓŽ€�>f¬ã»˜ùÜÙ[­¨p­8’ žÎ ךApu÷êÝký„ñ*‡ñ?&Ë×¶L.¯è²ˆy9�|ù¬0N<Œû.’ ²J—Ñz+2iG?f—¿rÑ/ä³ìÏ¿ÂÝäÃe…=“Øé‹Ý“;q¸ŠYmì’cjãX¨x¦E£W33P(Þ0ˆé´Y”œ Þ½MÆ;ðN!œ²³D2Ð_ŽD£Ý1ð¼n'Mhßên™¹½²6r9’k§³RÖ‡¥¨Iñ4<›Xûa%ÆW·“¦ï‘ìŠÄù‚U¥PŠCk‚]·Q²ñøˆÊDö$è‘󨦌 ™)SÜg��_²¨-±â�D&&Qþ"óݼWôü°L�û‡¾’9›œ 0«˜ºß׆Ýýû…˜À[âc8øzbCxª(…|þ÷á"ŸÚá1ÀNó1O|yV„qJg&ˆüˆ/d0_ßÖäÈɨF¡‚!ûÎ‚Žˆ/x<µUÇ B dî#>göÌŽ¿„ùÀ´R”~ÙùüÒˆi³*pÖºk ò`ço¼ÀaÍ ž/[Çd ˆ´‹Û4Ø,›�¢†UQŽ=›ÿMF9{9AÑPa3Ë + mÄtIÚSätaT†Ô’Ê‘6.$-n„KÒ^GÆ.Lú¦Ï²$G2øÕ,ì>=�f�,ò8Òæ¶7á6€„BÚÖ 15¨ÿú#Ê©ø™ %€(oÂê£`)—e�SpxrpÏ3Ʀ‘ÂkdSûH1ò @›�ªò ‚$$ÙÕÚŸ/»$¤¾ŸÄö‘þÛ +1Ã}{í<׎ôY,Ò•@KTxçY¯Äs­‡l)›õš(j|iÙsà}†‡²� ’'&6ÀUeóg�n–¡ß\½šEó:~ºnBï>]›°Ê¨“Tû`Ö'»ëgõxw§q¹œ +ÊÐÁ¯'n¨_öF2c/.¾v'GŸŒž;¿�‘•çËŠSMGVCº•dáöÑ‘ÂÄhÿo ¾Ø¼=Ï<‹é88ùðo4[C¨©|ý£vûÂz_ÐrX’L*[ɼt¸h˜Siˆhê¶Ùq¨½ûñ£zäd­©¹Åþ~�‹1ù¨÷ƒ4„cÝ×ùÒäK4żâ/–o‰Ð~oAAÂíV%»×5÷.L|km//» $ ž1> ¬ÇÄ Õ"æRc¯Â쥧¸'µ JÍAÈG¦¦ôå9®žv³,šóON)–±ÞÌ.Ò¿)m7š)«­“t¦Ûóx~) X �\iü7w4 +˜ÆÅ JzXšFúT�-¬q;ÜšÏ4R0®$¨�.Ú2]-§*Oü³çœS#ªm§F"ì}dÅËÞˆ„^s˜I*Qèþi &°�*‹xÉ×j� Ú4ÆÔiqEœÆBsB¦!!)£Í-Ùâo´õV|�$j©Ç¢Ì�ØšÇv�G"ñ3‚-�È�%Ø)@Ú¥DË|<µ #-+¿Z¹¡¿ W®o2�–¤ÉùÏâ.Ìü�‚¸ xæcNCóˆ–Ò2’dMŽ`¥Ì�cP³ †|Àl!¡PÎNàÛ®ë +â¹û¾‰q¹¡Tx'ܦ:e¸ t²ÍgÑd«Í«†ÅTŸÑÐÙäôÌUéñB¤ç»÷"ß„ÅQ{=1èò�Pvt(sxÙḭ̀^V4;w2õLÇÌõzÖ�¨^ꕸÀ¾º�«»w~’§Aìydø£« ›ì­�ž“J8zïœ x4Ø|KÉÞH¶S>o��#îƒpÚy^j,Ûê +m.Ö[tP�QäE¨Ò9›ùæqhNwE|b(«}F Ó,Bsèé@HÃJ´Mþ;~‡Ù¶ñN%�ø’wñÌ>æø÷‘Š¿öæO¸nó¨x¡ß0/^7b<‰Ë¬Zù¥šT‘CÃ?œé§ÀY'ËH ,økÞ|Â}(åçÍÜc'v & ¾f€Ìbà7`6ŠÕÈÎhƒÇ †÷t2dgÏÅ$.tBËÀr{ÂQ€3-À4AoâwVðhð½qìÕ\RÌ*#ß×)ŸS +y+æœAo@ÍâF7¾~x«/»¹¤u šät‡Ø’lÔˆÇ�ÌlN\‰$6:5/9Õ¸rmÈ.¹øs“¦e¦óØæXûØ׿0¡™ê߯Fg�5¾ø‰S{âÆF™ +¢Ì)¡L¸AµQœ¶('ÚBª—‰\«™œÉŠ×¶È ÀÚÙž8$b˜�sˆ|b$½Gî5G>?yÕƒËFîT:$‘ç–vØjä~a:BÀm_èÜ È�BÁ¢"ÃßžŸ¬óê®}².€ÔWœcgI:8ãÚ%³šºWÂêQes§k«i•ê]:[ ñŠãÉüÂà| (ŠUŒUŸÙ#.Ÿu1Úš€¤±Q«ÇæÛ–<Í.Éöxãmgâ�Œèix~Ô«ÛRä@BDï’ë}‚õ®HjY'%=Ÿþ�s5.XÙ—eÊ’9�qòè#zÓPÖž) „5É‘ã‡L=Öh›[.SV¹ÅáÒ‡L ˜A¿§K> +ÝAKuiÀµEÿغÁ§âñù¹EÅa^ãÀjã0¶“½Lš“÷˜LHôEÎE*Ä@—yL–yg)s kʬPæKQŒe~Ê# +jA­0)sÇ”­@’uL¥¿Í–™.Š,®C&ËØ¼r/ò©‚'‹�#âw +¢Ìˆ/¾Ùã±<èœÌt[éØþ#5U1˜ù¯Y•ý'U\šÈ4�øòЮ`¹=‹Vâ&öã¶à¿Ý*M ~®ˆºæ£T¥2D'F9�¡×Õë.£Hk8»²‹aâ‡Kü®‡X +Þw£Z ÿg7Û}ÜÉ„R€€§û“"ýÜú“ºžrä{m’eŸûVÂíK´É 7té±ÍA¶¦ jЬXÔíÜ¥Mߤ:\•ÁŠ¥zHZODLÒ}$όћ�œ1ŒV;í "5¼¾h/JG-þ�µ»Òô"æ7ˆ3P'€ +ðÓ# ’Vâ¨íå•¥=73/�)2m9ç´ËÝo=m#ó´4ê´ßsG ÝiwÜ…€¶É´Ë€V.mbénç˜Ù¤XG>ÕÍ–s.Ä[�µ€ÛB}i§F-ØkN'T|ÔÖOûåT1‡Z/§Im$O³‚.ùó9&+.ïÏÛàŸVü³Ô.3” ¶§…��âÞ¿,ðTºÍ*+Bü6ȇ”šÖS%ñ`Ÿ~ +R*úEêšdï`ЄO¤7øÕûn ß§SäDLHØ¡äŒxÛ�¬mkßÛ–Z]ûEÄ­NŸåêv?¹]…$NäÂÕÀ‚T‰6D¥ ¹ 4{òÿÀø.¿ëå,¯€¯›•8æcò÷Mi Foe³„¯—AÙþo«åx�×÷mÛÀïþðÇ7�»s~Vˆ\?¡°^uF©ÈV Û—ä~zŸ¤ØøÍf3y}lC¹ÚÞÙ< Š"LÈÄÎÇ +¨yž/ãz1¯ .ï!I൮¨&JFDÐ?a€·Ïñ¯;÷¤½ à¸À7Zé�ÿçÌéF½ãIé&·Ñ§lc6À]MÙØ` ‡ÇÄÆ¯`ãßk,æe¶ë«°±&Á¿—ðž6ž«XÌòêT�VJì»Â×XýªbgE@–b¾Òo¨Æ8á¾^ú «�-©>“ ¼Á¡Ò_ùIÉ¡ ûšb {‹ä&âê$Ñ Sü—{]žÍd¤éŸ-°IŠý £ ‰C£\]—ø)×NûЬ^åÉú–Ê·Ê,õ­uMT±f¹\©"êODr‹ˆF?D»×js«Ým!ºlCTú!ò‰ˆ\8I%P]‹Ékõ€-0쑟=ÀþÁ@ý`¹Œ]³R`ÿR·Uè�>�¹¨Ì‘�§ý/1<€½Ú … â–ÖPxeÜ—ÇRì=ŒIŒ©µñ²9žGË�1�‘d³lõ®‹ÜÐaâŽÌ³ �Ý-W2}¸ä¸T:Ì0™f2ä¼Éž l9€ïdõéÌõ“KC¦ "C©Èô22ÔŠ™õÊô³>`Î ÛP†fÕhK�}”H#¼‹©? +;F.ýrc¡UF\)ãy"×G#_°¿,-<ÒúšÄ¬‘*ä<ÍÄQîú’%�$E +‹’C+¤)E:)BU +{+ ­5†¥§ñæ³äíáñ3òuËŸf’$›Éi9qŽ˜ü/í<†S�ô0´ÑŸÑä9�wd£³†E‘ŠÁYöÙ}¹d£#±_q6˜!ÃÈ•æÚ`%/ +ƒ†�—¬™w¢Œz刔‡²‡c mf‹÷‹ÀB0™Bi½×7 UÄTHÌAswiî?E |ˆ¬‹ÀPZŒ7™òö¿W݃ ”¥t¶0¦âŒÆ¼¿ : +61Ówf Cν#ͳTâÙ¼wÖ};[Q�aüýµAž34MgÁCLÔ£Kü™—÷VR>ãñh¬`ýŒÿLA@#?ÐìSÐ G+œ8ÕÄ¢i»üíDÀÂáÜp[/·‡~ðI|}`‹'Ø\�Ì�ô†ƒ a+4r-¶Â#RdÄž“±üHþÝŠÎÝl¨J9Dƒò¡Œu°]82 ÂÆb¼»ÿ³¤³�×ç5ν· ÿ1ौdüä½çÑ­YP·ÈŽhˆNUdqJéÐøI)±\ŒËΜÿ|›þ¡Ç¬L;»¨><}Ù6†gA*¡R1nbª6!6'[ÒRÕXTlChÄeì[ΕóPøî”“Âv¯A¶»;?…ôRñ�g2òç2L?�4½öQcŸ WÝ{ñ–'‘kþ+zJåMT„èÁYÛVu­Ó�oˆ¡F-Í¥€XHä Ð3åª +äÀ’cù�ý±�íGšoüȈÞòãJœzÚ\·Ö�ݘɰª¿ÊF�!UӳПj¯oäM5ÌT$�`3ï%öç<õw> ¿L×õgûcsÇ€,=9·Aÿ` +Ñ*Î+­Ü'³ßôëqÎŒ[kfàZ1–RÅ^Fói7ÕDv’9f?Í͇†’Lç1ñ:?EÁ_1ÉÎý5fû³µÁàôò5â3‹Ðlô[1ŽtªðÃ46zo3ên +Î4rv˜:KS¬•©ªà·J‰Œiao{h ÷¦õÞ)Fv˜[“½µ-n�ÔÔ¸¡æ¦5’`sÓ"LcTXÏUz“è[OÒT¿$HièD#ójÜê³ r‰K9²Å‹‘acP³Ñà¡ac[l�1M쪋´+ŒÑoÉÜ2 ·ÁÄè¹_‡NCßÜh|ÇIJ«7‡RR[vžL £àI˜¤; b�¶Š¥‘n +¤Æžh>Ý#~yön)z‘ÑoÐÁAÈå7¤8k'QÄià³¥s(ÂŒt�*ˆ#`:¾ý¦lÌ&e9Ë+½QÒªF°gÉð©U`å^Ñ'eJ·K½RžÐëÖ.¥/M©çÍ.ÛLMޔךÊoO$*Ì¡jæ­ê.Ê&e†m(E#¼Ÿ((C–œ‚áĞɀ£QòLïÚÀ îpâž-aÛ™›—³'Ø­€ÔØ�æ£{Ä—mÙ%•wdô úâÛýá•õ?ÁÕ“1Ê£\€ø&ÞAAF®’y'C¾$��Š\(h�-E¼R… °…�’hDŽ×Ï{üI¡ŸkÑldJ;Ü!�Ó(>„~t?†$Ð@Ši†óÕ¨T"ö¿ .ÆôaÄÆ*3þ*ƒÂüh‡JP¸ƒðBÄŠ�ˆ6œˆ‚ÇÒ=EË^ïšyUKEfv4Æ�"Æ;¿È°4{ ×#¾àuL¤&l×XõýùOwº”ÇÇ·íu™Õ«Ò\EdÀuóøXåóžR(�7”ëÕŽBÓ;ü†2¾ ý3”óÈ´ÁZï%SÊL“™ñ[L±?ÂÔvú!ÆŸ9ÿ øÏw–�Ï¿Š'k‘,‰\=d:Ú-<Òƒ:\ ®zr‰ëCc{蚇â¸C}MGÇËöeÏ}eIÒRPáåFè†]!†iÏ;'ÔÉà±ÞYQð‡Ñb†™_¬ =¸ª÷3 +ûxxÞ„î�Å2ñîî” yÈ‹¨‹ïtÚ9µV¢jƒ¨7¤›°k,ýH?¢ô¢óCÒôKúyB¬õrS#G8¼zøù5©¾õ-w½€±ö�(iì.{JÏ3íǯ½yÉ¢—µé¿ÍëÁÀãyT÷ûé£$îï3½_ £ ƒæ—åEäç}†Ýl”îѹ£wÒ båx¤P'8ûöYöɹAèíx#~áöÌÛ�áöËàk’déØ$Y¦’{7?±%Å…¦Oô8¹ud5ø¾¥“1ÉÀrâØ‹Òê­ TþÑÏÁBzgèeìçY­E‹.;½âëýظynFF¬‰ÇqXsõãm X„ÌÁ„�*~v6ºf¯0¹�·ÍK,€ËšGÃB`»Z2Z ÀzëÙ#ÃØºU�*·]*ä}×)ˆ …qöxt¸ì[)I­LWÅÎ?4ÍàœäM›AWd~rÓÉë¸R ;V·³ôWoˆ£½Ûƒ¼³NxV¦’b÷xÌ�¤}Q:êä\¤Ø�òb=ÝW^ÿÞ¹ÝLŒ¸Ü‚è÷ëœ6~òYØ�—¬+n©³ñ”Íø‰Ã‘�W…J‡œƒ¤o¼Ï‚n+ü(c̨–',Úá‰X�4éĘSL®ÚQ�ü©–™�‰^´#ªWO§Üy+¥JÜ{3¶ó×Ñ‹cå:€™ªz#ô»›$…èWzî¾ßíVKEö&„Å÷©'Rìtv5ˆø^–÷Ý¢ä‡ØV°èò$H½ šϦϢ& +ÊO•LŒ{$�æáãéÅ afÂêATã«Bû“AW®ìüq‹&BT£�À-ÙšÞìÅjïé†Rt{MÛ0(�êàº;–‚îUÚ‹ÇW œ¥ —�aŸÜUu,NêãÙ�ˆdû]HÁƒÜ#y`ììíÕÏ�¯ùš Q$Æk8v÷"U$§—í:4"c¨ÈKó MJá*éáǪO æ³ÏwÐi2Ô¡æ+ çu€ÌC!1{ðË)¶LOY†wå©YeïRÎñC™s&Œ%>GÞ–$^‚üƒVöà,r@\l¿6ñ§Ó•œ­" uuSêµ–"3”üA5–‡Áƒ"ÿ'bi·ª’!o‘õÉü‹¨C!N6猀Š81‰ÎáÙTYÉÚbébª?¸›Ÿ ¡ø®`%à”Á-#ûªH®ÌM ß³â9òUÈãÃ]¢èº§¤ßI$79Ž‹¼GüØãçá$ÕYnqfÇ›Ô +Æ»&}§€É&"s£ \¯Ì§1²^ý‚J/vzš±&C7PÔ…B¥±MuRsE|V=ƒùî ýey-Vw\ˆxŒ{93âX0ÑF§ÇÿÐr8Ò5îF>Í Ô e5BúgÀdw¸ìVš�)‘v{?µù¼0MçeJ NÔAt¨^q怓*V ¸9Œ6½ØL +,)‡EnÖwÛ*¶N�D#6Ýž”«’ê ¢3ãl�_9Ùk‡^]€pBå@·™¦eoZ1•ó„Õ+*¬Çª[¿‰ $¬Jª¤z¤8£÷¡lé BÞÏô<6×#9ÿ@¶Eð¨O¼£Ý幉ÒÑúŸ’lß"òð_Üš\ dÝ T,ˆÐ%*Ð@Èý' T¸�>ti#%ó�ˇs2å¨ñf†JçÙä7çþÃÍ/,˜.ßFô±—üý©ô¢a@<�ºSu«kuŒuïL0Ê‘ÝËd¨Ú +3(ÔA¦B +ÞèD�ìÀ^CÔT,B`QZ>ƒºŸm¢Ä´k¯Ý‘>ž™’ö ª€™‚–ÒëU| ¸ó|ßËyàÕêwÊý˜ho&`özgÀõòQÿ7| +oéûÀ]ÎÐEØ*£ ýô'k  ì� +ŽHÓV=‹tÚ% ~fUOù‘Ûéж9d)¨v ¼¨ZŒ…Jb3:Š€™Ì� ’ÕÁIUR7Íÿ—h·Ûˆ kÅ„úž·ùÑ¡øƒ»84Rã9ùu‡y ÔõbNtŒXþŸÎ*ikG�ìà��â�¼_Ú~ä¿#Ù }ûÆjC86Á´*ˆe€üBþɤz«½ìã ¼ÙJOȶxP/=‹éEÃ^’”ã3§ö©ì�•àãðzlIy¡Qcç‡$G˜ðÝ£GêË�¹¨þ=šÍ�®ïÖ�¨LÌ(½W-ÞÿRuôÒ0‰'á6œ¡WÄ´Õ¿Îy!3½»¦ +¹ÇL3”Uƒ9×ÊàÜ ‰­¶Á-ü&„µjÇG$Ó×¥ž|»+×ø-�˜|?„? +m?™jÿ‹æ�¡¦äʯ7j‡¤éZo&YˆKí ’ +ã¸$UºsFã&w+Ú‹›ºÑVѦÎþÿž¼fý£œ0þóX¨ê×ëÖ]#VáMøã"!2®Ó‰™(%$Ô�ÂDR±"ýv¹+ìQ¼äÇ‹GçăF5×¾3çsqö¸�¥�«ŠãµLzªÅÓ��s˜låj"­Ã}2Ù]Ã0®Ur¦Õ(ÞÿÉlÉéÑEy6Ž­±ÔoW€§4çl@ïü|G/Ôìjb‚M,àŽh"6KÍ&¨¤ç¦d­m…}ÐýÌKüC�·²{§”‘uw)Á ó2ÃÆIJMWæ–E{(vNkl<ÓXjbg–·}•YÝ‘ùÚÊ×Yg$okÄåñ¸3v­7ì‰ô,ù¹nt¾s�‰ÜÎDn5;9ÙÈÙùHg‘ãX|>ÛÌØ§f%5²cß”ã-g±gJBñ¹xæ™=¬×}sÔ<>)‘'fòª¦�»]·YJ»Ë¡Û±e,¦òÄ3¦�ÐXx.yÝ;:¾‡<Ïô�1MY¯nhcYwyvC‹‘yû2eŽÔÌZÎü2ÞcÞcÞ\áKÉäíÓ›Œ®–.âÕžáíq�e÷<£�.CS§vrtõ¶M釾IMÏËÞé¿ØߌE\s”ØÊ·â£ÔÄVfÃÚW­¹ÚÏ6U�¸b‹ëcòŠxΤb™ãWša9DÓ“¢³…Úëñus=²öx®w§«°<5d®‰ÇŠS‘©×é¼ùÎXµºbuM™éXòÚ­ul•EãZù“g¥˜Vw×ǪsNˆŠSSyd½+5öäõãnˆJD”ÞSµ;ªz«¥fºT™óŸ”ÔL¶Ñê‹Å&¡!š‘ɽ†ÛlŽ{rcêùäèìË{ÛÌMì2tЕ4W4¤öj±#ª\ïgk_íXç2u·ÛäõÆ5Þõ¬vÉ +o„'¤9>¶ �#<>&!“³O¦zó±ÞJEªªujª®‰ÔQV«»i¯µ1í*œq� …3®°Ú:©1M]µÒ¡…~4zZó.®ªív¢}ÃÚer·ëtÄ%»T—&Ë�L4§žmÚ¦í×ÐöQöxæúÒî{\âéÝHŒlÞ誤CÊ$ôÍR-qÉ�…x¼ Ëv—9±¡r•iɆ‡˜ÅæÇË%eöre�Ø¥Ž“÷\ÞãCx~ÊvùŸB'õlzûí8gû±«©ŒùʤWÈLv…Ì—Ê•ÙH£˜YJråÆ1»Ý�Ïk—¡Ü¬ZrÜÜh<. Ͻ¾l(5:Ɉê4;º±†hftr™™þ*ÿ«™Ñø0�6>ÿRx6›læ)|•½"!#ó\Xd&<Î_Ê£g‘Þ�g +ÏmÍèóÿ'f¬×î³2·/Š眺åj~Ãcꯛ_2bV/Ê¥F;Š^³ÓǨ¶é>Å9—ä�3QîÌfüQÌ|Åš9Nn}{–Ôÿ¦÷d%¾{îÙ›PèïðGeš3óÊ]¼ ËæK¯ë)S‰Ýn6EÌ—+ß̫ΧòÕTú“Û,!ûJN®qÈ#EB&KŠl‘N ‘‡*WròIˆ7 ©8do +ç͘þ›²To—F;jÿ¶ïÄì®ë¦H™<›í�192剙¼K®^¤ÚWDT¹�¼ŸÛb=¯¤>Î>ϳ)&rtSòžŽ�”É»n»)¥Ý¼›wòŠd+’'Âʼ:sllvR–ê\ÝØnìSÇsÝÅ+³ eLŽí³Ì+ò3…ê\v&rVÕÎ*?Ó>ò[|•ií¬òûÉÎìÏÍ�]1áxj~„—¤ØÊ½x™+7swœyZÖÑs¦ëé\ís4¦£]}šxD£Õz¤j*I‰ïµmì§Ô%M“ÄzkÕxÆÆz#m¬6´ÞV%~<ÒŠÏj|µXI«%¾V)§QªôIÑKΦrÜë¢2½7_“ø +“ƒ·‘ßÙßÕQ#õ_Êv6²__6É&.:‹ãÓÍüL¶ŽOè_ZÅy*þ1Ô!“¤W+S±·V†· ½¦×!5¾ë*)¹óü+}ÜÍ›‰h>1^Å<¯_ÛÊw*?bU¦£’Zå«ÉPQùº*ÒtHW«[â!·�Í1›méø*Bë­v›¬ñ©æ#9ùØe-ÙÕ¾É6åU$Þ”;âßvÆ3vü•cš»Öö½!‹ÑÍîÈGb{§ò0)O%íkÆ÷Ý´Cie„cš·­›ñQKäs/îÜzj•+*šû7$úO=;Ž7U;h‘þ®2Ó«‘›«³õ´÷8ý¹^oÍi=¶�¹©ÿ0â�‘ïs]�mþcù¾ã#ßÌð�[1�Ø~L[­Ó~e”öÓWè;¥Â2vnw˜�Øcî¤s´¡ÃG®Ì‰‰L¡’ùQ„¨÷Mm󳊹¶êæWW÷I…‡MkÌأ~Ì’ö�°çÒœ™”�¢¹œk¦_#åÙ:;ÆZé]Ùæ¬Sì™¶!ÖÙš˜ŒR²9ÙzœXt­}�«9hZôšñ‘-¥1ñôS+õ(ÑÌ[5­=£©Y,©!zZD±·Èjˆxôq‰¤u˜ŒÆG/éÍ?ž9ŽÈ²l¦½U·ÝU¿ªÙArvÙ^U>›®DEõZÙÍ¿Tý(ßusC*¡£ñü …f8¼´EÒ §¤sѾžîC�©Ѿ Í=–ìl~>}ê½9âO¦-±•_ò^ëýyµ=ÿhOõ,ֺ͘ÓÜÏ3Eÿ]DÆWœ_Kä(öfÎþ9^%v?ù*jÝ=ﺉÇHtÖsÜl¨õ^æ|æÒÏøŸK§˜„z|ï”Óï¡óJx5¶2³—cZgªHâL•§æœ©Ž‘ïcE¶Ó1O‰t\‰ÌGµ7Vç*#S�J+ò=·šÎ�±&á�2’lã€ÝüŒ$»ZòÛ1¬Ý�vxèÖt›:Ýô²•iUÍoX:˼î–:êîbéê!‹¢t4ÿ±—_…mÑÇ‘/52¾k?ÊÝhc¿Û*ù}~äó^-'«þ¦s)KõlÈšê#£�3?FÕb½(–r|­Öø#DŠkת*Ö+ÏkÇufˆªäNý®uœ¹â£rÿmÎÌgâáùÒçGÍùCw¶§úG%ÅPêúwŠ>ªá!Õ··–…Y³XiŸŒÈäŒl¨^Òmîçc‡o;ËñÙ1Õ{ªd¥I21mås«n‘#æ!öÅ� ]Â=U?+´köŠ6O‘¥¥4Ïl*«‘£Ô7ãIQ�ÖF;olm]·„h<{.Gv™óÄ6åþ�ܼ:OÇ#%~\»zɄ䒚dÆî¤®ädòÔö’“rÉѹZä3õ.Ï^´›|¶ä^ŸùÕŽùbå_—ÿ§mr5–%¹É½F>6ñå8®º|,brtÅãe²£²Î‰7Ç Ï¤dgRÖñAlÍÊwkTÇœ]{�õSÓ’r«ÎJ2Ö”SòûºÏ�ý�”Vw£ˆôUÓPÇ|•–˜H„Zx¹>b¾{jd›—Ž>¢ºŒ}溟ÝZǰˆjºêMÑ.9‘nÑ3w<·Ž^DbÍե賳¯ÎH%Ç基cì'×-'»äÆäúé#Õb—îˆM®4Dÿçjgåhî£ÌtVÖ*7[Ku"5R·š·ž�‘RT›úFä¿8¦±™B2²¢èJFn£�êô¡“¶^–% /R_ý9oJ~DnÕ‘BÖ#[?š�›{D¨Ÿ’îñœ?ìßY3®ß+…""3;>Ÿ#¡ÛK¥çswÈ3+;jÙó¦6qÿR•Õ™Üí”s3ÇÚ=Íï9�jÙ³ÌÝÔZÖ‰×_]Ù{T–Ÿ­üwS‘ýf«xXÔ¹x>sáPÍٹôª‰¶*ýÊZKB2±›�êAf +9¹w�¤ËO.—¿§ÛOØŠ”JhŸi¹EßïjÇ2Ñ�Ьº²]ÿ‘ÞÜÝyÔ»ŸoÈîpY÷£ªâ¹S:iñøšNMt9/ù¯†cÊXäø!«S•9–•Ì_“ôYù£Øþœ^¦%$škÝ99^� ÒðLz+sLÎDÛ•NægbB#sCšøÓQñ'c4âÅ$;jî«‹™?‡‡Ðm~’Œ‡õ\Ùóså\ãóÃñ-â×GÏ%vfõ}nê«k­õ-Ÿ�H¨Š³[—æÏNÓpÄ-צȆ:µØWêÝêSåj“Ø¥s’3eêè9’S?çŠÇ‘c‹$þÉZ'ócM~$gHfŽrÊÐäß6=ÝSùÜ7½á‘tȱc+ÎÑq8¼¾„¤aE¦ŽöÕNÆ~äÒ÷ÍkžŸMj©Ö¾*S¢Ɉ]y¹¿*Qi§¶>£ÒGõY]cuvÏG¹4K e¨ÎgW™�l}ý +•Ù& ]‘l|2¥ãpÄÒ'­J�¥÷âU‹t«D³ù�¨Ó“2aÑŒ]u¬3ýÕ¬´–kdÏ{zè>¼ãôXJS¥cÏœÑ÷�­EJEb&¡z¨d¢ˆ�‰ê2›¦gWêÈä:19«Ýa²�ÕÌIÎÈe* ÙÐvŸ—I¤Üª:‰”+G¾¢#1²PɹC2½Òe,#•y ëÈõ�F—éÎ×/É‘\¢�œé÷.Tžaý<¬L‹Ùl¾ÉY½XÙêvÊ'-Û¥†ä%D‹ˆÐÆÄ*X<,ˆ †‹‹F (`84"8h,8èB‚ ‡ .p UHÈ(¤,]� +4”Õ + (,"¨ ‚Dª©ƒ¡Bê€ +2*H<Ñ`HX840<4àaq�Ñ<�`2QÄÂ"¢Dt!<‚l4ÚÐÐÀ††khhhh`CCƒ5 Fƒbbâá�!A‚ÃD0LH,"$.`°à�A  ‹ã¡ÆÃÁa± +(XD� ,4404  t"� +ù FÄZ�A�…EÃC ÆŽpÁ<, † \� * "D(*D@X`80Dd`x`8\`±ˆ À„ xpáÂ4`Òb +" +(mN0ȉ… Œ†–` , ÆŒ`¢Á€h/p�^¸0 X`@â‚CË $.˜˜`Á"  PÐ`LL €ñ°h@T¸Pi0LH4 ˆ`x°Ð°¨ AL,$$H€¸à‡ ÁÀ��°ÀpFXxˆÀ¨`ñ€Ã„D-€p`˜0Áâ‚ @ðàÂ…·Á/Á€XÀÃDC„„;PHX<ÐÀC⋆ 4‹ + ÆøÀx€Ä„† ÆÄ�‰ ‹ˆ&0L40€‚…F �Ń…& XD`!ÁaäHL0�áÀp`Ä + @ðàÂ… \ … + ,<0T°p€h`4 Ѐ"! ˆFŒ XLXˆÀˆ˜˜`h°p€hsrPÉ븒�@0€*sðŽßÌ& ð` +—}ˆB&#ÕÎÕozŽç4EQ ÑŒu3£CHP(„AƒA^K D ¨ +Š +« & �3¨ð@AX0…0x �S(,X,€sh‚!x˜h," €@�ñ€LD‹‡  ‡,*\ð ÆcbQa!Á ˜0áÀ�Í4±£­„@˜h@Ѐb*@<à‚E H, €@�ñÀ + @X<0À°� E�\" X {ÝÍDñ;!±Ÿ½ÂóXj|uÅh²oŽTr¼…7�ŽŸÔ˜Æß«Œu�ui|M6{ü9šO*œ±)·ßú¼¿<Î&"ºIz^™ŸÍû÷�^c—–rm&‹œÜ™yDJVŸš˜lNÉù} ¹„È=òi³2ш˹ª;2å‘òX*¾»­ª¦„\.9ãÐAdW‘/Dó)¾¬#DýUn¶‰µœÙD$W»R¶©ê�²¥fÅÊvVyÑYtfò³£ä4òR�]^ç‡C’{™$,×” É}ЍJã;³óYdÛØÙëR¥Lå¿Ö¨´�•µŽr»óÑ}ä˜+$-›�XîŠR‡�k†Vcw”‹¼h/;›E~~yHŽ<õ‰äÈVt",)ri©Î©y¹²µ—ò|.T.Ž”©6�\Å-Ïœ$,—„å±ÐJÎ%—Õif/©ºÃÈG>ò´2Y]E²ÕÔ™øˆdr6Ë„d3!‹�2Θj¼Ü�ŒeJFŸ”ñmÞ-=—·Õwô‰ðzØøWãϘ½i¤ˆçÙ5–$3îœÎ†H×Ñk¬nS}xÉ�L�§jWf7߸谺*3õÑåyYM=îAuË߈ÇÕ2<#«¹ªÌ'W·W¯cÑÑ-£cÑ +²¡ËÑùº”ÓOåÍ}cBUþN.MšÇÄŽiªÞ Ëxfö*ìLf>ê_�Î7u+l| Ïl8÷º£3×îÌÄ|Йý'·‘ùÙœS¨ô±h5«œJ4# #ñxH.±þ€Á‚0B‡Ãá0XLfÏ0,€C0gf@ÄL”ò³í+&ÜSö |wæ)èg˜€Bˆ•ï€ùé êfG1¦‘¿44‚dHã-€#~ÑÏ…‰P*~59]À ¨w8Œóê½À‰ÝžV„e¼¢Wp)‰b¤üÉ ¦xýƒOɼœ´\¿D+'«<é">8bHí=©šÇ›ÎgIÑ#0¥YÝ´¯¼Ýα§tuÓ8ý�ìf[žQÕ±O­Mnž¿ƒ, 79¡ýn,Dܲ¸ó ?T›/aäûë^Ý¦× ‹åæ�ônÔf:ƒè‰e¯ýAv�ҟʰŽWÅ®©É¢$~˜Ôåóµ�ô«âT~�8DWU+M£ñ¤_áàž�ž ¦@ñ·ÅÐϪ¹-A›ødÉ‹YÂMN$ëºg™Ê’A å.ü@WÊ0;/$¢a )£ ™šM)×V›Ë˜°Qt‹~­uŒ¼ù•ûkò—fì´m˜@.z�qÕÜt¢øF0p ¥Œ³UÊ�ár„`oël +á�òÔ;…ýÚ¤åüG1TZ8âò¤·DÅ"fB½¸†ó…ÙÚüÃ%çÿN|oñ½3œNÉÅ9ècôQÉÜ Dþ·j³äJí®eÖ×¥¹: :ïÛþ-ýéúúÍôæ™F=Þûq+ä>$p‡�õwâ�­­a*¥ÑåÙ�¨™õ®¦³,ËÒÓA=÷4GÔÓœîžR�þÏþ�«¸¦£ß£ïy…”ꡯ˜«N¢çÏ0hÜ9*?Ç x +�£±]mœ3�}´÷ézì3î€Ë³[º ·ŒØùA¿Vš(dÂ΀0+@ÜgÜ:ubë ðÛ ÷òà]N&ëäwüÏFwIü5áåõV¾JLS“_ªø3·°ïÍSw8ñüŒ×<Ǥ±LbG¤ct`ݵ B›™{x +#ÃúŠœ¾sÍuS”cÃÙ-¤ÑàÓ6£Šî¥ ¾§r¾ø!Eò´Žÿ¨ã‡—ñÍÎYe•™”=¦ê²„èh²%ᡎy�2²Ç„2.ÖAe§™–é#æzG¹d‡—™ �¯o"Ðû!"ÁÅRæ¡Åaû”‰Ü‚�L^bÄcäïÐ¥ ¥‘;Ú,½# ¤ÜøÙZ­M–W¤{² ¯®­ J�µnº! ˜»%‹T±"°=ÕMV+‘¸àÅ/+›”c%c˺ŒöƒU£CsÚžoבŠ-YÑv ‚3'Ó—Ì®GT”*é�«l¾Ä,5?ã…ñOkÉ \ §š?”å‡&•lþÅ>u"`¾·a*îòy'ôŒ`A™Ñï‰â¯ûK˜À#*Ê� +«s'‘OYuÞÐ7yG—……¡6eiì¥�É‘÷gâ£Hýã�:±žá"vÅPWdô¡£ Á1JÂÿjRØ¡8·|fù´ˆ®›Õ•*ºÂ(–Ïw]újXí}íì5Çú€¥ß +- æ:�>â:ŒÊF){“ù‰2k¦`u4&zäùUÃf¨T‹]VJ,J”+ÿ :Jln¡¾Ä +ýñ'éI†¥©÷ÚÖl&¶BVºÐ�í$·¯“Ùဉ¹2ØD»=W6€}Ø\{‘Ò Ô_“ˆïÔ�¯ÌÖù–‘™aµCľ…�¢Ÿ,©‡û×k*vëc!êa.JîáZ]ÎoZt“M]Löä–“+ŠÛ�rÎcÝõ¼�c9>¥#�ÿU¦°¸®ìnþØÛT †à`'†Ñ)lt 1x;¸|"þºå‚ÿ–u×sK)âj!ô˜Æñï)㸤lñ8*4×�ü!Aã,KžÎnéÿ‹}’�íÖ\;½èÌ'×Ç%mïŽñGëü�À%*„³jt:qÇ*”9#Žp«ÆXý—&�•®9)},—K^Ž ½xS8a[{ÀÖú •º ~“�ó€êã¢òÈ£ª—½Ú¨û.#_tèSuúݵŽX¨ÁÙÈDþYkj{9©@¯F,ó-c< J�@]ªÌYf˜_$]‚fâsÙRbf¸®ª)µHpΩZ÷ $ +”?ý^gM-Ë[ÔæTeÓ­;1úÈQû¼X”p92ÔËI¤‚léQGÔ£?çI™�Ÿ»D—î#=Ùíp+Áã·:XÐâ웼�ð6÷Ç +p�q»!Ö×I_?µÑ3R%Ä‘~’PÕÌçz–p¤ë”8å�®sRjϾìõTßîDÑ‹uª5ñ‹kOà§�@†«I3u¡<ê÷YjàP¨Æˆ¤ø1‚4øù„»îøã Éxm… +¯juäGãb A¯{)T§sQÇL§¨¡rc�^Ç ¢¬'6¸´3hXÌÛû÷£c…(ÍDw2Iž}iŠAAosŒãöM¸‰L±†óÂ0Õ¬HUm?RÚ¼�ªþ‚jciɼAèø‚Šh°t‘¨àöý£LìK²’)¯3+¼3„BR#‹=|¡v¦#} +ªã'šÒ:úb¤í�¬ÃM¹¯_Ù“$\W¯šÜv7&¿>È"~¨š‰KÂÁX¦¿mÇÚO`tP0°Ýô˜ÿ‰ôHN¼ÞÐþp)-�ÇNÝÏitCçÈïó³‚ï/Kq`Û?Üé¥ë,ňH*ÌdÌd c¯ º¯òD]Bì†�©ÿsDtáDt¯�»,�Ù®[Dƒ]ÂÀÚ+|”äIDW4[÷ê»®Ûz{ ú”ÓÄ¢³g5Ó»ˆù›~9ÐGi‚ø¼G9ýh.Û©*bbW_ó%~:’s Þ/ª‰uq0ýPu¯n<•IÇ[èÇÉó¢ÒOKbZº=hý/±%¯}¸M³€ÛL ‡‹aŠÆL�\¸Í9�–+Hɶ)ya Ðb˜KÜVÃn“�yIŒøûFÚ¾ûÅ.¸må…Á²¶ñÒ¸Va¯Éµ­ ¿álK¥_/¢0±f™ #è�Te¨N ¶qGaÖ®�'‘µIç!cm%œpŽ\çç(GB5a Ûjö>'LEaQ´- “ f[A ²Ùv�4»³ *'¸¹¶“0SgÅÿ(¶US„�}ø /ÂEÊc›G†<ÙÌÉàÁ¤U7˜Š¢±­Ó3E " �®Ì8ÛÌÿ'°Kà2JÛª0Å�Œ¹ïÃðÛBŒÜÇ®ÍrC•µ…O•=%ÜTÝóŠB¥VCü`œÃ2¯&Œ…ÐÁdYnÏLŠÁÓbUb×ÖŒãµeÑÁTfm #®Çe &AÕFéê2µ%µ�L­•fL+ÔY¡"µ9ˆ ;˜¤€0UGÕÖómÕ†6£µ!É@³6êæ ‰'k“˜!¦y6t%#Õf£òi#xRj£Ü‘Ú"L£‘ƒs#¹Ù¨­Äj«x«¶¨Œ+�·%&Aà‹ÕVfÂjmŽ [İÒ`*¸ä`$XmmÔ‘D%ÇÏ9r†Å¬�5A æ©ÄÇaföZfmòv£ä` E,e…Bk3 ¦ˆgm + Z[hÆÌJÇ2=C0&è`‚êµå­Áˆ¢äÈÔ`záµÍÂ`¤bÌglÃ>Á˜Ö) Á$žm?0#ІT´�V Ì…ÈU@Z`¼´-GCŽ´Ãd›ö9"Ò¶¯Š*®d› £Årx�$ÀÀ¤mÌ�lƒùñ8mÓê_dÜ6ƒýå2mCY¢¶QVØÂš&z¶¼˜oÈË­kHGmb°Tð¹|ö—�½AVn“Õ¿ðíÙŒ/—C4ÍìjÞ/$áPªv›Ž�½­Qÿâ­ÞÙ¿¨ümFSû ЉÑãàv² ܼ¨ÉÀ#ÑþâI„p3áqc®4n¬ñÞÈ-¶ýËÍÑ~ijn{Ñ/R?7¦’Ì Ýø@Q· ïK©uC־ЎÝ:¬/l7ÇèK­» ¸ñ»É4_H‡·OæËjäÍÐ-K‘m¦pUì™ _FÉۄׂ”�Åï¥àÞÝ‹ÜäöòØ”½L [/œIä�H½ð'åJQ¶^º ™CŠKëÅ�x[Q/""�5Œ'ž0�¸‹Ñ¢pxó ^ †7yz©ÂÛâ4 ^pø¤^ü‚˜z�ìÝôŒ@\/K}.BöRÐ{è»]Ø^ôDtpm–Ç W÷ñ»ñg,hÆ €îe¬Ë$3ä^ªèð6:乤_ßˈ߭÷½à²ä÷—u#ü½Ìk‡·»—®í…TdB¼9d/l‡·V0¼UÆ^*¶—P +oÁ€ð†–èÝdÞjÝ‹¡ÂöRðwK¹½xUï^"~·à‹§¾#f¢F3 |yÞZÑÈô™Ã›�,¿…ïï†ÆD¼�/r8‘7ˆü½ôâíøb®Ð#oV‚/ì…D’·’ÃÉ{!‡H0ÆÌ×ô^boQ{/6†À› á �à­4¾¬<ïæƒòw+k/" j¾¨(ÓÞ róȽ�qYÿ,^·~s/ ¬�cù^\ÓuãfxÝ<¿Ðð…ÚRuËãÀë–û^Dg7¿‹¸[É÷’Ê»añoEpoõÜKŽòGë¼ |/b˜Þ\ì Œ(÷VAøÖÖ–o cT{/˜BˆhˆúFú‘¾‘¾P™ûVCaFù�9ø"ÂzÜoò›ù¾¿�_€Àu-_Pp¸®ÀÕÎzùÂF‚+,_æ-8‹i68zã îƒë �Âu„#_H pN·Y8‚0\'EoX ‡2|¹˜Ã±¸°žç)|.Ä¡ÄÀˆ« _T†*q¾ýU¬ ÉY6×Bwqó–§³ ŽÆù/¹Äiê~ãÐqØY`+xë��ã:¾0�\¼ñ¨…œ5V.œÈ©_Sî¸sa[ IªK“þP\6ñùõ?n +z{·ýg‰(©:Íú�8׳¾8""CîTX_ŽÀø²˜ÒÓªõõêËU½¿TK ÙêËù™ãÕ1y½¤võ%Õ“„lL6¢/�z&xÊŠD_D»´(.‰'úH¢/_8yEÜ©·èKÅËÜ�48D_âO\˜ 8Ûb¾øvAD<”—¢a÷,µlè¨ùè¦ ZZ­D²œRi­&—/¼ÚBÄ^¾0—lÚµa˜Õ—/µˆZõº?äåË2a:«‚T|ùÒl]b†«J½wãøÒ´¥¹ + ™�‘ã‹”B�†`NãTHhF_0Î/ч®&¡¾ ë™HúÔC îÂu„Ž�gøÒ·\ÁÁoófø¢ Ò9Á%=¾<èJMÊ2›TÚ˜3†/1 +#•#os³3ï{ᥣsß P¸ �i¶zvßËg ê´Öò†ÎvIoïñåmòåËžj�¥/š†| € †ï‚|é_ v¦NGä |HHzT›´"_ØížµùâÞ v‡¤!ÔæË‹ùŽ)>`¤š/˜§ž|;GnÕƒ� [­Êk¾X“º˜ë³$7󅂈èÔ=º•f¾lôü¡3K6_ø·Œùs‹]ÔÍ—ìºtÛŸçµù¢„]›�/7bó%k¿ŒQïÄE¨±Í­¢¡"#pl¾LUçº îø›/+äjý 7’äËÆÄ¿Fhð™|aUþ¤É|ùƒ¼˜=ùΕÝ]†õt7°Mf—| +‰0*Q¯ä‹¯'] úë�ÚÈ—+b[¦¹dñaƒ‘/æ­5 +KùH*ìLO|ó�•�nÌÂ6—2ò¥KÖ,Uä98Žé‘/åZÒ|òŽóþ„Pçük¾L|P-‘/â*¶×¯ÈU–C �|ù‡lfùéQóå'’Tïà>4_ +5˜§&š/(Cðø0CÍ/~– *“HäK^ÊÇ7>.ùâ>;”ÔQPó²)̥˘Ò|q<ãù4_~D 4Ôk?X5_ö9»‚Ó¶Gš/ù{LéÄo…æË‰ðCsÿW¨ ùâ­‚Ó�ÔØ§¹IóåhÜ-ŠÔ hÍ—†Î±¡œÝéÒ|yÜxñ²¢¬�æKé¤ÐdÔô×|YR§|óàKk¾X¬„œb8÷Á‘/ÄÒº“Ó[3ùÒƒ + �Å– 5òEz€)¹W±:ò%€òbb„ +ó•¦Ð(tÞ4_IŽQó%ÀÛÇ•ÀÑi úþ•�¾,—©Ü +;lK�uÒ—%@âTI_’1•4À]�¾ Qcõ0#Jzôå�=ؾë±mô¥@ýÈG,côåÜ�L?" íp<ú‚ø}B]ú`…£/#Ev0·Ô|QoŠÃ¦æè‹×ù$UÇÛ+ú"ã<àŽœ�e‰¾8IðÁ�q‚‰bçûðíá™èËÖr)0ÿÉ73ú2ôïöKéæœYó%zß;s6tDj¾,�ÌH®Ð|©hWäŽ7jv¥G_ð°"Á»x`y1.wV?úâ— lÔô¥à�ô¥"¹¥ ?ó�¾d©Ì ‘é;úR¸¤EâoT�¾øö¤jâüŒ×9y0úrt![¸X4=Íÿ˜YGÆOÒ|©�(8 ¤)A† JAó%ZfV†š/Èjä[Êvä;„F¾¦lºæ z”7ðª"fÖš/ai™­ú•Ñš/·PªP<¶(¢™/¯:`(UØím˜/Gì%æ Arœ }¿¼kŠpÕ—Ïç"{ û¥¾è[L2ž\hR§¾à�âvUÑNMXS_ÄìpÉ~Æxê X.‚pøBAê‹7=â(ÃU}™�šÄV_˜˜ÚnA™lnfõÅY³³ãÌêK£$F!i_DVg×ö¾¬Û¥•5$ÚÜÑûB‡ù”%Auñù­é}I[8jÃò6ÉïË2~³6q‚ÃÅï˹Q•ffÅôûúëk¸eìóûeZ!-c=_ +wɰmé‰>,£ý¾œçûÕïçÉ¿/¹/ÚÐed_VÇ-¿ê Òø¾x‹¡’œÂpß9¦<¿e2'�ï‹^´aƒ)pø¾„icÞùêæûR1»½Ù¡*£ï‹öfÃÿu„ ù¾L +mI°}_`‘¦'ΈhÑÑ©98MÕ!ÿúûBô�![ðe¿/³Å�«�äV¹–»ÛäæJ—„oùeºiÈËi•d�¿üž,îV4°¶:?~Á”@B€ 2B“ÿøÅš©ÎeBòñ Õ@]¢‹Ä¿T‰± å/Ç/Ós³öøå XVW‚þ¨óøeºñÆA^U<~�†”|JäÈ�¾ÉCæ1¿›p+Ž_Ô,:˜½¹üÛ5•ˆ¬Vâɾ§áãÍrŠSk‘áe×ö}�)¦˜I°„G{íK/éG§0ëŸÒWB×¾œ´*éθڗ¡H)G_ë².&ÇÔàX4¨æR³ßÒŸÐB·}�§(,}8Ñ®/‘Þ @|"bC]q}n©k¸¾€¤d2¡|ùru}áÍÙÜùM&Ü­Ò1鲜K_°Ð +áǰ±:²0}a¼Úûò“Jä˜feD,°/ƒ²ïÒ@yu`_´ÄˆÈS“²þú2hVá¼¾À÷J[›ö(±*z}‰ÈŸä¢k¯/Ûž�ûbK²"š¹/ÔJr±ÅÕº�û‚¹ +R!sËöEkˆ1VжªØ®.<–n�•ˆ‰}�ûÈw ÝL5ö%kß⦢zþMÔ—¨ý ¶Pú|¹”¬prF¿¨~¾€Ç ‰‰ÔŽ—™Ÿ/8 VØ ÷óå9‹¢°ÅBÈàÎÏ}Ã�•hhDÏ—ˆ¶XpúÂÍ öë°‘W"+ÍÜù2 =a¿ýç†(ó‚*Ml-xÈ*¦cégf-„•{Ì©û¿7­ó ¡—_·¼ÆêV1{ïTdŸHƒzô*G,ð™_í µ¡±ú´­.ày]©ˆ—,&ÏÙzÊÆò0[8‘_DŽ÷\àÿ¯ºÉL΃g…zúŒ¦.Gж`Èb&&S�”épÕ#â&;CQà\6�'zQ0p`mƾ“k š6ìµ�È5ålY‰0vÚ/Xð>z.H³qþ f¡ÐeLÄ*ØSG…n ñÇ�¤VDúk71# ½þu�jÝØó?Yꙉôï<—«fËÍÒ™DKÁ3ãgúM΃‘T_Cžt;»ÓCÕYŸü)åŸ%±»OoãÖ×ÙeT ÛsÁ˜o4æÃ¬Mš5a&Ò…©·bãÛzJæùJmq °2HÖ»ƒbþppRü1‰C†9a$þñKtG <füw"îrØSe¦Œ+gh¢«•©†}w&ë ë'¿¼ÐÊ4 üxÜ€ê²CVL­–°ø´è¶}£K?™+ï É‹0 u;ÖGÚÎÅpUl| ­W} F/R¦Ivº±Quº¤EÕ˜Ïý^àà—x¼§ÒuíÙ–C$C#ŒRCšÝ+ÊÍý§�…­6PÇ 5Òz¹@™ŒþR|yNÕµ+Ë£3ÓXôÚ•¸Ô•0üM´ È�ù9$í�ö~ô +JEÒ¯s±…:™Ó b€)Ìi �nƒ½j¹`@ ðsèhŸÝ?­« ñ�® C„³»:8Ier»ÏÌZݹži>Õú#Îò©îl(Võójn`4Ãñ«+³Æ5«¨ùE§`Ö'¿1N˜�3­­˜aæ,²«”aíÅì¥ñ ô;XO¸„2¤÷µHûíš(ª(4 ж…lpl†o$g&’<ð°)pœNhŸ¿±§Ì{ãÚÈîp᥅¡)‡òøúˆ5”ÀW\A:FaË1Æ>þÊHîÌtí%!<Ù«X/\fÍâä‹‘üg �*Ï^T°.�™¢ˆ7¯áË0Í—-ÞøŒ�D.…æÇ_Í;£ŸûÇ‘’ßèŒG¨œÌ-�I± +2- jÓQ|ÙµSa°ÉOf~V;,c[%I…Ô#šP“Èr¤…�P©ô%/4¡,ûþÖX›i™Ð&„äöùäÈ´0ࢠ±û¿Âv(Ÿ¼ÆÔ†A—ÁŠMw Ž .‚ˆ:rm¹ŸïÛ·~ðÃû^c„=P˜üé¸u@“¡­?¨[¤G• zý!ùâú)iÏÊÞNü.줻ô"•6PEùÆKm2q("ÀùEJ®N½îŠ@¦iªùTù–�˜üQ¤nh=õFNÛýÁñ)\Ô�aa謜Â3½Ž(%ÿ·TRøm¡rÊ\­Ð²Lz§ºe×á~áæ_+�2YÁ ³=AHþháùlZÄž\£‡WQF{¦*ÅÑ ¬Ø„XtÀñÆ){s +Q4g^#”1 !éEVqì©ß– ƒÁ!’‘dFΦÚ:ÿm+®OÒ't¬*ÍÊη(¯‡¯Å�– ;®ŽfIdýVäAÙü^K•â›"Lä®}_¶|B¶_ì‹äóÑ÷Â7<$ÛŸt2eà>ç áó|´K\úEºð¼� ÇâÞXÕIb~´<4€ÍÑÀÐEç÷&„y p\ÂÖ0ªÒ:+²hZÙ6ÍËH¤9 +46låºMöL"•øNx +Whûˆ“€¤iShfùl„¨ÑêR%#ãažÚà÷9Ë]³u¡WаÍjVâUý(<¤^øÆÍ²v*€Åb7ÏúW>Œñ2F¾ ˜=øÀ§àÇAêù=9º)Q±ð‹§½10> g%Lþk§²'YmÈ?nFlÞ¢Z1ÚNO@~tcRÎî7ñ/0?«ø! ýuìŠ�ë¤æ©:™jE��_2ÞÅ…ø‰[œák§¿sþ"’K“¹ ‚ÙêþN¡“¸ÄášåÆ¥ÓAÿÙx?›åÝdDÏÛÐM)Ñ c²Ñ®žXm‰™Vˆ=†DHÜsƒ§Û^©kx£_O�LI,«œ*ÓQJ\%È_ã 87ºoV¿ЦˆÄ~A˜Ð¹(M6d^½*´Vt†Æ%P $Tᤄ\G|{ÄYÎæÂ~Ä0´„•üpzËd×ÉüãÀ/>òîÀê䊀Or9Kør]ò.1W}®+ÜÔL&ž*/ö“QãVPGùàG�TP’êG—ñ½Õ‚&qàë¾gDÏ=',qÅ,ñ‰¼¸0åEÈrZÝ|‹iºw,n¨YèÄÏQªæµÍfQÛ)I½^Š¥.UtÔZÞN8 ?©Oéª�‰¬lùPgG4­HÓóÛš¸¸SZÛ,]\ +Õ3$m”Iÿ#�ÿ”§lØu·µEåèV¸ƒúáZ\sG“•(j�=Ènmç7À烢\HJƇdJ±=—¸x‰IÁe1 Ö_û_œªµ˜öæ|fE’ÜUSÊŠntUš¨hf±ëÔ$‡¬Eí§›y“mYaÚzÖbsÀF]n—^^ø‰œ°î}Ú,¥²âDu¡Þìk@<-Å«%ú«ÆÒdÃx®�Rä»*¹âé}—>µôÀ"�Êèh5jrÚ¼60’äœzœn(Ør®lภ¿b·#3�Vk—-`·�O‡æ¶Z1Wä»JžÖvË íöû»ï”ÐÓÆB*G©Ádˆ9�Æ {L¡�%µø+¨�Tn•Pç)a» Â…nIÒ–Þw-Ï£¥Î¤ÝB;z(ò=vr �åÛSUÃã¿P”~€«qšé^¨Až¯ Áé|d¯É†ÄÇ…ãdWZ ù¸ +Qý:.o+™`&û‹PÑR¯I>¹{fã™É‰°‰ÜâDÿ0«*ŽÁUTJ#ú†¤ëô>š˜sÈ3¥’ÛkNí#G‘¸¬EÔŒi ðúP±b•É9X÷œƒ6Tc§öK³à6òHùáJFiü6ÌmÂM³§è48œéžžý§ªT$8@rñ¸^ +€¹eL,šø…4ß¶_Ñ{÷3­ñ~¯{Qvƒñ¤=3}”3�ƒF\¡ÐÓ„Û§å–¶ºÖ.ñJÊÿ�ãšáš+¿UY ¬X—Kp¶`åkeÚÒÓ�Ùlˆí€R¥ì¯qàNÕ7f3„ŽÜ—‰!(h>¼êS: ÊÒ£,Ä6~l�&±AVJ~ {%‚ +0Lñù‘z­ +AFOË‚MÓ/!‰ˆq„àÑ àæ1 î2æY!AÄ[¥ÇDCè\Y÷›q‘qØäšúßtû‰9× ÔÉuÓsΨ³ ƒœM2¢È‚`Lë�AA�=>aÌ;ì¨W#(%' î™ï_Žz p­ ˜i d»@ÂOô3]�X5;\çÈ„Å[¤ ¬©qéä‰-Pvðû+E@ Wá„Lr ¢V<—"S $jýÿÀW��Ié(Ä1¯öu]G&ˆ ¸ý¡âþðÐ} +µ�üáVZN;y†�töÃuxSƒ_V0¡†8•Y ÉñÄõ-£/�þû Õ-à�V/Ø>Œ_Ç�3þÉDLëCD®‡ôá«5›j6ºù`#Ã()ùÀZúç'a“ø ,š™èÐØ¿øtöF'õÑx÷ÀƒË›ëÍ¢·˜½¾¥z˜G+{�Áàh44Á¸¨·H IÇ´BS# +"{l»ô��sè©Û*z0+¤Pÿ=H€¼Î?޲Îìwfjóé>¸iÖÙÕò tb“*.®mbÐ’ž³y¬@ s<@¸C°‰‡Öé¤Þp«ðÐ1¡ó0¢ó;�‡¢Uóp{;^°Z›ï0¦  �›^ •ÞÁ€–uÂ;л @4ºÌŠçû’Pç¹Tç{„Tcâa!ú¶w­÷G ïj‡G° `v Üi?Pz"Z¦st„ßú<]‡Qß#g˜‡u@Q»Í½êÔáaŸ‘k¸B÷tèMåYàê ÞÔ(£û¯tˆ«tôº]P%£ƒW;‰=è ÜbÚ’&ÍàžC-ÜdupríßKsà·íÏÂs.+üú½¦›Á®xbµ¹¾¶+�“ð$™£�E‘ƒ+=þBhÂãàõZâ®Âg6þ ŽW¦ûMTB½9Nì—”C=²¼³ƒP•y1²ÓŒ�òxpÐÀnQô‡ƒ%ȇÏ÷7Ôyx=‡AC[©€àÏ7Ê€¹ÿSo8t“+ÀKØYâ Åðêî{�q–—ÝPaóNæøÖÐ {…=�¥ä†£jjOrp’¸a=ò±›P‘}‰‡•½m‘2k6$û, «´ájn"”³áw‚’¥ÒûÉ%“%NÿÕkbƒÐÍÊȸ¨s…°A’ÆyÆX‚»+•Óêúˆg‘|kx.<„ŒÀ/÷Öàž'9æ[‘qBs|®þ·†T«‹;™Í›_[2¥ÙkÄ[Ãm¿¼Ì*ßÒ¥Vj¥ûA<õÖP¸î™}å[C:ÉqÈÝðmiÞxï�ã3jþˆð·M‹0Ðöƒ[ÃFAðX7áº5`Ü!ÕŽ_&»5œuFîÊP8 Aäü«spKYC’TŒvk È·_Qa]ãÖÐRÓ‰'SŒõÈÕ¸ÂÄÁƒ-ÚßÊ�^ãLTâ&.üÌ +|Yƒ€0�Ó[Ö�pjU Ž¬áÙðLðl qל¤—ØXW ï, D2«±†§Ž ×÷XÃ2/ý�� c ì�D k’f;Ö@G͘‹>Ö°®èºzÙïn¬A[T#‹ýˆÇmºrXD{ž¬aµîË7�Y¤˜¬AáqåK hYIPaS«�–�—5HUS¾‘�y·¬Áde¢;„²ì2m ža•ßàj°ŒHLE,éÁ¾B Wƒ ™êšÔ«&q5d·lV|LI)W¨PÜ Ò,ý¿�Ü�WLV…Î@¯†¦¸‰"•Hò„½,2Þ”¶ú!þ›¼šú óŸÔs2ðY†ŸŽ€[Z¬ì»5�$f^[ZƒÊXÓ9åË”´;Ô±‘’Ø‹¥5èNÍt­á¸¹\ÃZCÔˆºÓ;ϨŒ…#Ák �—ƒpJÙ¹ÖÐ1]ØèZFÎŽv} æ•ý/E>ºÒìkpë˜aÑsõ5Drgj³')'¾†X&ð °¡åÙÒ_€a6œØ+“àù£†Íù¢Ó’ÄÈ… ýŸÌ4„ Ál”!Ø‘>aCe…‚�Ãqø±„ +9[XSïø¤„ ‘>qþ› JØ)O‘ÊÏ9†LØ@&×�,qB§7Ø€! éÉ©`C5±)µ’‚ ]{^�WìÊsóÁ†pðÆŸêª`��ˆi¡& ‚ ;¬@sW8YEëÞíýoSk&^QEc#Õ½‹Æmï0˜ö<¤Ð«ô‰$\•áG xeÉÿ~�cX)±}Ý8åõ¾—8cp—6|4ZO&«YÄFYÉè• +)úÆÈU”1…Õ°j]ÑóèíUXÈ=“M½5D°Ç¨¡†'ëÄbæ¹õuŒç +yIå×#1 u˜sËÈ~ÔiÑæ¼,$Ÿ•Ðëý;½¬ø`�£Ê¼Xh¿Î¸jú¯ª‡ûd{r}í‘O¥ØFÆD�óR­±Øsl�U2 aZ·¿õ@2 Ôpr#`‰fÀCj :·ë“g¶u±JLíø„˜�c¯Æúf&”ùæä,?g‰R*Æ«i4¥ÎtÚ®S–þÆú!»¡x�V½viРs`Àö¨“lö¢.@åQ@m‹·�;5×5gÐ{)ö&ŒË3}ÌÌ ?M…ƒ´âL¸5×ùhÝPÓÉ�@óä{Àt(]¡Ø&ãuí^%þ©xiqùŽÛ ÑyD&d`ÕʇÒ,…~ÒhB’,�æ,-ôb°5~°K~x�}sC±úÖâ¤+V<‰mMV”E»¤¸ü¬ilXmøÁ;:`�ɱÀ˜Ô§Y+âZþ„Þ› „c,L1hM}³I´¥óº^ïŠÖß'>ì3CúVÀyGòÍôÇ dˆËFw$u.²¾ôšŸ1½à«ÃDK¥tïÐ~R?ííœÚ&_xÂ¥€Ð^diiÞðƈ9\;P"¦ž¸­49lÿd„Q^.æ>"�LÆ�¯“ÌÜ}”qå{„SÆ.,Èj`bD�§<_m„Þ·;ª~‘š¯i�cB2‘'zbOsð†»Æfžú­ÏÏ"âøÂT» jÐ×éέlàŽK¢F%±ómk�ØÚV�£ ÿו2W€âöCð­ól` ¯3Ér¡k\{H¤:åÑG3�l£c¬×EžMÖöKJ +¤7kàž‰)![ØbXKÓH `95~D¼XI“ÐSÿ‡ÿ,›}’JðlB¹(:F‹8w™ö+¼¡"£áóaÐåÔpJK­›&í"fe#.†v®LæýU÷ÕVÈ蟟/VöÕP<1‹¹PȆõˆ~å ?Æ„\¯&TÓX>(¢²Z×8P?¢ÑG𔎪üš8i{�Sr#7óhµ4¬œLD3'K¨�Xu7ç?àʈöHò~ÆMi3/á$èôÑñâXdÔÛØD¯¾…kø?ƒœ}'–‰èk~¸“€Œ¤„ܹ=·>Pà@ÚT¬å˜W‚N�þæ3\í#Tq|N Õ‹Ñ k·«ëì„ö«˜'�;Š?SO£�´ƒÙ² 7ÎZÈd€…b‰ÿ‚3~)š¢OJÂ…N¯¾fùD MûºÓg3ß²¸päѪìÏXº«®/«û­ºØÙÈë¼%ëR¯!4 ß]åÝ0T±ïåÖbÈÖL�–8ÔV@«ñ:ˆ®^ú•s>ZkºöÌ®Ì}ëÌÃÈÀ8eeMÂ)$ì¹Ø™V1K`¹h’q'¨…Iˆªæö•¹ÐÐ"@l;F I-ôáDÀžðÏISÅ0°�Vçÿ0iDnxé—^îmM)¤b#Ô¶Õ£õªä—S)PtÃû,ÿÔgvSÜÿÏ€Úøé±F‡ �öJHÑÙð±2á\ØÒ_ßL ¡xæSR«õ†ã_2L�…ø÷¼«Hqº�. Kºóõ—Lg ¹„VÃ`&ÇN I!«µÔ >ÔÄ=Âl Ò®ƒbHd#”Šˆ5f̧žÈØ<`“•tû+W/À[†;ºE ž¶ðÆ{â´FÈ„ðMï¦Ûqíqlb[ “6Ð=ÚŠHû¦›u +ù•9äÇ �¹ Õh+ߊü ºC³9š¬‘;€=y%ÏÇz‚†]¶û3Ýé*”J�£°C[4óù´1£ +‹]¥ÅZ=�*0Ð�50½ÝjBSí@ÑýÃ!¬³À¿U×q3 âªò`ó–ñ|fsÓ·’-ÏÓ‡Hqd+º÷ªoEá–„I�šÛþUoxñc]Þ燙~dáŠØiQ\ù`G3°‹Ó"åó&ÛÄ[ADßµ™‘—»Éx3Ì+qRÇõXŸ7;ŒòL/þFžT3{â,šåaGhBš�î´w9ÐÐõÃÂ{"ö'n?û•ö<æ¢ 1CP}Ùp“Ý pÄ Q4¬êÄ Dîy$Þ?1Ö +æ©€3�ˆ‚ç&—[b>– ß+JŒe!s"fÀÔc +÷³ÚhÌ0úWà5f ¥Û™Ÿˆ—&YŸð2àØÐîC ßÂÄË !/º¼ R²,Q"�·k½ ¿È"Ø^Zÿ)–ÊÈõ2„TáPVà÷2¤ |¿…ã§—�¬I¸ñƒ–áO�ÉL"û-ƒxí;~oz‚–Á&_ ›"´©9ÓZ†ÞA‘m;ÚJ¾Íʰ+™å²2`ëËYµ¥ê¢À‹2ôNjgܬB‰2Y1åì¹j©S¢ çêÿtÀÀdFG8"²ëK†e=N#1Äâµ÷’Á%¤e00ríAeeHDh‰ab¢eÅ@4;,KÊ`u;´î¡–Ê¿c³ÄWãPøÑÞZS*ÃýƒÑÊÀ¤@ +Ž$~T†¯†ZØ9sp +Q¨üùßè=*ƒÞ¬‰ÂÃS¡2d¬7v€˜P *ð%µŒegñ¸=ob€)n@<\áÖ¾± ß œ±sJÄ-–á¡ÈÇŸ�e,åNV.ÞÕ¡!ò³¡ƒ´Ptó6çïGeðÙÁ¨‚šT¾Æ§ ™-¨ †Q  jTý”Aàÿ3ƒóvÃTîDß«–ß)ƒòž4-}'Øä”áÈlº¼¯zÊÐ¥ˆqy2p‹0­Ê^UÇ“aDfüÄov2ˆ2›“ýbKÒN†§‹”gÊ@¢7·gPSSÞ +PCáÉPŽãdÆñdÐthXäØH€/ž …úò«i®d8O>•o!.›L³’èðI±¨’¡&Ú&�`B– Ü=5,¾]n²d¨,wZ[hk^öž%ƒ×NO›,Ê2ÃvjÉöfÐó�[o— NplžP¥¼±Ò%ó` +‡2Ü”tA�‰ÛªP†±¥†Jûú߆èPàô�‘T(Ãf• +ÓÁϧÊgâ>aYe(¤Ñ‰x\e(U ! +ÊKý®Je@,Íyè9OehÍ +Cfç + © ÀßJ3¡eÖ¦2$�¨�²  gÊ©]² ~..f¨’eØ!v­Ý `#Y†L ñôÓ2럹hžTiø¦(Wöƨiy„;<�x +Ù§e€8~AñÒ2@ÏQó±û@˜Z73 'é&e.e?)øä%ä¿¬Ê LÚ0/ˆPƒ§”ÙdøiÎÂçÎP8¢ÆäÀ_�Èp2Ü _]_ri¨\N�! ‘ÓPN†uBZ|”H§ÚŦ¬ªÜõÝÖ~�d€ÖÙ�WšÛs6ÉŸ•:s2˜ÓÙ\nöf^'CTËV3édð}©Ã|§“¡w㢵üÑÉ€l,„G}0;žÔ +Èì&‡¢dHaµÏÐÉ ëºädÀ޼,3Ô'ÃLJp¤Dâp2hÀˆ¨G–Ý�,˜ëd(µÈ®“¡ePçaR»êd¯• :¡¼[ïd¨z|’©-¡ýéüêÄNXû¡§Œ-y� ¥)8lg:ÕñN†DL£7eÔ—pq¯àɰ+[x]üž{2ð•X`âAòd�NÉ1 Ù“¡T&Å{2¼åÇpºÜÒ$Pɰ¨é‰YJŬú¸íÃ-k1s‘áÈ·%Š +2Œ˜°1�ÁB�c˜³Ü\¹t¥1`>Ah%ƒÝëÇøhQ’¦°c™¿b¨!÷Dj�f 3 “%¼AÃê5-WŠ¿ãaØÙíóv˜t[Ng†*3 ƒgü‡ºÎ-Šý3 b-Ì=VNç3 UÇZŠc:Ã0Rå“W)‰œŸa¸&dìDcÑ¥vq‘Â0xïÃbpË�}0d¬ÐñÚÚ‘è&-˜>zf�•†Ë¯�¡Ÿe4¯�.�ŽWqý%…%³Lž×�Ãè×Ú!‰=X0`›‹1š…s-ê}Ô‡U'�Ca�Úšd$Ò‚!fV< Ô%ß"襥šÎî_ ãF°ÜïÉDöçñìXÝa€Ók?M’¹²é<0ÜÍn½éQjˆy)¨‹wнTÈ„a“LÔ× †=‰þM©\¾`€' „!“Ó‹ÒSkÅ XÙHÓaîÕŶ7Û?®¦ML/8¾`X7…¹™Ó>{60Ô⥊t“†*rkWÝð—´€cîfÄB?ce&Iñ ý/ÛËFé¼;Ž@…€!(®Àýý~|>Òg$¿Ð!”3ŸÕ×›bÅ:ÑÒâW| Iß éu'�8xòX/ðÚ˜¦Õ¼@Ò/Ì[2¬®7ñyŠ|Øñ�üC—@Ý…�ï&8º _hPö¡®RwÁ`È]NwÁ–DïGp¦»±™þBšLÍ**Ý…Œ8Œ]8©°M$ãQìXífºétQBæz¿Ä\БYÖ0és®‘Ç…ß9e¼¡pÁÝ,!”©�ÍŸoîtc�¬àó-<´1k=·pa󈂱û TZ<¬T‰1U¸pé9G„&7I¸`*Nz·?¸Â…«F ƒÜ¦•.œe~e¿µÛy²·°L*´D±Û*O³°ô^?±.z *´²h’&$_°ŸïÍúRK®·�1JíBoA*ûñÑ’N ÑîÊø×Loa�r;‰O\o!Wð^ÿy �Zýå-©‡…ÖQ–9Hz Í`3A¢!½úŒà[Å´$ƒr} ÂKøÙpaÀz40H +k¸ üý:.À'-øa‘óp<‰Ì:.Üâ�Ìì¾ï˜ìL2ˆ-Z.t¹øL}.ˆŸáC”]¾» õs¡— +0þsÁ ++¡Ë�žÏæa � (’ü\>xí¹�Šì,†å�Rùa$¹óx.ìYUòsº«TÏ‘ Nx·~¥çB]âŠjËä\0’1Fd8¦”àÐÈSðlÞ¹0 xç¤#ëY�à$‹¦Ã˜¯:²éÂY&A³çÏ�.ˆʨ 23K]8úTE6èï÷é7?taÏ‚åQ¿Í)’òr¡EÂÕÃ|Ëq¡9ÉSSÃ0Ì p\0)ÐMæfãÂ_†Iý9ÑïŸÏÆ…ÄæêÔ6f®q!•傦0~�!øs"t´\åçBÙóís!K-r+‹‡Š}fó¹Ð¸.6±¶\pÝp&½Ëó˜ TÀÊÐ…ÜOu}§ZuÁ¼œxó¼Puá&×ùÐøU²{epR]@1áXw[¨VØ‘¸\4V6ÔÁ^&£è-ôB®.Ì47Ð(uKÉLÖ¯.p›D߃« g|€¥½"@êÂS@·›ºðQ¿»© ‹,M'uÑY’Õ½Ê?üb]˜[°Xø!çAu—ÀãèB³øÀ1U¸µÂ]“²‘yt�Gƒ|ê ]¸æoíf0•@º`wþ%Fºð�t{¯Xžt!Üï/]H7èF–u]à58aµ"îº j~lýE ƒ<Xg#ntË({}^¥j® JɼK¸¼H�ºñ"^‡Â¹£zûkZŸÎ–„™"¡ÃÊË�霕¤ú� %1‚›é­�ÌEèi+êBærjiÁÅ$¥¨× ì‚3(Ì"p§ §ôgˆ¨ +§ Pšäö£ä-9]¸.éEÌÓů)¶ò/œÐQÓÀ&ôL¡�cè\Ë0‘ˆ}ç‚N o{ê\ðºel˜.¸{-Ü"‡éVÖ7~›|LxéB7f�•.ˆ„$Çnµ,]A ãÒ…vAú/Tºà>$•¥ ×¼Q::Cû¸.ä$3À¸.˜¬¡Ä<3 ç–bÇEKõq]�†éãQ ø²Á]…®h�aÖº°U˜— Pçª=�둉ë»àÝ.XaÄ‘ xAœ4S^:QÁ ±uÛ6+v¼PV¨D´ðšà騄Á ¼Æ£Pµ.€Î ±ìváå˜O9dK÷ Xù“»ká.Ä©¿Ô2Æ]PÚUa{܉h…õdØà•˜,ÈvámŒä»@#ÖÙ$Fîv¡À´³£ûr†]€Œh<ÐØAfˆ‹Ý~²Ý8üI@†y"ó“õ»pÛ•Lâõ½FhÀñ¬YŒx2Èœ®# +°Æ:‰(Óq¡4ç &žv!œ 0~cq4Ø‚b¢z,ï¤söÌÀ]ÈË�î—ô‡»06+”ÃE3¸ ?¯ôxPãà.\e»+Ѹ ÿ¾ RÜŸçžX5õÜwj­ð�Â{»ÐטûÂø®¶º.,=|×…•¤v](e¨¨É]eôÔlFÞë‚Ö¸º ™ÁȾ.Ô¼ž!@” +_:Qàþv�çYÛî*!n\—oq,n”×~sî‹¡‰¥ÿìØ"ÜÇ'g?Ó…õæD` ­Îà°HÜŸÔ§ »UÏ“ý¦ ¿‚?\ÓdÈf¼'IjæøFÞIkº mJѹ ¤«€´±;þÐ:>nò-‡ò¶Ð€ê\XN޶Ïtå¶!7½ån·…7�­\ÀÄ:Þ\Y• òAV ´Ê…äÊ +4ƒ¦E[¹°hM%†*øSÑZ¹pašÜ€�ÛÊ…·0B^Dî\Ø’�þ çÓt!$ƒ†×*Ó6]PX¥sI¦28Α*´¸ê5]@X +-¸R¥š.�jôñ ›¦ Ϊy¥ã®œÓ`:(5ç!}œ÷u!½ŒŒ÷¯ º;ÔAõèúu�p�)Ûs]àYd‘�I•Ö…éeÈX‚/’.<7ÐÇí6II�Õ²�,$ˆn.äýÒCѧ¹P‡ }#zL‘ ˆ»%/èh.°”ÉdKš Êž!Ö}JPsAŒM‚k-•æÂçÿvøFYs�¤»÷ž:k.ˆ) dÔÅœ t&N~—3ëçBè°3ë�xU.�:�‘t}sAV¶e®[n.èA´€=k.¤t?›–ü®¹ ^±|�D¼2¸ZI +ŸQÚ~±ëžÜ+æ‚0ꈼ +m1{€¹ÀAÊ�_á ˆcˆ«˜eæÂ¥…RNá£f.ßÖÅwCcô ìhºé'+àˆh¥Ð懠�A˜Ý3LͤwpO>¹¼ÙdwÚÒ·DÃê�‡á·L³pS Á@4˜;•”S‰Ÿ8c¥½£Ì™¦Ø�dÊÊeŠfl¤xh¤Á`Ë¿óDÔ¬:\jÃF3Å~v–±RÜãK¬Û÷•|¬ltíE¢jíî/ç endstream endobj 21 0 obj <>stream +ØZ*Æ×Ih™€€Î’ïÙ]\³8…€ZF—`g²¤C|墛X½ƒþÆÊûˆ “€x ‡¿ž±;‘ZŽ}o&nÍ +åL÷ÖrëÀ™þs›* Â?jhÛ†Ôõ&»®åLOlVk/rx¬ Ë9PHŸ%(>õ˜÷îþÃ+ÿÛÛþùÍ_°±w½fÒØÏƒ²TîEínº_dNü}-¹ÉØÄÞ +È¥:yË„$ãÔ*„¡ÎR%[ǘÉh2¡z¿C°åå©Ú=bð•t†-ÿ±åOÿµÏB{ºü×ìcl¹Jªá[D¼µö#QÅcc–ãAµWLÓ2ìàxdú»±ûÆSAÅÝeë…""$Ÿ<õ fË«‡×þQL.ÊŽ5Ù·?äî"hHÖVË�·¶óe‰i® W²“ÂųåõFPc÷ÒQU®ŽÛí ¿�:€šâ#’MP)~•—d+„À˜—™ Â"Lƒ°:¥x9ôAL—CÝ”ôA>Ó¿`d;ƒôˆ”¥fK†u»Æ¢Æ,ð–Úr7¢îG)È\ýÙؾµåËÄ#jšÁ1­‹7€³¶�˜'Q3)ìÓÆ#ZÑ›êÓAÆ϶Ü+´‹\i«7�+¸·ƒ·-çiêü�0Ž’Ü�÷Û¨~º-�™^׋Pr}ÖkÄ–±’Aè,ÙÍ­DQëaþXìÛòêfNA¢±�Ä4øcÀ[M“M,W÷DÂËë.=æŽ}T~M; eödrSî d° 6<ÚãÈEÂÁDÏ)ë察CÜdÈ ýR0{H×�…yäh¯)ƒßmgÌÒNÀžÓ/L‹ëÞçpË-oô8`Ý!´9LÖ Ç€K.Jk28·^õYª °ÿ4 1ÔÐb§m ròu‘•WmÇÂo©a’�ÎænyXÇ5•Àiˆpä<œ©Âai‹{ª{~\ßM»!+ƒmÂ#7æ°+9>PŠE·6BÇp,PBœcßzïpqÌ¢õN¶ìùÝÇC`Å~ ‚˜èÖ}l9†)Lã§xŒºjþr¸È;ù¿LMcfQ¡4¦î|v3ÎrÖ´�9§Œ™£By³¥‘1 Ô”øÙ¡7 +Ðè pjbì'p‡!f™zÞD®ò@°çµ‹‚½˜„x¾5aD“ˆ �ÈÅBùȶƗל;€—œL‡‹éÓ›µL  +aî¬Éa]‰ä fËæeŽ“å=ЖG*æ÷œ<Å8³å¥XÞvK³è[ègèP�<1ʼnl'ãÄîØŸM,Ç#.õ—[h|ªXbËðøA¡Äî°µ£š� føV?êÕ^ÍoV‰È[/�éJq f\ šúló–~5ï>î]‘¼\ÆŽòÖA­ä´K A±Õ‹ _úa ̀㌠XiË‘òÐ?\�\>§-v˜x!N\>Ö/ë°Ñs»]+Â,BC#ì7Œ”U½H»¨b‘œå�5L¢ì�…a,Ö¶Žg¸r>­âœËûÖRRˆa�9> Ëlãk^˜ó@´ Óöç,@H{Œ<ê5ÙœfÚ +ó˜_4ÈÅHÆ 2l +Á»ûhï †ß©›ø�R‘,3�ÈLðeÝz@œ +—›`WJ–•²åqùõk1úl#Ø<áOÅáÇôÌÅžI‡:ôt|l¶åãrÖÚ*Aä „¤Yü~”Š©ÜÌ¥’ βû� ¿„�¹²³Á\¯&3;ðžâ°üéÝŒñ›à‰E¾ÑpsÊ sÝ^Ýý çJ1WñV«ÏÎb¤jc„ÖJr2W®"Û½Y^ý«”/O· "}eèñŒg~µ ¸y{„S:À�"K:·ÏLMx�¹²%+0“„&�??�~¸Brì¸Wéí-qèÏ* í噚oqû–’³œBËú@›2²¥OUR^x+½Y�(H€VôÀ±¨&l&y4x ~kÏOÖOxI)Š÷ô€°™E$� y·&�¡Ü’›„Gü='‡Š=ð¯ÞÁ| ¸ÌþIÌjbÏæÂb_½zšsM_Žõ³Ð‹¢Ð‹¹èú1¼ª BÌCµñ4ò· +˜«©ñ0¨OzeøÑñ­;p`óé63—º#xÊw™kz肱fx†;Ý4ùy5 7<—ÅÜ"ÐZBÜ¢=DTe½Ó�¬¾ÌUÔ¨;”ÎÇ $ú®2i¯ëÈÓª«ù�ÞöžB¹¼¼ð´ ä|t=àÝ¢ËHZHò(ˆD#G4AÁs +¼ÿ:} ÔÛзd¥SuÂ&‰Î-øã(ßA?|ó3òT¡½„H*`—åã ªBðÇÛÇ-®ù‚OÏo¡é¹žhv†½#�J—ÇD•ƒ#y� :eOn7N~¤à¥‘Ûìg?%¯L#�–5cÓÈ“§`‚üÒåFßû˜ŸFÎ)|^Æa27­ÆŒY8r ‡¢.¦çbD�|™« ÊÎN—ã Rõø0*_àï3PZb\ëd ¯Mîï—WªžË¥Ä_�œé§óÅOáä±�*§l¸ç¹,ääªÍNнF®ªávO�nqñ‚Š_läRY¹˜‹…´TV¹€ Ó¾m•ö‚ÕçtÖMî‘�£n˜�\¾£fcFG­./Wx‹p‘ñ@ôêòVe:OoÙawr6r°M�¤�ܹBl^Ò‹î´¡Ûº¼;l$I –{S¨Î»k,^0é$*ÿ1Ñ–¬™Fô9åÏ�ü„³³�³€^—S\ÖtØ�|žèò¼-" ˆ{éB›àâ¤+êÈ3ôrhêØ$°áÕö@Va©õg$ü|#�6ßÕ7rS"¾Û_ŽùïAäDŽð1¡Å;X±u=”]~'…î7T›`z!·lù¦=�4 xDÄL5¸n‰ŒS+hÒ[ð8€,Ç”éL½è^_á(ÖaÚ}€®�• Ä|eÛŒØ[þ¥„p�½Ç‘Ë´:\Àî�R‘ß?@Ç÷Svy\/Ñ•#ÿ¦…?‚Œ*út³‚à \ç£ú‚Átx^À:sW6ä7¿7U¤±y5�Sì�´É\õV‰EN&»Ýà_t¢k·+D� vdˆ_9º6wcÌiJ!<¯ÐúP]•�íP;"!5 +°W.!�ÌмݳǮà3pÏÊ”1û¸fl[F-Ë»\r<+Z™®Ä‘î6Žq$Ì7P:)L™ ùeÐD™Y;�ÞòÆ Çç˜�$aÏp¼ö]ž.ÑrÆY9ù].5Ï¿2`®MW(}Û!¦°yá…PU€‚*­ÜU+!¤þóÔ\D „NjÜ2¨4O¸« ÆZ%áå‰ê®Å¼îr'Ó^êÅ&ÂE2g€Ž¢ Û‚J„n¥´4K²ð‰Šñe™.<:×!Ü+¥ý8Ë€BÞ+ ~Ð�†JL¦VjD”1/OÈyFG6uƒ2`ãåí)¡¾ˆâîƒuéÞé‹[.�TP%ôÌc7TÜ«iЭ™Ñ¹™”Ó7d +6»aK †Ù„cµ'Æ-ÌV�‰rÃ>Ã0 W|Êð± ± ú|˜Z%}wË. ²hŠ—ËMŽ1|Cu9gøÉâ.ëâ>eg>Ö {cÙŠQT¼|矵ï/ß*‚9pbQÅx¹|�ìR°èàë^AŽ—G· Ä}ŠÔoëÁ6 rûÒC½mª„<`ó0ýåè�Sþâ>ãåŸãMœ6^n ±UyÖ»wZëÂ@~g�O¯PŒ4Q©zÃRB@Þ(PLýŽ—Ÿ²¤„ôxyWs�HM +ˆ�—S‘°Q"¤[¤‰¬¡cf@¡¨¶�Æaç9…[Ä£}œfš£Ës!¹f øÁ% S±/ýçª]À q5ž ¨ ûм”¯.^íç75¨[ÇS5./Þ5ŒWöâ…V#îK±n\0b(ôñÚÖýë&1à¬)3OsÎÀ£CS>emŽ“†™îOHtòRÑ”"/à5Æ«ÐmdÀEC¢F)ŽÌa»*n?)¡ Cç×y©„ƒ\ $(&ð¯0ØAnyN¼êæT àT$^rØ µ¶#ê 7`1 µöEi¼«¹ukÿ7MHéJ/±{tM¿ˆ 70[¯¯Ð=“ßå.Óµ)6^•0#b$Àe­» `Z2›9&ïÿ­4vã�½ÚÞb£ÿB¤Kâ«~ã�~;¯Æ_×hoOÔ°EÑöÖ$�q\q¼¼¼ý=S~Ÿ×�ÔÌ÷hÒ9ß�I½;܆1„ŒY^Ãm›HˆŽñfÜö1nñfûu¯¦x#jĘ È8±¹”Â{BèË…Ç3FÓ×�0Ú9}yÄDIóâL.PxýotŒâÃrO¡«bˆÌ1¥mE6¢ŽX'ù¸/Ö7Y�—R<žÀÎh8r<à¿T5sY®ç|ø’2/r|•–êã•”Â^îã•�-?^j”ëż±µ«~s+ã5’Š·¹’ëBù�¡ËÓ°3�Ø<ÜèæQŒ" ¢ WpZ‘kÃ]Ó¿TéÎçG"RÙY v/å„XG2üò8^R'Là¾þͺ¬Uç†sÃáø¦èxª„wŒÃåõ€÷Çá.`¤úƒLEØ…©+‡ÖA2ƒð:)™Io£BñÉz÷C‡‹Z"=˜©�[àŠ<üRÉÛ=&œ½Â‰»Ï‹ÿ†å—÷˜ó½çέ ú ¿ü„LBùåï¿q¨R¡{™_®’�BóËy¸–Ï/Û³(§k0H@é÷¡îæ—/‡Æíüò^)¾7Ð/ïÎzáØ¸ ž¶ís¯3ZÄ…Á„wåÚ•/'͸åÀ–“ɶ�}9™ˆ^�'�ëµ Òv¯~y‹|aÑ8ót¢µÁSöËÕþ[Sì—“ù ôðsÖlæCÂj¼žÙ.q4i.9¬t0¾-ïéÖ/�òÆ¡�i“ыɴb`~9:œÀbBʳ³*“_n·°?†D\S…Çý¿¼&$Ëâ—ø.0<~yïÌÔDòËÙ´—þ!tÐÆÕ©"@q_'î·[ÉÂkà¶Pp�µVÊ"-òn`ÕcV�RÏ Þ€ø xžCb Ï„OAc½Mâ86€Fnøìó䮦ÚSÍ.£°"˜~¹ÀVU5‘è:&nÐVdà-û†â}Ù¼Z=mn4¯]×Ô%AW®vY?øñ”ýržšÑwûåHù©0B¢ÿ‡ížNô–÷˹F©7Az¥)/ôz!Ñ1ð òÜÿîðð®Ê~œÊt"h +î�#Ñß0¹¡À· +wCþT¸·’�_a61Í™Y?ÃÑÈq—Žþö(wy¹p„âWüGågœ{(zgoï/Ï�œu)�ø—‹6ÆZïL�–ùOÉ33׆ 7?ôv†jƒ2GGA±|ˬ·B¬ýâTâ°…«¡�zîÿm;<®è} ¶½í'ä6Š�ýÝT ›� N¯# +ãS‚¡/‹ ácè”1Nô(¤f-›×@b¹ÿÿ¹üåÈpk`ßy]lPNzFtüvs~L+[05ÒÄÌÃ[7_ ªÖnŒn6øÿµá›è¢éÞ—ö›”-0BÕå¬B6²�·D Æë"±=¿ÿ1—ðm·I!&_¼~¤kиÈÏL©€�ú¬1=ú|DtÀÜx ö ਮSø½­ðUo—=fÎ5-u�°pÿE÷ÿj"äzñþÿã:7ÎÀ¦ ‘~›ß{Iˈ /¸FyŒÉ„{Ÿ÷'µÝS¦B†ïá‡À‹QL­Jܼⵛ‡¿ðZ=ìd#¢åš‡TlÔŸ®¦×ð�FkÃ×¾Ñã´’ÌݰO¦AmÀ�÷Zꃲ…Gš«£òR�À=ÍN 訧7“Ö^çH´*§MsËš›yé=càŠ þ´ÅÄbx®)Y¢‡CØ iÄðZV""&H{ÈßÅF+)è¥HÝu&3±91\Uë BÇ�îî1©l0–ÍwB�z0#r· ™€W‘'EÜ 8¯QæÀ¦¼l}¯¡0A¦|~Q+jˆ@X]�7_¢Â!·ÝÞë5(h¤0ײR5ÑÉnÃ1Úú€ôr·!}dÐ1Þ˜! œpFŒ:œp8ëvz�¦÷·Â\ñÎq…¹:ß8&Ñ¡ïD-ÌÁá¯|[˜;ã¿Çgw èD3À¡ëÅa¦R†ñ³ÊTIeJ¦õ T! ‰¹K© +,à^ºë&æuËêúײ" ÌQ_E%†¹EôH7„¬ÜÂmÈ(ƒÍÙ뽚H¿‡²dËñßA«”f˜§ŠòÜ3Ì‹Ì!#AÝ·âx¼lÀä^ìÍ ù³.†›;9µj˜· _¤xÍê öp›SŠ3“Y('âß0ŸÁŽkŽÄ™±˜d¤JeãŒ+ƾËÙ(s˜ãÒÎanк”Ṙ=åJ¤Ï°�52fܶED5ŽeO‘�(aæõO¢Pböïsyá´yDر2¦¤8ŒÛ¡„2§(¯ðÛŽeʸÖ§¬ŽÅ[wè>feŒåñ”úXpr Ä<1nâ°%( +ûËÕ�ê�ž‘´ÃíwßL5bNš¯n‡Øm.'Fgõ)ë•íÀuˆ9óØ/›�¢Li”3æsÌ[·t™¯õ6  "6IñÜ�»PSõ´§«oÏ iyFܱä儿­§a³ Š&/¶d™ëãaÍÛÛÜSE¸„M—3r`nÞr6ñcÍpuÀb%�¶¦8oç^¨Ú^Ãå¼5y³L£ó–�H™Ãmmêó&Š „õS0Ý•‰¹ˆxÞ’ï¿ÑCÓóv'�N¸B9bO´ 7U¯ÝÆtôó–�z9—ÓÌÊ!Á˜B€ò�ŸUnl­¨oFägd§Vµá¿}©Ÿ¹ñ%æmx牎±pñáRë¤5gú!xâ öDK=;Šöæ(š2»+ ‰yÃÁ_æxû¨�Ò[1¦ót³»XeÛËRƒbæŽQ ‹i +brÞ›Ú9!hª®GÁWó¬°.á5˜ÞRž^%eW£Æhî•:Z ~ûì@ÚPNoÏ� +“<½%b^×?½5&ç!]P•²³b©¡¨·š‹jq…|ûÅ©¹ÜBæ›’ôdlÆMœyåƸ +6÷Uoó)ºyaÓê-+Ûš uÇ8?û¼¹¦eÚ³£ù­Üõf½¥õ]G­ß)(cᥘK½¯yËõ6A&S6÷Uêt3y„t:‘}­¸¦–Åâõ®bÎ[x<ΰ· +I�+æ¨!ù"ÅP8¦íö›_mƒéˆ¼²˜Ÿé³´ÜÄÆÌÞf„g髜½Ý^ûB©Ê>{ëë²nL9ˆuÐÕPK{ë§ÓË ö6t¾™Š"¥vˆE¢§]{«¸†æ#¦Ç<ª"PÁå^ÎmoÞ.–j¥Jµ…Ãçé&Nâák¢Nr)Ðû6Í՛ލ‡&O<6Üþ¶�>·Ñz¤ Ø°·[©{Ò�Ûž&b@Tv‹å$^ÝÛžø»ëؽ¯©—[  9¾u¨Ë…}ðMÿ°ÓTYeä+Ø8íË È›O[sš ezθ=-À“MÙ ‰ÒàcÒ¶µ¹ïö{KP—› +[ù%yà' +SðÓºÄ_²]äF×vÄ@ £ÄÑêÊäQgD�Ú!F8çÈ-¥Žª +C7 Ny¡ …*;ñÄPf|ðL…à™±þ&¸rÙâW?˜O: +|AQTcNø‰;c> Ì>†ÒÚ“ó]/E«×>£ÒVqc¾iÆÙäˆi—ŽEx…(öPâ�y·¥<Û8öö)Î‚ÏÆ‡G«w›©ñ|�L÷sü¤Û¿ÛHª–ÃÜ­Jqó�ùѧ§ÃÊ‹œ&Gõún£w|xiQ(X–NPýn_%›€,ŠÂ]‹ü»å€}gï>(™gt�·?Íhˆ�·æ4�¼mÑ«qsæyÀà­ðÈü\‡ÙGæc��ÜRòÆd®k°± mvXóXAñ'M,?2�¼Ÿ��ö¸7½ ¹(:>2gD Ì>>g‚ñ゙©«úµð×KªC^wxð¦~4ÞbÀ¦?Óè÷žÉüUr«ÖHtêI2÷Öï'�­Yqµ`>L2çe+î¸Ú›Æoç’Gî—žpõ g:Éü¥bq3Bâ¼¾´þÁ¥’ùë ž+™ê<}ùN;Z銹E’)þUïÕ=>V„?—hä$]2·)�ó>¹þU¿dßpO~˜ÌµËé$0™“Òõ€õ‡1LÌ>d-PÔ@°Tr”Ï­ÑÕ¡š¿û®mÛƒ¢Àžæc2œÚë]-2™“¤ìÒ?�£Br#ñ•$¬‘Çy]C™b‘ŲJäs’FžÏž6‚mÆš@BQgj"<�™ñ�Œ8ÕÁ³*ž¯œñ_+"Mލ�ñ_Þ1,å!ÉÀàg|ãX³žøyÆG(è˜Ø³ŽS>ôÖeJã߇Â-‘?pŸñ×P/O¡žñÁüÂ)M�ò3>¯ÙÔj›gB¿¦ÚNaš«ÏøH„½?B?ãšf°þhÌø&»J +IÌø!ÇPU~|3>¶–ÃB7æ ož¡L²º±,ÒÞ´›ñc,d@ŒÕIgü7,b1›ñy†”šˆ¨@�fx÷±¾÷ÍøäG=í}Ø�ñ›'P•nÞŒÏ�¢;ž@Mhšòëž�XuWä÷véC$‡¸2ã;peàýMR“Æei[š€+ÊŠìT“f|9n‘É€ËRÜ@£âª+äÿ�ˆ†vi�füˆf³FC䌟�.L¯Ma†9ˆ�¢tø«zâ3¾÷õßmú±çŒï‹‰Â#ÌøIWwüú3>0'…@jÙè»{ú°3þ xw°Ò¼×ŒÁ=™Ä3~V J#ú†yÏ\‹ŸöŒ¯YW õžñyËí˜Y3~«Ü0×cÏø¨Š(š@öŒ¿EÔK8øfÆ?ÁYŒ'3>õ0I±ÄëÍøí#1áR!‡ûù«˜ñƒáž4.ïH(}cþL©¾fä{ºÚGܵA¸0¼ß�Ëã]«ò;·ãØ|‘Ló¶§6„:tË1:U”4÷{êf:‚€íU{JFü¼˜ éÜÞé LÛëKw®…CÀ�§ïi6Q]Jfü垃µWmÆR<•WÌøûÉÆ ÀÜ�ñÝ+RÉ+/Pvƒ•$ÿÝ!•æb lI\^4ÁÄ(¦4Ù¾$�;NEçqܽW”]eœ/¼kFÈ�&ü*ÑÊ0Gòò(µ™ˆ·dmB¿¦ëÑ;=‚±Ò¼ =Ñ’óu6BÐl¢öàO—Z¡ƒæ ³ýÈó…È,Q|'ÇíòIPts˜†· �ÉgW6½·õù3w¯&ÿY³. AD|æf�¸>Îj‚Zj)3¹fRב½•X 2·å½ +FWI~‘J㜠݊ú÷Dpl«‰Ÿ'+5®ò^ˆE¬âªmøj#1@ÆAøx: òÃѤ +ÒB „X6¸)ú +ЮC6ÖZ[†»Sª‰2x nœÙÎQ¥Bed:$󕙺–©±ÕDxÑÍp�˜×}„U•�èÎÈÀœt/1¿yw8‚qpü:xŒËHø¡v9`Ïøbìê0OiÆäwæJ-zÿRŸ7jK^t¦E•!£Ïÿ‹ƒoâé®~T…­hío%Àm`œu—ÕëkÖwØ¥¬ ú,#µ™BÃÛ©æÇdcYÒÂëòhó5«‰ÿ@câ! (ÜklAVÎm™h`#bø{ã’ËÕÇ•irlÃÉ¢?J ¶¡ù¼B7 µ~ò”7Ú$õ“e7àØ!úOÆ(ÞC³DNÛ,Ñ`c¤¤m‡Á¾,‡2mx²@,�€gR’«+F jq;~g=~¨åýªsb‘!ü!~J$è ÌÇ4H-ä¹Z!åFlK±Û!õÊôu»-=5Ñ2û¡ÑQÇR­Ûméf|vÈ€ûlK/×ÿÙ½øÌÁ󜬥0Àó¦ÁvŒ$¥k²ày<–Q)¿Û#�JchÉ 9¸iAÖIͱH[•àúH‡mik]ãq¾�Ù‹74ªtÁZ»~È먭HEN™ºb€0"bö›ì´-�Ÿ‡� ·ÓÛR>�³<ÜŒ"«�f#”WQŠí²e2޳DWAYÁ¢�’”È»�‰ƒ‘c~`|’ÇA.DªrÁco=¬Â\í%¬¶]|Z·ÐtR®f^rf¢5�ÖƒNt)žx@9*@Ô'ŽÜu­'W¸~ª­_z0ãl)›LGuÓ­M4³õŒPN†�™ÿ½¹íNÚ"€:qó$Ý™`k +«õp¥Pï��Ö#F/�Ç[Ï ô~_DÞzž!Üg³”ø� �mOƒ±èq;Ç�[ëñ‡²æ²¦ Ñzìíü3ݦ©õè/ ð!˜p&4OïPyP!Žqâ?g % ü"Šâ 6x?ÕÌY¯eÐz6f–®@ë)HܱŸ£±GÎÕñ¨@¸}Ôz—‰Œf€öKÛ/ )y„x°]RkŸç‡•›�v­’< á’¯õ0ëÎAµƒâƒÑ?7pûélˆRˆ²¯�¢vb�Ìÿ±6Žn=…‹^qH@ˆÕŸ° +«j‰¤EÈü;h·à )h=/8ÖÂlp¦è–E�#ÈË ¨²zMœŸ”´6‡¾¥É�G/yÙ£(ÊžáËí>µYMòÖ6Ó–Mª…kÍø:v·"Ø_àË3›û;ŽéÞÈ+ƒ{ÔÆØœQ•I"ÌÏ4NŠ$P\dÚ2V›:i×ôb±?%1sarîç÷ èTnщA©«ïAA¬7ßåû@Å�¸‚|_€­;•|ü\µ~æXK˜¾·*3õb2@w4¿ ~Ý//Ì…Y¡?ævñGVù™r¢œý1-¤D’›Ït„ƒR{VÆ{Ï�ySœ„mÒg®’•töù°?Ãp™Çåq€ €ÀWÀ ÆtïÅêW’ÕÛXPýŒ¾`{¶Â?_•íó˜Ï†yõE|¦è‚ÌöwIâeËŒFRvÆ€ÇÂ1”xðžtQN^3>ó´çÎ÷Égîm^3¾3ÐøµïÁ¸‡ÁB†É6¯z„·]CÜõI@ ²äC,gñÛÓ8ú×i"7Ýsb›+î×=¼VBaNrÓ›Ín+Б~á»�Çχ0ë"»wT9ßÍÕÅËö¤ˆ}¥M¾bh˜·°Ÿ0@–/ê2¢yƒÏ † ß¶yêZ‹ƒ‚P z E9¨ùÄo¶.ºÑg,B¤9r(DK<z‘ã£ðÄÕ± 9˜¡Œ�âÿq´îOÂBù9DöÝߎ£U.Ë}sj§ X½ìÆ‘´ã1ð5ôY¶ÆÔŒÃŽM—„Œ}éÇ¢óæ +÷!õÅaPrðŽ‚jq˜^ýI·;àI*%|aìbdo•VdßÖ‡çi¬¢Yš˜ qØ3i(ÁÈȇèè 3�(½á �jïâ0Ã�…T¤¿p”R‹.Á"Qá÷>k21á@T7f6ÚôkjrŽj‰«íCv] �,Æ å\¦ê<Ù- ê0Ïð‡)” \D’ÿFT%†f±7#¿é€£a\ŽÏSL&—x{`ž~HüŸ—!º16r™ëX³ÝªÝÇSÉcë¾q«S¿æ|"ª¸«£¡?†kêõùǬÓhm-4˜ü¹VÐ4CTñLoâÁ’tÞH¶©-då�m¬¼!,Á³%¼ñÑ…ÿïÌw#ÁLfÅîn8‡j[b»��Õø »Q”ô1éëF÷�A‰†o™/? …{¹*®®µ6£Ç|�çÆ]_iøÍ ë[6¸Ü`CÏȘäF'¾£ãÆ^`?ÊEM° +¾„p£ÃÈD8<ÿÛŽÖÞFÒåkÒ݆�R•ÛZGè=na¡=µõ [Ûh»Ä%ÜQª‰ºe´[".¼´oϱÕ>ûs~ÙXÀ³Î]�´¯M¬5|Ðiåx�Ÿ¦ÔïÐ!Uzâì•M/7 *Œk~œû,ÈtÌ•„OH@ùMS8$QéÅ·ƒ['áµ\1P½wÐeƒl”XñD¨ù~¼Üb�êù¡C2<ˆ„4¿Ú™Â·•cC‚ihfáˆ5,íF·äñóÉåKà(¸¿pÀÅ_Ðrà[»\yÓM-�ònï‹ÜQ­ÏGXÈL˜à!<èæ˜³¬­D‘†MN±¥Jµ˜[™Âåˆ$–âð°¥OåÏwücI÷.ñɈ…÷!æe4†"…·Ž×�œŠa£jYÉi)üC´dŠx ¥põÇn–j¬=€±š 25a©pr¦ŒÛ/}ÕÚ–TˆÂ[hìàcÖÉTâÅ! ,ɤ'ïvûà +«aà¥ð÷…:‚ õé2ãöD¸wÀ[[Q¶vâ»õQ“�‘[LáÔ}ÅË ã€¿좣�3¦p©4}ßB6ã;VþBsÖ#5uBù¨3« +êè†c.#ì®çbž[  7›3{üñ1…ÿŸ±ïƨ»ô5®Úª‡o2…] +›Æc/r\Ñ�o|—ûoÌóë¹ò³µ—rÞ\U+Ñp®= pÌo)¢¦ïZŽû³L”ž©2jntç°^%30ýü±É_Â1?:±�™?šÂ‹n?Rgï`ôLáÙçvkûÆ|�ýP.šÂ÷Õè¾³jª°‹ö’¶m= +ŒkÖ¿-h{ð1BË©¡FŒ¡v$Ì#¼máY“™“z(q¯gŽO6¤»ëgUØÚÂCíUÿ¯"mÁ¿PM ¹y�]ZC~£Ov$öV.1ò£êÞÖÝç:àKc�Ÿý³ŒßýmìÛH¼0a¸’ôÙ¿/.A©�Ör2Sã¨ï~ ÊôÓ‹êú·Dm�y7<�ìZš í¶ƒt „Ìx¶ÎV4?�åGÞÇØÆÅ¢å,üüÜë +Ü2¸Nû›×³-îŸ6hŒô%ƒÈà/�åûz:g +«ß.¦ôäu³¾x°©yÁŠQ¹,½2´ã˜?, hèŽfÁO<{_¤¢ÏÑŠù}›¶m>\s_â×Ã~[†ñ?ux½oÐ;°cá.lgÍ3ÞÕR02(Ä�æ…Ï(-cFa½W¦¦`รßû¿ÀeQ ^IÁç.÷ÚÚ]â°ò¸ƒ“½~ðb15�w^ +f°rÂkœ#Ó�ï_}~FŽ«4jÉ u2)Ø8‹¹ˆs™ xº�ƒ ¯è=ÖÚå>‰tNÁPžqF4aHÁUŽKö‹.|¥~éÆàj?@µâ^ѯ: i+%iÉW2¬elf«_÷ÑLÇ®·J/ÊΧ•A/‹cn.9r�&¸© �"*Á‡îr^«$˜ð,ÛìäO[| £y©fÁÜŠä4» ÁžØ1ýÑ VkãsðHÜ®�Õ¥rÛ()¹šÖQ+T€ãåޱ%q!”åPƒ¶0I *0e³ŽûÀ~�-4…Qu +vׂÄ3[Î TX€: wn4–D>w8‚³Ž\–„3%ÓÆ–.@Ýà‰ñ'Fˆ@@›â¡ c_ÞÌGÒ½Žõ�Ÿ@ÁËPéBžbäç‡D` §€±›—1¬ˆ«"%©IÊÕä§CÛ%SŠÅa—.u3¤Îxnÿ]‡¢¹6 ~8ôw* ÓIâÐ. R;Ì0n·®b*€ØŒÝоYoÈu0÷][688ç†Hð¾mã�mÈÕöA*{© ÁZ(Š…½‘ª·L?^ãÑð0 ê\p$‚¹)¾Ç´†\M™Ôöj«Eáˆ×?YjHn@”ÔÜš†¢Ò$¥Äò!ÿ¬ �ø9R×$`ÂÙ ¡¥VièGÏqtê¶ÜË̘�mêýÍPð€0C3`¿ !†êÀ"ïLj-™q2ôGÿ÷xÕ"CgŘ$iöKãI<å}ް´dU´m_šç )a™Lô3úµ ¾×ÕO„ze®ŒÄhq}—Ng‡Rð"ð�h©Ïb—¾Ð𕲕ôB×ÜÏJ|È1à/®Û…V'ÃauÖâŠ|F?´ýw®UÚáú 6n�æ3ì +pÐgLÕ�éÐq¢««-¡D,�ç.Ñ(’NÙÀ]ƒONB+eF2Q„˜Ï¯R 'ÚÚÔæŠ˜ èΊ°6cþ[†˜ƒÀ‘f„>1#�pÐÌíÅ,Žh‡hïØ´kã~ U‡‘ÑàŸ—ÐhþV±[åÄú3N42èVü. Öírm$]b?5õÑ÷/¾¯gœ;cYiÚÛóGU³"¼F&Þè**Ÿ3âóKEs›BÿçD~UX†ÂWÝØºAÊäÐÆ¦Ý±²“Häÿ9†�×e8>cF¢‘UBòÞ.Óá š «½>‡ŸÇ̯~Äáûq/–­~ä42$RÛ¤Ûu7µ¤câ¨QH.!<ºŒð ÄÄ:·? +Á¶×Ö”&xOpu«¸¢ò!‘âAhO¼åZ”ýÚc½D·ö¯›wîÆ”çàžBä0}†´9è%1`ó–C ÓœJ·0~�/¿"Â!j>³§£b +¤ÈñøÄ +e?™Xï*ÙCÑx}( u1н¸¾þ~cõýr¬�žùå1Ø2Ø € æ\+ñXó$9“’TI‘Âmu:TÍjèIúe$:ô +£ä~O-ð&ï}ºæÄˆ_†Bºf�ÛÜ{r»Åv¯ê�Œ&� åŸ0!·1™ˆ€Ô‘¿©¤Ù6Àö¾52Óü™8®™r˜6Öi³8h"‰†Ë+ƒ8­%pOo­öy…��× ðB@x¬;—ÖÅÉžéöTØÒÂ[bf“;0yIµN6Cž~+W#îFïÄ,¨Q£ñml…Í­0 !Ú]„ž_� ƒ{,ÖÇFG• ÍÃk6.|Ru' d@F,³mhY½¨[óɯ6Ï?ƒÖš¤ÞkÎ5.knŒ¦ÌÎð«Õ^ ­“í–è +K1æÇNݦºyZwæEcÎzùui¨®eœL!þ±È¸JL–Q2¡õ�TØ ­U¦àÅ=({Äy}|‰Uõ­Éª›É!è ´ËÒ²Æú3Æ\wL`ÕÝcÎ60x� ­›Ûý¿xç”Æå±ÐúÉݬíK[PšÒ‘¿Ðkò.-ÀFÞbœ¾¾ŒîPžæÃ0ÜZ§²^³„±��ƉóËAÎu¬ ( z§Æ{‚;]Ø1 Z‹ãu‰h jss²æ M¡õ«”¦}¼ +~|¥Ï³hö«ç +­-×F2 ­{zý +0SƆF¾¦¬+[aYO~Çr(ÊèHfØ" eZ.Chý¤”š‘UŒ9e{*.¬ƒÖ†TFŠ�1Ï@šÛü-¨úcJâ| 5/@y;Ô|IÞTGXkëYAsÐút9 +�–™‹è0„‘4ë�ãœGû–Ù°Füpz«\­±¢>\âÙ�.�ò)™£’z$dÌA¯CÁBæ¥B’>å‰Kÿ"Ḹúd®ž¯�…8Ý/*”"2i˜ æÇø1å PW‚Î:µ¿œ—ŠEˆ ®IÜÏ4ª­eq)-²=�ù8l¶dÌs¥®œQ½öru¤åÌààŒ +Z7$®‰ÓyO&P(`µZ¯¼¨‰‹9BeOàM-¨<åÉWÈeÌúc§•oVši* ‹#È‹ »Ç>CÐy )—q .›íîK±Ûü6BÝMp"—w÷*^ {\,V«m± EóÃM{šwj‰�"oû�´‚¾ñÑ[V»M3LžÚ YŠü»…b)ìÙÈÔ|zXºñ[W‚K¿ÆŽåVÚ-é0… ¸Y P÷&A^¥Ž-óFÌ I<ŸåBã¬ÑÄjÄ5ŸÅRJ÷2`VOÉqHyöõLÖÄMÒT`él>%šøÆ£Vç”ðÐ^¬¤=ÑèðøÈFÂõº”£nÆSPýÛ×€+é4š�J§W¦Ð<-äçÃ~˜‘ì>COn3…=QŠB•8mÂvŽê£ûvƒ-eÜ? Ÿ“Ä» }ú@·¬K:‰·­Lx/ÀÆI€DýFÅ¡ÐåH‰˜ª&]Ýíɤt8H`Òm¼Í%ÁÓþ¸=#Î'ƒàKlLÚ()Ð_1þ%\˜$“ègæ'�—$êÞ`H1¨Xät„Hz#ŠhÊüx ëL'Üù\ +Y„®tF§õiD[Ð\…œ$ÄlïUx6-O-…ÐZžYT”õ¼Œ0ÿÔˆdÎvœ8„ûø Ô…Õ¢…šÙˆ”.m5ŒYSê·,¨`p?¯� +¯´§MtÍßm ¡±YºBU_;sdªÿÛÕî±Q—¨�€á +HƒUF¨�‰¦ˆëÎR÷°0‹³PTH)cÓ`¤œu6#*$ÏÖÂlÕyÛñ–vê`ž�#Ë“%$¤Gq²+#¤¾ ä͈ëÄ AL¼zi*â ¥Á0(ÛÐ9P*Ÿ»b<»ƒÊºHXþÛÇ>~ª àCƒùâÕ8��JÇœŸa?sÚ¡ÊNIœ3 ÒÈ–/’…Ö1¿¤Þ£1Û4×]NuÌ[¹û%Æi{)}Z”¤äîúXˆ÷ƒê&a2ûí˜}˜™/&Ž+’Q–Ìk(æ7Œñóö³!�ÿ'qYæÝ¶ �y1Ëîã1�Ã¥Ú5ͳqÓêpi¿‰­Á5edUÿB§bç +E…ð<3a¾ózÌ·d´è¡ó%°`çKàòzÌñ‹G`8 Ç Ô[wò>^œW}(6“Ñ=luަé1¼„Ér(ÿªº�}1Yx8/ÿ˜&©Úþñí¦ÕRjÓðcq·˜x<q|ÍA¥b—=Àp7ùcžïÇèxe�HŒn#<äÝ•´±ØÅ?=Çi¸«˜E[ Œí<­ø1÷Poˆ3 ï33 ðƒÇGQr%>#³CÚb{^…ŽšÃJ„äk¤$‰hœÜ’ØY¡Èû±çÚn3‘ � §£(¾ðŸæÌ—’œŠ–C0¼¥F>é9`ã½Ìcͦþdn^¡ȼ™cìÏê¦âT'¤tQ>:e‰¢¯Îg“¦„Eƒ9ÜÝëøëbðw椠† 2j¯À$ )Ž."ÊÖ +¢ +j®çÙ„Ô)üàØ6þª @"Á�sÜ « a@ô<,H0U¶¸DÕþ¾ÑzÀ*>èCßs³ Ž ¥0›ú0ÝÖˆ9×Pùä=D1 JÇÍpxk««¾ÄF&Æg‚ÛádzDDN�©š-…ÛHO"gŸU”Tüq•áÈkVÆsŽiµ3t'�¹@„�B‰Ã cXPßxÏõÉmD6�¦•YPÿúÚ”Êy‘G’Ÿ±å‚Ãÿµ¥OVœV_ˆ¬|úH�¦ºœD+Ö + +r‹�Ô +£œDCWg{I jñg*}“¯Ç€Ò\¦;ŠÅ4­røåƒ_‰0 dÐè<2’a…`ƒñ‡éÅ uÙgª8ÕãÌ,jJñDr•Pîš0{@.TÓe5”†ØsôÿÕç‚AN euû¨OEá`†É²ÁƘ•ÔˆÔ¥°÷Ù†¯ZµB¬²‘lá°tq}Ôä"3"ñ…NC˜œzˆk¥i¬¶ÏL‚À£è�‘ßOtÄ^†à&BœÜ¾~œq£ƒÂºik»&ÇÒ�D �Zâ¶D÷ ‚HËraü}‚{ñig"Pï@Ï Š@íÇFU¨MæÆ(Ò–]ÆÏ¦(:¶TV`ÈsªŠÊ¬eµsõ0)’ RLCHìW¯Zˆ„"M¸÷ WqÁ¨êˆ$’vØå£Nò"dÛàl¦Fœ®:žÆµš'ããmG ¸–†6$"„z¬98foÞ* +á/ñEAR?](²bÐnÂ!‚¨=Ç€®zFy±õ¹C¹¿�u h˜½ol¯Ph\|��P[‘ÜœUÉ™jU<ÚÄc]¢Å£•‚ +-RZdý$w9ƒê¨W¡Þaøñèõºöê~ +ŠœÔ¯{!»%¢Ã²Õ©F\nqE'V×GÚíÃØÙ‰Ò„¹ćeøWÀ;ìdôŒ °‘@U£³ôë)ªÚ¦]í¯ªm‚¤ 65zDf¤—®lG�èˆê¨@aIC&ÚQÍŸý­ú�i�Áõ³Y‰›à@x·Á”?Ë–È�-mVã£nÓ�<ÉŨŒUØð6lÿ|±(Zû)áÑJ,í¶U›ÜeH¬M®Çɬèhßtì}c»£l„›ŒV$d'ltô¡]MWÙÑ«#1”¬„˜:*Ueo(§˜m”ìàÝÌE”c沦Æí¥qC€5 ½Ž²ŠUý0�Q\­NÖäíåzõü5¡¨³¾C݈'‚×ø‡3£­7\” Šòu±míèEîäl|ƒÌ$äÓSbYs…JXöQi�&t´&IáèÂvU æ#DúŒB�²<>ÝŠn—I_,O]𹎚î+ +‡6-2¸µ&cvÇøÊ–¶B™=©Ôý ®n@06ÉÛŸ‚çÏ£È:�Â8†ìjؼz‰€D.�# 7rÍ:öpϦEu¬ é„�z/ʵ™�æ>Ç(hMrÐp@Ÿ{ÑLª +H@ú@p0ú³ym˜vÚ«€h¶Ó–ºQ’¾�R̼"–� ¬+Ò9ÿ�[¿'~€wÚêD´|§m�ØZᛎK â�û@Ün’ôwÚvm-#JÖq�¥Wítüé¾éLl}í´lIl½+ðò'®‹t‡¹Šî!(vÀÌ-`¦æŸÅ1VF¾‚:ìp‰&¹ðCÁº@‘ÉÓð›yxVâÛÙÁ¢èÝ­án>8ÆØþÔ*œ¦½>éîzß�è ` ¢[ÑŽF—ZõE¡¦D™¬Ò c¾˜&wú�G8T…µ +Ž’«9KÖÆqõžè\!�†-“¯óÓhÏtoß…l¢;ÖÎÉœ�¬'ÍQ¾ø„QãÑ“Ït ç˜PÎèpR˜a8˜Ã1lŽ-N�¦ZpĨCæø™èg:KtB5Ñ¥\vÓ$÷ÎtÞ…çñŽ!˜ 4Íï8cÃ}Z8WÓSÙ4-iM7&c¤t+a‹K3«àmèŠFåʲµ oÅ-:æxý­CÞIÿÓG-0bO†q¡fމæLló*ŠË€K¡i¤À¤O]g~¨n ›¬áÌJÙQzÄþѾ^²´2Où^׎ºhOÑãgÁÆ®šhz‰ÙöQMpxÑ·ºd |u:žh:íS¾µÍüÅu$WL²ž +P);Ÿ'ßsq��YɤŒ½™$Ht=Ap\…¬ÁMóÂËiô@ +DâUgr5»a ­Ž¦ZIVöVxH·p}ƒA£� +Fý ÆÉu‘‘¦§Ð Øiz’ß÷½b9—’åð¿53³Ï>ÜÈ9ät©^¸aë%ž�„eœÛv|eÙ†ó iöLÿì÷@Aºãªë¹1hôÔ~thé¸�îöê¡g îy;ÏTAñÏ=¿|p>⦩@ w08ðdšÞÍlgÃ@5MÇ6½2*¤·iZƒ|HìmÏ €zF‹pÚ‡XzÞJtšfür¢"fm®·ÓÚ»Ûî…;1ê;‚Dsçß½Ñj6<ú¿ce¦GÏ<�<PÏœ�›j¼ž9§ÒB4ÔôDÆ™=q>Õ"yAêÏ´÷Ù4ÍIa„ƒ¼Ó(M�»ÖA֙Ω…žÈãbâð?àt½H­üA€dÔ†EC8b0›Çõ»õÍ +sÉ(„Fcáÿ¨·â—ZH�Ÿùkæ¾.¡O�Ì¢Ÿ9H¨ÓØ–k)š*¡Ð]S”ò-h6qêÌŒ`@K›{w×Sê©>²Œ+74Œ‡ñŠÎœ_ë±#lV^ä]—Ñ~V†�zƹ;|éhº-,Ÿ#cá�v +‚ÜïO^Ÿ?#žBBÐôo«À{ŠÏ:òI@Sš +ãÎô½0Ž”Ý«=�n‚øg[ÏW˜ë´¥Óëýk·“ê‡Ueù|JÑ + ‰(œÄ b§ñÔÌq#ꟲpȸ¼ãæÿ â"ß ¿Ø¥=¡)dTÄ)ñ�ÑL6ù*×€æüxmYj*±ó2¥À<ãx?èС/VÏø�ëpDß÷þ Šj¹\zÈà–ô?:šø$wPàEüŽá%I؃Df‚F=ä¼Lö ÇX1ÁùùƒÒ™p×­ Xoaú‡¹Ž�ž#æRª]ZQÿÐøzæá$Gñ/•™rMÑãyTFºˆ¥hQ£2NÜÀÖÀ‹ÒÍãªãöYK•Ù dÐØ@ˆ�=wÄ ÃˆË*Èž7*£ó÷²h`4ùmÚpA³ ±„ Ò¾“ÀKþbŸºÓ¹Zõðл1F’ØÙšJñYð[ا4ƒÔÊ£v¬@­ P§|ÎyáŒR{ï€"µL7ÈÆ�¶*÷DL¡†hëU9}%$S_ü †ò†î^ÆAÔ½¯û<*S™ÛÜå§a\Šy¸�1ò +)DTöàtL cKÄØ,QÙ{«+Cd[·Êó`y.J6T†:ú~ìj •?¯¶#‚¬ìk2ã§¡.@’˜ŸÀî|NPÁ¦M!~~&[ £)váCK‘‰›^²?Œ`N4[?“2ô¾Ö½•-]7Éár 9×e¡ �OÌ1Ø‘Dt¥ÕvTV]Á²lQbÍ +醛�™Ý•eƒ9M$ôãÚÒ�Ãù …ùƒO�ËÇ +*Ó—HM¯Ç�Ö hqÛ�õ7õéâÏ*0Û‚S˜ËÃŒ4#ëšØÝgº‹ô=N{vá ¬d >òÙ1ã=ˆ‰€ÝcBCÃ/“0ä $ññS\‘’¹w¯xZ,ûaùFÉH¸ˆêžœý@ö#)ƒ3³*YD$j¤œIf +…¨¡Ò#¨˜`ê’7áçá:Qƒ:Uhâs‚ñu$?½\�µ–ýQ¼„ +îޏôµXAÜ9€®ÉÝ+jøá„4+5~�ƒ°Ù3´'Áe«�°Èg;9ÿ£?o/ÐEÔ@OãÙ‚àÑžøop,Q##�½#�‰:Üÿ=H…t@shˆªŒn$î¼úâ?ñÉ™=L¤ΠR:"³fà,;¬…)%Q#b×Þf±.p¬öòÐä«à/jìŒG¥À~‚=ôGÔ@ÓMêêS"jxl©”î$QCÊ¢êz=ŠøÝP¥ý{09ó7¨âá+GÔðZsq@p*_Ô�\Ü CrsQã…7-d~Õ¨·è ®ÍåÛÀ—£Ÿœtu£Á·'Ê7ïøY½²N¢†KÜÄË–LQƒE‚l‹8p6 ørÁ¥ˆ¢}ÒÏÿßîš +Ð +Þ=šØ&³A‘‰ë¨ÁB78®@s1"˜õâVh2Öì%û1üH»Àä—/jȉhø™^Ô�€Î�‚ZuëoÅÁ¡( ”YÔp¥Ü@Ë3°; 1‹—™g` ù�Ï×ÂHo‚ +w{%šdËn’5žŒj ä‹“(Ä�E�‰†<èâT†‰FVÕ£\Ô�1p0#BÔ0|øO¿Õ8H5z¢ÌÐÂßNQã¹—ôߟæ�³ÈMB¢†„û_[-� =ʉ:‹E�Å�–ÿ„ŠqéqÉì´ú(dR¼=Ë0Ð[-¼ô¬‘NRQcWÉ›KW5À„ªå'hH) +(œ¨ñÔª0Ì!Ïô1kûåËHV«‰Ã¦Æ ÁôIs ºåˆ/}I}géßpU:¿ÐÅ8Ïk5ÃÒ¦FvÉ3á.; ‰õG†d ¿ ¢ú`,!¥vq“-°ÄŸàš„Â-¹š +ÎÛC$×8‰›q(-ùŸôäÿMä 4_Ø�ÈHó _0¨Å�äÚÁ¸W7¿íUJx?I€%†:1JOÈõ‹§Ý�‘dz[ ÎïÊð Y˜¯È¡~ã®E@š cN¬Ù€æ!:û1”êú°Q�ÍÊÁ‰l÷›¦y) +èíØ®—Ýw]¿RHLv²K†W=ˆõ9*X)®®¦ãÈv×»¸õ=ˆ>'uÿçVN¨E¨ é[ð:²3KáªLXh3ï‹x¦qƒJ_FàLÊWá.N�—9äv0'VóFM¦©ƒ‡F:ýØQerÍõ"ÛX ÈÅ.puâ®TÛɘ-ñy®Z8΋2± +ìÒDέ $RŠl®Çœ§¦‹Ò:˜g}©·iY“RXr£Í¸ý½ç·ÊǬD`@7ßÔ‘�� Hɯ*‘M‰cã—$áqI‡ØBm¸Ÿ_•ýh! S¹‹¦ém.Ñn�aJ@}_Ì`úåuîÆØ}ÍÛë-Z)!ÂBàí6ç @×HK?‡½Õ0ߘ‘Mìò'ôZŇu£"Yze¤ía¿ù°Ç‚ÙXe>XdTéaZ †nvˆe<ñEühnhÈ*32†ve„G0EÛwËGÔ2 ÐÛâë`˜bE\ñþâ†<È¥À6ÌŠ†6M3úü.[„«9ljyˆ¸<�ñ@y­` ‡ò\m;klº'fùp&6PW�¡1.…\ªi£$‚ÿ ¾a�ûB¸é 3Pœ™ÀŠ�¸P¾ëéÃqÃB�y—µ +œ£<­“uhà +c1´Ï f¹¬w|nØéîݸõ¸ˆKºYü3Ý>}jáŽ�²)21ä‚í +¡¨]L©ùÅÈA¸ù�éŸZõÝ apõ„j:ðRDuÇm¼ØÆ¶Ê 5Ãlè6›aIË5ÿT¬`ZÄe˜<[b SuD ºÇ!Ã[ÜoKýÙæ›>B‚î@: *Æ+/Oüpss¯è€ãÍw¤‘É0ÌÔp0m�{OöÒåÂDEb†…´Mº ªô>ä#ïO /H9Ψõ[Œr³Ü–§úßZCS +ÌïOe¿*+Lˆsà­b"æ°õ]Öúš‚»Þ8l]½¯¸ŒÇBiE´{ÖyEéóÉ–—Qé_ÿ-ß,ecÆ’­_­÷bC).äìè7õîöú*©�–£]×V[H`„ߢŽMÓ‡c!‚n{$@W@.<ØlÁΠ£‰9³Í]³õ*y!Õ¨N±…ù}•3OzÑxZFè6G"2¼bþ/ä©üDŒú‚Ä'oåxËè·�Ìqׯéì šÑÀ ¹;ÒÁZ7ÇÐ=Ub¹g ¢r ¨]–4Û…<!xðš®§FY†‹…½mj­TŽtÐÒ]±£KETLöÈ×!h³“ܾí!•Ž,[ùžÖŒØßÙÝ(Zyÿ™´ã¨Æ–çCûÛB)Í,PYúÀÏœw´SžæE +¾à5âE_OçÔàÕñ~oľ#‡3(8$™ŸÐÔÜK}Å"ÞÏRsŠx£ŠUDä%~êÆ1yûÏÁée~ºßvÉU>§2#êUR³˜´2¬„f¢´4v0F`•³Ç%Yꨢå“Á8&yˆ,Ö‡Œ!z-Mh“ ¾ñÕ›€}"½ˆ_ñÃùuUÄ×·ëKBG5—¸q½–ýò+•ÐX�Kª'!Äæ1 š@B£œ¨;šì3)2ˆ(0ïîîîîò.‘ q"bÞ¢Ý�«»»!g7ä.ëêÌl†M`†ffb‚ÞÝ�ß–Ym”À†ÜÌÌ„ «¬ªººªª*¬²ff¶!öªQSl‚ª*ªªªO0ĈˆˆŽˆˆLDS…Q‰()KÕ³&ÈúÍìáfYYVQ‘xþ¿eý¤êÏzý÷g=ëÂþŸ:�ø_N�=ÃÎ2:Ý ì ¨ö°¿m«­¾ØÞO3aYVCj†Í˜ ÚÂ24tÊýÖ�¬¬¬¬Êʬ"‡,‚„ ˬ�0dYVVV…¬!••*R*,8C±«¿ªªªªª*ÑD‚ˆÈtB$JDtüÿ?ÿç©D4 +Ù þÿÿþíôÿß¶ÏgÛ¶ËþÇí´ø¢ÖmÛ D͘ †üÎS.D¨¢ ¡ŠÂOH°¡­2 {qÍìe›µÒl6³äve¹ F¢�½àNpgîµi» +j¯A^�Ö§03´µÄ¬X­ÞŒ¸\U/ªQz*¡"šŠ0ÀŽ1Á‰6±Xl¹Ñö¯m[kR¯w£Œr«5 ;Àf[Ö–€WUUUµDP*µÆ”ѵ8¨@w>díÚ)wöûµµšÙYíîzâpX:ß’j5«Âš¥#[ͬª«ˆ•­ ³V«¥¨ÚV«U%}[m¹¾õåµÅëÝÝÝ��ÝÝÝÝÞÝáÕÕ®Fwggwwv½^@Ý•\;Êõl”kͬµ±ÖZëµÎZà»kÛ!â::å:AI­Äj� ¶žUíÚΨ^•JfÁ«Õ–´Ú!=jkC�JW�QãÔrˆˆˆ‡„ˆˆˆèNaáD<ÄL {ÿþîl܆½Ú÷ýL*êD*µi�Ĉ¨ÁD�uÓmÛè!&qìÈ8‡‹�Ü–Š7äås€}¢»»»¢Ï°<å¨v§ +øOx + +DtÁʪ…)Dhm©„¢§¶¡t%¢R‰J%*•ˆJ&™L%*•ˆJ£ÿ‡`©(‘m¾"ßË3@ˆ!ˆšDHyjÛ6ÑiÅN¹{m_Q¼¼!w8ÄxœòºŸV“6p†ý)ân›‡¸â"4xÈ ÁWøõð‡# +ÁPüƒ™!Ü…?ChÛÖA«3Ú Ú—*^;Žj{™CîjH ¡Û ÁœÑš1¥AÜ!m‰w†3Ä¢½Sþ D]˜!&8 +%.Náâ)F #è°î+« +ÂMÑÄ °Ì1AR +¢’)¨i‚HP>3-’rL@’†TPRɤ„X"‘†J 2sJÚÀ)7„ Â9ã¦?ä~÷¹L¸UétÚCÐå¸ +�®§­^¯j�è¦òßwšä(5£9põžÍf³m³yLP®ïöù|>ŸÍf—ßC~£ï LNrß÷oÄl‡ˆ®¯`_„Gˆ¢Ä»»ûE éuÑ"°ýÀÿ6ó~O#7BªZêTI§Óé­#שŒ°Zõ¿^vuúëøª¢×F�¿Àß� è¤�N§× QétjÑ !=ô¢„ +‰ÛWòA¿©éã&°{?½‚Þ›àï;äÿ»×ÿÁGÝöÔœQvÙ&W¶Ëå!¾²Ó·ígÚž q=Äö‰M.Î̤Ì̬ª¨´ú§ �@a0  „B‘pÒ±c, 8T\VnR*NRP´ÌKÞÿ¡ŠœQrA•"@O#®x¡ö–¦/zy!a‰¶y(rèP–<· æ9[Ó=pÈÅYâû_Ôû$©¹Ï&ÍRn�SÈÜ¥€§ƒï;u²ÐÝ™„%öJg_BS€}JWUïÿrö#YoÈæ�\œ²kÌÇ]«‘¹MÑ{ÁœÚ í±/¦‡Ž5ªÖ¦o*’0òÔäŽÀÐæf¦ ¢vè›å>m(nu‡/-(qk/YNÊßÕ•@ï€oðr€µ +Y‹¢¥9‰µ PHÐѾ)9ìS‹}m5(žIUÖ¶³Y¥Gg.�IŠZd“¦¾š‡ÇÏppabËÄ¡Êú&±ã˜<VoGW¬MÌ•Kbiÿ—Ç8X <!Ì›ÒX̓<Šˆb<&9jÚF=ï6¹ô™çß7Ê™Õ,py1Û΋~£Kð}î’4숾•oE!²°Ê<ªV!â=õ^È,™ÐÐ÷Tã~³¡¢ªoñÓ��i–C5 Å�M·i¦ p(|–œ! @7]9çýT¯P�’ “WW¹gd 3ðPú’ähÖ —ã)YµX€…ÈŠI�z¥û†Ð…ƒ}îÃ�+ÜàÚ8Ê_Ò’uH|®ü –=‡û6gcô©Ïê‰ßD@¸ ÓC¤†ð|Írñ—Ó�ƒ¿w�VF|§Û˜ ­�—€ñÑnŠû2ën¦‡<¦„\!ôtk#ÎÁ]„¡¦ÿÁ›ò\�½”Š,A9’w€8!ùÝìÅkEû�´…Ís ×a=¨îíTmæüÖª@rö´ù¸æÌE«¶V7‰Ã,~Å& ÍÈk¬õ2A1%° ˆtŽ?°ÛBóVYêŠÌ¾ì¶ + ”§¨còÂxKÇDF"ß‘§Øòi’h<°u@ H'·7P·âE¾5ª”sò{Å�PÏâ'°Dz*âõ$ò¥à|^ 4^ÿ“¸æµ˜ˆ"tî¾­†ÏUÝ'?¾›]›‚³�J©ÃA^gû4—Kºq—¼ŒAQ±Ð)»Ö[ôœ{ê2O†\ë}Ò…ÁTß9JVÛ)dÌ7CÔŒmZ2L‰°Œcˆ€yÊáB,z¡þ‚ÚÃûÅ~žÚ­ d×P~×"rD#ƒP×áUÍ£O ç¯M­ìç:uF•äå™ò—­ô)K~V¶ÆêCbÌ 6¶Evd¤‰¨–d·}6 püIªS-[Qù«&,ð¬ÓUN¾·��“Ò_š � 4åÕ–jÑwØ +‡¤Ï÷êb˜Âlwy¯ø´µÕ€a˜Ÿi£y&!ÔM‘nP—&C㸦¼+¹ub»RX0õ™ÜU  Onn«ÖXìl8àã˜ØÍ Ún_ü¿ZÀíòº”B²ZÍÐjÝÁè�»ËG54'—˜I,xHÚ±*°(]WÚÑ×åŠøhî™FnzS{<‹œ`F²²éΙj±­É=Å¡÷�Þt¥*2wÅ6õ·Ö½wóGm)C±ê_ùJ«f܅Ъg"›— HL�µÇ—i¹Z�D�uK­ONƒ å­eGû«AiuEè’¼Ó6^±»ãFºàÄšú9Àê‡7’Wð‡³¿*…i¯íâah�Ûú¬G™1¢é&¿Ý#™å&®•7òüXñ9f’°*Û—¨¤¯—ÂÓÅV¹¦ëE@{ S(˜$Vx |˪â[–•.mÉN%ƒPÜs0†Ã¹�mÈ™  ££°É!@S%NHtÚ¥ÛÙ§_åÌtÑô¨+Yq뵎„¥ŒE¸9å7øJ¦Lèòåq×*”— Ç%œs«¸¾i¹{–1;E�×¶[­ýnÁË—6IÓÆ·¨’Á„æ0’¡}Qã=O)ÆQp8CŽË¢?Ô™zp«ž  Kלãci7Ç…GªQÒƒ�ã6èØV‘?9®þ(…®ë²~w›ÙòÔ¡ÐY0ëöÄ­ÈÅ¥,Þóú‘Ppˆr\Ù CÊ’ã|pÖigî’ãîÅ‚³×½˜·3Ã�â9NR4ë|�Jî&„h*ØmáAQŽ*|†º2Ž'ó‘t¹£ ƒ‘ø­>vBŽõ‡ðð ¿#èî„xBQ- [xµ:ay¶�c¹÷í•ë¹gqÛ0{õNß®•¯¸Á¤ñä6ÓŠ„bÐ †.mŽK¯ï¥»Ý帮êòbí¬’ò‘k(²‹,Ç�.é?r–ãò2¤˜ù»¥óêºåäÚÝ…ÞO ‹Ll縻¡!Ž=Aù8�ÄÎq¶!5� äÔ„ÑŽÍ…áÝ f…÷Îat¦�sªj*Ç•DIBÖ�Üžã"�¦£Ø4¤²Û£´°1í7Žç9þ™tÈqDS¶ŸírÜ%ës6 ÇÅ}‹`SŠ—²¸ órœŠ¾Jä8IÀ±Á'„9áÔ@ç¸UmvWóN&Ç¡¥[Ù…"pOƒÓ9@õ#.ÀÆø-VÊj_£Qn»vje–DL ‚ýðÎ¥NÂ�õ~ +™t¸ôMÙ/+³¶È˜ûÓM=„lÐ}p�ÀSÐU:ªà/Ì ƒ#“Óðtxlmº¿å™ôŒÚ;@Á6íÐl  ‚¸G“¯_|¹24A‡Ü/w/Òš± ÞòV¼É��PÎ7'ÊÁh3&p;9ÈgRbßw+“áFpÞx€ª¤›ç�"¶Ò#÷ÏW;9?¥e2t�8etOQ¼¬Yº�L@7¤Ç£ŒÀ‡c q¢9–šƒyÄšÓ!c:Û‘õ£úØ&åcç0Ьñ�¯¼ˆVÁÞÏ/È(°;*‡C-Õ§òyॄ"Ãì@À`è¼€µzAb‡gÞÊ<…ŽÂPör]&Ú ˆ t$æ<Ÿ8� +Z³¿MÇ¥Öj¡r˜T„rƒPè{ ¬È-k^V½ÍV3ÙüK¤ +—sER1ª­Fæ#Y;jÖÊ"ví ÌúQ1Y�0Gc,¢Ã8*ª¼5AF´»ÿË‚ +•2ÖÒ™;´gGþÌ ÓÓMî^3LõœÆFØHÝaN�­=¾Oåu�}*aYE^P¶#a,;nj¯¿»ú´ÔO~Á§ÿó©gÆGÒzA®7iÜ3Ñi"²s:'æö¦77ÄF&-ã ½-�ì¿uÕðµ£:iXkˆÑÖxÇí#{�BWXaÂ;|œ5‰dŒ™z&)¿ýˆÃi›•èàë4Bxk¹iäÒ¾Éf_Ä^<ìÛdÿ?q®A¯Í€ÄA©wÎLqvª[pÔ™×'èùú°Þ¯d-Æ£'K‡ƒ'¸ƒTì4fÖ=˜Ó"Kâxô«¯$šÄõàžAWó"Ŷ¿> ¢¨ßê~K™˜ÁÙ%|"{æ�ÌÏÕ7{{ ÏáJ�º%óë‚ÏÚ’¤Vsë»§S‡àp< |]¤4_¢°!Ù´ vˆé?›ƒ`0ÝZ™©Ô÷-4SÑ;»÷ƒtC\[ÖxòWZ +îœà3Î+ëmEB2Yü>(é†O·gÅà•#„®ì…ÿ,µà†;Ce7t†Ñ»2\9Ôæ±i©Ù”µ QL5TÒfW2·¬p þ±ãÀ“RN2Ô˪¢ZÙÏtÓTz7Æ�¢„ ^õì6¤VBýðoÓ‰Ã7™%EöÏVÍ�_™Ðtk+ܵ¹7‚$>€ œ&À¬Ä‹$Η�ÑIÖ .@¼ ÒCØ–ý¥”=^%£æÓ ‚Ã…çöÚ{gQŠ ‡¿”•¬ e~zCV’Ó�D²�fg¬WÀ{·ŒoƒSèÓlŒø”5m m€Ñ,MA�–¸PŠ0¡‚Ô%ÿn#|ÃòMª¯x+H3mó¢2 Ï·UŠXºe5„S…"û|×{¶É‘IêfM*š4a"€Mœî¡P&Ü(�‘ã#ò¾AµÈmW៬ÑÅ^‡c`ü@ª²å"à¦@°C“åÅ×S{K×ùºÁB=ëØf xp3¦!Á_²0€ÅB.ºù·è>g rdŒ�™Á{Ù ì òßþj”W€_‡£0ÄpÀ½é¡ß±‘h7æ@éÌŒl'´Õ1û¬½E?üö]ÊÎòªƒW%9}x”0‘ õšô=ŸflûŒ˜ ­�µgžJáï7p[Oãè8ѬåÀòÆü¶(«ÐNƒ¥†àòe„‡|xU”·ø,>w�®È–•�èAÍ€Ob[¦` *MX0ºÞçë7#£ï)yßK\Ûn½w�Ðdøêûµ£€¹±Ï˜ÚaI�Ú(Jlü°Ä\Æ•Â}�w’äÏ'Þ4`˜Ù-„·Š‡KYz×L£‚¹Ñ¼ˆd² ?_¾‹_]rk]YòÔ(YbËñkaõ/]ßµ›#Ææ 7Ô\ÒÄÝ;d UÝJLjZJ|RÛ¸÷²ªÈaD‘ùOG»™“X`ÉK5¬’±ÇÁôãó€ênå‹tì÷�ª8AÔQΤ/q°=Ï2î¾êãXîü†^«�^Íž(² .å{{Õ˜9!¦ u|ÙPJ= +è ¥¯¡zDN:‰‹g;æˆæ2·ÕÛê�ãÔn Z�¢Œ6¶œ¹·×Õ�Œ¿n*[B¢¨u§gÚ]ª‰û×Âz€1@Œ·¦da¹j0‘Pˆñ€fvI¤ ]¼Ò§×²Ñ�¼xyfü ¨ÖuðL"À€;Uþe`¹ AÔiìÈ"wÂêi©¸ÔŒèÜùÝGÚGò¦ä>÷ôy øD�à'ó È€¦KìR·�‘Á‹üú AÉC¬�_È +Ñ´Æ!Є¹›#ŽðYL§Ÿ¾ŒyÑÌ…:í«+ŸBß™4õ/8æ�Þè6YýE”øÏnJ…Ñ'–ß; +Úu® +þ]…äö§�Y4Be`·³Ê/"öE­†{Hœv ‹/7!iÄë|,sä(#Ú™GM)ó>Ÿ–i¿énQ@aÈñ—¸�&s(G?ž¨•ž×í~ˆÆFãVë{[eq¨ç\³Çª_&“ jeàÛ>g&�n› ¼¨GºCÂ<ŒPc¡FóåH÷1‚~ø·Ý‘òÓ>;¸®Òm²˜»Ž~ +ˆž ËN5¼Ÿçâ4ù¢Tz¶㌮É49ã‘:zbYÌ€“!c- dÊ;&³Qs—�’PPîzAÇ Ù€%Fh“Áµ*C«¢G3îšög� úl Ç3LNðN™®d¹¶`£ë×:ØRB2Cm¦Ì1†$m‡Çê�Fnÿ{"15s<ÚÁx­Åþ}$ 3‘MNÇúeìaŽü‹f¶Râ!ÂNÚ$�9 ¼5 +ï|Øð»àØ8‘—C….`¡“‘©<˜Ð)½p{&ðI~…Ö±ïÒZrŽ ì€•¹vëÞûšÃý°¨öý|¥›!‡jÆ*€÷qr®ÅꪖËOÖˆç+JÔöchà¬ICý˜îbŠikÿBâÒ#7Û:ÀÃuXLÔ +b`˜¥-ÑRj¦ŽÄ‰[`mÒ†ÇGò‘Ž KØh$‹³É ¹ó~yc™×ò7%ßRëÀ"¤ö°\Ìx^£m—&Ö–Í|cÑ”…º…m€ãFAø6¬L•Ã%ÖMj×¡ÎØÏ½°Q! Îo<žÃ}g†¸‡ÙŒ�±°ºr¸dQ +Ç ¨Ðv€%ÀO#‚ÎÝH Ï“Áãß{3i·ÌÛ$Â`ôgÌ�LŠIFp2&¨Øq�Ü'øäµ‹È*U=’Õ\Ý�¦ˆ"ŒvÁh‰·BÁžÇ i†|3ƒh<¸ñ *ô­9e² Aå’Ñ‚û´-’'#ï” ä]™.L[—l~è‘ b>‡q‰É‘»2>%‚!ÿµ#{TÈ!u%ñ�žOÕtÿñòue„\�êM�h^í’/™å=ÔQÁHi. þ4%hoÀ=ß—$‡Ñ¸ÿª[lµàöMoF�jÕœ?�ýòšš¸+0ÜÍåä 2ß +€0Ó#ܳ™Û/Ãt³±Ãk�.9È�íS|@˜ÎU+XË|¼Œ°RÏØ¶(|ÿµFßÅQSŸ%#ˆ×WðVDîñ¤ã õ¶ûk/ë !0&ÝÆoa +IùØ`ú=Q.±À%(õ½gÛöÔYnÌõ~q£1õÖˆ÷áÖSb\bÕrˆFXræ37±E½ø57ivŽãQcÀ|^ e®cÓs!z?ê„‘;žåŠÖR²7K‰ÏôQ¨Žã<þ8�¶ìY˜Õ¹V½8å[a­¸VÈÈ3||±‘b0ëÎZÁV“&Sƒ ÔÀË¥³DŒƒfH›Dóc˜�˜l0õòœ«ì×cÉÞvÛPûòšA>´@—õòÿ(§‰^Þå^9E&ôòÎ8ÞèüËCdE^½†á�ÝGÇe——v0žË FÁnßx\Þi÷Ç3,"/Oä¢L‰i—G©Á&) +ß7Î<º,çh� ™¶ná{@8¤ÞbÅŸ=C:oÌœÍQ�×y¢Êè³Ä�ÈkâÈþ"í¶±E³ahê:pî+n¦®øí'å‚¡ñ;ʾHðJœ*„øß®1�¥Ñäο‘‘Ôí2ÓŸ…3Ÿ³ð\¨*[ŠüœÚÏòÊãÒËÌ•�èá5Þ�t:Ôõ—xNͬ�ß¶ÏÂ=ÃÚLŒl$�4EZî„SÍ�å^ÎÞæŒWöíõV汈þO‚8GåoÝ(MýøMzáb‡PwŠ×P£� +8gL_ýÀ!*ä<›ÛÓÔ-ÄkÚÿÃX¤ WªÃö­¯¨@ät �Z†Ë ãfåqûQwc[lYWꎟZ¨¨ÍhA4�,,Ç7:V¦\efUGéÖ²•ÔàqDýå¨]’XPCK0óœ·2ò;5’9ê€×Q”’"ïg±=XiºáHWä�|C�Á5 ­Êƒ—j<³ÄÚ8kv ˜|†¶JžöxÐ¼çø’ÌKÿO¬‡ÓNG¤áíý[ììKˆ¤,ÂRŽì)«à™=,1"ú¾+®�ÉôÖ‹ÞƒWQ`¡1†çQ� É,5ZaÌ ”$!4\,T(ñcIA½’÷{;xíb>Ñö9Èd©oôûÉYaoÎt¨ôMú•�°4+‚æŽG�˜Î½Ò?,(P6! ždÇVà•æLV€ ýQ{¼y c_€Â’Îÿ¯ŽÌ„lM35–¨ [§–D !.6ÙF>�?Øi=jM™Jˆè) ·ºÂ2Y«êá'UÂX$+R¨YzcG(☃U2 +IþpÄ’A�‰Ð'º‰SûE–òQ‹!é9щv,A#S—Æ”~Žl&=õŠ!‘E@÷‘ÖÀ"8¤M,IƒÓóDXAÎR "çú^÷wGþqï“"Ó,¢ÐÍâÖC”Ø•Ûw~²ƒ_—M!¶S=ˆiÝú:v•¹&›,Ž~Õ®þ¹õ^áLUø|x>S —bvƒvÞ±nñäS|Ùu™ WÖû:zš*ìfúŸ ¨OCÊ_‚}3˜“x£Oø‰�8ÔEÓ‡p›?åÝr~8¥ƒ)¾ @9±¬ÿ%-Ô5`D^lå«Õ¨+*Ø{Q@’èÌRôY¡ÚL5Y¿aÉòz¨eÁ¢�õ¤²ñZUAÝ0<3 ­ˆoµ` 3 ¨o“w é÷Í9·}ê‰"h«1ƒ>¦¹Þ8OÇÝ¥Fip‘­—’Ñ7^‘ŠÈ»b½m‚3x{?ï*‘þ#OMd# ¼¸�-‰)Ï.ãö`áÍbm1'Ý ŘB�ìݯ7Q›�° {¹Þ&*Ká`.Ü]^Ô„n@]ƒBúeTµÆ“µQwÉ;[ñ›øï)æ5pdÆyh­w2ù M!ÆÕ%|©YZ®d˜†¸ óÞÅakLû °xt«Í|qÅOtâ¨á±ªn«2…ðo™àh&³ìgMEº™Ša­d/nÁO6AtR�òåÒ�£¬)g!…ˆɳÈ˸×ö1šw\âÍÈÈÒ wg!Å`@’ +ÏçÏU]ÿ󵩱.x°;™Ëˆ¼]±cëñÞUáÈ|S{¶ôÚ÷É ŽyPÙ^ê“4¦¿ ò· ~�h`³+ñ<Íämaq\½‰GH& ™\ø¸¬±x‡ +í¯œâ†ˆ*ÑÃ&‚æ^?óò=F£E�/ÁôÚ“aNG L†j+~8—‰�Á•SrC…ÎuŸ§ÓÍ_ð*$uß êd:ÕǼ¡§ÒŠÈˬF– +{ r?�ŽÈŸÝœä*߯6(ý=¬|lÔϲ£]Ÿ)AêÚ«0�F �!¯-œ­DÔHŽ¢%â=òšTFgô hŒ’äáL¤û§,‡õâþç–gíÌ&=qÙê§/¡¦+|»¦ò\ƒko€8�¥ŠPºpo­"Ü1ö+­¸Ûâ;à†œêD{'¾ogd|s½ñ�C»‹Õçm]X¤:0" ’Ï0Ù¶ èDt0z)Ãñmú X‡MtlŠíöB�˜¨ Ë»xêð›xM }ýñ­æF!Ã)C W´”Æ ßy–‘B¾e˜ct‡|÷©EE"߀LÓQm‘o¦X¬qYó¼PŸSÊ}ä»3r"í$ùNüÃp¸“hAoU|/J~´¡÷D•ZÊ·(¶f²3ÊwE!8œ©Þ¸�Áï*ßö°c”_ -”˜XñáÓ&?è(^¸&6¤ü2×µeeÂÑä/ýá˜5‘FI{Ãò7z`òýQ¨I=9¢Ñw2Ç_~¿|Û&Ô#C­'Í>¯+ñ³£±d¾G”§|”ù¶8w50ó]%=Âqæ[²?å4ßfÝ·Mó-¯êxPÍ÷ˆ’ªÑ +ñG¸¥ +±Í·Ä‰jÌ|½ªŽ’¼‡ó-V²¶ ËÆy0‰U¸±”yB¬„e¥_½ÀÝ|�GF@HNúV^Bª$ß8D5Íx¾ Mʼs‰ã¹µ¤žTÚó½*¦TÞÊç{§F Ìöùf.Ç® ¸Ÿb¹D/ +?€¾¿äçf[ oÓÈ=% ú†@Tñ˜Ð·ùp2#{÷ª?ã¢pj(ƒå® BóÝŒZ,½UuãEß3È’;ËðA¯>fjœÕ!xÆ ”¤\ay+:jP¿aG¸’Heâ�b Eúˆ‰}³rC»ÐA¥€Æ¤È89 +/!ýûÜžJA•¾_€F,�¥o͹Ð_Œe^Ý�‹Ÿó¦¾öœ7/}K0ÜI˜9�bú>rõ!Ž�ʤLßÜ%d§(¨·�AÔÚš¾Q�tK»é[Ê„L'rÇëù˜ðÙØ¤-ês$¯ôÍ�ÐÇÛä+7`ì·GéО TŠå€úþGÏ +4YÊÈ\¡â·A„“˜æ™²'ÁóÃfBœ“¨ây¸>÷¡)ÁÑ"¨JpúÝdW‚M:NIY‚'yEsKpŸ˜nª¨¤AÙõ½žFLpÌKq2ÁI‰ç„aEÁ)y«eß‹Cžl圾=|á‹ØMAÁ…¬ @)È Îû�öì”G«1�ü(&4C)nñ�XØ’ýgKCÐ;|êÖ*»„‚Ëg^CãCÁ—òÀ¹—?&Q¯|œQ‹ø_ð ¥”ï²îv8Û]Žñ´vp<û¦à¦Ÿ¥‘ÇSpë׳<à#u\ñv4¤­’s‡X*xì ²àOÏa² ô}-¹RU4{?pÕvŒýŽéÜþëIŠ2`­Á!ýZÄ’Ø»±ï£céÜæ +>"öÙÕÏvAZˆ]ñ»œ�]´,øêzXpb¯©–¤´2o…,ø ž²à|ÎsÍ{ü.8ZðȆӂ+Gì°Û†Õ[È  &ƒiî+øêo¹àtÄ^Ê丹.§.8[ÄÞrW« úþ’×97Û]pž�¦Vqö¨¼àëzÁiÉõ‚sÂà îŒØMú‚kð .{–¿àË €ÁÉÁ‚\ú‚ÁïCi>Ä–\‰ýÂàJ3l|Î~œÛšäÏXhE¬Õ°‡9Ÿ‘R~öƒ#øšdØ\NØÆy-åõ+¯ù{åÉÜsdð“t¦ß!Û'ƒ«ÆS@ØC,ƒs¸ Î13¸[@fð»‚sšÁéßá•iÕf·û#0Ž‘ðíŸ04ø�®hð8À~Š Hm|[s# Ρ4¸[Óà§Ê¦Áãí}\°ƒÿEºêewTÐZõ¡`ŽC>ûcÕàà¾k¯\1Vüƒ,kðÉä[ƒóL»—°/U[ìßÛæ +–Øzø {x�ÞÞäz$rXŽ¡0#N55Ä%ìà»%p R,Âï†*:—Ë‚Ž�ðé¨ãq¿÷‹ÏÒ.çºÔõ¡þ R0éÚ#Á.³Ò¿¾Íǵõ½YE�¢ùBDLÙE5ÜÛ¤ý<’ +á8ÜšÆ4Ý©ž�þ¼úˆˆÜ–¹ætË +¸ÕDA½zpÈÚ¨3F€‚ ¯[Ä3½ý´¬â­¹ +ئ€¿°4LVï-K±¹©�憞 Óñzzù�4æ§ý'a^%tÎ>¸"~YÁnC�‡ÀUlF ž‘ØwåÇݼW ì�’Æõ»�dÄ Œè¸€p„Wƒ@8 sIÎ,�n¿'O¥¬LÜŽ³³“,¦]|k?å65A¸È_.±/«ð¥-2Ú°õϺëK <ã·Å«Q3h‰þ}‹ )¬é}£!ÙÜ6tqB8rª;ÈÂSÒ—”_!œ9# á&óC’×�ð áQÆ�­'÷wðš”ÕqnDóÞpÂ�à•©ë„#ö-ŽeçŽ õžPsQÒÞáVµ8…®}Oáì6¼"ÜCFå²'·=}ÛJÖcl&AN¹ÝÒ@/¯\€ +c�¥!ü×òШµE8c4´…áu…N³¡?BF8c,W=Ò=P±Æ™P¡wÖeî2^ê°{9> Ÿ¥ÃqÅ#\w@•¹Ó㕹DÊ€ ŽÓõ*¼Ë…§6«ìB$œ *»ÄÉC&ÞÌm÷›aAŒüÀ–ÃtæÅXêW¥ÜP I¸Œý±b:ÍWúŸS„ñÎ’pm\d +x^2«œw“pËî=Iº‰€a‹zÎx÷užÍ™N Ï_jÍ«N™ú­¢þë?Ð-ZÂY5­GÚ®«³ÂL~ œ—ðœÄVÐpQ�Ú€%üj‡·QþYôLàÇ„Ûhžƒµ>š¨¡ÖhGÖØØ½�mN±  ¡†7#“ôa]^r¯Ú„WæYŸvÎ>°ƒØA²aÇ¿"Úq—$o¥Ë 7nÓ‹xO`Dt¡![òÕ è$¯»Âp©Ì(_m gíɬ«ð˜ìN³¾ ]�Û¡¬À²ÂJª²ú†ÿ /çèœ@á±£Éø…KßÖ¡ð yUIE†째îë—ت;;Mk—B|¢pû@:ñbQ¸AÁƒ{Ûm¢µÔÌð‰n¢‹ØÔT&C +Ÿd58'N%q<‹â�xRxÛdÅï½:žýé +-…Û¬ýLá7ùRæÑÎã©rS¸£Z/É_F�xR¬:,]uã_[†VûNhuZD/1fYF|ÆCmߌk� +/?iû{{±¹5Nfð7ZL»g¦ÇÊœ +/¥*œò±b[n7yFúK‹@C¥H}«ð � —l5=³Ãz�}ˆg%Z)/4öcºl”7PV8³Àúâ0õú$zÉ¢Ò +—"£.u­páü¿­p0ãï˸Â2t…×­ÅÀxk‰Ôûbù¬ÛRQäZBOiôätù5!ªÄãל<,|ÛÍB’o™3*¸ZÉ»ÌÅÂËl¶±pÈ3bØ>€ƒºmq!œÙ³ý¿OLUx²p,//‡+ ÏVXÕVYrî´ìci±ü#N×¢ökwB Ï-§Svú^¬½iÏÍ«—ŽŠ (P O¸ÿ ¬µp« [xe¹tzLYaþ�capŠýßào}…ê.F‡fÚ#ñîb­à'”9½52pþ)…CÁ…£L„L5\øL$¬¡àFH;¸lGÎ\Dšõ"Mc&^Í— W0l.¼½óˆtá@E7‚l¿ ¿�.¼ØY“q +ÛHë‹-�Î_UƆEAThƒîäªæ.¼Þªz=àèVq<⊃¾6m�:蜭‡%\ø¹ÁzKfóXðH.‹×º¦(…7-ã� µÁÈîÙ ·PÄ%Cu/üÖ«øÂM˜o[òÓ ÒÑúi�£3‡0‰A \û³+ÁïP.QvXh¡+î¾Òïqò/|r“§É¸ †g¡öN‘€á|ÍÊàþp!7¤°å>pˈ +÷ò£‰Kn�´Cìù@r Ì'c:{>/sC$�>xáF/³Jº¹:¼Àƒîh$¾g°¹µKú!–nÞ0{dF`½Ó9_Šõà†ŽÑë`ô¯`ó-i+Ëò*[=“þ]Cn& €Ã<4==9†L—Á жôàô—»¼á`Úуx”w~ +rÕ�±«hðhu[�½…ma_&cè«¡î ö©Ø*˜è‹ +¨@.óY›X!ÊÔe]‚4L2×H�Q&*$xÂ^‰å”.[Ï‹œ�éŠÿ¥lÏ®xà?Ì é­“…¸ãQeçkuʼ©5þ¹áÝÞ¡afð,ÿÐü‰Æ±z䇬_�ÅÐ/ä”Ä"‚Åéð2­G}�-€ î²)Ûô0#°LÆèÙ³§ÆÏ� 1^I,îÈ*íRzÅËíâÅâw…8J9¯\x¸Xkw�.Èiái§‹î@¿1Š�ydq€€ý¢Ç;Ð2Hšá‹÷[;­Ó[Ÿü)"/hÐ0 †Bz ™šÅ“¹c#8‹«ߌœàÝÑ%Šê1� Kï‹?^pš83¸r&Ëèyî–Š—Ì'bÜk/!ŒÀ@°�És„ÄAé/ ¢Qp�²å´3HáÍZèAþûÖª…˜ºî„�úh©­FÎèí14ÞbhDÿwp¶úãBuÊ3j6p�ŽsÌ$ºá½²f[ô—ßOSq8k®£3V¡øÞ_—,ÆêêEÚ.M"ü2t %ÇL1pë W!´á¹:6¥!q£¬ßkŠ{¸âdT‘¸$$à'?¶ÝHW$NÒñÀHÜ¥”�Äu")rØGâMàÄÕ�ÄÅe´nXø!úÐz¡êþX…�m¯€:.Øœ …'Ë X‡ÄQ¼å×$> çJêÃI|Ùc¨é$^yðŸ€gÜ«poCÏ�—-ª­õTjpú+ +¼…i†Åv"lü�hÔì¥l¨‚úE‰Ë ë[*Ò¥Äó�¯¦5ë”çzø¥†)q{c¡”u¹Ýrõ£6­òP‰¯O¢‘{[ç휧£nn8sŠßÒ"�˜¶‹­÷fÑÍܯgöy=«è¾`Aº0¯ó�×!Õ +ìÚ ±ÄE€7dãÈ7V� ³ÄáP` W³Ãëp¬)Pt±©Ïá )ã¶%nN5‚È-2£Îç‘£ÙBÃøÐ^[ Zë߈ð^ù.q(»Ý‹† ?aΡàp¾Ä\\aŒ¥‘ z°YBÔò˜øÊµM%+tæ7 ×%L|q`V£¬¶„½þ?ƒÝÑ€!}ÇOȶ Ö¶[âd±Ëh¿’RR8wïSeâÙW…á2ñ¬@RÌÏóPîHZ>–j;ñ¹xàë:¯[ÙA°€ëù58 Ù™ø2jüŸ‰3¥ò§PM|ÛÊ•$›æQ%�Ý+qE$’¸!Õƒc0‘®ÓÄA­e­ò7’š¸QÌFt\M<Õ-2]@´5q¾R[ûWå×kâ_OÕçi¬a'$ Ík©àß Ó^‘�|;" +œM\�-ҭιS9œó jhHé‚jâÅ2ÇMp�6‚EÀ“lá‡oݸ§~ƒÞ"_Ê>b(^¤2-t1 =]×ò)4ÎF‚¡œ=²ü‡rMì±A©Ž^(~´…ê‚ÄV‹Àf¬€9ÇŠ1ÿZdÔ‡bŽáïû ù{ å_&Âl(þ?¡{l(GSÂ\A{WòfÁ‹¿U«4”?N؆Š=’“œuÚMëy9#£g†Òâ´[üß+8e_ 48ÎJÎPžÂ‡»ýçX»Ä‰3’³w{—MM¹,¶‡2þd(å\d|µB†âï¼p¬‚îL k�ˆÒžQžL7]:žM @c(9c× ™"†â�>è‰SÆ/ ¥ú3‚!•ñ„ +Kky¡X€[(W_(¤7xbH†2?ù%Vû Rn_¸ E�[¢û÷2ã<’¼hƒÅ %ÙNýv)¡8wìc—0”&³KŒÄPv /Bs¿ó¹–HÀv̇ȪÐÀ¥ U}²qVë`¿Ô!YÈÏp'Q¨Š5 %Ð=xêÙ1v¨€éWRŽ‘Úîw°ùkzÈPð“3ørbhQ\}–&K‚ó¯Jí˜JÃ>:a(²rJ‘n&„¾xe¤³G†öóQßÙ¿v©;#ã´ˆ¡¼Ï#ŸÖ +Ï�No7hÂ¥Ù%-� +ó~ÅPp ÆçÔû?Åj#8W%ØÝ9¢fÅånG—(pƒ[ÞÅw¯‘ðMé2ñ)b¤’üRñ6¥ ©iñ�VÊ Ae?õ‰\”’ED”x¸s |öM€xp¡! v²‰1c,w¢�£�—»#ùºÎ`ކŽ�˜4B7ö'•„}}D3w˜<ô¤d$8$éWÅ_w�sNñ"6‡U�â,šQ:©WæˆaèRëÚÛ¾/iÊ×ígÁqøíôháÖŸâ + â,£ðÎQZßs€¼¿5ÚoÜ}ATœ-…âË­µ4Ú"7›hèÍÚÑ)v,gë¨u…êÉšs±’7_Jë8G’<‚´]÷Û£�ª0ÇqžOSñ�ü­T5Ày‡{ZìL-âà+¡™S6÷óûá}‘”BŒ"*V©Å÷²J*©ÝH¸AC +B_]­Tüàß"‡±ˆ‚ —í™÷Úúw±Þ,þ1âzy,6¸ϱbQ3¯yI­âó}²œ_ &yã*žìÅŽÔkÔ2�9m°*^°I›üìÚsðYQ¬ ªY¾4XñÉj{¯Ò¤a”r˜ág†»å¨'Ü‘5 M.`åâiÜN×È Ð„>e˜LÌ#bò…wuà¡gxÉŸ¡�` ‘jŵq ³¯#ÿŠlŹuR¤nÇñ2ý?Ôò6ñû ÞAÌ�°=Kî¾íƒÐ>5ºŸazJcy$ÁWBi!6JI1õ +Ójm~QÜT~t;R¢™ý»â‡ÈÉÐ žË+þp$å~X‰l–=ìqÅ£¡DZ…GU+Þ9Õ…cóŸÜÝ,mÎ~_q† Wa�~ÅGÉËh bI¶  Xœã °5θ Xü�—nªe`q½®*ÚÁȶ±qP'}°xz×›®„` À›ÈEbí àmø‰i:ù»n e„Þ°Ú'DY¨o �XÏq“ÌÓW,þ%~çåbñÙìT» ˜‚ˆcq®��¨2q¬IáþC8‹”í¯ÚTk�¹T?éXEGЙ½22$Y<ëîD-R´èÑ€ ÅR.ìFJlŸzŸÓTG^³�#æ5ÛÒœP¿ËâT·'ÁQFSC®\àO=ÆÂ‹CÞ¹7�l,1•bm{Ÿ–sK†Üû®cƒú™hOÝ ïÊð0ðVb `Ï(]œ**ÂruÔ*ܧÅÅùQåŽhFºà³ÕÞ%ÿ©›v`G¾ 5ÔŽÈ�±Oè±4­±XÞ‹¸ŠIöÃô9ƒäèóZûE»×¢3«Fþ‚eÏ3z ä×d|ÅÞ: ÿ-ø$ÀH$[…hXu5#MTéÒò‹ŠˆR#ƒ N>M(ì ÉŸöëQà]ñÛCŒwͬ÷)_XKDX±ÙçÈA‘Zqr}Àp§©þƒ,˜Qpã@pê‚ÿI}4 ÅÒ©hÖ¦Mã¤D|Ý q�°þN5�µ8G!ÓEb1³á¨&cİr¼¯1@;Ù7ö7¸Âg†Èº”ŠÉw>K±|!çY CA¬Ä³ËŽw B—–êýª5¾Û${ñ zzB1uT/™nmһ݋{`ðŸChœøoCÎeÄc§»«Ç_|L‘Pùâ8¸NÀÌòÅ]s~§î +è‹ÿEÆp4×~’Ëë*=ÎãAˆÙÊ\µ-—Æ_ûÙ$•š¯ºXFpTX"¬'Iñ hÏv.#R]¬JCøp쳡F%ܼûΫ°}«ö�¸×?‹ÀWòŽI"í ²(;Õl)Í0ò+Cfö2»s–À¤ÃÔ€û̵‰×"²O2­;˜ÈXàsHRm¼‡'š)DÅ×'¤õ‚¸„£ŠŽ•Ðq÷лN�ÒÐßÐOO „ŒcÄ_ÌC©pߥmn7Aj  á ³=â'R¬fÀ±ðr†g`e¢H,ħŠî8QˆX*¼ç>§ÀšB;¿D–ƒµ Yk—„aÇðK`µî†‰‹ Õ��äѪÈÎWcÉõÕŠ@ sUMg!1 [R©ÐlL\;¼„Tšé™Q‰ÿS‚{Á¹ð¿=ŸBN¡åÔ ²Øð:Ì gnq€L€Iß›€ƒZïí$�ÈxïµwˆÏ + â°¸Ï`¢BÒDòÄ.®â¹:¢2,l,$7¿9ªè'à�§cfù6g É\�©�—Eìø-Ö¾nˆJźìÌÄ{VFâ?ÇÃÏÕ^úT´�h„H£„Q;ÂùŽ� V8FR®{´žÊ0 §á}Ri?Sñ^;¢ÒÚl\üPü°Ü-‚š£ôEÈ÷|›´ïmàHn"r”þò!WèL‚R‹õˆ>ç½Ú<2ˆ¤¡уwp ¥þqL�—ï(1ùŸWèš3¿pç>¢fÃáåCëUÎ*gêôRZn"jœŒó/I6ÔÖºúR1ùj챧†DÎ&ís:6ä]²„:Ê:Q^Ypô#ºö”©ÕÁÅÄW¹Ùh¶a¢Å¼iê§äî·8-M·¶¦ e%ª"ã=,qjo�¶TYdH³Ïˆ/ ‚oú:@_ÞNbZ�Ï.¢˜\3έÆmÏd�µBÖ ³Ì +X㔽¦»aÁo¨xY#†ÙMŒŽãÜŸ5®�¯é‡_ñ¿#ÎWQ°ñST›õö¨Þ ø[]Ä;®q'Ôq€ú¹Æ‘ðñ8¤ K‘Äï­S-«°ŽÅ‹q�5Ô-$±ÔÈmõPa”ÿdÉ)é¢Ã—ÿ Ý1±F~ƒ�OÎP–Òš«çR@=qœ�·ð–Iu|�ƒ­SRµ#Ô=cê;Ž¢Â}R\òóFFTÆåHÌ�Î2³q|RcXÀgu fãQYÌ9WóÌÆ³Qx‡³ñ Æ:¨&ë"ß6é›àÏ)¼ßýµÅ>™îI´ñÙtÀdP+NÇ`ì*ZÆw°½ZAjã…‚�aâ`bSð?’sP¬µqóg…œuàZ–tËY³©Ö…ð®wÔÜ® ɶü·Î“® À+„N’Ÿ³ ‹ï V¶ hh‡ÜíÂ:^)ïæå¿¶<Še"!|ú·[΄ Ž0óA­WAP˜ +¥óBFÜYÑ›3"f£”Ü$K¹«8àÄÏ^‰'ÙøA IäÆEmƒn¤A[@$”~¼m!@ËÝ2 ÇéDg£J\h”!¥j�y5Ì\³Ø€Þ;~QÖp–Ø÷�ª’j¬¬‡œoÁƒœ*\k˜tÞƒoÔk –œk;j&ßìM>’½|Cn#ƒ†‰c™ xZ“6Jí�ÏéN³áZ'®Hn0ªGÆ.´”ì°ðÓþrjè‡ £6¦5­µ9Ü>áp{´öU’äQ7¨D +jvÙ¡àv—§†¡¶FM!39,o$�žú‚5�ÍLTc%_âÁ[ÍÆ 뺠R€¹`*ì‹ÒªÒÁŽaÜXÁØÍ\ÌìÆe`/©›ãûdÞØ r˜4Á2Hvq,(¢^o»÷£ ft�4ñÖ  P¬ã.~@÷ã=Ú!’­øû3¼jzÁj÷ý”ÆÌ½‘ã¡‹ò+,V -g'ärLr|�VþÜóMW?¥>-0´¬ôtN—¸ð±›Á³�ÂÝâŸð=›;P°rœ¿öÏ‹ã>»ªêà+Ëñ˜ÇíËÉ–Md�x>Ï Ík3Âó/ž0 b½ãl÷0‹—aRæ¸þ4agŽoú˜Ɉ¸No¢Ø�/ÎcÔwŠû¸ëÈÄ’¨ +¬hpü#(Ñž›5À?J÷�b`4M×’˜åh÷݉êt°ð _ùt³@H�ZÁÖš‚Ik­OýÑîaÅÑ_�*kØ0ª-êÁO5øJê0ÐtÜ¢¸—=aà¶i@ù·W +¦sn1@6=E«Š�臧/êÏ�ö0yãÛy(ˆºÞPñÄ£÷gò¢`îRr +N¹�HS†)é88]q¦‰¦„pŒ6Ð ›Ø$;&~&ï”k°3†˜eJp~˜ÿ :yI¥™Ð+¾_-© Ôôaø³R€ÛïvºâR�m5%8O7©«)9æHÑhÒi÷þ6¸*˜4@�ÉÜ@Ôóð/`„íe  �:À—!{¡‰/� ƒXЫ»¾ +ËWÁg¡›hV—›çlÇ£j[‘˜,)¥'á²µ„NÑÐ2 ‰qîJ"Àd‰†5 BÚ@ô÷JÂÉ.ab@ûÀÕ·éÚ!˜Yi=G�G^¬­´>üÅT šÕ58I.áÞß\K«™®Ñâ¹[K«ôv€zÜÑÒ’‘QïP„l«´§¶F-A»­×89? D}ÖhÎÃ)ùî¹”t¤[¥ÌýãÏ)¦à^:OWøÆxû»ÕüL°�ÿã!ÓÝ»²‰«ò€®D…� S¨,‚‚!ﺄ]ß<0>ÐÍ3mäºqæd3h*=ÆOm%~™ýõ@À;IÔ +‘ÀÂÐò)iJòííqià#(2«ÖæÍÀŸžî³†ùN6¾8°J¤ �*K-®—™�~Ó/ŒcõËÍÚûÕž1ˆÂ +lbA'‘©ÀSÃër0ðWdå8pzüp0À¿h~®.Ý‚üÈ}‰ç@Å ä"Ò+ücÃÌk9ÁŸˆ¸�Z?…^5ãuKI•WŒŽÞœ)*È]¤a¾¶£f®È±„Ù¼!Ü["øsÆjî™='ÒÆ•a²É¢4œK¬n�è5%R‘†t3”‰ˆ€™UN�‡¿–á1™ˆÆC0Ñ'‡ò²§ð ä²jYȱF2.d3rGä +rjÞkV˜9ÎN¨ü½™'lzñ‘¿@j-i·†¡ +ÒgÁé…ÄOœˆ^½¿ƒ×qž÷Ü>«®îðVÄzp"Šs"Â×s«P=ö´ ´x ÆÔŸ'©îDðàIúx"ØþHì ý±'¼ó²:è‰ðíè'â6hn0á'â¸-HÅOÄõ\ šˆ>PaÇÌc{ E, v’ìÑñ¼QPDöü1P@Ñù›2<H”"R¢Ï@´ûe"{jË‚QSò±š§:ž´�ú>JüÁ“_]WØ\ëYñÍï%pô HâÓû[Å!{«5ƒöµ¨„àZGç*ˆƒ`ìÁì)ZTÄÁpà¸6ÂØÃi­‚£"qØ¿¨ˆ¸Ã?e‡TÄ{�GÀ˜"ª"ÜB°sÖ «´t’ÿœ‚E±'Ã]]7粊ß´° °à+äÂúø°Q-䔬ÎV¿1½"Xý¢û= Á–¸pé'{è§Éüj×"îfΗ�¡QWÙö]j˜œv¾óÀÉ +.y³§Yèú€™{w4%±óà©{O7Ù!×§˜¿€¹<5à�VEC.ƒ.Or#ðÅ>’(ô1#0.m!õAR·tÀÜW‚†®ûË¿—¼ˆŸò«Ü¿O.ÿ™ì¿­˜èEJúk#-j.÷íS*À· +œî:kçÆ”O_ió½üð£ ø§È’vö6ÐÌv븗TM#iá•’²/àžB¹T?ŠöúÏ àv«w¸iH€Ñ§ K(6êÒal+–q˜(LrõK™ìE „¥Ql‘\¡e„uy4¶ËaîO�»p4LYk¶™ˆXSvƒ,8’MYai8„^·¾ø¦Ì”¿�¯3g|ˆè‡‰¿Sfšhðw˜=Gž2°ï‚è YÛäy¨Ì[[þBe 6 •}L¹g•.ÆNÔåÖÌú2|&1W† ‹Íº?Ì@ˆå;ŸQºÖ<è§*Ù¿l†3µ.¯Ó„ïªë¦±ñÒ£²4[†¡)ˆTVÃE–ø£uèM*k›7¢ö Ùæ/�‘&˜_u—äTÆe1µ4UV¨vènìSeЧîƒ)©ÊÀW�œe°h�]xU°cK'Áåì¥h"Øî‹ä•Öò*ûX”ùŽTVÙ™:ñ>YeƒE B.æš‚ŒP “ ïë·Êø™(pbtšÍÀ³VÙç)“YÛéhå µ_ɨ4¿3àKûyaaÇ�åŒøOH@[e塤1x�÷�6÷zV™²™ìÆ]YeK€­‰¼í[e^ Ã{^µš +z6¼Å´am€­²„ìƒü2ÿ FÿÒ‡’òÓ_etd¬~ùb'D¨IÈn +¬ Åv/$+3ª³Q”*„o‰Ž^¼a±!@ÈÊ„‚°Ȧ×BVVTJC=¾74+ö*r–ò¬?\Á”»]>°)Ln ˜L£ê§²ÝUW0qXgºÿ¨—È•‘�˜Ù§ê»]S™ž‘08WF¬ŠÞ° ÑoǨ*Ń%,í¯oWÆ"hˆµ?§²—æ4ÝѼóUµŸÐí urKµgí§¤ÛRW†/K(àÆÛdR[›ÓåòPÒl«¿2âJ?YºÈÓë,QÂh膵gžYˆÅðöì�Íå*@Í{†xE#>Ë'‰R’ðŸ¢Ð=Kx‚Èee{«N¥LŒ2’8aí˜[*ùŒ8ù)Ĺ™Ïq¦�*æ3{v�Ø>ç| ·*sä©_«¹óôk,L>˶Ÿûø±_¹Ô„µC%CTÜ&’`q}V 9ˆY9R޽TŠÏžæå®wF|Æ[®ûÑ‘¤9ö CãöŸáL7¹xf>óûT£6ÍøÈ ¾I“Fc´QŠÈ3øìhRКÂ]%*xm–‚H\ÀC‹?å¨ÿ\Í€Õ_ 6#efL +Àäç<2it„A>ó2€d?GæT/ã÷!‚äœGž*´¸A¿”f§#æ”�ùl†/U÷®E&* I¿Òe9cóÙ|6gëˆZˆ*±Hs¡C’˵s‚èó8KÈ1Xç³¥Šk$:­ÀåzžÏö"–Ø Ä‡äÍà‡×"©Æ¸µ›„oŒøÏæÑZE¶Ö‚mýæcÀŒ!oØê³zã?u¢>ƒ»ñnxY�x•͆&<àIæSwZ[Kì³b'Û5IÉ_Ÿ½_RaÖgié°Ô ëë³×Í‹ÄcŸ5…ú=’Ïv®ù(¡OõjŸAЪ ;bSŸ‡ÈR¬†ÉË‹ÂI–•ÒUrêKÇh…ÅC˜1"0QÀEr}v0`[’ó°Ü©©ƒØrp3 Є®)¹û`bÞ/®Z‹ç»ä—17¥= ˜ª`r*úÉÊ @r|åÖÅü—䂼h¨�Xã…ÁcV$dl·2v:,Î3*qI,–ŒÁN ѵ:GHPͼ�j’›§¼ò?6ÉíI¯X¾©CIè�ðÓ29T8ö¿ˆ¿=U‚©åªÅ6òS½«†£ûUˆÜ5×ÚK—A½ëØs»öIþýy§)ð%âú)½EÇpo1äèæÓâû5 dµ§=^âB/Ô¦Üi¶ ¦Æ‹Œ¢º©ôxž„£°ƒã¨ 4?,àÄé;V}.€B§‹™œ.�èÓÅp’MtÌOàÚW¸< ¶…¸«q3ÔîÈû±,Õc‘[L�©4|TeîØÑTrà²ÙÛX*Í] ïEÜ"%Ä›¶’ ^Þ¦üø©ª Í +ä8†Ná5±Iì~šµFš†@-MH•‘”5ÕÛD¥ÅliXûÝ”êx4æ·ÆE•ÛÒÈÔq^·óX˜ÆÚájÚdšg­Áꙇ�Lóú­ªçË4—çh¶iå8gQ’KeØy`͘iÊT;9���mtpðfÂq»ñHi“WQ¨�UœÌLƦgÝÕÂcši|‹‘wõöC<œHÞ�éÀ–�ªeåÍu?=*vªø2gK£=UrL®J×%Ÿ~;�!Vl‚£ºíºñ,5MY¬B£¦1³6�©iLöüت¦ùtçmÝj,º ²Ÿ¤€Ë(åñ/î¦Ë‘pWþZ7WËà›jÙ>´ àõ(BËrb-ÞÅ®á1æ‚ý¬×pï4ºLjÁŸò4–§¾ŸµSå1³f{š¶ªjûê ñÏÞ®O›Ä¦™ÍsK3TÙ>xj‹= m«ìR¿§Qð·‚Ëu×~OÃg›âäzîišxýÅO³:û4 K_kAÛÀ-ÃQ÷¡Í†¨¹7вõYäQ•�ê�e_ïÔ`¸AŠtá�ÐÖ5‘{;Pã!8ļ®: Ôl“¿Ê¥è +jÚæÿ¶¥…šî êmúO¥éÁ³j-°y¨9ß•åxFÔT5GúrûOÔyž¿o­‰š2\b×LÔx³5€Bu+AòýBôŸ¨ƒ¼×sí2Q3#•`æ�+ÄŠš3D/Žo×I½m€“ù¹Ym·Ÿ¿Ÿ«ì{�åH€o›ÛuþŽ”1- E–°£¦cU—?ÆéÚ �s¹¶ ÝN²–¢R[ˆýôƒˆÈèånOóRü�ÑåÕų’ŸØ‹|4Äj¿â:FîØI¤>{pAu]èÁ�íëÒæ'ÿ#Räð¥ô<-qZCÚ†/µj +R„44®ä6‚ …Ö`�L¶q€0ó}�Q83´‹Uhw I<©ÔÅ'?©ÀeúàO† ìQüY^Þlé%çîÆÛbømJ§æê‰Wv‚LŠ Fí±éÀÖÕûÙ¾G¬ ,l‹ug +xÑ–‰ C zÞr%�6®�­Ïâ“ÑW‹=†Ñ.D©äˆN%B]ŠO¿ÁøB!W÷[ŸQ (ÉŒß:ÿŽ‘z|ítSŒ°<×I]�Ò/’?F‘{ZnñÇ·ÏwÎÓƒ”Õ!Ø@œêr$î{ÜL’á™~zü¼Qä£$n~¶¸å^.à ” `±ªK&€Z´r8t†®Ò³ÝŽglò¨ùÏ­A¥¯É˜£Ø—‰ªôu¸Ö 3g}#L@w&^Wi©Â¶Á+yÏa´ˆ(ªZòE'W%¶ÿ*¢í€}{u‰äü¾¸ÚÙÏ”¶³ì„Ž�÷TϬ§h!ðG]ÚMòî}?-™ Â+Õ…S·”Ñ&¼.ù«peäí…žG{õÂ%ÄNPEéK?c �ePçV*¢,ÿwb¸�oã0ÍtÞR£xRgÙ­;£$åA]lrèIÓE©/À°„– îI|ÆÑ|1yNOª©a|=Û"Ñ›çrθ¡ýèž—°iCÛŸ— ¶ÕI?þó.û|ìâoZh¨…2.ú"ûhH*5GLl=ŒÁúÛÔpFCöÅñfˆÊô1›¤ØH—.ئ4HKöC©òq qÕUüTK»ˆŽÇ/õ /'*ZD¾h³“/戎HJ°¸à×{JÊ;„é[Õ®½%/»=Œ5m6pEJξF¼HÍHoÂD~H G.7ÊzTãL§|©wŽŒ‰sj¹_Â/»ü1ÜæˆÅ¾<�ôÐnÒ3Ç­à…Èøµ£ÑµX`%œæx)¢x3Æ¿¢›üŒbmAiÔ¡Ð‹é@«Æ°¤h;ÈÄI<ˆ�âë4⌠åóó9Å/ÈnïU•˜†gg½¨(þ^ ZóÍX -Å2gX>!,)«M¬„Byb‚1^%ˆÁãÅz^¢Èc_™ò†Z(¿8ZaÌ]+r'ÖI‚t欪-ÿ¿¥ˆÅ3jˆOòš(åCï:þ¥,X±0ë¦c6Å¡· á5ù•Bц̫(.�vMÍ ‡%‡œ':&04ÙDáò+?ÃÛÔ9 +fdE£1s9zf0p”9G“Dq©÷·Dõƒj!Õ˃Vʇ\(ô± +V·%“¶eTð¼¹EFpÙ—ÐZ‘,ŠO9$—uR„D&÷ hè”1!R [;–àL·XˆfÖÛS#|GÖD_ô—ꈣoŒòMƒ'Å…H“½šd¶ÍXAÙ—ìú¬�¬W-M—`tsç 5+Úm—ƒŒ.†)Œh½¥êBWL\8q<ŽÛüË,ðâÓ BþÿN{uÌÏ_8"îpªð‰Ø)RÕ’ÀCA’ÂÃÎK“ÃŽ~Ô±$YŽ„Ó$W¿�#G9 —¼üá“ûPÂd$ñ=¨¸C÷�‘�Éy«®3Tiœ€g�x|C?º¾ÿÛ«�‚øÀ ¼‹2SÆÖ��!½:¤ŠÞÅHéVÀ%Ÿ`þêp�[ÄtCyêb¼›5Î×û©S„ÇIÀ¼’±Û†0_ÐnåÝ(›%ª‹§tè %ã}S,Ï—Ï_Ñ—s`Z@Ö ¢ÍgŸq{dd¶ `& #‚Lí?n þ‡< <%ÿ€œ°+0ëx!W[¢às%^�—(Éý^=¢2! Ó7ñVrnOÉÖß¿¨çØöï¥j„ "üB¹þmˆˆ3´bŠËà+À~h„c¾Òå'ù,Ob¾Å+óÞ'eäGÑräfÉ©ÓNªì_®*¥> "ߤCWº<ë€L;øÍ 87S³LÓö/|e$–ÛúrF›e¥¿ ÜCP&zw«÷ë¶L]µA£Ö‚ÙäowQ´"`2¿©5NïLyÁÕ¶–=ø6‹ÉÜ0 Õa¬l Øû?qƒ©Ä-v.@ü�¾ +åÿv8'í cò4ŸñW1WTÛ—/)Ðñ Zµd™ñÇ`ðtv›%Ç‚–eBÍ=‰¨™\P ÷‡ˆ}­uEAcKŠ!|­í ZÆU|µ\ N/ÞÔÄ…¢&ÕM`Üðü�òðXA*³Š8ÒnK¼å/÷@òçêd ‹)0·Á�Ñ~WyY™ºNt¨0"˜C%rêsåJ[ˆè“q;&ZÅMŠn甼4qV0 [)°¸$K-®ÀXȽHÁ9> ‚û…J +VYÜí¤^¢óP,I^L¡G‹>ï?µe“.‰e3YuJ‚ÃST1ØŒPuåjE�ªÊgèFa®“ˆ:ã¬Èþ ÷,›åŒô°T-ã(GTОëÂ`Ñ5[\ äâ[àTzíø4n¼ï,~¯�ÙÍøÔáZdÒ*ÂÑã‹dPª&JòK>¥:É—U­JpI¤)ÏÉ=’ÝæT!Ñ`kÓgÏ83L›òHf”8ª[ã_h�Á­¥åÑɹüNˆy$Ê~#ÝVð™NC¦°[î<,!Éb0±Íy]ËÅ»ŠeäšÝ<Æ’E±MêþÍA9â¾`l®¦š=œ•î ¢²×À0O¡Àa¬¿'«» r¸ôLÙ2KªxñJ ûþL÷F6§¿Û-à¥F~Åýî+óŸØ3µ/o¶¹ò{�àQdW…z–j^Ääè 2PŽú€èiÿçs8 øÒ¥ +,º{ÐÎSgˆ!°ÅÔ�„ûA‹y + 6Ô¬f¨úùÚ Þ�1ž®ÚÇ+©\–Xÿ¸EëÂýâIBIiåôP!ÚŠÉ*cº‰JÉ{A$ÝÑyHÉ15ƒ ÀpcÈ Ð¦}›2(„|‘/Äs^E8 WسŸN!>(Ù™C{悌Ö0` ä¶›(|¢'Ì!UãÂËP:LëúòÎO+ããt�¥âçÂ%°çFRçWOE¡êòºCPL ÇÅ÷(Úôo^§`à±ü› ±¬vÊ…x¤Ž�]ƒ— NQšé±ê‚r´ŒzHòÎÓ<þ³�±Ô'z¯Ô%£”ªˆ• fŒÆíBð,‘Bä™ÀlÅ‹¢Ø°¢ÈgÔ÷çV~ëcìgÒÀ…®DÁJ.ø®\÷úœ ´=Ÿ¥Û—e?Ó‚K­+p¶7}Šf• [ƒy"oDV?¥Ö-êöìfÝa“kÅü±—Èë#%\㘢YWAº°êZ謧W�ûR€Õ‰~ÛÚ£Ug(§ù²3öh'nôþÝ‹äåne�ÁB»Æÿ>ê6B6¢MƒòÜÑÎy¹Á±ë‚6qãЫ„7:BíS  +d$,?‘‚P¨Y�ÃäCnK6àËD¤±p} n›†©Ì‚¬í²1/ï ƒ¾ŽFL)™^K¨&C6‘NCZz‡8Ûv–�ùqÎg« +Á[XÜÚŽåF“j[wÓ‰“Ó&ܰ<Žˆ°ÛÕ +݉¹ÙˆÁ2ä#“FŠ,4?›lE[¾3à>ªbÓš7aÛ“Ç!Ì lW”“Y_C„ :ØkxH6?ºÑœ®MAôÁì0rd&¥nʨ®LQ>Xû�kÜb?ÔµÓq3¯ñÛ|úµƒú`;Û;¶cý,šn"G¡A ÙšŒy Ë6K¹iƒÙ²Þ Œ³yq +œhí°(*myR&5«íùM±§a½d¬'±¶ê³›% ¨C£9‚þ&‹â¬îhÔ¦÷i˜Ûó°t]§ýÚP_Ä0†®:á&³Û¤ÂÅM?ž-R„-´Ç²ŒðìÖ)ÿg¤ ¿' +uª{àF†á¦š�ž#ÊçýxW¿¾Ò·äÇ|oeý€“.=DEÊ�('Ï«×2~Œœš…DÆ€œ�$ªïæ²®)p¦:N²^©Qâµ9\FŸ�N=­–dCúœGÓ“WZNR>6 ¥‘5¼Rµ?Ò8aØ®[ì[VÅBµ6X%&WkªîK?àùc£ ¦h€ûÜf|ZøÎµ„<_/Â7G©<4׸ÒÙ-Û3eÂÈÕ¡NgȆJ]±{ì‘“èäÙfÖp³½¯©™±Ò]Uhsëq�þ�U]K„F¹ß`.Õçæ>þ„º q¤cBÒ­2Õ—\ÊÄÓ 0©UFÒÛØñ‚ÇŽlT�Øñ*:•¹;pcSMqÆ-š®®#½*Œ8jàq9X„.¢à-Žs6ýÌuIýûµ*Í`‡6�è¤G? */WÙª€ìZdÐêÛCÒÑõãÉnÖ9½Þp¡Á7�þL Ųô:\îQN}€fa‰^JÔÇ> $Ÿ <?ý$44ûÚšÙ• +!‚ÇA�2næ¦Oé'!ãux£< +Í£ +•KZ½õ®•på)$?‡ì©¥àèr ê¾Á„|6pv|ù;åNÏW}s_yl§bfŠeÁî+�¹ˆ‹ÎÏaDÆv#W@öIž1ƒß3M¨wE2¹ñ­ßÖ…–óÇùÎ EBe'ææò|€‰ê²^ �«R´] ²E•)–‡<ŽZšØ-Âñ»£ {Ô�øöÍ2m‡à +Ç÷¸2^Ϲ +r)·šPDÏ£(9�@q¢Ý…J¼#³ÆRåk$¾ ø +�ëÄ)öI»g#L˜'×”’‰±þ[é¸ä­hàQÛÃϾ›—ýו•Ž�‹%¥†‚ï~¸1¬aEx³y÷V†�hÑÙÝ&btÍj.½gßæÏ÷³xrèøŒÁ‰ôxVþ�É|,åø– Ý#Q)—ÝôŠ9ÇN%�XÑ'ÜÊs•LÛ?tàù¾#â¾™ ‘Ã#‚³2Ù©î…É‚u“Ýí¹àŠägšÅÍõnóm$8*i�•²rA�#¾Æa|öÄ V +£Oü±IUÂñSÖê°Ô¾ë �_�ǰV)§’rjV–¡$â©@8{VÃ=L`úÊ'‡·‹Ñëÿ¯+e×-·¹í•Fth¡ØÎjvÛ~ë—+(dMulŽÅY\à6p±Ï1|[HÄ ‘ÉJ¤Ë/g[FR óvw̰22<È 5.6Ħ4,Øàùó—óþ+ëlò‰uè¢Óë%VÖìÖj?ùÚM4|ËÒ<+åª^ÍIØ$Ê8¼q�åpcÕŠ%ËÜüA0a ŽÚ6½ +ÏÖ²íÅ‹ &è*h?g[ã{‚ +ìfQuzùµ-ÛzÄܧý(A@˜GŸêZuÿ’y¹€‘w7ï}`\¼Bo}¶Ï�¹TqLÙA–î¡h«Ñj¤ pÀ·Aظø'¸}¼˜Æà'+Ó¥�ÜÇ:‚Kˆ®t{Z‹(ÖñÆ€†¾«êp”oLp)3зd?T)¯ëÇ:€æa/=°ÌÑŸ9n[´ O[híMZpˆPTy4íåÕ20+L�:À”£!ZEí¥ÜHäRì2™‹àÁZ{åÞ�®’WîIÞ¦Y2¶ª.¸±È¯¹éÐ +¾Åe“Ï&?2@¸‡)Ÿ—šH�'-‹ã¾faÊõ9DÚ¦œ& X£â±'¾…­8�„¬B#Ë�UHH�ž‘ŽåbìÞÓ(‰ÒZC²vST'ÆÂë+�÷´YÄbc… Ü—H¯”› +Sè@JPUé]QþÀˆäufò‹bYÔS%3ìhÊ9ÇÅ“ç½gÞ ÏOSÞÈ©žw¦¦üTó>ëßÚ—~Dº_Ít¹Ü#:ß"ÎM¹m'nsÝcSªãŸïMˆB½±õ"ÞÚ”Í[p[ ’XMÕ‡Uf2`v ŽaócȉH¡áåÔƒÞ»ÁÖ •ï7åE‘̳’‚[yD°ƒm­�iÙ¸¡o ‹þVÂpØ-8匩*5Å)ß”/‚»å~à”ßp‡\ïñ `ü�O_eÂ)?dø�—T§NyVÖ¼«µu¶q¨‹Ì˜nˆQÞè¶0ÉêVšdP?]`À7E«Î¾�Ê)_#w´º¹•S~i°)÷£pñ‰ Ï¢|>¥#¥âNò°œòL(is¥º8M<¼tÔŒ!Å•„Å¥,,+¿Ù.†ßtyŽ|j¹K§ü•[|œb}52ƒ@‰kÅ­�h Á}3RD¦Ý±Æ³zȰN¹é;å‹£ÿ`}M2§V‹çWD…Æ�r ¢}"#�ÊÁîn—›\E¤ÇSµBþ]�MÚ• VØ£Žü˜ãv +œ§\&ðdÉýõKzÊ�v‰1(‚ß�¯•‡…\6úpÁþ€äâÃù3ž{8/”G;9'ë•¥lpK\ Ù»’Ê«…ï°Å®½À_âÍ·‚" <*ì�ë¢?e{JU]ˆ²ÂøÇaY»q—Jí+š­¿Œ™11bP¸-¯ðëT•3ÔM9Ÿf«ød0Zªû)W=Ðþ”“7¶‡x˜-ÃêCT¾m•ïˆÊu²¥Ä�cç‡àÐÐÏå©åDŒ"C»i“ ½Eû)Ÿ—T¯/+„RÎ;ìÈØÂ.�¨\ˆ!éÀDå°róП¨\w†$v ñW1àX õm‰¥x  ˆó@”^�·Ñ¬ .*_�«\ S—o±ÆÎŠQ¹%Sp3*92<²Få|±x5&Â-AκYÈ�Êi ,d„Â'©üFåÐx;@"3|Ô;*ç2½2×£r�ê ‘@ÄÅ�Æ–W4Q<*_÷ü?OtT¾öèˆN¤ë¨œD;}{%骩ëœweR.EhäÌ'«äÛksÞˆÙ1fX·³õ¸òµõ(ž¦\¬ÆîÞõê#¤�jêÔGô¹z¯@㉠(Hå³Î'Z/fpd&Nê0÷¬th¬û4fÉcåV=g_xä騮V°òôšS¹¢ äãá[4=�'žðKw ˆÂp[qMiµÀ~ìq%î FŠõPû$�„y�An‹�ZÕXfÜû[^ +Œä„©*$R&P"� ©ÿøTÞÜFËcq6蕘9)s~§ãè»x¡"áMì[*/�´æq+÷^äŠ ù£ôׯ²Ç(�έ¯€Î#M9 »vn±¬V‚5q¥ 8x˜5•�]`ëLÛTN#J?K)µ‚ÿ4� sÎõ�6ÔÒbÍv|¤}æ;ÖEüO:Ú_äÂ{»4•”_À6°›¡Nå#`Æ‚^AÍ1�%Ú©<Í6:Ü�ÊÝK97t!ǧ+ >ÁÈ¥5à° FÞ²ˆ€P¯š|&UÏüëE$z$!w ®K’ÏÅ I¶z›O|Št›å( Ê$ !í$âäŠ8÷XíÙ³Z@ Ì:tMƒ„#lÊL9‹’*˜ºïèe#|‡ä€o`Û<�ËúÍñp±ª[aÑÊI÷{‘Ž^œx°2“ö¶ójëb`dz #U9Æ` رè×Ó �…™·oxkeáøµpÕ­RÈ@a§ nÛqÀó<\ ì;Œ$ ÁŽUy¨Í‰ +â ¾’vÐv®*goV�«ò}[© (0-WŽß„oXGìÐ…�Õÿõ·�ÌbJùù²M‰c¦bçê±Èê‘ÞG¼÷>Ê9M’�±t¥•’ÚOJÉ7p�)ɴЉß"8 u+©‘L¾üú_ôƪ‰¬�  ‹Aui­,·Ð–)%ýA‰©üûµš™™5#3³â–ûE˨¸€¢%¤Z­Ž)ÕQm§ÚV«…Þ¶mK5•Z⺠…J[·�Ò¶¥–Ú¨¢m[ѶmÛ@ʰ-˲'eY–mM–lY¶´ŽHMƒ»ÁôÓ¡iÍHO©ÓšNÝ9I'é$H’Ž x?ŽøÚòÈrâŠBˆº+c<ïÆxf¢Õæ ÂHfüüƒš'††…hL“˜D<$()D§ §ŠçâÐ!(^™(BP„ªj\¨h{ˆˆˆˆèˆ( 2Ñ�ÈvqyÕMá�2ä,©�#ýX~¿=*½�÷§ö}‚·å¼µ!¨÷?Ù³'çwFÞÿýÿñ¾¼OïýJ½ë] ½+=5–Ì1«]{G¥+éBpÈÝB¾Ž»ûbF³šY¥¹L²].»lBÈ6²=��‡L69�ºDv t 69ºvYØe;Û¶‡Šía‡@Ô�ÔÅä"=mÓFúìB{†¶ÉpioìñŽ—ÿçëÿÿËÿ‡@üÿßÿÿÿü}ÿÿwïKpfÖ»@è:î]p½ÎYÅg»gGõÀ˜x"D��ÉÅh›ˆM.Ù¶m{Œ@lÛDlÛåvݶnÛ–¶ÚÖ�´�–Z×�X×m;›.Eî˜5U‡.bì±;f| œ-±1È9éGðÛÄÿßÀ»Œÿÿÿ_ŽCпïí÷�žm?þ ¤'gZJ¥¶×ëµíõJŸµmÍÚ–´Uk­Å/‰¶­ !*Z¨ªH•UU5�ª«²*©ª*.AÔ£ÀQé¨*Ev]ŸK\·ìb»×¶mµý`Ù²lÙk;^X–ÈÒ«ÙYîïÿßÿÿ“žÿo”³¥g5Q%JVÖávZºÑì¶ÌX†@´ˆ²‚Ô1Ä Iš +7’V¢·· +?¸‰Oþº}?êë3ÄS åá! +$�‚!2D�Ü�Ü¿H(wÿéGþÿwÜÝÝÁÿX`bòór"È1~îæ@Ì äì‡ 6›q fÄlž;Ÿ{2çâÞa²ÄìQø�Iü@„Y %,ˆ]3‡aA™y ¾bV �ˆò<`Ûõ`!�Ô‰;�¹q /—ñüæcB@žž°ÌmdÈ =nÊ«4ºÎ{ :�þ‚ág>/áë~È‹çb`b‹!-Å æsOæ?rÅ3CsCóÿ=€öôÚþü/%k¶lï&  z +15«±(Š:šñÑui5Q®-0­9¨dûöH ½£pPa8,�GÅ´Ñ$·ò€h@,DZd^\ {©zn…xÅÕ:€ìHÉÌw癚ö!"«;sä[$ õ{îö�.[4²Ñ5è?Ncµ«ª ªYȦãºçl8z§{˜î>B#åèâ¨^Î(…"¤�›5t°'îE‚.Guµ—ÏùµQFØè3#÷{2G¡Tœ“Ü–¹’9=ÜàŸbÏü�7 ¥‰§UÜ»4 ß�^kg^F�e€I‘" +Ð%ïPTãH \l(¿E7 +Á@;ЇhÜÓJBÆ2bç¸#œ+î/ÐÒ§¾¸ÈæqMÿ@õ±��ŸäŠ�‰æBÓ°¸e-Ü»Ó2¦ñBö¦›¤¹æW Z4ývjÿÚh^$c«Ê½¢œÉS£:` +–ÂÑý†Ç� Hˤs���´j$ I:ÐF Èýî¸Ê-—“™�ª° †eŸчø ,‡‘L˜P8Zâáöû‚êlÄU¤-q¬Ã¹w!Ú:J¤#_çbßër1[ßL$Ù†®3§2comL:[µžäÕ}…S©CGÕ{Ž¥ðEÊ€x »VòqëÊŸþ›�ß »Ý¾NkÓy‚uÁ¼ 7¸öß)øh1a´µYöTf<¦U਻zÆlÃ*‹Äû8(í`ª³|L~çS~�¨.ÛQâu—5ø…¡@)ˆþêHA• �å#³A2Þ>]CtÿaÞ©ŸE% ÿ¤¸ Sü( 1t¶… J„ÂZÉÙTïçRf¼í¼†•n7’b¹Â×ã&hx¯6aì c4ÁƒîJ·ç‘ âoßÂW\ƒdWdNbŸ=ÚB ¦ÛÝ„[…c ¸Ñ]Ðõ�bh -¢÷å,(�*œj$Â�÷CþLi+]â’÷!C¿�¶,@2Eæ„h�FŒ\;¸¤÷ôú¼áÉw $#®é÷ë½${+¼p;f`úN×óW«˜*æH¯í. OEUÇLˆ�®q_#ò XV÷ \±âý:þj~Ÿeûh õ”˜Uç‘”ÃÈ{=à ¤�ܳ²¢j0ì�)û¸0È(6åŠ2gt9R45�Û +ärO1›6¿¼ÐjÐ�Ÿ”ßUµðk¦Ö¤§¹÷àÜŒ›»_ì“zó{N  ŽÛAß;a´ Ûœ‰äbY,ð¾³zÁýE™WŠ Q]�êÉjò˜lÖ[ðSƒäÏéS²“ðËy&·Ïfè÷�ǽcÌê gïCÕka$ZyÐ$¾ ™Ã6/²ò�|²;Oo‰ ëÖ¬k«(ù;çWÇܶ±Ä®fŠ?./X{TÙÔR]–ƒTð¹¼…ÃV36ÑQ�1ÞU¼Ä>ÜÆŒxÐþäfEg=miª’\„€K$hÅ�«*ãÕ‡Mì37Klœ ŠepVnºK`¤ŠßßëÙæûéeX-`¨ùFàð§.ÄWˆ¨M.y‰anƒ!ç‹vä�ÿ@°Äü{ˆ–Œ—%Vh ¿>>Ÿ/zôÖ …m8%¡’Â"–-‰äc©‹€ùD¢ñ—‹ÍЕ/ 5a ÁdžîŽ–Ø1ÖÀñý¨uGtÇsu8ªå�/±½ÈpIÖ +ââa=÷_b‡bÒ¨ûôã‘"ýC>óѬöo­B12¯Ôòt}¼ †5g+rÈÄŠƒ‘BÇr›­,yuèrQçÂR�b©m`÷eYfQÇMq5Oâˆâýøpé™ýw0|8F”¡äz€ÍY$ØåãDUØÓºS_7,cµ×Ã/.Ð1ÿW_5·¸ÄQ$¦ú$³W‘þ<Æzè§$¥(.­�ΡÓ߇[Ć×5ùu=vêñ%àr«AÚ€Ý4Q?Y züDcþŸ°»-!!…|,Žø÷, ]„+öšÎÝtÌFõø1?rÜt&tñ +hìb¯ìOH&¿.Žûd®€uå/èPosa©…ú¯VcÚçTÐ�Øc‰tC�½QSÐø”ñuÙþ÷<é5û_ˆî•9ÂÆ°A“ pÕ€˜� +ù¦N“Ã- S”T$"ŸiRùð«†s LóëïWu¿ŽSX6,{Ò›Ž™¯k=|rž­£„�É I5è li&tÚ ‚×61~iDÎøÉ é8"8!»Fé#{þ²­|�öáTѨTfê»U†ó,5;‡”w” ¼y" öÞwGàsýÁ^n +`¹�…ÿí|Ï»^…ª–êz I¾-ŒUfo9Ón“ý…Ñ †å>>R;¾l‰‹Ù@£ø}A=~E–žÌY á_iÀ` „?ñ‚ÛÔæ +oÒÆÚØà»7òfïï%éK�(�8 œývRdM-)«� #�àˆ¢`nð�3äôв×aZ¹ÇÞ§­‰åš\×ûAŽz[S”Ú Ä÷µ7þÖà³}Š‚¡8ØO–óâÛX·ÑÆ'´t/x®ËÄ6ôꆲVSEYä$¹ž-¯u'tzÕ° Y†Ème‡ý57,+:ýœŠþj°@+ïuÌ9ü«ÙÇÚ¹OµôÐçÝ»â4OÙïRߟÕd]Œ�"Óµ;a—$§*·XÇy¹‚Pò+Ô#P5ŽA¹ß:Ï÷úmz¬CüñÆínê4œÛ`•‡‰�ã ·À +'Xo© Ú§“à ¸%©…SIl PÊEJø`ë ]»Ÿ´Î§ ‘# 8CÖ£ŠPK_2QHÊ«ðûCô ©È½“e}Aÿ¨;w‘]þÜöpX2�F@\A¨`l‘÷±[è¢8驸.‚�çÖn7eÍ“À.p½ý¡PУ¤×ŒÔ/�|ô×â¾nÍÂ×5}m}Ós$zÍßôè]3ji¹mM�€tD! +<á/ø!sü5¤Áyï`¸t)–} Ï�ÿ½pª`™F}‰„ÅÑh¶þZgÛH�æWù1¾èN8`ùÆmIV@pôÄ“QyÔÇ t¯øHÊâ­Óƒz=9~aóHÀ­'¶Š‰t÷); RæO¿(Ƥ³—a€f÷WšÃ:Ñeñå‘ïf¦RØA y›g ¥»E½B̾WÝÄks²¾§c_«¿}[€ãw6|r Ø餇I�>‡}Ï'P¿¢?š+©š'á;²² +Ž¡‡‹ï+°Y /.î‡öFP.Ø'íñùŽÂ®ÿ¬t¿ðÜFJ´B‹kiϘù{dìÏí÷·0ü¬¥X`ÆÊ~·Y:ÿÖ×*Nó¦VùˆŒ/SµR)Go‡z�_@ÎN‘¨®å¯Ú΀±@ýЮLºòA\ [ùŒä{+‹•ÕÁ ˜NöÔcOžØÜHŒ‚|Óáw7¾£ëzÃN5¶� V.XE¢&ëECêH8¹Š^ߨsx‚ j÷I{~žN� + ÞÄ]s‹A#ϬÁÖ‡ä�¢ë;§i+{ê¸*Ã/˜Ü4» ¬féËkyYˆ’¤O°2è}?Ãß b‹X8wlJyŠáˆ·49u ½ X�ém$Áiα¼�峨õ±ðž£{¡ê 9>Š¿‹À ™¥Â6†3o +ˆ8 +>ª‹+ò› N;éí¡A¤v*Hò¾ÌÙ +j Vü|I6bøå•uû$dpèŠU`‰#­1éá„8×cëïÁŒ=¼<»ÆÕ¯#™¡0Ðè9G¾ðüò�½P,!pŽ)eA2ìÏŠË]±©R6ê�  +Â"«öˆ¿#>‰(~û „'—QD0*‡ÙEÒ.o®˜ŠdÚ‘rýéL˜FÉ,2'GEyúýõ�àŽ³ÅFâPšxüHŒKŒ(4íÊt~A.¾ÀÔ×ß*9d#ÓÙÇÈô|ãr»=C–ñÈ�âÒ3‚}¸Ú"7¼‘fÌÆ^«¯Î¼¤×!ÖdS?¾8 +'¨x@m>¸=úhP0—صõʼzäÐã�´�/ +q»A ¹¡Ño£¾([åË^ âiF`� ƒ NZ$³ ,˜² .U!‘¢¹œóì�"—üCà‰|AäµP�CY_ÅÛ +ï· #TlOD=��ó¬0AÈgóáöõ'·ct øô‰+xÉ‚Wêf]ïf °eVTP+“SN0GÓºFuê]�fw`8dέÎP`DÙ9XX¹zG€XZ3JUff T…•p¶ÿ×Uü[!“=Çs$Y)MG Pû-/Õ€ÈË4¦j‹¦áœroü®F@Üæ¯|öº8Mù§UHqwRœý¢» íÔ è&À*rsÌú¤Å!€¹È¦„Æ0ƒÚ‚&Q&šüX²4ÈoÆìãÀ4@Xõ@®S pÓWˆºœÏU4(XÝ@¥‚¸÷;œF¦‡.m³Tä”ûQÔz�ö(C…µK,±ô`r-Uÿ.žq1-ãuÜÅèœøÝ—ád…Ê!|^ÚqŽzTŒ¿›jÃѯxcv:ñû×ìæZp«1n<; +}€gQ6:&>ÂÝp§ÜJ[„Á*횉¸çø :1È,J;JMD½1ú¥³’ér¸Çvª4ƒ–ÚþrÓT:æ‡Ü1R´ßއ` دñtA²¾âˆ²Éy¶ ¤ +8êêþÓ¿Ð'´‘À*²ßMÖù³µ¯»äÍì7‘9ç½°ÌÁ–C£`XR,Ýw¯¦Ý¥j �ÐíPB?i´¢|$K¢?IPáêóè=@®£Îƒ ê—fØÃ+¦“+¹©ör›*à –¯*£:?ZUúCÂÂ,~ÒóÅ�º¸BJÅzá-¬eäIÀ·>äÍV€Hœñ‰õ:&ÿïF¢>ì+2¹¬³¢ûa˶j>k¾ÁÙu”,+Z4tå¸y‹í&¹køâ÷‘'m•ñíÖkÌ£Kb·C¬®‹Á3äðoÃ.…½ 7̹Œ™9Êrz>Ô‹ze°;™~{Z�ˆç³þÛ= ð(Qcæ�ÅE;z2Kš.% Êqþ¯íð‚v~Ð9�ðü)“Ì“ Å}f8S€âjº§ÈÕ) 6¸Ø¿8·ÌÎ`I®q¨h¡à°mÃ⡪¬•åÛùI®[Y\dåâXý%šú£ + Jƒk÷’à`4Lâ`UÈóNe¡ßÁX~÷CL¬ÚD³ Šu¨_{`¸i� J"ĶGó¿ ?|Z$xplÞÑçrAкÕW�Ã�¨¾M•ÙH:ƒÝÖµœiL˜tÒ6À.t–¾ þåÒ:®£·OÚR ÌÄôõ2ÐO�Ы[Ñ…¦ê¥9ÈÃái½Îí^&¿=Ñò MšîôÜjrvJðÖIKáO”ZÅaÐe›øÝ,Ä´,6ì*ÇÙÁ^Á|�zèã�àz3¸èÖJá‹×üjk¾ð…øb 7ÿ­ýÝÒÓ´ù‰Ãn©!¯µ¤¤�bžYCV€²$j#ú|Mèh·ø zq|ð ÌÅ/ýL(‡ªâ Gfý—…�6i秉c¥‹N8t +dO&ñ×(ˆa¬‹»-;÷†¼@©—/Ü„q[ _sã’ü¸Æk,Ê6–jÊãtD‰K÷…ø"Fõ…Gü^Þÿ°í1û�5Œ ™þ‘]a<•PÇOc¶%)VèžB¯~_)ù·�‡±¬Â\— ›£‡^Óu5e ½KD¸vÃ-íoÎ(–|ßY©wµn’�á0äÓ +Ê +‹cœJ„ÒÈ€öú„ñé4ˆ¼æ·kxVZ³s˜™ãª�ØSÛ”˜dDä�>ìA“t‘39Á¸j±ä�:Þw¦8 w¹^cÂÆÛçPÀ] ¼»U)ÿ’‘ÏÆ-íä÷}zÅ˱|Q,)ÖŒß÷¯«‡SKF< PF¨!¤@vÆœ} +B‡ ~¦<±RÐV‹}i„ZFÉr•+£‘Óý½^SÍ*Àëå8©ú" u +ÊÙ†ìôЃo©ß³V¹‹b®¡\F7ìÀc G̦�þ +Ø! »ðÕ}$ XßwþùzÓHX½aÏ÷½+=STxˆ]Q|çêáÒpè¾k¯Ýàè¯}Qüš@ªG[ú óõWyÙ¿"÷§�ÿ™Ï!GØìwApÔ&AÁÞQ.§aݯDɪ߸ì4þN0®�ºžJåVñYÃ{õ»Ú—�¢TSöRÿdNë“ÙŠë÷-z¡2ú_ö%Ø%37÷¾´:‘øÐË]Ak'¯±,B�]#Õ¦xÙ‘CYV¥û +šk9ìÐ>¢hE‘0 .NvoLÛ2œ³‰6äw2à´pN¼Œ\FM3„áÖi¦šÌè„]î¿ÚÖÊùž,@îHko<”¡ ¾1ÓÍý!TÃh4‚kó,Ø’:ìc½‚ÔN!Çr/âpµ¥óÔÑo@ŽlâðÇQÈ‘ªë¬7Õ1œ¨#D3´Ø®¸¤UnU[m_Ô +ïWÜÑ�˜„t|.Ȉe²!l£KLµ*àìJk½�!Š#A9ðå ÁFR‹Ó¹]q”õxÆQò poîX¤t'Á‹³¦C¦Án¡Qã W˜BŽ8p’¸ñSR²ùíZäÈuü"=S=Ž×èD�ÃG>¤EÖÆ—Ç‹l eÂüÓx¬e‘ÄF€Þ«ô¸ ö +$O‰ÃPŽ1‹âŽôrŒÏ|ëЪ+ìȹëÐóTpÆÑÓZ¬�pLnÙ�¿Ï6DÔ¾nt*¤²>L²Tƒ +bƒÔ]ëk†åº­Ïm*FBÕ%a6FAÒ·â›ÑpõïoeÙœ™)p¥"HD×ÚZ–5&C{Wpc€¥\>\9’#*—jT#«è`XÈxÕM¹o+–UíK> 1»o+‹.œJátYãßÈàP—Uà“Ž*]–o©Iê�eW,ýô±Ñq„EºÇwØV_¿•׫úi‰™¿• 4 -쪻¬£håMdð·ÂýjK€Ãø]VÇ<†«ß +Òk¹«Eã({—Xa6Â[ ™× "ÞŠ°¥ÌÝëÜŠÀBR:™ÅX¸So%bP�l¸®Ö15N~z+$çÒn»i,QHCU„žz@Ã>5eÍ[‘g ®”°AAƒàŠ” {ÏLÀþ8y“ˆ2Ò–•Pw‡®¤-ËAÓûÎð¨-«w]!ÊàhYÊH…mªûVê?-«iúÀ0Í·Òüú m,øVø6ƒZzÚ +’ƒ* Èé‚–¶ +uâ(E`Ì>¶BÍX„kl%aœ|�­4Åžµò†¨—GYΧ€Yšæ>;_´ò&–ž:Ë*8=4Ýh…œ²eÎnZ¡ˆÔn³@@+q¯öw?ª�)p¿GªVá«\‰º“ãQOÛ¾ÊÚW|©6ѲºsD[Äž¾ŒD,ÕGïÐú°ù;+Å·¬œ¡;+ìÅV2Ó=Í•3ýœ¼Ÿ­˜• T’=‹d'ñ/S·…Õ¾ºUÔ,¤�Ô +†¸€Ç/,ð[`[e:R»f³};µ€ù +3,#ø[¯y!e�y‹Á™Ô4˜$[š&’â"[ÒÄÇM}Óªf2itÙOÕ´:s+½G¬aT(–;)�¼Ó‰Èn̉ǽ !Ô�°T„?t{&æãžñ�×±êTêˆ#¦„›-¡Á˜ŠTó3ò�9 +ôøK­5ÉÎNâ<�ÉJ0W…ïB?Ó€8“}(ÒŸìxûZïŽEà^¯TYMG'à�önÁˆà·›ã§Q5„ +ó€ä‡ ÷{’G�P¤*{«æÇÛR�þp–ô–cSÞrdÜ› p+˜4yT-ƒR¤£‘K_s_`jšìôJè–(€ £¢Óh}¦Þ!¥`EyíÄÉšö™) [*€¹»t¸«ÿ>D�»V`ÀÛF³%»`&‡"ÈÓ°7Ë÷:@�•Ÿ°ÚdAKœH´ì*ñ—[ÊÀ:ï/­1E�¨ØzæÆ…Ðü̇@gÜñèçSuF÷ËEQ¸2Á …¿Tª3Ò¯ÑYjgÀš[Ý.ë.3pE¢‚¿²È +[ážT¹FïH®âÓ¡e…& óT‘¶YÄÞ²¢*™Š]»¾¼ø´âÌ@œü`‹Â4k]:pà[1Ý0!ûx–J#¿1LŸ�u^$7+öå øWGÊ¡…­óªØÅw'W,=Õl}KÒåš¶fã ¶¡õL‘®2�ïþ· 옌»ñË{@yŸ#�†ä 2uuÚ×ÜDZ+ÁD‚{ö7)Pz™÷/o\Q¢–±Ñ{¸¯xÓG¢ ÝyA-˜ñ]À5<‚ô¨€~¸µ aï>]×T ŒÁçüÓ¹âXà=ágí|„ceîgî …Ëuý‹Ñ W 2‘g‘IÙkŸÕ› �áQë °¿—Ó*ÆB¶Rÿ–3I$ÁÖÕ££6¯U `ý³bÖ�Åèî¾]´D˽ÄÐý ÃqÒ‘àƒ‹Öa?ñcQn/s!Õ꺒IÒY祲8$޳`U„QL‰u;• ²;°Ölòg +¾"©Ûëo;ú¼âæc5Õ#bO_+9êmÛºà #9y�MÃTkÇøa€hPÅ$�ùÄÎÜn�—>º1Úß«+7Ñ5„´Sù‚tîeµ¿øðç)ô[ i?¢@éµJ :2•!ÿ ¯ds*Eõ/?‘"AŠðøï™  \ep+À‹�®�ÁÐÙ'f`èŸüï4¶1]†zˆt˜øP–AùE˜ ÈAºÉ(–ÈÂ��©ÓBϸ„A_s¼�Ⱥ3‘°8 ~(UP +ÒaðSågî+ë@[yÌ3Ï…Up,(p°Í=Ž|ØcÑ›ÝB%#U~tʶÂ}JÝ´÷˜Þ@‚'‡©‚ƒâÜé,„„ȳø¨´L` –ØH(ã?’Ðë*ŽšATE±°>�â1vŸRׇÛWëS|¥je„œÁ¯(Á©jSÇ¢(y}`Öø¹§ F"ÇW*JNB2ÚHÙ|ŠÝ$Á_Ù�Iˆ$ÿŒ»R¢=EMÜÛ¢úŽR€éïaXEE5½qv” +eªb©Þ)®Äc6°: +™-‚Ç-é¿-ÄkHy†?#ѰSüU’èÀ +)ÝAÄxHÝP:C§Å\ßSý<бœ–á-‘‘ç1¼jMI˜hš¯9å{ÿ£ðH’·I�™)ôBW‚7Nɸ(S™:ò(žëˆ/T-á‡9J,é�RÀê„îiAJÌÒ–æ%ůÃK%à *¢<Ò€R d–÷µ)Ú9hQr8„�?h�ˆM¹—Ëýh¿;�ˆaP&\, ö»2ô„Qåoã–8Õ”N12†\¡;¡¢æp Žkò> eÜ Á#œ�ûâlk‘ø‚»¿sbÛWš<êD +6z^Ì7�„’€Óeщf��^5881LvD<ñpó�EñäZaaPíä5çá›Tqráž±§VšÇ‰ƒïFɉ)+1¹ÔÙ/_]9D�­†rG�¹{5ú¥tZXîLH*¼­Ó‹{)p¦;Ò×M°br›t”}éd3èÊ¥ÜÛÁê;&« A!"?GÐ-¥†bs§�Ùc.n$Rƒ®%G5 +h)͈A‡­Éø¢Í/‘5§zÍÉQjB‚ûÀ«Å~5Aˆ ?t^MtkeE?WJ¶x)†š­”¾¸Å-r5Yмz“+¢8±¼èL±›<k¥Ì ²4‚¬”ÕªÞ«”Rã‰Ê ÌÂe4.ú㹈iraÈt“äV~}Ž·RJSÆa© I)ø´‘Ù5é­iÝŸ7lJï5ì¢Ö‹ˆqzX»8ß#®œ4“¸®AŽ¿Ø=€©\_‡ºÚ`ŠÞ/Ù lÝ Ó&9¥?sƒÈ™Â€ NJ‚{äL:^Ù‡1ª®>>/K1«œÑ¬â.®8õ�8þk`Bà,•Ïì}ïÿãømÄ/w•’쀢Æe¿žQ`VÒuÆ×ՂЦ«]¢™³ê¢Œ­Â†ÖÃ5tŸ®ÐWÉž Æ-B +nªëx¨*‹ Ï#œ—ÂÓ4FêM ϵ¡[z”£°CÈßk�¬M[n‚�7‹�ã%‚õ(øæxÄ÷eK-W^^‹‘yÜá½2‰$vÚ‘V±‹e–Rf1‡éÆ +U èx¢ô0)¬õ|ã›¶û¸�ó¨1§‘Y˜ˆ!X‹…–‰Ô6!ß‚ø]Ä(ê>\¿ï#Ùœ(¸ì€Úƒ;ŒI¿·xu¤ (¤Ù:Ä¥§B�vÿ`ñú +\/Ã)¸(° rºOjk ™ŽÌj\ ïˆ’×ïË=Á¸ð©ú'Û°ÙàºôN'`xUbXÏ œ— jå9AÓçÝ{'�£*K?8Küb÷‡{€Ùż³€M~Žk€7bQ›`Ð…¢$×¶ ‚JùYüi‚³®zu‡&qŸÓÎKÕL Þ¨— ´ÔŒäãB&ø-[fƹK´óÇV¡‚ ‚~±Ö£�_ã¨Þðèhä©$wÜš£÷´\‚.LgˆKçÅî$¦ØŸ–€õÒªYÂX‚ ÆCŽøJ0Æ©-E+�©ËÐæX®+IfuèNÇJÐn-ä©ÄQ ¦DŽÑo£x/( Ñ°¤eAñ›ˆ|í}ûê^ ”)—y D£yK™ GV ò:12A¹9mWF&èàÊ‚fÊ6&¨³áL.áôÅúHb}”§ù×çeüÕ;ûÂöfÞV&p¥àïº&ðåèr'%$ðuEÓI8`³ŽÔ³pªŒX·/� Ú¹%Xü<Þ3¦30¤„hs"W-Á7=´2d b/¬-�;wX%xruÏ9ƒJ`›vµ9iJà#³óp,¨AZ˜},A¹€È±Ë2{¡|ë…ìy>Dl“Ì\%èMòrR \pþ¾’Dû[ÇWÑIhÊI]-’U*AyëâßuS \ÿ£„˜î?2hYð+ýÞQ‚d·l”唀€Xr&ÜúßѬ‡ÿˆâ$P”ƒ‹º+ÝLjo0OŽÜ,ˆ^Ãü- à=S`sRI c¸.ð"Í$:JÞÈ�ëý.B›†±üaWP-% „]s'’›H€ìÕÌ�„„«gHpÑTx‚XŽºAD’¢F +UÎ#è÷0Œdc7ÝAØ–éý(ýXfºÎŒâ›��@‰x4k[;ð—¶»‹Xåc¥hT�#h +ø"^!„XuVt€[Õí�€ œÛaS†º+ž(7¤ËG]~»ÿ¨ó†B–8°;$“€¡rðFp޳Ãc…oDEŒ�€ýd°ÃË*ªDQêsží­áá N8/ÓiçuHE2òæá¡ì‹Û 8ðð[Ó°,€‡¢âsäª_¦;¿tÙŸìËxsV§#™ëK˜¾¾HmÚ“¯öûz‘{|y‹/}} ï¬CšÙ—,çse)‚ψ( *ê½ìôË(ù7Ñ^‡ä\ó ÙÞ’±žÉZÖ/³Ççbýü¥Wݽ•B€IÌS°Ù(†¿E6*c�Ýî›Ó~©‡NßJ¸þK0 ò&$œY:˜É�d +–:¥ÙçÒkx&ü /̪*QË0ÇCQ8»è؇}Њ˜½‚›03XAL•I°J_š{ÀbaS¨Ð�Ä„°[pïWÄ"¦Ðn·n¤Ôeé\1�0£Td×(9@tÑI™”(H\7¦óÕš£, {Ƒʌ#•§IZ&ÉÉž £… Ú¶Èž“‚œæLfb1Q–N7ȸM¶ÑIpˆáÅ �à”s‚û‹ÖçËy„J:ÊX¸òI\~“b[B‚–ŸŸ4&œ5³ùЕpzÐ0¦+B8Œð�¸*#DäR�sœ%á°'LÄâ1Ù#µg$32­´YŒ) G™ë$ˆjT8ô‘CÄñúñ`–¬õ +âá ~‰†h(ál÷¶<²U„^šÜ¢Fœ„CØ»lë¬tþrC,PŒìµœ!¨¦5Å1;/˜jlT‚’Vb< +jÄ' œ´íF·Ë'šÏ “D9@þ¼SœOðísô«WLT¼‘úÈ¢OŸ±ý­J¬0œÀÂpÜt»«þ'gLÐ+™±�±q;#m"J!EMÝÁ6[OÛSÐDln¹lmK¾Z ?¤Ñª°Êx\¹WP'íSjQé~ãl¸îAæÕ&·Ôêh[ƒ$sÉ ¥U‚ô3ÑéT+J³‹ +í]ÐÖ³ÎNÄNPíqîêç¹ý‡!2•Å¿w“ˆè4fh›âOÎH¦P ÎbÌÄ«<°pl oQ¼¸�WÁ=¬»Š«;湊G5ÈÀU”Y#ܧ­âøXÕ4FøŒ§Ó]…‹‚úanâUèc…_ÇHQUfˆXŸBN»+©1¤¬"B¾Ò-è 2ŽÒÙdHô_j4jC ^åþF¾dÈ3,#³¢IVHHS™€Mw±žá…ó?€'¨¢ûö•õÃR�TÖáR‡ø™ uÄÇ[¡À°^÷©"¥bÇIé‹n†´¸Îa*ë4³º.òg G: +=pG+ÇÒ÷£lQC߯B“^×rdM^íÜ{no•wU7ŠÉ»Í5 ©ÇJÍ­øš›¥Ì%å•W³ï:@L•^¼j6#¹ýªsÉ¢ððcŠ^È=ïTPÎ-£Ìÿo´Í%BpÈÀs{$D».wn¦ò.™¨¯vmÚ„ºé¦ åæv¸MS17ìz…­…¦ˆÆgiB®rċӨ&t^ú@]4nª̽X`iôYæ"|“.~‹Pº„S@�fR‚€ñJØÂ]™ŸsÛ±.ñ(ú§¹(žÕ‡ž âÕ•^ß— �Årv"§ÝBŒŽîý®[ÒØÎé,.oß)ôDá5Y˜B¢x*é4w¡^Àù½Ð-:û @X„óƒ7°²=iˆW:§àÿÍqA «&0<€ÊãÛ€¯?É +)A@÷THÊ«3껄¡sßkr³ãßF éqèeÞª^@Þ[ÚÞón�ny~¼àù;•7ê�“Ú^ªÖ·bêŠRAˆPBj€dŽÈÑb ê¬âÍ'—äŠ�©fCè¤Fnà’ñ*±¡4Šu$ P»…ðò,@ðÍõ¾ù%�#mú6O›¹zý —Š`Pâ­jÁÖ»ÐØ«vÓôØæ"À�‘,™s7R€ÃÔ°ÒM©¬¦RX,(OB‚ßy[™º”þúa™�q +ŸÜšÆNanÆüê|ÕžÐc©ç§,á?´rAù5þÚ(ÕÀ`_©¸Ø…Oe¡=m÷ÞLΰ"Y¥ôÁQ¯\žVaÏ«ÓrŒ¤¦g4ŽÍ5ʹ{¿ž9‘µÉÓT™9­^ ^?ŸÃ”Q¶]ÁË[ÂO,÷�;Ë·{-ˆ`áÂ>PHîßÂý oâ +x›¡z¤]êBÚÉØq"kPkƒÁ*î.¼ÝzŒ…úO endstream endobj 22 0 obj <>stream +Á~/edþóúƒPø +‡Þ¤o'¶o°ÓÉDr&à½XãÀ¿P`°{¯äÑð�«*qCI��ËAR•ñåšeZuwb$åw¸b`>nDÌF+M¢åzF‡ C œ«&èœ*ð]@Õ�xQwP•½ ±(3~¹²3ÙŒ¨÷Î ìb"ÔóߤôÝbÈ!e┥?âåõ©B¾Yg°Ñêò@æ\sãL®™Ëuà}>hä¯108"tÀ-iÜ-h¾?tú'sÁ»Ü�ØU³ª D¤ú×ðûÎÜ»˜à7†»íL*ø¢nXh)H¸¯ŒÍ8¢/1ÙkåK°$B…l]BÜobÝËÔįåG•ǰ"’Xð‰†âÛQ~uƒÅÞ"2ýK° +£ÃLHlZ3¥êÌðš‚H}¢ßÖ+bôozØÕq`8€$¥ŽFŸ¦¨FB*¯QJ±™®ò£Ð“ö +Kdº®Ö“P¼ u·%¸àôƒ%ÆC!ev¶Úb7Ú &&Ò=.*èã”^h?b�Ÿe¶SCÌ**Ão1D‡›Šƒ™àHH›”ø*$žo_¶ÈpJ¤áůRD°:” Py�5Å:ÐDøxlÓkŸT#YH‹‹*oÚ%¶M*bnÒOÏ$4³Ø±Ù~¨¢hç}3þ>—Û"ü†ÒtRÇÉ�¼£a5~´B«'|š+ã²qÑîl>�´.Ÿr¸P÷$÷‡ù°‹T Øf­`�í–h0#z¤ï¨ÄzÐIßKb‰S=¸$¥H¦Æ@~ÔÚÍB púr¸å‡ÒúôF¬¥aœ~ÍQõ,«@Wæ¨ÝZÐÑUðIˆ j-µž€É÷FSfÌ“r‰HV®zC•‰¸Û¡‹f¥®Ãu‘k_ìxÇýŒ2,Lq œŠ“™Ü• Ü¦Dµ\¼ 3>ÂrÛë¾�×M S‰¿}p¤‘abåaK}ßw=þwËY¥òÀ’ø £ëCWøzÁ0Id37ß'Îh ±#˜# lp@°Ð–·Gc*l”E±æ—ê *¤²7¨ ÜÖ‚¸}›én–õ×k½“&�>¤ˆäzË) Ôöä áÅ:fzT��:´B�Û¦ô@�_˜äk×-xæq_ãq!')Á\~û³ÛñÀéí±çQ¬…Ï*sÊ9"-Awn¾E z�b[éMgÀ¤·TÍÛæn·Š6:©Bp«@Í©†jÊ’N½€šÅÞ $tiEc †lßkfÚ­M­Ê¾h_r^–üÔíJ?Š­@W7šÁ€æ7Ùµw>T-KU¥^ϳ,(ß1º¶¿ˆÊI&“J=§&˜‰xíuûQ˜<'„l-°i.Cƒ¸âHü£¨âŸù¥“á€áÖqCÏ#rÙuy´R§&%êWa�•6`C* ”G‚¬öà3Û6 ½‚úü ÌGµù£“¡CÒ��œ´€º.„4Í·wˆá­=@¸í=WbŽoƉz£¿¾ÆÒfÌ(÷™Óê/0-Ö}ÑÖ† +ÐO`¡ˆ­»ç¼îe“Àûòl'© C¢d: +< L”<„íÁËäòL)éI!£`æ’ã�™`˜;€¡¬½¢ "sYÔƒ\�?{…Î1s‡2&uŠß HŽøZ}Ôw­ïrí‡M1tP©�)›Ú þ€e\kjÅ)“"P_�äÙYëÉ5Î]Y[b¼¥sÄeÕÚìãÉP2õ„"L;„2ï‹\fÄ?$Ux®‘ t÷Ä +¤hB�©iÆŒiòŒ®�JÀ C$*µ Þ©Ð$±q}|däýÍŽJJ*ßšt6SÒœ"c’žàIq ˵Ø\ŠŸEk—û[R~Ë1Dƒ½X"÷…6V•hw¡õAàõn§véŒ�ŒY¢<Íwã£ÏÀf|ñ±øÅ«€½›v„ÓE÷áÄ]Ý'kï5ÿ=àr‘CÚ·Œ+¦v;C2�èá4Õ‹"‡DÂþõÆ“ÍÇÂT4ƨi�@K¼å½�Úà�2!÷:ˆÆK¢.‚½0µ=� ��hŸh€B¤XÓ¤x²Fâc¼�,7 ãFÂEÄ–ë¢�¾zÞ[¯ËV°v[ +q§dØ5d@¶a`é�7©k2r"P5:—Ë\^‹ñn²Sî õ�¦E¦�ÂVßÄO $#^h$0oè3ñÚ{àõNt!¨v¢r­S 0ü,Œ<„ÓÄj­ø +Pâ€)?3ðŒCòWæØ:Z¿D0 Þ¶ÈÍ ú7»`,fòXV%øbN7ùZ-¸²›„ø“ü‰ +o>(„â  J„|@˱ÑÉ åÅŽ»œN>Žø ¶ö`�Ñ5ºpQŽ"†2Pu½IdÍõ@ÙG’›´(ôvx?tªÌ÷Q¹3¸DlÌ ^LíB¬KgꞣÆð�CzŠ_›À0ã�GNVï¢k +�¿ic`ÃÖ‘LDæÎÁÉ �0cþ +Õ»b„‘ƒ«ðª&©5 øÑ±ghñv2r#"®ïNsž1b‘¬¢²šQi(™¼{0ª½I¢.àPÕ ° ?b�;ubhØHÛàÊQƒ½žÛ¶eö6Z?Ïm$dÐßÊIØÖs¶®’»ÎŽÙ}—›Ðý¥[ÌÚOQˆi£È5«ô1DÌTÅ“ †NÂä†79]´‡±(¥”ÑÎŒ„„œ\oâ +¥›ŠRSÕ¿Oæˆ&Ø4ÉÈâ¦WÏBÞ=Á–qùOò…JÈÃ6q Rgg ó³ñ�÷Åc +v­Ñ<¶úg6Î4‡Ã^S¼ +1‰<ŒA�X¢~†‡Ú,ôÙ +ŸÈW{=1½¸O +Œ™’¿´—ÆLL¦$Ok×øCôBeR +~ìA†°Üú±Rúf' —ç~ÝÿT°žR(U¹’jAøH‰ø +Ú’jä¦H1îiWùìÑcº­¾ìÄ´ðå:;QßÄá餂8Ðz)Ü[dÊ>Â@­‚ñÛ�ž1E÷LiB°•J½�Ç�?Š_ôâåGb[L o\Æý6Í\^j*�QŒZÐ8)2+{úö"7æ°µÜèmÈO.®p8C> â!£]ŸÞÙs– +·„u¸x!S"ŽD°š”õ–j ϹG¿öµrŸeîtjƒíIèÒþøñYHU¿6£šV¨€Z×ééj­ªWQìxÖm€òøÛyɰã)‘M‡½í¨³éÇ@®¬ÑÛî?¬Þä=ࡦÍFpÊÜdªø”•´m·)×äB°dAgò-E¿b ?¡\2ÆÑ?±ü¸_[­¡ÛÖŒ°ÙI9ðWX½8maY‚'¤µÊÝCDaÂGfÀ ã^Ï€àªGMýü7¼j:r ˨ô¾¯Ú°©gÂùv¹ÖkV•Œå|æP€Íeû êìÏØè”L65଺ +o’óª°D¥“£m` Ù €ãÆï3Vk,Dz�Ìz‘ô/ãÐM•:�ƒŰC�h>üЖ‡Ç°Ýr¤¡@¨Aáªãô‘õŽC½'?¶õ dPŠ0uL&íxߪE¬�ì2‚¹Ÿ˜àšÏUU¢ÐiÙzÛØK¢VœK¥°UTÀ¶Æ@è;tm•¦jŽ6‹õy¹m�Ư“ÄꓨN·5²øýÀªIy¤bÁbüЀYÉËLË¿Z,Ê?�'‰ïs}7�YZÄÄÙõV�‹ÿÒ¿_«ÄéBáçŽ�Ž Š*53áél»…ZÿA+�_ûÁ%×Ô’pêÊ^oJ_÷*Hq7×RL‚b™å_\3ìCµÜ‚þ–(áÁU”õÞ*é…�T™Íè�SlQ¾xÐë–3ŽÅ`‰#î˜Í§izµ@P}ª|¨«Ç£3GtóÂ*™€ x-\,-(/Ñu”�eHÛ}&žìëh¥¿ÜgKÿ�'á|%oì(]¨Í›VãL`׆Î7ÊÄñ 6 +\WuÆy~‚Jw×5 zß‘™;gß2Lý}¹o³>‘Õ@‘�,¼èÄÃ$·`Tê)Z`ñ¥ð"µ÷è„8™–KNuúK¿QPOÅ ýçàŽº kõo2ÈðN;DD¢!ãæÐxéÒ*©ÖìL°¢T/3_Ù·¹'ìÆ&J蕤ž�jcQØ刬Ì!ßÚÀ>/pœhŸ‘°¦Œõ¯´Fći�žšejì9�²}îì{ºcчܠò\ˆ>,ÍØR÷œh ¦rá' O†¯çGUp“]ŽI) °œ_ˆ&ß|œJXÄ“4’ô5ocy×®.A~yE‚„~}ÿ}å.¡ˆžŽºÓHBMˆ�ToyuemF' 8 Ò¶SÉ¥°È[y¨ ßtÝNíÖ] }>†r]Ôe(À‚ì&�ÕìäÛbJ^ �•J¾× @´^ •{;k)r8‰ÂáÔÒȇÍÒoÈ�ýa�ð£#•¡/îÕB^hÀo÷¢}�ìÄéƒ`Ha=€¼|»%4ím} 4T])ºH7÷ CJkK-�pK7pt¢ÂÃ)Ë=O6CóÈ5^'†Aâíï¦}õR|õÓ9Z,ÌåQ±Îigzåç l†ÀºeIÇF.bX›@V%s€p¹�DŸWNŠÃXÃÍŽ|ãŠGÎâsÔˆî�’ƒŒ+—䬧–?�¼qqõÄ᪭„xó FüQ�»åèhaŽ“‘Ž@ GÂ+Ík¬�\•¥CÅ…«2e㲡°s«ö´E,Ë\AFôËâŸÚš¿È�µØ¹u�³n7Qý;I E[Ü! Ë8$éÚ‚tÇ=—_þXë§�ïIŠéŒS‘wœÔ[n�ûWC :±›š~-0˜5KAT«`Ä�&»²ÿâŒd7ȹåÛ#Ã’Z4x²P×z°ÿGæb´žÓ”øhŸR§á.[±µŒh㜟O0®(‚þŠ*óGÛ$±t•¥¯{Kß4–·ÙÛ�Jo³B™Å�S¿q2I··Ý±}Ô"A�`sä²ÝF¶2WˆýÞ:¹�v†¸·5ÜV ÒVa[O1HJU*É«$`Ðl•ÌY/•?‚Þ<¯ã7£éï�_T+ äúˆuÔCÚ ùš®×’î±emº1‚=G +\âÂ#vºzå�%#]JB¯HFO 3YvðÑé‚Ê>ΛµPp E2* ç’°_î 6€ìfº)d£�Ç ¬eVQÐR$\Öj ×§y='p…éâ*-(Ê30ʨS;ÀlL;¹f~y¡(£ò¹ w¹Ët1l�+˜Œ×ï§ž®6k4ès M]i™<Õ�¾,àsÑŽå§ëÖŒ²2‘º´tqh÷û:#Eg|@°ÉƒÔútíŽ;øÓ(½étÅy+®ÀM·ÉÑÃ3ê‚’�9Ùoº�høœ(5]g´WJùá<£(¢�ýàu÷ÀÀ2qä 8—åt•¥&ëOO…5œÊâÖõ8]ŸðÏË>ÌÿÙÛ#±W§«¶ ®ScWËH•1‘Ÿ=ÌHà#àRª‹vª`n̤ºîÑK™ÝÄ�2*x£åÆÉ(ðjÈÇVCuygø“ +âËä�)_~$Õu«HeWP]åN¶¼Ä×:®´¸¦vä%Í ›Ã}«Eü6ôª@‹(ã 0UóéÖ#¾õ^ûÌ>-.a,üb¯Í3óØü`;Äkþ8 /D0µî@GUÿg‘åÀQAµC³~HﵦÓÄ»�. . `ðÅ”+oµd;O”Ë͹hþkÆ1y Uö&ÇrH¥Œ´ÜÒ™±qå«›íQ £Z¬Ø>†éV¿©á1d‘cma ‘h&=%’ÀkޱÒÐë©ðQ‹Âù�æ"’oÄòKøÍVþùoŽÂò®úÀ ¥™0³Žá'‹ +WVéÑ·‡$ý»ß“«©šqÀQ<=š«-³ ï)üoãË”#D…ÇàWÁDÅ:Ft…&¸×'§ +Îþ QŠŠÕÀÊ·D9Øñ ¸3sW=X·ë·O­ÈÅínßèÖ_´ùM¹àÿ¶ï¡u‘€Þ&Ò„ýl˜!¸a'½”õm92´¿OãNõíSö‘ž‡ý»o ¯.mê›* È:âÛÀ.K4ÛSHý•‡íøV_¶ÆtÓ/â³¥gÅš¦�|‹R¤ ÒHJËÿš?ü©ڽ+wD?Â(±V4tÚ÷EƒbÓxÊg�î¶Jœú ”ˆ„9�DÉìkb™§Ý%^Ð51·ì”mR07ê´`Ð`™/ðág7²°Ì†Ë}ý}Ã]³@¬3ùInÁb–Ö9r30•�Ptîzìi“"såìó…˜Ñ–ÆAô´Z>|�*A’pb¦•äCéÎzi¡éµué…qiF/.v-­UKÖ€J”kç}h¼r O—"|¡�‡2’?¯³ÀÝÒêT÷ ÷Þ0Ç=¨‡‡9VÂa=Áî—Ö•>ÏÒ?©¥)ý˜‚Ì?wù,U]½¨C•¢³«T¬¢”öËHÂOW_íÙеñNŠ­Ã9vd!=Öq€îÄKiØjSK8»è®¼k +wa(i@Ö\›AŠàˆŽ¡pÚØÜQi¹’%müöNÌ]—çryìÑÇ�¸7g‰&(Z±—§oÊ2eÙ.•æ/xi:žfHŒ<²ÎúÜ5<ÙÝbtwˆ4¢°&BÓXÍù¨•P‹*uA[©;°L*ùwòݸEPPÞG€‰8.~˜S‹‡onÆ1Ìþjã]¨Ú’�ýò¸!ê÷á=zàÙ(lqä2ø í3Ôn,†�Ê}Œð_¼‘‹þ›ì§ �’ –û#qñGs™`IÍÂí‚j(‡!çþÍÖ°5[ýÝÆE›þ=WsTL-. T_³_Þ?„´¥ }b7HQŸ…³QUÝuâÎ ÷fO”÷F”9L›wÑÔÓuP˜«›LûÒG…u�¼�ëkkîsYz"¯æÐó[bܵés3íšÉ×/Ídš� +¹h³WƵ? »@ñ䡜¢ÇˆÂ|²SÒ¡3ÁOÂ9dËv8E LjRþÈ´f\„àÁ´p‹{óQI+±É‘†[Ò8<0æ…o“›´PŠgÞ§þV&M4NÑxd�$é÷VÂáùd†é'hÑõ§€³¤uÎÝ!=`%-`œò^YÒ {{”´Á8Œ–I›o…İ‚ÒÜJ“�>6c?öªT”4¦œká¤É�«PgËãU¥•5ÄÇ.Òš¿F+’Á#Ô¿oÖ’ÝvÖ `dx˜ÚÒb¨ý@ùkiRž!Û‡Ÿ––Êl i‘nizÕŠœò¢¥ † ´ð ëK[ž Ø—ð2mjìÕœ’�Õï\ÖÀAx˜ÄË…{šlr*_ÅâÞq[~¶bÑÓƒJó…�ëXt±s-hgûßå½­ P*‡ $Î÷iaë6Sâüºå‰y>ÎŽ½W.E°D‘Aг±�ºUœŠsñ‰ùZî +xbËhZq>p»VÅùƒÌ@o8Sg‘ bÃ9³²ÿéA0œé¾éß3.œafßgÈF ç÷Ë€?HR °)·ð½�…sÊYјq '•Åb—å~,QÌ#_ƒB“q °:¡‚"AVñ†À +¢ +�v{pC‡»6`²wnèßkdzöFmdÛ Ü° ±OÈÀºôͨŽ_Û˜à`�å½$2€'ëQÇñù=DU0îf"x`´öžpP=)Qx¨*žÆ¬òŠÂÎ )€×q­""ƾ°{ò¿ygÃ� €“¥Âã–ì‹M}�B›„žœÑĽނãX­—û¸W\Í�±`¸àòî¿Éc­}û[vï/ãŠ:Ù ®*@bm  ƒÄ¿ptÌÝHö7üµ +wëoLáÅ3ó� µôE¸,ê)Iþ.²µ<:ÅÄ š¿Ç“ÂCÐÍÃÏÓmënþú›¤g�î#gË+ó~UÚÏuÝýZ˜«ò)¶Úídž5»jby%¯}û+êI�OÀDÃÔ¢8ÝRN Ê ŠÂÜ;ök�¡ÏŠ>÷÷å& +ðø×ˬ^‹æ‚z;�$èoú‚6šým>Ì‚²ù l(9þX6Ü61X²YY(B¶Òô¶`ߎЦò› á/¦¿jH¤ù4d�ú~ƒ£‹Ìh�ÜÖ•4ª·sÃ7 �R'\c v�vî·:�(ZNͶ™¿y' Æâòw?Ñ!‰ù í±Âdú‹¡¿*üÍzZ5ƒ†¥W¹.ñÿ�/÷�DpÓq•}]f�~˜bâßÕ'ÑÖÈ¿þM†1´Hˆ7ê})þ‹‡Eêñ2(˜ü¯‚! ÖW„ +a`-,µW*Ò†ÿM Yé¿«'*"””ù–Gï¿V±„íZˆ…z½*�ÿ†Ë¡ê.óùh©ôg8â™Í7…wiÖNnÿE¶JÓÿ f&`HòÞü a 23Ä êÑOL˜þÛÍ~"пÓÖHÛ"ÿN¥–3îïÏCû;Ç ŠͤŽþ¦ý¦XÌù.�|Ë*ûöx‚ŠîüÁ_«&Ó�Àfü¸±xéÙ¯ÀTôº²ó02Æjv¼Š®"Q�h¬þÿü\O%Åï\ž¾å‰€•¿Ã8ô‹¿ØKź“þn±F'Dþ¢V�KÇß=[ÂÊ_‘“'8³#¤¾a+8·JÏ*À(Рʅå«ú‚ÍÑ5oí{Ë é­SQ9ò×NfY (hu¿)-—Ý|`¿ßµÒø‹9"Iwk2ƒÿøò!k—Š©JEDÓíi´Àºå�§Èøþ«ÉÁ®¿�²S.[›I'L Tf©Ÿ¥wí29 ¢þ³o5iWªJ¥Ïø›Û±D‘�ðW‡O !‡‘E BøKX¨Õ,~jNsäÕÔ{¥“ý�#õ›¤Ta6ô«J�rmŠ"T”ZÊÉó¾Â úTV äë—Sͼ€÷™ Wv…É’³ŽS}¬|l¸P~û+B¾4ä ¡¢�^3Ý!øünÀÖƒ¤íi &ǾP#rñä# ‚ß À/EWÝøí�°v¸ šŸ¿îÀà¼bI#ŠÎb€ž{¦ÛîXW™KæÀÓµ +LSdw>ù€ÚÉ Àx´Yû�™ '½ítbDh:D•øHˆ} Ú0·Û•Z‰vùdr›Ìe�aæ1ùA܆0&?Ô¯ Ê:Ú¿YÊ)fæB™A»a7}íõÅW}ûÇ ¬Èý,¶šBRÀý#+3ò+Bv»_ÐÀû¢'÷üôþA{( 3ÙÍPÛsF[`‹0*Þ›?ož¬É Vç±j�›ó‹Ã#í”M”þïá1P×DÇ¿‹4çÚ‡‡¥ld¡1Á¥r-ÒXDé6´Ü=¼8ì¿#h!C vê�Šo*‚ùdàÇJÑêZw!�80„=7Å ¤ê s¥Å˜ +‹Xâ@†‰|u‹492ˆÜ“vŒû3a„ haŠ�‡fÙ€2‚»Ó�ò�]¹)#Ó¼_@=D½ ì¢u>sº¼ÔFŽƒ¥lÂÜBâ…>�oφB�P>µ[œœŠ6|X¶0‚ &Ú…žÏâáÌ»X ·´{ëÀA(7îCéøX!ÃxvRLé¼oˆ ¦!U jPК�c9ýðÚ,pª·8=�òxáF¶�‹ æ–ò±ñÎc½¥¹¬Ûæö¶tDV®! Â@Á8Ús©J¾bÉ0§7è% Q“!_�H!OÀÎoB¢áÅ“ +�êE0ºàqlTÈà­g¡ ƒ·ÄèQA:=†pÓß·¢ë1hÒkzd®‡ ÔÇÏ]LY T ÈEF”ƒ0�L ˜?Ÿ¹ò + ”™ÍOî=/÷qSþæ±l|ï±%V©ÈòGÊ„uÚQÔg{"þ‘C'*C��×àH*ëÛ¤éä^!´[tœËÓó�óŽ�L?Sè1k–½6"ªlññ¬JCù0ÿ1·ú!ô,7Xr<8ÀÊ„ìP +y6Í ð­<¡º¬ ¹“²±AúÝµŽ­Î+“·¤r¿<2G�;º¦•1˜£¤¼…~è$´>éÄ™¦¹eö¶†r› 7»¢cL¤ü¿ƒmA2TJVúrÝ‚µç½Z¦3Ê€óˆyásò·Q ˆƒæ5üÊ1)¼ÓfIJyåW”ÂÀ¶Ö’™ûv¬>ôù5Z³ÈÅF0è=LàNˆ24Ï{R†÷ÌwصÍñÆ‘ +bÁ�AH‹HA|¤,@3Âùäø—À(…áÃù¦$… ÷º~ }n õÉÎJmõÛZŠ?W½SŸ�Sƒkr ¸ú ñÄ[Îõ  ü¼:ªO5­õ!…ËÌY�’‚»­1tanÐÖÒòWyëZ@j2ësèZñ‡Ô~?éÓñŸÌˆœ¸"…)þWWýß/}fñÁ<ªô �"XäË\ú\3w°rfú”°,¯‰TŸô ’]{pB[õÆÍ“™[á/XÒ'¾àÀûLˆ¾ˆ›çÒ— -Æ÷oq}5ÄÖÆ +ë[ÎOR)8åJËyæžFLÉ~Æå_ü&§Ô‘¸�Íó£—¿ô�»L1a,Ú‹Øn‡ùOû>ž†ùEŽo.xäõ‹Ppø½,£ñ‡£L÷ö“•Ã~qŽi"úå* Hú²~á´|ªVÌ/lhtç裭ä6åêæQBÔ6ÛÓ/G—©�´Ÿ_ˆµ`Ä/¹B0/O^ÿ m“Í2×%.ü•ÊÕ¸}¡Nq§ Ö—ÿ¸B¹�/ÂKwÜH;¾œá‰fC_Ô1OšËç^7¡!ŽŒ<÷Rb¨·—Þô¾öå.hÖÏ´ì…V×¥†½G‡½ÙòzÑû*”×4{áµ-ꘃãVïi¦{yvÓÏÉ”úfÜ{Mó€z¯$CêïRI�Žêx/ Á¸ýKbð%WéœYx†/Ÿ©>2¶ß‹ŽèE|¸(÷b}\D=Ç{&õ.ßK\N08ÿftá aP›w»ü£¶|¡ +ô¥·o]_âÞØÉ�ê¾Ä�“Qã�4VùÞsÏTø…]>ðûrqFM:~ ,:\ÖÊ»ù…Îð.Âg0òK¬“}g®x_Ò<�2�3ñíKBÕ a€OÚ/›}yulýè�vàDôú½±úbt·;B_Ôm(�çrùBñ¾…NÛørpÿ+¾„¹'ë^¸µؽ¸/y/ÿö-Ï÷R[¬H�¼6rù†–¹ìå?Òzªö‚öŽÊY/WŒî4|’_½ÜÅ9‹;UŸ·÷çØú!\¢£l ¿pX�š'䑸J¦6¾ì ½�+ WYîœÙã3•A–ûgvZ�Ë̆ܲì%�Ó”«Ü=¤§mÑ*�ÍӆΒá%̶¼ŸbªÜÛŽ·­"‰î©$˜Î«S-”smy¡Ôã+cCWÝyàt„*†Ö¾8„ =×W‡UfÊcH"W`Šh‚”ó˜0”_©•°a(û•]-ø…TÉ·s{!y,´ѾÐdO,e3‚!×Jsé.†!®ŠTôU1äQÍd2-††™‚CQ g%ÇP¢±E�©CviICÒM"“‘Å ÃØa^ØÇP1ø–¡4;ê𲟼‘2u4Ä7+ž‹+hˆ@³¼»hˆárÿ¾#“†Tb½tèÂ9,À–§2Úœ¼†ª&ÉàërB0ÊR‹¼›Vd%%òï¼Pw†„)"¹Y;CD�YK›¡žãˆe%SC&,ÿ0´Ù¤† Å;Cœò�c—æ !ÐýŽ©à¹d2ÅHÈ%¨ûR�Ö¸w+(eMøäÇ© �B;䇑 ÁUHež¢EÛ±{3äHö}4@dHÖZÖÂ"CRÙÒÚ‡I3´t§«Üí`E»û0CÑDz�˜AÅ�Ä!¯i»³›êâœYêûcKJBfˆlq.Ýáb†4Âݳ�Q‡I ç|dê:“§i,] åùÔâ—�E@9wîÇ¡§XýUpX6r»B¥¿-F#Å“›*}¼d®±hÌÝ6>œÄ½Tä‡%QµÃ;‹L•„‰Jþ\¨wÈ{÷pçç1õú—ŒplÀ£5"æ…¢ô4ܹ5Йx‹QêšÐyõÖËû€Ë=A„ƒýäÛ-b@ñ8ÆÛÕòļž‰Ï[©€‚èIEÍBú@�—aî’Jø}zWï>¥yðø¾Ì‚ªÄ{2±¾`~‘ {/3ÿG#ˆ‡Šð£ †lÉd™‚! wLjoÄöƒÍ ±±ï†ëÖmÖ² Ó˃��9, J0ØsµÓO�ǃþ“Z7�Bs¬6šˆd>u¯bù¹kt¤l %y'¢^,<�W¢ëyšêÍç–ÀÔ+ &œ“ Š“^ìœà€ +pé‰Ì*XìûäW°rL0Ƀך°J8¼Ð)PÎb†€¤n.y©ènÇFªœý±°ÍŠ®éÅ�ñ™PÅâ…�\a¡ y"B9£™³Ô¤•5nXÉš2O·ÖÛNcOˆ£Uf<׆<Æ—�E+˜ª‘uIe°³#ílb^{UU'…!¯D2ë�uÃS†da^L°G]‘ †qM«Î«oÕQP8‡o¼È�fÖ$Ö hÌ )ŒµOÓùëý K9�¨tÄÌX·êbú÷(a4)Rã-N9ÂÜè"‚ÛØ°ôD^>Þ¦v–q.æÒOtœž”xPå(eZC'"³5�K =~@1�¬`æSiÐs9Õ +k*Žå͈²•Ø^¡V<à¿ôzÇ‚Pfc(w9æš_û½¤à$.β£.h®<@C,¡Ô¢¥ÑwÁ±ö¤gH�ƒ1®p•>å–#L¨ÛQ;šë´Ð[— ˜qy�b[2XFY~3–“Êý‡§�ˆœƒѸ¨|µ$¨�0Ï�Ÿãq‘$Þöp±°çX/#¥W2$65”1Ù “nóPƒzË ÂŠ2`Œl.×… Ñ‹§F6‰n ¢l¸TYã�È!2âžr.‹D3a…™Œ–îÇC/‚˜<…Mö‚ðªjEŸÜ¢¸™},WåÊQ÷²ê¸¸É=w²ÕÝ$Ñk¹qÂÌ`èˆc3@œÞínî45¯ ¦ßËHŒv?7øOÑàrÃ%£A..ì£6Üè‹lp†ÛŽUãa1’F`q‘‚¿½¹dvˆÇó’L§„i7‘‰hâzÈüУ³L ™–—<�¼Š±nãvZ˜÷¶Ó)·ê.§o™ÈIõá§êÄFE¶ö,R�î•ÝhØrbiŒGÒBðÆÖ„ iÆR4ñm�ÍïkÒBùï…ql°Ôð2B‹éI,8ʲÙñÁȃ4ã*w‡ŠjšJ*Z¡ev𻏠ÅÇKº(ÚAKRÕ�`¼éôR–Ò!UâTÚŠœ`ÃåÂûsFÜþ ©Þn}‘ÌW÷퇉kSÊÜà°��eXö»[ôpÄ[€v’-Ï`à{ÿ#Ý0œ&>ñ²,KvѰá{O¯ô9: ;ê—YÒ"Àm óÛ:Ê€²ˆÝg8¡ã@æ�º^¼‰�0ç­]�R_ø<Õsp¥ÐE¤—bF¿³h®ÜÊÌzñ"� Ú[ ‘'±f[”ó §+Ò\“ ¹ï­¸ ï½gdŸ€ ˆ²$µÈ@.Y‘ý ÀIpP�0ÏŽÈ.¿+ç…ØÊŽÇÜÉ„>}z:90¬¬¦î¢.¼ 0ð{V,õ×üA”j4Õqì¦GŸC�Jõg—ìGyx÷ c(Ÿb=SÌrF%ª&t…&HÇÓ]U¯Û)?‹àS¡Lçs,ã¡„ZÄ^ЬÍü׊÷+)ˆ9¥ˆ®¤Ò!]¸uõ&TKöËyÅatõÚÄVªj!ª‡pe A�ïúw¼äÍ,ÿ�KHëBGåt0ìwë«§FÆÊgê+•‘Nc É zŽ«UI�“0ç„4ÄߺÜí¼‰µ!?…,øŠóÌ–øÈ>U8.”‡¡UabZ˜óöônapñïèÁËÝBSªÃûpçö8q*ö§äM2¹ºl ZøæøQWb¾öJ˜£ ;_DB£ÛÎäj·a©7çµÃ攇†èk‡A”O�T81Á F4æ7¼Íë�eÄEæšyKΖàÙÖ_Ì–u0&üNßäE¹_("'Ë?Ö’­2£ mÓûh«�$Ep5o—-�ù˜œÄIcÒú$={ qP4ˆå �N;,Ulû3‘ÿª>Êî$® CnêIãÉ–„Ù�E)â:Yç`Ù Àäˆ.“ÁZ.Ä^ƒìQÚn\z¡]¬6›7úw 3JKj ÜUˆ·Ž.!pSË-I~?IÓ„¦/Eª˜@|¿¶ +TÐáãJiƒ‡$¸n…j‚¬ÀºÛ�ZS:Ç2×W…Bñòý[Ø%Ç´LÚS­»ÛôT<Ÿ,„Á~¶léð™jw«`ÊFyæ™óëñsR(DÌ&Zo¤6ò³Û’·48�…ïEfé`‹Ñ9§ +1raßZE…¯,Æ›Þë—¹ÌÓžy‰Üù% ¿Ã=8ìdZ�(iQ¨b¬x»è�ýgÍ�÷Óúž©|ÚöÊK+€ÌëWþ�cƒÍðDÃÆÓ™Áp'wJ4àûmîá>i0φá@ЧÞ.¬cØÙ ¾Û‘ú¨ŠzxÑ™ÄFÊW@Hp%É9Kå*zrßãê#Ÿék;9.ö—©÷4L1i`L7 ñH¿˜Í]Âwƒ+^ÑL¡€rQk{Á.jŒ» §ê–ŒªÙ Ⴝí D¼ÎÈýgoÚ2ª“‡‡ÿ NŠØè¡lÜÂï­” |/Éü OÇ›Â)Åê3ÚŠ‡‚fº±ðTÊx»—j‚½^'èüÆsD7p­Ôe°LJcatM�‘aÝÆ\Åäd­dËh¤0.•7Fºœ7'RÅÈKë÷9¼ó‡|e/œXÌpMÐnÜdÈÐ%ïT^iõÍ*?S,+²G §ÿ½H¼ŠVëcIP7êê2Ø÷æ«V©�9ëæ‡£yšœ[$Q1°öÀŠæÞ ®"Á½<�‰ej·ZðÞ¦¥ Þ0ÿu6©•�c¬+tábV¬�ÚMÑ»(µ Ü#ЇtÊóhæ@µµ?x&—¼8«sÒ4 îøØ‡ –øòú[îu #vNݵ˜?ö.û�ŒÉÕ9OãèÔÕπ̳ÞÁ6…w“4/’< j(�! ’ƒþ(í¡„Ð©ÝŒ�Ö‚ß`G‘Ó‚IYÂÑ:¢Há›9ã{$ K dõúæQ÷û^Pz„Á¤¾L†ÄPšåR'S’¬ZL=×¢@9@1�=bôƒ¹28‘7ý`@£ßÆÑ\ ‘öŠ-¤Di¼» 6+r2½M@›ÏEr¯f¿>…¯¸‘*^ÈuR©Ù8@ÜpØ…³(ê6 É¨zá•{Uä°E!wˆ„$©kmB»Mü,scvÆÊè�yë + ;¢@Ö!ì@òèRáî àŸ„’˜N‰méI'š!´ÇYR€�îD@%½á!ªçÂúMÔŸ=Å.ˆ£è ¾7ô!Ë‚‰‡…›!˜úáÉÄÿ‚£úÔÂnN„Ó{Ö^B� Q> ùRЋN7KÅËiUÁ®•ªÂŸóú‹Ê6Ma)ôªöf®�Ö¡Ð[‚|" …©î�znQäê…ð~CããìYͯ`p(�ð…Z<ï­Áe%jÁ÷ >O› æÿy_ü <©I}µlð¼¯ü^@!n:~%³x˜(ÝNR`2¢�ˆuú­*‰âd®¿†ÌtÜÿä$mêÄüD˜KíEz ¾ñìN#b½2Ä»³W–›>[3‘®ˆÛÔÕ³ `#òŒB%=°‘Œ~r˜Õ•b’²µùä8ð85T‡I;¹l¾dùËg:¤ó,=ƒT±$"šhÛÙÿ'ÄèÎŒ¼çÙò1l gàêÝ=~æ…Ðù3bž@ÛÖr½±ðŸ]xHhŸem‡ô”¢„d†ÛPº<§°ex˜4i—;Û¼7–�ͳžjt�Ï“{-Ÿ<ø‘b‡gËÃbÉ;Êfó�™.Q˜èÌЗ3B‹6’Bpv\>Ç.SÄÍÐįË6cý°ó²É!vPaEÜw‘YÉ$FfÂfº†¼¼ÀBrƒu)ŽÝì …®¾Y¤`óÍÏlÂ?ëEÍ GðÞ’f­ß³V³@òÃÛbi¶¿µ§v4;oâšñ1(&¯”tÚ×�ÝT-ñøU§h+2Ì&_�a5f&ßþLðÌT }s$3Ú?]:ÛtN¾Îz761¹p÷)›>|¯ˆ�«_»�Ôç8£"w{|4Ë9åNÌÛ|që±9É+¼Ý€ÓиIÍeuÎHÒQ�Q$Íák +æcð“²o%@¸\0HHÜ�Žzˆ óp�ÊXªe¿úû(•ÌGHg"¼U¤ø€t ˜VK ÑÙjgâ§°ÞnØ¬Ž“;ò±±òhš¨¿·z6C”$¾*"Ὄ1ØÉà$R„ß\m8s^¯D”X„úè»*s)Ü«àÐ=õ�¼ Ä} |eÞ§}vcx¤«“u~^( Ðd¼I¾xž713¢¯ë]ÉLp¦ðÖž+q7(—®\€•µîÔ‹¥þ&e¯r¬Z1Õ,HÝã .¤ÿí{wÌSþ2¤�w~Ò7^y‹ÖRk¸¦§c}<¯4#w¤ëå•»òLŽå“ +&ŸûífZqåüb'+õg1r Ö%êæ ù Ÿ#Po€OÐ&ý)׬˜’\¥;†jekBßÏ»ì'ÚaNrf3Q{¹äüpð¿Âð=™ýר“–Ø•Œ>-1àˆ\yl¹ù +L’XU!®6GpúñrÎ +F’‘QJ#°ƒ Gy9âf6 + }éÅËãU!%Ù3GÜ]Ú}úŽƒã%,�¼~“™´v±�{Fõ_ +x+Òk¤úš�­¿ž1© �äFè5ÈQ«äŠ‘ÉVµ|VË¡LZrBNVË•/'·¦5{Iö·jP«RøFùz§.?Ù¶G²¬cžümü�Hƒ{Pí•x̆_ˆ…±RÅ\É^ÿð"ì,;ƒß«Ô×"ËnEúË0ЏAÃbRÙ¯€«H*õ÷ .¹¡¸UVU§† Ú’âT"�“ix%±LÆh W@šY8q­©+¼I­,EM(‰k†ÿÑO—Ƀqçˆå mV„) L9øH§Êî�Ö  <1ßx qÓ€µœ�Ô¶ŸÑ�Œ€Ï1Qz„ï¤â ü¹Ñ͹›ÜeÝ|-èÝ)c¥S`öïh÷U›šRâ`H0á1©Áˆ† ¸kÑ€>ÆØXìÃÈl˜-…¨‹¬ŽHª¼¥@‹�–Þ�`;`œÎó±!G‚ +S­¦(Ý_ ©öGVØRâW| +÷ñß üKƒB0f'tÙ”Ó‹!š¿8<Ê%^O‚u˼šó6(÷ж´:}³0-.4éD=_/üªU†ñ½Œ)ã­\?p½»€æ†¶åSŽO˜;6¶i +�Øuu…w·‘¡ôÔ›]ªŸƒŠúÁÖ�(.O +<ýü ÅòH»iœ]h/±7Üœ×KçÊ縑Yš~“¼�#ôª±‰³¬ü­¥f7èžÕ^t{…G}|¥Jñ�q[;‰Åá?8qÕOÁ¢z]q6�q3 *ù�:Ygf‰ÁœóÂòR`—§Y]°|C°n¨Ûnõ™i@ƒm¹5éN¤²îAJgÊøä¶»*'h«‚Æ_(•“"z×oÞˆ‰îF›íâa³õ�„‘’rÚ#WY_“ÝÅüËzys€%O@áÁ +6ÿìØ¶Ã§.£öÕíÜǬ +ýéšv*HD)2tÁÓÀÁ¦zm<(Ï1ÞÝH�heöÿ±U1ç�½?Êdl„,pOÉ‹èMÝ;hþÿØy¹¥d=ñ)\2Ñw¡@/û /†€•²~¨V Ð aiÝY I‘dŽQ£ X„ÆG~’à÷v1±¦…1ý!ÀB·šnv0ˆ-�ÿ¥SU=7î¤äÚó"¢` ™aã"š«Ý,4©óÿ'KeUÆ’¶8ìðíF¤€—Ù`@Qd­([0òÆ!}΃ �gø0qÙ€ç-’7°úo\÷Û)§5/g–ÌÑ 𛌒Þý40„¡ÎDÁËò=ûÒ»æ +H­â*˜�ÂÐ(Sì‹®—mÔhµ ,Ê}÷ð $T[tl¹� BàK ~–+3z櫤µÂÒ…Í£�ù6åPùMBAˤ�OÝ�ÝÜKôV÷ï"—÷¦;ý.s^Þ{*Ah§&DPצwΩÃ*ôͧ‹-ô:~K¾›+q¹vÁÈ•d¡óÆ ¨„-=pµX6WÉš�rBU{ÎÌ +2ñÎ_sOÞM]›“µ;!dºäYTäwÞeð? ¨kÏEó[¹7Ýë«s-à‰¯‚yr=ƒ‚`q'AT·4ËwÇÑvzÑÐ7Ç ûJ)Þ¯!~6¿›F-&÷y§%Ô<¡æÕ™f)mëÜ ŠâÌÇ�P?$!!r>¼ÌÒÌÙ\¢Óu§`Óƒxsct �µÑœ†¡13²ç[¯2ä¡Z$l›ѳä6œ"Dõ ‘õÿ¡ì‰ÁgB@¡0(å�Ë�pßF•.Vê�ZÜc%{ ô3À„`ÄÈCýñïVÐHˆÆëB ýhUàö3)nÒW(€ÇS÷8¢ Œ’ÂÜ$Îb�lEeQUd G¥?¿%jèK±Ž¬ÂP¤h³uJ«} ÄÐ\¾,$ù‚Ngmýþ P0¼Lš%±"`€ˆ “™±ÀW‹9�3II””D\Õ�Ç59�ÑÝè� Ú&)NMc£jŒØªo¦Œ‘9Þ¢2"<›QXèdu$dž ðw‘R;·óo2À§ÍH×:¶Ü{¦jv\ÖÔK@ðÔ‰B*�Uýã4�½^ÿ¦ÑlVä{ô…oRçªAÌ:x'Ð6:÷Š¡›‡‚Â`“ãzÃ�¸Há±f¯¥h£W'ƒùçµð„Ʊ!ª’:ÅYÚ|�–gçb–TÁ¿LšÊ:–û76]£ˆž„Ä61°Êb™�bVÆ]&X÷“°³¶j-¢}�D<2(�?•µ�hDt»ûµªB¼©"¥"åíùDÒš¸oU\Z1ÂÖ ‰8\Œ«nF¬j,g#ËcGŠ•ãSøÖ_Aâü!9k²¹;ÅcÁ'( æ‚:S ŠIì�Y+—¶j ®¢UeQ«k”^í'÷H´„ôJÃ"4žZÏ"™çpPª‰c -Ë(2¬šÚû°dì½Ðlqò,óDœM=q*ú} çL’˜@Àß„¯/6çd$FÖéŽJÄsn4ÔfuQìA!Ž)ð×YŸÕ‹ØÈÑŒ1†eš¸@ #uT3©(nO‘0&j®É r]­ûúlî‹üWásìw/M?Õj(Š&dû¹ŒñuÉžÁˆŒ´·P¨¼eüŸ [©½•\¤äò¿7M¬s‰:!�–bôøòd÷Š•˜3J}ü }´Ó@(.Q¡Î¤Ê Qð�ØlF†zµ• Iñú”èMXª>C�šøS‘šˆRì�RQœËÌ©†êJBƒ4Uc¬eæ¬DÉF¬^ 1^êg#d ŧŒ’V͉†:ËpÆ gF%&±G²MAŸ9EMÂáO)ܘu4d[Q¹qî1º„F²Î‚òæ1û�1jˆ�ë2K¤•êä1�ª_‰m‰±j|‰*%µ3¨(â¢2ÇÞ4O¸U²´DSµÏ¤VZ-ƒx¤ÌÕ°".xš–Ø˜í#{Ì�f †5Db™ÌyñEhBzL×ÌøkJÔxÉPt{døK·oÑVdFFhŤ�†2ÄKdX©â‹µ^$\.j#­×#å×R¤šÑ¢§Õ$:KóÒdôÇ‹®¡†ˆk…J; OQh¦2÷ é–èn»8�%cÓ%CÐˆØ º¥¢ êƒBdApQ Kb¦6×UÞT•Yý#j +hmÓ—©Þ$,b-#Ë¢ÿ°–£þÔt@åšh€�/Ôù”hÑ9HHò4FÚ÷f(Xm¹®gE�Ölj8l°dþpª¼QJ#‹ªíµØÁírLëãMÙæePömntÏgeœT8%ôlD\B� +-ž¼dÝ?}ð±'¶°$¯yN·ÏKÌ­)â¥ð?&µ6µKB4B$ye²)Ž¢ÜáÙÒ™ù�øÎšKTµö`öR¯¢°8ªjP»á•b™ÐLX¤äqåõŶ.:uggEX!³L5ú�ÍrºÜϲG\c÷ÔÑ íQ‹nC\¶”SÒÓÜ…‚â—˜z|ðò¤! ‰ðkªhr�íºl +ÓXlÒÂK´;hysĬs3 i4IU­Nœ¼)÷óMÂc1ʵâe|D’jÆ'‡ã3#F3ªYm@&DÚ(cÂ!1dKþAÉ„QÉLÕ›PœÐx"2.Çh¢­ap†<³âó @€p€@ ‚@Fª|úœüÆ"jxÒ0V�Ä2ÆÀôG†Ær±M\ãÄ[D­ (Ù…sXP@ç«Ô€@rWoá^À€Ç”i­M"WÀ(­CÕ˜¡ T0Ì/¨ÞÉ¥,û‹J +˜™ÞTʦ˜vˆˆ‰1©æg•|fZÏ£1‡&4ÖÔ벫(ŠXK;¯ÉPªHhøú*Ì.Š˜©ŒòCÔ9¤*¨¯_$óÑZÅÅ!¢~dböÚ}…EJ•šÈ+e‹¤X!´Îh*Šå/‘ ñD«ŠK®"Z†N~%%Ž·t×ÂቊDcÏ s¨¤øH)d4£ ÃL  ‡DâX€¨Çzö€w4(04HDDFͦ’”È€M¦PIz„SÓ 9û€˜^ ll�¤^¸-ôó³^ù•À?°§@K`æf ùè?¬œ˜åL&-ÿa‘%0Ín©E”XQþ[ëO]±”Àäç+¹° ÍïE&]¿¬Ðt¿ äF>@Œ1ÀƒESF¢’,ÕpmJ`7œÀ±ðzT/�™/VñĨߘí-Èãg�—/1÷²¥ LeiT´J l�½‰„ROJ`fÒ•Àš0B¥§¦Ú”³^rEYgBd¤[ l!j±X‹§VƼÇo.ÌSK`D‚(«Ùú[D¦•cj ŒL~aäV£éEBòK`I‘g–NòÊÉënê(�uÈäs}V{suÃÏC%Ô +üzË_ô\©¼W·Æÿ_{>š£K`KqL#Zt žbMp L-Å‘BUíö ›ÂPÄà s ìJŒ�[‰ì2K`8'¼DÅrÉÈj8( ØÅ£Ké ð–ÀøeQ5dÑKx”À0s¿@"mN¦¶ äB‡†XÃë €ÑìØX‹ïbqRˉ¾\á +QÓ—„¨*Û]{ÉòC‰ì%05è]J +® ,¥x\³7:%0nð¤D9»+�…o+˜” T!iÆ¡Fµ`ê� K`õÔú«ª�³àê…{ã¦]K`TÐåÉÞÝšJ`§ˆŠëDÄ)8åvéSÓT8³Á§GVˆûÒ6�ÀÞ?S%0 5„Rl§F˜$ÀkaE Õ´î>ࣿ0¥ØËþé’ñ“q~„m,�ÑÆö™S�8¢½æß‹ÂX>J`ÊAÒ;þ•À ÑX¦%B ×�<_ +5z_2 €³ö“60ö`:|­vN L+ §wl&F%0QozØ[‹€K`¸jà a•Gh K`Î)�Û]Ìþ.W|3ØEÌáfƬû…•n–áó›‚SâEÜÚÁp=Éä}–À_›Œ%ŸÜ”ÀÀÆ\XWoªv�düq}A´¶ºšrb”B‘“L<ºá® ö|©-�éÅVE¹^ÅTGÏ[Ô]¾äÊB-�]išðZжÔZ=úN°ˆ�èm%°Ëþ’õm�ÂÒ͸Á-�Äï-ÒÆ±B Œ*<–m7,�!v?8híÀ„%0Øwõxã¶Y#N†a3e»ëŽ4¤ªpù!S,��´E"vF´æ�éäÅ@è8mÜ6í8”9s«!ݯK(nQÞÓ)��%ÇPxb~W–À =ý¢�=y_£†·ƒCâûÍ((�É.x›L¦­:Z»"9qK`4é<¶Tð¥| ÌÔnܹÑ!•ÀØ!†Ö b膗¾xÚ)¢IóÓÏ‹TàG¹w ßö›«u“ô˜G–Gý£¾ý–À@]l$[ï*�é >¥{ÜÙLÃÀxIr%ÑÝ%0#F,žfÔ)Y¿æ«À]Ç Ê*�µW%­I=ØC ‚hÅ%0‚ÔÅË/«BXC%<ãË»v'Êû+�ÝþÅà2lçÑ•À¶ð^eáP®%°ëëû¦?ÓÏ0D \ÀÓ§¯P›b÷¸Dô1ªyBÒ�Ãe¶0 ;+��Üó¡j_Då%°%‹°;�–À&‡a¶$×åØ8Úï•Ø/ô%0ç¥n“Æ£Ð�UèI—Àœš„bp'ª@Â.��¹|¥PÁ J`x‰ñ¢‹#NÆV,.ÌîâŒ[Ò8ú¯–ÀúèvSM=“c ø0Èܰ¾F� +Ø4Õ©J`sØb®G‡}ñÝÂnD"1T%S†äSóI²Âò(t—À:Þ¼ö)(3Yóãé¡ML†£†�L¿áâÀó +%°�&ãBÒÔ�¶MOâÜÔýÂý‚Ÿ +ÊJ`î Qk>A ,Í?Ùø³ÿHdo úJ`>6q2%0Vcˆ7±)�IT¹LÞo25wjîõL]”Àðg³Œíº-¦¦‡Æ�uS›»Í]øê¨ù##:W%0¼÷óÁ!ÈüQ/lCbk.�‘7KHÛ£R:£@%°÷t+kMúŸôd±^e÷²SÉ(‚RpJ`ˆ"uTòSKzgÀ?!5,9}À ~zU#h.dÞ¼†a'Ëf®Æ Öå1!ˆ¹ÅTîb)­ ²*-i2=eÉ™`‹°“·Œ0쀔¦ýöÁ?ói¯|�¸î¢œ™?SšJÝ„K7q±Fü±Œ8•…çÝH½°½í#ƒû?«À­�Nj݄Ø#üô½N“î„›’0Vï¹*¿—üVá<8м¦OF\Y$ñúGD½ÏI’�ssÂ�êMÞS÷H<…˜àSX¦IK Ÿ\J^»Âç/ D-.:bóN_M‚opøô¦üžÒ+Ga�O&P/&þ_Šs ]¡/ÓÎþ�6ØÃÔ~ãdéõ˜´%«*ú¯‚Є¢¼l!ëD›ŒX(§'~×¼qoq1=ÙLJOšqŸU!=óp ÿÙk%F�¥·=êS;s¼]Š�uIžgèóµLçÙ÷<òà";‰ÁbÆÈ&‰’@9(gÐÛ¸»I_hZõˆƒ;=ZÍ Ç˜Wž(º,¢’ïF5Óp*µ*ߥ�«ZA鯣euD)ßÔ‰°uN`Yž)S™ö“sIdWÈ�©zu?�Yl¬ÔfGOó÷äR»p3¿=çÃæj'-f±oíz#O«ÇÕ[¿Z˜£ÅBÊÚÂŽ X/n/ï…`lÌ¡ÀX9ÜÁÝ€Fmå½^½é¹Z]Gl»ó‚˜Vƒ(ò˜çˆ®¸ÛŽèó2D0/6ªöNÿ‹‚©°lXF%ëqËðA€Þ|8Úu¹ò:1„š:Vùáùªø"ï&mû:ÿNî{SñŒ݉ŒË�eŠÐ¡k¼¸?Pû×ÁÛ¼ã⟘aE!m¶í«2ÇÁ[½îÁŸô²ìÐ÷ŠËVœ=ñ±Îâ;­îŠ�õÙ®/‘ ¥®–nu¿Æ~®c‘!øçÒI�iÃý¢óiK>èš .Æ‚ ÷— œÕàñÊwJÄ{:4W9Â,Å!�\ïz �&Æ"ÁÚ4»Jb¨±@A8ö#Â×ÒæÔԨˡ3ª…ø?àß;7WÀ +O½_�9˜mU{–f!�æüб^¡Q|®ÄcB­žˆO׺è^8Ž4Cº0aŽˆ‘ð9?mn&J©!�®fZ²O—–ê(O­2ÙÝ©9—mà†¼;XZÏù^C‡º�ìiTUϽކnå·››¼Iwb裹0 D‚ˆU¢gõQÍ…À^�ü×Bñšž,öÿ-f+ÃW�x F dÌ@ oê¶b! +0W» (÷¾ð½‡‰pËuεiÅ­@ðî”ÝR¿wLð‚ôh÷P<¬Ù±ÃOuµ¦î6vŽ=>0oë|OÀÑÞ œ¥mý§§/ܾ2_[šFTo½G$u!(�W–1v\aŒ—@pþs!/�ÏTÅdæéˆÑºÌÅ{ +Dö©·ÖIaÝZ˜JÅ–D['¤7¾29Ì0fZhÓ¯ü¹0?kÖ;¼’Àæ`ü“DÆ<[üã…Ÿó…þu[Œ,!ø×žk‚U~ü$HüK²#ƒ¡Ê‡&ÇôâœÐŒÖº‹²Z)•`Üå1]ZìEH¿àvY±nABjÇúŒt-Š»&l½8{o’F~>Œë½ú¢8á&´í÷ÂÄq(æ.ú×I˜9%ÆVíQ.0'”Ûþ„ØÈ^X³!ªˆP�m1sC¢cÇDÞƒ×VäelÃ*Ä„ê‡ >�6䥉µNˆ4tWA JhŒ t1ðJ¬�ÛFFiR@Ï?ë_©s{¹O,†¯¹ÙD.±€ õ'¢/1ᦠ«*ÑÝ…l‰”ïRFW©|y! búv4ù9fÓ¯»§MË9¬À0µñCç_ J?¨@LÉò{jAŸöô�·ÙÉåØ7*–´ô¹¤˜ô4Ž…SZuB¸ÎæÍ’,OÂYO•6ða<®‡OY$«²}£ýZquçhˆO,­žÄ©>õ–ŽÂçʃø{ùÐ f~{Û{pð0ŠüÎ{Òï”à!¯ðbOÎïþžÚQ—¦lú‰ $CÒ=n�IEÄÁa+èvóf·df}Až3ø2uG‹p’¡+‚…ˆdäÈp�»ª‰ 7¼rŽ3�³ÐÉZÊ«•!½J§¼Uóº�Wö´3ȇ7"7h“°æ &»=Éø†0üË+öʵžÄ×)F VXŸÉ—:BðÀ¢2>8J2â¯<½Eæn­#îTfµ*+n$ez•}ßq=¥æ�nš8ý`8Ü_ÞLO¶äGs¦Ã¯U�ÒâಫD&§aš¡U#Šý¨î9KAâ7‚é´»ás,v>”ùcú+Zž€ìž±/"Ï+ª +o4ô˜U½ù}2ö»Qá ý€>€áe š­ÌSi Èœâ®éÉ�z&Œš6$ÆÞáFŠ9Ò.½\xÑ1��:§ôÑœÀr¥Æ(¢ÿü¶ƒç*¦å¬_ç–Ó fí9Ø Á#š§m,Oõ8Ñ +“‰BOLuÄ üÑîxòj"ÓÅT÷©ÙvÑ|§ÌbÖ§Ã¥�ñ•O�kvá |Š%‚ªP¸§@0Kh0ÎØ“uÑΛgÓNæ…ŸE¢Û^ÇMæÎÞ¦ÓY…dûN"CÖ¯;éçíÔŠ¨f'_�ùuÂú¤™âTƒó3%¤KJÔI¨¨lò½¹6[e“Ç×V`عj„à ™I4„™ó©‡‘玚D¥z—¾Ž_œ^‹�*Ö:K1Ôi)ç(ù#7ˆ�o"rÞ£ Õ…"ò&Ö&3#‘«oMƒ=��6±mŠ�V6MUK§e}/lj» À€eE%Rf®"J»‚¦¤HU4á…±šò'¿†$ÏÓijG&ƒvM;iŠ?B²ÉMØÐDš10×Lï}¦I[!ÄXîLáÚ#™ªùféÍt,¯¤*3õ†Fð%@¥Ëd÷Z&³‘2ù~WG¨®É„[™©JK¹‚%#Óªv-cê˜"4¹bDÌ˜Ž¥å¶ñ‹I³æ²2ü@]4L²v 5µ a²Þ“ KÁtÈ/4'0ù(ËàUÑÉIuÕ5¥eZÌ]I&æ6̽•hb#(@àÙK,W¥S%&“ç%µ@ÊêÁK9)«Ìˆ�]ºÜ‚õγè3E3—è[JdÐÅ%f( ["-{ãHl‰×prCE’–¢ISªaOŸ%Ý%–Iéc1KÒW¡÷ðyŽ,g÷ˆQFXbZD�Ð H¯Ämª{âœ+m †B´RÁ„Ôa¥ù3"†€¥J²î懩´!“Ÿãi¹7pD]5XjyI%+šB!;¥Œ<¯Ú±šRêMïÇ–Ò‚œ8ÊvYCJf�a£4¡#•ÄJ‘ù)Jñ7–ù‚’¤:Bòi´?©Ï a€�æ“6¢x•Ñ£“*ä# N",p žÅ‚MB[ãƒTÖÁ*çíA9�&-Á~QÅnLÚBöK€&UH Jx—Ć”- �õå®±JòL‡ä*sŽ’Uä4Áå$eiƒšRÂ-IBj +!¡âá#äÄH:U†”Xf­CÒù»Í¨~$rHÊŽÔeÈn$ S¹Æ3#.­/0X# ¦|õBZ$„�e–]œ"=/7 ì™hФËvAÉ:$"ù©&s±GÌ�Ûù(7Úp/Õ BŒì#¤XNj”w¤±8†Q&HDãsò)&‹ÄzS*¬dÉ?q�ôD‘Ï<òG¾=GDˆ ?:H^¨Æ]…nKk툕�êÞY“÷=rˆû’-OÀ¥Å#é/ÙÀ€¸ˆäÑ·PmV_>$Ã#ÉI8¾fèî¨:Ù´Ã×svÔC]�ü¬Ë:ÚZGt´0H»i5êe¶‡¦…Þß©ŒRt™ÅpÖ‹oôá¼(Ûž�‰ˆÍ%!~¦´Ñu(^�ø§� ºI„@® ©¼S�Eèì´Í×�-A£1» “C$h0µR[”˜ª-Ï2,¿Aч ˜´æJ²S=ÖB�Ç%ÿ׆;äÞ�”´ài 7КA£IìvTh 0Ûx!±�1ˆ�ôC,�Ó~TZgÈÃÂçD-wÙ…œ¥Ó}¾Øª„mLÛQŒ ÍDd+ºØ‹ &Ÿ�Ï+ã#}hž$[º;¤¹Aª¹î»Ÿ¿÷ÿ>JA˜<‡®}g4RÈ(°” ­Ø‡á,ÀJÞ%q›PRR›ÌLR�pj0.z©q@"ii%Ú†ÔˆoñmžÜ< 7EΔ&$Š Ò¹¨@1p’Ö<…ÐÁY€«) XçãÎSêù–è8êæ%=}|¬£@ÍEë<+·¾�µÆ•†H3PÅöÊ6­Þd–ª#mÄÝFž šâ:3ƒË²ÊFP&äÛgõÎð”ûÖÌË”Kà±íØBZBËò<¤Â øpì +ÎB‰x‹lÁY¨s¬»iÿ$­A¶Üaf48 •:]s€°c¡Þ³š¸^{>k×"Ä&„»ÔŸÁß,wKEäJ·gœxQ¾Í­F�eèúfabÐ'ˆc’dF$·†ð:˜eÖ®×~ˆè…ø ŸEHýCz³0=#iE`¹R5�‡4'b7 §å‰pÑÍÂü6‡#ºYXX²áÞ µ®uÀõ®!Hw;RÛ%øÕA~ÑÿBF2ø@7 ÖóaËêç­¸0»YpwQnQÑSkTZX7ñÝ,è¢Êõ¢ ‚O¿;Rd¨V�i;õüx³�o,Nø¯ô%ô¤ xìôÓ®óã1€Ë£»Š¿¶>JÒ-ñ¦hmü»v ¶ŸIû¼‘ù�fÿm>¼û@Å›n�} 3@’U ¢ V¿x�ú¨ 2B~—mîmbÏÎâ|j Ø/3S£yy_†÷ô5*n^;u•ˆ´/0ã<è $KyþBkÓ6³O5.®sL¡Ô¥ßå-ŒìzÙNf ÎB¡¹ô¿¾êÁÈM!ü=¬Ð¶m)�·7°£BCÿ[šN<• +­Ðìîp×ò¹’@ó÷Ê °�ÍÜ,�¬Ä5çM7 C4ìê’å’êÙœ +«`3Ïúj» +K†21Ä9ÚHzÔ+7þÀl Ím4ˆR¯àÜs¶[Ô+Œ=#ÚÎ&×Þö6 œ«óÙ¡â\‚¸BˆórU•?+(KÅŠ6q*<¿[ªðO :m¯SüT!Z¸é\îœ{¶ŽN ¿€Aø(4ë¥'›KÜØ,´ 9nqñš"¼-ð)mw§4'8Š«LÇ,{À_ÁGáÊÙ[S¸;P¾0…de38� Â_.|R˜ðàùȰô–>«� +úympX0Çöšv±YXôgEˆ�ça' &x,ļ;à‡WÝZ.L¨0h:ج°Õ¾ÈÕU RA¯0éÛøä˜#)IR÷½˜kA$›…âç+Ãñ9‡Ð+D�£ÈæY;ñ|/GlÂË¢…M½ÛmÅ^¥­…Í‚ˆ@'W'Æ`Ï+0íËFlªIÛ¹$ M™a³µ›ô�ŸD°Y°>D¸Ï+à” Ç*,3‚�Ú9ð õBšZ¸ó’»©ÐÉóÏp׃•7“ ¸`Bb]͉€Èdó¾Ùü/¬òĬY`BdÙšYø¸Ê‰µXCY°齚…™ÝR³`�¦(;e +ÄkõÂ]š…†£Éî8;®k ÍSƒ¤Ãû±cïÑ,ŒÕJÔIT˜ëlš³+ i,=ê±°Ü?µ¥!]�uL šR/È+AéY³PĦ@ÉÏ©e†@U°U â»ÎÚ) ¾¯³ü ܪÿ©_ƒ—“cðóM?³A| ôæ$î4fÎ7,/YJ†äO¯éÕœïr€VxA$Hy%ªø'̆ÛKÇ î€ÿQOïÎ\��"€X:LòRB9g¸å.l„&-ãF0'¯!¡[àâL'\! +LÍvBÀ_LqQÀغŠ¡b…G$àäâR–ñwÝw‰fï�óû*áHÛ߃Öö¢åQC åJs0zùîLâÅÀ�*%3Re(¢Ø÷dÍ·j%«eH:ò)œÝá*ûÜxü»@ý.°À�CF»Âql�„AJŸbm¨ÍÌJ\бŠ:ƒú|ÚE�@™]r1àî²:³v‘þ€Ô’2ókj4vÙ§Ô¡$Ë ¬*¨‰‘ñh>ã4š…Ì:¤ëyÖårkýB@³”ñÜ¡"ç³Û½Rù1¦2d]P^®í”`T6w…� îÆ&Xg½i=K&^^6ë£X{Y„OÌ!ÀÜ.}Å¡.7ik¿#SH¬ŽŠÑ‰›òµÆŠJRRkó�èFâÇ7¬g¸Ö›Tóm–£¯¤ª0ÑýhÆ�Éd6�°·€#Ÿ"¥Ù® Ç[ç8’nn8ŠõW§Û ߬ОÊÐ× �ÈØ¥ÛûSZûø> t÷¥œ²]¹Eá€x÷i¯æƒÀÇžB a“( ,êÊ?0îîÖ£-a®#¯ù}ú'ÍU=DÅ͂ٵU“(%fX“U'\”ù�Põ÷à>ž¯nù*ä7²(ðí¿Äã¨Òu™BóÓdÔìPB�¾_�#¤ýp]ÞpQ�R)°f¤ æ8¯å1Ÿ„‚;=Eã”�»•d ?èÀ@Œºãqw2~V0Dˆ—@ñ¿ýC %'¾ �J”¾$“¶iŸ/Ù ÄýÂûu÷$½G¼Ê@ŸîäîeÊ•@€u5¹ç=¨}$‡KD{€S^+N�©� ŒÎw ­²¡År3T$ø<× ÙOî+÷ޝÀº`XJ–5Œu.Fð󼘮̎rŠ{5N4±ẗOì´�åò%eŒ"©Ä+Ô^]mc¢”b‰&ʹW+Ô™Vî4KçLuG‰dRþN�·A)Dsß“νCØÄœ†J¨OÞˆÁ%ã¸^àßÏãX—ˆ§«3e�V{ÉŒKá6rãeÓõ¾¯")úìƒ_ÕEFh=»j†“ÒØ_’úNΟà®PeHN©,U¯ûÓ^ØJ&Hà3$ºL¡è¥¼}Õá�ïÉ#•Î +\öÜT5ôe“­À>ÚÒ#Ï/�À�ú]ƒi/�8x]­úƒÑË ¨Äæ'$$BõÍ~õšÈ­IÒ¿U�.®fä†Ã(Dy®á•WÙD£ÇFu+­ÙEÚ¾åV�|œ'ºjѤ ?(6÷ÏVä8¸+z´ ÎõRÖª\� +Hb y` å +`0»t¢ºøP€X39 Xx²@¹�;<¸6 ʧXC»ÒǺŽŒ‘Ca®Ó“¾õP´8GD_q;ø3“æ…¢æ[ˆh&ô—�iw,ào4ún#pÀ<ø¶ð*Øç³ŠÞJ’¬è™¾WݦÁké_/ˆÆ7CÏ©(–?¥íX8ÿ·P­üO*ì’]§‘ L2Ýæ$ü® ÞéH•šã¬ÜŸ—·sä«öÒ®Z{Ü‘çÁq �ðóq@—Þ¬/8õY­kùÐ[¬’�¢$óZ˜Å�ÒA£56Åqï^‘(Y™�f<&�¹ W"8×1æês«YŒ¬“NyÐ{¯´,Y»–yY辎љÞ1íÓâ \ß:jg,aÞ§�¥ÁFª1iÖÓÒ•4”܃ C"~üJ¡Q‚ºã_(Š“aId¦|O®á—+5{€èƒžS±[£. 5�˜M$¼ÊÈŸìW{€ío.W±sŠO4áT: 9J¹]t%øxôæÈ>~ºUn\àáà²p&loQÆûkÉŽô�¬{7õô�º`ÚTVì€×>T5ÇE×”]g4ÇcG€—6¥°ÈÛ`óÐAÈ×y„áÃ|…ÈšÚ;J“k<¼ÑäI‚Ús/ÀŠË$­}¶×Ì!– ¬`¬L]!ȪPjW£ŽÁô“7øJà'Í<ÊóñÅ–oºKEصé7ÓàðƒÌ›´{¦´ Ÿ�àþS‡ˆw:“ÃIˆ%'"]öÝŒ¡}Ì"H‘4Òè?I(zâÿÁÆ]F›·(¿êvÊŒéß$ÂÈG“c“b¯Ìïó|ýO�;ü•÷�èÉñhB䊘M–_=r”ñªHzߤ‚¹à .< -Ôq~†E9ù?\ˆÃÞš4‚X�­%€s}pÄ;Gé·�½•(úâŽãõ +4‰84޹zÂ{jÒGö¤A,"ÒØÝm.lPm4üÐxrgÆÅçK•z€”1Ó"||Wí ŒðÀ7CÃ9¼KXÎÀ÷r'k$­<µ¶ƒÖ2iâAÀ˜5ÅÈþ¾œ�°ˆ°B!A7qm U»¤¥Ü*µe…ìÔ½ÀÑ{¸£Çïåòù{à'‚š!é®ä|Z&@ñÎ|•†Õqá)” P…~š¾¦~ÿq¥Æ‚ðm7ùS ÖIKÄ"�êµKM ñÊV‹m³°ÚÄXöŸˆ]7åÒ5+-1¥ È$PuÆb½µ†kQ� e‹–¾»ftž9Ál;ÍÙ±À©'Æ}~bî`¯ÄÚîþº5ø]9Ø•sÌFÁ'~x—?¢&q@§ÃÐR�^·qÓÁÖh¦Ä­ =šãýáæäH«:¢&œÿÇÏ;G;qñl_Û«ˆß#1» ";:ç%¹œ¥Þ›F +³ZÒ=Õ-Â}úãh›Þ¹�`óÙ\< +,yØÁc1Ÿ'*¢x[eòÚR‡ØÂácóH :.ýzY}X;.Þue�Az™©Ict/¯öí^=¨Œ†UtOµ]te‡*2=ö…ÜÄþp¸‡WÂD/!G‰¼Â{•¶£ÆQC¿¢~ÖÛ-³bjMSª_Hð<ÚòïB—j°›Â§™<ˆŠÐô©·»Á­„�%!ÅéaÏxˆ®Tþgeúo@£e<i+¨¢û:*>DØÚ®µX º˜—,¦Ž· !Ç!òwõÔ†Ðí·`¼F&¥•wéûŽÇd\è­ ÃècXp­ÁD�ôrjªûU´²Â�9ÊtÅâ~Ö¾�5®/#3pñÌ™£9¨¯?dVÓ �àïÐ>M¬�'<‰­�³\wqa9õ I‚êUÉö·�@ª€ËK/ã.¥š¹¶„Êû�Oé�ÅdXó”“ÚûB?ÙÓ­»õ¿ÀkY0à¶Ém°ƒ;nâ +˜Œû‚Âo_šnK6†å,æ ÎÇüdÛbˆŽ‡ßo¦|Ç¢¥ ~ØEçc»F<Ó§&f©Èa'Êb_â¿”N(îyÙðóRŠûB+Ð,Å<…Vˆ'EÂg Ð~åPŠ:4¶—çOÛÿBAló7³w46˜Rw‰h€Jò|±ü)šxðXïáS¬s †ÚÓ{«oˆfò¦ŠôT ×1V®¢½Ôëb�(ñI2>ÐaÒPí¢ìrY® ‚½tTt†ÃQê[šR\b½V5.M+›)‘ =p㩤)�\9úå¿©Ò4xhC)N|Kš²Ö¼úè SöŸÁw›´¹ƒ§,¹öæ*.ÑÅÄyüÒB+'"Xz�Å¡:ÌoÈ`ó™\æ0ÈÖ,̇ðÅŸxU@¤¿‚Ì##�ü¦·à ‰g@VGô ÐÅ€ +Áˆþwø' ÝT£@ãt!BŽÐ-„º:­,*ž‚F7†…½ÇõÎíLkEw�jòØïù + �òéI³dËE«†Q¡­wÇ(>¶ n\ aýŽkÃÛÓ%\¦Ø¤l¥†ôƒ›tÏ‘á�ö»;2¶DóNec¤à/×S‰ôF.�‡j Œ´:_Q¯·vÿ�ƒb# Ì{½«( ú÷�·‚Z²ùNÇS”„ÔI°Å Ò.ÄEUFí"˜¸o /û»óÀÔù! çÿà0šdøíˆuôSŸ‡9×8 +ó3ºûÛÊ·�F$[øÃ�|Ý”!DœÙp.õû´ÃŒ˜Æö[]¹AÂñ/BH§¹8’jÁ7§Fvˆ�Óiñl¨&˜ Ï ­ÜÈÁÔ£ t‹-ÂaÄ®Ð~„6E¬*ǘGÃ9!ƒºÆ�އ‰w4×IÕ +™õΛ@˜¢ÛOΚ³3åuÛpi; ÄN61ü“xÆM½1Ö†lD((“H*gs‹|â‘|‰Ÿ2÷ˆ4œ‘«+ÁÕ�Ä5üà@ŽI�†£hÏ¥X žáÓ/Á� ÇÌ» Ûü=¶aø‘x¡ŠÍhvGžn‰(€¥ûóxäP øÁd˜Pcß3¦â.ŠãFBŠg (Ú£}p%I6g1çá®c§jœ—p4×ð¨u}hÑûMn|Ö×;š8„´˜›ÞJ”h4Ò%LÖ +T9!óXÙnËÌÈÛU´s!Æ”¹-YKÄã÷ˆ1kP›žÑ»PKÉJÔ™tÎ" +˜nŰHqs€Ò«wKÉ‘'sl w™”ñ£Ûàô³Ì§ŠræZ‰èoHš.†k˜ 5BBçhõ&òØ7ôdSïÖ�@81¦U�Ãy±JÌ£õûž…G+㋇oêk Ù12¯ N£Ì°9HÄîTlˆRæˆm²læ%Ÿ”ÑŸ(ñ �y³ÈPt€Ùj¥˜¥ íCQÀ7µŽÜ\ÏiJ‹(u÷WgÆT¼ŽLÓ© ñÚ¾÷öNÀˆ­¹¡™_ìÈ|åK\p*a¨-!÷L¿<’e„h!éäcp½Lêž*‚5W]�›f\•jx¾Ã¸Eœø2Fa¦Â€Åab`y3$îG=Që€åð Ô D Þ²TÜã› +¡]îéåàUI�nå (ß‘,ùŽe,És0õ;rÐq8Æ(95']m…í8�)pÅzä™U‡ÇÚ“ë‘GžÅÎË.§^jˆFEüóðèxžGÂ_þß¡ õ‘�ý)iÄ=r�¬+¼u�¼K~õͯÈÅòXNŸ$)2©¨$Þ²ìգЊ"C7 C~lb  L>ÐI�‡¸,ƃccã#—É •eÈGî÷&\éÉOœ!qXwu†ð“åÅÿ‡xÚÃÖÉú��òåæ!DLn�ZðW©õm+ ´¡xKüûÀ“ÓL4ž7v¥®Õ®w‚�¨c#šÆ�þ¡ˆq笛 cú!ÇrÚ4…ÉL1Î!&c†"©B½Í" ÌL€�tf 4·.Q"SmlÒÅy¼ +0¿ñƒj“voI +ÎÓÃZëåá98£O.%M$ _Š…/J¦î}¢�<1þàåœWf”¬èñã´éU5 ê.}¿I|Åî(Y€%ó<‚SeÈPs &$l)r®ÓÇéÒ�^*IÔ#% Õ»Az¶^;¢áÆ ¿C˜sãL€eÈí Ó…£Ke« §”l„ ‘ÐÖÌ~ü3Anü•’ î\Û>NYJ«éÄ‘ƒ˜²ÌÕ¼Œ�¾I±±¢ôTÍÒ»Õ¾”¼¨Æk-£9×�½Óá¤wå�]ÛIp3XdCжa 'üc&¼ðí"BæÊ Yëš’G~�™ÓQÁžkv�GÕ�!sLóÜ«¨$Göˆ:ñúÓ,ÈaW….êØS²0H:÷´`á;%‚]·™+`¨œò^ ’ÿýd‡BƒJ>�XýÎÛY¨d&³D•h„ãf©jkdÌ^G4w¸ÑGìeQÉj�îŽÏ¥–*±•äI=*ùÁŸŽüœ#<5fG8˜ÑðD0©ä€‚*-à¤ã­Ò¡mÝ¿œ÷RÉÒ¥šs.™©ä­ +òÁò¡M%×]݃4[ÖÝO£½$‘†ûˆµ±æ-rÑÙ‡ Cv£çŠUV×hÔÓ$ 3‘ÊÖp—=vûó%ÄP…14,+xî  `âmž7æ¶hÆ+¥¼Äè¼ôº&)Ï]d¢R¾Dd¶Ëàkdíî²^×|¬wâ¾Ñ­t|kñ}øŠXèêãf—£V@OâpI‚v(ÊÀ¨zÞCF~n¦)6[äwÞœÎL 5ì¸C.û ã†ÑÌ.„3ª²‚8m»vQ(?Ò­óóaÝ7wå¹|�\A‘bU^+sZŠÛÌÚ\“‚.R>&Õ�`ó À2P�¡Å9[ˆ]˜Ò Ì6D9²ÓõºªCµãhÿtAÈîY>{mw³%Ö«<ŒE�ÔºeVõï³O3¼vŽ¥©?ùÕâÅlI…†q=É™N…VqH§º€ydWñIÈ~¹Í +òdãœÊvQÄhóù•âZRÜ@èáòÑR~A{«è×¼ƒÕW¦ 1VÂjTÖÍJ˜!Ou¥F?qŒ’|�æÇíè „08Ú£*ÏÌíîÂXœ&ÝÔ�ìþñ�”*ß_ý¥ÒDQM=xe{*ã?ðhpV„Ì©É�™îúlüÞ®(.ÁX*¹�|.^�÷„Xñùl úôju^v„Ùt(çQ4±©6Ö�^¯=œ{…)?²ÙÎü3…k +Qú.G“P£‡0K7Ö×�E—ìÅ£Œ—0e÷ÀR{�²mBžô›„X,G—×j½²e‰*a7lR·Zã-B‰�k‹ ñ‹T|ÑqS¢¨¹L±áÅæ«nZÓ�[»VÆY>ç¶"S;äe�>a,æ¢ø@F\†sX€L ý¬þW+ò_s!ê€Ì)¥ŸQ(PÕYmT/‘^¢Ã`’å—·rò6÷wÛk9ý™ò^@Á�Ï~CLÄ kF¾ŽœK³Â&ÖàÙ”Ar@Êl<,Ù òS{G>^C ª-ʹ2KÚ `µôêEÎ^­gRÅ%i`ˆ +Ãßp–,åRd&–Pµ=À)Fso%¨ŠÕIô%¬™YuþvC$ë‘ røäÁ»™Óò†]‚,À¡ pàuÊ#ä• +ª#ÞGüv¨c 3³>ƒIâX¯‹&8÷E]æÊ0¶syHP~²175�y>æRD™ˆ�ñ8øJ$ê¬çÂ/Ai3´a+á6i) ˜]Å�¿B›´y%†žÚgØë‡"üÁ¶ÇH¼¤”tÛÿ|j€d° �Гãf­ìJ‘� Ǿ¡¨dMÁ5q\—íi9ÎLÞeOÒÉð�°Ï…÷LN·€T�†õR½õµBˆ–O[ y´UFØ;aó�(žrià³u2EÉ9Ióì$6%õ:í€øW÷°àQ%-ƒ•skàoÞx C�¼Íb N6u;éºÑ %OÄ×è2­Í+<éZ‚d™7C×ÔÌÑñ¼þÔbovB‚¿ áOŠž¤Ç ¾$"©š?%§ôÀžÂžÊYÍB·,ÇaL[VOfD~Ûw`¦‡@ óDLˆ2±Á·ö³J§Uú2r�ìo³·ðœ,ü.KÐUDý²G’ÑM.çôþ†ÇÊ+wÿ–‘°Ñ€IdT"éx¯N¸ôò.æÒjÏ7 øE°NÁŠ”G8áL¦£Ÿ§:â‚vÃþ/ÒŒ£Ì¡ïF­#0»šA– G˨^@æf?gÅ¢ä‹=b»‹Ožy鿍IUµÃ°‚‘¿îu·9ŘZzõv×B�XõÊÃIÚmRÖ1-‚03¥?ë1fou.É`̈2C!Ù~f­‘÷Ês!Ñj yÑü™5È^†¿?3CÈz,˜“/tŠÜQÝ'+Uù9Ó;^Aç€NEYki5ŸÍÜ—‡;šÊ�Ø)Ð,¥|b-LhfJr¯0Žõ/Zm‚ê2Ýv y<ÁYÀ]ô~œ±LÜ!œºÛ³@lA3£º¢]į©,¹—Hàx{ˆ4‡2´µ­ÝÌ>L^ŒòÙõB³éz^üÖ9A‡yày­y».AyXÎâÏ/¤f\’<û™jn"Ó@i±™«Ð¬Þ £äAÅB3!|Z@>BxÉrÐxH,Â/ã£�Í‹z/Tr†æ°¶8#·smF›xžXˆ*mh¦ÐÀB©JÍlçÔ8FÃü.0-‰i²BXšFvb§Óë…¡âCóÜÊ?zëÍcȘŒ=Y*ˆæˆèéÑ–IÖʵ£çW¨¾bÚÂã´]Q6/¢y8É¿·Ur5Nøs–D³õp·p+Ñ<³ýHÀÂ03ÑÌ�&„Ífì+eqø�ŠZaÕ „‹§îuº¬=Á�gA4›îCò=´ ûƒ&3€p6z+,.PÞð ùÒÊûwÑœñ ¨€/£¡ ”›»fÁhU±ö€D1šyµï'™ç¤ö­@ ë\œþÈtÌkk0‡§Ií‰æþj4'ÙD„ç'u°Ñ<ÎÀò.‹5{Œp +�Âþ�æ,ÛÏ©w±G”¸'¶ë>ÕHXËrç2—ÍÉ� ×�Ì|ø—¥lt±Iý›…¹*.“ûhãaRÌÄ?šC‹‘I.Â9Ë¡�ÓƒWàk.U!VYŇ֖;ÓÃæ�E[»©ô·'ÍÝŠŽõÙ�»Ån: SBË ä°ÖMBû~€j^¨9×L[.ÁJR¡8ö¦˜Þ›1Ò�]~ ;”dT˜€@ª,?³$KHÆö&‰­¿úî%ªÄ4Q=×2ÙAëÂA�@ ÍÜS#$(o€^L&Þ䌪à‹F„›8mПùŽ +]\7´›ê•êÅgP%�€štcí`qàºT[«Ú ¡:="\%¦™2«~wì‚ê×!Ä"šxqBT†H7kf–!Ñzw¨@Ù·®D&E=Qèë4”´PÀJ÷ݯ­áì‹].Voãf´ü…F¸Å氻ػtðAÕ•þÍ.ÛÐxC�h£Ýüg»e`ìôè½Oy=&X/Ô²© ýÏ1ž‡íòÌ%D¾/bŸÈkX"Ëçúò<Š«‰šÝ F'¬€­9ÔÁ¿«‚3&Š;` &[Aum(bs_üµø„ÖE)§³ä�Uü•0M'Z^¿ÂSÿ”ËíX™u4(¬ªWq£R\ŽÛå䢯ªìâùÉ ¥‰È©ñ…üØ7M†�O3»í°·q1ä¢ÅjÒùÃFÝQî„ +ÃaÏYæËjÚpA—ìˆ3"(]QnAü–�^#DRÃM£µ`‰»ÞE¦;0ô=UnwÐ\ªcøJóbÂ':-¢ÙµH(iE\ÚÑP7Ð.NSw®8 »q!åkð4²aN §�ë(2ë�ô`Áz<Á^9¥2›Òb ™É�9¾rjI£ÿ ÏíbaÈà�sOÌeH—ñÃV�-¾÷^ +Z.n—à€ +vÍb™ÿ8 xêñ×â’#ŒíÉ‚ Fê�¸y>ÔË#ÈxåΗ\°‡¡ôœúƒz°¬Ë-ôÂ[�ÖÚ-à¿€«—c y‚J«7 +f[,õ° dòjF1æa¼�p®U¯—ê©ËB�#ð·�Aœêo j˜“¹ÔgBñâÚQ›Ó�b}*O8|½d–´�‡Ü–ÄÃìРüãZ¾¤â?œ~ Ft¼àa–íùC›œœÐv/€Õgqb«à2¶ D-Há~V&Õ–q……³ikÆá�ñé1Še¸v©å‰¡‡[6Bñœü,�DÕÀ›ì`×µÎkJÚ'p’r¼ÈF7Z¾½*(=]c5DŸóô–Y|1…`èïªA‰Wž¸�þ]AnŽKÉׂº€Å<áFÝ}cgdÛ¿"½9/¾/L}îÎΣ5GWfˆ|&¶«Uÿ@G˹ù*¿>µÿ•T®ÑõÐèò ´B²‚ÿá">Œ/�@Y}§Êaœ´·“Ü`Ê9Nõ8 o9‹ºš3ZñR©Ì[:Z—ßTŽ”\´ +èXT@c4 ƒ�Œä +U°ó<È)ÖrÃÍxB¬-:ô9rá½D0`áÎþÚ‡ä+��"q�&7�b·»þF,óÀ«TÜé;QX> äqÒK¦ó�DîosÕÝïª/^KÛtu·î`Ì=`£èµ�.˜Æ*‡ìM§þͨdØÑÛͬ'?"m+÷³óÓî‰ÁœE.ƒÀ¢9 æ“3Ô[•zHQu$ü©ÞÆm·4áWV´/ 4†Ñú†ÞoéÉ¿¿Û\ß�åtZÁÌoâ7¨ËO÷¹_‘¶sâê¥/ºÎc[˜~MÝzqòÄô\c\¯I"R`4Šwýô³¨·`úÖ|‰Ó@ïg ƒ¬Ñçcð P�7ÌÌî):ð5q·`àK‘KBSRÓ— +O>ðª¹}ÂÉ.,*Ø¡?Ì�¸e'”cB��<á]�¤YH@òG ~ÝznM­èºë/û–†êCßÉ/>б6OhòRÏ…m:.=þ—„!™`}þÚêüMEã x¦¦ =x›µêlY¾o¿÷žïEL¾õbâûÊÕWÎáÑ©häò$•#ègþû.~šãHͺCŠÜÄõ‰±u‘ÛÒšÚUºÊXÝ|•™î½±lœ›ê;&Ú3®›Èô&þËø5�/^½}.–{cæO7Õ‹ÝGZ3ÉñÇKÇj.0n°ýõ6|xË}±,£Ì_\�¯A!�Õaü¶¦�K‚šæE{£ S–ÛšyÁ2y„)\Y–Î4!#»>_ÜÒ§zß.ˆ�þl�(UöÎ PM¯©�ó§ÕÜÄZÊ…3× İðÈv˜~ôõ/øòåˆq©À¾„Œ]ôáa\,ßuû€< Åwá9Z¬”ˆàèƒ$ªÏvÛU5—xH¢I‘ÅÝ{ÊKä¤Þ~ñG͘©µ]ýÑÚLfÏ€ÓЇӉäb d…Òºp§[pÌço£pˆO‡ºbá®ý‡ýê­á�ö@0�Åa`(ï¸)º¯®I:ÙÜ?£]Ouíð*QpôoW«-ÉrkíÃ%Ø#w†wëšÝM­Á1šÁòt‘‚ÿˆe8¬çàE¯¡¢5ÁÐr* Á`@91 ßíÀ”6ÿh# ±TÊ–'Q0D²á!qü#Gð9 ›�„T¦�á6 ûÖ�@b�ŒâÊ!"À€ožG$A‚û˜ c—90cy:{¬åÌ-@œÔœ%Üô•Ó‡_Sñ:=ؘ-�V*å…"±‚Œ¨ÞjÔÜ ö’Ö'ý'â/Ûð„~B\Àëo6]úû}+qy¨Î � +³eŠM´ù¡ ®¶6ÑV½l‚‹s „û^�«|ƨY"µúC;݆?ŸòŠUKÒ@Âÿ‡ÿÊ'ï(ñœÏµc"V.ìhgóhÓƒjî¶ ëö$_ÝRS™²,-ÜNki¢‘u¨� Âs¿É�ÙÇËDÂþ`çýî]±&ïb�ÆÜ]ž Só›içEî)Ô_ÞÜ•°£\_5ñ�¤@Г…ªŒ +þ™3,ÄuÄÛƒ/ÀƒtAƒÞñÕÓFÏRçotq¥Àh> +@?Â*´yÕ·EvçN 3høÿð�Þ¨dýX´Ò!Z\Hn�­ºé1§�±µ›|j€ÀS ¨¿eÍ(Ó~ÿ|cV§y”ÂîCZ S&¸âr«(`q€Û#°,M~®RÚ•'y•’žÂŒ°—h‚LÔ�¹Ì@û¦Ýµä �¼É­ŠLp×Ô‚ƒA?¥hðöŠü°XúiYbžQ–h˜ž(£»æÚïZ–àwˆïãcÁ‹»·à yܳ £2߉�vqye�E/ShÊ–™‚.L ‹§\r`FO<Œ¥Æ¹]Wæ‡ßúÃ Ï ÿõ¸iê¶¼Þ­3M5Vì4Î0÷·/„mQ‘O/ÈãÊï§£g8¨X„D Ô…É¿ Á8ÐN6hÜÒ<èÐ럔àÈ<âKû°S…É)?ûx¥Û¿†@½N÷4Ê Ü@ýÏ&k«¼’ Ê¼ù;º‚2Ußœ[W .ÀxÁHŽ^òÕÇ/ìqèZ[ÙÞMÁ]ZûÑcÚÌüÉkJ°t�”ÝgµøS}àèCÜÒL‘æøÛU±kø»jû±é§Ö”Éß& ž[Øò¯àô”dþ³`²?ÈÃ}ï£Gãï¶‹ÃÿöCo0óae¹¹úª‹!Ë]£ù +-‰£í t(üa‚'œ|ÿ Ñi¶µÑÚS�ù÷“bï ò¼ûCûc…Ю$¸tó�{[6éýÜ_ª³üȃpË™U˜N‘HÅ-§·q�6à®áÆ—‰�]XÞFGÖªjsËsR™ê /ׄœˆÐ=_…2NîÂÿ£Ð<ûC¸bݲ¹Ÿ +vË”ÓJsB»eSÍk0À. ˜Hs^¿[–:l/ŸZ Ö‹è%¦ä7äV_t› mÈ�™/o±iüÛ‹®·œ#$áäÄàð°ƒäŸÙàîÈUì´bY~Ë CkÛËÃ×úž\Ç® 4{òÕðÀüÌ4t‚P¸,v‰™W‚˰õrkdÐòðÙiƒËMvÏêƒË™þ,õ\åó£1>R¸Ü6¨[È€iþw†Ë ÇG°.“@D:èøõx§‡Ã(‹»˜’U‡~çƒB,Mù\ŸyºÙ0Ì}g;^£ÓW\¬þø-./tI +`è:±}ì¹D{†¸‚ñCä"U·)¹•,Nónàr}A7`å‘•@Pî‚BÍBJe�¼Û�¬üÌbÙÆá:>†Añ'Â#—M(™ÁÓ‰‡YNŒÖÖ´aèâv#:èrðVö\?¹lÿø·ÅIÊåag×J¡r9xˆ{�¾Iô'›–ËøiS”_ ŠŽœ¸]ì7,uç¿OƒÈe›‘—øÏAqИ +´ÃªÓÄÊq3¬{´úñÁˆÀD�›N2ZH„+®ßœ°t.O×·zp°'‹Rˆy˜$h¡D<A¨ú@Í€šŒQ’ t¹À:+Ò)ºÜŸ¹Ôè2©‚B̬Ïã#B‹–¥‘.÷.kôE°rŠÒå@b{IcéòT–xíÅë}/{ +£Á4¹tMÉRq³>ÓØ7;ßSæÃéÓFþÐ +~.ü.}EN‹LGø8t¯¸>º­Nôuß@òÀI{ìW]^ìÉI5W—ÿ=n°.Ç3.8RÜŸ2ŒÍ!� á"Oa�æ™[ø[VX_,úÈ=,ç{]îR— Ô»\åÓÀ±Ës×q Ž±Ëæ³C¶[ÆW.÷›]´ÎŒê óiþäP{Ô”°ñÖyTÈF¯7 ž| �„@L¤± D*ø~D£Ám4ëêk+éëQÀë@Á“�.cÞ šÑcmFvœ{:“€W®Eûâ¬g4ABòÑþkE÷+Ê<š¤Â^l«ÝxD™(ŸFk¼×²W fúBÅ? ŠÝ1‰×êkIåîaîW²�FؼôFOüÕ],ã![9uw:f`XPWާŸ1n”(çäƒn¸|ûåÈ›ŒZ–¶2n¼uE»+sÞÕGµ~oËé®±a©F�AT(ò‡»¦b7¿ mDIF�Þ�hö¦°–>íYK5ý™ ’}¹w¥Özë‘ɳ(ƒ±<¡ n*LÉS^¹Ô=,s€ÏÅNŒ! ‘ŒçuÞ56¸­W(–/³{œ3¨ôÌ©æÌu£ïÂ+U]BêûFz–qÚ¹@aCN¿NÉÂåçå�‰U!Žfã¢ó•]NK„ª"hlKzœ‰'!ø>”ÀõBó@Gz)×>‡ qG 0Ü>÷+&=S(x†'嵃P¿ŠhÍ0Br5’«8%OøßÊáh§–|Àdš…*ʼn 4LJE|n• +(©ßè.§í.ßÅdÁÅAþ›a3ÕHƒØÁ™áŸ¦‘œ¡Ã(‡“®?«œþÓ’/‘n÷�·5ìÂ˱õ–œÚº|ˆŽtíðÕ€’Ù‡»=I”)‚ÚQæ{8tÐg2LŽ3D�ѳƒ™wu_4µ€œ,ƒ·.bÏ.«4¨F}ƒ` v°ö$¦kN/)"¹œvøÒz"ÌÏÑh¢¨�jß +!éCÞóYH,&ÌÂjk”K Dáègä¥dÕ€Hžð¤Ž (IŠnÿ¢7q󯼸ó(4”8aÅ+)oÁ�a€à=ޏ³…�øÓ7ˆVt§$¦—-ASQl9¬=ÆÜg8CM¹ >XÁ.¬ƒtR�™ý#�?ýñPØðûâõw yİιV;ÎŽð²§ÄˆtýT HðT↑î"ç°;ÓÚÆ €¼Miœ¦ò»‰LýløIôUåwžnheY~¯-ªVŠC˜p> ´ô† dÆV Òž9^öür6¿gãvÚ)8¿·Š\¾ù}˜õÁ$9¿' O‚1`{9,SÂó;%µ÷üžÀ}Éi1‰÷Ûzäýün"cŠ;O9Q:¬—¾]ª¸ü^÷Ö€¸z£L; ,ÚØÉ²T�OÖÆÞØ?¿ç…·OøËßø ˆ‚®­qé"ŠjF·J9´�fÎL6™icÀ%úýi朢ßÃÐ Úè÷[2^Ð ¶pS¼¤³0Z¸½Â óbé÷!ÐO°÷¬\Ax uu­`,ëQ#8ÏïY¸?’é÷‘«déñ«xú��ò„ðflB +¨½³>êw@ê³Ê.·Œ¬žÈªß‰Ù‘Y¿+ä¯&®èb²¶»~Ïâ– A^¿'`AP¯�m͘e²ÚÆsÑ<6¿À!Uª“˜×ïÖÚ+~ý¾ç´ÑÂ~Ÿÿ%$¯ FU0J{}0€Y�нðŠØW&¹é¾,=¶fUÊœKÎûèÔmóP`Bˆ‚UO»VËI‡I^lb‡:tõ ÅÙÃÀ닌u@‰) ^t‡gô§'*VZʇ}9JiK˜[îo e†d=N§"ÿµsºÉΪ¬ÿð+ª©ÇäØªá@öCÿ÷x©|’èÎ{á�»­pWø/âs­ï•”èäã÷×Û£±¿(±iÀ ~-RÅäq ¶~Á‚dE¸�T8Bâ$;R˜iÁµM”‡ ê‘8ç:º^¯,_¸9’)ÆvÑ èâ˜xð41'úÿž•€Üù�îÚTª‘åàsÐQQH¼éMU¦DRЈŒ9¿‘Pk¡N÷P¯häÊá�v�޵û!ñÑæT:O ‰ d(ýýÛÆ häÓU3Ã>YAƒ†NÞúlµÈϦÕ\�ë®t!Ki$°hÓãÏ=Zwà}÷‘Õ廃ähÝT1"Frá€0dPÒå@XzSc/Ug4@‘x]c_)-2ïuÒ,^¨´ÚÝ'F¯Â$ÑÑÛDyJ¡íæò[‘�k¢Û“)&¸ž.‰²Ø²‹§ïŽ4îªBùŽ”i¾•¸P VK¹D—¦¹\Çf±ð£}Õæ×”ø]Jê…+2Z©Ÿ=z ~½ zDE‚U˜žsÒï6A{LU½'!XüF¸rUº`ÙE-Êçûöý†AR‘“Œ�È!À’/¸!bÝ»x³“7!MÃ]/Ç‘Ò:€üòU+Ì…]Éú™€Ê­MÌ­€u2PZCë!óâ"<úà vñA�áßGìkÉ,ýgdÜvôæPxõ0ÈfµÂ\¯‘óVìÛ>]‚<_ Çk90ƒ Žaœ<’­‘5›€€)‘ æ”.–þ!ºð…–Ü`¹V¯lýY1ŽÒÿ�>�Ìí®ë&åó­U9¨5R ÊwÐ:^Ý3Ö‘Œ@Ý"g1ÑâÌÁÓkñFé“Û0¢“~cXÆò?¹‘Jíf¢ãkÇÉD *$©;X0\‘ ïÅö�ã(ü-UVâÊu ¨Óâø!ŒçÛ9–ª;7¢˜"šfQ EÖ)û)”VvwkE³)yŸRJId2Ù½ÿÿßçw0Ãß(²CàÇb±¸¨z¡úNàwÁ®ëÀ®ë¸ï;�^ס¾ïûN`×}-.2xYu¨ú¾ŽÅbq‹Å:¡8D}ßzÊkq‘»îó<ä8.Õu×�÷µ¸Èß)%’âN`×}÷�×� +uB¥¼…=Ïó8ÏãPµÖUÈêû>�C}‡êºüDDD>.åq¨®ûbŒ ˆA}'O"+�kq‘?¯C¥@0ÕqßwÿÿóºïtùZkÇ}1ÆÓ)uâN`÷u*åÂEËã>Ô åyÇq)ìP!!!ŸÇ¡¾Žû¸î;�ÿÏ�@�C�<Õuàçq(ŽSuèq(ODD„ãPß ©g«–Îë©ø4ùÈ’ŠvÁTªÍ³Ó›^õ°´Ó£tz9imëvVëÝëÝaíæ‹Ò-gS+åô9Ý'ÅNó¥³½½úlY±ßKç´2_›ñ”vRܸbësÒž´±Ë|]JÚxvÅ4ÌØ§¥]gí¾ËëÓb›o¦²bše–RR϶Þ[§ßÛm½/®ÒsínŒ±½.+Í´âZí•.iu*óí:�Öió•m±�8»{­ÙNK±;nÇÒó”µöÍÕ;[·³¯Åns¦²Ökm•7K™iÓi©­YÞëe[3®7çœñôŒ¥lY½Z§žecïimŶ^:­�N½âéyR:ç½;¾WJgÎ_Iq£ØYgË|ñœ>oöÛµVJ­_{[ºœ-³¬Õ: +½¹N[«[Ïîy:½xæÙrœg;Íî.³Ë[«¤¹ÒÚºžsÆÖ-½—R)2% +ôЂ � +N±!Æ8|ÒE†QS8@ÄÿbŒ3¼ô�Äk IAˆ¨!ÆpÄà DèãÏ €�1 h :ÄØâGR£thD‰UŒ,b€€ 8Æê%˜$'ÆñGp‰ÏbŒ,hÌ@Š! £‹¬ˆñ»€þ�“ +þÿµP€2p0Å¿xˆÄèz€$þŸ=N+ˆøÿï@IQü±€/-5òHÉÂÿ�A#Ä0°BG ¤<5´hâÿ— @Œ+t<á­ �/Bàÿ?)ƨ⦠/… bVl\øÿ&°ˆfˆÏø·‰1¦ìàÿGÎ ,ªðÿC¨ˆ1ć)~ Ax´ùÿŸ‰1ÎÐôÄGÑ/þàÿ�P#̈ob9�|)øgb[ÜÀÿ'ACŒ:J< Ø"‹-ü?bŒ"7ø�¢6ÄüTRô` þŸ±… +#pâÿuʧðF¼„ÿ†Tì ÅL,LТÄ‹+´¢@…òÿƒÀŠl>þÿø#`Ä þ_â‡M‡ÿLØBôœð?¸üRL®d,XèhÝ%œ¨¡â(”¬<‘ƒ؉‹”&‚$ µ1ä¸�ƒA¦†"ü.1x'0 +W,�âÿ_Š#x|øŸAŒÑÅÿÿ?˜!FüÿO!‡xóÿÿ”°ðÿô,@Ãÿ[¡Å¿Èüÿû CÿŸ;ÿÿ=+ ðÿB¨ÐùÿW‰Eüÿ `þ + âÈÿ9‰ øÿ ‰ÿwÅÿŸ„¸ƒÿ/z1Å6Dÿ�‚øãÿ_B‚üo�ÅŽÿ'A¬ÁÿÃÐÅ4ÀþŸøÿZþ¿„ ÿJÄ éÿwˆ,øÿWŒÂÿ·°áÿ‘Xùý¿|tðÿ-ˆ3Œá_ 2Dðÿ‘ˆ±ÿÿyþQÿßCüÀÿW ®àÿ™"þ?(ñÿ7Gük‘! à¶°:TtùÿwéðÿOkñÿO£†ÿþÿƒÂðÿKLü?¦ðÿ@ÂÿŸÀÿïƒ þŸ‰ÿAP=þ}ÀA €:u¨ŽS‰ˆˆüÿÇuˆA‰ˆˆp~\ÊóR§Z…¬bŒøqßwúº®;‰¬¾ï‹1zœÇqw½ŠãRÜ÷}]v¨Žû<Åu‡ú:Ïó>î¹È­:N•ê:Ç�ß üBBB¾vÝ÷âÉÇ�)ä8Žë¸Ïë:ü<jåq wAõ}_ê;�Ÿê… +Q‚""")Ïó8„|'Ð{ñ‚äÿ9nõ�@îÆY,–Ç¡N(u:�¤ºî«µr_Œñ;�)°ëº#¸ +Y­BV` + >l¼fSÕ¹2ZÊEþ̪ÌPŒV£‡u“;hZ2�DIGkHV’a1Ú\¹ÍrÜXÕ`ÕVBBg4IFk…,u&ôaçŒÒ�ÎP:™­ˆpð¨¶<8°™êH‡ NÎ��0Ÿ¢PÏl±ª­ÆÒ!йj¹æ•B +ò—PÐ “pÅâ“"Ãá‰Õ¼j²$$˜Ñ-é…ÃÇÅ$¤•ÈhªÍFɪFÞÁjµdK#´¤—‘Ðl±/C&>, Ë$FóƒóÁ G°™“Š ”¡£èå¢k9‹�œL™•üÊiåX“„ÑSUÌæ%FÂØ):jÑéÐAeX²!¹ƒ’‘‘²Òd#a†L|ì Éþª™½Ž²jKåœàWå™ ŠÁãu3CCÊ2s¤©UŽš×‰‹ÇjÖci¶XØG4$YŒ\€¦MŽ;uhÎ Íš)#FNŒ<º£ÉÅh1|ftz'¶´óBT#+âagZˆZª¶Ÿ/h„FS †ãÕ…&ü™6L3C²:4g4ܨ¢�NêÆÕÄ£ã»G;:',-š ‹ë[ÂÁSyxšfö¦%Æw+RÍÀ`( É^FC#2ÕFe†Fhô[ÍÀpX(%¢”"’<£õø�l¼¤ìæÈ•U®ŸY Wíg&”U[’Ô\ájIˆ(eÆÎ,éEûvŒÈhLKÆ HGÅ¥ƒèçJ%Ì$£å˜1Á±ŸË•ÑjVlQìE)¿(ñ0Qm·UCHÎjäàxY©1z¸f®ÉjÍEiÍØ©ØÅÆ ŒçFOŠ,D +]hM-šŠ«"¹�`.Só3 iaS«¶Žaөڑ죽^>,.ZÎM ­�V?3WiI‘/V}U˜›"c@5”R–F’T^’f¨RdŒlF£Ñ¢2zÕhIiŽ—v^˜šf´•ÐêgFtÃbr㣈ÅDµ…A7,&?&80:óù‰‘/¶FFŠ›´ÄÈW�gHªrÄ�)® žŸ9K•¼ªŠÍ ÐL’­d´§è†Ìkˆs™¸Ë Ìd�üB9º#ö’-í¼™¬0™´ËMÍËÆÈ%#Sm0r-HFc1Á±:Œ\2²ͤiˆ¦%Û [‚*“̈‡õÁbD« �& •±cehTÁ´%™Ó;*9„òO�;kT˜LrZ3{£I.lDõÂBó¡¡â’#I.Vµ�xBAJ@B²‹a`b6^E°;{†ŠšZ;È&°±Bò²á!ù$í(êAÃkêñòòœyÖì#2›¦¯9a^#ÞŠGÒ3{dO!ø„#žŠ'ƒ± eà¤ÌØz51ùÐ%Íbàl>M>² ¤™JÅb(Š˜AxÔ�8$aDJ '8$BÈ ŒjZHr�ÁS,á„6@ÁxXò¡‘Ý‘7¬ÃUhÂ@PPáÄ¿Œž œË‡‡|p¸¨4Œ,ðƒˆHb +@9㜳çÜòœ=ãœsÎ9o@YN)glÎV¬ÊyÃÜ9‡ùæÖÍ9çÎÙóÌ9çŒ1Þ€0Æc\Ë9çœsÎ3·fÎ3gŒ1ÆØ1Æã­†qˆ1Æcl·㉱»»cêÝNÛý¶·_÷®»uw·n¯cow—îî^¥»{Ëúuï È­Íí´zwwwwwÛnïÚ&ó¦ô-æ][vw×î ÔÝíÝÝí^½Ý³Ó°·Xw×îîÚݵ»vwo5{/¾÷v»ß¾õÚÛ×ï½öÚ;/µ÷Z¯·z½ó^»…Þí»Åúz÷Þ{ïd¯õZ¯½ÓÞ{ïµôÞZ[õÞ[¯mYÛª·Þ›ï½[ì^;ï•ÖZj­µöZk­µÖÚ ÈZëÖZk­µ²QnµV¶¼òÚV¶ÛZe£XÙÖÆÚZk§l”šlke£XÙ6 o¸…µ–iÆo!-ÞB\Ý»»»»»[w·îîîØ±KwwÇîíîî³UݽúmwŸ@î²n¡o1—îuº‡¹»+nÜ´»sWwÇŽe7íÞBë[ؽ…[ ·ì-ì-ìÞBL{ im†÷âÛ÷Þ-æ÷ºß{ñ½amÞz/½w^ym¶²Úlû޻ݭ6/½ôÖ[ï¥òÖ‹ï½-ïͶQ¨ll­•Mm [lo¶öö´[Ø(U6Šl¯�²…mí&ó޵²E«¼žW{ëÌw{žsæ;³7q�~sËìÓä#ójÈÀñ‚„€|�jx´Gµµ<@É.Ù¬“Wʇ�׬Y +cª-Eâ9^–¬ŠJ‡ª6ÕvØa߬Ò� +jªÉ)¨ ,&ªMFlg&³C'(3’Î#´#/%¢Ê7£:9(5½£(¦Ɇź5PÒë5´tÓ83JF.‰äÁ$Æ 0€ ƒ0†) +1s¢‰‡*_A+ä ÓòJA'ÌÀö/^ ‹¡OdfLLö&”*—[+8ŒšÁ¬=‰ÿáó÷iR°n¢ZÌm+ $îB9'Ñ€ÑèhO[)ø®uïû�µ&aj+ÿBB �´YþP¹“¦ƒ ­èœNá²ÑÊ¢?S•U+ìdÄxÖ�vÎ>âc»ŠVþþ½å¿+dÍ|ÁZúºÛbe¥;¬ƒÓ±U¨lHîYFøvñ[è¡ Ef¹œ©Aq»øXy²A6Ò÷ V”‚±.€Y1µï¶�yEÏ�\^é+ûä¾ÊY½?äzU©_•ÓU&¿½…2¯"ARÁ:üš<(ÿ6šïA¼[ÅiAu…¢¡Ã?Þû*��Îí¬ˆW¹³ ,;ÿ€—GðëЪr·´¯n†cÔ5ïnÏØ åæ©‚º³². º‘*ŽÌGø3ct)C•�À�}W¬©ôõž<챆.J¿%™J×ÇÄñÌœ¬ü7ÄR*”ÝÀ3z�Ê—$,D›uv<F*R”Ù €Œ„�›…Ù +š]–ƒBJç² C±˜1Š8räã)ýBWwO©À¢ñ“îl\‚Åõ‚ ¤(ÖsŠÒ¢› µ•‰-ÀB˜™: Rªê èÂÞRNœyŠR\| |ÊsmÞS¾—¦ý)ÎøÒ¯Õ­äT^sÖÒ›÷(™½„V¸3ƒ³æ§$ ­zÒö”(ðó¢tŠŒêË!*)¬�>aIpS²g·ôÌ'&õÅ™LjuUµ0«íxtÊaáÒÆJ¦¥�cƪxŒ¢ý…TSsᡊ#$ÑÇpà � Wdq.×ÀY´ÂU÷IÜYŽpç\øäDD�p;„"ðŠOˆÙ»Ý_Å/ãÜÜ—åâäÆé)“¿pAÊeŠ?Vç)"ã+žT¬úÓRù®�¾d^1ÜÄAJMY¸ký° 剪…;cɼ¼PtÌpŸHð¢í² Ajñ @ûö;Õã†j¿z•·pu¸wËÒc-Ü'¨Çvî“D×+b6s}�¦îÙ!�ÐrÊq(.Ûç¶C^  ¤ ‹¶(© àI\OTEnFBgWà‰û�ÈÅD¾^q‰3Oɸ“ÀäÌkˆ:ŠùCËÓ<Ãa”p$ÛµSÆõ?Bnt÷+ÍaÏ]ë¸ÛDÚÆå,˸íŸí‰ÊÅ}ÒÙà„ǸY@•B€J´ÆÁêÑeó5?ã>&Ю{kj42®³7Ð$ƸO{µãgGÌÄkwüœ-“˜‚8¸�/..]”⤹ ü­düÙ9°Å%Gûö5!ã+ +º¸�Õñ‹�ÂîâšÄH„+H\ÚkãrÓ&œÑ^g¿�@^ï—‘uÏ+BøÛמڙD·ª0�· —ß°œà:$hËRú pKÜ;î(!r¹à,F]ñŠMÑ$0³úgë㜼a7):Ķ$:JÏ&¼O8†FCáÂlȧpÕÃ…E FO˜äØpÿ3áã[ +ªOÂ÷­f�þ`©jÂÝ+–ÐJ8^H�#�'¿h¼™«T;~˜ë›ÈXâìyµz ªô(Ýß^rÈŽJ�s‡( 5aí p2ßè¨d;,´;0õüï�£yÝ RÞÊj{秃×4òÕX®/QÕ]ó±_Ö9Ë›êÁw™„‹Ü©¾«�õ€Âç›{E2½ +wO=b'Чå.L¢��åŒì~rD~j•…�òf Â.¨òÔ26|#/ù]¹î}õî–^^Ñ€ójùnr2_Øb2¤Š9¼ú™Í ò[#o­é_V÷»™g'•­–Êð­c%ìÎÿyk²XÙ‚^�$ÙS…hÎ<œ¹EôŬ?]@Ùzi‡Ž Àa½¼4¾îŸÌHŠÄz*Žì˜uâ¸jsá X<ªrKŒ¼I²#í£o/>Ú�!ðxš`¢±JŒ”¢÷Šô‚† ðNeUí¶ãX¶ƒ@Yò2]ÃKV8U®÷®m¾bÈ–4ê YLû.¬vý8>;#ÅÌ*]®%àQ ^ÕBˆ*ˆåœu»&ÀÞϧ%0BÃáä©C^äÝ�Ù\­µbr‘¢�K®«¦EE»Î`nm/d>Ú| ÇÈÕñ46€C5½»¹^Cfš÷²ÆØƒèu†ET]¡C†�]mÌXñ€àÆc,Å‚uff U�°—*{[fÏ…D“Ѧ <5d¡V=qIãMÅ$w¡ÄõÞVS�£IÞ ×�jv졞¦¡PQ#�•û7eˆØðÂ"‹Ž©,�éíÚE*ì÷ ¡7õà C]’ý*‰·Ã �H±–õ™HR¡�P1Ü�X�†àÝíÙ�/©Ž‰Ã•®>€ü(�'I-ÕŽ°ã·\›‘­´Aß`}7Ú>×É¢OVñKšà$@y«“íÖD!É›®¹›T§{äj K'­³­ÖÁro®Ë¹íu°Ùi³€r{µêÐÒn+¿•æ¡ÜC¼U ‘®S‰ÈÍÕÒi@Œ–šl7F}X,GÉ å–MÔÍ·:+J>H(Ûs Á)œkY+~Íç‹àçh!û¤˜ Úý“ˆ«´e oXè;•ì&ÞBó?žñ$z}T·«úÃþàñáZÊn 7¡2÷T¦™_†Ò{0sJ0Žp“Å[BÂÎŽ6É‘M°g!Oé" Ÿ +u;²dp‚% 9¾Œª±xCŸ×â‘¿Ñ$[àËäC1’fåúk©¯‹£õ“lLX:ªÃŸðc-Ê~,2Ûd3çɤÖÃjþ«Ç¢íê0Ûÿ¼šŽÇð˜XÞ£M§Ç²TÃr¬Ãj!бžþ û¹KŒÉŸÕá ?®)²#� g·b/·¤{ƒÏìeÜòÝž£e‹›Ê°äµhÖ´$`Dó�LçŒ9ÍÛ¼~¹<@\Q”¤z“E^´ÈeˆX¼Päç¾¥ ?ÏExú2¯zuŸæ‘¾½Êל±=Á5–(ÂØ¢ŠF:U3”‚ +,P¿!»ý›ÞS©š¦ùØ2(HµË(9ã�¤ŒÊ­ôEæ—K”™r=øÑ +„ÆÆº‰W�„@E`­Rþ!>m®1(o0œTJui—6Ú†úWØÔ&#ïg<•Ÿ\ÂËq«Ðâ¥2&ŒÖ¸föpßwAX\ Î©1oÚëËW£ÍšV‡¡¼Úò“‘1êóè'z<3ˬ´hƒ—Ë:hw! •<·æ \hw°Ò ê´‚ªÂFaðr¹ZÄÅÄ$H�¬��Ê&–Ɇ¼Å¹–zýo¹“¢?­˜3¢0¬Åã‰êÇEíÖþu' À¤h$Ë:ßô#õ¼Êϲ"ä�bu[ŒÐ™žÄFšÇõr9ƒ”7âÿ +OCá�=s5¯Ëáïþ ÝÖô;I†ËŒÉW�ËD¥fâë«Ç‰ù6i{²¶�߃ø¹;DŽoáµòx>ºkd»Ù<ýËÿ›§t¶)ˆ80gXÝóï%Ø€b +ÎÿLTŠ*Tm«¿Ž¡„é)mŸªÏÚ¸h…aɱ°žYm=çä€N…›Ïs‚¾ø¦PÛª´ò�ÜΟâXö>+GO$ßâš ž»>n/®ŸÞ ó”›á¼÷5ÀÔ»Ïõeíq¾J=Ö6Å2%Z Ø}t>Y�þ ÷ÿQ¼â×Óp%È˱ wS +î‘#̈&üÑg�nü{Zÿ0žw�§8µ“²è?¾e¼…\‡.wÇ·@¹̽ÄtÛó¼ÿ(“jåhù*‚*%–”ë4oM�äùûÖÍZ|ÈýÖýÜGo1x +䯸Ûï‹k–I'Ìo‹«�p6’ÀÉÆèt/¬«üT9èB‘Œe�îE…ÄÚ+Ø@je?–é·ÕÙà¡m ¬*CrÂô<G! p€˜LzÒB«¡Zp¤vt7f1º° ôU–å}èØ™?3ÔÝatÑh�àÀKûDpÅIµ$ÌÍ � +¶Ê*­³½00;&ŽÞЊ¤1Ó¥Fáf�NæG–¬Ð=%6«üÝõ³†:BIð1cš”÷ã1r.bZ�ëîr2gQMHP˜yí4 ê‰Âô”wÓP‡Z˜n¼§2ìiÂgÕ?鯨֞�„É&ú +ÚzÇq_O0‹ £41Ÿÿc®ç"P?òši@ 0 ¬õwùrVˆú#'ÝÆïÃi~[p·%kFRAÖ•wG ¢qâ­o.> wGˆDöÑ—qX°õÔõz`(¹{nhð MÚÖ Ø\cT0±È¸h «6VÌ’b0;Þ«Ð�h&Z—ªD� ~€‚Ðf—އTw^5çЭ’0ˆjØ GÊ�ó#W¦fLn½Ñ¿Ž[r¨"Ðf&ëjêÔ|,æ„Z#æÔæ*©:Üôåc}¤ÆOPÊÏ�Q~ôÉn^ѶQ†Ù×Ð�IöкA�½: :Deá·Ë�F7ÄLg&ÐU«ÂM³>ˆ––Þ´PÅKýs Òí�+§9O½±û91áq9rõMŒí#á–¸ŽInù¹Äc¦B®SRýA2�4`½ D¢À¸ßóŠ1Úûú¯ ÝsøkÁò�²hî1oÔ<•v„Q¯â`ËY³ÁyIˆòxuuÓQá&ʰ*p cÕù�V‹¬¼ñ€u¹'Üîì& ò(PÙzüÜ_¯:è=êXH2ó¿¼'*Ô‹K�HL{j�Ày«2ƒ%ôu÷wé€`ŸÊT®rô.EïvVVÇÆÀni“€›­¸�Ü™­Jf‰ˆ·Ð¥1—ÝZé»N©ÆñÇØ±&á�6ÿ5s{' зkpÄ¡Un*fw,3(“>ñRˆ˜³V¹£ÞõWs+�yÃsf Q�ë}ú'g¥²\¬äדΫMk +*L7¨ püázbÑŸgÂÀÔ®…iö�sîZ|’Ñú:¤U»ŒÊŸ6a³SàVˆñl&�ÂõñnÕŤVÕÞg~N.«¬¬”é·é™‘dY6’÷åzÎÿoÆpå­½¢{‹À¬w`OÊ€³¯§¿þ…CÈÇu›�$aäI{ÛÕ)s(z�BŠ ¯å¡Sö‘ŽbÓî|[ ÃÅoùÝ+ô&ÿŠ`­”U“.<‡¸¿ÙÆBiN ¬†½óq¯½åþ{’tî9å¢&Qª/ù ¹0öòž8ƒ>£ïÅA~ ñ-íÅý –QJóJÿE�¸UŒß=X¥D³ÎaÈ h\‘¼ÉÖí©ÖBáFBÜ»SòDÁPBðÈ `›m»`Å©fªà(¥=!/¸&çž›‡¼PR‡ x ßlö´Ð6N�è1 +‹S1… &ôŸKÓº±F»är¦Ê¹ê‡ +„X%BA&‡4ó€)5Ô Þ⨗)Žå á[ôìâþÀ(DI@1‚´ü WZ·#“âÊ'CZmïE0©³Ba| 'H4¿DjEÅ J¸›.ßí,©a9hl9;E¯¨yñ|‰&X!°¾W�”íî�‹Í³²_?b™º2nú ·âõ²?ãW⤿Òïý�Y÷ÔOè�Bê+?pDÌüzH×ýv8cÔ¤éWT°2¼„¿}AÕ �àÞ�€É±øû:ìîZ¤2Û‚¥*D¿Û>â™[V E™¦€6÷óÛÜ$»>×Í1Q˜c~Mtщ&Ñ�« ‘°›v†$ÇX?²�.ÁÝÆ\TÌp¹sáüäæ:KùM]CðûB�Td€‚*c¹{ßQ +i!s÷ikÚ×0ð¸>Ñá„㤣6Ô÷<_ÏwÍ®†j«hèk +·Ò·0 f6_+-Ù¸| £ ­Ë&ùz/Ö°ËͰè�ȃ0¾aFFbÎÙeŒf¼Èo ¹óxâ‘+ض¼ßõŽªÈ•|µì7ë<åS›T㡯2 ÑÕÌVûðe5%ØùD‹Ä‹V%�æ{˜r ÃJi>qž/S>¾{&@ß�[ Ô‹Jã‡c :Ÿ­zÓó)È&AvзjÄØÏçÛÙk ¦._1KŒy£|–ˆŒ¾|mº&óµ!äù°Ë¾À[/Õói0¢²�ÿE¾3¿œJhú0§ÒFÁ€P"¾·®=ÂÉ÷’ÿóœ_Ö!‹7FÛ +YþW9y÷•þ®YÌ>Y:icÿ‘Ô¾!ŸUGŸ‡|õÅE0ꀘ§ +48¡‘Æ0G¸¯úk€¬±|‚³KÖ`lkP~¢}ðSÄ8‹|ê+žÖkl %«�”#í¯)•Z�5ˆ(H­#!¬j ?š[ÑÅÄ¿S l¯�ø~šM{‘’?`?˜Ü »ÁµAˆ� dk?LÖ©ˆ‡¶I¾ù†åEL} éû[ÎâÓAFuKšÇ蟩_q×X'Ñ– +R –Q¡Uë¡ a)9¬‡àªLmN�:Ðд óc–òØ‹äjþ˜ïMp”¾=Û8lE/úS¢kY¥êëŸ%Ú¶¤O8Kïú3k"œ{Wù͇Æã@¹(݆ؖ¢éÙ¼ýÊyB^e›`$cǼüf&$±½ÎEú2¼/ЪØþª5ö�¨¾E<$U@ú©Ã'!p̈@J�ž¿ný�<ù%¤3Ä�¢î¯cÈ—×xª H“ƒú¤<~Õ¿¨`íʆñL@ë¼ØÆvô’@ÁúFH³¢`{P8lˆÅZ6ã«Ã:„’ngØËš¿‹¾ž\^ÁÖíß[mQÀĦ⧮>êøAf•1!©­ =ØàáÅA„¾u5¿qy€(Óð'”‹¿Ô±�'°_;ÛÒ-¯³[X÷öÔ8a,3DÓÜàù­“`E(ôƒ2¤�.@È m![ +ÞH Ò¨}¡„Êù«C• î–w…ìþ’�<øfÛêÒ·Á�ÿÂ#îîÿG’%£ºœ"�±nD¸ìø´¦’Ñ7y.(è ª‹H†<Ê0§“õÓ w +�™ý¾å#pÏÊ:¾¦~�¼ŒB�×M×£ss“•ÕôJR�Æ?bà•Ñý§Uˆ»Fg�|§¹ +gÞS”uÐG@ôao¹=Kš/ îÈ�@,l‘YtÂ|*r«TU@ MÁ)ŠÈÞÚV^R¼N¯²‹?�²lçTÎÜ1ž,Ÿ'âJ%ŒÄÖ2’…‹ªôþ›õ @vÈÿó3îc«KÛžÜGÔŠ\möèߌøKÙNC ƒ>øŸ²=p¥eYø‚ tï¨Ó³„à™}@,¿ÔæAà5O”Æñb­œªÕøG$׊N#³ÞìDëq)ÌÀ•q*‡Ü +Š�©=BüZ-ÁõK¦iÕê·è^ZwP^î—äx’ˆå¤³Ú~�jh9jó�±rD[hxØXBR@š¯f$Z–TBiøè¤àHÃX\/m!$ÎåìªL0õy×»}㓪ˆ‰¨ý=ÀŽ9*�ôR[³Ão\Ãní>•R¢y],S]æ‚ðbšy³­¬¿ç÷Yd0HÚ×Á–²M¸å¥ú�ŠÞy©ðè¥"7?�fáØ×µ ,æ×D°§ÄÎõÖòR¡É²‡¨ý!ï7iî’¨Ì×ÖÅSGq[ƒÇ<†·Öð®ÊŽÕOZÏÃ^Ûd B:dQ+iAH%KÎó‰�…l†Ò¿s€“›xE¬PF¥\Am¼ßØ®¹MYŠj1 VZ<Æs½Ï2Û6çD³™Q•e“¤&<{`é gêÿì?ÀQÚ<§üp‹ò–¢±’ŽÂÿyob< ðNQE›ŒØ�ÅÀ`å_dŽ˜ß’:ýé+ÐnxºçÝTKÆë‘•VZˆú8}b^?EDî`£ÆÌŽ´§§¹Ì목‘Í +@t¦dHf¯-ä|ÇòãþÒiD°™ë,JçÆÝ†ëª�EÊRúøQ�¤ÝÅ +ëp—` PŒrk)RËA¾�È÷ݾ§n("óJ¦$‘1‚ÃÊÐhþ”ßßœÓɺž &®4 +„”àçÌõ[C§n ±öiTiÜ‹=uÑÔM¡Býi4ž5$×AEfØŽÏD=)ÚÎt%`ý‡‰if žÀ”Ó‡Ù`Y¹Äñ^ÒšQJÃ*¹Xä*Ïâx›ºVW*ªðõó[Ç@0n\·¬H [õuþ÷.—Êv°o¹`k-ì]:†Ð¢ä%" §ñ‘„”ÄÙÌÁ÷òé0)T¾œ× (¬´�Õ| ~Ö§öõV3pyf_ÌÿîµOŠN,±Õqöéti±¾{ «Âe(p¤)=W­N¬dÒ|†O(èØH2móšÑuuhÙ0©¸~›ËBV6.ê­ªYˆkBY[&Ùt™UÖ-}T yì-Ú©� £ûé~g<™Ïé]Ó˜ñPuSL[ü¡ĸâ ,ûE�;5%µœnôÜF&g±Qÿî�j5lƒ/˜²ȃ ÇìãP§2Ñm§UÞº TýÛHÁ¾Œ™ÜW¡A}éDI'”m~MÂØ”ÍÓÜD*Äû³ +¦” k‡�]îiCvrù2Å+Ã)2/QBÏš3 ÉÉ(­ +Áþ&¬¢«ý¹0 ¨qV^L¤÷Œ#ã8"Qý¦\÷q¸Ä¯ø.ùñ�…�µí%¡SíÑgS©Ãè¢3+½‰¶ižúCGŒÀóq6ôå¬@¿%ÿÿ�e‹}‰(ÑM1à øÞõ@Ö Ô:Qy­×µö'’§«)±7Ø`_YQ]YÞ<³›v˜™½»j/b«e—µA¡?â|�Ó¢X)§ÛwÙ àÿP cI†Â¬„4ûZÎ; r¦<_§mÐ!Çû@Úíæ”z3¿®š³/ÿ9yJ”pATÞu*@ƒg§¿F³ŸÍ°Äyèö§ºô;ªdÃf 2jÔ@M)ÞNà`Ù øüÀ¨eYbøXd:ÞõÞ…:YšÆnc­Ñ§¬×SpŒ¢qŒýl£�Æ’²}êÉÇo}m�ÿ’OÏ×e¥‘i´^©äûîˆ"˦%p?­oÉHS„¹í¦Îdé÷4¿;í5™ÆþÛ·¿à3&¼PŸ•åv˜›¨²Èãšå>¢êxTÙÂDxœ‚@g˜ ™kÕãÓTŸƒ%Í:.Ú=»Á:Ý�ev}KzB�¡MÄKñ{ùŽþ|ÒÒÌôR’PûÃÙMÕÐãÕºˆ*³ÀL9ϯtB…àÓŠøús}Ø+ß­ŠAú ºN� +Ó­b¦MNµ'â» ›¯À)¬äFQû¶Á/âïa¡mÄ Dc}⼃^SÉP´šõ~ˆ²KMw>ÍZö1Q ¥¢†Y‰s0P ΆœÝM¢øYЄNÚæ×oª³‰œ‰@Hu¬©oê6ûߺ‡�\aòq€˜ÝÎ߯#¬ŽñÓk:;z·ã~¶/º� ´Ñýé„à÷ä¬`ûî¬`ûu¸h{ê˜:ø^Bqdÿ`Ý3‘Ç‚ì“Øùâvnì4Q»8z>ÑûAr²û!êْ龕hänEÎ$¶+åŽRæ.+}%o—5£r/¡G½‘ÃÅî™è±"÷Iä|±�+÷Ծʻìn=ŠíU�è~Šì ,nö5à¶wWÑeսɰ]ѨR�«Þ› ÛŠ¤V}uïd²h”©hFïÍ„‹¤X¡èÞd8°hSŠÞ› I±(ÂæÞd^´GÍ~±g„tb>µË«b&«lÛLl’0Ô¤Ò¸ÑÕÎû�CíÂvs¡_áWÀã°p1çóbdÃ2L*ëðµ½ôœiýno«N‰ž,“á÷N¨p›'jõçÛEsŸo=;âüIo‰ï!ˆñnóÁªD]õbçæþuñžÑÏ$ôM¢M aÐS„낼)1 ÎðYäˆ>#~¼ìÖ£ƒ…z©‘µÀ»B0ó�dGú.‘ø½�¼ré$ýC¬ÄÉFühO¸þ‚¾ì²œHüh~јzIÊ¡ëÚ»˜ë¶·o2faC;y»²³$1n÷]O4Ëš±v£‡§µ½”Í�lÏ™› •ï|{rS2Ÿ4€Ž)´R¶ |‹yŠt©!è6Þ¬¼$ã=Åü2"4btÎTnY–0hA Š ±cƒr8èëÀl-Ÿ¿ w>x§€Š!¨Ó€¤ÄÞ™¶¦*ð6Õ¼ÍÙGqú›µüŠ"‰5Ý-¦rXÖ#$$ß(Œõú–¡þ‘ÿ•Òb ñ¡G,ðºþ« ×.v¢DúéËŽhAIºj Ký*Žù\å•§»!òhÚ"ª.›OQü¸i>vÍ¸Þ Ä[ûÂÿlMLöŽ€—jàNÖ2J"`,zow^+èÑ�^b^¨èµÔú€€é‘Ë-½#»e=ˆF½c»ÖvŠ=aeÊ ÉwR'ú‡ë³UHàrÁý¯à{·J^þñžIV3aé‡}².%G O³¾ oauÔg&΂F—–±Yw"Ïsƒçà3k徎 +ÅDÜÁ&€xŹ|Búqoç;¨a½'-[æ%õÒ©Åm“Ã?6_ÉWãQ�Ì�»*±¦,E$BÁ€¯*CW§ùî¹ýX•'O“ «Ue‹ ³/ý9f‚°Q*3¿ø?+îK×ÄSìE7Ó€ •Zl�Žû¼MLxJÀèxþŒ•Û¬üVveý¼¹\³”%©ø2øÝ/³‘ZhâÃN1÷ÄÚåt +]ÖÑ9ì‡,-†óóãÄÓù—g'ºóNQâÀ`qª*‹ÞR–`Åð:K¶2>’é>êAy¥»Ëä†`¢lƒŽÜ¤µ˜HOžØtùÊèÒÛ¹u—ùº6(؉8|}D~-™ÛÍ�k�Œs .j¦dFLúÚÍöÿ‘峯– +‘w/¶ÿ%¤‡³ÕÏM£žêoA5¡ToëvV5eÛj˜ DÆM^>ÿC1óJ?AuÜnnâ×ÎBRŒ•[a÷"–úÒ”-0)Ïå Òg9¥r)Å2c¦v¹.À¯)ju„Q– ²Ëò„�/8õuŒ3«ÍK'�]Vù&êŠÒÝ›](!åÊ+ÙLaU\4þ̪�.É\Å*ȱ}‹_T¢âÛjŸmqÖW?ÕƒZ ×w~ð%�X~¥Eà-4#\öÁµ‘ã + ÚÈ9*¸&hj;Ö­hÒ¾k£c´‘¨M‰Y{9hÛ«.ÿ(nDB„[€qõûzdèÕÁ…ÛwÍ-_¸i)¡ÍVÉÃý£QL#Ùph›"ŠËäsJ@óËä—}½ªó�¶LŠî ¼&4Ö\»cC@ÿüj¢Äý¾âØäƒÛT(aÛn9Kñö‹¥$͸=N°à¦Ëx΢Æ]QW=v÷âšfš_/eê‰M ªJüc¯ÝàA…¨Ÿ Ö²ß)ׯºÚ#Sh{+‰ï¥Œð×J�&å`q=y×%ò¦ZtPhq}C¡±/ö‚«k7×Ý�+Ž×¢ úͤՒ +çìÛ"çÒÇñø,D*�&×ƒíª‘C^öâl·7™Åš%fVE¶^¢9S­ëú³¯8\v×àŠÝ"G±Þ.kÓ�øÂ¤ IPþ µ-¨‘À ‰ 2³ç£uòÿA-Î Úó�4V|-žÓ~wLèî­®Êá Ž¤�—P>©ãÏ“¯P3²2ÑF˜¯Å¯ìÙþ ‡ù0L(#43D.1/üå#^ªeDe³KñJİVGñãýCTfª$Â×ïŒeÀrF cQ�z£IŸ‹óìí‘H3 ·oFó +¿jMFŒ…!„0A5IÃý¨ 4ATËŽëw©Š!!ÁÛõk'-$XS£&ÝŠSat|rÀ0öp˜Û—rˆ‰‰¬;Q èúЪ‡eÎî[‡¿c)ívÆ—‚‡à)¡òþ,„øBÒa™ƒ6s‘`Hç˜ÒôÏt )bÒèÀVJ5 ×á�ã$WK^¡GŸ¤l–®7FÏ<òÕÌýOK&æZ¬lÂg�Ÿ¥~S1SŸEèþ‡t +]c¼b* +Ó$†æÅîbp `ySêRÞ/à"¡¶þ—ƒä òOjDàâÛA&Vö亅ÀT¥[UÆ«@;¹TÔh`8™\�NÖq \ x.,–Ïœ¤‡Í *?:�==Þ€ZoËôÑÙ«kJ–ÝYmOââ©bÚØÔ+AnÇ¡;u XaŒ5®g`m‹ÌeUuvÁÇDÒq—ò81 õôu$˜ŒªóBJØÞʼܨ,¿È#£>új>%#¶/8 Ù<ÙAh…×D�l ¬{%TLÆHéªlÿ¹ãæVdf ꨎr6ÄÉ +Ô#yG‚#„³–¯ö~ïÜQhÐneÛÛusÙYN=P“ÓBÆIÎPéhPÜñ9y~|mÕ`š+ó¾^zªË�¤tÕCî¨ßúÞ¾Þ´Ý éñlþôc1v2’¨•þšnK¬ª‘†�D¨Ôäâ˜u•_±·¾n®ïB ÷qs IÊæq:‰ÁZ*ònýü…¥çº.¹ì™GCþWpj+ðÍ·$Ü5:†0È9ÆØÄ0bõY”å¦(ÿ8"‡ŒðéÉÚŸs”ºo°‹YŸ$ëO4 ) +vçR³µ6ÆüNH$’¨ƒ�ˆ�žˆahmL&ÙŽÒŒxJ¾„‡õ÷Ú1[/ßpF7Øž¾6& +±•àM>Ÿ$ÓS´†h‘©t +ûO¿FcãºÏm¸ŒôΓésíí.š¬�¢x¿{uõ3Í«ZâJ1á¦q !ê”éŠÿ ¿žüîÃŒ‘¤‡Ý�¯¨æ§Œ‹7»#>„·xý‹ùG,‡šÕªCg@Ç—ǬEC@¤”»±€…•¡ ÍWn_êÍáäÿ™U\ó—%’  XWÐ^!O™àìÚX ³Â®+€>(Ò]q¡Üëq 6í˜jE³dôÞt?çë”ZkÙ¼̼o\ì +”Þ ²QF7‘ä‹OKYsi2™ZEÏ‚B]Ôz €ùâý(_Í‘)àãèˆL 4«Ø(6ønÿBÎÚüÝ`ÂLíÐÀ—áŒ�B¡í¾ÐDà¸ãjˆ7ÿëÿˆæéµN~]HúŽ}aD$›‹!’É·ƒÈ`)F’öj¸ùµž¡ª÷O•Nؘ(E¨Ðž:o@RÄkÕ6À-’í¹áî†?F¡SJ ÖõœÆé)÷Õ夅ÏŽ³íÜü�ì‰ö¥…ï‰o¶˜{gwn~2î"ÏBÐÓ‡2€¸mçæaÌ­&à�»~aD/«…+×ÊÖz*(fþMþE€®hÛ(élRBVñçŠ5Ê_w×ÝÅ' šrråVÜ��î =BMyîQm| *¢¨Ï®±¢„œ +4×–GïÄÖ½{®´±áë7¡>Q_±\¿±Ï¶Z +îûÊFËmáë‡ñÌÓÆÍçúº¥�óÅ*¾„r'§+\<|ñM?ŸdD#W¸@9MÅ�k*³ìW·ád¸—xˆ-ÌÏÛH‚1Ì�äš]�£L�¼R¨×”¥�û4’qMÂK÷÷ÐÜ#V(ÓxîÔ� ì’?ÒÀ� újcÔJSÆž™ÒW,1xÊX ›z@úMñëEU ,Ùû¿q«ÅQEü²™ ®b +œøÅ(ÃG‰_O~1y'~¥O\^PþèˆøÅò#[ §ýº¶ÓS9!Ql’äƒHäô'‰_² H¯§]Q¤+nÏ”�b8z‰u˜8ŒP¦àˆµeŸ˜½áÔ?×O ŸQ6eý}hâ×Õÿ/ÃÙYmÏ\€–‹»(¾×…Ò·²çM ~ÉÂÇ\°ëТrwÉ•¨ªÃì³! '~%n{¾±èî‰áó,�e±4™ºÉáF ,kpÙž(ÀØ#ç^(D¢µö Ò¹KN1½—À¤³ R/1+Dü÷*šØX2U ‹wEá»_RþkDJý%/�‰&‡ïkGå¼&.†DÙ­«ì,Ø�TP PÒÇ— S9¾ŠÐ-i“¬HÄp ýWX2-SDÝ&3ðË/®âC\ÜWñzýnõ!Cf þ)ÿ Ä=EüÿqSÍœ’S2¯9åRS3sŠjŠ‹Ïðº)5ehjjNI92‡‘dP9rÈVMMMM²âr$¹ŒÏ!Ï!3È‘#“ØÃÈ)9åR<ŸS*31sp¦§€Y™™S¦¸jJ>ŸÏ)š™S2s`b¦:Éõ) C„®*ý!Î¥¥#‡o¬A®†0‚¡˜/‹£ ú‹!DeÖÙÈ�ã0V’ÃS3!N�)ÐY5p (ß�ï|e'êª�ºò]U]•»+wÂ6VV.°2«ÄU±:Ëaee´ ,^SnÊ©™¸ªÁu8°²UU )«)Ufþ¨²ª*½AU�q2%,JÔ¨R6Al¥¢D•ªª"8‹TUU}‰*!KwK¸„KKKKKKKKKKKKKÃÒÒÒÒÒÒ.--- ÀÒÒÒÒjiiiiiiiiiXz€ñ+C‡É˜�^Lù T§Œ��Áïdãªÿg0>Å'öýwý¯á·¯þÅÿÿÿ³0�åÅòÿÿJÕoýÿÿSþú”)öÿzÿËg0þÊÿ)ŸÁÿÊ?åÉgþòùœSJ~J¾òùO3ø òùÜÃÿÐS§#~ÊÝ<þr™AâŸxôý9<�Ÿ‚Ÿbø�÷‡?dлÿûdøwÿ>åîè㧤ï÷âßrß÷§ølû”ÛÏî)¶›x°ÿSì÷§¤ïßý>å÷û]íS>å·�ÕO§ âS„¸¯)÷áBsŠiÍáâCRo8L`õµTm”Ö$@Pzwªw'|YÖû¶}¿«»»Û¶ªõ|7ƒ+Ûf[}OÛ.›ÞÝÝÝÝÝ™‰¡V6n6+hf53³}g¶µa¦˜–ff¦‡f³S44³)fZ¥U5ªªDºªJ8kÊ0q•¨²µ»‚³V T§¨(+V"¢¡‡˜ˆfÊ„|UV*†ØÒÒÒÒÒR----------- :°àaaf`£0E\8 SÎ|¦õ( pXP…)FÄ €ˆˆÂ”CA˜bˆÂ 8E €Â�˜)LÁ2Ÿ)¤à¦X\ð!-MHaJšNjKKKKKKKK·´´´´´´´´´´´´´´´´DÄÒÒÒÒÒÒÒÒÒÒ’—––––––niiÉ�¥¥¥¥¥¥¥%±4N5†½nTÙv1l|il¨}©u£`¬L©‰—F€Ç‹,ûÙ&Á(Ì¡àîq=“Âw»>,ư³ˆB£Ý¥i9îúÙÕ”˜6~ ™ H€�Á€° +°,)„xª^Çy21Äx¨±ÌÐÌvedf3&LØOa.&¬¨Ö]Uâ …a§ªZg“A˶‡…}8ƒ1nÊݨQ¶1FÍð»_~ù•uC½®u¿_éïÁ®¡àY¨håß (ã•‹ÚZ'ÎW%\Pe¶*bWÚÙ&5˜ëêÌ®ª*— ëªtè(­<×ÀU¢†¨a±Ï¶mý器"êDN¹S�rª*ª¬§y?UU[õl«žUËöŸžUU¨ªµ¨ÐAjjªNQUÕ – UU½ËŽŸ!íŸÇ¨ô·Ù Ã0˜HHD2Ù4Ë‚®€Nd24@TL\J™‹Ô(†€”â€ôp�þ¤ªz›~=ÿè)v.ì÷+$í©*Ôôƒ¾Ý—Я7²u. úØ>ÀK)´‡�ý× ög,‘»ž;T$PÄ…ÞË‘�Y±¦bjÙ¡Ól¤}¾X;åWüo‰û žd#Ø„£Çw°w0R§ ž_Ñòÿ´´zx{çîö:MiܬO½Ám#­tƒÐ¬sûÉ›¥{ìÇúyœ 7h"¡b¢m¦ÕƒÞ NÒC¿~.ª H«‡DlýÄ[>KZ=äôY²V¼§Õ£h}: „~ÕÓÈ +Ó»„ÒѾÒÕêÓfQÈÖ˜‘ÊRÇ™†²ÅNà¦Su,׊üºFÂ�a'¬·agrñ;cq´L6VŒaŠc°ƒ¿xÏÔˆO‹,+NÔ_öp bì*Të~žù‰¡‚,-1¶+Ê„@RÏ|IÅ)˜§3U.Ç'a°Qþ†º}ÖpÐB“zŒâ)�—�RøY1S,+—óè}ŽÿЍ:$ê°Q4Âzð³ØÈP‰Š®q¥þírRöÀ¶N?XdHA–VŒ-†Æg\R´ÿ6d +·hH„àéY´XÇ0ÒåÖéIÔN b×é±b�"¼Ã3 ¯8=3¼ä—"$&(¦' +­PwyY*+ÝõÐ’ €“lú‹Ï_ËÞ–ô}šƒiz² +ƒº=ñæç5oš¹Yl½QœS4=¦0%F`ÿdþ¿y³É�Ž.7o–u¤¶q¦GvÛà>4=ŠE¾ ü[hb¨�f¹Ü¥�¨-'Õ$•\'ÚšB }Ô}iGž€™D˜'‡åâbE”Îàj¦G<‹8t‹cÆ8\�é‰$”Œ»Þ…†\MKòR±ˆ*p¸$¿¡=B³¸ý�:¡BE9ßivñšM¿ NŒP8¢Æ°A¹AD´DÛ’™t7ê\zx ]_=†Üð>AÇÍ®á€âÕQ‚[ÀüÅô¸®ÃNÛLOFÆ:pö° °FÅC.‹Eo$eA<ï=TÆr�u4וÞ÷/¢5È<]ÄÞ=0P•ßÇ0åØ;;«j5«co÷I!{F³<� ŠYRÒ?ôò$ñJ +GZŽ¢³u“t™qè8Mÿ”øU²[=¢�páS‰‹f—Ϋz:çñ®Ü§æ€®­…MÙYõúǃN¥¢’ÉH·~Q +¥¨Ì*¤ÆÍÚ2®KŽw�C,{Œ¨ =¤°ìT&²ßNš$ÓJ°üa"ìfĈ´X¿†îÉKGüº ô�$ôa8EÑ�S�ü›e¾£|Tµè;ü‘3‡°îöþ_g” Û"ÀÜxÇ|à)"4À†E'º–¶Y³ÈcÉ�O Âƪ=º^žH +•Op£‰HlJ%ñ¸žÓýåYL§3‚'—ðXDg¥ZYCªø<¯2=`Ч²O¤‚no Zh ×HE¨2ÔÌ€€òM?=+º¿gÈl@Ø~™ó.xÑC˜MY/Ê͆ÿ-äcÙ[Ç5¯À¡ñQœÎàð¥%™�v@ø\4� ÿôS‘šŒZôä“yÙ%Dó�†ãóÊ8¨s7)’ÀñG\’ò”6J“#¶k óˆŒrÙh\ÉÚgŸ­(û;†UºÄlõƒ2$½¿¾­­ï ,­ßíì9%Ænr²(S/ðä\L_Ž#Hªqüg¹¾³je jÏ 7Z‰':×ÂÁD²%þ亷:8R< n!š)k"#à�o©a!c®î˜Ä€êBÑzCœ%bîD`ýåz`¼©!%¿#J"†a %PJÕ�£J…ˆ@AÐeºÍ<ºJ’3³TÓùf•®Yœ¡¦¦ ?sáŸO•ìÓ’¥/Ïü:hÕåûéÁù³x«€9… φnü麷à'Âe Æ´<ÑF˜î@Ñ +èóˆø!9[&ËUöÄ‹4•¾Ÿ© Zß�à5´9ºaÞv«�¥fçnýÊAmöÖR…©U®ðå,•îÖ�¹¢Òþs®í?ªôgh²õ«9ÀÔå^r”ó2ƒ8dší9á.³~O¶À5›N»B}gËßú¬m¤HÖBÔ?eÏöØKCŸU–¼ÒQ$,£|– €7yÖ š·»Ü_úTNt(h9¥¤Ç¬‹Ó`ƒŸþÜäˆc»« D§dRB·ª»·Ë£îTÍ[ù²á÷§ÒiVT-HäÍR—=�wïô^Ô`ÃN>Å9^Œ@kƒjèKÊÕ÷TÄýNP] óÞ_ŽŸË Ö¿’ž�ïÔ ýNá*ÔT²p…££å…Ç�âï×:€Àý[™ î–kþÁQ×§û ’_;¥g‚ +Prþä—ÜC:Ö€í° •Šöd“„CõÜ=¡£�Ÿj—ã1õÿ¯ŸY,­4WeÒ\%ñGΣK“xÐùi•sæŸÌð\ëË+¤¼„�Æ=¦L¿E¹l ®±?ä +÷ŒÓ�JhÌ#ñä +($½}#Q¹|®ªÿ²Ñz-ð"m�‡\ !O,Hg°‘_ížPõ¹ˆÍ)Fª´Íßô:h,[êÍÿ›¥’º•¿‰�UŸ…vÅZVÎCóJ,ÌY±S=`åLÃxÅ·¯4· %ÈGH€ Ó\ðÎ.GÅVrÆ;)òÍj¶»Uá×hoŽ'†ƒC„ãŽÔÑIïyÊY‹XÆŠöƒLΙQáZðÆE�Á 0 ÁTs(ü§©ç{~âb5E@-Tña‹´Ö'òlêÆV-$ê²*oCÐ�Ê=I:&?QÌЮ“ ™ž³š¢hméÆ|ìðÖ#&¿e·F8—8µ —ë×u*ÛÉޏܦÎÓ$?‰)“¦e'*`•ôsq/ÉÊÄŒ>¦Ð‘O“˜â}Ìó * +æ��7ÝË­Šðh§­+´-�{O;]سÐ^7†Kmu{Á;DrÚyˡӕ�Êõ�Po•`³¼ø›uHf”Ï5ÓI²xUI¤¡†Õæy¸ãÿnš4Ã;�åÜ,¶¦µt>Zåƒû)�ù¼½$Ÿ8ã6ì aÆP‰—6ò·JöëÀgMæõ‰ÈBÛTºOË£2ú–fóÖI•S�t)QTÑz×°™|CJ½Ê°Ÿw>¤0Ͳ[%e&øÚ¼:»¿J•_î6 ¥&"Á•�’(Cš'$¦eš¸‚´3ŠÇO'¤h�òÚä7’E`ÝA9ÚXìÌ4¹î1ô–dï7âT?]è‚ þ{ÛAA’,úS™•"¨R„Â’�‹+}gAˢƠ©Ÿ� í§ 8ƒ¨KÀŽNà0A äŸ8$žÕu�.˜èe±÷¶ ˜d*ÞÁ®Š(Úhm;ÑôóV" Ð3ìó`¤†“ð�5Þ9Ø�„ÒÚ Ðý -у\KqKª˜;KO®‰.ãP‚ÀRpAï‚h¯.>—rî í>€†×S ‡iæCžQ +ñÔ¸ A1%!;г2+Ð.‘}¡1¯jÕï),ÆüS/È,´ +)OšÁœ˰Uä®xoTîà;-‡`ôh~¡¤î=‘V «Óg–{M±A;"2N…œ„´L^dP‘Áö­QH ƒ +†ÙOŠËŒÝj$àK ϧáÓ9¬\)²™žÏéªZ’ëRXA4»êóOÁƒiúhLß ˜ÕÓ#³€9h.]BLXûÕ^µ:¯«ãPõ¨•]üªž}´pPô +ƒž¹Š +;äIÕP´¡Ü÷>ÐX0÷(äRú ÇÛqaU·*•ÙÚfqTpã²s‘A§bKïOc¢Ø9Ì6Ç|²æ+›‡rˆßì!ª2X¥óãÃa)µÂÃøæ1mcª‰ˆ&½/Ë-=8#êIi0˜!~o†û:<­Á7Ï<–x„ó‚%³ö5!� á„õªi¦ÖÙ•ä±ûª0²%UÉ+üÿ05Ͼá6ªˆO‹Žj‰lCBä-‹zØÿòøIG�åyߟ(°Þ㉠T'TΞ‡ú¿ü̧È:5úæ�SÂïsè9½% +�4�4¼QØ/äNæèqèÑg¦cW ™ +õ[™g¨;èŠ�¶¡ó,u0ò÷Œ\ +š‘ÿð:ìwÿ˜·HÁ´ØûÝH­í¸¹Q¨ÕÒ;t'­² …e¬>U¿œhפNåy:L�šŒ|n�脼”µij㦬&âãüGó +< dâ3Ëø¸n£8ÝYa“¦� +Lô”ªµñâ ëqƒí&¿‰'ª‰.™|é_†¦§Ä¡?XFÍ Ü/ÚCða„ÌÁ-©_lPàZB÷ŠgÊßÒªI-”Ì¥ AYÎíž‘²¾‹`±¤�‡y]t}xZåœÏ*¡¼”ò *<öþò®€k( ²p £4ºæCY\0„Í�€_®ô]31F�JöêK¢YÈ©©4\„pæo˜‚[ˆÈ/¿ó¼‚JŸ?k�”Ò; Ü¥}$½Ê£šë‚B©VÙ'I¿sÑ®í¼Ž_Ëû×y]§áy…K ×á˜Óš £óTµ¿5Œ‰·(þyoÏn€ +UæW7ËR3Äm •žã�²+XEAž‹‰ +‰HÁºXÔû+fI° Ö;|ÒaðINfä4Š)�y$ð8\à„w¬MÑÏ’ÀÚ’§’óBBä‘О˜æŒú'§K¸“>q¼Ú F”¼xÐ!ƒ‹äÑ@e:êVªÔ�È…ÃÌtEŸî'ñuKâÖº÷€Ã‚òéÑÈÆÙ'�žBW½Ð–=a›ï%$ˆÆ+®‡„Ì)¸5J,p,žÄqáAñ•z°áQ¹BÖW *Áà6ƒ§CËÉ„C“uN£]jjıå\QëÌ_áM¥I‡±™Û:Ó͇@¬>ïá�&Uc¤ø´ÙkÙ~c’¹¼NB˜{{L°êw¯ºVóü—A‹0kÆdxÆkö.bЬžD×…‡„þ ¬.CV®½7À’C[\ÀBq†4ðp8"…# êßùYÚê27„}{Z×¾ždÏÝ +9¸À—3Øö:ãô {šá!”ݾu=V†¨Ú`tZR ü5d®[-e>ΠW`¨ÇH‚þöÒù·‘‡uþéÙ4I¢²1±òŒ#ÒßÁ‡¤Ä[×->&¢å/dãùͱš°ÔÞ¡UÍÀ6ë¨^ËÕ¯Áˆ)Sø‘æWúkÔø�i)¨¹nY1°HÈ=Ä/–-©ìd“ÐI.ŒWvüÆ!Ö'nYÂÍPR04¿~C +ŒáBe±bË£ +3FÁ|æú€˜ª–3‘}ò% "]Ò@§÷‘ ¡&át~Ä�«]# +®ÈV‰VI¦j˜aRÓpo‘ìu¨@Ör鬷ˆ›­ºã ØŒ> +þM;á;¢}Œ‡Zëºï¡x +—ÝSZýìWˆ!¨ñFSYdqŒ¶êGÕ¢ý€4ÉFÁb#û¯§$tŠï‘Pˆ­-)Èð�`=(�lŸØý]=8…)d³Qþ”8PV5Qµ¯Ö:Ò(Uò‘ÎÂvgË<ßSI^ÌÌš hš •T"ùÁã•J/íz-CŠ1u«#1®*`{;zÒfÜxÕæ˃»0â ˆy»w-Êh°ºW± ¤òïÎî4F[§Øi)O³g!K0±³Œÿqo.ÖxݼȀ±KRõžðª|»JÔžŸNš%#ÙÏ⛯{O[ÿÛaY=»Ú~NQå·J²j@�Æ €�Ãë:¹å‰–Ǧ›š|! …ôÉÀ4«ŒÖ«½høkÖeÒfZ®U endstream endobj 23 0 obj <>stream +_¹ÉÖe!ÍX‘Ñ侽ƩÈ=«7º àq¹ÂÕ‘Ç›Mx%râù˜}«äOصW@q¿ê»Ô(ß yvüH†ŠŽÑ­U‹ìǪñž´ß›~p爲À+ëxý%\Ý6P§‰ø•ÒX¼1øS5 ä1 JI“�À°™Ð\§ M¥Ö +` +Æ +hòx©)ú{ÙNÝI�ëÃ{æ[¨scÉпLŒ†ƒðL3GDËÂF�œ]È~äÜp޳'ðGºârË[ÑÙ’2Ýøù‘ AüXÀ8t©y5 ñ±ÆýГŒ¾!{<(+XAÁ¼TgÝÛR-ˆã'847«¬†ŸÛñ Ï�OïÊÓõdœè3ÇÅÚ}]<„ùÁ6c/ •Üeû<ÁŽyÔ�åIM¾Ñ·S ú*¡œ z‰� …ÎxY%þ‘š«A$ÊþÂC“S2Ë^‰œA#W9";m6& ÈPø‡d´Ð£�âC³‚‹–ƉW)|ó~!TQÖ“ãÈõA{<.¬Î1÷÷ ñ‹ý™&ZÙã Úƒô/ÑqÔ�^„ʶ0 Xbµ‰t�¹ï�˜s¨€zzp×xàØpMþcL¨ól'ƒ¡Ó!|ò°o1 ÅP”FŒá•âin=.úT‘gÐWPFÓò‡Í‡s¸2¦ÿä¶ZS¡™ÄuÆwÚÖ®qw1üÏcÊî�‡¸P+Ý /O.ü'{{18^uxÉ€_´éå_)Œ6=�P¥Ñ>� à|à㱆8ìv\B™HOØÇ† >7‡ûî€Æ'“•íÛ,[->å#¿h¶î`�š|¤*„'úá䎞Æj…�øŠUZÜÎsHÞ²W…‘Ááe|ðäÕø„�M¼eÉ/"çã¬f‘X¶€”R*h`t5ït„$G(ô²`¦]»3�Á1æéhõË ]¨´ê®ý²ƒÞ ,ÿ¾U±Û¡5þT„p ÊlÁŧ´BO5=ØÛ +ÓÐ)§¢_÷d3^»¤ N!´y×Kß´°£¿ç“ƒzï¾ £)-œàÁ +ß +XZÉ&`sGüoÉ8ÑÅVÚ–Ì =In„[i ŠÂÚ„FNÖ«O *°òÚb?W§Ê¹K©×m¦“øÍ•تȯ�gyU%�èžÒ]kù®b±©³'†9’…û¸�ìâª!´ \«’Ñ+eU°bž{:Z,okìA]‚ç‘M`w$õ‘‰ +Ø$K‡+C—†£0¹�øqØ\&¢åôÆ­ cbS!ìßgžˆuìL`ÓTáyðŸÓMæ¥iìvÿ ¨B)øà+PˆOr¡úÛ&i»ùn^ErÎ$Ë`7°Û_‚ÕNf §5&õ%nûtíx‰Ä1Q|“{ª¶©�¡Ø€NÏ´ß j›€“ß�èY,Š\®ý+¸Øåw2ZÆ”z¤ÏNÎa1ç`oEP•‘׃]‡j…z!¨ª¬8ßS´Ñ­4ºS“ÿŠ0á"µÜ ›hÞ/Óy+»â†¾h�2}îÈ‘±/&ˆ¬áWÊp8–Ð4ŒÚ"ƒ)•¿{g�<ç¸ûYBÄ�=Âå3ÊÍiTJV@ÖÐxÀ Žnläáeµj#ì§Ä?™Re,��¥œ´GV^DM{„–´VW.�%Hx„F�äYÕ&`&Ê vxu«ø ÄÁf—ô¡WƒH’Ó&ë&†’Ç(äŸg‹#ª>©ï»HñþíW…¦3µ/êòŒvÏ,pœÐ¥(lÇlɽíñkÙ¾ÿ  è^WëÓ×DpSyËSOµ¹_RÞÚ=¬×ɲ»Ìmɨ‰¤6’Ržz&4ÅÂèÑ6#º^&Ò GÁ á•A! ]z�óˆO€! m,ű>‹}ðˆx°Æ¡/ùE�º9úÿ¶°»ü𥞫} ¿cÌ|Ø3B™EèëÞQ#1Î>Äui­¸ž ¢ò0ÎQõù²xüõÜCÚ"*$2ûðª +¶�5 ¾³¶(ÓººpŽ ö“<1ªÄ1�mWÏ"¡˜)Ä�ŽêÒYÀ\É-"�™:àÅÃvCÉÈ]¼ŽÞ»vI†z&Ñ<ét±­‚ +ÑŠ«|ÿô Øah²®¢¡E ‘Âw¹==/CܨTc[Kä;i¢¦R²m?ÀÁ9FÌ"¹,e‰7àp1*Nk½eDãüËF3äoEª„™%ÊŽ&ÔǾÖ +aš±±ÔÇ7¸ï‚†Ù�“‚”,„×álÐn·œžnnÙ¾¨<ö%�ê©NGWµT©V*‘]“ì‰êÙ9ØdX™x×Óú¾éñ·ªðlªdÞJ?¾ +SG§û!< ÿÈÏQ2Øôì|}>˜ÇÎú +ܧòŒ� +kz’OùÈÇØ}_Ô¶A†˜EC™\ù‰Sªù3²PŽûdLŠ!Ž|wè´¿ëdR¥ž4û•Ýôô=(ñ�êè‹´ÖÝmvO¨�Ά:5{hw´²™ +û»GL�Ž^~fÔ¿ÜÆpN/H¨ ±ž�dX#™¢Wü¿+ÁôЊNu~éI¨ËÄ6 t%üJ(±¥‡øŒÚ .'¤4§0T1õfD¾¼Ì4¶1¼dƒ—ª×/d•~·—±`»„ …÷]­µæ~\•ñ¤Qž'¬'e8YÄ[ŽòaLöX,óºó3{n"Åó$º}¿ùø®ÇǺœ¥x—¯*/O;´RÜJ·ø·ùÍsµÕ&ô^šÏ„�žXä²:\_Š·ÎY(ŠÎó Z†•�{ã(V–ѵÌêR¼zˆW·ÀõÊ-ú3ŽÃl9Ž5 +ÔwAÇàîø_¥¸™Þ'ì`É‘†Þ£˜§¨bµó”5 z=%uvžž8‰³ð…ïxo§!¶u.åôFFŠË3uÑD3z$§ìŒñ­¥VhF-7pLºgØ�µ,xZ‹u¹ß©(³šá™øö +?) Ã*ï8ýþQŸÎó Ð`Eg!œâ Ð€ýÿòØÅ¼}ÇS¦Æ%CÕAb’'mÏyìÈÑ߸Â+¢ó- ^¹µ)ç¹Ýk #mÓ¦¯{ñex­|Õ8O_ B}Údú0ßwÀ‡ë°âv·f܉ëÜÍŽ‹À16…�ä7„¬FYˆ.�±Œo¼fµ�EÀt�У H°µ CB]@c»Bˆþ›Š� +–´s1¡®-Á‘“mjczø +é&ð'dPQòóga§y†âc ´­J�DæÄ,= mžIæ$ )�°UT  —¨œM6° ç7yP‡/�ÀT¹ Ç×<ÁÙS€V\¼æ©IµÚäkº¸È°»jžŸ”[ƒ‡®|Þˆ¥œj˜g¦�¦†ðN!‰ÐÌU'_M� R©æalí_@akœüÖÉ"Iµ(s+±OŒëi蜱S^¹¨öZß‘? $@ox(�aš¡»ÉënÞÂý¹·†jÂTâ;Å8â +:Û™‡éè¿g~7’É05íUÔŠdÎ<èÄ%fäü˜œÄF‡ÁDf�¢YAÔPŒ\¢gð¤�—‡AæØ‰qÈŒ™‡‹°SŸ‹8ËÆ´y™ç5Óf]P@t¿�b=™çUŽê–L»w[¬ƒ`˜¨ër|¦¶ÊDA¢i¶�yGô¿Í™g)"”F—®bsIBá +á³�û€`Dû8âA¼‹ˆ3}²A.«vŒâ7Ê}¯€!¦N3á·Üý{RµKg¢61/‚Ë#£‹‹ðÙ¨qÌ{h˲å!‡œBlDZȉ–ÂÈjkyìn—Ø“$Ó‘C*rOC §‘‘ŽŽõ6¿”ëÿŠ<1ÀÑ|DõÐYažÚ‚þ²<€’‘Ýi«êfÎ|‡ÆXâm†—(š*$ǘˣS`=aªËC ñopø0XK§#Ô»Ó„ð»ÔÝU›;¸ò„‹$„qg~¬ 7÷2@Nyçq¾«@Bò—"„…¨ËêëúáÒÛò#ƒÓM9ŽYyè�Ñúhçág(SKÒªã×)2¢´£ÊꤠQyú*”HËH(ó)Ï9ÉõÄõœÚUÄýï<¡Œð:ÂsÖÂ(¯¸p)�3命´x’àֻƭýUæ /Öú²|Ù:èÉ—„¼-‰J9ˆ¥”P–…Lù&ƒ÷‡7ìmT º/wà�Å'{ß�qE +Àzã·¥ªÒqPhœ%t¨S”F‚õ¹ÂQˆò”ZEFŠZrXo ).åñ©×¢#ÅÙ_'| ÜЇbjäÂÁ«ø }€ÂƒSä¡0öÞTmM²ÉßW“í`õÎ……ÊúeCQñA +4ü“P_¶WUD9€Ý¡îNM0r¸�©ïc²7aÚ‹³˜(x„ý¶ÊA9~ùƒŽM~.ÍMžS…r=Ø‚O4ýa¸/,Ó÷OÀÕÛݤLž8‰ÿ:#Jy6v"&��¥Cƒ½Æè’ç6ù:öÑLPYfqOPÅø¸�d&ú6 <J bSx,ÉIav¡Í˜òGÓTɹ!½áü@ +v“Ð]=2–%ZÐùreßUw#dœ1ÁI#{7B�¢)ñ<Ëù‘'èví8D«h¥F™ÇDèd4æÖt‚zƒ¦V"Qpz«fS!À…œ¶ QËïÆOù¹/Dƒ‰Öiä¹_(1£ã–p¥‰¬1¸ûPÔÔÈcFëAùƒOëÈË ´ÿE%a`1z©cPO ”�3|™”��>tH‘G¶êÿT¡#b.í�†~?ŸFò“BX�Ä+ŒíQ¿VØ;Z«À|®†*ê²ÅmíÓHC:@ñˆOyVýgó€Á5Ê”jùŒe_ë°íyÊÀ¸1n4“ —­ 5,F÷ û:ªz MnŠÝ9¿ËÊâÂ!¡T|ûùÿ€¥ÿšEïÒL7Y3³<£ºŸÄ:Ðï +wXÈ96ãEyËE~· êåߘixVvù¦‰š»hš�ì“W5\ìÓÆt2xlÖkÝ[[õ@àÓÁK8iù®&jŽ)\4hû8…kœ¨l„$úÕ1ýÿ%ž¼^YA¦qB’5P–K1×Ò.1p(X_’«YŠ]ž;Æ6$)€Œ|£…Þ+(O“ëzãjÐÝå.�ÜßPô*Ð2P:ß�’Õ>>Aå®ö‰”¸;_@Á)¬K]=Êo²¹ÁŠ|Yû`Ö¶Èaö.gô¯,q.bëYÕ¤´Ï“Y£ÓµïÒœ4{ƒðÈ ìáÏBcÓG­}¬Þp·¡œˆµö)r ¿.{ÐùP£ '‚„hæ]üÑ·—,FÌíûºº¢“íaló—I–K €Þa6Å + ̰:,¶Ñs¯»È­�”‹Ãø-7)‘é ãl…¯inÕlÃrrç‹—±†õ¥?e_ASFÌ[� âiϰôª ;›‘6…ïÌ�aÁ]|è!+aXT è/ŒY%¯Ã„¸ #-·0)Ó ,¬¬D3Æ–Ù‰ü•:¶L�ÌY…¹[>…ñ†Fa:sQ-fÖñ}PßÅOX¸œMØ[çFÿ:YJÂâÈXe�„X&’IælA‚i8-ÂXÇ da\aßËŒ­zkx5ÑÉ{°ˆ™w°®¡r0õv7Ø»Rƒ±?b„3m˜ðÅ`a4Ôâû‚…àÔ„ðL+X�A¶~r±}`ÏR2å#N–ó#þ²Xµ70þ.ÓíÈ*óo¸BþR®¯å0¦¸”’ÈZã ̯hÆxN`:Çïé¤jsŠqºý€•&ÅÔ-ÑQŒÒÖ-kXñ{Jc�uãqbrE%(fÜ~¸Š“íÿE»vÄJQý]*¶,äÙr× b÷Wàécê/BMó—Ä*þºÙÄ̅ο— +k¾ÒÖv®”·;­å3ÿá—ÕWíí÷ÅŠ*{Ø}åÀðJêc| bIøÛWÌ÷I¢ §ÑêkÙKy}½ÓÙ7j@¨V_¾ +§/Å}½­ÙóÅt·NÕ|16—/™×/®TU}•“/ïúÉñ…5ŸÞÐØÛ,&-~ˆÅåðUMað57ú{É8 ø¬40½WÌšŠ„°�C•ãÚ½òýëëÈsæ^Ì3µjÛo¯öƵ—\�½Þ‹ÝØ‹þçÜŽMÔ¾^½e­—â¥ÕëWJ½… ¦>AÔÆÆ”^þ#oÀ¾ÿ.¯&È MLU^®³@/N^{á@ð6òÊ‘D‚YìÒáYæ\�ô‚š®…WrOû¬ ^­ìp/®Ô¿ë'öÁŸË÷úÓ�û.^Û»D¬dü¼Ë\Ó»k7ªî’¢vîzú,îbÉÞ.µ7U`™<6]šèß`ßöu™¸Üu�f[—hù°g]Åñ¡UŒäêÊýFXª.KŽý§©««u)GBOW8�¬„©¨\îL(º¾?*y­·¡+èà«eõÏ%7ë¹~R}8ÃÂgìEíÎÕû’s)~�®¹ØÃ�¹ä&æzKþrqk»m¹Â‡qøÄ„¸}ìf+e6º”‹¹v ø®Û�\UÂ’k ½DÉV¹&`“ò(7¯¹—_•fúïÄE™ÒÔì�¸j¥®}å6"­¦ÌGl¸è�� W�$¸B)½„‹´–Üc›ÊjQïW4àÒºžÙAˆv®™úoEOýÖó®Y‘8ß·ïZJòîÓDʇä•Óó­„ëös¬²ëËZÐD²îÝ¢K±há'[Œµ[”XãX]'gݪû�ÊM·h¿ç–Þ¶^qnÄËɼ#Ë-®à¸õüš•ÖÈX‡[ƵßÖ±xûK,ų#Ö¯°B,ö¦–ÜÖaýg‚‰¹ „ûy†åŽÚ‹iÑþ{ó¿Í^¥`!÷ú PŽ�z»hÇÁ�r®À©ÛwÌPÝÞ�ëj¦™Z’ƒj¸­Å0\ó܆˜3œšÕÀ8mAÁº1ò²A9]ܪù2dW³f戣¹r‘Üå’ÖêÎ�âághµõés9ù\ë!y8ž›Uüö,æ Êa¥z{úà|¿2‹ÄR¦æ°]2þø. –ð2–Ę0XŸ¥`™öt±´Üfœ,Ú +ƒøË ÝoLòŒ2Üûƒ‡¡¯ÄT"›óçÅ<0\ø?åN@郪àÈ ¤?6tøNô?Ý F¾S¼ð“… ‡'‹BOÍ4½BGǺ)F"ã¹Í:.k²PJš>̪žË|¤ªÓ@A�(ç²¾fæÃè¼PAæLoãi.¶3Û2ØSJ9¾D95�JÂ"Áâ*,KÀU¢¡#�gú=_j¬ öwV¢ËÀQqøAÔ–¹¨2Ù …ù’ (gþ [Ü€¤÷ IFS#‡ŠræÁGUÍA<áà4ádþçj~—ÆÖ˜…©·}§´CþäÑHï¹v ‘fJ™‘��˜¼`2!™)üó_´¸Ç„Th=ÃË…¼÷,ÖªÿÈVsy‹ö[«^Öçé{Á0a ôÃO¿äYã/MÕóœH³Ç&ò@Š$q}I9·â)É :�K>/Â!Bà¶ž€“rÄ´ªè ™#ØÁk8;. +fíõyWf)t!øUŒáÄ”ùÔ\^=ßRñ$œJš6¦8¯ö6ƒ€AOX¨(aÿ;J,^4™¤Òoã/;Á×ròY Øä7ˆèrÐ-âˆÃ¤A‘Ì`¤­ðSUT\DL9”NæpdÊ)3'‡®bAÑ*tMŽo÷xÀ}Ø#˜¾K¤£¹S/šÕ*EY½'…3¸CªQà—Ž ‚�8m%m‰c +ñ�óÁ¸‘£Å‹ÎlD΋Cw?BŠv6S<— §[¹Î•ÃD݆Q¢:Þ«ýYXÛ*5|iv8ªÄ”4%[|gŒ¯AÌS³ 䘒Ð}Jyc5œOÞfP9ª�Á¿2$ÐÄb’œÄsôõMŽËáÔ×Ò@àô›(¶áÈö'}be�OŒEå SÉioUè4 +ÑL¶—Ï¡�õ�ÙtAåÔ6Åè Q¨œÍ^º‹fU«¦hP¼‡U˜Ã³=‡üqwÙ¹†PV +ôp5`æø»qxc’¾O²%•³è* E3@»t&#LÉV…úwÈ)[ÜÛ˜á©ü³éüy²ÌÑŽ¹„|pV…OåTæ…xl¨r¬ì(¥�BôI•“Ðg:’û”*§ùž‰J%êï—Ó“Y1SåGKåÀ;rQ•C9DžÁ°_UΠìÅ,u¿Ã‚)0¯ØRÙF}á³ò=l¿Ù0ù ÓÞÅ?.÷ L‹j¼TÎQ‰ÛÑñ½Uƒû( N¨E6 I&‚þÍÃ/víóTÉP4ULÐê‚°MG¯AÕÃVUÎ: ãY½Êq®ìrè×x³ˆ@.æUÎ|&«…ÄúŽm<DÁo4²ïG霼n*@VŽ+âÚ¡b¦!I3 =IÒ®�){�¦r*nÀu×zp޳ñEÿå¦(™'«5½S㋨ŠŒ(Ãe*hÛ$žDîFÜ ­ûŠÆðÜÍ6äâÄzM‹'¨UÎ×¾t�täwØ•3�C#6 =Ê_½°$×y±ôKù'S×o�nŒV¾”7~r�+ õp%~Óü;ËÙšÃZ¤‰mfbƒ&Ȥ€G+âÊÑW^Á�®Ø–âŽMe¢võy¾véø£‘¢ÜšvŸƒ6Ó•£ÑJ%2™ )U_ÐcéÇe  c‰ƒ ÇãL¤rÞôÛÚKÓá©Ç÷£³‰b1Û\öôÂQ!ž‹úœ„Ÿýµ�×&&öJf–ŠÙc]9ìÿô¥ZÐ'¬dø•T!ЀÉ['7<ʼnPR/x²•÷yÐ_è8˜vàÎáM:žÆÕ1e\°o…ÓVHÂxCÿóþW/H†f¤Óº ѨCþ»wOß8ÛsA¯ôÜ鼸“„¤QXL¥¬ªÀ±£Ê˜½rÒ•˜ð_DŽñ~*Ât°œE¼X›­ÄØjixÉ&É O5¥~ìûžN�é_9F›hËsi¥É1Y­˜Z<Û +Dq† +:<28 ¿’rÅWÎ& >l_ƒÄL=¤´]‹fæ¡Ê• ÉÄðA©‡ªœJÿxdŒJµ‰€"Ú‚œJ¡Ì¯èkEÊ_9n.ÛæÍç¾xÊŒÿ…ÖUHTØêÙ÷Šº«Iõ¶=ð@oESî�ÚWúû±¬6õ„ž÷ޱí•…·ý¬^å»�ßô#ŽW4�ö‰0¾+ò/e�•Í*gØ“Ab—ÐöD�R!� ¦h¬Z}S©¢~Äʽ:']Ù ÿÏÇâŠ7цÀÃÕ;^�ÿ­2•Dà%JHŒ- +W™B• + ®l£¨±:¥7ü*'/»ŒQ—¶©3¸z~G<<,¿Õ½òóVêV7sáËSÆ­nÇöVz°(nQ0#®â™J<ñƒd´œÅbR�嬟Q|SÙ§\%:¯ÁP$Ê:=p‚ôï/øQÒõqEd„/±(2}2ŽÒ@‘Z_I_�òöe±¸½UF‚˜[EhPñ4.Ð0Ñ4"ëâáV±"ÐA”5·Þ%DaL=IÂãµ&d£›¤¶šÀo�Ðü¦P>¦R÷Ü7;Á‚Öƒ–P™6¯M`è¢îZ«œ +Ô˜Ó0nw:6hR<"(öéއY‚âÁKBí1Rà•=¿©Ñ¨ö±¦F¿cãuxÙãú8œÅÍa�c9F,ÜŽœ,ë,¬v�GÝÂf(ÎqÉéõ,dåÇrÎk¾&…7’ãI£× <…Á(ÜRËD–Sø!?&tdÈr§™ÛÞGTÌQ©x.08*sd›²@ÖÃ-ù$Ë /%Ðè)±“ae»n¶,‡5?ÊÜîËr$F/»mSH¬= ¥�Ó‘À£D+Y–CÏ ¸*(¤P’ÕE:tú`µ< Að +ïÈ‘'­‹¡ÃvçDЧÈð[5ÄÒȲœ\І½„2£^x§Ð…jæW½ìWð/âíð¡Ñ&$j³!-;&?Ñd±#NñOoj)0 ¾×�8Ë÷F\ÇC8Ëi—˜ô8L>èœ3øŽIGšL^VÓq€ÎrZ=T2ôB¤çÎr2cèn\„Ûx]œˆÇð^™j.¡bên¤Í³Éˆfœ' Õ&©ðsZŸæAð)Ög·A�R§ÔØ‘ÏY¾“·PMX"-§ÿ3�PH�žÎœÜ· +Œ$X«(g½c Pè ¹òbMƒCPË�D…±d„$]+8 ¥–Ó˜²›¨–£pn˜É)·e¾cx¤wW­¦ºg͉"9™óÞLD(·_$I,‹ç`‡CÙ=܉Nþ¨É€<$ÒØrB‡ZøÜúÅ–C–²gø›¸ù³O6C™Û¢·Îgb3­¡ŽÔ–à ‹ºa½‚0R g"kËb;‡ËrC“Ê/JRlŒÌœ 2?ÐÙ`¤2C¼Ÿ–AòÉq¦³îÈ6¦ÌÅ5'€NUdw„nñ cÅ{F$NÖJ#ª$ׯ0GK¡giSÝ9TŸ¹å?ôpÒ;Œ#+(üÜrü+ÓÕ‚Z�ÝÁÚ–§ä)ª>Ñ€wË)k¦:?,¤OŽª…k3zÑ@ ÔgäaÎ5È7$´F-I/sÛ š-òü"ù-Gt,ûù{3qö-‡�àW�ˆ#ûfò.§+`5 .Û)Uĵ¼Ç,�öø J<ŒE †Ë¡+e†5jÍ_WÊŸsZk�v‚¸Ú¡�ÀÿbÂÕÑ6q9" +ã9£M•=À3.Ǿ,Š—³²dð¶ÄíùEŒ“(Œ~Ï€igäÕµ.`‘‹.Oˆî6‹o˜RYìç�””"¤£\I“ÆK+•ØTZá–ƒ£‹9 ¸Rø¡ÕiÃso"€Âšyç2s§í°ã¸Dqcd—¸RxýÈ4—ÑTY°6ª~*"™Ïw/ƒb§óÊ_lGâ�R]NÖFy¤V•RĸHÄ ûjU§ ³#ØåÐòþjÜ:Úà¹9³é…â‡n…O‘ï¸�=¡QLÏã“ !g‰UÝäP99шɀ2¡Ç¤ÝÁaïä8…çÕ…(¾Ð耗­´Ëéèà«aú€t¼�{¿ú2KKgqo‚‘_†eì.G)qšFy—ã˜åã.Æ6ãp•Ϥ Ô§$¾b¼8XéPØÄ3³ÌiöèΨŠ«EÝ·O„¯è·d %†Ê|ßWóìrõ°3ã¹ÛA@–•qª/˜dPæâɤµÌíoÕYsÐ#±UôΡ%sGÉËiì/3¡òrbM%7˜jG¨gW‚ÆÑ嘒à)ÃNaz9ùŽcÊžpsdó×�SsØoL/°8Òhj¬±Þ7Ëß'ás.yž[ˆ–XpÁ‹ëx9Eýφ‡|déµè"cEú’Ûæó¼�&DÞÄ™ÕHˆiÎ꓊Ûî%â\¸�¼$ú˶w +t"7ÜÉ~ø¬8�µn-š Às·Q¼h¾¡HAì`6d_ޤ-/GkìU)®}ÔoXä½\aeå³3gàGÉ›EõÜ+îqð�Y*99MÄ‘ÞjùZL³¶/g,F—JkY%�¯…eèÁ)qðKÎYâÒžAƺÞJ3¨|m±8V°‹e"ÏΊV©eψôüð¿ÈjæÈÒË�@·Õì—ãöoaç> òW7\�ˆˆòZ2�'ø>†þåôÌ5ÍçгïñD�f˜øúnÉLpWdœRF¢üSÉßYX 4öäo°ŠÏ�ˆ³ê¨hørjRÒ�¼'›UÚ^�Góeƌŵ·ÏæË&¼L6¨D¼}ñ-H-Ò—-Ý?2v—a·µ·ÀÜ\Zx”Ë'5#à b1^VZ4nK9®�âyTûq™å‚Qbd÷ú´pÞ© æ„-ÛI”LWh?¸;˜Ã÷{À1(÷ÁÛ>½‘Óþ/¬ÞøÁ\H˜“�Â/ì/aN“5 vÍ»*„g¶€£Îæ„Æi;AŸš{3øÕlÙ½owHtT´Ds¥RÈÄ ”†Ìs\ì—8b¥¿ ¬é;Øæ$nZ  žùæ hä1i˜PzkGTÕøù™EßHÂήt˜Ó¯v ß~L€³ùÁ«!Ÿ îÿLñ`µ2þþHâ¾,ΧÁ;ÔäaÎK–®Y=Ìa~DZz�Žêjõ{˜ƒJ;ìbÎm0Uôö�¡.ÕWë „z)GPQÜW¤`N~&Gl�|mЗUNJb޳Lvùýí¢=þBè™®F›˜…eü$×€;ÿ_;çâAé—Ÿ˜SŠžt<ìÎ>¤åyã¨,L–7dp¡pyA1çéLwÒ³Ÿ(æô•É/ýH1§Ûl°3Á%<Ûx3׸ÙɇjùåÇÑ.Z]¾* !ÜøSõSÌ! �È`¼ú‹™qꫤ`‘‘ +ó ¤‰²+æXIº|™�«š hZÖhÈPÖ-œ—󭉼0é%ã^ˬ{Bß_ÓlÛAì?~S k¾^Ô‰±6¦ÉüÃs(Ax¼©š�\YK÷¬ç@ :å?¸ƒ«aü„ ‘µ¹U“�ÉÃþíœl<@ôM—|ãÛœ3l­¼ +¶žY4ó§šUmè{Ã7Äœµ)êW;5D�µé^sð˜ô¬M*:`Óæ¾Ÿ-#‹Èu›Ïüú)ßë{×ÈÚÄÒ˜‰$±ìyÚ³N�9ähÝ| dÜ?Ðm©„QKk3ž¤ú¥µÃÅtrK*ü"-0æ¬ôDŠÏk¥_¿˜eæ1L‰Ìýòn†Ø³i‘9T6‡{Š=sàãµ§> š\|B +À�îòÊ=¹—mGH†8G³2 ûé‡eý|ˆ©dNžOCûð�*Ÿý9%X 3Üß#;<&˜ŒãæèÖSª“a¹›÷‡ËÕ ä�%D›gBÆ­ülÅ™`ü—°ó˜âyõ4� E{.OkÓÐáwiQ*N™£ÄÚ¬9„•«âBU»³ËÆ@«(èõÊœÃH–ݾSR÷÷ÀN²çFÂà kOß`Lïn–NļTÁàÈZ�©Ð,ܰä f�‡™ {0»Œ/½¿0ŠÉ6AÕºeÖLMiô÷_¿ÖÕ%iPÉQ8‚¤à ‚¤Æc‡÷œq¡oí ²;Å�‘6§ýý§eæt­4šæ'ßË/XD3Gä‰òiæØË'"ëúG¸¾ ³\#KV[æøïɳ4z%"%“b +ò™25² +÷[ÜÌY€Ç…v2yhƒûYò¡ß6sB”b„ýSãt¢!u}¤¬/Ý3ç8À�<�Ðè?Ë›lXPlà|AIÙ.·Š§’«ÄÎ>øþÄ€ˆöÚÖC¥»d¾Ó=&íܱëû‡’d0êåÌéÄ�çRƒA@rá2Ê`ݶsØ Â|œ½XëÉmI·îv=ACÑoœŽHÆa[giáƒ/ä.ƒ„Á·ë*&ßAϼ×fý#¹«Ù�Aüáª7€ì |f&gÎ5õÏ�fàžÌ1Bj:¸]žÏñœ«{Àá‹?Z9Äî¯2‡À{ʪeÞ9m§ò3e>ZßÏ¢þ·êЀ-¥ +œC¡nÿ"¡Qk_³Ÿ9ÄI‚>ŠÜæÜ“»ÊÉ4ïâ¨ÅË‚åY(ÐB{2ZƒwAt[èÅ«3¿Ö-µ~_º?ŒNµ›{ÑÏc�\y\{nš“_áÆý,4é¨q\›Z>¢CsL$lnvÊïÈà/³ÛÙ (”Ŷ%m Ìq ñBIfýë�d|¢×)ý™"'HIìk“M÷Âl5�ÈŠò_ê £~H[6ü"¨„Ì7üêãŒøWpÖ( +à¡ÒÀ°¾À(wX=z}$K7OÎi K/6¿àšþ:ãþ&å-��Ÿ'×ö(NS(åÇ‹&±¨z½w£s_Žß‘wä?p]°2; -:Í,}9Qc°"¾3çw‰@¹QZÿ›y3Iž!Ýç8Ì+~¹w„ë� +’½Ä¼ËÙ, �¼˜ñc®Ñ+qè—¨¶ï¿ÑÈ{2µ~¼‘™‹s#�ü½"í=£²Ýu8,F“KšC’”.§ÖíJje3ï–õ@a7V蘙ö,™eƒMsÊärb+F JJ×îv�érN-ɸ·|â.ZLQëå”4ÀµÎ÷d-<ÜhKk�P£`ª]ª’í2ðÙÂþkWWaË@@“cIŽ�>:ÍÍK¾ßl1È–^3Ĩ–ÇÌ3Ú–O‹}³þ9ãeîéÞ¤�2ß^L禠o®Y·…E%ÈdøÍ@ Q#–úM">)gw¢«²JK³|sÕPCÀ_¼z×;þR(±ôŽ%ѬY3µÞÚÞ+‘º¸›Ÿ2Êõ/Ãn’؉”ju“Û\ +º6sÀ'7]ù»ûIn2‰Ë¹~ÛLðA·ývŸŠ“d( ¹Móݶ³Rwh'�•n 7C¾¦ýÛ$õ¬£¶ÙÖ2ß*5ßa�ºà[n»Rd(SðfÍ"YØMÎ6ã¶Òý” !¬c¨Q›׉OÒh^&aÚ$rÝ”oP­<g‡ÒrÎ÷à‡±yõË­aµë–~‡Ü©¨ƒ—¾ž;mXŽŒ: �Gu Ц;-±á{@“Î(Î[9*EòÍ|M«œ55Æe]WiwÓÕ7 +·Há ´âÍNTÀ"$0(‹|Á¿ì±ICržåì'ʰ¨¶ ¸š®�vËÕDãR €ôj†ˆnÕðŪɦ(’DÞªIÇ:Û‘oú +æ'?@‹µ¼U=J¥6ó'ÊXMŽ…:Õ$-}¸€­, ýÚ|5o4Ÿ›4BͬS”ò›O3{P%ÍŸuš Byù"æ ½ÒkçgîÓŽPó@û ¥>xO/é4�ˆº´"¸ Èøi’w +ïU4Í�?ËÌ9KÝãÀ¤Ù‡„á‚G³Š ìN2È£‰Š’�åf£ KB�ãC§‡ƒs÷@ÝÒŠf-òAjy ;Í[ГˆÓL¦yæ ‰&ë‚FÑ$"X‹)j lOða4¯ BôüPŠD³>ƒ†|¶ñ%šÓ—ÛTÔ Ÿ!w5+3xe�6¤;çgÎ{³Ö:ÝYë¤Ý„æ¹|:Ìì†&íÅo#SÍi-GZbš^“TÌcÊS‹žYçi…Ü‘¸¬ô= çr{t›ü€Ñykp®Î,š®®�4�êpÞ?{å}ÎÅ;ûæ„F»Ñ™!E¯˜iºœyu‹× |7eýT®Ø&gzÇ E.šçwsêhVáR),9´0›GOz£²t(/pæJ‰<*§¯3OYž¦®%§psÏS¬x�“$ÓÑ(E}ns.YE.˜ßÉ®€% +x´?3º­†0ú8´ð» „&?¹BÎ鬮σՌsb€¢KY!(^T4³9Ê�â4º`ú�e—ȹP8 Sa„å&!�Bs¾ùø\z)˜ð!Õ3ìCe½©¬4ÓåóbX³Ü· +¿u+Or¾Ô𶣡sa°_³ü*X<cñe¦�¸‹™Ê>›©*=µø°ùŒ"M‘$–²H�¤OÀD°ªŠÿÃêä'¶tÁ¨S‘4µ‡h‘xLöÕy³·éÕÿ­-ð“Æ1ˆRc>0ÓHZüȇ²ÊZ[âÿ·L¡Re‹ô(ÂÚ—Ùné•KCHh@3:%©¹Kƒú»¼¶Ðb|aO¯î^ÕQï4€05eM|Ì’¾9ºÙÃxååêˆ + ;y&öÆçŸûÖ;-Å•"k5ä”)2þ”æqi¾ �ðJª3ÌÝ¿ôú‡»RˆQÊÝÖÆÖŠ¥ûžd¯ñ<íÔ-û7êQ �^®¬ÿ’Ôú4–�]Aàá{pä» ‡íêÙ‚eˆÛ#>u±]‹tö€Ö�K¾bi”QWÞ1õ&14ŸaaÒ+è'«Ÿ{©^xE?ëÆÀ¹Ní•Cº/†e½¢{oP¦vŹãK‚ó„‚£çd¬A`ñÛŽËs”z†Ì-ùí1ŒVƒ¡†XGvl©‚™ ËDBÜÝÓ0Ü¢�gÑ….ÿ†³XµV±åsŽýßQÐí_Nˆ)NܿڙËÿ :òæž¶zÉT@LJbÏ� }Êò¿—H€6fØ÷‡÷,uÞ‘_Se®\Ðó�Š@‰{-‹š�–3?vÏŸv™Î]3}õÕù¶ÖÙ›øR@g˜1´Z‚\¦ +è\v©±Ii{oü¡ÖŸ–5O`‡ezº3¡¶4#S§ùP² &ÍÁ”˜ +Ü:[ˆà�½‘8Ûk>‡'¿£©ŒÖ7¾[:I‡qýDüÚ!dÄ™Aƒa#ªÞ„8�5.»õä³P«·\¤Eè¡°xB­Ãßl†l‡EàW©j¾ç°Ž:b]˜Ã}V@§æ�€çØïOÒöóÃ÷üù½`�Óé^F´7 +½^�=gòlˆŸ¡„ä¿NÌÆè€´8¸_vÜš3Ož¿±¬¥Ù}଑Z ʺNŽ ¹Dê‹VqÑh<Êü©á½ B]Y ù©!¿xs&g�»Â¬À—Ž.ez�ùžÊç#k‡6£¸SÓ +ŠOÇO€¾ ü]D²?k„7!²\Ä�eÉ›«ç:ºÓâg$޹ ÑåÚ®äË¢êÈù[ñ~Z‘Þ�~�ÆýtHrfT§�~1& 8s”JýW2ÄÅWâr˜\‚dÉ+ XôoêèÕS:d2áyÄNEôj¹:¬4±OÈ+õÝ*Ýw¥þóåëõs¶·âM­â�ñ«³ØŸ4¯*N:¿sWBE¡jçÌè]å*$�çä»jlüÒ –d\Lù5á¬ó\’H ð¶ vðŠÚ�ÆAa?�Ç®Ä:WEí’ºš„9¤3te`Èl5ox(WRï аBWöÇŒI[Z�¸2Z­¦IËÇ(ñ²KÄ”�+I¿Rz"° ®Râ ¢nµ™ÅUƒÏ¡ÄŽÜæg„§C‡¬p;|‹ÃÁ%åŒyìÒ×VÝØskQ[åãcµƒ ÖÊ×U9nFfñád·òøÒ ¶ÒÎ�Í>ËF�JX"P)9†t •½[- ÍZ#"z«îÕ„Æ +@NÃ"@³Fð¾;Â_Ü=Íδé„U¢ ,[Ù¡úgªVˆç®Ö‚â´Š +ƒ›+çdZ5v¤7ì’¿ØmXñqrûeœj5P…5´�Yòr¿g�´º�Ü¡žÉ󵝸ëÎÿšOŒVï“ Ùü‰´øΔ9©Ujßs’ÍÙ#­´lGY ­œG‹ÇŒ�Z%„¤Ð ÊÊJ ÄÈ)2ŽÈj…�™UYå5 r‘]OWõ«j8_Á �ãâo-¶»îƒ0T_ñ +=ðÿ=ŒŸJþiÿ{Øö{ÿÈà�p;_‰¸=Ð}8e׳ `„W€+îÕ®¹ÿAYFX²ÜŠžXáè¢ÄF‰Œ��C°Ò:Y— ·’nl%\효§1®ÔC£0[- Çë¿j?i¾ù¼}:àPA(ù¤;·+š*mºü”*\·‹F¨(1K„©aKì!�‰á¼�RãCŒèä(Ô<™D@"‹òö@c×îKú¤— ›y‰E:i¬© EZÞä>ïK)2M÷7 7]óÁ²(††¨}bU²¤ðÈ…‡úX£#¹\ó'ˆa-Ðs6ŸïÌzÒ‰ ÎNw˜÷ŒãŽ_802xëJ#SN“:CnÃw¿Wb‚¬ +§ñN¡ÃšìÝ/Ža!æ³¥õáw1-h*+Q¬(m‘Neˆ‰6O]•%B…¨%Ȳ[§¬a �h¡‰od[¶¡Å¸©r¹t€2'LžP�¶³ Öå]¥=gs’ƒø…5Íl¸Sì°×,"Hªi<»"‡ƒA”%7k\–eÑÛëÉ"§|_“Ìûêc Ç„ÄF��%šóTp�än¨}A!WlY—]þç€Ùß”ÔÔŒ`–C„¾2ŒûØ�Τ»ö+–|“¿4EÞ#p*PW�e/ÈȽ9{béû»—©€âƒ›Î}Ä¢Îú‚rp�ÙÆïg‹áÑKßèž?wÒ D*ül×:%á8^å#XjÔy‚K4ÁòwáËŠì,ÛÊë™ –+³/r� štRü;Çé±äv©¾³sæ'ü +'¡8(òµ‡Y¡ó@Ì'Aºpµ’¾âÊgc(ίØ�¯±löÙI€æìòŠp °׈œ�¾:vw÷Néßâ5zÄ÷ÿéØ3I1Ûø.¯ +UJX�¶>CC¡°p@0`û4M•­ã•kTÒœ«CBA€�ø?FEDDCCB@?=:841.*&" + #(-27;?CFILNPQUTTTSSRQOMKHEA=950,'""'-28>CHMQUY\^`feddcba_]ZWTPKFA<61+&  $*07>EKQW\aeiloqwvutsrpnkhd_ZUOIB<5/(" %,3;CJRY`flqvz}€‚„…†‡‡‡ˆ‡‡††„ƒ�|xtojd^WOH@91*$   &.5>FOW`hov|�†ŠŽ‘“˜˜—–”’��‰…€ztme]UMD<3,% &.6?IR\enw~†Œ’—›ž¡¤¥§©©©© �š•�Šƒ|tlcYPF=4,% +&.7@JT_is}†Ž•œ¢¦«®±³µ¶·¸¸¸·¶´²°­©¥ ™“‹ƒzqg\RG>4,$ $-6@JUalv�‹”�¤«±µ¹½¿ÂÃÅÅÆÆÆÅÄÂÁ¾¼¸´¯©¢š’ˆ~ti^RG=3*"  "+4>IUamy„�™¢«²¹¾ÃÇÊÌÎÐÑÒÒÓÓÓÔÑÐÏÍËÉÅÁ¼·°¨ –Œ�uj^RF<1(  + (2L\m~�Ÿ¯¾ËÖàèþÎ $/1'5AO^m}�œª·ÃÎ×ßæëðóöýýüüûûúù÷õòîéãÜÓɽ°¢“„&14+# '09BMWblw€Š’𡍭²¶º¼¿ÁÂÄÃÂÀ¾¼¸µ°«¥Ÿ—�†}sh^SI?5-$ _ir{ƒ‹’˜ž£§«®°²´µµ´²°­ª¦¡œ–�ˆ€wne[QH>5-%8@IR[clt{‚ˆŽ“—›ž £¤¨§¥¤¢ �š–‘Œ†€xqi`WNF=5-%6=EMU]elrx}‚†Š�•“‘�Œ‰…€{vpibZRJB:3,%3:AHOV\bhmrvy|�‚„…††‡‡††…„‚€~{xtpkf`ZSLE>70*#593.)$"&+/3HKMOPQRSPNLJHEB>:62-)$  !%),/258:=>FEDDCBA@><:852.+'$  "%'*56654210.,)'$! +  "#%&'())**+**))('&%#!  +   +  + 14607866651409562778l633443488821984l620l 1271579023096l412963282592054726301 1678585242200071367374 -63492 -38673174892156713441982035720B1242904876689118899697423.0800871473533050575135%_%_%_97290444689 +  ! DB%.6|…Ž•œ¡$,5?JU`k° "*3>IT`lx„Ž™¢«²¸ '1;FR_kx„�œ¦¯· $-7CO\iw„‘�¨²»  )3>KXes��œ¨³½ $.9ER`o}‹™¦²½Ç)3?LZix†•£°¼Æ„ufWI=1' +#-8ESbq€�ž«¸ÄÎ×ó}n_PB6+" '1=KYixˆ—¦³ÀËÕÝäêîÜÓɾ±£”…ufVH;/% *5BP_o�ž­ºÇÑÛ÷ùúõÙПªœŒ|l\N@3( 9GUeu…•¥³ÁÌ×ßçíñìåÞÕʾ±¢“ƒrbSD7,! {‹›«¹ÆÑÛäêûù÷óïéâÙÏö¨™ˆxgWI;/(°¾ÊÕßñìåÝÓÈ»­žŽ}l\L>2'+6DScs„•ú÷ó±¢’‚q`GVfwÜûøôðêãÚÏõ¦–†udSD7+Yiz‹œÒƹªš‰xgWG:-# L¯½Ê÷óî�Œ{jYJ.L‘¸W¬ £”Ì^Ú;e\\˜Èà_Ã/q.Ô$¥A6ù +ê=„ —Å'~P™�Ìp©z(ˆ„7\˜˜G#ON)ðó +²4Ò–Êv¡>·RRí +r,INáFA"Z¸ùˆ¬+¨ê(C%Á>øJ<¢n…PD¡�¨Éæ�0mOÍ<$ Á~ζ!GjŒ\'£Ô„Ôhõä’aS¾�)ãývÜ!hŒƒ~DȦšM"(‡`ž*)š` )°Þçxñ†àŒö$]6��Ê©¤¥kÕ5)ƒ¾¡¦ýSØ› AØÈ|ó<ÂTm7ò” + ÁM6ûá�� Añ“Õ�e!8þ´ú +A›ªæ‚Cú5'}"�?®`"!ø” ˜¨00‚V³€dýÞ3¿@>¦Å“ pt”ÎÊÒ xÈ xvYd²(·$*yÁ§X9Ò`µq‚Ÿ̫<�8Ýpà7Ac¯dFà‚gc48ÞGMÐädT¹¨ˆñAFûXŽ$°ÿô Ò ˆ�ùÿªò#‰)BJÖ8$(²f8ˆÁ˜˜húU‰˜`dˆ¨˜‹Í\A‡P`\䢣'bF %)û!»dZ¦o¤ U©ÜÚ¶·ªÌp+½„¥´Ÿ©êÒãÛVuÈç;Ó‹¹ŽºbžcÑ–Ï®³/¼‹ß—´ßÑZÄÐø�lÑn}ïu„Žïj#£õc¤^èE¾«ºJþ9zü˜¤îv‡V‹,Y½¶UJnd†X¸ú—+“zS.û*6Ȩþ$´S+gÍE-E+Þ©eg>«ÃÑ%lÇÖaÚꀶƇp¡Ö‡öiŠOñÂÚ ™‹yEF‚b®"`%Ä]ÇóºäÌ)¯ µgÊœ£‹ïÈòþåsŸQ•\¾]×ô²r–/<ÌOŠs]h§õà ë†á=m[]ÂüîѦ¤œg•^×¼<‘\vÙ§ƒÜ †Õ`e�Yá!”Ùa?’k�—h/gPl …yBÿbN´ËUë+gõ9±HŽÄ4€~N:2…Ù”ÖLÿ}Ù[Ãý±¥oO4€Ï[:#u0¤¶(Ú;kQâ´(`©/ÓY°OFY`)Ú̱(Éޱ±G7©n`a>Mànói +™Ã4€�q7]`«_¦úƒ 7ð”úƒ6 d=,j·“'/Þ8×ÿ¸½S2€.÷‚tàP #}aã_•@f@ÖɰÔöa?NLïZ5ô‡÷3•áõÐã¤V³¬s €tB¥8\6:{;üÓÅY•þ¤^YÆ”–oÙ²"ƒ÷3-3úºh¥:tÞÏ8Zýû1sB|0y�NM™�ÑÉG_ÚÒ‡ž'xíkUæÿàÏp¾B~ñÿ3UQýÒÑÁãºXû³ÞÑ€d&¿ËÛPÚ_SáÏаÍ)æ p&sôæèy¡Ïp4ºIÂf¸cóÿ�f¨vÂl,}*ž1´.L¶ÊZñ§ŒŽìv¿Œ?À¶ëê¤0r'gI­!/ŽÔ‰2®™ÊîXðÀŽˆKBÝ> R£ñgjÇŸ¹û�?A=I–×±P«ãÏÈxϯñg ¢�Û™(›HÓe¹ƒÐÉ(�ã�VFT4Žv$ÁA—â”q2nü…xE ‚q˜2¼Ü`;J€FΖ¢ÆŸq{Ã�iÍ q(‡R··E\ˆRœ;š�I™Aiu$䞇� ֙ě¿9q ÷ÔI:œo½G¥Câ)¢Ñ—=:‡ô�nX Ç%r�ÚT…îT&s½ÂqÕ /Q‘!eãÏäŠD8.û%�>0bþ¼€F(8§¸Åà¨S D†RK@Ý7è3û)pÜ´|F+M£°Ž?s/ �?£Z›4ÈÚpK×ýf4àßÔeÃn(±ç¥x(P<+eÔ\|uAtòŸÿ÷ ÙÚs†d?‡ ÜçöM~ƒ6r0n[¼‡Êû'˜¼y õ½)…�ËÞ·ñgøSo¡½qõÆ0ЬGáÏ`f÷ +ô‚w¼ÙF†yS$󎇨ŒÇF/Ñà/3á�V(Þt9³I,b^Kb_ˆî¸øò₆¡fˆ›Yñ¸UËlÍ•.ššÙº!‰PŸmº»pÜðQ¼7 +ЭÌ1Znìv›Ö¾uÐÒHžqÊ#Üðµ°gŒ‡®·Ñu€1Í"�÷&Å|þ½¨@gÇÑX3˜DºÌT¹Zf4°…1ezŸÙg|‘z Ä¥â€à2Š_ÜfßùƒjÉ›uÒÛå¨ÉAÄhT¯Ç­¢/é&@cK* mñs Ðv¿F…€WGŸNxªI¯.ó˜ÎÒe'ãG¬CìÄy}hèð‘:’és!u¼­˜±–­BŠCÝÛMM +‚·†‰yäÙ£÷™%^ù1Û%ÇlWÔû05ð[¹[t˜-ô>Ó_¾a(",g5 ÄÒ4«8þŒ#¦¬ô„aòGÐûLüA‘7¡òmÕûL{3 þlžp)Ìç�?ƒìpÂ(¹¼vŸ¬R"Œ¢¥0�§ /$ÂÈŽDüÜ}ó"þÁìrãÏk¯ƒÑú:˜ßµ -nü£-£E¿@V& «!ì|‚!tŸ`½ô>£y¹ �†xòÀè�Ö¹v†¯)0P– R“3¨å…›ø~0£RC!x�ÃXÀ¸ÀÖ†@Û *FQ/£00ئÝð+ø—�°6‚Ñ”lP¿3ª)`@ËýB3AÁ jV´ƒ2ù…Ðd´|æ®Üö…&J+�³}AWâ�é's}!^!ʧ:À׸3sÑ€–Ï”,(\ŸIß UÝ|w–hÏMþf öâÚfjßB ¸¨½¼®<œ»Õ -tаH +ü©xèÅÁffþ/áx˜—ë¿ìÕ~èäe$ÑÎê' fWð�UÒí.hÉ™ßб&‘ı#m#²µI…äÁnÂrœ¨¢oÐycËÍ�ÛÅàrؾ£^t!NgGGmòâUµ–TëÑæxãƒ=9“︤L vf»aM2j«\ŠuíÓìWñ";Ò¥xóŽ>)-( V*@îQ( 2 +†A­¯uVÿ#Èš¬ ÆÃ…~úp +9o�³Ö´‘°À¼Ù²ùU€V(q¹²—bC.”|Šg»1kk�2“>¥71Sbš±S«}\f1«ÒJå“›=$EZÍ‘šB<Þ=±²Çµ¼JüŽyW–Þ:›’#Ϲ?²æŠ?NJ~ð˜ŒyZMÖOÎÊ“©ø.]¨=c)5kÏÑÔÛUO=#�ˆ£Äìî! )ÄúW)Óéºç1útHåñÌZ’ÍrSX>EŸi57Th>úTª<®•Ue] ½žœsâtÈŽ¨´¿;+å¥Ê†Š>Y&“ÍJáðDå…*¥Vx4ÖTi޽‹Í¥~ckÕRJ‹Ë»5dÞДð:S~“+ÔS©‹“BîL]^õNõ÷)5%å®--­O…ÕBTu韽®\ªZW×”)rÉꃇ‘.ŲIWZ¹)ÙvQò^un6wõËiZè,{ÎÐÙ´p2öš—«HZ©N¾£§Ìˆ˜9ç'¦[\j÷Ârgôro;“_OÚÙ̸Ê$ù [¥ªFSü™H¶u¬hèˆÅE?«Iùm7öW¹OYgþb<$,´ÒMÑU×PRˆ,³±E×L «�ͤ¤ãœÖSBVî¦Ò¢•þVωÕ<¥�’Þl<$Å›!y¨å”ø®X¢_Ê!%ä9½NfÏnšV©¢éðCDâ2æ ëX()¢!+õOü‘ïš) �G£RŠÔ»{V9ºœ'W®ÌEå6våÈúÜͤsÓŽUdWl4‹§þŽl…è&}•ŸÚ–™fvãäD:~ð°i«Å¥Ôîf÷ i‰ §\ž¯|T»¼XÝd™ØÒØx—Ô=²ÒSòáU9òÔdN +)_–ߥÒÒ§Ô¹Ws.¹&u^yŒŠ Õ™œ«Ñk-rèDþÎf<Íþ4,I6B‹¥R\Ä_ùŒÈljö{)ËZ.c)‘•ÒT_­¸Ðiª2öÍÜB½šócšË� ;@Ø{ìWxD¡W:Çb¤–¥DQ(+%*FVå# +·sŠ €À@�ðц@àdÀˆ€V`‚€@¢7(�|0ä6€c0ÐÁ›”¤°ÀÀ€6p€"È!„Ä‘ƒ‘¼ ) +J"Á@"`� x` += Ð„$AŽì`$o¤€“x@pc (¹_èÂY¨B˜p„!Äq¼ñ2AÜàÈ L"5à�º …*<�‡qŒ¼` �äX@$à†$“² 8œP…9ˆ?ìáspÄÀ+< AÈ� ZpH. , “k v Ǧ°…0¤!�P„!á<ÈA c˜ƒ +L àx£ @7$0¹7àˆc‡°à4Ä!€0„(Bñ‰Nl•ˆ#=È! `ÈŒЃ¸ LBÀ +d'h àè�  1´Á0„#d‹U ¢¢ðD&*ñˆCânÃzÁ5xãB@`, AFˆÂʇ= ‚ª0E(6Q‰F‚q0-¨D@*ˆÁv@a f�C LÐ"­8(2 Døag˜£Ç‡ @Èá-”A~@„$6¡ [Èb¤àÄ$ñ‡9´ñ p`Æ8~ „+ˆ}@Ä$8 _è‚®0ÅG&€„;0‚¼À=Bœ0Å+j± ` ãÇ0xa Xœ¢“@R€ LÀ#(Œ¡ Z8ƒ M”â¶è3’Q aôâ°0'"Aˆ;¤aŽ'Èqƒ7X‚\à'ð vp*€~XÄ%FÑŠZôBÆPF3žÑ @Èa VàG R0A$ÐÀ„&h x(Ä$>¡ŠYì"ÆXÆ!ô .DΖ)d{usKT^Èz“:}ŒÕ[õ׋Ï:�M^#"æM™+W"’óK1–«„FêËøžn— +¯ênw%m¥®˜¬¢ŒØ[Ò•©r#Wë_•] ;!+©q™ÏõÎ\-K?µþ¡[%¶+�RÊOSÊêÒyÑ¥ŸS™¥O‰L4Ï„Œn³BÕòžuòÿJÙ4¡ÎùòÓ9)%¢áõƒ‡äS6ŸIþ+ßÇvD¼�\¨ÐÄJR®^\¬Žˆè¾ˆXÖ˜§ì¬5ôrפ»‘ʹJhO�.44²‹•ý‡úÑCRL÷ÌÌc-{L%"ÿÖË:�-‘]fåJ_U�BåèߊF4?s)t´R¨RŠçRìg¿–+d¬+V§¤P]¶V]ãºR®LÈì,_»•9ßXÏ8U6¡]\*½)¡ÕÏݵ†¨W£«Û,%.+.K9 ÍTRdÓ©S•ý¾²ÏªwUá]"«[C¥´¯¤ŒåýŠ§Åªn¬�ËcsyÑŠKMt.VJ^iO3ç…G÷êVfÎü’íèssÔžXL×þ%3SѼ<ocôR…/´é”2¬qÂ*mŽËl5¾±Šþ¤¦·z"qyÍ'>é®~ßxr÷Ó^vö«rÕ‡ü·ú7nQiBk¹¥SLmþ'ÉÍ\ËSQo¾…ä"y&é‰>fåñ|£!ꇈurD7åæÊUõ¢êõ&·�ªT9›\ÑMÇÓÎTÕl¡™›Ð-u¤V%g¬+»#¶^&T-ëP%5ee'{yíDæ÷²ÝEœðå,›”«r K¹j}{­B²¡ÒKes5V“N?xLíz–¬$%û{¢ù¼f%×馄lZeèóa©ëveB& í¦_y§šÖ\­ +k¨PU‹Ñü5´2EV†m)þ¡Ûu/µ),šW¹YO%)ºB…~y—rõ!;­¦™‡Ê _xt2}𸓧†æ •�Æ¥PéÈdµñ�Ëe/-º“ní¥6ïJÙ­l³²ÍTlb7õ—æCDB"+ü‡3¹ù‡ê¶{•Ð{,c“ˆzN‘æ.«ÒL%…nŸÏY–ê£JªJ1}ìf­*ëGo13£¿ãL«¼6V뤦k+’¯ÚLkgVâ )aË™²šâ’nOçk®>9g”���e[n*å=SrSc.WhÆT#;“O§J™RÖi,g–ûL“h\¢b6ÖýR“;ê�îèkË‘…š©›î¨ê>a)Õ›Þ”e*2g¡µpîž—–£±ÛT±\htågWîH–n»MeûìºîŠ|wV3¿¬£¿®¸Æ37µÈ?–Û^B�±Ï}®\’RÅ_½îUØr{›éÅ-3"u³½Š^ÕI«ŸüЍÊÙmd؈ôa)/ÖÎÝ|2e¦^sœŒ§ÎÊsK™ºß9¯Ó�^ó"–¹«L4U’bvµû�U+¤×P‰ô®P¡×œÆX\R™—ø*®mRW/û_®˜KÉyW´—}åwnш±Ü íNéøüšÊȇÈût�.£ˆÄNúïÄ¢²!_g1×î•#½ô�”^þÖ-7±ËÔ×åë^.�2£²Zmk¥ˆŠ>)ÓœúàÁ²2)Ý�ITÊJÙMXÓ2µ~ô¨«ù�Hæyôë�$¢}ÇN\fçRNE.5¦�XÄG¤z&U8>ÙDør?³Yy©aá�¶f®XnŒ:3íí:i™!¿Ü&þ ¯t�5›™üN,¯Ié©OÆå�šÉ•öOXûñ¸ŽÕäØJNéXE¥ØQRå/ËoÄBz±²N®üàa®]­Nl±»*[9Öü!Û¥ÏVÑ«ü¯«x:!}ð¸•##é¾)çãLŒÅB¾Öh¤Sf.F^©»—:g4:#oêÉÜxCí¥L_þ2á|n[ù± ™KñðkBW¦x¨È¦×WÓ;Cw)çB“�.&3ёϩ‘Îʰ +‹ËV¦ŒÝ;ccÓhdì´añ}rgaK}êC§1³RlJyƨÔÚ¶�É,SUŒ<ÏHÛ2²dÈ� 7²dÈ� 7¥j]é8k+“Ziˆä¨åBF:ï4ídzߴ÷›×ô"áxLšr+®“íO…t¸,Ûù&Cììd%JJTc4j1ò�åØ]™r&:“FWÕÒQjfjˆ„Ê<öbcÅŽÞ¢¤½•š!irS¥OfDzj]ªó…6b{´Ml¥ÃF£3·¨ª,SS~ ‘”:™ª”aH�Œæ3EI)ªíçð£$eN6:'/‰lªTù©¬vWŒŠk|¢ä¬jæ›Ò$ÑÕÄ6 +‘ k3kjCņS�‘7b¢*§f…ô˜k¦ö‰ÊU©šô,Ãóørœü´2¿ÎVl«Ó'üÝRÊ|æÜ¯\‘H:ü2¤~´Ñ%t¦rU#ä�ú2ñ C$�s.é´ÇV“‰ýœë\*�uت:«–"�63GõÒy±fó&šæ®&¥l¤Æ~3KiØ*»¢ÏœÇ6ÉžûuSŸ_¿b–)eLÖØj2Ö½]Z�¥¿CoíŠÙO±RJ/o[fjbÿæx;‘Ò^‘h^jg§¹�íʇÈÇü&ZÝw¢{ÍÚŒèòBt3òøÏM¡Óådµ÷4–dgºé_f“ç+WfÿȇˆíÿÙ_Û‡eV¤ÇüÑÃKX‚;@v€ŒìÙ²dÈ+s¬þ$íêBÌ©ñ‹ýuršsɬê¬ ™sïõ–�@óÈw­Šõ‘•¨´\ÝH‡¯jÕZÙR’“Týè›�§2¿µ¯ÜiâÞ�EUXx½q’ŸÄ«1¤”e*¡rÕ/fw¶§x¾h2¬Âs_ÒA«Í–l?Ù&sƛ¿̜£ú±~2ZË«ôš ‘”éóob5¿¶2õ•Œt°ö›])º²±úe®8%DrÔ»RTÊ�i¡ß¶#’:ñ+«;—*v�Ybµ¼ÔM\[§J)–§¤ÍÚ�³–O)½)eéÒª9×®ñZšÏ|žbT&W·)w§RÛ ‡3,MMî!iNæ•ÚÆzêÙ¯XvgýŸ:ª½g¹¸¼™Óû}Êgš;Cºr·b>:úÎg&ÝÇ®ÇÒ_Ëinè¡*ÑJÉZ:Õ"Þ½X ËhåxWöB*v¯öŠì›sìw–TnØ¢#Y‘¦«¹)Å×)Å­B¶SCSÙ ‰^ZåüÓW2»Â¹Æ÷=ŽŠ‘§Mx<ÿJçȪÊzLOý~æÈø:“$ýw±bãËpnú9+Ÿ'4ú1UµnÊot5YUK9ª“Iu�r²LÍ?RL·sö(UÞR™Ò>™Žä\cªba�®½ì5ºb•!·Ê[ü!ºíÂRÆhjæSºÛ»y¦¦§XiñÍ>SfÅZ>öÇ2WŠ•º¾f·˜hˆw>�«ÌÄerNͯªhŸ‘¤cVFw¥°fzy"se’˜]n“Ö©ÐìŒIêîä–vÑÝyœ÷w*»)’Йj¨Fúþ–]�åø2!²ÊÌq&3Ò1o:eù)¤¢!%fSNž²„W宺Iô!r×™1ºÙø.,ô12W5µ3K‹L.Á– ƒØ£ÇÈ� YÈÂ� ;@v€ìÙ²d|3÷b>@¨ÑKM‘o|!~ÕžBÅ8�LOý•™ªÖŠÕ¥Ô#ŽÇ´Â{ídz1…s>b˵lrC%‡^ŠÍ¤V5UêØñ™ÎÈ®Ž"£ ‘Ô‰Ò3ºò¤ò©*7ª›¶²¹ÒQhr,w®•†�ìÎ5eNBÅBU҅̽ð4ó^ë¶S¹òÖŒõŪcUe\ªîfW¯�S.m™U‘Ws³mî6Ÿ—ªzfû5Ev岺ò±X]ÑV8TG¢KD¶•Â2Q•å•#ÖTùn,VXÊŠïY�ÑTY©Öœ«èw[+U~ºÍ”Çš*"Úz²»¸eÊúÓ“:¨”Òçt‘¦YëÍ4ÓpކÒ@8J"PꀿZ", „"±xP$ ŠÄÃ0€1 €9X¶‘Ò²�ϿѸL{Àp\=7gã1áЮ<<\QAí·Ï¯Ò«»NÄf +ãr´EúžWBÝMψ.€$Gþ'Š i£‘è%3_ó'j��S±Œõ¤4diú¥G(P€mÊOÓj“zÛ̽Ƥx_�BqüÞ¥ø¡Šô,1ÖgA oT4ÉNì©}†gÿ/1lcB™ 2ÍNõfGy?A.8¹ä?ÙÇhÊÒZô»ÇˆŠíw4jöäú 6ÞkHT a9z{J;T?Ñ­c¤z‡[O«ëö+ȶ}[¸³âð<æŒJ'†�¤Cƒó HÔ²©�›žÐ!d§×�Ò„žpI@ô$=¡‡zÄ-Žydt# ·sŒ¥Î·X•2þ4ã%…§§/,íZª5W6ÌZÓ§ƒÓr?Õ5Œ 'ÌL?×s¢¨c�‚ö Ë0 ¨AOÐñ1º˜qχHÑe÷ +!è›VD‘]²bg»óæ–;Xj×'1-Àx¬EJÈ^=µÐ0…Ú"LûàòBá™âI®¥Y€>ÑÕf'†¾žÿ,hÆ�D›�ÃB[:FJ; OcŸÊÀ‚½DªÅ]K©KÈWhÜðMotY|‹= Ù½¼žÛŒï³?ÚýÈŽˆdD«ÉîÈ…à>Q+ -CJ¹7„¥Ñ=Öœîð)ïï‰ÙÎÓæÝ�xhCÿL¶’Ô+1§ +mîžÑõï–_k[h# Ž”4ZQÊ1•¢/ŒÖmÌzýªøE’–GY98F·jÕØ« Oô·:j—eŸT,kK‘žÇûFÛ¹° mÐÒŽŠ#Z—–ŽÌÖ…Šn'œn0KæD¾ÆíˆTo‚ð£Y^5’kB"¨ìÁkûÆA Cþ4ƒ^|o ܈^âg�9øhz¹íGáó(żò +J|ÆTå É|$Ñ(ëß@#pù½âaÝžö– ]ÿ‹h·è}…t•Ùñ>k2ÌyV!iÅHÉH?¬›„ÁßõsßZ˜‚¹Q Cn|„Ú¹Ì[l%‹Œ86‹PÕ Eíco”3m�—£?–év÷ ŠF—x)#Æh ’.¢H>}§€`襌U xrµu™%Ý€šNk{‚Lƒ�Mš 9¼’[Z‚b”õÄAüa€‹£]àQé.@£®¨âøª¿B +´ +^H‡œ@k\~�:xÕDß“!V Û›Grªg„ˆç]ãRí/ZQœ–Fƒ (›:D&T@¥²' ïÎüð!†>‡¹§7NªJP ãÕ´0b¦ùo*Èš�(Qhæ³’v »HVâˆ_hjëÿa¬G®¥ÿùUªî?“Â9�1´Â{�Ü)$¿É±&K=ñ²\ÝPذ0 ÅîŽàêÌGûöÌú®šö@bP—”ðµo°ý�ão²k¨âØq÷¦ýZÕÛwD±ë*Ñ>?™•Š•“.›¦„,?’˜>Ÿf.úHWÜ/=ÄI@WßJ:œ«QV†0Wý�2b9õ>²KÕÛ ¼¤²Í}RÂ=¶<3ÞH¨(iÒ�Ãÿ&ËÜäáÿ¥²ä‚…•‡ÛŠqþÝx„_§Ïªó@¿ó˜}`n²C€U5lA¨Uhä!†´aŒþâ@u�r`Kxô›±vlF¢ß�{Fƒ•FA Çâ—5I‘ˆNüÝ¡ M²¯cN)6J|”FH±�EåjË/ã{[„^¼™?—ÙÛÞ{D L®|o«—ðbÚŒÇ3‰Å`õÄ›^k !²¸2óLJ´Mqy,†ê„$õ¿ñL$V’Çwû¯ð§Ùlº�zÈ(;²-™Jœ÷5ÿ{É?maâž{}º1ýg8mƒ7ÉÛEÚ—PÖs¬æÞ=¦[ãmò¦Ò.[8®t Cœœ2t1ÝÊJªë\oÔd‡<Äå�:�žšx¸ )‘¦ÆÅ¢q0Õä:±^äˆV©¨P�¡1ÈöoQ ä‹ö½£Bs[ÇíœÆ+€§¤—ý ë'²\Ë�]�c…ÈŽfðce‹çöñfó£E=:ˆQºåm|sM|¦‰RB,ž^b:9Ü‘‡cFÍZ‚¬´ÓáMTƒˆl¶YvFqÁ!b¨vÆ¥œuIÖÏÅ"ß´¸Û“™©¹Zõ®gÅ!—�Æ:è‚Ôé[?k„zç¬G‰þÝæ§w˜�Ú#™4üõ¡�,¼üvÛ¡ÙV«³Þ®í2íòa»#"4÷¾¡.jbÿ±1Q¡v ír›ð‹½È$cA §Ž»ó|r�Ô—)Q+›{°ýeŠžžI»Áôƒ¹�#ìÃ(j�$*îñMüFU±f+¤T7%™­@ìu<Ø%þ +ã€urÀÃôÝ7°_Éc”(^™•5à3Ãi½²ê˜øâ''Â:~†KÉHšr8+õu‘.—dçr>»e9'ÜIþ‹!v7•7ioÙê­/Â¥ë0¢Œlš‡%�»+IÅèmòJ~–‡zK¥&¢–Lv„,bJü²™Bµ‚.U£baÿ ØÑuÑèŸè™Ï=Sdi;¹çã˜.>u'+Ag¢‰´éãP²KìþkmÑÉÜG=>èÇÇ«ˆÀ|!ÉDxé¸(ßQå’ø#UÁÕØ›>ìÄ�»;dŽc» Pÿ/íh� ü<]·í°p¼°èúí¾‹g‰2Õ�Ûý±‚àmÓ ©;ÄÛÝ•ÃËeÛ üdJ[C;TN^ŠÛ%ü1îWbHÞ‚ÚoS=²Ï¤» µ›Yÿ³)Qp¾øÛB4›‰ÞIÓR(8Y– Q +f¼M‰…ÑpÂ#ét‘�àYc€Šl‹ÊS‚yT ³`ެe³uÛI¬ˆ&+äo‚"b°— 7ß : kä�tö|ìÊüe<œß]¬by H�ômš¿Ã|þã­Üô‚1ª†ÁïübkSÌß ¨p°¶Z"¢†‡Û©ïÚDSRldLÓÏ‚S²Ïjìt³àh@ïk,;+‘M¶‰äGêo0ÀÝn#GPž\<.D5ýdT†ù̵Ò|�sGúŒZUbà6£&5ˆWÿÜÜ“�EÜÏ ÅoìÒ0ã üÍа¯¦½bŒ¤Y“›YµE….y¤è†rÆá‚±qþŒ+Î{ |¦ në¥bxjOÝ/ÐoÁ HS1æZWâ8^rÑÀ@”‘’ºø +€ÐÉû¨�Tç ä¡ï�˜ðãº*…Æ®¹ÌКîRøÐ‘-QCTo®5I—� &BL>tÂ�·qÙ.Ì›>eÏ›/áºÏ88Fo%9 +|ÐéHA�¯� +suÛÕ0¬øzjÄ�<Þe�©Ê{›7ÂQëû0!—O‰.štNbë"J)‰•ætw׈2ˆ ž +|ÞéG¬ÁTd‡¼,`+Cx£âÃÑêqðôåÆÃ�©@ðØ½”kýJ„é,Qû`ñËŽ�¢kŠü×ÔÎðR9J£ÕH]_º‹×¹Ãm¾LŸ’%eøJSÎ�H,A/©s‡²¢±ÓÜV‘¡©ý“ìlS«9aWõê™Êb"pê� ¦†„suæþ `ئ٨ºçKDô¡%ŠýÞê¯@ YÚ¢†’Ú…ÔedØ4¾lßs~&ú*žîûÑ‚á Nƒø�»uýcÀª1áæ¨ÕÇë'ô¹Dfîµ`óÄ1ÿ– ƒåN0¸C½Ìóš&9QVE2kn†¬Tvˆ Îé‰!CpQ¤1Rˆ?ÊEIp Œ³":(%:'�"&êšø2Wu8h9yj¦d0b�;T›Î•÷aZGàÑ�)»þZ©ÒKbÖï³%¼sæ™ ¹BYB�Eƒõ¦ÍIýˆé5bâuÄ‘Œeæv¿õ(�àXÿ|¦j:§D²übu\¢j"4:™Îæ}þ4§‡¶ðöyñÕ¨…%j„9qK_d ó+¢Ö%ô9LàñŠ·= ýáY÷¬:xö— ‚pⲿ¥[Æ Ž9TÀ¤|alßlÒцl'¾1FñãÁr#X†!nbvtÕ�û÷�³ óæîêÒÌob·’R×ñ>¼©žáR@-v<~JR|Ç»¤¼JB.�ï€iä3ðyFê’Œ& ½¡)×ÒK!nêÛH¥…´éàAhÞx}D—áì(&Ïx%>xKšÕys×~^ê¨}Û±dGIE� +1û\ lY¬þ¢DúK¸ý쉪ß�:_R·Áè…£à¤6M]_ß®¬-§L ,?øòc ½s ËŠ ™ä¥éº¨Â¦B¨T³Zçb|yt´§Žjâd±#Å™™µçÂVÿ4]ô;Ê‹Ta¦œìåR†Ý\~9鸴_h¨Ë_à]x¯ÂìØŒÉ) t»ZÚöÃã|J³ ¶×-F/g¼ÞuÀw€Jsßãú ~;éÝ uµÌ›ÚŒ2Ê �Úë:ñµm.�Ú,V÷0愼M’]ǰLºdH;¨$ ó‡\-bJ\„é1AN<ýær)J À¸÷¾Æ”æ‡o‘ây}EjWb-õc8 EòÝ¿~zZäa0P‘¼Åúúy:‰>fÊ8p€û Ò4ÁìŽI÷5ëÊ$Hµ£¤d‘áðRQNí•�#¢ØnÞÉ´¢ZÞèÓÏ·GhܵwÕbô¶]æmWŽrzôuà…L˜àˆH&º¨– ï7�{aS ZHŸ�^Z 'äLì,+«ð"Ž£)6År…Ÿ¥ëçzçd +ŽrWà×ßh�µéЇ5JcñÒkYåÆQƒ†p0àÔF…×ÀC?o©c#Kx¾5Xèðz ìì‡FgRk„]õ˜fSr‘×Ö#"SF#iý¦elòÃiP¶5ꌚC6#Ö„Bf„¤�†ÃUAi|ûu¹¡ô%ûöØàÙR¶jd–áå¿«C’ň¡ú™Ä(“ +“R—¼Œ˜'6 âBFÃ)í¨ÿ¹YѰq*q^5_žMtÖ43_¡BÃ#Tf,kÖz‹ +ºÚ¢Õ�¢øPã=-â‹ÂþDw-±ª*jJîê=Uñ@Á](½š¼yh’W!`©öG[Qpá[U¢n0BÑtCdc;{–” +14‹ _ÿ›tª³³Íe¸¥#�ßós�kAnd SZ®gæÍÜ„ JK"º¬Kt¸ŒzéEþÿЄyêÌê‘´¤€`GÛÄòÏÚ«³�å5Ån¶lÝäRá×*×ú“´(âZ— ÷èÆë%'@vqo9 "26ì&Ué±�ÃIèê·SZkž]þSÄÞÒ¬Õ~tÒä½HˆÔÈm”ÕLüß¿G +xšû)2M÷õKY”€ÃÕVvýi}¿{Ñ¢.€ºÀŒ§þAüdíäŽàX݃a‚9h!?àZF÷»¡?ÝÌ&Zxßlh2NmÃwÐúHK£µBrÆÑçž±×È7Ö6ÞD‹·VH™¬¢mËìGÕy-ä¿„€}üy%õ_Dz\èÞtÏ»@Û™¾4îER¬ "}6HèVäבb�“ÂÓË»&É*Y«S4XÝ +œâ*[a�Á<Ä\Û´¨'Fª(>\(šØû.¶’·s‘ ÏnIGäø"µÄ´î^—–•2í52HžC€7‹kîßLñ†�Œƒt´þH°N;½Y½HÓÈ?ûVÊîû*¹Oá\hs¯õÅji¾ v4’¼Óߨ^Αéþ�·V(Ýî#ÝSö„ŒJ}ãÔuÌ"÷\âÖ/íšì�Àeò‡TTòêÕ)9�˜3¤dnºd€ºO�Ü@hÁ'qrÞ©§ÈH&H¶†8dì9æo�/Â-. ®$×Gº¢zÄ"„/6ÙF–¸„ñ­tdeÅõi-aÿÊô©Ou׉)ÂÁZèå'÷Ó/ÅH×¶š!\X˜ÃâÈ;ý�1!°>‚pR&•6´¨%:þ7æCišËQ£0ét8ƒÉª-Y€–`%wɺÿOOEµû?ˆãjàÈ‘‚µoOÐï|Bh\u„·r·^O_ןû` “>’.ë :¶gìíÏ('’u¯Äa°û Àœ¯³¦RúHüc=æÜ퉚;Eü5N!!(ëφ ÚIö�—B™zî€S‘Ï�5.} õ€Kþz´“’·Å~-ëuǼ‡�â<ˆUÊZ1ö„ŸZ½çYbº¤-ÛJ $ÈvîH!ò6ÌÀM5ÛvUäFfwK–f½Ù@à΃4_IRM´ÀíF¶º·Î²K®Ç1.»«ÃÄJ'5—S2}¨T¼ÁÀã–ÕߘҜí¡é_F�(QM3àÝÿÓcŒC ^¶@&…™-“ÙÞŠ¥ çàö]LÓX`«QëãéÞmZà›Fté3ܯF¡lÃu4‚–bôiL©Di +«Š¡}oÏ´ì‡éàåh2¸Ùï¯ì^Þ�‡ó,ë7h¤a¼‡³9j±xÓð9 ømê>$0âŸADdŽ"Òôx¤àΚ‘ö“®fD)¨Ïª�Rü1{ùï¹Kæ>¹¿‹Ÿ~fÌ_ÙSMPxàöç(Å’­Ð¬>0¸ö`°ñ±<¥á(ßp¨*ÜPã`¹s„†'Lz·ÖjII�Ÿ¨Ç| A|¾dà ½éq΢M£ ‹æG¾G¶p>…�ýîh$AQ�ÊÅè8¤cÅaçåNˆ´Å.$·&ŠXÏä hÐiá2°�xb6è�ÃÜ7Ô(yŒû3†)¢Lm9Ž?“2¢6Ç›*²/îî��±jó†ÆLpDígä®ÎM ’ n̬þwØ×aEô²ÒþeeF¸–æ:%*äCͳˆQd®sõGL—Õ–8×\òl—š€ê#ÀúÚžò5™(ÖÀj]Y²d‚¨ËaÓÚ‡Òtäߤp/ìXÉ@ÔZrúÌB¶õGa‰Ó¦>ù^ª7›È]€®’Òžœk™&‚®0á89·Q�þ:×ÂGðWnñ•ì÷"ŒJE½×qͺ×ÄÆÆtì\ÖÇ]£ù[=YÔmÛßYVJ1à�ÈLÙÇÔ¼Óå7ã38¯­†À¡�„Ô}2†Â–\]K¬ )»t]’qèÆ�‰Gô8,òÃTÏ ±Š¿·RùŠÛä´ëa‘ãÌ‚k6J¶Ÿ§ÕÀ]" fÙ’`VÑ+¨= 8zK‚÷ÊTƒ�Hì|HЇ€ºã|(Ë»œŠ–î©“2Ô§Œ>~29[z€�±ºs?½^ó-êCÞÚƒ‡M|Éd½è�Dí|¿»=O‡2 +•EôìÃ7 +‘3|‘¢¤�ò·„ó¹^.¬r¤P²bCÊ) ñn�×µ6hŒœˆL^ƒµp)Kщe=MŠ$ªW��Ã<³3*zgêRF�‡™æ2:A„·€À‹ÒpÜ Éðß4%r6Í ô™Úy1ÎEU:Il;ì‡úÞ5lm96gÃ(% áñ95À¥eXžW*n¿ª0|xYU+h –ž¯É*‘^†Z¦·v´ wZ»iVÝ.­7ÒC‹V.Æ,*�šËiƒË¢Þ˜{ÎÆ2] •ï# †= d8µ ,zEe6’Û(F{‡M ÷‘ ¼u± –M“aQðCÃWƒÏÑ,âûŒÛ¹¤ëHáÓµ²Ô <°°Îè×¹Ý$Ó,ð*z´ñ!¹^+¡|œ@žÑÛ X"Àtßàm; +´‚jƒ^có×βD{á#N?ð$—"]^70/�]¶’ajyåRH[ÐÄͤ ³â·´8úòâë<)O(/e¥Ü^t3¢½ê�¤µa™DYçŸLÃ6:èÆu¡(œ˜¥çä,réÜiP>\–ÅjY .ÍÎÇi¥Á/ÊL&°tÖ¸ªy2Bå�f©]ÛYÔ�]AGy ŒþÜ6ŒBq„O'•¦&¿f׸fækÈO¥¦™ü ÉöûÞ¾Xf±¨I°ú³A[2)”8›ÎÚƒÌS&ÚèG‹ b¼¤K`p‹´ÙÉ‚®·„Žƒ1ËdÇ”JGx>Œð�Œ€gË(�)¬´cÑçY®HZugea­/íaùÃdeDÙ G%èåï0Ù;Û¦´w3Ùúãþm‹(ƒÒE±±<ÚŪµå-J%süD9¿CX…t ŽªP)âÍå·\—¯Ð ⫝̸iI¦,÷˜U„ù¦®]1(JˆO¨ùžãÎuLº2©¼²Ùß‹�g1°0 ü* Sœ¤±X.xF<…ì‚tª4B¬Ù݈|td&3@µ@0°Y[T½`Ä€I‚†ZÑO™�oNè +¤ì·Ø_ŒdQ¸ÏgmÛ}×s¨Õ_R"{ÅЧ³={‡Äš ¿£ñYPíw÷«îEÑ�` [�×"õpÀb‡ŒÐ’ÒL+Qß«›{…•Þ|ïîØ[ØñÊ«Ò,Zc,í~•\S3A“0€|TÇ!c—ØAÉÅUi¼S½Øß§;�®Ðõ¯Œ³¡ª#•ù2_*½pÈô4&¦ÉÐk(I Ã`q鲄`˜P6i_:Ú}àÖâwì)…Ì!M‡o’õœt!ÊÆ b¼–ÝbЩ=(„í•Yj´¤”ôf-‚%´ÿ4"Y«è/\}Rk°ˆ ­Y®MbûƒAèÂFÁ9ðü¾õD0LcLÒúë7±Nã΃àÂTÒ‚eû«…4AE'•ªf-Z5(¼̉)î�9¸mlgûc9ÒíÚ߆âª.d˜¾ðó‘S$É¢E7âñAÈqAÞC>Þœƒ€©±~±eŸä'¤— Ah¯/[»ˆ€Só9…(E'±Tã•$‚T—¡(Ÿ±Ï`ÙìsJ5êÍi‹¯Í‰»<êQä½Ðîíõ7ÛfLz®7ÝQt ±&™Ô·^XŒáK(µ0r»TžÐ'(‘°'\4…;3 ‡ŒEU;vZ*ž@»†§%w²Ó%±è<»M/'*‹­x'€‡Yèiµs3Joçg•±†:49OYçÄ ¤Ðb~#.GGSØÏ½gƒ­v*ŵˆŒT4€ö1«Û4âÑt¹‡P™;$©¯Í((4eáþ Û÷jѲzîP·=× ÄjÍ;5v~› ì$X$ô‚ÍRé,4å0gѬ^Ò…çèúW«“2 %u=‹ë†&g4v<¹ìõ +®œÿD•UÃxÏ ìó)K褶Ñ!P«ÁŪàtÍP5>:ÆÄ…K9ªõUËêíÒ±(¬òriÄ¡v¸æ‚åHêrÁ‰cz^+èæ�ºëÄ"‘GåÅA d§ú¢7Ò±žÑè°VZÿl•÷è5£&KLs`e*­§x¬xÄÊpÌ j8·z^ÄæQïAƒlO§È0;å ú� ᣽Ó[ºZj�HA–%�òýôßq5!m´ ÌøýŸ‚\Ž¥~ÁÏžÒš’_TÁN|@� +qfªlD¿X8!9¥äMÞJáîM¦jµÔ Z.?BŽÍüp �cv"PíbúÔ6�IÞ¶a‘´ÚFe5¥js[¬l 7‡npUϲ¤Ç +¤½M6¾Ix´âž°Oâ»YEHéù3ü›ml?„6q¸k|$×TàFBJ[˜ð˜¹.#Àâ»)ÌùÈyð©I݇ñ8Þ#ÑOD‘YT>—6˽ ÈsÀõkÍàÍ3¶j7zx&�÷‡‰*ô‡¬Í†ÊâføÙ··Ÿ˜D¶Í bZ0¼ñ>.›Ï‹èõ¿Ù6¶MÅ ˆ1kÑéÂÃLQwçŒöÇ—ýš:2Ê_Œ¼iåBƒz¡´Š|Ý«hÝ`µ)PSe‘”é›aF] ThõXœ7Që� †_²¼;WSCþ- Vßc>bc¹æ²€c%$x~6ÕÞš;¸QáUS�òÉOÕXY�Qkå\³�ú„Óð!t3ŸÔÌîwhWbª +ï+Æ�cçËgA¨/×Üm\c4i]ô‡¬… þ…÷¦µz)û¯õ‚*�k?ÔjØþ&‹�BãiYÒŽC¢m¿àH‚V‡n)4†-Ý!ÖÚ7 +)´ÇÀ”˜›ŒòµŽSœÉw3Þ…L\ Ðã-¨©nµ÷„v- õÒòº + +à™ì’)ÉÆ 2’Ix0N0¸埴7<Ño±ŸõE[NÑà Wh¬{³L¤&"²+ôÞ)ãŠq#nº“C™È üþ”òï +à�„C_dhŠ·_8 ³®«I£¥.ÿ1Òý˜AÝ@›wåC‰7há<Û”`Ùö-ßöHÏåÿŒŒˆ =öYAáuçÂ$wW­H�b’¿þµ£â·":â{{‰Ø3ù«Áˆ ªfD? ˆ«ÅMtn® œ>tRÿA×ïÏçBÌSúÿ«?�ÆÁõ$'�Ë)u•OˆYCÐŒƒØ‚Ùsâú…î‚Ö£3¦�}°‚£8ß´í¸7\#Ú¶‡^}\‹�'ÿJÐy/,‰¥0U„ˆD¢×ÿaA”~¸ôaúé+¿°‰/¡Á&35ZŽèÕeø3çBD*�J+ëüëuºläó�º~?lÈÞ®elôÅ|û`Ǻ7Y½ »P´ÕÐ^¢ÿ]ùŠÎ/�™øÆZâG%ºc\�À1¬°Â1×7Ýe_Ñ}Ê­˜.¥@"-E°Ýr±øxé!Þª ã†]7a5ø™‚Rö<¢©Úaéhà›¥dfºÜt»Z9LêYäÃ#û¯Î¼X!Ð/í‡T儳÷êċ£x¿ýUþ¯i¯ â�ƒ'¾`Éîaqe@tIlÀ?v°ô!ª²í}Ô#|¬[=ÁÑmô#ŒèR}+[›üM%Ã_B#4º´rpWó�uß,Ìü�›ª‰ÛP{0E|­÷6…Ч¶ ¦pD“f=äĬ+c >Ä\h�Ô”¿¸ìÀù…N >7r qÔ”�XnÑ76)˜š¬"`ö)ĘÕ×71‡Q'ámY6ˆ)-¼“ ÝîMˆ1§3B¬øAHzbD,ÉÒŒ>$¬Ë“¹B¤òÔãß•ƒ1è4ÑÓ2hpœl¸/!ä™Åè�̈¸4CIçwK‚á=Ô=pûÔžÚ^ºë9'Qêò9^­Hx‡ƒÌü_†Q�yÊÖžŸÑ%B÷“œãŽE8QÅ#yå&4öå2Ù:Tç2æ›Â" +tvÍ$ôqÄ8—¡ÃPiBÌm®ïqÒhf€³ÁCA HGc@¤‚ÄxhÛáÊ;ÎGm¯^DGU[OZ.°£ó9Eì쵘A…Å`è€EÞDGH¼ä@W%@— |–wú¸YâùƃiB!$¦þ tTbž£ê6ù’3z�ðX,“æIW:‡6š ¢�bâ��€�ãTÝ¥ÍCý?ºOØ3lÔDEGµ¾®`ŸïXâÊz«D™¦ ýêÜ€ƒµ±,¯ð~Z( §|¾fÄÖJÔYqê>v‰ç1ª +»ðå�kÍ¢“ÛI‹e«´b_SA5XnIñNí«yUëhž°Ÿ«w™Û�¾kÅj`¹°¨âìd¸¡Vnõ=p~Ui1³VÒ +‰9ëäÕ%µë'¶éîŒÿÜ=at¨£¸î—5`ÄÌA¹ÑŒbé¬`å[(Íõ&ÚG8RNª +±õ¬týwÓs ºffuŠQ'4ÿP_CÈùºXžUdr¸€ªoÊJmP• m=Ûð¬!lÖA5 õÁIAî %)©èÖ�±+Œ8Á«6 ÉòE#dVL6—Nó—bðJÄÝDµ¼€�jŠ”ÿeëa|qÀÁ‹$ÑmÕד�Y™Dq_×죌ßU1¥�¬<%Ž"$ƃ¨‰“}Q‚`ójEPô÷\ŠW¨lkЮø6ú¨Í†ªˆ2kGìDfY|_É[ÃÛŠn°d…'²”��izD³Äù1Æø—¯>20xt.Bø=§FÃ,–Ô}ÏLTp�>zsBU_åyp‹4\«ÈûšH€K¦.aƒN`|fvV(Ê >…œ¹BÖ= p\X9,Zv”ô<`ŠAFAGir™T Ó +¢qÕ £#2�·±í‹ ?eÚ@ ÷_6�3ÇŠX‚S«…zNØ{Ìwþ aŠQ¥’bØÂ3LA™(ûMC'Ë̼2ÃÅR㜷ŒbÛ‹ÐÕô&ëO’0'”ú*5JÏÜž@²Ä´ô;Ä&#a-Ö¥L®4ZJ{JÑ¿¥´ÔRm‡†S¤ÙEÛ¾Uufþ8OëÇ-<Åì$²Y ®‘ÉAéëH�;qáÇx.äé¨Õ3NÖJrULÌÔ�!¸uYc�øŒ•/ëùi…V£¾sèžÐSL—rÆÝ± ††=¨Z ;æÕ²ðÜ.Èèe"eÐzZ¼4Ú*Y¡ZÜÝ=Ę@2�7ð{Æxez#„$*h€8(Q à"ÃE Ã+hlhrÅÎfœKó’GªÒ0±'îËjHïÿ’%‡KGÚØæÑ¸^S¦0}:ê@Ç ¡e5z­É ¾X}»>%çm±èZDÞ6û€ýˆÈo%ÕCǸŒÌ-Nê`ÖñZp„`Iº6žIµüp<’z +Þ¼R5„·¥¿È�|ÓÂÏÜžy ?OèE â`q+å6jIÒø‚jg§¤è¥^¼¬�-PüKla<›Öp9ñ‹is„„Oö&}]„ßÔwÅNÿíÀ3Ú$D^TÙau3ddÙCCësÈÉC cÀé—Ï[Ù�²®3´WÌœ]ŠµÔ¯Cémç�5çË\KÓŸ£¤Öaq„!ÍÊ¡òdå0h¸CGI+S'Jlé0’A—¡Õ_P‘Ø%€u,|/þ/ 4‹ûcÍÚÊ#¬¦IåT¢bŽe­ÇxÄu?Ôlú­ÊTº¢³¥Ê*ò{�>TÝ(«1 ©ñy÷ªJGObMq(>deǧºÕé~‚¾�d½à„Jµ•Ë»!R©·qE£/F&²ÉÚODΫ‘ȯbR¯l}–&,/+£j„­þ�g��xsåƒiÄÈûqd bܤЫ…û3*œMjù%ï,iϢʛaêêM’wÞñ.¾Eâ]âš^�¸IÊöS¡L¶ÃY&¸~þA�Åá!ëN‚'ÃÆ÷Ö"2ÜNÍq/ NAnY9Ì!¥�ëJš¹D†è_/ ®Rª¤Æ@×0H«I‰Ïå­ÙG+&UO[] +™Á–Yཥ0SÏ-©$ã^Éâ¹€„м +Râ±±Fp¿ +ê´~™´Ó'™ãAfuÓ{œö ëT’Š77’øJI—¤mZ¤B´øµï,ˆ/Åìy‡–nÌÉIºJ&©Nž4H;KP‰âÏÔccp„U.óß¼3C‡—†‚kmÑèÎÆg¨¶ìC‘‘ÇÌ¢b#X›×_ãd Š©g!©)ÔšÊå}a‘�TVȹSª‘'Ô<,Ý6U !ü˜fÀ6b€ù¾çµK½½\âŒÍ�?}ž)í)ˆF›ôdê\?Ò,\ë§8 HÈC…‹5Aacúß5µP:—'/·V +ó�ê2as‰€¦?¬ÀÍFØl’~æT.¸ÿ$õO¬ !6pÞ@(„]’¾¤YØÔ^Q°[Y�ð ¶-‰PÖkŠq;HÚýñÝÅènàg‚Åšëžß>„-ÔønÄ�¥®ÅæâSZF6®„ªøã&óè@ +®*ãb]"„-#÷“Èøz(œÛ,L‚@“)«þ­ GGòé–zÊ ¹z$20àñÆ—TÑm01�5ÏS öÁA³Íѯ½R‘lO¹D˜ʤa <’¢±yå|É,feJà WjrC$!¥ÊK±4ƒ�Òº�·‚âº|\ÎçéWxxA…è]úü ÇàHÑßFÞ߃\d¸ +Äm’}@ÙDTOÿZ{NG�hÄcô�J ÑHpæÕÀŠÄØ[czüf å¹ÚJPʽqWñâ=ähF€v÷:%�r‘s b6ÝWÃЄðW °ãùþP¸k'k"…&B¡ 1Gˆ%�GAœ@§Þ|KëÓA *åP¨Õ(ƒ�$Á(øÛÃù@�&ðÛ¢`¢H Š‚²ìlj¨žDA¤1â´Æ¹š2ˆ‚!¬YjØ|QzT‰_�ye¤Üçy†‚Á=­¥ö@ÜgüØ«BÁ·Å�üx ì�/? Ÿ‡|.Þ+ô§®ØQ¿öê�5âF +ÖÙ?`T”½\1ŽÓ‹1ØÄ8ÆéʾœðÛŸbøë—)PËÒá=ÃSmŒ”Èß $d;X‚*ƒœ0Æ/6ÝÜk~‚︟à/M"‘61cŸàˆË$põäÄçÙ¾È[ŠNÀz ¼?{‚Ûœiïnïû±—të×é âƒÜ4Ø4ʧÀQ5å †  +hÏÆO—G�/3<Á‡“tï¥Óº=ÏìÝð¶;A¼‹6.:Ǻ�Yçï&hL{biŒ3ì3zöOoDní X­;õí×ÑÙÊ|iO;îÀJ&v¬!nœÄéð”Ì�¡ßòTøN·LONk&OÊ)‹þ!*�¡'êG/Ä&a:"H#_ô6�îQø®��‡"‰�pO7ëC�½Wj9žÌbÁª¦òdâ©6` &W8Aó^¯âl+ñÿ� A&7Ú7ÁøaDíËËí×(�ý^wBUâej‘�Ù±rêç* …ÑNe‹:ððïYaRI]+ƒ°r˜Ô‰Jñ ±bw�Äfx¼=›ÏŽE¢EJ+Ó‹Ç7Ÿ +íÍÐZÛßž—çÀ˜Òkù ƒa¶î¬MÂG¸Í�·¢^¿jïg'<”î~‰5Sü%ÙIº\L Zið²¿û7$ÉÉ ©šO +��)6ê‚Ôbk6îDnÚ™dWIë™n�¢–’ve:¹ PüH(ìµ$³b™ÕÙ˜§X<ï¿‹ÕO—ñ�päÈ�]’¹/SK¾è!ÖÙ¯hJ‚@çù‘Uï£MæL(¦²ì$BwêÕL-S⚯tD6o‰äoø+M‘�­>n�‡æDDbà ”Ò¸Œ]ººƒÐ“r”æ–!I " p l +‚‚  ( +‚‚ÀÍjŽR’, 8~@ÄãTÌvÞ”ÖÒ‘>™V{æ†fD¤ªÆc_²T‰#–OÝ/^‘·q#úè9 ›[„ˆâ3Þ¬wf¤§3gw�íXµÅvÛÏ€Âêz«HY\éD3£ɦÿÙÕRt¢™;›£knvÒëüsΈ§´¿UгšÜ#U¸Œäëw‚P¼ò2ìÔÚb³ðS´ùH=:?¶ßPìz—Kb n^ñqê÷xÂO‡—²²-U¼¼ÔޏÆ÷uêî)¥3sYþÉMã Iêf†ÅOU©œ–Ê�Kª}ìLjÃ?Çž¾nĪÆ}¤#,,WU5ÅÒžRùþO4ïãÈÎ"6Lv)Ò9�ÔQövè<¬“�±¶7_,¥üDwRüÍ5]ûϵM÷˜ÑŒ¯C4ç“È®^1WÍE÷Lâ©oÎis4—³2"ŽêÑÐÇá¶ËlrmÛ6}lfsÕUŸÇEÜ2— ® »„¡êjMž{Ûƒ8tJu‘�©¶G½ÿèhþßíu¯^a…Ê[²Rk¨Ø#Ó±‘ÕÀÀ�U^µõ—^ ‡aZ%âo0–ŠRЮ�› #øbÌÞôqžaÊ­ ÒR •Îà‚¬Z]âHŒó€­Ê¥2” AvÃBR0Ü<_ॳ‚�Læ—ç?IW×B;™Z#a–<�—�L[…üRCۿȇýœ°¾€¬“ ½ý˜´�¨ÿ3b—#€—Ž4Îãþ!H$l}O&¾ ²‡Ç‚àuÝÑíc¸Üi:$Ùm;&™¥mÒp‚t늢 z ó[ÿÈIHŇ�¥*i.(<%lF�‚‰%5&l¹úŒ%ì6ÄzÆR”_â[—ä�ÍP¤Õ�C��A™Ë~ÁWSÚ*/$ä÷ iÊ€¿€t߀ßP_‰Qî¨ÑØ%D uïYàâö6éåCÌÒØ+á6l(ó Q'„(tâ’CÄŠ °ð�!~!>ò‚¡i–IwBúàúëý‚ ¥Áè±–‹Åú'HÍ6Ì#H绲Dmv”E +��E7­m({GKÚ“ŒQeFnßM¸,ÏÁ82ŠDö×!�Àv"ænåû®ÅM^ç±ðf3lŠÒpx<»üÜ /Š—Å4—+7W +Õ,™xÚ[_j€rJ ~…øÜ)(•†Ùgòv¯€gM&hÊ-¾:¿CG�¼Ã c‡ÐRâoø†ðär¨ëØ,ß*|ó>4T…ò«¢Íb£ãhZîOÉDû͸&¢õ#Ç ö~m�Šy +GÍfÿ³Bbð!sË£üöfŸ³ˆÁ×ÞàËS2 v:0Æ +¸çŒFÒ·,·PÔœC�ü�ƒ6l%1±ýó?)Ë¢o¦žAõlä´J´çvoˆ›ðly¦g™Õ”×å*#¾y¬ìÆ÷˜f¾äqÃ:ÛL�û@|‘î…³^ª«Æh½¼ßúòö¥Dú$~pK”b•çCRE‡ßsãòT¢'Ž‘¹C¤2mŒ­^úãÁñÒXhOÔôå§È¥ôD¬³V™°¢íH7à‹ÚÞçV>Yà†<éOO¨áÖå:ª*$Õ ‚O§x2ímZ„8Ê= °GøžÉo +bÉÞ#*J]Yò«5Y‚MËb¨R‚ë'5ša÷¶8œÆ›ðíô¤öhÿ�CØ8?�ˆÚÿöÜ!±€ubgãÜÆV ÕÑ•bUL¡Àds”ðÎÑÊk¦êÖâW¼ Lñ»ROæŸ÷Ä…üïÈ/ûšé'Áß+XD–¯ýµâ,› DqÌðfe׆.HÄ™`îø-÷‡|HFؾû›$a£ 7…ëÓÊ¿J&f&ûc[V;&mØw„—Ôr%Ió×lþv¢ÚÛR†÷ ‰4;G2-GŽd‚ÀÕô`%.ß~.:xS=!Vál=kúl~û5ãfV€™Å¢ÆŠÀÆCo:cQôß›?†¦lþ A�Úˆù ­ó¿5©ªéȧl ™‘ÿ�õ.P13=™ž=Úz2�(05«-9‚|š�� +ƒÞjl”ã9¦1‰àCzšÐï%E¡G²ŽÖÅíºs,Hõ¦ÄA•ù7JXŽ$òäk +¦�ñ’ý¬ÔÃ; Åë€ë NcSšÞѨ½ ÕÍ Ôöü×àë1�M µ‘âèc"¨_Œ–ÛEŒ›U%[HSÂ(¦âÀ5iµ +ûƶ‹1¹nÙd'í–‘Û‰,f§ó#39ûGFßhˆpµ©zõêI‰û©„Ù|’± +ü’æƒ Q¦�îµ@Ž(ð‹{}’BX¸‡ø_¡á¥CZÒ ídòÃ$“-"ßø?7Fޏ7gBŸ +‰£/—ñK°¦ìæ­ÓÇ—�[ö?…@!6nöUoìe”¬Ð(—§XðzµZä·…Sé¡»M�! f_H²±x†ß³gþI,Æ}I"q„ÇóãúÃ×½zI%‚fQò�¯ŠâHû�{¥K‹šáÜï"Eû…†Ï)‚å£RÏÇ€ÞBjr±'ñýw“Æ€œT3Ž-"¢õÎàEôÒºsäú�òÛkgBùÖ?¹7 °¤˜Þú*Cä…“ES C2X¢Õji¿ç1åÖ&¹0Ç…â1É�a–0ç•ÂO`'Ú®˜Št£„TÇx×Ùouæ{—¦ÞLÔLC—° ï;A÷pÁ¬÷�<vÈñx/ØÛ—çê\¶]NŸJž­oùeQ”Ñ`ªXûŠîåÈÃëXê(-eÙ~'êf+,ôjñA^²v©ÞÝéC^–¥Å;dWáØªã묓Àü%sŠ€CÏx¨ÃÀ{&Etitg‡æ‡òå2ÏxÛ¬÷@Q¸ñËfŸúšI YvIë-ùO fÄÉÇÒuØz¦/Oq +§#Oz +j䛂ơ�Ï|�Â;­¬Z�CSšŽ…ÂSÎBP-ÎíÕQxˆÝ X6xTeS»‹ñ¹…Ä@r)…†(§ÏãÓK'�èý^PØ•§Ž3L­äJGÕ Eæó1 DK3Àþ + +—âb;(ªÛ †÷òîLıWæ®ý�Bè⇽™ä=„ÕåùSí +ß)ƽ5°“ <±Í0[x$öå ÕìáüëÔž¯£‹Qó +Ûqø%¶0­lF¹Âwl‡9¡©–‘É\çÿÿh4uJó¡ïþ¦#óBz •Ú(a.+Ã2ªø9uŠáÉÉpëWa7øz-`Eys¹AAÀB42­ó[önØ—賞¥¤Â}W)&kÌâ¸ä× uæöOº*À¿±\-§Õè± +<2›v&¹eÄïnÙ +2­÷¬ÞÅ/)ÄXÈ,”Ÿ?ÖBÔ¥yfEY…Qü<""!Þ(úU<9Há‡Pâ‚N"çœ?×ÿ2çǨdŠ­t„Ÿ;4á·DV‘ðçÍõ›•Wkˆ!qtá6"êϤó9ßhCxçIœXVXí‹ ¯šo:øåÿR$cˆ­$œEä&�É—:ñÇç› "!9,?õ§xk`�—q²GKKƒ×i3áAÖPÔŸ-H›¯«ë]çT›ïˆtóù„Iâî1nHÀO@ÿæÁ _+|É}D‹F·|róh`€ú¡ú?1j4ÊÈ«4êþyŸaahþ„vÕªº4›µ&>L•Â÷™°yÀ¿õ ßÀt"¢òÑ$Šôdþx˜‡‹Ý1™3m‰ßøø÷':"�ÉK@93ÿæ“`¸ñ#k9á^Í|è~YC‰£imzUÁ¾ƒ'`X[à”_7ž%Œ–_ÁvT‹WàHàj±F¡s‹ Ã|G©|'Z3ÌÿiŸWÁ,ÃIæ‡^1Õ^²)öóÓ�Ĉ7hSÀÚ1ï/Üï0<Ž*SW8æÓ*£+ŸV’³zÑ@"´9ÓÍñ$Á¿ý賫À^ýôòÁØ?é‡�O±®QÊ"�"9×÷°;æhÍyïpKºîê_hbI¤^í@‘É\·ÿ¹ð×iÙµöE/îÿ¼îÒ6"Ò«6ýªùõäàiSÈQ2™zö쵉ú1ÙÐ&ŒS~û6à���€Çô¼ü³È'X㵿�7ûPMA·/ŠbÆã·‚x•¿.Éj¨ëUœ~$ã�‘ûB7{¥ÔEz(˜:M2ìÙÏ”Èþ™–×OA®®´d÷§ÿË:Žø¬Š¸^=*¦è3»lrÔÕ,jŸÁþ&R9ASÖ}Äì0Ü{E¹Ú,òþœæé0sÜU/ªÀŽu,< 0§PôQZÛát5KòÜG¼Ý*”;VœUÈ2¶xU(´¶ý[ ª¢ÑGqhݿԤ+±c��é¾�+LýN¡\PÓ"^C[As¹)¦^&P¸�öý·WMQEG+ ]ÐJÑ­ŽP2+>ÀàˆóØÑ6 +j�-tcŸä3Š˜Å£á{ZÚóXæ\ †U!áÖ‡.û@>Q´Â`ǃÉ +Ò Û5\pì°‚‹]šJ˜iú¥/¼œf'£FµÅnn\÷M=± ˜ybLëw,¤¼,G êÅe)8ÒEXŒšD7æ!³…#˳Ìa(㢠+�èP8Q÷›^�Jg‹—š7Áކ%mê²S¡t8·Q»hZñ;M‹E—þ™èùKhdÃí“åRÛR©}žÔIPÝ6"Ŷ +["ÀwÈÐu£J?äZ œ@D™r[¦S ®Õ‹qk]fÀÖm•ޝɋZ},8€úØdÚ�\1HZnÏ ŒÕ”j™áí/Vk%$=´hôQ¥P±<i*b*ωýº4EÐ$-c9Ý/‚ô¦%~j’ñ§íÃFŽ›†‚Ó#Äî# +V�ŒWh�1�U�_^è$h°±Wƒy:�A {eù|?ÅÁ5JPIŒ ÛæÏdA¤7å@ee`&ï½ ¢¼yÂXèglyPû†FU¢R-Ó‡ÂÄ¡e3ЈŒŸj�Ò iô5*“>¿¸ef]KÇ]> ô-Üb÷èã =1�ôD¡î½.Ä"ªn?€—b°ñ8�ìåü’ä¦drîå»b7âØÒ‰EÑ5�l +b’�Š)„NKøXçhçS.‹ š]ä£GŽf‚‚‚9ÂÅgø %õO“Å ¸J±!·).˜A�s)aÈRn´+bO梉qÔ¦ä¤* ·‰.uyY†gV zÕ(&,N¬hÒÆy ¡ñyÌ‚³P"7ù×N(&(0^1\LÆE'|“0ÚY!ÞBkw1‚‚¥Ø×%„ËPÐç|HØ83¤eż¨†YÐkH"a•yÊ#Š�UA�¢$m™LQ‹‡QÚ¼ýD„Æ^C&½ÊŒj �Óù-ñ)qU‹-KM>”@ó—’X„zÛÈ Q00²(¢!R¬™ Qd(a(\é8hˆ"KOÉ\¤ÃTÁ÷}F +òÉ)Tɨ#á×ËܱèM4ŒŸù¦sFô«d[J�þvd§þ[æÅ³^œ‘¡œØ|:”`r§S…?hês•ð*ƒ+“^áRP‘%ȦdC1XÏPÌŒ††%lpVÓ“È©{ÎÿqÛ~”mBtȶ}š¶íÙßâ�™‰¶Ø Ó¶-¶í°Ãa²-ölëòåq¸\tsüñL,šù73343Cšé ¨i‡3Ã!âˆ8‚ÁF 0TEÕ¡¢ÅÔD�¶ÔÒŒ`0¢Òûv'ÑîK|‰ˆ=Q©ý+më}[%W˜·¢-[,™J""u�R[j©³k´¨DœÚ•*‘H-©Di)@mTPL倂±Ìâ°º`P‚j¥øÿûÿÿr±í²Ë~üÿ÷ÿïûÿ¿üdÛ¶Éö}{ð€-X0`ÝzÎð \šôè×¶@ÀvM®- MÁÀ0ß LÎþ 4‚�G0f&³‹L^Š:b„:T@Q¢½äa >£Aè¯$uXäD‘yݧñ^¶)L�þ*¡¡ E}(KsAJÂ:m¸p“¨F”§ ¿ñvN/ +¢ÉpÁCŸíèÁpÄëòZ=»¡AŠ–ˆ¨ "BTyMý"**9Z 9«Ä +l¬B¤áx‘†ü‰Ø>"¬ #,8’â†Âg*<ˆµkÖ‘>#äQè—°‘0-ž2ˆsû¯ž ÚT\©Æ]!‹�Ô-ÅõyAÙ|,D¨‰ùxÆ£‹:/N/+D˜é¤³(F·OÆ5 +3Ýøaß…¸ö…BrÁׄ˜äÉdU7< qÆ´’‰y ‰4©ØE*–!dÖŽ8nÌù2�¤A"@ *_^—\�êJT×Õ °ÐLQÈDô·b4YY2^c�€™Ç ÔÄHÑ„zNTQõdª¨ !iˆ¿Þt,œºŸ)ÄdI˜4“Œ›ÎŠÕwÊJ^CFHA‚*döENQ2EãèæYim£ðRÃËðµ"¦C”l\³ßB 2y.T%/e¡ñ £.R\üC†ã…PØÉÐ(A?l!Ì�0,^-:y#3Õà�‚H:®é‡Š:”ùCw�� +~8E½\w2ÞL´Q7MCÔ…&Fÿc�bˆ¢«áAEU Š'ª�'þÓiü¨1æZÚ QqÑD¶¢Í2ˆ öZq’ã “f1v�–R�$*;ÁŒ*Õ�¦íHZRÁø=‚§5ÅW;&4‚‚©,º²(¤4Aœ  +c-e%ñ{…”KŒZÙ#eÆEaˆÜÓ§† +äÇ£Jh¥žbZµ:µ#z7‚ØT¦X[ó³Ý°ÈÇ<Ÿcm|‰ …%¸�™™4‚ãêØÃ^KÎ*UÐ0Iy„Ä?QKµ†(HAƒ6¤,Ìç4SâH¾zl°°Þ�‘)?왚@€âÛw™Ì’rhXÞ1, ®‰báZ,¾èc|Ž)3ƒ3A³ŒtªF¾*7è‘ jeÞÏ^(3Ë4%ŘRCkÔk—±OEO;bI…ã’ +ZÑkE&)Ý»!šIeþÐ^´]2mÅ?�”J²álU)šÔ¤Óõ•¸L/kb•‹”JJžR9E5‰©¨¨h¥6Mf$i&¤š-è,'">½”ˆš Õi߈$XU­ÿ -jcW˜Z/¦†&žÚhˆ+Ëш\1ê­&�˜§ŸzIÉÃ’œ¨©ñë�‘©îxLz±Ý2õæb¤+_º!…$ÿñéRw‡‘EJe’°È5RÑr-›vâR*Õ¬fècŽP<êT�«¼Ð,w­g;㌆,-’>ƧzUE§ ¡‘Íî™jÐl­òˆuZIˆ�H„­Ó�퉸1[CN +r'-¤]keÅÊŽz"]ª«ì²å5t‰ŠòúÑçID•ãœ`wbTumÍç»&ºå9k<¾¬#îÌx†¦fÃøãÇž÷(€ t³u]tÕÍÆíúøqVãHg†gÆòÊ1€4#0ÙIÁ€¼–Å7Îiÿœs“ÉØÉ2 +”�%Œ+F +dÜX,‹#ͱLÉd8Ž‚’3 +‰ +TBšÐŽ‚€‚�²ì0X#IZMHáNV@H~¡`@PðÉŸaG( O +NJ…P Póž‘� T)ôð’Ò# @‘(ò5sIqÒd8”44]EÆ%U%Tú÷> ½"éDf‚ctý)EáAj–SiBzÃ"ƒPµy`f±Ø* ZÖ,J�XÅ0V>BÅ;QÔ g€ŽjèO$=•(:¼JF`¾OWcz…²vê6AB´"qý~^«J¦udcú?VgÀWjJ^�Êã#NxF ØÀ0£ë•°ŽS ­L‹ð6œyôpBeåzZ† T¥¦ z|)Æ eCHKÜ"NÒÕeH¸ð¤.5äid…Œ-Q‡œ1$¢¥JH®ˆKlï¦úZóÌ !ÅFEѬ׳0µv™o*ŠöP8á4ô¾JÐQAg]}¬Ü¬´“DiÆX™ÀéãÖ¯°±‘MÉÌD¡Iè¨éxš|¸!™©(Êã¨Ðb u>D´ýñU¸H„yÐg–ÞËYœÓ'X�º1ˆÔâŸ�çšÆ)ŠÄt#qšQ玴B\‘I?œÐ×éˆÍpB�«œ Þ´tñ'ÈgêEç�Àˆp�TQЦ±ç¡'Œj&ˆ% Þ†N ñ¦FÖ¼"åÁqTº ¬ëS_�Ã�Ä‚¤z75PÜ Iµ¦èx'PE}îʦºÎñÝ å¥Šb&ì�™o‚ìUä¢k©4]få¤6 $…C©‘ÁEn<§ è£¾Í7ý›`€ù�íÿ_«Õj«Œ‰¨X ”L|+oö¤&@¼�@©­`Àvضíñ¶í{A›7ž``¦<*¯ â|Sñ‰‰ñ¼¶*10”P#ÞR+«êÐ,b5›šÕL0PªYØO ÞxoãMÍ›yâm^x‚Á&göîtž`€æy:êqdÞ¼k¡ç b$ æyÞ<ÁŒñ�JÀ@š5hR‘™`jÌ$¤:§n]Q«­N0P]Ìb6êHG:00™ÙÌL0Ì$`&˜ÕF¼afÖÍÐ`&�©‘™``f­Ît3«ÌJ•€õœÍ6 0²´9@„LæIÄ@‹õ€9øÓOACLP€Œ€Ÿ‚jÀ®z½(„ ¡´PýTt’¯îO«:¬�EhŠûQ/Óƒ†jPøƒ €`Àáy艕ÇK +*—úÉâ%¦"‰´¤`PëJQ2 ½34³ȉŠbˆˆ>�ŠB‚j¿®zD”؃ˆÔ"†9X�V]ñ×AÖ#è¨þ‘`Iý§DD0E�ºÀgÑYô0¼…À«Š^Cý+¾q 88€À£¢�Wü2Ê 3€pظÑ6À;Ô +=@NÕ(¼4ý'Û·ý“^:½ÎÿúËÿ}ߟÏÀçóÓüÿ_Ð…þÿtÒérúéJ§ÿU«þGýt¡ÿÿÿ þÁï>÷ÿÇÐéõS½êDõªSýõ©­×W?}èäÿAýÿûô?ç|.“ÉŒÌ×51Âèb xM +JcTëbUZgˆÿLDÄkð áRª˜¨”—§=È�!šÃpP�8$ŒÆZ’�?’H&,>TB%Î¥šœd•FÖOó2€¡¥–�£4—/ØýºÇŠRÒ9}f$Ã.0�ö7éÍ›šžZRŽ#Ò-…’"�Ã'©Àà8oÊ $zÖ‚Ìû`å„ šbвd¬�\H�cá¯;IAÎP‚b?#kÓ_GMÂz�7™½DTg‡âAøéÑ/Ö=ÕÅ(_ù–·êcájò˜2%‘C*f¡ÑÙíÀxÔÌrœ öãßú2M¯…Zí{múoLtñX¬2—‚ÿ�~Ʋ$o™xdßgƒCgž›ÌqÏWrN†–ós¿æÌOÙÜ|ÌíC"yñ$¥ò·Îô·Ú„ÈSØà è#ŽpW«é× œ™% ¯þZÉñAèZÜA–donjgÞYâר�(JñKÄ n­tçšéfeYP¤‚{–5(yßc‡ŒJCaQ�D¯ d%Ìy´‘ûðÀÆÃdaè¥Aö>l'àëÏCæÊ˜õ·œð~€›;5}ïøÿjÑK0Õ"š±šÃ÷a'Èž1À¥HZa´g¤'(ZYèP23ÓÜÎÑ­Ï©û—] +##ÁŒ.Áï×&‰Þg6u.".…Ðtyí’ÈZIŽj¯ˆ`óšz`6lͶ¨Qu&~ƒäÙÓwx‡ +°ÙU7ð.Láÿ~Ž3½fëkR2,Z{Ë)¸%kFø…;¾•6¢KtFpáCu.Ø+ ø4Y»öÞtT +te@—½œaB“$úY@B-“%ŒfÐ"‰HC®Ãhi�—ŽéŠZCo8ËyJ¸ƒ°•Ó€ˆº7¥k#ûQ–§Ò"ÀÎÊd‘ÇÛñ*ó½%l¸Øœz6ÔF뛓ªrÍ‚;jŽÄW¿�WisgdÂ.`êûñ +YZW_¼|®“¥èF˜V“àmGñ+V�6,Ï)B /­W^ô‡f �¶˜•TzûlèkÜs¦�1‰Öôè…]. ;sÌŸ†­‹#9ɨC„2Ô +“ÒÀž@ÞÚr‘XbŠÅ¿Rç�Þ,ò½ÔDY6p C ÀRô¤K¥p8„ Ìq–øGÈtR©S�ÑÒ2³ûWö~4͸5QVRéûPžn¡�‡$µÙÆÛû³iݨ%/+ «¨%?roÔr,¶�DCÔÐÊË}ãnO= {üRpËkjlgt)# +,”þm_"Jº`÷åAÈqtÒ‡�ù÷[±OG ‡EÊ•õ>÷AæLJ¸W`£Xí±MW ¡Œ�rÇÿ?€äŸH sœÝÈ ~ÉLmíŠ?Ô?¢*È +Èš‡§è<ð5üù�PÍCšÛEâ`„·¸IŠ +=!�‹×–"â ß 6]ÖwåÉú…¿v}ïCq{­Ü×åá%àX]‚3þ¨f;ÖªrÛ9…€_êƒǃCðDÄZc»µÒ´.æGJöGBõ“ÈžÂåJ ú·$+ˆê¶·X1ŠI9+eùÃhxÊi}ð®ìR²îxÿD‘Mh��winÌsQñ µîD÷!îNàtDÌOû|y‘¢/Üztæ�éù| Ï/¿÷¶5øy}W“€ß:Xùzo‰éµ« Ðï4Ô‘a÷9­¡»Ý‹Y}üÁ_˜å¸wE>ðvj5pè¯Ñ°xúF>%ÜǺGûAþ�º)`ûeB8}ÛÞüÆDÕ[0„BxmŸ¬,šœÐ¹žHÔŠã}ýHH¤] ùQ@üc›jÀÏû¤U½ûéâ@:ü°zôêZ®Âÿ¢¥a‰wBíSðe&}Ó öLŽqÐX7ÚY܈ ?L~°ˆÅƒ`@ø¹öºÌ^#’íæ²©f“{­ymNÅg "»•ƒ�Pî¸Hö9 ÛYpÄ9s'8ÒÛ¥©#à,ÇŸ.;Æ^Bq›ƒyà=�íü%ü$2:£œb�CÛ@‹nOO«º‚W¥”üJ'6¥bÛ{4pòõZW$éMH7-º°“ÝjOÛºS8aiÈkÒ?P ˱آ¼ ®™Š (¾¥•[Nš1íÝrá/Õ1•«QÚ§XLŸòØ»ÝÛà�êGLµU%ˆó˜Ú/&lT(¦[ß‚R�NŠéñ-€£I˜–ð´£pªëB—‡Ž˜ŒÒ± Ö¢wˆI~ûo?ÝSÇ^Óc¶~ûdRFÉ»˜3ÝNÍãsLЫ×äs¦è 7èRz¯ð¿£©1Š`J)MƒÂÚ)xš :ûBæJ:«öy’:Û…´¾­šëÍ‹Ó/A‘”×ÊcX~^\5š;óˆKSQò|%¦\’4Lå×ðGHÎ7[!Òãc*qEG9ѱ³ ‰™PÈ•œónÁÑ:B·R£€ÅÕãÿdiÕÒÍ\¹AK˾H ‹�Í�†˜h ÂÚ<ϲ¤ÖõÙ|æxrÍ$v*JŒq‚`3�À¨xŸY{(èéf ¶ÃÇÒ\Ø{OŒ�…T»‰VR Ëû#è‹kO•Q´‘µnhæWÒ™ +�jµfA|N»jvbw×ÛÈEÇ3Yvp%±€Ç€š¤�KöÔ&ÅQ�6 úÂa¯U^;ý\êãH¬ÄÁY öкÝßu_Ñ +5)·}ÝàþžŒêô*s–QµUõè ;k¦ÉçSYKLš5Éåf j›<Ž»)õ ßnº˜Ë¢J?»Yr„ŒGWzݳzðÔä@IÛ�¤¢Bû¾h_ ‡É<ÃK4¯ì1žô�¦ŸL Èeü¸›œ§<ÕØ- €ÞçàAx¶‚+Ð}¿J@ÀÂ{ScÓ¬¤±žjüÅ›ûí v-�NX·¦áŠGu?GUámÜäçÄVÀõ­u…Åûª¦N#wiK€(¼v²ì·£ôÉÿªóðW¿Ô¦å-Þe¶™úQ¢E.|Z +§u=¥F`þQ“w¡‡ mò½xóJ‚M÷ ¼@We¸I=…xéo^ݤLsxSÚ|Ñ¥µZœRþ> = +­™Hì.ÇÕA7j³y#¿'{¾¬ÂM�}��Ž3åW²H+°·˜ºü‹{�rx*ŽØÔšîÏý¬I_Nà7?í¾|¬ð§û¡Õ_̆m:Ñ£ïh÷;B*ÀÆ-Žæ<ìE^8d†¤ÙƘOâã³wâÓQÍŽ.L½ÄGPΊ\;‘RXÐJmÙâŠFfRÊKºLRhã0’Èïž*!f�ØA.ˆ`E�ñ/))8… ‰ß¸!£+ÍÚ3oÚÖ…ç9Ý@nê,…â`�(½�­cFÍ/áL¿®ã‚�rÏIš§pwÁÅ:˜­òÎn–äô¯"Ùb¼þ·Åîû+rÕöÍ(\ùÒNÀZ#蘱â÷5æÊ}—Ëýl.Xu-h_˜$+©Zœ8*í|¾Ì_Ñyཋﺚýµ³ã¬¼©È`.ù«B6›ÕóŽsLÒ¡ë½àÑ?À8Ú/±vª:ì…Pñ¢÷P…œeþ„#\jÄE‰i7DŽJækZÇeó¹c_iBá)eêö“ÐüW׿ÖE¬u°ÙCmUs]Ú²\›÷+»Ku©›5¡P�GõITÀˆÎЂ¿B±m€3#þЈ)X–R•)è/®ð?ˆÙ´c4ÿm!€AÁv�Á³óS0)‰' y¨`‹ ùâp:¥QÅ&˜“QžÄW•â"*R§# ISlE°R™2½rVÛ=kðç±Ç\hAÉRTuޱ£Ê,ùVàDã©”;#OšÌ¸e‘rñ–¤ÑÊÀtÇÌô¬Ÿ!¼8A�™V³¬9’|ÐTù¸pü‰z[z=�V«ôù´=ñÙH2³�µ»®TÅå&»U?T¡›†(  ¬Ô_•liLT4†JTAMP'ÆÃb§ü¹ï»(hC@ +"d m@ê�¶óÀ i¿´Fz' “®P‰IÁŸ3vG2&MåíIT$n›‹2ÑÞö—$| ¡±|°… ©vûmÀï…¬– CksèdWo½ +\\ÞvÔ�ÔùÁ~À ÒÏ®£õ ù“Ž£ª³À V¯oQ-p�­c¿…’ŸÚj¨Ù½‘ þ’|ºô5“” Ëø:2¾d}5Í�ŸEËŠ¸ÌI–úR<¿ÇâZP8gÊ2Tõkè¦;•7ýŠ^jÄqÚ+2Ù_ +¢–`7nÿ–m�ÙàU�Ü©šmŒˆ•8´[{‘ ÞtÁjv ”D‘R¬ym(WM›d0•¼Òyêlêþ"¬Œ»A^¢{ ¡¥ž¨hÐ _ÀåÊKºµ×bcÁš¢rh¢£•Ð*õVÀ J)ŠŸ®^ä)Wvl˜©ƒ/Ž«‚€³íÉÕFÉ' [eIDÛýÎÆè&¢oLÐþY„hiâ.”4„%sÆ@'–Ëêè eaèõ29ªSà¸iÂ_¥]Ýé°©Ëfü³jÓm¬�ZAæÝ�.išs¢õûkŒ~ä”k‰aºÕ‚z²ç)ï�³&‹2Œ9›¶‘_¦ÂÒ!6Ý>PüŠuãªÕr#-C5nWÁ&¤ò’'ØeÙïÊxë”m—IË€?{R²f<טՀ ^óæ©ßZéC˜Ù—ߺÝ%\“Ϙ*lû&ùÔ:ÐïXÀTý;tÿ‚CôY¢¹;|º~0(sß¹¬ÈU„Ö;°Áå´k̶ßû“�7Æ^ÞŒY{QS¸›Ð„VP Œ—íߊt›�«^пòòæãç ç÷qƒkûšw³ýPw£ô’æ8m¾B��ãm‰¯ø+c&Ÿu3ê×1×ëqÒ;ø é,:é¸Mn +å–8Q�¡AÉ@RðèŒr |‘=Λò­Ãàüä xNàSù¤ }Pñ`¯YÁ�bOä +Öý5•¬‘p5ð¸æØŸØC0–Ï Å:¸bäÿ?¬i�·fïþ.�-…>‡ä7 Âü˜�­ÒÑ!0°�\¿Ù€gÊÃÓZƒ—êNj&lþKhO)€L:¸{‚]r�Ÿâì è |„Øâéî÷TµO‹¤EÝm‘Q»ØEžUý7/£ÙI"me›åä@à +ø!f¾4¥óÉY0 £á¾Ž…ÝÙ¢¯|îªÒŽÑp#¯\wì×Ò)‚Ü)iÁj©ðö³¿¥¡Ž¨NzE»äø Í÷ÙQuQšG¶ÆEƒûÈ$S�SÅØ¤aCaw™LVôl¨3P'ö‘è*Ÿ8ù:2Íqмðgôs‡Óùö‰ÀÅŸ“dAýí[Ôkw>g¡É•gRñcÅà®üU�÷[Ãt‚J ¦cï›ÇpåÛŽP—“tíú)y�Ó]%×@ 3ô¹œÈ˜h0þVÃÙwe®ð¾ë‘èz–#þŒÜ‚vÅ-Llâ÷äØújñݘ:î+Ã.pSRV<Æh~Vå}ÛH[|"·­& CDÒÔXQ‘zÖÿêJ¿v6wªGTí!ËCßK5›¹\ô'× œ� Äx¡œ¥€‰Ù•+ÂmÖÙØð�­RלЙZ¡ï÷+àó‡ É”yÄ�†YZÑÝ$ƒ¦ÜæívVB�›B2Xá +´TÄ+ÁBÖBNe¶ eüÿI öïJ)åqxÅÎtÛìñŸýW¤LØoÆ® +“ÖJÂ|¨¡ä:þ)ZàA]ÄçÂìRj|{UÅ Í îaªÍ÷žô6;^Ü�®´ÜÔÈWãšÄ®jÞ�RÍç*ØX"8ìql ™ŠÀbçÂ|íJ`•DN@Ú‡tªeIRñ£hÁ ‰Çe³ãËQÒ*Ö:G¡*Ä)XöX­~-a㎛0MjÌҵU`IzC�‰ !望ÞE{wY¯ +M¥s-4ŽÄi&ïAfW-.à�ØØ»YOqL.Ãe×m™™¬M_&³µ_hdI·�q +ÞMÓZF· /$\TgÁò^v`c>ˆ½3Û<}Þaô +OUÓH¤e…èû]Y{]x‚hQ°ç!Um% {!'~t�caļtIXÒðBɱ].›ÞqøªÒŒÚ'ó°üdˆž0¾¶¯^æ= É ¹Ô�“ñïã3ˆ8¸[´9®×Öâ“{×+9w9<ªˆ0[žVÂM— +Š�cÛ_ +!= ¨ÜÇ¾î ¡%pké;溙´ [ÍtУ9½Û{™´Ð‰B‰§ö™›"u mî)ŸE›²Ïdd¡B_¶³HŸJpv“D«öà°°egHÕ·öŸ€´JYæ–1j„ì¡®àþº›Šy¦ B$ ù­g#MŽyÓ<¶@Tq×]¸  AücyÛ‹r›IA3ÏlpKн/_¿ÂM¬Ù“§ßüdèÑgÐOª…û+˜{~‚H4;•ý~+0owu "¢D+—¨ å·®ÆçŒ(.ÎÄU… ~tx€"ÑÄ„( ¬]Æò›Ö=_ѲDÅQ +8À•¯®föë[æîdhÆ…1»Týw Dl~¤%<‡ˆL–V%rNAà͘ÿ0§Í…̕ٿÃ;šÃ\ÖœWÐ1~ájqiÎ3ÿ+΂7äUŠì`XE4�4�š+ŽÝ8U4Ððœ~SpËŒ•×á¹]‚ÏÔàí1#íÚ +Ìúœxëô~0±7@Ãóüy_8p=€•åKXhÙ"éjÌÏ…â:ŒxxÀS¬pæ¡ß|R«&×€ÆßÒS\`ØTŠÑT¯dh`K€ézd"2Ýûˆi'ùä@wµ¸ +dײ©(›Î¥ÀzU±Íçº|Ôž¦óŠÀê`ó°p¿ç@ÝóÛUÍtò~´QÜX‡Ûßý|»wY#¾ HÊ>¤A6\»eñ>æâÅNxáøè¦Ž¸•â``+é:HêÜ…6"—ø‡&OSËh-'AgwÑ?ÛП8´:´—}æõ’�©¨�ÌQùR¯p-å»…FŽÛKÙTÃ̳îúhôÖuÞî*:DEî|<ál�a,É/ɪ[Z1¬¾¡tFȈƒ{¹TQÊêÇ�Xºb6éå¡v!Š¿MJ>Ô4J^Òód�×r< ÌÃõ…鯶ˆ¶lKEÏÎôîa »XmìCw:@6¿çY"aßøY”Æsà­ûöo…©QU?M«¿‰¶¼ŸžÅ}:<¤#�ç;1œ4œ’q‹î±Æ/³àB¸aþÅS.ù™ñNfh†©k‡¤ÌÇeþ8Г4F‡`?¡1ØYæÛ�n¨%®$ýBö¤¶`@Þ”Ùª¯7äí��¯ô1ìÅhoãC¡dž¼¬€À²b–Up“P‘Ä,Q¡Ž‡ö·:²ï"$ó?�F�…Âo#Âaåˆ`�e¥»ûIo¨bÆúKà .BÀ1dÁ¼‡X-'j<£”Ò¢%pÜ9KÂZ»ÜS{™HØãT åu”›†O†KÌ8úyɲ‚µ±wÌÙí¥º44}h¹uÁ–Þº ­­£„¿ã’øO8_h 2vý˜|�áIeÓ”�ÉÍBLJòTåF,Ñ>¥AûNaskQM#¾ŽÇŸt~Ï4 Ã�àÒ äÆFõk�+ ›0Ÿ Îw×ýGZø†%Ù¦1¿êw¾«PáÌo¼:Õ*­Ú îPc§ýÔZ,P¤érq Ž.øG=tƒ~Ýí½�ºN'¬<´‰�Re¥«õt[Èæ£|GŽ ª“ÐÐ¥2„ˆžèµ+Šˆ®¶F3sãÂ#ò|�2<¿¼ÅLH¢2œüÏÙ¯ ûÏ´uÍüºSZÆig‘LƒæµÁ;«OØ…pÐb^ÕôäÚƒÑ`½mæ½×¸°‰ôéIº +B#¦3kN"j%0#opíÕƒ«Ù&6xCÒBPÀK]1T,â¤Ò=F´»gðkÚ^ôtú ^Žy4¾û0ãL)‚ŒÎ¬BE-´§™ÏLäKžoÞßàXR��²T)$^ ¤kŒ8•)(Ú³üï¨V){k`Ô?[D ªÙ¢Á¦{e +.'F²Ù'ú]¢äˆÙªkdð[;MÁÚÞ¤Bç9Cþ;¤”iêuÍm�íäLSüˆLe‚{hOy ÙÇ ÎÔô+¶R@;utšl׺¡ûwib#@pe@ð1�°}ª±ñ&ѵŸ3[mRðS…WW´]¥!ì®ëw¢ü`büÞÜ’áÑ XÊžånÔ“…2AÓ%bé©å½xga#<´í_cAwðñA—Ú´®æ�&Úö@5®²ÐW‘ñÍV=Ân¨�ˆ¯"žÔ'ç(ñ-Øg‰�® Ý<¥W‹¡~RìÔu arð[‰kMŒƒ|ÎI"Ƴn }xêĵEöˆð'o +ö ÍÔ­éÈxt‘³þ×}W÷­Û.“l­‚6²òªG™éâ¾³!ùA7“kA ¼a™ä2¿Ë¿_¼éÕmb)e\‰·¬.í³Ÿ}9‘䱇;ôÐ+?>D²°†‡)žßúûq+ž¸OEáÙÇh]ÈõÿvéÉìŽd|ãIöÉQ@2 �K¥<+�VøïÜ|þ?Xýð +;cÏŽº�Áêêa;W½®{•³¶êa+qïg1$ÆGéÐ9ÔÁ&a$õ¼qæ®2ïQâJ}� ÍÂŽ}Q’m§I#»%41ã1�ªE)Á‹ê¿DgcÍH}Pt·É•é~:Ïq†ï‘1û|B$q0>ÆM¾|ám#{Gš_šÙÒ}¼¡¦‚เ%^Çj\ú�3Ôœœg³H°†è¨ò6P‘˜ 6\#»#§cP“fü¹Ë¥‰Çæ4úÂÒ~m$¼ª½I€yãg½ÿ�Ã⤠AØÆó«óXýé[—Çio¦×–¬º÷ëPrO wÌh6h\B€Zsž £èX>tÿÔ0£:Pó¤Ì+´¡”^8×iCb\ÍñÝpä­�2šŒ›Ë´¡¤O™â€²fH)Û=Úä›$—Xœ4Ц[c¡¬`½\WyÜ3Úac9¯uEϦÑzx@N)ýVÎÀOûÅ@-ê|HÎØTdi^æRŒ¤s·lG¤¬ÓÕ¾Ö @´ ŽNQ7$p4ÞM¼— áü�¬ñ©ÿ4eè{Û¯¼½�×ÀRt’�KŸÔ i*M¥ ѽƒ¸‚€‹Å¤¨›4ð\é>Üâ Ttòfd7‹˜�tÁd‰c)÷<SùÍqhøG(idŒ?¦Ï¦DèŒrVMÊ…“Sºä¦„i†•�ä Øª¤€®,Ú³Ûæž†˜T6|O'΂Â)by@ŒajèjþP9ôEÇvh@¾+ |½¬iC�4£1ç¤Ú€™œQa+a£…§Eºëö*—³U�Rþ Èýö›6±ZbM×µ�¬OËÊúM™»I×q¦§¢Jˆþ6+ˆc ýÃsŒPóQmè…±¬ñVù +#Î +iÄJý9 ÙÉ­Í¡ó‡\PJ�P0p?ò @�¹´iUk¯eØÉ:¾…Å̪ތ8À¬Y-ÁˆÅ0hLËä=*(Šõ®à½<DŒƒl 9m7`á`ˆwˆž� ,&ަ!ÄD=aé‚ÉòÁ)¦Zž›¨ŽeÖB{w-íãŠ3Û*ÛűáI¿"ü@Γ­ôØ,Kä�ú;ƒ4¼³}óåj^ï�JQØÇ+.žÖQ3.€ó*GC˜óª?�½–Ñ,KŸÝœS‰‘•*q7/�ÐS”õ±Å)7ØÎ£1/‘^#p‡>z('UÕèÌ ‹ +%³£¸ðŸ£mÉ2'j;ŠÅfqˆWY')—[|æÃÝɨVµŠ‡�%/OCÔ�?È(š›o 9}0|ˆ‰m‘Ê79‚&t}´ê&=ʆZ2Ë5÷�("÷+>ùæ×ì� cB@.³øð6•å�ÐÃn½Wß¿ ¥ˆf.î÷�SeÌ£ ^‚fR7þfüÙ>#*VÙÇNrã’» LßL´ßƒ‰]–ƒ²£ÿè¬ï`S ›Et{RrHnûËÆ¡ŽG"é‹)€ �y…9r<#@£C{3’¬®‘VöU}¦j8£Ú\ØqßB‘#®ÂÒhˆ …í ‘ÒÇàX&aéÖÚÈt ú ¾¦’-lèê�áòØjêé ;Z¢°ÅÄJ„åYáÑB�æ»Ee…m¹½ãPMæìKwwçÿä~FA(d6×úÁר¢°FS û•_ͯ +$†ôUØR=›ÚÅÍÜÚh Q~qË:̤,a'Ò#Ijãñò3Jæ¼±@Ým·Æ2Ô—¡@7R'Kf>Oý›½ËÁ™ÃÜ@Æ7È/~1dʽðdy5ëMÍ©pÀ­¯à=¢¯· + ì Dêë‘…Ä·®úýãJ[uð«¬úŒ†®j”Īj<ã¦jY!¯Eu! Ž=eŸ[¸ÝA©&ÝØk8Ä@°¢AB ‡«°;#qÖB‰Ò5– `ãm±èØÌS6=r"Œ°}¢À.GŽ-¿œ[ÈÕ ô¢/Ÿ-Qœv¶mOï _}×±E*— ®`,ê¶¥I0�Èq¬îŒ·v+o�»rìC1ع[ý¹ä¼Ž�S˜6Ñ«HؓڬjhRæf(çØn.B^¼ú¬2*˜³îbÐË:{ ÚŒ��yÍ¥�ÆÒ]Òó4е{…xÁ’·(26o?µ¡S÷ÃSÜäÅ*â–±i×€XÅÑ”ãV8>šnÂÛDæk/ +Ômûe¬ïz2V$±ÇX›+]l@Gúàb›]ëbÓ ÆÊ?’Ø[ FcÅIŽŒí'ˆ#91@‰¼„=ß +»©HÚ4¶öÖ5v#INc[SGcÅGlcM�¬±Ñ8žÆ2©Ô{¸@¤±,ÍkíœBRk§î2ûœªfìDb ˆ'Ey© Á~:¯ú8˜±Š4&©í £žéY9"�5P¦û†§€'4VúaIåùÞ»‡—#�2elZ·ÂÀj<Œõ¦ÙÄC0ÀX½ì•KRŒ}ß|xì�±¶ +kl7T˜ŒÍï×íAx“³û‰/J8kk»¶Å|²Žðb;ìiñ¸…ƶÚÓhŽºØäÈ�89bÊKóeOß’”ž-vV¡ô‹úòOCÂx~´r®XùH$Û!l~é»:«Åölò«Î7u±s„%•]ŒUCÔ‹õ‰wŒµ‰àü'ƒËX»ˆÙ�¯OŒÈXž7]Èzõ.c�S!ß°f¬ �±¸ËÞ2ök”_eª�Œ­�^.•g1kÆ +’glûEü¢±ö]í˜Ë]Ë4vU&¤Ë,û¾Æ6î”ÇÞÆ®òªÌ Rc—h+ l¬^i…gRåyÆÒ¶8?jì—4²áÛ‚rš¯íg^cI@Éò(dm¬Àt2LŒ£Ìœl{ȯ°uƒwÈ·âX.ÀOPï¤csØ 4 vìF>UD÷¤âŽ­:ŒÁ±sl +¾œXîØÛ ½¼;v%YĬPÇöfÙC%:ü|¼V=Š˜cóÔêÉ;Í^"86>­Ë¢—Ü›BÿÁRàXqÓÄðÅà;•Û>)'|-.²nldL”¡üŒÙ¦UZýŸ´±«fX}B áAGŽ�,ù:ØÒ3�cWZ¬�«JÛŸE|ôiÀ©¡ûõßS²xÜÏ2}–gØ\ ŒXléXNHVÜ9v…èÃÓjלֱšÉòÔÒ]�CÚØ{Ç4Ö„%=^ºu�]õe‹ÈŒ�Ö쬂i,R}¹ÏŽÆâ�w‹úŒÍ[\Àëí,üã? h,×g*¬öN�±¢icuÔÀ åÞcYˬw¼u Âø£ÁV0q±6ÑýMÜéb�ê a`ãxlÃ)cø4ai[}”±ö½ñ@Â6 +c}!a¶ù\‹±rÇ:j jaìÊ þiïÅV¤¸^ +Œµ Ö$û{‡ô]l/Ü÷[ â /¿g–¥u°Á: &®Z,ÓÄV»¾ö©o&ÎË íV�e–¦,¶êzžP“^,gáIkÜ+$­a¬ÉXšz/kô‹]J"@Mïëd`lƒ)¶MúÏ 1Vâ:rú0֖ߪÒ7Ÿ.sÇ¡’Å:9e,˜[l]3Ï?c‰½–üµáâmK�ïhŠÁÈÖ +‹ÕÛ¸ŠÕ(*q+Ö%J(˰åšÅF^@ Æ:ôÓêÖX�þ÷*['ql쇞vc'‰*™s/,o¬z,XPzll;YÔÆBZŸ¾­çÆJÕt»\ƒcmx¾!ô×ÞXfªpÔULµÝØÜTLÜ‹·¥Ec36χçØàŒE~Ïe>ÑØØÎZÂÆ®×ó”ŒbÌ�ELË¥Ø5¼�»aIP[ÞØ2§Ç"½æ)ÔÌc VeXNø½!4ÈÔ+ŽâÛéXˆ¢•°ÈŽEy!CAÇ^P�Mzy‚tŽÝ”#éH^UÀckæý‹RªJ±c§|²e:Ö¦í—iÇÊ0qtl§,Œv¡°ÖZ†Ýh D¹bkÚ–ߨšÔR„Z7v¤•î�]+01ÚìÜXÝÙ¨Ô�¶éoì7/"/³Ænåw´tÚØJ &4޵]ºÕ8& ¤�c-.�~Ju×±“oµÍ�ëþs:c©±"Q¸½X9¤± UQd˜j¬�²Z÷¶Ü46…9½Œ�JàwTaêF»ò�ýy¿ÔÛ‹‰›=¤‰Ì/6 ²ó× c‹¼áÂ[AoJÆ–ŠÄ Û¡æ82k³»ÁŽŽF1K`ŒÍßÍ“±P‹®ºÚŒUòªlé$’Œ-À�…}™ 2UƒUa§(=®¾›ü§ [Üý?)5ÖÖömÝ5–Jb¾A5v."ù3rz=NcëÙ¿Vo5‹fþÍôö´�-œ´®v«pc_†k7k¬ÓÉŽ’�•P¢µ±u˜³ôɲ»±ö;7š(ˆ�*J—ÝdcÍ�[cÇC騱õfL{2ãÏð–1(žMù¹‘ÁÞø«žÕÐrÆÆA–Ù8üák ª3ÆÆ1§r'×Í?T�™VÙüT†w‘s‹ÙÆ¾× +Vúc‹•£õbõ^̉ýe0âìB],ÝèJ$Y‡åi N&bו+·4±𯸉lêÒÃ9?߸4c},V¸,Aã¨#´¬XWTjÕ|ÔÕ|KC×ølbŠ•y/z +-ò�¥X°÷®“f#Ö®ÿ=Á๨¸D±7x $ƒ•b�ãBܧXÅ@‡ì–¦Øär`¨Xë…ËT±ž÷A Ù^±ƒÃìa±ÜëŠ{o0Å£„ÿvGÔùó,Ö±Yï©Å’1Åk©ÌîÎb‰%t�1»?.¹b«ü‘ËØ~®b)�­õ’´£4Å‚áæ¿BŠ;Yòë�˜üëŒÛ�XbÀ«¹mb§o%0±µ³ø%VI]e^æ‚Qý¯Ä2‰Kõ“Ø‚\(‰Õ_蚘p®{Š(áT{…ñ#«Å´(·Â|…pûx¸dÚ‚XzßËó¤g nf[ÇàÜ-]O+âC{QÝaG ¬Ö¥Øµ9šù2jƒ©�§(L’;'!J/aØŸakß]Ç6^û‹Ä¼°7ªôÁ}½Ù®…�ž.^ô~vûA³;Æ;Ñ­ +¹{T +ë_¿•Ý(ìDÚ¶ÞQ +i¶6IÂN"i]×v$¾ÙN„¥ŒÉŠö!쨄b{–y ¬n,^øl$á·fΪ^Á+ìEUü,ó�©* + ºÁº´N—q5XCÈTØÎ`GRš€Ár õ_°ž·‹òlëдPÁF¸ `�‚=§é<Á"�¢'eÑ]ùôÛˆ`Å£8ó$€ÙDå>°—Ghðu`�çÃ_X2Þ—Ž`K +“�uåZ9š¤dÓ +l¶sÔ[6–µŸHßë�$@ Xáq‹)`mè�‚;[f,«¬�°‹E¥¢ä(ÀŽó«~+CŒ³l"þW©Î +ÙnàÆÂÉ�(|Èe|,Pé_]¾I0þÕÿ9p( Èõ×|ÈÂ_óÏGgõ�þâcûufoîêW†Fè]y<¸™_£‡}ŸË¯%Àµûã×3k ‘nÝãWNÞÜx†*Œ‡¾äMP½I‚¢<Žö5ŸQ`ô^*øœV_£š}våhªÑÆù•¼ôúô‚èÅ \��(_Ë�n:<üã+Hbþåã+�ʳøJÎ5ÎðuFÚ¢|-,nˆÔØ’ŸW:ø†p »×©Õ黸×r8�ÍØÜÐøØ«ÏëŒcÒ�ßÕLÞ0�ÌÑzÝ©Z§êuÌyÑBV_Úô +ˆM¯@ô +Hz) Wx„D¿!@çÕ¥Ö÷敲±ÿ½ó +ºe~Iæhæò*.¯ðŸò�-¯0jÉ#­¼ÂFB>ä~(ÇåñJ‰0´.ãu‚ù„öÂÓ“²SœMÏL*‡W•¸?¡ ¯&Lå½—Ó‘áG?ØGõ|U ¯²hÌ^}]ì½NÚsUx•"¯2�E‹ˆÁ«?8ónDä?xõ=¯± ¼ +Büñ•]aˆWŸTÛMj·ôßЭꕥ¨ŸDØÁÊ«›2è~=0NóÊØÿB¥ê„Ĭ󸨺'’­ïQMyk¾ð.éP$+èûݰò²,U±ª{¹æ ¼½àin¿eX­çy’þäÖ$­�´£¼2öa¤·¬wðOÁñÚ°™O^Ì›z>®ÑÒhÚŠõU¼ŠƒwW7ik35 éZÆyìèTáuŠTɯ�dð³îz*4’“R]›‰5nkZŽïŒ¶ÙPïJó õ‘ ÞÕè+¯jeÈó$j� ü§À‚4Ý•]“ÔÓœ?䮓v×q ®ÜµŒ$ùç•pWú%ýE£…<"šÛ5ÅÇò2…†pg»‚@›-L®¦ÚÕH† ß}È´+9£ò®˜ KÅÒSP·Áô>¬†y{Õm¥iصë¤<ËMT1ùu¥ V‹dÝñ´S°»8®—\W£CZâb¢À‹‹¹ÀX]éj,ÆÑgFè]us²èËÐÙ�Ô•2-˜íäA᤮ÉÖ†…Ä�8b‚Æ,zÌ IW]­óº ëµ %¯ºöâ*Lv¯�½ªë°ûeÅ©¸ÜY|ÏêJjlÚÛTëâ”u%¸Hwx/»ëºÂæ9z]ÿÚq! ìz(Li +„]-ð’¤Å®#ª-±˜è-³}”e×ûë×HJ[²k_ÂȈ\ò™°»²+” Ê ûµ9Ž¥© ÖU�Ñ$CåØŠ¶Ú'Êï³{ÉGûm‹ìCmû(»<‰52Ak{çP]Å¡îÂ/³[U¬«¦åÙ’†\Wa’y˜@M(íi�qî` +ÓÀ³P5v 4̸ŸÊ ‚‘]1ì÷Í—?»Ž6Ã\.Ο”O›ªž’ÞIÖ®ãÐ/¿XÛõ"� ª÷n!˜]8µk¶) ébæ%‰¼ˆ~Q]…4iW‡ó’}` „ewæf±ÍMÚu–âÊ% ]{ÏUuÉ!èztvóÑË-ð¶1”¸ãú“›©¨…á¼ñ‹º)àUj2³kK|ZÍ…²Í®ć»j‡ºÏ®õW7šžbË¿�+ ¤ Š£ðgÍÔz‹jùqÉL16I«¨µÂµo~¯ë^ã�€Ïôòæ6Är]qŽÁMòP€É/XW³aÖ*þ[]óôÍX@™�*V×0Oü…”anâB’8ò XqíÍîXR‘,ÖPŒªoÈ*]èÈb˜<åO_ÝLÑ¢«1š‡«w†}Û¸�ƒj¸25/}=T'U…kò‡3·äÂÓpÅïck_ÑJrÒètüýxò°+ ®×ÞàÃ1–I\»o¥=bÞ®½=F/q…oæz®}ÊiÀÕ +ØÕ³MgާXµ­=�5¢£ŒÅà‚ÁyÛÚüp1›öNFµ¿ßÚ›Ë+—xº‹�ÉÛ[û(‰-’°ÅŸ0AC¤ÅáÿjÞù("çðÖrãÆ˜»äÄ[mIp2Ðàwë­š±Â<›¥™Ú­Àö3&Yì^ ªº•ýjõbù éV±B:˜yó»t«†àele˜Iò¸Êº‰äV�>_5�AŠ[黼‡[ÏÐ>7‡ <ÒÎùmu9ô n+%r<“Í£î¨Ñ0ÌqGóT#�ȵIïÚj§Úp çË¢Þ£Æ,¤êã¤a{Òü´5áMû8Ã`²·°µ›ß€¡­,}¥‹4£ÓÙ:GËÖjF–ÙjðñT*î*Cæ:ZÙ*P<²µ§?5Æ6G¤ÉSXn"¶®aªô¢_„­'Óø&ð)ˆÁÖÎIq¹D6³@~­}R] +ö‚bóZ»Í [.Lt×jõ™™e€¸V:t)¶è”Hôk�ÓŠ¯á ·¹Öš¯·çW[+ì…\âŠÒZ­Í„ðaôLßK�!>¶‡ç`ˆÑ�äÌð]Þ’E£T>stream +s0bZHæ²MÔñS„íÕöð[Ƽ³nÂ`Ùq°¦l‡  ³Û*n ¢³jœ\ý†‰éi@°œuP9 \iâ¬Tt×~ºÀ7"1è!Ü.¼ l©mF^ZÖU)µ N‹fþÓºŒLx¯.a6•L‰Q ÌE`V�5ƒî-^T£Ér¿¬å °$JD×eÝõæöÛ _–‡Ê/S ^(�(bÏ� d9-˜… Mv“²ÞB„ÜmÖ·“õ×üÿÒ]sÎmY¡UÖZÞ¡ÇάTaÝaCÃcô«�N¹Y�ñè�|3ðtÇm¢˜§&¡Ön`þ!ÜZµ:•h^`Sì ¢$­€�¡uÌÉå¸ë—ßÝeƒØ{6ùF¸è)Xë92Ô$Éo^žÏP­_§ Šùƒ×8iV›0½©±åÁ¼m„´Ì~`qÄ‘‰ý¥¥³>®;“xñ^T]ÕKóõ;KBa^ÁháKTÆÉmJw­îˆôDÜ™ŠìÛœ7ËÀn ÆÀA$‡mH¼µ àÊ0#ç1ˆ©‚œ!Izt-Àôp÷þ »K`y©äJ…; +É.Ãe°D1ˆ¾jƒ &„GBà8#?õ¤&ÍŽ�ŒGi-qømøAálô“!¥J–6€¬h³o%ÂjO*šQ5ªÁUÐgÒ(i– Í�ø£žúr)pLhå8y7ÿ‰·BÈX¦\À¬0×É_Ÿ…­ÊÑÈð»Eºš&S€`5w­ãÏWL4”%\ÛÛ=ç c6¦'ûŸ¡ß”l.ª~ƒašs¿ãgÍ%‘gSâFSñ$Û ß” Ns&~!:n?jaÞyë‹*4ƒœÐå}é,DªìϤÜÝ”ëúÇ�o2¢²<.—•ZI%ƒù?ÎÏ„zÎS�F³ú8O¦étÍDðßp³¦S2I ¸ÚDlXfßè�jWêɲ:.„~ˆ2ƒ )H~ƒÒ9[p�¤ÂUŠBŒ¢È š |† Ñí8áÂ!H(g~`‰€XtÑuÔ‘÷@ç ÉÝNZl=A&MÏ!Œ¸d’„æ#ú™¤ÞÄÇ{3éÂÅ¿|=pÑ®ýÔ“ÚF ®—kÒ—wÌ _bÒÕO‹Éø—cxÄLŠ6³\’G"Å’Ì¢?òÌX÷i^PIší…Õ¾¤N_‘áƒ4—t†#÷Å8gIÚø‰ÖbŸã©zµ¤JŽe«=:‘Œ�ŽDËâ3"¢ãžÑI• ÖÆ^‘@Zy5øiN»x«‘ä»TgÓ!#*øÃ¶» öíJ†û^°¬'eÀÕ�¾›¨‚˜SÃÔÿAÓöšRù0R\O$1 ¾ÀåC–Ê6ÝŸ†)º‚þÖX-RZ#Ü÷"r¢¯Ò›“_•%taaœâ¿]J€ŠšP ”ãò§TsùWéÜØ€HŸ9࡜@<•Çò+ªˆ³çþìE¶gK÷´«v*¯¾¸™8¡�‘[Ô�1YЊé›Óˆ+•É ¶ë ©ÀÏrÚPn Á¦!x²¹‚™ÁÿÖþO½º#tIÚLÔÓŽ&S#´ª<ý/�1‚£€ >ßû�‰ ÷h ëºhëqòˆg‹6ÊÌr]Ý)’Ý9Ku°V˜ÿa�ÖcJ£“0?ÈÉK¬ïëyËßm3‹Râ±›r‰¸ �iѬC­¶Rñ½–í°ÏÅLAD¿ŠDð¡÷Ü”Æ*5¢:É¡²Ì UØ…4ê¼9Ct¥…ýÌÀ’mQîêÞVøÙtçY�RÛº…Óßê !œz_`qˆeÜS&ê©à%îÞ‚!zb�×_&æÀ>»¾öõr�@{9€J�­6ËíKEü–sÓ/yÿ{D|‡,q¾’ëT/¸oH1G‰Wñù¬ü¨„§±Ü\ªvL6-ù´Ü‚A`ùØé:r"~j ‡ª­ œÉÕ¿ð Ö=0ÿtÇè÷E?¼ó¶ZDÛe*˜Ì›£ûÿ݉Ÿ„J}¯qQPŠYßA ó$ +Ú5}ZÈÂð èd‘ôÏÕF)’W9Ÿªù§Zqo\³=ÎZÊ�K(±Ì2ý¶±ù‡ßŸ wYÉi{­šG|K¡«Uo!n ¯. –Ìá�jl�HÈÓQL'Ï{u�IE$[À¸ZD»�#tý áªYEl’ÿT)L¡ƒz ›RÚS~hÏ>˽ö V1â C�†Õ.+¼^Ój·Hΰn§À·¤"ÂXyÈ28ŒO(H-¡%Y>×ûN*Œ€Pt½]Çœe ÕÈX÷±Cê>ÿƒH›X�‰a™Âþ~M§I$�½ýÞzfk§ùv÷Ê?z!Xß&x!ǤáÅG›ÙÇ­ìŽ2CA•DëØOŒ©lß]Núí¦*ØÄî[6êg9õXe·WÎUjx^`%få�ÆEVúÙOeÈkf¬ÊƒSåxœþ?‚_ œýŠÀJ.ïâÒO‚î“ÄI«Õû>?�å›3Çâ!7 ÞÐõ¨¡� 楱Ìi+Ì2£TϺ‹‚Î+f…ŒÐü³–€8qà”Ésã$��. 0¶wÓ�KÅ“PF$õÐïp1?]b|âc¡”tŠñ¯Å½æ¬ô-/wHB}˜”¦8º� ²Ÿ¯Î�8ôu7L„]¸Fx ÓqQô:3/æO‹TkìeˆfÞ8c¢ß÷:†Â¶´oD�Qª>;ÎOWòêo¦Ï~冾)ìÍÛ£öf€¶ aÉhƒ|@gX?�Øà‹LÀ¬ÊÅÞã|U /eš¨þʱ|L¡Ãú +C2×Sæw;®C;÷ÏÈ'–rX<=U�¼q¼ëýóq†Ê%‹qêðUR ùµ 66%ç—Ü¡¥O™jyN™^)WÑB�yÿr?�!+4Új{eÄÔôõ‹Œå-,#ìJL¾ Å:Í2Fó—S”-ÍfpçÛ~Кeê¢f¯=§ºÕæ×cd 6 Þ«cMö }C]È^-�tæàèÁ R/:V$öÀ/½»™×XwwŒT§ØcŽRozëÚdS¬§F¬B“»1c�É]‡±ÒýR¯ì‚¶%{”…{q¥§b–’»„â†9é†ÄD©( ½ �à“ž½ÓèqNÞgÞp€ëû/¢ƒV“Yši´#&cë.mEí‹-ÓIù8&ˆ˜áž*¦·¡ eÂØBr1?$±öG»±i?n0¶eœû¹Èj¨h=]"Ý/oÑáV6†¸…Ž¢CòúfAï€u|A—ò@¢£Œ-ÿ+(·ÛúpÑ^áá¹ÏKžbûv¼‚B8·¦ïý•ÛÍN½åÚawÌ Nì}¦Rp¥rŽ©ºŒøÂ”ÿ›#ú.B'ˆU&�onûO¦ÅÔDùûþÑ‹°èKZù÷³' ˜W¦¥õ¨|6g)ÖÐH¹“}åä…x†n3¼"5“´$_Dx܉¸™äÀþ3_%æMñm ·!ùwTZ7J<¼-"¥þ±XŠø¿ýnH£ô•ãØHbu»Þ1 ¸Á~e+§ÿ%Ó~-óö‹×¨Å(Lᙀ‰TÆse¥Å±™!_ƒh�%†ÔKzšVH•~Q`Œ!ùTÛΚ?ÑL5|[FÀ?--úºT!+O6ÔwìÑD¬Xß6¬€4(�;‚öà‘²Kój«Dö�=Eô7u.$wÎl^L–uþàCÕàÝ“«:ŸiõF±+mk®cÅn [³zœ†¬=;-j:U=eŠ¡“±·¸LÃÑ,gà¾%1Hþ™Uñoà$•i3_øh˜º%þ¤% +Mš\yènfxOÀލi�ïNh¬ñl„�:Gí¦a˜ß]Š¿±Ô®÷Ñ�Œ5 w£§íÀÖ6¸²[W¤9mV¾8õhð$OóïQî[m÷hFnG�ÕÇ™…iŸî°o”÷à�<êbTŒ0tç�VCzò45iʰ¢D­[Z[‘•ui^A¶Žjý–Úñ§bñV¡áå7p{m¥(![•©陡¼/Gdv",_ 6»×të2Hø �„ö¯z¹ï"0Qq\ +°ˆ­�õ|þ4& +BAs>¢"�aMÇ|ØLÜ]ßüRG–/gd騴gõ'ït�›§‡XÙÅùýtQ>è‹ßêtÓªÄP©ëæBp¦TØô7ò)¡ û\Ž;âa/ÏU»IDM36¦ +H–fØ+pÏs�_ñö eü]€�?þQTg¥HSùæál‹A³A€íQbœÒ¬bßÅWÜ>­¼ìy)]½ŽÚ Œ!°ßš%|nJÖûgEêfd$oõœÑ£ÖY…ÿ¿F—ø€°êÞ’\Æ]¹W9Ñe&ýLއ$‹&ȳ"½c.hÌ{/º`N ÷ ¨ã‹ú¡·b˜¡"ßÂ>Ÿ"�Ð#Äñ*îì ñ?/¬CÆ~—S' ?6ÎF{øM’��^rŽJ¡Wà+’iY£“̳àLÒ…4Ûc¶pØÃk<¿þ»iÕ8‚ûRÀ.ròJ׆wÙÅ—tˆ¾­Ë{0ÛD§„åé¨ÕòÞ~î7Ü®{©lÿZ×Ù-å\/ÅÝÉ+0"ÃOEgW#@V¤f¦³¿Ÿps:nb-E/—16”önš¹NÉ;ÜáþǬÔ;ÑöŒÍp©Æ7…åt'Ø#>»ÐñC§Ge²NΊé(:XLˉµs¸ÝºŸ â«­FN±\USºXå;Áòx¿�.¶ñëCÅÐ "%”ë Ü—­ Ç�b¢‹­xW‰ +À,àUÄ�Á2 ³®ç ¤gâKöfš%ö”ªFô:·'aÚ Gäî©l•K}…uA—o1± N÷ê¬�ë 㧘š8è HŠG••é0dÊ–>æ¢n<‘ÏÈ��Ý +«ÂC,ØÒ ®†…#˜‚þj…GÚÀ H£¿º;‘eYè‡d@Ýμ-èKF‰"5pö1mhXN{TÅÝwiöÉ‚hMµgH:Øe'+ �Ê™¤ ðÑqü—T«Õ“ß\¡Ù†¬®õýÓÇ8ø©¸ÚNÑíR�ÇÌðõEeKŠÖ„¿)äÄ?#1^ÝîÿO(Ÿs§s¡­R*ÒÄ¥—0Ä^J»´òRø¢VÑQåwÇĸT­¡áÀ�e&$éªpL®•=»È©ãØÂô �‰1Ãð›¤sZ´^n…yŸÍYšç<Ëˬ—¡ƒsw¾•‰……y‡q ª�ùûáV6ÊVµVp×]­|‘]Œ +·N¨<…PiúÐm}„W(`\S±ŒxÔ¢©{t +8`©Y<÷’¼œÚ3åþì =JhÆþ}[wˆK¤¶i…éÐZ€ ¸\l&Õ>Q|rƒÅuÞ%†$iäi†çÑyáݨ‰öàWv;»N¶@ShèÿàM˜Í‡1�ÔE ‡…êÊùW˜ˆ:"F±Ó�„7LÇzñ&)�Š’§»ˆÔâr”¨ÔCcíä…Á;+ >7N |*ÓbèF×z,ͦGÇns>§­-w>TH ûä-ªf%eçDL`�ü̺Ð+áÝ ºáGëä +ˆ¨ˆ +·?‹ªGVe¦Q„c•ü,Ô%SvÖñ‰Wz‘Ñ6ÀDl%Ä<„‘(qgÆák¢ ­¸øÊùŠ&¾!‘�üR.Tcæz!³<êâì�ŒI¨-åGKq5uA±tB�e<æãÃq “:zDй;ÔŠ3¥€Îó$1:ëðÿ-ìoÙA“CR ÷"Wjûª ¿?ÞD ÎIØçËÅ©@ +W34Ç…rÃU#E•J^jïÖöqóÑ{Û€–�ŸØR‘ñU3ú†Ô)Û�Ü�ÆÚ~¹4Áë± Ô-tcìèId…Û”–HÙ�‡¤SAâV“÷˜™!Kwç×WÄùmXu½§egè&%dúwy²ÆÅ±í\—QÖ£9>7ÛGX½Ä)¾xîHÃûÓ +!Aê÷ ©Žª‰ÛýýþŒM¨‡Ra©?S ék$nþŒÈ²—扊+¸ˆýä¼ ˜g+õMŒ~ZŸÃ-¥2¤ Še]Û z~Ù~ÚNñ'ù€Ù{9%€0ã¯ûé¨Ò'a"öS”0W8È Ó±´»v™0�Þ`¹<½jWÇvËíÓÐÊÔãyÏ¥ÀlŸôÈ#@²}þ+°\ÐîSøUaú ·Zçíê õ¢Nl~Fo¯Šlq•®(äY9ÉJ¨øy¦¡(禊à§JØ8¥mŸÓ‡pÌ _ö™ßÐGå&Îï>ôsDÙûTÀ‘ð}Þ§rtøÉ�VXáçÖU�S´ ­ü&!È(ÇOsc[0Ò~~‡ÁÀ1h¿OÒÕDSDâûlUsÅ€rDHÞrÊ� f-`ÖgÅÞôy¯ðjµ3½¡ÏÊÞ¨‹ø„>(þKî|.TЀ†Íl‘CýrIK è+"sè³UiÏHºÞGÇ×Pª©-øLPœbF«Š1Xû_L”Ì–fÊë¤BìÛQçN‡(ÓÜŸ¤6Ö{\_x OéiŠG¦ì`ñ™„èZñp¼�S7¢‰fG5rˆÜ þ§È;zñÌŸÁ‹#ªO×7¶!“%7߯ÂG>¼Ã?šÔ6[Ð9§½´DdVî^ <” +ãHoóÐbFpŸ<+¾etù  ¹U‘û0‹aIg¸dˆ¯áOž;ïxªoÒw×r»!ts2äÈàÒçÌ;‘FÚ 9#±�‘ŽÒHkùª^JN›‘¡¿�{_1ä.ºŽ¸‹æh']ÛCGÞ11�¦Ž®AŠKæ�•g727¹}ÈÌ[b¨úA8•^ƒ–¸¯‚ßÜÌT¡ºç¥!w‡¾§%¾þ†¥Y³÷È âRƒ¨bª3ä&û °@dT¡¢ú%0 ¥7°?dgƒZýǼW&#긂‚õk éúIší—ÚàF©KˆëNí�EQŸ³(Òl„ø™ŒáX¶®¢Àj 5Þ!Æ á�pƒ@z®�†À”̦½î/=íט¹õ(òî#$+û•ð¼è/mš1+ßu³§©ÕÒ8öï3ãî`Pìár^’îò4P…÷p oÂãbÝ —;9†Áã~&„n[v�Š¡÷Ò³ÁÑ3å¡óa%÷‘’YÒÔ¤QPpûœþ.³öe’¢ÄYábØ+ï 6«Œm»øìÎÃÉÿÃrÞ™ä�©ÿ _¼€åáÕ ÁºÚ§Ò¸¿¯­èÕbòŠPJ�¶ñ¡`ßCtplnM¤ÏâÑ/Y}ëBÊ Á¢E–û¿„�ÑÆ¼”l>´/C_jµĦò†Sù9ð©ßga5±ýy­Bs.$†�´Òõ�„ÖÀ‚.%: 8ÁW³ôK£×XRªê¨»UHðOeHâ_ýÉÏJ,ÂÛýS“––΄ Vé›mò +m.ÞçšCgœË‰Çü Wt.ºäñ`]’ª¢K•.fÎ:0ÝTÜ=3£³¦sã-íR—F—;~eZQq)Àv24róyó‰"¿‚fèQ§_“Û&j¯,Ù´ÁÖ½#>”dÑ{)ƒØâ¨KÉøäÉ£ŽÈxÑ ñ!h + Ã1eßv|QŒß¡ ·œÇý™Vã�|U ÐüÄ,0mUEȃ!’kËWu’kÁ©žöœ9h¶ì_¨Ô�{<(ÿvŒ”;Ù+¾ZÙ¬\¼Z9ÓˆÙ4^Kªæl>¬ðµ,ì÷½=H—›3x­Y®¿[ Ò„àlB,ø4)øé±õĘ«aÄ@Z»T…y“¶ÓòE%t?‹iéhë— +qŒ+4œ´"¨¹¼°ýœw Š‘´h&W:)J+¼IvÑ�–Kœ¹©+-9M`Ö¬\t“3ZÆë�R–ú'´bx%²«¨ M­ˆD¨…²LL¢éç‘AL¨B "¶YÎx2tq¦fкq­IU‘^ˆa �jÖäôÜ8Ë… 3´§Y!a¹ÎÔƒfñð>ãdvÌ24‚^ƒ!˜µm`¼4ÐÚÜZ–S°„Oµ²ÆlÉ¿0ðpF7¹'MhD¡a› Ùu\ÈÖJS‡(ËÅ ºî!wPÖ ”heiò}á}HÀ•5Â0�÷CQ–SbÉÇ=Æ™¬� µÒÝÔç x—sÁ}ªOYÁR:–¥ +ˆŠÅÇZÉNc…õ@�#l„g=FKض +n¶XŽØ­½üÆX³a~ÀÝ,&šÕÈ…voF,T6É&õŸXL¿ ×½ŠB"é´$"@�ìˆå,K Б…êM~︟Ê9¤^Ðn±X�‘À`[þ�>8w•fäýDò]’k‰ÒXòwpÚ yÁl׋_uS¤,b� +t¥¨NâÚ2»£äÌi�is¹Ï(¼*|á’g"úÜ+¹ õ œ&µ%�HûI)NãÏ5�ÞÐ#Pò‚™’Bî-˜dü¬ŠBÎ\™+Æåmå9¬Ó9¿[~A¥„r €#—$dpt’$п¿Ï†,Eƒ±‚‘öè½¹ô£K·²4òÞíé<ŠÑ4k¢#ò`߆½ðk‘°‘ξ!�ב ŠÙ%Y/5Àm« Ö/(pHMAÚ (‚iÂD’¹ÐE¾píÊ#g»MbƒåÇ)Ö!O:¼uë4;ü<ßyxSFþÑ‘¡ûö& ÄN„2*ªï[N«(Ü%RFÄò¤9fgP²Ò¬LüyËÀ'à +/wXŠ©Oßê_£<Í¡Yª¶–ã¢\�¨\s ¢Þ�eýou ÷5®ÉÜX>¼›³Ó, ÿ„Ø Vð+kæÌT¡ ÄBmI)�1v·» +@K_“é.ò S'¢ÈmqÐ�ë6i(Í�;…ŽîF'�Ðá¦}Ó]$•¬×’?Ý@¼7Æâ7eýêÅ„p±"ÅÂ]6±¨²©|í²›¬pv‡IÓ +F¯¾çŒ�ß_» x~ƒ£zÍš” gøº£J†“~—.îQ÷Þ%³.¨¤´‹÷¶]è͸Ë¿ ¼|ßÎâU»¯Äµ»@š© ¶ÛÅ”‘rĵË|)ØÄTy qA#9uMvIp×®­ÙZ’ù}²š¥ìß_[!.4àr—ôOmKŽøê‘›ªÃÐp“¨x׈�¥åý»0v=–T§Ðï¥}myT+\<¼8Üš„¬á£¨æ�¹�ÈQgtŒ‘OÌÓ‰‡èâÓ^\ã–{ç„qú]ˆ’ò¶›†¿ |#ÇžîR$Ù5CÝ· Òxf0ï²WÃ…Ÿ±½ �:ÁxÑ¡¡3•­�<í%TÙD¸C´Î Y±_Ú ŸNÎ…NŽ´N£¾x]¤êeøú)�MqûK(vðLwSe¿#µîòÇ|°„"ñSb¾¬÷çí%ýAÊ›Ft‹véMm0þƒ€5î#%[Ø›°½´N˜vô¼¾L ™uÉfC–�Ÿ+�ÅŽ=/nqŸØ:¤eô»þå°t4Ä®Ùu¡¹b‚ÂXÿȸ¨Y;æ=ÜÞÚK:Pá%ÊnLbàÙ1Þa y}ôxz$´»ó\àø U¬•<+„|�+`ã¦é.×éC}4ïâòªƒˆ(ü>CÙÒŽ°Þáe- (á£FUŽ�®¹Ÿ Ä~² /Ø9^é Þæ°ú­»$šU#Xr§(…\˜óÓ´Ê$|r'Õk¾%zº½VÙ ÀµCéÇÝø}—ÐØ‰ó.æ‹ûi¼@‹ÞAxñÒg!a ++‡É™Ýn$¥JÎ + n³âÜ¢‘ðòÏ6gÌ}oûDæ /³Ò¾&¿‹³Qé.B½£x� A©´àÅ c4ɉ—�Œ4�ÑW<Œ€ UGE,Hõ ÄF¡Žd$*MuÉ•ÃÍÁ¤€ë3�L�ǶÉqy –r£¯¼}=Ò 2�¦‘åûÛƒ“¾˜ËEÜZ’! “þ7p^Óµ.j¦ 2uTÐ`;½W–ùØ€Z3Nás©¼I&½æMÍÒð�¥’抾‰�ò:a%Îê1p?Fzl(HVÑyæy�ßlr(Ø(¼êVÁ8Jx3ÌqøÃÀn†²ŽÏÈÞc� @:ñ}è:p Ñ@é…9!­H¾Ý +Ô“lÿNbÏ"âïŠi�6|e`$•a.5ŽTõtÍÌÀrÎ÷%›wK9¹~Hâ«ÚcrË·Ø"Û;„P_“-Dwß8¶bÏW®1íN-ïQd½Jó”ìvE+|Z¸pÁô|@Ú·+Ú�å`"¡‹6õt½ïž¨�2&’Öèù¥ ”¬ƒÀ0ZÓFD0€Â1O³5‚‡Ãz¦ˆ,5sZ2ˆŸ5%ÁD讎¦<ßÒñfTðYç2Npnuü„¦±I(ëB¦!$öŒH0‰…ØZŽ möµ:,ÊM‚]FHYÅdï$DÉ@‘#£X“ÆKð¨X´xÀ"À2ƒ£ŒjÔ:ŠóA|åE«FRÝL/snÏÔ¬?AÛ9t¡W‚C…ƒ”ë�ÙH°U`?Šû–I¶* F˜T@ú:Iì¢$sAÿo5)x¢'O*ƪyîzÖäxG9Ú�ê·’eã”,rUg?òžò!§RL Ùõ¥£A¸žc�ó�´�2é(>ZmÈÅV�ü~PØ-¬…F�ÞO#‹üH†þƒƒñ¶FÖ‚:ðTÖraªš(þŒR&¾ˆ=@¡×UY’®b ߦ¼—èгîJ¾›¤áÄS³üÁ›e0©­KTÉ&†?šÕMoÚDõUÌMüʯ°Z4˜°‘€™ºÇÆ#6ä‚éÏ2YÊ„¦ˆÐ¼¾ŒÞœ˜z }Ý ,žU§, *îHMOLl úv$äí¤6(¢ïGÇèLª™ËA! ýâ  •–Nxÿì[ñuÏ?Ó;ddT½fb |¥ 7n‹"þ¾ãÚ¯†EŽ@ mÒÈ€-´çoË\šÂ"N½UáZd»ádÙÛÀÍoøš Òý:Še$Ò­êÕ/ÚÑ0b*É¢òSä•Ì‚Ã_râE=›-îX&e€Í¥Rdþà–'V‚=Å�3€®ÒÖêX>n S~™oxc ‡¥¾Ú/!ŸñKÇjU±¶ø®ÎdAaÐA„á?¦h6~db<ÅQBDâ 7zX�ì‘ÁþÜJbSâvÒª'pðtxEÄ&·0ýêÞß,x{%W”µ¶³Ì�C†z¦ðvÙqJ€ßZ™±6£•/e|xZ#ó.YvаX 'íW/ÐùR* FF¹ÛÉô§µä‚Ò1Å×TRìñd@mï®Ð þc™ç5A9úÆä¿ú  Å"nsǹ«RO°I•›ðº�@sñ}RÝ=,’×xu§—d)±Öt%<+)”}S¯’îBõ›EГ )v'³¡TQHµôPå�ÔŒg�[4›8eJæ~Ñv¹ZŠè—$½`§2)¾§äDÓœ<³BŸCŒt_ü„é& ÌÔiùáË ·»@ÅDsáy‘ÔÞ„\µþö‰Šöü)´l±VP\=“±ÉP+í]ˆÈ«C²>�ÿšb‹ïA6ZL˜}€{ºÅöð„)Ád·ýÎÉ2ÙƒxÔ½Yb8>ÔPMkfU/;ehtÆå9>À™ˆ�Ôã*/�°6@g ý Û7)ímžBî§D'¤ŠÉ¡^ ½ÛDÐmŒª$Þ PˆW�Ý:šµýtÒ­ÛØÌu««ŽÖ �Çœ¡ïc`®Ô_‹¾·Õ¿´éT)FëìŸ{V›L„)\̾ìZ«½zlÓ +Þ,Òèt†ë¡þ@ÌÊM@f(èì¶›iy¯ýªÙ”_Ôæ@ºƒÀ*ÞoäYûC/‰‘üêo1 +Ù‹Ó‹.¼P1~^ MjbßAv€‡¤Ý•âˆ"RdÌBoTøb7›gKÇ*듬úvê›qú65rBÍŒábˆ/;UÆŽrüe€ú E¤Àù8Aùvš«@°J¾vDŽ܈Øâ0gÇ̺‹±“Óeï±Y \n§pøg@ü°l|yŸ6`Õ^ËB÷Lÿ!m‰VEL_ïá™ô`öâ€vþÜýüè/ŠÜºDÃl5šÓK�”qp”IÀ‚³^?·¿Ä¡jš[(¤”Ÿ·ƒHå¼ûêHh�À„ Õ#&rV/6+X‹Þd¢–2Ç¢eHØcŽzÌ BPÄðè‰SLCã¼;›n&�ûíÈ,Ý�Ù¦ N#gð½äÖ˜‡Ág¹ó3¢9(¯ˆ½LäÊÊ=�cU|“L¯«m¸$ô\Ë"0Üb«K�®FäöÕX�1QFGṟð½"ªÃ$#sMKnp¤ööËo£`Yá¸OþetŠe“ [KÎIÌL™Wá=)ö]Ë=« Cò ð<„'ÿ¯ç“Ó†ÌViÞ %^Þ—àïm9þeAÉútŠuF?‘õÔq± �ÉÛù³wc‚Þ~Œ¥Î'è1aTŒ(q)�öP +«…hΛçd9�nÄÃ&ˤ.Ž©_š¬!³ÓÏÙü10®Ij<(C«ÐœX%PŒyus¯¯Ÿ‹B+’O¥L{½Œ¢QH½œGB‡c�ËÑÝQ�¸YOÙ‰tbÍGI€Æm:ïB˜ÖÆ[MDÖ5± §*Q'øíVª€ûæX¸58åf”äóu»x•&朋�½þ±¼Í¿Ã&éÜ÷ ?ÿ1 a�´s‘­X'óT‡ +áû‘™¬[E¹Ñæà³ï%ƒXEãŠK•ª$50ùTœÿú ¡7T‡ÉüIÇ!)mpDèg€æ nÜ"ö Ê€ˆ¤©‡•}Êòâ% �!Âd)¡*=›z¹!¾dƒ·©€|›[©šRp|¼1•"ß oå~‹h/¯´UÆ.h–y„A,PcêôÄ@î©Ô* Ø`ž.ºÃëÎøy ¸Å¥"áTÈ©0bìQ¶Öù„Uñz hB™ ò™™¾ó°IDA?ˆñªg%x¬`Þˆ?µ0ͽrƒ�,€;ØBl&¿á:x,ù ]Û)"/�zt'¬œMÏ«ºqøé7n`œXˆ¿�1á !* 6=C Z:JðuÆá9U8'Žý{¥…Îà +JU¸êÌå Ÿ ª$ÝIÒXZ¾3˜o?â0)o(y:ÍG‰¬/(evyȪëQ¾„+¹�’îGL€P–$÷î¼?‘j¹²öNûo¸ [øêƒg>~¨;ª\S^Êp›úÊžu[•ÓP¼�<'À!£¥€çˆÐså #sf%– ¼¨(¼�hç“oˆàÿL<ÓTwM§¨[KbM‘8“î”G=Xkôë9qeB ” †{ÑŒ +ƒ7‡ÖDuæÄ×¼ŽâtS§Kþ±³Íê0Oû�B›sâëbkR‡FzÒÍš£ÚOÖ´4:HFAîÉ—ÿ \¥i{ÉÅ�1›ÍsþuD¸ð¿ÖˆÈ‚_Ű7x»yç]9žE€Ã»û¼‰<ໄýj5Ù±×V +îö_܉íßlÄæ¹\%sÄÓN¬\Ê¢é²7Z•Æ*çä:j Â�Û­ ±BDï’Hü‡(|Щz�Bbû©ÍÔ•™Ó‰étض[c‘¢íý¡W¨ 1`L=ÓZâÊ €;Qÿˆù"oƒÚάÀÆŸûêš +J¸>]�»0´gƒ²K>6piÚ!¼cÆ-n“¯NE\Vì“tÓÇ…+F ¬È)U‡ƒ¶¶:Ða�O?÷xaœ2ųÃZXܳѵF¹ƒSæà ìŽÞ0Qv5s„ü·fæC ü¡—ƒNMk-d1š;YU�äœi .e0‹»1¤éñÚˆm à —¨½/[œä¶„Ìk“öiˆò�XJ/\Çl¥%Ôc¤­g+ oBgL¦a¦Ý&½ÿ4PÙûŸ‚ÉhÊN¾^HØxÉ@ê#e¢MÁº¹„¸ëò£Õ«ÏåÖDØ0B´Ä¶šÐ¤T$¼pØoÕö`Ã�áߨO '†7Á9<Ôì’|ˆÐa˜½HÐOÞX ÷a6í•ù5fºHªpîªÓÌaÐ�œu¤Ì(IƒÝ”Ø}?•–("üÀ`O·ËÏ!^oX¯Åp´FôžÒ@Qê̽/$fþàÒ+…°IœbÝ“ŸÑq[EçI6D +Z:3´?¡©Æ�¯7$p¡†Ø +ßÖ^¼š=ßhDZ­"ºGd0˜²à*H¿ÃJ+KzNÒ…ÂÌ`+Aè\Dó#~ü …¢ Æ~‹„‰ƒSH=Å—Ãz`@{v�ìhµ +ÅMR3tŽé`ô%Õ.Aì=DÒÇ b’<£¤¤S¦ˆð r=VÕûÓÆCLF½^¢¡òøk�å3ò@`±=7BXVòЀ¿%¤°ÕÿÊ2¾CÔ¾â&òóú+9(+Ü_k-Ü ÄfoÈ}Ã?Æ@\#W|>& <¬ƒ½¹Sù¿WŒ_Ó 9$Šƒcéš<âDî>¢ #µÒAóἤ=ÃñjVc|.¿ûOƉ¼€cŠ)Ž¿�§õ¶Y±Œ×j¦9\!Å\Ph·H×o@¬]#ž­hì˜h+†8Õ¨€˜0ÿÔ3Ǩ¹‘fi}l±\v�Ã/„Í4x=èeþFOŽø¯­§$¦h¸ …�¥kíg¿¨t†„Þ_mµm­>-D:eú|(ðïKI  ÷å†WÈ�³¢ß‹ 2™F�ß쾑ªé¯¯¤é{yŽ.gòY¿…å¾v°*ƒ ˆ•×� ›®–©OYcœ-‚¡w�Í�ɲ¤!b0Œ°_�´‰Å–n 5ÚÆ»Ó�ž†à‡KÎ`< +‡¾š®£ùU°Š¶Qh¢š‡¡Âï&>,vWeÆg1Q[,W£°�cü›êL²y±“àå¾ð%=‰ÍLr¡úϾÏÄ–.êÙ$¸EËœàøtcs`BöÞÁ»Æ˜aÝÙ„˜†¬ñ–¨«øŸw«^F’»gafÒ®>pLµÿϼÄ^µo÷Ê‚#00Ò�ÁLgZfk „ejédìÞÅÙÈfÎ ¥¤°ÿSa±Ö&$3ŽzH*\Ï ²`Hs­{ ¼´=«‘Èο;ƒÒ~¶á{$ T`›93Ĥè!‚ÝWžèug†t•ì –hÌßw~â&²L˜xUO}7’NAœs’g¦F™4fÈÀΗ|ó®Gì«sDÎPrΜ'�ŸXÄ( ™AÁ +,˜*J±bU±³qwnÈÞµQ€ÁÀ9‹”��ÀYdM°'GŠ„‚A4ߨlŠ5̯ uÏ3£ eæ§�í·âæÇ€Üu-yŠÕå,{õw‚�"¨føW¹Ø¢‰¸ÅrUÄ)5�B�j Dz0 @Ÿ×|3±½AŸü ÎȯQ#F†ÊŽ]]€Í}BŠÓƒ´níN×dd&Áð h13´× Q _$¨FfÖ£ÁV9TÁ` C£ˆÇ5üá€àQacôP% +rÑÐnYJ>r3 ZYµ¶™d|²B�PT…í‰K8ìy]�qªlñÌ[Å8—–4šŠ·Œ9 h˜D&s¡U'ŠÕ‚YS eGc>I&OE‰éŽY)¤Ô ¡løw©Fâv3`#T4WÈz—j„SC9máÖK΀šÉ?¡ÈÎo.4“ tx,•ODx1T2DŽ”4�FÕæ$yUµj›„™¨,sŒ Én¢ãºØ4Œ¨†‡FcØ‚F¸ +Ôr+Âj2±ÌªÑ~‰›db~ M…þ®èÿ*²u¥�í²pÉÌL"ê¤,+£$SÛ¦²GL«4FÊéè¨s¢õ3TRÛ�ì¼ `©ä/¸°zº`–�ˆ"ÖU�8]Û_ÒE ;ÇJbeÀÈf“¤pêár„ªÏ\ª’ ‹cðöoÊäza€^™—�H ¹™ÓŜĄªfÌ¢VE«f±x�G-Z¦ƒL1€PŠÀ#ñù8íL-Ø s“›ô#4¦©HG/¦¬nŠŽ$Z&�†Dö«å)²3q¾*„mÅ+ˆ`A"/^u"MÙ³&DáGµÝÙ»Qæç3”mÕ0ƒ�–ÄAò·‡–9á�4ù(� ¡˜,6²£bSubQi"B¨Cg.S’p‰ª©N8q~ÌX’¾E2:Ó�sÅŠò€‘yáW‰ÇôÎ+Ä/¹�9Æü„…uÇé‘ ·æ¡RÂA7ªÅè¹óݸÂ4ÆB$cCDF1§I�k�‘µ zóÈ‘,qȸ`ÇÕXŒkÂBc±:"§úmãak>„jNRÖ´0^›y”«3ן—Ò§w޹¾r+Ô¢jsùËÐÀ@)E߆C™â„ûÐÃõF^‹™|¹FÈ(^%Hê¢þ()—=\ËêõÇ|ÁS®‘‘ù\ I0•åãT_Šö¬ˆ¡•¸F÷‡Õ[jò¹ƒ\-r*KUL ©u5-åµ*ª±Ãÿˆï‡&Ô§(%“!Í+aœ�šž™Ç¬jañµhZ%! WÏŒcTžËc(/•‹6:‚C#æjá5žÇpú·�ÍÉ-*Š °gœü¢.ä¾$¨m�Tþ©­BQ¦�ô§˜ZHâ÷ƒ¸› wq̃¶ÔÄ)º*}J2唫œ® EŽ›�…BC"e’§µFMDîE=dQ[rÍ#B #¤t|–˜DÌò’ŽÄ3)¹èE!ËC„ÐÌ„…Èc˜8~U—‘=L„H¨"% +Y¢Y² š™¢�,2*~�CÇn)ˆ8ÎéæjЯ(•l b"Nî9į˜*G‰_T$)‡4%I´"S‹LLõ/_ÂK㩇%(V¾ÐÆ(Ä$C­%6²SMV�‹âz‘Ÿá÷ŠcÊT1 XÑÄŽº‚§Âª”)n¨feÀôÝ<úÓbY½H‹ +•«±ß«˜áV‚«ä„‹³¼ÿAy‹3 Z„ôe……‚ÿNºHÕd° oà +®šù,gA“$e¹šEd*U�Uñ`Jt&UšymQSThk,T•‹éH’´ª1$ž©S8îMUS$fÌi6K˜ûPÕ«µŽ>6Sö�AŸ².•û³¶PH�mŸË¼PèUNëBÃU�E8&˜D4²G©‘�U¼ÜÌtãyÍé5µY?ʈ˜ô“%êä¦.Yš·>Í•¤Íç* +µŸŽ£yq%ŒëO•$æs×JL*_F2dŽ›c¡øØcµ¨> ‚.­•‘'ï7Vÿ)"µÎ‘EŒÑ +“à'0\C¯ˆzEE�B,×Á@F<"Ì= ”ÚvŠy™xƒ¼NBi…Ъð²[‘à“Ôj&&õ‰QM,ÒÄ}�@@¥\«‰¹�©ÜRky+Ò7ñEI�ôr ��`µ•ÉfJ•ÈÄT0¤Àòb×,‡¸QÁ+%Tjpù�b@�âš)™ëí�r‰½}3ºî +5É5Ø«9ªX-ŠÚÕ¨Ùe†:¹Q"‡ê‹QóK„¯š³æ]¡=kÂñ}»;mÕ®'‹!Þ{©Ì~V!M !"ù0‡Sèä„Á¨­¸ £ZѺ“ºDLtvOÐ„Æ +¢œä$Ž�,ú*r�¨Šý‘™¨ñ´X K4b “”È_$R«bv¨Š3# Êl†ªd—^ µ‹ŸHè•T£"±É¼—‘ù„"�ð"ó,¦ø”—¡O zƒÄwðМñ¿¦osdƒÉ +É×`+P¹Âtö7$H7†4WÔM ¡M/Ó‚û¸"RÍ•PÆY‘®¡„ä4=1N4yùÒe&¦¢²#C2œi‚�–}Ï+Ae¶#ÅEN¯…Ê>¡¼,F¨æõíD—•f¡®ð§^"S¥¹A–õA†˜Rq<VÑ|[]E!�ÑÖr‘"¶rHUÕ{ÐD'ÓÈ?Ò°Y#>¤±L5Eí¥ÍHÅeÂFºi|D¥ÆIbm“ ã ˜E$ºç¾»CÊTˆ¢OÖÇ›Äåš‘mÑŸ\u“TS"ß�‹øzÜBõì‹´ô.|V¥)…mÔzBñnBªT‚sÕE=9‹zF£’á_17$TÑf(#I‘PNV°—bM ‘`øÁè,ñ–�¡fQ&Qþªt™éÌ’ÆÅ˜«C�'#_Ø�3†Ñl„6ñ„±Zâ7#« +©òDdL!"ÒOE©¯¡Ë± +ÇKõ�„«VÅ �”hÞp75|É‹FuëQB#£� ÄÏPjóá;ª2ÌlÙyòK4Ñf«µ5æ”ÛÿÞ½‰|èŠqC=ˆÈClšCj"´ðD9&—TÄuâC¤+„ ‘TZÕ8õ S§¢Ô„Œ!e1B +’Ô¦þ~£²PJ9¸¨¶Ü‰rj’¢F”è×ô}z”L„Ç#!u„§2‰ 2CTR3r©ðª‚lª‘} +R%Ô’47þ®HJ§T±§¡03)wq2ÒcŽ5-ÕÕO¸XÅžS‡ú#|J¨ú‰ÊÛ, iE’VI‰˜ÄªME:¬IÍH¢�¾ +Ù¤ú¡ÑeLšÅ¶2ž‡C‹Ú=—:œ(ÏSAñP @ÀBÑ)H$…UCÄ’Ô¸J…ÐPŸq«[*þA᠘ꈭ‰ �žXWTE¢–Ì¹Ž¨¡àd4ÎcÆõúÔGNcЄ˜IJê.¼Dø9½@,r^ÞáPp]_ŒdlY?ã¾èƒ:*Õ¿‚ñöqAù_ò~è¯N ¿¸zIÐ)å ‡Ê?©–“å–½ŠÈ}·ûßûjòz=Ÿ¹yçRRBçTä–Š}©Tçûæ&%¦*#]ý N‘nᜢ%‹µK.ÜTTHÅ£þ}„ÌY�ó9‹-WZ¤°Ð„»¡ Ó1£u/–©ÄyCÚ‘‰P>#ìŠJUE¡d²¥\Õ(.ʵ–Xµ ÷Ù¼Ü+r,\©8˜L#¼�7¶Y«R4œLœ‘‰^ùád!‘ˆñ>u�‰ˆ\d¾BÈò¿³˜RRŸFØ·SžÏ.òMŽÛD3%%Þ&Š�LÐd\¥Z$$Bè!å©X¤4“ Mh&Ù)Ÿ'`ÿe“ @²N.«�­!“u!2&d�UÞ�eHÈF3CV«…ôU«ÈˆPõµ¾r@À;ÆÈÞâú ÔÇaì'ìkêçÞ�À[Ÿgç<Ë:[ŸPd‡­O‚z¶�Š”Þḃ�ø@ \ñÄ›K—î  è^7>\‰ŸÜívœ+ž w +^#–}�×È7ì{­'€GàM¦ÖÐÒxP ŸØýF~�>(€ˆLT`> ›*AÄZÂQº‘ +Ú×T4Ò’my*� 6ÏP($Ùà‚M£åÚªB®�‚¸ì€`Œ¯ï` �ÉKo…�V»Ò¸ÊW�ZùŒ” |Á2YÑÌlSZ%,bCC²ŠÃ±c["r]‰�r@ ± Y²bÒÖ�@9Ñ’€´ßf` +:ÇÛAôÁKÛÁ€Úµ.0·õöE•v@PqÛ¹•�W¢�µìð쀠 ë@À´]; ˆ–:è €íF†¦5¨d¶÷‰XBf6A£P‘@  ˆç2�X+ª€¬dF26K¥Ñ(Ir© \¶eE]e³:Z?Ñe¹ÂÙyËÊìËv›1¦‚iΞXrªõò˜�8¾ú_¢°Ë×XÑ»,ýµœ,ßo~ÒÁÌ¡›P{⣩¿|g€È3æˆBZe@ƒ‚,ö¼o$´Ç#Îp3ž¾("ãë³`(ðB9x.諎ºÚú•4*Äæ‹AÐ@IÔ9”v|b£[Òè€G˜¯~4:°w9h–ýSúÁ" Kšð¦ w€¢¾DÁÀDbÙT�Ècžàñ*IÀ�HbDκ3ä˜Lûí#ÐW3�ðdoàXôFåÇôpæ èëC³©#‡kôÓIœ¢HÄB·R+Š7zÞ¸/«Ñ¡ËÁË1‚�8ÑÑ®‰é”ˆ4¼ƒ2t¦‚†Ð�1Hš°• (üS,ê×oŸÈ/„½Wÿj¿Ãèöyo€ £Û¡¬ëƒ\úJsþ”?b±YÜJyåÜ@×Ù»èõ1V½ L?�¨‰ØÙ25�uo”’¡…´–Î=õH»tÑ>;,% ÊA¿ð‰ÞW‰f@ëh©æâ‡¸£}ë&ˆÙ� �)°áŒÈ£î†œ¡Ç5�85l˜Ÿ‘P#Âû:ðÝ‹ó,Ý!†*XÔ%b-§+�õG ª¹õeØ’âÓlÁgÁ²a¡±tˆ0yÚ Î’KÓj%‚¯2‘�ÂÌE Á·ƒ¥ÒK× srûüp;†×Uδ@cçH)ó+:ØÐ‹ÙXpQœWâ†L¡½ã×ãÛêÅnú%Ñ€‰ÚR¢ƒ‚ç +˜™D%†L1ÂáÃzoÐà¯w¢ƒ0¾ÀH2v’å¸Ë¼¶ß&í\²Û¢C'L~÷­s³¼jqtX3 N„)×yíTB)¹ÐE­sAbµJpCãƒÒŠcrÑœ�ã8}]ÿêñå/FÙÊ8±4E:é<#ˆYÅ/ñ2œ·pÀ ò—cõ#{({Ö¶ÂÑWAòy>n/�ëIUzcrž(/ùõ"y@p=õ@0ðÊ{J‚³•ÎL¯S°êVÈt€‡NÉ:·Ò1GI²Å3††9žD’–Þ¹±³="2ú¸°ÅêçD¤ƒ'©§‘JŠ6n#ŠWe�ìs°XÞ¡È�#]C Ûº*�7¶æ0²µ-“çÍ?J¾æNZFøv{WL ':n'i:¹=ÔG´Ç#BÞÂzî9¾&:Ô°%1ÌÀÛËiü=<ÕÕXðÒŒB5Á¸ÆD¡,ª¯QÃ�ªÃþÓ˜ ž,–3>Ñ��¥ÐšºŽ%:8Ó?ÆX�Ô(~gäÎ)ßú'‰»ôN®�Ï„D=G4MUŸœÜ—D‰2kø€?Îp³ì_‰÷�)Ç‹v¢ŒJŽD‡NÇD‡ÅèÑuz&�YÞ�0àëoãT{�-e ̉`¹ˆåÅó1&ÁPð÷I'E"Èâ¥!Ho-GŒè x�I‹1ˆ¸}ìê3#:,¤”¼µÙ4¥¡!ðÓ¾ˆ]?v,.‚iƒè°Œ¦bÓÑ!¹pŒQ<¼²õÒ#:ä­öøÈwMD‡çpš´o…ÝÔ Ña}rÛ³Ž‰!3¾ÝïѯIÚÖt;Jr$u¬0#˜WÆâÈÛkÀ•ä‹*:Tpa?O¨hJ*:$Oÿ9 >¦è°n·\Nî�‘¢CÔ|@Š (:„bhÈÜŽ;*+:ðmÚn­½»¢CàYçòOó†¢ÃÇÀÆP¼vôð@â®4T*:@rËoJ):Œ£Rƒ„ŠQtHÄõ@Ñ È«¢Ã8؃2ßq†u�GE�ç¡DEŠÚÁ 4Ý{Þ·sÜ\Æ):„¸;ÿˆXœ�¹E‡1æù%îÛj²è žÊ±0¢¦`Ñ�,»tõ)–óãÝhÑÁDeÓ^¡§j#$µ÷/:\¨¼_U5å#äXt¸ 9ì\ì¸ÿC!àctø¨”¬Fð> ŒIC(ù`A%’LƒÑ!²†‹pØŒ…Nü¹Là�`ŠËž€÷XÝÚ˜AƒQºòÑ�—×=¨IFx?:|Su‰•O$ÁØý£ƒ,"¥#óQæ›�AÙG_µvˆ>ìqÒŒt09ûM4^R¤ƒ8ÙuíËÎ3Ò¡_I¡%ªJ¯÷N‘Æ+[º ¦=-ÒAZ4�ž»o¤ƒŠN õ‡³œàVF:(ËÙºn%P)#'Òag§í“ÊŸoï ¤Ã%óNGJbKK7é°ÎÍ¿:ć.1éàÍÛ.ó5ÿe"’H‡±†ÀÁ‚Â÷F:tYúî}qD:Ÿ^„¡��›úz}¤Ã$Q5¢�¸Štðe=† õDÂëm"Ä#4mÇH +“1 ìHqö#ÆñÁ©�>!Ü+}õü6"}÷„tpÍâ$´�sÒ¡+%ñ°ÚठH‡¨ÉÚѾ'<2Ò!eâ icë&¾éP(ú«ýY$ ˆmk9pðÖ=kB:Ìç&Cgé€Ïi?<³ºÞ ƒt0eú¿˜M ¡µ)zt°@aÌ}â›%Ï£ƒ ÄAùÃC–¹^ðèÐP͆<Û#òùè0ŒËZœ×=±,ytèiÎÖI�Ê@´ñè–»›²88��##å&xtØÎÐϧO*Hù<öè9»ˆʵ1Џ£ÃR[“;³Pܸ¯óÑ��]­€�Ì{tØè(L‘K‘¢ÓG‡>Q ÇÑ¡²éÑá¡i—ÍWéž UÆ£ƒ +ÏRm?�N¦ +„q^ežûìòô°Í£?öÈሄöG„›Ëe ßbwuth�P6 ]‘£ÃŲ$nÜÀ jZö„£ÃÅ Z�b xÎ~áÑ!’»aXøÐC2øVGým<ÜçEmè…ÃѾtó6öˆÕ��æÑÌðâs0ÑP«Îytp³Ëœ\�ˆþèð‹q+²V +™Û£ueBÿtäÁp<:„Ë„Þ..�ŽuV!¨­%>:ˆ¯ð‹5áàšæ¿=HW¹'Kæ"Ò¡›9>ž y)ô£�t o‚²Öl…‰¤¨ç²bÏ·Bé°›þˆŽ@ýÃg J…Ã_+ª¾SÁAé }!zí±Ñ)ŽÐ +L>p#§t/縴rƵQ:XXÕµÄÜ×.¥ƒ¸Wò ¿t(üÖëñ¿h(XrP:(l‡fSÙ‘Ðz-J‡ÏÔ¦W|2T%J¾œ×ÒW¶'”[Œ‹ª£Ò•ÄÒ2¥ƒßöY°Ô»ªKéàè‚0žnÂ� n”í2Ê…+ëR:8KÞ Ø�Ié0€&Û ’\“&X Q:gƒpLáõ”EPÖååËÑrõ^§t˜Ü5<ï¦"#Ú(¨1mu²uŠ4gR:èêµÍÜJBJ(@éÉbØ*¨Â#” +l¡d”˜+Lнެ¸JcQé°âPrq`¸Ö•NbtÁ,ï:†¸Ò�iÎÁýûÀ�+dƒQ:ôÖI?#8±^R: $>sÇQbè’ |…›äƒW!‚I�Á-ÜÔ›–7¼”Jj –�JÑ¥C5 ðb‰+7¥Ã"YI´ë4}šÄa¢t2’a3I‡oh�‚jµ¶?üº:Í«2Ž晴¯æä°1‰×’hýówÇf^Eû´� ×øWÈ�ÓV �‘£^$‡ùôóÛ7:´êI»ÕVs’¹íPð„15:˜X3@9¨¥â­Üß·ˆˆRcµŒ¤Ñ�7/g¾ÃÖo�zqÑ9îÕcð“°Píâ +Ñãüfø©€¹dO°0‚, ºS‚é[eŸ�Æ!•‚_ö7¯®%¢ß�øtï¬YØ�·ôÆP™âj-lwŒ€û$Ë£œ?Ùè–ƒ1. ˆ™•°)¢å‰~lضå΀„0è4Q !K¨´�aŠÞ�+DY~5¬ébU��Ÿì«Û°ÑR¤{(·?ƒ—H®&Â×üLY/ÉÇ{lqÔ;˜P¨  +ÌÑ!kv5¼ËµJGŲHeB”Îqg)øíR#±t_ØÁ#–kÒ2 óÐ •Xo¯†$ÔèˆÇ·vA^kŒx?sÑz³'â™ÀM¢Ô‹•¦DV‚<HtTf¨za·ßÈTêQÕÒ€?>¢ ¬p5¥# &Ù—1ÄŒ}œ‡ª0:ågÆÚ^5#]Wî˜ó)·Mã9ȉácŽ àWVwÍb‹‚SØÊ¡)sA¹6ÑȤä|}¦É=_³” Ç;ú(_ ìȾ%›NÅz àÝn.Í»Ý#2˜Â¥³à=>UpD‹o…)†K)Èœc'ú?w”/"BŒ/ˆSÕc{6Ÿ6zõÏ|‘3â-2›U �!ÅŠI£3ßb$XÈë|X.ôéV¹09[åöˆvçã>¤„E³ø*‡ðmÁ¨û°—7 Š˜Öì=ÑèK ÔùÛWV&™’´›µ,¼ZÁSdz÷,D@h ¾R–¹§¤tê:ò~‘ µ°}¤Õ¡¢Æ"‘ÕäÿÁ+„âKN„âþì1õ7N¢ŽÛç‘»`½r¢'’§ø�ëã=—CžU÷þI­f�ÑP!_@<ÿ!ô]Òʃq×8ZÍ–ùužÄgS*$¨.3º±Á+å`®TŽ%·# £‡0©[£mv‘¤3ÔÙE ϦýE\¶ÜABè½<‰¹Õ.Ö­Ëòq×å¯ ~…¦÷‚) " o¶f@yIUѦm¨§ß&ˆª^Éa]£qÛ¶èî�f'[ÛÒ‘xè¦=Œ�)ϳ԰#ÅÌ™[§µ�10Ñ:Ð ÍMRÊ:{™QQV§ÛÓÙ°|@9®Ò`øFŒ¥‹Ó²#A#Ê<ýâÄ iù½LÃ,æ ­˜ð òC,O„m/Š,#±–Njê÷{p]-}3| $†¾.« übˆELÕŸ± +îüjÖšéÂj“¸%åF‰â¼-ÅZ"h]â“¡±ÉñBu+lù5Ñy±«aþI©ùþ~Ï[”]>¶|G«G)1$š•!íÎÊzl©Ö`›Öùù5öÎô#vÐTg©4Nå%!ñ¾_Áu?74–gq Á{�XW¹ ŸÀC´Pú[#ô�BIÀÕ‡™ñJ««>…¥µè-§D/Ck® Êk£Uf…¢íEa@Γ™#lO‹á'M"ÂÏ�䋞©Üâ:G�ƒ‹-¿¸Ôù縒H(,ÒÇ$K ¹ËYñ }|á]"˜Òu¾9ÀUÒl¸C{êæ+p°�ü@ÎÀFªbµì©qÒ¯ŒÛ.‹’s(vËÈêd™Æh@- ¢°c@C�pAX¦a�±û ¬ðÂH™¦Ñ ‘»;�k �eêàze3dJv,ßRÓÇAö2Ý£Vð—~JJ[ª^ø‚­öhwkÈ&(Àþû‹[A[éE{JŽ–ôBëQ,‘^0ÏÝÆV¡Â#T)˜"k°ÓS�'�ñ1u«Y2^ÑéxmûÔÅu“•ÁVô4ŠtMšÜú±Jz•.>IYÍ�{ñºÕ®íyבІYì<Pu=a2Àrý—å�Ã%÷š} ›\Ô¸D¼Bz8…Øp]ã¨ÌÅœæ<*Öî½0nù�®…XÕÞ|$ +ãÃL®àÜüzgKrÍèøiÌ™¡NuŒHñˆɆœO¢èv]]š¸|L˜M¤¤ÇIŽ—iÎtéÚ¦íò‘›Ð2�ªÉ ã8›ù J1º €Â‘¢cäá!¼žþ+qØšàiR�l­f ´‰Ëâ\Âð¥Àz¨h+³H éÜ, +—ÆH:.Si�óåɈÐ_Ñ~cm5Ú:ÙXS›Iå �L×XgS¶TlH$¡¹WêOó±g¸7+!"�Íóurá3lÃ3�ý +èÍz§º9+ÑmÏŒ‘š™S<#rÚµ¢—j�²+:nló +¯íäÆ;BÑ8ª"”Ôc(ãcžW²-lŠó…® 4j1[î¼£‡Y¿e¹ê6¥z^‚ºÇáö êèyÀªÑl¹à=¤f�š|Êê`üñ6¨i}åÀ›«E�“â@¿�@‘,y‚7NoòΡž8„Búc> xQH°QñrØFeºõ¸ .`§œƒ·g£‡¶z]áÙÜ€>Kjsð$Ìᑈn�"ƒ¹ÜL ^uè %¯ª¼YhôóP +þ&‰ŽR(ãÿÑÁpìïæ+û øt`ÓǶ˜ä/óıšZ$zš ªü›jóaUi/Z?ü6Mí7dE®+a©¼ô(zÁ¹ß0ý—â“;bñ…¶hª�‚¯Yéä�üè}’£ÙiÜGyÀÜúzY��"®ª.õC€opÒ-ú9 (R‘0ÓTšÂû© ‡þ#ò…¼\ò$ÓJ£x¤AÒ¾(/Edµ€[Ôo�W ³FÈ–"hrÑÃ÷�|,¦)&Íx/Àüß”F4©Ïª>"ÄÄå0WDQަN@¥Mp)¹ùž+¸�„¾h™F/AB¿ÕÏ]§?ƒ#¹Ö°C Š�ƒ7XžÌÃaeƒùÔÏ|¥{À%¯)QAmx1„~Q2}AÓ^à†âx˜b¦yÆkã€rŒOSq;(`‰%©18*b†Èeä•ïõÁÀ ¾qS\Y ”&”n™ýRåMx; +™²GJ뀭X±òá¼¾n¨j-‹<ïp©²µ×ˆŒÜ¢ä…š¸OÅ—'€Öõ¿ä§7À£ aGÃqÿd'(ocß7ž5„eDu?QÈœÏ�JÅSÑ[z™ŠpÜúE!ò”p)Œ^|XD×Þcäô«Ph'a9`‡×9m +õ‡ÄKÒ0·-êÁAÓ¬¯¡‘ÉÜÌülµzt8ãáDl\v„Pb$óð 1üßø$ˆzQ’¢8@.ÔÙ¬f2‰†à7báGõõ´¿U"–A|@,G�†€ Ä ü­q@­âQç÷â”Ѫ0`�U+p'€ÓÛiWçÉR¾!.ïâØ¸çÞpX‘°úä­H³¿�OǤŠ�D Ç�û�ƒ›†Â4Òî³ô˜ :á/£ArR%Nx¼}2ð<ö¸;!tN&mÏqÓSØ4!ìšþ_N6ÂðØõ5 ˜D¿p»ñEø—^¾ŸgUÁÉ_æäbUA§(ý1œè ïÑßóЩÿh�$â5ãWôÝCsx¤ÿHÒ//o«SoÕ+ÖAÕ#ðKfó¡5Œ“áù‘o1a?Á¦2°K1fŸ¨5Uþ·>$£,3é|œ…à\±ðÆbðÕ˜‚]‘©šÁ§t¸£Ï˜n~Ix½žCk·‚¹p&ø'ÛA†>x8XhµÓVª[}G7Á–@é.’Ú‹ÌAFÛ&�†‘G|)T{‚õÉ”´7†“LÅÓãPEÊC`Ó>[ ²Ö‡�Õ"H³ $ªÚZ!@H¿ÞdU›èåÔÚØv¶Òm• ü§�¾�•/ÊÃtxÈ^Ïý‹i©`ù”–:Ô§ö¡ækøwŽT hóöË]¿kG +Á¼l[]²ät2UíȦ,ÿØå—éPÞX,…ôï;ÉM§à• IMÁˆ´B¢sMQ%À¦ïõ˜Ÿí‚% n(gµv ÅfÝ,íÛ:)“ÂmÎæ1kâd£áΔÚ +†OæQŸ ĪI@6„k8vxyÄ•‰¼8{YÒ“ÖŠ4»Ëp Í7ÆUà[�é06&ñ½5�ÜߤCô‡»ÅüÙÜuÈÙŽ÷r]:’ÏðjOlvºM4ø¼éÂRL·Â’p®yè{ÃË Mù›S®Ç–½â1~Æz¼‚èûÿöóÝ=ObÿŽémÑ»+¨šÿ¥ô} ï2 .ψúá( \äê6@Hñõ*XºpÖ|.�ïòrê1Ðk&õX:Éh;žDzi ‰svÁ¶Wq-¯2�zùÐZ»Éú2Öe�nc7Ñ1'fNú:+á yF3ÑD‘"B^A\SX{+ª˜CBБ6•dƒìiÚ¿ñ$�`ƒÉ´�Ý—j¬ +jøh#O ¬@‚÷ +…×á¹Ä$à/Ð`~ª‹°‡å-9`)®¿0ˆ=’ýž¸1¹È@ACxjSWæ¢(U5QK1ùCÙ˜„ãØù&«KbÒ¯í%©ù7¸@îÀÙýeà5ØëB=àOØzªÄ ¤0„¶Xî‘�?Ñ ¾#Ô_ÛT#¬_m%�ìÚ6LÄ”Êˤ<Å/»¢°Žø 9!ñÝA�ñÅí!¶±{“ÎtÈ«©ÿ›•µ¥¾: �¢ðÜû�Ô Và2{¢l*òV<¢ä˜®ÎÑW8Vaü©eK½&“îÀ¹¾$Æâó÷¤Â8½á¦ÉÍ·éQ!Ãû`ÁØ%5ꟼµ…Þ·“”Ì™_Ô £x!97…–>…{ˆÆÉuÀ K´Õ« —î÷P/W+�‰¶lo:….œš?R…¡al¸Tˆ«#µ7d$ŽÇÈ®,ãáOH¢*¶djF4(A_Є80T' ˆ.&ÌÊ?óÚ³U7aÄoI i¿šY ˆ¶ºÈ¤ò¸'nB ›lX�ç • ºU¯\µ ušqÝ¥øP…3G‚zóUCýxî¼ÒÔ#ÛX@'<­wÜ©zñ:z~¬}bç;S£ªš/þ„îï±I5˜ØYTUãO`X@¯¾;ÍCc»mgÁÓ¤¥bÝIŒ¹Aãk£¡|DÛŠüT¿fâp¾½*ƒ2»=e:˜r�ØÇ2á,ÒÓã(cG‚DŒ2 Í@€Üä钎/6Ë#x¥ 1IÈÉ=Q‡fó:*¦sJC•Ãî,¦�½+À®Øˆ"6>Y¬lÊ'òþV_P¡o>X¼{'�’ã.V8ä{N[Ü5 ¾þ!hÿØFÅ«YÑ$b»V“ÐhC²¼Z€ +Û‹/fG©sê}¨eª½pŒ°¸P²—DŒ4Ï¯é ³ {2I�vÓ­sz{²[ì € ecÅ›�Wc:�É ‡\¸×ŵª>‹†n6g"À¯-��æX s¦öâì%„{˜ÒSýKµØ÷ý4dûÓFº/˜Cˆß``ñžró­Îò؈�zÍÙœ`Ì8t³õø’Á¶g¾Õ™¸ñ#|ãéÞ^ÿlæÀ‚œ@ Ï;íèÈŠ‡Å0Ä«ÍTH€AÛ¬¦ãÇ¥9�=¼)¯ÓrlóyBâÚX½ÒŸƒÖ&a[…àÞÛÿWÀQÖnïóÝFn„Öe#¹o†1U2Ø—Ð`Ó=Å€®íë�Ú99×ñ_ ?’T�tL�Ï!Ù‘‰~:M©@D 3Èž•RR�þKF;Û\DÙ(N|ª6ßc˜A~@.Âï3$·«þ\jaԻ̊`~ÆØ0"]âšDuÔÇ‚Ê]œ”ëÛ]kö¾ÎýꈊFÓâ7iµûw˜I†úá{Ë…+ãÛ× +R2ê_q¡\RÃåsÝH ´<'0ÀúQþ¿¥¦ÒXvôñY$%íVê‘O¡Ô‡TÀ÷�ƒ"‘ +X‚Ü:CÅÉ€å‘x©D‰�Uõ<…¢€]‰lõ‹ ð×ïk©S#TÀiÒÝé€�ÄYæ0OñYŠ’È6U %ê9›eË#$šm7"â$p@÷å4T•_ejó5Â' ™¹)í ’cU†¹ C­vÓïÚ`öP ï*Ëm*4gG’™û¡„U϶ªx¸ü8ÆÉÔÜ=)2¦Ä¶Y� º¦lªJð PRQÄNÏNã/ã'öÐÜ” gÛ‹XŸ¤yŠ «,­2Kãä… eÅý€iF\õ p"´¥as½Iµ‰ëéÛÝ¥fÃr¥ß:!±¨&GÃ2ª¦hàN•F�ÿÖÔ"ŠÝov!Äx¾Ï›:—”ZuM£,kèû.x�õï䌯ûcŽ6Ç<¢Ât„x)üÏù ¸È\ó2ó2$ótQ+rá,¤p& +µ9½)�È:…Öøm$–[ ²9l›G7w‹LQ§©H%éÂЖt±y�:íÙ4—}#K×A!›¡Û·Ü#YxM‰W1CÌ€æ†-(æF®S1·€¯^3ôÞT‹a+ʼnÍhÉ`}#ï¢^™JAžI[-kMp¯Ö,ˆ¸P®î©Cÿ™êK÷RÔV›WÍO¤ü²·èÚµ 6î¡^².\ÛuH�ÓE\óìºvŽ[Æi"ËÄ�QÄ[yÏÄ\óúJ‰‡þ¡Dè‰4\[Á6KªTtµË¤ŒÄ9#œ2 ݶž r²˜;zFàü£×G£žB5:%F23æ-)â½ÛÙûel(™‘(¨1¾s#iKº'xæ§íSޣŴâûïH¼ÿ{´|ÊFâ”Æ°%�Þ„~„ÚÈ׋Åå×#ÂÁNl¶š`OLôç"´m8µŽv˜‹¬-…GM~17j>áûËýð8‰Ô —çHÔDîgu…>EsXLÌ#Ù ¯W§i²øŠü‘ÞŒy‰"é?,ªôm?ô´^�%"ˆê˜†L†`ü½€ã÷p@;¢M¯u#f?lzJ� Þ®Hö<‡åP×ÐÇ:°¢ñ¾¼˜©²¹¹ÁYG@ :.–C£ùÈF»äK)_ ¥•Š<ÁgMžœ‘Æ#"݇Øgj™Q\g”!Š*»3Hñ�aÜ`ªñu‡‚LjbÌÓfÔ¢;»KÓñ$ÄõvÆÉá_ÍO³Axä±V:ÓòxV3iCôüú"»Èt§ê”g¾Á×T2±^k¹ eˆ@îsàŠ´õLO{\=•€ÈüKš¢%Dà€s(ý /Ö,×B°\£|w‚/–žïd^’(ÈÈØû"V~G¼ë*I Ž0it%_ÿú½}{ EÎÁ”‚ˆ·ˆ ³çùóxs#Ž5II6|¥;ÅifÉÈENbIÑ[ˆ¬aÙ"–D,£ +³y"òž‹F¯ÀiELS¯(‹'2º)õhÒNbù¡t¡qt®6­±Ò ˆ‡T¼ i•®î«!é[D´p##ŠP°Fä¬÷] ŒHí*„%e2ÍhP +ìG\kÆ!ªO‹ƒ£AùBÓEî¨#�Ñ^�aÅfcòmB‚úkPDÁï4@DD+€5Ç |Ž3 'Q2'†Iâ~k>ƒmð(x!_6æšå;¿Þƒ)W$³©ÁBTkkŸú[høú£Yà˜÷¨¢ÆøkþL­´›Kå:€ÔéÒÛß  «�<¬žÊ›è¿ÉÉ®Žq“'VÎà ¨•&݆aLÆû=_¶;9‘+“qHŒaØtÝuÁe²û+îH5Äš©Ì3^Ç‹èJìÂ)m‰yµÒR6™" œ5]ùœÎ +†KéÈ=õNw忱³²J}­Å'H´Ó?°@¥/=Ðôß±ýôoÀg£(ï’€U`€A^Ž,67�nËå²aÓÜ=$ÖZŽÃ2ðùà›î<�ê¶�* ÀQž¥Çç»pÊüéLÂøJz Í•ƒÊ-HeføM]x|¯êQ^B¹¥žbò¬3QŒDÆ®¸ÉyHÌ`Ú;!è.õÇé 6¹ 7båá \ûŸ_áSGxó^¼>Ÿ,SñºÖŽäÜÿ”ù<ëu…\zìF8;êIsˇÌÈ +ªA†éþƊɉe'‚0¦ü\JyÓ“kÛ|(¶bÍçs· <ÁCL˜‚&ЬîÓð®npg!@i%¯LfM•6{^Šãã¶‚à—fËhy>Íüi¬nÜ e²Ú&’ºZö,ÏlaŒ>aÿ©q¨�Î*›Û#úŠícèìþó.Ä#¾AT¦k)\mBµ�áÚî ÑÏÿFÊE¶'€2Oߟ¿äêµX-Ú˜¯y<)‡^ø�`fïö¹Ãðc8w’Ú{zE¶0‘L3Ôû±õÂQ:–½¬º,�{:40¯êvº/¨N‘ô'–è%ÝÉ�ª &Š\žª…vŒ�mm¢Ð¦–P+Œ/á•-*ˆRåƒÌ› ä*QÙÂK».–À¸Á ŒH|×Ö˜6¦ `_¢EAÌ|z�åN CãŽz�˜Mº—ñò› ™¥¡­ùžÊÊ3”@ÚÍŠ«@@+‘7RlÐ —‘§Hh’Þ•`�ó0³š„3FüE®ËW+/*£×€ðC1„ƒŽ ³´Òg°KE ’M÷Æ�‘õX„ÝE°6¾–˜)× W½BLê�´G¼,c"ÅZ.H!4P8� '†2¢hЙéV˜álÁÂ�Uüb’F&º u´)+ÑÀW�…3§ä�²ø^nµ1ÑEá”j|\gÌDX†,x\„š´DÊ["%Bý y@½tb‡ŠvQ€-ý9v::›ðÈkAbFa47u˜bïáªöN0Û„a/Õ°aÝ$&ŒVMV$+S5®#;ÚêÍ*¨Lž“é œO$Ýo«j¹ÝñÀU#ž#K¹vS\Ü"ÆÔLï.T,ç¡©Á#W'ŠbÎEžƒ = @´ÖIXÙí"¨™K‰àOß‘D¾Ñ«6�ŵ2ï +O“÷ƒ,nY¤ÒyX‚@EG%T¼7*”ü—)yÏ"MsÅÇBê´SB·Ú7¢ÀøU�±O0Dêœø‚†‘T.§Øúçl‘ûoÒpÜGd|ÿàX.�è?”’¦ Dòn§%ys#{JlJ×%ÛòIiY]©Iõæ `�a+ ³ã,—Ë�Ý‹rX¨ËäP?ãf×/œ`Ò±»óÙt`Òrdzø©$7õäŽ*!ãI"Çö~�æõ:MÞ¶PS&=ò íúðÕådCDc"FäŸÐ#„Úm¸…šêSŒd›¶ òƒp¬¸’Rw„�YÛª“Tãá„Ñß+ÃÜ܈{ö¿ Èè yz�IV´Xâ5ÿù‡”Ö5�Ãq¶DU+pH€|MãŽ}u¦wr’Þÿ@|Í!$Pž�„ѤI¡tHß"âafDt%cxÄô’ûÇ—¸�‡‰W(ÖÇ‚[ž­ýü×µ’TÔFfÔ( úB O%äD ÷¤D¼Ijhâóé < æ.¢)Áð7™…MÕ–+9ÅIÓ #.<ÇÞ™°¹—–xÀJ +'’®v¹Î2‘ãYmd¾íÍÎ…)ƒ€å[ì�™jò°ºì†äÙ¼ÑÙDÐo ¦HÄÄ`t:BU‚„'®·eëHÙg Àp3ÈuBв «$ä8æ˜bPq2ŸuÓ9‡Uû_§²ßž²An%û´©‡ÿ+WsBWØÝJc˜ð ðjÄyœf ¸ç‹ É eÁêçø&ËsõžÜ|-Vš�Ä60ìæb eÁ½BÜ~hªÍ ,³e¡‹néiþëűFª ¼ð'lÄ€PÈÊ6ÈÌ0†c:4uiþåƒüçç0ß_k��Wž6n…*Ièà Uà½ÂïI%&xÏ"jðɯ‚ž?j[’fy€‹ëa^FP ÷ b¦‰>;pÈm_úGX/¯ÇŸ…½Öà?;°‘G•ÚBP!P dÐËÈ$ß6�8Öæð•Ä0ªbF¨>Yßp–6ñKIŽ�`&~Œ"¯Ô6-Euúªp!QW2þ©‘þ%L +£¶Â…°çíÖ Y™G{“€G–¨yùÀ'ð#FÜM +âfШ®³æÕ€š› ^�y;4§ÃÕ±êÐпä'å³(MÔ8RE`ªª‘øõ.Xi ¨F'½�f‡‹Ý5í¾¡"yƒÛ�oóìPFRrgb#næ ’ï•ô.&LÀ�á�ðLÈŽTM* Ö6L."EFî`áÞdoÉBQ3øœ±ìX*ô#`‚ˆÆEÃñ"6ø£ü�©N!@*´5`ë <çÜÌý¿Õã03¬†ùN9=˜ƒµ9n±–Ðû¿û¥‘R¡ÅFEÝo} û¨;Ö2ae NòÇYºryíšæ×]è©È‹™ü\"ä0/èêV�Îʇ¤œÙ”ÞyVÂÆ4¿'Óp ëÀï_öƒÓö$Æ–N–¤T~’4#ÿ§!["„i)ð7b/¨óý;V4‘îO} —ì�Ó;€K½„ÚeÖ˜‚­sd¬òõRPl÷Ìßy0jþ¹¨™ÁP@^àoëÌÒ§[w#7yÁ4ˆË“±™œ9]v –úð¡ØmGþã Z©–iQV°—q˜1óàØ•‚ð ïÅØèêÉàZ“˜jl%–^ß#tºi„ªW'Çcá +¥M@·}‘¤À +Íe¦¨•_´Ö/Ð=w&§úÐ7köß—òç�?µ;PÑíX‰ƒš~(Biá“[t +³T™¢Ú»3» ºØ�ïÙÞ$ÀÉ$ã‘�â&!9‰²¡!€þMP¯èÉ2@8ž9JcÁ|!|†ü]‰RåŒ~&@`ÛË ›ÿqõÞ]•^ ‰Õ3´È˜¸#Ä só~W¼Ú¡8—ÿÓ©‹©–;ÙÒî ©zXpMeGÏ™æ[6þ-ƒèÃzn¢íIÊAÏRÙ‰'*è�ó«?—¶LLöØÔw"dG­�d“F“26ƒWwpBkY€%]LA™„ˆPáŠJΧ‘:H¶D«R¡´Ý ñnî +¶ÇöµŠwqÞ°`ÌVh؉Èq�±™Q,7„S:#Û ®HÈ6¡‚ÄÃhF@þ5hIå)AZXFu»Fµ12Ê–ÎÝ+]¤’wEµ鯡ãBÊù�±(sǹâ6|ŽC àŠzÕ&KÍX¶J°˜t÷ ¸6úøxŸEÇ"Õ +kvæ €6Ÿç 4x~¸d‰÷Òp‹ ¡Ž”C�7¢›Þ1Edžè“ð‹±Â…| cÿ¹‹d0NSÍÆèp„n‚íhÞ+J�%À +¯bjùW‘äž~œSŒ|á?Y¡´‹ëc±Û7 � eÁP¿ƒÀY—l�{º` +–+ÁÐ[ol� +Á:e7ªÀ‡%JP8¬|ùW"H<ÁØ$›u\6©øöå&2�ˆŒ`KëÙu~»h•§K1ÅÊ �E‰ZæËÐ?è†@>-±?OG\ qÕ—i¨ ¸l˜JR5îu�Ú@Üó~î%yvCæj 7癿1ÖYŽK±¥]r‘×TRKÃZh–�l}VF$ +™æ(<†×ß|âŠã³²6xRb†,"Ön8æ&ú ¸Oë;™˜;¢}g“¨?LüÉ-Â1KæÌØôj)× Úü†TØOm 3”c +=ï7襯D“a!& +€¼@.9¹†zi)OòÊèÞ†¹­ö5sˆÐ´z(3EsU¤ h3Ð?Ä�®C6’AV¦FAÐõ ¿Q½ïé,¡Wëï©øŸf?®Ð­ò‚ê·„ÙŽ o}‡J¿3Î7:ù(Uì¼�+;^�ÿ64nöœx}#Uï +Óû8Ô]ÕÙߘѪ÷y"‰e¿_Óbw1<$éá?®t‹Qg¿Ô‚/ÊïµÐ;¡Ÿè:gó³›:Gkf^ôE–��9O1õ¬ˆQé¦/ž7î2•@ÓJ¹ +.QAsb@¡\°»(`æg�áCšÏ›í]'�`Ý<4!'™Û­—£l¹˜š4Pòes³cy€a¢ }Áºt¨µš’ÄÊEYÙ�P�25}Ê×$Jf n?’ºÚ¨)‘D¹(!; PÎ{f¿ý¥�ijt'º947póit~Idô{±& ƒO¹L„°¤²§Ìž€K4C#M!)h«$|–Æt F~|…bwn2B)õÐX»! E½BRdi¤ð�"P+ÿ'çìÇãOã‹íâö‘3ùËáþᦟ¥ò×ܾq÷ðkár:®'Ï+#vÒ‚‚©Ê õ)â +ûïà+µÞ;È5Ni« X-|5ÆvzoˆnèMÔEQ®ì7�ž)€f ¬Ä9‘Å1£Åb?¨.Á¿Xi�Š ÄtIÑ¢o]@Œ²vˆ“\wÝæÒ¥Õú x2Q/¬¤^ÛÖ�ù\O��yu}Ö*ÄÑ2] +gg�j%[T¬‚¤Dó›õxM + ޶ AutA�ÖÍ}Qì² ›¼]"·¼ãÌøŽ DaÐ^‚‘�¯²ßýÒûåuÇ`ÜÐö¢}²³õëuÙúÇV‡Hê núdIó‰m´Ùy £'fô€¡ïmófLÌ®¾®óFuh[º«B—Úœ[ +sã~rHþ@�L¸-UÑ…x)¢ŠþAáo&‡ÿ«qøÍ²ƒŸF<¨Ÿ‡cæ†X¡¡šë“[q¯ÁÓM³,‚}Rç7Ø�ì²Te¾4ë9  °{Oeÿ>4£Àà¦îˆ‹ÍöÃÍZï¡ËÛ,iäÁÛóÍ{!ÄËñ#~ëH¬ªÙ¹ŠQ~?V枨�Œ¾ÍVÒ]r$“Uš†Õ êÛ(Ú([jÀL¡í¶)µ˜ØÔl‰5›^ÝK§ÝeH6j{Íh~]»‚–¾Úu¿›Û·AšëõõAIÖZýeؘõ½d€?\_–1÷‚Q$Šd©×¡ŽcLì§/Ÿ÷Kp.ÓPÀé6ôØ£€f™C¬l˵€qÊ`Õ/�IçúºD”‰®A%9ÝÞkâûQ&¯Ø„߈¾0d6ÓÄ +�½…¹íŽ*IŒ«ÿ?inâÉ`ùo?С\€[¶Aý =>ñÞ¦,eV0?cÚk²ƒGëÛF�ñ¢«@µÐá­Ë`…8ô$ÿ˜¨�F„b©Ž>c‡×2êkmŠ£)‘âþKÃ(°¾¿s0ò×sÒÔÈÕ¾ Ôp1Èò@0M%|çidæ˜üç8†ã¥\•7¯Õx})ÆP¼‘öµ'®�*¼gø" §a‘ög…Áœ ”šnqlõ�un�Còë6¥|ªy�·\?õùÉ�>ãØm8VrFÐmÍ<—ùÖý-t~ùÜO²yÔÛ^,·EØ¢F�GB©¤‰ ú>'u„ÂSîFêdL_åüÅ@ƒ¬âZÖè�¨éPº–¹i.Í�Ì3@]f ÿbóïÀ{ÒŸßSâ·f�ï�â§Å³R�è-•‰ÍmìÚ`4ã8³ºþV\Ý‘Û:‚/�£Í]¸®'N³u�ìu~îJ„ßO=ŠÂº§„Ûn§%´óXb¤[ÿè2§Óm]¶‡*yˆô½rÁNw*LÑL IÉž5nå¼ÙEwíª¢š¤ ;8/¯Årå7�bRd�ÖÛ•“ ×xÓrÇ7ÞÌú™¢Ã™À~vÒ‰Õ #zÒg>¢�M†´ÓµMñ²„½8aCê>¸@tab9®‚RIÔÐv‘}Ëö/äØÓ€;~�gƒ™¤‹äí�Tšj|”Aèr*0bZ¡$¾™StJ†~KÜÈŸ­Ã>^µÜ§M˜§ÊiïøXQÆ—¿ñª”YØc˜D÷‘§·Ëa¾Û»²‹–B‰ïß«—륄�BŠŸSÓëåˆw†)/ƒ#1ÐÌ"•8͵â%ص—¶‘Yyà_ÝävÊxŽ�~æ– ìí46�UX—[‡¦½à•=¼•&ý-P¿Ùƒ¢É]Ô +š†\ºÀ?�qÛ<†ÅðÁˆþÌk²üh•Ôbäµ�T†!¦5t·Ë ä,©–…oé nßÕþK…èÊ„ÞÑšN!¿¢¿…_’Q%°¡CšM‘)�ýûôš «}0Á¢ӪÔl’DC#ç«)Ý�ö +ÕaÏ@�ÔpøÏí(ªu'Âèÿè(nø¹wÔ!Þh=÷·ÙDT�›«ïÀ¢ÆÔŠ„']$O< o-¢‚UPm+–b/¡fÊŽíÐ~Èn + êÛÀ䓸†Ì~…-hÌ5Ï\7ëÇö/JFIAr€çûB8éêXÝ  B·ÞßÝNË ´–&ð~ü +ã}ØÓÖWÓÌd‡O>dz(”IýÛ�T@5zDÐ?¤a`‡Æ7'.Džƒ¬µtUnðT5üL�2»UÌÿËŽäµFkºà­—„|®u7I?Μ\øxh½²Â'êÑFɶ—ö­hwŽî“4õªWK°ßÏÐry›ˆÔI*öÉj«w}ÙmÑØ_I³jzНx\‰“þíJùûF³ סRšÏ|Ô¹h‹lÔ\|INñÅ©Z_™W�E84m‚| ¬ùH+,ýÖ•aÉj0˜u–]¶ jtø… tšÕ@_0˜;x@ZúXïh„à–•ýS„l9^ܩ뭪Fqm˜WÀïÁ�5“ôÇï�EÿÇákN1�aÿˆÒÈ6ò,¯‰íЫW~¤±Å˜Ùy*»âj8e'�9œ-S…±…£T�R(SÉÀ‡ãÞ%qkf‡c¸9£›ÁªE¸{9ßI3X½^Ålµ Ø~kòmɈ4�·i×°nrzœÃ™‰ô½â è¼ü|B˜¼\�öµˆ¨—$|¤B�Þœ0E/Ø·«ÇÑ«»ê\‚ÂGéZú’ØÀYšÓaÓ̆iêoYf�IJjPkΗêªó-M�–Ç=‰G»™“ŒÑN󳡻tè!Šq꣌ØOù{ÃBîîãý°-qû¼ú¶¬Â È´‡ÞÙaˆ½W¾�ˆP‡é~ÈVŽZîB�BL1¹ßõg!³›”†Ð¼ h) �æ#Y1VXt +†ä�ÃEÿ,-µJNH]b­LÔâvDr%º‹ûç×DB4ÈÓI/(%  Tˆ¼NŸmuNð£­�·…Iaˆæ&¥< '·Øƒ7—¼7{ÛÅ¢Æ,�ÏÐ9U ð´2ÔÛ°~".{äj�,GËœh¥$�üGÚ oBµÓë½Ó\|zÃ?Tú¹’Uán¤ßFLG`..,a3k¾¡oܸY¬B|O»aû +S^W*ÍhÊ® 'ª¹-ëu¶6h Å„P˜*vW"9Õ(½S\‘G Ô-î°ýdø=¤àÈz_¹åo:‰Ìª“Ž|œ{C~Ãè0x×+çsý‹ŒFîAôÃ^³;¶1kBHgÑ&dw~#»(„ᤢÌ-Šûñ¾N“%\vôP"W0‡Ó~Ì?‚üüÆÈêÏP9ôlz¡‹ò_�È3Í#ã¡΃ž †}hg£KÁÍOàð|  ëb62VåèP²Á µ²µK6c�í’ÓXÚÚãWu¢‡`(6~å´€�"U�W {RËŽøÆJå@²ÉÃ_0L½m³i}µn¿��ÑCJû½, Ô"å�žÔ)¸›C _?ÑP¨Š¢hS3®� +±,3!àœéýò`�¢Ÿ-C[Êè¦�üƒ…Œ + d\FɈ.Ê¥df~…WO™–§9*þ¥FÑèÖ ›°^ +¨þª#ÔˆÔ9Ó‰B-d>�4DÉÖÎä“•`SD"åIÔá^–» œìËLd"AmrÅwË>BÈEiþc˜¯JH�gü”uR»f§Ãõ¡ŠUÎaTøÜøàAòTXÔ2 b²¤)FÕ9¿Q娻u&~hË2¼|s>ìC7Ã�¤ÝÂ@#SP{Pt¹^êÏóaiž÷òÛÿµu˜K�“�쟯Qîí÷'h%ÈN>¬[#©o…Ä—u~ bž£�TËbHXÈÁj6œ!^¤Í€à®–°"U…L.ã +ôãA91“‹Úò e!p ¦| 5o¬Œ™!*W%Cz;°ÂÑí™%x„!Jd^X°Ôg +9“ß„‰^’+9\†]rã’&ˆìžßZJKØV€Ç¿À‰Œ£ÓÀˆ5Ãh¥Br/iŒ€ú 6 3øOê£ìãh<|©½”£Û +Éû¸"¸Š\£Òg‰ó]œ|�Š�dà"¯|Á \�½ƒ^cÕ‹Èô“‡šX묽ׂë˜h’%]´”¿(ȯzñ xèK 6“~’�^lZ�­£¥Íéq�ú­ï~×iÿ=уÈ]�DåbŠtz?¢)Ïc£ €i±›SF1!È %³„ Ž‚QJ€¶ +~ì½Q̼\_w +H $K”:ûër»T¸Î€n¹$6Ë5Èäg³\-Ë«�é…A'|é#s5ejÅeaÙV€òSsÅQyŸ”ÙšÀ;KÂ}¤d£L"‘ñ’! Ñ_Ÿ,Ë÷íô�ý¿9pß»}j§@pƒê«EÊ(Ò¦oÑ%g±ÞP�Ø>G-ÉX‘˜Î÷PÌåh±P#K ÃJb�JŸïFäé=hL&?¬zÀ9 )‚3ФÁ\o¹LÐíÿQÞ§6üšª“ûqâ>±”‡bÜ»¶é榼­—mÜaøëŸœ>î�ç·ø£ ö©\M¶ +Å´0•Œùqp(«÷{É}„i¿ìÙ|Õ®;­u…B@aTçL�êÉ‚hæ‡V‚¢ÈX›¦!„À¿r¶/Çí%R#¼‘e µc�Èéi[@£´7󓥨Y£É-° Þé˜=€Ëgþd¼rM»Òô´zz†:QA”´Ú¢YЕ:ÏY°¿vêél8/Í… ¶0exŠ!óe ²‚F›DËDÀñŽ6˜a+ ¢·„PÆ8@xN’?�¨¾ ±w�ãíQ»QŒîÀÈ-çßæÞ¶5rm‚J»Dœ­ád btëj]Æ�Bž+ç+œùX^®±ªœ“³Â!_¬ã�‘ñ¨Lñ¿:pÿ!ÓÒxºv¼«¼šAu�uà¹ÁÑ2Ÿÿ—²ƒ—Ü8cÑÅc.ô[²»* „+äºQ~ª—%^?§2UV5²ÒðDÂr~Þ>¶p•š„×E‹7Y‹ìQÓó­ÙCHÜ#¥cÎ?[æ/÷µ!8ÖÈâëé8—ÉöôDÛ[*¤0Gz>Ê’%GYñ4aÉöŸ€tYVCÕ'Þl¼Ç…÷�¨¹˜r‹Ùv²$_Æ îÍ$.HÔa€ÞŒŸ±x–AŠw¨9�¾yg�|‰c2P¥Û%¹Û(îJ"q/òår£cÑwmmšÔ‹U‡´=VíÂ6õ2Q½0~7†¬›rªTÔÄÉên}³É®‘ɦÔ]±¬, È2ÏâËJé6Fb#È`þ%Àæ÷ �©‹¹Z ÛÝ™ƒN°ªq…D�%ñæj¥SqŽÁ…RSEÛÓš'øÒT…žGgÊ{/ÊWjÎW‹G©÷�™FË ˜éþ€(p€ÄJœç¸E+�ÏjOÓ1ÕI5ŸXLfPMã‰éçw©7\®À …(Do•¼ÿ/†$é¸×Áܲ!�7‡Kþ'‚q �¨FÍ(”†N‚åŸû•ø€"òkLéo°6i²µÛd’ÀœhD„*Œš2½óC84¹õçjÛ2ý‹÷Ëí@;Òˆ¡“ꌅ�þ•Ò²b�4¡Éá ­]3w9ž¥‘ë +Š6® +o»îï?0ÐH7Y’¨` ȃ”NU´¾„·!ÈCÆZßn2‚çÌ&â#9 +CðEm‹§.f ¥M +q„ïð€ñ&_eDHZÑEAFs¶\ˆ*Ʉϥˆê ;zÉx¯\E4— dÌðûC²¨ÿþ\h „_¥Êq “­(5²•ýL lû´õ\ć„ÊUÖ_fš\+ªÃ¡kÂ�!q n4%¢ô7PÔûvQiOýó^ ¶DÙãÞÓ¼HNõluzÝKz‰ô�[Lã·½ÏÈË�QÐ*ª¾J×E(­ý‰†¼>Ô^ð¦ŽdH^?ˆ@¾•ŠÔ§ë­Ï5D5©í#z¡ßþφpðÏÛä±q3X‚dª,Ðøö=Ûq›!‚0Zîaç'bù‚îm˜JÛ$“îÔvÌ|< ·³Ê(› =þØÕE)ˆ¤Qfùš�*ÞÅÈ[á:)â¿ÝE=ä¿åÆtnÑgÊðÿ +ãÄu8K7ÿ+_¼Ðé fœ·\á2Ï-{PÙ½0×Dä 5Ø’ÔyŠÜcq[挂.‰(‘ ²¢”ce]P$C¬8~ÿ([PZCåìúbèÛ9:\‡<ó”‘´M—xŽ›Ý9þDèË A³HÚO3F%,;þvC}ˆK’Ș:1† Ô6]XiÊsg�[ÍMu(#8B³ÑÊC4k­¬Ÿ@wò¨Šü$äÖl#à¿mm¸�ïç™�¦ó�„O컨¾u ¬Û«æ5˜0CƒI»�àMvÁtÀ7¸e½ðÁ\±óTx‰òlxlåí7‹ä¦N€ºû8Îaôl“wÍÖ§‰û¬ gj"C��2Ô$p$3èoÝ]aÊ�ô˜²±ÐÌÜýrQ#úYù·ÕsBáÿØé¨½FÜŸ€J ÿÉ%4õí�bäË>që €ýO9/ë³8²´�9îÍZn»KÇ\J~ økCa‘îÿ&ËY¸±‹äό省ç�v‘ £ùœ�Ò¥i (OÄ Â°KC`ö/%ä`©×„DYºˆÁKš„>&U9¤ÍçÁ•Ö‚ùLZù3hcV!‰n² J0æÄ†K¡Žz ¤¼ê� &sC÷ó N±…%ú… Û_t.îh¹_Ž®øÑÕXÝÁbÂìí/±lƒÙ}ò¥v�óœ�=ù+\Ë%¤Õ�¿ŸŠ‹//ÉE:Œô�ãa¢R¼RòÁ!—¼CXÒ€xfüîJ'Ì2¦ÿJ¡Ì"סœ˜ò»1e­P«³<ÙÛËúLeüStÊ6À¤ÏAV.6 YÖVãïv§Oò[¶ ÿk‘X¥O&ïg6§d8q_Âeb1éþxظ)y‚LF O°Ë¢û7`üô¬&0½/'”iÊÿ§à?Wî.ʳ†…fŠÎÛÇ{cRÆnd[3�¤ÜÜ`R¿Ü8ƒç‘~"ƒä¯ÄŽêÎi¦HèÚhj¡Û¯¯Û‰üŸJ;„_`Õùšª¸�½©¹?[ +^(¯~°°^wwL5H¤W„²ÔP§µw°ÂÚ´½•Uà"‚ ðÕEv½bæs¾iÛ–$Zå ˜:Ø÷5ÌUŽÉþ~?ºb€ÖÁCÉÅàÓÉ•Ô0yä™ Ÿ>ïsÉz¬jÿW„�JâËOK"/§¥Qß2НÄÍ9]à$__œøZVdfË’\AríñÇÉ<'ÔAÙÍ�}ÇaIò7°n¢\>®iaÍÿ’Z¹8eI(T¸§bCtöÈ5É]~ K¢‡ÌTª 묖ZõnËÜ_ ]Ìzk�&ÀÙPúɲX^JFÀß¿÷6ºH)†MKt)6¾À+k‡>¶ØKkWÊŒ ,§lÚ(;äØo-Òk+¾€x±d^÷ɼûg4Añ™í\³#œTw…!Ç�µþL€²!K¾Ê®4žá4à[ie÷Ž›êåÊðj?à6üµ�HIZÍD‰0USýrµ|—�H ×Tõ&ñ^ubRy$­F«p…##Z´’”ªl<{˜«hH ]ŠÒ0³!ÖôJãàÓX  Š”Гá¤`Š{À[l¥¾¹s êó·§ŽÄK׌À…6°=Ý =VôÁ^©­°Q<´œ¢†ªo ñ| +b‘T—Y©OƒÝœšÊÙ Q¯�VÛ7^7_Ä*ÄËaŸ„PˆCDáj8ㆱüB®k•…ùÉ8P­6 qü M£ÈB6Q‹È¹TîKO©@Ü·WÀδ¥Ê×ðîëO±ÑõÜëhe¯1Qf‰ZA`ìvˆ¾—w¡KE6šµ¥1×P+ÖK±Ú�¦<pä7¼Ø}Ìpq!Ðí4 Óà™2Þk!™¼¯;;€—uÈtΡ­>\qïÎð`âÕA´æƒäü–°£VŒ¼?Íÿ ªC½4žF¬•JjHöûÿxw*ºÜÒ)ÌŸX1‹±X„6ð-¦0ÛoÀ*²TP4„í¯+²D“¼5I»Ì[“µ 1Å —‚q¶©XãÑÑJP@‘ÍŠ ä!  ËÚÎÞ¬€ ÊÛW\ûnæ‚[A»qؤYÃåQ�NÍ9�å4" +a à¢önx*ßYw“bþtˆþ ít&Ëž™7Åè§¼jÎâ;Â4þHKPMVZkos‘0ÏœŒ Únò+¼ñœ˜+6Pdˆ*¿ÀMÐŽæ—ái"ä� � º‡l%å7£ŒÁ4ù’Ddõh½�<Ñ¢W擨‰­¡?B³Ñ¿¾b7jÁ +ï[`A‚C—5Á�.á�^Gm£6Ò§„±Êc‚0Gfÿþöcò'›X!,ö xV ð!~ÀO†b%ìÇNe„V6«áƒŸš§œ VZüÌŠOƒë’sŒ“ßMA1vyÞj>1~ŽU ¹^ÆöQ`�Í4’->P•Åo šp-ľô_†bìZ‡£õ^,àØ$\„ã�éKàλ§òÓPÎû…áo³U”ذB»pHýIÞ?šï ¯‰` +0Zbõßã<Ëହô~@Yüô\ÌØÕßÓÿÓ´éSà‡¡Ø/ô1 » y1NÉ2ŒÌ>€<ñ#¢½gø”¹»Ç†¾Äß[(n;ãÔlœcA¶|Šˆò–Y!�pîÞì@`�„É"BŽ><’S)°°®Ê†Ô3Ôàe é‰÷VBË� ™Í·�Þ÷a¹�"=-(q6º'ó³B“$×1‹xë'§C+éÁ ¾ä?Q)¦bªVÀ•* Cû£1•Œ€8$ÉŒ-}Ï„VºU¤ûΑ¤¸+õ“æç­4ëo¤®dQ$zX¥ °ÒëBÀŸBô*m6,e%ª‘AŠS­D ÍìoH,QešÙpÊ+Ù})ø€¥ýº“Š3Û¯dE¿BûU"%¾öÓ+9ƒ¹GX’äyS´$‰x ì´R©%hSdgQÒj9xV:¼KÍñC£ÏxçÞPÇ@î#È(þfÈŸŠ¢<22Ö «¦�VÞ'á¾IoD¹*®”yCivnT$¶}}‚�ÙdL¶"n­³Ù+l+£X�Tf¨D™Ý’´Ý7O=M +^º;d‚�í¡^û¬­ñ9¯ð3ŽL&Ó~û PâQB/häP „ûˆ°–“).Q¾¡`S9±A‚H•Ó;eY�7+’­�ù�xa TçÌjÁ I‘P_®4|*fMAÐ䞼ࢯpù6¯à«ÁH:Pê@[÷FŸ=³Iãàâq}¸‰sƒÿÕ¢á GÛ6Šæ[p.— @ð qoô2‹â‘ËI" XQh’?ÈXï”6|]ÇàŒTI‹¾n@::g*•…‘ó€þ[wÂ-ØW£Jý�V6`U“ЧpŸC/h#ZZÓp€e¯ö9^¬CV:kÅY£Q±0ûm5‡)€]„¾Rå6Pò(p)kê^Ù��"z�/n�KëŒr’@ô�ïÜXã'žM 'µZ¼×Â^¡C‘í-�7S $ÙŸü⎮†ø;ËüšÒÒoÅapˆíô"û¶Ìt×q° Uu•í�¤ä�"Éy[­ i;™…Ø6™VBÈí:y· ¤Ed�?‘€¡üÇèÇÙ~å³kî ëÈ—`fý`Wøö³j«N'çqóŽ— ˜gÔãnÜXòt&G—e6“&^ÙJ +7Õ\ÉÑt:úKl�1`!ˆóŒ!ÿqPÌT%,¤¹HÖëÈ m‡×ÖJÔ!–ÑpnWÞEÎHdDv{ d֪S(óJ—5ç*e^96ýIAþ™Ê@ç&‡- NL“ÈÞ{Œ±°²ø {�ÜÇCpˆáð=R…ÃÍ ¦Á÷¹M‰J€ª%[UtcÞÆ:î(f ‰ÿg(¢òHö]-mê̅Ĭr£’,[ÛÈ‘áßA ý=Eði*Eï-*ä HŒaõîκò¼VÃ> /Pò%¦«^O©Nx3ð0’ßp¨ ïz© ·ÍY˜•O&�“B>–N¦èr:¬ œÔ‚c¶™/‚ C̹¿³ð=ôÏiA�O÷ªp@äßÀʉ ×,!0H>d~îÌÑ€g']Å+š%—|ÅsÖGÁÂèbCNN=ƒ7BŠÃ»ý$£PŒ99“êÍTßf­ÌcÙÑPÍy€ÎÎÝô•y ô¡.¡ô¥q•kž¨‚5�ñû˜œ +“Í. ˜S¡F oº%#1.h[œÌ]líåx:„™HÓtûu[&š FÝç*b÷Édþ7¯fѳpOVô.j׳Æ6~î,ÀNœôWˆG‘ßF½j’}ÐT Òâ—Mj!ÚP2õ䪜>xE0A¦¹Eq<1øh\ˆ­¿©lϱéÃb×>¶ÔËàžjDú5ï‰~/¸Ø°8Œu«Ùx,”Ø�¥³Ê–µ¯Ç” ‰Nl8ƒØÍܽÉ„ G’ëýÎ'ÿË É5³sð]Ï!c$hòXÕyevéç†%Ú@E«`:©r,ྠ…¥e#ö"ãúy> +ÓF»9Bõ¡ Áɀњ†ø ¨ EF&¢®Ø¡ }F²¾dؽ ã-\Q2֫阸ߩ+ê“°¾Ãn JÁùÇÙ(ZÀ¼SB�╬OJ¸øpd�tâ+ˆ_ÏÏZ�æ)Ùœ:#@�PT‡N—·�Wöªáÿù§Õ)þcÈ,'²ºÂ0xÓÑ7MÞH\'?.Í�Y hbý£58¥sCükzµ¨C¼•çöÍ1‡ƒô“íNdת�¶(1º š${Y7/®µðÏav ¦Ë<¸ÿTcQ…)ÑÆùFWˆQ Äò‚ëòï›>IvósO»Æ§U½ÇÉbpµª²äóuNˆiCá%Žàiá8xrê8Y¨ßv¡L;YT1°3Z,Ö7Xfý…¹ìáƒäÞÏ/"ªkAË >Á}RÚÿjm»'�²7Ámrê©&¡#c”ˆ‡¸y¶Aʆ—2K¼q†íD½?=£«7ç]£„%„ÔvØ‚—¡»)a~D» m“ÉÙ�úüx0WÌ_G©Ž£˜|Eæ¡¿’ÙkêðfÅôJúX +²=9ÒéòòS…˜Þj™%Ea–w(€á{\*žFÀ ¤v¼Kç²óýÄ6õgZœ9©™9ˆBù—Éœñ)CÐhÙoÈ†Ò ŠŠª{Q¾­ã" 0“@d 0—6Ÿ}aŒø_-\–ãCÁ ?�–‹ÐE7^æÜMRlz.Î"¸€>?O6ÅÚG vÌRþ.É�A³=. 7MؘÌ[®}þa²Á…í1ŠJ=Ô�Vp¸Õ³H„Á´�)‘Ö®:.t€K'ÛI!>cƶû@–IGŒ�%moœôý û5òäe»F9c™ÆÈôßïäâ# +ÈWRÿ¾7pZM„å‰8*`{ÈI½v€kDKZ>æbŽ&·ö.³œókd½°vÌw×$NJÝÊô—_¶[‚>[¢ÐÛºO ϰí…BÍ豩˜Qs7Ç¡Ûx,ÊZ‘Ø4Ï<)ä™â¬2"òÌxÇ�‹ ÿ\(*‹BùHõ¿KAírˆbÚV…ÒüÞ7¤Éî&×QĤðh³²ÒT„m!ØŽýƒ7pòøï(õR»Vß´²h ùdý=®Ú^ñÖ«Géuá<6yö Ô7ædfBE;ø¶�?q¬p{^Ãd¦àWÈÛê ²|dZƒ9ükåV“û° 9³¼O-ËAO;(×ËM¦ÿ�ÅšãëûE¹;¯ÄkÔLý´—›ÁºÐ +–¾UÙ}ãÃ}œ©ºŒÅe®L&wÇ6–M±MSåu•?ñ4ªÿ‚–¶Ð÷´A�¦Ïlž&RýJ½M‰Zµ¨þ&�,ƒIS\“½kD!)>à Î=P!¦é)L1Dq}ÏÙ Îݤ}UN™õ˜&XRYÕ®’¹ÐÑÛ`7\Ñý³­«h,vaØ-ÕE]B.—CdÒ¤âÕ%œS[6ÚìŒp}Þ¥¡²jÛ>(ÑÃ>²óÂÄ@Ocv€¦:ë +ÃÀv—Öµb¾Qðð¯ÒÊëÅRk…¥Arø§ba¢Až”þ Œn_khâ Ò„ÆFLà \Vúq óÿÿÿ¿ +-˜(ÚYç¬s¾Ç»q߉oghbÂ7ŠˆAÁ±,BE‘@E­“S'Ï �§�6cÅc±)bÙË0*)(Ç 84†qÝ´Â�‰MÌÜd»§•›Žl² +pÓÕ rÝ @ˆ*Fq!)Me+$9ê5ÐÔ j@¸&0�ð ³…ÛѶ°eÛ¶mš¦mËÂÂÂÂÂÂöl›¶-‹m{¨mY–ŽVmÛ!oÛ¶íÛ¶p…ö UTAœVm7£¦íܶU;ñ.Uì@­¡!CctrùÈèDr‰ ¹ªÁIÈHnB¹m Ž�Bü/—ûÿÿâýß÷ÿåßÿ/ð±þ1Ó™™…k$&ÿ03ÃÎÃtf8£™™ÙÌÈØöðð=cÛ¶í‰÷ØvmÏö}{†ÝùöØÛöínlÛÃ3�  Ñ̦gÛ¾„ ²+Ûö<ÛžŠÿ»ÈMŸà&L›ÜP‡$).ž³‘…Jˆ›Xã ŸÀ$(lCš äð*90IÒ©ÁcèÖ Ê�B’(r¤lœ†„R¨Á›8mààÐbŒ±1 ÿÿÿ{ùùÿÿ?ÿ�´¨¤:½s�Àá0 ÅâÍÛî]J:8JbNbŸÌä4ìœú�–`Ç/}QÏÞ3>í§W”(O†Ÿ­­+ `¨R.þG2A  œú›�{4ä„Aû˜i…>kZ)îƒ1Œ·IÊjâÐöø6Î�Õ +jk×q( Þg)6ÁZ”² +rèhAÀJ#°>fêÔÏ °Ûò.ÂÓõ¸¾eÖmÖdË¡t.¬ºñPl–©ˆY’ 3¦(‡¢Fþ€S�ù)¯·…ÄÁ}Œww"îd?€›&n’:Zo¨¯û./Ì�Ï‹ús)BŸYpìMP…h§ƒ4Ï%ñ ˜]K·&`%pñX"²õšQƒ w6#HózȳĻªåFå Þšg©¦üi4$”(» ¨B�gî0¡¾KXeæU¬„L³`‘dp^ïtìh¾Uó� +˜Ä7%3CÄi’*9ØÁË.?­"$ƒý‚Ú7èéP±—µˆÐ”oê†{Á qr±QþŸóC[TA +Ç.ħR­ž,Fœ#…ˆZHFN”OÒåDc5xDCLo0Ö©ys¸P€t=íó¨ï¾1ôƒ¢à+!ÏÖyÒ1!è0’Úž_BÂÍkç9&XUÙ‰—\`È: ±Ê|ÓsÐ_� N@µ$SÊ‘'ûÂÙ.�ß+ÚŒ@I72¼¡«ü«·Ã¤U»eÀ®£�6ôPç š›a²Qßöá¢2náO7'M³O×ÖÈ|Ç0czåϘRW@+ yˆŸ&OeˆWð!ƒ†%4°9ÖÆäº‚_E �É„¤@ãîÎÁ�SÅ�z1cAo+f¶£‹²YnoI&»üÇŸ�Iw¢Ñ6â|³À%Š=¿Á˜–À2®-^âçÄ„5{EÕGLnD¬Úiœè¬Æ˜]pžÓçý½=P-ST¼&c‹3ÅŸXkÈ·ãæ"ÁŠBenå�^ÀF�f °J>˜­º>Ø¥h¹”à ~GK‡$àA¯‚ÕXrÆH1ùôÌ•´—èp§Ÿ0ÜàyÏ@ØXéxØäimr<á§Ø³Çö×~Âî\[ËÌε<)Iè!Š®àA 1â~<e¹ùÌf¤¹cj_ô“ÜôËdQp"Æ +bmq +9ZZHÚ;=ÍyÝ Š.úg1¸V?êØÂ–‰‚ZÁùuØ4ëÚ”!IÐüØÈ�rQbˆïPaú)Ng…¥}Æ}£”ÈXœÓ¼¹™¥2:'ámµ’Ó¹UíÑO‡ÏX6ŽZ*XÔËáSÃíDLµa�ò‹—¹)L¶ëˇGÍ”¬½LdæyÒ6EF¦V²•È{¨´¦ÿwŠy’xHѯ¢1�€Bö]úº0p5ÓÑ…­J¹õíR‡&w´¼ࣥu�úMÐ÷ƒS ÊW5eKèˆÝ7×Å7�ÇÚ@ib…™¤'½L�à°u1BŒEDWo´Ñ·l–JýЮžM³§ˆXQi}† +ëm`X™g›6_aäïã í"4�MVâjdh¶RëREòXê0XµPù—ú*b‚½´Ìe4c×·“ˆ‡‹6òÛE< \εÄ}ˆö•¤­äy®ÓóÖ�˺O�ðz+î§ÈìSÿ{3.ô°~9Öh°ø -Á �H� �ÙP½*¾÷¢äü\3Ï"£]/„RËáô-��MhÀy^�Ü6ê�QDÍ�ö™åÞNLaOÜÄdÕ=ˆµ €öÇÔªÄ�”ÿTùeU‡y±©ÀõDÐSzÁ"Á<\7¿|i˜ú…i‚6]£„&þ×ÎnÞs¨zʱ4cTDC+“æH¨j¬Ìb'¦.OÚ¡Zj£%ª³Ÿ-�˜Mî¢Ï:»“(Ø ´¿ø¾HGíÒ×™€Õ�™ôºG?‘”<:³€“T�p”Û¸ñm"°Õ¶ùW@‘Ö²!TÙ+“C$µÂ��F–¥�KºÁ†W(À´†eû߂֓âù^­ÆžŸ h ËÎ$…<ð�eD±:Å‘D:RžŒ‰5ìk4Q2ÒjQÚbÞ j—-T\ +9ƒó•da½ö7KªñG>–jü�+]†~¤‘ÿ'Շ͢I6çÆŒ¿­ç³p¸ïE³ä¨Oç:Œe¬šSË“OÂÆ«Õ¦úyôpÖ=/síÇšO¬RiaŒ{9i�ÓQ«;”ÝRÅT7Ê~§’]+ô5¨&4#ª&;-Ž{cÍÑ٦VŠ„< +–LÀ¯Ù ­ iås†’×ù®à K s }ß_"ôv×(Tß–XAvÂyÉL醸 µºt¸&Z‘N eK10°s†œÍëý)­{Ò{éÏL?Hù¯Ä€dÍé?$Ãö[¸þ_ 5Ø6Hö] V±<Ÿ�]ÕEB˜¿^ï—EÜ6ºÙÔÞòì¯Ì3k|‹ ~”ê€ÞVlI•ªt,Ÿd¦¾Âƒ.¤Æ]pŽHÞÁ§æQ“„Qƒ{G míóYF)…Ì„ðß×+—`�xY~�0Ã<.Òs”®RtŸh}â7Yvâ»T{{úܶI‘v>9ãÞ©“Wæã:\NƒMUQG†ä+&eÜß÷@ŒW‰¤m 5ò-„Ô^%äyFRâ¦^¼o�ì—Ã_+ì œ0çbÌ3z†€PÏüTdÏÜnLÇ"v¤H'è@Ȉ'÷˜½>ƒ`D*òÒÉ& Ü9õ¼¶œíÊGâ;cH²Å›JN[ñf€h³Í î+—Òdhû¹Ù¦Ì{G0äG5†Ô\]‡U(HsŒ10%BϸPùqÂBcå9 +œ™0‚�—€~rqÙ‚¼_Z"J8Ÿú(8Wô@{öJ²]êIÉ n=³ò„iÅõª meîtLº�8Røõ@1ý·[/Ô#Æ{˜•‘¨ŒÖ-v™t/NëðRJ¶Z“7°ø44¶Mž7 Ê_AT'‘ÀéáѺëQ¤èöÑC«èéC¨VöÕ¾ßCy'b×%)Ý(rj4ÿ¬\FÜp1ÁÛ (ÍÓ¥-­p*buè™·ZØš9HÅèü,ka³/æØIŠÞN§‹wÄH<Õ|=•:Ü~­Œ¿T Œ�­ºüÄïØ ôð=êbòÇöÃ×Ù§Xâ&_<õJ@)s¡òužØ#˜ÚfA³Žç;zø=µ§¦Kc´?9ÇüþÁt¤Ï®ŠPÔp)î9‰¤?€>®@åZ¸ÇÛð>?•Ó÷ÅTX_À8!�Bp®=ËÜó{þîµgeˆf}ïÒ¹NÂ=&ÆUr’º¼©þdss¯Â�cøêò’C‹°ð4"Å€’½ÝK€ÿ_R¹@Žˆ�Iß µˆ<(õ‡ ø…ªoÄóód+@¥Š{kwTæúþ*Çž.–)”íT¨æÉuâž s^Y0Ÿ†tº½Ò$/"|$ë¶'ÍJ(W91„bêí%-`ÛÞ@|ˆì�@C¾ù«%}úžqQ_ÿL;Œ‹Jÿ3ƒ²®š+ x)ìÛù^ä5ÒÜ àö€Gâ¨çþÒ¾AùB‚9YÅD.C¸4Åe‘G˜¥×V÷lgôPóÐGkd÷Ä0r÷ÈxÙ:5Œº½|õDúãÒ†»ß,ˆÒaà”Ély¼9²´Š´gw{T{[!§ wÚ&ðž4¿r m’^Z�ëâØ`%É *Py‘壬#±ƒ.øùA™“kÜÓeŒ�M!$ «_IÚ›ÓýŒ{‡ÃÁùÛ–Âl+—8³†r<÷î~o½üã4Ç=é6ÑÀ!ÌÙoQ¨h7öéq‚´¼¼®$¢/Ìûê· ËÛûÔ6š#7T€¶æˆU‰²Eºz®loÔÜ”TC+k0ôÂzD5*ëgà¥@g‡¤‡¬)Ò,—܃Ìq›º÷ ¥õSñ=~î¥J£}{hì&IŠöåÿÇBc#?ù‰Ál“$Hì¼ÐÊK1Sà'<ž…*u÷öNê÷ȼe)þ¨tiƒpÙ8°Ÿ0ØÚ:´—8Œ‚ºú™ö”È:J¤nïáùaf‚Ÿ¾�Ëv˺hÖPä–CQóü„lSó·çÞy+… O½n´•Yàí&\¼_]Ô¿ú*�ëÀÇRdÃÂG^„*|æeöó\j1$ûž[\™%» ÙœË�B°/jEG!òõ$=”­mWƒ1A�¸~J‹¸«¼ôN7Mi'Ãm¨4«ƒWAAwz¿Ñs­ä®«j›zc+1bè“c•ïXe®Xrï)–ƒgp骔dŠ“qÛô÷Êp¿‹ÒrÌe~UÅ=£2JCÛC<ùLC;óÁààCü:öâÀUµÍ¯=Bà Ö¡ºÜé†é¾å×2íH¤oŠ褡^Ih ßW´J»Ç6Êj%VÅ{È20ú)Å¡¿ÛqM½Õx/VÝ9ÿ5ŸôrWIg§îPÞ«êܩՋ‘4Jžüe¼C¦åÁ¬wÇó‚r¥üÆzHž¼ ÷é –ËÈÖ)X¯ÔDÀ ë‰äúL@25 y›‚�ÌÚ+“¶\SŠdÂæ¥)AˆUPb 2Åæ€‰åBfã®V™7ଳ`ÉÄø†Ìg}ˆÑßh± Û¸"U�i +Öƒ' +™›¢Ü�œÐÉf>B, R�¶Ò7õ˜Ë6Nd¦»˜‹�ø`Á6½/Ôn‰¯Ôš�ð&à pD:{#‹z)@)X"¬˜ß>Ob¼ÜåyÚÄc¦åõË¥“-`pšçÉñ�™Üqz̪6»Ö²eC,œò˜3•Ìë1AMïÌ&5²¿¢nìJ}ôŸÇ'�Éž¦«; ™Ý›ì�êWÂ@$Z«@FÎÆ¡ÁSÞ <¿å<ô' :µ Sp5¬ +™'²wß!x�†¿'Í…ÌÉÔ°†Æ,\Òíœè”¿â`Ñ�DŗBÆ!Ýz™}᱇(aöš‡Ë3“ 5m|Îש¢_¿ Ÿ Ûš\2iöVõ ÍÈò ˆƒcl(eÓˆj$³(T6)éÎ#’™næˆÔí=�q (È{ózÜw�¤’Éd(F·Æ€_x¸<“ sÖæ¢LÕNˆ0ö±„SÎÿ;ÐÌŽ .™•èh½Zxã»Ð t‘}•|LtŠñ_<ˆsîÞÜZ[Ô˜’i‚joÏiÄÜ™5^˜!™/˜‹ô힀>™â%G˜guÎoTîãû¢ýôHfˆS E:Íl”³Rj·]8!�A‚f¢üÛ­çÀÍ$ó&Ó Ú + +£g©vj-™÷wj„¬– 6“z ¦>…#ZT%£�±”9rúû‰ÈŽ+“™¸\ñ—%ž\¦ßÔv…gjç%Q�–&XÆ”¨£Ûre_~¨" ¹í¾€+GÛ¾“Œo}ÇMk@ñ àOÌÈ)˜2G±H1JeB9á6œ;Ç“Ûn· 24–^¥¶@—pie(Ó7wËÊ ;FÅ2 m2\<¼¡L`�ÊÑ8W$¦îk‚J;­£ø„`;è¹E¿vªç3œ¡q¢½ëôÎÒ±›îò\§üp±‰S-¼%qZ�·NÐóhUøW5žVòUÄÏÜcÙDxìwÒ—3>dä½+ç÷B–hg~,@Äpâ&ʽ JÓEitb™¹Sª‚sº@Ê�T³ª•;ga_,\Þ éÀ³0QÜ –Œ¢‡™¶Ä'x×Å_Ò ôÞXzŽmë;} +�¦w§�R9�»¤Ë&ŠÜÀ"é�Z ˆñSÎÛ�R.Ú@šX$!�tžü©¦VjûWJÃGíT«Ívñ Úäavér§i«_sö–e…¿¿��¹Q’se;pħJÂIh"B„6D¼�?Š+S2õb…;•µ fwªÙE†ñëTPÅ‹eY'Vö³;>’�ãyE ß*¿n»,ÄäÁéù§4�ð2¯{¾½d�r©arV«SÁ“Þ�k�Pp¯N…Eur2¨VŒ¯œNN +£kþÑ©coñø©©ÀКѳcúwšˆNdg*^#Äf¢àie¦eW:µ Õ`YNîB:Õí8*"ÑJ:µk_�ax�e„KMyq ãls�N¸KüG·&iH']w1H}Ò©)f�-~®K@г�Öꔊƞ1ÄÕI˜àþãšGNÙaªo媸% ÄnÝf�¼f¾uÚá#…ì@jê)o[vÊÅÖ»°Ä�„–¡Wë³'Éc®ƒ�’\ÏþF:ôiüë•î +8;¥’ìivuÊñò&ýçÓòÍ’7õˆ qÄNÕø8Å!ð/ð4° ®•Ä��^ƒ¤µq'—šF’¬cÛ‰Nz•�JGèTboü˜ã¬)'ÑN¸‚‰~ò™°SIï XQ镘ÎN$,Z ßIÛÉÀ©Iû*ÏûäÇÄi BºÎw>®TBÂ.{æöæZè «ê®‹ÏAcY® ZùÍ]|pJÍ“ì×~3o{lÎMM•ñã0µy>Äñ:”r<<^ø¯ø>ƒÅÏcFhÙl§#h”u3ú›ý‹"øC“@7ö ¾…îbP3Q;…0kg�Ps#j ƒäŸ‡�ï +;‘ÿÔ6¤t¢î.½KèhW>&ã£?• ©OW�)0E£Ô[Û«ZÞÅõ«§Œs‡¦CM íU#IC÷ƒ<ÙÒ¶Ûºñœ™½¼ÃN@}•’ZzbP‘òÐ%L+dL÷Á_ÓBoX䕇ŒÜ—iŒÑ–`ÁÈ-~S�ƩŔúfÔ§àå Â@DRóˆ ÝëÍRS·”»muòêÕh¾Â Ô"A¤°_�BRÙVÙ4™® �Ö’M@Êœs™ý£‘yë*ÎBê¢NiÝÈø¤œqô$«3b°�S·È]û„Ëa*cg …¸+ʉÊì*¹AÅ0Ä~ÒMô¾d€gx¬§A$mws ;;=Ðl”Éq?Ÿ+Ë9ˆÛ +l;âì¨M‚a‚عâY£öé{Ÿ~<5ÐÏOÅb4†<?* «f-He™†›nSš@A�É$x@’Ò§’ä ”ˆ1�Î>§�’l+J ñZDt­R¥ÂøÜi'Yl®q°R|g +»á'I>Axz¾‹ßÃêr†²~O¢‹,ŒçÑ[FÊ^+ÐÀLE'P¬‡àv7ÎG µYÃ0�ƒ~KýHJ Œv ' /ÓwÝ”›ùØàöñ!9�msôßó=È ¼)äFZ=Ùèô<¡-w‘@§àìtnŠËÑ¥ Dé¾�å¤ð ddŽTAâÀ¶tØ“€ Í�C…ØïE:¥àˆ�_¼`m�âFÈ }‹G�´¼Eâ4Ö3ùÇ©ÒD�-•]:¾Ë—=ºf0Ávj›x�â2ìTžŸQ“�3›Élb~F v6ºËt!¸ÀF.Œ¯Š�ÃAj&ã‘´þN(vÐ*@/·c^TlÆEZ]œeSf¸ñ.áPb[û¹1ð»)sòùõ“RC~Ì-¿øé ¦È*s‚2éÝ"hr© ç¸†Í20À×3mI[ôÇj—;¥Št2C§X=ÃþeýívŸI«%ñ8ß@~ +Õ�$€(‹8 U¨¯ŽZl²ûƒoßíÍPý¾Ôš£7åÅÄ.ª§�€v¶ú.7 Éu åÓAC›µY嵺™<‰ì¯ +êðæPºŒˆhCo6Vjøý…ãúÚ$—ˆ™ƒ5;Ò- XþëëV€è_ÒºæLbt¾§'øõ¨EÊ%!Š"�tŠä÷úòj·ˆŒ:k=¢˜–'ï¤b*TÅðÚ7¡ì¦’`ûZTq!* Ûèû¬¥ú³(£â ‡¸è„&qøä9…ö¹Éc¤äz#ø}�1L87϶À†‹•dª`©„u×-ÔÅ… AwùÜa•LHÉu"ÜÎWª?° @zMK’c’Ñ8ÑéØ9nMÌšoýn1ó"×cÆB\nìë„>9±(Fdk€„›çvQ¨‚ŽŠ’‚ËÖ�rŽ` ŸÐ³€¸�7 +8 ‡�&-,Wç¢öTI§"ç’\¦†ãèž…Ï(­CÞKûáz4Ìh]¸L™cd:ñãNŠû›Ú8MX5¹ž�úáZ{c¯4çJ€Äó— ãAvWÕ÷é)¨{ 4ø;‹•®ê�£Kø¶‡ÝÒ®¸5Á¥Ï×åc„[fí”�.Gá¯mÖ(• í’o9¼e-‹y$>·?ù%fÂÆsbJþ©Œ¯»43t$nã8W¡“ãÄ÷œbBŠ¿ë`Ûß5ÂÓ_@˽ø"HqÓ*ÜËÍv·„[HnƒFrŸº&íZPôp–ÐKg¸A%‹ñÜsƪß1Ën#”ÜÏeau€©j§ú/j7ñÅ,ÃÞ žVª|RKsÄöIpÜNùqý¹"ð­¾ìbÃnÄ�cL|Î壣‹w¶Áv\’UYâÓó¬�+b{7ÅÐHÀkeœ7 ~*»ho�½Óåd`L‰ª³®âÙ]ã<»õ„¡žòøœz?>83¬¼…6�e ùŽùðr¤ˆ~z+ ·†°¶€²®:Í„´îgÈCcßìh¢ižAIìËÑ�ìVîtä1`Éçþ7a‘·¡/XË:…‘˜ŽTåÄÒpYÿŽ6SÇz ÀÔKͱ=«þ¤¯ÌŒ·AÙ¡É"vÙ,÷i;?û6±¹(ŒVT‡ž(\G‰ó·êH(bÔW +[mö¾É¾x,¸ã´ àb…1¨¨g[cýKLW’fz–p�3±6oß±ç$x§ –œ¸% 9¤�]©YࢾXx)Pu!ævA;SÖÄò’ä¢Ê`DI’8`ã«@–਼<þ =Þ‚î© "z¤öÐÓ_{ß5‚7¸°Œè*•…Wú‡óÚ�  +йmâ<ÚÓ“©ŒKCiög¦vÌ;):øª\ +#³(iß ”‚=Åf$:c :.éät2‘B +äp1U-ÆÉñ-:PˆC"  PP0@`€@  0@`€€TÀ àåÐ�õEšSȘ*u&  ö Qn)m¶Î 0‚<1…¡ô%/ÕÌïÿ’»ø]Jš±´U%õŠŠ4pD �ÉÓðÎVUŽò QÆS˜ßóY½¥�êvp¦PÿO'µÄ»­?3 ÆÉÀŽ„`&ö¾ú :|>Ìoðm?�`ô�@U jŠ�¨õRÔO0øÐòMeð8Á௞PP@ øÛ»© 15ÌÌç€@à1¸o83kÕPÔo†ª;¿m�@‚^z:Á Ø:¹¼vÚÛCÍ ó¡4/¼Š4}8$)S_Ë£®*KÑ iO0([ªºZõPÕ€”>3ïa<Á`«†àû²O<Á€Á¡¦æÏ·àÁãÎ?343Ò*·q9ubU•kÄ•h}ƒV•D†™©RG‚q¹äƒ‡gq5È”}�`xÄÆ6b‚BEȆêrÕ@î �ìú 1UT>d®¢‡ˆ?ÚèÐGVzaSµvJ/È@­°«*C뮯¡Þ @Ž\èT‘`à£/œª†C‘úBß͆“;; ä +SJ'U¬ª(�*Ö¶mº&ÛcÛ¶mñlÛ¶mÛbÛ¦©4Y6_¿R‘R.%¹¼e ­ÐH�ÒhVPUâQ£D¦0MÓ¥ h‚1 +I’†’2c0ä`#‘[IºPˆ?…|§¤bX0¤�$G’¤�äE¨¤q©ETï•&&„Xzô ©QuÎV‹Ü¢3¯aÖÑ¢ÄÕ’ +cÊhäš +*bЬ)ëU +Ò‰Ÿ�XaT­ð Rï ,úUâ“øj¼0´�ßõ…JÌ)ŽJ½ª(45Ô’Ì� Sj‚S½­ÀO>—_ŒPÀaM�€êJG( (p¨4//,#üc¡³6;%fL¡Šš Q�ñGRújF6bÆ�<¦ SvC)lJU¤—áTuÈshmheÈBDÒÁ�ÁÙn\\Q« G/Ž)~‚ ªj]BÄO|NÒ¿­†j5¯Ö@%Rmù2æYR›b⊻ãÎȽ”³Dëñ‰IƒX’Íå< ±ÝÖ¿vO«ú“¬ª¥åø÷é׸Ü-2z‚%f7Ã[<2D³(%Çs‘ê ¾Ãs‘"¦ îŸ!Äý=óF¡ßÅášG�W +âˆèŸDcpíS;b(>$N‘Zû¾öAÙr4…)[Ü—¶Ï«Ì"SÏ~Ôg_4Ä!“ˆ»ôÂ>-¶lµ…/^þLü„cÜV*÷`ËÞÎϱ“)=*!ê)‘Ën‰Wg—¼1—X +„ʳ¡�fc“„©ñª¼šG +¤Yê BD_T” y†"NQ[Uϳ‰«RoÊ,É7ÈÇQ2ÜUš¡Î26=œò“0ÏÓãŒ>1ÔüQ +‰«ôZnQÑ”t­ ¯^´ù¶ˆ¤Ñé:Й•+ø©~åK €cX²g9lÆ4›,ŽZ�©-xÕ’“‚G—šß8ÕR½‰µ�ÖHMT¹«¦U¤ Nç +vD#Ñ98 —%TBQòˆÆh†¬«x“�Ri i]%Ó®|Q!R$ DRD `†©)R•AP(€ÚÂo””¡$ + b7Æ!‡KÕL‰LÔ¡ïkˆh �&4�và*–ïŠ�“Ü’`M£¹Bó(޼á÷)'¢Š*­ÆBë: Œê0A³A%ˆ€oކzY{u Æ„ƒ<È98�ÏKC'qéÐs¢ #ªfèXHIýäYŒ“…ÞqáC%b ­D"iÙÏzùÂpÕz©Õ�Yà±¢âW­tzKL§¢t&‹•H‚†ib2‰¨ðbFje•ÌR“§'ÍTp.?¾‚lÄ9k•a$+LɶÕ^!Rç°Fš)ñ|j®`SM¼áCV ~­ ÓBQ YYbˆËlkŽ¢ò§Ø ’ª°Õá$+�Ì[Uó�èQru-Öxú +Þ5´u@Z# ÙÏIC>!Ñ04!+§ÈUí|QJí…t€VpP¾†¬\Ó"Êó† �pµ­™Ç²‚É:ÙR¡àüY95¼€E@sç¹ÎD—’¡AEÌ=¸ ûÍh±Â åSQôÁÚ0ÖäTˆHµ¯Ä1UÄ +BäZgEô¡|7 9R­B µ¬úq–Rƒ6Ù8›ÔâOÉÅåºF9‘ŒëŸÉGQËJÑ.°jR{”ch„‚ÁŽW�×¼_É*rŒ4ºªâ˜.®‘O yCIJ»QK˜äc# +µ¡éµ7³Ži¤r +YÍ0=Ö¾D~(-Ú +Äê'E±i5¦ ÅÄ”O&^MTPy¢û\ŒD€-ÞfjäMáSnƒtÌjœˆR¦\3žmáçµ4¸8m,¨ð¯î³Ë†'åA$æÔ¡ÛN‘]XLyj³[äÿR¬Æ"%sq‚õ¨£h÷Ô n>³ ‡ÇŽíê ½†™(A„pºËB6Dµjªcš*d©×8qtE½¬})Š(îúþëÀà@6™ÜÃBµ&¨0ô¶rICq ÇPc£½""‚„&N"5¥Ša6Sêf\fQ…q£ˆ A¿ÐÔS +¦CІµ/õ¶%8£˜)[2–‘TÉlã­®¡jb“ë�P}È%œbkíˆ+­–7¥ì|ÔD¦±"ŠLë"ŸˆXÌŠèÜ&Q4Ôú"¾¶Ø(z•ˆáYDŒÜªVHHPÄXŸ ‰)>ø6ÈÃÜ®‹êÿÊg’{,žo¸˜Öv²Õ R™ªËr^.QÔ½Êw|Ó 1eùUJE-'fF¶‰)ö1.X8!Ïq\S2I¶™¦¸—K“CQ_ÉîÈLÔð¬%hèè§Ænüô*ršÖ©$Òwž]h!žè¹ÖCf#¡š(Ž jžÈG¤š/zƒ6äØÕ³‹E<6FÊ9E•+lLcÍ©+Œ}|ôš–D<œüùÜùp‰ ‘yÕÊÐ=J~¼ŠÜ3†ÏEQ®RboDºú9(¢nUTK�šùLU%†ø˜M~ £B›©¦¾QÈ•¾ +ωÔ-D?Da9°`ñÑÝÜE¼€QXý.<6gˆzk8i']Ê_eËC¨F=�‡[* +§o¦G�FíÁ“ÅJ²“ó¡†\¾ANzÍí-bš ) P@0@ æn©¦�÷@quKj'…�ì@¡˜8u­² ާ¸µ2LÛ�ÂDœ(bJ!Q ’žâ¡*™›«¨´t©D9 ++ @$ ÇÃiH.ÈÆÇVŒ%󩀋&h´î¦ä·ÒÞÍ= nŸ6Ëñb•—oô =c:Øx±f]D�pÔ† pÎÈïØn~Õüt¾÷ßø\éóêzøS9ù¦ Jú…ª›(;J@‡Œ]¾¥>šíþ°L +qPÄ$ð«CÖ�ž¹F;hÑ?Re¨´È¥`Žd-»S¨„"C =-‚°4\›A¨?0ôìˆ ´L¿£¿c%ódµ`ŽÁÏžHKZÆ~G8Òžq›ø@Åh¥HüþSØòjµ5ðQhê[ÿî)•~J™^4¿?{JwRÇæ‘Ý>4Õ8öÎ;`�G»°¿c_}³ë*É –@,½eÚ)djìÜò¯Î¸Ýºú­̰¼¹ ëdúñ_Î9Ç,JZ‹Ó�•Ù˜y›)|Ê’w&Ø ºv´�x�(PC¾bL–Ý_+=P£ƒ¾”Õêl–˜´’´¦ˆËOcŽŒHùÀê£4çЦ©“7³mQ«°6pw×¹Y±gZ,�1F¬& J‹.Í[Ê À¬ç+ŸW +T„E9êÙH(5R€µ)„µ³l¶�åP—¸‹½3„¶« ›M÷ãɦ®’£c²xJ}–¸~µ3Ì%Wvd!ïêËãlƒé9.`…}ÀU‹ù^“ËTìi&´›Ò•8 +Þ­"u@lÚáãmÞ�ÙAêÖNA‰×^ô¯\¦|·VêÓ#…~ѽ?ÅîgEN76L#&°ô²ªš—&¢ Ò Ë'æÛ(žÿÒU•wà}CäÀAbU0ú¾4c’fÕ‰$s´È'ù#¬–kóEz ä3ûíÑ€‰Ü¤^�/ôwÖ0N¸GæS±]š}>a–œ¼IANO…RÊ×E:$`úâÛ(æ¸(žÐæDƒÃEíæ Ò­_ßÖ\¢%' ̲®ŠZq››x#èù ž’ÛsB»_;ÝNtâÞ_ Æpy?›6´[γ7(±¸gò�SÀËQæ•GJçÓ=Ô ÅëŽ9:¶Ý@5Pi;Á%æ˜ópQÙXW± Ì&d VÐ8<}Ò§1΢åtŽÈë‹b:á)G¶¨�è6D;ºD(³T›n #E8ÓT©o¬¸ÃœôR\žÊ}·ÑÜÛüAº<ñ£—2Ÿ°ÉûÜq3»'qùþ@ÀãGWZò®ÃîéqBàSÒ1`)Í¡±]§ÿü]¯<¾ßÚ¿¯'™äwôwîT+“nî�Ëù{9n�ª¿ ÜÝs€OÜW^²J•[æ®SõX-±�éç¼c¼¨Æ2z©8�3냰!Ì„<]WŒÐÅ;.¹TÉÞ|Ý"Eº$þõ�Ðã0¢ä‡‡è#º-$Á£�À6g÷H]µf‹òëìã «äÎÂ7Õq§ÙÉKg°°:jp’y€;T±#`×Ú_3ŠÊ(´ B`”›‰•j¤ËDª3:DDAß”gpdz*,ÄLÉ_üM–‘ô4•ñ$£ìM�Søf¡Cš…‘申”‘ +0à"‰b×nJãAÛbäÁÛbº#ìö§r‡C˜êøw¢¢ó¯Ði˜sW)éé[q†¿Ãx¦H¶ ôf;ë<â…áø:?hÔØÆ¾H<‹@ñ0¼›Aÿ¹BbÜI}vÊ|qG%óY®§,g£"wÃÐì—­Î3Ó"gà1�÷Jt5Ú¶?eÙˆ¤™n�kpî…Iæík…9„¡¤µ#6Šâx*c182¦Ÿv¶ì¢³éÜ"óΦ”€Œ§Ãìÿ_´?¤Âo‚�ý)Dck]_“GIîvΦVšý¥´™Ž5[™½g%6”²7¤êú¤ý³*¿‘fCH”ÐfòL0PA¢ÝÓp ^ÃQÿ;GFÅ +°n1Sü¸üS)Î~ßYI>×UOè©Ä².kÈ›b\9Û�Ž@•m£¾//VwÝ�ÐGe½Æ¤-å´êU)öÞdÈV™îgÀÙÊþ“ð…äèK8¦ó¢B1jy�˜ªô¶G¸»á€P>‰ÖÅìF\Xô{´ ñå4³iŠÄA3�PŽ«=`¨<•ØÁ“{¥”÷&ã¤ßcIjpmúh Ño„EñÌ;®ÜúÈSᙈ–J6¹\�:|‰(+ð((dŒ8V1!l$´6„+¾ZÒó†“[¤—¦ÔÏÜÝ�åƒ650ë†à#ÓïàD ܈¸Pµ£³ÝÚ±ÙªŽKØQ¦–�àŒrõïóyò†6:òtø¨ÞœæsSžDì4ë͉F)Ú˜‹_,køs“�•ÜÞ‘�Ë»»yˆàa‡1TY—Æ~G¼‘Úh̦eèxéÏ4'ö;Št‡É5SÄœè{e�.< Eqjð�¼þ}†º@–úƒ¼š ÛlŽÍkû/Që@�¢"ì ¨«ª™MeZÑ0ž/ßa€ˆ~··*v²@ù²*3ð#‰"“Pí%EÈ7°kòÙ¢î¢ØèÌzŠ)žøI£‚I�ÁÖä_6ëܹ1BÞ=ïqŒÂ«Ug§GËêKѺ Pº+››©†¨éiÀ\×eÀæ¾d¶–—"3 l½ªì ®ÑL#—6R¡—©ö�Ghc/¹+'¤ŽÔó� ¼tÛ Ñž÷˜Ñ¿ò’ôÏw…~ëó[Ò÷mÏßÊA…teð2»¢‘èÓæš— 7›F±BlUýwÈÓ7ÀOá¾Õ]Ĺ'.šÿ4âùï�qÑ„àò«,«Ö*ãgr<ÅT¸bíÂjìc¿qÁ#I +*¾FY†HA…¦,©¿±ŠG›_\hV†°ìA±�d”âyBø�Œ[…/†ö„)¨üd¿ú«¢­õ¾ˆñ“?–#è¸Âùû” d‡ö|Ä‹[p7‰ ˜`l±¸‘µOùÚ…ÊIgMS¯ìß*‰c·¼Pù!ú@ÞBÖ·Ô†*ò‡[ê ‘ûTQšáÌŒœUDh!3õè•-üŸÙ@Éf/ö1Sê((|Rò¹…q�G#ÆÆ2翾„ÀMÖ]1©ì|Äq®�NïDY ‹m¿8ôýU£Û@JW‘”Ÿ Ó +ŸKÊ&¸†fÇs#€/j�|ftŸM•¤!ÌÛ§“9Qfq hrg#ä/Æù'�ôÄ�ŒeʱÖ#GÔÍ�‚húŒH:<ôŠ éÍÔ¡‰èŠO¼Þ†¦ì/žÜЗ?J€�Wk¶¤šM¿…:‹yÓÏP’ÚU¼¡)é± íö9ãö0û#Fhh’Ž$}’�[V?ÆÅ‘Þ(# ëõr‘aþ¼QB(¾”‰dÖn$—jΣ~Ó¶?¥ge( 'üÒ”¹h"âÃÈ[}®€¡ŠUòcxO†¡ÙEU�UV�Ç`—˜§-\ilà¢R>ò¸Ý ‰?–¸#K ÒªüïœÒר�‡Ùú*fS]*E¼w§br+› |ššš¤ZJ¹¦îó¤H¡9è³O[�Ü…�æq¬¨©rTã¦P�2ÐUM–Ä•TúCÓúŒ„¤få±$,�1®÷w Ѭ'#AiC–@¯&WƳ‰�:ÉP=½·é–ûf2Ô_5×ÔCîfpÜ,lêä›+vƒÇÞîé±ø8šnÁ$°~yìȉÆô6ú 01nWiqnïË&W»ã60¸‹ endstream endobj 25 0 obj <>stream +bœ«1ÊÝ‚�ƒ]ê=�HQΔ•–“” +–öP§ô–b­6KÐ@p¸ßõM=àŒôx`Qó²ÓýãMcü.©Y'ó�Ñ/â§/K¢ÎùMv(Úþ©Ê 9µÊp'ƒðéÜã_A§ +Uo!ûÞͧ#øºãËyD&·á†‘é�ÿwú©ïÒÚ^Õ¬ëÉR‚Dž“·Ð­@¬ô„¬KŸ›ðtÊGeAô1¾iªl@,#5K‚¼üëïPÖý}op;£q +õÞ̶Öà;ê0‚ùsŒjP‰<ê0ƒùª|®—çbÆæuSKª"¯oMígÉYt¤/úcVœ{2¿ê›�b�¡¾yï ·He‰|H{×}˜�Íø“ŸÊ.š,VL“�ÂUßÔp]˜÷X™Š”¬É�,'lõͿ¿M„õMŽÙ’þÁÝñL@'iÁ"}“׫ó¬à ŠõœëžYU°Ô>øt¯Uxm£Lq!@n<Øü=>ØØrdÇßÓ�ªžîŠiæ–Ï7A?³S& DG`‡+V–ÍWr•%ƒ5ã�㪭9Ø`\B$ç¿»ù¿�1„’Z‰¶ÍÎÆõISª@΂q“Z69õ/\`Üx9ú”=©A裾ž`\o䈇%×¾ù&S»fõë·-B!Øñ~mMæ¡Ê7ß>Ù!XêÌõ‰x§J£A4×ߥ %D»ë$®˜¨Î�ZÖ�òTÞŒùÍì\�Þ�©+9ál¹N™Iú +?Hj)+@µ`~Œ´Ã•žÞ3hÒæZ‚SùCíNù^iõÄ·ßÓp7¬’Ò8cunÈOêÒ*È…UímIÁŠyQÞSÏ*3£Æ)H—î3 +°Û–æº- çÊwˆ3Ÿ„ÞŽ'ˆÐˆ„xTà8F/Dtî­mÐ Tü^-�†ƒ‘ nO´tÀ~·¶Z¨ú¢Ü²“‰À­6»yþqq ¬ µé‹;² ¤*[:7¤#‚�.À‹!ó .�…¢Èq-—® ýàÑ^¹Z¤czAˆé.Ý›8H¼¤XS�™,\:ç¶P`pˆ¶2péäv­ =–péÐ+oð7߬àׂ€KÇ”­xʰÚÙÁ™ÅO\ª÷ØÒuWbYâ¯N¢(DS¸t‚ÃCs©ª^Ê_[:k€^~,k‰À™îù$!�Ê虎`�YÞòpK¼Ç™DC;ýIA]ïvŠÆÄoÛø†šŽ™©´ËI}üÖt‘”h—y ••œé!SÕã�®½1÷=f<�»ÈáO×Jöæé®sžN˜$Žì_OãiÏh‚•€ÉÂ', ìé2…æ½ãURû©¸þ²<ßJž„PÈÂùîæøZÝËZy[E?ÜØ2{£F‚wœß,ã„ÌeíSÜFŒ’–˜õ„�væ-¼õ�žÔád¹ïÈAÆ•&íÜi±†oø—m"Ü@Ýb/3½(ðínPT–M¢�º;¢æÒÒbCÈÜ`2™LeR¤QËY�‚º¿[®³-=…· ê®°8º\DPWAdË-uX1ïñ9Òa]ó=gÁ¤•°U›•'bGpvXA0ps-pajçìEJa@BAæO©4P‡æé]G(— ƶõŽ%™Lu"ª9ùcÃÆ¢¶�ÄÇàÛ¸—Lªó´óïdþß…9š¼³­áˆÉøq ÔÉShxz/ÿ„ÿÆxû”–y¢q&.N}–¢¢‡OÃ#}¤BB�5ÿïÜ.�ªNþ˜‰gñÓ|Ir.ÇQYL0'ކê³éjóõJÞUZ}8×·û†îk•_ƒæ7Ò‹ WS[ü¢„ªŒ:°òàŒ±Ècj™ôÉiR؈i ‘¦ÚªfžºÔU_¢~œ|¯ÌW©´ŽX{+u•{·7C±l+u®UeÑ ©¹ó,u•/BEoìbN—º*@` –WsàNF´†Ó§Ã)K5²Ì7A¬œûÏ«,2¼ +B�qMé�€f÷¢+Ò4ºÿÒÖãÎÉžóœÆ ìb„"ŒNí5Ã…vÛS¡Ï„Ýè E;ºÿˆŒdÕúmv¸Ù±gt2j�¡Mú�œÑi˜Å…™Õ‡lÂÎè8G6SÓÛ �Žó†è·€\¡bÓm¡ÑÎZMØ,kÆw%iµÈµš¬ÑQñj@ƒ2ÕóE�çfpP¬¢í�*A°ìÅ$Îñ‹ê©ùeA�ÎC�C‹']�Fçˆ!£zæð ù %—Îa837ýR£+åØT6µcT·ÂÅ««e”‹l]� ]ÛRÞbŸŽy 9 å\Æéx|NÊ|’'³/ÚzâÉéxœO¤œKŠ­�ÏØíñ¼Ûo¼Ñi¬ÑaB27Óä~¨1æ±»J�öÙ7ºÚ&Æ£9#7¼¯pt…k¸Wp·â�ùèS¤4ê%»§†_ÐW$©pZ_ "u-È}{Ýä�âyFÆ�¬±¾T~Ç ŸEþÁ‡²PÂ:lxÏé ¼n€�§óXoŸ»�Ûãt÷í©@>¦³ÌÛ�˜0¶ø«þjË>G¬áÁ­Sd�‰ˆtÙC5e§ù¼(Ò¥ˆ²à¨^HÚ/`Ýæuô‹ÿBr[Öouãø£%úAz�ëó“tA€µ¡ß�Þ5«Ãåªãû8>J'4¾ìg8I'ýLsÄd%�èS~Cû½ ¶â—�ceO¥h›&2 H:ÔYKŸÎá“p’®ûüz�-y1Á'¥§Ž%cÖ¾ +Jºšc?¥/-ôØLÒ=¥¿4£wUW¡‘Ř?‹Áþ_Õ—t*]$ê>N ÔÃzA˜•ϵšˆe.Þ¨SIúD>õ�û2Ó(ýáÔ¤c&t÷à�.eŠ-’²oJÝ®‡ÀÑ;%Ÿ(ëmV®¯ŠÓƒ$)¶¾§ä5·•� ÏGï宇CpEL¬éÜžd‘=ÃÆæ˜ñFŸºÝƒj|s™sÌÙbò³š�Ø…®½Ã²l£r½*ËS‚§eIçÕ…,MNôOÈ=.DÝ`¼fWŒ‰HݾøÜ9Oé»×Y­ÈÜmD;mL2A TÒ¾ãñ¼&Cƒ*‘D ]Ô„1=‡íoÜcG¯O6EÛ× Xw"!ýÖP‚whjXöy€ú1‹$?&E�dA–‚*ïL�vÖ„ 0‚p'6sЉ‹M¨b€“¡] UCÄ�³x»ã´#äN]k}ê,$€æ•’s1<Õ†¨ì´ L`˜Å%m'8!] š`O¾ X§ïw´~ßá—MðæÝ³[ÕP7²A¥¥ÄušgÉI•qÛä˜ôU|Õž‰1ÍÄ®ÍØ¹ ¬µõ aÜΨ sàkØ5­-j Ónv2Ä{j[JÄú承”êe÷�s.…ùÿ�Þûµ[êèÆáÝÝÑ€�¾ŽÜL7�/tU7åGšà¯ýÞy%¤ ^dÔV +Ë?!û½§ÆM–¸iRYwXR˜ù:L‚ðRЗþG›ÐÉ­8�Ý2š$ebœP+ª‰9Ö¦8AÍ ¢�-+t?²‰äÐÆv?«H›NÐ9a[`®×_s‚Ô@ÁÛ$§Ÿèe±±>m$÷gsÚ.­•ɶz<'ø!u‘HǨn0ˆ+O…'Ü*Z‚Ng[›ö+„~úlnv‚J€çSÉ¥|?½�-5÷ BjC}¥ʈ­O|®ºÝ5ú@­^Gý aç$��Ðï« 8óu ñOóׄs*Ç�UÁã¯w*1«àìžD¿AT˜KªÈ.®�…À(�}Û|–Ù}ÍÈeÌ¡«–N<»4L£™(Èë‡Z^ 6ÍF¡û‚Â\]‚ÜFPGÇ< +˾Ûÿ÷CP+c�£>‚B +/s…APÀÜ�ãf`]PøU':'Ã(îõdýAe7ø 2…ƒ‚¹ «eÛ)\©þ˜–Üly0*Ú˜c-®^Aé77 +Ô<Ðø7•=u“Ø%[EªFÐ]6íTC¡™Ù»/4‚6ˆÝ•yô +[Óö-Iøo²Di5æ§N¸é X5Ižä$CaÚð´d(`Ü!�¡°ñ¹¶ÞÈ5¦ ¶EU††ã�ç Gæ +ÝwÙû1u|ß.!…9LÙˆ/ø„ÉD‹®ÐåÙfÅê1!!¸iˆ‚¬»ÁÊÊ·C~…»ñÞW'Dá ™rFH +ì¤c•/B?HÙ†À€ÄapF\¢FжJ>€Ø„(ÌHž¨ÓWŠB;ò霤QQxiñ7¨ƒH3ýŠÂ„Ó|óÀdÏ�h7én¢?ÕoÓ(÷¬nö­²Ó(0Ø� Á�׎“x­:qš%C$U:î›$�£@ ñCeÍ‚’bw¢æ8„²£p¢Ù<ðaœtC£R¥IÁh±axY["‡ÑàEú¯«b¾GbÎ8 +MŬ¤6 fÜ8´OÉu#ÀèÆ«Ç-g§¹Áàm]^ ã�i¯<½e£�xt$ < +?éü�zðCIß[“ÁQÚ™k6ÊT“gÒ—aì@yŒøùdZòcÅ9k¶ Sj“¼F…ù÷Žm'­@ÅxWöeR`ÁÎ ÈqGðê( ‡´)½ýª‰Ì.lð`ŠcšÁd4–RÁØÄ|¦0ˆ•œœ·õ¾~ÿÍ›ºÁ•ûIÍÂ@’C$xU„éjírYéS؈g7‰ØÜ?¹`7:s\ÀùDÉëüÎFBs]]NxMù”ì6B˜ƒ2jbb4Åäâ§À¿œäN â“ Ô¨îpјïKüèuD÷à4•ä+‘B2¾Ó­“°U¾Á»·MíO§f-ö&c�WO%>™ÚÛmT@JüÞG´‡Ÿèªü@/‚Ç0QýUj~Êv—ðíKPÃ@Ⱥ,Iÿ3ì.ó“rCŒ9õQv�•¤NE�2> ö$‡„D´/¤0ë4Bß[³\@$¨>À{[Øô¾cÉ3Dz�Å‘D@­ò„€ÓH£'¨k—u�2Eä´q—_gŸ 2D­Oê^P:ŠT¾ +„Úœý³:>ΜC?·ØÉóG® <ƛӿà \Š9`jöÕÈ¢ºÑ*™l)©e‹mÒ82y‹Ò¦+;„JØ…L=ž|0ÊY÷.ÜeöD ,¡„“ãÜè]òé’“�/µõ2÷||& k§•–Œ¼9!I1ŒÍêGÑ|GqeÛ +g Ÿ7b—£ÍTüm˜X/fáâ,.ó0¦wG˜X¼\À^§t…ô¥×žuæôšÞ»mhSÉ„µ/nÙUþm:¤ú4.…Jp óâw›š ä9"qéÒü’‡ÜËšvRU"Þ�D|z�ìå‰Ü»�òǧ˽-#ñÐ\€ì&ô‰õî–™»}æ$/§Ïç$D‰�dvBßJPIFtkùç'!ç =À�eU#G1W {”¾jžCö%¥R2Ysky-<2†º(`s­ZäšÈ�Ù8§ómF?žÛ�TÍrÂ@£ÔàeÄ+™JôâY�¾˜Ü—#gnbk„À•�´tb4›s$MŰu|Ôç ÐèK(  öãÐív=&ͬÈìØå™`VQ´Aá:Xš ŠO¼JTô‹t�D5£DºWÎñæ*a¥ØÅÚt*˜”ý 'IŠ*š —DÅÚcõ“d¥ÑsQÖ–}¼ìƒ�ÎÍë´U|•Aé÷µ +9P6…:È®KldÕž<¢âÉÈ™%gɧ…2¸f±–S!õðnÑåшê¨r�î&$ÿ õFê˜M1 š‚\«­JlU¾éÈ»?Â5rÎ8Št‹“Ÿ&FßõÓí´Ê�¹ò¦Ão0|cµû3¬(ŠÉÍ(àiŸ¢’iG¼¶]çšSTV,Ê::9I+�*!–ú*—5Ìþ¼e†‡´½$NŽà¥:ߎ?0Ñ~WÃɃäL¨V­=$B•²+–ÂèÜ£eë.Ç0ûC~Bÿ2 ¦fFá>Ö��ÖbeÒIP�s¢TóEîæâÈ� 6•õðÕ†7u…Ÿå‚áÒ>ûKúcfg“ZƒÎp]Áµ™ÓšK[3Vœ~ãI\¹Š!ÖÎ8¾ÝR¡M¤¥øqùNÔž^áxAñ€D"].¸C·žLÔæM¼EÝ)‚%På‚ÅpžaÇ;H˜k!­Úç%–}„ÒŸí«,½~ˆô*[¼Òݱ1%%d9iò”ª.”ˆó³²D17,&GyÿÍϪ°!‘ë£YVÈÁ �–Ó6>s0�P +éÈ}ñ%“*s¯¢ŽEÝ`võÛìUsÌwˆÈTq†�ïæè;ZÔÉüÐZ›æíLB¹T^®ãƒÕ宫—]h›çfDÚ¾X/ùªÞJÒþ58W+9W¦PbÚg&J~(Ñ8 „žL˜Ibn‘®#¡@•Ɉ6+ |sQ)®ÃÊ'êlˆ˜ÄŽÏª ª-È wL<õ66 ¦Åªwõ­L°:­ªÅ¶YeD)àG‘6Ð.0± ™Œ¸qÊêèBJÇ ¢v×S™5õ)LÈ=…·uú…ræÖ«óv|ÐNÄ›¹…\—Tiî=¹¿9:%Šo~ã¹ÎºÌXÌ|NgãPVaWv ÈoÑ…Kyöè}Â-Ô]è_/5øöÖçfÔ䥮?I™æÊfìøàSý�ÖÖŸ%à¶Øb´R§ùæÍT±+a­¨D¡Í­‚*ýòÙ.Ñó³Ìb¶˜^ñm¢-º‚ö“µ·=8šDübñk¡weJJàìvƒö\óûà׸ —ªOB�ó(À¨YH”O™•øÜ%°LE3§ê<É1ÖbïÇn>„˜™¹‘%|ræí¯ÜNÞÞ®í.kòš/22d=ï#J #œ_wô ¨Ä’2Ñn(º¼›\{3³›Mzꩵ ETAéþHâqæçV+«úb‰m[B6¶Døá :¯¡Å£?àhKg¢²)„ND¯·ÛùÁáI×úÀ‘þºA¸Ò¼m"=õ4ËÐÖe>¯À‘ð2ÊÊË�ÆvPÐÔYL#Ìe;po_„t …ÿ21Q ^DPÍðæ¬©‘P‘uÒèø¬<('ziMkð +Hã *8Þ>PøÝ*R;¬Ô�ÍWQ÷Ë%©/TöÝÂ^ç_úß-ð$°~Í’Å/È´ÿ‘'l å»USFDÁXFàÒ¤œ¾[Õüçg¾0¶’n +lûï–þ ¸×áÅ{XÊþïÖ"@¢øñ¢à­«WƒB™F¼¼•°†OùoÝl¤Kq¸ø;¼•»vxÙÞÚý_îc`…Öë^™†›râ-f2³ˆxkE6Ò©,â-‡žß„ò3¯.·/fñÖŠ˜e¦]¼U”­A‰·0 …„‡k²S¦‹Å[‘œŠk‘ØNâ-×Μ‹$�ƒ?Ù;fÆÑzDw‚+‘Òì8ïß#"o±ˆÄÑo=]yèbT Þ²MÑï¨íoU£¦ˆ·®_¸_—¶xklS�Ñ&ު♘˜h±oeDC”Ø™‰·>c™hñ–Œ±1ñ[¼E¡”ÀÈ«ªxË�C¦)C¼EÀU†#¾‰·h¡þ�sMiH\v<•ÌLD&Þšvdáôo±ÿaŽ˜‹·:~[Aea'ñVVÿ`ØK®8Å[¢º?Zâ-y7ñ–êV혡½Ùدˆâb¦ª‚ä7ñ–^f¬7*o=AƒšÊ%9G`œ+fw5#ôÚp8qŒ§wåæ’ÕÓè)b�¨0ø/üd|�¡K‹XÐl”=;Zÿn1f>YÄ”}·œrº²a€Þˆ|¨ÿÂm’�ä.Y¡ÞòLZéZ$W�ic(öÙ=š¢Š™ãnyø@Í‹>wKOnlO˜Yiú€Ö°q·)sÎݺegç n”°¶ÜÜ>Ô“»U¿š�ò›»u3òšàn¡ÕÝ�‚s·4(ŒAÉÝÁVš•Ü­ JiaË¢ÚŽQP­ÙBS™»E€Tb–¹[Ësâ—¹[�…°Ë“ÓL‰±«&¶©bYA“ŸämN-ôÍÝB…÷3ŸFîÖ�…Æ&oÆÝ¢Œ&³(‚ÌÝú¾)O¦ãÃݪÓ�|Š\[ÇÝ*`kÎܭˤ×mŽOµÉÀÈݰ|¬DÈán�j+ƒa¸[ÅžËQ wK(ɸáô ¼� üêŒí¢gûȈÿÚmÉ!éC�¬¡d_nî +7÷Da@f-) � ,+òۖɨÏîVxÆR/µ»õvf p`WwëGi²]ú¹¿îÖ*RÃÜÝj¦>¢Zæ”u·èë^åQ¿`wëZ­ìXw ¥ô0M®»¥NÂ#ÄÌ�¨ +–�Ðáú€Ý­Êgõ“S”nlº[_@†Fxë€ëã®=ÎYŒrä-{»[­þP+«„Wp¬JØF¾»%—AîŒöu·JŠ¡–œyÛ2×Ýzï�–íÝ-0I”S"Vü /ˆÙìnÝý)eèhÔº[‚V‹ó,Sº™ÙÝ*ƒˆì»a㪹2iÏŠò?4*š3"¶LôIí!ÏÅT€ÒÏÝ­§jÁ0¼†vàIu¼"edÁ2«ab7èÛ¡Q< A{øüÈ={ëŒÇ»#gÐÐÀï“õÿØNC~áh6$hAk©¿¿³ˆ­ÒlˆÇ€B롌=Ö �]RRþáÇd\Ÿ¦\�«6#¨n �—»¯œÃiF˜õÕ!Ø@Ç8J8ÿ¾qø~®=‚pÈBqC¬‘J¡ ¾ ·—d7ELtàþÆ®vÝ1*»HF·T­²):v$ÖrÚU�\}D€\cãþ`¥ݲWYeMí ô¥é×,+JS‘ÝX,Ù£[0÷(›N ݪ®²$Ëk †Ñ­4œ®ŒŠ(ƒèV)�*pæÀ· rDJþãÒ*ݪwMOÓë’äÆùƒ¿^zåÀbßSxÞ_Tp[üÉʧ ÔPVTƒ‹AAr•äó5CÓ‡c\ý‚ÚÖbÁJ0>(°¢ñQ”˜w—Ô¯%(ZòT ¿G-mù¹1¶b� T¿Å8*4ýþÈML[?úEãx~O94Ÿð„(×Ó²Ää& m—q¿ñv‚"Çäáû©mý“‹9_½ s…KýE䃷4ð`Äc Òœ¨6‰©0X(ÃÍxmô¬Ú?µØi4æÁ4êMRzv|Α\òY90¦üC³©£�ؤñ2’€.Y7=ñëC&¿±‚…¿Ô¯X¨\ÈÁ�k³¹é£Sô*±¨'ب +CÐÄN¦âѼÉ^ÁóÐùÑ?n.õ I.gÒ`x�gµÓ¥è@}óÚO™µ8Áz@ÄÍe¾êÌ“ÄÃ1¹¥%S2Pð6Ê¥Í|Åü@_ £š^óU’ÒÁˆæ¡sFéÈz̲«äì�2Ð,!£áší�¢Ã-c?™57ú¦¤v¯;¹ƒ®ùu·³.AOºêQ¸'½JïTþŠÑ•¬±~nYÑ:‹éÂrQ¡œðÁ–‡T´ 0Òæƒ"(ÄH LlúÐ(½Ô\¹ã¤:a¦¹˜iÊý¡2%yY{q±B2ç`B+® ™Ä"\õm¥‚5pq‡ å¡ ±j€´b¤PÖ¦§¯ûÇKXܰKDOºkŠçrA¶—>ðbð¤*ëéàŸ!Ó›/­c‚ ú\.. eŽ‹,hÚ�^s‰…@4´â÷7ÊÞÏÃ…ä€{ËÐ6ïj‚Œm¾ï/•¡1i·XªBbŽ +Á;Ù.ZÒø�YÆá•T6$-?E +Ï ˜/ƒ ïÞ5 ¿ «¼x|¼±775é=Ämnž�Q”ƒæD!è�PÜ7#‚ÊTéQÐP4ýö|>÷s7ѹÍNÁ*ß*ªQDiŠ€‘\p{uNþŒÔ´qDe+ 0ÐÑŒTðÕF.lÀ™ÓØmnº•ÎC$¾€ïI�(‘xÃ/gÿ@8ïEæuæf§6HY|ûïÇUóc+�ÃáekA?©D¬!+ôã ýÕâX¾n:Ñ.¡.Õ·m5{à ‘(d‡©>\´¸J_�•Sß—gi‡:LE=|/ÃôrB/Ö•½÷–Íu6ÀùŽG‚KX +Õ[Óû4K$B¼Ð¥T›‹ +OJÈÝšÐFù>È„`·Êð£�[_åù}âÍatŠenÃþ“Âá¼Ò4^ƒ1X�h � gC+—âàyÊ&œû�Ú-R†Læ=¢QºÌXÑ/½4Ú/`‹Ì¸8‹À§ ‡ùîÍ�¨Jß—s�–U‘W6¦ÛQ*.#v ™‚îcü$8Ǩ€¨Hïä“$™_”Û+Ï�йI†úøà�Ú]ÈÅhG¸èqâÒ&H2ìhþHÿ4R ÌnóÁìd«¼–tFðÍ‹q‚Eý¨ÈaÛ›æŸ û‹0ñ/ÿãÅí +â8EM��¦ïÑÓ#©Ì¤XëÅ$-£›:è—Dмñå{žÚ@œ!¸¿¸g¾˜Ñ“¿†kqüæÖì,e�]¨]ý_�LìŽBw/ÁÌ>UHR÷îA°ñèr 9éÀnÖÿ?p]¼Ø ¼ 4ë&³î"¼–.S¨â”èðþ +)*@Øw$ÃùŠx¤Ž•èÝÖ(�÷BáëöõV²üš4Éô…ì®Y©Ô°LŽ8ÕaôBoåù¢úÍ�ÖCÎ +´…A×éº�¡LÐÖØÈßÑo3'y^2>¨”‹<¯ãö5Ë�,�vQ…Nh”êÅY–£À£™¦‡ˆƒ®;Ñ{Ï4½¨û™!”†ÛCOàmhïäl`D É+,‘jŽÝëÍâQÔ< D3pfÊǼî•¥³Á!à+ïöLjn+ ”úk�{Ÿ>¥ñ,™ Ì�€°T=´ÆL&×c8“&׌•5"dÅl‡< µóP²µ(ÛÈ;ª•Å #ŠÅÊ Ü.v6 8�2?$šé‹éu… n<G™$ õ�­¯)¼€C¸ó"©ôlÃ[ù¢=>kÙÈdDumÿS³¥?OL9¦‰ð–ñ×VIɘµ£éK2+Ê,)‘þÛG"útÍêi64¯¹¸S+^:®`úº{9¯X#g”@¥ÅÛ±-°‡Áä@4‘’ÕL›ûqÀ,èR}ë.Æêv„û:µ£·#úÀºˆ£sÁ:´ˆ�€Ô£Ýv?z»€yþÀò$òÿ¢‹#�ä82U-ûÜòsç'™ü5Χå€ãþÓóÍ8ºpd•œ¬öx^3ÛŒþýrßÑp„âå=aÉ¢6BšˆŒ6„y)¤WóQÛ2’'èQ®×VF² QH®d.©‡RNVz¢³…»Z™/0U/)S[S[ÁoÃ’5m*ÑÉÌÚå\Á­:>Ìã¨3CÐ¥)G±¹Üêä“ô©éÜ .ÀFÞ +ùüb“+RÇÉG«¿ûëˆfðóÔHY¦_´�(b~G"p0ÎW¥£ö:Çáìê^ða˜ê_óáÕ²s÷^^Gˆdeù`Ø7ÝËù7ØI&2¸ä­ï•EÆ¡áô�“}ûÏ K5*|š¡ÆŠÃyAMž‹d'›nªÏ +1K%Bm��Ó–Ê]mA Ãa–ùU#¾Ê>" >i:£":‘zÝt€œ"hŠõmô$å&þø­;;™–%fLÈñ%Ò|—‰‹ÄmŠÙèƒU=þ�[ ¬Ì`ºd¸­"%¿ü^Œ°ã™]8ã-AÿRRÑt ¥D£± ¸àF߆]<„TÄâ%j$Ä1LV¼ŽX§�ÙYXb ú%íÒ¨] ö ø¾ +9òp}r�@«W n�5õ7ßD�ß{ÎJC_k{I»úúÔ@{Qò¬º ®ƒ^eØ»ÌlŽeÀŒ?)ö^f w¤7%!Ø8Wç(ÆÓ+Õ³i“4{³ò¨<ª¯LCÁùrD(k­U é!ðîY�šŸqä¾5–‹#ç~„– 9S¡Qn4-‚öÆ– Ìï7ÈÉÿX'¢icG'mH'¾{u +ÿÏšr±Ò +^3é«0o(ÁFà)íÏHâê“56«çÕ<Ù+fkô‰D F¾3ÁÏ 'XUt9=OP¤èLDl¾a/šÞL½Sÿ‰¢$iÛÞË)�neZ$„Ä‹nþáxK˜r†oH×¥3›% Â*Œ£kIÞ©ºÝ, $�ê¥R +ôd$�!´*ýÁP­þ1'èŸó£ävµZ7ŽBUZ¬s}Òl®ä0¿êl3×4;/îÖdšÉ{_ÈF¤í�Åñx <àQ”P@»"â©®Sù;V\+çæ Y>¥bå=:£Õj" ZåLK'ë­ò€è…#.N”ñg1Ù{‚ë}dûÖhýgLëà +š[-�Ù�”𠵄ªô²’ÕŠ"æ< +ËÒ‰¶Òñཊ،�‡°Ëõ'�Ñ€]Û•8>§ê‹R*uNX‚ÔgVtBÙ=ôNÿ‘EøþÍ‹¼"dgÿŽ¥&3 áÛùs:k0žç-‰Í©H1ÙÝÈŒ¼I£ÛÓwlþ޽¶'Ó*ÛM•úçñE…ƒ²+¦X¢'j@ý,&³0ü7ahR”TrÁ/qŸŽC¼W]Ø%¼ˆØÊt€}@»d&lo»êë�ÏÖtÌ/Ñ!èÄH¥ÒÍ‹IëŠí!¯w ( ê¨BÈJ˜ þ +Ãú‚üw¥hÐR@ЄÎåLÙR‹:é4zzŒ‚ë}Gò¸µÇQõ †·c�§~ë}áÄ~ä)r\w�£ÎSŽQ žr-¶ôôã1Ü&èr:é_“u?åEÜ®‡?4o�¡Ç ÀÒnÞL$¦$p™MÍû¤rwþöŽfÆ�dOì^’‡3Ê‚΢ãè~‡ê��W¸Ýu-[øÿ¶ë³ÏZDœ1 ßùþˆ\¶l¾&Šæ$Ç)Ÿêò¡Ž$QACè"= @÷ëüÜà·ç½8$õe«ö¹ˆÍ ͤOØÚÈíø£Gb‡õÇ·¸Æ$ŸÅƒÕiCNY;TаÛ=+i�x8‘)ÖÒǼ¡‹î�‰±‰ØÊÆÉsNY +�稀¨\"0ƒ—üxþ2vNöž0ªx˜á­ÌCˆê›ÖÁ ¨:RuíË’Z8§ ƒB­ýôÔiP[½¬C—É#QáùK3·[iuÔÞà€ìS¬^ôCT>Ù7Þ=ÿm7*¢Âõ�¸ñÞ2y1k”î`‡ØÍ·We²ûBÎ} »¤:– ÿµ¡/w°¨�W¾°=˜è6ž¹lþ˜¹Â ¨;ÝÎ&­ýó±mH¦@:Åq­ÙpàJçÚ·…Z§rÌ�Q°_›iƒdÖrSÝ^Ý!Û>±Á�’¤8f/Ê$ó Èî±3â%C�åÒ/è¦õ…¸¼ßQ†‡ÀvGŠDH¼+_áÌ ÙúFIÊôØÏw‘±Á€(�Ë.?Q¬ Åw·WTSÀ )ý±òÞêà +êð5sý4‰~O_wfÊšå? +¥6ñ�…ž‡šçÛ“eô6ü€~Ìn—('±þæíR_¢T/‘Ñ\¯Éî2ô�n8ÉÞNàc —ÚÚݘÍòD9~1Cb?Hÿ£eÏvVšÏÅŠ�ÂìZ‰3|"¸1†XË�ð8x£ ¦ƒAg[5ú"=ixÞ˜Í5´ÖS_•n"D†F Ø`mecle€ñÁ~mÑÚ¶sz†ªA¿Ï(¢¨lóCØ¡ .øûòü™_ŽGŠ:˜k�€Be+€ž}M÷ªæ!ÌaT*dÏ6;QÞêr6`ˆ7« so¡(ê€ ZT]7MMiTV^2£ɾ�Ìë¸þ¿¶ø|ÎY`è~Ž +¤—¸¨]XQ&ÛR&ÈuV³f¡€§-v”ú*¯ØÉ°°  Ø°gßÀ9ã藾࿲ï/#By�@öƒ¸ÈÈßþUº�tg´Ò yýœ;òXÇŒÎÙß ¦N®ɰ�¡ÙÒ[“aÔvM&±MW±¼6MÚÌ;]S¾ )¦…pXÂdDÅÙ‰|eåZ!²]íô¨Ð¸h–OÍØ™åLòr$Xvl¢5;á4§NÔ`¬O˜†fåeŒÖ½yœL›0„S;µ Âl'ŒLuä¶súgsúc×!é úW·ÎǤ#=í4ç¤?E­øw¾x<ÀÀÕ»‹ýô�žH°!QŠå…¿„!³;8 +¥@Q97§£ÎŠ-å°´ç’mòÔøÝ±hr¯î[¼¤%ŠÃ¼ˆÂzÌ1)¨4 +>%ž;ý“Ú(u@gu­ZÑ«šZÙ"ôÚóèþäñŽßãTÚÚjj_€·cq+ùýNMx·þO¶ò7­1LŒfä¼övâ[Ò–F¥}�¾{Ô¢wF$ì¿!|úwj}Yã…Ô$ä®ËíÁÐß;È?¿o5˜&G/ó1-oaׯHtÓÃ�ÔíjÿÑù³Å>š\_G7¬ºGãò¬ŽÿGí¯ª¬lˆ22ú�zú°âUÉ©¹+k]í £+qé{¶ÞlajÊf�×Pœ=>å ¸7…öçFNÒŠ/(ÈŒ\@Ë{Q)P2ñ§ïdC"¡R"PsùMÒWƒ�.öpžä×eŽ_YL‘®ô"ûIlò‡ +%fÀÜž¡Ö$AÓ‡ëQ?ŸùÀ|¤GÇ�ÿv×FÙ©œP7c”Š®š û&~7|° uÝ|Cߤ¸Óìãþ;á�I¯yrÇš÷f>Na¶š=&�I¢?“¯ä‰u“J8(é»S²ú8)ƒs¶ôj»×ºš{ôÁ—Η,0Æü|š+‚øS$ÿ …×ÚÙA·Žn�‚@MéÒ;ÊUkDöRFÓh¥›pšolZsƒ-s¶Õª¥Ñü¥Ø?¥s/ï|Öj²ñ\@jkÇ`x5Gj‰N̵ƒè‰·÷Å}à 1äÕ4Õæ‡¸¥<Õ¡MõÓFÁS©ÊÄoÏq¾Æ[î-kÇî•-¼¹ã Öv”bË¢§ÒÇ)cö)­…­OÓÕÝ/Mk¾’áÎuÝ¿uÍôôù¬#¹b\™Þc¼ë6õ†dé“U9ˆC(Øö·XûÄ™Ü*sëÖô覇™^EC/•¦kë�äŸ gC¯3@’´ˆmZ³B�'B[¨GµfëõA‰*Š Ê±†‚*šä"(Üg"µ�N±€ØŠGЦ¢°d,’–MXæœ6  AÐÙ²q ×ü¨Ë/¦,S2Ó'BݾŽ”@Pb› ÿE Ì.PÀ  [Ÿ»h ×"úõ%Ó +Œíô´JÈ锇UP~ 0¶ €H«$ƒÞá¦"¿´vãý1€Db%(Æa… ¾Õø+�xÊA©^�ˆAd2(œ¨AÈA‘X5@®>h.ÖŽàÚqA•â^ðRM¬EÅ[ªKD…ºDа°Š(  n(‚ BØgƒ˜C ¸€@Êó’”UzïM¦�Ó,çâÂýK*»‡+Po›0ÐJ<éý +•FäŸÆ®f•]h ÁE.9 ²~D8®@a1âÖÿéƒàA�ìO£—rþ\§Xd?µ+ ‚~&µn°옟 Óðbù ´|_0æ0¶î¯¡ØÏ-k +ÿ#ý”—:iÍ‘ÈÏġРUsU—[8 ÒtÇ×ÏÙ×Xrã÷œOq¤‡rýñÌ~è­í«ÕÑè)ƒŸwT7å¨Y6?Ý’/™ÖŸ>žT3ãL)ñÏÖýÔ³á%¹S¤Føß§ÈüHìè³Øë3¥M¡ßçù÷Å­±}zžôÂÏÖð»à½3쀺\ÏüYçÃ\»ë§” Jð4|姯¾YN¯O~{%#˜ûÄÉ=FÄCùO ×ÛCúžô·JF+DANß·ÝLóOÅqÕ“4.ÔIj¸üQ‡s~¶Km,"¦^¬Ç‡U0Äý– ßv¯·Z9Ô…åOìÀ²‹ä6üÕ°Ì1*-\”5éŽ2kíÊ›:ظˆýûÈ"²î­YdÇòe¾M°ÙUb”méJÍŽ÷251�$hÇ~‡°ûÅ̲ š$ŽEþ$OÃ(X.­’oý©”ÕX¼�½£¤Š9eOñˆ†¤ŠSt‚ É)ï©`Ú{§Ñ¨ªÅZp�i�Üå s$‚\€çžaÏpv’{æ?�™ºrÏ3¤å½x¨Þº®Üv,<! +^|H,ÞŒ>]ÕY _‚�W‚©üO6+º +ü¸á!­!\5Þ=nX-e~`hžA˲îÏM|Ü·�Dç©x(O�ôÔ8ŽcŠßîÝi:dŸ¶»§¦(‡RÈÈ‚8à{l)â!‹UI¯çшÝÌ5Îä `È"’÷Ø÷#[ž‰ZB-BÚ•LDØ›P²¬x_BÜË>ƒa ž:ˆ©ˆ&Q0œ9Ƕ@ï¾+$#y¤rQŸÕˆƒoâ°™ó«ÁöLgDQ¾�xíùüN|3¸G¿<˜{ âû.ÚÀÞˆÓ kÏéw§6+‹‡&z5^cbmP ËìSÀã–ù#P/߀}XÂî<]S€æ\˜áçŸe(ˆ†b¡B j=r8¬—Áà¨,rn¶Ÿc§vˆ?=Õ/€�£Ùq€´âÍøsšäœ‚¬…àâjü8Ä-Œ :yE77jRb5º-ôº(ù‰¨KÈ} 9g¹X›‡„ÏhnGz±Ã‰\;!Oi|p&�‡.ìU‚�yu˜Kp_Q=�‹2v&AÀöjì†�9…9ŒlF®ÍZS×ͳ“³è5ØI—Þôu>W³2¼QAŽVÈébG«°qÈJXÁ« Zi-„[MÿËyŽ®E›1yø½§;ýé„Üý>é—š°ïÐÆoö‡¤…exxï¼#D]%�³Û9py’\©HÅ}ËšÅÊІmM)›Ä‚m·ò ²1üëiâJO³lè±p-P@j”ŠÐÖú÷1}z¨Æ²«˜nq(Eî~µ6~•òú(©ãÀ_×l9•ÈfJ °Ÿ¾èVT"„ +zvN¿Ì‰/a#vtGgïé¶!ƒ$Ä%Èê‡Õ4.@ ¶D �8å+}´¾(‡äÑ*E Óï¡ Æ`B6~ÉXã§#m0K·Ñýµ½Ëè8#ZZ„Ãcÿ²Rñ•ÄDê– œ’6/Âáþ„K +ºÏå½óè§HûåbþÞ›csØÀ ß™:TÛÔñïõù +ß15ëëDÜàÐV”'¸ÝnÃ.{¯yÆ9Ý$‚MÐX26M²î05¢ò +R4Hi•\]:û=TxÎ(÷dÄŸfÒDb@#oo°€düØpA¯üQ¸xCÊrp>k ?ÿ­8©‰ÛÔîÜGrGz°ÕyªM{ŽfïC:%ñ[uöŸ™vþ$jIÉÕ¤}ñŒsP4‡;å�bF='Ž}YCŒ¤+{×Râ‡> s?­k²L\˜ÈÉ¿=ÿÓP 9å¯ßãþ9ÒvØ„A$-¥¾pç¢ ¤/nKê.ˆ©s6PÝY¡ŠEÂZº â(„Í“D|{ï^¤›÷U‡c$÷“ÚÞÙLJ‡Ÿ¹†ðt­îÅ@á§ +·÷Á{¤Ö˜mÐ×}/¸÷– 2»Ý Òö¥é%¾SQ9碼+ó'G!î½ý"ˆt·J ‰¤#Ü`¶÷ �¸“ÞÖ!a‘Å} �E´Þëc¾ +!Tö^s$ ²¼ë"�G„«‹îŸõ¡ öpÕv fÚ…ös{On7¼çÌÖT Ÿ*ËÝ]¾˜óÖŸA†¢P‹ˆSŽ ‹Êl¾°3˜ž½&ßß7§ô–Øû?ž lÜ(”ÔÛ8¾XÐe{Aoô=!Úç‹£Iðê;Ü26Éf0'“AŸÀé èÚŒ{µ{¿Ù gIëÿJîÒö²¯qÓà'øÃ ’ìälW+Y�B1KôþhÃI¾C� ’ær¢Ñ©èd2àµK²á² Š£Á¯úÞÙÀµ› ìÿðƒ“@žUK‹˜Lõ‚\»¨Ü{aPxœàÎK'c…²Å }Ì5ü¾I3}©;]x·\Þ�NYg$ç9Š4Ñ2§ä8§þÊü]â. ‘[¹É¼‰˜¶ÄŸÄmˆ+õ ‘È_Úkì7ò!ŠFݼ�«ÐlóZ÷Lo©¼cÈ 2Áž/¨ ¥“1-¼¶cÒ #•Æ¥…ѽ°„õz$øHRqK$è²ÕX ò¨™Üg2=`J‘>¤ãW4ð)Œ5î,´š+5³¯ey÷ÕÓU¶#ÆÒÿÌO +;•òŠÜBñwW)æ×ýÄŠt÷%f°Õ@L•žÐU´íD¬Ï!Mô…&0]EÆð¯ÙÀe›,µHµ—›Çx³@Å QŽp)Ç/  È=më@dóU`þ*ð yk.l§k‡F¢è2à×6†KQ4ô–,6Íø2ÿ{m&æ| "_A>÷ì›.=1l±'\—Ì%�¶,Ò7¾©\�GÒF 'æjû0«�âãËÏ_åJjá?ßóU¾¼Åàï˜<:#ßûº£FÛx&G–z®-Ø›dìËÖq&‹âßzp¤ÀæzJ�Òo¦3˜0¢Kë7ìàVñÛêž?m˜u-XÃô�kå;wš¼i„®f$S :¸« DâA0¸ º¸üžÇBÐi/*ŽO‘°T”‡ê10�ó3”ÛZ²‡<×BÙ)3¾ûW"6,.;Ó¤eë EBÀݪ-9Ë ª~ˆ£Ú±ÍGÁzŸB©µwÚËk7ãÄn�ðŠlÖÐ$ÆÅ¹ÿ�,Ì&MOÄdê”H @ P óˆÅ§Æ¿ Ýñ9KR“T!÷€ï퉙W9* 4Øóiãô™§f2ÖÅf��ì3›ÌD–}²Ya£"[‘ˆ†œdcW±•ìAò ®lÛ¦<Ù'Û·Ódb ¢Œíb(¾ø;»¢×0{Äv5`Kãâ1XúÚº#99¹ÅEògYŸy�ÁWi“¤WY›È×wnû*²kó(žW¾DÑ×]�XÎ=Þ½F‚ +té2†C�2ûXWq�µÑÙõMÙ�]ý«Ïµ]—óˆ\qæúlìé#ãºnݳž���„îìWSùê«á³úÄ\âwæÚê³zæ;k]ŒQ—ÁY"[:Šû¬V÷r¬õÊ1¢!EYèüº‘!yhæ à€§¡YuL Š +� Á +@�Ð ‚0 ”jž¿ñ: +"DYª1/° +…ƒB5ÿo>ÿ|>¿y!Ÿ—¨Ê7×/Âbór:Ÿï›æ%üº_-¿œn3ˆ{½;†VKìX@˜¹Ç{••_g¿®<¿°£¼Šw +¿ƒBq¥ch1³123Ã’-X»°TZØ1\añ°‡-c˜A¸¥À +¥°Á<(ô `…ƒ‚ +/0|P8( +lº�ße 7�Ì�ömß•C#Þ�Á3c©Âcaì/’”gSÍmª¶mtwvt"sÛ2ÛÃõìJ®æöŒ˜ëžUϬ¾=vCHhlëÝÜfß`‘4’9{<†ršÏƒ°}·]“õµÉö l¿vqµM°ÆÚ¶[v‘t÷•ÊiçÎõYD?ýœS‹ÇàQ‚g¼¹gFE�“µ\{µÇìñÙ6ft).Y3*oßw™¹8'VKg§²ƒpéŒ~¶e í ²„Z>ÙQ\¢�)‡²£ ì¤‰&'-o¤Ïטٜ¬Éê¤Mb–&ó9óÉBÙ1LÚe‘ù¼D»Ë—`¾ù–˜íš˜Üùž›k¾cÈDÝïþÖß¿ï;Šœ{¯ìró§Ï{+½cpÿÞ^‚n ÇwøÒ;Š·ï(øŽâ-VK}VÅT,Þ;Jñþ÷©-é1 ›Šªl¨Îó©IÍA4¯Žýg†ðÙÌeæ{ã‹@F÷Ži¿|¹õŽ +„ Öëú×ÝøYÜU]ïU�g¿²ZßÌ÷Žá­·aÛ�îÞAÜóõS½^D¯*ï(~>›Ó\Uï_!!½H÷ɧÓïÊp·»úJï è-1*Ãç8Çù 0 „ÛU)b°Ì>tŸÈñLä;²±²20Þ)§ŠZ7€›Ê2³bÇ£ e¥Mú>šÕ @ÈàŒp×bH6¢ôy + ‚ ¹s£ "ql¼ïA ��:~Ïî¤r\We™u7Á…†8|�jE;AÂúz„u�­”vö,!�3hT³«`@ðÐÈJC(ÂNÒ’)Û}<’”ƒ(½Yı2,L²½j>ù!,:<"úÒ‡>szlèQtε*45F²¦ÅÆãQÜÆ4ãÏx.YËì(\†�=YWù¼Éì ìùÿì~&YÌOÞ$ŸÏ|±™ýýì(ŠÅ%Ÿ­1Ø6IJå011{w™w"›yÙì ³…ÙQœ]ŽÏ7Ô«²e�ñò²uïe³ÄÝßl�D6; +gGœŽ¨ä¹'SM4$0@‘$�QJ¡E{Ž$&4NhN"J¤‘Å `Š�ÇÞ¯wÌ€÷Òô‡•K—YœÚ!%Œjõöq[©‘C›y²éÓ‚þnüxƒ£¸Õ³áø†^ÓÙÁÀÞ¡¥R'9-}So K,.ðëÙ�Ñf8ÇMíƒÛq7gÔQóhpOMX®BZ °w z® +öŽ‚Cƒ¥óÏïJˆ¶!B$�1nÈn7˜øJÂÞ�Bà×ÿ!Ÿ=ßK¨}‰÷ +aAÃíñÎ�×ס‰«DoØ¡Zo²&tk;±×PñiÅÚ[Æ« +8yj‰? ~êï¨ÔT·±w8Ä2e€5l�:qúJû´í6¨wôè +öñŸw4,|�Èl ÊÁ~“Aø÷¨>ß šç��ò‡j¼7όꆱóœÿޤ?N„ë<£¢à¨Ïe/dL<¡L‚N=ÆS· ±9‹µ‹àö˜K™yBð–6çqß‘ô'Úœbc‚ãÆ4\ûC•'ºŽ­ó©Ab9|Žû²ë%h-3ï–ç$ߪÃCH¥än'®14V+°Ž-3ãÜ9WçÃ+ïËsWÔœw±f)˪JÀéâìSi¢u¾…¡µ÷Âú㘜2ÂWA+ø•eà™Œ³¨eÍõÎEi–y†ÏJ,É´xB†”·² hêÉ‹iû&bR[ØÁ;³Àæ–zz¬ {ìå—°h +qo `6¦ûqYe 8ÌŠ¯xׇí�+oä;S0Åg™�¯SÒlu\´€4(kâ|:…FªÞü ù�vqù À�Š^™¥ödÈѹh9cM¿™ÂÜ Y„Û�]¤`äw¨¼äý4äK‰â¤ž}Ç”ËÏI ŽžÒÒänëÁ~ùMY§Ø\` +CöC³@o{¿WA}e@TžÇ®Mïø˜Hžl—5êÆ}UlòÜ¡ UƒÎ¦gÏãÅ®KF)Â&~žxý|·d:‚·°¶‘µ:Ô�Qáfà8 R&‡ja (n˜xkŠ6÷ZÌZŠN~`,�;Gb9òÆ[;xFrÁöˆz#ÔA!×9@rIw xdŠN™1Ñ/¤pÆæŽ83• ó�‹˜ðKø·œøÒ–ÁXev'zß6ìËÁƒ|n +æôkâw`˜B®¾Jýé#Þ¦Òê9óe†cË„ª%pÈ +&*Ì@$Çd}œ{‡Èá¦D¡2¬äo>b¸ÊS¨—­VŽþà¬Ì„,ìO÷iϕȥ ³ö‘üpΠx]¹B�AðdF¢´oE<&uÁ,')Нƒ ñƒ¡$`n 'ã–DIuÔÚ xc?reÒ;XOô~ZB­ÕSO 6å�ÊËÐd”!Ü(…"9m.SÊœŽj/aÃ#b1Âðî¨ šl‚%Š/j(Ðû…ENàÈðb›¬�²Sq™ÍDHZ†¬=+5.Á–0sˆv<º� +§C 0¡EAÕIXÏÚ9AIïüSÏlz8HTU­Büu±kì™}¼÷V©†|¡š¿"_&¤#Â…Âuè’Û‡yJìƒ4¯ŸÔhËp%}Œ«":–ƒ ½8o† ãÙ“øéÎx‚j 6 £N¶˜éÂ:x{%j |Ý8(E~®F‘p~—dŽ_…°˜çS=ÆŸˆ©´X½<—ÏCq…3,[#ÄéúU`nÑ…ì2B‡Ç^”»?è�`eÛÒŽal” ¬S´L�óÇ¿ØN�¡fˆðT…¥5ǘ�{ ¦h>)&Ý1±amvú•ëà}ý²L|û¾p§‹ÿ £PØÄ�“ x·\’î;‹¨R+!H“�â¾>ÅÜ¡Ë�µðŒÙ¨,¸Y;ãͱT�GL]-“áÂÏ +í³j)ƒXwŒgc*1Mê(I»7’Êz|¦iÚ ˜PG1´±¶dV_2^©Èip½aUcðz¼ú3¥pã=œâZm;²ßÀ‚wïn–{Gì‰è×YH`¬ ~Ó«Jó‡ïõ;§L]9M:ö´èˆJJ]ÏÒ² A¸ËHTôõ,6)¸0)q[ ¸¥¾JÙ‰¤’bùŒÑú@‡÷æ>|yí)êÅÝÚñ÷òqÓO—ª�ÿ*t‰ðEN°˜‚ê™Õuêm?é6$Û å/e†¨ÿ�¦XOÄü«h/P¯9=7ÓöúEãŒÔ^Ù½_ÇfópQ¾ÜïóA�Rl÷ ‰#åœÖQî0ø,sP]•Á@[ ¬\ï „û¿¯.Oý.Óë�h#Ùè‚zu1óß rMþ´Á'dÁŠà¸GdA:ÿpðüLÂ…ÆhËRk©õ”² Ü-€a-õÃЪ«´Ç[¡7삜`ö'Ç­R”(–¢=ù±�‡V¥,¦žýáŽñ‰±É\�ŽôþFæ‘Q�>�2x“µŽ³˜•ˆ£©±%´ÅF€ñ =ˆ|pôKE˜P×Aë …IíªÇT§Qê6䯩Åö‘aYñØ6]fM P­hqx6ÉF­éÈB/Ó®>xv~wËæl*ܺˆ¦aЖ¡‡�2Ê€Ìf|^¨@ æãÍE‹[ºÓh$àÕsè{”Mo&â.‘/]Û»ÍðØûudø/eóƒ4N ,:ÊÌÛŠÑÀ¼ÇKn“5ÜŠÃ'áþ/1¸3Ìt¢:‘:#Æ,7Û�€M$ò¤eíÅ“,'¶$.Xåd#ü +pЄ �â?ΣÊ|2‡fŒÚ2ÅuCŽ +‹ÌU€Üvh ¸òÓ5ÀD”8¼ÖðTÝ‘_r%V\‰°sžyß›æÔba »æj Q› Ð�ðlñ4+îž“ä Þ”[Œ?á±$ù„É"T·Û³™HœÒḐo°*@Â@»xùfª¡�*Ðî�gMö&O�b¶QP N›ƒ¤ñ™‚�jÆ}þÌ=${`´ 1öþ"ÜAQöÁb²šCµ÷9™°ŒåØTâuÊuÁµbä–‚†Ð¢&Ñí䆱÷e‰YtøA�¨SäýZä•9¶‡ŸJLÝ:ñþEX]™’@3xJ.¸wá ÑB>w¸„HÕ|ŒÚ‹%Àºâ)Ó +’UÊâã¸|"Ðí4ƒo+dÄß_y¹êô…ên)fúxžãµC ï$M{R7BŠ +vÕvNÌêɃ‡b=JÞc“³£ý L ‚{#0Cajq&ð3$ 7ÞÅÅô½(4ìÅoçÄánÜï½£Q´_¼,áü]=“~&‹SÞh1g1ë%ª�«wÔ„{ðZÓÒ£†c’.@§Ø¼‰Æ•DºÑ~˜Öa£&K`…OÊH¾à…ÂlÙŽqô‚;…âªbh>ZžÞb>ç»ñáò<Ö.¶-D„~³Ž¬Ÿ^ø�=�iÿð%ðbæ]‡T…‡Qóãì–R…ôb 0  +K+åÇ;)—ù6æ+ü¦¼µÁѧÿeéH yãTŒæ•…(Ž ©¾ø !—ÂÍÚò¡YÀòÍâÆcؾX«qðo­ÉìF{Ñ…–>Èã .Mò˜¨d…x«6†¥²JÈYØéüXµ¬*cïZnËùêãþP\”C씤˘0¹EZL %"ʸÒo žgÐ~ä‹ÏÛ×:wš7˜jþ2ÇÜPeÌZ‹‹'ÑcFüüXãü;Ð�Û)úóUؤ_`$Ä»´Šîˆ|xŸG|Ð&Åî]íà×’4‰ÆDÎ…¡.ƒN�0âq>Óƒlo?q +Þ¬$ÑÇØuP†*ž[®‰$Ï–uð›2YUÉÞ¶4]2ô„ª\õ&ÛËVÜ H‘zá·‘Ho6(‘¼DÄF˜²1¥±ûG1½Ø'Ç*)F=j°=gÑg_sŠßÅP¨}†áÙ_­œª1tÿÁ¬ë�WÖZ˜—yÖëe¦1”ÚÅŒåÌÚ%úá²UÓû亞Dšà£DíðåâuçC:‡:*BPNgûë‚2:ò6Aœ±ñÀÚ +=b³Uœã ÄXË‘ "2 `CÂS~â÷C…€ðZ6v…æKBQÐ1í6w§M°Á#‚Ÿ+ÞñäþyµGGžˆzÛo´—Ènö´sÿ*F½\ûLPê#1¥`¬L>{¶j¸–²Ówê*U/Wa¦’¯VØ|Áß•y%í�=®â]1†‡Õ<bþŽ�J!Rží#0 (‘aÙ�Ì[ JQ—‹ÿíÍû¼ E]¾‘é5ô™±�0/ ˆgøž5üétl@ƒû[CcñÚÔ!¥¼üÃdÌ`±09dîÔnÉtþhNžPæ] ò~ÐŽÒrù£áU‰™N̽gƒÅ_(©Öm•0‡,³+sÆ,²ñ¡lãlúN�[ 9—™ÈTÔ/¢l‹º½×ùjŸ,s‚¡5‚ñµÊ>˜·•aÆ ]:horXD�úH ’ ‹ùÇ­:ín�m´¿ƒ–�ÇÎ|šXCbîw* Py“ +V|R”7kR) +]?�^ P4^ +fûe_ËzÑÚ¹Ç�Äøc¿–5¦áÐMu^¶ GlÖ–‰F¸õÒ JcÊ3u¨gí̺éK•sZ·?Pb �,lMxÍNUY16Gyÿ!¤àZÀC«ïפRHùgDhçꥳÍŽøõù<*Æî8d«|"`D’÷.Á.›Gåƒb·ÜšãÚ£õ8Hô$«¬öU(B`šóºú7@N£Œmö·ayÊ!§(jk?Bš;åú˜³Ý,Åþ†X%¹JÔêÌn“uðÎôK„¿ÙõÀž¸sPhi œý�rÜ +–¨Ž{êÄHððN�3 P»áùûŸ¹Ÿ»4Ó U²¤ª2_ÓNb!Xc>Ac ±¦îñdiY +¸ÈÜf c|uÐ éUÃÈ8)blF‚»zÏ¡3l¥°]<2ÉaŽçW óXÙ‚B3k;cÇ-Èúþ°zé`:�¦ÁûZŸÒ¬vALchw (@Ó¥òÒ§ÁÕkHQ‘6^øðɬÚEuˆ¾ß˜ŸPµ�qNà]ÿ`Ÿ„úÒð åêPá6}ð˜Y{Œì¾×Ô–9¸îs®ªRÚÛi\Öä­e  ü)Ñp Æ\.wéŒ{Ì2È3ÀQMÔ�$ñ!îw±¹HC'Hùb‘X TÃL RcqI•´–̺¦¶BÖR›Ý燅LôLß… ¢|ÕN<Æ øê9ÿî6q'ÝP|OÁ$AÃEš+¼…õ©!¾ wFb­*ÞÕ¡œ«É”ýP�i.~MÒøæÊ)L ó;bØzgÿP9l[„‰™1ÈÞšG˧ :ãæÄéQ—U¢p‚ûŽœ.ï5:t¨ª³¡Ïрׄ(˜n†+RéóІ¯3üq$+kEˆ�z¾#WÙ’–µfâ[~ 1'‹J�H×ÿ€sÈVöo'7 ‚_ï^²[háad©Óß‘êw¬¤/ƒJ±DóxñLE‘+/C_“ƒlúg‚_X·FHUlj*‰…ëÇï„è\hsGµZ‡Ñ°ä"Áœ ¡[ìÏ UPl¹g/õ×Uyû)—ôJ«�ä{ËSfßa¡ôjó·íºV£èY“�/7™‚ÕEùBp‰ Ÿ"¦ ¬·È›ÍÆü²U' /u»c'¼å{² pT€K|fû½jT¥™ùÇ"o•0‡núOñ·õ¬K¹žÀd²ZJÛ³Ký7ÉÛÀ%)Â`¶v Á7ø“7æü=EÎÙQ€‡—±V 4±@ñ# úž`¬à�û]\*h„é,G4ƒªˆPÓ]¤ÙFiºÊ�Eªcø]T8vá߉$‡P0Fs€àêÐÎoiÝŸŒá繞]äƒi?gœ¿auWÂìh-yÜ¥ƒ¤öƒO‚gIOxe5«OŸBïj|é*™&P†a_2‰²�çòZ4mÑ'4É{Jû´fLƒ¦w—ªGxÔ'×3c®ÏpsŠÈI7¶¾9qOÍp¯HŒáä´òÞÿ%új#(#SbŒÀ8ƒ� ìà‘:ÿÌyýõ‡Ô‰w¯ÐN¹E^U݆B@HÃe‘"æ2é%bp®¬ÆH’tžà£nTл"x‡Õè›:=U·[L¹TÑætA�ŽòŒ »„Óé$‚Ð+Åç³x»¹x¶¾‘W©¶‘U³éø‰òµ+`å1¢EU™;¢ŠÝÿ=‚¨ò•Nm×-o…¬“ìhÇûWÕÃ=¾Ž\h�XDahCà‘rAù:{ U�ýG�Ì—N1H +à•j¹¢γóiqð‘`6˜‚/Åæ& +\›†;šðÌãÃF"ÝÉUï-†‰×O_ö�ùÁ¡b5TÇL�GaäžiÙÀc‡z +º“ˆ¶\y¥�/Ïàžc15qŒŠC&ëÆ|2 C7W,@û“çÇów`c ÄP¾¸Î›zT*¹p‹Öhºô ‘Ù/bÑç^óÑuš ˜8êäteÉÎÚ®9h%b@Ð8%G3¯Ðék« —�‘ÊðòyØIí ­b¾˜�]Òg6<ö`Â�NZT—Ö$9ƒeÔ$¡®°_™Î`W¿‹F%xLØNÔ7phN¿ q^ˆu϶ ,ÔÍWâ³°^Ð@#á¬\pWQýá®ö„;©Ä×ÙÉSQ&W¤Ù f6>#.F&ÑÖ”e$3½ñIäPªhª$⼬kþ"Ñ“ìaý+6¤ù¸=AÚ²À9­Ù`OïžûY4<Ò5 º5àƒ—fp$›�èá›ïëÐÍ"H„{hKí¦ºJ˜a˜‰1@ÅC«Ã¢N“úÞ)[-(ñ/™q9©k�I|C-™MÿIŒ:NèRý„É v1Š­³MA1 +n©Æ¨ù=[ˆÎœ¦áÜè&xTÚåQcŠk0™…:‡è.×wÿHÑâ´©¶ñ‹zZˆbÊ)˜¨~L\^¨0�kÙB;J¶22’ÞšãÄà·0=G| @èÀÃõ¿—s¼ì×2AÄ;�VngݶvÀ‚ºBx`ŸJU‘‡:û;�Æp<)VfzQhÿò‚)‰F¢/Â[^›1 "~–¨)·¤ÁJ—ÈZ]¬ª}G/=í¶xŸ?+肱XЇš¦r‹”T·ÄóGWI¸§P-I릺­—MPUÆ�Wž}~¿hÐÇx14k‰pFWÝè%€ÜpJ» €¬Í†’Í k3p Fê÷³{5í=’˜Â,!jMOžÆR}3`ØF¡(ˆ„gr[~ЕvOçÀQ#ÂҢͥЅÖä‚íÂÖ3K³�Ó#Q\p´ß@•m0Iïp�??Ù¯1 JÿÕª¥Rš†âV%6‡óÙ¦S5ùÁá+IV„še¿1áúpPfèôAF`Œ$èZщ+bÍÓC' Ìýj¦(ÿg +ÝöJ +€çFJ{Œ^øè{�rÜ ®®Õ™%£XŒlASµiû ;ÕJ£)•Î4hŠ1’~õ¥T¢É”GÑIã�‰$˜Z+�GS�’¹�ôl±&ʪˆW[ù>Xê®�b)�—£›ýÐõ{àZg<­­Î�–^¦K)‹u n,Ͳ(hè²á½‹ÕõšE1 ðæ¨Ch]½í'3ò�QÕ`åŠ* �Ùè�áGG4uX–C‰Ò£|­çã†9ê®Íb?MŸ�$¯,juöž1(OBTƒ¨EPJ0RšVbà‹¿c5­2Ëa3´ Çm~£ïl}±ßùƒb(Ã4® ¦–jç$78PÐRpÐŹh®®BÚ¯²âN*Ù„Áxœu°$VÜûÓÎM‚� Vb)�”\<�ú]}8�°“CØ_1ÿýÏè©Æd�uL jì7v &:?>ánÇ�šˆŒãÕÎæ‹ µí3aO3�p<#mØW;°„ü£:rƒÁ3‰ûŶ'µ‰°ÍèyTä°õÌ™$²g›¾:ŽAÝ-Î+ñ@Õ�<ªË!y—SØ¢Th!"aq¦¼¨\N}Œl°Ü´]�ÜË¥SÔçˈW¼žp¹ä*éýGÛ•€Û]i›ˆÂ�À(ªßÄL†.!¨DM|Ál¥˜¾Ê—®LØAŒ[¸kÓ§äÍXèðù;ÖH�…á`PÊ¡nÜÍH¬×E,ÝøIpÑÍ&ZÙxÂîü}››r8¾×qV1EôE²ùÕ�—ï]ÎÝoØËBîó<èn<5·›�l»O8…}ö7í\¦005ô?´¬ÄÜV¾öERÎÖ†b£…�RÌcKì�ƒi*¥$·«­HùFP«‹ðXGŒÈí[_f� ›6��Ý1èhŒç¹ Mˆk®&ZÊA<Šl�êѨœ‡áìÌ;_K²@ÚÁxšŽäl2>q)VïoÀ@Ú‡e½>À\BpÕçŒxÚ?uß宊©‹çî2~eÆÜ}æ-èÍ5JWÀEwTs$š}ùb¨Žà +a“ +œ~Þd +փ鸴V ¢A(±DN,Ôš¯%H1n5’v‚›ÒŽ}37ŸÑ5é[ .8`Ë>ÄoC +"ÚäÊÄ}Ž›�s¹„�È¢c¿ÍvÅ„�‚ÏMc2&à%S"oÙqqE9ºaMdĆhÓÕ¯E‰‡u±šÙ½‘“ ‡¯(€£Ê‡¤-_‘{½òÔáÓGà: ÙŸ"¨¨ð�d…`%ú7ÈóIíÑFd…e|vh¥ë“*æ‡Ø:�9bÆ¿‹ÖìƒÂ¼Ä”€ž•“ÔäXa�ÇD‘"¹poÖ¾‰ïo4„{ˆ°@&‘ç–7,Àlz§oð°ö1±Fþ·ºRŸî±ÎÈ„\ÊÇ¦ÈæIÔʘÔF-¶ÆÑèC›»¦\uÞœà¬ï.{‚_[Óã`Ñ1¦»ëqÜYÓ}ÒÂùx$¥XÂ:ÚyÄ*µq*°6òÁ$ÿý…Àî;‹hjÌ=¢mMŸ» `ò(JìTð´«þ0¤v‘2*¥p=ÑtƒØ ÄN§ZSµ dUPщÑH:�¿ÅšûÔû LæxYÊ@Â÷ŸÌk˜ñå!qˆ.k;yîVÓ`…´I…å—î�G\G¨õªaÆÛ� Òi´¡­uÒÖ½tay3*þ‰tuÒÞ´ Óš13ò¼„8zaµ*[¥ïd5<Ôé�Z_zø„  hLJ‘yŸ“±1ÜžFÚƒeú7¼Šðé…ã=ªù5çr‹Õ\ËIZ‡7—±kœþ!£7 Ÿ_Ô+ÚêidšÂÇ�Õ-�B¤C �¦nMyÃ\»X®½8û / …LÜÞ$˜}tÐ×CÏ|ä|ÊI¶éDÙ¦²IRÝнƒy¥f6”jÜùÍeè0§¦¦ÞÖv©’>hqX +�>6¿¹‡ø£g ŠH೨,À~nå5JŒßó! ÆRÓ‰ÐáÝÛƒ‰­Pú]¤‘†ù%&oò»VÇí ^ÉâȵҷهàAꦬi‹Gˆþº’S3�è~ÜxH¿ñe`˜„¼b&êø¦�tuug-Ú›�BÛj:ŒÀ@Í*(ÂYEÀC·.Þ�rLæÇY³™QÖ9aƒ‚#6ŒoU:úPd·²¦…½_×v$;Á€Xƒ>ÑQ˜ü© :øÛ'‹m=5ÅÝRâÓFñVØ…±eO'%°%­¢äÜ«‹P‚¢Zúa¬™g¶¹Ã9\£…EbÈpó9Nö[DtdŽÖ +"wQ!Êb }/½!3[2ÖžRFeX[”Û;ÐØ™Äf¥FX•³1r¨…«of¯ÍØA$FÒX•»^Öá±n—P’¼(Ô¼açΩ]­ ²Å„m4È6v€„â&ã϶½ø\ÁU Å©©¼Œ9œ¯]ÊÒZïò +CüJ—ŤÉŠÖÓ•JWXÚ0 @O¤{¶‘Æe•÷]÷YJ#˜‘ÖA>F§}h_¯ŽûËRÕˆ6ZÍFíWÀlcµ…�Õ0�cmK:b'uàl¡'ª‰u‹¨€þâÔºâ­pÚ3‹~^r Ü +×ðs _nb.EsÐW­¨­hëÒ¡ÈYL{-2P= (o¯óس׃õ%©€Žþnï$‹Ëatg[+Œ$ñ�g=¶­Ø�Ÿ+‘ Õ2ãÙpâÞÃÁ– <ñnà}äaÊæeTI _Èüœ¾$9¢ +°‹ü43]O?l„õä™ã„ÐvȬ#Ðù³s©ú…é4�uX=7“R©”èF‘Pã!ÉFló†çQ ©ù +¥‘è™Ø@ä¾#ãƒ: û@Ïã+ˆ<=ó?Àä +¿Âû2k £ô ¤ «.©ÞÙ¥GúçîE‰£N@­ô 5$’¤�”®mƒô]¨R�f!gëϪ=ƒ½œ‹3ð=ңʯ“QÎZ¿8…žî �íêMÏî3��ãÎ2JAÔß«:·Ÿl ìöÇço¥ÆnpÚÆ6Œÿ€¸Z½ ±íÓû¶C!Øq»@*NhŠÇ$&öFº\Ç"©C Ìñ¬ú>BÞ êBC½lŒaõ�û8ITñý8¶/DR/¸Æ– üØ„oµ­•Ä$u¥³+Ö1‰òÇþ¬±'ljùB44ÚB—j2&‡ÛÚ +þ6ûšú±ìâÄRàíB–|ÊYº 1�s#&½e{H ƯˆtÎÒ½ãSé‘íL‡…Íø«Ãà€P\5µ²J�ºÈècú,âzÞ‘ïVú�N.ŒŸ±Ýl¨Þž$àfsU… Žy…xª¡#Ñ1Ó +Ñ‘°H´Ób$�€ÂBüñ³Á>øŠ�ŽÓâë½¶B74KžÊà6V`æµôû„!•”O³8au£–ƒÛŠÿ͆y©ÿ¨t6îRè?Ú�˜ìØÔAšÁq™9H«°R•î3 ZîýÍU�héWBtcô@+Z¨uÇxå­Ð*©°` CÝÄ}ûÜÛ!~l<ãÃÆüwµ!Ù·zBx4MòâQkC0+’ßä6¾(BüÐQ’±ÆÒwÊYÙñÄ ÿ›]ÐÛ`Ò³­ÃßK?kPrð&FªÓVojÌ'Sï½D$Ýî› +~Ý—XйՌÀQoõpRuéwN-¹ÀƯEÍè*ŽyÅ.Œ±N S »ô&3 +ú‘½¬ÛÚE 2Ïi-�(ø„) ÇxGºM¾AŠUÝ1ÐsõãÑ*Š5ª¹Ä‡û�V]�Öà‡c+|©Ìù‚`�8dM7�Ò5ÌÌ0JWø¬_ç y^ÆåÓtàÉ=t&±Š>°¼®¥k@^apòž±›ùîƒøÃÅŒ2|ðêxg?A´!Ü‹èE˜|G«‰ßÈ•»¨8Ô©|ÂɇIo¬ˆ+”̵�ØÇ"‡±A“8Ô”Rƒ‰È„þè�b±nùá˜a½‰ r×Mù¼ÀÀJ&Õ²nÄ iÁüã^ ˆMÆxá¶Å)?‰¨’ÊBhs!Òˆù÷Dæšl—’qS…Ü)ÅPÁ‘Z<ƒhwËAÈÑ1þmÊ#Q®`\ƒ¤ÙK‘+È*#˜ ©mâ5KDŸÂ=™´šÑ.ÿ[Àw†c¡¶ôà_¾zˆÚ¢äß¾zñ×*7Ñ){½d^rfÖ¤þ¯¥Sûæ㘯sÐýþ/R†T5Š3a^ÞÎ9 û(ª©Æýíû:›’û[‹ÿ3˕߻”Ü@Çóâe^n×{ÔªMDŽº0÷ÅZ›W"~ç7™9ù¼ðk}–ÍäUbÔ¥z\ \¤?¨¥Þ'þê…ˆž0œ‘,ôpîsUqŸožž¯?H®¶žŒ ÿHÛG­è×Ú˜÷]f¹>ÕUjÅÕÉp:Hµà/��ÛÄê0cèÅV¢7tJ´ÕÓSâ «'.X\¢mæÅð"¢€–^ƒcó3ùƒø—Èû�l@ŒÑüL¹ÓÑØF[,”z8YwZãÌE]:}ö.[ :Hùnñ(e 2·ûh+ˆLL�Ð"BEÌ¥Pàj�ÆÈðœîŽˆÉíKÕJtªÙ_ JÕE´³C,4 Þ¿¥süÀŽg~ÉeQuzö\QÒ/®K‹fÔá!ÀìþJ'É[ìo-ÄÁÒã곓T�>Àc#œµv->òÌýåo’¶ŠÇ-e jÇÞ'wŽYËq‚žǽG§nÜß^6n”þ™�‚HÕ‡DãvÁFÒŒ{»_€Œãå°Y-Æ=äÞ3’š'‡„hrzqKg½˜ZÜAv&'™×L+n®¤b*äãTŠ»•Ÿj(DÅÉ'‘@�¸fÎÆ1qâÏã°·‡œÑH\Ñó&X1p~š;õæÈw‘å Ä Ã룷LL±Š|MƒÍ‰>þVåÔrÍ={áY¸cþ¼*OÜšEánògk±Í8Ã�Û$ ?H„Àí4nçß&öàžQ1“$›L&r»¥ˆHÁ‰ƒdPJp²ªlF…àê¨Ewà’†žA2pfZíð‹p×8ÓÏõ�MwkÀ͆ï@n!™gè¹kà�%XàE›Ôý7÷©ì^þ�c˜þfzn`üíf§Ù1)XûíŒ?!ýƹ˜†ä·Ôyà·_7:à¾]àžñb ¨úfûÙñè¦O–Û•†¾ù‘ŠØ|;|¥8'&ߨgLßìJ¾ÂàÛ'©¸ÞÛ¡§l™ÇåÞÚ`0Œ¸ÕÞz“‡ÅÞ µÞ„åõH½­;CÁÒ›Åíè 4Ý]çmq óÖôTy{JBmäí—°tŒm¦ñ&S‹È|±ˆx3x_áí:¼å…ôæÛ 1q^Úm7n�Énù³†ÝØÃGÌ&»n= +–‰•à)ëV2扪[/äj¢nÐ蛥ñ†_wP/¦–�•–d±!èìêc Ì·;‚æÜf�°ÔܶߢáÁh™¸Å˜ÛÄÞ[ÂRTeQn_Ú(¹¡·é„&†mØñØ1fo¨ÔÄh�9¹1â½x‡ ·Qé-¯c§b[M4˜oÄ{‡kÏ'ï¥Ûœ’&Snû&T^…%ød¸ Ãä÷΅Ѻm8¬›"2¶­Qr¯jxzf´mþîÕšmÐèɶA&‹mÛ3Û¬ì˜ÏkÓ5�pmtIZžVk£H%ÓjûC(ªí›°²èvcµ¯;© ”Û5È|û«} Bm`y߈„ØÔi»ÄŽÈ´ =L*m3çÞ Ò–ža£m<ë&jsDÛ_R![h;—@›+Þgû0s1϶wbÈ0jrü1Œ‘ú1˦˜9WekSóQ6ÏcÒyXz“�H,TË;+¤žs\ ö7_àãx±°Q56knqcl T{Ÿˆf�Ž-6%§Rlœ2•ØÌqgbC›lBxþª©Úa;”$FGâ2leïFœ4@aƒH“‰¶¹j°ÑN­6ÁöéÇ8j¡ ® SÚ…|G¯ Î�׺%7^CNÒ"�Kwmo–]k% ‰êší•D×î›%°¹¦ü¤ ’\«vo©ùzâö²9£g‹[lM Mk­aø>©5qy3—ÖÖL(¸žÐZê¬9#!dÖŽò{oe�ÝCÖìiGcm"„XÛñ³Q*¬=ò› ¬1cRûj :lxYOy5q¼uµíä\ �t‹ëTOPÞ£ÃØÿDÕœ$Í4ÕžøÍ#ÕØ 3ST«�ZmPí§¸v”¿rO�ÇôDÂÊŠÃJŒŽKKí.S)µÚÔj—Ô~�£ÜF!5(×,î¨=1°c“ÞÃo8´c µOÇõ̧ jmþ€Cz ¨ý¼XèN¿øiS’%)Ÿ¶“1RO3œ‹OL÷×N?œD§µ™TE9Í[�Óx˜VÜ4ÂϦUä.SMƒJEÓæ€ŽÌ4Ÿ¤“ir±Ê‰iÒ󯦭M ÃJu3½´ÿQ1¹´Ãí’b2§ÔÒZ%ÏKÕ†D‚g¥�ò‘RiÌÓ«”Vn);IäQûNš_øStŸîh1ÖuÛ*Ðù7ݨ<7Ø;U!Í·2 vÙ"}´æN†Ê£½n!¬£uëmò¯¹-q4ðèŽÚh£n[ž˜�ºØé\æG¡P¾E¶NîÚÀİuˆDZ½E+…µé<Œ$×�‰8µÙŒ]�²ö+k Ê�žUYu¾g�«ÚÑ^)ôJaɆó}àaÍ ’\CÛ¼ƒ8Zê€,´ÿ&…&ÐæÃ¡F¸Ú€R:Ã;@JAÀÆ–^¾1 $é%k­í:%4ÂþÙ­G 6š_Qnj°úÙ3ÒdâgßB¿Ï‰c@bÃdè3*^â{¼£§)má3óÜÎvÏ ƒÃC©Ÿ*R=ÛX±_Œñ‰€®.)æÎZ“»«�Á‰;;kJFÔ:N÷L��Èídél£J¡3›Õ×uVÚΙì“(�^¸l5á£0‚*q¶™ÑXáÌdÕ3ÎÞ B çƒúfgÙYy3Ù¼ju³]FA73¸mö–6Cz—Í4ÍÀ²ùÊ;¬ÛC«¾ðJâYˆ~Sž6’”&ÄQVkŒ3+Šá¤‘¥®ðÁ�‹}¹Lº„2–Ò :9å@-Jé¶@�žCŒÌCƒìß"81uøÝß�×õ�e(ÝO²!áà[7²zg©;HAFeU 4Ù™üN‘áÕ\x±¡Í¹Ý‹jæ8ð�;- Å õ·$~+¶°]jËa§!lš"\žŠH�„]G¡ö»ø­/Uö6_¿5ŠáÕ»­ À¬¢µô›'­^Š/½ ág¿‘÷ž?ÊRÄh w„Oƒ*€Ôp…�{ˆ2uɈßí"Ó„TìcÈñùˆØLÙ:â`=w”ò1h˯2Ë;ô娎+�ʘŸ#ÁsplƘÂwSx¹Sù"úè~éT„OÖ7´æZsN›ÔJs­ß�8_£Wÿ*‚“N—r�ÉçjÈ$Ô9\\W�ËQv¢?â#Õä!aF²Cè¬Rä·¿�ß ¬µèNg™Y¹�ð*ø¤xÞs�æ;¾þ“‘!ø76é�$泌&~Q‹e¨[þ +@‰_ £9mCíFf ìq†¢ÿæ:‘úâ +9ö)…ŽÏP.@Ÿº {Dü&èÛ{×H ¤¼¢¬Bk]Ù:ü·•à>§FÚ¥2Ä>Êô‰øè‚Í‘í¹:X� &ÿ +N!ÆWw²ñèN¦R „”l ï:rìI¨#€#`—V�™¹˜€mZ•å[j�°Û5¨Q`[}ÂÍ¢8äG)Á¼:ìúɽe‰�J6!GâEXl%�ú ÛÒåë ÛXRÒg ­Ÿ&SÎäHv6+¦ õòcP�Ϊ$ŸF<Œûüúˆ¹³9éØ�ŽWÍ:ÛƦ+øt‚»@óJ÷�•É„¡!œÑt¥Ò˜fÉBûÍ`æk5�'²~!)÷а@X¦„áaêâk]AÒ¡-vÞ.f$"£\å'¡ßƒ¢ƒ+pRƼ™Ô!kÆ"¾Ý;4íUÑqÿª¤@7*‚¡C~àk#Y Àé�ø’�TÛ5�†¢1!€¶Gn/G©YŠPÜuªlùõºMáuÅ8Œ7ª¨ ¶ä1ûÀT&€€•˜<ÿQœ÷(ž±,%KI•¢…2¡&ü`Ñ®<§-I5£ƒÅIò,5vlXªÌŸ¶u•Öî¯âÁ8ÂdQ?…8 š‚¶�BÐØvâ=9Û¬ªÍµÐ7keìu�Ù¶ë\�A'*^˜�Ǹ¥ªgð +$²X £�Dƒ$�Ö|}=;¹÷è=N½†vIxVâJ½ÒGÓ”ŒÁUÒ‹þ¤ÅAàÛ4\9L–ÜÅÕµ³õéüh˜' ÄªŠœs#:Ì \Qº6¦ßNÞ‘$"á0Ý7ƬQ=Q–Êre  º‚oÏPnÑ`ôˆ(™×‚4œ\$pÜL›E¬ÀŽM7ÏÕ5Xíb›‡PLÓxFÛÓ`ó¶œÈjS#�÷Îé!ÝÍAÈ)Ob/3 l€PÑøÜûÿaL=w^JcùjÛwîl&ú,ѨŸ'EZÓÒP“ÆÌ&­õÁN-yÒòP‹ïà±ËSžh:îX1nIüazŠ“Ø@¡Qe7@‰~ •z[ü”Å‹À‘™VŒT“裒åðJdD¹R1'²î1k¦ƒsð߃iù¹ZÆVÀdzpªêOéœad%?ñõí +—rV„œïãØÜŒe–q$q’f!9DHR¢sƒH`pÅ[`‰JƒFQõ÷.cÁþµŠL–cF%aD/ôÃ<¦F¼¯AyèU/~­x™(U0l±@bJO°õÛš°øŠ¤Ò–„VQäëý�¾©0�XKãæEc"´º¾¶ã©´]K„Œw%hå¹DøÆØŽæ³ûÒJÆ2sÐa,å±h&»Ã§“�fŠ�¸rOÜã�¿¸k‚$ó*J;¯€Ž…œ/å tõ,Uƒ“Q/q´«Z¶k8ºêÀ‰ `´p×A®!`F9àúcp⽤ñ^Š`<9”°–UÑЇ~¢È&¹ +[ K“B²¢'2ÆC×oâ)‚lagb²FÛ +„,DÜÕO%:�9Ÿ+EhË™Bô‘sE%Á;Nï[Éh°Ô�=�x;dûë„mÍ]¦úùb¶CøÒÌ1…«¢Šºü8%úØ"œDÈôÁ +ƒÈpLµlÈxnÓQɨ8?´½–0X™K×öQ õ­” d'½ùò®bf] ûú˜fÊ!¬I£j�™N)§*ÞóX€/‘ܳá¡åhI‚‘°‡ Û©r7–ûܦùŸéACFøµþ$Ȳ;Ï£…\2á@zH/ƒ#�Bqû¾õ N*@ x¡A¾³óòƒñ­©i=ãaL³„).3j`Ô�6ë^£?ðù@ ª5¤ý•Ré%ø�©y£‚‹¡HNb»iCE �Á‘t̾»ªñ8At�r†ÊÆ +-Ê)…g¥ÉŸ~ý!¢£k +Z©ÀxdûÀšµÊ˜á¨Áw¾™×^jRR$á5WÀÐj¸Œ„”7rÃñ(¦Z�®² ùËË‚�>ª}¾‡¯øÖ&‡ŸaéÁª·2š ÍV +[:).Wü@ôkÅ>º0Àl¾JmOu.ØòÙeÃôm›çŸŸÃÃè¢Ùò€ÛϧG”xn†ºjŠe€UǹÆÍ:]¶Ù ¦¸¤¨¢ª'× +�\�rRùG}ªhæsæ¤#@kŸné=®†4–7ìŠ4Ê,Gx·†°u6—Ë»NÈq " Ö�[A'€?SŽØÔ9˜ü$[»ýÕç¸äN­%g~¸ûƒ‚ŠqVômUÞÿ'Ie< æ(:Š+Îé'è`5H…GO•Yƒ¬TNxŒ÷ÜÇXæ0Ãí¥2 žk†ûø‡§XÎ(Âl$'þ9V%Ü9f�ûxµÊÏÃNÚàiˆBóÔµP)XèDÃÝ^æ=幄±°%jÍS‹…¾ù� ×цl OšXÁH¥x�íÁXtšDÌ:G5ˆ€d ,AËÀ�éTlüãÒˆÝ�ãS XC¥d1›“+ ëFŸq>¤70íÅpð”ýÈ Ó>æŒ×a”©“ßÞ€‹ o +Í*¬c{e,ˆ$(ؘ`&÷Ò��Lœì Ÿ¤‹1Õ­P,9o®™b�-5�ˆ'þwØP…©QòŽÈ«1)OÃN½èû‡B‚30Yõ�Øñ�‰À7!?¨Û�Ñ%W¤²y8_ +÷ E�ÝÆCלâ’[9A(Ä0ðšˆùà&3‚!.«ðÙG#wsáGÑGa]¸T}ڞܮáü¼_³"FȪd“FŒ”<þûüÇ;'‰ýAŒ7�{•8Ï´�¼ÙE¶ÒQÈ(a¼Nw `ŒÃïKÙ(¹Ðf#„zb©Ò*Ž,eäø›|<ü{ ÿ´"¡ÊÍÁ9Aò‡ß�D ¼@ú`È ëX˜ ƒ …ˆ£"¿‡9bID½©\64†È¯ö…Ú‰0£I+†€¼ÄZ˜,G+¥æË|40ÍæXì_Æ1DYZ´e¾ëžêd‹Ôã+^¸˜Ð€ uZ¯ô’b­�dqÉkrÅnƒPg>µ‡¬­iî‹Ó8Ù�\ŽÒ/cÁ b82%ÇUköðˆ¼ëÉá«V�UìĆhC¾q'‰ÝÐÔX™Ú1|'x«à)D‚V½Ê�h™Ý&Ø9ƒå A2ïÞ µF`8þ\OËh4HÜ]W¡ŠCvA¨ä�HNø–ÿ1vº·Ê€a(�=#n…Òb9Ø{Ê$tIˆ‚g†?B H`j4QB‰'– á´qýO;΀$¢T*øz¨8Œ3 ¹Ö•�ž*š°[6¦Çd_DFnïüWýÄë�ã#¡—&B‡¬×c{_¤Ïä¤3æF>¶TqBV½Zü@ƒ£*JÚ…åT˜ñÔ¨ ÇZN¾ª™Ë+t©#{=x–;ï£MGXŸÅÔÃȈÓY"„m[«Â,–Tžˆi§±X�g´”ãåêþ&�T[Aù �M¸È+ã‡ôCÄpíN +s9%XFo·³6iæ©(í�s îØ8�¦RÄ @òGà!Óe-F§‡0³ÁjÑ‚mqLm½aAçéÎÍæPEµ·Ë…0ìà“Ñ…#Õ¶ó–ú½@yJ�!eð•ø¨pS–Ð~Aˆï]Hˆ)´UA(Àá@ø[9R•ÐÙ¥ÑT rÄdîp”í$F¼Í)ù‰nM©Çq•Îi$.I÷¤%¤¶t ì/L¼Ûª®úˆ×ÂìnÁe5'ž®¢˜Êd7~´)þ<èˆ5xj¦Éh׆)�vñVxd». 8Ðm|0ÝaØ1‘«—‡ðÌ ÷Ú¤ù fÉÔô!‘J;x‹õ„î„¢e2¤Bt0“5µ„Œ›ì³EL0¤¨C°ÿìhÆ— ê§#Ñ�á=“KÆž!ËË _èÌ[çp¼>mÕ™F9àçòG÷+Äjg¢óHh,MóÊAÅ*ZˆY4—m�÷~âIúš £®ìÜi.\~oÀ¥¶ÄÀç[ÆäGZ"z(’ º6MÒJ¸5‚ÁÝû˜bY„mnË©ÂIŒa‘$‘[1pÈL!¢ÒOfÚ6BÊ·-}þa·ÊÖž +"2t¿Ê…Ä0ÿW%{úñ|î„ßg7Bˆ¢ÄJÚB™%÷8ƒ¤®(6„t—1£«Y¨8Zíô0ÆWzÕ YèÕè™×œm�Ä‹BnB¨_.Cý͈ò÷vTH„$ß�½v<‘çZÖ�TyíÓa’�šgBRWre!±8›®é8!;fÈö 0¥ÎLjmŽ|y3‚¾_åQ…%¼2P“ ¹Zdp¹¶‰Eõu ^• ¾%J’Ò+”X„ÚHÝZMHLÆŽŽ¶Ö©Äpã%…ZpO®¬4‚//!vXxg™;Ø€ÓíÄ%7Á8{¡Òw=ù»׃lgÂDT˜¾ÿnß[ú€ ±\NÊŠfÆwÌ'ÅmDel„7L¤QÓJT +(Ä}ðî’ëFä¿Ñ;AËË@ÌP&Çé`(lçV]R$Ç9Џ +¹´1šó\:¡Å 4âS–!Ú'4�ŒwΆt  hè³8£çèæ|Oò}rýtHª¤r"�T7û*€€[q^¾¸јj•Xý&óFVZ»�düíLžjPÝ@d”AðoæšI02ÈРDz•)é§GˆE¦U˜ep±¡Ž�Û2…FÀ€;›r_ÌùŽR(�ÕÕñ-æIõ$ ˆ�ßhó —Ú„Û©šgñއ“Ý\6”Xr­ V�b体�Ò ¬bð y‹Â±:†Æ‚UÙŠ + £S�·“²ñ§0ƒ"iqúŸ*zœÂX§bêâ"ÂßV�B]Ñ{3äfõ›)À\×Ìä°EcH\;4£"?9É¿²'hv5�:¢£ZewGêEq¹aãÐÿ•�%êЭÚ4YPÊ\£¥¤9ï“F†Œb O +Á £â]¥¯�SöÊ\ÚiyŠÆ'”š†’±X‡ÁÂŽ&°ô³4©Ù)Øl¸üz7P`$›N¢%2r³ÍèPóÛ…]E¢¤f‰rôJrº ¶1 ìô9l°ãeˆI0ažcX5˜mËËN0ñ3�v3}©Ýפ3l`3]ÍU²†ä¹<]¥õDøÅW±¨% ºäÏuEq‹µèW�/§=ðjC£¶|p}IÉW0/dc€t—K ï×嘭�ùÆ/_ 7;�È_F×¥DÌ•>péÁ—qó+¶†M¼l�•!�t½ïE9‘ ,!)†Æ5æ¼–áTA÷Z�u,ç`�*ħt»NùMÞ:öˆSE®׉ÀÌG»w1MŸüwÎG6öá>m@дÐk+’3ˆƒýÕÿ[½><öï%È4þ]ü‘zO;Ì�’BÄѰÖíúP&¥O„ºp!3:^/�pxÈäÑ£~û²`Œ½kàõ‚ `W\ ¸ƒ½ àj¦>Þú)œJÁQ¨±2yž ‘D샪àÀÖjpû[]q&N!G^8æOëAPgæÍйFn‰êŒv»|IÒ ÿ'ò"„Ó¾µ)q zV?/¨)ºX4ã|6B¸G°÷ˆˆzA5,ìÕïPÛó?Ïa$åRIO E]9ô‡PxÐ;¡@ '\sy f‚>ÅÑ—±5……”�1ãÃG;PÇž€ N5ðH0?ž^I¢³\¹eŠdQ–T�ÅJñ˜˜&´’ÞJâô!¦Hµ`Y'/!ìÒ¨“CŸÍ P£JÜj¸nc*œ*Šoº¦ÑÉÿj¼YbdEI$ìÏìU™ivIe€Ç¨•«;Mµθ0·ÈeZˆ=#Ìq ¼Œtï³¢d¦èœÔ.ø»îDNÀwEQV43ÜfQÊyBÐKn†(†å˜XáŒ-l8± `u3ؾ¡‘jƒð«Gqq“§#ê[Ä‚Ì/øü—k௠vÉ£É. Ê•£ÇVj +´kÛC.I†–v¹ÅÓ±T!Û(ß9¢Wu"Šè%¾T¡¬U�š­4¡¥e}1Q�%e²ü/Ã1¢ô jOìJ5ˆœ1dƒsÂ(9.I¦I…nŒ¿'ÐD‘ÈFÚn€pùp€v¨‡¬>øÏ/£jž¾&¡L@T%,î‰î{�üg0‹s×’5(2Îa/Ã4Ý48bäá‡�Šc2k?¼¿ö7™’í TÁ�^:èA!VX®£+T¸.òyWâT ±‡ó 0¨xrôB�z(úÉjøû4JâÝ©�Qt¥E^ùfD»äê[M”`¿FTKˆM–`¢áI&]I8[]'!‚É3¢�`˜*.‡M¦Œ$ž¹ÂÑkƒ£ÁønàÚ°ö¹64qaÒÁ¡ç{º]ÔïI=œ:�çà=kïMïåüƒ–KeŠ ŒÉÙ“zxùÔ47·1Ÿ;nà9pòÉ{M­9¡Ëƒ3÷é™5™úSÃË=xàÃÔÆ.Pø +†»ch*—ÖýåÀnÑ—+±VÒ> +¤æÂ+NµSkÄ}áx¥î”ßžŠé�:ÐZL³“îs0=–úF}»g>ɃF|y"hfýLbé«)h¾âo% œìâ+õP\iáMϲ6ä9iOd>M;zíf¨Å«qi_¶ŽµX^=y¬ì4Èk1wÛ¬²Âì.m:3¢2u¬´çøyó‹B•€¿§ga�6µ_ÜX¼!óˆÙ—�­õs Nx%F‘à]ž›Áã¿ô£öâ“ýÍ”þï»'�Þ»ò| Ö¸fú¾×壽7¬î5ŸA<Ä­jªíÃà‰L·¡»�™Ú^�qL3l_ùG}c(ÜcšƒuEI;uz‚¤L^ÇS“‘²^©îõ„õÒÑž�xúøVjVÌ~ô‘´óN]d‹Åt=SÍ„MªÅ‰¯Ø.áýùñ·çq~À,îiQ·%Y;í¶±¨®~ÞBD^'Úul…Uܸê +Ë�¿J!N©¶zðÕÈýÄé`¨€wR<â ´ÄWéí§ :®™£yÒýûå o§;›Có‡uƒ'ÂÍ(@‹ÓÇ_ÇQæäSR榲ty=ñÜ—9QŒ5®b";Ì·à`TáÀ €€±`&¡Á@9 ÷fæbþŽÉŠúÆå(G9êûcî5ë¾²ñ» ‡ë›º˜m—Œiññ¿þ²í[[“Úæ³<ÚÔl‘õËóHxLl·3»Õkv×sݲek^Ûš.ëZ}×¥!]&÷5Iˆ�DB¡Pe`� !(�ߨÛ@C†@ €Âx@Ð@„a€ˆB0a€`€aÀ01„²´ø_Ï;h.ê�𠛊|jÞB¼ÿÄ(@…Ã#’Qç€`SBKLõ¼j´,1ZS"ÈH2RWÎK óÀRæ&¼QXp› ƒ<°Ê¦ÀŠ•=°ÉPijû•d Gj Z[Áí|~¼T`§ºŠ�3â’55[„˜áý‚©0êãˆÁ[¹ºtö¹ï¢*@ …”0dWÈdG!µ^ÊlßÍ ÷ÆÊhgv:¢µÙÓ`zNE“Msm€åÙÓÈ-HßAáãMT›àyaÑ�>ÐAÃûm$(�»Fá~½Èê«$×ÏÑûßXRw›{j}%‹«­RÖfwˆíW¾¡³]öIGƒ?)åÔu6ž‹Z¯EkÒÔé,gg�&,ô…-ðV;´Z\¸¢7O¯ªhã¥�Ë� ,6�lB±�È*­q¿÷’3§(�ÞL™c ØPðH~¹BrÉJ\îè.b–#˜(ÉuUgþ´e…#É8½ÆQW@X$ùÀ TýðÊK뱬Ëêâ+XúÀ•�à7é3ïø¼£ö:Źȗ,?äq߀ƋÿÕëȯ5ĺHÕx.ܾés´:!‰°¯T\ÀB‚Ò+¤r‹%ÂB,Bn%º‚­�xR³�—€K+­â(ºX"T!Ä!äe{”h +r!Z`éƒ<š¾½c_¾%�ÐÐo‘iÐNÚ¿º\ñJÓdÙ2ÉÕ_¬ +~@ñþ?ŒuóŸVÊ23¥Eï #;„ç£úeðŒ2RdÌ/õ¿ûÑõg-¨ø‚¤N}ü…rÁ2!® W9Ú_y{t-ÎáyS³`Ý}ïxïç¢w FïØÕ”Å¿·Ë’wîÚ‹…[ØftÖþlpïaV˜X +¢béÙ0^lídÿL”õ¢¤J¿¢8Ëò�€”õn›ú$ñì 1¾Z’\y^ÌfñωŒt*lW„>ÔJ\‘� ­ÿnSWŠEØN?ª©²$I±X³é‘]õƒ{šÔmOM$ñov‹ã½<—Oâ×Ï/dRx N#†‚ä +jÓ;’ØÄ+”\�\©ä‚D K.H ¹r�K.È~o`rAÅ5¼¡Zl‘>€ü ÅRi’  \ÉÐä‚\�0F޲ÉÙ¯¢¹üWJ2’ª˜A©/X‘4VßnT< X‡ã„7šõ�$Å¡ K+MI’3# +$ç ” ý­Øý`\«*é]\¤@†tÈnß±LƒÑ¡÷D‡ÉH5ÛGµúX+£ïbSÒÚ4f9”3‚„Rwwº>ô±<‹­ªÑ^æ÷å-ŽËí·è34 +Ö¶o 3333ó6ßkó>„×âZk­õ¶�àW!ougcbãÿ4ÕVŒ1)àz¥´C4Œñ„'¶u°32"À�°Òøïûƒ>Ф°Ë‘ˆ †½‘æyé¹] €� +ø +†È.J5Ž˜¹ÄûbŒç2>ûºùß��Vf–M‚ÅÌ!&œÃ�Ï£TèÆ4…ÎlÀ7ÛäWr(¿1¡9cüƒÆÄ°qÛ7 â7Ó:þÁ‰}¾u3$ˆEÍkè»ØGh6ß¾A�¾qëCÓ�¬oô]µF£ap@ú$�iÔb§ÿC´}3ê#îR£7!ià ‘]Ë ÔGÞÈ¡T¨ +.2DdX&™ H§hšô‘®4M¡�­m©­Úvm§UÕµ­ë¶më¶´­hÛSÖóëºþ}àÅmÛ·mš¶m»¶mÛ¶\þß¶m¡¶i ôû¾m;ÔmûM§2VºòÒ!ª˜`IšÙ¤˜S’C˜`+·ÈA�—$YZ¦Up’1fÐ�‚äÈÏ‹ aýºm Œb¨z,M@#p@â@(�FÅRÀ­{€…"(2Bv\Lˆ1JE�` ˜A¿ËàÐE ·@ÌëE‘>NöEöâŒ"»h]«m6£=¼hºS†÷¢Ž>Ù¨Ov¡Ð?ê[ +²Ö­•€ÌàëZ¾[„‡}>›µE‘yÔ¯EÇ8dà|Ü4Ò•†I8�s�»;�硵 ×nJÕÓþîÆí ¦ò‰:âA5WER)Î%¢jœqêÿ¡»[1ŸÆ­-©‚,Ñ×c¼³eÆòó¦q�)SÝ�Ml|Y¶—¢nãìU^gãKÀ.6¡¾Ò‹¼·qØÓ¯!M¸Óºâs· ÑšOã÷Æ! ؉mLVáU€›W eÜ4–xOIËüõŒi’ý¶$�Ç-�Ç-¸\ÕÂMP;‰¥Ûl�Æ›îƒÔL5n‹|bajàUã+î¯:9�ŸIOýï­Ziœ Â¥]úZ:-cOUküc±qˆ(šÖõªª­í°¹Ú$㟓°‡NµC +tØŒ¯°QZ(éZ2^þ? mÇø›\ÚéôÅìÜO{Zi 'µ/¾ºž(Îo峤¾§Ôªï[¼ó'ìP‹_&·ø¦ÈÈÅ]jH©GëÚ}Ú‰zšĒ¹8'3vS—U$ò.씟(‹ 4s‹72·Ð?bl€oq®_í¿‹ïðFôãhù¾ Xáè8¦• it�Î ö—3ÖbÕYÀ™Uweü¼ü<ÿGùXÃLâ­Éxº¤[ù'BRüá·Vaã(˜=ƒ^ž +×O�@Ù(رŠ|ñ_y§Ä€ñŸû~!ÞgãM�™MÈ&Âãûr9¨»€ÛáciãkÏV„lÓœ)mC$1?ÕÕìÉDoõ¯DãÖ»¢c�9;Ê„I4;j×,�"Tû<ÌXÒ˜]û•Ñ9íKÄijÿë8öcËŽwƒ™ BÙ—�ì�ì²K0p96„±/Ú²Q±c¯ l»zykP¶ÅôÎ (>DõÜ‹ Á¬©¥¸ì�93ß Co²óøR�]¶Šï4å!Ї3ÚÌv팦7Fvÿ±êsL±/#�3ÕØS ÐJ¦Ø‘¥¦ GX�¡ÇŽlDöÙe-Ù1áVö¿F Ûü›cÙqN¨ˆ²WuB)Îco=o¨ K¨- Ž@Æ +õ=®WŒxNZn#N"F_ŽlЇÀé)p©“6:Q:U‚J„bŒ¨ÚÃuœ™¼+6D„ÖœÐa­%ðÙzÑèú¸IBÔ!ÐöCaÆ2�íçUŠã”kʉe’Q�(:~´”æ ?àÄ<•9ê¡ð�2Ûh¤pˆ­2Hxb‰duZÏ^�ÈNtÝm„ì{늼µŸ 7¶ˆs.ćï‚Ü“Ð74 ‚ÝosÏ%1‘él:…½ëá’ûŠ˜¼¬SÃC¾J{|@?ÊPA~Dâ»;Íû0ñÁ·Vs>çÎsüSA¦kXÐòì�³t�­;™ +¾Àé²F÷B½�ŽU/…Ž“tæÖ?{*êYIúk:’€Ê$^l+nÒ×|…|sòƒ™O¥Z�ë„Æ)DMÄ<%¹ÕïIN +߀¡!vc{?ìm°´ÿ5îrç’1îl{Q+Gt #º²Àþã-шoŸ!’p²¢ø.._ ŸÂŠ{w³àÑÈ¡ ´*ñåR9LU˜½Ã…¢Üdþ~�T Çu]�§¢Å€ë4°:ôÿ"!v:³ÚEUÚדõ<›‡XÏ¥¼·¨cmƒ=Ý�.S4â2J³JÝXÌÜt˜£9P¸û)ÅOKôa Mo +ÈR è}WSÊP%Ÿ ’Ÿfùä/3,�eUVÄU<è€z¯wÃ;¯î}À=Ëh²BlkÙ(ƈî\íÆÞÑäÎyK8í#¹Ä�·iãVгòÖsÎ޶U `S[OÍÕG%\\¬Tœ?¶\T rYBºuap©=Ð~0~‹“œ/‘+CÒü¨·&ͯ8Ìa æÝ$Ï„ûX)Ýv…-£ÏáWJ&¼þéÚ/þü2LqÕÙØüÕ¢ÚXjK¯/>䷖МòQ">BƒBD™ËõL”Ø&:Oñöé·ƒï¸üMYnðV8zÖ["Æð>ÂwlVHoã:è¶Ã›IϸÞ˜Á²ÂdEJ_¯ mô ªÄ…ZZÌ—IkPO6º©2Ki˜Ý‹F{pûˆðp¢WåY§2��Ú¢þº&›L" q"\x 4mæ $ðR¤ÐSŠIr9ÉÙ×M–vÛlÂÁexœ7WÐ/³Q°×Å¡nÖãlâŠä™|Ñ;áΫ{«Ž„%Dõd¬r€iOðÿŒêîVø Yâj¤Ñ •Š®`�l[ryvêÃt” ü•˜9âè�B¼ý½øþã>à0à-]ì#¨¥¤„s ÝÚQ_Êçð²¯"n‹T{î¡.#«dδˆÏ6’~Äá÷ó�ži°ð ‚õ«Ú{‚QI‰wÊš +BH�K–­�£†òžþÆ�2”kÂðrÖI !ÐÍ•—3éÜeÿÛEiÄ��§*e*|îŽÃ9†#¡×$+@I6–Zü9 ´RÓ`y~Ë£C*6èp6-Ï�ÔCÔ%åÙáO)ôS+�w3…'CÒŒF¯c.ž�ܪZÝ)˜›V[Ž•‰^æoj—•©8†„ÕzÎîà_oJu>ФÜß$.7ó¼‰Y0ÅÍôO ¾JâH»LÕy¸Ä‰2O†¼$×NAþU¸Eí™ãëæs9>bEå�!&Xç6‰Ò›ùø埓¸�T_nð1ªW¢Ý +¸ûÆê; Õ”ì*í—ï½`ÍP£‡e‚ŠÄ£jšbê°O­ô‰ˆç(ÉÝH[�î¹/âtV%ôå9¹¨‡•QÒ•§‘ÝcY^,:’äT¸çÁÿOD'Z” gÙ"– \„°"QÖK·iW‹uzÐ'ÎEÿ?àÓþêW�x‰ì-eÕ/¤††:OÞ§÷nj#5š:ô·ûQ©iTu_ °†4’>ÚÜ\Ïú÷®OI¼"�Ý·YKOÎyDöu ø»‰Ð„ù&03�ój@Â5ˆ"OÕ;^Qf­ßJH·‘Ò”k¬ç342Ñ|=_`4gþ2ü™ƒÏ/©Äeä¥ÑaKsìœlÁ0õ_p.‚ü<ù×›�£HÖÏ÷RB‚™`ìF>éÆPhw75¸±=ø’?+U×ïu¤l±™p‹’Fý¢p:& ++qtxóÛµdE¥Ç¡aªªçÛ)gn$Åêo3¯!£mÿÚõÙ‘uó +/f„Ì~õ5÷¬ƪÏuÅ x�鎭&ÏWA'@?] Qq2ñõ[–Ï$J½kø +BùN?hy|é:ÓR!yd‹GÚ aÊšãa@àHöu¸,XÝnsØ·ÒmCGE×¥¹_Ò÷©Òg3èT +ˆ…kÚƒÂù¡§1ˆæ4|«ÿ&m³±l»:çÒµE� +Rïj·4Á»Ș•3 àµÌ±·:&Ä2Á¬Ë9ýUœf° +B&M(bF{{ÇR ‡Âú³>²~�Š*\“VYÕúÐáå r�#ºqD®‚›b0"]§s Äoª÷d½EäSí\Q2ävãQ´Z–@sŽÜdÏ@ËÓÊ x½÷åïç˧£"¤÷”jsb™ƒƒçl™f•¯ÃI¯ÁÄ}ࢭè²{{#žëgvHlB™–’Y×¶V�—°æ%Þú'Åò§&Ç­nVÇùÔ¦¦h \fo Éd[*Q¬¡K633ïØ­ÎÍg +4vPâC ^=Wß~#·R=ù¤0;xn°N‡ƒKh�oS®”i¼ +>‘ùd©âÐd•þ'd®ˆ÷ÂÆbbù‘¬£2v[¤ÿ£¹¸â›[ÊÃ‘× fI=ž03’÷wܪÏl2À ¹Kus‹6â +“ º¹c£¥i‘oÔª¥ÃÈŸù“‚tFç•¿ÐÀdÊò¼ÓóvRVîþlÃû�$4â~2j��q’¥ñ9âôRKi©ƒ•3 s/¥Å>ÿ爲)ƒq+”¹i‰M‘,Và2ÊÁœÒL÷ª[Ey*F«™b#¶øK5“æGûÕ�åÖûâaæ.Sæ¦ ÿÖ™G¹¶X0pÂeõ裒¶‰/¿M¥An}_Ç·zgµ¥ÜÙô»¿ÌŽmA•èsmØXU‹@¹³\Üì¶5mˆî£AÉ”‚ø+([þ ëƒL“èx´; [Xj„B¶8­9 –@`Œ¾¹Â^Ã? -L_M †âÜf®VuÊd^WȲmî‹g݃å9’œÉ…¢6"þǵþö1qrŒDdÚZ #>™R uN)!bEBv~,à‡¸¥Àëaxñ—½†x‡ +¶žœö!œëŠoªŒ€ͦ6}�=UXÆ´îQ•‚BRªù6°�•ûÔÀB=׆zÐCR¨vPŠ?�Û^À›9¥ÌÜ|¾˜~,il—Žˆvà?ß`¸äô}#ÉònI¾XnN”h¨ïŒjA¢Ò‰� Ï,ýÆÖf�×òÉÿúÛ{ò²õ}g]áIµ"€§ÂéiXL_g, +T€ÈµQG˜jI%CÅ|ê# )äÈòx�©Á@ªAá;1byN0�9›’k.b9ç‘ÌQä’qÚă;Ú0wG¡œ‘A$…¬Ã {úNßéLU¨é‡­ïYlÆn—Â�ù�4rÎY<Ðß=‚űⲧ6°ä±Ð(iˆ*#�á{åÜ_¾è!J,ˆÿd" ò{DØî ÷¯U/œ. +Fä5¿s¡Îpnw†#Â8=X� ø{ fÊ�5!s™Gÿ©¬È÷JWÓýj‡CÀǸެéH9”E!EÛòÚF™‡²™¶•Cë‚)!• 2>â2|# +àGBP~RŒ ‘&„¯1í¬Ô˜†á˜‡´Ñ—€ÇÞ8âA²‡«¥A^};É8ÝŒ™W”=‹B Šizö%°FŽ Öúûƒ‚Ù¤8I1,WEÙÜPì9(DŸmÎx¸œ[D ¿âåÑEA²%"BÅ#nňƹdƒ¹k¡ŸGWϰ/ÅrDbhöµ×u.�>fhÚDvõHpÇzÇ9î½ï¨@ßC¹ÈÆ@™²ˆÈÎ&S£38þ·ÒrýQ°‚Äls.%�}tJÏå³n»l-O6“†}- ¢^Â`ð‚øý[ÉP<ý˜gb ¡xwÉ ,9Å0Ÿ%CÌ`òB-‰XõÑüZ‚Ý{^H:"ï +Xw3·P6Ë“F1t·eŽH¡ƒCY.œ�çtÌpSßÔÌ"wî%RŽ�#F¸èK¯7g +?‹d )Í’\‘!ô!€ªÀ]ëè2F¡òÀ§P“]22Khü¡ó&=™Œê\ØÛ-º�CAŠ’7oUŸJ¼˜HpÑÄ Ná_([áQÅèóù Ùæ hçt Öò Å,™5ì˜Í©ïíÎqŽ$à?ï5›ƒh\À�ÊØ´O]€‘,Ügk “¢!¬‡Ï° ¯ÇÔ!1¤«á'Ž~ÄE\Ô=åó…-â‹R„LFÓ“Î娖÷‘oƒp2–˜§Ùßãû(ŠZÓ) +7¤½ �¦%2»‘»ƒO×– U+¦EÔ«nD3a/ÂAªlm*Š äÁn+‘h9/ó³]4Ç—!ÝÃÌ,ã¿;ækˆõ 4õF§ÁüÍ#NØ š2UØ…ùœ6¹œ¥Ð½¯Ûí¥P“ðØØ‰$˜]/—‚!·Ð„Aè2=Ù Íö¢pþuæÒ¬W$¾«­-i.ªJIž2?'d–“KÇâá'+z8)Í"GzmÃ�Z$5‚ÉÂh¾û‰iAf¡á˜|+ÍcÝ«úDz.,Ÿéç æcFÔl#’U†¨ò�gg°‚K„yÏžÌð‘™¬Úøf†“ʘêáASçÖ»ŠúK0 ù@¤qà H6Ç@ˆ¾éØ_Ýùô©˜"Ë¡ŒQ÷CLš�l2=íËðÛIòG!ý͹™„[¤ÓOt\íE2$ q“30¢,Ã÷…>ûKTé¾[ÈJ Á¯µTœÊ]þSdxŸÈèúÃÝUù'çJªàÏCbô>?‡Žò¹‹f¿S´çbEýAâ>Ac¦0r|Ja Ì“0ø\š²4cÏ'ù=2XÏúÞù8iO‘hÅ:ÃõÔ)²%I÷4€—#¹ÀA�ƒJ»ÌTXÎf“@ ìƒNŸèéB²|‚ì!q`ó)|ÅðÅÉ òù7†ÄçK¢ ŸÛø«»ÞSµVkÖA‘øÜªOR>2l“ì²sŸy÷ùòx’�ºÂøÙ 6Øç¹i·s³>¹�æg7ô™~$D ç æs fÅ”«ù+Ý*—K|›F¦‚Ïš”ƒ•ÌIþÀ EÕ[ER=Ÿz¤dk£ }J ™ÆÃ�ùÜKÏ÷óhú–ŠaœOm¾aNZùÔÑŠZÓŸ=BX&Ö{êˆEvP÷ܱ”šèõ$5›ÔY|LO~‹ú=Ss59Ýðçù°ä óÇžŸL{ÿO{&ŽJÈžß÷œˆl=­áÎtõ\žœ6ó±òÙÅ#Cßó÷�Ôÿ�sÓž66k²%¹ë@ˆ¦°œ›6šLܳ�fIÞ3ˆF%‹O•+YAFGò™C^éÀ�$žùŽîÙGê&�=� MÒ]Û~:f¢�OfŒä#fðyŽÐó©3 ²O:!]:?AÍbúÄá2îš2²ó‰»2¨»=ã“ÓVÖãrv}žÕ¬ñéûš`í ‹>7Êòï\tŸ±N/8i¾Ù§AðcòžTåò�ßU*[R>Ølݰ(6žÝé7V-¬y,`hµ@gmï#Ñ—2OS!þo´¸úû°_g¥Ù¨[p¥X‰ä�®=¥%¼‹ñ˜'�­‘®5¤t<'”ßÑŠCE‹·0²x$f¸­«ùƒµ%éîÉògƒ"9ùÙ¿0¾¬,”I�yž_aŽí=#+Ü3N%/MÁÉA‰³âFâøb û†Žº‹s…[#Þ`;Y‘K`Ü ?ðÞÐo@C,@¯7”•bK@ ÷Ìjò ÐM$ëí€3žÉ˧ƒm¸Ô³Ø�«gEQŽ=€Î§XIòíp–‰íŸ'Š©9&ý”3ciþ>Ö¸u†K]t [Cp)gƒÑú&F\º ϧÜf™éáI:ئP´AG—¼„¹@#¶{äþÀèH£ÊzØ3Ô̵‘‡mÛDÞ˜ÿ"Ѭ«(ÒMó¡Ë˜HÈš£6RôšKßð`䌚ڰ™?QŸ$÷¤É;&h!Gs…*ªö“ª`�–ÂÐoGfI¹ +Ü1Ymã…|É‘h‚%81Y\3øùO²6šÎ»¦s´ÙÍÁ…ÂçÏ(ú†D6 6Ô¢­«È‘øú¾ɵß ÎbnLŒ”©IT`/´œ±c˜¨Ç]yöêbþ‹’â¢×B•ª“µ’ í#¡Á”–â-agnb^¿òC6îÕöY©O³¿tJ’)w¨S�ÊaÒ'ž®žX5¥žE6Þ¸ÕªvÆ ‰—(yNGÕMÕÿJ�&–ãìA�ÿaáÏ�Ùö }Žn©„d+fjüi‹ŒóOd†ɶDúÄþÖ­œ_†-*Îk m0‡œŽ„ÄÇ£³VŽÆ ÌåÍ2DÛ̉|X——(4n=z‡1´´ƒŸ,MeÎFKöÞê0˜*»×�QyÇ÷ –mv”úê0ßžÑÆ˜„…+Ô§…ª‡ïé’Ê‹ôã›QZ"&žû–÷�˜(dVÍ0K>*÷À·†$‘ÕûS�÷P?G­-}©»Çp"b|8¹ ã¾ Š8©²G"Ü�‹ž¨fŒ—hØÃa3iN"u¡ŠÛÑÁåSä±.Ý·õÀÃ?¢dŒ§ ¢QB¬cŠ`³ðcgDƒ*àtÇ$‡¡X^ÂÉf Qe^ÿ‡�T/2Ÿ÷ta/¤ &{3] î÷o¥ x}á‘>NË—BG–.ÒSZO̵ã�›E-„æp@+y…/vÓÝVj¥"]ºÍUë�—Œ�õø‚á5NFªs±À YÚ¼îÓ¿Å­¿ÌHó?ôÛ1?„à‰0oO�·¢G(tF¢€îä0©�Aæ®H +µ¦’ æ8�ð`äÎWÊE8~4O(�Q~â3×<ÉÓä�ð¢x«�9”. À'Fs;¾ýIÃà +/Z—º½Ñ}&i§`ñ}äBw¤3Y!uÌ?ÄZ“­µ�±O¢q9Òо#4Éââ¦.äpBähÌ· +‘$' –¼l�Å"mek²¢Æ>. }1Î ÑKT³Ý*.Õ‚¡¦p‘óoè³9´ [GÏ�š˜åÛLþ>‰1 +ƒÈç�êd#)óæ +ŠÌ lË8ôÈÔdÁšÞÝÉf/NªÚ6O³ó&ƒ$yùL÷VÈ$Á$Ëæ3¾Iú5’B…|ñrÕjâÊx?ÌØ8em?[ï EBãhÃ-€FéŒ,°Y`LÃe€üˆAI4>XÞˆg„wl¬¡E—u;n=РʼnüB7"3ä·íüé$ÂFäR.~z¿‡:Íyeú€K³®dâÐ�ÁÉ,u{G”�8w1œÈ;¨Ëç!6†�?C9HéFQ[ì"\Þ÷ç?=R�/¤È¿=™¢DÇŽÄ¢OBOâÎÔð‹[o nI! žKaT/\Y çœN¸FªpDÂÞÓ2ø¾å³{ļ€Ò¯0Ï»¸@”t‡-Œâ§Á Ö¦QvžÝx!2Š¿Ä¯ é"ˆƒìÄQ]º6÷ðw'~�sLŽgêu@ŒØ}fyÈW�GìZîƒ'‡xø2#µÀ{ÕŠç ”è âm”ÂvñCBsCuPçeB‚0 ŒdŠÊ~°Ò Áƒôsa<íFí§ý´˜orPÇr³ë-x¯ˆ §*çqÆ:"05«;ŽÎN ­£§©~°µ +Jÿ™åA&PA1õV“ȉ‹Žjwï öסÊñE.]dí8%Z?JÎÍC_q½ÂËüö2÷ÒÝ‚[s~Sâv +ÑSѰ>á=ç …îœ÷ØEg`Ù<^|6@CRæø¤Nf:¶ã}Àæ6;¹Q„‚ïüP$Ó°¼Ä±…: 5÷)°Ûk: ] riåH8”w—üå› -LК«Ôw1Xâ€s»ëÖÙF–²@À%#™ žƒ/ËÒ—2P¾Ö³T52TÒÊä9ÆÙV$‹L¶ +ÁBù«Ÿ3¿TdŸ—ر?ç��ªEUz|½ú';u0oozŽ1õz†©bÔºïØB¶G ø#é†^Np@Ó‰uõˆæ 9–ß¼½Æ?vF<ø ¹[ãJ�·±¢µ¥&¯ŸTé˜á×@ +ùHÿh§|cƒŽ-UƒžÝY38ÿƒå|o~ÙHÎá�;}ýM}<ÛÂ>­}@z&ŠŠ�ì$ç»eç›ÜµcÚ1Êb4 +ôoöÅÃ�T†«;;’³ÑçÁkèÝ +ÛòPoûI1ËX¤^ÆÙgT-ðüÑ3o;gí°W·În7¹¶_Ž'ý> á˜v�PÕð, FÌ:.67FÆl�»º›˜YŽèVv1ù(æQ,]£ÒŠåLðš…ÁmêG×+Þ7냅÷EW–A ôÉ…Aè\UâÁ‚ Tgc Ã\‰'ggÙÂËÝ«§Òª”¹Oµã!2’’iÞÐ0 €«1³ Õ€’m¦^îœE È´øëùõëÙßøò¾C¯¡+?þÌÙi#vkµšÚ_oPYÔ9“- ¸gj¾>g~ói ”£íh3P6G汆\c6od“éÉ™Žm3d'"²U8@`Î_øŸ7þç‰õ!þ~ÿ?_¾äyžçùÏÿyÀå̤Rfæ{o›x~¿gfÄ'6ª¨>§�Œl~¿JƶíÌîf�ÌÌÌkn¿\þ߉ÍÇr/Ÿrúårùy½ä—Ëåg—ËiP>œÀzùï¿ÝN~uc3ûïþwfwww¾;»ûíwwwwww¾aw÷;ù?ÿÿºã.ž‘¬AcYap'Å +ƒ’9\ž¾³3ãf…¡L(€Žz’ìtšå|õü�žØ¯ [æÅáé1öc6oô–Ûøš#SS?D;OìW ý�Ï}wÈÐXÙ8ùéU,™HD½�ÇM¡³Ä +ƒ$Wuz�î~Æ _C²Nu|³¹ ³–ÌÍ0{¹êCÓ”tJI¤QE<’¹Aô ¢Aúq”zRªÏ±ññk3Äc7<¬œ0˜±‚€uÍÖÈ6*VÃ:9[RaÀ³bµ²ðÈ=;Þ�Tìe¸8v�ñp<Ê$‹LÉ›VäLYa@McÙ9+ ŽŠ•›’Á¢°Æ‰t$tÎ\ˆxÙ:ùãl* €"ªQÔÒD%ÖÖèá¡î¦‚àœ3›!´A§ ‡ì^,¯Tу_ljŠzRÂ1Éøs«ºKm7„&Ñ‘4<7|þ„¦zBä–ì™òT°Ç©õIJ h\´Þ-g%—Dÿ¬º1óªQ:ya0#B|iPÍIùNæ8ÈBCruˆ¶›3Ée¬É#šÖyEßÑìdŒÝY¾Ç+ ¡#÷Ü’lÊæs4HžS_a°"ª pkg“e#Ö!Êo”É6ñ­ðˆŽ™©È«"r¾Q§òH•�ö©00ž, 9’–[DDΧ4Äá +‡ÈæŠe ѧ ð£? ”¥D�›W<õ.ƒ +@@îd6"ÖÕul0wƒY—…Å`¶£p­fVŠ;Š£mˆ¹wW¢RÜPœ):ˆUVA?ŠÅ`?׆ßÝŘ…€:X‘œâ*8P˜�2·'vç—c·¬§mm.…É)ÄPP|Ì\¢p)̘{Šòb§8ûp�˜ÙP$ÜÀÑ)dNJ÷ÈÎUÙö¶vµÅ + v9b!‡ÍÖ¿¸UeB@™È¼ê4½a5Š9™PµÈ±ÕÊ7ªRìþŽœ•f¿²°V«ºÕi„Ìé‘ú� ‰”ø„'SýàëjÏ‹d­Z�b¤Iu,ÓðˆR½Ž±ŠlxŒ-™£OŒ6VcwµiIQ§ˆ=š…W4&aÕF=y¥â¹Š+%òî³]»©ÿ^H4S[Ëó3mbÊ…t›‘ÒxüË•MYêÌÒÝŒµÓÜâ:“)K”²Õ…6³Có1ko¢3£÷#b3sºÊ´2U<™šªRëF׊"2t§CÖ:½~¦YϤɛ*V‘‰ôŽÆÈ6”^~¦…7>“8cE9ZÕ‰Ím4Ö�4bwÆÓn¬•|B·H#iGÕ ò˜ªUT>¶uk…Á0ÒÉUx{Ó»AFRf޳ŸVu÷ß+6·’ªgÔJKéϣ2b‘>nónw¬ DƒCt:3{Õ“£&ŬçÌÕ1FDeƒ†XE9iÙv‘01*û¥H‹ìe¼ŠVœ(ò™LT¦SN̬¨HÜhVÖWFÂ<¤_5uD:‹¼æ6ùŠæ\5»º�Î�¼H¼HpPbæE‚5Ò��! ¾>ÌÌÈ gææ²•jBs@eJ˜—dœº{I¸&6®ýnކ]×9Q~ô£‡EcÄZD7šòK¢ê£8ø]Óãǧ±š«d›3+±ÕÑU­fÁÑ,W‰®2[¾*³Ë7eRFR®rª$®JÂJB •ÎŒiYŽ©qvÅU“ìJåêÙ€l4U—«Z²™íx2¬+£ÍnŽz1$Ê.Û®m{¨E‘•}˘Úf]®JBj%QcæD5WÖª‹(UÇ®®Ta`u%‚+‰’ø‡€Ò8€†2Í6ü.'7›Ï4X4\”Ä`³"ÓX‘©&Q®˜:™M¢LD&AdG&!Ìbªj("a4˜ `_AÃÅ@Sô¹€Æf¸Í�Â̽Q˜ýfû ‚@np@f�sʆ#ÒÒQز¸.[kÛºžk[·¤B™1sæŒ{ }%G!&GA‘£˜£Š#IrFH1äQY�,ÅL@Q9.Ijm0�b§é(èòHAtE£j¸¶Ï\G1¸‰ÆÑQ”ªŽ¢êhEæˆ�¹Ì�,lTÇyzBˆB|ÜÆv<_§h¨Ùg)T$ @�á@,"K¤"1ÊXìyZ>0BPJŸ +fŠ™1hÀ®Õn�1û½iJn{'TV·­÷ËæÆ@R²\©�d7^JQA�ÈgEÍ¢.¦)mdÔTMÄydEÑ +Q£óªN̽MåcÍ�·ôp�‰ž¦¯"µÆ?ìŒrÁQyäeà×£�Å¡€i¨Üïi5x/WºØd�•vL'šìZ6òijó\�èF;N<àŠÕ,¢¢<&è�㸠ò �ƒ9 �„—c,¨ÛÄ\wÅVy†²$8)¸Q³2‰7¾ÚòþC¥fì,]*µÉk­"!T +ªäMƒ +ÚV2ñWÁ$b8Í5ü . 9;�dØ�.�qgi¥Èݱ=åàF½lQ—Xƒþ¤.ƒ§ôAd Ûlôˆ~4{v-b›D7Ú¬ ?“+�¤¶­Ô¾}›‰±ËÞ$×Uoõû4 º%�Z’PÒ¼#�÷ �X%½ D¼9| åïØM"¹2·©®¢‡>¸…õOŠ•¶fœÑ|¼rOÒ;,pX�Èœl +Ì£Dxƒ…�2¶á5èûQ‚`†�#…q—‘'ÛØ´#pâÓ7-p1ZJbwœ-^È/ âHð>Ý +=ÝEº��ò²m ˜t\Ð4s`¨6¿“C„…Ö%œµÔ‰!²Á#cÁBbØzŸy6ó&B·®è[ mW€»¨â륻 +.q™/A�ÓfŠôKÖu"É'kš¿g`:îš3�Ü[ÿ¥ ¢T›ÍÌj ÁYÇd”Î_R^Y +BöE ›jÏ:`/±ZT]…À¸¢©É_T¨�öc,ìw 6$€ä,ºH.Æ(!2Áµ líM²°màdΨ«ØH“;m¬][Z‹Ç÷q <ÈºŽŽçUâÛ¸<Õ[kó¢è½Æ h +Àk˘ÃÏê…? 妅Ц—î:B' TsÂÐòJHg´`„Œ†Ô}wä–ƒ +Xx˜®çì2Ì÷/Soˆcº1f_´òy‰)�q¢QÞ-¨þ�¦²éá }sC¦ +ˆŠ²ÉÃÕ·T [W}h„#¿q¹îÖÝDȈ¹DRÀà#C8ZG}Fv€“q³LxÜj胢‘Í*H¾° +ê Ë›Î8â²´BŒ±S­¬\j¡# )(ËpÚ0·ë—Úi4yIÜ+œ»Vñ6•n䚯è æb¥\þ�ZüíÜ^—#VDëÎ, D§±0ÏHe/aŽŸ³ü +`FÜzÎv;34c� å‰Ä®„n쯩`i§�WÁ¨ˆ°\Âú?ÓTUŒàƒŽÚÚh I,CžL�O£“•� ‰m 5M…(âÁñéÞ´éÊÍ´Ññ» ^öHFÆÈ[‰¯†È­¢®©Ý×gŸ‡níÅӎص¤�ò9Òóâ‡n½ ¨ d˜•Æ(bÖ!×xµútطىAЀª5íOÑíÏüμµ-–BEJö¸^˜V >ÿ®£sÚ™lüN£9=—�ç/ÓïiÏÏÀÖB‚¢_*w@vªHg±"ܽð£ÙY,˜*sä…8Þ_ë²€Uª:]ÌwP¢gÇ?ònÎUì1ðÅ—³|PøÊ$—�‹ïµ°Ì(oòS4'&;åËëzá›�ªc¾’�ÔLM‹ƒŒXLv½{PaÖkxMOS0Qn‰g²q¤/4nùÒÔô‚×ÅsTPç°jéÂàrEb }I(%›|Àeš>&«j‡Tù*ÅaíÛe‹¤€óÔfºÐEú a²6;i~H¤tÜ x—FoçR&n¤ Ù’�Iä3š‰Tä óûjÐä°ÏÒ IJ ö(ÛŽ†=ågã“F³„ÞrpÖkÐY�¸M챚äż ZÌÀHÝ?„/ó¥ÚR›ó``’ª`¹Â}’õêPï3á𡤞Q^'Êšš¹BéPäceMÇÈÔgåÊT|10oÝÔœìq €;‘)JòjËd¨\ü¢4ùU¥2«ÿ‰ì:]l±Z~Ò´ÿdò~Ž©7LË#|Ê KELÉoh×ɱM22£ÓiÃ2"`¾ÀX[{.Àº.ðJMƒë‡QR4æH/.y¡JX£mb†…¢(P¿wE�¦Ð²•-IA§³½fÕš+YгÑ8¹yDLÕ�všk©t%S¢Ï}îò° 6x–.|k~d•€A;ƒÙZÁ›K\5´]F¤>?óæ' ÂIÔðŸ§*�ÚL4›È AÝ|‚e¤45³ã=¯JœU`9b¡Aæ�ÙiDÆWýÛcáÿ,•ÕÍé°Ò*íhžLÒ¯qâZCcG��E»ºä¤z*‘sU¬h5߆ç÷oàôßLa8‹œ#mŠ^ dÓãêú<@EÁ>Ã�dê¢G›Ó^JdH%¶£ÙÁjqÚ§ðW][sÛ¸¨Y ä@YÛ€~#ê$"­e±’ÕZAØÂø½Ý›–*§„~ˆ·X»�‚UÒ�FÉ`Úh•˜¡ŸëâB»>ЈT”5¿Š¼’UÛT+,´êxyÑGD¼#¥mc•"°(ƒŒß”JËîðèhÓƒ}2”kž¿ÊŸdk° ¼ü› µ€P˜ý-'¤©ØøBtõ)l�—¦h*åA”¬!xxÝNa~2}¹I­:ŠWµ‚íY¿ôéëOX�«»p²Ïÿµ7òܲN÷WÎ/Žš0UC´PùRn=䓃—oeh²6 +>*—wÂ…FÝtA$G&t¡e09×ýkTO™f…3)å`˜r#ä¹Qƒ F¡jK]�ó§ÁÓã2›&öâ!XMmÂôLä²6ŠtX‰ÔÉ/¸’G­ÝK—½=ypÆžŽž$’ù·"¶è�d¦¿¶Ì—¹CeE·‡Ê Ùý. }Óî$y€«ÈÒTVø¨–%þ€È¶íÌ炦psÝ]âúÃoEØ +m)>.€ø^ Y™”`ˆ™Á¤•�£\N‰/Ihþ»7šüè=WRVÈ"¢°43ƒE¢6meo#Zè!UÏ– ø 潟„£æ|…ç¤À‡ Æ< øú ®�2Ù<—9d$@"ÁýP°2I¸åå|àd…ÙAº9�p‘c7ÌÓ±7«B€Èxt^Ä@f¾õfÙôP�íí£ÝBž +êEžK™O$_ö$âz�ÿÙù½áÖ'Q„ lg͇€’Ü—=¿;LDÚbÉúoH�XkGBì�™¸4$ª©°ÌÄÃÑÍ‚o.?±ÿ§3K¾])>@x³ãC"X-(&¬[Xî0¨  ˆT¹¥Dx +R´y¸eû@/(ÄÓµzÍ“Ó^;% ÿ¿cEbðþ•š5LF%ƒÔù +ªÇd&ê ,_›œ)rFZÕ¯gž›G�L3 +·K@ ægPæ‚(x˽ûŸÜX +WŠæ.g®”ÎÁ6ÊkáÛ6Ö&!�6Ë™·”02ª¬» ùŠ`¨Âéª|éç4xs1Ý©0æÙ³27÷“«ê-_öÓHwNZÖÜÓÛ‹ýGã.Š ! g@Vå�Õ …“XņG +&Y àÂuÓ{¢ìÕ"ø3‘ܬ2„ùXäVÄ£³ŽžÆƒŸ¾Õò¨­*Ô\ƒ#í�>GÛyaìyσ5«õÏhÜ2UÕÆ1ÊöQË,Ó·$%G¨.†+ŸKòï>•æƒMá'º)æçëÀ)è¡ì¨ûé’²_îãFÂ5µä{é³ ß]1Í2dåË6®¿/uägrdƒþ{qÌPš-lîêäÑ€x¦~áàˆë<ª xSìa•ÜmÇ+³Z—x®Ä©Šu„ ›™[z¥ß#p”& øÂäóIïHí1BèryœñÞïÕ[•þê%£R€¨dŸÚ¶* ]TºûÃ_ç�§;ìò À”(í˜H7TÆ#壣ÈlTi…2Xqhû?æþ<²ÑQÓBˆS–±Ìxø;ü]Xöd”_ŠþŠ @·"xŸ/Oq]0i°L+°�?˜j(ëmË +Î᜻9x)P¦E†°¸ñåËX1vÐí¸^;sÛ>÷û@‘’¼!è¸ ù˜P“ +³lý–¬È 1��äY6¦E‰Øº¶FšÏV?l�øî¦iž^bæ†Øämjñ÷Eèl>çÒBzIÔmyîz¾ÅF¦Ä¤8êÊ+§xhÏF•Oêtž�F é¨}ÑËÀÓÝ:ƈ‚ãŸ>-G©óQä#Ð"xIâ©ê¯ö(E¦Ï°«a_ÙÙFð»lÐןéjô´`åg([A¦œÌ`¨æjT¾—ëƒP¡�´Érœ†"X<‘#`î‘/¼·0ÉŒ•F(NO†Àåñ9Od”Eº)>€Yj�Z~ÝÍb(Æì¾+òªÍg põ**VwªÌ�LԚɘ‘zÍ�c,4Ò m·Ë×À#ëL›ž'{¡v„�|I‚tÎQ�”Þò_3Öqˆ¼tR”Ò û_w¹}N+‡y°p:)öA�Ó1ðä,ígãšë =Û¾-ë§“š¤ +G:Q±l-!©FÂ[Û?£Ïøõ…‘«ùŸf‰Ê’¨þlñÓ Ý’áˆA›$&£“‰‹ ­*ê0)¶ÉÜ«ó£è$á[cD)"èdÌzÔ=¥8üøœ;¿ñÅ~9Ù¨£kY81èµ1¯‹ºB/*7·4õþ/ µÞXjA»OÁVüðx‘¢BÆH‰¶.›¦³ld^„«Ú"Ékþƒ½ßXˆÖ2^{¯M„3NQ/äÆßÛŠ ÿÞ—[�^ܬ}jû¸ùÔ¢iÌdˆÆyvD mªÌ˜·ŽÚ N‘Œ]ì2j¶Lñ/cá®i°f쓯¢ýŸÜèÁgy‰ M­á™â ¨YCj¶.¹PP£3Gcz×ñ/xpoPrÛ*îñiW·RÝïÂ~Ö=ì-÷+e·8hÑßìf1¥ÇÙNbò‰~b!û*ðÒØÑÑ®‹³Ý.á¡=[„O„.'»f¶¼ºMP¦Þ2^0 |AT}PÁAYÍ*^ðÀqî„×�²¬~$Åùõs£#Ô|­GÆMèÈhÃâæ—9�©Ñ ¼»êÑÓÂHÿsëÊ|K"2ùàa€$ð׈hßPqyÌ“^ã?b4ŒXx•áØ±5©&e]�‘ÕîüáÒ£5wµ{ö±–�\8øð‘"�L(Œ‘ÚVivEdDϼHnQ{\´QÉ—ÈRWJ´˜çÖ>§j–ÿ@ìÃ,ON(ïœhÔuØ çÁ'ÂÕ(¬Íf¤tQÛ/Ò+ÝÍò™>L¹³æFðŽ–"'’—œ»µ \Ñܲ1€¹ ¥¡’èÙ-’ÒЮÞÁñj.j| +r#Ñÿé•?(M)à‰ª.j¹#¢ÌXj¸I–ç($Mi)鎹0º'ú@JPá ]ˆ¡V=ŽYC7%×·9·ÝŸ‰‚Ðh–†-y’�ª;VLC´‰ñ£1+Ó#^¬œN'ªùMÅD Pmž{ŒúèZְdz€JnÓЈL�ŸR.ðþ‚a‹‹5ÐåŒi¨|É–?0@“¿¦á–u[lœ1˜PÜJî uDÃ䌹[œšj�ŒgZ²qñYe,¤pê·‡,càû©™´.?ææ1žH‚.˜Ç¼21†]ZÇ80¬³öý»¡üÁêëDÀG¶�[ÂÍz6ÂÇJùÔ… `À‰ä•“��O-*�¤ŒQ†<)NÔ8+ê¾åöo_ö.,ÜÛdÁHÇÞÔáÔKF%]Æà­7�óðɧè%n›¿GRŒöŒDWÞd½€§blçúeV¥op˜Š}”ÖÂß‚y“ïë Î=Ë^©Ul1¿O >Ã�1Þ�K«É.ø<TŽ)/è„øjÂhgÀÀT“¨tòwú ЃÔ0Mh’Ž +bB%ÐÞXzRª°üÄç$U‘uÛÚMC2ñ…‰Z¤¬‚s["Îhþ»K Z‰¶,eüõgz˪&¢…•üE°ÍÔ£FìF:Öj�({�wubBôAƒù–ØÂwö€ƒ«¨Kѽ—UUØ+ÜjÌ�™É„V¶ªg[¢Dì5… Š»Z]‹è>V¹}´˜e ¨[Ípf}½¸U& F'hŸ…Ô;}z7…7¿ŒRX� `=ð‚¯5ÙTÐ!ÑØÒ¦�“fžXFØ£dq–O÷š¡�:ùŠ@ÍúoÍaiéaRº]‰½yÈ?Ñÿ…†À™>“ðÍ€}",È<ÆÙú#PÔc׎0¬ËBêJ‡ÑhÑ!]â'þÙ§Ì|Ãø@Rö8¢dãSï›×N“OË„*it›#ådïûiBƒœVG†¹¹] 1õ„+¬Ò(©H:“¦Dç­,ènȹ(*ÙJvV’«æµžõÕ÷(é¬õ¯ÛØôJ‡×DuéßEFÅ4fYCæçãXI§pû'éÖÿžMŠvp™ +:¯°ò»ÝÍïÔ¼ù„bRû.TÆàè*ÿ‘ZË^ÉH³ŒÖ×ÙziUCƬOáëîÁŠ+ #êW6ŸK‚ýÀË÷†hž”_·*L ” ŸP½íä`3P~ +™Gã—Ï‘úëÉ#áÈßç΃…O¹iGàÛ¶…¦ñŸl� ’5Í�ôaÊ×áÒ½+´#·™ìHYœ³.¡ÏCkש=’ÃŽ`œIÜÓ*;fòñ!ãñ¯r{«éHìW©PÅÌÉ Iß`Î ¾1Aþ#ñÊÁïOác%G_ŠY¸ù¶¿Yˆj¢·cñD�ÐÊ +^»ûúÏÍ8Ajï± +ñwžö\fMœ^+!ª‘¸Ì@R*œC”U$¸Òá\Œ$z½Þ½uɤ9•^¥äº°19Ÿ%µ‘rŒ Wcö"œöÿ0®1ò–7©Ê}‡+€SŽðãÓ/—ˆëBDFTzLTW”,o)/1Þ}ÂKÁuc”Jm{õ©bö�Îtp¯×N%ÀÕûæ �^ìN½–åa%׿óºœÔ±‡h˨/ ´ŽÅÛ>ˆÆïN„Á˱v¿ žeïˆÈ}pwí Õ•»—?ñvr2T²v+5`vb‹]ÉÆ‹ðJ] cw5–@^yàcnž§¡KW1Ï?¥·:G‚ÒÍ@·iæšüÎËá×+k�Nn¥ÑÛȉªWÀì\‡./Ÿ�Ëp­Å1g’‰+€À^µÜ:Fds]•�JlV©¯Mv3ôLίæ\[P}´=KøÜj8ÿ 7ðÚ„ƒ"Êv•P�§b[áXbB†.¢ï†¨1o4d:^<ã)"%‘Þýó¦¸bÑܦª»‚[ÀÓºã¸� Iº¥‹ÿlB} sÁÅaš1¥¸í�Í7¡3°BïQúsè!;!¾I«<àÕDÃ-œ;/F„ +±‘é” +ž|§@Ä 2„`Ë×à žLJ=èb™´±˜g}ôÌ,7Ò×õb¢ +·*­Ed”ÐdžíA®nkp®úÞ²ºx(æ—M«ZRñH¨Eœ¦WšF]qµ¸ãÿñÉEüÿ3üRñ÷i©E.Ý;Ì`�dAÉÞ>àûáC]Ò!¤�:d ÖɇÐä�‰`æk¾h›½ÃRœFðVŸS + +@&Û�ÅNo½¥5wAÈZÓöGC}#‡ª&ñÀ4ay÷Óg§½J™óôtxû€³"õù[ê®-qü°V ´èðÄ€ +Lˆ`�±ÆÄÀvVï„pUÈ _n(eõ]ÃjébBYÓqÄ$vöN¦ï-Ç¿v#M¹&êIœª3˜^VL€ZþóÞµ0’NA.N÷�Eô-øÁ¡ÈéÛôž–8ÈØÄŽè¥ÔË“tœ+é{ô‚ +vR‰ªÂMfTdƒÑy™Á.âã3ÆcÙ좃e•'-Ç|Þ†0‚0K~tDß&o1³pßæÊ^—Ç…E/ NvŒ•­lz)ï(qñ0-ûDM¬%-l•“¨<Þ�dTT£S/Ð4Š!~RÚŒ¹5LŸãÝŒN|HD¨tˆï�L’TXc¸vŠF¢ãhr•~¶æ}t•Àx°uš9‘�itèxM H™6xI»•e’V!B�Ž´¡Òz-ÒÒ¸…`Hû(NÍ‚4£; '{A)??ZîÛz4ûh Ç—nL(ÐcÆÍÀ�>*XÑH¥±ÁNѪDK¯œt' ÏçdXÒK4?1 +¢9\œ(�á/Êb ÛЩwÒZÏS†öAœÚ.4#5^\…VîÐ@tHRž~B L¢W7¾ŠÐÊÉjì ãäˆÆƒÍLŸ` ÚÖìü‚¢ä-´·7y9Ð,¨±­èô÷¬~ÖŠ^xÖŒ“øŸú îC:Ÿá&ùŒñÙµ¾g¦“dpÚ3|ÇR¬gßàœ[zf•Â!žçÙÅæ)Ï8ïÜ[¶֣Bá¾ Ëh6ø•�“œÇëì�º«3Ã5�•»@rŸÐ ÇÐatVA¢çl:Ú96gyJt9S5÷¬ÉÙ¿¼ÊãÌ÷²¤â¬"É–éá,^Ò’®ºPùË58;ú¹é7㽄d³7«Bøj7›uä$7‹ÏPr,Då³Bñ=ÅÌ’š™ã*�¶eŒÁ;ͪ0FëÏ)ÍBŸ|ÎÑìr�<4;±žÀ¶ø*?³ê”ÎvQ7 …f|™¹»î®Ì üÖÉìhã…`$2Ó]DÐ|ÌüCcÈ_¹ÕBñK\˜ JݺÒíÁŒE=KÀwù³™D�€õ_f0c£}Y™„÷² ¥Õ:/KŒpdÝQˆ»,r¬ËB�\ÛsÙ‘1†X0jήÈÁ}ËÈE­S–t´(!ÆPÖ2òhùKË2Ôr–Yª±ý²¬Ð1ì™êc™‰ ‡e…i…WšJ ¯Ì,F^íʪ,Ux¿meÄhÙÊÊ’†;°«ì÷�4U™ÕŒó�ʺi)QÙí)£…e-S‹²:L ÔCÙÉþ ÊJ–àKZ¿ð¿­6iË�ÒHi>�ùx•y#ƒJUw:2UZÆâ¥GõîdfÔ5'+ +áEo²yM=¢ú"m><¤ué¹’7¡O/ §¬ëÁ¾4šÞÄš£iE X+%gÑèYë¢&m™“Œ�Fã‡n®±H¡6iâ@ôSèÆÈ3f\ïóbtK4àÐâ 1Æ� ÝǶôÂN­y^YV ÚÉx«ú·žx1�Ùi‹ ½Èêq;Xׇҵ"ã‡ÑøÍ…´Ž5Ž<桵î@WæŸ;{ö7`â!Që:�ç^Ï +Ȳd¤3¸ºê{ÉüõcŽ234¼�…ðâùØøÂ¬ù€vj¨x{ð¶zÌ[³8ÍsåTö¯‰ÇØÆËËwŒJÅvá4ÅT«CµWú�~O‹þ�0ut¼ÝØ5ë`ÚÆ J=g6v7C%^cUt=G=¸WcÔÓÎ;�¥WÅhì¹ÞÏõŒ½œ»b†ÑUñ9+Ìrc‡bP4ŒÕvÕ´c'Ÿô‹ÕOP·­Zñ»X¢Ülæb¯àë3ÊȲ+-B�g±A„oïUÿO–‡bì%Á}•ŸËHôˆ–¦Ÿ�/™. «˜’�q]¡«¿$8s|–©a†ôLÚa”3ð0:GaNÐ7¬Ít"ȪUt’s”çyé«é MK�`è=2-t· Ç&”lh…±PЋ‚žoDì6Xºv€Á ÷à¼6Ø©];à\>x^¤ÍÕQëÅ% ɉY¥†A¹Ã"O_�a)ò³KÀ?gøV“vŒ"¸¸Z“Ž–Ò$´�‚ІÓpÊžëJ”Œ=±‹fU42“ñMH 3äáÁG’Ê�ƒ(CáZ‡AÏ~˜»²„€vÐáP�í~‡"ý�"qá~`À¬~„.·»�ž +Y-f¬€]¢bgçÁ”µ ;W8Uÿ®µhxaü…Ú¢¦ìy>áË ²ŸŠ|ŸSýèK&0R¢'ÅôÔä §C7…º¶\p’‚�:Ïd"‘ß}@@hßç-DN…ƒíTy/ªbO¸ê™6ÍV $‰È‹q¼T�SØ›1UŒ­ÙR‘匿<Ç» ß�8óó#ÞbBz±´~�qP–§×‡NM2îál$ehò�z¿Pßšy\×iÄ@îú�Ûæt¦q+”²Z35¢×Q3Eweü‘µÑ�B’Zƒh.,d &x¤Ð¢v˜Ã-E´'Éd¶> 3ع—I9Ð�ûºêªø§¾‘�C˜ä_³@›»"°‚÷Un@Ó8ÎÀéö O)"¶UžørK9¼ÇœA°Uc)èî»9*þÛb‘�ך�NP;ZšD™Bž"xBO›dš@–“× êù�/Œ­ŽfK.æyü�£Øf3¸À«CJ€Ü�|Œ†ÙÀs—ïHí—¡<É„ø–rÌL˜;¥CÏæÀñ‚0œˆ*|Ëh@Ø„ºC¼.u·[]Ö÷”n#,þÚ1¥ì¬ÚßUtÁ“ì‰�,¼Ø5ˆ‚ÑxÜwÞ5Z°àà0þáw8ÍÑ™?hó$—F™'ûõB~(‘4¶P×@ƒ"¼�CÞç÷߆�nº \Áˆ”[.u˜—} á‚%%�-é‘g‡T<ü‘d'À|û‰Ôøš‹9ÑîtC©I(š ÑT‚€á9˜æY³ŠY;È +åÈ‹ü(|y݈ƒûÈ’m˜�(ô– +a‹t¢˜§øéq™­»öÈD¬ ‘h]Øì¡²!NÜøµ«²ªÑ¹ÁXå@ÿ–·hý‹`�&n"êhŽkl2;Ùàùfó<ÙX˜¾÷Îm²OIvX3Øžþn{àc,â÷c…bÜM²]^'1Œ¶…UoÁ$7g/ŠxØñÿLÿ`„ŽùtbzùQÞ“»¹ˆ«�y[à¡‘6áÊt¾ó̓â¬À[Zþ§°S , +·ÂCx²1 +êê3GÀ�+t8qUŸôÀÝOxi`íušÁÖ}Èj™r–ø75¿æªÌô5äõ~€c”r¨?2wJ0,à"Od +Î`þŸ‘€bv<È¥—“4ªÞ¸"âUºŠDˆ†$ý±þm¶›YY¦SJw8·ß.$•ÜuDU^¤Š§Eµ93ÈV*�„ 4ËïooO_ÛIa$çÆ»Õb3“š)‹ºJ@7ü(œ’–no=|è�6¹ì<˜PØ�ææ›@ ì±K,`¹ä�†šE¨Ùü[V‡¡šrËW<ßÁFÈ”‡S<õ¬AX&&¹ƒg;ò +³Mqpë\8ÒY½€ø‚ C£µYªÈÔ"BœAˆW�áÍ’ô1VkìÕZ…0s2.GPÍm•’ßH‚Ô#k(k¸Qè𹕿/pÕy ¾‡!6•‚¥NAð�Ú‚#Lc”mG(Õf$’ç‘›‘$„XXÅRR ¿µê²Qåný…,;¶ùÚ•J ù;ŒškØ\]UÆ(Ÿ±V! t… iž¬Ù@OhŽuÓνBƒˆ×ìhsrËÜ[‡=‰’ƒi /J»E?r«Z䑇2¶Xpd÷º:Ä—¥r{r�3ƒö0%@¯è߇[†3[Ô;:¦Nˆ´â›^Kø÷àeI�/PÿÈ�æWX­í“k¬ŠÈá|à»?0a5Û×ç D*ç  r3€æp5NkÄ.ÆRQƒr»è`*f]»XÁK�ÿ›˜ƒ`Žë�vR‰›£’L8E[¡ÍÌS3£�O¨H0yvœ +}g\gzÑ‚5ëÎŒ!IyÛé‘Yî®L݇ƒQO,# C{-©H”ÁŽ\Å¿Á´HˆÖ`ˆ¡mûYãÔ!(�6Æ æª0C}mÜ!öiMräëè=bxöÕ@3»dcfJ^ÕÆ¤ñsJ­“ר,؇ÿðù&3Ií)¯°*^'#%ÞqÉí'¡7ÁR–Óô-vc”õ¢Êއ/oã‘þ;µ3Øáp?QÁÈÇ�5%K˜Œˆ�Y’æ\ #öËFì$�Ô~à×K’UóæŒê…Œ�Î_ m;œ`­³2îe –l9{'!!Á‹ì[I#ÁL 'X�CÀ^Rõ×#"ÒlY–Eƒ%XDå@î9Ú#ôe“Ë߈E ú±¤Õ�£nGüÖ±�Ì-õV«Ù°.n0„�ç$`�—.„«ù×EåÀÊ™ª½É(¥Ð‚‡†èN7Iè¯þ?�s4'L»)x©ºªKxu‚ñ9ĺ£,Ó®ˆ�'sXÈ1tªzßãˆGóhl\Gi2 �º ™àTI™ˆQ4½²ãͬ�·òÝžgëU>áý¡ÙÖ1ëv$+K�6–CÏçp4 1 REãk“µƒ�§$SF8Ýæá©Ñ­&eš ÇÐ#3z¶Ñú4€±—Ç ˆÈÒ#¡;5©qŽú¢Û›ÌÎÁ oÒp(GªwÜ-mwðR`�y`Oßêéñ +ìÇh†Æuâ,N‡‡M'þÔ!ÃA­õì-®ñwüø{Œô|‚¤ÒôPÂjÌ;Êõ!ÃGl¸Ó4$L}ü3%-di2–ÙG€ÞÏF㵢ܓESUT"Êzh´ÇßøQ� +™,¶_&åR;v&=i—þxªÏQ0�ãµNl ¸š!ѺÛe–3+ž– ß”MD„c»Žnð/Ìa4r*ÓûOÕÎðÛíå´ z6Õ⸃'GõÂìߥ·ôÉÆ/3jäc ¾]©˜UتÙéò¾AlËx!C³„ú·ñæ@ÌsÛåw"¨ÙýWaÙ_ø ´=îx‡<œòË_1�D }ZöCé²}BRòRGw šB¸nÁÓ~Cé4xà‰äPì·\Ò{ Šžæ(rõEÉr7ÖÚjÎâ•g¶+1 `›d4ÐqíJ1aŠ ’æ�Qt?u|ã«ê8K×ÁV@Ñìê�aÜH%H`u1èT$Þ�2iªã0Ù·Eýιí_ÈR~íðV£p9‡ÂYQaœ†ï•b¨ë¾ v‹ 3)}‰‡Ë©/Ë�c¢KüHbûd +ˆŽØAÿÃƹŸ›¬¨ÒØdYAÉ+®1E\"tôK™6 ÁnI¤°ÃÛ§›6e õþûnЕHõÚý¯•Qô +Ÿá"@A1 yÝ¿KN+Ûzc仫Ý#_Ë8öÜ”ƒ@î¬j¼ +_´é™ôâfé³¾gZ¸WáÅÈþY.0Ø7q[$•—u moϦ¢—^ÚekWÿ�¶"e Ž ¯i;©Ç|äýÐVx&)¢•Ñè>†ðu,B‰ @àŠŒä–"¬lÀÇf®gÜ•‚‰£=¥îÅz'`ì#²=ÈE ¾lXnlÝËëW ÁÈÍKÊüDÈ6å=Í�ïDyÜ¾Õ¶É +ȦG4†z+‰7gÄû9*Û¥€8s©*ƒ…Šƒ œŸŒ<¡¥a! :u÷ÐŒö,VIÙP¢ˆ#ÓtÆ B&W#âDÙ�ˆéàaakêø_ßK:É>c‚„Ž)ˆ•kÄ6ÿ¾•ºE}�ܵš°-€ä¡Ó·Ìý쳿;½®ð;ùûó¸Å…;¥G›ÑA‡´sî L¤\‚–b¡ˆù¢E@}ÒÑ 7d ë„÷‚qâŠxƒ o^xæŒw’ö7_öÄÝú�Ή+Šsúê›ú¯êC~ÍôàóâL|ò}êm÷j"¦÷½�QbÍ*ðt»É¦b³í ¥®óÚjQ»8&™1mê"�“þÒÿÂÈŒCéóð2“Š~lšŽl@It ~°±ÐþÁ€A;!GUµ¦D¼AÐ:_'X}¨“Ó×hã-ΔÏ9°üÊ`IPë2²Cv+Ñ9*æÌyG�ëââƒÎ?¸?ã„f do€”|“G:ÞY¤»©GChq�H�…$¼ô€¾ÈºÕqÍ ì;¾“ÎV,ŽÅÆB‘ÆŽÏOž€ K8"ã‰| û’Fe2Âå( ®‘¼pÌs0²€˜±cVÀzíºÆw;ŒŒ‹¡Áð™{b¸†É»W² •JêJ|ßtÝÅäö@Ž(ßMyþ d�ˆ›‰0¾=~€¦1bîû¬3$O€÷šÉäó².ŠÜiDP5�zg +–þT4!?ä£:ín?šNW«jÞ$ b’�_«TØõ7�Û˜ª#ìÈóž‚Q%º]§ÐLÄL¢ƒÜ ?ÉC’ÒŽ\³Öƒø€¯ Û‰"DsÿÃT¨pXñfû²¤O)j’ ¾Æ.~‰*Ê9'üXú —¿ŠHÑ!Àú³oÄÂ�šyÅÒWf°³íM(¡íVeÝØJ-W§‰â5C\Ö•�×¼Â� \'ÜDR³—-“]*gtfY~­<²ŽÂ Í‚BÏS» + +òcÃèo;Æw׆96dÆšÈÞ,Jm¸ÉÜÌÌ4MY®ŒPz‡%£~W XµgàÞ5ITÈ ˜Ip�ƒ~ ‰ ‚Ej­ÆhP%Pp™]ùn±C»SUB3®—< mÚÆ ˜“VIJîjÈÀ/¤dC PNn¶05dAÈ¥_9×ìèsIcoäùrL;ðyҺQÇð‚¶¸‹‹qÂÁ0€Yk½D›BÊ`- oωtméØU4Ì„�ó¸î$è¹›zY¾oáœûö·¹ku+ÐhÏ-ÇÖ¡›lh€F¹ç|qÆR +ùÞgWpWmv£‡,õÃ/͉ƒ»E­‡Àlx +×#÷ ØFýP|f?¼Ç"P¢8'�k¹‹<Âëú|Ź1™àPw¿Ð¿÷PAÐ_ j 0N¦ÄÞCÚK�ä{Ÿôä?ÆXV­é…Uþi•zp¯1nÊ+�1c‰í‰ùSÃúõ!tåØn4ôYÚÖÔ’ñóºg·Õk#fÊ‘�ç,#¨Þb`4Z ˜¯ÙÿDü§¾‡Ã?ÚÑ]¡U”}’øþ~ÃÃ.ï’¸*�µo7}³!Þž37D>˜˜Ø_�Mgõ ûÔ)¬<&+`×D·ÙÉ÷È_Ûß|³c`Ó†”jé$¿©š‰$DX´(¶ŽÊܰ9šìO%Û4@ +Ê»}¥©6�mî-T@Ð÷6—­±Ü¬ÛÊD�•LIRÓ‰ëŽhŠç»„"éxÅE¡½Ç-/§Eâ¡p|VXduº¦ÅÑÏ~ø-‰�óˆóf}uÀP†U°ÿÇzL ì}>…ë<˹’tYÑ_Õ­É…˜,8î1æCÜê× 4h)ŒE_{ü¡é–Zù¥ÚB1ÝÆ;VÒ~ÖFœÐ‰02^·|TNñíû�rüÃ'ûuH&ÊâInAC‹î¨nt#s›þÄø†[‘xO«¥\5Š·dÓæDVÜV•üd +@BÑ,Q…Ì·›ƒ…=ù Ó6æ°ÉñÃ|㔌ûûÖšy›–Ê‹)€WAÜÔåg¡uÆ�HëEöÏcáe…7â�ÿW¬¨ø tÍ]WI�#ƒ`1àaž²°Wª¢£â[›C5h ):(‰CRþ �GâBìÇí[ØÏ=>„Ãßb=¿â˜o7@aoDd fb\'Ls¢ÿ¢Žæ…nµ€v~¥(Äë`bÙõµ¥]ö|¿"ë7k¥'C"‡A¨¡Çió×6‰â¥ â ¶‘¥j³IX*é…¡ä `¢À�Ÿ‰*´¨f< ,Y¡.z"ª‚ ¬3ã˜þ‡~ßüßf" Z°Žô\Q0ùí˜�·ýÜv—Ms÷ÈVÃ6Vð¾^ûÍ1J…«z9¡¥“Ü“?¯ÒŠ-KW9³4“¿`L:�©S ÕP{ A1RµÁ�ºlV­ËLRVëK¦¢~Dìš@tùv +Ù ‡í1rw&sýc;è�íëzñ +øîñltŒ#bÙZ|˜õa S­¹ÊrË#r£‘"$8³þÄ!‡‰)€þ¼Z:d@j=GÚ0¤÷�1ñ_3n±²¨cØ‹>ÐOvkˆ�<º6JP5|#%˜Ÿâ‚E–gÖ? ÊfÇ?zù:ŸKü‰•ˆ]°ÿ¿ßx˜ÎÔ%eÒL2)™»öË’tÂ!°¾w/¹ÄÇŠ +â³Ń:ƸCb³²´`¡}ƒÐW�’Óãã\±bÁ–_ñ"ê�uþW ¶~ß9_ïySÊhØ%ÚQcù[ÑîÆŽ“¾ž÷ž:4ýgQL’¥(IŒ1Qþt£îçÁuaùYò5+”àÊ÷åŽsYHèYÆ%…s%SGv£Ù¿¬çzœ|võ±0f«�Öc¼ºLëD¡Ã_ÌsìÇç\œX;‡!Ç ²œN‰ÑF FÜ•`ç NŽ6 Hâ†8'OÑ«´üŽQ>˜›%h™É®uôê-×AyÅ¢—ª?Ã(OÓ E/”ÊŠ0™x�^‰Ùîl Ùå!tÃdh×–ý†²O­yShôšhºÛ3³ oÍM‡Çàf»à€ÌÁl¯±Ç2ç7ij³ ̸­™Sš4µqfÜÉ€D³.¹ ¦JÞ<³gQbhVÊûeÖ@®,½ÌÉ®~‹lõJWcø£té2HFúFžºvcÿcOô"J5F´}G¯> v¶¢½Zí®Â“fsÞháSÅí·8{ÄM¤aMgÀ Mˆá¸¿Xˆ¼íI»4�0QøøM?ƒõ¢œ Z•è•q‰Ð‰‹‚‹l¬ý®Ê“Í,z= ùXäÓš_½«�í,½H‰ýüi�½J ± +ùFô¢±¸/½ò®ZÝ–4s§é`Ö©ÞgD/8…¾M�è°ž6¯êðKŸ¦†ÅôŠ•°4{ÊQÀ¯�üI‹ï[Úê�.èæB½`ªü¦¿Ñ‹ :,ÔлNZWE0q+"§D¯êI)®b™@/Ú´_:9�NÈŒ„¨Á#� J£�<‚(AŒ<ò¢ "jð‘#ˆ2ˆ¨ÁEŽ Ê ¢ +9‚Q‚ˆ:¸¤qx{/F×Á&tôòo›ÿ”ü½**µÒwV[Á§÷c@-±wš•�îØ6 z]2{?EšÈщoñG¯A8�$2ØÔð9AM×Í~ôZC¿É½R0TÈ3Š^ºÒ)¢×üX —àèÕ‹(åù½˜wXIÐ)pD/š¹*´Å:¥jv +£×�@‹m¦b"½0ÞŽè!²£Ì�S–˜ž&#+z!ð�ƒ8E¯ê·G•Ç€½îŽ»øÙ@jôBê@üz'Ñ«$z1ùfÜŽ^íÌx)oÝÁèU³¼ïQ)�^6y¡ÇÖ@¡”$U®‡ë�¿Ã½ÖãL‘,i/®N­�#aˆnéá_ô‚h†´í,Qôº„Kqù×À�^Nï7¸gÑ«¢Rx?PΛ½zxÜï¼@ÿ½4Ÿ`Ÿß½Ÿ1à¥ô¢È‹¢Ðv&‚?oô¢ø4g±Ä¹èy¦HDÞYvž½xÄ0ÆD/8¬ŽmÞÖ‰,éOh rO¦[»;ÄØ‚ËÛL¹ÑKÓö­ABxD/ºv¦ã1z)ã–•2‡1_E/˜š€•¶�^ŠBTo3:íÀœÄ¢WÙÌ‚0FáY1¿±F/O¥§c‘!zݤ ë\²†øèeä0†Äx¼jÑ Û2¨^¾ñèEò§¥òæò¢W*Ã3x�\uíèEc¥±pÑ+#‹žG|¨ µ•¢ÔZÃ)t(zé]@@ðÞá�ñûQ*sǶ¿R¬‹+eÙ&Í¿Ix`½.? „„Ž^ùƒašÄ‹¢WM}˜®¸ê?£—š…Ç�Þ[¼Œ^§%Îw’åbòèeŽKCI�~q½ÚŸQ®‡ÇÑKïú†È¦4†ÊŽ£�^W˜¬È¸T�QAéeK§Fçà¦X½tɶ‘PBüèèU›¼’Xð¢W�ÿJ3þ~x£WéN5µ¥e¹ŽÍG¯(a:3Ûñ*z=Bó±T z(z‘Þ[ÄŽŽÿˆ^út©�ê5Ñ‹`ú!ip,~½úQã{¢4$ ÑK¹�0¸çÙD¯ÛôYXOç�^�÷õ·{qôÒ­û'îñÁ F/jeeãƒì“Ñë¨t¶Ê�Ÿ_(9#F/~U©ïÔòÑ«oþ +%o<`ôªyñOÀgÑKáW‚Ç?„ÁgYôÁ^ÐŽ”Ýè…>2Æk§’£WçuÁ¾j+D ð½Ñ ‘ið¹°…à›Ñ‹SC�cÁˆ'|½ ZW. ‰½„T—Ö"ks]ãŸæ×ª.."à„?ƒ†½èSmbWWXc!zÁ£„B³d+*ø&z ø¥ŒÁršè¥ò¦s@c´k½ȶa/…õ2z=ƒÌ +ªEú3ó�^Á¹À-}î +½ˆÅïhF++´èµS›]È%Ïγ�)z0¥ŸX0ªÎPi¨Îò4dO,áõÀ# +÷•švÈ�ºFËEtFë9þž®iaMCé=Ž�GÛ wuî¦c̘j0è¦ßÇÓ~28/-òjÄø;E endstream endobj 26 0 obj <>stream +‹k);p+‘7¢LstÆ«¤Åx‰éÒŒ«1‘}"”ÅÇEl.AëiÀ¦Ã±!ÉŠ?}㟾b +0;ˆ¢-Ò]°5/+Ã9¶µÐè’Žì••¤±zåëTÚÐÁÞGÏ×Q±ÈŸzö[öç.’‘Œ�ZFs¦'8ó»�žíБÆÝ ¡J¶S¿;cm)kè(4‡ªŸÐù5˵d¶JçÐmëo »S‚›~÷8¢ÒɺܳˆM† +~Š¿ùÌŸ«>5V¬÷Û4£}˜ r MH+ŠsvïT¡{ƒl¥EO˜M„!>Ó“1~ô£\àÏê3†™è:Õá„7²€¥2X\Ä,²i‹ DÉšs$ üéòcFjÀ]8âÖ_„¶2ÙÐÆ=é·â>À”æ¹ vƒ’ç>2G]X8I[È`…ÎòÑHWC ¦\ŽæèeJâV7ù.Â$î�.«ƒ�,ÊȨĊ>ÅH6D,œ�s5ŸéòI¡Ñ=ô’$»ðåüÛ~×/á•MP,¼Oë‡Yaöv qcJØoý'nþAf÷o‡¼ð“†á1ó–8cFÀòG–QãV"gà`Ö|X':¦+wR»†T*ä.çD¨j­g¦ÿ{t—†:iñ£.›¢R ˜,&å�·¤–Ú‹ïbÉûiò=‡ÎFj'ñ+k}V9â\‘í õÊïäKM6Cf¢¸ZÖI"2ªðW½¨Yø'8 =ˆË $ Ú43Bœš£8!‰+ÅÎÐÉ’E3q釘¤ù(@õò8Iúf2‘štJZÕÆd5S8QÒÌ@sõk™BÒž[Û‰:ÏÆ”MH“4!ÄötÒ&TÒ„ÒœfÖ²+i3Ÿ¢Å8`ŠKÚP¨Õ-?Ïmcáα~IÑ$is’T³3^@Òf½@Ù³II’6Ú2¤ô+Ià%­Ã Ð3ô+iN»âãG«OIÚ¥ULã:Æ+i™Èzy½ë{Ikª˜/“b‰Ž¤}«ëƒ÷ÌrrI +˜W“g¦s¾w[ ˜Ó)Ŷ*Ì ;< ƨh|¯ù0�›Êyܳ¬›�®½ÖRbººßã* Çda‹uëû¨¹Q2#yf.#Ë?|þ zŸZMÆÅ�Éimo ­{¼38„P5Îú�F[ÁœZ·ýû&‹Ž>õ,NÍPu9©Tx4Ù¯Et;‚Ã"ŸÁý¼ùá 1•kEßÉ sУ k¥9H©A…­¼ìÀ}Y+.'R«¯0e îï¥ å‹?ÁÿyôfÜ<˜¯n‚Yot%½ѨéOÊ­Øù ]z–�OôpyÂÔ³þX¥XUåòØ|' òž¯ÒöìzÉë³°¶Qy¸ê®ÒZKvX=¹`8Ó1�X| ¨»`±ÊpÊ;xî½r?ž˜àeõæjuÔ¢ƒQ`«SY¼•’�cã*—G\lœx4xÅÏ?Þß*½0ÿ½¨Â4cù¶i»žÍȧ’úòUe��,Gÿð†§õÏ }Öp?˜,º íœ,•v`‘k\¤ä�Žôæû0I9ué5BÅÆU¡G£Û5Ùà”ÆÅtä‡Ü6|f²kdgæ]ðþÛ�GÐfÑqßQ’»Ä·æ¹�Âá·¼û%øçÌÆZ£ +WÑA(Œ"²ÀC§‚¦:€ß àðôdìOEÄFŸÒ+b�õeBY–!6¢p!�û§‰ WëØ†$É�‰²f¯ÃÀáðÿ à ;-ÛÙ#ì]Gº€–0 OÒê¤Æ6ccjjx—‡äu†d§9Ò¯|-ø‡Aü%ॿ¯uûÊ›8T"#¦‘Cí¤U1óú‰ÈâŠW�˜·ã2XÚÍY×ýèhòl«k�®»öÜ’|–ÉŒ!”žëy˜_³ ÑšÕ*LF+ C¢(Nrdý©+&vÍjq�ÿ`lΣH¸ñÞYþX vs!.7BáÜ=Æ…Ô1t5+<*.‰CäJ—´ïݳ�£ Ù›$0"NÔ±Úþ©ö?—ιÎbNy“sG;‹24¢¦�OÃ88N E:É9¤õ<\E‘ÃY)ø7ášâÜþ‚ã¾KÕ‹ÒY/QÄÏ)IÒø"}¦HÆt²¿)’e?u™ ¬cÿöEe¾À£¹‚ý94ÈzÌ.ÑÜÛ²¸ õ �Peƒ™±±ÀÕRúlgJbg~ó ŠÆ]M}[cÝ]â_oi¸1]ü?ÉÞ½æP̨�.ÜypZä˜_�yÎLƒ…Ý(` S—, ¶l º�Š ÏÜ�}«m•ZÅÐ_Ãuûi]ÆbÚz›`KáS7˜uİ.Z>ѱqÙa»PxÚâ@ßBß²†ÅHàÖ+ïÄS@.&݉‡`ãt 1¼ =.iˆ�°XVtê& ?«’GÊP*®,žœTÔ22Æé÷ò&–êu܉£¿J›ûñ‘Œ� <¾Zv  oX“4gBèt<ꯡÃÒJ±BUg$5P¬ˆ@vå[ÍØc_ˤ7i‘—ýÁEL¶z=Ù¡ú×êPå§*àÅXÙk`Üj=úë)Ÿ…o‡=P÷•†ÕåÐø´�éÌ�‘XJMuÝ» 3y)oÅ7«È?!“˜cœ]B6Q|=Aj¨¶X;ƒb¾Kí�†ªK'@ÍÌrA:7&Žh ~T~q×£!‹9 q(ÔÉk4¢%†>�ã⚸(Ũ!(5ÁD–ºÐX�©éçÞÚ}ŠöÕç~?mA‘kJÇ\˜²L°õ;e·@- ZVýÏ85K(Ioõ Ø7È[”WÉ‚H;yºô1uDÁ´H-g“+†Ž�wÌ6½uUw$Ð_y:~)Ùï‹sÏ °îß:ãð&rð½‘õ„Òû5?åC¡P{® És+˜óÛÇ÷óšLÓç_÷a{P*‘�ˆë=yy:БbPà'j«ê äçÙ=à]HÈQx[I$³Ì"á¶j„Óäúµ[VÁæE‘xX®Ë«›8�‚ëôrSº yà©Ò¿9ãš>®7TÅ ��jV›0UÀå �•™ÖßMçÓ÷bÝþs0y¦\.N±{ ¾ÛºL—:¤‰w˜Y]Ÿ~ ¸£Š St* |^�o*Ĺ„䆉‚$p‡G_.ж^êæÙËÞµ[=(¼Â((]Be>xAäˆð¦>™)µ@›LúlìkYß —�v%ØŠç[�mñBUæ_i*° +3–Ïf+4kÏR41K�¹Yή�>…ʤÆÙ›\à +7&EÕ Ï™NÌõ³,­r…K´¡ÐÂŒ%§ˆ¦v?–tPNšðçë4;ã)XBTm«õ¸nðKšm#•[éýY#•‚Ç—¥òàLq +QR¹öTê£Ëfj}m»-]õ7vsX=Q—oÚ‰ò}ë¡hgÌ/³�#žZ&ü +käÔª†ÔîÜr­c‹'t—� "¢÷ÒW åŸHV ßß .Bÿº$óáwq_n/™ëæ¸òua3äW¨ [�¤$Býéµ¼=à�&8™ûÌ'ƒ6”Ÿ«ßlñŽ.Hk@¶0à�CO€OjÑð•¼CXVZgE7³Ÿgn„âó ªH9r«ÃÚKÍë3úŽŠ}BINÂøA%™õ1©‚}³-éPëp¦d®ocŽûž!1¬aE±�xÝ�¨ëU†Ý­Í“&Cò“S©Ú[ýײ¬vªvþƒ¤ˆ^#:ϧW""da9ß³§”"õÓø‹­™n‰~Úæø&h¯�1m΀ãr>�,¯c•ðÃÙÚtïÊ?ÐQWÃ:…e ¨ž\o¶I‰ûýÎY›01 +ÿO1!1�¦?k’ŠÝ© £'PÿÍ(W¹Þ²Ó&¾ËØUi;¯U°�kh\eÛÀ3b™¼;‹¨}Tó•VUçîÃíñ)‡R”‘q”\¾WY¡{Õ¿ÕÂ.·×oГ*�¹òÓKæ“éÃ!>·Â�GÆTþ<·ºŸ½Ÿ8ø¼ÄZ`1²â­æðÞ&ZŒë�Š6()ÿ´C$23ZëØi€æÓeÓᇖSÍT€†¾˜0h¯ŒèÈþV ÚÅmÊhý/I‡¶#†Wáü«;Ò®Ï5@äÚ)a'ÿ!Qg*ýÓò˜Ms;›%?¼Ì2D5_tu§žË¥Ä  A&›E(ó¬˜ dU]œÿ˜ÖvCÀÅl·öÜÇÖK͈ú©®]ÇçL ¦|@5‰ÝÉ_j¹`Ä( +°êA‡ÇÅä†/ÌzY“ø¬›îÍ…H÷„ÒJ“°ç|ƒx6Ã🂠+ œÄ�Vkà>î­R.Þ‚’âŽÍ•L’//¬ÂÀ pRî€à%»æ» +çZŽûŠÒáó›šl–kà¸Ü_ž0Cµ‡K8¿í®«é–â?®û<=w(áÀc¹«·L25x,ÇY>…ˆæ+ÄF•ÀÈ$np³ K‘¿…âs$—Ü!;´!×StAWj`"öÃs½Ü~Ú8Îx/ù“¥r*•ÃDاè7\¯ŒL‹?P2-·F0sa”§üÕÇ Ξ-þs(ÈÏ �}xJ˜œó=é9E>SBú&1*…<2N˜u“ßéÑ{âɆ`’¼án` +Mê¥�›lí�ªDÇVßI[0¹™t½ýl÷K) ÒÊ™t` +¦Rðo¨0"£½”Ö�ï/ 0î?¿ Ù´DÕ¾¯Ð‰°€´Ÿö‘ 'í™§ú!òD,|k8LM�-ÕɇY2Î÷T±$ñ{H˜º+"e:­i,TÔ0GYðpïJœ633Ø©ÐÔC£¨üaöNÄË>׌·2r¼ĺeu™ôtœý©“æ\%aɤ‰¨jÜ•L2c–ñ¸¹+qç�~‚BD”r5mÅM;çÓ-«Ô•Üý‚¿¦�ͧ¯Oäp!oI÷C“¬>©�þ°L�çüT`Óß�›' gn ÉâH•Nt fÆu7Ú½*þ'p ö¶lˆD€ý@Š>†+• G¿=�%èždÂ-zU¤ !{8q¨;B캨ömn{òx²J‡Ö@FæÉ&@=‰\(FbôOŠ[ÔÚc,f +ÝHçÕÁ„áë2L �ޝ?ma<Ä—�ÀÑ%Âëá{ËZ7=š+7�éÿ W+O²½ç’Á"7bæÚÔ|Ý�‚“yÍ&H–ª¾žªÄ�a§ †D#a„Øàãõ¥Ï�! Q.TQ:+i‚Ê;é�K[eù“]E³Fò$a‹&Òu0÷1”Á0cç#+3Uª�ôŠ?u‚œ–|ÅÆ"<'°×)îôV*ŸÌe0Ut¦T?ËNKÕpDO½kà? �ŽˆýÒËŽ%7q§Ìº ‘$q‡qË߆Ÿ`0ô Ì;U{ÜLRD(9}wV•²�€³…i¸oÞeZ®æ¹+�eH™ˆÚϯè¬ 7à"Ø®0ûj÷'�Ò.0rªlGß® ì´ÍQb5g“ 9ë’™”ɶà ãf:b¸oÂB£Ë öço¿É0B¿ã› iU4¿e†4Ì:MÒc¾uÏËñnßB· +û¸á[dÂ{–oïéâzîB­z„úfm +¿µ–$ÌAÙ>pLÎb¿�ÿj¦MþöºbÁ î¡ßR`}¦òÛú�Iä~k»Œw­óÛÀÞzß~ûm›î¦·­´7Ù«3Iá¹íL¸U¸’p=÷}7áâí´Ðúá®7)IóãI®ï|kAEÀþÁ*úм¾À*ø*\ö;†%D;žp}¡vÜ.xBX~/$Ü©ÜÐÌ6�ÁŠd¨úË�½¿†ã1á*…ºwÏ¥)DðÁ;„��šYÅæ³Î?Q~á”å@mO¹.k @é=‚¿ájûžª‚d`¸U‹ßþ}б.!톻UŸ”Ñp- "8QÔŠ¤U¥kƒ¿N´Ù�þº+2+B¾®;cLwM„ˆ æ h~P¹i.¿A\‡Iñ‡KM�§v´y¸ÌÆt‡{ãž8Ú¨!]í(ì…Kê–o'u°Â½åø}ëÃÂýèéP— +\ЯE¼‚áE$ò+&.£j‹7\xöCìÞh®†{ûS$ϪUÃý™@tŠë…ÛZx…û +™ ,ë––‹–+pâƒ+?.�RÌõnÎÖþ}ì,x*܃ ‚ —1ÜÛ<ë}\¸+ùA9dx5Ý&÷t‡€�íázÓx¸ÄÑO¶ðpÝ#@ â7"î;^:WÃ#Æ�l?1Àøw +“8�<ÖED¬Q¤‰K¯ÅùÊ$î¸"^iS\âÜë}ŸÄýý•NW¶Èóe5ó ÉçBÜjyŒFÄu톽½ð·¨t'h»ŸÄ?‡Žõ$âîyR]$®uÓº¼)ÉÍ%îÖõ9 *�<è“ãçÔn®,¦×ÖÑân+…Â1ÿ)ÌÂ_[`ÈtÖ¶dÀ"4ÞÈqÆ’z‰½[ˆÇ&*ͳ›5ƒîûºãáÒiÆçASèK\iåXÀø‘HÔo¢J0=2®¹_|Nº£4´SŒ¨t¡Ü·‰-VéGY5|`zô oxe¬ixQsw¸W´`3 6dÆkX‘¬W õZ44lÒžf[ëÒsˆðz¢.¦j娭5ŠÆÍlœ�„Ñ \ªÿ”c÷ƒ@…ŽÁŒ9Åœ„gþ˜TÉ–´¬ ãï%³(À4»W‰<$Šù‘]ÄG/P½Þ* FL +íGè;'9qš¡ŠÑInã’ø ø?`))Ç»Ch®²�=•zP÷WQ1;´Ü}qí yz’þ¨-Ä@Üܰ#HDžj2µúXN�Q#‡‰ÒKÊ ÙØÕíw7�c99xrëzú¢�‰È€œ†;·Yˆ ›Wþ ëU¿—1ˆ�­fD»žï³\Ôóü>êxà]ÂPêQ/ŧð^èV4‘Y1& ¡Äƒ·[/6WÜ®Hi3+œþ*hƒD9ó0 |ëuŸ8¦·m' `v7:J…ÅÎ/ÈÕé×\%? ²LcˆØ„™Í ¯Þhoƒ“ZÇ7¢FûøElö��èWܱQ§ºÐÞïÂ#™-a}=°k�ßQ÷åH8Fök~)…Ú† ÂJ›zF&ªEßGj»4†FÊZätÔ™51ôëÛCc)ŒÜJ18@÷µ`|Ãä;ëÑ£ +®fžt)78°\3èéžR:cKðvëB“BXãWoL–"[Àó‚?Xšâ.w&*Lig{�~±{è·åãM°Þ)Î\&‰ÄàÐLdZâP,RÛMÐCª©eÍ÷†â“S¼‘Sæ öG„ ÀA©BàžÝ¾ äƒxØÌRaLö6"ÒûˆáKóWbˆ†ëݼG]s gñ'>ÉBÄ�("ÒK™Ì Œµ‹ÙD�þŒ Aƒ½(„Â�|f÷㢩õÙz 5š%E–´†mZCÛ̪ŒlÝ,Á—HC"¯°,õ©�¬½~ «™¶žØ­š>[D*Z&{rCctLàõÊñ20zm—�.ܬnºŠi¹vÑ{2A—ùÕR*Zõ²ÉII?ˆ X£ Ëj¡‹-‘= q³i{)ïÞ~ÕOÌó,LyÔI‚R ö€EX¦yçäy�¤§dô‹š)”ºÚt»;žÃÚ£Ž¦þëºÅ¹ð2±Ùï¼ò4—zSk2i³àäK]^ºyy·bà'*›r€©xâ-�ÑØ^`�TatÜ|eÒä(ƒ¢×‚/ÃÔu1ì°™3ÿ17ãpÈó’ˆÖ€ä†Ì��;ÀJ³LIJ&{SËšçã»ÌÉr:~Ën�”P–‘C z&�Ï}â‰0XµÙe;‘ ¹hûè¸ÒµÙÂÜë “ÑդЅŠJ*Po€Ÿ�Ͳ.üøQKЉXAL˜ –ÈÅ¥«^”-ÕÒôå6‰´–o•úvS‡'VdoÁ4¹Ÿq±j}æÌRÏRShŸ²à¿‘•“(ÿ—½`†ù7¢ê°»œe;à¬doeÂeY—ë­ ®è‹ä½�` +<Ã%ðÍ`yÉÆ¦é›`zæ£pû6I]�´OôMí¶õQV›o@"@#÷‘C“ÁPY™oG±/RýÕ�@ŽnÙÈ{cŒòÍx„AB—`�R‰äþ©Ú£» zß0�£õÛ˜ üÖµ‘1×¥ÛŸn é›2v5‚ÌZøV'³ï-Â÷ÖÃþ¦ô´WÁ7.ÓÞA,xo6'©Ú­í­k°c¸:~oç{$…ÏÇ7é‹&-ùfÎÓo•¨£üÁúLR›†™Çˈ΀®†ö–·[¾-4Vªg„C‹mûÏ7”qÞú–Ò¿ÊlߊÇ>ÀÁ"mca­ÿ‡JÜ6½í›±°Š °M”%}kØb/†„ß®yaÎŽò[/5H—ø¸Vàµ"Øv…먀`ZTÑ›øMÕ8A2yZ‡}³²Ð®¡×·AtþóÐò­Q„™ã¾­ŒVñŽÕá·ÿ-ò|îâ¨8bÓõ +@ +‹Þo”zïš~#/@û%Š‘×ÝH¼6‡= ñ¶QÔßÖ,2ÂÓ£èß\•!>¿[°pËGÙ�ÿ–ª€û«t^ùo4‡(ª2¶šýF•s8´'»!Ë)v¨oŒñÅ. XŒZ»Ë„-í8ìB ™7Ý¢�sɱ à>¥ÆÒqLt—ç6Ù`XÜÀöèoà÷µH}JJ×-° +ö5»ýìΙhuý? +šj ki¯…Ϥz±q†#õ¾EA/­ì´2v7Î$2ŸÑZtî•λÄdð¦1ˆÍ]4Uš}ÈMÜð1�]8Èò€ øe§á*=N`f‰©†%•dÞQYД‘è,–í)(2†>Jõ™þ¤O³‡&øm:÷ÂÌ©G Ò×ÙÃKi™í×ûÚÚ¬…CÈ×nþTcԀ̲|N¾‚Ø×`ÚQo ÒÛÃÛšëI»ŸY"A®Ã°‡/K†éœ§;ÈCàôÒ€êˆ2x3Rxa1N‰Æk<á[±‡��‘]G´ãÒIÑ·`Qx\Ç äHRïú-P„;=�'ujjqØ\“ó…Q«žyFA<�š¨ß<=“i)°)½V$w–A}Aßßb¥ë* +¶¢øN6)±K®¨‚IW¢:n³ó9~$Ѿô‹²zXŠôWä ·å^ÊÄ-?ßW Ö�w¦‹r�ó>é˜âa ®±�E?#«Ë©-<ýL‚Šã1ÙæF +“&�UŽÝ†ßf�?ØEúÄ í/ñ¤«ðŒõ>± !m™ Å£ñ^`~‹„2v]†-Š! ͡Ԣ|,F¦ã Üü-¢,M•6ØgŒSÓˆdHçLO]P°&&œ«a4Ψ-…‡ìŸŸ” žqºŽ^mfþâLÝV\:Õ8cÌA·äDŽ +†&í;Ð¥uh£pøÂ¤R‡;àØÒÃo \˜xASwTsà‘ˆÕ#§‹\bgÎPÓLVr똵IŒ±üL³r7�P솄Á¬è?OýwšCí¤jT³Y•ýÇJ�—?¢W²;Fà‘Õ…Kkœ”‚®gru5úÂ#}Ôàp/� ânø°…rSõx×ïPQ Õãþƒ°¹YOWœƒGŸ[�âN£SôµŽ…¬ÝRéÖýÀ?Þl[>ç€ ñ0S||Ϩæ²ÐÒ9ÂsQ —zs‹\°¢{ ¢L�EæècycqûE‰Ñפx:OQ&KŠoB×AÍY¡îÕ— †yñÖ%£QO‡K^Òq·£AÇ}K¬l@ÜD—ÒãŒö ›£í¢ ©§»¸œúÏKÑ­ ú´t�«‚N\+é>Ãúó¬nC¶ÐñêJ*:MÙ37µßÍTáêm{á…Jä-$ü"X†�n¿»¿4íß\¿Ð> ·-ßU4»‹n{XRŠá[ôpóÊÌ&‹?^ò­åÖ�îàzn+é[e¬?ø‰¥Èµ¦L �mõΟ=ap‘©”T¯.8… õt/k,/¸m׿ G¦Ð�pÃX¯ß�]_pÑ“rzê�£8`®ŠäظRuÈdFw–ò&\gof&]P¨—ÍðçMzJÀ·צË; +==ä‚‹àœÙžõ ¶dâ$Kw+%ãÁ}j€Ï\Ò„8Ü’Í�4{8Ê2Džò„ÄjyQ‰Y³·Bõ~b×B .Äè@¾¶1 aEüŸ0 E«…éˆlwöBâö˜•\@zOUÑt=µXÜ_ž³¹ ¬À 7zoXZUœ·ˆšààtÌ52hC�LyXˆ5ýCå(ep縨þNA°#|ŽÌ¾B˜ “îå<ƒ.™w�$ïÄÈûÅ{è„Ñ&5žXÂÝôâë,­ð­ rFvú3Š7C&뛵®fŒ<¿Œ5_5zûb§QÑfpj£:éBÌÞïK•i!í²KÆèô»Ù6ÐàíKÜ OnÜôzHØòèxAôܾ�Àʼn‹¸´Kò³ô9´þž�CBŽu/‡”” 2WÉ�¶Ÿ¡Ûr@d=arÜAÖqþüø%Rgi‡�e_>I5@náwÄØ›v´be΃]´î}Y*.e(GT¦[÷‰C—K�ø«0­m  +2SQýÀ/¥ÉR˜_AÓ"²ž?2C!¼Š,ÔÁWâph¹˜¨¨èؼyƒN±ÿñXôGy.¶` +k28ôA"ÿí\ª�èµQ~”…„¢#‘Cœu !Ó¦šß(g–Ì1Fäd£  ™¸~IŠÈsg{æ´‘ÖÛ+Âo +‹üHð#”Þ„ìzëô†ÊŽùn”ýXÜK¼:m¾…#j”;¡²¦’ÝÆªÐ�c•·£@óÐó·À!˜JõÞ왑V¤RXôæÔÜ×ÜUÈz™°ÛͳAñ*M?‹êo0×5`ƒ�´Ð ‘ò"3'y†“™(Ú-¬Ûð T>)³([”1 +>©Åpç�um{ýFFw‘’1† +ú‘Õ%¿¨hAlÁƒúô¶#ÆÐ.E²•Ä‘(¾uf¡R2º'Ò°VÈÒ�DÑÐg.¬¦é±äªœ• +>Šñ…R~(|/ÿ\FÊ3"± ³ˆ2S 6¢ÇY©ÉD’Ãû8—am\T´Ž/%&½>†cHè}žº�¹²¦KÕÐ ‘2Frµææ�©>ÜŠ÷y f‡ ¼�ZUÿ Õú• œt†ûlc[åƒ(Æ�<@Eî€!´QÉÞDÍ´Û²u!} +öŠFîX3 FÄsz‡3Û±Öù/>—\T•©?Óoú$�Ü‹7v“æ +è KܧW¡œ¼Ò1O ”˜ˆ²Uü¶—1œâ/ʉ¿[–%\q9æ-³êrS¯=‚Íc.gqÚÂS^ÁÊl²´ 7+ü˜ZxÊY(gúlŒYŽù»î•`º]ºç©"ò•IuŸ¸Ø„öö8²a¢A·h0vˆ6!FÙÞí>¡PU=Áÿ$Ö"Üc*泊bÈÁs®ÉAóŠZv�Aµu1Ë0³8ä…�¢B yòg šžðáI[Y á—")BÐÜ_Ròyaû6×hÀS +ÛìÜ;²l€¯,[ŠYâØz$OJþQIñ0‹Ë~o‚‰Â_[.bl³È�3Š?œdâéLtήë`"b„áj—Ê#ŠœåWÍ +™<ËMÀíAùuÁ†ZsS¤¦Ù)d¯À§BŽ?äVxøç +ú)ì¼™u¤}ë‰ýk05V4 l�-�}‡û]DŠèÓëU¼ð\Üç”xF¡>Ž8®jíMÒ0§(òÖêBåÚ’Þð +  ª�ÁY;éϬ=žBš�5ú¤N§ù!!ùÊõè{¥S;ÎÛUWPc!©]�\Ï4éõþŽÝÑ}z¤êÞ'å (·ãRZhøÐ %;”^¹>é+$[¡)쮦k@&©ªél»ÎêÄʾy¬&ÆÕòbÑxü¸›UjïJ³Žàxƒr>K †8nú1C¼ Ö ¡ÓÉÒÛXÛ.�{�<{4DÎJ8é8ýÞzŒRxÐhs?Lªµ‰b¢U¥)njÀ¬AÆ €`�Ñj%} _ÖC®ÑMÓ / 6n(÷;²·Ý ®¶6z±œZ„¶ýÒªµµ=ñn¢~|ÔRê8å`¥·b’ +§•aT.HóõÐFàé5zÑж›#bë4Q)à/¨AÎabÓÍ4 g<wG0ô…Ï!ÜÜ«ÅAw¤£ž@§÷�Rƒ܉CÛ/X°=p—?€e"? +€´P%è[ ÊC†¶f§ÍxÁý¯œÊ,'±@ +šI[h‡Ö° U]>öÍí$Œ$š#§‰%ß#Ö×ñtÀ•bÁ ©�Ò°sç:Ó¸ +3º![²¹ÞštHái®AÐ%G‘÷ ™ŒöÖ—bÓ6Tÿeœéö¨Ö“�?L9ÂVp²Ët �¤�ÑPÒ—IºI".wÔ—*>Ì;Xsò€µ�Ô× ËÀ�•®›ûs¼³KèD¸„‘Ѥ×�†'©ƒ¿',1ô+}vf«ó†jÀKBõmÏÚâ‡dý\õÔVÖ—YrðïÅ#„ÊöÃU¦^tƒhIˆ& ¶IÑ­äЖägÎÑ~vî]ekÛf¥\0ˆ î4¡Äó‘½È>]…7¦e8íIS.ÙÿÆŒROïá)>O¾k¯T·èdÚÉA˜y„µ‡SôŽk…ès‰û¼u0yÔ… ð <Q` ˆ×‰>X€æÍnÀ©Å´DÙáv+Æ"cmÒ7Þ„[½Ûr6Õ¨A×øa¹V{M4˜ø3¸Ü$j �B–�¾;R’iÞNTy²…-R£F�iŠ‘3)Ñ¿(?<æê�Æ8> i¬ �0_�íÂR�h+…h-*ŠBUC1ݺ½KéK¤GСÃû즪.’fGcqzˆ±øª¦Ä‡A '�¤¤¤ç™ÁÔøzK ñÃà\5¡ bF>E"��Í4.q9¯ÃßÕVGèTL3ìî©(ð„6ÆQƒSxêšÒì>·šÃÙÍÀjd÷�eWL¦ªóD{£“@Ë”ñê±qL}6œdeˆäýÄ]*6K´L2†ÌT®ddŸ·ä*8ê`¿èöhàNFœŽ±¶!ð9D3Ïþ–°ÂЏO·óŽ¡¯<WýWݺ +Gù!K÷hÀÐEE=‘ü’À•}§,¿_NuªB¦Ï°jál0G‚‡w‘4Дô òrj¸ ²ø(ëVÞ‚ebV’îNKÒòaˆµŸS¦ë„tÉüŠ#Ç4ÑÅ™`ëB—/ÀTz£’ +ŒÄq#ï„zù×�':“Û4lÖïxŠ Tn@¨’É¿CŠE[7¥ ]…Ó6‹gÀb�‘ñ}4¦ê^Î&š6)¶©zß´ 73»:ø(CÓå84M=b0” þ‡e¬ékh+b‰tp£X€†Ë]˜ðÝÝÐLS3x˜¸ Q 4.ˆ(4ÝUnÜ+BX•´²Ï{03qëW�c†Ö"²¦7Áè c=µ_«Mq,±ÄHmíUŠñƒBA¯21¼ÉXëG3Mè%¨œÍŽ &x¼QQ5˜½¡èêàÃx€9Ì’�´u¿›ÖL÷Z7\Ö ™ÖLüú$Ù\Ð%¹®ÛÖÒ�LÆRœõäcÝLBŸ�5�FeœŸ–O˜¡œ†a ÞƒÂxÛgrl-”1R4¾µDÍ]Oål#‡Ot #ûéMîE��ÐYWÚˆòãb™V:}óÔÂÕ›º¤)^©¤_§E±s#UU.&j¹¯Sñ÷24¼øB+´�jê _a -³:HçMͰ)E!‰"VE.K±PÓÅ£¶íòãõ\H‡éš9Dkãq–úvn°ê °”˜Œ´Ö‹Ø¾ÎG¢â†¶ ËÀRg±®A)Âú¸n]©F�t˪œ‰}¡CÃôÛûÕÅa?b¨¬ß[°’ì\Ü$Ýšõº|û •¨¾_ŽðÜ[ˆÐ6¯f€‚K‘B\ÕÔ�¢ä¾oˆç†è|ø¯·=ò#Ñ:iÍÃÛøfY=æ°¸ ža»8#æ¨d²×u{«ç>´&µOw‘¨©0È…T}̃ý�ˆ/Ie-,ͤP2ž,²F*þŸ˜‚÷Þ÷¼ª‡[JÜEPÿû Å>O-IЧá%$(¬0† ¹›ÉO +¹Ñ­þ…Dæ?ˆÓs—°T¹¨ßä¾Ý[xZ°g3½å“@-¤¶ËÚ„iðá0¶MÄU<œ¢‰™mÒè\Dk€U‰k£rÄv2ø'¦l™ye–£R€ÿq!æîM2ï3A%u(Ð&=!Χ³x3–”TBl*ôBã=}ª†Ôq ¶ôEecw¬Ið�»'¹[%õu éA,3&u‚ØÄ9%¿=ZÌ@Æ.ma‡zÕ¢õÑ«YFÒ‘�Qáøuæ‚Æ=�䑟HoZnitX,‡^%0Õ_¨'¸5<¹ˆˆùŸP#ò˜IÕ�hB�bm}€ðÅÖ½¨€Ý÷|%ÑÕ“7+a(H�´BƒH(Q9ØFaÃŒò\Þѳj5èÝÇ +�AM3gÜ5}¿’ +b½¨lœ£_šå–ø[}›4`ÏJÊ3SÍÐÈIù�±1éCçàÑfšs“ë­cvêçúd—;bÀÔAŽe“NèÅ"ŽL�?y'—3Oe¢½éAb ²�t×;<ªPBk©}Å #ŽéŠg¢<+Íó \Å‘¨l4©ájovœÉcrKþ"ûc|C¼½Iv4]S2¡Gœ÷¤eýF;$‰´¸!T Å§mQRƒóÀÛ~·ÅÛsáÝTÏ¥hºZ<¸èQÏ{àwK0#+á÷aƒÓJ´œN…E¾ŠöŽ6o+ÅÕ-¾€ÆÃéiãÃsÌ)„E8˜ß¹Ç±—ø+°Ri«½Üp³µowsž9Þž”Ã.µ~na(ÂÒDÑÄú3ÔNØd·&ÙÉx­8“´»V»n=`=\ÇEþøWÖ|”(ÐS¢9) åç³4#ÉÿIÑÅú·ùN201Ñ.O#+¾:^Ë/·'Ál;V×5�Øì$yŽ!†™ÙݽSJYׂp J -/0-\g÷3ñð󓜣"v°¶ðW>Á:¢#•Èæ¶ƒ/¥¶+«Eߘ�Àb@&#¡µb|ûc�c(L‡ÍI˯†ÂÀ.^ê +T&—ûwR™F ³~#d­Pe†æõõßän˜õ!NL‘ÜØ aC!¬¸sbyÑ1j—;“ßYåòžk*q1†Âù•^5´Û¤‡p�ÕQÆÓ¿'¾±•y +7ÜŽ�`ÜQõŒÜ«SS–A@]§Ñ‚«¨ŽT@¢ JšÅP ’!ñ@Ð@Šã�ŠÇIŠ˜€ @€�$DÑÌyÀþŽÚfäì—eS'¹ ñ!̘ŠpÅI§Ç‹P”õwž@ý&ªÚˆYÌ­}´�$@S2´c„À£#d\n5}I@‰“o@Þá�ôŸL>#øc§…Âüð;ƒ«‰Ž +ô 4 57¸Ä%¡øúø–o #Qœn`ä¢ô „o§þÐM¸ é>ö•_\É‹k„0&AZhˆGÜtŸC5ÖƒÊoæ½Èµ«B5 +é»x rGÏ2‚Œ"RïÊ]¡6lq¼R +)Ød9iŒïØXG̓PGd¥‘Cú=<ˆŽÒ3ÁCª|ùÒß(·!©ºc:™T‚F× ¤•ghO¿Ÿþ'; éC¬ß¢j­Ul’r¤øFb¬>º;…›±†4ï¥hµT]G–壮bÜ«#-;ô`—iFGMdŽ N4Á0Éå×u„¨¢µú‰)78VÜ-þÃ’1G3ԆÐ;19wÞûܵÒΕk’BÄ)éšBb�/àïµuNý´5ñø§ŒReÞHI7 ³‰Aw”>b\]&I$q ó¢ü29ngƒM£¼9/P2院|º¤úÀ)…L-rT÷�«³÷2çf;«´~/»Ä�D >V¾ÓaÄÜÉ‚À{Eb5šßÙË¥}RÛׄÌJHÃѶÞ�*äîrÕïÅê¤ê½—�!P"B'� \˜y|1žT6~õ…©a蘜յQ  ɰ¨´—³1Ó~†ÁÝW,à‰Ñ 2*†�™ælívZY±4d›m‹ÜL‹ª4Ï\O’µ­IÉ – §=—*]6†mõ:TÕꑲnŠõñ¸ú�A\ÊtèDãJª�×Ï@z97ê_ I”Ì**ª�6˜˜üy±&³ÄB𘎠¶N•�¨vl<ˆ!‡ žâ­Y`Íñ¯æú÷ŸvSgòŠý¦<„Ë‚¨Š Pđݻ_ÐŽjOŸ›ÖÄ�I}d©n0æ!M™…p©X@åz¨¶l”~kX b×üù®”¹›y’Æ:uòº‚»¯D"†½üvYsÊy˜ÜÑ*Ü2ʉüžìö@pCžAü !è$¼#œ…�·þaÆŸ6wêN€Ø ê&|‡§Û­•� Ðî®$FØ +" 4“Ûí?°@Y²[pR9?j2ÑCy®¡¢Ç.¸!É7Cõ˺5òÄÚÜ©uÑϢé¥aô¶Ÿ`âhUËCWürÚ!4“Û¹n‰D¡»@ j%Yñð(Ê´MŠv}s/½wÃÉ]‰ù&ÚÒ4-n±~Õ[ŠamÜ׫•¾™üÈ¿¬¯¡B�(_,«¸Õ#4 dò,ÊT¯?×8T ¸XþÿÙ›âŽ>à4·�•C”‚¨0ê* ²¥.§ÒRæíìÅGs‹ï¡="™Ç®—r!rƒí³¬†ÒÊKÒ”œÅdŠ@ÎdøZŽwåÏUoƒ-–HقЖ Ì ÛÌ« +aw¢›µPþH´»¦kPšo‰ä/�À!ö{ÿ-Ò?ºá¯t‚î9ìHuÔ+éV@`Œ‹á^Á3¢ˆÜobZ1¨@⡈¸ (Ù!úâB®|@ ²`–¼�z®!‚M€÷|bD™Yd¿ôŸ¯¤=1"ÏN\˜¿;ò¶ä—z0ók<„}ABïVs‹�óÁ= Ü_ûÓ#"�Î +Ø�Ä7œÛ�v‚ÓÝÔ?Wü¹pï?·ºË F]Þ~§UŒò}iŽ ÞÜ‹Òȼ,‰��6ÑÔwC•“¦‘@Ã20cØ"çE–�ŠJ7ƒw†…W¨Þ¤`––©Ìt$ž6�úM}¿#.„ø§+ dsŠ’›�_O×,µ8ñ6‘ Cc0nA#næ…¦§˜õ0=ZXÒ�¨æS˜¾;£\a"… ŽˆI)Â~‡Ý¾ ÊK»öáY'¤qÌRXy zÐd3Ë8Tx ™ࢠ…y ¦ú le+9‡Ì² †þÆZ1˜o=ÒG�›� ‘+6W¶HTSþƒ]–Є›ìÒJ7¹$€áˆ)ŽLW(3¿QJ)SJIÚ™–C$JMFóæƒ…Ó¢PrÓœJÌX E »ý+ + +1±©™Õ´†’ƒG:l#Ì z+µ�“¨©;ÌÈ̼òyÁºY®Æ‚_¼ +ÆÅÁÔG† ¡F, ÕIþiŒxaà‘`�xaà9Ë,:�T%y]™l=1T¡ +ƒ³(ZÄÓ£ŠÄ™5(ŠÙ�بq°§êj‰DDÚ0ô¬b�HQFp¼B~„cÁÈ'T$¤²ªLQd,`9R%v“ &æ�Ä·i‹Ë–y`²É.ÛÃîï–›Äqßw|vÙ®°{÷ù›÷<‘f~¢Uýÿ Øȶ¾lÏýùÅßBÆK"$ò„:C$‹-¶]Áâš%2CÕ Õ`c™�Ót@‘Idbg"²M&—È&ßd²ƒöÀˆ^�…Šl2 Ë“òØeÛâ²Pyª\v…D4ÚE}ðˆFƒvBÈ›LÅc@"$ê1ŠÙæyA:æ x°í×e³A&&°ò¾×O£n3œrÞÀpp™ÉAq±E7Ä‚<àä¸3ú#ì8!eðÝB‘ÙÄÃ5*¡xm¦i·×môåþý‰ÏŒI¤Òu¾Tö¹{ â—Q�?jZ…Êü“$;ϧ�„*LDdºL14¾¸!1EEEETÄ„DpxD<^‰m«!‹ÅbB ’î(,iñ½wËë‹Ð€66 §¹�éA8�á`áy0ï½&V7P´Ü5CÖë×x¸]…¶~ýUô¾òJ«AÿR¤Ë¯ €£ ñÖÄG‘Ñâ˜�|“ùJ|ï§©^>ç…FꔼJŒ‰a§wX]¼2D*K¾XYÅ�S‹×Q çÇ›Å0C³N¾›k•(j„‹Ò‰¢Ùœê7&4‘Wj޹ˆ;ž¶¨‚–ŽdÇTªÚ„Hm!¹`TãF«Ÿö#£Ù~/nve°ºRÜ�†Äœ!Fý§Ú #ÿ¹¦÷ÈLÔÒa2"!ŽÅÔÁU ¥ñÄñÏx±œ$&Õ²C޹x¸‹ö:É$´ª¼¼`,¡�Z b×ëå +â|¦Unã’��‹X”°M’EÒÕâ‹"a?¢—~ÅBQR¬:i¬·Â+#iTÚYITüÆ<ÊJe(5/î%, E>{¥ªÚ™µ*µ§œºF3Qñ¸—13®;l�±ÁU+×÷A5¦œlñ,°�E¥@j¼  ç¢éë‹J$‘©¢¿àmt÷Qô´VÃý &‰T6|;tÜY‚dáˆEX ø3Ò¡¯ZТ+BDõ:Þ]`µ‹¹Ç +–*"ÆŒ (à RÀÍ˸¦ PÔ>ª)Y•ˆ ¨” ]«i@Ÿ',¸T„Ee�HiøÁMÐæþ#î“ÒÈP x<†<íä³#‚Õu)Õä¢ìTõ¡D$†þ½¢d`€@ mHÀúDã¡ 4œ¸‡;LŒëó’: ž©SxPˆ�fØ@ÄPðãññ„Â`¾º \Ï l=3@†ˆ#•�Hˆ¤$/¡”ä,‘‹Ôð‘ +¥Å•!1nIQ(…Ë:0F*3á2UwÁ?%aÙ-Î/V…ÝÍÄÌ#TÌà~]øV9ªõ'Cu PQ뎸D¤¯fd™ÔfEb¢%é30OF¤Ð ;bu1Ì´4�Ö´miZVÛjƒ>ÔgÙt +`Ó§‹ŠË TÓäaQƶGÛöçÚ¾=ˆmÇØÁM]sz¹¥�÷iR‰ +m¤†\íšËÄ1ܶí…F•2€€˜Â †¦€ìiâï®PªC2 +«¦Lñb»âÑZ©xMHì� €T@,MU‚@ PÀ” w:e€‹�76¹)‘¹Toõéb‚ŽF%4y;ŒíظE›Ä¤¢«ªØ$n‘KÇ„,TÒz¬èsŒƒ�šÞCDÍÌÐÖ¥,16h!=µfªu:™£´1=)�²ÂÅN�'ÿÌ«vCtKþ·!¢TdônM í=˜¦CÉUCÍ�Èe*:b>ä Åd¬e¤bí4ÃjŠÑ¸gBã ¹„¤�‘LÍç‘l¥!ÄÔ{Ÿ(ÅÐlà*ÈB;© ×Gæ†MWu0ƒÜ¡h‚j5PM¹RTÔ¡|)´¨±ãÆëAa¸± SûH®VAê‡{ˆk=šY¢dáO[V kZŽÆ‰0;º¢�I¿!²¥¹'„>ÑÓæuS"ŸÅ EÙ + +$Ì#êUªá€Ñ †¨Ž^ ©Q�„Ô� ©™é¿ ÅScšÉâz‘!5E3ÄiÂ?¤< …+§>«¡D¯ÔaŒÔ .192ÁiˆT%X+F(öxA9��o¹õ½=Šx’:+'EV.{“´T@eR†XÐ:È<§.}„Ð3!4¦×œ -ô|Rg}SМ´Ë�劈hË$&–̨„'rÑ÷Üé‘É<¤ð•ï"ס!U¥Q¸cQV¤0ÑLíPlÞ»qÍx’SU%ÍÒuZ#w;Q¿ˆg +‚“Ðc}*\ÔŽ¢ì‚EaÈf.(A0‰•ÂÂñ•N5—˜ Ë +ןxÔ‡R¬ K¦Â¥LòýÜ6Æõ”2É6ƒ½ªDíÒRéõ‚ÀC3áiøqFr%d‘Y°"¾*¡ê\ÿ4:eH±*¢U«†¨™5ª%JRâ”Ð0RŽ4eõC•FíQÍéÃjw>$ ›5V§ñÑ…Š­…Kˆ:–ù"ô�{‹fWS�_‡÷ž�žv§Ú5¼UsÏrѾ"y[ÊP´ æ3;¬t´]G¼XZ’c&¿ê¬Í³z}1>‘=CìîôQRRÔi(GÈTÜ.â�i³OüšÓ»c¬ü¬øš )°Ôq¦°�ÖPõ¼¨EñÜ7/ÏÃ.êĉg¤ñ$|”± !Š|f¶UˆÇ–H˜,g½‰é9´¹0Ëlz µJP§8ƒ2T›¡L4�È�²¸1�!2ã,QqÊf E÷ñ>¢°Ç Oÿq)YÄï©"’{†ªæÐFÎ|¦ÍŒ|�š's-Ö™':Nž™èÈœe�è�^PT+^Àñ^$f E¿Wnw �ú¨؇5dªh  c¨XŒÇ�$àŠ~€�n*"8V:Ë$Z%"˜iDÍÂj‹Cu5l¢UÂЖ#™›’0RŠè�J“±Ðrš„³��¹¬Ò5z<ͽa/#ŽjG•—£y8íMŒ-ý«IŒ>„®�ÒýÆI¿f2¶‹¦3~ÎÓuÅ©’wPÀ«‚>Ì›·˜˜¿�]AmeÓŠ(r£±™×1_çK1“\­‰ y=¦ãr‚nØCæ7Ð>‰Š!)€#K‡~‚@â–`…"s&²2Gd¸É�þ�+º�ð¯”òœ +ŸYz½°¿‚,� NAð¹:Ý®P�}9¿Æ`cL¦qèVÓ¡&—¢Q¤Ømìä9ÆèÈ*ŸÝ ¸Y1œß21j¶ ×–‚gs1Ëô°âñ{¤Æ@ +Õ¼’õèrrY½zn ÛQ |[«ÿì¨owg«HÍùÆã†{vºÂ6Ë“pÛKÖ‘-Ÿ`²{–µZ*º¨HÉɱ5pRØ3äü½-˜Œa¢ ’3|pà"�’YE-4�<�†oP“3�R�>ÒÚÏ:QÀ/Ì‹“RŽ˜8mÓ»+ä¢ Ð߯?E;‘�®É„�âÅ*®ÀÞòÐ�Ve†´æ;à’ÇÊt£uÇ”ŸgdÖÇ&gÁ= 4ºj6BF¸�,8&˜Úe6(é¨ayÖbƒF…ª¾]‡«o·Õ±%{n‹˜Ë‰ù²Ø·ãMmédí/cÑñR•ÆWEýAšËuâ!žk¶lß;GFKA"rÍé³ÜB%�!d`ƒ[™b'’#ìÃê ˜ —zS‡•:˜¦Øªt¥îèì›M¬¬úÃ@]ÑëÌà¬;·šVÉ=*°ná·ÂX“{o’{à ’ÒŠ+|Êí®`ÇËÏêœÞ]©uHžj°÷>LƤ|yòtõß0ã¾+ËïÑYèvm+²ê«/|ßEà �s*bsüç ðk_YšŠ+õ¶`8E·2—6ï‘Æ‹dTÑ�0_O÷‰—¸¦žºÍSéŒg‰rZ™ËÝ)¾‹€Ržj•„±#Ñ�ß„ö½M,ÀÎdŽe“ÃFûÊi'aê'ÊUXÄÛ ªefѸíPX>hh¹ÿðÄÆšš7ÿŒË¶ÃtpVXr„þœ„ŽÉEÈW�ë"ßMh3w‰Œ$4¤í”Í0�nþþDâÙŽ}>á4¢fm#Åþ.�‹¡.|B«KAc¤!’Ó«oT6(|)ó&Œ–Tˆ·Ér)÷ŽK½úE”Áq9ÝP?ˆçþ(r›eξÈY£.ñ&~îËŠÏM —Ž’0¯KjVÑôW¬í0u$àu Ÿ÷uÀ”Y»|�ä[˜fvÀïb…^&<³ŽaRãÝiûOg˜.ƒ6h#<ÎË-ÔÊEÝ*>—#f Ü_|cëÎE©5³CÑŽ¢^ 3º³˜Î]b}‚¾MðTj0ŸË@æH­ÝÖ ŽpÌ”åäSïî@–yÉXAäF8^ÝÊ?|K@lâL‰DÁÆS)L1¸#·\Q]X(ǽ’á¯÷hfÑ÷“ìýS!Úv§kM–í?è�E�hÚ£ûšÙ²Ëྡ?çæPªÆ³Â¿¾8±ædë†/Á®„š@c9õ>? øŠ¶AÖ¼]±gÈzÙêØ!MŒBv¿Þœ"²ó³È!“Çàã—Ðì,‰˜Û§A`kùiòL»‰<×—rz^¿YiýX†ÄƒãBéÍ-¤ß¸ãDU¥Õå@\�n‰Ñˆà(º¼�ih‡™S'ºKÄqzp‡ ì£@žï¼ƒ +¯éˆ¶CÇoßû±õÀE7B„¿Sñ-í®&#Û1c{ÿ,`uWIò.¶“£ÈV|nÔ·s†ßo5z»[HtÎ<¡’áËÆãy�“t:bû¤+Ä=·•^ +E‹Ø¢ê¼û¹ëòé¨Çïs�Á´íBüÍI¨_$”ò‡"ÛAç�›¥B0É0üüñCö$g£eðåh‹w”! #¢eÿT« Cêg®…AÓJEŽPïÏø&½ÿióGÌ>I�Á�þòêAÌæLÌ#ìêËìuÑ…z–Ú¯ìGŸ&O _pÒ7ÊîS»xk~F6`î2³·®ŸDôüš?‡ƒ“±íT‡ÖØ3Ú‰9mM»mV†ÁÚ ¦r[Þ×3lÊCË–ÅÎ01>˜zžèáHÍÉT–x �hé g3n¹Q‹Ôñ¨/Êc üÖC'&¿Xí‹ä÷n×ñ‘—çþ×í€eòœ|?}»îí|»׊±j§\hu|ÿ½Åâª,„Õ×ï…± ó±u§émÈ) .ûä×'Y’'B+ô›$Æ c c¸�ŒfgÀ E9ø)ÚS¹ OÃ/ÝÎð‘ö�óPaWÄ/@PE\‚ù\D+˜ˆ™ØèVÕ£ Ý7<“Ûûš4+õ UÔLÜÄ3† 9‡‰.B±Ðäá󌥰�Ê¡A¨F*lÈ �Æ3."®ê.EŸa‚�(äŸyÞ¦¯³ŒÁ¿n¡p²œƒõ‰鈜=CCÐz_>Ç8\a¿ Ú„Yj*ÖG8Û±.àyñmM‹#ºê:DP|Õ2–¥Û7 .h"ºôa—mþÀk`?�íPÙÎ[ôs¯¼eÈ©ø9#»†–CÀñyñWuÉJÔó÷\±ë�z]du]lAîð�C¾é ¿ä)FT·ªK²,Wu¹A€ uñ–3ý‰²9&EzÜ¿cG‰Ì[Dªê2èª.Ä €ÁÎtOô[W f„«´A—&,{è”4°ÆUlfg°Æv^»ÎnÛ( +þ·Ê õ£ØLm éEç�W]H™¯Á™@l™H�ßïÞ5|ôåDH°êºqDK¡~Á‰€Z€#ÉÕuÙø9}<™@Í›kªK·äåHfǾæw�UèÊ.×Ⱥ‰1h÷×4cѨ ®º®shïçªKÇÎVÄídu¹w7•Ú®(VâîæXöÑêºIùÑnÚê²33ii"«kUlªX]–ñܢз³ºÐh«w¯p°º"ßž�î‡ÂX]ZÝ]w._uõA[vw%qÕÕ8tIêê;�^·I]Ë0˜�Q—ªû†ª8ŽÓQ›Œ|æ�z¶›n˜óû‚Ä×_êÚ§ J¬ㄺ(Œx¼qÞùAVÒM|J•Ö!=ÔŒ²%4[!Ûd»9ÀG»Ò]œÛ-¯h£@Ý. ðVùN]!”A +H¾Õnå’ÇX{,4Ú¦Ë×–¶Ñt!ëíst‘éBMå8Vé”$’7)¿{¸àPß^‡›«É€çÝ)šâÁ¸G®Å hâ3T¥–.ìÕXºzOK·yQéÒÞóm]$h¥Ëu€!*]мCl€]éÚÅ:WÚÖ�Ò¥‘ÌŒ„ˆÒåsæ?Ñv'J—Ç»�‰iÒÕŸ‰öp�I×Âk€yøïyÒÕ§;ðýa6é +C�” ¤ÆÈâí8 47c«FHºü$û¼ö4qNã”\¤K¨ÙaTU²ãÂRV§6Æ9ËeF4Ò Ö"]!v‡SÅH×­AƒŸÇLƒ�.Då™0!®©M?ºvg7‘œ µÀÑåÑ=•NL£‹l Ï}Slt­ =J(;Ð4º.QÍaµ lèô¤�™Ñõ< ŸF×Ý‚Ðk¼ÈŒ®Þ½@jOF +È}ÏŒþ‘Ñõ6M,†p´.²Ñu×ÝTÆàÛèZÆÃÖë fÑèr–5G‰“ÅÄÜÎ@†]HŽP·@«¡Ñ¥äSZ"t¼Ñ>2XpZ¸îvˆ•;*(dtéÉ"¤šç{qÏè +-¥ðÅÞ�]–ÿæR€Ç_˜Dn�º�Î3)ºé\®£³|p›3Y:Î{~�ïânäçÉyoŠ®XðQ_.ö)�Óâ .¬ãêÿQKÑEäZ}½ž> +]ÄɈß1fm¯èrmòÆÍ„謢˕¤}ŽˆŽ*ºìªZÎ$§m9_å°[mxMÓ†­{ÑÍÌUÓ…eE+Ç7Tá6³&ò½…C†–Èo+îgPõÿM†®)R7%v(î„ÜD:Ïltå¦Äóyß/­VLÆ5Œ&ZçBˆäˆ¾Ëô%Õê£Rn‹;¤\ve¡“Rq†˜;¤éW/•~3)Æb.�TÓ §lîù£EøÉ +\ÀafyÅ}eø�HŒr… \s·†„††—ÅÒˆ÷H‰Eì+·ÕV1Öl¨eDF"þãjĘæëÚçƒ+Âq¤T¨OQ‘žÐ¨ÙöD¤Ÿ”^„ŸDOµWÂ¥r†ÆŽ²-Kª"ñø1Î�Š+Ó{ åã÷ØØ—I0süûù sˆrå« ¡ur¼ +6W:ØÔ…ÊRòç›ú”—çFõÖt‡,œyZUüÉÃ/èÍ9Ëp–ä_Ô?™©‹á(F¸'"Cøeþ’é§—×ûæhL°ÐáhYô §óÑ—ôÏp0H…>ÀÚ# Dø†l”8]X3±õ7¬”>’Aœ.à²åWÝ`Á?o0TÝËÀåÄŒ«é°"! Üùk~ït‚8äc¥ CA™yÞ>—ºôJªùƒjÚðÜãR•ÎÇ!ÇÍÞ¸/un1ó½ÿwã�„Gâ«díÖ—.gšº�ß Q.>¶•󻎎8“ŽÖa +LãÔÈ�zèÓU]ñ–s¥.¡×ðJ¾¢0¶/¶‰_©Ë¾|É| g]ø ï�ÖQL� ×ÍäüÂ?±µ„f‹©1v–ó]+íf>^E a�;n)UbÔèfd×ëCÝP˜Ôå¸Â Æ`•AzÌ#(mZNé\à`ê�Óâ�A¾UŽÄÅ^@f#’EÀR±Ù‡úw>žzÿE‡п7·Pݹü—™£ÓÙÝ_ϢˎQ�G­s¯×�)óc|ÑeÖ9R‡;É„�ûÖ/•©¯Nöé£p˜^%”VQ[‚5›~n¼šùñ"ZÓK‰nusùeô=¥¹Ò¨%öý]Jr �µ¶ôeIÚ—û\Á­¯xS»Ne_ªfºO)ÇJUèåä¢[çX§ÚòЀIh[8œ£Ž-ÊÁ‡mùsÄÊOf(�V‚$¹‚=]3vs“…íÅHw]˜w¿#m‹¦„ÏÑG–êpnCAö bU³�¤GLVb®çéJ<'‡,…9°-à·D¿È[䱂£Ô\*~ ß8€®çh¼€È÷ìü¸ÂQJÛÚGo³îÐ@OTÚÙ$(É™:†cªE—+!_cx�ßxý‰EŽÚÉgË1…ÊaÛ@™¨÷·p×cì—“ü)¦AÕ �MÅîìX‹£~Õp ‘9E{Ûšñ}Æ”k•‚Nµá¢Á 0‘îp(«Þ-ÆÝ,ÀæDŒ6”ŒGâél³–Â~Àš;G;�¨i�‡Z”¶wwf€ÒîèÈå$–a&9€(¶´ +Œ„\|Úf#ÙU;¥Êá¯Ëª6:£z¢SéCÈÙï>°¶±Ð¼n�›¾ày*õå�·­þ1Dijs¡€F8…ûU–Ñü[îdZ<§�ˆ�Rüž<'w«+´©pRÁ�@F>6¦j³úá7û°+I™'ô?”0Î!0`ŽÓM*Ñ"rôï(…¶y©�zCXÛ%odðŒ!Êáyr?¯R{½ ¯Ö…$z(·h´„4qš ½X³Ðlwu½‚Bm°t¤�”ÙМ�‰¶}2áÒk|˜©h?ù&"�å–×`Ș߸qi”_T`�‚x‘ŒVz椫?ðwm Z™+±‰¢g"�ÏÞ‘_]‰œ¯Ñ‘3iÓnd­À¨RÔŽþAÖnò+H6AÿŠDÑÈ ùŒ<Ÿ�1ˆÄÆÛü¶Aß™/:ÂvrÙçè’E¸© z“J;ñ¯…  �b²:¾ÍœS|ùmšhœ° èå&~[^?’AYÝÅíÉIâ¥lñ9„l!œ­åW™UCÔ|õy¹ ù*ó lFLZcLÛEF:Ó�’¹.:nX¾Šîn‹Î$«¸Ögˆõ²Û'Ä[ª(\2# åØÇéË–7T‚jÓâÞ¡iæžJ0¿pÒ¨Ç{•âÞ œ”u5‰¬Ô©X†?°%v+"|IP¤Ó_Ï/)£KÖö’Gà‘°×Þ;,NC‚†ÝåŠo‘Ö¡-°1(p'rã.:;u¡ +„žè_$A„&å¥�#èA•‰P&Ë&¢�ìã¼xh;/}Åó`£âÝ|Ç‹{!šÛl¾RdÈÍ”¹ïÜHT!+Ì;›Ç?=š€ðO=3-Á`ÃhÜ™a¦'C£™¿90åthÞ˜añúï„&v\Nf°F˜!ßVtãITÜÜúÀÖxÙa[ÛEa|™+G)]3Þ4Q ¬â$RŒ¢Ì³È2>ÎÝ�TáÜ\Or-ÖMÚ/4Õ¤ )Ä8³."Àk6qK¦¸Óo_ìí5c)ÖWÛ™±)rߟ®[;qÁÈ ywÖ™�ä9 J! +úm�ô¯�2¡#R=ÆlôÙ€ŸÀÿG…™ûYsÞý¸íä:tü!¥(òGZ~û“h6~GˆÞ +Þ%kü2h-„]N¾–HiÏÁ þ€AY3¦›Ê¥7á®ÜÔÐM”džÍbÐÜ”x÷ÊØèÂ4Ñí ×Û/‰&Å` +ãäO¸br±ß'G öûn bÁšO#­_‹Ö¯ó%qz£„B€8\�Q+EY|AYëéÊQxÓ(Ö#ÊÛ¤êªÕ¦Ç2 £ R°ællÁL[ú7MF0§›û¯²dN3‡xÔSzÆ9Ö§µ‘-*€=ö:Ä1ÎÒšò®Iǰƒ%.´Þ2Q9"Û¥hcbÎ+˶^šÔí7Rô¦9#"¥Ì_p«åp¶À|©úy4å&œú�®U5�ª¶’~Ü‹ñ5 „ziÑ ¿�ÞxšufÂòz*F©µ tRÆÊ5y†¸Áê�kì vß™O¥˜­`¢ ›m=÷&³¼Ó:OñªÄ®GsI!ųlôк»à¬zÔÎk¸b€Bt5²ÅM!¬±\ —Wõ²OlŒî±±­^nQ(“´úµ�ÌÉåÈvPû Š»šÏ »Š JÊŸ„Uæ `¥rÞÕ ,E¤8SëcQ.Ö¡£t¦³³×b§i©Ô +GÕ`OâEoÔ¢‘ræµK¯±Åä>?�‚�AÇß=øí“œÒ +’qÄûš–ººÈvŒw#M�rûB5œadÎCy±T‹öß @·Lí£†Žò` „A â™§Â1‚JËŒ<sÄÇG™»Û ɵ› ´¿ÆÿÜÕ¼øNˆé)y™ÖÖ2Ì;^ËY”ü8Fü7®üþEõÕ§”*¦Ek¾¯¾Ïi*ñ§+hî±”™¼ÖÅè ~ýÍÇèçkшdT=¹P&$n”0Új!¾Q‹2ÜYþqFòË!ò–á«¢ÉÍ24)ØS†Sg™Ù¥‰æ-_CiÕNÙ�À¦ßÌPò¤¬ciº4 ·‰· {Ó+y^’¼ŽÅ—È!!øËˆ5£·E�1A±¤z¹U˜åÕ!CŸéqâ�äuËÑe�øøá%j+Wšáfõ,qïHc΀/:£}óôÚhe-�•ŸèíBêÂõ‰!ä }³3HïŽÐô�CÃŲ¬uyÈ0}—%o&ëáß¿ÌÚÀ¸Ø5KÔí¦ 3bb .>¨CsÞ„cõGD׬µkßÏI�m’~@+'£¦ÇÝââ=ûÓEÝÁëT3ûÊETÿ =�@rÃòôvsUÚê©?Mü'øt™i +üUÅ~Iá$ðijÅ(��Ëeƒ˜¢ž¿aƒåÓå(¸\yjåoóéò¸‰{üç–NŸÛñ�ì*Æ3q‚t?ªÛà�ù§X¡.³Æ‹|´Û˜EËÇ-‘±!9°Ûσ‰á'í˜Ì§×.ÛZù=]¼«F8Àu�·¶o¨uC©ÿ´-ç—.ybë‚pSà{å<É�$r{¢hÅô9ï™…´'¦´ñ©ú8 ¯,kŠ�bÜYÙ;]®"º1²¼Á)Na]N`o=—.… �íN—èbˆq‰¸Ñ#NÚö)°;ªOЊpÛú’iÇr±Õ×£üW‘ªBÄÏ)Ò‘9¤�qÚ×½¥KÆV:J– »è¨ œ¡ÏHÌ(¨¤Û(´èÚ~pÝ£àð‡ÏÈìà˜N±V?5Û¬ÑßÚ¾ú b�þïÆcKøßN]lÚìfc�Ô%`k:”'Ï� A’xÒkkß&× +“g§€{¦C1û‚,(FßÅñ¨Bë¡Ì àšs{ÜD›ªkü7œÒ: ƒ(àuè`I¯ÔkÊbÂo8•3øù€MƒJïbŠªÎ(¤èl›šÙY0(ÊžE/ªq‚Br(„}ƆwjsŸZ„å[,Ú/²„±Ö\Žø¥dáÙjøc_üšzáâ²ó$J� kÁ—blyç··fÀ¿ò‹·³¼$©@ß>›i½ p¨y*Ýë -iCà»öiOË-œÜ#��^{Ä�ŸØqæ*PƒqÖµVÔ;ÿ‘�hš±óYy©`O[D£+käB`¡òßD¦,Üî¡ËÑÿ0´’HDÛÑ•�i qü¾€&æ 0öTv†¢ub�û#@ÑW¯DV›‹‰è›O"²e;s· m®‰Ý¦.Ós¸…a¥êÄ0s‹§‰^Íè*(G¥é€ÕöeXQZt«j€¶)=êN $ô-™n7JIÚ÷½ù©U`6n Œ`ÿƒusNñù¨žÁ’:ËtVî£=3'˜0¾®¶A_¤@ß=z]#�í-Cž£-¥]�úõ,§*Û‰Z•2ÖŸLØ'6ÕM§i†tpÅÀñ?–1yl*+ã{†Ø¿<7¥’Š=Ïõü€q¤Öv9†é4]�¼%NSØCêW«iø?Õ¸ ݧoE¢XAŸ$d–JSb�˜Ÿ×­� §yì‘‚ G‹pB,››€Æ€F²oz•Õí"ÃGfn¥üeè_Œ´=XåÚrﮇY3´¦&w¨§8f+2¿0Û4¨•6aÔ«œñùõþúކb»ÌhJ�&æoãV™I@ñ[‰'˜¬²£¡ìÒ🤠\ôü&øÛ¯êuvÁÀyÞKP…\Ó®(=M�Y´m̉ы3cÔŸå Y/6ÉH¸ö¶ýó¬Ùã­’9 _µ¯Êp“á‹~^øsƒ8€(ü5!ú #Qr¹ì‡™±Æ´™—K—¾]’ ~�kULi.s¢ô&ßË׈Ӌ;î·&9ˆ¨®Û(3{òE‘îùÖãða$y݆�w—uÖ'æ£3zxé1Êpfab?Z°:$D£ô†!Ö*Yòšˆý{–߯ +F\˜Y Jˆš(I[ÁçH?0Ö–€êª…Œ]Gü—ÉÌHLß¡¬Ÿt¨­UÔG]×9}–/ЦdŠO,¹ð³ð¼x ¡šØ»—lŸ0¢RV 8DÉ:kÿ˜ËÕõ´z­Ýð ¡á;A¬F8¶rqLÓX †æ_E7mD�e¬%\Ó,"A]]²ù‰ `p›"’ È¡¶Ã7[¹£…ÿ¸^v>xÄ%Ü©RQëÍuµ¯:J¯Q®…¶‹S C\®8[h£‹Î¸GXä­CêáJ´š’[ê²õvÆœÊ] V[÷4Ü ,Ù@Bt�ØP7EÏwØ"¦w9Zm5Xp¬ +ù¢ èÈCßµ¦¹_á¬!hÃîÉä`»t¿päÊì-Z±Ú¼Ú«˜Èìfaí"Ðj¥0NË˪ÃQ”±[*îÑ”:'i4n\Bꊣåù �=HÉæTI>Ðù¬b¸¥è!ÆqÜœ@h³^ F)q›æ1Åb»EÚ+ë°:²9D–)V?i�–xŸjà!úÒaf¸Þæ¥x{Ó4dÚÝ¿^ÏâaðŠYgvzØ*ql¢0Å–q�¿U׿­ðA—MÜçÇ_AÞd\δAj²Qb$©7–¬‘ßQªñ„ϽƒŽy6°(7›FPÆzB QJÔ3Üé.9ƒ+¶ªLúê"粟LÆw-:¢ö±›ì¶ãk{®ÀH‚s‡AÒwKƒ®pK&®“2¹äšÏº;gØ+Ÿt/~1bå.�#†Ÿ¥ Á‘ÓöæòŒ/$>¶«=ެ—Äð›ß~(¸ ä¾ü^�D¹ _S­Ë‹Û=ýë ÚL“¼›·Q/X|QΙ¸5¹#û­€O¥ rWa‚cƒ ‚î ¥ÞöTD§¼‹Ãzñ$‰z翵-ë�G)*vld­Ží®ÂÁŠ?¤°½é£ºÚeô*€~ +¸R»«§Ð-ýZ¨úK¶>­êQm‚-¡Ñ.Ë(: +œ +Šd¥²yJ°­4eª×õq�6ú[Gg(î®ÿY3 Çӣ…²˜:ql$–\:cõT«¢NÊ7Ö¦+p~²IOS_Sgào·[¼Sªµ€î3ächŽX†¼õ°…;knq²¡PÈq^ß�ªŠø¤ °$ŽÆ…ÿ-½ºv©òFëÂóPÝ÷†¿ðµˆ|-Ò`8lÇ¡H¼+ÀðcNU†Kdó˹` O>$I ½üë8|àvÈcB؇¬®9�µÌˆ 'KSÝ}„вÂw쮆7Pu˜„H`øy_0ªà�}%ß( ‡½n‰µ÷u‡gàª-ûÞP|ãîä^˜­Íü’Ã/ГØºY{0ÅN–Ršu kFõh½éHB60œ2-ç3>×cÌð‚ìzÂbÙdÀd÷ºmç!Àp¨Ó·XôÊ�á¼&X=XiÀð` +óa`8Âí^¶cî‚á«g•¡¬œ`¸˜½rÀ…Bc2ëu/Á‚á\þ–¾M°òú /ýÒsF†v¥±§5ýç/Fv5ˆ¹ª¼?ýйÔSV-Ö¦ëZŒÀ𚥄yD$0ˆÃù©®•!a* �ܯ¨­¥'ò[7vÅɳ"£ó5'pn—dbZ­Ñý–00¯öÙ1W±¶ˆ.—Ã}¢ºúr0Æ$÷’C”À3‚Ñ©ÌKlܬê[É]ÛÚ1>³b ñM”èDJá%ÉÎÖùÛ�Úcœa0|KkLµÃAÖ(ÑÜü¢2S åã­Íê›`¸îë'êÉæ0š&ó`ø,Ö.Ú¬ÆO r<�_0k¼Ö¿•Õ*‡ù׆žÃO�æ„”$÷˜½wïå`¸”]r7Ü ¯O±­ Ð×'ˆúíÙ÷V>;`8ù³ŸÔ†?0–l8ÃKŠq¯ KC ýã±ÅgÁêˆ)Xè—cX=7$ +àu¸-Ö-Ã)˜_�"H„i9¢¤Š †ƒ;â5×\Ø‚á.Ëäâ €ƒá±Ï‹03¹öÙ¤û/Œ°$èÁœÞ&RÁpÒØC ê—Ú`xyiùp‡™„íîÀÅ`x«²âoјKö÷ªÿ[#äé‡W �Ÿ¦•¯�Níï»Å‚¤Ð®¹²$¯¾UsÆß 0|ÁiÊÞ–ÅG|ÏÍ×ïùÆ$vYÀ†ÕP ao¸&˜¾*‡°`CFzáÚ~3.WPéÜR>´G7ê‚á¬jo/™»AÍž×Ò]ÃAd–ß‹î[ºŸíyAeëedé¢l#H=ÿ;t;íšÅ\UÊ€×$ôÃõXÉmFGõ/a }˜QYJIÒØû›¿?#[F d±ÉÞA ( üÒÕß¾—`dÞ´ 6*ξ^Ç~s¢ÏGƒ³ÊS]ÔR£=àÿ‚P†GtÏëTð  :¨=çÅðEÖèBÑ€<2XaÀY¦ýjÉê,säVÛh§-R4¶¥#o@ F„ú>ÈÓ½�{ÒdÐ'O¸8 É+›Ã%p2ðÛV¾,v{jï�‘ŠüÀ¨ÍXMËuscݦßXƒ»ÌBo�`óµm7å1_NrTtH(åOZ¹Ø7¡a“€ò0ÀûžÐWû„éör´.´g²–“‹’ >Q|F¤pMBßB&ìR¤ÈÅúŽ®M@à=¿¬hƉ+¿÷8£Ø�vDyЛ’Ç9i�©èÎç@�RÑN"–¯Ù€a¤µAÌxrw�›ˆÁGâ¯Ð)–1—@ÈáGÆ»ÆIÙÀP÷zHÆ$?ð{P:J̾ ¬I� ˜°Ò•’Ùcš´NrÛOÊ¡ÐÌ#®®¬@;É7NÙƒiw¢¦Ú¶(×”ºV^ÿAX†'²f@Ì“»ìI\¾òŒóÏë²(Ø\KÒ¿�F% ¤?6üunÍ�vHLÛ¥Æ%m®3o hœ¿J½]äW ˜MéjQ†„ßkLÕ�¥"¾$oU÷DŸfLèª-?­¨oPÀšDk+›I ¡ÑÅ�žÚFÉ=!¹2«—^÷-|—†ôaØô�Ý +v ѽrËÇ "Š9}s9Æ®½?Ž)ƒÉu/Ÿ$Ù¬,VZxy÷Ðëù‚6Fáv\7ú`h‡Ñl«RHI6ëÀ:$¼«ÂÐ^BÌr²Ý?šWDÿ )§7Ipi<ÏXx! ¯Å^Ro…ÐtÂj¨a͵D6d½£€/6Ìí¢A¬)î-ñå߆@[‡Í±ecŽjì–üÃÔ=È�kï‚>Øx—”Õ«×u€´8žÕ��ìÒóG\S¾xýÈ ÏA�Éïž~fC^â„n–\þµš.­”hlûâ™}<·P3ÚJG'©;³å;!Ö®BÉR`S0ݪ'›×9îãHîùúÎyœ(Fy·}w,'rp÷КCh¤Ë¿Ì +¯ðÙ£C§}ÆŸ‚`§FïfKötñ ·sAÁÝ&ÇЧc™YüƒO™�)Ôû id-$‘ï‚Ì.§Å‡×Ó¯cÒMm+W›aù]æu›XdHSÛ4Ú0¨XÖþ *•´Û‘€Ú¬´&š 0†�.å“CÒs!q ,}{5’HÓÊ~]kgÈ\çíÓpÚµ�Y�÷( F]å@Êø¶¾¦¼Æ‹yØy†äâåÁ»‘T!BýÍ©Û0J‡zÞ^ÑXX”Lé_‡}#M“”7Š72Ñc{Þ{#Ï&]8Ø…n¤§š\ Ûa72!¢…•¸õ–U:õÁ1¸‘qŒ¨YEOÆ€¿ÙzÇšÉS‡€Fr¬Åt[àÅD9e°n$–Îh\8»‘ôŬZ‘æÓlä�àFþuËúëos#™´|þv#™µl +,庛˜*R~#+lq!z&0pî�« òF‚‡»dØÁn¤ÊÑ-a­+7’.U$^”ùo$°WX‰à{"†‰ ä¢»zØ�õzdàÂY?9õ×Ä\›_áæ‘Ë.,¾h�•É’§ ¹‘”ú�ê‡!0ú�¤�§+ë=¼‘R0‹`çƒ7’ ã+†ù<9}@î²p#³f‚íï°Ì�WïdÁ¹×�¬~ûGå=îFN+ +$ØiÆ´‘ÿ�|†ºu£Ý�x#C¬JÅ·–7RþDU+Æn±¯C�Z‚]Ι]ªPy/Zodþb‹Û®·7RCk$oÚ›É�,Ï|ï¼ÅëÓ�ÔÊ/½½ËãÞÈ:iÑÎ +v-�ø‚ºXè(-�3Tm�Þ c*ifÍþÿ0ÆABœ÷Jx`Ý�Òpš}«‹×žñ¡ˆÖ”ãys±a‚N¸ôÿÏutŠT-ÄNÁ(ïä¾àlyת„áX¦ïYo�TÖ¬+SþT³ûð±Ígnž9–›õB(×ÜSØý@j}õ¾Ò Øk騸{¹Ëmòµˆubïå¡vSç|*ÙÛ¢–MáÙÙ‡¦'í.�ñÇ[À-†"õ˜"7mOŽ:&{…�䊆{‚¨Ô +H‚g_ƒ°¦û!/uª·5ÝÞP�Øf©qpú‰ìôž£ÅIÖn  á`¥(Öý£†eŸŠÓ¢ —óö,]KJ)rž×Ïv*‚Š@ç*üaó&¸g^4/!ûê$[yŸK>=¸ƒ‡\9 ‚yˆc/Ÿ䄺šy Ußîzz}e[€¨ù=bLt „Ë5ýûæûû¹ÏèãZ~ ýÃ3¡‚ºf,½ZÕÖß>Nqmc4–J{0dl ãñ£d�Æ0ú¥õB>ØŒ”9Pd£1n€µëBHèê1‹[{ør4¶DâÙ¬Îß_}G!“ ·�ã§é�mÇêP³ÊBc,ËÎ ëhÌmõ‰nXâ|Õ³ÎèÄfqR²îȲ©@ +6‚?ÔĄ7…^9j�Ý>ÿ$@+ƒ Éš�Æ,µ­F~³Â ÂÆhL^µ”0zÐOÕÖÑ @cZ‚ÈͽP]»îzÀ†ñAc¤Uó€ ú�Wi‰Æ>’ÑƒÉ ÐX(P|Žò �Í© Çs‘‡�ƲSH³ �érD�;Èß*ØeºñâªÐØaAƒi”¸hÌeÚ²ÐôZCc’Ÿ4”‘HfyðpN•¾ +ߢ×%¼kјA´‹‹³éÍœ|Õ{[<À2XD¾�QàÕt*ÈEc.¬›dÙ4¶| +ÀÓSß¡Q‘ÅêVŒæ%[3í"£C4IÜu«Æpx™ýª¤Wd4Fç‡îÿÛjÆþüš+o"46F)ÞS‚â +��ÔúljÀ�™ÔæÕ³‡¿IN1 1AEþ C}1ijˆÆxš¸¬© ¡Þ3’Cc[š±»&ë:³Þy>"°Ll?Ecš :Ë5ÐXøÏÕά8¹Ìyd<4&µ“H¨HêhLD™Õì-ª;4&ëˆ^ +ï}ÍÉ­�Þbƒw¿Á¾R·nÀ /Šˆ'ß— ý½Rú~XoCQquÐÎ[ÓmLTLhÌ! +ArkݳØä »ƺ¹¡±g¨®K2û*M]Â]o¥ (†Z4攉É.ÊA?hÌ(f¸ +_½§hÌ´Ä¢¸xº>hL‹h¦Œmep‡ÜR±f—nO4±ƒö‡Æ7îhì´;ï›h…f˜Ï«P¢1欴A«�yÕvyO”Ò—„ËJ¸›büØþV tÏp+¯�½Êš +;=�F4–’ª+AŸ;{4Æþz=#HSsa“úüb41…Иƒýñt&h Lo3sÝ<Иzi8*¦æßÜËXrà‘™¨p4Öudn‘†‚•hŒÂÓ£°Äls"cú†'Ëa€»âu’en¢ +¡š~¸™Í�ÂôŠâG0û)@ÏÙaÚÛ±~C™zC|i®B­¥¤/”×$©wVæÃѽë,p4·ÈÞx„ Ñc¬åõà äØB46žw¼Ó»{£1› e]�>¢±Î‘µÈÔû0Ë\ìa�ÂðCcóuÙ1-‹ÆÔ4xÚœ™a«ß}‚O¼FÝÅê§!.>µ@cý‡–¯^¿wêÚ:Y¨¼ÐX>ŠÏ  +K’ +u÷aÖJ39S$“¸À¯ê¹¹¹¥`Þ-‹ÖèW<¯s^Ò«›™ÙÍ•ú¤–Cß÷ì´×�Õ7 É9ÓÕ ê`]+Ô!ž¨¹�C|u@¾Í3TD+¯µxd-Ò´e«]Íb•V<¦mý©0Hu´ÉT‹õr¿:ˆž“âbb¤�ÁBH6üNˆú\üU•pP…þÁØBI +Õ³�ˆõ~,ÒM¸ +V&<½Èó³_ˆ. ÙÁH²Ì{}l§¨,’9Õ#=ÔÙ£ûelûouÀprÀ7åDu ®Ñ> +ˆR^$Ñï¥ï#„©ÂiÕ“¯V’>»�Ml³ŠgF/¿œçê`ý´DÕ‹º±-§¶Ž§=RyÇ|×·ÆúT(uu°G%#!®‰«[5b(᪃g6R™­Qç ÷//Þªƒ†\h¯§ê0Šçs—%<±l•c‰­¢DÐV(øge¥ &Li“�žÀ<ÕýÖ‹¯tÎÌ&’¢x} ÎÕ�¾²®z•nfÕA›d�$Òå²:øe†8Ùs�¬rL7V¾µoMh;±âPˆê`0@JwO«ƒ·}¯`B#S¤Ä8U¹�{-M–ö‹ Y�³“Õ¤±Cy¼á¶Ï¹ l¬œ ® ßLoFw˶y«(Ä_&ìwHu�qwÊ$ubebýqEÛÀ\™¶ê€4pVU„ƒ¬ª‡kÅݪ™›ƒð6ðj÷L9ÄFÞ�6€‚!HH&Øë$qm +̳%1 ‹ð8TÌ`%4·±ªƒÉ@"¦âg·Qì ¶LÄíEÎï­ˆf Q5í¸çx_ÙA(ÍmçŠÿO á‰&Û߉M�0-×>Ò +—ù +áç1¼·ŸšÐt n@C/ör­ï<Šá)VÚñχ…Ú3ÃH¬êšÐ¨~"N3³l(¤²Ì?n:“6B1\º†½ÄçERrY²‰|Å@8µ˜ïABX¤…3cž(€åúVdƒµ(ÊúžÅ Ìà,$q�Å`<· òÝׇ€P•Á”«â¥­c¼�°#qzò¾äþhËì±Sî¬YÄòv¼bÐG,¦-�8—ø-I§âØ™ ÀËŵÉlQ ƒUÄ1œÜº“ŠˆüGωtÒ+%@ïR$#$ä—­¾¤�Ÿ®í Œ¤Š”á)�‘:ïÜ©or¼G´u“]¬éJéÝD[2Bÿ2 VdÄ ÒÊ�tßliIùß @y5»#ÅÊ žx\0iX¼F`Ú\ôÚ]šÕjQ p„ +|x!ò[˜Èþv·S–GƒfR”³-{Ý�¢Ê…%¶D´� ld‡5–§¢3ìSÊòú%<8Tyrê‰6Ò@ëeEßó]´�º˜MÑŽB{ûçÊ\ µWgv”õãbó¥ó£ð ìNøBð†Î-6á–�›Q½-~3";1_€ë€ +F–úl§ˆ¹¿ðs�ZÏ”_@<2Ž”¹3EPt/µ²ù«y ô?¶ &SÙ '#‰Ð .ðƒ!Eƒ·%wÞF`Ô~DçJI�‚SRs%�Š@oTM«ªPî\hå–ƒ„Š šº)\è[60Gäa›«M¨ñèD` 2˼^zwÐÔpg5Ãqòd�ƒ +郘3Mgõá"£x7Mü‰êþ ¦íæÌ¾ƒKR =Ñ•�ÑüN#íßjÔzy0ZÌÔWõò˜é…"4xV¾W€¡/�aAзó'±cw�X"Ïg#Žñ\Õ´#…¤=¥Ã½fàüãIN‡„ë-ʉ�+° £‘»5çDœÞS.ªN¦²­47Fß\û wÁx�;ÚƒÜT1tiÕP!øš¶.ŽÜDÚ e‹f†X× >a‚aSZŽc½îÑÆ¯¶6zh&%LñiC°œûŒTåÙþڤœU¥¾4Ɖ´?Áq¶�¡ø�¨–q ÍÒøú;ÂfÞŠ˜S¶…Æ8‹K^²ƒ „JÂÃó5"ŒE´T™k§;”¸Ä¨Öâ}^u÷â+ r¨Lq”ëF�Ÿv„Fd$¦#•cKMAÓú»*/Þ¶pL1èßaôÁc`Ë’b•õsåÉ»/¯�¨YPËf`ìwÚÐûI]›T,!!z±hXÓ¥ò˜&Ò OÜZµˆt‡•÷¢Š¯,×�ŽÞZ»H¸Ûʹ’}•5iR¾ Àcî|•ÒV;•ü»3ñ_Æ–»H`†ãúâGkz¥D)¹VtÂnuÚnM£Ð!¿ëKH¥í`,˜¡ +šÙq¶Ûj]p?¥ n³é%¡Æ4AwG=&|)®ò‘±˜GçI ‰›j5ãF´œÈ§w�RÃ- /8¥Ö’“ã±`ìNÕ×F1• Ü,}:€v&žXÙúÓ‡§û;Þµ^EÃ3–³¿lvÀ8;"´qkkëƒÒ7W¨o"=ߣ<$—öƒiäþ³½?ÁdßAbXÁFŠ–)uŽ$É +XJWfÕ~µ£ˆ6¨lƒ6.#ø÷âó‡“$ÙÆÈñÉ9O“)R81oPÍ áàÈâ�¾,—ú>à6k…µÞ—•Œ0ÜýËÏ×±‰ÄŒ�!…%ºá­ñ +’Å8:¬gom H' —ûk¶¥3ál1^quî-.­¥)pnÅgiqjûmT®gç¨éÕlu©#¬Òþ\õXÏ�Þ‹ŠÏ=Bï}6-µGJ'ß/Ä/[R¬Îó +SK< Ô�ã�ÈìšÂ¢—¶í/ߺc­ nbL\¸‚ómô�þ”˜:�ìT ÀŒe`:ûè|[?IãmRu«lE{õJA¥¤ŒÜDë¸&èTÇH “–ûu|ÂÎ'¤07<�¸‰*(aqei™©‘³+jy¯œ=71_»Ô-§dzLôc(Á:J�‰IÏVU¾WqzÚÌ~ÚaöìÑe‡¦wŠd ã ˆ¢¿È¿DajDR ´l90ƒ¢ ûœG¦Ì[ÀA;•,Maêtm×a�˜ÂA)s¤Š~4%=‘0âÞ« + Bšt(—ÏH�]�&Øž.aÕFÀÁ5*õ(,±ÖGã£P Â”sÌO ãGñÑ“{è NÏP÷G!²PsûZëŸc†G¡7ž¥•AoçñeCíÄ»Í+dÏT‚ñQȼ+­’G3G¶2f9 öÁ4:p8€a�¨;±±*@Ž¢ÂŸHXB…˜í9ºÈ©Í )÷?CA…„?Žzd¦%ê�­dÍ:†›¸åN2v½gD‹R)Pù¶N JŒóó/ÆZnÖÆSaÒW ~º ËO3tƒ�Àëß3ÀRs0ù0R÷P4È Ùa¼0« ¦BöŸG.mÁkÅåx¼g§x3…´‚[ô¤ö0(­‡ŒA|Ãã ×PµÆª#if¨�*”�#H]#òàˆÚ% xG$Ä¢ï×ÿBr¦Ñ0ÔòôVAô‚]ò„÷çäÏöŒE·øæÿ~’?^9Œ +¶³Eƒ­B¼4` ?Â3Ô‘AúÝ×Ô\$ãÌæ*ÎØ~Œ1œ BùçZÍ@Îr¢eÓþÕa� �'tdŽm +EÏÿ"üLÐôkþºmìøƒ>¢9µl¦]=)÷ÓòøkbFµ<ñzõòöI´šÂÝOÇ´ é…´B<e4ªÞΊ l!„›�ä½5!bžv×AÍÉ<˽èÌ'ö¢i­æÒ®!{Óî…H·M­HÅç~~YWªõ.(j}üÛãbÙÊŽ š¿ñ¯4ag´•�º¡[2Qrå™{z_ †º;BÓ‡“%XìÝÐQõÛ\<‹ò´D A3G‹Š(§2×®à]óÊ–&€js9¯«¶8&=ÂN)m‘Ô¼³¤?Td>hE@/mm–6�—óyšAâ²JVÄ�Z’:qd8¦2¬à3–Y2l“-gƒ›#ú4‹é|Ç Tc¾´jTÔÚþK˜Ç�FoŒû#†Ú7(âd>y>B1%0¥.^ß )�á˜å(€ñÅü¯2‡�7 +-201»Ì þMÑÉ^"έógòÅ@ Ó^mîŒ ¼hÂfèZÎy 3MD9¯MØ.>Õ·³N]ç€eÙ÷B»úUŒ›‡ž"üýÓ Ë~ªhYê2xÞqQj–¿'Ñ“ëºø„ÿôAœyV½¿ŒMq:ôfAcº³9°N¶2@Èh¼ÝŒÙ§ÎÕ™3S/WEÿ¤–æä«Tß<�¯é´5yÌlЋ“£˜D°âv¿¢˜‚L¦üÒÚîâš!Ü2R•"§S0k˜´Ä\šh–ÍÆT=ÕlÿV›Ù{âW T~¿F]Ö¦�bF‹x0_D[…±ÁÖ×!QÌ5O´Ú�ÍI»Þi†Žs2-ˆÅç'�‰v®øeô…™@¡±Y�À3¬¢D&Й՝Å$TÄE á@±Jµ=ßúµ·ÙSí&ßËáÂWt�í8ir–½l/&ç=˜è¢ + ºÿÒÝ‹ìJó¾i¥LÄ…›.%µ}eäQɘaÊ“tK4ài™H¼v)æ¸]~w¬Z'ç'Ì2‰*·`y”¼³üŒØSšÊiy�&¢Ony +ŠÀñ’û¢O*ÂU»Ê5ù úªD�_3™YVÑE-亇ö@ëÑÌ4ÜÝ„åffMY -x×ð^­¯*<#æúj��ƶî"då¡ý—‹ú~ð3Þ³jž€eÔñó'÷¨¶ìcÁÓ¨�·òÖ(xS«Ýó‹Œ5�Ÿ…™ +0Ëè]iÇe8©6Îçm£ñ•iH6>§„ ñ[FÊà£vK¶ãÎ}—e ¿ž%5pð£NC�_ ¾‘õà}n´C5}ÿ_jèwýBp¿Û3÷*†|¯¯óózY{²¸œÝ+xÚÔR%ÍHÛJB¤S)¹š;Ù8˜3A“y™ñ¾pŠ £ò§§kp�Ž'´o ~‹ã£»‚sRuoÚxã/¹¥ú'×B*}ײñxÈTб¯ÆÆ]…ë@»’:lP£ †£Ófކ‹œaNð¬ã€óPN™‘‡7“udNÊÑ ò(&\õÌHwL:l  ÎîWc=Õ9{L�A~„ö¤UQ8¾=¿—Š¿/?½Q�»öwà$B“Ü)µË3¸hÔ•%ó¡6!–ºÀ`Ø%€_>ÕBÂ}l¼…àj!ñ#;F©Ã–å +"`ÖÁQIÙŒ™(3(:™£ÿ/Ó]`à4âœG U F@aDìÊšC±@&ÍÕŽqóh\Õ,Û²3ÿºA@WHÊ ›÷”û‘3`…j€ �¤ ™g}ó· æp˜À.‚‘+õš¶Ž÷áU_ »%#¯áà‘NƒÌÎ+(mçÆ†ùN;»Õz¨B£Öšõ¯(g‘÷/U/?»ÉäÆ&`K·š,nyžTl¹9|hÂÀJn'óPSwEà?…#§›ª’¦^ûHÙ–ZvÑ>¥yˆÉÆvÀïÞ ×G¿6³ÍoäEÁ^ïgtÃRîØ@Ô¶Tx¾µÞ4O“:Ž24ð8YÏê(”ØV»ÞBi‚©Še§Ál†UH“¡Ÿ¨óR",ÇüŒ=7˜ô{R%¾w›t¶JŽºB•|—3ò˜VªôŸIÉ!G5œdâháÒø`qn²¤©æ0g\ .þ_œ:ü3±8Pôõxìb±"+SÜŸc±ÇŽ5ãQÍxýÍKÜ¡JE°XÜ›�ë2ÌÀbqü„PÅ0< ,“ÎÂGð©I_ÄT:gù³z,v 2 Qh˜¨�ìŽe¼TŸL¾æ¡¬ÿšÖÊ‹Q¡ŒŒ¨ÀqõÖh¸;Rt~Q(Ons#äÑ,-,îÝwÖÁlAT,n/�å{}‰†G8�¸$Mr´kÔz±XäbÇa™>b1æ"k¡¢­Ê?IK°Øæ{Ñ&XvP,V�*6©.EÑ›½Qã4ôǪ.Ì�±Xaôy$m‘e¤H*|X,ƒÎ‰½‘×9«“½P—§iF….ëƒÅ؈„åŽ8·x< >Q§›òÑÓhÇâ<0žÜsÄ|ݳ½ŽDé\°Ââ«Ñfæ,4®-,.dÛ�ŸÿÆb››‘îÍK ƒÅæ®Ò˜GŒXLÝûGÆ@ 0¤•¯�Õaqqiã—[Wù¢M1y'ª_ö¥ÀÍRHÎUàÂb{餦¢»`—Ô `4Av@Ý»ã±ã_wi…Âu÷‡Ú5‚ +%iºÄÏÐBßZbq@²U¨mËÅ9)DXlükuL`öS’ï@Ò âyƒÅ¨”Í»¯à™±ø½ñÚü(�ä|Aï šgb±¹›Üœá¨Zmww2¤EÉ ¾œ`ˆÈcK®ÒÖ!Ä ñ)8wWŽ\ñSö±Ø!ÿ>O&H`ñѧ½“MàKÅ�Ϻ ØÓ‰(ó©Ûa%6\† msuÖP$…!™o9y™¸Ñš¬$™Z½Æqßñ¹²h�n¶ç…¢b ô¿`™ÉÓ?½ Ò?Øpõ2Ž»“+–»ö–xZHkÔ¾±2ðI’ÐáÐ×-áÊkˆ’{$S>¸7.Hšx0¸ ;¡á¡Š·œŠÖ;%±£–e¥âW@iaØ0�ÎMU]Õå¯%ö×>¬YÚ¡ÎuìDTÄëÖ@*Öµù\.U[<††Ö FþÉfðÊFóïøvM?ÕN¡�eߘ|vŽœl�¹%kø�F@)›5I¢Å´Y\–ep<üylj,ÌÈÈ4Ëy*ÕO€ýBò÷¸–ÊñŠLÊ0Õ°ëÔ&?!zjÎŽœ¥d“^É·¨åœÓ§¬õêÈA•®Ç¯“…9Ó%qF}àÇCs߯~$,åsSÝ™nÇ&‰+�½‰S¶$ù‘ç�¢òÔ�‘�7ÉÅFÇ¡rzÞÓ̑ᯢõy.k ”ƒ€À×uÅ��/zªB`à >âÂVls9Z@Æ“C�¥Æ¢X‡@= dms°¨Î*† šä'|Æ>¿´ b€ëš6¶•Œ=ñ‹*ÝwC+–Q‡åQÑ�[äÌNE_.�¹šÉñ +öqEɃa™¯†-3³•˜’ÿŠ,3�S2ÿ ÐÜu¤ÝÚiûɶGL+¶ÅáwrPI¹J ­á8KO|â&Ûþ¬D¯XÂLô­ e“^׈�­ši¦nÖ=|‚Sš‹ù]òÖ‰™ 8§íºgœ%|×ß ¬¥YbBáH¨­‡%ëœL“Uj¨„Ne½fêÒæPÎ?$•6ÂèSCé—ÊQ +j3fTx@ݾ# +FR 4;*=ÒHuöd—š,)Ͳ•ôi: ìZäÈàEÞm�¬©×¤¯£�uÜfO:ÀiºªJ çÄI”í>ç”+6rkRkÂæ$ýŸ2>0y€•—àJ>ä· 9/1”¯’c +î�BÔyF¤à¯…%êíÈfÞ­§¥Àxq¹sèB£ „*+½ŽÒ&þ46˜SÕ|§ÊF1FNC•ô5ê†3 sž2¥¹eˆˆ|›/‘°É +qe³¹ß•0Àç}æêiM�ê7ŠxÙ¦ôž)éÎ']èÌ”Ù?F>ªq&ÕÅšœ/I5ª™]NŽÙ…0C $W]�/42Ý�¡–Æ‹ËG8•ähõ¸(‡q]Z˜å¸“ë|�|5é³úaC¬Tä„ÌÓ8èøM7ñ�Žß?_MÄDê?v -4 —S“5X©ÝÛpÏ�¦£Î�5Üé дÁ/¦¦÷Ñ o#ãLµg0ÏB‘áÛˆ{]éãØNÕÇ_{#C ¸U–€ßÑÎ@lðý¥yNÏVIêú-;ŸR+[,KÝ/�åñ“u�¹Äb­¬=¥*ÿ B=P0ʽâàìë'„œQK¨zËèˆçø^Ø�Üëj­Ã• Ð?šñQ³ •d\eœê*ýé¾ÇbÁ Ž3kmþb5�.ÇM”uô†˜éŒªäðZOhOsÀ%©rÄá0`2ÝHèÉ¶Ô \FZÊS¿™åøÎÿ�aOŽAò±ÇKŠJ6îTpÃ#KÈ'‰2E]ôITƒÒo"zeëìOåÀ«ð·gIa–QkÚzˆ/½�ú™ìÙPì²ÆÅe:Ù¹LÛZDÊ\>òôzbC#F—XŽ—4@ø> ™ãɧAjz¤˜Ê0vŒ;�¼ÁíbÒSÊ©òÏ�¶ '»~DÐ4å¾7#×Ý9O7`*ŽXjzM´+~º +:9yÅ��{é�5lÝL–Nw|¨�bÒ>˜Ñô.ñ­ú3ЄjëÊ=«æÄï”ßÞ’!ã/ŽÓÍ‘"é¸-jQŽ L¡á›çb-ãÞ¦÷[4#±œkÑ Ft®7c#¦"šòÚÜ� +@�X¤„�éJ¦Uòð†XXL¿nSËëbväÛ`ì:×ÎçE`mùW¥B“&Q¯õ¤›Mº´‰gÌ(¼åÆF +ïEØÅNŸ@¸ÀÅ�lºé¤ÇY¼d,§ää¬(�úK+ü1“ 4âíT˜mM ‹œÂ‹Õ4˜ ½Ùy4e‰g!º{9¼îýZ%Ulÿ3 +¶©�f�s@Á/•¬v–CÅùÎd­jì�¬ò_²•ô›ZÆSÇ0ŒÎÑ�°Úš8×ëLYøSb|—¦Ïá l±@¯²ÁÚEjúxÖè4Ò¤”ب‰X6ž6…2>ŠT,"Â&è̹ Œb�Zé˜S9ݧg��£Ô¦°ÊÌ´ZQn{ù~}&+®u‚üz$§àŸ®ø‰ÿ§V\f}„9YÑM °Kææ )ûþ©hBBXÊ:@ L²&0€€Ç²nv¨1g#øÒÂõ¶¸PGÛlá±’?þ½!âèÀ€˜LF±Â320`€Ò(À?’²b$&lŠŽ„‰)ŠK'f_¨Ѻìýg.ú‘c†¢ŽÉGÂ’zŒÍcßr&åª"ÊZÖ”“a…ª)Ò\«Êæë@f°ó4/,f J%”¡¹¸ tc ®ù>q&.M•�\ÓP +—J6IIDMÀËNÂÁ,Œ°šâÈ èjQ À’Œm‰Ž h§Ì@V)É”_’Aƒ,Áfȶ=�ið¦# k²dIHš¯B�ÈO§êÁÍ ­ƒÉò:�ÛLøkS“�ÉLtŠ� ²b  +xE$ƒ~8%b;|ÄÎ@ÇU¾Š2N1#³w:Ò®¥Ç^8Vå”a‰å=Ÿ§#�ºíÙŽŒFU9¾…ppñ5SSs !™ðÂYî�Ô„t!ˆ¤’š“ƒªx‰;7ù9ªgDSx„ÑÆ•¾¬±DŒ÷vL•caÁ½XBAJÆVg.£gn";hœTÁ)’Rô©6Á3 �‹@à�ÚU¯8•„L®×1 +<[�*¡¹å¬C +ß� 茤Î"×(û�³éäa,ë�?ŠxÖ6 b§NÕ Tc,¢PUp0D€_Õ¶Ñ&´m¦-j«QX-V›Z…©Qp­öÚ¾}"¡¾m@bì´…äB”,)t$EƱ4²Æ�$+ÎP’äˆï†–-Ù)å$%|²æCz¡°Â„ÿ($ÉbaxNB– +…Uíi|š@BÎo²?/Ëa_B=ö `d fLC•ÆÁ„©Žªó9᳟›ÂŒuCQRù±‰�ÎW £Ž9`XùP`\ñ9@,³^Ÿ j%ä7”3ªø(Ô‘ �¿3~7÷8qllÐñ2@ èâ/Ÿêtò÷]¸ ŒED–³š[À·ÁBÑ…4™ÉF +º[/WÐXòÍ__A$@áÓ4²8Á/š<޶6y̸QCR¯uJì6–”t7bq€Q�d!£¢õÏ…lš‘¥PÀãaNG+``À#‰àÜÕRhÎGÆï,¶q[ž_¶±!q¥@Õ8!ŠQƒôL(2 Tµ;kTüT#Íjô=QõêCJªÅ?Ú£Vœˆ�±!MÌI\;`$fôp)b”)#^¬— +@p×Ð6ß‚)ÍQQe‚‰·åTcÈ"�V‘tªuoÇï„IYP.�€x±Y#%mç$šÔT†â%;g©zÖÎTi-Yxãèˆ,â�¸Ó± g^âY‰H7™þPñÔKB š­-Ɉ¨(S4CÄ +y;«ËBû7©¯UõC¸�‘š‹éÔN÷hQx‚ÆÓ›¢”’²Ü'oã´žYiüÕ-³Ž„˜âŸUÕ#“Ø:›�(ª¦�!‡6ü©LУw;!bù¾!m/Šwƒ9_å^B¢›`ª© 3|�x^ O',DEõnÓ‚^j§&U¡,ÏÑ£§Þ_¤ÒGí‰õš).ˆ3ë³ú¨8mˆß"£Ð �eRÌʨ‰(=œ‹9”甩_t)bÕ ‘˜œjcV¼Ð8¥Ü÷±zÅZnc)Uì÷2õð˜¢bûFÕKßENÁSÌh*”Ud\)ªNbijGE…Ž^<™CD{LÑëI*B&Ó!¯´XM–ȦvGe§ùÔۘߥ$¢XU!;8a÷6¤(��[Þ¬&åQE• °¦}ÕÐ6uZÕˆÄb;~³„WRõK°è.Š +×)ž…ᘦ$ü^Ë[&õ—·².ªAœ± ÄhP�¢µ¢0î«@¯Š $"4 +=‚MÚ%‚†Œ·2¿s«ÿԄǤU£â0V��òx¨T* AȈ¸EìWxu&”Ši£Ñ»q ++ê‡. J¬l@õâUA‘–'ÿŠÊÜ^²Ý"uôO¶M”0èü¼õ’uŠR5Qß'(|S){]É�Ë 5D£Y7Ž¢V•m¦æ›SAR›´6 +|…ëž�˜ßšê\%œOŸ 5ÆE +Ía$l «×H/£©Q0�ŽY<´† r'aæ²N 4•‚Œ{+©ÇDµ%U3rŸmX‘©Vq¥$Úð“Úvq\Sú…g0‰ÛÓ*Š£ü,a³*’MXEFÆ6E [¬¸ëèšÐ¯fñ�=ìàˆd·@îš/FåÑ-øTƦÇôlêÑšÔ¯P¤±Á„§ñ‹a³šžS´Ÿê‘ Ê“V$4Ÿ°€°¬€ 4Y#²ù‡> f R,0™Œî¨Ág¦°#…ËTZà¡[ÀRì[d\ŒÈÄE­[À•ÿKxˆRw¤ e!pŠNÑS=e3l0gÂJY‚€ŒÕP( ŠÞ¯°U2Ã:/ÑêˆkÄfˆ­âfF‚e¢©ÚF*ž ‰$„L¬IÆÿ´WÊB]ñ¨ðªËfì¿£}ÒÓ.óªYMÓtû.­æîÇ-¯<³Aå�²ŠÂت3òÄ|R­ÇªhªæEPä—P¯2vª�î[ÐŒNž+ÑKÁRUBü¦ôƒ\«²\¥ÿ ¸=‰TH$lê`±/ÓÃæÛG«„)–k ìÅP5”¦|X¥+©À¾š[°N,A?g¤²¹´<³”RMcuN›ÄŒcΗ)Î@åÚFLP¸‚�15´ªã¨÷%U™l­¥BS" lNðv¡Š(‘r5Ȫ ö0ˆ‡(øà‘…©ÑC–¼D×Nrž-Õ¡73¥z‡È3 �”è«ÐþðªÅw¿FXðB#%ŸÞæË$r„m±¿©…çJE ÷3–ˆH/Æ'(ê�º%(o;B ®6ì} ¥ÖÆy3Å n³“¶h¨š x´¢.f…×lõ±€¥ˆÀ~N77uèy „CCf˜) R2I5ha>3“ÕP$êa⸟7#U¼‘8ˆä>I},ÑzÙêT  –DyjÃ5~…úÔ-ŸF›HåÕ²Û<·x Ž�Œb%ÉEŸÎKöþS R£ˆ9èmÄd‡Ü ôCû›ÍA«Lð{ôªB(hZY§˜¹á¨<#RºK‰…µ †‰9 d"xÍ7kk�Y–¢Ñœ&ˆfÒ-¬ 4ÕèùqAíT‰Sre­ +œ–p�R@ + 2@`4®º !¦eí´XÅbq3ã™›‘€ráÛª4þ�±`BÄ?Z`@ìñ¶­·=± %à‰-—Y“,ÒrEÅ‚Êj×c¨RqM &¸âyþúuª J6À2 H± Â( +…sãV8c‹`%Wp¾ˆü0"!ÑáØ¡zWì‰P˜lé Z Ÿ¨•©ê„VUL‹j�½LÁ�×™:�Š^rËf!’*Ù´í°KÜXMÑ…°ø o±—Z‘Ü.—"m’Î,W¥º +% +2bùÐ<�Eþ`i£›È=ž ª¢Ê‚�`�²ÜL¾9bO^%•ñ+îµÎ†îK�±—E‹  I(nb‡¦än'1R1!AµQ÷Fp†6‘;sGZ,—¢Ä€�i(YLy…si‹JqÆZ—V¿u\òKZ!ª5Q‰Øù6Ièr6$ň�ÊA´”¶C.4´”Ã䚈¶xs B¡[ªé”Åô`χ¤ò±X&:ùE¼Îg³¹µ•¥IEÕÄ'þ�e(†ŠÊ‰JEÉ%D§‹ á--„—%�ÓŠèIÏ ½Ž)¯i:�Š�ÛeˆÏ}žÄYoЇŠ^tïµL§þ½i �¨Lcǯ¹Î/±¹ò—ÍÈ[6…–å !k<‘èNa Š�sKvóN(‡b.ŽWqf9æÅ…ËÆˆ ú4ÔsR&›­.2‡ëâ³sHŸ‰p銇"I­$sEGJ>Q,Ÿ &ªÌÿð†F†Ù8%"UioiÓAÐ륧BJ92¢L† µ"Ùdj5ñ9§Êâ´Z'’êØX|º¿Ö5 «��Ž’ˆ~¼Ïk"#ý/3Õ!!�ùl +”a0j"�LMÜtjÍÌ=ÿ7›ŒD̪ÕS4ÐÜŠ’Ylöø˜!ÂÕ·ì”�a¦ZÌ- á\ÓÏ"=ûÕé#¡‰!òŒ$_:NáW�:RÓÝ‚úmy[ÑSŒ7¹ËD ˜o™ö0QEŽÚî°—õ÷¥•«BС ÆQ�!—šŽÇ�OU&æÑ™W؇ÉíÅt (�[³Mð§¤ufw@e>dSúLtÑIUÖ í‚!ý¥S=´§0Y(b(DN�ÈZá¦Þ†púrï�T?ÓaϨ¯µÖËÒÕYj©4ÆeHü*ÒŒR,ßp�I&Šñ¹¢�SvªšnXÓ¹]•Ò|H¹ñ\R«•^µN¨í�CO[¢‰Jn4Jçæ‹ÆNß=ˆë=;½'ãÌpãU™�tˬR�å02e>™ˆXŸžnAçö̧\…s„Ó/™ù1]�Ö ìéfBŸE�\ õn&ZJÃ-Ò£eg§ É΄µ¢®¸")¿!ó7æ´P&Õ;²g¤dR/#Ž‹ô ª0'&DÆB _F³²Rr–Ȧ€a’‡Ä=>Hgá”%Ân[(ãô áÚG—È!EcúthD ~H„ É(¦d$ˆTcRk±ª[ƒ¾i1¢$PÀ=G3°•—¹ø‘'}{Dï½½ÌwÌZ•%š‰S«ûE¸Ѝ"‡4JX¯eFuU2ÊÔ¶–_£ +¢"¨D’jÕEÏJV4ÃhH$ŽG²€L¨e¨~úz"¡H$FŠ–dˆÌÂ6õÃÁòFñ"–A>�âÔ¨·ézų̂ùâµé×1öyÜ‚ +ÐåœÎŒh°lX¼,9k’‰ùÄ­S›àÅ,âÖݬQAýÈ\å=ÜÏ!J)O-ÐK¡®Ú;ð-°)§ÑnÍ“ Ú³·ÞñPf7˜Û‰€”¾Ðw@ÅØÿ5Ht d ê‹ ägqÛMCù{< /<4ã%ôY_Cݳ�y%Û´�Äj·G§�\~<_F½ˆàïô”¾¢\«d«Î§9»Vï�Œ^¹Œ%O`ì)‹î¤uJ'ȱ¸ÊÇÅF·A(¼¯ûëì0[kó (�q?H.6œÜ‚:)¤êüþÔ|Q¤wA�¬lÉÛ›léjñ¯��èÄÄáÂÉ0)¾&ˆñMÀ¤@ŸÞ2Pôò›:ÝM½'K4wÕ…wÄÇÿÏIÍ]QÁoÇ-_uåW!þ„©¶ÙG–Ëv Of̮ћWú$µÄox�9®©:Kµ}*�§¾Ñ�O{ï0>ö¨|7+%Þè�-`Ð�W÷ªËÂâ²žÒÆÑóC H_lIm2�ë�9À“ÑÔ�¤ ÌZoyšÃx2 †G%ªðÀ‰MCY+3Ôš³8é¨� Π ± %ùÓÈSfR'Ò€E£ÝAxç] A†c~xGîþ�>ÐÔa,=ÊŒoЈv[­÷¹hwí¹Õ4¼¨TNàV ÚUßš«³OÄr« (N „a¿+9 Îà#|9%¬yÐB�U–¬ŠD�{Æbæ2.;|ej˜�­9�H@œZ‡ßJ˜·B4? q[sZeÊòœwðëN´Úw_¯Ø!Ü1È­¹ë›¿1v)RÅ7·æ\øÞ³—�(^¿mÍ96²ÁÔY*´�k.ÔiÎçH_Ý")ÏÞIÒÓò$†àÑí�eIÙCI™??á5¿Êgú‰µÇ–¤xŽÌ‰°:XÉ…”||ÇÐ8ÝI¶¦™%3“%—[È!ð>¸*Z3ÎM +†SïÛ˜ds‘Bœ)Çgð¦aÜZ7Ü—ô}€Öq~‘�6uNžÚP²úvd|x ¡.Ô2]ÞÓ†)s/œø×ºçä…ã ܳðÒ}àRüF +׎¶yŽ'2,Ð1=÷\ããfÀ¹`È ¥Öäk+E‰��ÜȉxHk(ÅØG«'¹ð@cg¯æÙ¦õÔÛ(ÔëG-’hÑ1DT”DçÙBõÜãIÎ)UÊà³c™m2$*=Ýs®BH¤NIÈ`¬¥†íÔ˜ù®SOFk.¦wûHÒÿV�Ñà$0šÕ~¼S¨ÎrŧwávgT­œož�&PGçIB\+W(ç•à %þz�E;Îÿ'I’$ë™ÏûG£Áa»ÍIlù¬ÃÆ}iRŽâ™"ö0Îôü:ýj]š®yÏì +KÒ¶ÓY(x»PÍlñ–ÿÐÉ 2Î�ˆòúþ˜f/T3”?¡ZR²4JB7 †Ú]:àý1Ô/Å<_Gf¸¹”ɯÖÆkÐb¨ZŸkýºÉÍ1ÔÕ3® þ1”Å!Œ×Àï6ÒD»w!΀¿Ö]ývéTØ¡¼–¼F/W˯¶Æ…‰TC-ÎͽÁðiþAk(†½¿ãª b€¾.o—}uÌ¥–KùLÁ‰'µÚvîÁÈ1McŽœÈ²ê­ •ÌÎr(I"Rþ»�Üæ!ÿY‚84¯77J!CP{¤{Ë®C}'¥‹C‚„.ÅxŽþßs)ÎúžÛjZ_Í>£‰þÏ pÚ5”PŒ5uQu}×(€ƒVÊo\Öƒ‹ÌØût?ò¥›{ÿMï³”’PrÅÇU1éõ•„2Î÷˜½€³Š$T°é|1Ÿ Š´EymF’ôÞ;¢+Wd%RùØÄA mg1ü¿Dèš ;-E$šjܸ’$å#,K¨�î½m&Ô +^ëéG—„м¢Qô- +´±kåIHêhÔ2Ó+„ÜÜ„vÉÄì±yÑ +Okm¤¢z¤›Dúi.ÑiUõÿø"œú}�ʦ,X %),B–…=`”ˆyzRnÞB1 �¤@£H~Ær¥P÷ÕÈ4³ûàxììüRÕŽ^XÛhÁ=¹ÞDE‡nÞ¹€P۴ǰðd–¬îAh|°½ä·„‡R¹GÔñëmFÇÀé^)!ßθzý²Nb(ŸTÆ%3;ÿcÃ4­yïÁÒHôßùòž¹Œ긦J‡á©*6YÊê6^e¦Åû€z§³ô¡¢·=‘' (‡c ª^Êîà�»õ¬*娾AIƒ6øÕP£ÔeõŽÕŠÎh\C­õ�¦;�¡è¥%jÃHD6Ê?hÇ8%Ë> TG\¥1¡æ¥Æ�bT£tãØ5ZÙ)öQ¼ó$ÙÔ¬—[‹Múõa#í p?¨(O^–ãö}öè¹M ”ù�ã(ø +k%TCËæríM[\@šLy¿Ýó@�%T}n¼„Âx:&”$0g²#˜P¨”±W©áñC¡VÙ +/¦½²JÅ +UkEÆ�6¼¡i…ŠïRáo¾+�Ró’Á¤Ç=ªnÁY¯@ “¡¯Œ…òß=|Ñblæ�ÄBJ•™É‡Çaœ…j/ ìì ó¬ÎBy\¢X­À�ÀÑÉ–^þ˜²lÒ©r£Çna¦ñº… +`NDÊ QE[¼Ô☷ÔÊÕÌlñ™‘]z=…²ÜÞ¡L›GåWO[…šsªÙª`Ñ +­Õ#k©ýÐ]× x¡¼f×ÄA‰b¬YD¬ÒrÊyºãbhÿW)ˆC»}¡ ñ'55_Ø¿|¡üKÀŠ[Q¢Ñ…[þ÷Àf%€oô‘%¤Ú¬dÏø2löæK‹˜“Ÿ�‚%† +x~zòªÀ¨(ÀHZdäx¨#Åe.Õ˜‘£;ã†@žLT(©ÑAÚ§�'̶FÍß`P½0ƒð¶»^4”¨‰àWqp†x ¡]û~³k„S –%‚R\Ú EÑ;ö6üu9NgVlp¸:ÞPÚÒ�ës}2õÕDܨ³+“ƒ-ŽîŽ(Ž/j*Íádó’�i8ZEÈ8+öžC0ð£ÐTá +�üX:l¶ú&þkž€µ8i­C˜Ç×”ò²C­<‡¼Lq¬º·i# …7ae)ûÁNRe0*ÚãA<sÉtꥪ…JT“~NÐú +D쩇bq5ÏâuÊ›(DQÌUnò¯iƒ°4q0B=é9ß©)”�€t¤‡ÚMüý‹oð8’¡ˆûf½ wæìûÏœ†¥2DW~ó›’šœµîq5d„Ìí…�PÈ?‚I%GTB¥¦Z›)…kù¨»í•iªE B ñã`6íÛ:ùÄìÏômá�BrÖ¤EŒL|_U”º×æ ¬Î%°D¥ìÁCZ%gdSø·ªÃ‡‘î³?ÛØÌ¼4 #NK ä"+€i5¯Qg³ùôG¹?ódíßó§üPH�.ƒ¸t ëfÓL(Ô021ï–‹ï§²k_ôºnÎn»7Þ5‘›d}…‚GÜÇ—º4‘ý}­ŸLàËôÉ�)°ë»DjŸã¼äI¾Ï{žÍþ;òÆ�l·Û8Ok/01å|{̈‘Û‚E\ìW3ì›&n´÷`K!­ü9ñýÔõ,ËY˜… +4s¾ûYÝ0�müêmð¾ÂçU©ÎÂòˆ˜3j<‚Ù"¼ÊÊ÷éDä´œR§C›Þ ÚZ¥+Œó °Bˆ—ÜÛFIù<`eȪ „†•¾”0²ž»‡mÉXÈÜ?¥á©(Ë® ó† ÖkE*Ö‚GíFV&–©&1£#EœãpIž®ÏÅûÚ†ð::îqD êå‘QcܼF,„î y­KÞo¬à;ªÿ¬¡×ÆÉAøIR¹µÝeš#â°5n éßÿ;ëW eMLºRôS€å�—mæ¯a�Qf¢ÚDeÒR`˜0 ã¸Í³3O‹fì6ÁÖ€Ñ� 0;%'RMG¸e�Í£MƒÞ^5€}o­+^8Pbôþô¦;q ƒø2¯÷—-Šz†1`bæ�)�p;Ì­±’ÏÂÔS=Ú™ùC5ÒdëuòÚw æcÖ0=|ØãÏ*� t}»e§ß Et,òÖ«rÈ| ¯Ä¹a Ôö@Iq»¬R;Ä`à]l4¿üÕLJ©ÓßC†É- +ù|²!Ô7êJ…éLBù]øÝÆzitS€‰@¶ +˜¦ÛUZª¨1†EË€Á”Ñ#*|fÇ9i÷[œg¶ßé¢öaÉø³~Ñá™Ì–oé°£(JY0гֹ©ô‹z~ägñÙfW投56Db±lDrîSYÅm��Äñ±¹ocR/|˜© ÛX¸3gz„Ì“ÛÕÙ…{f°±ÿ/Ü¢x®w÷øY¸‹[ SžÄ Í2Š»pÝs5Ýó¥>·WÖ1¨.»£×g;"’Ø Pg£–ˆ…ëAì[zá.?$ˆ¢ ¸p0NöÄ�+Všù&´©9C…ÃÁŽ£á«™"‡ˆxv&–å=EýĬ5q©Ù6)ë«+RõΊL�ãó~U àÈ'ó•ÈjR`8ì!'¾á‹Â¶�I{IÝÓ‘†ÏX›c^ë™;¨„�Uñ@È‘Î?¼zn3 8%ú´¹PâͲ"—ª°J.ô†�kff~t]JvDÖ²ºøŒ«{.Ó¥Ž 7ƒþG•ž +Ólïœâë"iÃÄÉÑé^ +ÕSÓ•º +™J}"—k¯3„6è¡ KDXU#eT†N—717œ…@mò�Ò¡É:Föçm2a>Õ�âÔ‘,áG +ƒ·¡³ËcyLàÉ<ö�?ò=�s%¼&)Ø`œ‰®de—¡ðiãé|¡µ ”•)†.}å41(ÂÃÙ Pæ¿Ä£�ÊR]A){fÎ÷홓ó­11™Ý7Z¥ž•]ÎüdӃݲ–OÍä�vm¼fImžú®>Ž£šj§àëäz<*ƒ¹D ³-¬•æ—¹¿NR.™¯²'¯ga�²œ…Ry7¶9PòI*CT’·æÂ ‰PÉ%œ«à~M%¸\!«c¢›n¢á�i À§I +ÍŽ]²MϹ"YŽí[J÷ZO­¾z¬jW1!ƒ½îˆÔôF ÔliÀkÒ-°$H¡ˆhòQH*6¤@Aµžyf M“¦âÜgÛ~nNàƒ¡ò¼ méi~FÚ¢~¢�#-Š}6w $�‘ *Øó…Í+óì¶-+BË#j_„z„TöÜ<(°ë2ŒcÃZKiTsÑæ …I)&«Ž.(³8ÃTs½¨ä…»7ÚöÑ4ˆ¶�¤1[ÉMAl8¼Hu§)Añ ü¤Ô�:if&Ÿ³qmÌZhoiìœ +aw+L\uÎ$v:ç@^˜ÒZ2øÅjÞÎH#èKkF d')\ösüÒôà½ÌƒkšÞ yf8L^‡ñ Ü+ŸÂ·”ø˜U»h}³–lx5P&Ü›�ûªº•ª]úáLºã´Ó‹Äz¤lC1ÕIDÔž¼ä"Êàø£OÊŠ£änf¢d§ÂfµËi¦Bj°Kò­ê\>AOÍ܆Ò.úÌ÷R �~ ¦08JšIÿ¡0H±[ç=ý~"mdjèwjµ¢s§"8ȃwðL^›ll,6MâÀS•·—e•#ã˜Â ,ç žŒAäèì%(�¢yeòéùkYZK“ gGo­é%4¸£:t¦tyÔp¤/C–�Yk£Ç¤Ö#æv@Ý{ðZifb+ïç0•Ê òlLÓŽM(‰ã 0*®™6Äò‹šý!â�Ö6µxHƒJ›�Ji +‰ŸtKnwðgZO½{öCÚ»†/‰Q$‰dÜdÌCåð®¼{7£ãoè}e÷æ‘ãIÒJIê›ãWM5s()C¸­X�É­ÎU,ùŸÆ!<êµ,Ïc†N‡&Ðè ›æc)É<ËG| nKî¡KJ5±îq”ºÌÒÄ#ÃËó«ÜË;AAQægZ^I_ôƒD’j;0XÌ�ŸÕiòvµ­ñžµÄHPû¶òùmk5Ña"°n{r‰ö½Á…ÔN&<Ñ-¤ørú�iÍoeEת{8<þk˜¬AyxXƒ�7'xIO—›’�q&=b²Wwª3ÇzŽ^· _wË;ßSÓ20@ú.WfÁ à•œ›K? ì„ÓÏ0y¼_L¶q¬=¥>â«hŠ”5ÕgŸSË‹|Dš,©©²x\‡Ù<£–…k¿¹~qÄžì˜Y„ä²zIIš…–ø;@ö©@—„8Á€=Ö‘#Ë…dÅòòKnü#tºÐ�ש*��^ÙkAœNòžÑ +6#F¶Ç',eC€$3ÐdœýTÕ]NÅË©`�Á²¡x?Œu~rÀl¿uù|)&ë=Îu¨É1øw™ÏÎ’çlT¬¬!)¨÷O§c(ß@ÈÆNõ»@AbÃ^1u¾f׬,'Á¨G?w†2 hÿ"ÉdGf‡’Î"êl|öÉéL=3QHî¸@ÈgeÿÚ¨%.ñ+ü_)"ä[騅5w™Œzoüh6ê€ðÑåÝ0ß¡#T‚Ð +jÊÁjxJÈ52hy¨��gK· Gµ?CqÇ€Œû/Â}�¤&OÐ;§"Ÿò¾í¨¡i<�oìq]Žs—'x•É|vT€gŒ¾ûŸª4Žkl.câ;¬‰ª;©ID Ô'–E$›~"à ÷â¶`þ_ø;kœŠ +³HzÀ8� +ÖkóNöoR‚B` cŽú"x‡ý+¥ÀöÛ|ü +þŸÂ£ ý÷UÞQKâ`y|ˆ§¡Ðƒ. î“ȧ9ÔG+3¸T”¬†Ýí nÊT@£?SHMoËî¯O†šJ›¸c5´Ÿ¬ À^³…Xù;læ=K¨£¦ãèzz¢fÍ$ût°>¼6@Ô†V×±cÂÕDzA Œ´CþN�Î'¸ÎSBvÃ_®¸sÜÊfÄ.£1ÑŠfG&!€©W‘v+𢏙GxVKÔ‰AÓ» 0Þð’ëêd½,ëöwl™Eˆ<¢4IžÁïÉ1›½Ä�à¡ÆXs%/­Å4E¯ ©¦Í€N=Wýœ]Š/X¤ñè¼YÖw± ¦�ä�hõ{fÞ³ð"d;=ÄõÐt÷{ª¨¸*ü’jàu48jÆÐ'¯_4“©¶Uõâ#±�ÚKß”*ÙÔyF +†Ùj3ŠY +„ôá,j.ºpÄ\eò½ †jéq24²:R±öêÿ}*ıp8‹2$P‡„xb¬@=R9*¹÷˜õO:^1sK*Îðˆ#Q!hI!-Y#…/"2ófQo¦Z×d]¸1ôc +ÔåKÙÅPw½zvè�Ó>×DfŒ5FþŽ} ˆ „ƒ!¼cÝ–µK�Ó婃G›…RC.=•ÿ83Vl>ªq +rŸÐ® çTò� QÐÜ«8¯lhÆŠëi~ƒñëdäâ¬XÒ¬Ú uJ:,ð±ç˜§• Ä¿`WAYfdޤAרô2MÐÙá¶ck¼Ó'hÚTH[–(8^I%¹±PQÐÉgt¥òQgÊCêpÙ.ƒÄŒY¾R5ê,�âúùNUL[Jp²]h J‹ Cœ1Q²¸¦Áþñh[¤{mhŽ¿û�æZ³á'ã ‚É+]…PÍ£-ìS¼Î¸.èÜxôÔ],ÀY9Q’Ö]15‰B`Îé4…�ëÓGtDï�zÎ]¯›žñuSe�L[L†>7Å5±Dü/píGCq£hçqG’àZ_.ݘ0bœê²Iÿ+D‡ìÙ!ä ÑTz8#&’^S¶Z¤`dÕÔ Ìê+p+ͬÈõ¯ËQµS'o”ЬC¥¾Ï*²Ê³’P*r¡â°C‹æín4ü¢Œu8r~…ÉA$LqÏÑšbø<‚�ðá)nñdyFK4T×*¾ÛÉÿbŸŠói¬3z;÷R\‰H¦wG® “Ý䣸�aqKEƒ—: ­¢¸ ÐÈÞ,”“)îòtcÙ W$YRAé°ÊDdâàÌpr±Š£ø£ÈÌÄ5TTã¼�Z~"!'îôM\c¢§‰ƒõzœÞnéäô„͉Û4¹Ò'¯]÷AâØ�^iÊNœõâæÅ¾Ð.èè;ééÈ_êgF‰Ã?‘y²Îq°CT‰KA�Ò³²¢Žì(�uDåRþZ¬–y +EheÂw++H5 ©ãÙÑQ3³CD†ö?J«ûùø l!äMN<¢âtPËb@µ8›=yyµ­æ4ÓÙ¥d¥m'¤M§�…ÚÙ¤JUÀ.ÅŸöã`'ÕF·ô¦D<±Kqq²A¯×ÐaÇÉnKŽ +Aºèk1¼vÛ=H¦#]µ9ñp°‘Ð[¬)j¨4wGêœÎ«Âplja‚fgVÉpÃ7b)dǸô½µáצ³°iåÄÏý¬çN‹ú²Üû&ÍTg#¯Þ매�ø�oQ®b»ª¥’½±ÎEh�õZôtÉéÒxó3i²ñN‡ª¢�€Ž§Ú +Â~aÂ�q[\~b�È�cp‰Qùœ¢œ—È8ãpEí +. Ë0.øõ.¡/ßTåҼذ¸Ï3e)t„ë]ùc_G™êàÍ牋h xb0tSİG`Ý«’p›8º1íC;{Ò‰³)ÛB0žÀãõµ€\[ì0.4¡þŠÌx“M‚­ÂŽ�+ä5 B;¬†´´Ei¯“V2lÎXìla„‚ØbS¢˜¤ÕÛ–—&ß¡ÀpÿeûŒŽ$üÍT…K6ÁÔópó`¥Wtwʵ¤£'øú¯£{P3ÜãsÑJO¡G Œ÷ú•$Aº9.ÕÈ{%Òù[zYû©aÊÿÞA•ùÑ$†\¿®¢£c¾ÖqJõð‰U†KØ…¹Gv! I²Õ „‘÷ÿûD1ƒúÚæÐ¹¤ ’Ý/¨ñ@òÒ¯nd4àøR9À¹ÖÉ€Qr6ÿƒ&G¿>‡¹`oõQ Ziiz« +î˜ù|ëV¬n7@JÍËžlÊ|m&¡ÖÌSÐ7YFŽý>› D¤æÕîî%A~ì¦è/Ï +âö²P±-Y÷“#f‡6Œ�X“P›ÆÉ«™à‚8ÇûúåIÑ£îËS¶±F)ú�Bš®-ÍÆÑ/¸�úÔ¿•‚)‘Û„–'õ"'%е›äpŽ×Ú�E]ä¸DÖd—t–{ïUw“)´ÿÌ·-¬€¼39óžÁiÉþº4_àí«�ÊÜM!Þ"N­ª&D²”$(9I/È$°€T…Ø2µUúCáfñŽ ¤Ùúg PC'A@,ïèúµK�í`Ó–‚—ÿä²ÃJ *Á¢:”H +IWìj %¥ÇC¸Ææ–AB:‹o I^>ÉH¿é¢,ÒiRkóŸ_‚œLçËém‰rb T#q¶,¶ƒ°†×œ�$c$§Õþœ<ä!´5ti4£â¬®Œ‡X¾¶š–B^­6a²è +v*ó¯x“T{:úb ‹¬B0[ȳ=¤çaW(“r‘„õ\dŠo&¢¶Pn3á°Ñ*ÀYN8œ:¥A #–»ºÃüMA$å ’Ï5þ˜qnh%/©æHŽØ…¿¨²4ö2\«A|h…À´9ÌÓt.ÿd†YÄ©e”²E ·Ffd5³ßÒÒáÜ]ämt8øt8ÇPdaÍ1hì�TÒ'œŒx´!Ž¡—ÖSÔÿOÇY²Š +I1Wb?�† ÿG²AÃÙçt4• ³=+¨}djLÑ`ADwûª|’,ðf�eÔ&@Ÿ—†žG!R�{�&@Yð¨“S@¢Š[hbfòE‡ƒT¹t•4«ÒU"àtÚé  9Èmöê;ŸeiX\hŠfNÜË,Ólc¥ +ûpÕN5<ø é5†ÃA#•¤J0Ù�*NE3^5�(C©Ç³y^°¢�™4„ì™[r׺.ä,¹œ{Û$¦@x`E´DiV\Ä�jÔ€0aŠ‚|UíðàE�”²rF+J¡‡Õ1ÝMÃëØ!×èf‚(Œ0øà¨ÊCÉAg5³b?JW“M 3¯ý0_G%Ðönˆ ñýB”6zÑÖ)l­ôb�â~�^tÌÒ¾= Á>sóµn:_.—ä:5y€§EoMLÈ):œû#„Õùœé»ÆýF’T÷zçËI ‡å^'Ö¤¯AÄc‹Oá »B,à‹c™Ë…�ºLË‹£'*²†€""6{7–¦7ˆø­WXÎŒž^26>›Ê$CKêYât–�Óƒ4Þ.%ùzŒ‡njyoCœ™p‘Ê~W:€¼Üøžº!�»giq­�ÏÏ®^2ÙMA–ÄÍûYKä¸KD(&R"ë2:®Ó÷qPnª=DRÌÅ �Ñ£CUd®ò�I_±¢©c䀆ä–É)Ç) w 0œjfS÷ó‰.d}; ­ü9NxÈ7š·“¿´n3=ÝÒâhÖ%æ­zsvjÜÒ3Ä–i™ZŽ÷Xx(Œ)Èÿ?D;†"ˆéªOä¹-ëf°¯–Œü–Ut¢˜!Y[Iï€ûª:…úå\#ÍŸ9¸*y¶å÷/¡vÞOPþLãŒêËÂî ºeÔJMïçþt~SE:GFìTp5uf…8f–‹œµ`©:àÅ6ËòdÆdѦýRŽºd^é7±å&±Å7uUè®iD3Sš¸·�¥þæQ†°?Hè=V¤�æ²EÑ•ÁŽ +ÍÚ”¸©þÕÎ29lÊM:|�sæ‡%æF©ìþ‚UtÝt²æ‹ xø_Jg@¸{¨r$0på€ÿê3–¡#¹«¯Ê¹Ås‘\A9ïÞùܱ¼<ŒÿËf"Ê‚‰Ž­ÆŸ.¾Ù-:ŸO�Ôî³ñ+¾+:™À×QåyZdÇUê祇Úä ô.NÅÓ¼UF‰’ªwÂÇÂJN/TþÀÓ»eRT Æ, ±$Šˆ}‘°Ë!ÒæÓ%0Ýœ*—èÇ "–�3Be °ŸóÝè>$ š…®KÛpÝf¢.õvWb½ ÇS˜nÕ¥w7¹—gp=lÞ&•Ž�ä‰ œ6Álµûo±¢Ÿ/�ŠÇ7J ‚pà8‚›`… ‡¥ÿÝcöÉ8¸ôçÔûn£pμ8õÑÛ#VvôË~ø¦æ÷®R&fsäãfzù^àÌùÖ Ù—ìË�-oŸõ¢ŠâÊ¢K–%ØþnI�O¥G°Ü(ˆ"¨.�FŠTIó )}T§Ñ ¢¯Ì•Ÿ°ŘKÕèàb…O«a‹µtÐâ\ö”¦-FY¦Š ÑL íÁ‚ß ¾Á<ûÈc"DåŽzãCÍ•�‰¥hÜN±o¾S /?ìK „ܨBÍX»7b ü*‰æ&Sò/ù|ΦF„´ÙÛñbcè„…Ëj&.o�(SúA¯+'LF ëÖôŒÛ>—Õ6gZÛäD6ÂoåSö<–ž«JìÐD;sˆNñøÆÈØ©NhÎA2kÀ�dý  5hC¥M`ÆŽR´í:›±é5;ZnŽ—Fï�/�®ÏúKsÌü»Š÷H¼$ª·¢>OÙ(t`²ÅÚïÇ‘š&˜ðâÍ>üá5Ç­­s›‰Ô¡* µ×V›ú�¼Ä;| +ä ª‹ýÈ©Z€ÆáŠbSå8LóÄæWIÕÿH=°xˆj6މ�â?o±ïå��o®ño>ÇL«± vGJ B‰Õ�¬2í»l¬sæÚŸã`V±•û+ÞÌ6ÏéD ûe[!W*�—Z𦕠ˆ›í‚#ÅÛ�ÖÌÀ +iEá¢%ð{á ëÂÀo X½ßR¢D@yS…B +Ŷâoü( jÏ"Bl¥ê»¯N Œs�Ê8%›aèZ¤~KJ/é°»“´äNxH—éŠT9]ðÔ5�7QCT":ôoÿ"# [S+M5šÿY9ém­!n„r¯Q˜a‡¯|~rp7þ }MM¢„k½,Õev—‚Y ûœáàFÎb)ñúVÕòGζ|d‹mï\K(ÃY¬ÁWàÆYáGÁ;ˆíÛ\gÛôíAxQiFÇÖ‰é‚`%“!*THýf :íKÌ Ù-/¨’]î¹sU Ú‚;S×B’ ,ÏIj�[/4áæc°œ‡NKáŒê9øÈ¨ÛÄé{ —䥮‚:RÄ'„ +ÊKð¼É‘A[cª  ëµN%¥(”º¾|�sj§\é�þ[ÜÉp“l°h’åh˜¨…Í}Эõã)Ib þµÆ¸ÕoÓ NÕK •jGëRŒ&(¸¨µ®¿ûn¼ü$¿gyuˆáÇÄ fÊõaZ…\`(ªBëì2†s1’Ô|éR·¸öÍVËõ¶JgI±nPÌfííªBéyÄLôÙ sªNC ÿ\mnæ—ðq!SvÓ�Ü箳nÇQ-!“wªSáBâfå qºÒ5D521×DìμÄ(ï°îxœÓ�ƜΠK7d�ôÇéœG´Q 381éé¼ÿ9çËG4.±¾…„úÔ�zËM¦ [\Âʱ¡{Tf;£�-pèƒÉÆ1ˆ=.«y8 +yŸ—û�ëg–ÒjŸY!�Õú‡ÇÆú‹%¬²6߇TXÄßxéñ»ÀœT•j ®.0-[¾!™×Ïú>�£ý_¯‘†beq#RÞßEnÑ“#B +ÎÈÅc`oBpNc“…âÞ0þ­uõGJÎ (Hhx<Ê]�lVÎ3‚rFÀ©`ÁL×c¤å +­ä“…g¬Kꑲ(²ýš.2»¨x×ê™°’€µ¨¿¬\…¹ŠBfÏh(dBÚsÌFI?PÒ…AŠç…;ô€®ñ:>Gþ ({‹a~Bm(|Ptšcäˆ5XkùÑÓë:˜¯6FžB9¢Ëæñ�DC^®·Ç1Ë'ÔU’äš¹ êÃ÷¢tM¦=pnüªÞÌ­GH„¨©¼ˆ?g¶”=ÖC,¥\'RY\e°Sr ZO¹Õ¦N‹Ñcá&JR+Í–žÃÂCtü–ÿ�PIº„¼�‰M%Q"Ò'€&øfì#u”Q*˜¹7òð!ºÆÎá¯w™@Z*‚ ìê*Íî¾JÎð„M¤ÜNGƧîüfÅè=ãÄ.ÑY BÄéM…‹³HLÏxæ>7¢æVmhâGYûGü²8»v¼f›²ÓJ‚,á$lLÍA6!ÖñªÎû±8Y†´7"V‰db–Ö¹<5¡”3öÛ»ú>Ý«/ÌJ—È 5mY@ñLÁÛÏñªŽ{ +¾2ävHO« BHc=S6À¼ôü叿 œ +æ¶ŽŽÔ³Ö0%±yü ’àž¡=÷Z\Ÿá-ÇÿtÃ5c¢¯XÏ·%^;�ZDÒ†×B¦ìZµO´9Í¡˜o B=˜½,st¶bsÂ’ZéÅp¼¬q¢8º%“4åÆIÌ·Œž¥ Ý-'¡Øè¶ÊK¥-Eïöª¬kþ˜«ÐŒ¼˜�¸¬òouù¸f?®dã[¥Œ@©“?!�³3h­bè ¾9âð™&íêk yZ–!it»¥È÷È”íG™S»Xó‚‹®{YC–s0~ò” +ƒ>mˆf¶î!b«Ûé¼;/“œ[§±>Ý"Êÿ*Ž Ër¬Âêb 2b¤”(™lòÜ€ qŠl¦)Êàë ³�5 nˆÃ­½g3/$~GÊCòÐ¥41ˆßT#ÛR5O³qô ™?rÆ·è»D?;ÒŽæþ”ŒÔçi?)€î³%"RPÁ’#N¤:¼QðöG2Ý预/ÕFPh%Û.gÜmSv¬Ú¥óÙÆUvTÓ9mç�Å _Öî’ +¡„�.|z¼´]‘ØÉÒz8ìu²€¿#ÐÔ�ÃÅͱ­Š‘žuRÙK¥07çt}®-ƒ¢V9Û1@­0¶ôVE}D)PÈ=ÑÏÇÁ‘Z{G°�ÏqÈìÎgŒm%T€·qþúL<‘"ß}%$lb+ÿþ)Û3F¼±QÖF98xu�]ŒOFØùø™b7R¥%µÜIØÖ< fc÷ ¼äJTÅ1ÐA¾½õ �PÒÚ™WÄ*Ö(Ç4š´3ƒ€í{¸Ïûh/Ãß>häF²&¸yî²—>ßÉsÇå™V²zƒ�Ã:™L/ Æ!Ń>;$ê6wþ¿–cxÚCžF-”ŽzàAw•ñ”rƒ æ¯lÐA®U@ Ó(}©ÔRîŽ[˜7?Zðm Ê‚óù}Cƒ:Jë@y⨋¸€X°ï2»²Dt,ß}õ¼ LÉè "ô¡(Ó;=(;Å;Ãßí‘@(e�2”Õu R†Ù^P7OA)ŸF1á"¦» – �+C)Tb¾ÔbÂhƒˆµû@Q[”Ûh@—¨è)Î"R>Èš`Ž–q\[¼•Ëó("†Pò§"VY°5j= \Ï`r â™{2 +� |{˜b\£øl«W7ô“Wž¾tüV`Fk ëq!Aº8´-�ÁÔ! †VA¾³wçå)nò?9=±‘,ôK2ÖwA—ûD:4…¾ª!�I6ßJØe”VI¯­#V¼™–\éÔŒ½ŠÖ–ÛÅ‘Çhé ÒŠ­rÝȸ ñš«bY}ÌÕãœL‹ïa.Ê‘@^ÍÒ°¤öÜÈòcŠÖGÔ‡ƒ½g=uQ1¤—«AEýgBœ~¹+=Û�ÞtzBÊÆjšÍ(O|g¢w³ÉÜSJãY^­¼CÑü–®0öCÄ„r$f¹üÞô‘/�áGˆW„é‚^Á¥í¯´�Cò´äí¡„­Y:\ã¶vhç’‘ÄooÍ. ÌÅbI4®‰šw«é^C7[ˆÿ¨þ”ôô$÷ˆöAÙ“Æ`YRî}Z :/c�GG(dÿs¤��Q?ä |ò˜¸oÆer…íÉ+°„Ï(t'î-IOw§�j¥[°Æ�Ñ¥ÑJ tm:Qvª9dRÎæ¨Ïé¥O„–ͧ|BÓ›7*`Zaó;ÚÏžeàr 5ÇàÑ4þÔó„h>~I­~§°Òjæ¼}P$ØXv`Û!ô5Û”¹Æ|–; ž' 8ä_(± Êé"r4°÷¡ðëÞæ¢‰hÔ…Õw@Bn6cô~C‚†A’¸áFQºx`÷=�×9š*4"Äkï�4�¨Ý'–�^Ŧh +ÒSäuå^eÏÃ/ñ™¸ +æ´Ï^ÃX´Éõ4hà#ñ¾Ç[Œ¡jZ‡Y©i‰×&îaÝ:zÚ�¢Óâ¦HÇ(ª‡Š¢ð£û ÄzÌKõ+¤ >ŸÒ¶CÀzˆh&êw@bVŸngÕp¼lm$ EÞ¢¨Y^ÆhÀh…�×ÁZ€}‚çCš‰î¼ÅéÞ“Vß3ª +䜧渰“ZØÓèÓK­£Sðî"¯ÏzMØoò§Ö%1¼üiˆÑ)aZr¼XØ]:ì�h½?Íÿ° Ô_ÆBB 铌G>B릩ÀZ`yyø—ÓPQ?ב“õŠ>vj¿Š†§@’\“ +ŽWnk÷Ÿýr²âP&!0q�d +üL›Î¹¡Uøj«mþœ7¦ +Ï‘',*~q„dWäÈØä=î .5Ó¶‡Ç;yCæŽÉø}¹§‡ Õ1S³92…8´íÃÞ9„‡¸PÖ»{1Y¶~º!î>Òíþ¸WÒáŽq´ 2ì^ÛGµ€ÍDž€Pô=.ˆ{³010Êõ„�¸ºüW¨/Ç„T…8\ çg Ü'q 9¼÷RÏ'–•nÀ$ ¿‰›£ñèkôAâp,ö‡k—(‘¸ûq¶Öm$NFÁ@â¾&Çô†{�B ­ýÖM̈“€Ù|õ�A¼pD–­H{pxho)ú½6ÅJ_ 2�ól›?]�ˆë4BÚa]…=õú–À¹ ŒQ݉ÆFèèec|H9<|×+{>_ +w‡‚:JýE753ø§Ö¢è‚SiÕ V<±Cª!—4|ȱ�‹È‰|ÞÈ¢p�”ÄEðèǸÆã:6°u6R®Ykÿ|>¶Zé/ +¯@aQâñ¶¯–EA檲2ÔÏ'K Ñ£¸q‘ûÜ‚c…O*ã 2¯‘ŠÌdçŽêÒ¡*–×îÞyÄ¥(ØÂTÉ[RÈ�Ó«Gï#†RùQ�%4³¥¡â3Ä–ØΕϳµ•„ÀÄ/î~"œ1årTºwa_ù‰Ý7¼ïßR’DÒ¨l·å½ ½®�­Åœë s¸6oÆQ" Ù�[�[kB –]ÌÕ+¨@¶W!pñ®î×Á,g¾ãñ€Tp[øæÇ;*nÅÞ�Ž2hÕbc]‡›†b•–l}T˜)§¯WQe‰‘¤çØtekrHú|ä ²¡™Ã±?!ö¡‹› Ð�x$ªÂmÛà¨˼Ìh©[Ø‘7§®žÁÿ¿Ÿ­Áµ·SÄ îÛ.Šgo§Ó˜¡Úul³ßàè‘tê-„²}Ž /D²¶©k•†É•.M�ë#—Ê9öݺÄYnŽ{¶®WA4ãâ$p#Ĉ’?ê*@ë‰bVr®Ú@XUš&Wñ*ýÐ)à c‹—ûÆD Äþ¯Â)X—uщð* A, ‚dƒ‰Û1ÄÒpk3›Yÿ)è>²)�_ªŠ–�:‘Õ¹@4ÈîæÊ\wˆt©e&’Ä¥-å‚&ÕËhž¤À~b^\Á}œMi!SV@gÁ±çБtmÓ4W• +9«Û/��Ôc—�ñ«¾e‚bI³ZšXŸ¥ ü¬C“1ß—Æ´±JíuÂwr9çdÐ5nÃm9>*-Né¬LG`¸å”œÒù€€´^�Eÿ^Ñ‹ZÈU‡Óa¬'æ“¡æ¤ÿ“LXb•úÂ`"†ô!Õ¥Jw©m†6T¸#†�ka¦i‘�äåË^ Æ°m*f¥ÑÏi™óS†&�Õs{`­ä‡ƒeûJ½žp£¶›½ƒ*»iJÉ’á_ +¿’â’o2­��·FÀÁØÒNes©dÂF1¿:0v±”�°¸‘^ø!e—PG –[zý0ò�-Äðrd—$=�Tû>u÷ÔÂÏŒôˆÂ˜æ¹8L¡uÊÇ©A�6µïÐUc�7î#êâ´ØT½çàÖ) ›ÈƒBA,HŠ�yögZƒ‚æÜÝh *°Î{µ<ƒoFf÷L¡¤íÞs_qs? õ|yèPÝnI>8œÍe€xôÄ9r¤U1¤ÐL=)JZ�µ¹f#ÿš% s72ļ•D; +íYpIâ1,�…7e+>êJyN¼O@®ŸÌ›ÊÕÝ×À§àêt鉯(×==Ucè¨#‘i!‘¡ãÀzÒ¤8§v튲¶ç ˆ™¬*8ýȹ£qØt?ƒ ¿Ñâô–c B¤cõ*‚ˬib4—.µÊCÌEÞîöçål”NbÄ1.¿>h 7”…LëaºÃb†á„ÓTÆTÊ“¹æwÑ4ìEl X»þšÑýrèú%£`s·adç°YÛ”R2â3¨ äOqª¡"t¾ÑÓ­R†+ØÚ aƒ€® �” `¦Pt�E»Q¥j6AÜsÒöX°E^ ‰YTƒþ-Ø-*íϤ{hº«Vh[r�ÖÃÓ•IiÛGШ{;éÕ¥—*Ù‡ÿ©üåX èÎ*F¨ùSæaXm‘ÔV>©Pê–p.p…¥¯Š…D[�Ú´ât;lÖS‹\¨ ýb=Zu‘Ƽu¥t’þÐJ¨›nRr )�Š‚'‚ïGæw ‹ÂX¥ÏÁù‡ø£¡‚Ö(U†=]d¥@‰½Ò& òûu±*£(Å¢áb„ŽT$ÆZ.dÝÙÙ Â,½ÞP^ï½ +pLJ­‰4ØÆ�ú@ ‚äÙêZÓ^¦™á'aŽÄ¹â‡›ÿ{ýM“\$1˜g�¹ÔpˆE±Hý¨L‰�vñ2•8VyYó{–®H%²øìG8Ÿ}5/p( ´øÝ!ømŠË¯P¬Vr'½mÂÆÁ6弑2Í%}Ð¥2P¸ÐP‹$ƒ�Ãeœ‘H¡¬ç’0µ!Cä†HRp ©Û–Zoz½°ÎÒ®dÿ?ã@&£~ÕÈ»èÝ¡uZEòK®…Ê?ÎAM꾟ÁÞ¶H†w¨�ÊŒèüüa"­f¥äž)΄(ÕFʨ¹R8—�@¢é>¡Ä6ÛÊàDf´¼ÎÕ;ùÔ„KȤ úî¥Á²³ëlYñ’lntÛ™bm)ó‰WL±ýWK4—G„ªiÁéY¹13Þ§‘‰Hï™ +÷ŽÉ^?¸{ˆ ǘ›)¨³Õ™@K=ù£‰8(üÄ…ÞƒåNî£-î0`ü@æÆ•1¼ý%œâá@sdx&¡&EŽÄ˜ÔÁ>Ynˆ»wSY/L–Î\ûAMó‰õ§…�£ÁüUÅŽlè»[lG OQ.sqÜ�ñ’7ÈÃÄâÞºè/„еÓYïykŠ'^þ^rJêTй¶H„¿¥¼fƒåçÒ~âDr¦T¹åVi"Jæ+š“¸ß®Þ@?q1Œi`ZZL˜ïüÕT®‹xé‰Ý`ÿp—M,e¡H q ¯èK_ìtÐ}b�E +ÀÚ$…@/¿çš§¡%DšŠ1©ß”6/^Bz×9éÙ2ÚÉqÎ;jþïóÆu8rD4ŠŠ_Ðçhäi1óÇUnè¶½;¤®œÛAuY2ñC ð:p˜¢¶éÂÇÏŒôÎùH›¬ qâ°ƒ] ¹GÐz”ÊVâ>’ñŽué{‰áMWmA¤\K=ó•�l,ú­fç@Ž|=wüwÄÃÞb[9Bå÷,Äh'alA¥Šà 8º¢O"âk’ûBÊ|’*¬œ½|£È @òH›‰Ç÷ äóNš™Ì^oŸše?Ó8é×÷È÷ÐDex ý›©Õ7è‘QFLpœéè‘ί>ODÄ�p¸?¥Žc ¸•/*sˆ#êJO×£¢ ¸HöO ¿Ñ@ŒGÓÌa}g@·iÇ£ Ì”– CQ©ÃÎÉ‘·”éjÿˆ+örQ€Þ`V3üÖ’[~RTf©mêážP¤Tö9—Úbï/k+‚^t.ëYÎ�ïR5Q­%‰ U@˜¿µ85z+ÓÛ’”-²Èûq'<7^9㣑ÆÆ6œ^� +RHsõËòÄÚæÝ›8x(mGŽ\‡rÊyꬑgt}ÅÒ÷Ìcà+ ŠÆÙWŒ#ÔʶTÈ—Ù+½5! ˜ãcƒÁ TçãëóïLè¸AF�ãÈÙÿß�m÷qm2Ž�Ô¶öÇ Â €ïöÚ‘°Äûu±•±� 7ÐÆÑã�ý ½1¾ÎÒ‰åðÌ®�<ÃVþˆü°ŸVx âåAÚLeD@˜9£p)}Ò³„,5ôœú<Ð(ï¦$œ’Þ-{Ø‹®a„|¯Zl±PxÔ–Bdªn6—˯<„­m‡¸B>K+ø#ÚF Îñ£ÄÈä*ÐácÝzÁls7Ș ›—}XØèÈœ]Þ�þ˜šBO¬ølPÑ8&Ñ�ÂÑe >PH©Ï´Þ1dÏ‘DÅ-1ù 6 ›wJàá1„O•õ-`@퇺$5§Ç)æøýc^ª¼è1,ç«”L¨^gK›z9½�ü+¼skepçü¸`™rGm>W¦ÎĺÃÄmbMbWùÁT3Ì,ä£qäØ oµæ…=Ä‚œ 7È:Ÿ«Û÷ÝþK``­£ëSÌån¡ìS.©]´%Q×ڻɴ‹cT°ˆÏwÎP¾àÓ„nWcÁˆ™n08DºÎE6º×�øUÀHÍH{2ìûe(—8æ”iZ5–4’Œau²´ŒÀWìzÍü*�yÑí9nù±! bÖ8ç͸ÉÖ0¿°¬.yvlBƒ�Mp¤Œ38¶³Lrn~"gµzÛ�œoÞ˜NËîo]Èg¤mŸMªåúKô‘˜žøZu†ºœCj¾þˆ¡òÈí'Q¹0%¸ª,R´ô°aHÁ°&äþí šØÿ1=.ë§ +÷ÌG²¤INnißý[zݦÃr7fô$·þaæ7$§|PÍ|±ÓÓcÃ`p4x—/E¯"~'n“m�ÙÿV�*wñ™Y¤b)Éß*ŒÒÊ7�• ›R´ðѼ=òÑßE íü÷ÑÔÁØÔ;ïîƒ÷È�˜  kLÜ÷ËtTLK_“­™ßŸ6Q@Z�‡/鮵adkTŸ"“3Ü +º½7¥,2þ˜’5¹{¥X™Í/<³�¢.õrŽåô½ü�lò×X{�æÈ3øK«Ünrë7í8! Ù5„Ùÿr„n‘wG1K+ðEuß¾¢cäé£cÀØãFÃp½Wۇѻ¨OÙ'G þjÄF”‚%Iè-±GˆÖé/ª¯@E É0`–µ™±|lDû5<5©aäIiH>Wé€ÐŒFup™‡B‚6Â#�°)3Œù¦ò+‘.û¨–¼˜…8ø4›ö£ÂFp¬¿§ŒÆ\bÛ`?àÄÜ¢6'¯jØÐˆí™úÄÎ_{®”ï®F¥áÄ¡1û5:�rë& +#^8¼^h +l&¾’¥Ù |#h?z<(ÜrݶHÁþaæ…’?å¨-SðÊó­mwÂîˆGŒoÚ‘rB¤è“© Ð�h÷þ¦Ô&�µ«íœÌ jŽÃ¤Ø9z“°¶|}ÍÛªÒ˜ˆE�.üÕ-!æ2šÁA‹ŽË³‰áÔ…á ÙÛª:W¾#§NeF�áݛԞZ{¼yôhû¸_ÍûPt™< w›[›Æ…îC¨ïÕhk€7‚­ñ¥µ¯-Â{'�´[ì  cZ܆r2rC…;€¾l–]³b¶Ó)‰6ˆ$%ÊQ,åÐ Ï®JÖ°ö4S€ïÄã�•Ü‚€€Aÿ½ó%˜¤Å�®ü�zŒYEö�ߛ۞,í)#vÖŒtÛF§éï¦,”Yº½É×Ið[T;�>À¶$ý@kB"$¤€â§4ÔYä�aì· ¥öìF^Ø“båöÇçâ>m½ÏÕ MÚ`ψ³ôS[2¢Æ•:pÚ]”°o"¹/}X…!Ätb9DÜU[Õ0<3Tï²Ëw-é`�Ó3’y�ø‹®è³ƒ¯+áÇÜUóV¡ Sá‡�¢ýÚN^müf�[ÆkJšÔ‘£‘')mÈ ß¥K5ˆn>C›¹i, UZÖ‰Ñ_ š>ªÇ_ýÒ(_0#L=d«*®Ê›Ì­zµ¦“íÛÓ/ùˆaÓmì¤bQo#Z›*4Šc�¥R’F_µZìG]^±�d«™– å¶£_Rÿ.€by_zÒã"6°ÆpG6U‚M©ã¡ñfÌ[ ±ßÁý‚ëá\ÉÕ:œ›Ñ?ù<%aÉ-Ÿl«´|Ò,­‘ʦ€Û�ÔMP3XkC ÑýÀ…d.…A�a/|O—q{hª–/S•KðÅE¬™Þḥ@_¨]8Nb€c묇£5’¦•¶}µ¾’÷zÔ½l­uø vC:µ¹Ù¯óÀÎæÒ]a¿d¥•4 +|l± úX1 ë¨¬¤iE{بUZ‘ÅÙ“,›m¬c¬Ø—§¥¿Í' +ìLp*»yzÁ°®·§bH•ûƒ5×?¸£]øëîAW8oH†&†c´ÒˆJq̽Ð2Ê�aŸ<#ÿwì\\/w¦ÒfŠ9ÓzCÖÐÛãNrµY +àX>¿Ûr­ž�¢šMìrϸ|0µ¥Ü/wDeVA‚Jïè3”ü™û“êÁuÊ�9Û`ßb7Z ò‹7=…×1? U ÜóÑ ªŒ¬ƒ‚n�b#vó§°…šå„­«DÇA{Õ#ÀžÜRÅ"ûãݾӣš¨é?É*³BLÍf\«oée5®“õjl£,vwFŽÌ‚¦CÕdÿšÂ”=>¥Ìì2ÙLŸRš÷®+‚åVmgÙÔë7°Í(¹y÷œWN}�L§m =› Èϼ3}-Éó? ™±€ £'/9[å]Æ|@¡ÆeÎÚ6âÀÇÞÑÚÎúap¥*P¤z×ëû$LŽY£ÝN…Þ[ƒ¢h*y›yToÌYíw#ðh½züëˆ6 (h¼0J1®ãàTJÿ"¸Ccÿ–ÃN€™\‡¦M9yš“Ãä6³ÃÆœ›gc�¢‡á²w?–K¤, r’.~†´e6{�=,½´Ùe+G»1ˆì@¨“ˆwMÛ±¿yÍÅf[&çšæ`VßAŠeÔÛ¤O…0úšáèÛWnþŠ�ú½“Û;þRã€.xf¤æi†Œ_A™H#ó̬ +šÅæÏ6E ôqÌæ%•ãbŸþ ri§é™[Y¢J[Å'�‘çwf5ÝùI ÈUÚ‚¡‡±ôC@zB§Ò×g„6V{‹�‚3¢¤u�ŠHó蘊Æ.¹ >„ UÇ@ne§Ÿ…­°å‰tjÛi2 Ù‘�’AŠâ1Ê�ÅÓSÂË ‚æ�c$Ëݨ ;>„ÍÙ %g6ì‘þ9‹b`òÎ�¤«Œ6kJ‚ß'è¬ÎÌJ>£Á� Dé.aôŠ.ä³eÔPê!oD[�]‡çUõ¢–ëp:Š º)¤¥N_sfé‚ÈWÀv%jÑ™óg,)G8GTzÒ + +aÚ//çcŒÃ§Á¦üК�œnŒ>ëø&Ó:o “r45˜ÿô 6äPËâ¶è|Ún­ö(;²:€i‹ëúÁ�Ö’›Ü_‰r�E´EÀƒ·†Ê ôœƒ–Lö­ s!)Âiv ‰ØØ,ldùЏ•±Óºö,oQ2ÿwñ\‚¾ &Ÿ=%zúo:Y• ±æç?Ñ|о‰8l-lÊ ß0BW•)òàR¢–c:éES”DÙÂèɽÀì Ò=�ñy #.¦Æô+j!’À¿ÍîTµ7ŒNßÅkr„AJ^´Î(Δî¥qWU¸�†oWšgàé¾ßŸ—¤{£›Žé¡"°ÏuTÖa´UtZ=p +¬t+QN­u¢/Cj¤Ø;[Á÷#l} ö¬I5†¯D71hºfàƒ�“! ~O«Š¹xùün€ÿ H>ˆðÎG‹»š'µÆS<šY¯j}¡ÙeÁµ‘mìe„@”>ˆ*óQ}—íµDÈ:T¤©<œ0‹êÈJÄl´iˆ§9°ø¿ÍŸ=9ýa:÷_¨ÙYl¢'ÖE–¤óù²­ÉN¸2´bôsù»9˜Py«96;àæ¸heï¶îŠ—ûÎ RÆså%JAe”´ºA€-Ýœǥ‚Ð2ç“©‡Z {ïÐm­Ø[ë|.ï]aéAt6¸¯$ßn®ŠyÉ3pßžX|õ8ô¦ÿ¿†õ:E7èçÊÍ Ê3ÐëbàfբΆ¥ûGW¡*‹,Z[¨±Ÿalgø÷˜± ôEYÐt^|ðí;kÖhUË®M&Ö²{§-Aëc¯6 Ölà`§·XÃר\¬us@Ör1í¨CvdÖ endstream endobj 27 0 obj <>stream +>ÂÛ)«ÁQkÈéMz&¨£´ö2Q›îN5rðˆ4’‡o#c7×' +¥k9Ê.W«¿ÿæ]CRŽØÍ^#ƒ¼Ò`Açµ”x Z;F¡k›ú»ÖÖ*œ®Õ7`S$mÙ5reÊVé):è5$òOZ뿆hÌGò†rw1©pe±í4KeÄÏ»ÛdØÓ$�ËWÌ d~8bãwœw@¢€i@Á²Ç�×Q=¢ý)'Ý&Ù[°ê×. ¤8SKÇãxÆdÉòAUE'…+.«oIvY€ÝdÌíN6¹õ‡J=vc_<ô®´¾©Õ:B3N½÷¥Eì2�;•ì(Ù9DZa €;HE`1ºæÖÍc{de㑞:JvÚ_°a!XÌ%דG¸HùÖ÷`«a'ù ®O÷ÉS&�ÔôhFMɸ´Ö“qçZc°Õú ¹±gÀk÷Á¦8pd�hzqm˜sz³í.'p ÅîW5ÁÚóœqíuæ+ùüÙxöµV0çÚöŒThwa³�ïWÂí^É«ŸëBr¦7ØP€�rÓ6öh”ú >ë ê+¦KNìÆ©e�Æk31Ž‘„X6 ÛäÔ6=âš}ÚûAó~T Л߼ŒãV$5Û:i÷ЙxBÄ­>Ò³mÑÐÅS½šdG¥“¦Àõ¾€Ò›TÚÅ­s˵mr*x9i“'¼&N›€Ö&f=«ÒfËÙBÒ™�–Šx+žéC£Y\8“AãÝA+h„âTÆ¢ø£Crbu�ÑÖ²U%B7‡UI=2jðw^¡­ �Fu¬6MwÕsì­Ÿ7I•ŒA™®LâB¬LkÌä²»®)3j=ˆ¡c­�››Ç|=IÍLkM¢,žçèËäÐc†•„22`”¤�dšW,>TÌÄ©™*ÎFP/€v-ÒµÞ{ õAÜ_´Ê*6ÐBÊ6¤¢÷,Si/¿¸ k¡5hYUk3�Û�Gc„EÀ_…Š)Kà‰êÊiTi˜»ÚÿŒRݱÕó¥·±B‹§/ÜÊBo}56B¾a˜Ç8½e&°=i†¹"°FQ¼¸öX±g519ס#ÀJ‡)�²¡)ÊѼA3õ‰ æK25n™Ý%žÕ'ªÕ¿†åÀúBû‰rp\l}®ƒ)ÚŽfR½û:û¥¬oI.qÏ47ë|Ù*”"­ŽáÑZ ñ �³N±qÎ#@þæîZCvøH¬æÔ׋†‡>…:„iº¿RcQÅ}çP¨G�TŠžõÄ™~ý Àt…"½"ÙL›²y"KP �>°Ž×ÌnZ_±°œÚpŒÚr�“V„ Ù5êÒ÷—Ó*è‡í¶‡?_|5ÅžMN"�mæ±C¢i¬n9Œ:ÊCλ‰r +ÐÝg€Í‰ˆ9mv{{¯ø§.®~‘ÝP�"AníïŽpª*$ fŒGxwL;¸«Œ/1o³–†L´Yø— +¤; wä’ üÖ¸/lV»6›|Á–;ÐiȾDûª—¤n$~óÏ8cô N>$ÿ°6õ_�ƒç¼ÅæC[š³õ7ûÛCë¦ñî�,ç.Í‘¢:fn­CÛGD.ÃE¼‡g�X YæÉ ßQyŠý¢è<3¨ö×Õ®šÐ=t“ƒ_¿�€Ñ (î™î‹7YîÄøú‘r{òt£˜«Å�þ¤Àz2Åzm�J‘FíÌ 8 ÕÒ H I[Ø 6ÈH#2]âDR'È$5�*†N 1 «~?¹œN@D)~˜XÐNèÚÈÀ |�Äe¤8p8žÜ âOÛ`ì„!˜yxÌ4n'ô +!¾RÛ ÊŽ4ÂTS™h7/Û’î ù²iF;�É]UîÕ±:�èRNvÂð> ¾Ÿ€ŠG¼ƒŽ½Š{ИÞ-W™¢p�A6ÌÊÎ…vrdþ6q�UY-ØA rvŽˆ�ÐåãÊÁ˜Â8!,íþ>d³¾Y‚Éy~žŸkí„xb‰�[µ>iB/„‹ü>`D²’AŠœT žpó�îÞ|‹'¤z™Š¿›ñ„q™³d¦žà´ 1�­Ê¢c"ß¾û�“W•ž(;¼;˜k=ad D޸ǟz‚v8Õu²Õîtùý@L+z‚†–äõŽRR]‘ÑpP„é4cÛwùæ²oïšðzÂr˜|øZøvT ¾ÝÃÕ½cy÷pžøP@-A_‰ñ©&ìæH¤µTT²Ô­ã (HõÿGö!d�?j­`éŸ O»t³ª".‰ža÷©à0XŠU$¨¯_Òš5ÿ¬ŠAÂT3.•®URÎÌèáIh6CÁ·À— …‘ÈÆ"’ +¯ëRk£OF\HÓ˜|…Ù&À!ÕðáÀr˜Ë E†ýzH‰ÙegO’b7Ø¡èöDC¢°â +F6 +Ùl£GwDaÜý!¨c³Ów§5›Š‚`ä„ÏAC¡×eSE!;qvô" ™þ˺üªõU«G,FJkhb£Á£õ¹ic{ýÉŠÂòíRdíÑOïÐ,WY‘(^…©£c )mN�>p…n´ØªÁá_ïÝûF—Í) +ÝäÇ5»ÅGŠxxýq+`÷Å* +÷åöÜÛª€›ýïÂA’Š‚Ìò‡¶TB8Z÷Ób%!H"˜Vs8'¾Õ=fB“%ø¢0NtAe0_”·‘ +lôö¢µ~\$ú‰ÓcŒl€(¶bñw7³¥iFŸ;6ì(Líaª²!ìòMÇ!TG!%ÏÊ–)P¼´YY>RÙ4vSR@ìHÐø”´¹}Œ«ÅŠÂ7+Öî‹‘‚ ÕÙ f$±HAK“piŸ’RïÁ†HáŽFEž+Oâ)Ðýª÷ +œ0†ßo8”¼GÀ "ó(„SÁ&T‡¿8zûÜÈõÉ›eF +ˆl¹ùÐaÄóÄŠŒOì�a¯FîH�Ÿ±›ÚP;�©;àuËÎ_I¤¤pöv†¸äaÍ:/þ>3ÞŽt/×rH +’F�­5³l²Gº1ì׿©äk#¥wÇpµL)…ƒ�U8`¿kç1°'�'å|ZU S—Eˆ·+�C¼ä“Hc +‘}àÿ.+à�4HÌ*Ñî�k\ê=þSÐCmÀ‘*ª¿0•Ыô‚h»r Õ_*·ìàD´«‘qÑ+ÖŽ,7NT`ﻞ[µýȈ +­F«ò²YgCQ¡{þvXÂܽ¨0öÝ@ +�ɨ.=µãþžcRÕF¹I,äûT)ÆF©p‘e&¦ˆW_iIKˆjͪ_}Þ îR +ãL¹1÷³³êæ�µã ày<…’˜ˆíþ£Å¹×8 `�aYàøž¹Ï,öüFŒA÷J0ŽÃO^O½v¬¤”]ˆÌ¿ú6r·¿opá`SŒVů—ù†ö싯sK$èùh0%‘ÜÜ7£}B­¿%¶ahÜÍeÝð„¾ºHÖÑ'ïmÂ…3~YªºÐoÍì;$éû¨ç}“ÿÕ>Ñû†âoŽÆÿýÓ.-ìMˆä0wZK c›¬Í]ûQËÍÒnG#º16¢9•µ�*–Ž0 +¥ Œe®jä&êÖ‡OIS¡Vzÿf¿š‰‰�ÅÊÀ±¤XΫÜ}ªKw3S¡ê2¬ ƒg½Û=Ò¡90 }ȲÎ)}W]©‹Sø´®tT]„ÚÐK “zdJEp� oKÔÆI¡Â] 5eR˜섉ºb5=4žâ—ºÌ[%&•°0ïJ#:3��Öñ¨Ã§ž"‹ØÚO�ÑáÔDš!)WÇá„ +¶êCì¼¾ŽŸbˆàp,-4#fF⌹#Ü@*äGZ66Ü¢Ea÷^ú®.·nß2!¡‘r•e^AËÐ8¢¡ª9Šf…ú†l‹Pø) 'ã0Ja�œ¦#ª‡)Eˆôb—‹ÂâÉã@ä¶bê�l¡×‚´Éñ4N½âíiE!BÍBºÔMiŒ ÈAq2æƒæe,DÞÆóR�ÐN‘ѨäŸÚŠÐ5[B~‰!…Ûx¤ÆÒXLƒ°Š¦>Ã×+6¤ÄHðÄhÜSo¥�� c[9#‡°Zóyo¢õO hì ªèè•›ª®uÌ+Jš 5�tYƒýw6FCŠ ën¥¨ªdq¦4‚è-¥œ¤Jh— =Xˆ mô�„*È,ª ®­šºVv&à”p_#2  €!€þ1r”B©Ì xOÙŠrÕcjX¡x`ˆèy-ˆK9*nXV$O=ŽSŒʧ¬H|3DòˆB5%jëNBEn*TÐÈø™†XYe‰êá"ˆQ¢`W §æ¤c› >¢f�÷¥‘OÓ†¡p€X´}bG«øp í§$1jdltÊŸuõ–…–°¼úñ„zg�2¾ò~MÆ/ÅÈù°ŒÌÅO%ü¯vEfï-ÍëÑéÕ/Žé‰ŒµBÛ\ɯÄGËRì^,ÿÄqõ.¤4/™Òh‚®r…©K{Œª+›r•ÔT!!Nx=R�¯bªÕDg OÝ4(%2¦âãǦiÙb?>>"�}»J¯¸(E‹­ãWbQ‘S�éÏPHæ5vq4a�Ý«<%E%¡õ8”…?ºËÒç…gÂ3ǰJþ˜E©ÆƒÎ¡DØ�[ázJD‘ºùµ蘩Gíz…¢¤©˜¼ë˜ª–ÚR¯pH�8x£ˆŽÑd Ê”Mg]bGÍ×!aj*:{)š�Èd¥ á”jÉ~k$»îœhol„Úó[5 TKwdÂÒb8æAËMñª +º"Œ¦‰ OH¬~5—xD™9MÐñܵÔâªÑÇÃ%U>ÕDxHNíçÕ–Ä„/4ñÒÉ5/†:ê„ +_.4¯a5¯°Ú\ó�ê1Ì~mªr±O¯Ñ#eWÔôâ  €"B\qÆú:µ`o¸ +�äëDk¢ÛHç~�á†ÚQJeá(f²8Lì�±FBco«Q|Fë‹äNžˆHgBŸ|5ÖŠ‹i•Œ‹{æ�¸ó�©ÌØB¤Xä°Le�­ö(8#Â©Úæóoä‹L¦(„ÕòÈa§No¤&-+Ç.æ*)•db1K´&D®éêÖ6–ÚÂyàovÊ*Jò0ݬ™šžÞ*'6­çmSš@/ÄsÜ»<¤“Ö: ‹õÛŸˆ0¶0ŽE3—ˆU¹}:§+6ožÙ=z7Ùb5‹ßqI¥‘úÍL¨%šça¸�1 q5Ù%bF­�M]4C§ý˜øŽª`ˆ=w5S›Ç!”ª‰¡Ý„¦›[F%\‰KÚ«M<�ègøc†É¢äDÝ…—‡×G-bT‰½3±KLìžcBcgÇ„¦õ¶¯s¹ ��ä¶¶�|b±Æ.‹uŒqNciZŸá>z•æçjIÌ#mdvcfæ’po4¾*–bQ$©,&Qg“[6va¶aX.-š­_Ú6;·pøäͬ3$ÔVûj €‹FH7qÁ\̹I©ØÍå6[\mš�…â"6ϼ‘†ÆdT�Ec�M+9&+ZMl”ˆàH†–×eœkº1 +­á1î÷xýÌBXú¬³ŽL4qkœvœ.ºn~c›`ëÏ{½„ã°C$³Œë‡JƒÑ¡/aIIÅöÍHÖ€F.”ÑJ¹\”2*ÔV4:'%Å1jÜL+© ¬bQ…ó•=,V ÝO(…Æ™RZ“H‚Þ^$Z�ãäBuÊ%Š#é‚d¦…=¯§5‘ò0xZߢÂs«óÖáˆo<°Õ(b“Y5AåýQN=deL…'ÌpâhzE‰�Z—: "GedáÐjVdªÍ†fDAQ6å€&¢8j•š’ +2�9èU¤��˜‘Vü š<&v“ªÞ=m~dŠúFLQ#•^Rþœ()‹ªÑ©YU¡™RY +OlC*'^Ç,”Kœ'·ãœ7®B²!FÉ +1…,°íL”í‰-w>Ÿ½¹‘„X#B£Ä¨4=}Ðúv*é„‚­“[4×[u·*KÈ(1B×_’h_žÆ†Fਠƒ+©Ži/2‘%xôÅ&¨F}‹kí4å\é\[fÙSÔ4±Æ:"4¡JEò Æ6ŠÏl´Æ¢º%Ìù,Æ©X0|ºT©Ã$34&"BÃ36H$æ"ÙÔ •&ý……ðTEC²`)L-:»�Â[ÆG¨L“ÐõC( /—ã +žHßëša6-‰!º qAFˆq5ÔVX¥¢£ª¤øC)!Ám_¦8Q4� Ó䘔ÄCQÄ."�.Ú"+„Ef]†âªØ9 Ÿ¬Ýh²Ln»Ò9ÑwK±‘±ÜLŽ7 +wÑ7šÕ&UùÑÍ ûbåÒ=1*j‡¶âKây׉0ôåñPŠ6‚JÈrñL^Óúw7ó T4©áNja¡?8Æ !iª8¼‡‰¦©k¾ŒÃ¯†ƒˆ _Ë!.½@º"ãEìUZØ­w¨2ZkÈ®á¦FEP”³ß$E!Ô‘Ò{™gŸ *‘hj¼•„åœ'ÍS©"=Òz "±œR'Ó=óUÝÙhØžì“õ.D›‘«­²á0ŠåqR­ĦM½1ë¥ÊQbš*zh¢•„Ô-DÝý9pxÖ|GJ*o(;’É+h–Dªˆ6r¢ATfÅG°ÈLƒˆû”Ø]v „„áØ �Æßµ;¤@Ù�”v ^ℱ„”ÝÌñÀ;#C!ñ/G‰¾†ù2¯ÏB8�2!WÕ@·ÄÁ6º:8®µÆÿT<{”½•<3#“T.(ù‹Lc i¦WbðÊ¢æ8Z¹üZØñNæ(5Ñ×Ób'f.ïÈ C[@íj@ùÄu~NþF’{õ4ØØÀŒÞL•Ôd1C'¹B%ý¸Æø y|MÔÛg�Fnèô×hY@\ý*�*xC'°Y3øò ÍÑÄIùõ�uWXØü…ÀÆ=ƒ¬ Q‰†Nù¡Zaÿ¥ã¯â÷à/Tð™K4Öl1q¿4¾ònÉ¢Ço6#3t +)öáCâüAÛ4!ÉB#M\È€�ç%õØ:5¶iÈøhȉ+ '«A"‡c¡Z2ˆø®GŸ‰#à>Òˆ;:½øˆPt'C0Â;vþBá?7Þh`óÆ_žš�, t,q’®² ͇Œûq‹êî›ÿFÅ9fË�½­­Í]åòªH;c©júýŽ¿�þ6ê5æ‡ó’H"ýßÓ1SþB%뎄·ÈµÆÁ_¨Ò˜¨(Ä]|J¤L6eˆ€;x9Z–ËŠö7tБá/t�ˆ�Ørù³ø á¹Û�댵ø I*c°•èÍ@þBQêÕ 1ÁÉðJ¡†ÇgD9+¤D7~ó"Y4ÀÈ_£•N “þB„Ü] åªìã/„õ¿ HôlUzx‹Ùâ/SH²Ö¿@Qž¿p×ðÒѼâæÇ_H9<Æ¿#uYß1ÿ!~KÜ»VÖá/4y‚rØã<6ñ?èb§Ýù ͯh|™P.3!¢ÄóbÖ£ˆ­È_h‡6U‰©ÅØIø ™#¿1‚™™—ø É!/LéjžÉjÀ¡‘]$Ûõü…ZH—°¼Í@ìOU(ù�¿�G�»^Îo4jÄàü…&Ò \þÖåzÓ%ü…ÆHÄN5qêƒuËÓÄ:ŒÔ )Ý/mué›_×§Ê£mlµà/ä7k6)7Þ1gþB†.)Ï }5çä/È××Àä!!O™ös +Ù^ü…ÈébKÆf†ò¢Ãõãã/¤µæ‡9y~5æ/ä_í»W6,èÈ_È÷§AÚ^2i¢­)›Uü…; Aæeé5ñš +¡ �Ç_J¥Hý…Ðìsƒ69–î/ÄÜPù«õS!L÷‡ºTPSþþBð’6ͦØu¾ ö"šéê¬n!ŠLë`àPký…ÎÅŠÝèG¹ý…扰_\½ß|Û_¸š*ý€çœ‘ Z!µÂ»‘nóxœé/D=‹�kåýþB»V +nKèjý÷Â×GQ2³†¿P#ØÌZ3éšËÀ_ÈÊIJð¢ì‹DBTÂÙù 1tîy ‹k0’ù ù†;hãáYkM%ø ‘ÃáF–i¨:)@ŸÞj¶Á_(Õ(9$ü…Z™®‚Ž<þB¦,gèËi›¿PÀ‡]ƒQ^â,‰( õnJÚCWjà­žuŒ[—Ü߆Êw.JÆ_Èiøí“aÈ_ˆÎØFŸn`8kç/ôhmèÌ@\óÊÏÕ²µ˜Íî:þóœ;ØŽŒ¢Ûÿ¬1Ù¿öC1·_Hd¿Ij›]•1�ïúÑÞéi±©@öueð†}¨IìÊ€ê%\ÑÌÙ´fnà·S73�PµQ`¥Î¿©oOÄŠ0mn¼p¸_í½”ë×7ú… ¨=ˆrk�~!—5ë +4y®ç“²ú…öh·/çÃì©Þ1§°ýBã€&|Ü^l/nö �Ó©cØû…ZW�ÇÜÔÚ/„!7*æÓÑ­lGpib6™ö ¥Ë©±ùñO=Ü/ä±+m>¡y¿PqüñýBÏÚ=úäùép¿¸Äo?¤Ï–Çü…ÀQG`q +ãù q æû)¸¸.#dM­Ií§î/”#L³hBro!/­„z唿¿Ð|““^Ú"¬¿Ðóe1ÓÉ]¿´.C1 §Á ^ÔÕgãhƒË&~1 ¡×ˆo¤hýuI[¡–å/,˜n(X) j›õÓ´Ç-Ö¡Œ´µâì?B¥_´áãøýÙ‘LÜÓ~㚨&àmñ`9÷*Ú•®�D`¢�#Ý“½tó‡e¶Ð"KêU–q¶eô$1Ø…šqçCÙÂz¦þÙ Y(úr£Ï[ÅUïÒþB|hе§ß ë/ÔªP˜ìÑ_‹€ÌPdߪ ªÆÂf”Ú¬m–6ÍY“v¾å»ªˆ·‡LlôZU[�Ÿ:Ÿ¥ÙÝd^~V¡K’ãŒÅîFlƒöe¹ +׈ü²ìnÊ}Ϩ{3°»ÁM!€EªjÒ¹bwÃB3ÝÏ<$ÂþB^iiÄ §º¿Ãp.…­Ö_hüQ¹" G†ël¤ü…ÄQ*QF!E.™ÝMVÎáåʨ¦›Ã_¨!{@Koyk…¤= ÈÎÔ‹ùvÈîä&þûµµN-¦ØÝ`Ž€ª:ÃïÂ&ÿEº(]‚º_(ï¯Ïné�öÆzªÆ~!Þ�ÇÓ"„8ÚeØØÝ �¹”X!,cj8¡L5_jž)�VyAù~¡ñ¶Í! no¿�3ͳ-‹g÷»_HÜU‘‘ÌeSÙÁû…bã-ßãàÈö¼_(ûù³òýBcg$V«C#û…šü´_L‡×¯ÿýBÔ`™ôpÊ~!/GhsØö á“5~|·¸1‰`¿Yµ¸áí%•4¹¦R¬½_$öfÆOî‚}RàiÏ»Mè¸ïʉä m�ÿ~!ŸiÐg#„æCQº¤a˜ì[ýl!ÕTí>˜§½_ÈÐîNtÛUrö ”J•;¾š¶_¨^épUäêÿsÁ~¡¬9^ÚlQ ÜUö Û >—Ïîæ +V¿1T·ƒíŽ2©¿Ë�rú…�¤¡à¦™ªë‰ϰfC¿ÐWµû·B> RGôþ Y¨_(",Á¶îÜ3ä¤_´IIí……Q¿Z#¤ñ0‘¦_È“xôõÝBõ É=„x8±*O¿PS:.Y­Kuô Uá1üqÚ%6ýB4ìƒÓE‘6_MýB4�ái3î%f^¿�dØóÁ†/øPöÊDV‡„`g{x|Ïx–qT¡9N†™{‘~k€�!ŽKémzSÏ] {Áú1úV½]>º^X•«¸lúóë�Ë&S!º¬¬¸[¥ºèub•¶Q™_“ê®Èp(úÞ=¾7�ñ°yJCOÙ´’;å m +¸Fm0˜Â‰­SˆøêuË”r�Ü9ß>¡w™; ì1\þ¥LûK0ÅŒ%o_uR¥\ù)Qp>Á•‚gšàýÎKðF±”JbIa¤lM"ÅŠâr. wS;ÙÉ´/0{eÉ24:¾¸ÀSÂâÅh®¤ê¡‹Ë਑3ž†3÷‡%5þÎtB(eå1ŽÕý\µø°™=ÅÆøH‹A`ÚaÑQ‘Ñ€£/Õ1×0¼L!…u²°¡¾—ãßøZÌ!=£xxL ,‘ßqÆÇ‡w8ÇvViHÏ€‰:ï[¦^óu�×ýÞØ»å£W³/µ÷z¾GIÚË2ÐsõzÅ”ã¦f ù–/gôõ… \ky!C— ]À„NblÛáK�4’’Ô¡�bW‰”�²,¾I'·Æ†¡½w‡¾xû¨‘)òRvº?‚ïz‘§/„¼¾f‰m�O—I¯Š1hbŸ +MºHj‚ÒÖvA�‰®¡uÿ—E,{ ü?¥€FTGxÄŨ–&~Ù‰K+ ùwtqúè -›Ä ÆŸÇn‰8úBTXý®îr zeÓiÿ¼Ã~jx{Ž�Þ¿èúB£B"ÇÀÈvj–qƒí¿íJ‡Ô +….Á.܉q}¡„ÎþL°ý +eŽE€lcSuƒDèèJ qº’µxG¶úBÞ“bw†9ˆmÝH£.Õ?hõ…„WôŠP r(¯º¾�DD?ˆÉ™"þOÖ«/d89/|ûè[ÚÉhE_¹ÁëTnz9l‚IÄI”ª¼•œ%üŠÆ7’†`€Ø;fL„±¾P)Vv¾µ€‚fýAbKÈ5ÁMˆãüûìxøb"8¼B±ªÚ–´d{²0Çß)ÍMü BÀ¹42U�ƪ/$0^Œ4±tŒ š ”l3ʧúðfØ ™b^HÁ.lã ('y$õ….;øJ„C(H«M&æÛ’R†è¸¥úB9:{¢¿\ +ÖúB‚×FÉÅrÞ=!>Q]i¥É £¾P´U8XïTÇ) 29ôœ3K« êâNU¤¹.Aì�çiŸºz§‰6Oß@ó<^�ógLýþò7¹Y—`CúBb˜Ò �z¬¶T#yªûuúB®UÞ›�òO_™Ï}wÛõ¡/ÔÀákÞØuƒhúBQÙËe#w /ÈŒ+âÈÏ+y«êPguúB@ ŸÔ•�Hé Õ­Îhy} bJ_\ñqÀP'êÆN_ÈÆ£m®vä¿Ü‰¾Ð+‘ÅGMF¸ô…“¦’¼ÙUè Qš¢>Ÿíõ‚æô…ø ›w^C�h¸‡ÑjÛk‰Œ-§9}¡^T_®WžÒSºÖH�ê Cï{}uÛ¦9=ÐKÀé %²TcKRw1úBßt{6›¬Ž§<ˆúBD;hf3õ¥/ä5úk`뜾�šçìð²Òš÷ü æ¤CAô…ØòÁÛý##VúBµäö•iý©¾�Ób¡yAÁÉOþP¼¾PëÆ�n*a}¡½q%xß¿ú�õ…èÇ✣‹âœ¼¾Ð,¦q!º˜B¥õ…J$ﻣáE +E¡ð¤‘-2èûG=$¢¾PÞ&[Ë ÍþúBò½âƒ·xÎÏQõ…–Iƒ4öÚ¥×jÖRx„úB«·»ˆF}!˜�Ó +2ÆÓX:hå”úB…‡x»õ…†’fº†¬/”zᙡÎE¡kº×ïq†¾ÐƒÀë> }!„¢bƒª�ô…g‹dº§Í8ƒ0ÊC_ÈÈ;Î4¼Ã5_h!£]Í`p.ÉñÉV‰�Ô\:í’vKüGœ¡ø€ æ )ÞcÁ#°…ÉJÓ›Áu½J�Û!Ë"×ü"¥aY¾Ðÿ‡:$½opÏ +¬2|nuÅ)΢oªu'ÎýüZ[â†ëxó…ê#©ÌagÁ®ùIí|!æÈÁ-HÓå�«òÆq¾ÐàA€r³q�ùB¼ÇÔ†ÎÚêijÁSèùDæ Q¿âŽ·\"�/=¹d_ò…–î õÿ!�yÜ›Ë�/” ‹¡ç!dwF,_èÍ +Gv°+M¾P¥Ÿ�ÄßÓæÒ$_¨ª ÞÞÎ^wùB™�ªÓõÛ�Eä QÂéwÔ*}4£XùB·wzå€tqìÈBI4.+`m�nò…ö À#ÒU¾PX6ÿKn¢ÕTˆoö:h¸¹Ý9Ôò…æœ ¿ò…¾�oåu%bÔAÞNéS^€tËÍ4rù/Òi‚%¦%Fø¤!:` +w |ùB9°Š¬ØØso‡ãÓ:Jå™ëä µÆòºÜ]dò…2�¾æG{6–/ÔgGÎ z&_(ŽòMA’/Tøoã +'P6[˪ÿá»ø‹ÉBØò…Ê0 .=Œ]ËSA/ÛBÏüчí‹ÏÎyìŽrå 9 ÊõÃ[hP0‹àí„`ê77»ärf8½§ñ|HÏŽ0yC!¥";ó¡¾_Ò•ÊȈ¸n¾PpÏ/ÒOþÌÅÎ¿ß Qïr¨æM7θB!O‚ØHA4"ýø‰…ìeû*$˜hnŸPÚZ´¸±„˜cLÓ) +¨æŽz°!ƒ�FÜlÙ0ÔêU8¤+%{µ©°¶†É³aHA™%#44'Simúrq¤¢ËûBÁã & ˆŽ»¹×B+s§�Ð +Í`PúQ!ÉBö…š@�V&% +IP6³†é&ù^ö…ò�üÁ-‹  PhûB³<ŒF·Ü‘n´/´?2ÖÜ¿YÚûB™€¦Yú?ÿ¯�cêaäÉšE6sš½~Ä@¼tìèv��€²þM”ËV9…k³Zmè*ñ2Øq•ëyêa›.³£+³©�³¨Â¡Cs"ÈÞ¸ò8(†>óO<ëqf#Wù6hܾ?JÌ&ë‘„¾Ð÷ ˜h›š«òL!ŒõpޤXd8gpýjZŸõhÍ¿¿BêÍÇkÖ£ÝËôtªwB›Ç]`m•æ‰çpú›ODë ÞÑ»9½š=ÅÞ,µk4'Ìzt<œYKÇY¡‘ñèæãµLâ'I3�f=&”MÄC-²s 0Ìíö ú®b9U3S�@éw8; Ë £‚seð- ã&vŽl +Ew>úÐk5¤,Ô � j;‚LÝXCw?32jÌ�µPói„!íN,^ �¶ÂNUÜ�1Ö#ù3èïÄgÌ ÆXº7àyÄV+�€™ .[û䪣Ÿ|TÙ³Ê�'²Mò2B× +Û¬�M�ünø”ñ.,¯)èOs�õÐ�{�¤©óžJ“Œ#XŸü!½WÔCZ)ÜQÏI=4ž<Ÿ)ä5©Gpc¾È»€‰»*!TP&‰f}r5GV©t5]¼iR¨AÁÁ|®RåPg2^Þ¢0“Lp3«i»—)ˆŒ¯“2îu×Jb]A¢ò×é{ºŽH­aʲ…µwÖˆ� (t Ï!»Ét2om`¦x–ñ›q¹‘5mmœz¹ïÙèy¢¾þ[kP³»Óèx»·~:ÿk †S¿ ˜»©ÇÜþo(¸MŒC9)†õ´‘Œ6úÀ㨓äO=ð3@ÛyŒj ݤ=ð+û$â×ÒŸöøê_6)MÞ¦j"y¥i.î(ê±çmÃŽ ƒJ:²D=¦IÕ�ìBÇÍÝ—Sµìt†réñÍä‰#ëxÎj4ÂX¥‚Ÿ*V˜§‡l)nvõÿº)ùé�Åi|ˆyz¨’âaPpøô�BqCÕózz`£8…(²¢Ø#ƒzhPœ +»@=rRœÆ,x)šÔCŠ›GdPØY(ŽÉ0·çHÏ$"°?˜2Cq³²¶ÍB)Î~7êÔÃQwvÿ2ÊŒÒs´Ž‹gÔ€zhCqJ\Ù¶NÕ†âøABÇ¿‘W—Ó#¸*nb`×é�oŠS_ð +Ð'PëéôžâfyŠ +8g³æÕôðÖe Ë&.°oz8|ì¶&EÓË ¸ @Ur@SÁ•·Ó<ŸÀ•wCAkM´y=8p c´p•f×0a¼-+NÆ%}vèë!�f ?¤gVù¶–²þxNk:Ň,±ÍŠ¢Z ‰ê«q¡�Òk4 ³ºDÂP±�M• éR;&'$ÈP¡økrvè‘ÍÄôèÊRÁ‡—²ÕBâáLÓ#ðgK¢ñ²DÉ�ÄÔNÔ¼Øò1ݽìd*Åô€l¸æT ÁÁH"Ãô°½£�;^ç Ÿfmú ]ξ¯ðQyŒ¶Ö;+•��›‡ +žôÀtŽK²Dã“›70–Ì-ºKO+ÿ®Xzp9^íÅ Q®”j`à\tQnJù/P ÀôèÀ­Ñ´ ?Nê�]§›¾:8ÛúÈÕr|8€œ :Wizd§–CÂbª½:tmAѨÈ«ø}žI�¿¥?Ò/>y-«éÁs;~yl÷*hEs/eõ¡J¹îò8÷f`3ÎH:âO:×<¡S’é�×ÙÚÈ ì;ˆz²å‹äXÂôpKT-l¯:9�ìü§‹O„jhÌÎÒ#̃)_ï™F÷G+ƒÉ.Ö yÏß©Z]‹‹K¾¬ +u@ÇÈ"¹þ»üu`ÐM�*�� ã:X<ìÉ9#£(=|ŽÉ¦IÛ¹n¹¬ˆõ&ñKUIUzð…�ÞM€§Ä\ ^)•½ìµzumÅÅ�HÛ”j×%BFÎ-?¦zá3P>»‹ÌL‚³$ð>Ùy™®¦úË ”õÉ2—e˜.¿Í™R‰æö‹Œ·tÝ®ëÄRé¡G;îþX¸àj—“U�êò� ÓÍfM•&8aá �ZLj+eíÒãšèƒ^߸D¶I gñk‹–‹=ÌjiÍ”<êC]ÁŽÔ9Fäç™�yKØ�–²iL†³nŒ-=:‹6À›bó¥Ç +êÀ é +pÄbÑ:ŸíQBËS”‹ÜòÈõ�BìZu¹1|«Ü.=´O‰øb¼˜L?Äe6®(ûˆFJÀÃ×™[÷Ш»¿—:ýs4�™hùÐ8ö¼ª¹2f¶ Ro-=žðM;*Ä4ųw/=¶ZhÓ…ˆu¼ø¥ÓÔ…òpr,©å‡‘Hs®Q/ZÆKÉj¥Gà˜~í$\GŸ�Åø¸”+=4‚—5#Rá&²2ž¼a§Š¿Ôëî£�q�ÿΤPLoSAéQß^n’`³}ˆRõßÄ�6|DNÓÛ£èºû„”ûеÊÙJ›ÍfØš +$5#Ô�÷“CTZƃ_:þIM¶=Ï4«¢gŠæž’Òð¾Šrà))¥oO%Á:b¢ìI÷ ŽoµPP¾z;(*ÿ)iˆÀ�FQ9´»Y‘”Ó�ãïB W ”y·F�‚úÒ³»`0U¶þ‘o>zXc¬Çò4Yé�³±ð.\¦`!럓¤ÇžŒ€�uìÉ5$š˜ôоnr8�2Ò›û®\6!Ezͨä¥ï[ÜÈÞ±½�®e™IM)‚:5¦ä`xîÔ¾ÆÍ…I`„Ú§½–·Šz“¿û¬IÂÝ‚éí·¶”—ôèÐÜШ ÍaÓA}!»®Pzج>އµ9iƒ�EÒ#Ø+_çk y±‹øåûÇ™2×$.¦WÀßõ‹› P&Ò#ߢ�.Ö®¦²ƒô€Çßq¢ÞUj ÒCO›¹µœ`‰ýR0¯j‹ÚH��ƒ/Ÿ’µp¸‹‡ §\ßê´ëþ‡šåËQ'}ÁÕ¤ÕX‡kÃø °Ezp$å ¬q4Š|4Óë@zPÛ‹YÈq@v?ê{:vòá)Qf©ö\„º‹6&= -²X )(&f,ßÏ1"ûÅã(œHJ{€ò¸ð-%ªú­ÊÁ½UÚ�\Hkr0F �Ä4û© œgcu Þ{f6Œý¬U€O ˜ô˜škE‡T<1¢ '×ûŽ 6¯�Àôó·‡kÒþYét³¢Æ‚G_s×pÛö^�¦·*ôvÿ%=î yï¦vîæ¼ñcH¶"ðOÈ0{Ku$.ÞD?02Œ†€£‹�Òò.à ®¶‡ÔK7Ä�*2kÚœ<\“³Yn¨~^«EéÁÍz-( �@¬!€5³Ÿ5Iÿb©¬®G¿’6¯Ù½­ÍøÂO_MAz ]+€ž±ËMQ Gz0ƒGéÈ?ì¥öðÑÃ�|Î÷IÊa¯Î$I4N's¯x°¨<Å;é1Р¶jákÜŠäMqà#€pž0z‘ìäÃи©)ª�ùî.Ûy9èKW³œO"%=6ÖuKi¸ÚJnØ Oèí„ÁE>žz±fIÒC½¤‡Ñp0-ᔜôz»¦N†ߘ CùW”Ò Ëtl~Ã|Ò%Zw„:ýšæÃÖ“ô@¦g%î¬9ÖÞÖù¤ Eµ¤-ƒÀwYK/ê”�×JZ®”ƒÉ!;ùÙ“EÜsé¡‘ØÖI¹PtðŸWzÄñG±pÄ‘PßOE™Ÿ§Ùq/QH„éqŸ¶Zuy€ÕžåMðezXà¾Ùa’ü@D"]h‘ŒéÁçá³6)Ÿ&ôM‡k»Ð4CLºUì°ôÐßðË÷hoÚ»h¬X7P á€aجJDÝ‚qó‡ì1€¾‡udL�¡é÷�–ƒwrs±B´¢˜Âäbv] 0=ë+­2—ÀŽ2}º\nv”N#�‚œ-=ÈG¸]'½Já ¹�‘ÕŽíÒÎaûgþÂÉê–ŒŽ„–H*gvA~ú3¡�?¸_eŠ•KÄŠð|Pˆò΄ n‹‚_¤jϘ +–qŠC`@[¥F�ÔßìÎâõ N–s¿™úµH¡|Û2íZwŽÊI‰ó³¿'™ƒi–dÇFIËAHUÏ~&§Iøè-méq 1¬Œ¿8Â*÷ýœžƒLüK>Pt£™uƒP K )üb +]Òã¹€x/Ât’”­Pï |W…�žJNKO!(2;( î#Èú(ÌèH�#Ÿ“Aà 0ë‚s vM‘­{ôâ”m*’$Ú¹‹óSýRÀÂj8]œð¨8íæQb3Vqsq‰îDgL:øOE%©áGóÁ°§®æK ^dàÒ99®Ñ)¼ˆ�£áðã¯Ê$*çh#�ýCôSÞæU/;ª�°ÍTI�µpl-ižÄ]Ÿ‰)ÒÎñ ‡� ¢"}ÃcÂu¶Fi÷Q +Þ…ß°Ím 6Xä“EAªH+(œžÝûÇCíbËÑ2"ÈM ¡i5ù!Ez?hu^'Bf@ ›‚ÆŒe™ðÂâ•ÝiýDzR˜‡Ÿ—V‚i"æ°úbr^Ê^° ÙÝ1È1¾wGóîFŸ–ῬJÔ»&Òg„ž‡ïŸðš¬A¤£Ú‡›ó3;=£DõŸ�õMÀv;ë‚¿]òDO'•eÿQ¢95íVý !a„f­*é³ït+X`ÇÒgƒ7&%ðª�B|(|+B•²¡êµçü¨A²I�­5 CZ�Iôã%„'¡ àn‚§š‹ï$ýŠVž‘ßv“ új‘û± Û§ÜåF\‰33QÒá"QÑÛˆï]3”jFcž¢@øŸ¼ìHÔ'Œàã{ØÂÙ:p*eÑ•à­N6}Êl¢±Ý +PœºZ^4¸ÄH·mÔ3!åS÷$•d­‘ÈÄtÿôl¦åÖëû)P“ø^þò¼yß…›ä˜z˜‹MGRᑼç¶È{ v¾‘@¯«ó ”ïç–ôG ƒæŠ§ßŒü:ã“>­9sa²¥ÙÁ±¨Ð�Ð 'ÚéG_óœ•XF�¦îtïíê¾^¦q!•ÞµÏñˆl?F2G׉@·ñ"ã†þy¥r¯úÐFN-V|¢¿LŠ# Õ\êŽ� ,½3A–áóÂÊœ%~,ŒÂ F~¥=ìÁ¢%ÍmÈû,­J~çä +\©Ý¦ú„™¿BÌ!{„1*%£ßÂb¶ófòŸ9ò%òmÌ8g±˜_»KòPÝÊ7ûýr‹½›Â¸•°¢0ÕÅG8k¥‡ÊM^ u–•î¾æìA6_ÀÊ,5ÁÁ(g¨c峬�-ºrDh’‹I#´Øùd ‘~Ø+díþ6ñ˜DÐ>Ó3µUá@C.BâswÀ¸Å™e{IUÓãÝCšØZ†TçÚMåj\¸Òií\]=±ˆ)a#—ÐîB~ÖâÃz5…K4•F^3gÞ%·†5ꡨۋ¤ãÞã»+Ë*CM䢳!;fJ0¨°^!ôx*×ä1Ý +ªW+E’‡½�í Û *¢é" Ú° +lÌF�Ý5ýRÅÎæÓhB£A ユj +–öl-fj½åÆ;"Y¶³dûÚé_b~îÜÄtÖ´›•‚ð<+Ç_fdÉ£áçî O5zÈdïÑÉ_µ£”­„`Ëãií‚Ó*¨`í�ÅZÀÊ.hÒ}*¯rà«ç¾+£ñµ÷´+ DZÌ™ÍzÁRe¥ôYLì6`}$“”ΪÞ4‰Åï°oT|×$¶u0q�¹Kc>Jó=x]Œú: Åkª{”yäïVûЖ¥}é¹ÏZˆ—ÉAÊð�IŽÀ¸(Óœ2DZAc^&â2þ]PôLÓÌ#׿÷‡Ñóºß�žizYqµ/—ÃXœ +ÖdiÚÿÑSQԖ؈£¥i$»•則6¶JörL=ÔÏo3,ž¦ƒt†§…Óf3TžàcU ÓâTË{WïÓa­4=þ^ôµ›Ää[Dšž™øÕ2B*êÈrÚ¬ ’Ц>ˆd4mΞ�öÅ2*ÖYvÖ…Ì«ök�lLJäàj¾g +GTᘬ.ÐdÐR�§h¹*†¦ußt(ÿ7§:âvVç„,z¢ígÁ`Œ?Óûdþçœ�V©I×5ÃF {.$+%‘|€æÈ3ÖW’ +„‚ŒÌBt'“‹Jg&™‰8láȇߙ|Ý‘¢Æl3·†¹Ît\Þøá�Ø�p[ŠøZç1:ž%ºr@sÔÃdãiâF™m—éU­Ñ!“—¾@(Xó@U‡ ÕŠƒ +¶�”¥­Ö1o¦_\„Ù†—…rY´–,R5íb¥�T^úù·AäaÖ°Fi@-:&Wk ùBb"wS-wéå[ÉHL‘•“ù {/&�Dú¯–ò2!§wi&(£àHu¼‚Îmjb“Q9€ÜŽ’MUíŸX˜koܯ€¤ä½H¶ëÁ¶³€¡»&ƒŽcCt†öP²G ™e>ËßXZÂÈ×8·$%ešÏª˜–fÉb‘ŠRdµd^’Ð:³ÌašÆ‡2 •Y(=´vCÛ ÅŠ$ö.#�€,éuÀy†¿=z6âבC^2V3náq2ÝåE[<Ñòc:~~¿r5ã¼gõ&éý AÏÖf  Ö1 ›Eú…1Ýyƒ¦¿ Aá·�?uÛÖM¢ÕŒ:ã[¬7…º.†#˜˜¶ ªÖgî!B†9JûzH¥Ÿ5K ¤&ïÀqôÇr{Pšl„ªàJÈöà¿©�ul–Â{`ù#ìœr§~cË DÕÕÐQ�²æ=²"–PoÎùh0ËQ¬†óê‡àÌVÓå"œ6¢+&.=�ľž×\øàNIÓêøßÏ¥òMO=¤%0²Ý7 +ï¡@íi´þV�cix0{¤°pï“ʤÂO놊š¤¼0TËfœY³�üHv‰:äA|Ý÷’j"UÊRÙç X_Å–™¹Ò9rŸ%�Uô³0TDzä·Œƒ]KÆ ÷«p›’²A߬Õ;™b ¤Þ49ô™w•:±þÎæ2?‘RLbb³ëÑV™ fd5�.¸Á¹©¶ºÿ)Ì (~çÑ1Íg·•x´>&݇RØ,Ž„IÛ¦qªÄ£wºÆhDU +¨�ã}á Ç!(øææt×°¢×‚÷Î:£«È@ÎJ>!Ô•ñS_Õó$œ ´ˆáLϪ”/ÐzC[«@PÆüº¦IþÙ#Ç£3¾] Ñ0Ù3Dpu%v´‡,«jÙTovôªÔ6ކ‚ÃKÉ|áÌïÊ6Pçg %‚hš2ÎûgXÙE’)à_¹•%ò>¤ÝšÔ?#ia»ÚŠ�ØÑ{L¬ch¼Zôl4+‘d •ëe¤¿,/*!Ü& ˆ4ž–«ælNyÞ:zO”XÎu¿Q´çÖ`1Y;ßу.´?ÑÍ §cÈÍt´½ØSc£÷ê|ζ÷DòGû£U ³€çh#Ð ¹m m”l ZÕ˜U«Ä®’UR£›©jRMj:z1©øOAF”ƒ|S:VÎàŒòw²ÂVir 0d[xdFEê–££ [" Å}²â9¸Û´ë=æh(Y°Ç—n ÕŸn7e…�,.œ}²ÑÑ*á:Ì9:ËX„ãˆx@KÞ ¼ÿ7-ËÊ‹T}ͤŢ+ Ó­[œ±‘L^Ô+¬«’<ðuÏi0^óóܦNb:`bN7ÛŠ|‡©¹¼KbN4W£Bl :çÄA©Ôʰ,HbrP ýy˜Rt±­_ö#Ç0Ä´çé¹ËA™R}÷ïHO q 9(�•Ìñ2°“hƒ�ƒðsÍ7€GqIÒÑÝ“‰úMe÷tt“*‰bxbâ DPcbtç’ûož8(þRÓ,+Ð^–F”ÛkÅ)&NLÂúx¨dßv÷eÇVÊúmŽçÌðÎi.í�°$‚í©™b¡èÁAàeÝrs´ÚíÎ3`i)~…«;SH\d½ÊŒ(ÀVk¦9:pù‹q®½Óƒ9<“úô×WoÃc1ÌÑí’ˆÃK�ÛÞ rþéçh–:æoPÕk.ƒà2¿A9\âgE7ÝhŽÆæ‹ÌÏ:˜}s48QÏêet>ÌÑ>“!ã ÕBˆ 0G ú&¡‚W•�Ãh°ÒlöbWß½‰à0�cÐB™£y…ÏdN)aŽæ#ˆ¨Zýyƒ"8à[S·ïÔ ëâ뜈Y +¸A�¾U´ÒB±Èí—£% ½$’°½åè&àÔ3c+ý.Gïªö¨k1GU9úÔ›ÍíÌS2Q9¯ÜDé�pG(/§‡ú�}Jå?t¥ôB5N 6(z^Gò.Gû'«2ÄZé^޾Šk2G? @qtQ)È¢ÿ�6(‘—à r;ŠœÍÑÁwJ: +Ò.Ú ðº<‘ +W€:à6(›ªVì�ËÖxµAÁ9 +ƒÇ¬w_ÐŒV(VõeÃcƒò1>�”j6(ê¤pÊ +�ûCl”zÜý˜çÀ«½2–"ñ¥Îsr–£ £Y-5Æ.!û³-`÷+ŠÛÌÆG I”‰¬ ähË“F¨%¯fWßãhó&;9°Aë@�÷ï=Á¿Š6(³OàpélOŽÞL’,6Ý¿qfÒ–dÑé*àZ ¼ë’UÖôG«�ØÑfdňPL1Ýý�¨J‘ @6ê¬eMŽ^©ù,uNÖm”"†®¹î¥O8ÏÞø2Þ‚”¹Ê€ù`Nô®™Óê³™gE 1Ënd švƒbÿyê 13nP^í]‚ïÓ’ˆf·Aá«ÈT 2ãVp=MK>zã13JVj¶A)$ݽú:ç–MuÝËΕtqçþ‡Ñ8:½ ŸlÔmPÄjÁIb˜Ÿ›ŠG°Ò´oAq° ÊÿØÙÜ›xð™8:•‹ñ–§ƒÝÛ dá¥å„«°J”ZšT¿ .()o©I:—iŒhàhKLäÑÇpË'8ìÃI5¤ðƱ­Ä€š o´Pþ€³Dé�ŠG»Pðj z3ÜÉ¥šmÔ¶…dÎ*Æ GÕí'í>�]íe +òÖ8L8Z¤z:¼‡¿×¯t¼KùçT}�Ò—)õÆ9bäÞ#Žn^ÖƒBæ‘JoqP@°ObLÒrF†£8ÚÖàø¯HÖezÛàè…æ¢åŠm‹ŽîBéºûŒ>F–”¨ih‹cy*©¨A�鵊 Lè8š¸×A5tGHkP\#{Mþ�™Ö €8!+7¯Ú†£]÷¾IÔë¡J Î=¤ìE'NütëW\‘EI=\+ŽF‘ôæ`[u6ÄG7l²™-pXš®ýBG ÁW¹AO®}œný‹0]ð–Ä‹ð¦6 ?9d£ÈiPö€Añ1F¦AñWo"p߀ÍËëK°áh�šQš:˜¬DkŽþZ¥ÞÁENƒÂ Œ5÷ê¼Úºj3 JøâŒ|ÿÏ…£‰¬@ ‘NyÃÉL8a¼×iø‹Qƒ róÓD?YÔÀ·¦‹�ž%Gãrfs‚Å6(é!ùHí·#ßTŽÎúE½{Y9º8Ú8jÃøG#«‹ñ{jÖ Á§™ïê¯ÊŽ£[hÿ1Å8ãhºJowÿæ”EwKá&¦ù¾^îÄÑ%ePΫ’’8-1¹ŒH]�ìMd•/E$Ž~kÒ‡b'Myvâèa½`à H-tð +,� ý«5ªÅÑùu,G»´'Îð™ØÕ ä— Q—‘[ƒÂí`n2°–©¥i` ÒÝ¡~Õ G�"SZ¡¨£šÈŸÄ«A!_ΖÐ0ûâhì§I2ñDCY |I9Vqôëo@oÙ´*�qô'ŒcÞ£` +OVÕ²R’<ŽÖÔºÉÎ�;kP�¾W,ŠPÃupÝ¥BH2Y®ðáLƒÔ„6üëaÞæÞ|]ÅÑ,ȨAqÉðg†e]®”ÅU!D9ŠÍ[r±·ñ]w˜-麺&ÕFEeW1$á0‰æ´Ø`üD°.ßC–Ê{Ô^ò§‡Ô>/g7É,„§‡t,Œˆßб=ÐGº‚Õ%˜½=�Ds`² N¾ó|ôémôh€°™¡!:`›G‘×Qô9íBhƒ01±R7�¢2Pi@P`åJ+µK@B=¤»ÒȰ¯çpJx«’~Ù€žg¡«(d§‡tæü»Ÿ€$„üwzHhÊ­d|îyHŸ¡¡ýÎï” =¤{’>®�×Cš°I‹:Iw•rÖC +þc‰öhQ½/…H©‡4]AÚÁ¤§úzH/s8?vŸq hÉf4La˜Â?y=ì!Q h7å½ÎÑo·‡drTw8UÚCj© �’ボ ±‡¢Šµu²‡D)Âû²É~IQà¸cÂRßhÒÏ7ó;õº!4ú€ÚCФ·<~çì!ñÚ6ýßzVç †œPú^¾î’·€�*€I}º÷�¬‹ú ²WÿoÁ=$œZ ƒÕÕy•½‡à°š“¸[ù=¤ ê:‰FE–Gsç{Hu¢UzÛG‡ÜC:T4j1ö +\lqv©ö µd65¸‡¤¿Ld<)òà=¤D¢õ„Q-4j—$aiÐÀ<콇tröb7%Æû³÷�pˆvªéù–W[¿‡ôý^÷}…γ‡$6Ïgòê;~¾ciT,¿ÚsªŒIhvÉ z³xiØC2`े�ÉÒC«°IŸU©»ÑI@'�km×ÖÖØ+Áìdžòe¼iv¤Ù1,3f¦Ù�=´=$9S¢ ¦ú,jQw_ÿÐ&õ½OÍ" TÇ{6@ø‹w—‡V4sRtb+ã2ñ¶,oeo­m›”ÕìhÂ(’Ã< æ2®¬x^NÆÌŽ + +Xp­L"%Q*1ñ2/PìyÔg�Dô{®a‚!Ð>×Jö5 <¤é¢l¦YÄ×<~ayH×üo2NóÜB*)7Ì�å{îbV’å÷¾ÿ4„ÛËC²†Æ9È9aq7çRÊg˜+¶�Bã¨øŽcB�vü·ª2ì´âì^yüªË{™Wùw-ÝõÒꚀÄU€á¨U&lÞÆæèA¢KAI�ËQìSm�×ÍÔÙ�”AYUÕo÷;Mÿž]ä3‡›0þŸ}ŠL¤.Ò)¸ÚÀÒàp¢›Û=æòÃêËÓáTEÑËôª†ãV²Zúˆ¹5] (µœ3ºá`J‘‘²-Ô ÷šº.›˜ÃKi T …nß@j€q8ÕÏ¿½«A«b? âpÇvl{ÖO‡ûëU3ö*nn•´8ó/œÞp�2aµ[¤Ÿ +@p¸ó`¾è!üÃN +§¢ó´Ò¶å$?Ü—l·1ܘ.÷pg,¨ÕNj‹]ûh= üJ’v¶ÞâálèÊ”u”X¾ip± ¦§Ã…}Ô Çf¹Æà'¾'A2¶àë/¯Êimôo$;0&RFÀ_úÛˆ\×Q?*‰A€ì�ÛäÅ%~ °ƒñ´†ÔuІÔr³%�™S²¢~Hm[,â‘,ÆÖ'À4梔Ýë@Ø*)Q—CL'T¬8…�XŸK",`Ý)Y�;¶·™­â£–9¶Q‚T™$è™Â9­ú_âBê•q¦s©O”³b«fêI-=2+4rÛl Ð×LT Ø; À“uXH]lhtn,ÈJæVúíó %u»Ì ¢=y_ç�½þϤ fé\Ë %’‡GµpÔªVÀ§}MµQfsxYf4�q^Ä]�•qø%Oþ5”0Åñï| ²c%±÷9úbT£0õB|[íBQ?î‚ah�ïQe©`+õ1’h›Š`ÛäñZ²@JÛ¢“�~9Fª3ÅŽ3áè>”eiðŒÄ¸p™tM´@7æÀû÷Õ¡:+£úP‡±ÑÈ ‡–i•Ó86ªQ`7ÍkOϳ‹`îwŠM�Š +˧âh횢 ˆ6vüÁ¡¥2F°ªßŽí™BÚmÂù sØYix0%&±GènÈùm¥;Ëdjþªª$Ö±©€]${ ê6 ôæçE’Ü»tšRÛr> 3ŒÖ8è”ÿÐFÑ�ÿèXð¶Íw!'ÒV™² ù}ŸŒ¦*‘¢x²p‰Ì¯­— +Í¡¢0W§µ�fž~êœ3*îçѺîrµ.=3ã`I#BæqÉ�ýy¿JÁo` Ýûæê+S®I�/ðÉ�(\3Î0Ѱ�ºLTJ�þ�,ÌÔI�ÄÂ0™³=&h§ áXe 8Kz3zYÈ÷Ë_H6s(Γ+é‹�$Íü«àr +ä†h h¼STbÒ;¬§Ô´&¬ö ×úÙ5¾Ö±”K¸Ëʲ ûÓžÕÿDͰ•Ò,g¾r U)Ï�MRãWŠvSkptx²Òid;ÔØålYkr[íòE 0bç«Zº»³+sS�ýH¥µþ¾[ªãGÐÁqBÝÄ¥ÏD"ÆÀ’nk/0a�O;?§¦ûúÍ%qFî#êÍÅü=Vn!µ¬4j™UqÒegJ€ÊK…ëI…ÕxIœÞñvÝkN(`~–ØÀ¾–,bÄ„g±¤ ~_*¦�¯fýF�L# ië3v¬‰˜†­*äøX�¸¹}ê>Ͻ&ü +K’¼ƒnÇýC&L +áXmæÃ¤¢|eõJr@F6‰|Ù÷PJþ'b£�V̉Õ[Sm…¼)Q0<Ç'Zt !x[Žç©ÒŠé€Ïk�Õ+ôª€e!ósÂU´Ê¸Éjv—û \d_¬9Õ¯;B8œÝ eZ‡µyÑåVáô+\¬qÕØŸ”Î@×Ò%£8­'ÒVw3T\ÌGÆÙìÞ7ŽÃéAgC¸6A°�BXPçŠW9 #Ì:(3dßÔP+c&4L¥ÖrÆ{J•µ!½cê¡óîí[üÁúÒ_yâÌÊž Yy.Ì(dô”§!ˆ÷V‚�=ïŒ[!'V÷OUM¨XSAËPÙTz©”AšéÀ7ÐPÓL(Nòøìꥼ%ŸAç¾FCfn~!½*?38uî]c(%¾òPvf#ÖtújG+Kb<{qéÆ0NÌý0ű&ùæÐÖ‘$]7¸˜ORK±_"Âe +m.�¬!ÔA^•¨íE‹²3tqŽÃi EÙ(¨Mhk—é"67裴o ¼óS"ë[2ÅàüIéò<7öÐÙtõ—õTâÔbÇð$ëÁD©ÿ´¼Ûz£¢È’J¶¯V�ŠkÄ�ž5G=R4Ö×S æ­`­sK?Èàô…ȳ?GŒ×/Ÿüö:’†D@çjG¶¯¬ÚÎ~= hL+O™|}õñ}aѨÑ*ËtŽÎqÇý#X­C[×x6]Ù³…�‰Ðå~�+�Yýœ–*÷b@9³ :ˆˆZ,¨µ›Æ†”4ª‚~âØObèì—›³’”¼mN45§ëi@ßÜI”ŠÜ9Iq(k=Á1àĺ:r>J-ðiáÆ[”>”àI笱¡ËFK'µ”†§/§x?ýëøÓý*ùþå7V*�ÆŸ ­RK1Rn}¡ûi]Œ•û -iÇÍmã¢ãÌO¦›ýaBÖÆ4}:däiE­ÌP ä¦P0L‘:]‘AJZn…¯¬TvN@�?/ŠÒŸÌŵ|ç™l¡»å ÈR–Úô +˜¤¥h6^H°³¬vÙìõópuÌÇ&=Z¥"]EZ°/Ú¡ÏÁYý¥�Ï2‘ÐòsÉ{%X¥^’-Ønéß¾;l³¤LLe�©Š9ñ…`‰8 0£¥R A+è™y…‘\‚+nqJçÝ ºóÄëòÁèÃæqÈÞÎâ’ÂOëÕ§–%ª–÷}�‡)OÅ”˜>‡„tMó–íÇ ôuÏq�ß4ÆlËy:Ææ´¬¡ f+Qg´&TÒ†ßç.ܺ.l€,Õ“2�œøáÊft•[õZ,%ªB›…Ä€×I?8.èÄè¯Ò§ÊEô´{…ès/ |‡>vØ!×;3V´ÔÓ° ^YÌÔg^’N¸j‹U,δd‘ø[•…¦*±5�f–Óo„b\∟²,߈�Ù8„ 0ß²@<4ocÅE†FUŒs¢KÓ0\ ÛO&]A'|v{Æ4ª�9XKM¸z™åªo_�ž‚æ‹:%4ê]¢ßƒ��éÕt.3Šôº¶]# ›µOCÌòu…òt¡ñ_ßγè1B\œ|<õ­¢÷©@�æ¾mÆ¥wÐ +ÉA16‚Ö&á­æSiŒÐ9„¸IN«Hþ 3q‰9aú!wM/\sÃ5 Ö6Xó®maJ˜vÍ ä¦,9;)̯MðÌA\n%­ÂÓ·½f–2¹½×*Wƒ�§uö'0qÃþ �§1…“C´‚’¶Ùk”t¤ªxxì�c"`ùùK?�,eµ:B]æÌŸq{CI7iš*ÏmQXKBý—P½†a–DÇ€*w„CG[߸Ïú@è7±ëÉ«ï8oqÕ,A4Å™T» 0äf™ö-{(ï toa’{òïøA&~”ý+U2hÇN£Q5_µÄ'U.¥\Éc؆›Ø¦—h2eÐY5=0ÿc}Qô³;ì¡…Ë@D·ƒ(ä�£…aìŸÔÀg}y¾*÷Œ?'Hò³§t +•Våb|?쳤F =œB�·ü!4e]/é8%#­>Øã„ôV’%n× +þ^ÞÄÀ ê8yüZ+{WTÜ'A'wl±à6'6‚Oôd�â-�¶v ò°´( êëÈç|ôî–D½^H!?ç‚磧›Ž¨gY +ËÒ¢XAÍзm ¥ËÛ-íÜ—2 Ú]‰ÝPô¸yüÞKhÿ^*É Ñ#Ƞ踓wSqsô1ó â;sæz ÙÕàF»•aáâÏ™±åç7ýÆZ*A,¿e´Q›†¡�VùŒÏ†ôê3¡³atïDl¶ +”ô>áål™vÌÃò2I$ ,wàyl_Y+�­\Î6 —ÅæÄ�ŽÄv=uØ_ñƒOòúŠ‚ð(BPß”_Fܵ¿¢<ÐF�E]»é -ö_éË’w�¼žë‘žP³í–­†ü×p+›¥µÊ-k€,kÔZnØÆ!eìr?H26ÒÈšÁª™EFäcˆ_�0Ó™‚BöÃÇÕ¼íoêϦ,?ÝŲ×�tsb�Hbîú:ÀþLN�K´”øþ{ÉÉ–¾¥oY‡XDÕ:ŽÁÖð¡©…‚úÓò5§� +vàØž‘ÆÐ¼ó—@ªâ�g`vïg[F$[z­d½d‰–FÃ{B4À�"ìW s–ƒÚ8£îÊÙ]?[@ž4{ã7?Ç„SÞhƒ \z“Ú©ùXŠÉ cç'e[ ¦º’]»q‡mê;€*ߊëÁ€a‡jnºƒAÏøxPšõo“+täÀŸ[ëÝÄ2åáEñÓ©ÌF7#0]ú§3¥ýÃ*]’è¬�›¨iâ u 6&Úót{~O@±ò§}q�½^ø£hVÛy{€É]*#(ä½~M5þV¸i¾#§0ó$¯;ß„j�¶ ¼qÚ³X­åY ¨?ñ v©¼*¶6gYÍqÆŠ°½~‹:ô)lõZÄVW¯Uðõ«Ÿº�Š’‹'‡©å»–œ'kwsîÖæ•êÄY®Ç›3#Ú> ãL#ÑwõÓSt±0ŒXõù·Òî¾F8¹úéiäœ]cš0Î�Üèš|}ÏÇ£·ó³ñ`7jQªªI­òˆ—�I.Õë„Òì�¥¿óþ‰I~Ä ë0�×÷~Í2cOšiÜÆŎ•ã…ø,^OÜ­è�þU(ùÑäæÿ¿‚¹ñ*_'˜eÿpYø_YE°°MG �²æûÇŽA¸éF•œòµ-¢ïÝý™‡Œ�zæw—Ý÷£:|9b_†VN#Ö˜Ÿ¹_ÌG O88À`˜,µ·†æX7‡¨ýgâÐI7y¶‡1˜’ky¼Í`;X+½TàC32óȔ÷D>Ž vX•Ÿë8<&¿¡÷Øzc?]ÃNò¡ìè/&°� Â�b˜ ¿BQú±ù;QZwº¢l±Hv‚­TÌHõ¥äW\hj�‘g(lð`þ¢³�à"’kTM4}”Qà$\L{8¾!Á‚†—–PÏÑP€žòRUr�´ÙµŠâÚ£>XëD˜ªKk0’ÅT¥=4)Zðâõ×Aâ(Ç�6pžv@Þ‡íúç5¢ˆŽ3q`yÿH)6˜9ª±’€$Óê/nÝ­dŠü͉Ø_­jÞ‰œnÄ‹¾+Vî¢J5JÛÌ8?OsA–à0•…¨ZÌ®+/6мB1Ø|¤÷8©JúT,cJUaÙ[¦°5îŽà�Òl�Ìe0S< è‘ýøËQL®­kî™k$a1Åö�FàæðÂr8lel@šHÎ0$LsŽ€‡NU€cü�è“x¡6þš€bË�)�U-þxÐ.v‡vx¬B¨ËûÚï» +Ü›¿1‚x:ÇÉ!js’(DDzÀTʨbÍ,W²œEñ¤Õl,�ÆP<Ê/'8ã䀱³8z§Ì68ôU¿a°¶&.%7Ú΄6S§õ¨åS üô)Ùµ¦ŒJR[Vó«)2ä"¸RB–îBÔÉvRey•‘KJXt]>oÎîð%ÃËN^áTÿÖw›q){>ŽÓ¡qt¢`ð¾åÓQ1Q>Øèd’œ«+µšA=ÉÐd,‹Æ@»$®¤”H—ò™Zˆjs„oå[OçL ­{ýÝJ*݈Ÿꡨ¦_X¡j`þ²žµÁûcµ×À>âM˺.A£2ú� + £’v´¸ÿ'ñ É.h) +ØZmº…ºŽôZÕñ„ãÝTPÖÚà´—d"ÕFütÿ25� B[‹ÛX`^b-%#=³¬gœ ��¢wL2oGp„ß\ä<ÂåH®ÇP:ÖtðËRZøÅÐÙ˜¨Ošª*4”È1R9¬�—€$_NU0&¬z¹>Ù–™B�rRI9µw²2aU4תºiÁζˆ�jÒù3‡æ²qç/j"R�SœYòÿãx²dUw#Ú£Ûÿĺu\q&ð¢a8>ÝúÓʼnÖd«_ì•€2Ssx¹Á,ëZ³ÄÉ�uRVѶ¥¬mŽ'·t­:©M[’Ïä¹@/‰�ó¯l‹ÀuƒŠb�~˪\&Ž’Æ�]b”Òœ¾_ëVç\Îi‘ +1V¬P˜{PJÁþÖÖ/ú©A8²,\ Öƒh¼D¢s¶Ï%–Ã8ÉŽý§$$6û;À±CO,yEÇ_HÒÍžOã¬×Š–"iêjáC&ÃF¦UÎÿ8Õ„G°W*•¡ãGžpÙ+mö°ÌÓˆ~!+ZN6J‚«�Û‘ ˆß�´mzú‹è`gÇ/ž¿›‰f˜šhýmQhI“]c»DG3´aÞv(‚òpÏ™”—{«¸R¹ ͆b·‰@�@èüPSÌœŽ¥(:™ IF”¡ò­Q³ä�'÷-¯ÀoÌ««ÂôÕ.–XÅú¤«M�|õy•MP}“9¬NRäƒ9k *v—ÙŒ�6ȃðÄœU1ÝÖFHON´hÓƒÊ}’h�ÜÆwòg`ô'´YKºÈk¶NFg–Õ„«>«oÌ(ÆD£Êg\‘%¹(ÊŠbÙN<ÎïÇÄèv÷?œaâüp@�9[}ŽÍ ˆ@làì\fÙXÎÃÜpE�{�Á+sVÌkTÂǘÉÿ¦ü±þRÜ[2˜èî“g¯UL›òlŽ¢¸˜—µ?ųÊ|KqÉdŒ£X)«PöôñyBXé¹IôýU}Ìz2�%™ÙÁ™aÙ›{‡ñ<3×ož1kJ«àw–Eâ3~5“eeš#ÙE3HÙ °¢tšÇ3E£¼„_sÖ>žµ_ù[~ v’•µÆ1ª8p2n*qØ~�gpÉîQV¸ÿ¨äxÖɉã̹Óâx†üð퉎g�s«ºª'‰¬uÝÚÝípÿ¡òsJLJ׳t€Ë|Ç$%f³3!:I {I#OÏìÊ}‚Šqà¿™røÝi!ë_C>T<+zƒ†^w&ôÆŠg ¯@.Öoh1S_Rð[* +h_5/3º§‡ëù¢@ñ,Ñø¥öÑTo�) U¦Ç7.e‰$[ã†ÒéâY´J�jñC†‹gü0cmI‰X¹xæÙÊŒ®TB§ÐG5`ùâ™0o©ûT5.{@]Œg™:Å[¢*\±ŒgöESb-7åLJ1‰Ò^?²Yti_®0H(Ò RøižÚ™é(Õx’3�gü²©v¦Ã$ªñ *eÇ'¹�Š‘`ÀkêÓò5ž…PTIEawףƳ{q¶&J6 +—,Ï8\2xÖmOlm<ó”4ƒ ¨~hã™È¼5M9Ê-pãY-(†�ûÏ"kÖOwð‚,^�ŒgŸ=4°ñ¬’Y²Ò �_¬…ì ã¸Õ(HhúKMÆ.ñl.~ JŒÏʪ;ƒ¶YÉ¡íx&ÖM‹¯d4¡UÅ�gì/¼O c9oÁÌ *œ‹tY<ÓêÄe‹WÍâ™°¿´/3žåNêèHª—8”a–زëYÓÃ…æà»‹„Dg7³Õ³Å_ý_<³š:ê:s—Éų@üEŸ¼æ°ÑųXåNÆÅ3Á<Ö + ®[Jšo‚æÏŒ¶¯6lÁ¯‹g�2EÆðg@ï(ž•xÌŸà‘«m+žÑ¢Ç:bT„ųþ4þ 0œ¢x#ÖUäv»\GI1¹Ôó†$z^¼Ë¡Ó…ÈSoï&¶Wð2r?ঌ!=EÚtZ²‚܇—¢XÓŽ¡"KÈ«�æGÃøáf¼ÌE¼qÝø¢Š>{Åï}/÷ŸÀKUÄz ™á½tò4ÄvEÓ£KCP¯Ê\�k òƒ{©å÷°ÿWn�>ö|üÔ�epæW|°‹]ñ··<¾=Ërô"Æ}&|J£þœíw]0ÂtÃÄ–r™ +FFfi©¸–æ:£lC_Ÿ½¬Jk�)|iÀŠ’rß:`‚iŸyE‰º>OSžtË4©bûìÌVI9’Ù±�h? ô~égùåKà�¿ÏiæWÁ;dŠ÷ÙÞã— Ú¡¥@í=K_…ŽÆ—Є¬i…½êž +MaãóU–¯Õ›�÷V¾ùÊp¨ßëö‹v®jù�œÁŒËµ4¢ZË€fI­¢Ñ`¼ˆz;ý#€… 6yƒÛYbifΤäÒ¦lØÚJ?— -%K6•Lƒ‰¦ª¢�ñ¨z—Û·!-Ÿþ¶•é¥NuÝI…#ƒ[Z(T+/µž”PÕ� +TuÈHUÚ›‹ˆŠPGÔM'Nâph˜ŠèÉ&Z±ŽL¦MŽwRñ˜?È·=ŸþV™Ê]¼+†×é^ס^j˜3w%žÊÄ5÷fúg’˜æ¦yQÒã¹4b4G˜™5×Lnù%&Å—±…f7loFU=³˜±bºÔÑ“¡£BÂî¦Ýª&d­ZX\±ˆtB…øºÏ›¶UABî�Ð ‰3Íæ¼›<Ð+và;ôa[ùë¬rGáÂÅp¸K%ë»w¤ ׺Õ´ˆ2ÌxnñH/êh^qUp�%ƒ2Õ:¦0»N«–ú©PµéÕLI¨fˆ]d»fZ$Jya…2 uÉ„Duq c&ùIS|ØÂõ¼ÊM +$“EÄäyë\«°x. +é\ŽÐºF–’ê{Ûy<õL:þ©f‚î"l×÷†\]u&�'�i;j €+˜?š2ÉØ!À|\Ÿª—\¦$SŸƩÝ#µ�UåÓp ]83åÇã‰æ�ÓšMÏÑJ+x—y7¯îä?¡xÞü‚çÿÍ9ÿÌÿÏ+ôÑ_ôE0}`"ªx0o´ÖžZ§×‚ë¯Î#¯ÿçÿêÛ»¿_ÿ_°ß—¿Èÿ¯] Ÿ6)£ò�^úÚüª +ÿç_„a«ÿä˜ n¹ô" Raà^±žbÚ?¶¢¢—ðyIqm…ÏeCú+(fŠÙ²sŠgi_ÁÜ–²Y$~ÈÐP}�*FÌħ +Ë(]’2’ ©ä4ªËTY%ÓhP¢(J‚䪵>{ĸºo‰–jV“ÐH}¼8 s¦Êf‘=ÉLfRdÓÈ©³P-(õ¨· Ž]2¬�FL»ÄŸF�¶D"²3!á'Æd¯Ê¹©[u4³ +E^1á`ÌÙáTD™R~œŠ¨ˆâH‚,gšPD•=Ž:£«ºŸ×ÄžŸ �­ì^7Ù„ü=«!2õÔúA—áÞ•(—"Ñt†5�Ý”ü ˆ )ËF¼³8Õ¨­ùBR•б¢,®JÐCo•t«²LÅX¡yLè�¸ÝT¥ÌõêÚ) +Nª~™‘Q.õ!«¡’P~DH“y()(A;ƒf5ô÷G!GƒnÚÌ ó$ÕB¤#ã)FêôåD�§£TbYªïª÷i™D£4—Iÿ +GÙbLç"É7¬Ë¦.Õ x¦üj ô1~2åózM´ÚT˜d·�.$éD´—Dý4"^ÌòLj’dût¸}¼L‹ªÜ*ˆ¤peÏ©~ƒæš‘>×”6èÔp-J5ÜùËé|#îWQpgµGt8ì/¿ÌŽ®c[–áËêÌ™’ÕTT³£kÆ”DçÿNùw‘‚Õ)ò¦­Y¡i©ሧ�s=�/2® pÌ¢£Šó�ég*ªœ­l¥I#¢P>?UñF¨ÿþAcGQ‘Äíl­xS)º&À4—Sü$#† x 2JœHbåÒ4Ö1}zD…Ê&•S¶V•ˆf3‘û< Û2î òþ(EVQ‰5Eñ;P„é=H}7Rµ)ú5š0”25Ìd«PäÄ£‘hñ„%Â3B¡=b2A�U—M, iNCò ™Ì ×™eN!S¢3“\OF©±E%?'Q«—ŠÂª*ª5$jާád¦‡ÐœOP‰už3 É(™—ÊÌTacH ž/óÍf¬Ç  'VŠ4(îêHºfð™ xªVÔxÁÕý3‹��6�0„á z5±Nf’;U3qEc%ÚZ§‡¯0SàeCäšË£ˆ +VEe†r?êDTµB—/@€(ÚïU¢�€Vëô€Ò‚X«ˆ BÄð°õƒ|üD”½Ç÷©Å0ë G¤—Èqøåš/©k�‚‚ HÖº¬>_DÄüá7Ü;ÔQ¢¡×œ!¶ONP#p+Hº„ì`B +Sd[$¨×Œ«5Ò«ZôPí]‚ª�ˆz”'„˜"3EX mF'ÜC2]T”(ú7zø�ág—N0ÕÜ%ý8Èàó}005pEg÷Â|0C zD`|åö oMÔç¤0ªÕ�  Ñ‹‰Œ©_SüŒ$ #<ž$ 3hÛ¡¨2`„3yD¢Ö9Œ>"E×Ü^„ú•>&ö¢|ÉA::ÊÈ‹Zn=ïÈ4ŽY)hN�7�±*SAŸŽ¼Öé¨XµéGbÖˆ¸-%²¹H×€xñ˜!Šª±�ˆ¦ÄŒ�‚DBÜL÷‰©‰œâ>[‰@ÔQÕ¸%/‚Nj¸Z)URým¹,­C£¡ÃPjjH"¢nQQ¥¨*iÖ‚)ÕêQ´¹˜©3íTýõ¢¿jydfo”x",’ÒÁpJ(‚M¤0ç¤7¤ÈeZ…æ�˜u.Ršôã ¿ë̬2ÀÀ ÀÊ–“ªêØù"ÿ¹P€ õ ·8zH]ªJ-NÑ(I™¯nz ™,‹•ÙÍ�¾ó0‹Ä?');oFp¤~íÉb…1¨$Jt áÄ )ñÛoH21—•9È¥f‚L詇ƒ(.S�H¨uÙ@¯ cš–OœØxÐ’UÙ”„ÿ˜ +S‰�x|Þ߆ÅÌÆ\tzRÿB�½ '¶ê½èâtÒIìà¨XÚ¸LÂ8ƒÁšFÏÄŽF©Æø´E§]Ðh À‰u íΰ­ià†¬nL×ØÑ¨¶ÌHÄŽ¶$%ÃJ.v´ÁÎJi+v´¨]UŸ›¼bGc¯…ÏìÖ$û¼ÌÄ‘„10‡½1BÉzNS#A—÷cG“ìáÍRêI‹¹di³ ªRggøcµi£Ñ«x{·ØÑhëDóçÒÛ¢¦LLoÐ$òÄŽF�Izó0Õ ¡DE‹çfç»ÇŒ-3©i P*Åþ±£a¢Ôޝï‡;ÚèÝr Áã ræ¾oå-uá+ˆØÑûr³¼�íÍ —Ð÷cP‚&�þœ¹‡ï#v´ú¡{eð�ÞZWç¡ ¶¡–ÏZæ+±&×ÙWS*Ö¦ü§¬±Ç1k%Ê®µž0ÑZ#ðl­!€·Ñ0¸|¹àºÖ’g*ví—™¬]x-ù™qhtmæ7»Æ=½V]Ú_k†ò@ÅŽá0‰t Á²§æ. Ñ �u‡Šg5a±£å?Ñ>ŽMÜE?«k‡Öú,0NÓ ÑÅŽ–aZÒêÞÙ”¸§ž‘½z‘V=�BóˆS¢0Ž–Šó�‰Â%Á•mYx)}±£cÿL*v4ëg¥qK±£á4'²Í„ÆŽ(° 1@rìhÙšÚ�ÐãÛs�%o±£=ÿH~Jqìh¾Ý›µ2ÊHG#ͱ£‰ãJÖ$.èÌm3šÓ�—ØÑ€ÄfŠéé`ÀÇ?r}ȬŸN±£QŒ>iX2/;�T Äܵö‚ü� ÁÅUE±DøÌuiìh„M©�&[;&‘·ðѲþ¶§ØÑÊïÈ.âú;Ššâw��Žk}ìh�á›lxìhHɼDc;0åfؘ·ÿ¦1v´úäR-©'o†íØÑèE°él<ÇŽVÚû|2”v;ã¸FeP’ö�]:v4r8 õÛŽØÑ�Ÿ{±\–bG#ß~ÒÞy +öØÑ$÷Á_f�‹m$v”&ú'Ð�M‚`V±£­ÿW2Öõ2v4Ô2ºå±7æ}æ¿ÅŽF±itæƒSoUcGûq8K†[ZyKѤBÙŸ³Ã°2Àƒ‚\S3Qk£Q†håËGáDIìhà+> ¼ü hÄŽV>m%ürÄŽ;WL8KìhÀ�™ :kŎƷȃHÀbG‹ŒXi«u;Ú.Bÿn e\bGâ]ÉæYìhžë5ÆAìh·Â,™,[bG£­k3{x‹�=E46g¡ÀØÑϼ±£6¢/î+c;Ú)^ MÞcGWÁóé §µ;š«oå ’ÇÓwìhHÔ1lq8ÆŽÆFMm"Z'� ±£A4¢’#J±<ó.v´máízˆ ME;Ò·âÄ2'w:bG#éÒÚÆ§ÌÈÚZFîbPî�²n†>¨cG+©}„dŒ còHâØÑxþQý4@Dš8úI?ÁAéŽ]Ü0’'�;ÚêXSóŽ q-d¶ÕàŠ-Ù™š\Þž±£-†”w˜bš3Eìhl1PÝnÆ;ÎŒ¯>Ÿg¨F×8Ú’¬:ãN™…Yn}�èc•N~s|ìh +%™ø‘� ĺi&Ç¡Tû�m¼­dL±£áZ<šY˜¢É#v4>ꃴ§‰Î9DPÂØÑè¨Noîc›ãÄŽ65‰CsCSìh;1¾KZƹԌ-Õ¦Z)8ÅŽ®3Gtg/ÎH€ÁÕ*RŽmç¨1 ‹É õhä\€È–CØ.À€à\‚"�Pq_äǤšÆÜ3®øpgyìhÄ$LϧGй üÆhìh­íH0Žà†6£Ëõ¦ÄˆùØÑb*… Ù;»ˆGÌ +Ø:6>±£*v¥¾Œd¥2° pY5v4jë^F±£eiXÔƒ|bGÛ¦ÆMÇQ‹‡´=nuìh8‡[Õq‰�|ã+x“M‰ q:sÇŽâˆ`¬©T +q¶þ±£Ñì„gpGê�mkЃæ'1‚i*ó³q(�G#ª6±Ê‡ØÑÆmƒ ;þdñoH�›#v4^;Sò‘‡i»�±£™­gø;š@,¹tBÝ)puÅŽãÂ\\/�—ûh…±£!•œÐê}X(%FLìhe1õ8,äZìbÄŽÆw$#ŠíàL®¾áM?v´÷�}rX§ØÑÄâ$+ù�´ÄŽrÌ—¡cGs(Þ×uä'±£ñ’_”õ+ÅL;"�±‰]Ð&æéØÑ’/zX—žÑÀ]ü;§ºÝ¹‰­~ÛÙ;ÿgïd}./v´X.ðBø4;·å¿�ƒx† ÆŽ6ñì„öÞƒyðbG„ì€vF$!?Ó¾†1ÖŒm´_Ö-õ$v4V…±ÌŽŒ¼é:v4Š\€ iÆZ#ËÇŽ–"?â¨ÐÄŽÆiGÄ(~/Î;9«€Û(A±ØÑ"[È0Œ:�bGs¨‘<…¬{‡ò;S‡ +„¬*Y ÑÇh4.…ÊMìhÌEYåÃK.xï!Ó*,;UŽy3Ž£e¿$" ÉåĎƵpÌNÔôØÑÒ¼—b-Ždñ£åëùD»;l;v´Ç™š?S4Ÿ±£ (¿l^Br7k°bG»¢ÉÊIiy;Ú¾‘¶6v4ƒÞi• …ÉØÑ³¨÷f´ÓuO×Ê�!±£1*w(?ÚÝa– :Ä•yBý#ÅiSÀ¸çAÿôÑãžäz‚ëdÜ�ñ(p3"ÞŒ÷ôÀú­)pEÌMWKé!M¸¡U0hµ¹ò*}:bØÙ,âÇ}aÅJh¢#”ïÇ\é~œR£òí¯ô�ͯtÂTØÜQ\S‘Eþß ™¤FÚBF!ÁXDâ?¢ŠCBzîmç’½X²ç>ôõéZÄØÈql”X–Í~£¶�_×¢öäÝênN4 Æ +p’v]�kºŠ¸eü ëW„S„S²Î9j;ê„ +™O`«]/�¾ÑgT lÈÐ@é Yߟ·ÒP|M_·óîòL}·®æˆæýŸ› Ï„úœ©×0&fX £†5òE½õD>‹Œ’ú6=?y©·Þ² ù¼tKÏÐz xWâ•§øçäTh¼ƒž!•³ û¹8"-àC¯Eqr þvs×yë øF�…ÐrV ëqNZMOÿÓÕ:Mf×"I~¦YÉ~ùåôò(ð[ÐõòÂfsZ‡ùvâ§mµj�®W¬|XSé¬!Ÿ�Ç@×Ó�ò}ø•ô:úßiœ‘1¦ÏÝC2k­„ÔãÜþJ3 Z¿zôšZ�‹H ¶€“=¥ÑÁź#»ÃÇ­áG–Uæ‹ãÿ¾A]ï^V¦á&´¦e¸˜GêR�øw-ðÜP§hðtk‹åZ ß°"¿õð&×Rê9 úI¹ÝqV˜˜�ÓRÄþÑ$ê Ú‡«Ÿ~®ç'l°¨í–#jÔŒ9OÞs€®··zð?jÑHô^;€¦À]ÀáX~¯JŒ1Š¿<ÂcÄئV¼�gÇ?×+±­NÔnXŒc—�e.7A³/ÐÛ®ÞÉõ« +ràHÒz§4€‰Ðpj¬1?`•XÉÒê‡/‹¸ì=AŒ¸²#q‚ò¼î=uoÿ¶m±„Ï¡í¸›öR#­Åkÿ1ðÙÙÍò•–Oð™øÑi �>én±’ZÈÑ ŸèöÀ¡œ˜€eÍšE!†÷�•an#·J­é�–ñ6a÷p àD· u ™*`lï,:ØH$é<@åJï½½+'Z+ÅÔ€ÒüÄ�VnIiw]YN¡sÂ~õ‘âœØ"øµrœq¦Ë¤]uV#:¨­�fÃ=r/'|§S±×Áeäáù«ðo׃ÄR˜·TùÆAÅ÷oRŠØ[3AÀ�±ÍÉwÌý’mt\+|ú +>1ñ%¨y…ÈO ”˜Ü5¸ïëá„&–©‡ ¢hÇDèõ6% D ^Á+Å9I8à š¡8¿çÔÞ¶›2� �U“½å‚SÔL<û^!"įG7‡´¾ÚÕ0p+%¼Å¬É°=0.Àö ø;¡>B¾œ‡Á™5qp?ó8lp…Ý‘ÕR©ucëkê¬bçËS~ñ0óT„À�™ƒ4Å",â¿üß–°v�'S¹9# +…uTeÁôøŒ†Å9@ïê=§_î”Ä%3}®nbäMÍ ÓXžþ¸ÝJÔZyœò…XOxXÌÈ"{Ì6šOµÈ?¡›ÂA‘çuƒf³$�4uÃl@øñeAuL×ÅNâhg4“2erG ™ +Ø•{½Aª„°e�:hPóX'9×» âK6Ó#’NövV¸ÜQµñÛìµ!bèŸû7Pú–GbÁ<›êÚ…�¹”¨å*Âì×ÅMÁsª&�B©9ÖzÖ«£»ñªDe8а“)uéUh ¸) J2À‚3óh+…É™. �ûE¢n+[?�t,Ä[œz<¶ðo #~=”vÜzT¿&ƒËgB™€Û»5`uãkHþccm2Ä<Úç[5»>ɼ¸S.HÆ�o?9Šç ëÃ9»ð´ ´A cÚ{ù&©û3P_ s[œ’73ð½v=(N0)ÁN›,+kš¾—³UÍE ­‹Á=ªµlêf»k¦Ù˘Lç’Ð •Ž_–$¡ì�ø˜µÞ¦—Ú%,éôüõÏÅ,Ûôuf,½£'u*Éó¹E�-Üò­a¬e,bò;•ä]OŒ–LÐϽUÈZœ²Ñn[oy@í3‹ €%å¢2ÚRÄï`ê°põÔžÒ•0¸âr˜Þîc„”ÅóÖÔpÔ‹™eQïϵÍáI)I.“ ˜•{{ýLL¤Ö·î[ŽCoºî°q!O¿›°6Âj(F±±xeIÝ4ê�\h³Sá\3Ø]éqÌ@È{ö˜rƒ€ïMŠJ·¾ÊÕ/ d�êðþ�WдÝÀ ®Œzûó sd†‹0;8…د¸Þˆê"�:øîÅG�ãCZÖœsÖ*­DÕá¨eœœãñµ‰âá2©›êrq]iôŽÙ¸•ªÔÎ;EÝjç!«²ÊU.hÍu+º?$¸¸FF�tÑN�yRø‹-#£\n›QœEE!r«òή-]�:8­ðîuh³¹¯‚,Þ-‘TCš�F_ér=Y0u”<ümêÂ3ˆ”›_5ËÅ©B@3PÇ�ì¦;2ì~m®n(áå"Ʋ¬&2ê%¸Ab@aTœ @–¢ñïc8VnÞ½aâSùPFÏõè@œBÞLÉŸž�)óìÉJ¿hšÇqyuꊸ:µ»€‡ÍW¤É/usËL4yÑ¡R¹€DÜ’;†1:­6Ék´ _ñ$CüÐDí˜yo"óþÝjh0UÈ�D¶"ïÜõ9ðï÷nôfg¥3n”èE„jFNÉ‘MrÊmæ‡5çu�®*c…I'VbRt&õ²ÏUÚ¾ÈFIG Ðeì y#ê )j˸ê0¥Ë.;‹œOf¥£�5Ù$ôÌ6˜<ÍÞb øKW1ÕÞ÷0a¨Stj! è›L½p€tþ�³Èù�¼uîßȾõ‡ºzZŸŒ”|hç;ÊìAÅæ4¯$r€0…¹nXk7Ú¸Ùy†\÷z�¾ÊÒiÇGS¥Ký|™¸"û鎞/ÄNf¿èf‡7 RžâÆkKÒ_ Aâ9Ö*EcÝ]¬ÃÄEL’õPG2ø +wÕ»0Ìþ¯o–uD½µû=ç¦ÁÆP}>\’—>0kœ¿ßäÌ„€A͘Ö)éú +¤T¼šÝ ýTý2Ì'¼ñ¨šZç/sûøázU«+à€;9³c°¢“Š¡Ùa¥ÓD~}›_€%´ˆÊ霂õ®ô¨ÔúRä—¸$rÁÛ„¬¶È»^an²ßǘRÏ­Yó½ÞkѯpPöi*$/ŠÁ-C™ +6w7u¡Ö×~×̺=ª¢ c�Æ J?!Ê¢) w‘2ÖRLÑsÉg¦,#’ºÊÖž“†wʇ[f>y9Ù�_ú?{š¹¼×pÁƒ9 Äž:NŠ-äÜìTâåñ^ªN»j—@mÁ¤XˆçºÞYGJýó14#£ßT[ 8N°ºéñ+O ¾{m±êêüiS»žj¡ÚKkqìú–3Sõ½Ý÷±nJî&È[fºÅYWnËOë9��V……|Ö-/gy§ÉpìºeRâ°]êÔ¹}ŽÉmˆÝC‹SÄÊ{&š—9œ)Äd>lì“!ß-œÁ]C*ƒA(˜"@¤Úm™D>°T¥"cÔà’ ÂM©˜.VÃ*Jå09Aƒàsj^ý—! õd“j7~aÌϤþº†_–òEûŸ+µ.eQÐ œvøðNÜÞy´,’ë]ì[äEŽfóªC¸’bÓ +‡±ARÚä6ø>I J%–*R”¯°<êD­„g‰J–Y¤?çQ�qcö|öA@ÒÈ?Ä%C¶Òד$ +Yl-êl9¬§Bõ +C²#hóXòIˆ2½–ëÉþµ«X=d8¡®Èˆ³âEòÁC†,I"@¹˜ªÙ‘˜Á2i¬å!§wC׉ž.šÕ!îÓ¢Œ±ä¾Ë†U3Æ%Í3 �5ÖtEyf|þ'Ï]“]û9duʨÔ÷9%š‹£ÆfÁ2A빈kòÅŽÿiÞ�Aì@G§7neªÒY5ÔŒúªÁI%@½­õÎÌ Àô²•dƒ"ÒµC’{]¹í�r˜Ó¬^¾Ë°U`=¬þ7•ÒØr³Éz$v0ë•Øg„È´r£5yÖâ XÛ/ÿc6н ã3Úø/Ý›bß� VÁ7¢\,ˆç‚C­‡ðüH·L™Á#”eA²þ�i$ÅÏíèiÃôÓÛë×qÆ%¢µyw’[VãDì(nå•÷s¶þZfíÊ÷<<�u¥‘œ²Euî¹±Rº›¢&|3d¥ïˆm™"¢SËŠ2çú>Êrb®¿ËƒDïšàéÑ‚98\H)!Ê€x GŠñf†ìŠ«,²ìßU²g°Õ2vžª¶Ýº�{HÜjõÖÕø†ˆg†Œó%ñÔ'% Ë'²Å Ù°äMø�‡Xõ4+䃿çäxc$�;ÙDK`·­ËM'²ÐF³xcË•8ƒcl6lw‹g±ewžA‘ôñeéSlý *Ë Ùn6HB(5«tж­¾hØ)° +Ý~û%Zß’Lë §LwŒõ,møç30³ë�ªŸ7ðÏg8¢ùfGÄŒ`ïPØç•KaUÚWÁ¤ Œrþ|¶Ô>trB¢‡ÁŸÏ²'7(É CñùŒ»w’д>Ÿaç½Ç\ +ïóYücŠo¡³Ëˆð“! ÛM@XØîc'®½¶*Î#$]} +eÓ#ÿÈÄ!bçdï°rŠÏï°Q>gÅ«‘ð¡áÐÙ£ùÔ{Á ~B�èÈ?š¹×ŸŸ( órðê£þ:þ+¼‚õÔHxæÏë×9êXo9‹<öñW…Bü¤£»û×R±>9rº$ë‰}C'ñ³eÿ]_(t¬„"Öêû€J1ûv`l—DÔX¸ìå GØYmª;F]X”º_�ì5Ñ!í»Ÿ�¤¿hzz<0D˜"•æa"£¢gD>È{§kÙO]‹Èí†â+UšRþBÚÕAnïùI-ï'æ#ýÿû"| +x§ábyxÆÊ–/ÀÙ)“ë;Ó„N÷PLænß³–/4-hgävôÿÍ`ZD„t ÀZËÓµz›\Ê­å‹~T0E_|ݳµ|*Ee>Ž»D£åk’]`‹¸•®x[bù’P6qí Ò¾6ÅÊÁ `›Ú8v`}7dÓ0pE>F zð¹›âb#£ätoü’Œy…\J‡ ™lgùb 8³£m'`Ó,_¼Ò͵ñdïTމ¾e#®õ?Šý l7—ÉkìzROñ£;45â-­E&6÷nÈ*K×Ú†´’åiù¢­È5'S÷°Ð#ÌÐòE¶_Üw¢åk«9‰ØÙ5ÃË +ãÄ0èd~–´ÍEkÓz"ÄÊȸ +íÕE{~�ØQe£ôS`Ò©³Gzèö¹¹ýÞÈ0hIÑ3óøD,_r–­�ô„CÙÒȸPS6²Cî…ùî¸L¸?Ñ` Cld õOVÝ¢ø„Gš|¬QkSŠGú* +f�¡ût¶8‘Q³T?6,XTóÒ§þ3ÕÐEfª_ÑeñP»ùÕË=D®|a…õ­:‘à"á%Vs?Ð9kÑ!–­|ñ¡`¼�‚2ï«…%†îáÙž8AeÕÔì¯ЬÅAÝ…ú>éåY¹©Í9êa|þëƒç©¬ *�tæ¶7®ÿö¼ˆÒoêgÉ�z +tu#%ÏëÝ—ªEARU¾ + ΚŽ�§³!zXX•6œ¾T¾¸£í’óªE©KËk"º¾"†VâÃÎä,ÉàzF•6ÀAôX†�]�hþ‚¢õ½[Ê›ÖcÔ£ó]•/’+Úãm—�‘Putsö¼úé„/ßòl™ƒ]…fy"ÌÍCz¿Þ'ù=i>ò¦+§Sù ¿å,!™ò8»ÊÁf¬h¼V¡óå#ÿžß× úÔçËØ°”¬Žm-Fß(±Óµ–â4•/ŒXqk`s=“o]ÜeÂ-g3ÀIƒ3—„ÑΫk×H =È’û"%£>(Dxbë\ö¯wœ¤½ŸEs EŽ:"WNš6u{MŒ6()0�Ý-¦H5Ý,J+½ø*±UãËWËÅDg�+<|!–H–È¢Íuâiç]¬s{ëo‰ÅRËÃPxô*a¯|x´Žuñvø-~ûÏ­¢DÃã6v b-S »ñ +H„ϬuþhǬ£µÌfsìðUçk5·!k鵯¦ içöŽÈêaÿF[Z:jé†sã�ESM9j&ØáËL�ŸÛïºc Áÿ_îÿÄDËíðEü{é²Þ—‹É®±}]Íç º]xÆ™#¼ÉÕXm0.]”ií’e„e‡/+ÔA²›a'¿Ã×es¯çùG6Û¸28"lç,¥”˜ÜgÔ¢jÔ™ìÈç;EdÑZf$ŠÐ#ƒTbP±Ã�û€—Í)\-@|.á™ÚJ¨ž�.g�MCŽñ]»5T�à—<-rt@ј¹Ï¥Ã—ŠFÖrÏè.:{C]»‹�/§"ë\Ä=¢°Í=ÿ,š:|aÝ–õ¬åN«¢�Hµò/žf”=»@§šç€ +Æ�ÿ§I¶§Ì»¼M*™ðþvèf!;¡»Gîš1“é)Ö oÑO�Žû „Ix ­—ïlj&þû¶mFMÊ�œøš"]'%‡/íz%X£ûÜÙvŸ^n <¸ÙŒì…ÃW)e%$Ô‹G¨|Ò¦ _ØàËmô¾­sñ¼P’f«Tò¹×ú [·ß&Ñ�Sìr‘Џ”i†/æüÊ�ëkó¹Ú3|É–¤3Í(ÍZ X$h³~’9ÈDi‰â1ÁÛZ$M?Bä;4ôDGC�6sÜ fL8¤{!öÿ`C›íMJákb‹r˜/�ÐÎG�f¯ýÅ +™¡‚$VwÖúT3ÇHŸ×£¦R^Ò˜Êî¼GµÁ¿ŸË—£ds¬´¢éë�Yf¥<òdæ(âÕ±v“ ³fy_©¹ R½»ÒX‰µà_~S׃ˆJ`òPÿžÿ>gqr Üe–ŠˆT!c·£ ‹ÒvTÀªP͹2)Õ^ª€Ÿw]`òŒêõ´Ã$%Êèµ èþ¤ôl]Æ~ÙfmšD\?u±h§- —Ï%,øÕŠl–ö²2A]·˜Á%¤Ú?lh +Þž(êÖ9ͲÞÌŒ¤u·Í¹²Ã³u®øUÏ€×áñãp¤ 7ÃG„3a׆ +­sÜþ]Â=µú9âÞ¾ŸdDp…R„Yƒg £°]š€$L‡z[çTÍînqqA™?ddG¡uŽVÊ)6"Ù‡Û:W¢V±6ü­s<¥Þ;¬G`58Wg€¥.�Š$ypËV$Å´"üƃ.Ç, RŒ!jÖ¹ÊcgÃò`XŽR óºÒ¬Z†=FÊB‡ unaXrïhŒ4È ­5²Y'a¢¹b¿½s·Î q€Æ'ãÈg�É»B�´Ñi�óªG€?TµÎ}(êGghý0=Ü ++t*~׿¹Õ¦ekÈê±ëåG­s¿€°¾c�㹂ëÖ¹IâÃtŒÖ’²[Yõ¨/¢i´á_VNœaÕn)K¦ÇTgLWž É¥G°$cÊÂþAÅ~µuåx�œ ªy`ëðdxpl‡©�´d¡ÐPfÃ:W7& +Õ†ô›V”B~Ç=³Îáþ;Üiz�QñCë‘EƒŒunleÔŽ ±ÎqV¿À¸CëÜiIrp‹C7D4ã!WÀÛ@3JÙZ¥Ð`¶�šzì�@ª?  f˜Ø« +ÒãªÀT/�B�—àäök˜´$¹Dp¡æ6Ç=—òUçp�¿0Òî üïCVuÕóØDqýå#[ÕÜ�¶«¸ �•ŠŸÇÇø$<©òoú�l*nhiqe=:]q�ܼŸû3ø ^Å[ŠèQ…‘Ì.ÞêœXE°b& Èç±XqmÆÅ(f¨S“\qªYX¡Žu¬Vçn29S…Ä¡SqóÛ&VV=PT\\„¡Â$bÐ@]Å%•œPáyH[qœ/:;ˆ=�<7JkŠ¡ÏõVçH`òuo¬Î;àƒ²Ò™).±�,ÜÒÏãÎE„g‚GÓçјŠŠ/[› ¶»bGœkÿ<:«sÄF-«Z¾CŒÕ9ž`à¸Þ ÞÕ¹¢°Ài(%fȵ:Çâä dD(Ava_�»#QMé˘@Љ¸„‹‡8Óæa�¾íS!l¦@÷€½°?èµ:7ëȪ[óx[�»Œ¯ø¦yÜ»:÷£Æ6Ó¬ÎÍ|ÁvÛ–ÙJó0Wç¸ôÝmü>_ó¸huî(ì»Ô›Çku&ßP"Îc±:‡\…hÐÇÞyÌWçð „œ‡ÅÒêÜ`Ø; “YW猛-6‚ÏÃ[ç«sÿÑ0ׯÎã-ŒÜV瞣†lB‘\,—³ì<>ÈÝ\šDmƒ¶ÃàœÇÄê0 92¡¾9�gu£9m0 ¹rÞnun΄0òõºìÕ9<ùR3:ˆÎcúÕ¹ &éuŠÕ9þlãÔχvžÕ¹º|‹ñ™Gs­Wç"^6(;uâ¸:GôUo;�ûêÜå…B:,OiÕ³ÎÖàDäç¡4ïv£!Ï@'Îãwuî“6“}«s«YPdA©n ?¯ÎÉï˜Q8Î#^�ãl=ˆcvi ¬ÎÙÔ=­Aù l\Wç¦!N@#ó�¬ÎqdÇ*˜“æQ´:ç·DõwO†š‡Ñê\-àrÅ|z Ùj5Ë0•«sI¿R•Õ¹ym/�rVç�?K U×<º¬Î ¬<û_>î¨yô¬Î1& ƒ¬y$«sü‰ xêõ”£yì¬Î=@ë¡Þ<6«sSfã_dbÜæÁÉêÜXMë«ß÷ô­Îñ”TF2ÚAkâmu!Îáæaò¶Õ¹ò ¬Î±Õ€÷Zbþæ±»:wªñ]å6�ÝÕ¹7~€Ã7�ÑÕ¹á^D_›Ç•êÜ«“Þ„ÁÍãBuî@£‚$" °y4ªsŒ¢ÒP\‚ÍãUuîØ)!0Þ<(©ÎÞPü'åªsôˆ±>ù|�7ˆP>™[u®ÖÈ�bœ"aSÕ¹©ÁkVSóðäªsÜëFó0ÆUç8z¸œÛÊ2+¢$¹:9( +F†aé¶w8��ÒÆ¡šƒêܸ«Áš vÒ<ŒªsL¡L CóÈQ�#–(1(\Aó0V�;ø¯ÏdhŒ ØÕ¹ý†'X¶y(’*HóP±”#›GquŽ®œ!…¼ ÁÊ«såªö›‡%ÊPÞ ¸xjk«sHGñ~wžE€Kla©‚zO¯óž¬Î mqûÒⵓ&.— yÌ«sX,7IãŠãšÕ¹Á‡E+/j5Õ9î¼�g†ªs<ïZÂóUMeÕ9ÄÑN‘Í�wÌ£‘ê=ý ÿ0Š‘0k`¼ª7 ׋�eìUçÆä51ª]ƒÌã:WÌ€y�ódö¦:÷~Äv“yx¨Î½[ÊY×…¿<5øÓàí:'YãU·v3taªsÆ åæ•…dz«˜‰MLש:¿XµI¢ )(š;�gг®æÑRus’0Cyâήd]t{”(á@4�+Àg·zÌÞÒ§êOuFÕ<¶ +çÆ2;^|^l4�’êÞ/¼/qwšGEuŽþß|Í#\uŽA¡ âû)ýq‹&7·ÜsÏÖÃÚÎ ïªóè)¢ç+ó¨L˜Â-Ù"¾p¹ÝS¨“ä] TëÜ#®Ü%3‡6¿ È;C�æ„71 &,bq±]uá 3“è, î8E*¼x^Ÿb2Š�á5Á/þqãÙxZç‚keWÔÎ`Ù:G¸ù¥wwp1RñŸd¤Ö9ìW19]ƒ¾%x2bèØ:÷¼�V¯1T½Ü0S9¤76b(|QÎSô0$þJˆï+@ CÝDÂ0#C8AÚ³ŸÃˆuÍ +82 +Šê¨Ü|¤Ïaã¿ÃÐqë–�kåm"ûÖ¹|o0rÃ�½uŽ—'É;$™¸0$m�ÃDfù¹aˆh�ƒøÏ–n÷ƒ9Ù2­s˜»?¶Ü®eÑSðZçøS)OGA†z[ç&±¿ÓHèŠí¶ä†„­s”{hM¬%C j�Ë‚%4R[ç¨G^ùºÁЕëÜ–Yy¤ùÛÁÇun96\ó×ÞÁЕ®sˆ&kA04ÏN´\Eº¾íxòj@®ô¸âÀ�|ÚAqŠdΕ¼Õ…ÊÚÐ`hu�ã[AŒ‹ä/Dâ:GæXû…j¹ÎMò1NéŽØ}!h×9p]qé‘þÄŠä yp�³(ÓØ ¥ºÎ庱ù ÖÞ€iÔM/Ôw×¹õQgF½PÙuæa½½ _˜¦"]ç2*•F^ÈÅuõ¦TpË \ç`Š×7´WpÁ$Ç •]ç6P±…qx¡/×9à›»äÒ‚²ë:çݹzaV!JnOj­FºCXr¿öh^ç°$?ëøÌñÜ2½Î¡}Ô¿ýôŒÜ¡ÔëÜjð>ôœîôunÁ«:wÈô:ç�ÜÝx9\ç|Dˆ +æíä'…y€!“ˆ±Z»Iƒ& ·À)"Œ¤Ä£¥>_çhMé×ù|�xz‰vˆj¿ÎE8‚“ I syÆá;Ž5 øu×§4—££mÿ�k&n's¯s•_ËÁ‰†îGáŽÒó:·=z4&±^b½Î "oê5¨rÑ„Î×9L½Ð;¿gH»g¶'нÎiêklÐî|—·ÝŸÚ¨'ü:'úÎû=èë¯sÂX¢áu¼Îɾ¯MXs¥�ð:7×}ßm�£†6Œ9ôÖ9©–ÄAëœìzͿäxëÔ9n�[Þ hµÎ‡ô�_ªpM·ÎsÐKsÕ·ÎMõ5õÐæPéÝÖ¹-æPf¼u´å�ÙÖ9=Xqt[4Ê¡&Ö¹±Í›¡q.©óÍVCŸT0ëÜÌrA¨/Ç4c�“ [iqÍìÿ«sG'^ˆ-"k8Wç°XDÛêÜ({qO _¶ˆìV猣¾ë©‰ÃEdöV稃�í"²Y�£¾ý'°ý"ú¬ÎÑnfK狨c¯Î ‚&æéÑ“¸:WUÄE”·:·C{´`àX»Vç +£Fÿû4�ET%üßV‹è‚êCº*8§‹H’:{Òçô‹ÐžEÔ“:—ö] ,"cêˆó*�HôyE”J�/dQZ*¢£’:WÁ®”CEH�{màZVÓ»Ô9ÚmKE‘:—3¨� ýÎÍÈÞ‰"uNÁƒ�Ï$uŽØF¼óëTŽ"ª3Rç6›Ä¹Ô¹~ë–DÚ~�ŸˆÒб…e“šÊ:LDY©s’!&"cr÷vúu\h+›ˆ„Ô9ÒJ.æJ‰ˆð#–1„*‘&uŽššþ€d $1¤Îåk*°¥6"º¤Î½zM² +z˜‘qêœw¦8aDîYÖÔ9‹DÈ{ìp¹CߥεŠfÅ%ÈåçC¶SçÄ@2wmkVj©sgjø¡ä2¾¶Rç¶¥Yè�µp(°-_�ƒ:€=i˜hz ƒˆöȈ-Š˜ÏÈq§ ÕL�›Y÷ç "zL�Ãëvý„@Dš©s`e¶j²N4«O§B*$;J©s=µF—æ ‰~€úB¦N�“½g¨¢2 )ÿ@¢¶½›‘§ÙPžÈ_ZÑ“—š:•�" ñé‰~±ü‘nˆâ› �*žìȂȯÖnH”ÂæÊÄÌh¹õÿÐ2[ Ó÷r.o‡S@Ûå’�ªE7®Ž»ŽDëª,÷ÖnØþàpÀÜÔ†w»>ÞáŠdõzϪ© +u8¨æÆÕÑ+*(ƧµK%ýúÏKëµvIuß3y­µ–•¡Ä3!àÍnWôå D;ÔÚxt“ï”ç²Z»±Üî@vQ)kíB_Þ¼X1ÃÖî(‹ìôÃCщ¦ÿrжvóªe0ò¾C Ò”žt-D;ãßáW´:?ïlíN_ÌñE[»€; $cžü¹µkÄÿ¸Þl¾µkÕšŸ*Ç6jk·wß�ã$2ÍžÚÚµ0FÉoíö³™š`©ñ‡6lí†#Ô�‰ú¶v‡—21¤ÝÐ,æ[»�C.>£J?9…`˜ì­]‰Ðé¼9N‡½­ÝåÐtUCvm³ekwb¿¼Æ\J·Eøa‹Ä =Ê —äögÕ‹+ÛòÖ®Q�Ûuz-u3]”­ÝVѤ V]Þck׈S<[=6Õ©¶v_࣬eõ²ÚÚ=”ÏIÕ¡æÖîÌ —й³¹¡ÆßÚå24»*ëíÓÚew“K³Ö.Í ÄÏ ¤µ{·?{ (xÔ Ô¹o:v`¸eƒ`®n1«‹×Môh˜8ÀZk—F”Ý÷VÇ‚EÈŽY»[S uµeè#kW\oó”ºêŒ·gY»\‰ñS$7ì}«ÈÚ\|£=kט2�©ÎhËZ»´õêWkžµv³à™›DFSkWÒäùF$› +”a™´v‹¯K·pŽ£àu­]‚¡åƒähíúßë"Z¼Ön_$©�ÑUp­Ý×…Árp¶Ö.õËÃêJË4ií6%K¸^|„�µvË‚±ì͵ÖîÏiÚÉ«6“[k*DUúàš–WLk— ]�WL&.¥µ O?²“Ä·}C´v Õµ˜‘5öZ»”Ý6j?›Ö®(+Õøä]W-]5­Ý´W©#2o­Ý{MV}Z»’—¢êšÜ­Û­µ[0+Û‰î¯��ÑÚ…w /Bý–‚™níŠö’ãn¼ÞØÚµOƒnyÁ q�p1£[»}K«¨èº7¤dÖ‘níª:GyPBX[»TË�ø 'üÚÖ.à¬&Î{DPÈyZe$zóãä•ÊçÕx¦–Kâ€#{fä¶v÷ 0$ ÖÌÅÖ.w2é˜N×ÙÚ…ô‘�éàŠÊÖ.I¾_zé§DlÑÖ.p«êþ$ºŠFä'¶ÓÅ%&Sº[»Eûðwlôдµ›È¹ýW+ûníQ- ¦»®¸µÛcXŸuç_ Á«¢ƒP Y^~míòV@­ž¾t�…µŸè�IX,·vuOk8ôGL­­Ý)¦4œàúìtxk·Ÿu`bÄCâÕA‚­0¤˜5ÛÝ;oíÒJ˜V3_»ŽBlk÷T¦@i,l·v•9?ÂsÚ!åní‚§2ù8ô¸�F®£ÆÖn˜ï_’D>N[»5(dq2\>*ÛÚÄi7̤x€3æÅÚ¼a5ÑÖ.¼$”öÿ¿Ì�%xkWñØÉF’Ù79oíæ%Ô_ºaø©ähD*¡�JЖ’´v»­ÔêÜD©|ÁO…Öî ý0šX)ôÝ@k×±Õ0]yšÖ.p†•%6>ÿ�¤ÒØÈ2NÏY»Â°µßƪ6¨kW«>ÐÕÔ%·õ[Ó¹‰\%ijŽdôÁ†[Ð$¬Ý! ¼»mîkßö£ñ{£®(ÛvÍNPõ“#Õ·›«€e+pu—¡B\ëÍgv³]T†‰µ«9RèÞ¹±J˜â¼TWƒzß‘– k÷¨< ÂÚõòˆ�[ €¬ÝhŠ—±»SøçZ9;ÁfqOõ{@*Ó·¤¢PGk·OðN(Þšö1ж¥µÛùIwü:šŸHS~uFlóDZb'Ûªc¸T`FEúÐú‚š/m¢HŸÀÈf¬,UeE‘ºªF] ‰"Í^¾p÷""B‘n Áá| #ñÒ£XƒÌik�P›7,; »nF€dk×T_nlóæ}~J˜ï%Ñ:j×.æœÂF‘š'ʹg8î k·vÖ5¨}SŸ0´A‘2` "ÚccüDêè?ma;ú‰ÔÕö½�Ç…É­]¯º«†c$ËêUHk_§nþ¤ª¼g5eIŽT»Õ]®ÝEqw¸æª Ø®]Ôuþ»D×qíªºƒYÄ¥ûå(tíöÞU8�oŸ¹îÚ•§¯Jå‹È]»ùcÑn)Yê”–»vÛi¥»ue&ºv£4·ZÔ…˜g*§k÷ _†Á`te×î�m­Ñêºv³Ñ˜ãÀ<ØcNcÛ]»Î€)q¾:©8ÒrxíšñP6�¤m^»Õ^Mc©÷p–^»¶¿äxŸþ@ìµûfô³¿/s€"[ÍðÞþÄýi”pd™–kÐKJæÜsŸþz¬dýÚ�"¯]ÒÆþµKé7Ó…ðyÀ5¤¯]rì +¸„¼oDTñµ ¢†Lo`¯] +§¿¹Sˆ×.ص�”ã^m˜zífŽÛ%´¼íø¯Ý %¨P¯òµ+r°ì>¦ì‘ÆúÚM9iº')±Á”Åd†¾v³�J qép¿vK¯º øk—Í9>´Ç l—\[KÌÙ>.ngÀv�·ðfÿÓ+`»jæ"�[ÀvñÍdÉ�ì”`»˜v¾ÿŸ ª·Áv¡»Ëlù™ä8èMƒí¦XIÁt&»íZäúʶ ë= ó@î,Wé�BæM«FìøÍ€Ê%æ™hŸˆf]mI^/ñLäc³uô±\mAð�j"�5`àÎYãEs ­ÿXÙ0ÞT‰ØDü~…7³!ÄŠîè·J _À)DKNtÙBÅq#2kK>,njòé¾tæx4íµ^ìއåàôãM$é¿ º¤�GºíÎïž|æÊuœHÝ/¡íÔŸmWÚîΦ¾ÕnØlÄ™âa‚Í#÷á̪Šb÷Õ¥Eb<@o·,,ilJd[š +/¥–T‹cÑ ¢›D¤TIl�Ë ŒÃ¶’’•V–£>PÒÓŠäN'bÀùñ4QÙ +,uÎÔµ•W)ôq_8˜kŽº„”$qí4‚(ï«Å~ló}+}Z 9„hHžµ¸r¡Ñàa-~¢³ºÅ"Èh ƒêjª�bàÓ³F†RÎB¸‘0Îlï´r×õ™LX™¦4‚¡ñ?Ég>¦ÓtnÌíà[±37éGa +’Nè ðéN>LÁGô ËXRÞÂ�-ÌÌ3Æv_%­™Ü¹‹5gà�4óõ¡·:è½ 3 ±|º›Íˆ>;è(¦2z»ü.7$‰0‚z¬8n1<�)¨¾ÏO{ŸñÚb +{� Cð§ã–O&ê‚^T»Z$Úl$ "½L íå‡|ëu s„AºN¯`»È­z €î¨°ÝñEݾT'¾dƒŸ8Ÿ†¼¥0 FžÜ‹ Û­¥ïð®œx±2|¹•¤OóB‹Ù?…�Þ8ÈT#Þ�‹íNší×Kö¤o`Œ©‡V÷��s·D°+ÝÒ�$@(ƒØc»—Hý\@Nˆ|IVr`›c»=g’Þd-¬g¤ÿÆv?§µFܞζ�§–Eÿ PôP$wA¶ûª)®‹8Tù;õ;¯9ÈRÈv!»IÝ«Ø0Zd�íVq2Å*Ñ&�!&¹ç}c,m}Í´q¸™8ò©g?áñž}ÔÍ|’g~}ë•­ƒ…Db=h+Å]¥p®úÓËÃX¨�XjÊ„”+Þ°ñ ‚ËvÛzÅŽ¯ÚgÕT4Ýýx¹í¥¤bÑe»ë!½Œm‘X,vR¶;jóL;nôrK,ÛÑbaÍxâ‚tt–í¾]d}ÕÒ¾Ñ%úcZ¿!ÿ·œÑbæÿ:v¥ÊvÕhƒ°ø8¬¤É²Ðdø8IÔµ#º,Û­Í„ÆÖ~wôY¶[dA뀼‡\¶‹&QŒ°x©æ=b]ÙîèO.½÷{ˆe»Wø¥BJJð‘ +�;W}0¦Ê5@ExãЈ0Ð¥üçÂL‹„ nòQÿPòûš2’9˜ô`67¼…æÙÕ•ðëeyouDXÆì÷ˆò“—ËZ DøèɹxŒ3q`~­¡)ùsN«c VÎóä¤å,ÆÑÍØ IL �¥Oaä�‚D«!S»ÐÆ»ÂF»ÞÙ„¢ªBW—hØ=,3Bº,¢›"!IçºKΩÇ1Zª�S´&¢.­�Ì€ªRȺâmfÌAzÞØcE#:=zDï£óÃgö½U hÌíæöËX Qâ†/´;$‰yMØ8â?R%ÿdçÛ‚h·ð©<>ðÊ�v]v‚ïZ%CßÖÃt‹Ïî­䨕�3÷n5;�êÀá†Wò÷o;�‡`_˜;˜z`"í`u@GºBÕ«2]0ÍÎîpu¢LÆîìfŠolKÑÙÙ��ꬥ@èìÒ;ËæÓëìæIª}è«êª™b,m:»G<–+U¬qv¹Ék™T±ÇÙåfÞ�–?ë8»1‚ Ëœ]DY½°8»�ß·`ŠúG�¹u8»óá�ˆ¢r¯XZøÏS#n‹�A¢.T Š4„”ØWèìóf·”|e¡øíæíÍ®ˆ=Ž*–ˆïkvÛúséW%«Ùí t©l€rŽf7ü�HÉq=³ë˜fe‘±-¨ßifwcµ±1ëíÍìªÇ6gç Û™]¥ìx7�¢™]·©oH¥3»ic}w³Ì|l@ÃŽ^©˜¤ɨ™ÙÅAƒÁÃé˜ÙåUPá$~Ü+cÅ™àܾÚF„m¶“™]—ëß.‹dnÿm�CŸÙ¬'£YU[iZ¹Ö‡(é +$hÝœàA„ºbv�ˆ�›4¤ M‹^΄s 3�ý¥c0’Ñîe·b  ;w^vE`Í’�œ„ü–È$…î³o ‘Ãp¯'ìç9˜ÅÔg} H6ëïø·ìFäÓŸeW”hṴ̀ìçRƒ£ÄÌ©tw›®ŠV°àÝ]¢:`°Äw‹!GÜ)H!ã`0÷gØ �D*»³b¸WvQtéy¡mßÚ\èp@8]ñTÙuÌX%· ©ì®O²J¿å@sA�>Τ²k_àÖ!}¨ì²±n¥®Ž¨Ûô©ìšÜÓ" —Ç‘¤ìN|phòÜëÑçQa+4.Y'÷œ² ŠÂù˜LÙ%±aQ$`Rv‹'»ruÉä!âL­ì— ˆ ·ê™�Ì]R˜»�d7-�ÝBÉn;eÇ;ØH$»Z~.ä>‚#ÙjKø8’]K�Ü +6A Ù%ØPÛ{É®ØDä aHv#†Æ!ÍSI²Ë”1aB²ë—…·É.ÌDsHü¶ª“ìú ›øHvùâÓUß +äð‘ìJŽä; É®8žÆõÝ-]�ìö$ækFïήØl›bÞ™èj¢¼h%A�ìAÿ_:²+Єu¹ ñÈ.ûvŽ­`¿j…Pщì¾Y»¥ +HšÙí¤nŒ]Ñ�Ȯ𸠰!» qþ`Å©9d·Ù^P Ô©@v·|3Tpá »\'·(¶6Íò¬e  c*‰íßÊé1Sƒû!U;õ$<¡ÞË’T£ßÃӎ逪åÏhSK å=È®-‹�…�÷$ۥƇøe.…€ì¶£ ﲨÝÕ›T s÷h`Ko`�ÝL/õP@vÛ,K´Òš@v‘QeØ7‚e¹ÒHôˆµò‘XC…@vc‘4X @v]gN7È®ý÷¥¥¾CôUd÷/ìJTîI¯•Çãn +^u=ê.\)`×Þ h†ÓŽ]D›/öŽM)kõ6ËžÍQUá¹Êîè^6�¶Z÷n‘Òj µ€Õ ÏðAëØ]Ä8v�‘Ý�ÝàR(�]©T¨¬¯é÷t;QƒAèÁôs;ÌnPGÑœ�©¥óŒÝÌìt…š*INë¼^r›#¸CS}‹ TßrŸËh¼˜ŽºoÊÀs4bRÅä¬Èص¯‚Á+¶ŒÝ#³@ã õeìª,—Yrrdì"ß…3cmÆtjÊq4�À«Ošpš zµä–™R6çøt5ÙçÓ#\÷‰*{êÆ6ë1¨Bšö?‰£“ZXQcP•I&iTÛ'e*çð`äî4• ;±ÉâÆö†„ôŒ¨rFí Å4Šm‹u¡,.ö͈§„ûX“ѱ�¼rѱ˜xœøL#„'�rg'Ås_-n>«™ãÍÏþW!<){…é4ÖÚˆ³›™° +›Mˆ8!Ù0˜>r!´ùŽÑ0 ×0è�`õ ²ÀZÈ�èŒkæzµ0+È.T ¯mÝ“k‰s¥Në« ×>zÀ׺õÁûVÅKx©'郔ÊÜäã … !Cgò +“¬œFò?�0o~-åì@(‡D’$˲¬�» í%9BDD]Ô…›YÁioe«fdY@P@0 +j*<5¢lD‘ì."F‚�2dd/c­Ö�@FV3¦0†¨9²ËÉ0®à²‚Q@`€eZÁY� +hè1—Ploð ù..ÍkÀHDªH+àŠu†Á»çx$Š£°á’r‰²—Å_QV¥¸<Ö%ÎUR¶Åá¾UžŸ=b››„…]_EL“+åÌ©XŠg[Ä´«"WÕã™»ÿ~«{ï­|fè­MœwÂû0îÞÿìÂÊ<ýcùé.xsqŸæ?ù”<}¨B¼Y„ IC‚*ý¥#Û’ ÎL 2Gvÿ0°Ò¼¾½âÆ� Î^éP†t.^£¦BSL­¾‡‚Ç^Atc7ê_ÎMXYaŬmnTS§üw<ÞÒÍgFF_ñ«Æâs›¤É1=Ÿ#úXM ÿù°C$’^§›÷F‡�3:lÞfµDE Oå†'‘“‚D> ã3²öóXþ¼eHž»'nâ$É_bg-«;4vgR œ7¨dš7o(ÃPÈh �ÈE"±ÃxÜ€v 4^V\T¢J‚–„�Ȩ:N…ø’€^}X¤‡ ÷cUª¸£�@üÇÎS |Ùˆ³ÁR{óêkï~2TePL]¬§W«ÏîVc´y·¯™˜#;¬¾›¸á•ƒ¿U×flcæF ®L ±á`‡ö„Ùc�¤c­> +ÁŽ öúäÿ´'ó¬ÕÇê|ÿæ05ìã$X«�Ð ÆÑR¢ñæ¤=…l¦Î@ «qêà¬ÕÛa&i`?›XSe)B³(x æ¸»_úh`‹›UØOÅOìø + +¤Ø$§n¼µæ„Öê ®—ã§tÙw!PÀÁ?��ÅÁ[d.[ û Q:�=Z9}cqeO™Å@ÿ¹Üð/hÌ�;a³—ôÈ%zý×§�ÿÎ$[Ü Ö0U¤ÿ<èÄŒXóZ}*Ç4°5x­¾ÔRì%ŸLiÕçgpLªoÏÒÍpê«0ŽUÈÿnR®q<Ëuòtõ�c*OòËÚOëü (�½V_oϺû ç6UÅÕk%ž¬¸€×œ«dûá�y­>3#‘ÈqùÅj§…{p)¤ÌXUØê»±(N}Í 9©ïª#­—­ìÕéê#¯Y´²t(ä>Ö�¤)Û3Zr§/Ò`«o¶/‡û5&Õ.kÉQÁ7-@�ͱÕW†´!ÅŤ^Ú¢_ÚOB½Šg¦B‚¤Áœ÷#sY™œ­>X1)»œBp³Õ§‹F½ë˜4à#“‚b¥Ýw‚úîîø»_•¶¾€(ˆ Y›BMa–žÏ˜Q)Æ#@ »à8¿ßQÌGo¾Ú¤Éæt€nË4‹™›D;eêt^Ôª”ôQHÊ¡d8¢ç±›"yúvçL~§<�t'² ©BB« h{é:5ˆ©—ùÓ÷h–£`ˆQÇ ¯€®§]Äh_QzªèžIéÊ ^ˆ»”¿\txf&•ÒbÊÙ&±nNX-K”óEb#6Žõu1 õgL>²™ï ñyE¸$pIö½=Ç LÒ§)aI$˜W` Ÿ�øp©�i{½�">“)ég /cÜ– 'E°Çè—$kÓÅjENòÌÚÊ‚ [Mý«´Q#¨_}ŸÚ*@†Ô_}šõÿ%�^9£°“„3„™—„">\¾ú|©W�³|õ¹@£3õ Ê gŸÉ– +m ÿòÕgö×+&»b¡G‹õ +ÖÀ•�‰„x\âðys©Bÿ—vÎ2!rÂ*O[ `´WZkNÖÅðpIaV‚Þ9VôƒÐœÇòG±}H0M¤�Tû("iT;±^ +N¸‘qç5±‹–¢ºUuøçFÒÂæ1üA¶Œ_ÌèÇÁ>Ô É‘f@»LÁñ�c×ìs-´ Ïl�_ȃùÑà½ú(Ï@Cž’„f³¼\ëIÌ–�žOSÍlQMöêkÓùþµ¹AÔ³Ê!4�<¨ad}·ÔÁ˜ŸÍì0yËå¦âåöPÀ6„1_}Ë+9Ÿ¤0¯† £UJjü©E}á)MlA➀Q齟ePVzú€�0§Ño›‹€³%✯Þ®¡Â|X¥†.c›˜_}ò>"J±mr. a\£~_†ë ¦R´Ó¼‘— K9^ÜÓ =cʸ6%>cu#8AÐÕëaù1ŸÞ!.pî hÛƒè•Ä$!c¸ëÑÚO]€ %ræ¸äÉ€"`ùðêó§Ü^ç‡ç¬¡Ñàm:.ÛÕ×·2˜¨¤ÞÕ׉¥Œ¨ïºù”ñ—éåëM2qä�#Ù>ƒ$ä ’gB-OS^¥ÿ±MÊEÉžU¾z[ûڴ𚸭¾;rœ§m¥fUºµÕÇn{ÿ†ú¶™ÞÁÐ4¥·êÄ®ýv‡oSä?Vv”­2lÓmì0xx‚]ºd2ÁæáÛb¥éºmd6"p¶ú`±õ@öè¡H«æw:åàVpb‚ÒüK—‘ë¾^%ìÄ¥`#.æ›(A˜�yèjQ,ЇŠéÀû,R¾£ÀÝÊ£�Ã@d€ù1ª¤ŒÞ'e>Uwµ¤ÕW'L>þ«ÈÆëªÃíß"1½°x ŒÈ [‰ ík(š‹ë‰‘àpów+´­æ± Ù˜ƒ Mð5ðuA äò^ˆb‘1ë!0��à:ªÕW �û¢ÍNF<2×ãÝCq¼ l?&#“M¹²…W“¶Ó<úÚ‘ñe9ˆ tCº +”ªtâIŘCì¹�/'Ã!Y> +AeçU.‹/}ž bP�€Ê'�aë62/áþˆn%:+øœVŸž«ÉdwKN¼wà¿`õí™ò‡ Ï¢ˆ@+Ê=Áú�ÄÏÆš†CÌW/A@+lØå±M0$7 ë0�†HHÌ ^þÇÃl2æ k”R›œ[ âµQín‘>3§»ÄÉ!©­=îÎ)s½É•mH¾Td¾îs¾H­Ÿˆô?³6à + +û,èãu7y'F¨6`°ðeÐà7<Ÿ/.5J’xÈ�ÜN0Œ®ñÎßï«Âz;7ºÉ‚8ÿ®¯òî�#äE•Ÿ†ã%Ësä䈎°Ô’`!¶—P ƒä}'Ï.’µŒÕEÐ@ùùôC ¨ˆªÓs³¾òü¨Ó^©ñt“± ¹7EtQc È +\†”ÂO|Z›©²9Nû_¾tò”êÊNÇ>¶y"¡P±v²—JTžàÏ[°oS[25ß/qÆ=¡Eñïš\v¿ ›®ÒX}ÙíÞÉN ÍQ³z2¼rÕõ3> mì\¼{6}”逦W ƒ�ª�2ÿÛ1Ö¥‚ÁHâ€[K¨ºðê·wÚ<Ö˜<º½~Q'­¾*$¸ÆÈwòÇj Ñ³þó ¤ +4¼Ñ‘.�C¼…@Ɖ�¤Œ¤Î_HÍ…Á + ._nñ\.‘ø¼ã=‡K¼Øj‹L�€ÑÂ[œ…/â™2cTH,‘vøÖŸe|ss³"N=hŒ�¤3a¦Õšç´RźôŽÐ*òñ$®Õ·‡�ÌáôPu‹•ê¤hc[û¦IF¬È·½¹çx™ÖB¥E¿âÏKsÖ|›ù¸ÛnYªVy%’àñÚ¶úúöÌÝŠhS“b¯Ý`~P¥gñjëùš½;Äel£·iÇÔÂÎÊ�­ØˆV½ü屯¥9Q lûr‘™dt­>'†Í„ÚVN)¢@s¼©8vzC¯\1štCEk¯2d× }ÍZ³§8� +J¼3É!ST9)(pt‡o¸‰š@€}z=nõqÆ4_ˆ½¶Më$›{>@§ +VrÃþ1#í”FS{`]/]‚eÁ‰({$c�Mw}ÌP}vcÔ@¥ŠX�`YΑÔó€5 +ß18ÉÝ pÀk‹T0øzhݨ"þAoÛur³$tECOì§mÍãÈ/g‰ÿÞáŽ!¸8ŦIýÏ€pH*‡<¨”ñâ@C¤{ÅD1Cdä°xl]E…£‡°O®¾Z¼µÊkDÞ£l +8 ŒÇPUÉQ‘^© �þ¦=_ø8 +™�ï !ƒ5í¡Ä¼“�¢wL~ t³X]™)Rq,ȉé×ê£ñúùl¼bÞÍIQƒàar*‰\®W‘e EŸs;†¸[íð´Û –*â3fMÇïP>¦Çö×Kø·©�'Ñã5T!;* t am«`v­9 ¬VTúhMB.5�Õ×€ŽöÙA•3hÂ1áX}!=æX“R!†_��´†æŠ¹Ÿ,%‹ÍX}w5}Y_pÍŠÃà ªYÄÃÎ_ƯhÙˆÄ s×e;+öNÙh[O"ä]¢Xš¬¾Ë¯œ®Ð?è,Hœäõ£ø× )ÔD±ó˜‘Mn€ºÌ‹"•Ž=@hõGkmº÷z;“‚gs,ä,*‚á¡-ž‚¥"ˆî1âÜÉžLæ$Nï·J)p½tÈÄ8f 9ò6ákfÎ:6÷#ÀÜØ8Í¡-Ê·™qHëõª/*6<ÿøÇBbs@"ˆ[h˜l±™zô•…ío-‹.~Ì£ÒeG)òG”V}êtíÙì V,xý pÚ¾%£GqólÏÙ£9ˆ žfBfØÿg<� ××K—9X&e‘U}w„ï“ä'ý§²ƒˆ™5fQ3:&„° ÞN�™Y}uÑY…Ë{á«êso„Ø�2í))Kl;fUŸÝ¼ÒÆyAÁ»(¦zŸÏ="¨Íû³Å޲\}•µ�+=(0×-«\6É­c+Ã1À}v+¹Èh¿Ÿú °hv§CÈâVEËMÎYíuW({.¸ð˰òÕ&¹ºâ¿'ÿ« qò·m›CÊ�Ár‰¿„ÁbÍ ùHè,f¾X(Ô!å�”DÕwî?Qθìeø¦k8\;u[‘õqª¯ûîVxkýc½…xX gÊ LÕmžê“w ŸÓuE;új'/*Ö‘¥Ø½#`ñ´iÄîf‘«p@3¤1Lû&sü~Ÿð?�˽„ý›GäÿJ¾ê:ÄNð@ÊBd¿)Þ—A¡ño.‚�¢êÇÛ6Lý…„¦;•ÐIow�Ã!Â6-—êËœ ·¯€#ƒH*×�±9 uxZ·#æÙÄi¼Ãͪ[ÊøJ¦ô&5ÓÝ3�êCUÓŸÆ �°‘ô él| ÿƒ’9Pó'÷ÏÝ[ ¿w_"Ì¡ Sž_dЉNR³SŸÂP?«’Ÿ™›ÚwÃQé½<ý·:y÷Æ3´nù]IM“ÉÉ…|øË%=¬˜n7ÇöYÄÜívÛHÖuδBM6dVrWψ–Šs¥#…S_˜ÿ¡BÞpa¹,'ˆLº�}z­ �£y7|j °¦õZšú„.[ùÒm’xž€2ó5®Ò˜À_¦>³§cLl¤ÄB"õ t ›LHÝD +¹I•£²iä!™AÈñ!RS8ìpýض°fçSr-CQø2s®çô?S¡’®p‹k]ì’ywa6-[VêËn2ª™×èŽÉl{n�l�û_RÒ:fÍpézàv(ØšRŸ_}Ç:˜Eø¯!aEALˆÕéYjWQ¹¡ÂT¿NÍ•hð€ðÂ)f·u›ƒg`²í jÎ�r\én¡]¹q)Š(õ©ŽøŠ�@-Û `4ê±Z.¤:f‹`Ù Œ{9©¯7¢Xt!/¬ÉI}�ƒ@»4rÈøÅhû>¡�ûc©4ŸV A3Øw?š—‘Ô&§„_G¢ó¼Îo¢L•媨8„ˆÁ£ô}üQéJ$€ºBê'LQ `¹Øh—h4K!ÁÕpKe@7Å4(LMà÷¥2÷‡&ïË ÓF"ÍøP^&ؘ&*óÄkPA [ºoŒ¢—9‚ÝÃqð⻹�E®hÔÝ—áå…O4îå6Iøš®"Zï¥ûgßǨ®ñ¿~Ž¿êRFÝ?|ÿ¸÷&”¥H£à[Ë<F’bs4®š·¡d½€ùœØ¸_¥# ûžˆž¨¯„�WˆËÄaÀöÖ½%ü¥ùeZL @Qß¿µ5ŽãSR¹Üëtžž ` ‹‰úøß�5äù×èæTÈÿ\í½êÞ!œ¥g¡'BÓDB½}eä´ÌKgÄZŠ2Ÿr€<':‹Œ–nœ�i;Ì\Cmüz¿„™A¡º¬­Æe f‚‡ð Æ-há‹âÌoÇ€?WjØb“Þ@r‹�®�7ḚÉÇ>Îú'€6šÜGx l°¼42N0›Ê¢5šÐË“œºO‚…½âT—‹(÷MZõÜ›ÂY›G†çõÍs”OV}³ÉRtyTA Eȱ+ ¤ìî·á:½:õ¸ÂÝšÿüW±Â­Iáz‘l_A‡úšðÊ»~ ®5³ösí¬n;÷ÒÉÂŒ``è:\¹ô}µX`À +BØ3LKèZò¢u ¼ön—Øù›8Ú~Ã÷!uCëÿ‘{6y''�_?+ZYv�€?Xð’X¢HÔ§ßúò#ž&¯˜f5Cj D¸=uz‡íoGÕæEV©�| /†�ÿ/c»§)^í8@àªïÓ­­(y#troéQ˜@’ zàîHÒë6w³„ûXbfoa¾3´œÕ·á +Ó¶ÝÀâÈ#ÒÔg¿3FT¸§.Ýg«Vô~ÿÞh^úPûÓŸ/e9  +ŽÜ)ìÍ€û3¯¼Sp�,Ý€� ÃØ�?û-7¡G®¤Óñý¼Ä{úv ñTK_'â‚kiNX"Õ\ƒ�îhàÿ/Í–�µU¢Áù›wÖ@ì�ƒ;Åcv¨ï‡kºu ëDû íÜEù—�~˜áoŒûôw³:ºº9q‚ˆuYÃ7Ó½ñóÜéBW1“(7Ž„À r:û4vÏ›�ϲ ÖìGOÕyAú¶;{£=f²7qƒ,ÒR)Õà~½A›Ý ´c…¡>¾!½Ióªª= ü‡˜·CA—o.KĽjùB}ÆŒð ß½ÿ�¹�º—ÔÜPtJ´(ä„úÚ™+ÖM“|p[§ŽÊàþ¡½Ï H¬!á,šÌ™ iŽ_?†AI� ý„Îù¬vòeÙL†%צ0¢Œ?W@}=˜×—æäN=$B +÷¸¹óü®w ‹oèD™- +ÂôBÄ*K»-^˜»A¸“Çžš%äqT-]ãóŒì3»j>ï«F°Ÿ‚‚輦9¢�«Á=ôŽûyúßRÙÏ{ˆŸÂà®lĽ®Sz1‹j�éCvMƒ†£lk×ôW¥Ø ú¬¨àÿG¹Éÿˆš‚«¸”Kw+õ?ö�ÍnXµ1v"YPâ—<{Be!¬ÂmÓ ½fG¼E™b9õŸ?G9ûÏÿÛ”LÉÿšë;þúÑ17\Ã�ƒ +H›#Ï×ϵ¬6>ü®òP 7Ê4�SäMÆ2�NÝ]ýgØé¢c ðX1ŽoxÕ�¼’~f óøÑl1¢Ì +>®ò -hÄs¨ôȲcsÈź øõ �_U±(ˆK4¦þ8ƒw¨ÄNKÁKD†z8{6Jç%ÃZÉ]˜§|%@7Ðß?0)öúü%¬Ì6xðP¥W ÙõußÔG™" +¦¸ÔÁÜ i1ÙùiÀÁ[PÆõ§o:—Jíg "AÕäg iNQü)ªþ TL2fËûq5n`J»ÉøHÆà9öÀè|ôa›Êç0bÞ�·”M_•wdïÓê‡pL%fϤ¢ÇD¹éI<ãp+häú¶o€ó6¨c‹â4ô—“$/Ìð’T¬Ïtƒ�ðu¿öµgj÷ƒpìQH&%˜‹'¨Xæ c(Uì1{äX˜’ñê�^üèGªÐ.d––Ü)Zú»ùS¼¤�³°r1%NÏTÅ�¾ða ª8iGëåVN.\ª€Ùˆ»ôyˆUªM.gR`�¦¹ð‘´€_ôÉGƒ}—ÓGÏž IÈâOêNvJ럳Ä$­´ßs™>‘[Oí“ì£8X¯™§Ë7Þ¯ì4H+R](tœ�Ïz€(Âú@žâ‰æ 4‚tž`yÄl àËgwéè**W¦£–óeA3‹e¯&¨ýb¿Äw�qajÀV%[&¹Z‚òÝÊ€KùåÄÜåŽ a†£EHÂ}!¾x¨ØöÿÉ8”ÌHÐä +oh„·8§ˆÌÕÿž\p9†ê‰„Ñérï´½�ïî–B´/¢ï®­h’kïÈ[’‚ÿ”ѵÆK·¤íñVNU�m�%h_­å–!€ún¸{l[ðS¿Ã$@÷?›Šéµø§5¾Pè³›jC ªÂ¯ØàŽå˜XáÜd/\Åýíð±Ë uG—ˆ”AÑ;Ø‹mQ¤Ö�¼ k÷]š`h5ž¾¨šúzO-ñžÇYà{äèä‚2üÄgµ‚ƒ´JµB˜Øn +¾ û`kÓˆ'21Üéãõ|þÉQrµÄ¨} +^§¯ä¯ÒÆE\ÿ�X;àmO +V½ Ô84²_ýCˆDKmá6xBU|àp] 5ä${Óé;¨Á-om`|6‹ „{�¾‘­þÐÔHÁ(H÷-\+㣵À†™$3º „M©„¢›Û<Ï"�‡½uí+±2€Hž9 |€™wd·)m_g³Ÿ†uN_@‡¡d^ˆäÜ£!ÈG!XW™©2›O>OH›P)vãÊ^Ø/±hGûgfœÂþ>±ŠG·—P5Ù©Ì©ª@йÀÁ5Ä¥¯hœÿ�43˼xýØ'Q–]B_ø-ÀqS#�8}G¥ß~›ýØr1>�XCØ¡k;Jt£I¦8}sÐŽt²œ°u޽\›RèK5‰}�Äd¿é³Èû°ÇSѦüºÅ£éD²ƒãÐå^P‹¯ÜÈZˆÖìF =ÂÐË,ö]1ÎMß­¬Ãq˜lL¥ Ä?`ù=ܵªK e øcCI#†n€ÍxoÕç|0ÏÝ?1™Í^�U w+%PnÍ<2 +G÷½Ú‹!"y`�°ÛÔ^6}oüP�CeTf È`lgúŠcyn wÉðA °ÐÉ-2XÙ’â­}<€ýˆtì˜Ï…IxéÛ·eLÆ�ç•–Cš¾7‚¬"X;8Eö—`�C>~Ù²¶‘è0°wrhED6?ÌàEnL¿ ¼5ÐÚ1·BÓ—òÎÓ«U.ñšv,ÕrÐ)ÊÝû�/(øÃ3’/n›‡bnãK´aSirfÉ\¨‹ì¸(lM%ÅDç�éC‰­–² €ƒáNÒ HÂ}[ñ"ÓaŸ;ðgú|eßÑ¡é«1 ºQÚ¥týI òÖy’}ކDšŸ£�†4ÀŒ »Ñàdz×÷ÝÈëÏ?M ;¾ékó÷ÏãF wÞ†¯Vg ¸2LL�@¬Á8Ô¯ZA:Ó*`¸À7Ñ�VW NÂPDèŠQ3}EgY±î/»öžc¹ïT9È}Fõzæfl¦OcM£Ÿ¼ _å¢hsüÀÅ‚\8H„iXd·óø™^ˆ~Ø,¸ãþ·×§HîP#ý¯L$ä À‰Õ“ÖF¢5ZúÔ!ŠeU„Daã„bñ¶ ZR?›æP|¿BÂÙ‹º4z&#dG_+n†%IÆ-„êTd’�.nKt™¾|CÔ´ƒ¸²}³O.&DZN. †ó ENZó#·ø^¶»f +‘U‹è›L)œcú. ¶*‘øhíÈ+) ¼W0Ò2öaÌ€`x¸‹ù&,i¶Ô“ô»Õo ð²¹K·$RòµŽE`_Ö^âDñVîPj3 +öœwÀ4' +©‹,j€Æj’ñ!‚õŒ0}ä¿îÐu\¼X"e2çg@ÄõJ`: Ã|‘ߨ¾ºÔŸ$¬”f¼y‘ùëݤ¥³ðaâ?±™ Ó7‘”›¹Ô –$@©Î­‚Ôn¸…d0D?+Ö âëNdY‚âw­9 ï× gÈ0ªgN’Bvæd Q¶z3íü­F)5YO|6åÉ^K4P_ž ¨g”xÄ Ä%�+6V/!Ý,¨·ü„؉B|™Nw ®2iÚíï¤*¢âD¬§7PãÌ-Q¾UI3U³£�A/¼‰H™L†U¯ìUHþB¤�¯g^^#Ãu_^bú2­í¿¢ýÅܱ§nˆenýfl…Ô¥*ÎÜ‚í’õ"ÿ|ޤçý’ðbÅy¶Ë åbútX0}™•EgÑK€±Ù£KCjÍGKú>>5â£=-±ÉÄéÕþÂP¼Ú}¿ .¦ÏiYº2¥qC‚Ð}¹€4VÈ3 Ò‹YžÅ†xó\�Ÿô¹�ãO÷ül½”áj�\"9¬ÞFékPøŸ°a`èã0nÄ÷€@râ>d4=‘±¤ã¤û[÷Ô¯×�lH±x+*Üs½ë(PEË]@9‚„`å£AqH€·pû¡õ`% ׂì´�…†•mõ§0}iŒ,røäŸÁrÑÕ@¥™óXôÓWn¡>Ìhñ'{`C†þqbd)ñ¿˜ s èW›ÊþÖý™ï<¶ÿ¸{-φX-L_ukÉDí�‰XȻД)ÁÏ +ë»uÿA0>.–]ÿ²qâ ¸˜½€vX¼¯‡ˆQX)ä>º +¦/1 ±g¤² e!Ŧ:ÓH �CAwÃjO©æk<ÆÎj»B …?‚€°?™Ð�y'ê•�²{–PFC w¯ÚÐf ŒS�?ú†Ú L6È·gCù#Dq6�þ �ܧüÞB†vðΘ>2”Ü!ÔO9CùØB ”¦Qþ*ëdwth†”ÖÔEP‘¡ƒ ”Î�2T–ÿt5bHoW’¥ÄT-úÒî—�XBŸC�80>sò1þ®hÝY˜ÀPجyDA¼>xµ}P/¯@�0˜—¾jƲa$N/}§B mÒI7¤ñ‡•tôôŠäD5}ïÉp1¬Á}uùf2†¢oМËQ.²ê·Ùwv ¡²É3¾…!„k](PƒJßÍ¢V/ÄoÅ¥O /Tõ‚Ïþ&9!Â<ÚÙb¥�l ØÕ»�ÛZl„ÿR„׿Â�×ÿWµ fꥺôye�*i¸�±Žðz.ª#:Ðêä‚'ioFÈ”™ 1Sb-jö}7ªdæŠF´AŒ* +èàû Uʬö?ì#Lƒ +Òóç3M¾¿öIøÂô| ŽêAVXŸÐ!„VÈx< …Õˆ7)Y¢x[ú<ºiЀ+6€5È%s™¹tÇoKígÜB. ¶MJ|S}…*G$ÔíeÞi¢Ìâ8¬¥Œ»QC¢-ò:º6ú¡Æ®è®áQIšõ3;í˜ÖFÍqb|á«0 œú¤néóBìM€{Nz¿³|ìÙÈ j鋞u®Ïv°…/>ÔÓ,4ÇËQÆÿ†%*ȸ»UìŠ7¢O·@V•l¦Ï䄳xèmä٠ k'ýëÔ¦2¢¥¯k0HùãVâ§íÚ~Ž +ô�ˆáPKß¼Àû +2öMKŸW�À;®ðBW8¸î#DŠ!·=�eX·Ø†HÊ�±WÜÕXþ­¾•L¶ÒÉð5ڟ〼Ù´5uècÇýœj@î¯í‰�,%·bzÖ¡+ö®Ó&Ò»"f€7w�'a‡n" t‰t²ÙÍ~j+ "ƒ%KŸ*ý…öâ_•s±ô9OˆS¢H÷Ÿ§ªYðïü¬t<ÔFd¿úDoLV>CâyKÓÁá*9TÈšÌ+ÚéÕ wÈ¿‹°üÕ÷ÆÇßÐbãÞ¤Çs ‹æ6—~ίXóŽÖZS$‡{ê]¾ +Ðú –Ô�¤h²"Tv™vƒ"Õ“¶¸`™ÑÝDKŸÍÜL""^ÄYE7Dé¢ÞÎu;ïëfçqdp\Áq¹Aw¡r³ÊÊn…Qù]­„dÐw,§UÞ}©®h…O}^~³\,è7,KI%H–­ }íŠc½>¡oskV ê°xùƒ>­¬ÌWC)ôÁì~±�¯·{µ9‘ðé¦Pñ:%7þB9Ë][-QÌP²0 "¬N˜{2‡�sÁ#6IuDhùøÀks=ŽZÑï÷’uØå¬SŒ=Ë·ˆ8üF¿ûCB+Áh »24€,çaHÚjBw<†C%Z Ž‘Åõabµikþ:VÚ8Ùõ:�ËþÚ=/þM „Õg#ë¾ w ¼–oG´ð†(Yð×iÿ‘ñ o».ì$iãuAÎI´áæçý¢åv€Ž¬1»}‹A…AÒÅõÕ’?P…>^à8­Ä_oé†Í©B›èk~é«=?b¨aþ6Sp�À\¡¾qî&ºãûyR}ŒŽ=_³-KwQ¾ôæƒÞE(~šÒ$ØŸã= Ï¨jk�‡†féã[ƒ€äHUb°2ÙÝù "X?ŸnÓ¥” BùˆWô‹(ÒÜ)>�@ṅ‚i ‰‹�nà endstream endobj 28 0 obj <>stream +ÏÙ­tϽ�ßaÍvÉßpòií,õ„%ºbëÔïí´òÚn2Áÿ×jx!‚”µ=/ŸeE“¨Ÿ´š3ë DáÒó±0­'÷u CiÛEìR@ÞÅøò¾èCðBADÜå š#Õb×ß“AÝ&%öýƒWVöÕ·¨ú¤ø¡ü„‚Wãm]"Ý]¯NѶø Ï–ÓÕžhNñ]Ã;çÃä¾óÄ�ç|§ â_E[žóQ"éjû¨ê9i⺎)Vû1³cŸóû.ìÅñ ?çófµ:ÅŸó­–K‚â…ª+G¹ky5P’®Ðù– +!ô¿Ö ÐÃ:êÈ +¯žû¬AôTÕ…9Q+:ŸW®2@th£TÍì8ÉöXƒŒ6c7:BûOGs"ŽÎç¤#¬làŽÿÅ­ÖKd.ˆ�ÎW]ìvæ7Žkú 4 œÇÅ6ðdX—Øè϶Î\YCîà–Áùø-×9ß yζ<ûí÷“ˆ <+sd`@�/Öbg9à¹Jg¹pu>Ç)g©£µjCùpÈçÞ0H^Ý,µ/0Ú°ÉÆf‘žŒi°Yh–7ª³0³Æ0² 2K«£Pk8í|1ËbÐZJ›V×;½6/˽á²B�nÓ²à¢;Ÿm†eÍâ�o:¶²¼Ò;ß1*+´Þù‚¤,ßl] PÖÜu{'Ì�çsçœ,ú&K1×8$•,µT{x>à ÉR‡Ý5Úkyʼ‘åú#¸êñ| �fDvò|'‹&R‹nTmýt# ST:ÖZRžoŽ�e‚�ÿb±&hžO]U±nÄy>·Å"k ûy¾ØÄâz¾R$±.Zoèù”B"i”Übõ~ŽrÑó½aV8¡M–äƒìš�wk +kô¢%¬¶ž‰A@�5ヰ¢þñqÆ 9Xz½çÓ@ ÖÓOË3ý,¤`µ >_¥ˆ`݆º›�…#ìÛXb!t—ÏwذèrÕ€Å>´�4ê‘ñ¯Lp ±ðZþª›¾ +ƒ*Y>¢~E2óÖÜl~ø;¨Êîó•’öÕ!ÏÏ|é+ÎæÚ_U+_¹@?ßÕÁWPPý|*E÷êôà†Ø«Öï�êe;‰CÕ�èÕovjÏ`HóJØ‹å>HµC^uÛÝG¼ò�Rnmoþ|^%Ë?_œÇ»ò’6ö¾÷]ä®j ¯äÒ®îœÎ…]áO@Ÿµ¨u5­ÂúÞ,�‡.uœcÑ*\KW�„~l@ÉjJ¹fúDO;]ma oPî\y )èÃf/æŠzT®´IÐçäC®øRÐ7GWÆ�e@?qÕ#¹ÔãCû‹¾8ù(�+ü¶Yha«¶~®VM/èû¡ÓVÑP04ŽžA_Á%[]‡ºl…PZy¼­Ã×¼p­fJ«ånÐÇ_Y+¿[2X°CZÑyÔÁ]P­p î�Zá$øI>Åøú˜Ó¶äøÕÞO¹e%fCïf†e%¨_²’f3Y!X’Fô y1fe-Yq�kaYYÿFYÕa«¨:?&žªT­h¨Ðç�KVú)Ø"Ìg7UH <¾­lïb6?N¥gÇh•‚†Ÿ må[ }J&ʦ F¶eCÃ'Ǥۯ­ÈËý(5ÓUÓÐ÷�$W¢¢”æU“¢èîà*<¢ôúÝ*Ôpî }c'[e}¯I­Š½ØAnÅ h#».šUR¼;ƒš7ÝȪ|l]8¸}ŸU¬Š}A°Ê×õ³yUã†6®JÞi‚*ËŒès*V¥æ6•U…¨}ï�TU5#�Àí~J’]ªzxaTõr‡zÝ£0Ní)ú¦s™*«IHÆŒƒŸ¢¥ê{Ïû�*÷Rë銾cɨŠqÀyšP˶³Qåww2¡Êwo}Áù.â€*Òà ì/Ÿ;<ß‘ã©bþnl¼0—`.ùö¿°T@O·S©°£Ï°ˆR ˆ¸…œIƒ�I5ÇÑ%{`ÿés æ¢ôâÆQ�7¿ù\£xŸ"yé@]”Ž}^$ŒŠàus¸E}}΢ºáF_tEÅۻѷ%JT–jQýF_ð¢b¨!2GŸéPÆÈB²†J¶AGßJðÞïDR;únøG¨Âíçûè+€ÕñHE¤Û T–1)?é©Ò÷�ÉSå<‚„@ú¬žÒÜîðþÆWwJV!}ÑYì”›E&†%€"Ò‡!Q§èa� �âIÔ½ºc¶H_GfNÿ)’S^šz¤¯.$¥›‡9Õ2]¶Á¦°ÈûÌv‰5ëKúž,jª·"‡Rt‹”¦¸.XYm¶SÐo“¾‡ šÊ)ǧr¦ü`+sNú"ÌTMœàNú|7eJaŸjý'}E™º +>c +Å©Û b +�n£hÂTÞyÀ”¿ã�/õõ'}‘— +oQúTúŒ]J/ï—*÷ ½Jß4‰ú˜îŠ9\ü£~„J­<7¤+}ã)e\4p½Òw{I©°²ú›ø±(Qªýî~ ”—› +vâ͓¢iœc�’³}•(Í’2ó.J +VU„Æ¥ ’¤Èw”·Q3CRpíÒg›#5³ÏW¾±`Fêeà¥ÏéRTËóÞ™7wa”RøD‘xéã—‚Ô=lÇx6@ʲ2-™ö•Þÿ¤þæ½Ú 0fñQòp§êQúÓ­àQ0¾KLßWfG3)˘>ÛDG©½¹Ú˜¾C”E%êÂQDȬÓG?|‡Puu"¢LŸ-«F©“}C™>Â�ºßüüº‡™Q0Ó§ Ù.¥53}úA1êƒxHÖ{€Q“ΜMOãE9SÒ=M_íå¢Ôå�‰iú@›åL5}6¥âÐŽÝÆ‹%Æ�ÙôF*JŸÚôakTŠ¢ Š2ÚƒžÚô…åÒ�Ž&©§®D™[G䊶ÊòÁðµ DÙ WxÓw¸DEW9@8œA‚úPð]¨„Ó§ƒã¡h…2òYn›¥Ã:ÊéËp¨ë÷@A§Ïï`CÑÔV ƒ&½/»HQ2jÊôy3îum^R·VÃÞÔ*ÇÀj~GÊ!jUy’é-¯M(hÒ + vª é´e㥥GׂqÂJ Í¥M Ba+ 8Omä+ ³�“"÷'NšNÆ¡Úî€É‚ò‰U�÷ÙØÓpDAù|U æDL –R¢8„õË&øêW+°CÆ›-%@™{,Pì\k&>}…ͺø'l*÷Üo6ÒŸÀ@�  .ј—¤þŒD!@1H_„΀TÐw~r¿¸Í}úº¼&; Tˆ(�lû“Ȉº ¾„îéÜà6í©£½C³ÄŽêãuØÓÝ õ�ÖW õ1¦©'9õ¹ú¤'š#Á5¦œêƒH¡'?Ñ¿½ÍyŸÂó.åC•ûûAC<5Œ”DzHC–¥¨/2'ËߨN¼8cx�úZ ít¾böx;Hv‚•Ev‚ÍPKæ¨OO£ˆd‰øO²¸÷Ü Æô÷$�;mCÙ:sój] ¾Âs,«R�Üåiøg¦hÖZ¥’`½V¤0T>Sœ�ÃI}y +�ð‘A©ï¸HZê™:š4 :"{�<$*Q�ã´"us‡£¶�6óxsú�Ȥ+õùIî¾6©ÿ<¹R9K}РcͨXÑ �ÉR_wÜXbÞ=@†¼»�ohCJ[êRùƒ@À¥¾ü+?u©OTì…gÁœÖÃ…×æûOq±Jä…B&ƒ-Y|§ �ð3õ#aŽÉ°üä¼£NÉ̲™>·"ºG.[^ÏØ¦>½wËÀg ½÷$.½â½¯²=ÅÁÁK;*õ+þJÙCŠÀèÎÇ—–UÅÛmƒ£ƒ ó+¿NØ+dQ9hbo£SŸäÉ� }Du”CÀ/¼ÀwšÝæáÈÞœ€wòÆ™ä6½J´ÚL‹‘£ôÔgpSõå(ÔÂi¶â¦8ü|ês`´©�t¨Ò6BÇ/ˆÉôf�Tß¿s¡�V[Ô˜ñË;à/&´qH¾2⃱qBÈ.ÌúÙŠ"´”ÑE¦Æœ „…‡ê‹)¹¦¸^ÈåÎ×^„{„mô+Q¼¦¢Pº Ðvp�êsÞ:Àx§î„Ѓ#Õ×™\nÇVü’ç@ô,"?Ã�‚²Ú©Û—T]ú¥éñ¯äW2»@Á£È|7,]&è‘b¡µÚ<Æå¦Ë“ÓþÍYy=šê[ø°û ” ö–M,p1 ÔTßDtÓx4Šû&ÕÂ]Ž\P4ÎûÑ ÷&5âý©>ßVÅÎO¿V‘>tøß†ÏndÛ=w*ø¼.3¾4É Uá&ëúu|_ŸF?£H^y‰BšÒñ�Ðþ„¯}7,(‚´Ó¿qØôQX�KÃéß/ká±þ[T}##~֧쌇Ϳ¢RìÄ–]ûé0ä 0ÚN¾Ñ¯Sõµ¨Oçi`úAápöUõN;´‘kVõQ|'u´Ï &­6ïÈ�5®,#x6ÎŒN†®_ ’6^XCcá+ˆ»6¿|E˜1캨V”ÁUŸ­l í$“? Û&{¥~G¯úÎâJ³»ò�nì[˜_õQÃN¨LB¸EÆæ‹o\G6oJð À‚ð�åg0o:–”R%Á21掄õµ¹·§JSDÐ>ÌŸ&ëùO��¶ÌÜ(ÂDßÝò¦ù^—;¦T¢LæC€˜S^r +ð*œ/«¯ìš e-¥•‚¯¸D´ÝŽmÈà¶ðv‰hoFã=5í^}ÐAïDZíÀUBV°´ç5†[K×y@þä h„ß]�§XÄ+ÎG;wjKÁ!•­Fy{{þ�aè þš‰›� !Љ +&{°øF1ã£F<£é7¯õ­Û‡H. fèü±úå (³ÁæüWp–M�uÊ©Ã/Ù£>WŸ�i va¯÷ÄK…¢¢É‰ ¢zÄP1"]÷~]•ivtœÐý„@›�J‘ÄG—Ù™ßtõùp�mù/°ºúÚÊס”.hÀÒ¥QߪTT‘S”W‡ç�ÈpPElδ‰ÿSËÖ8¯ßNMq“èSˆI'cñ± ³¼ Îq*yICÙCj G­p²â"•œ ÖöŽ_–a¸mÜÍÇw +™;Œ�œÒW£ ¥!øÕwÝU×�Cç"ÇIêßÏ®Ê +'ÝDŽcÏôKÿ€õÙ­hýÃPå°:YÊ/qΓÑ;‘ÙoN’êG¦yGh¿!a}=©jGÞ„õ™”8üÏÖ7ªîf?€Á1T‡Ñ¸Ö×¶@í<ûÜRÓ]d±˜&~/rd@�²ô6}W•ÙéŒ�Æâü¥1è�@˜±>H^÷Äú`z•Qf¾¼jXDëCåWžEOL’|$coâ�Gçb¯èa»­²o¹­©Ÿý�±d}qsºZwµkЇ¬�t‹¬o{[˜€zd}ùW3/ÐÎH²¾èL¿‡Þ6yD!ç,”'ëólü~;×qnè~µMWêõÆ%OÎu¥€=ø B¢%V2Æ;ÜÚA¾e)Q\Ðý®Ëú†¦\ŸÅaÖWž–Öog„�d–þwô8–¾e³ò�aÖw�,áǬ»¯òÆ6µ1KPÓ€’ô5›’jIÅ'WïœI³¾%ÑjÖgX +®YŸfÉO½K ³¬˜šM€°pXﺊ¼Y4`éÎúî<á³ûÙY_bO§ª"¡$ZB1õõºÖ;f¶­o X·ÞYüJýɇ\‰*¸‚¹zw žŒë”•6Äö¡^h}¾v\¿�TNØß×=Ð¥­/«“ÑúX¸JÌ„X¿W)[˜µR%ü«uDŒ‹×KhüPÒŽ+•ñªÎ’+BÄ#.´”¼ZŸ›u W`�ÊÐ7À$¹ú"3U­éÅ¥>ᇹݵ¾ÄÁ„bïnšªÈÁÅ,¿hiløÑù’áà:¶>*F{w–=éùXhŽøîì-õ€u~¯«ò*k=`OàÜ•~ˆ”¶>$Ù8çó㦭ï¸h5Q+ªÕå¥Â¸d¹�Žg#û8' ‰:2n˜†Ûu`4^r-‹Ô¶¾Õuã5N—éª(háZMâè‚%Ðæ”v#ŠácÿäUr\š|Y˜¦ÍÁ+¯áÖ×õ“V±³ +¥¶�`ñêIÊ­oS…nœÒ­O'>~½÷‚Ðu‰x•·>U)Ògê`œ¨# ³Eý®ƒhA�ÞAõ„ƒ˜k|$ëuTml¤¥‚5ßú´hÀà+0doÂyØÄÚÇb@:XŸN-U /L ³¸Í^ëk¯2 Ù\#r€Ì€Š²IÀ:¸êÍd„…º½±æƒeØì=-ÚCâÂ�1¨„‡IÒ  ¯â°ÔôÇØ+/f |$¯Ä�ìš\ò½3o¡\_ßt�âQåúÔóÝ”ÄtËõ…™Ïß{·Û»Œ¸•±jÞ úËC(ð@×ÛIé,õ*ûû•œ¢ŽšBC�•lp_c'{ÎtJô¿‘›�}´ëë ëÓîd›2¾£5g´‘9êQ×w ü�Œ¥mZ5—çͺÐow®�kŽ]-q=rýì-„Óº>éf¦*|'%�-�ÿ7Ž +}ÕŽ4Ãö^¾ŽÀR|n×õ�GÎÞ›…Å�ÈX_ù„Õð=Ê9¡_Â1†ê]’'n�ÊYt¾wÉ¿õøÅw8¼Y¯Jo€0ÐüËPª¥q2§«ü÷È]ß´Õ@•>Îȵø½àu׆Áê ïÔ'›#&°©5õ0vðÉ”ö~4ªpqVUz0Ò^ ’¢80ž0^ ´P6½°¨ÓWYg˜3˜” ÝIOUÇÚΉx·“$ŒÂl]Qkk-ÛÜ‘�×¼6p`6‰5_2¯¯‰aOÜh6x¨ö�ôõá•+2¡fž`þ8p³�ÿÂc ^ß4Â@¬^ߩDcX|Àˆyðׯ‰HŒ +l>Ö ¬‹Dï볊i ¿¾S.72s¨9ùraš8^Ž_e•׫ñ+¶@Ã÷×—6PÛ äò¯& +Wj’l¿÷#,‰M¶7!H^z/w*w$DqëÑ×"0•ÞÞúÁ�³ÉZ€}b„j×A a«òp“�õàâ2ñ J +ô$À>B/7Ö«�­ä >3²šd¥%'~Ïb®vmö‘?fw�Š�H©¤vwN´"ÊþÊ +ì ¥ÓÏõO ˆªæi!Òÿ@1Pìë4sá1¥&:0MÂ:ï³Øyö§ÎÿÆ%Ãæ9¹?²•¾Üf®|ç¥cô/ è[°o‡ÅRü›À#|b6Ÿ~·˜‚í�©î„Aý>Âë‚%E +d¤�ëOSNöÝví㘧Ë1Aê52È ö”ÞLë·ž +û®À›¼³'/Š Ê_µ&†ß¨˜|aŸà| ?¾Ì�øÚólãÃ-m }»X…ö¥ñé3ù)ÅãéÞĸ‡Œ!ÊmØx Ú°ãÖ:}ãÔĵ• ”ýÒŽWAÄÓ¬¶åÂæ£:Ý:¦À²(é^Ü`‰–?ûÉ<@”ƒÃÑØ{É»N[jϦM +8ñåWÈÄn—úcMúÞ…�…ëâÚw)ÚÁxªmÍ3DÃÆf0óÍž€ +)w:Iy]'Šóa2³®ðv'ÖmG§$ýõç=‚Oi”—­†¢ÚÅHìÛ¦D«ZVÍX^`c­5Ñf4ãMRƶ»cÜæ-t sý¦åäéÿ7O8± ²åvÍõÈö‡:“±ž!•ÓŒª±(ö‰¢Ê6‘BìÕÑ÷5¥PÀ€PÁå€Ois€-~8§ºŽæV/Œ™Éëk’í¼ûÆÉ1ºÐá+ö™6ň›Yì‹ +Ù€¬÷®âá6¼ËdÇÕó§CŸhOsTºØGý‰±u„ìgÁE$…ˆôBc2Á%§ ·õbß&/˜Fã‚ÈP�[”ƒñcziðƾBÑ8ûd#¬3,„±ï°m¿¢ãáœëhçóßcì+ñЛ=.û@aûî�¶fŒbUÂJ³`¯d·R¨*l©\jìóZ¨Ç€UÚð¡í­á6RâÀ|¤mìË0D%Ç^—KØ,ÁY¥ðÆ>àÐÎ|xëÏ8öÙÆ{ÊJò! �ˆ—RþîÕÿ`ÙÜsƒâ>jª�ˆ”ó¦%Œ !zøág$íØ·Ð<�ïØ'|6ré~K/+û�­hó�1?ŽA+pÝG¶" TßÞMì,ÿ<Ô,¦¾ŸÍ`hŒ£IÌ"Q ÄrÈ:ïÔàe¦#+Jn•èhÁl‹ó=¹%]ýØGClVõ»"—ýy0•ofðÝÇÞö-…u¾ +ûu!1ô�ÓfP cÈË€Gdùvב“ !û²-™ïrµÒ�JxqóÑìa^ +‰ì3Wÿ"k2UÕ$EnMŒ~Ï^ŒÒ-ÀH—WÛÖIÇAUÛð8�w7 uŠä£×.ØÉgÝȾ…¨0îÝáyê‚R»F:ÆQNpþC,†Á‹�éw¼-›tî‰ÝÙìü¼¸þºàI…’}‚©„ðùµÄ/3â#²p÷’¦õš�ã%ûÄt<Ç£öß¾õTf.‰ ‹‡x®da#¼º‚ɾ“]!{›RLö©1Ó½qÉd_ +šÚˆ0ü¯Ñäc¬Ý—õ;–7±Q‘”šìSzr±·nädº`Yæ çVç1ÁðßÅ:¯° +⇠}óÁS«³î¤‘™r·3p¡ý$X»Z§PxØŸ²Ï7+áƒ|6Õ,w†R¬¼a'¨¿ *O˜)ûN…)�:ê2ƒ‹y.9DÖÔäù~¿k[ +è+V$ñò…ÐÂÍ(­ìƒôº}üÉÓ•}O :öÏô¯M„;û]U¼#±¹ùYöÉÄYð»ÑK¿®K]5ÁÛ_÷1Ɇ¶ïȆZöÁ$ײ¯V—wÂÜ Æ. 6¯pš-ûÆO¼“-Q\ˆ*:�(¶ÛEr.Öäw I-¢·™é'Ó­úMÞý-ué„ [ÎmpY^^ö©`-fGþ •/û@ᾊÊ^ÿ—}žÑJôÚìÜߦlê‚a0Žÿ5aö †ð‡Su·ñb;)60nCÌ×eÌ>š=Áªl=±•c"âÜiwò»Î€¥t~ =¸À¾£ ´9³O×ÜÌ<™þš}fŠ¡Ã3Üš:(�﹎c˜%šceXc›fßIÚ¼ þb6¾Kg,¼�˜¾È#¥Ž™ìKŽ�ÙQ«Ùw ´ ïH²°×ì[0Ñ÷ìbŠù°Ùg[!ïUã®»èO_’àBÖ™ÜÉ6û@U׿6Ðø¤èÎgB>÷Åq€�›Î¾ t8‚[œ}ª$]â×AÑ« #¥Æ¨z×½ óDRs<­BèÉ]Á\£ž%S>3 Ýa²)3P‹.'á�ðN¸´Á՘̧JŸ5ÊŠ�¸À]^e®®Á×ÄKíïÃ~úTXö(�ßd|©³�^S“çĘCêáa–�õöÓ+îa•¿|öˆ‡OíìKz¤`Rá�dÅÀoÓ4'p�F±T0 ¥U¢ÿ¦œAQãZÆûk�3NµNo�¢Ö(–…P97ÈÞÂúëÞ€Î,¥ö;Õ­qHGÉÖLÖ‡¸¶ÑÍ®Ûáõú…ÿŽpލ¸¿°Žïÿ®–“âÚ©,— ¿«ÑéÙÊPu€ö‰ÃÚÀèÒÀ^à.оv†¿Ï0L0"÷çf£YÀ ÂöÉ>ÏJWZ ÀÈ97ì!„!e`Âgߺh45~œÑº€Zñ¬¾ÈÁZ%ðˆ£Àf™ë2<‰5¡åÓ�©u +·%»KžŒ¿‘ÞE>˜ÇñÒ›ž�yŽÈÀl¦�½Âë‹ö�U㟵>œteyåœøû;ºžÆ–Ü&Ë>D�©2Ûr!�_Á®|¡}ˆ(ANåÏq´�zrŒ`-õñéhŸ�àpÉšv´Óý9?¶GûšD§`ÿ?¢Ðq(�ÙEüÕ¨~Ç¿^>+>Ÿ³ÒöíksùœGa&ówqö}­ð¿úÃ܂݆$´¡ˆ ŠdôA¦]æïÏ–sA4ú5ƒN3˜gó⮿jñy¿Û€�Õ*ÆwcÃÙÞ+,õC¨ +¸tòƒÁ è”Î÷qßýÝÒ¾rà‡�Rô·¸´ïI"UH7�g�.íc…Ò”«wLû*×`?Ÿ4íƒý¡{?øÕèk" +ÁÞR+ø.±°ü}îC¼޶æ>¾i_3ê®1‚"àÕ U؆�Ö„¿i�ßâ[à½i+gxœ +æ“�rÚ—É7ï.'ô†œ‡Z‘3[§}]ýmX¿Ó¾Áþ.&´×¸ê›}c‰V¿‰‘ÒO |aԿݶˆ-ŸÌðóò+‰sCíû³Ôù LªYa^ݯ¤æµLvnÀ£n¦_“%&¿tÍX?©µjGFçÞö,RPv=PHûUÜïÝ÷ªÔ>µñf¡âvn[fzjoŽí�» +„€Ç: ¬é‰Ã8¦ßoJ¼HíK(ü^0ÍÑÖ¦|9 »ÇŸqÆAöƒN¹] ë��mÁèÓ“�+VÑöP&¢ÄÅH–QûNÅœà=Áì3ÁÀ7_û> üØ]öj†¯îJ£Ý¦z„Fùq[Ý2bzMÍ�d±¦úd˜î|$�tKqÔ>…þHût>²„°5/šã;®ZR¦Ÿ~’Õ Rqå-ItWK($ÁpºÄH¾â±­W» i7ßÍ©–ï¨EºaïB”2€ê¨€)(Ñ@hrd€´À(†Š! P¤0€  @‡™Z@P÷­l�–»§GTÇA ü‘UU7©ŽOÊòæÉqþØSöÈïÙ}³ª¤'Ž,õ'»À×â!ÅÄ'ˆcf?]dÊÕãD´ ¢*ãŸp‰ ´úr�ƒ÷#oÀá{þ#€ â´âC|°¿AÉ µß¥ùØm? Rãb0= í‰‘aM³Dà£$‡¿yçÁЭP?¨Õ Û¼õ +�M—’6¹ MvPéðov>*Úú�¶CêÂÙžŠÅË6L8¥ÍªéÖ:\ب��^Û xÃ’Š.\Ïmý½¨ +‡¶¼´À{Z8(,Crìû…ôßtù}Üï�|²w¶|×4»‹&ÏïJ]R ßônÞ@GH‚ ƒÃAnîä[VZqaÕò3s¯äÒXã�•Kª +¢`þ-ÈÝàðƶ{u /žÈ�»3 °RÁXýÞ’ÔÄ"‹¨E³ž3�7¨!ã!…9d˜1f’1‚b($J1 1 €2 �Yk�ŽVÂ|*90Ø¥ÎrI[)ð�$×’{ós€Flëúüq0âAŽå ©Y÷¹áß÷ì%ο,ÌŠ­±-뎡w=�3‘¶¶ÕbPAìÛç0· +0 „¶B7‹zà…fáâñ¥.�b£ÕGl>«Ï[nŽë3–¶]²\æ~&¡æfõU˜}ȑŋÑ�s\>CAÞ÷BéßêWô†‹@�ìRÉ®Æ|ã|ƒõ´†J“‘ /$�Eø§�ãæv?œ(«5xõqŠŠú>¶„w.º[(½÷@ÇnX}Ð4t°SãwÑê3~ðñW¤Ü­ ý@â‡||Íé]–ÑöJZòäô˰úâÈi °úPÄÌ\à8¿Ë«œ�ÎyXÅô +yŽ•!ô¬Ÿ)GGéo#/Lú¹û`õyÛ�;Õ‡<Ì|m>”-X}Øcøç[&q6oAµÕ†åbÎe%%º’ –¼Î³óÑÑ¢VGBÇkàÜmëÒ¢xޤ#¼½�N°ðt!Η$ +I&“¼¬žkoÖÛ_õ¡ÑðN[7W÷ÊÿÕGòKèxtnµ�r…ñöo ù?ǼL–øuúœÌñ⟠µ\ø`&&"¡R�ö­¸}Æ?RòN æÐ ÷ñEX}è�ný$¬÷¦&ãUq`½ÁÄ4Á•caõQ9ÌÂ'Þö6Κ“š`nûa<–7ÛU8ðÿ‰ïñŸ=VqÏù�çÛ>‡²‘ËÞþ¬Ê4¿H0ã±s3R4UY3£Ç껉˜&’qv5Ŭæ×iéø9ÜO69³k³fl«/4ûB+q dÂX3b«ï;€é¸û™û›+l…Ö7Nb•²RVŸŸç潆ƪ½ôÇ^çÊê[•‹× ²«8•ÕGÿ›ÜñvmUZ`~äg9ݺ>®¬>f>õ‰««já§{Öh˜R§è_¾r ³úÐ$¶à¬¾aÞAºcJ'2,_“èœïì ÜTŠSè �!ë]Të¿’çNNÙKì ¡”“½fw›@›N%Ñm‡Žˆ�(ÃòXtªäË:ËÆôéíAbHd(¤OZ»µ¿ú¦Ë߈X#�^‚�aP+EJ9 ÓT Fí�´·ÒSÚIx*,PpaœPÇš«¡>VZ8GS^KHtF‚*�Ä� +xâ´ ‘†ƒ +–»á JšÁöpŠ't%Pp—¶ q¹�­Ed"AO¿_[¿L¢HæÈhg™pþ‰™HÿœÝ`@âÉQ´Ô)»¿ +týÿõüù˜§I‰ºþ·ÿÀé‘_–¿klÎî*Ì Œ„j¬,ÌE]MD2deVU¢–JdõuQ­V°$ XTp±Š*¦>2î2 �…y|diA,é +BE¬ç!}@ÒlˆP*‘8F­Vû.„ÙäT±6žµ5ÿ²"šU¬ºê›·�’޻ꢽºÝ,¡ê¥¾DÊÊʶpÚ“ªCð¬"Ô b"Î`FHÃN: QÐQW )ÄñÄ”Pä�Å?"ÓUˆÄ9‰�NŠ™E—ÃD·OW6£„¨é„”r*;!… �@šwôMwòôÅßUØqÖôW ´ MÔÖaW( wŽà®ý«õ¾¯ã ÌÊ»Ïî' +±Y�ÝÅõjwá®×ko{Û¶�Ê…kÛ¶½qÍÂÚk'Â]¸'@ wwW- J )•Ú–ÊÖjµ8«Ñj53ÛÌ̬l3³±8; mÏÌÌJ‚fÆ­ß{ïß>l0”"¨ â¼y¦Ym¼¢÷hôܱ)–»L ¨n"Yh¡n«Š$¨XG) +?�¨ôXk‘„0ÁP(�He“p«€m&"N\,JJB›I'zšt@€€ZV�™¯z¤w‚%"¢zì‡1mqšzj5w‹yÜPTÏÂÅŠ…|‹"õ–;JžG=¨Îæ÷ÙîS=vŒmUUO°‰:½%Fõ´. ’OC$U½Ó¾´ãÇî_ßá†O¿ó£žŒ€FC_Üè�Gyþµ¤™øëN^Áù¥—h¥bkË�‰Ý�ô6K²ä|2ÅL×–,&Ù�Žªê‡äŒlogvoãK©-Y º"agV½“Rµ+cK”»Kk™î­lG s!“¶€½¯Uþ؇œñý %ö*÷™|—Ð#š˜ó +‘;M°ÁnÐìÖ ?°°ÄÌ|# É � .!ÁmVÞ›HöÚ;Á㿇çN瑎åÕŒÆé¿è`.ä›MY�~2C1^ð!©Ç�IõÐg åäxŠà#éP¸‡€üœîØBè¦ö&sÇ�€988²…"0›ìÄ‘ŠpA’JõË~ô‚Œâ[ù¼pû¦ oe¶Öäʱåøêêu½¹‚oIø™­+q �íxI +¥jtÎîâk¼6–™ß<‰N‚‹ÓOkË,< ¬@Pßf–Næ×¯‹E¸ÔY«›4½, ïj úiSöVíÔÿ$_B³“ˆ¸‚ûàœ²ÓHQ`'FFÀuû§ç~éÇ_÷;|½Á©:^šfçé1 $ˆë¤šÖ×±HF@“Í�˜*Ne�BâdeØ1Ö‰Z¼62tË’ô]iúiR <+b [`š—|:u]0ÇP§…?ƒ¥×w¢¥‰ŸN”ôïxª²��ÖT8X4¢,p²›¼Mn°|g±“¼\Ï„ë”éM“äÓI ’'·ãÄÕ ©|ÍÍKp‰¢øÍ:é–ä�‚:uŽ­[™~ÝÓé­Ãx:E7žà€(ÈRþY䔜ô^étÞ½ò2ëUŒ­87T÷"ñÆÁæªèêt“cjŒ¸%C lyßÿ!ƒOOL±Žæ#½öãÉ °Sµ‰§´îâˆyB£J­N¸¯Ã„•,}…Z¨ÂÌ?CÕÕšoÒ¡‚d¶SØ·£ÉP�¸ˆË�›'�~™ìžÒ!ç6Øt ~âµséwxò‰Í} <9�®)þÚä3QŸ Oƒ„ZÏW�¸äéÄŠ„*—~$7˜ÔÇϤ;yê@³ëI„Î}7–Ž/d'·Z[ú­…T©“ÜÒï*»Ç!=¾&�ç§”4L@µa#í#„Ù)Õx¦Dk'�á2œsw’+«¦Hܬå+F,’ôêNíÖÓüÉÔw§ÞbŒFËN×.Šc (ÆWîþ씸ܜ¬ôÓËN„í)p:ÇNήWG +;}v‚ƒ>×1ÁmÈ�»4IÇ-Ý9߃Ã&sâ1H¤•Çm§' ®8§�<0õÄÉr'·�½��ñXÐð ¾?â”7,-³SÉ(/1­Gì†wÓ›x¬í/ tæˆÝ©KÙ†ävÊ`f|)ý˜ºÓE@ã›z; Nïùe'k�åôNå†W™~Ü©b‡½Óó þ�p»±×ð4ï{Dx™‘œÌÈnù!Ö"ê7¹`;ŸÊ#F<.-!m¾MàJü]ÝçR²�Sû‹Z(<×òM‰’Z•úºwL:íVSÈ—œŽLøîb3^Ï>ËaµŒ3<ãpâ¢çæÓgoáýi¶�PŸiôî�þ¸Ar˜±Â߃~ðóyƒ0 ï HTu&ù.›žQ”-ϋɯ>�¾'OkÊ +oª~ +„.#Uøç24µbꀌð°7Øõap>~õ„ípP!Dø�:$YË „O+J�Âî'‹7Æ^‚Gôž¹G ­(å& +n99ž1¼"|`Þ <ïKO{A‡1UøðÛ©m¹nX‡™Œ­ð8«èR‡ +ßÜÂQ8ö—ŒÊÝr«)öÎ>šŸZSÿ2*¼Š�Êž)»ójnˆ.j!jøžg¾ê!‰2¾'c Ä…ù—ðIÒð'ûaG¿ƒ^‚ô6Ji^Q+&„%m. ß6ßqô �Ãb!;·ßÝÇáõÈSjeÇó[óÿB>°”ý/"Û=ý¨&ò X´Ü–#?c»³Pb´r;ðáEV£é=Í­þ[‡7„€Q4úQ;ü¡y5J�ª}øÚ ¨ôcî³eêtþî¥äÄaÑ z'ˆ¼ùgQtu/ï9y{iéW¼wø‘ÒÆj½‡„…pøAp�²¹ÓäN呬ëWu¦IõÞëdO¯mRè}Þ–(ÄÃo_ìŽÐëx²>Àiôë jS›ëZ +ƒ& +†Å€‹ÄäËôƒÖ|’¿Èmƒ€ü¡X°Mõã_DÒ‘Ï’p2ùlpwx¦òX.Þñ^õY¾œ°RÎÁ|%å£3|(p Çò…LyoN(ÿJëÝÀƒ@†Ù<,bç +:Ü…¯S¬æÆäŸ X6µ)‚òË{û4+Ì÷ëê•chÃ'öaÖ­!5«¢úÅxq·¤°Ótx�€ªœ¿Á»–;7õËüÝ È"BÝ <æÇ"Z–o$9åÃHVcf½E¿Èˆ* dSÃï‡;-ÖˆD/W3¶ýÛcz_óÉU£Æ%¢�b>û€@&-Î!C<7O°WûÅøÈªúP*'�OÑo¾,ì¾ äQ·ð�rûvÅ¡\µ4lÁ�¹‡v3õ+w«-6MEs »±–0 Pɲ|ÖÀ#Ƹ¢mÚZœÃû3}›¦¯iŒæZb«Êo~ÌšæÉKë —ì¤oRA�1ߨP®ã]@)·…ªp×µ «E?*œæUt¶¹ÎoêJFM²ÃAçr(Þ¨—!äï½ZËS7§!éÓýn œ .¶6ògÙÓy=å,ÕðoÇ�·0-ƒåÅ6å¹ìD�/¯c8¬–46”nü³’ƒ¿Dx?)`—9Ð@­b…þO‘Ï.xk¿C x’5¦Ä ×´ÈqKªå)N†œmÕp—Î�éç\Í,úgà!ë\K°•*Q½{yâ;¿LÙQƒv™‚¢‘«óEêý.:„Bzi0pŸ`%5I•áñ +`#ú‘šW×eèaÈ�‚&ÉA3܆Êɜ�$‹© u§‘‹¤Ü�ŽÁÅ@߯âÕQwâùÙ•Xš�2*g~ÏÐç:%áhMœ;)%þ졳£–”ô~Ÿ:ZÙ6PFŠº—*j7ŽMý|)pÔEUýN-À­Ù”dE*‡*T®xö�SÆWIetKôsµÇ›{›®$ï}þ{ÒaGåÙÈ9A§f¿`ÏÒûA⸈65ôF3äÍ7êuYu�”Ò�7Þ[g‘YŒ°ü/%60îx‘ówÔ"É |kŠ�ÓÜíl—£‚ze�(=Þòg¾¡Î[¶�‘0ãu!¸…®ÚEãO�ŸL@ƒ¦õOš8!È—¸è…Xb6Ê\øªd¿$Ø`®ßj1<ô3ØŠtØæ†úb�“Ô[Ï7Yȉ¬©ZkÈÐB—á+— ™I¸AŒ‡:Uþ#=úc +QhšÏId•Ô�5”)©ðB×ðׯö#ºªó tù +ާ­Ð•1àòÐõç»aýc€�‘¼ýäž°û1Üêë`u™šúf +˜*“Tc½ÞyÊG íàê‰i(ÐÇ+¼½ÿ–LS2‘¯ð‚Ðì�ó(À,©ÌÃe¦*-~­àG<#÷‰Õÿ2dOÃø>ZmÕ="¬þ£ëþ‚M—y°–Û© û%„ÁäU˜ŸTf¯(ôöʽùò4Û7rÛRÆ€É%�XM[¥È ð 0cs¯‘¼ÊÆo”Ê &j¡Úr a’A˜éŸ3A|t©µðä9ð�–¾Ëæ˜èÜH¢’^"|]ÏAm汬 ÚÊ lÌÿëÄÝó�ŸÑ%‚^ºáãIábAT) VPüq:643•Ùº ¡z@�eàæ–«\ñ¸•ôY-‚ƒìgÓ\Š·ç+…¸ µa|"ü—üñ[Í6ªÍAé°Ïâ“»IjŸx�ŸÿX¶Ûý.ذ…M1aÓsg¨e"cÛNÈËbS Á5DìëP|ô„W{ópÇ^Àù~¨â÷kx]¸j^Žô-ʽaò™,h±Û«ë`�ƒDˆš¦cì|›K¬½tÂ4x|wЙ¾{0“6ÍlÈ-°�B¿ó�ÿåìĺÀ5D¾UîŽð +ýh(@[GöI:qÊ<9||==ù$<$=!Z„г!›z? +߯‡«N4%,�´Ð�èöôÔŽS_®·¡ËNÓåüy@�XÅçç"ë ë[Eœ†Ryô‚F1�6ZFIx¸{%®ûR2¹[pFùBâXD>)O²îÅX'Wþ"騹^å3'¦Ѩö /â +¹�3ˆ‡Ì…¡§.B1òÈN5=>«oÝ+´Ë•I‹~ÓJgÝ,ì”áIÎý䶈7}4Æ©~ÉÙ2ŸcT¾�œ`úždg„Æ39€4H‚|å7øÏ'¬Áö\¿c’Þ=Z +s°¾™QI'b%‰ b{ÔÆÎ7‡¬B»GìÙUjÚâœÐ€©@Äþ u&3µ :U¶*XA':¼Â1Žî¹¹¨%f{ ÈqÃu$*ù?‡ûSØ<Ü™Öoá;âÝÎG–'z8iàe{„úR‹DÕ±QàIñ%çý`5§’L58öóã¶îŸSƒ[ZD–‘šmàȧr~Sy|w®ïÊ+Cš­#ûšÄÛ$ª&àê&ŽUø²Œp†Q{æ +¸î»ÁŒ èKÿì�"±l‹çÕ«nÕ­­”krG/ÿ.XŒ^SÄ$ZHÝ¥Ž€Ÿßù@âŸn0 Z•UŒƒ�¢XîA)NûïÙ7�$Ãçñ�^FH¬ÌÝŽXÇA®*NÐøù]c¸‡¸Ê?’A=~ེ’¿¹A”µ5t¼ûF”y”úµ8�?d]Ž«qÈʈÝÒü-LÞaÀ“^.oc¢4UÐÝÌÒ?nÑ]]VÈ:B‰û§j¼;"NõÌK£¥1«Ýä5j™<7ŽPþl1j—U–jmáÒ°´dt7*ÒÒœ÷©j£ê7 +ÚÈn¢©Ñü 4�7Ù¼Žíœ*—’¿~ã +{&õ}™®ýÝ|ºR‰Þ´Š€„Ô¿J2‚ÑÚeÝþ“hÛ ”œ#§4›l¼3o“‡ôõNI›y ]™�èà´qJ>ÝotžŸæ»`¾üÌ”¿Ä”ÍÚd~qó-é–Ñò@{ÏñdD­:Š.ëyƒ¶yçq@¯ŸÜލžH´V^)³ÿSMºüíq™ÇÊ'ÓMÌL9Ô°JqÔ3kxºH„º[ê BwÛB€åüPVŠåk‹–¼\žÝx8  rE³}‘V¯™&¶’…|´¨E÷€³K8UÄžºD k¢\è�iï´™ ÙEㄉ%órpeªÖ=Ï·9¦“Vònýd—çw…�&©J[9<�špÄRº !@õ6%Ô{9"oÕc¾‚2»™Í�°Òud©ô¾·sf2t‰_x›•þ)¥ô_QEÿûæá`)Ù£¢Ž¢CÇsže/ò\ÙùŸ»„‰d:ìIYeŠ+�õü›k«¸kÒ¿¬t±Ò‚"Ž…rÕþt=¤y&Viú~Þ|F÷Quô}¯ãy‚HèÏ õ}Üöá0×¶ÆsµJ/ËŸîËSyJ¯Î4�µÑÌtèVW^ÔzŒ|æÏ&ѨT;xÕJ�%¸ +’W� 𻉤Oë×òëä[LÌ>…f¦ñ�:%ÂLÒIˆÅuê:š‡ƒÆœ "™¶§rØU6êÝAxŠS€ÕHËM�7áV +öJ"BV¦1Ÿä¸Ö ~»]¼82îvÊKK­™(û «ÕĨ?~$„Ñ¿Yqq¶ ]$u•.ë8nÔ”y^t7dEŽ@?Ts2 Üe)NßÁo2WD›7E…ðŠ>kY¡f@CW{r3ÎoqÃé¸ô�‰˜�gó‚³ l(1Õy¹wÐ9¼º®aŪøÐ4²oç·ß8ý;'™ e¢�{K…—.SÑr‘ºXÁnHÚëž'/¦¬€¾6L²�ËÜI¾Ù„SZçgïr·èS6µ9×ïã3ßâ%À݈5ôKÞ–î»D7œH^ü“!É�–ˆtžà+ž+7åvr²d¬¡|�ìw<½·{à +3½;bczŠt°P}¨…?„ÞC‰lúÔPoð Ï‹ #bW–Ñ:¢ƒ4x~+J%ÆËàü`¢F{F}\§ÿóH0?&üüiôú¸¦çJ2s…{T}Æd& t@™0{’�ÜŒlH¸ŽÊz®°¥òɶP«ñ§$ËgjÍ.Û¿1qgWyLDîU·®ü¥ùY‡o~Ü–á•ZèøcäÂå@ÇtMñ�:SÖÐóæÇì@l¹âZšA +wÀÑ™œž\*4¥,Œ(›w:.S¶à]—)£õ2ÙJ:4 -Ø$šè:×�Ý„ŸHÛUú ué¾-Sor êDɃüìê6?­s-�ñm~oÄËå-ƒ‘%ˆ„[Vj¾Iæ,ÀQY�y[Œ.«Hšc;••K8¯Œ.k.î®'2+‚¡YéŒ.ΊÔaqЬócO0+ûŠ\oYQðï¤Xm�f}ý¿—k;+–ž–ÉHëqr +,Ôƒ¡õJâ+ât´¢hƒdVÎ:6’®ö +ÛÎg7תZ¢ř*ê`µ÷ƒÕ³îƒ_@˪J=Ý”õ +T빚u/ñéYQ‹¤h¥~ñ1Âg”i9©»G+ªˆ˜41k@뢣Ê�Â8?`V²aú”&Ëzò‘å�Û2<³ŽÄpÜͳ–æ©s(Ój&Í¢ZûzA]±´fÙø’S&ò•C¨õÊWÈZÅyÇ”;Zšmi ±’�'M!wµ~!lE«²Ú@�òZOBj+¤kТ|éõÞˆ¨Î�á + „ò-õe_\ájM�\®-g\T®ãdþ\ Œéª~´ptZi¬ë½¡ŒˆšF»î�üô£Íï¾tÝ=[¯ЕÖǽdêz… pL뮇б† ¯ + Ïa½RC^1¶ñ®XBá®–§BfW{3zJãü±v¢òò[}‚RÏš«]‡‡¶Ä®°tª×�º®´ ´™ëÔt�3�ñÂz”¨¶b½\¥qغ¸P-l®ì*êúãÆeÙ ×UœÁõhÉÕ�ˆôB˜«`39®þ!hÀUäzÏü»UbXÉÅA’l¼•ãjáAÁ^²í ׋`›³ôÏR¸ÕWõ^x3m=UÚÛªaS‹RVØZ¡å(Öü¨i«TýUCGã +1õÏE¢£•ì61�PR9þ€ðqñ̽æ¿�õòÌd:#~±Ò£çé ÌdÖèW¹X+/œ™¼ôãcùù¤1ô0�%¼¿SǾ¤< ‰ÑLžæq†�gxOcxˆztW8[&ƒ9‹ WÈk?² É=kLWë8Ï*-`¾Ì™Z.£Þ…G¥‹äœè�陉°?<‹ªLÍ�¬žÌÆ×>5?K`8\ýQܸÿY"R!Åþ.—à¥/T=­û•"Ó¨o­HjØŒüÀSNÄYõÆèrì"Íœ¼‡ù‰eóŽÉ?�€ îJwR_Ÿ–Á¯š}Ç:KÀÓe:Nà–¯ÇtZ|¤Nx®hÎ+[8eµó©P¿3YC=üTáÇ|ÆÅGf~3t4È`}ùTCf»›ŒD£0Ò£*LY¬TTÐLþ[/E2‰A¯ÀI¬¨i6¤M#ÊŒÙØÍ~‰#¹Ûo`¦8³K=6Æå¥NÈ:³4.It)q4Aþ£P�cì¤æ´¤äç¶ŸÂéw%áCóqd£9ØNÕ¸`ûº_GÕ…ÑaB¯UKuÐõŰ/Ù>Ϥ’Ý�~ŽCrö EÚµj,Sµ1ÑÒúSñÕ�v�±‰Ù7hƒF@ðû1ð©H¨‡¬·¡6JFWx¢Ñ&¼äcËn @¯ÈÏ6‰—ô³½À�X@~ ßFØH�L¬0?’æpâÖuW¦ßPÀѧŒÒ-U–uv3u C 6˜�¨”^]G‚ùÖSœ° +9~wD†7/"Ùã±\ù[v°[L=µÇÆÌáÞ T½Ê¼("Z}Ù!¿×ÉIl‘W�œ%zÈüT�e cqAáö ¯O-?£²{V¶rÉêê’çO"¥Òãwú®ç*� Ý(]w Él¯%ñ;6”)ÞˆˆúF¬’¨mÈû9±G˜L@õTãË�Á—ò… ã“kÞ`Wµ«Ù� ;%øVã¶f1ý$e§s-’"ʼn¾Õ‹P²$»¢3©mw¢KÑùúE! +hF¶#¥$•A´8)Ö’–YXeXqyü8HéÄÙ™Þ"3b_áã+F± J}Ñ:Ç í�úØK4Y‰˜jTn�^F-C°yWüãâÑu¡�äÖü25=ì¿5@«Ž–;’´ÖfÍ¥O'Jq5÷LjÙ�–u»yP’¢ÎU˜Ýq˜RWúãÿ"ëÝm”,žJ š®KSÆ:i;-Ò<9£9 ÒAO.a5ÐÐ,/,f9ßE›²¾î!¶$äš6=A/"Y\Nî܆óÉôö8 ðr¼ÍsÀÿÈKWliá¤4÷´UH�ô^(ƒös¸8Bÿ†ô-â|¡£ž¼¶M|Kd'iT>ßPÀâ1À›–ÑÂA¢´"æÖª‡ìˆŠÇíÚî‘ú\kE@v»3¼ô„2¢ålR‚RuŸ †Óy.¿¨æuÖr-z§^RÒFùe/ƒ“¢KäoîžVl¦¢ZØÚÜ«ƒmÑxW뜥en^ûl3�Eâu15]¿òI“²h\’s®îùøHÆ ÑDDÄizÖl  G¢1[ž�T¢$ŒÅ>gÁ«sô/:dùùNêvº‡ †Á?øñîò5޼K Ÿ#Øa"LÍå·6Ç,ÛÑÞi°Ý„É éìv†,›ô×ÝÀ0{Ð†Ï © \~³GìÞ‡>}\~Æ"�žþ.Ý퇎$%Þ1).?hš*3„ÜqèqùARšq[wž¶³‡BÖû¤Ø‹-€*`u¾¬áò³;k„5\~ˤ/͸m_)k­‘¶è)ïQЉQ¡èÞ‘ �µp�œÂD�2X¤Ó"—¥~-aýH&òã¿ÝŽbø³®@¨“²q§9§Sî'sbfÊJZáÉ�ó_³1AHÞg1bµÙ•B˜C�ŒÁ}á]㜎¶ÂØÜôÍbýi­NÚ~…ÉžÚ²L:ëý£÷ |~Ç `ìqúçšÐÅǧ)Þ/ûÑÆRrrìD)¬ü·Ü²(KBÁáO~v#+#Øø kR ø-6Ã’Wl#Qü$=ª ëVþ 6¾F_‹M_¬Ú°£ðßÇ­Õàþ¿¥qÝ\=Û‘ˆIÃvÀ¶¶  +àçƒEòéi ,{UM_ÌшJî Ð/kú¢¸X”ÇQª$gÍ#Úÿ¾W„ÑŠ}涨×o5(·O­~¶`CŠy×Gå±ÕfÂ÷ÅO[°°Ò9Â&º‹áÎàJ툊?oQЦÕÄF[¬¤Ü-1±óØn)~|Jôáɧàçê#¶&Œ_ß¹ªÓñ*D\Jµ’¤@:’+†2“î©ï8 KË0yM1«�$lÀ+@‚U1Ò/u¦ ÿ…btrÁnÔ% å¶H‚Ãô2¨œ¾ž† jŸ@àQ&߆G…Ó6—t’’y»XÌ8"ѵ>féY£…h‚`µ\*r•¯¦öÒ¼ùŒš5$Œ‡ý–ÖÁ‘n¸mÇ9PdCP|ë +À½4�8f'ȷɘ«tj&)SJI’±óåRS4&YP�|U7ØÄh@鉔ƒYÔÂz…ûs2_ƒÙ”0é _Ïù‡â’ \&KQ,ì#Âðˆ›º'+ŒÌhmH#ò`p3¤Aõ�R¹¹äüÇ+|׎ÎÖºc%£P†ù +�\ŠŸÁ\>fŸA Kj˜“�T”,#"Mm±Ù½ ÄnS#êå{Q‹§ 7B‹è„„VÃn^~IY�Ÿe]Qû"ª ¬3pðÒ()�Tã»÷äƒL† …‚²ŒDµhL‹q�™æ!Õ!›Á¨ãèm-â°b$|Š2Uýjˆ­šê0E7ƒ(“C´X�2(4 $–Çe@uRDN#—ÚŠÕ¼JóbBðÇWù¥ ‹Ž (P7�fˆ:B!1P ¨GžÂÃåGØç&ÔË€ëæ$` b£ð“,رNüA´"p@Ê�rT¥ƒòÑC“D‘¢Ceðˆ^zþ´ž1­ø”R§H´?`ÅjíwªŸ)ïRoƒ:kfûo@6  +8  à (À€¼ T õ£€Cž˜š›©*€q;4�Òк + ˆiídùÄøæ×€€TÏ wÑ­9Õ<ªD,�PЈzo9¯P¤±D51ÕLÈ[VýÆôù¤ pà€a5¼®XUµXõjÑÉ¥(@Á¥º�@T*µÂèD%pàaÔ~í>m‰Da©J @£¤ L•kZM` T ‘8o®Åœ‚œ%|œ|” &¿(@’d0Ï0Ä2xR»{—5£ŽƒG­;HlmûÚÇXæÔÀ£x8šå<®,(i%Ç•ÀY)+PEš U™~mxùõL(ZL¨s¯¡~Ÿ06K¼õê7î F‡¤c^j#_ `ÇEöå þ±Œû,ÈP , Ï©8µb~��A‡«— ÚpQ5ÇÔœ[–€�Ÿž�q±(šL~anï7 ãwsæ|Ô Eú¤JÈ/>Y@£ocê¦ÿà|ó’ÿg�¹Ìeþ 3s™[~™“ žqhÕôž³ Ê;̤J"¤i0–pQÅË`Hñ.8"‰%jñH(Vƒ/dÚ€ìÒqzÈjtnÎÕÀ;± ^*FHMH;®J AS <�WÝݺ^ Ô�ÄŽ,Q_­‚µ1"̵@!DäU•Z[jˆªA±#G=¨�¡O †¾¨9?{â*)Ž>�bj0E�‡p—¨FP\:C—îE5�–‚¨*ƒI GŒ',ü)òÉ(Zib†ƒùêÓÓL'TŠ‚äj ÜÈ¥óòR�ù(þ�P>RR™¦º 4¨@Њ·Y"Fä«”„â'N‰Ò*)ÂpÑ¡V…áÄó’”í*ñR¥=}”»lÓó5™g,#Ÿó“‡ l;‹á5J36JË"*¦N´„G1<Ô¾¢@�.V3Ôh@ñ X-ªþ&˜4,ó!T] y£¥>m?%%$ž2˼ªÑE„KbVs…gTÃós¡’Ñàí Ft( +qon.±ÅŒ´‡m٣ǥ{Ôà4"×”ÈÅë5%PàŽîê¡^QÙ¢õQô€=BQ¨œ‹Àš)†j*#äµ8÷OïÝ2ð§¶ÔË #&†ôŠL�A”‘ @+0’Ê¢š5&çQÒUu$Ñ´šžQ[jΙ�ˆ*gË@æ®þŽÐã,§:ŠïT²hð¸œä)KD‚ ?Ñ •\Îd.œŠ©�AJ;¨†ÈºÂo UB#D0öy +ô»4¥‡¼ˆ˜>R_É5 ŒÑE4¡yˆx¦2’.NkÍô„Ìʯg¾ h,åòT8ÇCrGÑfTýîªî/ØTIàÀÇ‘Š…¾MXçœØ�˜ î°ñ…U‚Ü;ÖR‹d‡äŸ 4DÚûªÆ× ¯D^žåТÎ[¦iš‘A¥YôÁ—�©¹–RÁR*ÔŽ�å”Å ;^PZY°CU“u4\�¡W‚t7\ÎkKÉfJ„¬ªgú¹4α‹õÎLÝ}®úm|*½z�øäÖ¡ZViäIX¿|ä�bQ®zF¥Œ ¡ÇߌK)©DJż3UC^G"fÓIgQJVåCÊgÄ…L›šãám§° [œÉZ®ðˆDäÔùÕÄÛTnr)©|�eKZÀÿÅ“¢K|€�KegG\¨*O�(¨b†âyCÆ€ (`8p Z™/ê!D“HPsŒ€ÃºAd’©Gë­_y€ÄÑG%±xEl BŸ9—xR ªÂ�ŵvgÂ;ɇKñŒÒ|d¤ÉLG%Òƒî +©\€ïeäŽÎ 5ù½¶õÃ|1Öò�³ fMg9à€)pÀÅaIx\vjÑŠ’:_#œXÅ$¥°*H˜n„åÑŒ+46å +�?‹Ymªâ�Ï‘0ö»ZêB#4ž‹O¥ÐÈ7í|R‘J¶þJ»Dc:&zRæ¢ZJ+^bÈL¨ç®èˇ|/�,~Â>œ÷A¾i‡ô”¸‡¸8.âbbXxi–Ïȃ¢‰n´³QÏãzÃ/¢ß  QèC[†ß]«y"b‰ ©•>tD)‹Ô^oÓZªÐ‡ø.Eâ`Z±oCÂr¯¤BÕí’Uò(š•ô™LíÁ16@V¼XCcFÜzòŽüªÕr[A´ò†ÂRLÇ Ó0_¶¡¡¸¥¡¢[4ªÊWµ•…¢È»‰æGSÅÓØŸÚ¼YU…,-”´æTÒûh¡ºª-«™¢q ‘Aüˆ¡µ"ÚDÊUU™�œ6€€“6Šª5+©(+1m|~)$jšSŒjdH½jžfóGˆz(«øY²<#¤Ž~ªrhòªåú&ÚÏÁÑ%†yXTO6b²¼þŠýoL&&C"Cm£RÕý§êh íÉq‰pQ£2At¢‡¤–�Ât-BÖr�ŠŠ<µ¹UœT•6Ï”õC^E ¹÷òL+ç„'Fnh$>QSÄpKaÒh" ùø’‡”zXÂó> I‚ ÆH2™ER¤® ˜ˆµ¨LQijŠ ÷A‹0Q‰- cÉ$ÌÄ¢¬m¾6Ìd€@�Æ;n5-ˆj‡îñ7*¡¨m¼ÏÕn{˜“Gκ*á%l_r'¦3½÷ÊÜw¾äqPmEÑ2ªQbR�õ³ªÂ$ñh|öÛ¨y¨”S¢%û!§ˆ$��&ÂüŠÓ'ˆÈ`  S?+Q2DSEMÇ£*"ݧï´Íï1’y©�© pÀBµµcŠr©ÑþE"z…i¶eI[a¸éhàa­¢w5ÎÌÌÌl6ž9° ²P6ÛרL>ÆsjMÓ#â�x.¡\!B\q[�3¨¤Õ7¢ u¬f s€ŠäÒpD*¡Ô¿L dC!=Ô1c@ˆ14€Á6T´¹)0T»ªƒ.RR2HI+qÐ6àüà™NÿåºF¹$‘+³=¹�µ]B¢›{lrº&Œ Žú°IU«òZ³@C¹(�#(s‹uõ|šl‹å¾xíÿkHá¹Mš#|1îÿdrzC!øßÃ!çu²¦Ÿx!4pàÐäýˆ…r‡ÖÀ¡NpÈïç05ÈOì¹|%“(ÇŽ¼®’ é�Ô4c@ +;Í�ÏçÚ F8Û°£„ÖŠüQÙó½�O ¹±�Ê ^ÅòØ´Ã~À¦ðTB‚a¸ÍTÏ'Aᛡ¢|µñ½@ÉßûõT±ÔW/D +ÃG8DÔùÐ… ˜cæ¼€V½À¿[©~w­�Ñ1ñÿç8jåb|6VLÙèŒ�³´,S' +Zäs ½ÝãCtv3Þô@VŒxŠËÈò¦Ë TrY ˜/ÇÆ&(_œ&H§cohº»ã±_¬ä�ÆÝKjdS8�ùކw�'lj–að¹ÇHätJ¶ÐÞ±Fûø`žmÞž­ÖÓæ@¢pJ/�€`ã`­¸PFi_“Òâ¾Òá_g5Ñð–^+’cÀi-n«€R”qÙ@÷RÄÕäøÒLÊFÂ,[ŸJêËŽmð-aÜ…d4·�!ª…!ãÕ¯T¯oMd{‚üý�~ß(‘ZºX·Wì/œP›þ’°GªuüUmÚÏ\:ÄZ$¢íÚ¾x¯7 ºMZDŸElÈãr·LãºzS1Èÿec:ï¡Wa´‰ ôƒÒ˜�vU�3¿…EµDÖµãRg½ljÈ2`¾/˜¤´ð.Π&£–ßg“´ ù pTïòáXu…YV%Z^áù§™‚‚G–tlò¼Ý3`oìl¥"¥¹ú*ߨÐRòJ™DÏiE!Ô·�.€žsßÏd%÷åù§ÆÊ‡£æ<ƒÝš|uMœÓåÎîÌ€Äwçü'_ ÖGh”~8�ž7p&ƒm cëGØTÅM5§Ñ02?¢Ýï”·Às¨«›þ +KíÍVzKô� \ó¨YÒ>¿óT +¶jÕ0Ûç•–‰d,IÇX;Ý»lØ0¦[ÈUò9‰DÛâE“× ~{ò3kÈ€Ñ]Ü;6;EýŽ‰Â€˜ÞÎËù�S¨yï#p:¥äÁ>­�ƤSL ‚j‚�ØR*!Ò>ù–e‘((÷±z]äU]ÚÉ�šõ‰ÜïBIóª�Z<̘ÞW¥—¯+{JK2}(Æ+¾•¾‰Ú;W˜  ?‘ó°Ä¥Wü’;ò~_¨¸ý£%�•£ŠÎïŒô±Ák)wŸ;yÈÁ·VµL½Á“Óçtê5=,´%£ä)¯ið�™A�:˜øsƒiÑlÿgL'cmäÀÏ<}RÙFF¦ØS SÎCÊsº‰öRç“vþÞó„Ô-ªÈ�§ˆ4Ó«a�Þïïj÷«ÛÏò£Cº¯(ÍAO¤›­¯àt*„¸wÂ(ó˜>(­…g±PÛ³�dZO ª¨1ÑÎ +´Óì\ÊÊÑó£ƒJGŒuªî|vº¼gµâÀ ;2ÙêÐF½ª¾™d›6pñv†¦V6/0ÆLÎêÒ,=1˜ìh +´L|ì™BÚ?‹JæW9¸[^&)¡oBÙH­SåQ´çž¸ìõNH€°fɄަiÅ3ôQ®AG-½HÊR/2ÃP(-7‡¤t©Urjy ÖÛ÷%P×^"ä�_‡ž _ÝHžÅt�š*cîc¼&ž5G”‡l +}°†�°¯Í4|Eù×bˆ@ÉòŒÿ&cUÝGh;0T¾QBö7ùD"°ðSv ôŒ&´û´3©ƒ€{•Òx‰fáJpzªK�ߢ ˜!Ñ7Æî¿07yl‘Þñ4=>ZŒŠs¸«²Í¸—ŒâXƒ ?áÐûƒæ$ºO.ˆ s\¡°[_>’û$tö[&‚%Æô_íƒÚÕÊ¥‚´u¶›ù{ž|Ñt™ÛTèÍd!"ªå¢Ÿ?ë�ëösMFºþ…Ó“e¤%JñTÁÒ‚=Å® ¦šîý‡4+Ìr-þ®hRþ ÕpÏk �å^ÈÕoœ@#q:»*ù%ã3À›Ú¯AÉNz6ÑÉ#Y £#SPW‹%|õµ=ÏâDòZk®çÚ(1]w/°Ó[Jk§›^ ©W[{ù�ɰz}k/+ +}šÜJŸYÉ6ô%œ•£I?t4J²òŒ=†‚Ño Ñz×~;L¯ÃäãKp ·WVÊÇjLÕ.šù/aE[Ѭþ’í¿‘rv[¸~ÝÕ\‚±¬�ÝxjÂDÀ rLÂmí·~} …¨ìö1/ioXQb‹Ö$ôlf¡$>Ú¼ÊJ›,_%ÛdÂÂ?I’’öV*õSæÅZœN›FäO\ˆc AÒ�> +µ8ñÛ?8˱+.(2ϲwÅtkfì÷Òi÷·SÅpßÅéž&Ñ”)í™J¾f!à7šæÅÉÔ9” /(q•·z|¡Ã$§Ž¾�ñ¿'k…nÏŽò‡bAD\ðs›é—Æ/'ZÒ`ΤÎ|.³K­}ü«¾¨TdÏ”èÿj~öx»]F±Îƒ“;†4(– æ79¬Ü“,'šz·Co ¤zè¨.–ÈrM±_Ç4i¯*ÜØÚ/)Á W@ÕùË }nôÓ7Z8ýÏó¾qah:_™fö’Ðy§i'4l¯/é:¶i®Ú‰dY :Ñ›³   +²Õ¾.1µöµû;%f´?Ú +0ZVµõZ­ý+ɨ¤4§)ó?–`õ郀s[¡) ¥•íÓdZ&ÙÚë¥Ý�‚uíã®6b;ó­7OÀvbÉöŸBt2gÏ��?Ô<ÚÍXB~yy²~þ I„zk/ÔêŠêW½ÌËqŽï•�ŒÏ´ˆšW pJ½+¸5ÖV‡°Âå8¢I&ðv%2Ý”H™€W!K'ƺzNäó¼ƒdW®ýñGøÐØÝ-•:sÎʈÑVD s9ž# |nx7GìÌíĈ4œ! Õ�g¼ »h +%HH’ Èï%2ŽL—iðûïHöxжÑ~±‘g‡´8È�Kiû颂§C:š[tH{g£wv ]3SNU*­tÓVATøájç’"’1Œ'!dùÄ9Hýg¢5…Ë,4œ¢AªkBrŸ09¢[“ìÙ&^—…—2ؤil*s•HþšÊÆã0\Ë3eïÏ‘¦Ytw±Ò˜Gᘀq¥ñ%Õó‘tYDÈ£¬³"°´�A¬ùÄ>Χ¤±­D°ÿO&ÇŠ`BÕÆþà‚úTpr‚óëÓÿµœ%�#STqÇè›4Ž“éÛHò]¯¥Cèê\/m»50ªˆÙ@ëLh’4„Á¨ +‘d°�šáÇø*�#pYgEQhg©x øÂÞ|æµ…yØ@ô ¯< +@ewC[/¤±ôR@œžHã°[Dˆ1m†ÁÕ.A'c�Ô O¡äKÜzœy§ÎJ~˜‡2°õ(�ÓLq²+Õ¦46 :ñbNKG +XDy‡Ñ$�?é¶O!6ݤqÅË—ŒÍA&�åœ,÷O�� m2©–2߯Ӥ4¾Js% çϾ]a~Å~CW>~ÅD¾JcÑÎØí81ôx2æÕ`¨S0 n÷Ç6X2 Î%¢0�ûÏFû¿PgLÉ3àÊ—Xq“öaÞØî4¶<ǵ]soðúà'9÷VÉûF¼;�ml} ê2œÆ'©°Å`QnN™+©ÂM£§qiëÂ÷ÇôNã +ãxl�«Ö~ å pùd‡Î™«Ædš{XŠ-xœ%ÅÙ×'ÊÕò²j¼þÁ>«©"pŒD âÏ£q_Äù£ôÀfJyé $a�ºŸx1îc.f�Iù̪ õ!žà°Yå˜|wô^(Ó˜¾wòÉ8³Ñù—-ûâ4NÏgLë`|⌂#=ô‘ÂFÃ|ìÍJBJ1�¼˜£)©³c}êd>Ö7ÊrXÁ@17@§gÊ‚Y¦‘ã/NãñnGóÂŽ>ÐsWŸ#G£çaB¥#Œ ¼q ¬ý;@ï#‡L¨³ÑqÖi¢PˆÑhíËÓøOé‚ié·q—�Æ–'Åà;b§±Œ¯¯�"§§M`N©ý.r¹èsüéo:°ï4fü®J |b2Mc’ÈUy }5é^ñ,˜&ÁB};YÊCí_û“FÌ‹Gš ­WCŽ.Ö~é7£LäÖ'� ÜtqÎŲ;ÑA_ë¹s¢0E¼€ž‹?ô"H�çâ´8Ò•™ÈƒÕû¹x3œg×,6QøT4¯LâõrI@$s±¶\âˆgþ æb̓ë*‘h­À¼ÓËÅ�}Èe¬E”‹É¡¸ låâ8ªu-Èõh\ +(.²Õ=sqVŽÕø\\¥Pî“N}ÉÙ;OŠŽÎÅ.þg�slçâz$QuÍ •ç9×* ë®Bzp3àWRUa^sêvoŠè\ÜvݬŠéqá9üÿ|LÎ3¸§‹ F³ŠÿPL;Ï|§»¡½cÅ^༜{õrgЇÐÅ�ÅA}mBßÉïXÿ¡4ãÀŒF检f}Pôy¢‘’ð”=’ëZÎÅwÃw/æ³çbQO±*MM”ZöaS6ÑÅ®×Tz,ÎŘ `Ðä;÷_ßäíŸ=Ô]üˆNA•COÖj`™±ˆ]É/¯ãÄɽõg>Ø(~FœøuÃÌ\ X>ÎØ;žÃ57¡©òCXª=£‹ŸC Ϻgݯ\;],Þu°[7"ùøý>Ö–F©¨55Pä¹±{„°¨Šû U“ÛX#j·ñ¿¢‹ƒãsî ðê· ¥„F'´‰�D›D€SO‰ØQ‘©å~•Ž˜sLKW¢” qŠÁöß2sȫٶä1óYÃ¥´æÿUnvª‹#ÑÉÿ¨àºX�ù}Òƒ«»æå¾kP\Äúd_ÙÛÅ';=ÚÅ¡µuê“Ä›L…µ9±qÖÒÇ$ïâ’¬ÆÖ–äOÉw÷.Nö'h¯+ƒ"TöH: +"fM½Vб9C˜ý.–.¥SÑ1^œ‚Y,tÛˆ‘b/E�KuÊ\s⿞Êé$ bÑó>+éÿ…·tüƒqºØ—˜àÏ›bû0Œô¨pŠ:«64iQÞÚ^É *Ñ‚HÛ¼‘Cø.Swì|æI ×ÓŽƒ“€*áHĆÐ(Y CTA_Rq8$_iå×YÖÚ7d�mãœ+mø.õ¿ã뺸ÄúçžFž1êÇ}? þ=,Ô�„u€ø†_6¸~ÃÀÌ5¥s†¡k1 Eºí)%k½K–î1ÒÊØœæô×i›Rʱ‰7­5‘ñ@*˜1R,®ŒÊV÷ã„°obYÓêSÖ²7¥¥µŠ½UŠÎôh5bIc‹¬�Lç�};h˜]í²:ü°pP RÞÄøû-Ó�yHöM,ìaÇ&–ÇA›Î0é°Å¾‰vÁQ±bb¾r²0Ï�A;±p¡EF›pz4·™ß�,ÍvÞ½­YYRúêÒ8óï仕,f¤j‚�6·\)ñë. Ír¿”>ÉšÄs”£o1 Eºí)%o½K6” Û§4 Ôsé#]G÷ë!ÀĈXþ¨LÓWÆC´‘O«Œ A 6ˆ}£¼›jjÞwŽån0Uû&fåa…]évÆÐÒõð�Ú¨T£ÜÒµÃ�H¿Îå‹ B†QÆBL]:mL$ÂŒVJ!BF<Çzmå[Ö¾z‚¯dÅÜã)YœK©ù¡ë#q‚é&~%û‘LC“}õ€�ypŽMŒS¨ìè¶EYk"çhùu›;Jjb}˜54uºÇH»ÂŠØ‘SÔ¶ºÇˆmå¨jkàcÔ=ÆCî‰ó}uÝc¤ ÊIe¹ðxò}��úQî5×(û&f¯ò‹¬V¤$!ð¡I¦î1Ð ãuݽÞ'ó¢|¼<›þ7àæqw¨Bv +ÝBèÎ!w‚Ö´Î�:Ao!tg��B·zgÈ� µ­3äN¡[Ýd§Ð[€Þ²¤IXWèŠ|gldßÄÊß|jËãºÇÈÔóhñeîK<æ~?l›H6Œö¢ôI֢웘Œ4j-VèÝé-~‚3®Ïc¢¶x჆¼‰h»éS7’{ÝàˆZcöÙª÷÷¢©DÑ¡{Œž•Åfwã.äRÙꤿŒöMì9('t�q«¶h�£PöofßDäÝÌ 4ºÇH«kUª +ª¬‘} —ÈëdÅaßDÙ&Rè£]Ÿü Æ·³Ð=FgÚŸt6�ícç +"ÙÆkåMt¸¯by¿Ò=F½é!„µM4‚+ª}Ü;ôê±ÁQ;^b*‚Z…Õ=ÆrÍ'•¯«t�¹×�ד� @)Ö=F ·êX«Žt�±ý?\PKW­’fßÄäeÃä’gßÄô2¾+"jÝc”°ºp$TÄ ?ÒÙ7qø[I“Á û&NÐi ÷z‡‡iX{éÃÏ3¤ÁT?npéžÄ§{ŒEóçósŽ&û&z{-1£Êa‰°obæ·IMËÚ׺ÇsÐJw—gª{ŒÑñ~ÊV…¬î1м9]9gßDAo¤sV±t�1¹£–ëõªæ»C¤¹²obUA1êœaßD~ÓM(4|¢ëGÒÀê£éËr˜‡É®G2Ý1ÞÌý~쥦úÇX¡ÍÕêš\öMd$Kõ¾À¾‰+í^w{eßD÷|$Öš¨fßÄ ´D&/¶êeϰoâQIq3u�Ñ*«ÝMyÓGÝctR�ˆ©aæ�ã#–}¯øÇWѦ{Œ¾À)±QCRy¡·!Ct�1[†-PJ@êàØç]Ž=íº¯¨bßDÇ{õÿ¸Ïû&Rž’Fí€Xð xc@ØVQ0Ð=ƾðbÄAŽu�ѱSò>æAI÷ûëˆe‹—ÏØ7Ñ—È #cÁØ7±O.õŸ˜³èäᨙ äYDŸ®(CŒ}IY÷i|déã~.sþ÷ìJ÷û§D¦S�—ÙÚñs4Y½¥{Œ¢ÿ¢4½ÏßáΖsNI»�Àæ ¾#G÷?MØ7‘v›Ïe +Ýc<â‹¥[ˆ}û_¨%ÖÄMo™û&^QŸjw¾î1RZÒ­£õq“H|Ýc\¾©²t‘âL²·ï=>�KÅq[Ķ� ¼ì›Øóv(yž‰MÌÎä"#û&þô�éSDeßÄNõQ:‹ë#m¡*^2Ã̾‰*;€È,t�‘ÓÅcYì¼™*Ø71gd{ÛbÝcd�±çËíĹ2åžØ7±kb%ç8å¢Ò=FŒ, UAôÍ…2¦ä!ZÍ˨é&9…çÙÀ¼Ó=ÆãÒ“±šì›˜Uÿ²âs“Р‘¸œx;ôhÅfßD@¤*O"=û&ÎSC›Ç·JËW�^ýCŽ}©�™F:à¬èÐ=ÆÉCpÀ´=SÊ9@Ey üªì›xåÓ7ŠoºÇ(©"‹Ì§Œ0ͤ¦· >ìu�ÑàU.<Î=Kõl׊´Gä*%@HÝJö .n1úñ¨‡§áï—¼Œ š²´{HÑ=Fm«Ë¿w“Fì›h…¥Vd& +2p°obÖq—€@|Aœ×Ù714�pÿyëh±,¨¸ª…øÄ�WÞ@ì›Hk‰XXL£Ñ»©ÀN¨ÇöMìøtªXÔ³ob¡²ç5¼`ßÄ~¯~èM#% ¦{Œ϶~Ù…©Þ�ÓQõ³K›o²oâî�œcyÕùÙ7íJwÄÞé£K{dG£~Ý¢›Ëâ¾‰è¢ r¡Îꌞyä[ð?ÍëA}¿®’ Û‚ÝÞ.ƒü¢ãŸÿ¢0&Ï÷}¢“î1ê¸6€áYR4ÝcL|‡Á�¥ {Œ\�Áõ%Ûó%'cqE‚”ÒjâàÊ×âyöM´ ®Oؾ˜-û&:¬qõ£Z†(æŽÝ/ ©`,.ÜÓ=F+fEúΟƨÅÇ»î1Š*½í‡·µÂî£Øþ}} �íT®×=Æó =|ÛCþ‰‡êØ1ÝÀl¢ˆÒ=Æu¿$oI9 +웸þ==hãvÝc¼)ÝíTNd]mt�‘£hª¸�Ïî]Ö=Fc»ÅC/¸xÂ#u�1ÁÂ<“4¥S÷Íýò^du=ö�zð…ƒZÚ,P5ðþ£9®ì›H¶>h‹Ø#bßDúgOfmw\•î1Ò­¬ÿ`LsŸdßDþ9æ-à ý¢{Œ‡€ Ã�PÙDHž›©xÿˆNÌlÅÈ€3q�ârÖ(Çæ$Ôjv5û&Ò[•maþ:7€}‹»_L½…"û&óõ70mL°oâ…�ÉR÷iYÞQì›xÞºp¶IÓì›(2¹(ÀQÏ‘>Ò=Æ«~g 'C0NA:Œ}Å…N»µhöM\UÀ«’éû&Ú°V¶ŠÜÇYY¥Ý¾BMØ (Ò5л"ÿ$íÿóÉó&ë©{Œ û&NP•—äNà‚î1¶XS?£ãØ3ÛÂs–}K%¹ý¦w²obº*òž#t�q)«Ÿ[:“b¼Q�b ÈµVÑÔ¸î1rÞê3Á_z/GÅ4‹cãÞÿÜÇEfÄ|FGn0%5»26™´½.¤Ä×&òv4æ/ 1N¾2°â³ìYú7àê"û+Õ{ŒXý9ØþY* <ó!¼ÇøÆàôÛH�¡>FL…‹½ÇHxï�ýÕVáý›ö£è‰Èx�÷õAw~À¾Çíø›æ«Áø„û ÌçÇŠ†o€Š5þ4�½‘ >FÄVvõÆšŽªî€�q|^iÌàc<3[£s:¨ôé ò¿(ã0øË (®]lÆÕ‹çš,¢‹·�À�µÒác,– Ü]ŒS#Ý y¿¨lÀ‡ø‘Mêãdl ÒãcŽ:"™Ð‡‰dӈΈV`S�“�ÑõØfo Àt°S>ž(coj`V1ÎÏÍ«g6äž“�±7j`ÞxÏØ +ý˜(ƒÃ]ÔŽ€Iw¬¸ HF$ÖÉv¤¿M…Æ´2ùJÙik <új€8‰ø¸|ŒÚ0¯W¶ó@SÚðj@Yôi†p‚²Vm0XìÐ «e6À5{¥rEòM‹ |1£–×Ì +t®�êU¤_plm•„ˆ]`ÌÇÈÕ˜I5Õ@k ÕV DY>Fyjàáñ`T3†‰`«Õkþ�‰µébì­ÜQ¡j@•Åù'Ÿ‚⤖©?ÊO•�±6lm­4_¬~1TZÂÖK “BAÍäc<• Ü­|ŒrHz_>ÆVÁÇg@]sݦv¿æc FÀEÂý ÚFÁX–FëQ®mcôRâeà"'í¾AABH6j^­ÿîò1^|üÐ¥ïù¡úå$Üì7‚½¨̘Á|ŒdUÆü¼h!x~™‰¹ ä«ÅâZêþ õb¡PÕ90b«B" +³´‚mCCW)g$[ŒÕ„ã¬Û„ú>Ì;åEÿ³1°ÄùqÅ¡¾î†‡f„í¦o⸞£ÁzïÅz ¨ž¦9ì�Õâ4Y¥ôGû×7µ3Œ ã Ò-5NŒ³ä4´µ;ðèc¸(âElø Ý�V9õУ!åÉ«òË€e‚•‘xÓÍ·ÕÀ­ª»…ëÕêÛæ¸†�p¥:·á¦žî ¹ø¡Ÿú!Õþjý<1 ý4MK—ðMÉ�eTB‘ò¦JØ� ëÄRW>Yõ@I›f ÎÕÞ¡Í"¹2á Õ»c3’Ó|àek~†}Œàà �è2¢¤˜T‹â.‹’ˆ·’Ë›j¢‘VT2‘Õ§ ®‘wXt{¿|TûBÏÛBÓîŒS;˜Ë,Ì(+ç'ÅÏÇ÷G^€$œ©�k ·fM»Ä\•ê»~ÂÈù½!gq°ñ —Ìäž¿–.Ûg©ê#Ö|é>°rg…IˆI˜üÖí?;Ü>¢Ç >‚_F‰�À‘QelkmÕÝðFÙÏ_ÊÊ�{«É¥8Ÿ˜fÃ9¾ùH�¯9Ý�ßûhœ„|Èð›8}K6à[H°œ9ù+%¸£§=êd¬–þêñùל+R–†Q´·ÍÝ –D_Ö�J±Çø„&n ! +ááé|¶5[`¾sã>‘"FvÄ´ O·‘Ã9é«D×êÀBˆiÿFÃá²þ…½@›w’A¬{ïõ#ðþ\8ªoK$�ó“:�¿³&šSM¬‹F!¥NF '¬9›ÕŽdz�t¯äw»h¹d*[�ì©óåTÝvW ^"8l7�¤ÐT¤âq“ k5c†Ý,cvÀª^ø\¯ë0W¬XÙNÜ?œõÙS\õ’þÿú‡v3¬B�Ûê²êþa`ÃW�a ,¶êÞL[®µ!?Cb€™Á>MàN&�¾šmÞsÝ`Þj Vyp|× 9 ¼uõ‰J͘²óc s��Þ¯‚VçèV¶T€}Ež$¼ÃÍ â%ã-úèDÝÑ Èef{œÑÿ5¬–?g?l«õ&„«D™C/»³>?‡ßgqÉ‰€HGQK*;Ë +êAì ²Õ#§2Ýtcι�Ö,¸s$gÑpæJ‡—cÀÌﯽ±ã—p�— hMõè 3‰ôu¬”ñ8²vÌ·Sbóÿ]Ö³/ó;ñ=DæÛþe’o‰îTΞ‘'_NòAR‹•å95(Ä(lo`÷{&fqWT1@Å�8²zHì—¶^6´3&ØdHÒ�hø�6w[Û±ÔôS>?¸³Ù\×’–³§ç^Xt´ëê‘ t¾f%;hXð…ø—Ø¸0Ëe·'ñŽ–Vÿ‰�®Íõl‹˜Æ‘{ÆšC4`âQîIÙF~$þ™2u3£Ð�ìöÇ+J¨™ dìUFŠÉÜs ¨¾¼YÝ ‰Ô 1§˜×l¼}Ô¢+©N»š +ÔÞXk…wÙJ/ïþê)J@αQž�  jUÅ®|Ò´œÑ;‘@Àž½2ùzŠà z&"l*IL0ø’^¶ëÔ;^¯B \MKÍÙFFL&÷\$ÌXyëàЄ»GsnÔ&½¦˜ŸàÙ‡+¬áC*J5ZÙÒT7‰�=5ÍX¢bñŸ„†ÒZŽñà“/Ù”ÁÚù,wcÝ>ªT¯Àßñ[‘t;Ç¡ßyÈ{F7o"šä#»“ð8L +L>KìÅþºÌ�³�µÕ}·MÓƒ'ïÎb†óƒ‰lû¦?áV©Qb Íl0¥¤î�$$û\‘æ‡ dÉ¿Ó�ó)°ø²èÃüOî†p©Ic2‚:�n;`3J`ASm»·ßºVï× +ÅuËR¾Ýfðft¢Ã9d÷Ç?4ò YAòý�ŦµOØáÊ-5·ÍG ú9EоÍG¯ž˜¥ø­Á÷·nFŽø¬g(ä�Šxh¬2>£å‹NÎM0Õ_ÏÞú0î  9(ÿÚPëÖCýö˜aù5)�ÓŒX†0<¦¸Ã RÅëo-¯ÕQ0ºøfˆ>‰�8Ö�xÄq]ƒ÷ÈÙEO�’R–÷œ^v”„|Éõ8Ón8Þ`¡Û7úA i¥.àÄ}ì6 y/ucȬ +.�ÞùïufÎ ]\n‰ƒ\æX/D�”#“*?"©ýSÅTÆOg_ß«~҈ņ3uAù=Èã•Ä‚\ÑIÿ;×*(½êmÖ¦VkãhúÂ.�”'Kó(¼WCðWŸß‚Ð7Huì}ç.G8‚nyð|&CÄá«ã“;µò^á`k¤ô0SÊ0¤Éõ§¼a‘å×6/×¡ì ¥—ê9â;¥âÇÝ8W6ºÝ±c¯‘G¦ß@ÄÍwŸ¸`ë +lz?;:zšoœ€ÕÓˆ¯j Í<â‚®ŠÑ„ëm£;"á +­ €ŠÊ¾"crË?R¨2¡LN»ôŒ`rO ª EÉšVˆÊ)3Cê[1¡ä¿¹ŽÌâ;´ îbà“|¸ŽÕB뚨2U÷æÿ4á†óâÆ'ªÊ×pîI�âDžî°Ãß‘•“ö�¢?ߘ¨º™1#Æé“<ƒ!)$ª`tø@ªs90¥ê^æ :ð[i„RÕ�üÞ)UêDv,JÑo"¥* ¨ tj7úihŸ7?WCT—ªØ®Ng¼Ãê‰ÏÇ,—ø9aXˆ©" +Ó¥½•¢maªôó:Œp}ª;3•[âGâŠ8LÕÂÐê‚Á$—uO;¹´üb.êì¤&•yr£ NÜ/"ÝÙFLÕÐ+l± +!m4¿ã¢Mßö¢ºé‹7{*RÓ”€ƒLy¥rÈîŒÔx7X¢ˆfiC4õ0äÞ–V÷ KZÔ'{š7�Æ{œ4¡v*·ý€€iñV‰…ý—³hëÞYðÀóñ$.‘É]ÁwAkLUÈ“eˆ…nmÕPk`ªF+O¢Î0Ô`™*Ô…“â"‚žq‰èýº‰r(ªð¬#ØÚê#çL–¸}°ÍqX¨^élzïÀ¦C Û½Ëu(=岕×zš”™™ Á*zÚªÉh7šz%v¤âuhŠœ{–ùKÙåò�¿é0±ì±úÑ‹t®Âdôëu)+ƒ)r_¯3&z±qùŠZÿ½¬½ø—0ö¤ûcµ_­‚rÚ¤”+K�Ë£Ž|žÏòÖÊ*O¹ ”—”°<ÄäYL®ƒI›hš©ZHy9YŠf�Í+ÝØX¬ãuu#´TXñ*ÁlçnÊ©³h]çv`ݹ,‹’™§Å‚Y&+5í Å&V 8Öžæ ï>LZÿ(fÒ®PŽ¡­4óæ‘K—z9:t¸´®H’#%™X�6«7Bð‡ä"Yâeâbèצ°Á»"Kzö¬¤^Ùû0Ð +|-¥¶ðùÐ%[”²¶¡9‘Ô +o®Ï©}ì›Ä†kÔu!_&v,|"—b6v8è�— +ò6ÒQEp–tÅì�¸�ïS¾½“R5{ª¦õ‚EL,7=6T|àƒXZ¨�rFwWYíTˆ }·s¦z9^á™,@}ÐHÝ-§Ï§"+n5§AáIãY<òlÈ71;›¨3âàçàw@\„ò¦²|·lpˤý +1Í x$¥%Ì…Ë-Aâ#YõKDA õ‚M7G³WÛxMþž/vtßJA$õõùÛä-zžú"…Ø�ºØ6PôÊçA¡¢S t‹Ìn½¼¡Þ\´:L#ÆfÛ6PªuµÂ�¹ó™B&v– ]žŽ[|Á3é­ÑlÀôŒÏãNN²'H³}Åy—u×b×&ƒ® kåx½8V¶]Êœ~\Â…š¾ +5 sFN«:ÞÝèõBo ^Ê·ÌGÑ…8òi€¥BÅm½>Ç ÌEºÔØãŒkåí›æ•¬P�• ‹ÐOìÚôJ}Ú:×/#¦»SHËá\û1ýjžgª&!|–DÔI·BI¼�·“ó>ðƺÇ1”fþ¥øy†·Ø½™=+§iZ·4ãKú94<æ}úÛóÆüQ®÷M»ø™âBµ­(¶Ð¦G  s· $+òúþ`}q‡ówT!¸fOS?_öLÛ+'.Â¥¹Sd8pà‘�ªŽ¡«A l‰X½¼ç_Mªýõ‡ Ÿo gÕ.cö<$›ålÑæßÕn•ÀY‰°˜ æDõ 9¼ è…sí§;0}~FÐØÝÆ¤ŽŒ ¾¥¹Ä�‘çW2\£Š5"®óúñ"#´ÀƒVâ9Mï1÷Äî›ð_y̮ŊáÅ)Ú:ˆ·Ö:\©[»àé’CAwN£O³½ËÐm7® —~Ò²m®wË\¬ãÃòÄY ¢{³ÐÄõz!Ù1í@ a Ùw“(è×0ü�Θ$ðÇp�ÞýYß*8 RY`1œ�¡ð+ª™hÜ}5Š6¨›íŸGˆÖ 4¥x¼0¦)*;äôøy HshœfÓrFÞÌÁϱ€d ÍEȧwv«yЭç¹ê.ãºÿNº‘ÉU1¸pÕ86ušÖ½ã¶“1öN»ÝÄkàÈø±ÛvJ©Þ°¦àc¦ù Ò3®¾Ëc…pN_�ƒ]5«ø�hˆEXÏ­šÁ}\\¹¨ÌáÒóUFuÓ@C“Ž0‘ââ-ªù:ŸN æqû®Âåz²¥w�eoL"LrĘM`èU§n8íÀÒ6ü2uÞÒìôŒ#A°ì½xÊãÈŒnüµÇ´¾��5�"ûVðç¼I¨è­9d6¢ êÁ6¦ÍMäÛ +7Väáe£�üÐø„îÈòz‹±x‚¼M°dQ ú"«´»š IeÿIÂÖwàÔ€‚….»cÐ8©¯:9¹"±7ýÄ)ñ¼cmTI#êØÍ²ØÈ®{Öö^ªÎöþèœáËÎ:½«¤ŒCÈî¡£±§‚ø[ºcÍ~µÔaÂT@ò>N¡q&�>:ù¢*Û£ õ}#9ŠNofSç§£Bë* ïÔŽ<#&¡.4餂ð|ôé‰ïެ�,k~!Dô ±*X§%îÂèt[¹ø�% ®$ÇH¹•Ó˜n"œcœþOõ ?œf°vu³…¯ûê¼}`3Õté¶Ï‰y-j&›… ýç±1l.kÜ1ZrÊâM**Kt0Òçrr¨íj|¶£å�kªÎàe‡FôÇT4oÊ�ˆ~ÙÞõ5›Aç8eNpaµ€L­ñÀñfþãRµ!Ñ¥Œ9U +Íq¬u”Á£Ç>9#òIý¥R²ö˜„Ï•Ï k[éBcÞWIô‡sr±R¿ÅiZ÷“+b­„ó�©‘c>�:šŽsÚcŒª¹(XŸUüÓ#cq-j-:ŽûñljÈ!’å¬Ó’‰¿îµ‹m#ý (ó›Ç³‚€CO ÉûV³��Ö‰GÖb€iÈ««ÏgK-¥¢ðì@j¨PÿbDB1œ.™o’±°ÒºPÓ s±y¢‹Éúþ¢‡¤Ë6Òúë/ïñqš+Ï2ÿ•¤²ø#öTY—>×_ÜÌÐ4ŸÎ7-Ô½ÙÒ©Xð�T bzw_OQ͵ôT/Ò[%0ã×~æ‚OÁû\ßs_„í¼æ(û·Œs¼¥1Ac$íÇë3Ø«³$)«—2–a-m¡™áùŒgb.…Üû‰�dzÄÌRœáˆõ$¥8BÁ—€Âu[ÇGµnG(D0ˆ´Îö‡í®ùDŠ´éH¸z--Åì%Ê�Ùòh !'7£YçÌw^˜ò€C½õêE]ÜAà@eÒL¹2wŽ«†3ùLQ¾Ã8Y„1(…Bç¹ægžÔ÷`–[ÏbxP$´ÌããLaBZ&ñËAµ?<-ú¾jŽvvG”ƒ;2л÷l-²‹ȇK%¬K‚d»ØsXÆ‚ 1\]©§ÛWƒÜ£îœŸc1© �ÐQ€SÝkò.NÏœ‹Þ@£è[Æ8û��â›aIz|+ÒC,�V!æ1² 4O}=«gw[ÌT›æ&�®ç§\B€ †CB›ÒÁM‰Kûøï<"êjJvb¾ 1~…‡úE¦”:¢x»¡½“d³©ÁTD +ùÉ7î„…ãD´…Ó±þEd`•w&œ +fe‰_3ÁÀÇøhžÌìÏ_&ÒÐ$Š.Aä¾áUªÑº|)-–PWRìv¦™Zо7ÛùŤéááÀ§ O—Ýì[-Mz›øÝ,éqAœjÊ,ÁN`ò'Â2ÃXêŠ-¡‚[ñ!žÂíÄ�¦+e'=á†ÛËû1ÂvûÆún¾Xh¶Æx œ[öVö³•÷…Ùϰ=™Ûìˆ?Þ5ÃEOK0]F�Özà2Ìÿñµbï³Ng½(RýÏV—Õ-E] +ª'æƒñƒz‚[LÏe¤‡ÂáÙAû³jÐW‰i;?±äs÷ÿr×mïUåç`"JûÓo)±¨5¡,Áÿ *É·>»’Ãó‹±áõxCóKéXq00Úzω?1Y1û" Ôe@¥`7¾6ÑÚl£³�0â­bÚlÁ;vI$”�ÅÍ‘:ôÒ7½•ÚŸråB‚ýE}Ë ** –h†r_A`åuèý† ‰/á­MëåPaÕÈ¤ÌÆ¹VwΊLÙ‚ëYõMé›%2ï@_›9ïƒqëí¦QŒlxîr»°ƒ6(!Þ•í«˜þ¬§Uþ2›³êÿxÌ•¶`”¼2:O‡vC ø•—`Óh^6ÃedæÝÏ{ù,\ìÒ`hjpt@U$ÝTêP¤Ü69ÇtìqÂÔ r´SaÏiYI±“…ÊWîÛW�¸Àý$he‰²Ò6ƒÃ”D?´9ßI%–m“záZN½a"D€Ós”ŸI…i¥ù¥Ä}7]ÐQã¬n CYþWÅY8qkӈǃ/ç +€…µ°æÔÔu2\z¤ ¼Ø´ár,)á·‚Im4†:eT ',쀖z Ã‹Ïum¿8³ÁÍò*¿ "µú +ë� ”[ýF‘žŒCÞYNš“‚CæO[æ¡=}ÄYè”0~x–è[Œh[ô~Ê86hÜ`uì.7ÿ±Üî‹Ém+îZ’·h@Åì5syclIÑ2„ŒÅvã ·DÍ<óÆ<ýØ©%»òÇéQ9Jcå®âòTæŠæ8QTZ™ K�kžne¥×‘Û|Ù¯bÞV€4¶Ä]~âS®]ëÄCHØ9yIm(‰¤œ(O‹éa²ÿ±ü¾|Ý0!»qtøé¢ ú¨ÒLF}°6¼â…ÖåUFÇ*ø%%9\ô3.ʆ‚“]T°ùÎ’óÞݘÄ t·H�ñü«óŠ ªÀN«/³Ò_úõÔBWÇŠnÄôɽò�6Q49ï<êMdZe•¤QÄ I•Ê–V^Ý.ú[f%Œ@fõ(j„Yù¿ŒJ£Ý£ŽÄÀÕ¯HšæOþá :yòjǤ$ !rŒ®ïgDí‹ÍÀÑù{×’:Qyô®;²¤îa~¸mN}Ffi¥nQuWe«âÂ"Òd!"HJ€ú¤;Í7w6— Mf"&Xd-Ì�™ sT­ŸdQ]Ã*•„㉞8¬x’K@€6¡v_8:cQoïdÎÅÀ…ãOçTfÚ3ØYg›w-HÅ*Þ‰d'ŠÔŠßÖ }kÿ 9RÑ`§°”’a�Ø^.�‰?'ˆnƉüJc]Pî iûApR¿·äãj±·1=ÊžT÷ñ!Eô+³-�6½èž?Ãì¹R» Ùè¦)[YkøE·ÖÆš�®ËÙ^D¯ÓnŽáabGà¤5 ör0ø¦lKÚi47GàO /îãS³6ŠòLsú—f£kîž” }°ë¯_S+>2ã\g7þ.§Q¨mó}—£Ë…ž”¨I;¦ª#©ºâñ R”à cd1u˜1$xÚ–rýli9#bð=¿³¯û¢Ltkà‘L3¤-«Ø(Çâüâ¶Ù¬½²e$Üu´²™¦m«Éç"µUÕ1ûybɇÎß"e9ÛB}.iƒû$ùµ‚ÿ:É·Lk¿tÕlÁm`… +�I ôØ<«i%¼Ã«²ÜõÝh¾µˆl¤/MÃŒƒÒõr%i�dÌ[ + +ëk×GŒØE–óWlmkq8R!ØTV‘ +è„PÌÎ÷°"®&µ áL ׉ñ–ÜÏ‚´uàßRˆšT7qëyá˜cA†-h>¥}53st" ‘Ó!yÜÉ|Ó\£1Ùû +´ùJÁ[–ÒÈïmƽ¨×ØÎA–Ù#+‡¼r4¶HÕä˜`‹ÛKI蓵¿=¬¸Œ¹h’±Óçh÷eƒE±� ô‹ˆ4ŽÎµõ&5øß¼ë:ö’}6cÍvBãƒ�_Ý3…“u[WÇß^l¨]’)…¿ž‚ p¤Ô´F žÊ¢ NŸGí5fýÆV£ãåÁŠ%õqu¨@Ô^&º ýî§Û™�6Ê¿kQ�è]Õ¯‚–ßfÎõ ýé)÷S¨/�0Kì�ÛÏ�GL¤÷âÝâ_M3ø‡²ú9½Ú›!`s÷'lùeN¬I¬q>\Œ‡vóÁ*½Ó^!«¿ ŒÖ¦Hb›ƒ¡ƒ«¯Â×öz2?^ßígå¬Ûp“`ÃÄÔIN$«ºÍlŠì 9HÆH‹Ü˜Gû<-ÊÒXž9PÝ”¸S ìjÞÒwź?ëc±Ò8¶Î&™óBߺs´ÕbŠÃ–½]1É9'–gÍF@6VL"B¥Ú@­XG_ó!…®8bÏ‚=ÐÞ+~!ijUºâ�ƒZBúf¯8¤„UìJþNC1uŠ|ÉVÜ�Y§W³µN+iÍœø¯b§�ôÛŠyä±ÈÛWÌÃo¹š“ü°¹”+&ã¤ò[#e®âÿ›V1B¹*ö Y5[ªZ# U±WbÙ™ŠC¡iÞÂbÊú^7¬Ÿ+u—Æob6$ÒpÑ¿„«;ݪXÁаЫ�éTѺhV\%´MJð»âtÉzÞ\ +ë…a¹¶Ü`ëó Ì ~ÙpÒO*œ.ÆœoÇ}+W|ºÏV®­˜ j|1¾W¼#àÚph¸…c#ëwfÑÆùÉ�TÝ÷ /bJ]1Ûú�·Pî+Î[•R‹ òŠ%{Çï³B”+Î0žûîŠÿ»½úaËW,(-@ßç5µ@;P�U w�H TÜZƒáQ1oÉŸ•rÀšŠ•.ÔÛæTñœääý_Å\–ÔVËŠ!¬�n´¬W¼.›žò�Åø.lýò¨´‘F?©$ +·«ma1†lM4,îø�Ñ¢rŎʹŸú­˜i³ÙÒ¿òN�ß#b±,ÎÊ&‹UwU˜Å‡6d½TÑbš€««�´¤-¶«�°aa¶XN  ]‹ôm¯~îjñ.[3ˆ¯ÅRÁÓø'y:.hñ]cDÔYܘ™)‹»‘Œ�Å]Š\°Hi&¬!ä�a2™¸“7Š+ä™ÞXÜájÇÛëbݘNËž9 ¸‰y8UºW†�†v�£�‹a×^1o$ÒŠ¦†V [™ÌÇ´oo,º‹9 ÁN[ëð¨ŠÎÒÊãñ¦Ä:ðªÀ Ì»~ˆXÕŠíÞØñV",®«Ç+–ãùÁâ<,eô¦D¯˜¯¼S�X<ÅâYý`^¬€€ºMý8×±5Ÿœ´=»bœ›#Œ1Óç¼ê÷fÔÞiüzíŠU| O‚ÊC41jö]êSZ%£p¹ýwÛ¥È*V”tÎÔ"¹û¡EÂ{EŽÃEµ,uyÎò�5,Ë·h=‹™ÍÔn@*L�þªhéŸã^zÍ1n—å™û� M_vhtÇ÷í¸&N§C<86n¼«Uµ¦ ôKð�ÿÙ� ˆÝ 6²ñ ýM“LJhy•ª~:E¼@TèÈæ©œ³»QS4³|É1YæuSápÐ[འÓyæho*®½†h(XV—ª~‘ËA·ÀqCÿÏ“ƒçìŠ`WJÔ‰² �2i=T®ó>ëîåÏ𠘤»XQ¯gÈ …ª1ª�LAóË]‘á½kZ¿G€Ei§%N›hÛtш繤ôl[uÀæ° ü0©&x©8'9%­u(pde§æÇ‹€ È£¯ý ×ÿ.¢ž»ÚÝ’ +A™T +öüj+Òæ˜�3\ ‚L;WÌÝÂÒÙ@ÕúægЋŸcâÄΈ.\˜…ØÕã­Z1´7–¶W;*(nׯçþTÑ^O1g�!r©_¾aðÌ,#®jf™³–µYæŒVÖÎoý/ÒÈ-5/Û4`ö¯š;.@$9ÙG¶á·ªÔ�¼\Sl” &•à‚5åÿѽ^ÁæÙ! õ™ï�n£b_ DÀЂVi+¸?6(–/&[ÈLW»u&»C•B×èW˜‚d�ú ×JãͼM„ /‚{Ë œl–Ǿ “€( ‘ÅÏŠ fZ"ž£žâ^oOù[&a|ˆï³ÐQ�¯¬iÇyFýŽ€JÁqUœrKyž1wHä ePÐ˾½Ã!Mßà¯Ã°+BñWíÕÍ´î0ØHŒãNPM6lƒ,ç5z9B Ý¨”¬A$Ò™öЈãûˆH«ô¬›á¥=4 +®w»„ö:2®2ê¿­ø­©~ø.D Å­û�ñ®�öçÃŽu°åÕÒ¼ÿÞ·~C,ËÆÖ%Α©½È2«1Xàhw + „€�{DøÑ޵LŸ®uVô|vM ßcZ˜çó­‹çVäz¦3³æ®c ¹Tj‘†ëÜîeÓ^ßçQù=BÍöP_MžW{Ié�yžö\3Ú¸úÙ‹Ó€Ùd©¯G}�y—SQ>ñ›íÎqÓž‡F†�ô¥Šú­áN5í-!Ôêc‘ òÓPîÀR‚¢#3¿›¼ÜBh>Ò/ÛËê–êƒ=hmÞ â×S‘+-¦Öv½ùg¯—Õ U õ=Žðô¤2Ô�hvdã9l|0ì1[uhs=öÂaÑ Ž"öLvÅŒÅá²çÐó»UË€Ù›´¦¯³¤�=:QÃ>�Ù2 `AÀc1(!=j` E¸ô’A0ÝÄ¿5–òG€˜K°b¹ÐzÝá)^øqöêE�w÷õè‘ßÞ5\l–^�¢f×êÆæ»õèâÔaô™ëuÄ—$s¤õ(X,+ëa&?•©¸[ÇzG�¥Wµ)«8ü:U ]ÌêÓzЬ6€”\Ï êÅzKÎL}*î"²Þ·£øvÙ¹ë9›¶å•€^�ª|Ïȵ—ÈõÐð‚xCÜ2Üz %[·ï­ÞJ›o‹ S�\¿þ5üªG#Š7Xé¹z€˜âºSc…€ä ê÷Ø �4 ñ¢vsfô÷~JNI™Ò9°p!àüe7‹>éZª-µ�§d šSt¸¦`XA³”f +:·i›CmHGª¤ÂÒ xwœ�L£ÔÌ „P³–è4åO5åžSêù甪²Áe£dÙÈœbcJ¦�«²±SʆNÁ*¤¹Ï)eãÏç”Ì£²ñ)Ie3§PÙXL— 03S¸_p6lc#@�U§¥}$K4™z€_O´ÍÔ[êáDJ¥Tê«ÍŒäÕÔû¡$Ø­ßaucÚNJDø¤]´Eg +Gê²P;f0JmÕ†vi­ÓD;:Ì.Ú�rƒ#âmÑ–‰Ðôë5iûšzõjh35«,KÌZC}Þ‰n¯éÍŸæ•b®¥¡±~^ÿe6j}Ñt‹lykæ´Éªz¿•.Óžg²£•íéôŠlµ¶ÎK¤jU³®h/�ÞÓÛ»àFG}e^e‘W‹ògZe—ë´ÃS¢á½žšÞ^,B­²<´×♡¦™mšqÍlÍ’,—è|·M[é9¯´ŠòT»ÆÔ<-!^7õkh‡eæ3[š-)Ÿkzç*þkzòíÔ¨n ɾfßà €€DA„@•$)÷ÓÄó�fêÈšz·/@¸GLk�˜›f·Ò 0ïÚ,õNé¥öó¬™÷Ý´#=#·™KZv—÷Ô="=ÄD-5ëp?,4æú:’ƔӡcÐJDAD dƒ‰ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ0"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ˜�"ˆ b€"ˆ ‚"DADADA>¸^ÿ)Âõö·Ÿb¶ßWÍ€mk¿´Ÿ¢ÿ”«Ànx +÷ |ÿÐë§T]N ƒ»úíwöÿ?Ñ?ü[Aæ«pƒûÿ@m�Ýo?™æ@åKfÚ(Z¨[f+Vù›íS¬lÐíÿo¿ÙûŸò—5ïÚü”`ó›ÿ”ß¿úþÊÍÀ”ÿôSþÿùÿSÊ÷×?…þ�rËã”cþ3ø\ò–Ÿ’w>ŸÇÌÀâñ‹×Èc~ÈX‰ö +lÁëÿSl,ã ?åîAø h�ø?G<áKÞ§äËÞ_ŸR>â§àëSö>Â`v‘ú~„߃µûSŒê³W]ÁO¹ºŽ÷û”º;ݧÐÝ^ƒ×¬°>…Ê´^w}Ê- TS^§)¯²Ý>ÅìgŸBöx»ëZŸRǺէÔG ‹ +3@;å�¤Á*}ÊK�ì*û¬Í)¾ëæ9eé¿z øxP~½à”ú€Þô)tŠØa„øM Ò§��ô(ä`©èSü)ÏÍ)9…*7g`sóžBe»¹¹9¤;‚ÖG0³û#èŽ0Â:ÃjÈ"{ʦ­UP6à磋vkhŠÕJSm È|î€T:VP:XÏîÖ]³5T»53;3ßÝ!úf 3µ²ÕíÌnSn6Åî÷;³gàJM·ä¼­•MQ+³°µ)tt7Å嫺=»³œr6»)ewSÎ&ßÍ@·Â€™™™YÙ333Áf8¨Š´vµ²²°ª°°¶ªfÈzi¹¶ªÌVɦÜjkJnU½p ±.Ë^U®)5BÍÀ_S*«¦xJM±Â²ª)U3T ضZ˜Áe¦JïMô”3ÒhÛ6OQû¬;ÅfO±}#ì ì²í)ö Wx¬)ˆðSîn»q3p÷³€3xÔ˜�F‘]6F6Ò†é†Ç¦Á#œF@Ó�"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ ‚"ˆ b b Ç(V†ãðpGª<Ì€Þ¸�uÂݘ��Õ�¼1å†U΀oÜoܘ¢7ÌcLÁá‚cX`8sï1¦‡5q$â@S Ç•BÇÅQG�à8¦à€…˜‡c +†3Œ�‘%‡Ó9FÆ Tí”çpŽ2¥1 ¤ÌF§ºëãcÊëÃÞØÌ)›Ci¤jŽ)™™c +æ0…rxŒpÃx•Ž)túËÿø˜²jÖ¡ƒó©CÇ”3ªcÊ?ðcJÝu +~LQcÊ0d´SM—dc€jY= ãáoVêÏ·2OIú‰¶Ô?ÊàÈœê.§Ü€�òM#DC½Ü`ÓSüÅï+—L¿Jôíá®ÏÖp +Þ_õwYѪdFxf…™dµ{swUõ5C­à¬ÊäѰf¨!0€jG¸²™ÊeXÂÕ7 %̰3¸„-ª4ª;Õ,E5…LEä]ëzŠ×Œ^[¹¨X𡩦Õ”{×Stu£Âõ‰{x½.Ý]ý}W¦ê)êT=ðUOq©Ëmõ”Ê€ÔtÊzŠõîz€˜íòÖõ}¯Ëíº=ÔkÊ’jâ»ëö”Ûž‚÷—Ýu¾§ø¶4¦=åö”Û�Ý3ü‚ó ˜®h�L7ZTÌ È#ÜÉ!= SÀOUe—Uó›-X0Á/«*™×S¶ì)$ TqeeyJ•«<”–…<Âí<‚•g°µÖDW¶Möz8�¶ÙSrJ¢Ùh¤}¶mfe—²`ÏÀÛ¥˜M^2Ù÷“²g¨«f`‰jõ'›lò•]d3 IN²§ØSÈk¦«»SvwŠ"›<¥LÈU·k>ÜØ nwg¨½]Ü[ªZª\­­ÝÚ­µÝ +wwww÷;eswsowJéâNÁ]OÙõ”õºÖ¼´v;«K»;ewÊî ¶©#œÎ°š8Ã>¡O¨ØWº+@Pã@¨P Ie"¹,�5ð€Xp:@FZJF”IdbšCÀ`ÀØ +~mµoâµ2´×“â’ÂKä{!fäÞžûú`†E‰›ÑuÖ^|‰Ùgm5@Žäl[… 1ˆ—ö†§‰€< +ÛìÝb¾® „&޲Dfbߊ¤¦½CÉøÙ@ó#©+““…ð·òÑ¢`54ÙbÌ-ZC’¦ð~Ó³èÑifAUý×T§ÞºÀVãTÞ@,ê ˆò ‹Ôü ®7#nÖSp±V·Ø½qèžÃào .««RD!aÈÙbƒÆP¼ª®šß'ê —Õ#HU�ðÚÒÀTÑ̽ 5.fv‚Ü„Wˆ +ÞC·‚;F²DdpÀéÒ|ráQÐI¤zY+ÒaM¯<&]Ifs‰ÛåÏ�G�‚� ™'ªM«"Ä�þ×ì~¸ñP#Çž ðguc¯ŠÓf¹±÷]öÊ� ø|ZzÙ÷³v,¬M”‘Œ$#@ܶkFð­ªûPR⎠;ÛÔYýº¢Ðž4 +ìúmPuHÒ¾/Ž+D�†²Ë˶Â'Íî·?ÙF‚óÁìÖy†�ÕŸXBg[¾þ´À.�-Àô ÜQ@’ +-™‹ÀÉn<=q,Aiˆ º¹?R×ë4æyçI}f™3jI*‘dÀVµSLÑŠ\|\F$ÒÏc¹3Š8#Å�‚î L�‘,è=Qmª` #Þd³Ö§£1Ä ¡"Y¸#âú•¨Ð�<`$êÄ|aIÏõ/Gþ’!ã¥Fa ÉT~oN'ÁÀ�,ÔŠ‰ºþ½Û\ÁEr-�w4@p + +säÅŽ�e¢jT_R#Ùï¬�ÜÎ/zBYB.UMâž$C²P+N”4’ûÕB�Bcd�P9¬°ŠRˆLA©_ñBZbÌãD=n?á�R$Eáç,+ Î É‚m‰p ‘�h eKF©)刾“Ë7`å„å Ô@à§ÇF€0f6îJ+ ³˜í+˜,ÃÜ�CB£ŒiØ\4—ué…î3ŒŠø0T'}’œ}jÈ,_ò݇¥ñóܱ`â—7ØK;�!/ç|â`1.H${U/дg½ÖªËžkRkÔ¤Pì´ƒÑÛÇh6!W[ÁÛ‡ÆT¢”%œ¾÷‚§ÞÔÅ +o¬B6˜°P™@‹—qQ©Òm%ˆ +åQ­mª±qPhî_�- e3yÒ±”ª*¶Þ§ÚnII%CöOˆàÊ^i îAF†9>øIî®ZUØ!‡àr0`E“Çå¹í¿E»0„#ƸökwŽº‚c‡éi2+…q= Øp� –^†§a Å÷©‡É—¼!T±ù^;‡bQá¥àÊÇÑʽïZö)ýèvt!=Ó¤Õ�š*U H0Ñvv}ý¼4.Ã^²ËhÚ�8Kú_;¬Ö»³-ð@£ÝÊmÁÈéÈúÕüâtÃJ™|ªôxõð_H^–OêÕ ÈÃlébÕ‚!0@¾æú…:$*L¸ýò»“)úN¨q‘ú +B¿‚œúuë|³þŽôµy'ió¹!{»~>²@Oꋜ™Î+vxN9ÜÂäÚ�+Hë'ói^áŸRÆ�î7îø,t·€€çß_œòxY˧Äém\°R¬QôÜ+PÜ¡‰†âM²÷^0ßÊqç®’’ä7¦Ò23È,ÖQì}•QE*F�gÜËË*—D–­E%ŒõÆyÄ\m÷¿­ÚRÚ‡A ^³£{ÈÞaçÁUb9¨‰¥cð�0toì=¡cà84Ìl€Í@äϳÕ×F·i9”•Š?—ÖìÑõ£¬ž}W'œëésÅ8ÿé"þ³¦ &͵ìXûïBÚÇf�J¨én´†3:ènÿ+ð'`Í�ñ£ã™k쬷p[ä¶4ª5)èº7ÅHJW\·v¥òá9Ò;‹ö|‹Å ™qޤË) 3A,)´ �I3‹à_0YÐeÔ+%Ыÿ]‡’šuÒøø×³»ó÷DM³¬Þý+¿ø]�«ÂÝâkK(«oàúP¨‘8EÓ®±^cuœZ9ÀÈgzWºõl“t7iÇ'ç¶ß¸Œê+&GÏœwÆSx#[iA碫4›™CÈA?ÇTd1ϸëZkb‡Q€(Öa†K€jÞ�´ÉÒŠîÑÐ>6ËÒHT·Öi: ?†X<‹6ÞœXÏÐÑCêq-�» ^Ìù.Øà&·«q��ÅÅØ¨¢j£ÈÓkÞ{‰ªϺ7ðB¾˜Ÿ9 +¤Õ‡^ë¡3 §Îy¼%BËÇ�ïÜ#Fõ† +A|ËÃN‡£äö¼n­›ôê\,£‘ŠùíÒ³©+¶Ùf–ñäWj' \țҕnQ\ä?�ß§œj.±š�J¥1©P=JŒ©5ð>.’+4±q�’ƒ6…Íd1n5£�~6}�˜ö¤/’ÿ—•òõý°-8iâÝŒͪO ÍÝÁßsBŒÉyÅNótÝÞ…jXÏRÉÍ”G6@xv¼V/å¶EK0J(~Œ)q¹ê¬™ôš±¶@ÂP‘PPPLÌuî ÖAöj¸åÂ犯ü0QˆÓ×åg3€µ‡TœPÝžæð¸A˜¯è… kBä Ìî©Î‡›<9š‘ëI˜Hš³iC’m� ÏwX“PŽ’û/wu€Ç �P*Âv¸«þD»²ü�©D°§éö±,‹Ôµã'~õí0è¯>ÿlYî<ÆB-–KÏ^lODH6dÍ×ýdD›ýEÎŽ¤HþgJ˜% na�x£9Û©Ùm®Cy²³Hb9I•²ËK¬àE¢ú³ÁºèÎ7àÐ6:à¸BL^ž²q4£Å¿,pn—7{Íù�Ô ©©ß®FØ©±Cpç?³ L'x×�qyÝ~m”#Z–ݨÍG‘-¤W–ùK°ÍŽWi¤¬ù7Hur­Ad/+�}oÆÈQV]u凗e—X?÷~,ÔQ0s€2úp‹Û†Í5ÿÎéz)ˆÒQ3tÿû ’y#bl*ªpO…­)ûÝ÷Eª€Ò•”]�­ª±E›ø>†»|Í ]m4‹ˆš/hw²¼ PC0�'Ñ�×A(Ç#üÀ KÎs¼Ô,tL§i£/ºÿcRKüòQ˜°äaüa€R† +ɉˆeÆá¡ =�¦9i�:©£µ¨¥»{±Š×1¸ã‡/¥„×{ë?/™#€!ÉP¯R©å­=Ñ®³ØÚÓÓèÎÕ­=ÜÉ“› +£�×üZ‹‹¡Ò6ßôŒOφüZ¨ÂMÓ0q©ªP"Åmê"çÿÜk=åkûÍ9 ÃË+¸·S­é(×bŽM#€�ò^ôCM òÖMÞÓ»Ù#4Š}§ÉI貫œ{�=—È* «9;¯³ïŒ !3rW|—‰Œkë §¤"ë«x"­Ô²/¸5Dz;0¸@Ê^šÈM¥²ÏÃhËãØ–ýF0Ï-gh¡ûèUíR8=‘ÿ|ÓA,|ûÀS‹ ”bùG•!¼ŽÉ¡d¦N!�bÔ2*ïè‡BÌ®ÌVç‹Ä0»/b‰³G#Ûñ¨²�FÆã*·AªC¡½A`Ž®Ã0öwMW °©RŠ^¶üúfЀ0ÐN[dÄG$-r¨PCȯÏìä“[‚õ&ÖÇå}¶–}-)Ó\s‡LøëØï»¢N­¼Š;:½} Y,óÕ¯Gaö@úŠh¡I©§ ûó�ëÇQß½f²¥¾�ê«BH8œæÄ½!(± Ⱦ‰`V«J&M/ÙžèÍå~àþOjkK_ºúÃDcó(•(µ¸|–&+ǘñïØ¾˜¸®P˜E·>ç�«¯Ì v§? ã¼5ç3]QòîùË£}'›ÎÄWY´ˆæ—€£m¬¸'Ùž)p¢1?AkÔNéÂuUŠ}Ôå h2Ö§œÓ:ò>ÝBÑ,>¥u»ØXÜöˆ¯ö (+UQ*×,�¤Úr'}̳ʼì³.º%�>ùZ«ß�z…q}}tžu'®…Fäkg&TÕ×)EĉúÞ¯Œep@&ƒ[Äu|(óÓÈPEß/€ÓÕÛ鉠ýLLò"áJüÐ_Ô¹"Èßô⧆leß‹A1 +ó“ËÅLãâ NøŸ•—¦×¼k�{ô±¡qˆyubøƒÀŽ>4»HbÊ«¸_¾ÖÌ®÷¤{;ð}v5`”oæhš+@õ±äa'Õy¼‘èÏ»ê§ JÖíDP”ÈÆ‹Ž2¦��D$%ðŠeA£>,ž–¤ïcÂF„Šwp:°£!³�ÄÒ,¿–Zü×-bÁ:Ï5¦mÙÀ¹˜¶þîGÊÀм:À±šp�@žJEñ04`Á´‘.9"hW7õ{q$ ðMÇo˜ž‡ vG_qꑹ“¿í#eˆ|žÆäv$n¼+~¸<]'QÝU'QwûE[íƒâP¥*ÖŒTÐUƆ¦LaàÕ*Œ ÕB6ƒUL¥Ñ›×™[ gå¡j Ì”Üó±}éÞfÜŠ‰¾žágf«�96v¹%ÿOú µé'æ�Ç_+jHj(›DÁñ@ÙàÁOc*;-šÊ'O�ežõ—á”l# %C”ÏÅek¾Xdcžææ³à>ÿ­šé1UÇ,¹f@?3ѽèïL(ù¢ôæÃ³’°Ä•$o�éå‡YÛÉÿ3Z?èôykMÔ_Á„›¡í|¨fÝî¿ÏC÷-|dž°±aÅ¢ïz9hù”jyð2â9r;„Ú Ä¯ÙÍþwdÐlÞf2Ùç´ ^Z[á]B ¦oúŸÆW3û·¤#ù M| ¹ÉR*ˆåZË+¤T�­�…íiTÞ¿àsÉ1„ã3%0æ6³çY¸¸Õž?=2Þˆ/G¦¢mùÀ%·¾h�Vz’¦kp¸J‚ز_Ó1ó *½Ò À¨¼Î'Ûµ±µM䎈´=ì´súD”:STkžþȧ†Ô‰^KOó­ßW8¬Ô|ÏŸ•e#ÄN9ø�û+Þ÷Íd+â`þш +l|h,Ð�‚/~#‘mAÉ!‘ñ¨ç#Äú²6Û¥bV‡R+š2•†Úá*j#žY¨ø¾³Ìâýˆé˜ò¶þÀ_ IBm2]Úhàš<ùt�ÉÄøƒšRv°ØÒˆ¸ÈXö`¥�0çÇGTQìj®SB´·‹ZøÆï�IAP¶F‹rœX„‚{ ¿Ùλ€²ÿé5ƒ×æ“oSäUY=Jƒ”kãhá3ýØ/²g(éN(ƒ#I[½;aªñtïK�j� ß_“=ÝeSL×Ç)ŠˆMb•œú`÷šC¼Ù&ö ¾DÑ‹ð?ÒCÄ�†÷3,ƒ«9ü¾ˆW¯y +@Ñ4*½¬Txp²ilc"…³ƒ¯ŸŠ¹˜ Ì…'^C™ u¹/‰˜X5ø$ÿ~5s'¤?¥Xô!DÓ2� BˉùCÂ8Yd%Ýs¬jþÍv1¶ª«ÄÏ’* JJ{hn�¼\z¥3W1bŽ\Ç�ner²ä¢ È`)ëtÍ#Ë3œ¤Ë�{„ÜA\éŠÂJ|1íY�Ý +^�@m‘úÓ¯„+^²“J@Œ´`žb5²¶r¨/H¯åú1cÞ^ϯÇ&ÙTˆFÂ0ÍÔ BR1|s1*$'.úÙŠOÌþX³Êœæ'ÅŽ~¡É ׇòg1÷ ¨Ý6¼Öè;W4vtvñ³‰Ý:l&Ïpµ›ˆŠâÙ‡!¢· +XªÝ{b®�‹RÆëcU/•"¢¦›.ĆMb…;ˆ-Ê£ÿÄ+$ÛžP¤9{‰Ñ á;7j¬¢ q!|R?w‚%«W‰o°$ìÛìC„np½í)›Ö!™?òÀL øò<å%—½úÎ{ÙT`ž¿Ý� hú·z-–ƒÝ«Þƒ�i^û§yWÌã—«9mól¨Ü(})…–kí`±<¥ ×"um +÷0¦0Žh¨ñŽŠW‚Ö+½¥ØÀH»ðœ!‹à‰ü܉UmÐÔÛ”Ô¹ã¯#Ÿ� gD­ò´xgæ²úÁ Ý×%;Çiûªcñ%0dËÈ ŒSÌm(ð”d ŠH�äô‰¸NpV³ í« ! Ú\PtÊ/",‡Œ”4N¡Èëß©c2Tk/‘·ù WÉcãl0.Íš È–˜ìíãK¸Ùãöü2)KÍUžÄÙ4{ÐÕ«ÍOAñïVt$ù%@Nmcb\ Z¥Òºî$úˆšþù?ç—*í� ö)>Ûæ¬‹µ¬© ekê~ÁÍ¡—Wþ­”íËCñT´Øhƒó|á9ùÊEZýÑ^ÿðäï5DúÆ? ýÈp²馰óÈ¿ƒœZl�·‡m¬NÿáÜ"ÂàAßR<24çÌÛq©Y%ÖÁ0®¼h_,4'‘8„5Ô9†@ÃtRÃ7icºÇ‘ UI§ìÔ³yGE€y]D3Þ#ަE†ÀôqñÏbáû¿yÛÖiâŽd2á3Â%E«î�Ïzé꫱TÄêÊ@�`5$Öæ"…qÉÝf}7 #‚¦<ÛA Öi +b®oU£—Ïù IEÖÙj>„©æ´–ß.çM³×*‰Ûˆ;]fKù£X?N*V| Äš½Dñ¾…ÜDÛ¦nž•˜B +¤µ»9¼jËŽè(AaPª÷|„� ¶VàßB ×4©™¼PÌä6y�®AXû±Ì$JÓ·èÀÔa&OõÞæ€2rxbiÆ¡ žµð¶~!Qªg”DÉÔ3])4b¹ 6¨Š x‰ç±óáÀœ]ÃY„Áåߤ´#Kdš2_ =*£b­÷ [5SnÄ¥YZã¾ú·múb–Ø“×ܸèÀ]@  ²?��6QúIªª¼­ @•c —Ü6T.Ó}+7³˜æÉ¿>êÿ*�âà0LfñQiJT©�šy¯çéBú}�Ûü3ÃZ—ìþþëlE(¤l×…ýÃï‰ÅÙoó8h„e`Q¤ZÉÚºë á4ŸfÓ +t€/ˆÆkn>H8nGA¢ñ÷å Í‚Ÿ2€o|.L$`Ï`õ‘ ªh.‘x󠤻†ÈfíT¹ü*žï�ñ¥ô!:9šM5 D1eçð 3¬©4¤ü6ãLhÔÒäG³¸|:�ÁýH¯ó:4it˦u.A)Þ$œÙП%ì 6.õc ¾!‡•E ð�îQ*�q¹Ì +?oç‡ †QzŸ‰X¡Õýô܀ܫIlû9Ä©ðÍþ›˜i÷¯7�f(ÊCõ0“7J¹§ÒºÔÎBL“h# ôM9ˆÊf±¡øk)Ë:Û–ƒs,ŸqŠ5SªEÁ(}Gµ¯·ÚÛënØNe|¡µìªFÇ*�[±j„_dKÐ`m�Ž4 TqÒži#ôq M(Uè»ÃØ"²ë6ÀªÎBé2°êÆ®+2�½ ®NÜlçÃÏ’¸;‘`Í y2KúÚÜ´¶�Wù�ÓI[²%ñ³ýu)j›ÙR•cìÿü&­¹é�qœÿ¬-˜?ÕvÉ +®¿\Àµn±M‹N¬b ÌÔÃ#Š2�ÓÒàýÏÓIÈ2ݘ®ãéD‘ Q²h�ÃÃÄ€K©Ûü�mAqÿèÄME’ƒîÁÎÆvm.¬”ä´ÛvÏ`mwâê�½Š‘B‘bl]sV'È>—¡°AŠz <)bÒÅÎÎnÁ-kÉ4'SàZE¬Ëb±îÕÃÓÞB¡ÖÊâPpˆèîíÈ_a\JeÎvàR"¾™ê¯å‡‘nÑxcy#I"=*¨¯ÑÕ•~õ¤ëYCÇÎÈhž6eS­ñæá¿$™¤FoqQ®¾ªðþ¨/¹uh¬5i˜#ã|ËV-*à‰˜º�b È&d|Çáu„5â—­ð@ý .õœ {,ŧu%ÚqËÕª8þ@^°®zÖ‡ÆàR¾B�Èžß”áá¶Z *ãPŒñâ\X6/jØ:Òßž´ôÃJ‚Å^[XÕÕ` ú¸D¼é'^·êÇNìû‹a¢£Ÿf(È’aÁÓØÂݸø^Æ"߯ðWxŽð¿s�*˜>{þ4˜„$Q ñf—ª­ Œ`:²/^øïáѧý¦¾:ÁKkY¡-ü…è2“íeŒFʉí¯tôâ�Z¤‡š|ÿHÃ7]ÆÂÅÏøÿ c‚8StÛ‚ì DXôÚO¸“³‰ ÅξíUÍ™è¨âþ‚ÅÏ�Œ¹ÅÖú‘M˜¿8�ÎA) Pû-´ ­­@G¨Én}¯}g  CÊÉ‘Öá¼-‰¤;'2Ê4XIZÁ:¤ž¢ÏÃ2oƒ�/ôS1k«v: +ÿwBeœ07�»Aú(ìŒ:¼XÂ@D>Žiâ\^¢Ìá‚>ºŸ@]\|ž,(mìx¦²óo't6÷Úá� �ñ.ŽÍ>}¾Þù�I2HÝÚ{“BM€Rðµò°*pÎeý½£›­éà†v™øLúؘ‘=zÝÎaƒ +bõŽ0ÌŸÑèa +¨Ïb&1j¨}@°ÕA"Öh+õ®$LÏ(Öó]áL�ÖDAb?I̶D¢ïÜÀÞ~‡4pá³+NÒFí¾‹°¢t›ƒR1”/c6×ìzJˆ¡ƒÿ[<âNÒ+yàË6—Öá±ò<ÒÍBÆ–S!n�0Ä&¼Îç’|´¾ô`¥ähírqÊI@J’‚eLŠ¢¼P2ÖpŒÎ¦MË¿wé\íD.&ÔNð6ÂÐ-®n6 á^g¤—v‹ØLm‰:9_¬‚¥ªÛRéº(VOmé*ƒ'ˤHÞµ{¥¿Ä¡Z;”" +[” n;¡i[ÄéFcÿ5\¼5uºlqv“íD[ `8à£$ÐnŠ +†ÎýÉÚ½Lj”KêÆhEöH6€ýi�(8mÚÍ g?zqùÈ=ÇöYžYÖî V#ž] qÉwɺµYwjwÕéIüÎ8Q¤3B¬ŽIL<]5ãSµè½-‘¦0±^2ŠÈ°hõ(a‘qR«•“{H¬û‘ö³…¥TÐïXˆÀ…Œt0$›4糡{�´! dä~>@ÖZ¢ëE ÿ²eöع‘~A/q ÐeЇ$ØûðV5;Ê*ë]"iAéA�f¾"M“bãc\Q@q•mÜ>!b4ô‡;À¶ƒï��w§“ M¦’lršXX%¢c=\¸é�´A�”O¥¼9kùVÎÑ+m\Ê=uɨ$ŸQ‰„,6š[¶Ë´£^ÙBk]à!sŠ‚KLäæ'6;“ÙÂgÌC·ª°¬7šbd´ü·àÿÓÊhi|ªŠrVœÕQnŠg£•&C:•Å_X]Dí;°R¬“qyÉá¥u¨ýsƒa½WÛk™ ÏÜ`{È’£I)ˆ�}ˆ®¬G„›Y)®î‰œ@Íì½Hm3˜�rø-#5>dw+sÐò¤U”‘ƒ¶GN;'”Ñ| £d ̘a^c(2¨$0å™Â|ìǼ+G¦"' d<†(äBFŽÎ|­ÑމAú°�Æüýa”›É*““ +-DÂJ¬«EA=9LPêÙóoµåÅßEfGîû%2Â%škB3qi8¬Ê+™²5Q€ÃYYóú‰.\ÂÌ4,ƒÏ5„üÎiâa}Ø”àôÁïÊ4Ëœ”1`e<0ì*‡Ä=qî5ãý¤Û©Uù?ðÄJov~M!¦ 'ÖIÆG¨Ò×ê Ê„åçLƒUàÌŒ„pU[B4àÙÀqÔ*Œ/–n®´Yð�‚9™8=c@ê1WÃïT #—Á:IwÖæš˜žtÊÔUJKìJÐ…ðD‘\ÐS:¼(§Oʆ ð°¯$Á6y< +·I™o�ÔQ¡v=ãŸa¸ÍŒ9x*áõf_~Áb÷ëôõñòÔ>`ò¿µ‘±éÅm_é\Ëg°ë6³8Çp§þ}°!”è($eÃ%À\¶fÏ}³3ÓÊÈBkñ qn^©;û¤46¬z‘_ž7~û±UBt œPÉNÏÌÈ{6—!ßàGØlkù)?À:Fj¿Â…¼6�yè¬J5ÑŒc–ò �¨ØÃ� «bzDZÖ[Öé'™—9ÕÈÅ♀‡0´¥ƒÇ=d;Ñ£ÄYÅé­pE2ü£ +läEfXÄMðG�q¿2UL÷"‚Â~SR”Ý]_•1Šø2êÝ8þ-Å‘j³ÇÞ½2Ùž= +Ë�°´1~¬¥DB‡õ)­¬o�k¡Òn]DÎA1�¢tÖöãšÞn¶/© +ඉlµØ9§àºü üYJ­C†ˆøDÁ®/S‡}ý‹CüÂø×ÛÔ|‹N*ì‡ÁÖv�õþ�±�ì6·Ò÷Èñ?&ÐRuëc¤L1ºÇ”hÃÂ<.k˜;6üðDæµRG“Ä ¶Fdm�UêÊT¯ô©½„ðyúÚ&ADŽû²²V+š?äʾÂ{YôH‚e4H…œa� èç"ôÏ7mC¸ +”g Ï̧€S HBZ¯<>gx¼ 5(Ü +ÚWšÇÇ�(¶I6Æ3À‘P]£êw‘f‚B¾Eó›GM¡êÖ�T}19áů¶Ž5‘Èk†3TOa�³�˜AÛDís»²‘ÍþÌ�0]‡ú´|(Uvyàwkk(£¡š¹šWYt4`tÔ]ëåní\ ~·Éò\ì•#4ÞÐ�ŒŒ!»·ŠÐð pìÆû€»v=Ý+æÊ‹ù87ƒé/@ŒÂ�\Åß¶›BÐ,9Ôœ±ã4:Þp(Ì7JL?BöÚS2‚–<,ù¿Ôð‘1sªÞA9^×`ú6|B†õSþýkÑ€ñhz¦/fl +€8ئ’v�¡* ë—™j*. +Î`1 Çꀺf¿‘³:%D™i¥¬Ý®ÕiŠgtG£�.¸öxc×¢P±;ðb¿wë•¿&(LHæ1½`÷ä¾ü\“7#G¬@3%”†¾�q>Cd Æ ÂT�^>>C®ŒLÈÌ„e˜T½Ï_"_�zf +éMè_䬵ý&†V¨$Ú˜±Úª+:zÔ^¸9bL›ý#ÏŽBÎÊ a6•_UgE"$ ðJ˜éJ€g«I¾&¤¿],�ñ%þFÈ{›×hï-RÆëk7Á�H±ò¹ªqßünq±¥MÎÓëYM"BVËçO›Û êCŒƒÁóRýþøRˆ8þ,œò퟿-#�Þ0 ¡êÃL¾0bîOA³_–ëÞ–g’uvò!YÆÌ‚ššHÁÑ1£òܬ€FùÉKPwÿ½Þ$ŽA;j¤ó|n© ÍË1°}Œ�ìŒÜTÓ=¨«úúÏ·­8Ïdñ'š ¶ô–oŸ°©5û“À-ÿ¯MS©î"]¤B¢�ÜŪ˂Y®ÎuÍhÅ�¬s4ÉŒ’ãà(Ì*8gúJ_nä‚~’§¿6YÐÚБJøÓÏNšò¨‹@CWKVÅ¥gÖÎ5€Ââœ4Ñì½RÒ™fý5òŒâ�§£ø5‚ý Õ³f.³cmßYã¡Î,õoèý(k¸ Ž/á¼&ÖU¤ÐñÏtˆ6D§ÊæïÂx²®â±à�X!—ŸŸa6Ýg®*÷nä"�V;GVv›zž�ˆŒ`[Pß*VòìÕ¥G°@íW¨) Ø&s»ªÍ3‚0¨É…IR>¤jbÅ“€§ˆÑ¾‘FUVDæ{¹‘ÅHÊ„ÄYÃb«¹/â +€áßùÂðcÇuè °ƒû\È'²1 UÕvBèŽ\bÚ]Æ’5 ò<#æ +¨@xãñv»B ÎA‹”¨ÄU�ˆ q9Íàû»òõ ”ä�·¾5�ÿܼY½Ämª-KÜöW�Ž¢ |ƒÜÎðÊWÕÄ̦áYW©š~P�ÛÌ¥vN·Äâ BuVŽYðk´9X$��Œ ®K:]Ï +HŽ’MÜõåܘ¿ºŸ q˜Y79B.¨ä@Á|%Þ׫ø�Oc#Aö) õåBQ©Ì&�TŒ5«+ÒÂp˜”p傉™VƒG@ûu2Ü2ôù5l¤Rä™ÿÛ0Ïj�âµtc7+˜ô“xÎíbêLø„NeìrÚòÍ@pƒÂÎO…ÃçÚ÷�Sl·%^xRò)’†MùÄõ”•‘ØKjGxùM±µ*=åš±c¢$NwPX*O/Võ2 FêÖ1ž³Gg8_ˆLz–Û¼Ä�Í¡ÉEW:t®ÆhWïõÄ2`«Ç3&·À‚šÈ4ßu .M ƒ¾ÇMcï; +íèìjèæ¡ÏG8^R#LçÜP�º«„­üú÷l‰9àÃ%Q%Ãûuo�Oظ×ô¾…,õø¶:Ah†6ÞB}Úa8ïìEl±ÊÂv®­;ó�„aÿÔé§§¥NCå·ÅóPuwž6ÃòP2>È@÷DxH‘0ìšJ¢ He!.p¶C-u¡z,GT·Bÿž]jš§Xœ§Ý‚ÕáÎr�´†ê:–r›¼&c'_ql I™Ÿ=K>~ñ¢¦'¾sæ†Î£˜ÿü;ßè�çÒ¸Žƒ žiN(£_Ö,ÊVŽY¼¯ŠKùTj'Oû6}Ðõ˜§fÞZ¾må¸$3IÑÂÃ~´˜Œ^›¿I6ê#dåÑ$V³y%B€ÇôuªN=Ov|}TõUª“èœæ>bmÁãFÎüÓ-ߌás’àÍv�ÁJÝÌ™¦êÄÍ:’t˶™Ä@›•67Ñp~Ô|%W¢àpAéìšù„³f#¢jV%?wôlk2<Ù4³èLšM™-šõSÐ,t/­ï™uÍæÌc§™ùþŠãŽ™µUä¼ó j™Ù½”™ ä,‘ОdVø>ꙑ-·OG^ܯWÒc抟`ÄÌb0ÌF{%›Æ_)ÛðliD ©XÀ´‡ÞNæ]6ãB1(—}¬GcGpYò…(á–ù‰Å@¶¬žº•A»¨e¥-chÙÐ0¬h–yÒR&­Œü„¦çÊÜ«ìó¹ŒÛJè“2ÒÊÂ2ÿ+Âq¬Œà?ûXeA_‡ÁT™e,g<žuêŸTVì‚Â*cÊê·5§l¡æá‡ä‚˜²øpH›RV }®xŽRæ·—2Ê>± „CõS¢¬w„²SPe”Ü<äc4>™ð%O–í­NFwq²‹"1›l7ŽÁ€&3INg‘™’ÉêŸ$~a2ÒŸKv%�ïtk×cü6ßÅ’ñPÉ,f”l˜­ +Û$;�›F¬p¸$Z0¬‘È•"Ù øÒû·Xª æÒøA2££Ù¬Š#+ŽW­ÍâZªF¶hŠwYçzÛƒÚÃVÇšçv•%cre{nçeLös‡YÊI¢Kn�Âk€Öl­è*\Œ³ØÔ'�ª¢á¢]¡M +X½rºÙôdŸLCn4�}`—ka¯kVÊu•¦bܤ ×tTÛNë…½¹h<œ¦žíµ�(]n|�‘®Žò.ºÃ�Ñ…¼ü7]hB�¥c +ºø#ð6(˜±!0%�™@纣Šs±8l.sEµ>J†¥Ì…AË‚�7ôè‚XÉ¥y& M ¹Œf�kæô‘‰xb÷¸ðOq\é4®+ ÆÅÆÕ ÓcÀâª]§E&*xÍ5Ÿ.† �¬ñ4ÂØ•§NáòJŠp…ã3¸Œ ®\�.ºl€ëPI‹W>~Ënô­»Ì±«Mñ¡Ñ‚“iÜÔ”i'.±·ìZ¨€T›ÔiãÞEH¡-¡Å÷4L³¾÷ó2jޔ邳el„ @(±“ô`˜¹7–ƾöôó"ãpã“á ˜�Ó –­-¼`­Ó1éôYÂTOf*û=¥È’u“ÈhT„ۀɽÞAÄŠå‰Ú‘Ug#ÿ­'R,Ûº©%Tж#©"ßå &QGç ƒ‚Gú„±ÆÑ�Y��{RëQûD¤ªf€l3@ŽZº‹UÑì^x1¨¡qÅròÏL¡@‡9bº £òžN,“CÔ¬jÖ´’æHþáüZÜ€¸ˆ÷µŸ)U—ØôÜB<×ψ�IB åÍ U=áÞ+„ Gs³¿aÉ´S:pSWRl" ë“a±vÒffLO÷Ê“Óéd0¦ª,_ÏŠ`P⤅&ôíãØ,®NQˆ>%s¦‚ìJfÀgôêÐâàµ�!Èß«X¾²s,p<ìXtL6‹zKå7ü‰[PE!ñZ'v—˜’ñ'F=º#š´ëÇ`\[t=Æx“@dè0yU;œOSO¢[έâ^½‹£ÃÀ;Ps¥©P:¡ÛòW/ñücNŠKi¦FÒ¦_ ­�â’2ž‹´¤Løo �WHÊȆÆïÕð›‹c\ ‚¹B0F3â +ä•eb±í>;�‹%°l §�¦¤N ùpŒªJSi>íëÊIú¸Ê@3;ºÉ[‡¬R6£tG“æéezx�%Ò�Fƒs—–2vP}RæuvÔ•ÍgCˈcÞãk÷?˜/ ‚åŒãcÞµÖ£;h‰#4w|íŽM:AâÇÐd†äy·ˆ§µ[qNÉ¢0‚É”ìÞ-S&wn¹PÒgò”¾³¡æWß67‹º¯1›nlZwá'žêîþëäÆ4dÂd˜:Ÿ¼-ZælªÛÓe×1ÿwàö™¹‹ÁàbáŠéD›—oÓÚMxT7GjD3à³0|h92q¯=6à’´>viM+Xò«ÑX‹Hò¾æÀ@ARŽ_d"Sëg1s�{ªn +³ 7obB«E{ú×~ÏFÅç*hŽlG®ë™JE?ØâƒC×âákDë Âabޱî/ïË„Óà$T䔼Jrä +žrÐ\.BN"…÷Ù{ö¶ˆÕuáïqFïB‹VGH­Hf7꤄ ¾JdãѤ»›°d‡Ù$ ÓÌ¡õ;�Œ‚ÕY{­ÓU¥/=à=ëyýo™ÃÄœй¿Ü!UýÅtÂ"›JV¼œäÍá§oÁqÒëá€Hþ3T‡8\ÊŠy(”UÍFÕò¼¥â(‚‘{¢CSŒM"PÂ÷ ç§äb¦@W~µ «ì>è &üêv³�‰t�x“²+P2.7Â8úLX} "\59ò}H‡6rôŠá\ŠERFiæM¨•vÈ=Øg.tS…E‰³qD³”r\€á,^l¶'�éDmÒÊF¥|†P!MIP¦Ò!Õƒ6lÁH’í'È œÊ÷š^3hÕ™Û§ “m©ž(¡ƒ2ûXŒÜ´(–mËSy©T:R+�y œàOdÀ^Ó8×[Ûã+,+È\zZ–Z,Cû4^YeUaíeazÏo÷ÂS~ v]¥,?ïIÖȬévWVþ½Cø�¥¬l’ŸÅ‚ù]LVÑB3�sã­’Um’Mʉ,Ïg7õÚlhñ±3xeܬ9‡Zº�û\"WÀˆZ~¡c àͺ‰Vð".¾šÑG¬©Éˆ¬4ÉØ/$–l6©W18±�ÏÏèa=$°C,nùš©½K˜¹ëEj±j Xá)¶«ÄFƦ¦yWè‡l‹bµÎùö û°V‹ nî KI# L†…FDqXë ë•ç(+±º«ÃiZáç »°}7—X îbLôàÓ’#”S¬IÜ +帞U˜.paϪ.Z'+‚ò|ŒÛç×RÊšJÕ6�§ÃB¶‡â5,æ¥È—g€au7ÿ§Ìç…5},D�!•øó˜Ö�aYÝS}go¿V™ÄÇ2 8Ø«“—DƒÌ^ѨŸØ ªQñ%@ÏçXŽw�ŽzBõ4§BÀ#œÒŽÖ)ÀjO,(ÇÆO´¯ÿ…g�7užV¸m?T ÞKw%/‹¸^>=4·Å8“o�kšÍD‡¤Æs™äqL=š<´ûr©{%ŽDe’$¨’#ϧÚF*oÅ©�+œ­,GA4ÍW®÷ +È4)«²P!Ð(†l‡$Ršs[$mƒÚæecÙœfß°ÍÆBc”^Äï3À®ÜtdçFÑNo\•×ñrw[#ƒvàV0CÖí¹d)™ºˆÃ> ä1AåÖ‹vSÛMØQ…ßÎ=펡¬àü¬¤V…ø´oç»5 þ_TZf<9cBÐÀ®g3Þ²JŽÎ0ú,%ëWŠšŒ'­5³õ;�?•-ÿëá;TîR‡ h7}„ÉÀÞ¢à#KuË�Án1x�Æ{wÓ*¯©¤n¢‘-8}õƒ=OâR±#[Y ‰ÂY¦<QES§öj¨Ü `«ñoøÝN­TVU®Oˆ©½Ì W0NR +»ˆý�‚³3ì{4ðãT°ý÷֡ȋ͌Oëæi� ~ÍR‡œA|�� ¯µ(AÁ]IöÎVœ}²H ’ú€½†W âgŠ9`üiñ ,‹YÔü£ôb;ð½t9´šƒüÑÅnÝ#lQbTVļn?\ú鞃I˜,û÷øú��âHÌÇ6_òsb¼xL† %ý }{çiª¯&CøZ=FÏNˆ™*Zý lÓå",Üuj�|MHÞ®WQ®˜ ¼r·‘&i=P•¤ÙœöhÏ=ƒr®e!îb&~éZCÒÇôå4„óûf†*k0¡ÎÚÊ}è<Q/^ÙN£÷åh§x`%Uö`rG^7¿|Ä»ò«¬mÀcØü¸ 8;ôùžm ýQÈ­‹a°~ÍRp�þØðÎåÆÎdz˜¸8(W{ŽÓgAä|é ð 4g¢¬¢z+߀¢”3dÖgòˆ�t=Öš<„ƒÜ“žE4=™_Ô³#¡ûýe¹fÁ±ØªÓ“v­�/#c8wî™$ÕÝš2\ý5Óoĉì0e¸Ôu s`ŠËþüŹ¶Ê†¬È†8h`$¡ë™›SÇàž²ç ŸØzQcùÙÏbkÍ8–Gž Wuôrà�tJhÿ~€9"ƒ§8­Æõó¢—~(<¤XŠ0ÃÇ2õðƒ Vs;óBFéÚAUÚ!áãÊRj;P–ÖW ˜¶‚Þáôï"¤XŠ1™N‚8+ZZälÆÍú[ôsu$óôŒÞd¯r T—°´¹Px:ð ä=¢§\x~f8S†ß¬ê%ZŒ*Èáœ�‘yB..#–§`p¥|»ãIzÎÄ•¦®BGLݸˆÏ…$Ï.ˆ{© Ì€D¼BEl²fªY}óå…§VFÒË­aò"¤#BGɲ ­Å õÞ<×Oÿ?Çd÷ì^ØÙ´Ú4ãv"§€…Š5iîUerDá�þÙc§µSÀRÂx`…·æˆQߨ +?é›(äa2îhì9›ˆà_Ò7ܸڄa=s$ ÙbÈ{%sÎ’�R(/Jëá2o‘K‰·$+ +Üë”|JcÛ�C=X¢éź¨4¤¢iÈ7•„P3ôR|2^Ó‡a+½J”üŒ ÛâmRC¶íP±.`FưI +«7ÝW§¦p6ÑMÊ·ÔÉ—’„eÎÈövÛ›×€E-TÓÝfzƒùQ¾ïDvÎ󪂱_õ8!›Ýí# }¢š¾Ú$¹¡ �«�ÊÚ «mù|R¡£Ÿ°ñÙñ¦ÄÜFJx»Â[0+ ñv¼¾ôcãà\ ÀqDŸs -±ÙJÂ!˜vÓ’Ôâüg)Åœiv3‚�ÈîK~)z=0îy)åÜ?Lû/n³¤j–$äOJe- +ÑYZ‡aH5Ö—FÏy€Ó,ëO¶õÁ‘VUYzP,Aó±n¢/ÒÓí4wBúQ‹Ð›P)DÙ©1´.ƒóÓÅkˆ} ÕšªbiU§—¥ÇÛ”:ŠÀ˜RÀöÂ$Ï&I…¢´—¦xྉ|sødg¦†RÍ à�;e­6—”™Ÿ=ui ��((WŒŸÅ3�ìjë æ‘“ìõ¨ËÔêZ’ÖÀÔܸÝdæ—ÏŸdª¶ã¿Å”ð¥Þp•?rŠ0fÀ»/dHÒ `@ÓL M%0 +ØaÜ} {{hm2…g¡bÙ•g¦ÑZþÆãÿ5%ç0€†“}DÇU‚á#nH¢)æ§‘bŸÎý�—‰2ýfOq$Š$€aÆn o0ÓHjAˆqƒO©+‹µMm¦9-�Ä߯�xÙÚ^ ãÄR€ÁE!NoØÀ�F.iÀàÓT4ã4®VA`³† Œ'#�ßeq„}Õ�é¶ož­ø¨8ßÐŽ‘JUØj?ú¿×:r‚Ç<φ·|Ck–ÂîŸÒ9C¡W¦¢)+<†Ú-¹ÉŠP„4k-NÎóf2LÒtµ OµÖ“ŠÌôkY¨:IÙ¦pÈ«”‚µtl&È{wÏ~µÙg¶ÝPO“ âPóÄÂ4ZíoÅ¥pöR¼¡‚ÒÓ…è9""CXM]·/éq7ºS1Ä)�iÉnÙCYŸ¿:†jáJœÅQ°øüÈ…ù>¨‰ôO7òÐJäDË,fè¤Qv™½ãqê‘f1·¢oKrxº5Y†à +¥ÃM\ÊÅt?ŽÉŽ<è+)Y™Y>„ZN³ €³Î©ê¤,mg*™AÒõ °˜’=þv„®ÿ.´ eV¶ÔŒÕmÉ]‚S€ÁÚÝ<¯¨�ç®(â1¹û肦­)í»ÿ ÎÓ{Ò¯áí(G*¡±#­� ô-|ýüV•€*!ÞS<Ä&ÑðÃMJß;Ô`'O G’ ÒfMPŽÖhnŒnZš„#ÿ¾SgZ»L‡•lCò¢À³³@çûê\�œŒŒš8R¼Kç¹~lü:ÿáù0¬úùâ¢(#8‚7aØ ì^HφQ]ëÖÉ Dù§žSXÈj›Bk·[m¬b ;ßñhRcò ÚBgV‰ãg"š¿ãW¡Ýöhýl³L"JqÄKêɨ&MK(øÙ]eÉžKê[‰¥+’Ò?¥‹‚°’Aú”HÆcôq>RPkŽó|~ =}Ÿ:‰+k-@H{í´Z‡ÐŽÂœW:—�yŽ}Ã0CCЍrѺûvÈ“Æì¯·©Šù³�YØ—; lbhù +Å·oÓY:Ë¿Ib[{èGO³ô'YK=\Û�Ìæï¶nä@2¹ñ<Éeç*8ÊF)G:f�éT _Nl‰Úá0”´èÍÊ�ä§+SEW‰’QþxΫû §ðt£¹®Rg¦­—Q5Ôe/'yK�ñ[&»ðä‘5[ò¡¢X/v6.Xan¬ªÁ4c5¼FYÆ ¸ Ë-Gð�5ÐÞ#Ûl±R-Ú Z— ”²ÝZ0 0?,–Éø¦C8"è �Þ‘Ù¨yšg�IFàs§aRHuKýØ<;)uÖ@]©»¿×ÏÔÔj͵'^ìÈþpß`&æ§"ÇÝÀË’È’+7j&¢°„¬mr8z´ŸÑcv/¢�ôä4†LšìäÛ�™U_—\býßCX�1 �g6âl´ éìLs$ ¥h_ïèƒÆryt‚ó·È +yȺʗ >åɽ¶õ="¦Ù!ÊOã•ùŒ+ÂL(Û”i5Âêˆ~=‰€[áñZé“¢Üú_#@x YÑ$¡—½|®7|ÊaýÖPx¯eÑÀd>stream +GWx‘Áòž´£Û MòhPÔƒV�žJEÓ&Í—&IÈðCŒ¤îÇõžn ÇÈÒ0ÿm Ú§°ýµ:™‡*å@ S,$säë<À”âøæ8¥Wò×& d&ñÀ!%ˆdê>uÞ”÷÷ù�½D?AÕ2öš|Bol�vi]Û½©É¬°oZmÂF"úIãf€‚­aó~®ÜÓBáÆ2?ü¬ “8ïX¢€Ñê¤Â9…PƒùMæW/Oîîd'ÚèdYAÉ(3éê,‰’Ô"ˆ…Jj‡Ã¡!È(»$¾I›6¤Æ•eFà¯;y}Dl,„Y®w» !ð|XÍEÉO�Å€%/±·¾ +Ó3¨Í<¹ÒAøZápB]?�¥ 1ÿœXeXCÒ•„èžø�A�·^g’èH~ÂJÝö]é ÛPcgByÛh7“8�[i¶Ï˜ å£ô¾ Ï45³{s�Ç¥¤"ø`Ö(™W²Äµ6§QaT"ŽdLà‘Ì;Ëo4*ü=”h¨¥ P4ûÁ6ßãà(Km�©P¤õb©†Í#¶T"â@´ÂߨSÝ 7ΤUZUÄ’ú½fvq¤¨jÉ)¥Ò*•,€“-óìþyFSUëøŽY-Lâªï‚‰Üg¢ÔM¯Åì9飹ƒíZ¥Þ�Dê,퉓V[s”¶˜‚ +å¬0={·IŠoÿ5ö–/è’RJQÂ¥íçLF/4¹Û“û�û™Ÿ!þlïR¼¼V)ظûÔ¯r0âœd , °Ð?Â�Bý¿' 6ù»À°G~œÑFLtû7ç¹16ðR�’¨²xWËl_v%8ŠXòןœV§íñõÖLJ‡H¥UŸÄ’òMö$‹ÔiÊUpªSº© „Nââö§�-†@ +¨Ù��5Ïã¨Xì‰EÆOÛ^H¶ñãÏ2”R…$dúɲ´üvœùn� T¤;÷ÅÖÀB' +-é#(¬“¨£¿$˜¢ q¦@k¸Wšcþ �Ùæ5ƒ„Ë)Òài”xØ—§ä�þ øÔ†‘Öh´š¦²ˆ9ˆ6lÛ¸HšâÄÀÐÜÎD~Ë«” Šé‚ ‹çen@—lÝ|[¶@'ò§ÙÒ)èn¢4Tüœàê»”°ë]…>ˆØZ—‹à¯Ó½P©?'‘6Iº4 +,6Kî�ÝOÔñ÷ßâ/pÝ]gò¹™Žì,³âP{hÓ#;¹íÒ«È� øÇá¡ý¿Æënb S�ƒ:ËÈ&ÍEûøÊ]œ˜ˆ2rÊüØjSL“rؤ¹è^¹K_M"$ó*éFOe ’¯Ü~͇vÉÜñCÞÙq Œ¿êÓ}ô rqÞeä·»SŽMš×âÊõæùèœEnø*Þ†šÎ¤WšCq.š0vzÓ�;—q̬v�^úå‘4]IcGCE¢,cß<)¢ÁˆK)+Ú”�K/pÑï'7¹p‰Å9¶?¶èÈ€ôºßiôֻЂ<i�2UÌì†uyÇQâ^;Â8¬zx² ®έœ‘åÓŽ ÄÇ9€�’é¶#è7+ªd‚wíi†ÙÍ8Þ¢!ž×Â}’BŠÐ߃÷&Ìv„æ©XLþï@Øi†›¶T)Ó…óq†½ÜÖõ�VüÊ×£¸qæ .fÃýc[Hé®r§* �ÐÊ@¹…›˜5¿öyâ9´Lqý(”KÈÍÁ{Ä?H¿7œŒ¢ +cZ�3�RSŘ¡a-æq_;BŠ(p¡mÇvA¶Šc;™ݜ}Ðêsà§ð¦@´#�œ¨=—ÎÕ �N0U·#D)Ø2æ.Ùk †:ãV”�ñ¬êâM�&þ€@ ccÊ™#F¡ç™+ävÉÒó�@ÞÁþ'"ÐtŠ0¼ÛÏ�FÍv„¹�p 9”„¦Ç}ÑP®Z=ËÇ“™<À¢‹YOôNV;Ôƒ¾5ð ;8€ŸªÓÀgsØá#$}‹­œ“óà8:#ÿû~ þ8=—ÐÛ9)¿¬d„æ�šr·#8d•Œ‰�"Ê׎àèûo‚Ha‚"›Î>bS6ZÄp8ƒú©ËÃñ›ËCè‰OÃËç#èIŸ†ÈŸ†×›ÎGÐ> �'> ¯7œ� '>I3$t¼,¼% +›À·#È æJvÏš4-íx é& è~o †lGh†Ò£d}ÐŽ°±~Á— /¨¿†™>NÿîðíÌIJñ±8kZwÜv„~þý¨„kG <µÕ¿Yíƒü²¿¨jG(0f,°íÓ‹‚Û”€­Iósé:”‹ o1x;­Š•¾!P"íb;Â,‚É� hGaã‹(GÚtùX‡rÛ á�Å»à]2|­úºãâS„½ÊÈ=£v=D±×¸vÊ«³cõ)ZTZq¿—Yâ´jA;B€O08uÞøwS;‚ÿuJ…½‡­á4Bó°X«Ûµ#€”/$k•àv e‹«c�v“×Kl%ÚÚÔI‹>†,mG�áT’#pKíÛw¤Ó8ÚhžÇ‰–Svì Ôã®ô•\blG@~é³vkGPkúŠúa_lGX¦m&�vÊ¿[ys±S;‚8ê'_ðtäÖŽ€p˜ÓÊ:‚v¸)ßC,ÛÊ^#Q]dñ×·á„«b#¥s=µ#ô§ñÓ €RÕŽà”tDÐÒUÆõ0Å¢:åa¨Ú/½†æÚ´[s‹øÒް/Ù™:�iïŠoG@Á½Lkw ÛâI+f‘Û€%»vÑiMš>±²Ü�n.·kG€�¬TÜíâ´V™ÑŽàæ­·ÝÇ®›�Âq;Ž0Ì·ðÞŽ€lñ>íX\÷ÞvI;‚ËAV>k¬˜µÕl +öí×e]ØæVy�lGÙ‰ÙþåÎÚtº*ᜠ+dç?·# ¹òbgŒí€\θ/5.Çdÿi¸ãÚíº&þÓY(—�UðQ¿˜8SiG6“t�—W’v•HEUB¬4²[俨š¢A×÷AñOjQnMšÖŠ·U˜'þO§í +³�ɇͥ“v•¶Ø²Ö>nGXòÂsµÐxyK­íŽëGé Úvîû?å`:wª¶#ø<RÓkÆá Bq-JLú´#¨¹¥‡üÒŽ°»qË›K†¥v„¡ÜØ'i;ÂØû¢«†dTн%…Λ-8†*äÝ`íÍ<î’n;‚KwëÈ#6³©vPÈL€mª!„D±K™^íɾ°”P2Ÿ”|-Ü‹((ÑíŠ÷˜3š¥.– žðäê28hGHœ¢—FøÄÎ lGcʼnŠì×öjGÌ»+ôª ‡KpÝ}E)¹ñ�WˆŒLšKµ# ä°[ªê­²bŸÿ4¦aUFð4Ó¬ØÑŽ ác(íŽ6µ#t¦¼œgt?vÛŸ"ÛÅq©!n€«œÆL}—çá³vdñƒ%T�n °ºº�Ö:2s.‰.’JWcº‡DM½ l1uVh£“8¨µ#,â|[]ÚÁVHð–Õ‘r;w¿žeÚE?íè4±~(*µ#:Lxáím¡�B§E-³,‹5£°•W±»=ì¶# Oz0Ÿ¶#,8Pò·Ö»¡G‹ `ô¨K€W;•iS9G·á·mGXZþRÀæú¶#€F»§ðUkÒŽb¥+bãÛèGxBçºÕŠÛÞ7“B§_Õ'¸+tÚv„ø ¾õäúUǨý(/A˜mþJhNv˺Ð4ígÎòCÖÐŽ@C £H,};B„‘Î"Ú&å9z¶-„˜µ#“ê%LââÚ\—«È´s{ÉjGdDÁPŸjG Ýg€Þý†7ˆ�“òØhGмÂË¥DàvA_–9í޼èCâ� ´áîq#¸R{�{ø¹!x ðpÀä+fÛpòëÆr ÚF…¦óâƒV;X¤—@#æ¹aøÎGuÃÒÚ„w3œr@GR¨ŠºÐŽpc„_cíÝ?¬ÖdñÄzqÌÚÔwÿ²Ý‚Л:]ª.Pëp²Îùϯv +ÁÙ„©lÖŽ@�Ó¦Òâ¹ÝáÒŽ‡àßÅ“âÖ¤©û›û‘Ì›ÉÆ5޲v„ +¤³¾Ò(ß[¦!ªœß×5àäáâWÍ/Å¢Ãïäíp ®�)¯vyqÓŽp£ÉYÚîô ÛŽà$¼àek”¯!HXôs¡WÚqÙŽ00‰§� ”v„Φæa~ôø¿u…:é6Ž2&rŽnl,±·#Ü^Iü•÷™`G„<•Høæ*p»6²ËìùS‡Gø›ßn«Mžr´# î\pòÍNƒ¨Ví‘?Y$ ©¿•Q£¬ ÁTÕ¢aä©ázAA´#©Ê–ç{ÔÛŽP|ô¿zm Aí§:d©Ô}ªÉ·#*¨š´J˽�r=F£v]‘𑘮pßR`j­4ÉÅM°“¬�½rÇžk Œ¶Ã]YŸ½j +—}@µý-÷FBÈv&}zÄ>€hs¢Š~/iæÁ…d Z('ÆL˜ö™/ÆrMûÿÁM¤6«:˶iß‘4‘¼41ýIÎWGÑf»ç "Ž"âöl›ú}\HìE'ñ�ßÛy<"ÈíxhG³<:€­£¢o:zbÃ9ºn°Ã—£Sèq´/µ³v»Gt—Ä\ú±V†ˆ-ž�²A”Õ‘lI¤°�hVx_�æí¥$\L#Ø2˜uŒêÙ� Ê ¸ K¨Vn˜ÍÂeüÓ£�hz“1w•Dü¢ê^ôezÙù7—d~‹4iv][ù¥}¯ãšôtFt¼n@¤³Tø·ÝWe)ó+r |*J�“ ±ݤ48¡®Uìe ¨–qqB7 1Õ[jÿ»ŸÀ¾mÁß» cχÒïÆ{y6©1ô¡,­lÔM0/!Uw:^ØacM«¶ˆ^°)ËØ#ÉŽùTÀ8�¨Ò¿iNtÐ¬Š +U˜Jò'Q=„Áþ¼CrÌeHÜôÄ^âr]îéë¦ßIíÅÍÛɧ]ºã�T4¾fJ‡�wÏ”>4yîqWÐê¸Zzjä¹òüÅMFSê.iØJú¦¦ºûÙŒ±ÿk-ùO¦t6ó�OíÙ½7ÿëAÁÒrÍå²¾OŽ;OS°7Œ2O"ÖœHÐÁÏ*u>Á3çë£á‹ä!„-ýÿrH… +¦õ ãp�•k&Ò?¯Úæ‹Bƒ+U_sH˯eÀ·ÇÙaCjÚ�ÕãonrSÌ“Úc†hý”f^'1-ѵÅÕœD«i-ÍîB¯,g$pcZÞZs]‹}u7©a°@ÉiÙMù™ùßI,K%R_7»Â>mÚîE EïS'&ní®îŒOÚ\xæúݺY�¶Å†ûßÎLQC ¤‡ã@pN@Ó`ÍÃp0ŠÒ$0Mƒ“8íÊc?Ú• OóÈ‘O³&ö÷’�ùèY¤¬ì÷&eO­ª)''[Yת\ÝØèÙ®½¤Í·w—·~êU×~ýâqÿodA-= ‚UʇlœÖ‡{Oµ+ÓÜ×·—·�*¨1º¢ €¤‘„@à ¦B"P‘ÃÃ@GQ „�Ì  €"€¡!RÀÚQt®¤‚C|Ü>H7aJ׫×È +˜~»•Toã­•Š†Ê{L +¾VÙZWu«�’ô +ªT"Pí]kýÚqùeì“8/W?ò~}<×�,¸ú_èþ¥™“G¼M +rÇ¿ï( G®ÍP&€68V.¬ÍMÌ`ÇúTVê°ØðrœEa7T¦qÑ1¿’¸õ¦î`>Ckª¨òüÚ÷ò먊=�°¥°$�b$k}- +DL¹¡G8_¿j"1Ž]ÇôôÜ.‹ír‰Ñ…'yèp3 õ+ozÈ©�8*Ezº•x÷ï�š©•ho¦‚âqA€¯-žcl½Á?97ªD† ‡z+­„ðç1Y�®«–0EÝ8�¥Ò¿ö5Ï©tJ*LÈ))> *Ùz¼FR°áAa>¥ÊG(^Ž@òEv¥íAzg>nsl†¼aÏ¢LÄ�âsò@µ¶ÊcÑOG².…ùtË~€†§Æ¡_Peº•÷ˆ@{¿!õ0"9‚I6ü¾VH�ã°í{k8܆ �Qx|šÜúS¹²ög2Í·&’MŽ´!¢p@4‰i_1×/­™éGÖ°F¹�YÍ{µm'ÁЧ òÙÔf��õ³†AÃÁçp8BIÙÝÁ%®ß�?žë™]2˜�~jš `@PRÎ�‘ç=P•¬Ò ,§(û Y@Ó=±Hm“I"Ñàä§ç93]øDS܃[?Èš’bÏvâü§ªçŠœhQ϶Éű°}È``Ž |i“ƒÈs‰SæÈÁÎ6åHÙ¼ž­ ø]„F?D†¼M¯¨ò/œÕ˜R-¹Á6u­7 uÀ$©Éÿk9¨{Á9Ï@ImªÐé¿ù ™ïD‚Úó”á |ΘKü“TˆÉ¾„…kÈ]¹u˜ß±ù}¤Äœ¹„|ºAâ–Y}ñÜò>Š$;ºd�þW–æ /PEøIˆ°gRž¤øRQv ï$µíÐÿ_έ½x˜I×IŠ�¤Ú¶{£÷(/+½„q~…BÎuØŠœ°¡<@‚¨M€´b  4ãæfHf¦Ä\Èb{~!Çô‰ößã¢}8ƒ‡Id2„Ï�vw=Ëò†"ÁèûÖWvç£_íëØ{§ìȱ« 3rXô¯Dn«®r?G¿ÿôOênuY­2²�Ú*å‰ç»†ÍËÃ=:\ú“ ¦FçϹ¨5T´€�ÚÎ?Ûùh‚}°FiÅi+W᪭*ð´ Esn@c Jd[Šû ×_\+òÍÊM[Çï]rfo äGZf-Ö‘ˆ^¾†dÒîQs ·ú7ÍÕ@Lj¸בç?‹`ÈÒµhE4ÔÑ JFa«Ñ#‚â܇b6Œ¬±ãV&YäAF;¼•. bRÒì‘fa-">ŸÚoÈ�‘HRç/©óz…‑S÷[ÛQ£¬Qئº:€™E|™m4o’_Ý*ƒÀÌšºø\in˜ËÐˉ‹Þ2„ÔP[|®4¯eäÛØViñÀ�á{¶À¦jØén†Ñ9¹-¹ð–µT`Jž�iº~ŲM½ó}µmª%ó(Xæm�P×-©‰…�Õ¨2ç¸Ä ššÐó×á +$t'ÍéÚÉÃÆÉK43†)y�B›VĸŠÇþ› vK� ¡áa¥$<Ú’JÐÙ’ŠpÚ¿äMUüPÓ÷¦v¯©±„G¡»¾¥pt‹e’Î1AŸ×¨ê—íÙ7”¤™?DÖ×JMû÷‚6ñ¼&›‹ƒG«C!,Ùån  ¡p˜Ýׯ¬¹K@äXb õ ôò8¡éº”¨jÑ�aŸd°l/LÌ@Ĉ!Ú¿ßÀ^éqOëA‘Å~bjÏmBŠ€M†ŽÚõGË“‘ŸLIí/39Ð3iÙc>O¿  fŠe^I…±…™‘<~!ªp/_˜?Ëó>@•ï9?b¥ÿŠ�¸Ói0•0*¬D}X–±=ØÒÔ5.Ž$a")%uóB7J…Y)[+ÿU¶€ ll,ÓE„4bƒ…º1+ï5j#- íèõ{EV‡€7†p•Æ”1DL£ÈÈØÈhæ¯/‹&Er¸0qwFg“n# cŽ�Ñ2)ûB‡‘&‡høòð�ô�±ˆ5®(¦)~!è¨sC!è>eŠâZ± y¢Ç&�ðL¢"#c#b¡`.U«Û1Ø)høÀ =>?ÀÁC4iz„Ž˜KMR\jˆ±Ã)X¼Œ)Sx2º“°à¬²:°Dɪlñ4cˆ˜˜fq‘žd Õ¹U`o!PDÐ㈓)XF8ØØ§…Ê jpv|†’Í¥¦¨­´»LD‰z{}cg�c�ÑRº{­Äâ@#K TáSDƒxX8(øçÇåI?s R\iw$XÔð�¤IøúÄ�4ChhˆæÌ¡aá`À1_¸\™‚—g§GèOÂ~­ÂÞPàÅ 8‰REË~bÈ +š,Æ Ÿ•)79, ëgî¥eFgŠ8‚`Њ޾¾€#èçeK–¢ø-¥Wn/µ²ˆ2pAÂARB¸¢eK/}avÌXAÂC HÚ¹¤[�±Ý�HcE2`âTBØÂÇ··'eN4°àGŽ‚Œlhî$Æ +k»�ÂE�@,HÂ�>AÊ”ò¨L‰eO˜(9"„1R�È©ð3t´Œê °ÂØÊ$ÀB† ?ˆI¢„ƒ%Oððœ8a²Dƒ �BÁ�@ÄÑRÉL²n¡°ÀÔè@Ĩ�ƒ‡ B�Dä@-R”aÇ&¶ÓTD7“¬ÄV^foå, ¢…Œ=xðàÁc‡7@‚,P˜(ÀC–T3IwgÐâ€W …+R,`BDˆrkc\ÄÛë4‡Ç'¨ˆfFs-7JWØY›\ùà %HŒ8€:н¥�yaMy›t*ø)—Ð¥«“WJƒÖ—˜‡»²�Ü×x‹¥F™<>@DG¶SšïN]1•™ë+ͬl, ÌKë*CÔw›­*=—É"››ž CFôò™D½j1tµÈdrÖ•UÕXJü}jÂV•|*äì‚�è¥3:Í­Y&q þz»OÛ&í®/IŸÌ *ôXB^PÞL'v߯Öj¾¤…6—ôQÑ�ÍMÎN…¢#e½Ä‘�B@>G +578:;Š�CA|Ž<:9Š�H"¢¡!¡ ?>Ç +;:96789:~~~||zzpj(P˜çZí¾çT=‹½Ž�p»v×bµZ,[µj«cÝjÅî×ëØš_õì®ç;öšS©ã+\6¿N©vV«g­z5«ÅbÍÄšU«›_÷*Uk¥ê׫6KÕ©úž_ߎfØ+u·bukNÅßÌlë5¯êYjV‹Íu*õšc÷<Çêy5KÍßt­®ÍêùnÏêVª5?‚販G´72³,û�,ŽM�­Nƒ]®ëÚUÇ:´²ÖY\8ªëHV&ŸÅ…›M sM���ÍÍÍÍMŽŽÎÎÎOž���œœ› nprtvx*{z||~~~|zŽ8:;<ÇŸ  ¡¡!""$‰²àÓsäÙéù"B]8J*麶ieò‚’HhÖá9ú )ëo:ŸP$¤h´‰ß?Gž�œžãÐPÑ}3ŸHISj^µ^¯ûŽÍ^“¢Oæ²N ýytp$H˜ç !£¤Í|J§Õk–ÉiËíz¿`p8s·NLÙkuI +eÚJ#" ŸãNÎM�PQÒn")Uw¦­755®²ºÂÊÊ"“ɦ¢ÂÞmVŸF›·²hÈB�Î ¢ 5iªk·ß¨±™ë ,lŒ¬Ììì ­Œl, ì‹‹l5Ž?1Y—¢Mû”\>•tíS˜êjkÃØ™Zœ]�]ù®Ã]Ù®ŽNÎmíl Œ k,æ2Y§Ð¥²HȆfFóìSxœõ5–æ6Wþ0@Œ Q„‰'Nœ0a¢‰" +âŽîM�l¹ +Š«­Jql~„Œêf’Þô¥Êú*c›ë0À%@ÑÀ +Z¸xÆ,T0°€ !<е™�‘Ç`'«’Ó¾0ôSA§&§‚��‘íœ^·b ]dlt 0�b… 3jظ�CÇŽ€!RĈGŽ9BD=rؘñb…#@Ì©qÈšâb—ž¶‘�OÎ<ݹSd1¶2'TÀ� @ŠI¢dƒ%Lš8ÁÃÃÃsÒ„É’ ”$AR$H:jÄX‘€wmcZT]ìÔYõì%™I×§)­17"P´ ‘CD�(a‚—§§§§§'(à1Ñà‚"?tHà‚�àȶ¨¸»RS‰´pÔº°Œê[)òØÛ Ș "p€÷�”¼*V°dѲ·ÇÇÇÇ··§åƒ'K’ñq%@À‘iM=Y¥Ë£!ždýÌ›ÄXbnJ¬ˆ@$<!O,{\ºxéûâçÆÏïKŸ—¸ðe!/J\dÇ &@À�eA9U¡vÐqç¦&ûÕÆæ�ÄŠ;„$iòAž•=.^üˆù#Ø×eïŠ' áAƒE‰m¬ÀÚiSIt*ª¡úvŠ ÍNDì’^”*Zº| óXÆÌà !!៘/]öD�òD 3TŒ¸Sós­ÑÛ(Èg舩¤ c�Å€9„dðdо¾0dÍ ž9sñа�ÐŒ ™0}[®Pé@É�0`À\Ši©©úá±�V·ã¯5&ZL¼)W¸|h†Ððð "šÄÄÄ4iΚ ãÇ •'¹á"m`U\kÔ.:ê]À“²`,²9˜AÁ‘&Q¬pñû$4<ƒ˜¸¨˜ˆæŒ!¡àŸ—+Rœ\àC‚#êÌÈb¦)3)ä³C¤tR�¦ºÖ<œx�cÈTáûòW†ð11�¢â⢢bšDÄCÂ2~[D€ÂA1 mÃøI‡ÖH <Šl¤kWCX\)hTp•,^Æ¢ITT\ddd\\TLD³§×A’5Vˆ #Ãc¥K# £Ž %­˜|V&ñÀ�!@� ÅEFÆ4h Ãt¹eI/NxPãŠjZb&…zvn¨NS^l �Ñãˆ*ZúþÊ"&*.226662.*&"š!óe/ïÉÌ` ÄØx[}ÒD><85$H ¡:·ŠC\ Hð#ƒóÌ…²p×åÿP§¤�÷ÿ¯" +ãð_O€[g;¤ñX +óÿ�°:¨á�0…¯¾QIØÎO™ÿ šg +cY¾oÄ=ðÿ7ϳ„­+¯dŠÂQðÿ¯Ô̳T”#â¿Ö<ÏKüãyÙÔxùÿ(æÙhã/öÀÎZÿÿWó<Û” ÿP…=oðÿU$̳·Ê—A@é…nü +pœQüÿÎ<‘ùÀŽs͘ÿ'1Ïs²Èÿa‰ž©ÿo\–Q„Q„ãÿ3˜r¼háÿ�ͳ–ËW�ÿ?  íj"øò=Žü¦{#DQÿ¿‘H˰Åñîÿ¥Œø-æÿ¿@N�Ç!¼ÿÀ¬%³�åñèfIê׈¢¦flz$´bÔm*<ò“%ü5Ke?0ǤñBò="ÕÎ_È•ðã ³ ¼¡wŽþÿ+BU ›ñõbžg$àÿÿ6ó,€ÿ.BóÖÿÿ%0ÿÿf¿Ciñÿû~Šêÿƽÿÿûÿ£ åÿ;�ðõÿÏ4ëý¿©ÿg”☡ÿߘ4;ðÿAtÊü?wæðÿTf þŸíˆñÿ°gžûÿ f¼ÿ‡2jüS£öÿ2æ!ÿ/…cøˆãý!ü?\“ÿ�â$þ“ùQþóŽÿïÎ{ÿÿÓóÿ]šþ_Ûÿ/@†äÿ·f›Åÿ4füÿ»ÌßÿÇ›Ãþ_3ˆÿ‡1³øÿ³Žÿ·›3øÿ³9Êÿomùÿñw;AËsý±éE»ÖèÿŸ;ôÿ/þùÿ×°óÿß5áÿÿ ÍÿÓþ¿\þ?Å”ÿ§¡ÁÿϨàÿídü7.ëþgu€Cg©¬—5ÝL&“ÿÓu�/“Ëd2IÓ4~ÓLÛfÖtÓiäœç¹Æoú¾•w]×ʤó¾ïyžmÚ¦é›Vâ¶rIÓLú¾ïºÆëeMß¶½¤kš^ÞµmÛ7}ã´§�5ÝdÖõ’¦ñ[‰ßFFF7Çëú>:Bºiœ‰ã4MÓ5}Ûu�ã·Ý\:m§•8Ž/ïûfÞJün5q|IÓ8žL&™¶mÓ¶722º•¸}t„ôÿ4í¼•8­Äçy~>Ÿ6½T.í¥R eÖõ­ë:}Ïó|+q&^×õ<ϸÓÈé4râL¿ŸÏ'­Ä›GÍ[‰ßJ¯ë¯ëš¾o%n×õò¾ï[‰×õ½EjqeÒY×xó¾ëçóIßÏçS¹¤i|yß7n×K{‹ÔÖõmÛ6NÓ4³®iºÆkúÞ"µ·’™dÒJ¼®oš¾ñ›®ñz¹T.™v½\â¶mÛ´mÓK]×�FÎû¾mzyÛô²®küN&“7Í´ée]ßó<ãø2¹¼•8Ž+“N›Þ"µ·]/™8άéûVâÿÛõ­TB_×õš¾çyV*™JZ‰×w}/™HäÔ¦ï¥riÛ6MÓL¯—FFF·M/ïš¾éúVâÿO+q›^*mzY×ømÓKšnÖ5nÓK;™LÒôòVâÉdR·Vó«ÍDV&DZ©¡y›Í£mÅævnëvV¿Zu¥,VK­æX}Ç^­Z«µšÕ­ùU‹Ý«W-u·R©¹µªÕ¯U½š_÷j~„Óõüh–ëÕ\‹½Rõü¨fS­Øl5«_±Ôœzµæß=×b÷ì~„»îynÅRó£Yõº_³ûÑlÇêJZíΪSó=›Õ³Ù«¾cõ,V¯b©Yj®Íuª–ŠÝó}¬[õügµêyn½ê»U׫Xë8›çz5§îÙê>Î�p{®ÅZ­ØëX»c±ã}Ü<6�ã}¼�÷«–iß—ge²–ét·<ãr’6�¾`a°5-I)Œ´k¡b7 ])¹µ%¯Ò®~y)‘w5¶©}Óz>¯pO³¸n7�nkﺚs†›ÇœÌ! ¬SÛ¤a¬+ñ›Öúd‡F"ã¦�÷ëXü%—¯TkÜZUWLJK,üu¶íU[Z]O08q“ÂÀrÝæë +ÌJµšz‹nAy߸oÞ8,¨›·™Ï5q3TM§àª¦p™λž¤PUoo^¸«¥4ðÎfÇöM“³“jr²ûºyu+W)ߪb˜¯½q߼ͣӕ8× }îÝÝˤRÓÀWWRR`f×s¬»½³Fu p^ð†5¦¤¨6) •ò6�w们n~f'Výº‚ÅÌ'jYX§JûŠ­Äžn^ªÖŒ#É�MÓÀQ­÷+Î�Ofa\Nr¶yŒ"UÃb%ü ,žŽŸcúÕ~gͯä âj•\Rع¶!¬y´ +ëò†›ncO]^ewä ^22¶®™X¾µ6�pϯµ/NKî2ßΰ]´3.'éØéD¶î +û’»pà¸7oT×Ý@Öõ$‹Ù¢`qó˜uZiÕžÓ)˜*Žë¶¡å[+TšôΊô”N�§Êºn U7ïÕÔŽ‰‹gcë>É}wjø MÊ©¨š´]¯©—ÕkGÅ ¦7�^-¨)*06·)–ÙØX•ê N£‚-©2,5•¥ST©4é�–Û%‡»nÚæ‘é•”íêaWgQsÝ­+ñ›–*‡–÷æñm«›Ä�s†ëèò­Õ{¯¥Q�ÚžÌr-u`zZ~•–7aåTÔƒ×Õ�ëì+¦j;ûŠ£È®¾v°/ÔÌ6g½Ú®íÔæ±ì>ƒŠ«Ìì›wCÒ²N Ij\–kÙ]¥�õ´<,ÎîK¶/Ös‹[»¯n`_INSñ“÷¦Û¦‡…•ÃÖ­mÔ�ôek^y1È¥¥�»miPpóX¥JƒŠ«·óÊÛõ\Ê­-±!iÃâºû-«Ko¹qµMnY8Š WFÓ6�c Ž;vÒ¡­-U�…ãºâ[ +®NM3t͘º˜¸ckeWª\Ö,æp%í²ÞOW°˜ÜdeûBÉye¡äæ¤Íãuj…F [ym€jң긹î ¬Ãi-ÅÐi˜ž}ʺò†q‰-�Çoiã'qy*fâêoÜ7/–Š\‹Çå½yÜ£´v&œøw»dN\±×VT¼›9ËÂX¦íµûÔ»º”Ôu‰ú5³’[¢ƒÆ1AÅU5—¨bRà°XöÙÖµÚÆábl– Ê®7}Íœeáµ³-'éÖ›“´yŸm9Iˤ]Þj˜¬lŠ +e%gXÂJ·SÔ.\XµÉ!ŠºÄ= +ËÃÌhWgÒº2ËãÀNpUŒ�‹ª›öür¥Ø§-¯Tm®,ÛUrãŠúvÁt`PnÒ&;éþ´Eîjµq©ÀÍ#-ÜXì$í²Žµq©À[²¦XZNÚ‚ÁÆÛ3ÝÜ6g½sjëøÜ–שšA­)­ gÊŠé¨^;4mY]´Ëš“™ì¤^Ó°5)jGºz¡M('1T— +�{²6�I6Ú™œøš•’úfu—l6ïÒU,�­<õ@-gè •Åæº6NŽ­LV–»33ëz½P[-Ž­®œµd#aµZ(U¬ Ùj3Ù`)­q†®%§>C½ *欨@UŽ@`€YTЇÄ.�!¢�¼Eš# <"°¸B�|( z¹ÅL‹ÂÿÁ¶,‰`h.™ˆlIÌAêÚLÔ@’÷ÇX´þ’#ƒ%SF lì™g +@7õ)Ã×Zù€yÿ"Ìól# ˆyžw°n˜ÉÛ™gŸ ?Îä ÍsY‘D)Aót&ÂÐ<ÿ”!QÜb4Ï<_BÉ8ç¹f +‡!bvžõd¬$zͳQ‡*/…$²ó<×h¢èA‡å<#•P˜çû„˜Ç›SæøÿCD!ƒÆ'sɈ騄3çÒ©–Ç”2„`�Bu5 ³`04Šò$ ¤€dÕ:6 $0,& �@ +ƒa@ +…!a˜D.Ö;bÁÐ\YàÀL1lž^ L2I²ÈÒs%EÌáQ¨Ô‡/ˆ‘Æ#¯*¡¢BAóšÄ·ù¨ã…8Ú:iäâIZÔ´b$‚·³�ÅÏÆ]cvŽéõxÄÎù|Ã]$‚ÖK°Sú¡ÖS�kmA¤ú%•QzÌ�èÜÌ~]y–\¾–Œ¡xœæB*¿½pÃ¥vÆXÙñ'„vùÂì®Ú;'6_ÐëúªÔS¶ÐìÉö2ËØ "¥D|@A« ‰`‹iͱO ´æ˜§× tIÒQŒ�\ʶNÿ<Íi%¾^˜Ó@+Áƒ7¢ƒf|ªGQV”àŸôÄ|É ÿ¤„0A`QvˆàÏ{˜ǤR|.í³†fÑpU´À§úŸ¨+¨Ä‘zD¯½Â¨~™¨¢ Í�(ßæ¬ç92 ÑFyS‡Ï”VÝŸû<ÏO€¶ÆÀŸî†žÄÿŒÌ®˜ iøvÒŽéÂFÃÝgÞ`” wò5l$R¾ÀòÈéŽ|ß”ú ;ºCúG5Šoâ¡uµní%ã%Nï¬Ô£±;±<±iÓ«$Â>…yPöéÉãu&0€^g,œ{‰N`*Ï.€Y 5&!%D¯ߊ@ËÔ£½K¨ÚD$&öj4qiBY¸á…éÕ‚cób4œéãR8\ïs$\IÇŠúЦ¡í÷"0:›‹aÀ2ЉƃO%DŒ™ùq4a¹:ëXö{‹Ùž„”Š£>AÜв\”Ú +W.zJïyæÓMn¥Ý \ˆ‹ U  hËž1äÏ`(´ÉÂŒ•ÁËÇëQ7nî`ÃÇ–YSÇ£V(¬Q +pËyWÎ; +šr‚Ù㯱‘Ê’Ãv”\dýŠ @U6¯7† x²Í”páâwÄ@î¾ÃgD +yÁ¯MtûØÎŸ*AY‚}7î5j³+åXži˜%3�t7z/Ú[Է̺„L+ý’­É|úuoóq�‡EcÇ)IºÙWïkwÛi:!®'�y5‹žËŽÕªí§S÷ìˆO¸šç¸y/d¿Ú êu²GümÞI3vã3æ8£4•?Å£Ü õdOü9Ë=8A&DK–€ÑdÈÞ¥ŒîÅ\]Û(¤ •µŒÓ½ÏXH,°}¢Š�_!ñ°8fΊ�‘Z˜<Áákñzѱ~#l[¼Ä–”ÉÄ|*ň¯Õ3Ö¯¸�£ˆAZÒ[šyh㌰«ý´Ê³zÎÕ‡úݳÚù3£ÒD!Æ•œŸz¦ ¦jJ rdø‚bD¯6êÝËÖøÑÁ¦èº]ÖƒÁмd£ô½ýŽ$àÒŸZ~-ÀJ¬HÄ“¬'¼ ‚�{ÙMD.gý¢Î#I3ûuí{˜kòoOÏ$P,,!È{r‚�Ù"­7ôD•c9Žíva‡çU½\¶SÒÞ Ù�Ï-óùbGy´A;�9x¢P¤‹t�·ª¶B«Æ{ä¾mTú�1Ú¬—e +5Äb7Ù¥‹ ÕÀlÇüê¯!CvN~—bÃq F^DÈUÖÞöè/JMø×Ž"çìtúåUÞ<¢‘X@kJi*k I¤(Tÿõ Œú_jÿ• +¿Æ�п€ ¼ø˜®Úìb'uñ0_õ¥TÔös?ÑCrŸ«|{º‡”£½5ª—“aúó)/n17’fKb¥}u [ÛRì�_E5Dì­)ü!‰Nˆô^íŸ×’$íÑVmP^¨(µýëÇŸ> žŽäp‰-Ùá“õAc»ö<£�Äòv�¤”ÆKà'ßV!•£“ .P�«„¤gz1�¼ût{`h¼4@!7]ø”ÕE ‚™Ç�šçZE^ûû9ø€('Ô1ˆ”b‹;Øåå¦�Ë'°…Qïs½j¶˜–ÔË�’šÌ‡¿Ø„¹ÑjdŠÝáÖš(‘âï +•¡oLw OÒ±²*K“"V[Yš0Û@<÷eö ¢´Tf+…_ñß™¿kâ)£¢ZÍ`âªR ¤}œ·£IqiÄ#ú¬1F +! .nIß,[‰lõÚÕ¼u*µA·/»)[nÀ—æ/ÜbQâÿVÉÛ«¸QB#YéÓ¶ˆËdXQ"û—ÉÑûõV Ûl[&ÅY>¯I‰¦ˆkwð\@Ú5qʹ¯¸œ¹`pû%"ùÂmš¥àôÅRà nå n…[³±‹áMcw/¯iÖùz)¢ºÄG±)ž3õÚ-œÂ¢p0`-»[Ê¡êUWÍ›)9Õ`%ëRþøµ»3帞œªKh­Ö¾�ª\߯d¾Œr@hºv»� WÜ´)úM‹QáÔù-r*a\r³„£mMá�ð.Ý®yÍØn~&²ž/*«È†÷%¨íÚ}¨{řĜ\ln ÏW®MÁúOýôLè¡AÀOGCúOw”ÎrzRK@«ï¾H Nu‹`=íúÒ“¢%ËàŒúñ�F œýç3ÿò:,äðÎ¤èÆØ¥h‘÷Jß+ϼ94IÅϤÞuÂSÔ 6Ò& —æ�YKx…Ä\ ^yL”>pDh†NêEjJ�œO °âlú¢5ÛeÅ„½å7*D9ƒF®Z‰PT[�‘JÃ0…Q·DŽ#·�ºXÅD£Öìžûc#cÕ.OoÈhA ›Xvo*y5*2)M '¬7*ˆ*o°R2P?­$¨�)?4®ê 4ÀËŠ>G÷CRÓ/ÚÏ x’OÏÍ—Á; a¬u00ÄèEá?ÈrSÖ@;3òñF Ä!�Ñð&<Ýì"á+ØMt¤½ë™k¤­š UÇ» Ý¬³­¢…ê Õ©ÄSø®ëÀe¹Š0Âñ¼AyÉþx? íbÖ‰XBÚ�³`î5Ú�ÁªŸ%y,Ììï +mø÷�1X8Q$O¦°rÄ ó +iÏ5c‘Õ¡õ›ɉÈé»G§—×?&ªƒ¾vo‘O�±y1ªÖpv•—Kœ-ºaÑeç¨NJHäü3á%Éqsˆ)Ь9¤‰^#G×”>Y¹ �mŸÆæh\2 +ébŒÍqzŠí0»4æn…}{ÜÐg¯GM£ÄIÇ&×¼v�Iy„ùy¾6;[}f-[þ–kIÕìáÞ—Zo@?"àÎ>7梸q’ Á“Û@v¸·DC%„YÀD ™Å¥JYýW²In›„A¥½ý{üAØMЋB°sÖ(SŠ�Ròñ[rX÷¦{¶#n ú‹½uF›Çœª‚¾B7)@G¸'qH8ä@`dÅYQøUYèÀ_F„#;sLoéGј¶p§á€ o A~:TÓ¸}¾åXG=eÀ5£É6ÈYÉŽ^€D§[D²‰ì§&B‹{�Nפ‹­DýÑ‘ <¿ï 2+…zÿ +ײ=sµNáG>Â6ç"&…è<\õ^VYš¶ðPÿYø‘*TT'ö÷ +Né”C¦©}nY‘W¾?3˜mYÔ陣ÆLßK¢¾¦}‘+å·}A°’Ç-G[$¿ ?¬£#—ÿé@’“¯Ñ3˜› Ýd\Í îç6œé¤ÿñöíÕrû`j4»VåE$žrwgò:Œtï˜)PÈòršwíØ—§òwž“H“ø2�Å®lJ Êðd¿¬©…îf¸J®·Ö°Æ¾ì“ÒZˆ ;$Ü6P ô7 >{À�U�,ø•f°åT³™;µÕ²°)7\"T*£7UHðæ*j¦°ÝfÕ+t)�K$\¾´ŸXϨ ›´çßU¡Ië=áuJ,àó^ÎèwŒò…Ä5»¦çÒò.èËôvD>[’/´æµ¨Ùe|†^*7¯ħ|‡¶ÁË]5ƒFÂ�À‡cp¿¼P±¿ÚXT³ožcp%÷0¡|¿a öC‰ C=š�Œb3Bhø�|–·a ¾@ +`AÉæmJH¬Ë4¸m^‘¨¿ýÑ”cpeSD)ŸiŽAÿh%74ÒéeW4¸aúöT¤�)Ì�’yþ™¸¹E#N'ÑaÌMÍèÜ!±®]w¹q†û³LWÛTŒ�f1á~#Uäªs[·»#ü…4î­KË'Wïý\½P”=ÙÚKî*œ†Z¥>¤VÏ@…óž=è³K®jÎS¸…�r´VÎ*7T™'žqH×L¯M +Fƒð Ó :¿£°™›É:bquTè4^äi2;œÌ‚Š% + ù$VMLfúòÚï㥱nÏHÚòêw ލ�3èHÇaFËqÊyäÊ¢4‰G0b`¨ÏÈ9 ˆ‚�SóRмŒÀÐÓ#|ÒË;=ø£›ý-§©Ôß§Ò™×SyyÍ‚²7•qÔÞLá>µä™,rz¢2ˆi7D²¼A48&ÇT'‚ê#õ’Ãn€sñkZ°¢ã¤Ö§MbÞôÛÓx1‰C$Âl0mDȃn°á � Ð�IÛ|ðvûÈH€Ó¯hl|é-‚€ä¿Ž$Q’¦M +@6séa‡>b ² =s¬ƒ‡u,â4-”~Ï4\8  …#ZÌïˆä×NZ‚o¬¾ÛAÏ}1ÉíÃvÓXç‚°QÄZ ì�xß´µML"19l0Hž`Á+ÕS>Œç~ïaC+Òw~dq^ßÓµ4ƃíŠNðÁîâÁÌ,ÎÕêÙE 6+ŠWŠþøv¬ü�uÛYÅ-æÇü¢”ÊR‹j•á€ô‚Ü C™0!¤ý�@ë ‡� è‚M‰*1d?OŽ­ºÊù춆¬ÐÄ9i­eHû<*±î�y—´/ +Ì9µÎê‡òŒ•+[®jì}šã7£0ݸ Cëè‹íJ:jçŽB‚Jp{”àºZ4ï:ŽI¥çN ZB×SY¹6}t`à¨^n“¤&A”¡¾–Ö9±òÇðbé9�NA_‹¨½n ]œöùA}„)'ò·`µŒ³‚Z[uo "Bé ·"1»XM'FɈɔ�K¦9ôºÄ‡‘—4së™Ý "²øˆA·ôau^Ã#S�Õa™ º§ƒÞüYÿ ŽNе*ƒ6m +‹Ït¥Ÿzåd†V�¿þ8:2�M¸r›Îúµ~+�䯙@�Nfý×òAi�}�Ò°V]ü`’Çí~["½Þª „3Õ8Î…ymF„òM�ì®ÓîCþ ÿAœL±pcZœ�j à¸éd¤Æ@zR˜ã“5¨ÇÔD´…~È#ðÀ@.°~“ê’éE—=ñ|”D‹öÌš :ÃǰH6f¨�öZ9²5hn¨.néã¹ÑKôŠ€ëM=ÈçD$Yîö=S¶Ðb¦ìWcW¾UJVà²FUH@YKŠd ž6Yó¼ÙâûÔ/T¼Áè±à1‡¥Ì•e‡“+ǺT×~X'Ò„áC+ǘêÁ ­J,d¾•>dÝ+¹pî,h!ðI[ûÈÐü¹œöö¹êœ°‰¼ˆ‘ë9“¸I�Ä ZÀ8%` Š ÝšÑÄ9eR+?“Å$”„%F£!£Ôߪª€¡r_…á@†z/ „¢kA4™G=1‚¦ÔIÉ ‚FôqyÊÛP¨+·jwêÙ­*þ9>ÚG�/Ý®'Ó¹ñ{8̨Ue".UsÖ†B*%gº)A)]X2x™mÃÑÖf£#žÛÞ¶,«¤Û²% .]º¼Qe jɳÎlÉq-•dÙN9eÉrÊÚÁŒ–¯úðbµaÃÌÆ<ªD’òó¹2׆÷ñ™ñpØÜÐþù é‡çMó<äÙ�ÅÐ:>4–ô[{ÐÐ4Š~äx95Ãr¹úÆ�,{�$�†Â$i”ÈÇ2!MÚÂâ8áùãÂQBú +?8Ç(¬Aa‰Pøÿÿ?þÿ¿ð3þûï·{Øí¿ÿC!BR8ÂÒF…l�P!…­�vûýýõzý¾ïÿ¿\.ÿýîîîîîþùyžÿgÈï÷»wgg7ŽlØÝxaðdðääNî8xÇ;áV»yÜl(ðfl„›mÃ6Êx7²323YYÙlu6ÌÌl(Ìed²¡¨±¡pmÜ4³¡#ãÝbb�Ÿo¾¶mfŸ‡š�y(Ìee“ØPØb>Ë}›Ø#´´ÿRÓ¦P%»­ë¡°«v<�x ¼^VCaWãªu5fãªÎvž)k Ц\U®²QUUeTFeÛ£Õ¢ŽÚܪ*w�‹å*…QvUU EM¹Ì²}OÙ˜2W«uñQÕYUÕojÌ:–Y‚™%FF›ªá U'ÿG· ÓPøl“m*—�†‘ÑÑÇ�Û7Õ†T™”T fȃ<§¡0F»hÙ(+ +3ÑÈLt„†=ªCÁ +ÆBч}(Ô‡ƒúx(ÐÉ‘n( 53³333›•‘‘Y™íìÌn·¿�™™­ÃfV³�Ú¨�ZMjdÃA™clÜ Ù`4m(m ˜ 1ÙÐN8ÛÆÙwãüqºKã¶‘m$6l Ô#³2Þ㾇bœ‡b(ŒÍòP°ËC¡ +®Žq™<è¡`¢°0êwEb5\åVf55® +5¼8ÅÑšG«ªh ëCê§žÆét©b±†bŠU45ˆŠŠj(n´ZCѺ1UC!cŠ5%Uñ8M�îèh(æÆ™l(.tR6 +C¡Š:l(t( �À&€¢ ˆA� +¸@ˆ¡a€Ã:�Ò5 xpÀ|€ +„‚0 $@T€˜Cø–3Ù•§¾t8ÄKúœU �<1¶Ò�iñÐfÈc¿»yЇà½êšŽk²±¹;3;mÂjvMN»‘»Oè65DÑ/áVÝO¼*›ø#*J74Ÿê0ÂXdš�ý1Ï�MádCú•T4ÿŸ Z¦Yt›„miΆ­ªŠå*ÒIñŒÆì¨+2Þtê$ï £š˜st$¯õBWVÿhº?ëGÙzQdêEÏuˆ#ú~$E—«ÛªBWò]LZþ|ˆ–,R³íÐ5{LLjÕ!æ¥e,®’©@œ‡~¯Ü@ˆ` /2Óšå‹%jLLdwžo[ ?É<QÎh†Â¿�HÜúy{¼è’Ñ&Y̶* +‚SÒ™9Ó¯iQŽ8«^TFN�e]êM�¾ÄL¼Î¦7¬Ø9}ÕÀΞs^µi áÞUÈL† eÄbS3x™¢�‘’çUW¤u†UkŨ%g¹=’lÜU«4n쥞9®eqÕtìÃ*â¹aÕØ‡Ý‘“:ÓeLŸD[TÖº’}T¹-"A3öáÔ7CЄ|ꔊ†BêÖàæC!QfvQh¹1'1§¡ ¢oj޹»¢RNÅ3ÛÇd)“¤jP%q‘iHƦ¤5|*™£Çu�Ò¯ò¢r�I ý_ÚBåL$st­Sõ«»µ¿+#Ó6&ëí“lÐøí¯ÆxÒW ÆÆ¦&´UÍ”‡‚0qMõt*ŽÇœ+a/N‰It úþì4&ÑfȹSÝë&5„Ùˆ:#n‰ÕµœÐ�¯r7ÌñÊ<ªIP�  AA‚‚RHP�  AA‚‚ +8"Ø€8ûl¥ƒàd|„fV&Òçª7ô”{e“Aëb3öF}Úm×�ÔwÌÝgrFƒš¬ç¢ó” Ûnd›-ò–c3ò©"Âßíþ‡¢ +d¼AŸA§¢j ÜÁ&¿ÙÆïìΆ‚w÷8»ÅýC!Ç»œÇíCÁ3Þ E¿Ca +á½ ÕBÝêàŽ:ÿ*þÿ „Ro\ýW46øË !‚�Њjý9“=~Q�¨SK=+·«Ì0£^­V™ûî‡ÂVâŠ>SÇ¢%»�~(d°{y(ÆlŒCñ+ViÜØí4 …Mdl]Oõ‹¢kYåŒÛ‹››S ü EY:¦$ã¢Ñ>¬SM3K–�/©­*·â]»^™Eìí™ …} y®Þ�3ͤ¨5L¶—zJ^èÖŒø;ŸÑ»f4"‰kÌÿïJ¥&’àGë,'$eÒ‰c9ß]IÄnv„üëýÎæ–s Ì,¾²k@˜5—æì¥émìyÉðhIåJ[ÝㆼñÕuÐ�‰N'³Íhgˆ8¯Ž…H‚Š($á›è�;¶Ñ2®¼�0“År XDBÂGz~ŸG�MXEsBÂB¥• )¹ØêÔVB¢Rs!qtR2ÏîDÂæGeÙeÕÎ|¿6qÏ6cBÂWCE«Q± u:cu¾^ÕU¹HNHØÜ9•±ïúÝIŒT�DÑIª*{|ãi‘¸13×ogek�Zb¥ El;9É +²en..Efî>¨ÌE'Fe'%*ÍÝ>q÷“ç6ìuGTµ¢WîœÌO°f͘¸È5ˆËÙoÌ*Ccž¤ŒÃDh¤;‡j J<ý ‘|.gp—˜Çüwœg%£<ØÐÝ “OäEw#MÑ]gj´”‚›qgiê5]2&zB244 +Å�™åcGàI}Lè:R Q)�®Hê’©)zÌN 8s"¿áݰ›¢:ªÑÏG»)—|3û{×’!ëeˆ£T† ¹²ÞØ ËlW½Ðüß�Ä×±"±¤Ž¥j“ó,"þçg#µL}Èû±1’­KïnèEz8s»#3©QF˘žD²»Ú†°³³ÉˆÙ�Ïcóíwe®%1D¤ýÓ:ÉõCÎI̪x;:éÓÖyÐK>CôHóW‹Ä£n5û(QdËr2lòQ…ÍtCljÜÿãÜN»BYÄ)64*#x;íIgdf t¦”“�_—òv³¯ø›—ñNÞåäjÜŠgFE¶²2!ƒi§0„îRwp"õ­ éÜ Å ú]UU"â¡ MGttDs: …•ÕYÝxt¿«Sªb’ªq§Â@p º†b¼Šî舌Æ‘?FFDG4§ +º†B¼TrrDC1¥êP˜MVR +²*YÕÀTc50 …«è`k:äª�‹45J¢¡(’‘HCQÔWQU‚_DCñ* Ñ‹D®×Pðˆ*&" +¢¡ó +54H—6z¨4V¢ ‘‡¢È4BQUMCñ"º¢2Šˆ +ìP j†ÑÆ5¥YÕàÔ1Õá  +êPt(*ŠÔ^3õPÔ­Û¡0úè‡Â®{w(hw(Z—t(êÒíP”lêøëÕ¡Ð�à«]gð%¯¡ø¯| ++«Öu(ÌÕ³’ËêêPÐu&·ÃAõ®"º�Ð ™� YèF ÑÕ¡¢êïeÛ—ï ¾òö­+]eðZø‘¨:,D%ÆamIW]Å*ÖÞ­Kh9U’˺ìY[­Rµ¤©¶rÉ¿F¦Ö_¢R[C­ûîí[ª ¡¾íµÃZÞôø¶U"ïs{Ë3S©/Â�C�PhNEöSùwRþº4æ_^ï=þúSÊ¿šî×S‚‚ÐK¢ +ÿÙ@ñÁ�ù|ç{i‰”Lææ†Ä¡W*4"C×xª ¯Û‰kv7Õ)*Y¹-ý''w=úm�Š•³&«”Ä�Œ‡Ñ8¬{(xƒÄVë%Áq_&ónîÔt†çD†r»�>t™!Ñüšjö»Jiý�°«³ùÃ�pÛmH´ìÙ{éÖŠt–ÍÜKc5™™{�ÆV½ëÛ‰Ç6´Qéd¹“–3CüÐðÓâ‡æóy¼†Òú\|$ˆ\eE¿{C¢¬Ü"ÖÕ4¾z‹æçÑì!QòéÉ.Žê�0)éœmåq¦fhTŽ)‹Õœýù¦ÝMLXeøŒäÏmG¢®�Ð}Ùð«6�ß JÁzBEwÁŠ6¬í^^ks6ÃR¡—­A–UCZÜ)RD-'rRHüL”1e]OÆ­]¼Ô‰�¸¢Ð+&[ ‘¤z¨Thšš)šH€@ ˆE"y0Ì€i?€“L"0::0ŸG-Ê1 €&uOHAK/,–õÐFÕbô:Øñî| DM¢QËèdâp9¡�X�ŸÎ *! +µXrzN.ϬÅźÌ4½oñ^8 ÍíÔ¡o±ßÆÑæƒwD6AV¹Îtq:ù�ŒiÂÐí§‹dˆm^ŒAˆ­¤z±y1©Çs ˆSïõ½ø*²*ômÁ¡-Þ_ÄÜbm|ñùöØß10¾8ÞÝa‹¥zo'x~QäÀ 9$0 _¼0¯ñòêBÊ â‹=¡|Ê}‡0Š{ñ¼ªVD[ˆÊNf½Ð�Û¬`�,ͦÜêBžˆ•HîcöŽÆMÌœæ@ÍãåòЇaH‚n +c¿ÐÔ‘uH‘å%Œq$RPßÉ­LB�Ž>|S[€Dü0¥E%Š�/²Ë“bâ†x·":¸ �ñK4ê•Ä1v±‰^Óï"§­“šºpÒ~óâTм¡\UäŒW«OÃ…#%‡®ÿáQøŠ<A™RnkŸ�cuŒy¬ïe ÇF#u®!Aïáí‰2N2؃�= ÍXѰj„¿™|¡ +jáïTgc—×rÈ·̰�Ä-䟛0ý¥–©¸‰é7 5iOá|@ZÓ`Ö^Ø+ȼwDãì¤í„m¸û«= ÿ%½â¢LIë)Sö^QJi‡Ä4˜ò4wÆ¢àW¥!‰Zs=�ãY“b!Ø>c1Ǭe[Ý{ñÃûSÞ Cçî90üpÞXô<ßxû¬Í‚Y©S(m«¤ÔÜ5ƵAÜÃoŸVoÔIÄMÐáV‡Ô8eIòB5SʧÆüF4eºtÓÿÔØU†ÛR(þKkí)ªè)Шј—……ÕȤªK²E…=q|„ôºi+JI¹§íîâ®ÎŠÁ(§Ä¦ËNÅ¢’YÅpõ.^»`$Þ…ž´0}¹väË‹“`ždÀÊ‹y@¯©^¨IÒ‹ß’;·î}.NØ‹…./A¾ØCÌ÷bïç¥�Ýßù€_LâØê.–úâ¼e™jŒ³½õÅÙÞ�7Ä@¬·¨û¾v) +…ÌÚ_,ö"c/¿tÙø['²ÈvPŒ…ù ÈlØk`\îs†E1bÁØY3äsÄ” Æ &Ü`½0 +xÑbƒ1þ!2¹|Ò"ªbq =>CO<™Ç�iƒ1ßÐ"ÃVðJÐ1¯ü™`*ÐâÍ>Õªï3—gs0hrònX\»Ã¸Á˜Ó»}a›÷æã>œ“3m†K¦@êñZ°û€0–[Ÿß²�çC&ÆwÀ=gíSڲ鄿\'ÕèÏ0¾åê=µÂÎþdaè§Ck‹1ûžS‚Òúè8Fû’Y¿†ŸXèbœÇßÒrçÚÈ~=i:v�i¹í·vàÐö˜&†ŒC!ޙī#@TWB®ÍZ{ó·UÇ=ßÃ2¾ëî�€ÀËÄl¬°1·•‰b=ñÆ}np€NžŸ^xõ1–P€ÂJ!dÌØì +¡4®UزRdÁÌ)±6Oy!Éøö"äChOÆnF9¶‹ E”�‡Em*Æ¿® !±Í Qž*ãŒ?]©Œy»ÿž8n¶¿É¶Â,^60øt—1{„ÚG‡,ã'f¥êºv“Éwªš÷BóA~o,„ÇÒ #jóU1Ò¡äLWÆjJ•ì*Ú8%Yš±„ãÒMsa¡‹}œm—mzˆøàüa�’Îc?7Å÷•.óÛzab÷èkŸku¶SìT ‹ãbèœ7H2F§á#ØvC]« g—Œ¹çXfLlŽ �rß>•b0Ñò€˜’^‚“ Ô`½5]3@?vstä"Ω w”t�@@q!@Ì—ët ‰E5|¢ X©+b¯«‚ôs¶ +�™cƒ‡PzÍkÊ#ÜûŒ)‰Žápd±‚|¨¤„ŒˆýW¹MýDʺȿ�J‰Ï˜„øN¢ž®%`@¡8UêGVfå[ñƒïŽ� ¦”T±‘:‚@ÈCIZôüi'›ÞÓTtrƒ7½Œ<ßE‡âG‚ÀÌFæG¯Ã�itØW5O‹ÑÏýž÷Œ½P·PÕ¨5Öªò?-÷ ‹xM`ÃIdÉ^ÍÉ™X¿Tp~S1A6/¤dtÇâ>ìlF�A]ð?e®²Þ³…´tfE V%bõ(­ÎàtlœÜ'GL ýâì3šœW¡^ðÚ@S[ö,Ùr»v•9FÛé +Àû¤jÙ}n¨_½Ú¨)@Ñš¦‘u°äÁƒ\0É~¶ „„Åñ!¼$XŒÎÑÿbS Õ~ÉD'ØyUV$S.íHþ²6ŽŒŠ=2Ί6)�Ôš[>©*ç+l;‹ Õ>äƒÛ±öµjšý ªážp\>D{ÏK *A¡r‘}:Ç+h�FÚNóð4B­½»XŒmY}të·¹%L;7ï(�±uæaN'5)£™(ãI½ +DÅ Ÿ”10“­^µ‚’ýœzc𔄤·@Â(ek®¨–IXJlßl†1 È4˜J’zª$g,î06{®Òì4 =¤«4Õ¥–¾ç,V:!èo LÇJ°=µ¨„q(É�ù!ô�"K?AZÕW +‚¹y‚±Yjÿ›7Å¥Ü4ŠºÃh1–ïæ=‹D’ÿò©¸PW_µç¡¦ÐüàT§…UãW¤úYz±EQ;„í<þu~âKµ‹¡œ^7zá훉[; Áq%22£HP–ÔùìäÍÛª)æ––:A¡lÛÛ%˜JݼMÈÛjá�%Äw:ƒ‡dµÖ©�bÔ“nO±BJË�˜ýK�aXøI;�t‰!8MUI¬U=­¢ß°,òB¤Û\F’Uçg´´wð­föÎÍN¬THý›¼Û|°‹¡òݶ^9x‹ñ…Ïó6ÏN÷ m æ`QæÓš™Ñ?'E=F2‡Óñ„_ø'º¬ùGÂõ�i�Ì}yd´!™.ñâ ,=š¶v*è’j�,á¹Yb€HÒXËVB¥`,-¥êºî3óf#îZe…f6¬º¡|Õ —ëÞÔŪ+F¹äÓ¥žB²ðÙ™RÐæØï¾dñã\6F¨À}£¤Z�SÌ z¼8 +ñžÁ"bVÈ�ò—Gxëréaÿ’%/OáåUdäQCugD†¹5(_œÚìÌJòg¡N”³®0�{›�§§¾¥–fI6ÔVXí:^CM²pƒ¿^ÙÙGCð1d„W¤”hkQfŠW‡ƒ6˜‘£ZZ…³Ñ«bŽ,ÀŽÄY›8nôð¸‰k’óŒ å‰4¢%ŠP¼7ña¸I Z–ƒNÿ0ÞœÜpø÷¤ž%Ðd¶Mêä„ûãÒ@¤ØÒß_LÁL«wÎ�RMn€vÞ�/…Ä^îm•Úš?SoÆa± È ˆwS¦øzÖö#g9_¯uÅNy-!«Ę$1©s0Ts›òúqa¾ÖªW- ±*¤7ÌV6‘ú¶dó¤¬�èˆ7ÿ‚�æýÁÃ*yꆱÈyÿ/îÝ Þ€ѨS*´ZŠôöÏ]@x F'÷X”qª�Ëä .Š[3s SD]A;„`�_mŒ}uR +î×=MÖèÓ}á/ûÈzñAb–ç™ß’Ò.Ü]à­lRô¶>Ðæfþ#ÆÌÁv›ÓÞ/KÍŠB©"*¿l±J+´µ+Ô_ù^'‘‡Ìi_+…ð/{" ]D0žãZÉ|¤®½çLúahý\¼¯5¬Ó-½½&›/Êö'dd†\Е�~}ŽFÿ@ù&ƒ¯,(!.¤FCib `Ò‰^aù�C)A¯ÏÄ$dXTÁ§Š¾ý'‹¨ê<<¯¦» fâÿcc÷;WMwìt,as ÛO¿sL‡|ÑÕÿLÊT ÛÍe⯟vP\�ãz]á¹iMI%²Ï&‡(¬€HÃÛ<+’·;v^椤¯ÒìüJìIXµ4¿”å Ó5n.Ö0øh;#%ß!‡m¶„c¤ÜVSz´Õè•�£*ƒf䊂� œ +æK+Àá–ù^ï{\ÉhVÊs´ã$5ín±¼É=*k�­ŒWâaû©ÓßÇücyÀ08*/DƒÌÓ܈E€@Ô(äO<I ÿq˜Ç�3ðíl +©™[Ö;Z$I](¯ª Èø×l‚PJê4Ñûü[9úôß©ÙÙú¸•¿·¸`�|šÂ±4þ]ê®H9¤�e�ÍT±B´ p¦Ž&Ÿ·Jý0_h_2)¡É@” —Z:Õö$ž¿x,B¡þ$TžKÅ ´Ó4¦ºbÎè){[ +‚´ˆ¤# ½†8à¹A�Pò7‹‚Ýõßó}‰×Ÿ,q2è^�ØïW§ÀP�à }d ¯9ŠÜàÍu—Ú¾«¼ˆ¸›(á ·d`õ›‹,µ§°Ù†¶çH®‡6¹ðïÿÕ_Ó³#¢D˜ªDK{úÈ$%¡ÄX@O­W:R‰Ž„Å(ErÜ3MÃ\±ˆ{ í¿3¡óÕҀɑþ Îb\²”6o¤éN�Ç€ô�ÿIÔõ¦ùH—Y¶1›¨QGU¦ê�ÝE—òý!îð>¾dôÕ"=£Õ{Ù¯¿!¨‚‹¡»D[‘­@mh$R¡1�ê¤S d,IEQ‚S>]§h$8b»iÊš*t0Q¯3‚È#ò¶´x¾KZWçXD°}ä™÷ôèŸXKcF�Y- 5ÜÙðJx’i]lýcLÒ#þÕø++ýÓu¿þÞJQZ‘„[�lÞ”…i:âÌ„‹Ã>¼õ�1g�l½~^Cü�ÊRµ+ùECòšþY"ö‘ÁÚ-á÷œq2.ó%äÉÊA£®œÏhÕãw(ép�€âÍdÝ(½ØËÛ [QŠ2€š12åÌ”Îl*u�"Ú–Rãs0,GñØ�ûœ¸Ëo H¶ÕÀ·çOʆ@êø[l‘q¢$œ +“®Ü؉ BHcò§„,*pBäîUFÒcb”Ž�'ëÃN„" b£ bÐÛ�ί”idNÂŒy—FG‰ªJÒŸà/ÌB(AÍn�ð²mŒQ Ö€™KÄæB k„jZv´•}€$®ôÈ‹Ôá`Ë‹¥(b÷u+®î6k×¾÷ìæâÅJmfè�4æ£öí.Qx½ÊT#x‘rÊF²Fh®|!˜Ú„¦[nN2mxŠD°#ܼìù©¡ÆS»¯î‹¬ÅUl(à×I: +±ÏŒVnXÌ×yZù‘¤Âo¡AäÑ`>‚ÊJ$�ülM’ Z ß6;“„ê¨Ã4Ù’)î¾RåµJtÒœX¨¡Ãï*\:Q’ Ëî] ™”$¡®~Î@J˜šJË^%aŽ›U¾Ë•„ðý‘iփߜÖÎM‚@;!¤`/¿£Þ|Ô$Ñç¬ý ø9KÐ!ªV“ð†ÅFS*~øo À~¾ŸR“€ánÙÇ3g0RÚÓJä¤Q\phé�ßiˆäðcéœl„@ËLàNs¢®¨jÆÞ 0-yTö¥Ièð5ç¾ÿ&¡�À…Ö°ýÏÖE¥wüfd»�é.ÚQPcyê{j…oö“p~]~wK§> ‚}òÂî)ö'ahtG®: þŸ#Øâƒ0'¡‡†p'•«¼; aËY¿^?ÙXŸ„Pß ºGé(žø»Kœ¢9J€òp×§åž"�6¢_è½ÑËFž'4ûËC©Ñ[µT’ÒÝjtU ái  © Õ‰«bíUÂtY�Rs�ñtÇ?¶+Ñ¡J�ôÇ…ò^VX%œ\8hC/‰ã*aø™»cÀÔhUB½ÐV‘¤¥ŠÄ!V 1r +bU ³€Gt®“Ää±ûª„#N†­æä¦Ðï¢ÖZ™SÁ�—ÆŠm&(p­óÍ™(>¸ +þbÐÕoªk‘¤Üsg%*'ɬ{bqÈ鉆Äk&«jºÔhç!kTÖªÔþ"Úcf¶èš 1Òœd�†_h‚‡$_ph†¬%q®ßÔ¯G× t¨&Œ.YÈÉž›š®“uëD!d¶é®¡z„gU™‚pt—j¶Ó¢éáÆèqI]] ,wþïê ÛîÆñçÆNêZÝx;¾�ÄûÏ'AD-Ü%ÅóbJ‹ö4ø(W¤lwÅ‹=Q¹ž°±jŠž}_QˆHE,Á˜ºŽÍþ³ÁW˜7*Ś؋ÖÚûò“©CfÑðhÆv>Ž{˜6>"÷8œ|/]©Õ~NÆû%ÜÇ忳õ¡!Â4P)ê\‹:„”ƒöPñftì_~"%Qü.—ƹÅY¡HꎩX.Wo²U"Ž^½º¤X·éÄ õΡþl]ƒÞ!Ÿ¦pIq‡zÌLixý·ÃO·‘ÙäœvŠÈΠqmg�ÉÀ·ƒTY9ËY)<>92'pÚy„e`Ú@tÑ:W�”`R¯œõAV5ˆ­+WT̶wŠ+È"œ›n’À’yn l—CŽ® +&y¬e®çÔ0QîªÆõȃö€þƒvÃA–Q£é÷ç¬=*�&4j5r/¬@¤&é:øQØ9`Iw^oÐÒaþL–x©)…€ í¼ÒÀèÖ4 ×* ŠYØ>Ä5­#ª-…–±6’´¬b�Ü®ªZCm[ïkþ@»œD®4òo-\ðøCHŒAk~ÜKàbȽ"�{¯ò ¾°w³He¤:ZëÑV\ûVRQ EêO®Õ�§¸8K˜ôšÍØ|‰Ò·ƒ™¥ÅŠIl;AêH8®ÿqsË@l_˜lS6Hw:áW}VÂaÒ)‹�§AËÞˆiœ�¿²»ÝªÀŽW¼§VlT�Zßly³6»�&òwUjTõ…I\í’ýËlBFÓ¥¶¬ý½�©)»5ag>&iÏÜÉJ-ÕÁ`¥ŸŸ*_Zšš.»Ÿ'IÂ÷™èd¦• k{ÊiH&u™—ÊD㵟8Jÿ?¬šRØîíE�œ£“ÞDÅD˜G˜Äº�åhо@84Âk™ÜEƒõÚ›BÔ˜±`WòÆu,0ÂôÀ×&¦â‡_ hLzrŠƒ¤_Ùƒ@ÑÈŠ<oÔCAµ0óOa!Îør'§UR>_ÍäÝ«�CÔAö™Z*ËŒoÏ…„­s¿lÀ‘Ñâ^\ÿpZ)c SÎ{“î lžÕæ–üÆ×~ÇBpÂÕòN»®AÄc¶m%¿G‡×Ò£‹™xM"å^“é:KïW.¶a7ì–C_¼¨ä#˜té ø&€#0[¾‰À}žkÂ�6ëu 1I–?("¦Hkò –GXAZ`ŽIê‘uóÇ@A© °K±~D̼˲\ÙòRRöf-p·,gP0ŒÞ Tô÷ 숡,i_¿ +u#©¼Y¶2c�°©ùu’y+Wƒ„X¦€ W5I”)BEy¥ÙÞéG¿ þw>©‚Õw?I¨ÔÑÅ®¸xÚo�Ïcááõ4Q*ä-Æ Tž<Ëβ2Ä™F%Ù°E?¿‚¢taù÷õ5p‰€éó¤µÐÕ }®jŸ"ç 5é�ÌÞ}léÐBÙ²0ŸÛÒ ú+„Ãþ�îQCpXËÀ´Û© ¸ž«[gžéÚ••W;º¾™ÆDµ_ÂàOËRN,° �ZÿAôŽ’Õâ:ž¤ Jêdö‘€ 'Aì‡A ’¦ƒšÉ0ð›0áßžÖm>Á¹cÍËè­4È>ŸAÊt­V`ÂçëD¸oÁH(QÖV„†râSs\í|¢X6SÒ|ió&ú‘R:TÙߎhÒ�ÁX\vúÁG2„­´µ�ˆˆ_Ö´_•²�«.t§>JçÞÚé‚Û*ƱD&�RW¾ÞÕ£Ÿ·@׺9Qq…(‚c¨Žåäs‡$˜GõŽa˜6)YA`kÆkøÝCYÎWÁ¯I¨8pàX¹ˆ^SVÌôÚæ0‘ïMPÑú1=‡ùe7 Išø½xÀ­E‚õÍfèK €ë$aìP×ÇØ~¢fÂÛ­ �Ò w¢iôêA° »¿•_yò¾‰»Ú ³pò¬HH0MgÅg˜M©ðëpäŸH§Ôd_sM&gZZvÊ!o-5/Áš!©X¾Œa� +�îi jcaó0Þ`˜©�OÞ"ú¦Ø¯3iu´ê’’DÍ�™3ˆ¶áe'iè2eÁ¢tÑ«¶tt3Žæ‡ÓŽ±Ú‡ÉèÉž&Ï€ª`†"ì ijç®/Ï;²H`„Ns9Ù,�Ú4 R/›Uh0é­<–Þ\áo;³ y[5“÷_Ïa�U³hÿÑRE�àÕÒÚzvâJ‡—æ*ÆåœÌ”’XRdÎ!‡Ô›ä�H{Z‡Œâ[õ_Geµ4&Éšç|@4×ãhs¡ÜµR� &`ÃI.“FðŒJ„uè�mÁ6Úµ}™þY« $!‹fýæ1Âcy +²·óè@Q™Š3�<®c±sóÕ”ö€š0 ïšÏqþ@EX4òQxÙ|:]&¸ç€Ú)Š6Ùß3i'§X”á`.çÊÈ]ó!Pò(±VOUuœä“~„àØyHvZ£D¨ +É[¢CŽîÝQfÍ¢hÒÈ�uÌ�ˆ«�-?†ö¼¢ŽëÈmƒ|« ÚßÒ’òô:Ø7ç­ƒ[x\ò^Ç`ü?�1±ó�Ô*`k•H],&,û ~"sÌ2¶Rén§�`Ü ÝlfÀÖ/?Fpæv=¤`뫯*,°…8 ÄGV®½v�-vkPeå�­]|é?ç4ÁV-¸sTÁb§Úl Ú¬Ôíx°%ƒÉ•`†þ`‹–¬S¨¶¨Wü‚áŽÄ[�’r˜‡ÁÖ%Ÿ5á˜*aâ6Ñă-J@‘Ñ£R…|›Ì°@é`ËR!PÙÝ9>š©ÀöG•¹ußGç«ÝôŽ2Üo"Ôãu-ý=ùµjD¾ŠvŽ�ïh&PªM¥%ÞÎZV@ÿ<;ÊŠd§|š[L‚D›Ô6;*Ƽ–°‰œÎ_¨À]{æAÍñ� »V‹<2U2Sp!4éH×|Cß'—§k/ŠYE4ö�…Ä´ Û°äbܼ¯ÊÃE×E§w”ùÚÅó“ý;Ö×�ªÆÈ“O zgãõ#8K¤Keo÷ïÅg8à³æÀmK•Å`�l£y‚)Ô�b*Šî÷É‹Ÿ1wÐ}{93ØP0†—8V&/6Í[FÜÜaškO¬×ßX$�’rÛï°ƒ“;„ú‹¤31^W”W��…0åÂØ5!÷1…Á[‹QŒœèìp9o2BÑŒÌL+ ‹™ S;òLìM“ðÄ(œ˜özkºó¢MD°±h¹ Ûùa7éä+Ò¶ä èƒ\”çË *ëZæí´G)œtËÅn® ß–¶³”†R4á»$?$Q/ÂúÈzêÚ†dwÏ~tzGJÿhrÃ/¸£n×òîýÈñ"o}t¹9û/=t‹¶\£F¢õ:26š‘¾eGÁ‘‡¾Ë7ÒGŽŒÇì„â‹!š™,Õ=’îõâÙƒX£#ààZ®ÖØòˆ5Üm�ÌßGd¡{NóÂözºë}²•…'Gx_üÇÍÂÆÆHzŒ°9ž¢,³[>ÂPåQypñ28a|�”Ýì)n7 ¨9È•¹�Ã94’l¿<Áu1óÜç=�vxí-Á£,)¦©ù®„z.…­çÓhÄ\€U¬ÈMšL)#²n¨nG{Ã^~*¶Îtì!^.~ü‡¦ïQçjÆWPUoêm�cÈK»eÛä¾ÕkÄ£Ò!²pVZò BVöçÆäzÏ6�¸$�fПuDeòÂC;;‘ʇÕê^ž¢F]Ž�×ܶgqߤi)å¡)ËšÈÓîÝÕ'ã”Çë·AÜìGX ðŵ˜"Š1 ö ºURËÃÀ[Ž,¹1¿�7ÍvÐ^;ìt𤮄¼~µóÔABaK×D±n—'¢3¢ôÃ"˜REÀZL>tˆté'j¦C‰Ks%}K€9x8´Ä=‘rEg°û½J� ^éM<3d™Õ+Jý‘¾¡"÷k3hX@XQ–�çá7T×z’·ýÁÍš’çî$àGƒˆEÝŽ@gÇPñÃx0²dÊ#Àf`¸ PÖ‡ô>üd–òölûáÌÃàtȳôæÄsQ–0sï¿�uW­º+Ö(lCÙ± }U<²)àCŠâüªx¢Þ¡þ›‚Ü©í�î +z"Í”Ø6aýÓiàôÇ[¶³“¼­ÄÿƒÇ~ÿÏ|$•zk³@ŒP$ÞVlªC³`Emh¦(¤;¦ý (=;ØïFðù–=aÐu꯱ƨHÝFNÝ=)Ï&¦Zýi/,G%2!†±ÂºaËíY92+©Žñ7 âèÏ{ÓÆ¦Ï�Y‡È]¤§h,ÚýÉ|‹â·PŠCDȳåçÿ/îM‹ÐkÔCÿ¶š€GÅ 7ü΄ŒXšq M˜GoÀÛÏmzE�öñð ² p±}]ý<ÛíùPÔÚħÔµí´ö6ðæC˜ýÝÕ‹I�£²ý›­n[„¥Ìkp™hØÀÜϸEe¡g•ëRÑ…:lMBp¹c=} Ü¥üEŸ$dxg]Äqù :æÊBxH�Á)i�pñê0º n'Ó +DÞx“[ä¥ ;“HT‹â¶‘"Q"{UkÙÐ „Ô¹=/GÛÒ°•Ö p3êzÿ(Z#³VÃêµxÜÙ*ÔHß°±}]|d‘™ @jvÑÄÅw7ÓÅVéøaŽ–7)PlØö9ŽcÒèÈôl�)p“È�¶ßÞ:>“ÁdkLOW³kçS°ì›EŒ½eî¶Áÿ‘š,Èâ™q £kAä‘¢Ön C#p‡Þ§tÝè%Âdû>u"/¨4_ãÜÝÞbȉÙIš Ÿâb¸®‡<à�KS(%P«@qD‹Ž£�ñÈïB¢‚­òiúptÈͶ¢åbªðCë;›Æ¡s÷R\$Š«‰wsu<üÞ>,9š_tÂÀÂ>m=­÷™¨ÅЕ^/îr”ÏC2ªEð1lÉ[7¥óleÙ‹b Ú§ª”‘àï#Ž/‰�l̵‡ÔfåÕ=[«Y[JX‰²lÅù…`÷rì;MÏ—‡(¨–ë%<ÕÕ}CrëÛZ^1/ôÔ#˜¢r-º­³÷ø¦ ƉR½P‹–At”¶=6LžEJ)ØþæºëïI’ÅRºU¡iÄ6üZ=PÑöš# �Ê�’ˆïüE Äiï¦A¡ (ë[E[»À Gtß“}4 ÷ 3R6}óûʉØB›o¨å²ÂÖI0ŸEDN�Ù.ÎÄ$öòŸ/°9‚ÝFy9ÛÄŒÓI@u¼ËŽ\Ÿ•$ Ÿå{}Ä�ßÐúlGXó¨nhÊØÞšÉ¢©*+aˆšÆ&ÇxTGT…nX|G*çxñJFs`Dž@ÉWjÉ1Ï÷¿A¥ ´býïÒ d-v㻼–ˆgÏ?Ûòƒ%žš•© /ˆLÞ/žÔHÜ‚¾øììyD¢°îFñ'<(«_‰lÙxjrDªFsë¶-êAbaNÒ"” SÂC>À+û´uÀ< ê¢B5eç( ŒÊ>=¦è[™éíâУl¿¾û£_f#0C£^£©þ®d›SÚ©¬è»Ö™ÑêðåøÞ ±+EDIºÛƒE߃@ú‘"úH¹ ûăÒû]b/4ˆÀf�b%u?Öø�V`³¢;£æxqjïé C¬í®²øGíáè•õp÷´Ì(ûÓß_nÀ`H>�ò™‡|茹âÃËë +áctEÐp¨Mºú)g£äæÕËÖ4™õýÌ s¬””À§S…°dy61‘¤f6ð­@l°–"nTÓt>ÜŸ°Z£AA±lʹäœl}#D89£—¯Eœ»‘gÄsfÔ⺠|*C¹óAp1”S+CŠ%;zašä7¼lZ/˜ûØÅÒÐ;‹Þíô=näg Èç ú×$�sÙ›¥bF�M–\°~!eÜ�×äõÛx¤.ˈ`¯Aøv]�˜×§›áfÙÁŸ% Þs™‚Ëg“Ã(„‚ƒÿÆr}°žÄ8‹dJ™ÇÌçY„ZüÉ<2W‡ðu8ÐÉÙóˈ4£„Δ®.ù–e�ž=Ù[/¡u¸Ú[ ˆÍ;ùÿP�Â>D™<¶¡xŸXŒ»˜¶B猊•oÀ—ºøMª +gŒÊH üvÀ3EÉŠ5Åš¿ù78Š•åQyü{�äÛÀ—:kœË”Â�Þà63:¹‹A�UiðÄ¥7ìîÊœ‹BÏ~+ ¸£‚Œkõ.a+ºezUQÑSíxónæ�ÐûG3=€­Ÿ�ˆï÷ãÈS¿¢W5õ^ƶ+?¾n<޳ÿ…P˜>Å„u”¢á¦h’EQ9yåÃÝÔCŸáj'‚¦M±q ÿû X¦"#@ö¶uÕp3œY*�õ¯áômð¹³ÎŒó Ô[„gb"™·—;�>,_=VJBŠ{¾b”G欯,¯$MÅÕØ§Ä»j¢æZáT[[Ÿ©`r˜Ò=HP[Ë„ÛÄ+?¤”viàÖòh’ùñ¥ø/�€ïK�föÙÃùÙ‘Ô�Õ˜ìIG·òG«¶±‹|´ê†vàzÎÈ“Å&H…P:#½ô Ph4e¬ä‹ajuƦ¬å`Z(¦E2Ê- áÿfž Hë‡QL½I±¨<šD â2ÚÃ=¤¾HJ(ðv Ÿ†Úó2‚žpìiEèü”:ÏúE¸Ó^ ƒÄ‚bZ´ýŸ Ù è4 (w4Þ TßÙ$þ¯¶vÅI´ÿeÁƒ`;çŵ‰€4&ËI7¬•{Ç›÷‹†ÅÚþyånXë½±:ß„dè~ð±¯Þøq,è§ò ¥”?ÓºD5± #ï~mÂúÙ¢«ÑÒŒ‚E‡�Âr”qcÇ[e,6��«´´5;™.,K�ä8ñ…MCÅ{\@#™˜ƒ³<ÅZ#ávªÖ4¦Aa´�fÒxñÄN¶)Ïà�ÒÈÚ%)¨i/Zp•]²Ôd�°ÁN4Ђ×\b‚Ì$¹¤…|LOiÏ5ï·'±û�MÏ Û úSõp RÝU»¢_”t[½[Ƥ Wj“”‹¬ãû Lí²6–÷äHH¼QÕšq,‡JˆQ/³ÀFñ°¾!l⎸¨D¶b~iJµa?¥C¨Q®4¾þäi mZn‡e;m“3¨ºkZxŸó5ÊO ÄŒa*ã´mÄe áþD›¶ŽDBM»Ò¿‚�|Ó´B"hèLûÈìdZ�—"0jB9Š#çÿŸŒŒØn士á¡'‹¢ÎUyìJ¶¥½/Y|ËÝ,m˜ƒ­Âj&â´ÒB/±m4Ò ª‰›:)-=ºy †ÒZÔȆ“ö¹:4UMZ Me͆mœ.ª¸Cõ ¢¯]ሗ]#ªRVŠ1-žÐ!­®}{¤5õ¹Ñ¶}´_ðÚ†½mHGF!÷PG«õrFG•q´�—‡�q9¤0€g`5Û×dJœ'8®Ùq‹{‘´­.cZ¡3º²Ù š-Ún"erµ¢…V,À¶k€MÑö-tNáp¢]±Î¤o»}$ZO[låÚ"Z¸xvc­É-„r¸iàá$Ìñ¾§»Ã"H�8ˆ�-Ö†ÖÉUÙZŽ>1´VUø’"³Zã1_‡`p£Ð6¶HÖnB+h¼‡j¡Å½­œ]5<.Œ;|ª!ˆ°­·…ÝÐÏ’cA{5¹l(§m=u—¾RÉ?}ÿ§R[„h­9ÓHB?^0õ[À ÐÉLúg›ld¦c„ù7ˆÂßËdö³‚ÅBG „yæg]ï2vÀƒµ}Ö¤Š%³:Äjö¤jPZ}¡^6Ë¢)Yõ}µÝ”Ïqißžh7tŠð[Ïjà¨ùžž t+útiÿ,GJBéÁ\ºK7ï ‘qª$PÏ.¤Þ7xó-+ãZÇ `u9‰VeHQ; oz›ì,}"n§áÂØ:kaòÎ º`²jÜïÇt›‰U—1èÞ“”pO;!½Y�ÞdE3 8˜ËØ ÊÙßçR‘úHÎ#ªˆ oª¹7vMó>hSŸ­®L£X�—46Yv®YšÇXB’ö=ΙgÑm#_^Ð>Å0‡öÐ�œ!Uã!˜%›f&Lµ%E„�ªë�Xý3û2i„X„çŠ^Ïf‰^`QR8¤7Z5¨ƒÚªã?EIŒ2ó) ’ŒîŸ�<i�ç{,g® +é$ß«™ ¡ ÀQé•öeG”¼x`ÿ¤Ë üÎ5\3LýÞoüÜX§`WùH÷NÖÒr º¢OúîWIW­�¡9ˆÒl¨VG]‘hc¬¾í1F&á€H¼¡|†_X¾^\­ˆlÐ]ª¦—ù’7Íd‚Y Ø +¹åÿÅq$A®8QÊ=·¤Xÿâx†ù¹*H›]ɹk´”ù¹?« ;»Ö`÷™«Å®y0Š-•#´�u™ cr»1ñ³s\äÊ&Ìg4’Ø2QyÜ+,¶þ¯k„I’o,¸n´Á±Sx@Øœ•À.be˜¥õpÜ9xB_,>DæüpGNº©E¹LY[“+0I\¶µ–u²ñ`�Wž]í*¢-�?ãN0ÙWÉ$¦œ“'7^Ò0tM ‚βSòʬ æ&c N3’÷S ¡QKou`«*.¼Œê-¬T£}¥Ò ã)¢ŠÓÎÍoõ^…%) |‘w²Œ eD¸½AM®Y8ÔÖ‰è5uÛär¼ƒ,àõf ükë±0ÅšªŒ£#cƒ”ܲÝò¹•!¯’WÎ3îy1b ÑËö/#b&ÜÅΦòˆ*\@m>¦é³i>Ôéìo?üÒ ?FÜ·A½ ÛÿCHÓ2;k£c7ç¼ÊV'ge US}‡ÝOú/àê¿*&ø»µù*EnMKªÁzŽ—¦PËþ�¶>®öÌ*O}烋ÔkÔE¯ÂÇ'JØÄ¨KMå)Þßìø£Ûp|Ÿ<cIG°œðìB‰èýì$&å±òcTO·G0ΟœõK}ÿO—úê¶Û¸Gßæ¹êª€›±×N^ã6äXàfRAX&Õ”’�UÏ–(\þ Ù{R™Ò×u•Ww/¢Rß¼ˆ�¶s?!�°á)µt—ËDˆâ!�?ÂÅž…ïÙ£dÊÔ<Š ê»0ƒËqU  ¨Ue».Iã'–õ*XfE•�ëÞƒË�™ô…”èY9°ÉÚÁtsbàò¾¸K8G1›í­ ¯™ë/~¸YàùžwKCptM ¡£î¢‰¢‰Hµ·0•¦¤¹ŒÃ²7†^âF2Ð./\šmþaâéZUÒÜfB@1²ÛsÉÅ{”÷U¤YÝ{0T±ðiЍ¶\¬t<œÅP×¶³ø—f3¶ŸÞ­p*b©ù{ÆÖA„Ëo K^%’„¢° +XBõÛk`î dŸÌ¯'¤ëU°ìQâûRm�PÔ@¾�Ðqs@‡ +ƒîï�–yjñØp Ùj¥€Êíï¦~S*mÁm_ßô‰Ï¦Šv‹³e†aÇD4ž: 'lˆÒ(„´�úiE}…p´5ðS›óѶRoß•>†¶ÔfõÒ-ÐÖPj�ÿl³Æøüõ‹g»mBîÉQ_gC6<õK$¹4xP«ý¨›‘­SKœ˜Â€>FNcå3ܨ¶m†À‰*-Û“«EÚ@¨E(ˆÄª…¾ðþhže“ +®Ü•­-ª6ÚuZ4ƒooÿ£A›lƒ�%›­ýÎm‘­;RÞ'¯-)UEÀ Eo^竌K�J† ÔîÇ&ŠŽû=7¶Óªõ:– +/Ʀ¶ôÐB¢»ô�3k_ß­û¾½}z©ø1º0ñžÈ!‘y¥ ƒ.¼§ÀÜfÎÕ@Å ¡¶1þQËŸ �%l°‰Zòjµ ‚’uÿÅS„Ž“ ø±‰?0¢!?}!vƒn4Ý�‹Ýµö(�¸6ÖÛÒTðÚ×H¯Ò�qÑÏ×4<ðxh¤ÀZlƒ…Š‹"²Òyà¼Ç\Mhq¯¦<¾y·hî×¾¹ów«d×|ßÀ‘¦ºÖ6œ°Eá­$]3Mki—×R�k9×ÎWßúQÈ5fœc;'sõ"¶IÇJY¨3>\Ãï‰_÷†Ê°�µˆ.^G#ó¶¶ý6íÁÕj±5ïŒ\0u{d­q^‹gµ:jÍÃG†ÆN=(­-ç�ºöh´Æ"ˆ–Õ¶žµÈÎLçz` ³æ<.“´mYÖòn†v;�'�ôÅÿý ˜Œ2î Ái çû ×#zjØQáˆ]0óI¥‰‹¡3 Á­¡aF ­ïÖ\Ùñîé�ö>®Î£ì.ø›Ñ¼ómû'lî³>¶§Ä™•q‡#cÄÕšNš„µÁ!‹j^`Çög¤ÿSDЦÅsÓ/ç+Ç,]ÛMðv5éŽØÃÚæIu’[�¡uø8‘¡;¿”'Åp k¬¯‹û·�²Þ"Ã*oˆ7¡ã`íA¹aC {ÊOcÇŠ™ù^S~$Dqz)ò7úIßö�ãŒÃ!u“X�ˆ#ìßÛ~“«{ê?ØX|kÁZrè¯ ¬u�ŠAVR¡HÏaÜ^l—Ü+n³§; +°àD�ƒPè¤u?UŠiÂ’sTˆ8¾6bÊ6ÄeñOIµA`ƨ‡Ò°ç!%;·«Q¯3hȘ‹T1ñ–ÖO…ÿ’Á™:8’ +»ÒLÒÓžzø ue…áé0ñ�†p© +‹Àd–‘aW‹�xàù•'Ó?:(ÁwO~8@öe²°î­¤ƒõÐîÙ©¹0ÈûbÛþ!+#@B,�ô“`$ßÎð"YZˆÃÔvæ*Ð)ðº +” +„è(rå.¬î �þB*ê„ý‡í7¬B�ÿúÞc=¸Ø3ET\i‡˜c�•rþ‘[vŠ<43mAèþ¨Üžm̬vK…@A[­÷ýõ'W1O¡£�<ñ‘yuІ¬R‹>+ÜÞ•cÝGxCú¡OybÉõÇ ¹»ý²_0Á“˜·µ—0ýIÉ› %œã¡þh˜º2›»ÊÔŸ)ãž8#ò,ÌÁ¨ÏL»[Ǧº$פ¤-èÓgq*B×ìNêƒÈª? 5%>ý g¯VÎ2GŒÿ æú&Š÷ÿû �m€ø³îÞ™äÈœÙI\—€lQ{�P÷ÆaVø)[ûé†R}DØ�#Hƒ¼"·~~Ï0Ãtõ’G:¾$>MÞ«®Å–¸·-\3Ä–†=ä±Äoós³ê+ÀÖÄÂÌLÝB™bA‡c^õ^~bMt®~„µæˆ9Ÿ¬baŠÔ(ÝS”YcÊOÞH>Öü&�°•¸ïТտ�»p@ɵM¹¡*O…Â^~ + +,­åS¢£4òA•Ÿìp�:åÌŽÎ;¤G;Ò·#à­oÆ2Ø�R� i’š5 F}By|¢µ³y’¼?Ü,õý¯Ežü°±9¡÷ÚÞñÚhDâç·Y¡ü§~ì ƒtæÓy²Sl=œ|Ÿð3¹¥®ÞGšÛpÕì>ŽÌ ÓÎä>‹ŠêÝíÃí“l祻:°©±¥5Ë>úQ'µGQùèõ+/Ä�O¡‡Î€/•ä;”¶É×øLW�Nß�’ânÔ“�„½Á +ÜÜ3>ŠÖЩáSƒ./ùjÙ��³¸\Q½—œ3 ðQsd#è¬æÞtôYõŠÙ§ñËÞDiòˆïíÝÂ7€ý�áî0>‚ئ/(g‡q_;Áè1ÃIŒÏ±rˆ¿°ºTLW×!›î´'ã3ƦOˆã~èdö»¿‹Éa–(0>§= +w�ÂDâÛv…-�`•Wk«l|<ž´Z¿}o½ŒÃ/�rºø&¹!4[¯Ê8âz)Óòú¹F@L‡ò‘×¾^°‡œA– ~Ól2pò òÕ¶ FqòÝ"Q^Ÿ”$©ç©¼fÌýÌp1:òúÌY~ŒdžYí’Œ1VV‚*å96Ðζ Íb�ýÛ-)cóä&"YVF»ž?𣱼vPiÀV–t×1‡½ä5*�Ï÷d"̼~òÚ—‚9רçþ P´‚zµ"*Àé[^3r¼%¥@^Oœ=ïŽ)!ú6ÕA^ üY‹Fãï¤ôÃ-aèD{N¨Ãùò(�c‹/Ÿ–QžÈF‚r'�‚ZNµL!¯¯ªD~=�:‘Ü»@¡¼&½Â '¶†åµÐÕBm‘׬;^&F]6éñ/¯MXÿ•}TËkÎhè°m‘“׋¥º ÚºQi3ƒÀ]X†T)$¯¡åR§j Êkðbà.wŸ*cL›g�ºòšHÏÍ.W8|ã4cMªêPäuy-75u^�¼ñÝ`¾-_Ò\ÚÔŒ †,Aë¾LjuÛ¿˜¨RØÛ>ìòéL¬Åù½¤ìi†O®B^ãŽÆK=xˆG”I$ÈÉëÍÐQl¹Û=]Úut0øÓKzòsÜ0|N8iƒ”„N–¤È‘ךu×w‚/¯íDÞgº(JDZ$y]y²ÊŒQÍ^#Œêça+ €¥t�ØgŽ´ÞòR%Eæo� GƳÔDOqÁò’·0·x˜9\ç5ð,¸õAíña +NâNI³à™Ù­EѾºt|º¢}GÖgæ‚çwOÆ›mÏ‚;�ÍO8‡ËÏâF˜ ]h…ªG�&È(5‡A¶àÇrô±ˆßÔV�ð§Ö ¢$sª¾@É ˆ-Áeñ²‰*¬>�H„ñ{Yú›(JU`J>Oæ[Œs]ø4àLøª0ÒYð4nöÇ¢øóFuBÆ.ÿ‚mÁÏU‚Ѽ†¤C_#Õ¦¯ãÊo�èÖêBMZm÷øŠ¡õàÙúºd©Ï¤ÙOñ§ú™ ä‹ÐFÚ´RèÍÌH ÈùÊÒt<üÛÂÈP¶æ=èc¸ô€; êFÛF®©|;À2Û2^”]¬õµÅ¼Eöâ‘È~À8¢Œ’ו_²¾‹Æ^ð¥Û”Dî¬Ü>T¯ù¶eBÐW"%ËŠeALöÂÁþ _‚-‰åѬyžšÁb\¤lRÿÄåT»×ɶ ¦ô¿«T:OdïVIðlÚ|ÉQ£7Ó1ë5Á²òŠVÍ—aÝ&pNooÀ~OÞEð6û!&ÄRAåfS;‡Š )ï–åe¹ØÍÉ[ +ç-ÑÜjµªL·QÝóß$�«ý°�¤¶#N¥Ï®.ð¡;-ë…8r™E¤&êôQ_r=#÷–r*<ôÙQr„›ió¡�Gv@`wÀU8Ç3RÎu'é‚“á—øc�ÛÆ2…ÔX¯ NQÑéã‘·ñxRåÀу…•fDkoH‡)£ˆüoÎ=šcÖŒ;#ý%ÉôD4„{€úŽÈ�¡ñËEj‹G<{»ÓÏT4.?²‰³Þq�’›ÈQ¶¤0è�dV4k!Ʋ¦< €tàöý1½`(¼r×ÎyÛÜRO¥dgÔ.Eò²¨f”Ú¢¢ßð+‹Ô!eT‘M6ü¾Ê3&ý®õÞ¼±7RŠ“FÖ)!g›¡¤"ø¬ÆXjÄâÑ€ +�À™[4¯\Ô°>R·Ë‹ésL£¸\ÞÌîÙÒÉ8•ÃÉ#¶ž‹ ðnùOrëìĶ+ÁðÀ J$ËZ)þÆuiF…\ñ¤H–�À¦GЦ{ê ª¤ æA�ÛP8FýöÂ8›pòTnð÷A‹†pl +)˜Ç­epl¦.NÄÑN�›S£Û¬ AÕR³«c<üg¡’£]¢ ½•¢ûÛÛoìâÜk¯�hKWÆÌ!é|.Š:®G×QAa󂌇•`0 MéiG�M¿)•í‚~õ´e'=²ÙöäyOª®Ç•[KoÓg¸ö¦šÆÆè èÜ.v�0°ˆRž6vHu¤¡Ge¶Æ–“g'¶“_û]rUšÓð?ð=-ãò,ë ÊšTO¤1�¾&DÞ·^=ÔC^@Ê£ar7BbÅØ†À ®–.ædfrjœÜùÖl…pïø²®�ÜÌ–ëž›@â¿v›‘;�9Ù©IJ<²ó††€ý™À®¢ÀÈ`S\dñp.ˆýéÇawa˜©AÔÿœÇFŠôÇT_ÆnZž¥&W?Ïj„•«!0*€b|Å.˜oŪ:B²Ø+Âǔ˚9{‚ìH®·õw+Bl9÷�RF´•)‹º’—T‰œÌ’c` ÐSZö­¬\âp…']aÐáδ_,Ó&McªC( *ƒÎf—Øÿ(•ÆÀ'÷v5nÑÐþüTM”Â’Å÷gÌ!§Âå�Œ÷šK9;»(õР4ô@!ÈdÖ•·3Ö ’´ŠÐ�…¢QòtöAò$¥Ý°”Ñ¥þ¢ *gŒô KÂ�VGT¦)â¶¡«'xª°r«ðaèðjz¦À'~쀗vÊÄËpH'ZYô³–êBã¸k™1U˜¡°NÕüùþñL­˜eÝa&2Ñ�3bE¿ª_>¨Ä +†Ï"A*¾–�-ëÿHsypUn4¤Î‡¢Õ9ßð�@é |F¡ž;yú�Ñ%IÚ‰=»Ý3ù³†£Í.¯…›aXÿ3•R€ÞÙ£¯þ+uj %+‘dª™Ö‘€Ñß„¯(wÀ`ÊCæéÜ&Ä (#N_Ö™€*s›N +n.uˆ£ù +¥­BÒTu8¢íŠ + bkÌc¶bWvL<\8›Ä Du÷PÉÂ+OžJ½Áªíu�1êïë9lZ? Ï@¹mëu“h®A ¾bS€si�]è 5"K‰³ðgvW”ò®ª–x‚ÒÓuY ÿT†4¦¥p®ïj¹ïì?�„zT%°´gÉ©ú�3�t1.a·Á•6qÖ¬âw% -ÇOͦƒh *^$ˆM*´®ýÐ…Å{f°îy9DžˆØDŸ)“AÚü7P£·VkíÄ:ò·ë‰©hêVÖkz!D—(ÏîšebÁoÅÎ@î ¡¯!Хסk–ÆZ\l²¸û‘ë#ÙçS“_§kÀ¤–Ž ç‹¢�,žuÔ +èEqÖ¸æ îGYœÞ!_È‹�•›­W n̸҇�è‚ù|e(cwn¾Šå‰! ÈÁzPè\%É�˜èdW<ÑÿÞxc)Iè‰ +Œº]¢�oÓôEˆô ’í$o™š¡mØ[)SCÄ3åtfiìч5A6ô£0g·C×Qd[–—ì2Çÿ9-"¼žwó2�ƒ@A³™›‘ØŽšâæÂÚ0§ø¡DyÈù¤šÒnÂÔ‚lÁOÕ—$iA%X4›®— Z®Í€° +‰’qúS­D‘Åf¼Š¸¬w˜ ?WF1‰’HáhÓ“m»µã¿È‹dR¡bøkV-ð‹¡ ÚH8pþ}épr¯^° S¨;{(—"«²@Å&èE¤óS +J(˜E"­yK„Ѝ_ãî�îöþ9ù‘ 8ß’ùˆÔ¡(K˜Iæu9Û­ú#Fœ "(~QÄ ƒoóàZu ЊÁ ¬�¦ao{êV#O�I8l‘g�”ú•˜<=îJxpìø}²=Y˜b�1%—„•=ÌÅo”š< Ð/�êãlÉNÌm¹RH’â0=èfZPN²cÝ5‰OÔÑ×?ˆT�!ˆ’,´]bjq·�ëáɹa¸7i‰vk×€$2ÌX0Y^fROÜpP:.r(N¹ÖZ Wy~ÐI ŠLÂ’ßâ”IG~»bvDÄ +8IŒÎ!�Ðð¾[h­þ�"{±’þñH±Cv,@%°öî3H‘Ùì3·±üI¢¢P6£¬Wzµn)‘�i%èäÖRȃ¯ÄI'o0O$JÔ¸X’cf”Æú5Ÿu·ÜYêM€zÙb”G‘§"u’§¨6?ˆ;©øááÃj/I%MN%šzÞK¼ÖZª"˜h1ƒ“¤á  zèU¯ãÛè$;=Kܦª�ÇÖU°âôóT*~ÿJ�¾è,¸gT¥($w¨ƒ ’=œ9F×-9£ïRo§�&ÚAÔá'Ø!õ ?êø:`ÒÓA«7¶È¯rÌœ�Cá(ùÊŽ}ÅñhhôæDÑ’¡Ñ˱eÛªúxAW"¾c¹¡9dï3U”ê +³¢û!ðKkÜ9Fw’Öt1´…rUk :ºÌòSQÔw_ÿü>쎗ŗؾÏ9`$J‘•Œ©^?‡ðáT¨6…ÉP.½ÐÔà˜Mî˜0Œ¦�LÚj¥™xgt«æÆ9‘+�ü;¼d}²î .îàe?A©¥–‚Á4ÛA»�Ú”Ó,ÅDŒ‚òÑ1Q@ JÐ6˜êîo¤bP*Y;I³õÊ@¥”º"© J‘X›Jãt“ ü|˜´•; îÓÞNPÖL=(íÒ= ò|1˜Ñ IþP'Ó°�%?Fb ®Ù \)}?0R1…Nò‚;V#©ez¸.&ÐÆ.¹ØV d±ƒ!EÉG¥7—IGÂ%ºBŠÙ£¤hâ�Ò‚²f_�ܸàZ[¥S¯ý%!\¸#^7›ÃƽɅVžc/0£"ß |M$—ÐàæñpG/(„É3ݰ'Y¨÷·ýR"�G„M–вÕ# +9q)pÆÎØãŽt@åò®–O,Çù;ø$Õ]‰jÑ�¦dá¥jé¾.êäA%ò–Ø“ +ØÊ�A^GJ%•íQFFè'±m÷XÒÐ5þ�­.Ï›1ñíf»ÃÁw<øß¯È5Êð`þ5|ëJ�í@:4b§ìüè=�>¥üTóM�)+c¡Ácš$þžÄ˨É*߀Ëñ”4|\ÿ@ÕÍ&®‹òzþWB|ó^})îw*”;Þ©Â\…‰|y:^}Ÿ/ë=`Á�8¿}.yßâÇ–CÒ÷@ñ]�¡ê,nUã"œàÝ¥cøWCþ¡©bƒl±†�©‘]j`V“ÜÚ¥ Rǃ¡°@sà‘rð=šâÓƒ]=*»£¢ºä耪™’ˆTos= y—LÐo9º;Óýþ^E½#܆´Õõ×—ì÷¥Vl½HZ+jƒâË� 0º«†ªXпôÈݨÙ{2ÅØÏcÈ€ý ì£þp$¶IÌõàüê~µ»]e:”[ES%_FGKmbêÆ0Gžï0 öÆÇ±ÐÔn«I{ëÛ êIÕ%žÿ8)`Àk©]°ƒ— ž¾ñá©pr‰¸éÑ À'”KAö&d>{û «šDeH +]ÓÇqÒ`ÄŒ Ôà„œsm³ØF”<£ä‘Á +ˆ]nÁ–¹Iž\|G5s`ä¤B8<“ 4÷ëëØ‘g ±+"YoXz°l4aF×)zŸ™Ø^ oýb|‘µ*4'1Ðá|¬D]9mËäØÅL¨ÊnÀØv &ÉSFrƒ*[b>Ä6q/Áv”Nøm‚ k ¤ ò[|ü9¼£Èã¬8‚¨Ô[MEòF‘kõS¬2ñÞ7Ü2XQÒ<À,ÁŽÒ+0² ÚEñ}ý÷Ãë’8`W0›¬ù<•N +rß t9zÐ'ÛÇ‘O®¨Ñ…�˜ä¶Ý³ÇT<05<Žsq‡ [Ê0‰B‘¿ð3*›ð4óhJö(ìžšès$D5²i dT7R±'æT1p§fAI,Ç•î\I(¢hƤ§¸Å› ÇɧOW-TR1�ˆ>Dž¥ŽÓõ¼cD ‰ºk ™ü?‘²`�å-cju½ºUìž²óNÀ‘ÈûeŽl@2/û@:\šRqžÜ9B)Zq{ÆM‰´ôÜ)Þ´(>Kž°¦’Êdvjmã\©óÜB.¨±´—ŸÏôz–4%Az'6¥3 ¤‹Âtà˜‰À+]©½w!6µA§u>‚µplÙoÂGà5¢ ^°P0ŽÑê `‹&¨¶²ÆcÖ3$e�Y?¤€\7›ÀÒ½J— A,ªŸ¹$„Íh­#ÂZ9X|1©®£ÆqK\Fð´ºWmYQ +Aâ::œ°‹‘îGÇìÒXädüVâhK†*™¶ˆÒ�J?|”C>B¯�„ÖºEÀ1Òò- É×ÈÎ#`1UNG�P mbœ+™Ã ¥¹‚˜Iˆw˜•ãê}^Ù�ÿè†#D÷ú�ìØdRPJEŸÜÙ‹tQÙt&´€eáOIXêDD2Æi8ì3·üœ@”³ˆN@9‚±f\ +ËD ðÓ_¨ƒ|â‘^·�ÈÖSF¶¢ËÆ�¡‘#aKðÙ­,ql€‚ëIAçkœƒŒ¸ëìY×mø¾”„uoÒ8¬-ÖóHkC²>4@EG�c‚êA°Ž¦º ǼY„Ì ˆ©Í0ìþãM� ˈÑÞ’ú`š„—íö¡ÌýcK<‚ËæÏá ÿo†Ñ•½~™öá ôû8°¿øä@Ú°'���¦ï¡´énžzlèCr™ +½ Xžxa”(ýœ—sô †,½·ÄvÄÝqÛ1®§ÞK¾6!ŒIŽº”CKBuõKFˆ¿»­Ì)× ‰;VŒÂ"A p}½')ϨÛ7EȧK +ƒ mµvªìxÏYMëQß6_HiA$‚–ìÃ|d‘F¹õÈ“ïjCwH¼€ÉÑhVÂÌ6ºŸû†9‡}Nö'.þ\Îy…õüÛÏ.Æ¿|)¹}Ã7ÿ¬ÁvQ½�™¡$8Á�I?QLà8ÛüGrtŽK®ª‚ûBÌ*ºL(ÐÍýMt¸Yˆ9<�~Õ«ÒKìÙ£DK-àÁŠÄóÈ$š´tW`Â)Iü/Ñ·F~΂rU܋حÈë 1îpyî°|¼L ˆ“xEÂ¥]$ÿ®ìßòÕèÚÌnEÓìÈ:L1µ£«˜k‡L¯™Íñª“^õ�BöÈ=i`ßp(¢ÚækUÌÉÜ )mjé&µ�Cõ�%= ma3ñôd|?w:å׌Î\Š!‹ZÙ¢D†LÌ‘ 8‘4Qig\¾KÌâ²Æcù’iü@¢*Kx8Gê .nŠA«|«ô(µW!Y,×¾ ‹†‘£Œ‘r’齚±Ë¬ˆ‡a¼Ãácg‹zR9ÙŠ�~~ø;½ ú•@Ä$L‡Ä>b?ä7ð—ŒËXôãÃ&¶0ñ©?ߨe�MÛ=Ðß"6~"¾Gl ðD +´œßD€ Ø’Vå:p�_SÇΔ2SlbÄSs ©œ·½û¿%º’»&°©-¦Ô{edÓoˆqŠvr«öŽ'ጠºØdub=E&{Äó~CúQæ&wÕ5NfYOúVDÊÅŸ·_N,?ccteÎæ.Úå»`zùIÄ,—Túì¨U2ŒND»øj”{?K.¨Qô£ùô¥‹�RFªÈÚŽ–h‚Ÿ‹ìÜ¤ã¤Ø‡â©šï™â=㾕u|ÙªEDtí 9Ñbc¢{òyȦx)’2ÆG:Åne•ÅB¦S„>g5&»LLÊ+º²//:©¶äÜ�m¬žWWEHf\¯›.B3Æù]yé|JF>‡ô#'€@ÀwF©'°)¨ë;$:IfÈ®CFäו%7QüÛtB§+é�M—ZI •‰‡VŽÛÝqfäÒjóº•F_D7äñu›ª_l•ÆV²«½ŽÿŠÈ´  1Â#1šÊLF´€\æaw‰ÐoÁupð™¿�Ý<ª3¹yUóvQ]3W¶ O¾„rfe>£+ÎøÄr‰Î(WÓ¡¼w939ëØS1Îp¨`@�@5ðé|ÝLÃà#$T;:“³}Ó¸²�±æŠ§3C$§—’.Dí­æ]%TvG¿ÊžW2çØ®DDʈ£2ó÷BQ Â‘µü“Ó÷F?Ä_]=g2ã=Ò™§U�cgGw‘ŠÜ"EÕý­¶^+·5óó¬j”Ø»«éÍô÷Þ%Ó”Üüñ»T猘wщ½T¿Ö½<ŒÓ:1¶ìöÛm»ºÚxvÈ6µsV\½ÍÑÕ¥C2”v̆î´HÉÅs3Ò3áiÈEõ_än#ö““ÌݼC-‘–‰d~GWVeä±K0ôèQ¨ÈUbf�/ñ‡#(ÑrŽÔÃA¤[©>§Îìÿ‘© {Q‹nó¾®Ó9�\l±Š �$Sœaàñ<Ãßw7gå©ÛÉʲšªLç—*>ωȄwt>_fª)õÊh7‡¤#8S…ÄCŒS?££—GTºð¦´ë³JnÆgÆõÇLÖgb4ínZ'›ªô½$b¶¡c‡Ÿ63Cæyhf�èêqm¯&ªq=ÖèÑYõƒb>C¾�üØb™‚âT:¥œÍ&Eå�•|ÔÍ�UŘsX´H‡ÂˆÒˆ’(‰0 †¢Ì¡xÉ‚Å+�Fp(h´sÌ8®ˆÃ`Œ0Ca’CAbÞ÷9b�+yÄŠW"i¨ÒR{C­ {¦MÉdÊ%ëé‹J$.“!£‰gžrj9)6d±’³Ÿö鸌oå-¹1éœ!9[§s%£ñôcS©—´È$mU쨖©c€PÀ€@a@`@`@`@`@€ì&S2B@dd+$c²#º^ò©‚¶€–~<¡ŒuJkY‚rw!Ç”b!Õ¨¯lŽÜѬç³T7¨Ó›ëŒÜÙ'ÙþŒEs�š01¶‰¡8ALá¼Á8¡P p@@ÁÜ€À€À€Àà¿ãÛ� C�¬·æ[Kø\-Ñšåú–mSî¡( +Â`†âì% …ݲ+]i(Š,‚y;Lè¸ðû ¡Õ²‡ÂÊŒöž�P°¹¶V¯×ε÷–hß¶­Û!o_líH÷­(BßЖÈâCªû6oã²mß¾²m6Û5ÛfÛl6Û®}Ût›h¡�LÛ¾]vÙårÙ¶=zß¾§šLÓ.»ÌÃfÛÌ£¶ížûvÙd›].—˾úµÕµ©¶©n]|ß6Û¶m»¶m³ËR®k³.»u]¿6‚Ê|–]šhŸ].»÷]­¡hµ†Â­ÖðÛËi(Žª¨<N�hzTâÊ�¬nçßïûÑ+¯CQ»^m(Ä)ZÊ5-ÐÍ`ÀPô:µóu(ꔢ¢Š’š*©o­.á§1C1êZ„ªñ©«ßï]s‡ÂlÚ¡0¢îP´U¨³$’ŽÉP5bÚRÂÑ-a­ Å ËaLß[ÙV‡bn(,V# FIÄ’e‡BÚ¶íP „�"­‡‚ Œs‡‚c›ƒ¨Ô9•µcµ ƒÓ@�0 ‡Äq©,#Ô€�J".6<$(”ÉÃ5 0€Ó6Ö#êø{¢Ôùø·mó`/*aÒ^8à ¦)ݧÞJCÿd÷ˆX0ñPÕ[ðY!ÿX�ý +­™Tœ>yîÎ=º°5î2�>Ê­Œ‡DÐÞ.UR7 1³íGN{![Ûò£òи‹±2¨§¶r¹M—Qè™b?Sm�PR 9ÕV4*ŠaEµÒ£ìîÆª¼ÔdÅ91*§¶MM lÀ¨'˜qÞƒj‹%-ˆ‡©ÎMª-ب$¦á¥9Nµ[BbDIæþ& T[GFLñ‚ÕèÛkUm‘_18ó‰#«-X‚ˆ1½ÚBW1Äzêà ÖÖˆOˆ�jµE#ˆ!hµEbr…èúa÷°¶&¦éafÃÚr< ÓW[Ükv\‰ŒÙ²&ä0¸á1ŒX[³Æ�µ…ÊÆõeÝ*Ë×btG]…µ5D5À°¶–]5û#ú§&k‹¿�…Õ‚µÅ'­°”°¶Ø]*¬çÕ/…qµÅ BaIrØGV[�¼†¹j+e€Wm)að`µˆGT1!L“«-6E ,}Z»Ú‚Áú`ð¬¶âJŒL �Ò«¾bu0¡­¶`æÔÕ¸oƒY¶Ú¾Ò`òk¦ 6£Õ\ ƒi°Ú….˜ê¬¶`Ì·Õ T“@Úڊ(3«-tÊëfðH0­¶°~¬ÇœÁhWma¢=°¶ n|dŠoL­Æ yÄjk{10hXmÑ{ r.K�a­ÚjcXV[¤ãgžUÌ¢³ X¯W[[Ç€õ\?ñEeYãk ‡"` +á–ƒ`µ¶P:LaË®nÈ6TÉ¢ú0À·Xim!ÀÆA°îšÉ†Ðù^O'¥µ5.ñ¿¨om!ŠüW¶¹¶°—þÕ¸k ÝŒUñÚB4í¯Ì½¶Pjú«ßÆ•¿€ìµ…7.é²¾¶Ð&0+<-°¨pŸX_[(¥ø¥ ÀšüÚ2¹àª_[Dqï À"ùÚB³Ô +üë¶æ5 ¿ +—å ,®}-À¯¢½¶ìn±/púUØÒÔú©¯žm9ç9—|ÍUƒCIa¾D1iõE4ýÖò¥´¾äÛ"ã_|8‚X±ôÅVÓH ÇMk�ö5"»|_¸Â¶pàKI}fˆ†?Rz~»ß ß$Õ.•–¯•¶‚ÑØ÷‡ {åµ)²º«EÒéký±-ÐÅ´W„&ûÚuÓ(^:Ó¼µ®`�(3ËËd[wÑ‹ÖØ%ôXl‹¦iŠm¹iÏ \b[¼Œó‚el‹ªi^šDaa&Æ 0/³É¶öÕ–W?³­‘Eyµ´lkàJ^ý“mm0äUXe[crÇ«ýó&Ãl (ã%+©ÉlË6í²®Ù²s§Î¶&áU$*ü>®5d ^ðÞÔQÚÖ,àEg¨«mMÌ~Ÿµ-�ïŠm‹ë]ˆeÛ¢Êxs¶-rßm‹@£»àa/-x ná,^ã «K!fdÛzBp׳¶-pšÜ.Z1¥jÛZ±&´má^³m þíÉoZ×ü¶-œ'Ö¥Åm %·º<¸m¡R]6¹m!?±”FV}Ë#U+é)]Þ�Ð"]¶´mY5£ ’1.Çm‹ú]äzÛBN…®&àAtÛúò�®Ùm[8#ŸK—¤”´m èó\¨²m¡—:W¼¶-¼(p®êcs�õ¶µ Ñ\°ÀmQj™ u-*‡¹à¥dEFúGäÒ-–o[• rÁú<®-o[ 9Çå¿Û ¢q‰ëUgVhsð{ÛbLŒ B^‰•ß¶¸à·Õ)®È˜ÄÅn+‚böžm…;­Tu�¨=sÉ'ƒËWÜ–•OpáXn‹Ë.äÎm‘3€ Há3Zn :ñ·,žÛÐø-?t[ }KÙw¢Û‚äâ[è¶PB{«?Ýz«@Ýby«�[Î4¼…N-Y·…©Ü-E/2vËq[f®nADÝ™@· Œ«€»x ¦[lѨۊ1NÄLu[Û_˜ø£µunÝÖ.£¶ ‰Zi »­fÚ +•�-Æu[ý(f«»-šUJMXÏ,[õæÒw­7ר°åÜu[&ØÂ¿n‹ûZ¬ÛbñZZ·ÅfRAë¶XYÖB2ÝY„µÀ¢Ûâ ]-˜å¶(ÍY- ¿ªµ„Ü$ðdoܰ‹jɈۂϙZjM<%»}%µÈ�Û"E-¾q[$ÄA-ðï !XÜ}lqyZI Ôè8-b>ë8¹­I�i!·Ev--0Æmñ)-äÇm‘~I j¼…´àÅmõ'­ÐèŠÑâEn«Å*ZÉ㶨^ˆu¹-BÑÐÂxn‹$#´À<Ư^´˜Ñm…k´hñ<ÎÑZð³Zaä¶ö?«úËYäy§ÅbÀ—wBQ}¯ûq[œ 8+h|Å“ÛãpÝ,®ËfÝ ·eªY³X[ùÚfÜ€Íb ۸­OøfÖü|5\nË "³€ÞWg¹-Ìì+˔ۂ3K°èçã‚**‘•ÐCÂÇ—w¾#§VÖ|õnkrPY@ÄW–�q¡Ûš4Œ´ÛÅ’Ê5Ø+Ç^Õn½pè¶Xüœ¬t{u[¾·òû¥üj•� ƒHã9ãØmmjDVÐ+µÝ(dQÓ„ ×í¶¸E][ÊÝ–Aq\¶cí¾ºX¶ÞmM‹Õ�`¦b]žÛ‚³(–Ðî¶€yK¨}rÜm�q1'Ôîly*-ìÝfëaMà(x[‡¥�(¡†eh)ä‡LÓK\ïÁ“™H¦(õ© +Ö­ð¶� +Kå×yñ)Þ¾ÔÀÚ)p“?€(x2�%GÞ/`Õ¾Ûâ°òæÂdw[0dÿŠÌðûiÔˆâ¯4±Ûbi S¸”™˜Cùª¬Ý÷_¥iÝ+ßv[,{•èn‹kV¯*¶ÛbôÑ«lu[,µy•A�_·åBÈ+X‚R¼"q·Õ½¯ÂŠIÓÐ+ àû¦º˜I‡ +N¨˜IȼLðÈÄ»^ïÞ»­&“t@o릙œ”–°×x*±Þ–ºok¿Û²ôÿ l{·%v;-Ë%�˜(ã÷»Û¦ àQu·u¨?ê®þ̸¥}lÊ7PÛ(I±Vmë-çýZ<Ûm­êø�e€ˆ‰ún[p·¥†‘(¾OAÉÃepÕEâÜÖ–?“P–ÀÛ’µ«€ÁÛ ~Mx[—³Šîð¶ð$Cl +ZŒ`w—àw[Ç/WþêiTQÎæ Ô6½€ïÂz¸kQ¼-°ubo«ñü1oë±2†7©m)›L±õ¶È¦r‹,¸Þ–yþ  doka^“Qpoë8ù?¶·u˜XÇtÙäMW©8©G½­Ý­ç€§üÏÛ:K_‘I�·5–½-цj;áÅ#10Ô.'£ïƒØ×Põ�€HÕÞÅ*ƒü%{[€ÛÑ©”jn%¾d„ZtˆA-š„()‹?×&kLÎ"³çmMñB#›·åU‘¾±Äå½îô¼-IîŸ ¡¼-dñ¿S¢uU±T-M¸åźè9�á&­±{méþèÿ‰ä:‰#}kò¶>Hˆì@˜SÞmAÿ�·õµ•+?ÃNP2Z=R�ém½Ïj`<àòë°RÑb¥’�g”„§âÈöóh +3ò HP¼×En~ó¶ìˆœ·uP¨ ËÛòAÌÛú=ÍÛeÙ`MÇÅœ·ÅGèmí?œÝçŸÞ–T=t/[õ¶$¦ö �Ê´lªo †2«c|C‚Rc•^ÄY Pøê0 +ßÃy[R¦ÔPÌû‡möõ~ä¼­¾àxÞÖ“8 Y0 ·õÔš"hÈ�·å´Å…Ä„Gú•ÀM�,y[[VÌà'RÅ¢,IÉÀ¬Qw:¨9TûŠÚx¿y[�~—# Ì{øgémµþ·¢¾/ô¶ÎB¼ÐPš·õýÈKμ-¯ciÞÖÓPpÞ–$;=Õó¶žäÆé›·%´ïNˆŠy[{,œ®ÉÛêå Š°¼Ùy[æUÙèÃnKUjTþ*€ó¶~Êl)®ÌÛÚZ—³äm©“y[ûDp¼-£]„-w63Ð\“ÄHA¹nR$ �±ŒÌ[–)yyÎYæèEÎØ8PÞVJ‡0J,9_É(*n Oæ�X6¼RP8¦bÑ+°––‰‰)á(oëã¨/oK0¸™·%É©‡ÍÛÚŸ»ŽÅ½)(ñ¾P�q6é$¹>èy[¦ˆ}¼­+Qf¼­f�n¬¦)(üuy +�ãm™˜R…|‚Ÿ „Æ{N¡ämá6¼,BÕpOº­\ÞV�eqÁ+ó¶fàÝþ¨‚j¸ÞíjÎô¶Ä}ž2±[x”Ž:šo”.›b°½­ª ¬›H̽­§ +Ý/Šˆ£>òÝÖ6B¾£WïÔƒJ¡Å¾-;ÇT=ðm­ø]¾ý +ªüãÛzú~w�b>Ü/ªŠ¤íÛj:j‹<Ý·õ@WÀdú¾­r�±q° žTdÒn…^ðÛæû¶t±ñÔ}[K�Ýí]Δ/K˜M6)¿3ã§U;W°oËcüŠßVSj7öÛ*ß7Žèó·uÚ×8…Æ¿­­Ýì–þmu¤�®Ô ·öD6„Ü:ä(´pK‚øã^P"‚“À-Ó¿ ÄT�[ +Y˜û'³náôCò  ܆7fç·Æá߸2�ný BWG ‰Õ„ œÚ2ƒ�À«fYÙ©ùÉaòVâ�[ä£K Ü*ø¯~(Cpë_Å}� +nMztl__©xÀo©\ƒâSª·"• Ç ¦Î;¥—TVü ˜R"·À(ÕæäA4áHRÜBð¨ +n8ª}Ë2£º2pA ‹[P3DåóÀ­�¶Ô¸…?P ÜBÄ¿Üê~"�况çHÑÜ‚T •A!í©xƒ[ÀõÔù2(2žšÉàÖîôØ5¢§ õ �–¬è|, æ8}&YøTÆ’[3Ö +c’ÜjR÷«¹GrK—�õ[’HrëuýàŠ’[�uS¤™Kn‰ö…ÑDo§þb%SÙ¨DCà!$QSO�„ºjÏ�GˆäÖa}”$·¶ßÖ�³ŸäÖÑ«äV) ¾ä–¬:‚0ÍäÖ#–,x´F¨Cós�àlrk¶^é1ž¬pí=”Ê�Pa�<üú,¹Õ%2ùG%·Êl;Ø4þKnMÆÔЉ&·ðbÕ„›ÜÚû_×úÒ'·zªsåV¬~â÷ó-"ø½ü1•[Í·{ÌÏÊ-Yú¹‘¬$ÔÀ2uT€4Ë­YÊÙÀ\n Êfe=ꛆb¡*ƒ@ ¨ôm¹µ[-@ÕÍr 'Wûì~Âr ˆà;Z"CwSN%æ~¡Pq¹Õó}¦ÊåÖi>‚œÓåVuùƒŸ£Ê㇩‘õÍË-CÅ…öéæË-£àåÈmH�¨îr«Ë0­ïý-·¼‰Y—[�r/·$˜ˆÝÀܲCAƒ¹å¸øÉE!Ì­)·™Í4”­×[ÁǦúr`Bm¨9–ÐKmÌ-Ë¥ÓAÿæVçß‘ù‡0·Œ_{SØoë¸dncnévð¶=¸ëÄ¿-PH#dðFM|é`B•:¬3Æ1·ü€R ècBùÉ;1·~ñ±ä%ôíØ–m(Äܹ“´Ö=(˜¯:®.“¹uoŒ{asë œ)`B:’=ÁHkêNÝeôËܺ´ÈÀ``æÖÓL+Ohæ–Y1—¹õ€1 ±Ÿt˜ITai»{ßû@�¹enr8-æÊÜš(›‘Gü¶Ì­~–N£ÕtÔÞ�È£Ë_J¨ï + +ËÜzPÁ²«zÎÜzr+§ÄeSÌyAà V�™[®òHæÖóÑlÙ–Ü*¨an @ü”ÓFæÖ*Ð3°;JæÖªwcü_-sK¦øâC ‡b!>‹H\ Éꪷ¢±4s«³’#”ŒŽ¹µöƒ R¨'Ôa$ta¤ðÕÝ$®9ñ µ‰mîÿí/·zñp+0ûrk ^%03#ÀË-õ<¯zì—[�;†`Ë-@ߥñƒ¨R©`@�û„tå¯NQ› T0`vÑ'تÜÚ@ªSnY ›”[OÛ.½@"”[¶qR0¢¢ÜZZDK«�”[`ûN €¥Üòf£du¨Ü:K5®StbÇèïßbþA€UnjPXçu'ÔèŠ l®ˆ)·ÖroCΚ”["\@/˜N¹Õ@¸­×™TnQ�t�X•[R5Ë¡À;•[G(°ªr˱€ %Ç}aÁ¢±M¨Š}þ+ȪÜR m’&l<å–—²øâ*æ¹a*2\B}:¸¬¢\¦Üê_!4 +ß§rk�©o <)*·`ï‚0oO¹Õ¶Ä`„«”[°ºt´ÇmBÍAN¬Äe(·Fý‹šîÄ&®8âV¶n¦WûO¹u:J„§Ê­µÐ\å–i`°rë% oˆVmåV¯;è,‘®rëí;Un}ò¡ "Ó)·Åî×HŸ†WÄç)y²9<̄ èåÿ?% + ‚‘†aX-·èèV²-·¾Oµ[.·´ÉöWÐô!Ò�irk<ëæÖ]ìeÂ¥0·Îª„u˜[Ë%ÛË-û¡ÝrëÝ¿Y‡f‘XníÍ$HhWní×qådQ(£P:+cRÍQ±?À†1:î¤Ìq¡ðe©ÜÒ¿#òÓä:tH˜�+·6îVn‰- ¶úkèc¬§2”Kb,�>¤j›ÅÖ fåÖ¯¬-²Ê-7C?L ªrËâ1Z ‰ÆØWûf„ œçƒ)·6èÎǯI¹ÕTòˆ£YF¹Õn¨N¹µ­Wm« Ú+·€<Š ±Ü²Ÿ°Mà¿|o&/þX&Fp +õ<< ã΄åÖ>d…Å_�e+�B3Y�Õ§©�€gˆ¶Ü’- ‚Ê•c¡¶;ðP`§-ärk)%Óìiw¹%ëO R{¹µÊš[yÐTéyEXš[¥ ÔÄÔܲ³h|{VG»æÞÚ£�-Í­J¤á|ûD84·t‹ƒûF[£]ç�hn1·ù׿å7ÂXò‚ – sbï¡ !¥QÓb Í-Ñ1ßÖ�‰Ÿ:u«˜±¥CkêJsKl5ÃË­ÏÄš*WPA.椹%2ã›èß¿ÞÒÜêtf¸½gtã*ŒúQBÇä:Ñë±÷€·8åFµÀ�æVÑ;`Ýø™bŒˆKs«hF<œìºÇ؈%juin*$¢‘ $Í-öòè“)¯ò{òÌœŸ-P¶|øB¼ŽzÉ(½ˆYYŸùÿœw ål¾pœ8÷z�Ó˜‘inAOýèûÒIí�O(ÁgŒÎÆ÷ CÍ-ï`îz¹]_Ç#ÑôHxñV«¹eð»�,DHRBdùFšlÍ`eUB ˜'›LBù#Ï3“æNP`…$4ÉÑFp !ÇÜ›_mBâ¾l? ‚Ñå–¡nr'DÔ)†Å*Mh4ìýÌmÑO+ºZ?hÖßÿ${ |" �v36ð n›�«,ÞÝQH ³]ìÑ‚@ps‚õ³ëç…üM$[(�Õ�-3­´¦ÃÏé?2 +qw#ü§=„B¼„èÜI ÌL÷„4– +PìTh+¡÷ð¨¨aM…tÌ´Ï(¸¨ ­íNcÑŠµò ŠZ„¬Op]¢ïÍN½}Q(z‡[˜_´? +!þÜ7þ‡}QË+~BUê +#1TažòvÂõò(ǵ¡ÈÔtfûå„è)ªP8!dù¡Æv1Nh7½ñj¿¢ŠÍÈ¡•þ„R÷–  sxBÐåYªÌ4{BAw:2 +�øSÙO(h½ ô'árš#FŽ5~¼ºô€ˆšyž(â8¡»¤›Š’˜P®&‹×–D ä·WSíiBÒ£&4_4Ç � Pš×—IÒ0î¡DÛæÀ„NÝÄ'fM)-Íê&Äo±�þÕu‘ÐÀ¬ãBCN¾,B�4+úâ*B*rórïù^„D�:`PI 1°`®øpš”G5ò3.FÓ©~òDr�…~rÐñ€¦c?æ ÍVûçÎ0]Ê[ýš²È¡!¹Hû:Q´#²PÀÍAALÚ­ƒ#«Š)R½$&*¢Íã‘æI‚³U�—ƒâ:¦qsBMß&@Ü9Hûý^ùÚÉA�'nÔ=iä �´Së45›ƒìšÁ® Ú7Y&Å”¢qB�q7¡s�Ð[,.ÀÔ.™æ}ú ‚å •h z À“©ô*T ë lE4C­XCœã²ÍÕAû7UüÈVD¨zɽdú?%iÊ”|ÅÊöITâŸÐêèKõçèŒ7„Ögy`K ø� S„‚jK·Ìîr�$:èGW=B+κ¬àdŽ!õx¨'ñ¡¥¶ÎF0\„ê_'•ç*iç z“â�!|òÀƒØVähb»A4BZC‚†ÕäXÑ^ê÷ÛÛ~¤-ߎÎ1BbKo6”„”løËšü? ©Ûè!$$6!ê T±ÄØØDBÁ&Åæ3èÿ:í[o°–v’�©¥�Ç$ X³¥}è ’„Râ4Z@ÚÂn¼4¤�; �´‡jˆ”Ð&ÀÙ‹šYB&ߊ˜ž¢)v×:]Bz0Ÿ�úLˆ¨=q¡4LG^³©ƒ ­¥zr@S&>á–CsyTuBT ÅpÊ Íñ�-3k}1uª£ZøÉ9 !Çpi+z ÉÑS�¯@£J2+‹!—VM£ BÙKdž¡•‚%5W›;Î-2ìOB~LàFhŒ~)`ߦ^!þB8;B bÌ?}"DÅ¡8"4Cö®º¸@„ å’„òB"b­' É>¡×„¿l*ˆ©O½EzQŒ5J7`Â5µŠý°3k:B�?¡«„i2„Ì62ž…ˆªC({ó»âB xÖ B%¦µä"¤K™7k ½�Ù“¶ø!hÎÜ;CBû“Ž˜�‰"!¥·$�♤ÚÏ,òÀ‘ÜÒ3ýA4‡¦B8¼¤$‹÷ 3n�;èÊ3ײ‰SÈAi²°c :ÈÓ„àœ š7(ãN¬V#6âZîA®ÑŸÆòyÐAhØbÿGˆà�ÿã!a¹ž¤œçPV=Xô™fǃF³5žB¾/CäÆ?8ð¯(">M“„~5ÚzФ'mTôê¶RÍìÉÊÓƒmt Â&£ÏÔµ¯_Ü©šJXã ´nõ ð�îÎÅÝ8”Øq ó´'cÊ©ô=(óˆß)NH|Pè–|½ˆâƒºÊ,P´êƒ6‘¬ÀuÔ9šgò Åаðy΃–;=\=À4Šç¾¹b½š²îžh´4€ Ù�]Gå|ƒ�£ÛÚéBgÎd�T›¶ d¥æ _„•ÜA(À+�DŸ O¯1• äG6g[E „H¢dXPd•&íad¸[|/2‘Ð;…E¬úùzo$ ¡˜ +ÁeˆrܦsŒ;´ÐÅ'¬SÛMH8¦ßÎ[‰GvÆ)|ÍÝ ç(½´â½ƽQ0%�Ž€ +=Åþ\[+™< +NªòkƒM@\q0íËœ®ÑÛ”J}QÔ!· ózò»4}4õgª0=ûõ&¢ã€¶¤¿‹�‚mb)‰<žñcû<žXSâ^[®*fÕVdÎå1²mO«fë*H»ÚYѽÒ,Þ ßBÂ^p—Ì#‘ü7�?*³µfº'J²Ä6]æo …�&Üϯ–J•ûRbüÚ§ëÖ¬ýM)vÀ1p•V€rXÇ&¸yÚƒ}ö?®¢Ó[†DF[ëãù[¦ãÔ­e*dHÁ|�:8]étDaP®•1à’D'£ò­õ4©!ïâóÓ2f§1Ìãéé3ý]û�…¶ +–¨ÜÙ/’ð_pé#øñʳ‡ë¯WË[‘Ê}d¡š-nÝñÉáP�ðB/yŽ8€À£©ÀW°&í@NÒÏá&ö}4TÇ`õÖȵ\ÒÉçÛ"C§Oeœ#(¶ëÊøF\|ˆòé~ÊwE9mrOðèu9ù`Ë< +ŠÕ‡È�À{%:ás)z½Îö"3²kâZNË—$´ÑGkŒ–ˆSk#Ç$„ù¨¬”qæÚ01kz‡’ šM _ÃË@>IªLlŒ§[‰…+ü)Ûö.xƳØ]pjvk^É„”çð¦+úlÖÛ Wó6¶dûW4‚ï¡Än+TË�G‚µ+ùÓ08j¦ÓIäów%–Á n;l­\É'nž›É$ƒ“µ—­__,+'“F¾Aðwq¶„¿%VðÝ5ÎãEÿ)–@á_|6vwAPp›“»þ7OKÎÃt8…ê%³µcä¬éžòOç×�º”<ô”@ŠY¹BœÓuò´­�½¿[=™Ør8rõÆ$\¬æŒå§Ðÿ» ’Ñ­n‚8ÄÈ BŽ0âÂíDäÓQv"p�w‹Ò 3|á9¬B��ŽïÞÒžq´èÕ»Œ|ãâcYÅŠaô‰¦YˆÎÐz.ÿÅ¥1Ç^u‡ŽÖç¼j›„³&�ñ‹&ØèÔØÖÍð¯� º»Ææ»DÝal×ú(•²o$¸ êx—â¯$œŠ�*êý'¸ÞÐÙÑ+à×»Ÿ>¿1‹ž‚‰•÷„†ª¯Ò�N|\iÔ7½sº3žÐ[Çi§Áü4êá)vEP¥.Ô‰ÿäi$ˆ +ØÌ=³ÜàÑCž@,”óD¿‹$×UI[a•8¯¨’3vK˜¦ ¢ôåÑ='9-¸Ç, ä±G2�ýP.ŒË‚Uþ!’,œØø`n;ÿ¡/—‹J†AW× LK.0#öó´òë`â[”SRÕ‰µàß–|©|EMôà¨èuîGå…8ÏÏj^sÃØ}2ò$4¥ªœ©Ó‘E8Éü³4´Z„ &" ±Á'óœ§tÞïÕþåCWK`9ü®]®~ÉÚñÎÜÃ¥kÌ’°¤Šõ àe´\ÊDâ5´]xühl`AôôV&×?8‚+ stÉ‚W:)ìžÔA FÝÊ9ç„KBo…Ñe«C2‚Ijرá´¸cëJ%Z¦‚†™É鑞ÒFäC6u4WŨ½¸õù‚–nZÒŽ¯ÒéT†Ð“ÙW©� è„—:Z<ž�„�� [ÀøÞib†pé;L.CèÔÉð#8,VA´®GCÔ=¾Ôè5Ò·ÚâT æ•s•Q ™�.1‰P”d¹vóßOÌLˆ´2ùžM}Ð.õ¦¼ÕY$( #&+“m·Œ×ÙeªÁßöK%C +%ŠK4¥²væˆ$ˆ¬Š[CûÞVÍì•j×ö‘éÚ£ü\ú¸ôG�‡}i!#œ9¶Ñgó$ZÕÞGBCVS�½Ä(3��R>+#�$‰`5“ôdOØ¥äUž6Ï`K: .±©(úäá†ÿŠ»Œ§ZlUœéÏ’&lH¯“ OÌåAýiϨLQÓŠ +è]Ns>1xZÂôÏS}àUx-õZsg8ºÛB OZúX¼u�‹Kóý�P\Å«½å�±Œ­íWÈñPø+�ê"’÷Å÷^2T³ÊEÔåhH½çò×x¦j(Œ:æ0¿IB-÷zÝë/LüŒåh!)j¶ŒäI|š7±ÒdG’?¤rÕ0WïQ8³1Ö"Ó®QúYéFdešßL^B²ŽƒãVý["^ïñظíW€~ü[>˜ÇÙ ôvªèº$V´/·D²¦Òn/0³¨O½v�·È@2¼­/.SmPkj]€å¥Ï} êu³ÊÌNã¯ÙMv%ênokdæ=œ?H¡qí~䟦ÐýíùgèX£%Jø@ÑðÄy9jX|Qj™ö…ÌÒc`°?‘œsœæùQüJÆ*Åp/êŽi,L-ñ�zÑ»xJCÛ±@…ާwì|ûºœ{Ð{`%l{åly�í›Yh_‡¶Õl|(hBÀP ¡ˆ'ü·pd¶�IK¿%š¦ëÉ�ÀBNMŒ÷¯ƒ¢l¬$õ V&É#�I»Ë9¤„¦æÐêb†?èÎkò‰Ãr’!K�1,àSzmðãÄ¡–Eæ<õ¹•I!(·uиµÜÇëèP§[|ÒÇb‚Á„ñÖˆ ÄW;�æc}Ÿ·ýóüvõ ¨{c@ƒ’“F�íwu®ò,±Ð{ÛcÅzAý®Æª¢!j�6«s-?q²UؼY\µÕMþ€é.v ÎÙ�ÉIä°ÊMD•nÝ5¿2þË»Ñþ³�'kàÁOï êïfÀuÅèJížÜÁ¹«“P]l|}aÚŠ[ºÆÖ† Ó-˜Á3{|X€µqŽs´ÑÀèFaþåÊǤ›GVìò¾Mæ\=¿íÙËÌA€ºí X BÐ5 î>ÏÀ|ï,��\~—þçxFH¸,8Á{H¨Vk à†¬;(9d‚ý4÷¹ +Õ=ɈÕ/¢M.W2ÚV<¤šk'Nï^ešv—öV>"úŒF!îG0 +Á’诲ò9íñI0Æì–ªç[Ç9ârÉ�:Ò'ê±Îwp'Ò7¼7mÄxê®›±á@ÖiëŽîWÜpBÎÕo–[âç©kg\Æ×ÎÇFñ»@åê¬,úäY@"}¥º¸u š’(6 +X„Ý/g�ƒW‡=ƒ Hæ2*Ð�Ì„I>2^Xù�tƒ¥äj51mepntØÇšDUë ÅÉÈñTÕŽ5zÇšC´Ceª¥:Y¤Ã^ëà£kë Y,As(·’°×�QRbÊup •º½¾¤Òÿë@�*ì:P»’ˆ­›­Ä«upõJ e|«À{–èà -)sÐZÏ:è¯%2[†U\oÙÒÛë@.ÖqY +Ì:0“K ¯®{©µÕÁ3aº_(‘Ú°®F.ë€d{Z7ûœíÙzž:ëÀ b b ;@`!J¶ 8vb7[´À:PúÐ �T©€æ¢ä:¸Õnr’wnàZ~½ OØAÿ6vÐõ‡Ú„Ø�ŒKëÐ|°Ú*ø5`7ÞÿàÀm ÷: †ï'0 ÔÁ´ZAh†ü: †#Áã3®ƒKûÇõ¨ûv³oÄ8b„X4DC+9“닃+Ç$:å’¬ +Ø7´ËŠé“щu eÛ?cЫüÏ +\;/áÔÁ(kçqÃ_ª&õ–«ø)U=�Û·àx�Tºð~»P�îˆ:°×wÝ@‡Ô�%‡"ò@{àØu;�a¶ÎùM +â€NðJÄÝ Ô“Ò“-«FØÙfÔa|9u@êTÁž‰HÔA;Í…!¥SD²,åWX&UD:§©epÀÊòÿߪè¿¥±,Hئš�a¹r›HÜnÞj¡u@ˆk‡. €Ý<§ÂÇU-Êë9ê &™©ª;³†@ꀪN¶G¨ +F¤¡ éÚ©ƒC2™~¬b ðøÜ�´iܰ:hJ¾À:Í=åê€� ¨ õܹâ*jÎÓøü§<"ít@_¢s>[:CË঵)qéà8$%P\Psu§BØ‹t '‡j¸{|+é »�z¤ƒCKŒp��ìIfÒä¡êç(A7ïÊr§„„7IOï ‡ŒkÌ!:�£Ú—C~EEžÑ�°Ùí/F ¤ƒÞUA§„ƒ¤jŽ‘H–Ôu?•ûf•t©QjAûÜÀŽz¥ˆ¢mIHFj+BáöÑ�bdb2ªN:P±Ø ì)a@$+¨XЪ�‚0¦ ^&JL§Ú)=Í||�TÌ ˆ¤sŽâÀÈ~�èSR ,k.ÒÍè€Ó]‰L{!1ßþ‘fÍ’FäCLèÒÁ<÷Ñ>qö<: ¿HV$éàÈ’úTŽ(LúR·ƒÌK: Øi˜�#œPûE’Šæ¿²á–`Ð…zyÏœW…êÙt@ë˜Rjfq80,ª‚�‘�l0@]ü¤ÁFÌ?>IìJÔÁi“¥ù˃¥â�vL�1§E¤{:8üü€»€!ƒ:˜ûîj%u`&ö+¿/]¿ó© GïPT\ªÖ¿ŸèékWío:€âátÀÇ®vFæ§Š¿Ê±*Š�!ê€ûÅÿ¤ÔA)ÆIªÙ}¤:`k_д„Öð�:07!;#Q�’“¤¯³ê€• +¨3­u•š:°#Œžç}Ôe íF¨†ƒ}ÕÓYÝðÎÇÉë„1w¹AÐÐ--0Z˜ƒwšãÇôóé «G—¸ÄQïп¯2ÑO©ƒ»6ÓŠü2Û£:PüÞþ{�j@+­Û5öTy:P—Gëjíð8`Ñt€³J6¬ÓA/ÇIuò6^›Z�ºÓÁý-{:g8G’²Kœ'ɨ©ƒñ:£å­eLªG�YÊ‚ÝÐÑê �£Á®î05ˆ:`‚á+15¤>ŒÃ•ÑæÔ�†‡3ÙýFÐIß_ò±Æx:èuëÊádEÔ€çšuàuÀ�Ø ×UÄ,u¢ôbÑsŸ§jÄ{0 §qÃ6VñÈ®O-“}Áº×«Ð¹¨¸ÔÁ»ls:¨i725,4”€é¶£tN”m}(®PtéXµä`{2L�&x)骱N—d5ÒÁuŠÓÕ²ù§Òq’Ó�Iݤ«»Í:Љ¾tëé ëä†É€£P�oÙS’ô÷,ÎBát»Ñ)C;¨(ó>= «£xÅq�2šÀá„Å�ŽîãEÕDu O[ ;ÁVˆªƒ¶’-ñàp�SÛöÁÖߢŒ¦9SÖ–C9™T;¤Âä$¸¸TQ•Qgxx”T(‡§ƒ¦Ï‡'›±EÒ�yŸ6FéàJ%| ì7¨ú‘k».¡?IwЯx<¨¶xq @hºõæJ"Mõ¢Ö�.º8©ÒÆÒQ/´�×+Å!Å:™u|7µñÃ¥t±NfVS‡—”Цb§ýÐàä¼Â±ß@bQ;©‹J3)ßÍ2?áJ꜇7±r”|T.ÍÇ35xh¤<öK+óáç—¾R¿Þ@jõ%ø.« Œ‰"üd ‰RˆÌ*ž"Êc§¢B•óP$noàp…È*¥j05ðlî‹ù¡ VC¡tݳiÔÃÄFE¸ƒw¡ÜíqP þû:è[)« +;(†�?œÊ.!ÖTÚÙµì¨Ã1‘~R7úÔ+fV Ÿþ•ÄÌøäÜWÆ27–š?ß ®BSü!ŽDL:[c‹Ï»üÚ„ëJœRIH™Ç×Á¸@2—þ Æ„bºÈH"nÛF}ë1Ò+7•{ Í0ÜaLeÖgÍÂÇñFÚ—/ï¯~/Y…³x(ŽÒ¥ Ö®7Ðå¶’¾©)ek”{¼ÝVTjÛ»²%ªHÈÈZË|Æ‰Š•…÷ì�öÏàùߨUúÈðsIãúšYàà(‹ˆ‡ P= ޲"µö†›þß(Ïc#Ë áüsH¶È³F¾Ž§�?”ÐGóÂãU«ƒ§o«[MØ×åßcØBáͤÕ5°?í¾�ïk„‚>æŠþ}ÆMÿ_Âñ^b8ŽO�UÒêÝñDVL]zQù´Õ0Õ6ÙBÖ�”; !»Î)+ +Y–Ã\þkߨ ÍJ…ìWÿ�˜}ѰtOÜMÈM˜~LXÓêßt5°ûŠ¡ôÓ<ù°¯Á=Í–À,Áy‚НxO;ôÙ�~¢d‚7Š�"ÃÞ‰²àáa"‚T®‡¦{‚óSI$¬œó>¾¹Vá.� ”¦üÇ—´j°.ô{ †×œ½\¼’è£5™Ú +�¹ûW�;=RfüK¸ìàFÕúÔE{„û=‹ Ïm0ä½W`11ˆSzæ�3ƒÊ'[ŽÍfhvLÏJ§›í¯çZ¤gÌE$ê‰×rLz²D¢}/eßþ;äúx†292ë¤EPç—RÏòØnÒT‹Þ ‚³f%- +�+âSº‹H”ò=ðy×#S”x21q&Ѻ‚b�éúzÏA±FsFKî‰óîi$|^j”Ùr’SŠÕõ€’í×Ü9ÒÓšð5œÏ¯ ›d»‚¶*@kd�K˯B¤¢ú»3Èä›ˆÊ +<|ÆZiM,6¡lôfd¦ì„žW¶&¼N«Þ­Ê×›b”F–K«¤'¡| É%©ÎN@JØš@¢À]±  1Øï‹¢ZÇÈ?Uš¶¿ùdÅNyO�öM¦Ûûû)SÞ äCAùž›jV>îE™nÿþ/+|Ы#KÚré“É0d:÷{bˆkMÛ=x¿ëÕ­œ\ú¥»;Ç·y›TìQæzÙ' È�ªÜ‹rÏÊûP©ŽZ9!]>9x0q澋|‹eú�ìüé=Ì]Þhd3UVw­ã“Ôtô~¶œã!�¸Ë,7v©‹ŸQ/]‹TÈÔ$¡×Õí%�A\S) í§Ø÷€ÕQ?¨.8ˆtF¼."Ó¶–{y0ª0bw®A2ï’Ñ'Úæc»KV8Z1ÈM< 3¦ùnÙs²îcÏp#MBŽ@.C"Œ‹"a[cCJGòÕ�^ãǯќ1œ`˜-ó½…±�(lˆ6êÝŠE@ ø�˜Ò-VŠäq¶ â¤`éÉÁæ°±¥\´+5Šéñ]ýy•b5kAä²U²•å�ª97EGû29àOÏ–Onz ļÙCe˜x$³-¾ñêô0Èž�/\h{R +«;BÑ|õ°õsÚ™ú艀Lš–/ØiŒjœ9Œ â2ŒW¿Ïe3&b—XäÊ".RÛ¥Ì^µ9MÝ׬†ž”^oaÖt¾.¹\×ɯi.ŒGÉ +æò [¾ +ÓñÌUÑ ÃëEݼ ‘¶(Ê0®ÿù›Zõéº. ²ÿéÖ‘©ˆýaÓ™µ^æG1"yoiþìšÛ‰ÙGa+-ø„«ŽQ!²+Áñ�¯Å�€ný\÷+¡hÂòÏÓ8QC|º¶RÀìB M©°Þù§Nw¶õEÔà™ç;Tý ª§z…6”'¶MQ�ŸY«èh +ö0Oì÷šY×€=;ãQ…Š38Ÿ`ÜvrDfÉŽK“ endstream endobj 30 0 obj <>stream +œÞd‹1JFÂÌ•ƒÐh™Ó7tÿɹe iùÊ’,~n/w²®ý¶.5½Ö¦cáoSÀåeA-ý¼Õ7’ʇ{É +½é”N)Ð=ÔávzœìP…kªøïºÝvBµ3ÖØœÝ‰î‘pˆ¸‘ËÍB…èXäÃ~fl™ÂU.R¦O9ÜW†� ¹—æ@ÜOéÈ㕞GÛ2Õ‹ân`>Ðy:"no{€=Ïîz Ö¢5À¾ w°úõž¡»õPU}$»;A¶%±aJÖ£tõOð‚Ô‚�èEÕ¥ Ì¢ú˜[3cÞ{›Kç±’ÉGgž’M± Ö'GDnj ±§¯­–"Ù¹Jâ[8좘È'+&ö`{ÿ™Ð†m¨ôÕóPø¦+ Ì}{r)Ft×ÜðjpȘ‡fòŠ{¼<::Yë'àÓQ8â�לHûCFÏŠV�ÜI$:Ï™Ÿ0¢»WµÂdù(‘lÉ›qq©U :Þ�;Á9HcwðG@ò\Þ$™"%®WÁµêÒNtJ²ã ø]=õú­¶*é‰ñµß§k�é™zR ^Ûr•=U‰"l+:zÉŠ¯j°Q;d,‹ê”¹`Ç›(ñëN(Åòêpa…šWë:/s¿¬?9¸Õl¹CªàÅJËB'äAù™ô¼(‘p£¢18Q5Ë4�GZÚ›�[ôLa÷Í–¥¸Ç^+!ˆúàƒì�{¯BUŠú´HÎÝŽ=¦Âs«ÉÉå,G<»Æ}uó¼Húô W�‡HD’1¦ëÚHÄ3œi±ËÔ:f ôZõžµ¼ J[á‹!sëU˜ÏÇ>¡ +G +1êµsYWg@.aµQ÷g› @R††Ü€…6çѲ¡CŠœi‘9  =ÁZ +�…@þpå;L¾©³³A0ÙwËD}BÄëisoyAhª  ý¡¶4IZ¸Cœçt Ë�“§�¦‡ÊÈ?¢É´:rÌé)õ÷nå†Ô¢†ÔÝî«5O¥Iõزõ‹¡0‡M¡æ¾bÄ—| “;Whä¶&š·sÄcêrPÞ KƒõD +>þ7È8ý”/3K‘x\¸Œ$k’R¯F•%\IgKè“£ëP\Jaqõy… +•ê¶ì€u&ch›Ø|dêÖ>Æøvâ´ ‚DyE¶Ë¡tpÐ ¹Ù9t÷MXÖóGÁGsQºÆŠ@¥ùRÊ(ïLhD(å4ÞøX-•{´,4êûd†ÐÚUî8l#»±0¼q-å®Ò b�nÉX8Ʀ@«â;[1Ö'‰¶la²õ�Êt ³aøÎ…†û ( ¨ñÞÈÃþqãÀ—a ¶I¹ÿo™M8ôš@—B¶“Aä78'‘2Ìå�秺_F¾ÕEŠêAŽº=;¾hIPœL�/÷³µë’{VK.(@/è$Uø¨NnïSS!Jó�HDbÖòRèÃ/Å ï±1Ëd05SrO“Y¶£HO?#“•>æxÖ°>"d$Ý‚ìÿbìa+”â›h{~ÓN8Y>·.Ýæ1ZqÔl˘;ú•ÇÉSQöcôªaÇDo.çiFQ‘¼í÷·cz9ц®0œr!A'“1”€V‡#î¤ Y`�Ò�m¢ub˜¦h":qH¹,:47È… ae.”i·õöÀkxpv›ö³VÖ!ôŬˆš=r�¾å ÎÆ<˜P1„˜s˜¡45Ú(Gñ¨)ê_6Z#-37»V{Š‚ãÇkœª¬¼ ~ÏŒad\ë àC+÷±Û9ûþ\/afúôH† Ðö-ì…êMžqHˆ˜• {ýþ×¼ˆtAY\Klº<9g+�T@ëJ6ßñ,êññÉ{áÐUd¬.¨ ¿¥ÓT·´/íQÌæÙ�Ðè¢ò€6K*#4Ý>\�ýÃ×¢À™’�åzg訿¬P¥(C_ª´irÔ{_ãu‹&f1@Ù~{Íþg»Î02å#Í7¢Ÿö*ôÆv�÷«»ÁÍ‘» ß �ó ,m7ºø ”ÚÅéÅ#sÿ2ËFyþe–ÿ†„þûP赡iâzÂW#I[ïß?vâ½è%£(;wOhG€ í4¦dk„Žœ®Lâ™M­j ¨dѸáÄ +Ìó)ÃqöBÈõŠî +­ù–|» ä{ «èHd#`®œò!BƒrBèÆ;AYÖ¾I¬«±ºI.¶IðÕùN Bìþk)o ȵê“Xj¯Y›nä È”$"Å:DWs*¢I êøþJŒ©ˆ†ž³#Eª—†ž¯Rʱ¬èlæ,>±÷µãSüpAM<ŽÇûíª°‹çO¹Î@ÉyuýU$,¹³7•bTÛåc…{�CØ]yšnŸ”æ¸!øüÌ€ˆº�8"J¥¹ ŽQ9oú¬üƒ�¥ì³)cÜ‚ Öoã%&Í1ô‚(ša ¢LÖR- „Èì!´7!wIºÆ-¤.¹Æ/ê÷'Ï$¿(Á< Õínù|R äVš[ × pS°J:÷ÖYg2{,�½–7¿\ßYÀv´#Ž+Æo¸f p%é­G·Œ@å’¡Õí}UuCþÄrعq+í‡3„�ê*�ÄÏÓ0ðd@Ä�-°Íü-çËÜL³dó`лn™×¤…TÖ—¶“\`úØ{ÍÒV_+�²^ŒüÝÒº`q©U*L—ö‹Q˜ùRzÓª¾QýOz¡âÑý)aàÛ¤NRA£6]XªKÓ2@eñuZ– /“éX +˜n~Zfä6QÇús‡ì¬IJº‡m~Ç:“gψ]þtr´ŸFY`"j+î$î2ª'"ùaßÂpÒ¬ªÃx”Þ”—šƒ1N+ª±^¢ëL¦"HY€7�2×$¡]E�&"ô#"ÁMB×¾}¬Êƒ¤}ûu~‘’§¡b¬[I¶™¬ÎÉ€±žqß’ô±XŒGs�n´øL …/€æn¾à)ï \\“F0¶%¨ó9háã`|LÝÂÒ�a®•f?b‚rlÉÆû�˜btg�Î0á²��ŽÞïîàLñ¾¸CãxöÜL!èŠuVc»l‚u,Ú˜C‡î³ir`-s½ìë–7TŒ§çÙ¶¶ïýàãkQ©HLÝkèí¸ñÏI«µ�ôCѸ D©h½¿<öWªßcøÅô,šˆY!ò¼ÇDzÿ|�"á4ö€è"N,@�J7w’tC蓸ˆ�Ä}ƒÔŵƒ¼GB/9=Åjà –ù3êòÈu.—�s>y@˜1ò å5ÐÈlÖYeh§¼˜Åux¸Ô•ݹDékn§¸„°QD`)cmŽwÎÇ.Eat…à<ÉDçgâhôЏ ª M™„–æ” u˜‰Û{�·Øï@Ä‚+53¬¸ä¨Ñ«þÐOÅu/÷ÿhLNÅñ‘_رâ´b«^²bI�$kÅ¢!qúöµâj÷ÇÀ›Z± ì!ž%¬UÄGÂRQ\qð€NŒ¦8Wì¯ÇCªñÆ+ÎzZÊb‚, yªIáY&坨N½€åãLͯØ}mÆÀ=»ëe}ýûwU‰»8yðîä…DìZ…6W0�º+½ÒÆš{®˜££ˆª©‰YKuORÁc NÄù�.j*žåV¬ž~PF¢~·×š%xN|Ìò-§rÎ{‡USžì3É4 ETMåÔ †7 ù™ŸÝ³{~Þç„»«P¡/äv¼pa„­õ {ï�Õ3]fwͽ9rsËœtvæç¡|P*” +£B©ºZ¸°!T¨Ð>øàƒ¾sËžß³óû†9·Õ3ë·ìýƒ–)lÙBÈJèF!„ ¶L�Â…N¡ÂÖzð™™™™™————™™Ù-3ÆÜZ�Û’ÔÛÞ÷õm___w÷õu¾®÷{_®Ü•ûqÝ×ãvÜŽwå¶ÖÂu_éûûûÿøñã–½mÙ®ïöÊ�«¸q×Á]–+ww··e뫾-s¾¾ Û¶ÚÞ×½rå¶LîÆmY\¸./\^Ùîxy[¶ÛZ»zÕ×W×u®Ñ¹ª¶¶ª«¶–.+l}•ê-kµe.úF…ºÚ0mXTL%«Ê–©T¨-k¨ÊêXW[ö¾QõŸ6Ì}ãõ´­Ü·ìŸ¾ß¨-[Um™ª®¶Ö®âó�-‹ÐEõØ2Wß[¶ sëa[9Ù±ØZOÝ^­õ.Ý÷ôm¼âÅð’2JÈÊWÃô7^ k�Ò½†Aßxµ–c߈‰¥b©X*–Š¥b©X*–Š¥b©X*–Š¥ŠÏR±T,KÅR±T,KÅR±T,KÅR±T,KÅR±T,U‹¥úÇVÑcŒÞ2诖½Øîþ^¼Z¦1:Ý9^[¿ºàgðŒŒ—Æw¯–ñëCç2F ¯–9öër¯–i¼6^-ƒñŠñj˜‹+'[e&/yy?y5Ì?^­µÉÕåà·cy±„Ò±¼†­\Fy±\uoÙ;ï^yµ¬Ê˵„ûêþ†l½ZÆÍíÔ·¯–m_®ý<ë¾ÚŠ[Ûµµ¯–õë+“-¯–R^Þ²—·àfÝë—[¿Z¦~y÷_}õµßWËÔׯë½åì—l¿ZvùÕ²èûåÖ¯–©k÷Õ2Ù׃í-ƒ×9Üá*;ë[]ŽnÃ$Üu×9܆ÛZ˺ØÇ·-]ìm¯Û·°Ù±[·Ðñ[èüvßîÛmÙ[ýö¨ÿúY¿>‰¹÷ý¬ü|YßFÞ·ïmËþÿµeþ¯aýÚZqßëûŸ±ß°v÷î–2FeÛ­¯º¶ :(]½­´¥“®-ûî·Ëa\÷ü¹zË\[+ºS§ÏI·»ÜßÕ¹º–ÜêÛÚ²ÝV_ÖØúß2v.£·l½»µeß±µeÜšµÛ~-Ó†növËüu{»µ`«B›[Ú꜡ԆuÃ`|ª1~|÷–Wjà6¬¥6,¾‹RjôÕfHéë?ÖWÖWÖÏ–�·Üè”bì Ów²»«³þªbïãê[•«ßÛ«-_øV[Kêê«jÃ0^m­U'åûªJÈìü¯îÿ÷©úSõv-ß«ƒª]K‡ªP5ÆUa\ÅøT>UeUÝLUuWUU•UÕ)«ªªªªªªSÍV÷Ÿfÿô©Ëö§ÿT[ª +æî[öî�·”ñ=U~ºnŸ>ÍT¶¾R}îû]|ÿ–ý¿¿§î=Õ§ú´ÅOw7>|ù÷[‹õÐIøíñßÁ—ðù_:×ïýÞ—û’ßñ·ÿƒ¯ïâ“/�¿?çß2'ÿ¿­"”/Ÿå»øñ[¶Œ¿�¾¾º÷ë˱­â÷ÿ{·ÿûü‹5¬µÞ¥“]ìÖêþ~þ-_솭[^V(1ùý\®wÃÜU¡ÿËøÑU^‰aÊ(MNO¬¼àteÊ•”¨XaÒäô„i{¥vd^m’'\`Ò²VùÎO_JŸT–û|ÛEm?x½üÈðÛ9¾²º×2u†p»W*G÷ÛE¹ñJIÙò>äm9e|e§òÆ(¶¶R:CêeϫՒ%LH`²dÉj•$‚’$ xÜàˆˆ‘CB­G''G‡ÇHhè‡�"Š!!q¯½¥Œ�÷9$HGE8(òcHȇG'Çæ&GÇO"2¤(ÕA•‘#Ž !! éˆGFTE:H B4$ÔxvtäÔìôøüí"òDÈ� ŠŠŒŒR¤ŒŒŠŠ6"ˆ¢¡A?>=;:rpnlrÔÔàСÃÓÓ~€„vðêуˆÈ‡�>|õè1Äc‡ÐOëáÑÑqƒ““£³ÃÓãÓÚPPP�PPPÐOk>=<;:99879:ttvvxxxz|zzzzzxxxvvtttäààÜØØà¸ÁÁÁÉÉÉÑ‘““ƒƒƒsƒÃÆÆÆæÆÆÆÆ&GŽ555559jpà˜8æœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çœsÎ9çÄ1qLž&Lí]¾N}0åÊ”%*UKÁÖ”¦8å-0i +FM ÙÇ+%×Õ�Ý{�ÒÀ”J*A©)sÊÒ´$­¦”¦ŽxÐbhº"Ã%+N +hJú É'X±É*0¥Ô½”>}�¯ßÝÑWn?_ßçva«êòîú+»óUʸÞÏ?²t¼F~�+¯}©!ô~ +w7ê‹þŒuot}®·V +®¿ŽÛ,·Ý¿ç¥»Q“šzs”-Kú×­Åä”Jïèbû³‹ëËOå:|PÆçÛás_ÞvO£ä÷:¶Ì·¡¾”ÞP›—µeüÞ?è¶×5ÊõnøøE—全tðq›!õ “”TX±Fxòd',(MX&,�ðDåB¸R_·LúöK~ß]ŒÜ +å»—Ú²‡íûP~ÜŽ1ºø6Åûb?væçðaü×�qßk†ýíÞÎR·uU5*»è-‹ÝêøA!óÆ·úâòFö/³‹¬)Ùí^ÊÕ½}(¡ügaTŽÐ +ò¿ßݻ؎­«ã~Ø/1•ÛZR®ÆŽXkiܶ$õœ„ÛZ®ó\,à,M*”ð;979jRH1é ë|0‚ bôCȧ¨Ç�"î™(Iy¡.�ÄT”@ „!d΀’AjDEEEÍ ***J�4du2ăZ”€Š'’¸5¼ E‰É»"Czõ¤ŽpN˜šdÀÁ‡"–€‚Ч¬à 1cŒ�3Î@ (((¨2PPPPh q†d`0f 1_¬ OT@±D>à C““øH*¨‡�"W¯P0€S–~(B‰'¦¨ tñE.cŒ1cÈ(e”QFe�1fÌb¸ Œ/ºPULñ„Eü�C' °ê«ˆ�AmÇ£#�%V-[~ ‚KR€à +,²à¢ /¾ha„ FL˜0a£_xÑY`q¤h‚ ?lÑR…¥DzdôcGÓé +Ò‡ÐdIŠ Zr�Àð²�/T�àÉ(ÈB‹-¶à 0`V 0\l±…Y ÀO$ â˼d` ä Å)KMB`¤‚ õèàØä¨Ùñ"RITr‚ +Rªd¹!( /MDÑ�„`UXqÅÓÓS žžž®°¢Š„àˆ¢ /HQ�Ü�¥ŠNP‘B$䳃ƒçgÇ�"•“"œ°„€b aK@q/L8E�âË—/øò勈 +'˜ðÂå"€èa 1´€€¥D�NUôcÇÏMŽN FFœTb‚R*­,5láaA`Àˆ#�à’„KtéÒ¥‹—.]ºtYB‰$¸ q„b@C@RF®˜„„¬ÀR€, ¸Áèá +„C q�!†" (ðCpÀ ÀbE¬@B’xIòÑɹ±ÉQc¤BÂ$5I�‰ÕT,  ÁrØ¢ƒ;ìð€vÐA‡-9à` ÀC•&S +M’>`$*# CA>;AC@Šˆy2É’ž¬E +•ªX�!®`É2C,Wdˆ+UZ "%Ê +ONX’D¾#DŠ€ Õøñð1„ƒ#$ÛI’JÀž,1E9k + *M h¢B%ca +ëQ˜–ž`%$%éErÄÁ<€|jjpèØéùÙAĈˆHT~Bœ…” @YZZRaii +¥P€˜$…ð�T$1 +B´ã§gGŽMŽ589:=Mhȇ#"GÀF!‰’’Þ¨¤•Êz§@³@(L D"©L–$÷€SR <8JdXB +ÄQd „B€bŒbˆóÐ8Ü(M9£öÆ3… í„*­z©²×y(ã?´E:xˆjºC›à Ú¤žЮ{(àÚ!¢Ÿ¶½9kÁ8Nñõ ¾ØX…ŽÌ" Lxac#$p„ zc|ÛØ‡0á�^¾ ŽÍš^Œ��„™ýnäÉëa\j¹Ñòk½^dÕ@@iVRýG.K›„ã!³»¡q™Y�I‡'ü‘¸Ö‘ Ga’”G¿ W #‰ï9zˆD<žõ"¾ˆ^=âZ_Òi¼8JŠÐÕ¶â8grŸ3æÍ‚×fã"´jaõ ¿9 +F�jŸ=”­¥9E\ÿÓ_šÌø Þo”�u|Tg÷ ~o‹vì ÈÊ¥O Ÿ��œ �ùÆ/�®¼WCJ>@¹ã Ï+iÃZ͉CÔ±/àâJ"dW2Ìõìö˜µQàEH¬Áܶ/AÕP)23èÝ ¹¸ÛØ€ÉuG‘ËAñÑ„€ò×7ÐÝ®0i¯ ™ÚpÝ(Ž¿– ћӧbèÁL:ˆn­Æ9ˆÜ9ÆmÜK¿´I„QAu4òD¢D9„İnø‹'DœC�ßùD_�”‚ŸR#¨™°½Dl *eB…ÆJ©7�ß©ñÜ&ê)ÉÞD�jO°ï¤¤¼þ "�h�ø&9¡rd¥† Ø£Èô'ÊFòr˜ˆ_{‚Ö(¢¼ g£<LDGÄמ�52a~™QÑ‘ð{›ÈŽ@”Ÿ`v”—„iSXüõ•‘²)3µ ÄS9"Í)Á'ê)¨"´SqjŽ¥²@&š) +&ÔSÖE&`¥"Ù&Š¥dŒL4S€L°§R‰LØNE¡MOцNh¦ ,œ@O¥!™ÈN‰¹™(ž‚�àLR˜pŸJ2‘•"­™Pœ²2�™ +Æ0Q—’Òd"+R3Á8•/dÂ3a¢>EUdBvÊ´vq*“èD3%ˆÃD} +ZÄíT\í„ãTÐDsŠ°Â„º”Õˆ ØT›‰â”<£‰¦€… v©¶©x4Å)Z¡ Í)ƒ +èS©$'²)‘n'ŠSpBœSA +&ܧÒANdS¤jЧì…&0¥LÔSR˜˜È¦ÀÕ&Ke +MxJ ˜¨§¨�°�5™¨0�{ÍDÙ‘¼'¢#àlŸ E"?áì(‚‰èñÛ'dG&ÊO ;Ê�a"j$\oÙò&˜�òS˜05 +'öDÖˆ„< e ûo˜@ï¤$zý5Ê{¢¾%óNðwj¤v wMJƒ~¢ÿÂFEL¨¼Xé‘(””Šm";"bcÝ¢Ï�F.7Á¿¨h²0Gxážè+°)[H$ð.›€ØÏä"gQ‰+Mõ·½…‰V± ;llh�0½•&!¶HOÑ”ËYè–x\·d€~ë6^-úD ½µE«Œ¨•L­&‡NC†'Þ/4ŒŒ¬Ì{†*‡J±b%ü‰ŠÇÝtÅz)õˆ¼ñ�Þ�~€6£YÆ5 l‘³÷)wG⻾‡†Ž�Ặod¥}-4ZL¯Ÿþ9Ü--°º×öë|xqÎ.—-ƒÐ^€ÈMoÍ˯õòŸŠYO2rOáÌ T�*Ç&™îT·’‹é\=áù·¾µkPê¬\5/çhóÁ1’*.¿9—�‚b(V·ˆổÔnnFS±ÒVg£VBc¤è4Ÿ9Ü�ü•›†ç0Ä¡FFß Œƒ8ëíb +#B#¨ËËþòì†q8Ae"�Mí[’$O uÀYº¾ª?$©¼qú?�O]VFìŒdºYU# Ê›ë58mOÙc�þ*h«šØŒiˆìž3‘æ ªˆ4UCˆ+q%Ò9ˆmÌ»²TbçZ¬|2âIZ4ðáã%ùbafðwŠª×’§$³Ô�1J®õéÇþûyEˆV" „#A1.kWªœ NáóPJN0.Љ%&“Õ6ÃyLN`Ã2“m%`*Û£écäÔ3ЪÉÑ UV®*²ƒ oì'æ«n®‹„¹=[èÿìÎ2Íâ °/Óßa¸ÅïÀ%†'€¹R±ÏyР�+ÜR J?cÿ™v”ñãUZ©¸)pVåM«dor(ˆIб>2Cãàt7�®�h ŽêÙu !KCYćŒÃPB0Q·<5àYÙP˜)9·`±‘5Wœ9xžÆEùÎÒi(ñ‰Rª/)v …9�´€ ¥©cÃDJ§‹I¯‚x=¤½(�OÄEÁXÉj²<‰_ö$�^ˆu@æLÏÙ…<Ý�¥*¹- äjíw´‹ +r]à­?¶JeNca4`Œ™ÔŠÇóèf#+¹¤RäK[Ž3¥’smÚ'£IÍèÿµ¥Ò)ä�ŠÕ®È<ð„ýj €ôš}­õQežF Ž±J‚Ò¡Jf£8TùŸaŒÓOÙÑwqß"’ ÁpÒB-^²ò…´HècßyAÈZ² +›¢+bOÐJPÄ{[œ§ú˜l$°f˜Ð„¼BøKÄTË›[„Φ›Øñ#†�r‰¸±Ü\¼èÆ(@3,tÂ(Ý7ß|Q1ׇbˆuœï@‹ÊÁº."�À㽞°÷Ì’Ïa ‚Œ%çÓ“*ò +C±bç­Ky8j_M•Ãt¦0)2ñê5×¶$IÕ,´§“¾rÍÔ2Ž•f|¡.ïD_uÊ® 6z€ÊEÄMPÄN@B— jjÒ®IvbZ§~*Xt©s$,\I.œÂûrÇ,™A„5€ö·W–x#*Ilˆmt‹ždðá¼Ñ+ÞÒ‘˜ØåÌÊÁæ¹ùµ±ŸßêÖc„“í’¢ë�€èkg|5CZ„NÐv#DCÔ$\Ñ’èQNí!M¬ÑäëÏy[.çö`Y¯VEГ„K²AØx¿À›µVæ UˆÔd ò`ªƒ•xÜ’p >¸Ó£¯Ók­ ‚¼ nì«PÕGbm7€‰TïK†bS ý²Ec2ÀÇ4zO‰¶Àá¿Âb©—/¤«ŠÎ`Úƒ�Ìf £|xò±}APàHÖ Ö?G ¾)ÿ2Å+½˜„ +§]™!¢J:çôÍ.2,òa0Vv“ŠM K£Ñ„îtaD0" j½¯¢›mŽÎ»X{MY„œ9 Ñcêæø/‡}ËíOøI÷eÒ �r�6ݬh $ÍÇFÛZ c?$Èch[I÷@#Jzl+�w(öYŽJxix@ñ8 +ö) +†ÉÄÒ3ë›@  +ÎDÇÐ×K`úФ�¼D`štˤ‚UôÿúøpºâôŒëÕ‚;fðwÁ~AL¸z°ŒºÒUå3üA0Áë„(ª²ŸT›®ø9áLNcвØ 8T¹µÁ_‰ º­„o´¾QùF1ÃÜÎÒ/àxÁµï +9!€M6)<ÎO8£aï±ËвÃðñVJþ»�¾‘?0is Ü‰û'‡Nb—¿™B/¹RàÛ,?ØEñéQýPwïð@ó` :ôeõ%H&ᡲ€»JœI¡fºdô<13yÄ—‰„ºÍ +ùHÞY$A”ó¨Õ°ýgúTÓ[ÅAôÃ|hÐ –o/·ƒÅ,Õ•ß’Pbh !#ÙBÂà Ë—,2Ϧ+›u Y¦)÷‘Ó“Ù'½íM}ôÓÒ¤ö�g°¥ŒÝ*  ·¬C©�† •¾øŽ÷|�¥ÜC+gØÅh)Ü®;*rûžQ?ˆ¥è~êR|P”=¥V8Ð1Þýo^­Ø 1t,ŠbÅ"Lc +eõ: ÕŽb ½ hÅBÔBRK×Îö¼ƒ,1u¹�Z·?Ðí¯ñ-¥Œ¨~ðQi&¡ŒˆÓÿÁª‰ !#È)… Î× +²\UˆtE£�3éð²_2ài5$QÇ~›*ùåÖN +°`‚WUÀ"äúæí ¸šÍHƒHäq+TÄšô‘»±°Ð®ö„å2€rÎ?7lk¶/-E} ÐÛy6Véßš–ðÙÂðmØž'Ñ—XVóÐE@Ίä"c9\ÁeüI;�ÏݳEõ'¨ô£·�Ì¢"Nš“�kB'uéfØ}˜Àr«Þú-À˜è�²ÔŽ·ï¾Ýü°©1—WhÑF[®ªÃ¬³q™UÜ/Ž_éh V{´ý—ˆÎqX#†uDÚ{40á!ÂÁq¾¥�(´üì—¥ˆT�SѰö?Y_aH!×ïŸ`ÎØ%„1l B§5ÌžjG� +ºŠ¥þ9Ð[«4˯Ýìc¾Z,×c#¨Ìn3ïo[´`j!ówÓF--™î¾¡(Љ¢¼F �½¹]ê-4”>yqÃW}ý +ó9Ý‚ÊÈ€z_ôã^tRÓy�noßÚP-ð¹S',°b¸´eCfÎf±Ä9Åhi²ÔÐ…“D¢<Š[ãð#hz·CC÷M +ŸFŒ˜ý %ÉLEÜñJÇ¡ËÅa¾‘b’}äÖZu›øY(úºÒ³Tœ�šÇëBˆÁhÅN¯XjÅCäÝÜ/½Í;m`i#4r*¥áCŸ•8 + +„�_3Gçp³¬çdR)ƒ�Wâb䳩QÛbFú¨�Î).=8”i¹ó™Á_ª%í*§¬0ÆÊlÖ>!¡Í ÝŽJLËÜ”˜‚[™Ùw�¹sš°€:@ÔNû-ì'†&è‹M?TŽLŽ…M]k—yd˜¡É +�kPôþËç@Œ™!m°olÇ�XÜt‘¦&0JÏÏôã Ív˜1~h/ÊZñÿ�Þ7f,V=Ñgw·žîD÷nAèÚ…( wÄlN–•ÏØ‘‰S#×ò=8~ÞúÆHUlžÚûCï’nPòIÖ¤Ù^—ôuDn7Ë÷À|Àý¾B£ås?Íœ�ß ˆGè%b@á[úÄ'€P*zYe7»aÿ�‹Cï÷û­·_éÚíÖ„{Ɔ¦{SëäØg�nÙ&zxà—}’ˆˆ7¸}g¨‡ºyw=K)úg~>ÑïÑ•ö¼Ä˶p@æJvÝc4xE{F¤€4N|YM�›EçO.mØ·Çφ˜0ê‘¢ƒç ù”ó8Za�{ʰ<#d 9/>hÞ>üK­iF(F0¬„• +ã¡7ÁÎÕÒ’Ò‚ocÀ@¬TÔ.hðç"©é÷*Œ Mõ†­/‰ú3YCs}ÂeB|ϧ] &ÌÃrŽújºëiY=ß„üÁ»Ì€TÈŽŸ±ãž|ÌbFM©rŽûöþúâzШk_ø<ᆅapÀ½o„¨ 7$ì—H{¸àÿó^.‘z 3®Y¥"r|ö‡òg–‘@gq7ÖÿÀ¸i â…Ô�8‹ZŸ;õÒ-¤€�»ªŒg™ñu-›zS7”õ‹ôÛƒÚ ëžXWù[y³¤Z�[ÛYÄ2¶qÃ3Òù¨ È£ÞU�—BË?f!k{aýÊ(1ÆC¨õ&ÌZ� Ц{Ñ4$s—«IÝ1žðV;R>Õ=倮CÑ×ódÂ,`s}HDòQ^*2a ½'.K a U«åò&òÙœø*sIÝðËjü±^O)Ð5­œkžpJ}qÚÈÀ.Åu¾á¶Ç— +3¿W¯o9þÐbG´½€¨FU‰‰®Úiw¦®'é•úþq7¼ý +P.¦‘YÔ¯|ÕU€«¯uÄ1ÁR 4g$a? ‰•-%=ª†P¬¬QWå•w��Ê%žyju&–Š…Â‰BnGƵÆW†srqIh¿ŽÙÇÛ Áy/–`èÅÕßCJû|ÕÄ”U}g�‚9�¤ù³�dæ&ôÒ}ÃFôÙKK‚©V»ž ¡W¢$ð<Áý«ÅÉ Ç±~ñnzŽ~�ö]}¥Éîø(@è•7n<.Ÿ»¢BÙÔH4ß}Ñw³…w‚ˆ0ŽðKXj±Np�¶¢' zL6)—aé¶–º}77^6)_dZº-—t·-wÒû¨¢‰`ÆÏKüK´ëÈCjÍУ +‹¾Å·FßÇ�YíÙ2z^êu¿ !y/]€Åƒ¾€ Þw·ˆq£¶´<!°çGñääþŽýI–j�Užhÿþð“Åš +ÜFøZÛ›¥3éþ¡•Í]SÏ¤Ê *QO-qä†nP(îo>ät_#°â¾XTÄß`{Á(…n?ê�¸ñþkŽ!'ñ’ôœ5â™y'Ð¥èÍç°êjþøÆ¡ H>©ô?z+úWÐcb€i )U±ÃÏæ`8úP†Ã&qì#úÖCI©0Ÿ*Ë­‘çç`|TWÎ…ŸÂ‘B’÷ðÖë~™êQÀn¨2펥Ö&þþJ²·Æn]q`ÉÞ [IkD±,Í< çyíÚ‹zèÍ6À€+ü,ôÀ×ø­×²F:Ų¦„em�­­lÌ[µsøõKãMzéæLêz`ãëÆJ›9d¨;¨a¶rÇcWÔÊä…“‘¶ç>šµ€d™b0€6ÙÏaÏT�¹Ÿyµ”9ˆð´%= B‡½ØÅœo«úçªé+íu7º2X¢ñ~>úŽ_¬ßm©Òó�Úí:ÃÒ%öAÆlUJèÀûk(Þþ™jCë›?ÕcÚ}(Ž0DÏÓ�]¤Ä~‡r•£{f’« HœÝīХg²ÛüºØ‘7¨>Jwì*K3ü ˆNm�«R0†ß!t·Vî¹¹n?Kæã×¹ç ¢ +u ˆ +ŸTõ‘­fª�ýÐKê‰âÝðû{)d÷½i(wŠv±SãÆoû9iuÅD*¬³è¡Z×Ûˆi'ŽKb‰E'"�2˜ºb,JrÇò¤SŽÔ¨¼OFs²ô ÆBGŒŒ²ƒTŸT…Áðýùá`P÷éýžWþÉ=ô¹ÝS^T à¦ý•�V¯±?uÇ&FÕ쓉Ú}ôcÇZ0·|ðo>ÚÏœÚXjm¨ƒ\—µªb�(kjßs"+@z ÜðTÏ]¹¤ÖuŠï +VàòU+ªËL�Òé†c÷þ†‘ÓY– <×X‘3®ÃDɱŸA°@ •Rl(ÂÍ–ùß}°OÎ�¥¥5×ÇØ:D8ÍßËRŽ0Ú4Æ~º¯ÙÀ¡oEuUÝeßñ +aв“ŒÀèpýìžÝƒýĹ½"ê´ïVGè¨àpÇ_¨Q›F4„[øZ3V;¥òé=ú:p"ôÂW˜'Tx°¿Øï‚tUÔ@ë«LìZ´ÙìAP7×ËØôȘ»QòÑ+ê8½Á«Ÿä±ÕÇãźñƒ�X !Zøª)Á‡¸’žYLh~l†ò ïê›J Ý”›N‰"ˆ&-þ["Ê| IDûÏ#“Å»ïh¡—"¾¬O¶r� 4ô‰æx™ ¬¦P£›·Ð¡XÍÛkÜf*ÒµhWP¡­6e÷¿×Ì‚•ÿ­ôM‚i·")“°œKߌ¨»Qªˆ0Ô2;!M_pFÆhÆ·«¦i>{yRÁ¹¿«>|Š¡�…®RdC��¤o.³jZyŽeÁük.L™í¯ª-ÞÐ>Ï4ÁM}×GHÞ�¨/‘}ÁÐðe\°òkÊ�£ +éÞ’ûŽH`¶¥„‚KIß�“È5À¨”â*±7€¶- „òÕêÓÍp[«Àë†-âE>m*ýUŸCÓ+ÏñLÅOw´WëäVŠæ™«—ÉŒ<ºÊ¶<�²gÐáH6Q 5›çÈSý ùï¶„ä¤ó×i¸/ôâu_k¬ËÁbqðg¼ºIÞE^R}ìÊ-*ޱ®ø9i@Vn¬ÂÞ”@>ò,^ý’ha*×=z�®C6œè£…T†J ¦«êͱ[§m”Ú �¡Ùh §Çà‘]I†o”ÒH móµ]™Î*1u)¼!a”úŽÐ’ +­RªÌÂD›=í3Ü—вQ©J7·ñ™êDŽÄ”~`îz�>�iè¾Ã�§º cqÆëJ‚²ÙúuH©úYW?¦h#•©¿ ¥öçˆßãÓÈK|ÎQ5Š<¾á®Æú5ÜÌBG ½c\f.úoØ$·¤¨ia ~�ǽòĹ€ü n²2˜åonç·†{È=ØêkQÌxÖ<7$þ_3i÷#Éö–k£g°ÒÈt‰aµ;)J¨fò2DtÊ�Ƴ‹Jè«�h«ø¹˜‘Ác­G@À@Ì +,󯑽€’=ðTèÃ4ÛËJb¸K�Þsç]þë6Ùn˘îÿ²lÀŠô©Žbs:-izd³·†B-QÄ{ïû–ÑÜý…þ:(¿ý ÉrÍq‹\x‡á‹ð ½ˆPÎ|8`Q¨f¨t+°< ¸Yä]“Ùñ´zÂz ¬ª=…\r4ÕÙUÒ‘ØÓ« ’i»‡ÜT™‘ÍÊ™ Æê‘Á¬ÿ‚ ®oR†Ðˆ&Ÿ¹ø¸âÓ¨u.„íÇÿ>“‹¨/ˆFo„eC)÷=�M'íŠÛpP{£ÆÕ8úÍÞÈO¸UR*0éÙ3´\9bÙ4¾��K¡±¥H”OÓ7üßTO¾ÔÙp뇋º.¯¼©r²�ÄÚÃǶkI¸Ñv¡Õ¼%¤‚,ÜQö ÖŸý®nlþ+µkþ]ùGè§Pð }ÿ6CžÞÊ×Ïä+e"‡ä‚±xêGÍÓb&}Eýn9ºÏàéøæ=ö¹Ü†p+|=évEsƒFâ™F,rzLX8Õ2®P%¿†Ž+¤‹p ÿùÌ)pÝ÷�2Rf2sQœ˜ËhÈFNl3Î2ÖtiÔ$êïBð™iRµx­'q_o{% ÂX-ÒM»²Yz¤µÔJ\b«áü×#ß|F]e¥3-iÛa§Ë’Ð8п]{IìO`JÔ,×I°3ü§ŽÞdtÞ‚€©¦+º0�lÍ©[ê6vàJY€´€ +ËÄ�¼ÆîÎ�°ƒžóáA;]°=Üms¯w]~Úï³÷ð8šF¸Õß»Ï$>ð‹/’o¬�<¸®‚-Wã0 œ…»³â˜0Ž.„‹ÑU ‹4þ„h£ˆ“ÑV5ÕYÞ(Õu_9±ô?a”²™?[�Á=AÁÓi~T�Ä8JÐÂQÛð‰ á{— àIåù�Ö xÇÓ'e²Tn+ÑÇвÎþÈhü§ÕÈ-`f +¶Â7�`N—)P¿Pz<Š�Z•EÈ‹àH� : Ktf¢BŸ‚�†+‹D%H +xÿȽ`!zæ0{æR™Âáœ\2ðB[Èñ\NçÀ�p.' ô}(iæ 3a~ç’ñ·È Ø}ÅÀuÜÜÆÌ*²×-‰Üüâ`Ö[¥Ñ+ü£ÌZÏêAÌÓMG�>”Ö"÷´fÓ™^'™¯òá±7‚f¹°ºóYtu[öDaý »7ö‡Cly˜NÛRa®È&§SFFº¡+¸ª,3AVê!MEõ³½ˆ½À�?q0¤ÚsÎÊu(ĵ'â}#%˜+*á‹Ã–F¼Ç†xXa¾ƒÁXtõ£�7òQC<ÜÀhÍ_a¹ÑaQZ;o^MìIn$DɵzØ\¤ÿg3¶Þ&®��ï±q¤é£«`Ü“~¦óí[*\#7à¹0£ >¬Jü¨vXj'Óo}*Iö%úÚ‚-w{µˆE$ðá”é2eRÛ@Ñî"z€ Ý(¢£‚ªS�ï¸,äÈèQ¤®¿ž¬ÔA˜ë†­±oõ^XP š_¤\¸Âƒ²Q;ÒÇ4÷ô¶(Ѷ³‘ÜïsÙ˜mc‘ßN±P�˜ö�'‹cª†¦ðÌóè«i´…¾nö`÷*†x¹i¬#5ìÎö:9ym˜0,QÄô,(´ëüc›ã,„|v–?�ê±Èrw£ÏÏ7”ð Yr%ñ/¬äLÅãDÙnÒq½æ7øä›\%XQ{ý”€ R‹G¾æTXNÀ�~š#厭®û¥o9­]�ùr_�Š)™D¶�™yå�É»€S*3#ø—‡Î.KfË·‡,Ç£3ƒÝ^`³µƒÈ[\MzÀ_êŽ2Üš�C·Î�ŒøûÇöËi””\£¹È�—“ÞàúªõV¾J·Õ§õã\9 Dccô%ÃzšºbÑ«ýôÒ•o9h�]s9}‰pUÚ�l„‚!ŠåsG¿! : +„š–g¡A9�>+v¤T¢§.o¬—@ê ‹:wf‹¡öÔŒôo²3ôÚ€¢Ðœð Sñô*�0Ñ'dTy‚‡9g⧇!ØšÅhÉsCŠl'Lt”¯ºd„V¡«Ÿ R5z@N}U¿²ÎÝÏM1Âp9¥ÎšÐQu 7ñJõ}ãå�gKˆ‹ÖR4¡¯Ïk+Z\×2©ή„€ ¤~7HЖ+HXñŠNƒ¼Ú›mE‚Ÿp£:d*íôW&6.ñi3¶ë/~Êmpâw¤&kö�ýÚ˜@ÿ¼Œ�±“*J1[Çm¥i¼¡¥‹Ñ6ÀXF®™ÊŸ2”k2bq|vβewE#!ºä4wfAº[š ­¨×ºÇÕŒ%ÏĪˆ›Q/KmWѪ°®©ÓoÁÄôÉ¥-hìaf™rÚ;C¼‰ÐxE]ßFÄ›ÇÖS$–X`°P#à@äÅœ(ͰááCÅ— “—ë· +r3Í!4ŠÃ—] _«’*»Üܬ¹ÂS\—µàéU�g •+"j5ôÞ¬¢jC.Þ!¼˜YŠsd­ü]¿0Ò\òïM96•É M +|qWˆ�⌒ÑMãæ­­öÄ^®Ì¥VŒ†YÇŸ.æFX‘îIm„Úâ<›�f± +ÀT˜RµDç+]³M·QhähÛ¶lôI èz»¯IÖʯ¦æ�©Ÿ€ Îô}±ñï‹ó9äõ�âSC×�\vsìzÒÈ^¢^³QÍlhª³ÐZæ¾*DOêŸÁ‚Zñ€8¯]ÕVîJlÙc)Ž—Ba†ùkJ8í&W$îŸPøÎ \œ]+h(÷çH†Æ}¬2rÛ‚�«�87Œ¾ÓBR'q¦MÝ:„mF0i‚®%“R1µ°Œ Òâ.‰¹’9¢OIÿ�…÷±¤Y¾ß©vŽ޲ì‹ëÓ%æEë¢õÄjƒ"ÍBžš{YŠn?”Kc~Λ™Ë|vzúËøÑÚWLñÛI&Üžë5,ÒH÷Úöuê„[©Ýµœ(€hû�É—Jg¹•(�ÞvìŠ àRj±×*#xrGV%•ˆZ lonk»ú<´@27ØìWÚLNi¥>¥5ЖÇ;uö¦PäÒc/“qy�ó¾�<÷ìª�üÛ`,äµÛ QÒ¾Ì�Y£r ÿ� ö½7Kð²” #3Ehʹ0?IêØ<Š{¡™‰¸Ôó‹§ÝªôeÞ“fþ(¼̱dX3ß-$¦@g@tf=ë]�÷Št¨ªyQ‚,—;&¬¾ó±ß±.Ç\6 nòöÖ1Ø“P¸‰Š}Z�µ×a\zW<ðË4þ2 +TЄŠT4ŠíÞQc#å5 7`´Nw!CxH€ïÄœ ÉŽ‹3% WOú HE‹.‡¹ Åí?0c|5ip¤ ¥‚Åñ6ì9vÛ§«ÜÂäD«D¿û-yë["‡H9÷ùýš´‰´D8‰rƒ?ûþpÞ�ššìªÎq¦{]üÕ Ï� ¼t–¢DØK¾$«"ØG‹^,RÒ\›4º"²)Òcí'|Ø nd—¢Í£Íˆ[®ïpJNãoKÙ^tê™c­‡O±»^Ò» Ø©‡â$È…ÕHÔš¤éPòðÙT�>}3ÐÜ8b¸Õ²=Õ¹ø8ýÉQøá|ñ‹ùÝGŸ¬(ðZ©e„x#ÝW� aùþn_¾Á¸]ΈֽÐðµãG“àóþ"¼�ø�•hT‰àðøi*µâ3(ÁwfÎ=Ëñõ-‘ÝÜKy´�FåÉ*"“ÊôQûüƒqfb—g1‚â/ý•ƒ‡oá Þ¢n¢ZYÕ� +¤Ñ7 �ÆùÛ¬\OÁ]&¯`¤¡Ø1ð%K"îOBŒ¶:Aô9Úuo?Õõ{ƒÅù9~‘↤v—*2ËÍænæp?/kx*¦Þ®Kôs³\âBëë"|¦7,ÌbŸ‘ƒS žé¼(Î?{—�òEUòwŸ’ÈL#ù ÎfBοTÂÔæ¢t~•n®â²ÙÊè�]Œ~BÏÇ¿ HËð:+||Wêåŧ\hI�_±Kãx€ô¨ÓäUqŸÅh†6>pšFK±ÆP2µÎ£š =�”ñŠÌ Èú0�4H°@øÁæ÷¶FPu3œ&Wr·(… ø‘²ÎØN§þ[8¾�hwß)–ZÐM™H‘+4.Øæ°tKö!ë) 9ɵ¿´I¿:Ž[aׯ´Ý® €rËÍI4ÕÐ}6z±ì²ßã½—§žt–ÿ»0`Ž9QÇw«÷aÑeù�‹ª‡KÏ æó›¶c�hΠ�ÕÇž�°SÑz©-ÀÁïì«PïÒ”9ˆ"ÈÄ1Nm‡c¨5¾ÕÇÔ¦eT×õYF $Õ›Çl¢¥A2¥^ŠÌ +RLð½öHJ'ê¿Þ*'toÕÃËPìñKMÆÐfPät‡~N®e7s‚|� +OxÅ$ë|?4}øŠgpzÞGý<…¸Îv GºÅ®A8Îñõ8³‚U*ó%”Â�HÖ.‚¡ì°>L,패½ ¨GäÚp·�º¬®—Š.ôª¹ù‡TïÏC7?¦�ým*R>ïú³B2&§rVâQgiÃhxy)D^‹þÊ*fT‹eÝ{«çÉi,­ý76KXÝ�ûh!ûÔVíjM¨[ì�Ëk~A^E>â­£¾¹~cåΤV¦·È�µÙŸ¥['N*õþf%²ÄH º_’5ºÜÖÙžJ…ç;ðQÁÎ(úz@?’„~�h§¸±·•"2ǘH)< â"-]Û‘¨w{K:W§98¶Àg8;¨{|Ó¨ö‘–ÞˆT8ݦŸ|±›–KvŠ’R#ØÊQs6ÐÅ1°%?g›q@õõ¯–O7|iD³"1`zjT@¾C'%€!3ãÅ*? à"=P3%?eî‹;P½ª›£ä;Y‡ñ¼8ºˆåΧ7³ª¤›PÓ|4É:K“µq+Å~Ч’,äS2gô�íæ +ãÐ!ÒZ°Á“‘­¼i2?³úI‰Å K%?º¢4Xa¢”GÓ�$ýUÑ´Ý^¤°ƒnç0#*˜'º™ž›Gº-€4ýï¡ñÅ))ñâùWLÞûÛHûzòV&¢[ŒkÛæ1QŠŒ6¥&ãõè ïv„QŽø�¿ú•I.üq(Ph¿=Dö„(ýQCG¦ùÊ.»Ž¦ôö;ƉÐ�–õîU{L7a*×­,üë‹3;¹ŽÛ‡p½÷Hè.èKIZ•0—F*ððném4¿ާ£¾ø&h¬"iÚÑØh¨�ÜÛMOÑ>õ%L°A:9÷P�‹L•øE”ê”ù³ÀÌ×ßçíñõøúûüýýýüûúøõñíçß×ÌÀ³¥•…ueUG9  +&1=KZj{‹›«¹ÆÑÛäêðô÷ùûüþþþþýýüûù÷ôðêäÛÑÆ¹«›‹{jZK=1& +(4AO_o� °¾ÊÕßçíòöùûüüûùöòíçßÕʾ° �o_OA4(+6DScs„•¥´ÂÎÙâéïô÷úûýýþþýýûú÷ôïéâÙ䥕„scSD6+ "-9GVfwˆ™©¸ÅÑÜäëñõøþþýüûøõñëäÜÑŸ©™ˆwfVG9-"  $/;IYiz‹œ¬»ÈÔÞæÿÿþþýæÞÔÈ»¬œ‹ziYI;/$  %0=L[l}ŽŸ¯½ÊÖàèîó÷úüüú÷óîèàÖʽ¯ŸŽ}l[L=0%2?M]n�¡±¿ÌØâéðôøúüýÿÿþýüúøôðéâØÌ¿±¡�n]M?2'3@O_p�’£³ÁÎÙãêðõøøõðêãÙÎÁ³£’�p_O@3'Parƒ”¥´ÃÏÚäëññëäÚÏô¥”ƒraP )5BRbs„•¦¶ÄÐÛäìòìäÛÐͦ•„sbRB5) *6CRct…–§·ÅÑÜåùöòìåÜÑÅ·§–…tcRC6* *6DScu†—¨·ÆÒÝæíò÷ú÷òíæÝÒÆ·¨—†ucSD6*  *7DTdu‡˜¨¸¸¨˜‡udTD7* +7ETdv‡˜©¸ÆÓÝæíóóíæÝÓÆ¸©˜‡vdTE7+ ev‡™™‡ve ˆ™©¹ÇÓÞÞÓǹ©™ˆUîîUª¹ÇÔÞççÞÔǹª!ø!88FUfwwfUF TííT ÁÍ×àþþÁÇÒÛãøùûùøõòîéãÛÑÇïýýüüûï¬ßåûûúùù÷å߇•£°¼ÇÐØßåéíðóôö÷øôòðíéäßØÐÆ¼Œš§³¾ÈÐØÞãçëîðòóö÷öööõôôóñðíëçãÝ×Ðft��œ©´¾ÇÏÖÛàäèêìîïðññòòòññðïíìêçäàÛÕÎ8w„‘�©³½ÅÌÒØÜàãåìëêèçåâßÜ×ÒËﲍ�‘„wly…‘�§±ºÁÈÎÒÖÚÝßáâãäååäãâàßÜÙÖÒÍÇÀ¹°§œ‘…xl4>ITamy„�𤭵¼ÂÇËÏÝÝÝÜÏËÆÁ»´¬£š�„alw‚�–Ÿ§¯µº¿ÃÆÉÌÍÏÐÑÒÒÑÐÏÍËÉÆÃ¾¹´®¦ž•Œ�wlU`ju~ˆ‘™ §¬±µ¹¼¾ÀÂÂÀ¾¼¸µ°«¦Ÿ˜�‡}ti_7@IS]gpy�‰‘—�¢¦ª­°²´µµ´²°­ª¦¡œ–�ˆ€xof\RI.6>GPYbjrz�‡�’–šž ¢¤¦§¨¨§¥¤¢ �š–‘Œ†€yqiaXOF>5.&,493.)$ !%*.37;>BEHJMNPPNLJ2-)%   $(:<>@ABEEBA@><:852.+'$  "1354210.,)  +  !#)**))('&%#!    %%EndData XHEndN Art Original Sca8996332545498.4323555m 92450215444l 949980938265726688.80118405318014 l389.900134 380.27672519753 cl 10828571945689731c lc1563032464378607851035601Bc 118108902.712790971017562032 /NotRecorded21.5118236427692(Normal(Absolute321115207439258284386000ml %_lllc70422721631254540359Y0/ArraAI Auto ize) / (Adobe_AI9_Observed_Key_ %_191096333230ÿÿÿÿÿÿ   +  !"$#" + "%(*-/128)&$! $'+/369;>?F:841.*&" -27;?CFILA=950,'""'-28>CHMQUY\^`bcfeZWTPKFA<61+&  $*07>EKQW\aeiloqstuw_ZUOIB<5/(";CJRY`flqvz}€‚„…†‡xtojd^WOH@91*$ &.5>FOW`hov|�†ŠŽ‘“ztme]UMD<3,%6?IR\enw~†Œ’—›ž¡¤¥�š•�Šƒ|tlcYPF=4, +&.7@JT_is}†Ž•œ¢¦«®±³¹´²°­©¥ ™“‹ƒzqg\RG>4,$ $-6@JUalv�‹”�¤«±µ¹½¿ÂÃÅÅÂÁ¾¼¸´¯©¢š’ˆ~ti^RG=3*"  "+4>IUamy„�™¢«²¹¾ÃÇÊÌÎÔÅÁ¼·°¨ –Œ�uj^RF<1(  + (2L\m~�Ÿ¯¾ËÎ $/1'AO^m}�œª·ÃÎ×ßæëðóîéãÜÓɽ°¢“„&1JVbo|ˆ”Ÿ©³»ÂÉÎÓ׸¯¥›�ƒwj]-6ALWco{‡’œ¦®¶½ÃÈÌÐÓ«¢˜Žƒwk_SG<2)&/8BMXcoz„�˜¡©°¶»ÀÄÇÊÌέ¦ž•‹€vj_TI>4+# '09BMWblw€Š’𡍭²¶º¼¿ÁÂÄ¥Ÿ—�†}sh^SI?5-$  !(08BKU_ir{ƒ‹’˜ž£§«®�ˆ€wne[QH>5-%!(/8@IR[clt{‚ˆŽ“—›ž £xqi`W% + !'.6=EMU]elrx}‚RJ &,3:AHOV\bhmrvy|>70*# + /5Y ó%S©ý'>ôµ‚¹�K¹kluáP0®w œÝ?eºªaŠFÍè_ýÌVá¹€™NeÓ>\¶«BGÿã0ͱn6Sô.0Íæc`ô:Eã#­³pQñ븲óxõsÔ‰×äÆBj{> xa&¸ìöò¢] »}l‚�‘Œâ”bG^`ᚄڅuùÜl° CÛmZ}Rö–‘M9�ˆK‰ì-]™ìDD4ÏD3jy�ˆE:Ë*´§úSí.5ôéߣá–3WB�+ÆI o¹¤§7UÉLëß»þCe'Š PCGT•¼þ L]+݆ç3öLOâ�±@ ómèÝ€ÒP‹!û88O³Ã&· kCÆÓ$ÐþÂûzé}íCÁå>éœà5¶Nˆňí߉k“#KzûG¡‚Èi<‡û§ˆôc�––x"ÅÔ€*÷¯DG*Æ &êþ)/ëDœ +Ò‰!'ìþå_½°¾Ä# +Þ?[‚”;Óû&nö`^"YÁƒ4ß÷ï› ðìÀ†~ÿŽ�ü­e�ØëüGßw¦‚d— bðŸÊ?Wd ŒËS§ðŸ"º.»é4ÃÃ.@|vøsFõˆÿ.^€ºVÆ>ŽŠÿø;³‡U`^eã?>t裑׀ßÞRêJ63»–¼ã?P`³Êi*[©�ÿ7\Ú—¤ºlãNþûÁzeÑr7Îqjˆ]€™¡%v=£”«�àqî�Øûþl�² ìeu©ê¼Ê·s]77q˜ak‚Sw'°fü@àš‡Iº¸‚n*uVr +ÚPß%ÕÄ °ôŠú'nóÔ„À„IઅNyÿÏZ! @Úí{ S-ö_„ÔPð�ÇŠ�lñsrçºwÊö[.gÚ—ïݺ?%‘X ­å×T!?pF·Ÿ…©rWÐRùöK½-f‰m�¡�µ�>'ÁÀá~þ*³ÚÀ[û"9ç@׈¸ŸßßL$¿›®}aæ|´¿ïoš|5ßÔœägÖ¿?Î[%?|ý üý¡ZÿK~ œ¯·™eú øwq&?Ù>ôY.3Ä1©]®šüülyª;Ä)LON~ð3*С€T5ú^òýOþÍ'?ÓýÌk€üfG_e'Û”º¨€þË&b¡(¿|®‚ZÀŒ©:l–uø‡Œ!cQ°Åi÷“P0?ÀI7L–d»¹µ§•71Hìe¤L‰w?Cˆ–™‘/˵ˆõú*PÎÞoÍmaŠõºm AºÇï7áö°?´üC�8&ÑB‘„¢«wíPs˜.Çd¡s-¿Â¾¤ PiÍ�˜6æ½H¼_Rƒ¤Â_Ѐ4dme¯îWàÍ_óSVìÚBúåçI;»`�fŸÈ$¡H:f±Ö°@£gž€É.`¨d˜Éd NIþUlD +@B>ÃÓtžG@­Ðc c: Êtü©Cù~‰‚Ú³^…®üÃp,P·‡lv§#?ðæxô4PeÀÙ�½™ª8ºY.XbS ËM5��¹,4šðõ�…'MÿË `Z53úheJ~`0žóL({�Á¦¯Ð +0ùÇäÿCç¦L‘;Í¿‰ `¯<‘¨$˜aîlè/`³6€Ö ʨ4ƒHzã `ÄÌņ&H‡W¦…eo@{ êŒ:Z¥Ôè*Gÿ¾à™rC8€…JG€#Q~œ�lÞÂbgÙ¬ÆTG ØÀHFF©Ætd¥ó£¬‡Ï”r“g7¯)Îþ>$ù¤ð¶öÅZ¹‹œ|‹V5úÊíd¥`'ÎK=Ÿ“5’?ÅϽ0ru}1J.鈶¡"Ru¶  ]–S;!h~§8_¬Q`ø¨ýñS}lŸŠš¥j�ò¬2LœU†I¿úñ׫ý§%kA²²”•=[ÙÐÊž€/Yò’5€·ìjÉ ¶¬}eMª…’VµÊ�Z«Rpõ³Àm(†;²(ÜÅh¸¥èÂÏW�6Ü‘§à +K‹KR ®>–¸*(ãÆ…»n!R¸ûñÄU@ WäÜaip‰…«ßWe\1Eá&gƒ[”Üyœ¸¨áФW0n¡¢pÕ7ÁU(�+'©¸ÊÐખ‚;�îBbÜ9eá +ƇKHîø.pÕ´W\*¤âæwÁ]@wJ)ÜÉèp)¡WžîÂb¸"MÁO‡K‹(\ù\p+ +ã© +îpÜ*´âÊãA\Uíä!-K@Y² +ð%{ÀZ²¨-k@/Y Ж5[Ù ÊÊ^€¬ìheo€÷²¶¬¾Î£ù¬µFžU€É‹UHbj5f‚©à­¦*Š�žª%4l¨ +Ò5«q-hÂ.å3›�ÖO. Nâ*a&DK&TK ¥e‘S&ru;?Tªœl§!­i¿ŠkiIàÂÊ˦NS«5ë9„©$ì[�èæT!\‰Ð**ò(àç è�I’aæTáæœDäñÑÒ‹˜þ�-š]/ ôàþføP³ (óA�ÜÕâ%šˆWˆ‚§¡K=äB;Bm7qˆn”0ðÉÀ +kkV—o�Òå8xxJ€1m5j�3‹0ku%@ìºG¢§¹¥:’˜1|Ùs˘ª)YABì5YŠ,8Ñd³Xç~{W‘¹Õ��îlž;ÂnHæÒí0ÆÉIc«Wc7 jC9žÜÄæ¤]É`ó våv^l5P±.oø²’6>»cû¨Ô)’yÅ¢‘ß¼Á;Ê«f)ðeX<à{vøê¢àT>ô¨Ü¼2Äidé1oA”ÖÕÒ»]¡+]ì¿Ëî;ÂÁ‚¿’”…¯%=$l§c&�¹ªÞ«HÚB$Šr£Ö£é¦�(ñád3ŸÚ£„¥Ð:©Ê�›.¡ï~á÷çÎØƒyû´%Ðül‚ §6ßÞ-û$ëbô<#, T‡×eéÖ©oˆ6Ÿ'œøƒ9‹ÄŸ—RŽòzMƒT8ök¹›R{q:GÈÒòyeæŸfÈëÄm[À޾ÂD“¿-Ÿ�4pà³B{ä�|Þì˜Óè?WPg¶À¢ÛÑ9:‘Kãsbüoo‚S«e–'¦["0y©¨…ÒFÅ„H€F5ä˜âs¤¥qŒ3ªŠ¸û:IáŽ`»çB©´``ÒÖ4¼_ITtH˜&ÍG‰‚./qÝœ. —?‹Þ;û€37‘4qR¹\Ñë´üg´Dtq¼D¨ +=?e ‚®•Uƒè€~IÝ�ÄÁù⬜BpW±zfƒDXµýb6ÔÒK­tÜV±Žq•$ÀJS8Tõ¡œ –Nc³F¨½‚ P€‰„ét¢èA~ÉÓÐÑ1:ê¿«#M¥P:3Fìù¨ÿ;!ÐæP„t4è¡$³Š„6gÉkÚÃ@EÚžgªµUíPö�¥G²‡íl"¬šóÍö�ÃL‡›M¿;]äLcò\ó"_ +½%z1"�9¯5Kú“©8‰©P ¶§FÍ:³Äœdɸ¶¨%™(>/jF胄[‹ ri¤£ö2½u+pdšy8`­Ì ~yç" eÆ¡©1E7%¡Q§4‰Lc +Œíè‚ A¤6îéÚž,èÅ"$Ö¹Œà`²@�•A,>pä*কÁ°\‡¹«âo®Ê¿UòW| —Ò–ÿ¤oŸ¥ç×ò;ŽçDò;z®n>Åz=ZX7ö6¿‹¨C1?]-ÜD1/Æï*乡öi²îÈ×¢�Ü÷ ëÒVçz.Î*wi˜¤»Õ§ä^²#fšÏV{$MAâ#ŒSòóV›–Z—ãê® +º.”¹îÃ×ßf‹[f%v¡ò‡¶WfØæÔA°ÅCª(oþ²¢ó�•f+ÿ0‹:9ìZ2ñ·â'ñ‘Öê*Õ0½ÌKâ{c©rm\BKûZÆ%W�©¦71Q¨ÍKÇaƒI/ËxÔfûŠ�ãp"Á[×i2K¡� šào€;êd’J¬û/Ì8Ë-Sö�Ôñ0²ôé¡»U•‚º$ ME•âS–ÁÈÛô  �J!Ž`/å­ÀQ@BMZv“H‚±tø±1ATãdt§Ä] š58‰u`‰ÍôT“twFV‡Ú¥×I´öqèH´Y ²¡Æó ÁôH›hÒuÄDÒq™Ú…ôÕ�R=•à$l.;¶ƒ ¸’Ä$gVIÍÐ*lûùÍÁ›�Ô€!6{îAž67˜Ÿ.¤ï…¤ÆÓ$ej+l�*[ä;0(ë1¦;Yþ‡ÈWW�–³Ð‰€|"ËêzhXÆ%Xã2¦‚Œ¤L)¥”J eÔ[J)¥|iE.DyrünÒ„¹¢gÄ íØÖÞ;�æfDÎá`(GÞœc¸r’*s5ÇœotP² ÂɨP¢ÆE=rÖ�ѲgçC†Š°®]…V)jTtɾãcì{�dŠ áS¯o‹™ŠKKêÿrk‰tú²¡ÃGÐ!«]ÁÙ ¸;)��a*dô¨ÛÓBfM=‹†2Ý,…5"p’Zfm�™ˆ¡£HÞ•0iÜàùCÑ"FŽ(DµXZÄÎp aòç¥P±NƯO�qΞEC‰­ g·8æ#e•æjŽ¥í˜Ó»M;})jl$v†CÈ¿-„ˆrô*„h½ú_"XÔøq·8¨ÆÍ�>Œe�©Õî +Ks+âä¯Ë6ròt(Ñ0@r*K‚.Öä�HLÓ¦ÎÑ Š�à½>�©í@Ô„D«ò„ b.Öâ +à x’j¯>�”‡”_^],}Nºh©²·d.. 2Š“$srn6`�yIøB +?óÌsØT:†E¥F1hbR*@Á3«Ô¨§&&%8°®ŸU¥B=ñàPá3©RNIh8œe$8ty¬©&GäÀ($!Ñüò쀴9� A=»Ôjs�‰Õyƒh(µÄRKD3è×D+kJÉ iÉ€•æjžxÁFN¢¡@>h”…øúX¨G¥#†-nÄ!á $sø�ÆGJ‚°�‰i��µÄ[`&`´aò×åL"�=‹…-bäèùT4üb%ψ[ÚX“KW¡ , )iw…¥P{£{‚EŒ7c÷ì|ÐX�TÀd`IR…Ð-€(«ñãŽ/°Ìš8y÷ÌA$ìòÖbÄ÷j…ZpdRBE±ÐË"m/Ä4h1Û(§¨6"Mªx1lcçÉ(ÿóýyvßì¹�óçÙ¿ï{t¾ÜÏúå¼ÍÞ—÷�;–Óõ˜oœ�gÜ»îvݾýßë�]œßìõâïsóͼoÏ÷Ö{�½ç%šùõ[gìå½ö¿éÌùýœÿÞÔ¯÷™cÿûþxÿ¬ó~}þ›ÿ÷e⣙—×îûºYÿ£³Ä÷ͦ¹»ÇÝýMÜ=ݦç¸wΛ÷ýî÷k×gÿ9Ö[wì3æ~µ¿¼Ù�¸ûΙnw³Æ/vÝO6E6•æjþr¼?v;÷w»fiG³ß±ç_ó÷ïÞ?“kž�i˜küÝýuw{ÎûÍ.çnçzÿžóÿ™éóήvw>¦ùßÿ~÷뺞ù÷(Š.ÓEÓ6EW.ä»*—É%ªlÓtEѵ]Ñ´MYVÉ.Õ”e[UUUTUQvïMEµ®«Š²«Š²iš¶k2™\Ñ¥Š²iº"!!µ-›dWeÛ¶Ê$•Šr!ßUMÙeÛ.St]•íóù\ÕtU*­ž{ï]‘��”Ê¥U¶éš®ì‰dªèÊ*YUUQ]¶mÊBAA­*Ê®)º¢éªlŸÏ'ªlU”Uª(›¦íª¢,ŠN¥i«¢¬šL&Q”]•m2™ÄYMñ±Æ9ûÏ1Öoþ:ãíba¼¦]î½÷ï÷Ýãî·ë·þ^¿[ûß_ÜyÇØsŒß×Õú»ÛçüºzëÜ]fÏ[çŸ�ÎŽùïúý®v7ÿ8»_÷ßuÖÿhæ¥]„ø¨3ªV†fà ID"‰‰c €½~@�G‘P ‹†‚ÑX0ÇQ0€ ƒBa ³�oP‰lì²iÔ¯ïÄ[”ÒEÂ-*kÊæ&ĸ5Õ2û¡˜)9EĪã¯fáê~�JJ1Vt·!/"—º˜‘�TJǬ(§”>LJ*—3«5µËQþ¼²:BÑ6Èβ!l55ÕÈé¸ƒÕæ5u‹ØÊ*ßbqE)áÔÑ +‡+?¨Ëvô‰UqûjÅü_¶F\e<ÈB¾Å 7ª„n­ ägf}u1Ò V¸¤åÇ€4n»ùJ‹Ð¥Ð¹N_åÚÈb‘BæÄ5é‹Úr¶"›öï}Ž =š*x9šÉ¶7×\þr ‘-Uã~=ò¼-\¸Å˜¸=~ᶤ[%Oå�¢0’%´­Ÿ\&3M‰Ù—ÉÄlýõVŒo™”m\zMJÒÖ¹v•51šõ+.ò 70€ðnvl)¤¾XŠ0Ÿ[ù`ÁÑϱ²Èðìª_‚±»oJÓLýõRò]¢±)aS‰yíÖñ¯°(,,XˆK9xÕU»Ÿ)‘¬$‚:e_+Ñú)óæzòÜ%XžÄs@ ¸¾¥Lÿ2ù€tuíÖo®¸˜hú¦Në{8ß¿EN'Š3-kÄ +¤S\NuûR»áEÀ`»íyÌ‚ÈY)¦½¼(q¡+`¬W\±©W�[óúòÀ¾– §ä�J8ކ}×ÓëM�ÍT2˜¬6ˆ{+b±b^²ù¬DÕU!!öãäŽbßÂüšôM¿µE#ƒÝ¿ +#Ö)ßc¥ÎÓ7 �’Ÿê&² Ä¡9xØÉ6öÄl›Òñ/‘h=úm}ù¢ ›T(Ž»ïqB“²’oš)¨{sC– ÁJ+� œ"ÿ!R‚åÑP"Ñ[PiÄjÔ˜ìAUP“œ^Å�™›Þ)‡ú(ÿ¦ë¡Ú•δ Àó½~�r%$ ”OÄR`t¾ë‚f´PÈ?ÅñQäٵx§róŠî‰ä2¶·èMI\:J@Í…ÿãšÔEf&"R:Ý%}kJ,/u÷ubE¹ŒÞd  uîrt> ôÕq¿qf' /ß¾g -ÌQfHQ £ïôôÙÀ�h7PÔnÙ^UöÍ,Â>Y?ÿeB—bš`üWì°•xËO¸ �u¯<Å¿sO9~ëâÄ÷$[qX^ÓL©¡oezMz–¶û £(‰ÍÏŒ(І€€=ÊT!Y‹2Gñ}ަ?KN^T㕳,¾¡€R“ÏÁW�§âøv2ͽk9ƒß —fÈ+àÖol³¨Lrn�5¨¤™{©.ù�°Žœ¥˜x™QnàÊ‚„Ã;ñ³0IHÀ‰á‘l”%/RYyžÖ†¼^à xšÉ¢ß¿?_7ff53ý} Êë8ÆÆM*áé¾Ëü †‹ò]a£È÷iç5ÿð1Ö¼äcef‘øäEñ•„:ÆÏjº_Éâ-Ëæò^ìxÅÊ¾Þ +Ï¥ME0¸™¿Ö–7JeæÍ£bvYÉQWm—*,“^¢�½Â¹“«¼É€Ÿ iöƒ€à¨DB×X �ŽÆ\Ïf¡÷’Y WQ*ÀE�ô…“ðÁ`2À`ÃÈTxR[ºt?³¿‘™“hòÉuqéÔ‘GÍ…‘ÐÅ´‰Ó:ÉÍd¢Õ¨¸IÉ}â´� _M3|¢"hO‚rä, >ó©³KIü8Φ™/O:£uçf|QŸ½/ɾw �GÆ@^^߯z%i“aY;¢ qG¨„ +†Ë$øAU™p:�…£á21Ü)ßYr|%vÌ=DV2]-4Ó°V·)Xɧ| Ѝ‡Ó$‡ pErüUþ{ÕLªé&"© ”Ñ”7¤ù�X²k:4 ¸×no °ùÞSî×w,î¼Ç”,\?Á¡cÍ;Êxtc˜ä–åâ±C²Ö|lÂÈt­£tC­}�R\jXw[°+?¥cŠW@§,áÈÉPk—¯pޞߦJí dâû$¥ouŒ(MiìŸ=e÷Pù˜Ùž2•·iÏsîÍÏz¯ñ.`oØÚìLõ#ä\<€:æ¹É9õT!¨ôSùUí!TÞ_ޱspä�ŒP8®¨/¡˜d­Z+³¯¢A“zuuŸÆseÁQ.`­ž¢d£ªë$a\/f;Y¸†s®ÛYWÀl–(£’GVjfã’ÌÔ³ê9þÚè4ËfogˆßnŒ7éyÍà*"I%wØà™G¼Ú8�þA`˜»°”i9m¿äÌñœ:z¡L¤ÎྒྷպlÙJÍ ö}6Ãor´ ƒËÈ7ÝøáIQ´ñs(0 Û&0—J9ÜÀµ»Y Ï[͆ߠ|Æ›M÷Ô:~zµ-…§†Õën!·‘Â=ün•uOHùš]`dX¨Òª™_Aç"(æˆdY3¶ö�Àÿ Ró/°mƒCAB~Å“€#PÓO�¼¼Ö�Ú¿DÈzÀxLö&Û©g>o¢Ý]U÷L¬ ¹VzâÞ#¹}Œ`q +“«—×þ"ÐÊÀÄ¢Þ_)\'Ù;3}�« +m0‹ ) üh>ñ± ®Ï�42)Ê�å¯qp) rÙDÎÍyfUê}÷�ý寢¥ôò3ƒ:¢)á8}Žî8X:Å +?{iñ½½-5Z�¶”æE¸cÇHÕBOö“!]4ì5¿@ˆÁç†þ > V–÷uo#™BNi‹47yafã鈯bfrünj»U9á +aòå�6ØÖ_¾u¦ÙÆ#ÈþÌž šÝÜ´öõ¶é×…\OgybVsà]€ºŽBV ÔuËéÀ�9�4Å{…éR[ëŒLg9p_á_Ó¬'ÖÁ‚r 1¹¹=Ïœ`Çùü[ràS΢ür:È�PÅ�ZbŒÂí’I·Õf�щS´�ÆWÅ�IwÆ3‚$œ+ 8å¾*è†ËhˆuG¬$J` uZäR± =lUŽb<¾ƒ Aj©ix"®ë N×™s¥Y`‹6î|CÂgÌŒÀ),´èú"oˆö+Ïvñ#!!”5[ˆF³@C®>$ö] Ъf�æœy%“¬qHxQ}°šn®úf�%~_Ù¦2#Pè¬ Û(¦ÎLQ3‡Ê +%*²É�Op±ó÷3ÈfrGM}ñA÷šò¿woF ÉúÍ«üOj… ûûGß.º ¿D«nYÁ3¹`,��ðA³´ð#r'ožx¬< r-/�c))�í%Ÿ7#ðôÕ4ë_¦6‚$fòø;ò�ï¼ô�(7J‚ƒþí¦ŒÁ+¿ËAÐß2Ž®Âq|ƒ`1Ÿ†3â¬j‹.6NxNUQLëkH\’$OK·p ØìŒ@þ€¬�`5§]�A-]qY©^Á0Éh®ÅÑ x‰ (oÙ,¡Å 3cd-hø^Ý”ËèL5 $—Áˆªî®÷ƒ)2Þ¶D:ýÀâ|ÅtI“ºûžSûgóô_K©;­ï°ë¢pï5+ê¢ÂDØä…J�Wj7¼¤"É�=2„£_È&OÙD|Ñ6D’M¬¯J©�Ž¿´� æã´¥ ÅUA#ð¼tÔ2йc¥¶ö\.5%-ÓcLbƹΙGU*¢ß ãÁ”x™¢L¹¢ÙܺÑà¿V¥fN„…CÂÞ�¶ØZÄ5Xñ%”cmG’ÑdÍjwT"wÑÔ³»Íˆ÷³Q}ÃÍÿ6Óf6)£½d«+$åuÐÞ-Ä“Òßg«è“Eöîœ�Zh�CR@ZÝÿüCÐrà_üü‚Ý×>h´‹X0e§@k؇¹Žv3 ÔJ‚ ‡éì\¦ƒ¾²Át{eê†N)¥”’OO'°è&¡¥•]�ù8Óꌒó[2¥6ª$2Fȸa2QldéCÄd‰&)í9PG˜jDNN5ydÇÉ•«ì +¹f÷c·ëÁ¢£c:�dØeR9€\©b:ÂD/Žèv¤ +“$YɈdˆR9€¬x©±TØ�¦ô`A¤Š ¨€:8bá€*À°0a�'?j¼@O¸"Š,8á�@eˆ(@rˆB X€‚Îv˜âß O´PE@7I,Ð#x¡Š �F<Ù@ „ðD®P@MŠˆ” 0Qƒ"H! Sd!€eõĈÙàA¤É• +„à‰+X–åà &Ìð˲~ðñ‚6<ñƒe ‰Äá !,KɪˆÂ,ëK¬ „e¡DVx¡…e €ªPŒe±Ð*äЖ…#PêbY-ÅGa/’pÀ²,FìÀ +&0ÀŲ†(B–5âÀÞ‰)-1øÿ?Czà„+þ•0Å…eÝÜ00üª´ôðÄÿ¿`0‡*@`$€=Èò¨1Ãÿg¡ác -8ñ�ˆTá³ÁÈ@HñÿQÀ²z@¢…ÃFþÿ£X–µC,¼:ÐÑÇ ÿ�–• +o ,àˆeY5Cøwbˆ,ÄðÿPØÁ²Z4qÅ×�lùÿϱ,ˇ+ox8ˆ@dáÿ¡ØÁ²NP¼@À‹GÀ þ×��‚ÿO,‹ˆ~ øX,Ððÿ°,ËÅþá èøÿ,.RXÁ„`ðÿD°€ˆÁA&Sü?Ëò/<7Vÿ?‡ìÐ+Þ`…Å +€èÁÓ€2\\öÿY„ +|°ü.ð^ aÑàÿ?´à#„ÿk8 –( ïH‡š2d H.�bŠ2ܰ3Þ zŠG‹)²8à t2D^;~p¿áf‡üÝ�§ÂæÆ‚AÅÿ¿7 0ÒÄÎ ,Ë"Šÿÿ#ø`Y8øÿÿ¬ ÿÿq )@þÿu~4uøÿ1ñ7vüÿ7Áþ? Aùÿ?ÒÃþ ;ùÿ—aQáÿo�ãÿ¯˜��%óÿYbX%øÿ@Šÿ¿±”øÿ)XCø'D\ñXSþß–ÿ£E–4°XâÿS`õàÿs€Š8àôÿ<ÀÀÿ÷$áÿa Š5äàÊÿ7ÀšÁÿ›,.ü?ø0Ìø8ùÿ$Âÿ×X€åCþéÀƒEú0X¨ÿwÂ2òÿ8°ðÿLX$ø X2ø+þ‰…ÿâ…ÿ_¡jðàP RTÀz‹ÿÿ!þÿU@üÿñÃÿ¿þÿ—Ìáÿ©¬áÿ)ð…ÿ�þŸFøÿ&lðÿVRðŸÅ¥ÊA,pi ¹„@%.\üÿ +‘\\¸¸pá‘F ‘è%*Á´€±,+D�F£–Q(jq3�,Ë�D ÐÔBµ¸€@/ Ñh +‘B.!ÐH$r…@ —QH$�@#¨…‚ �J/¡� Dµ�F-Z´½�H¡Ðˆ"^Œ@¤ �B ‘("‘F¢’ ŒDµ�H$—Ñhô2j!�JD”H$ˆDráÂÅ‹H$‰ZH-Z´µ�DDñâÿA ˜Q ÔB²,+&&Friq¹´´È¼„B#D�,˵�^H¡PȲ,L ˜0¤ij!•ˆ(�ZH£) +‘B¡h4j!‰B!—Ñh4j!…B£C8©ÅL(D*�F¡˜˜Ð(&&¦Å"¹ŒF#’(ä"ª1„‡B#‘HDúz»ÜÛŸÕÅ·«v{zìz+WU¿ºµµWYYY™j·²¶êñlÊZSÔ»DEEÍÖôÛ…ž—�5fzúé9Õ�NÓ«)*êµ+õºÆ×85•5F½¦MýøÔ�™ª'Íz6μìäÎlœ�óÒÔÆI“¹˜ŸU6Î˯=¾¸?«ãÜÆ¹«]•>»Z—Õîj×eÉ•þbƒÅe 63¥TœTîÄ Áy±.£‚BÔCJ“šÍ§Bóc—p¢c—HLŒöÄèD1™v¨Y!9S`pJŸû¡ÄN +Ù“9*OV˜¤^$¹ÙI­ò¤T¨W”e”&E˜Žär‡È’%²E"ÄF4lnbII1•>>rŠ$롃F�'žžS2PN¥›2ã†Gו*bŽÄ9!6fnÁÃsêÉ©ÙI­+NP;R¬ä˜acå„yCsA ©&<7<§ÒÇ&Ç +“Ôá1kÚÓ c;©œœ9R/Bb�˜j`IH£ç”"B£‰Œ0<ŽLŽSéƒå–#L·ÄÊ‘FDSªL îØA©z‰�rbKø¸R¤R�\;)~B©ƆŽHÀüèÒÆ‹†£¢!ñ¤T×* æÔ�°äåH‘Qµ"¤ÄÀ�i’„‘Ò§‡!'œ$6„ Q‚åG§$Iœ˜tŽ\�,}zbˆ4AÝôøÓ Ï61Y‚„ÍÌ +Æ&IMJˆÔSO* +Ï鉌*Š)‰$Bl̬TN`¤T¥Ï0`zø1ו¢"£ŠbzÂäjä��,ù"fFGJ‡!# Ê)ç²"ã†Ä‰“ )¨e8(™·cÇ 7 ¹†äÉ +£qKŸ�:�"N \>t� i;bR;¬ˆË53®Ìè`9vf°,áÃÙôÇÅ_†ÄhÉY‚cŠ)HŽŠÇwœÌ•-}x’øáÃãf + N*W#O£&;Ìæ‰ �¢D•"¸s9;7ÃÇí`Kcˆ‰%(ÕŽ'KP*Irˆl•"7šüH9™’95š,+}”Œ–ȨÚK󜒈áR…æEŽ•’b%g'…;‡£êuq‚òAä%ÈÍ#HF +¥‘6—ʆÍ͈JFЈ‘+8¤ŽQ ”“RΉ†”��”éÉŽLªôi;vdTm“sã"¥I�“Ž£ª2â9ÂÄRA ÜxéF Ž›%8L¼ôY‘^ôܬ`¨0iRSDœ(&Õh ™TÓqñ0éÈ"ãI%ʤ´•”J‰œ!9²¡)Õ�éuCÊ�¾!eÊLé£W& §Ç�$nÌ@UnÎ{–¤°ˆ‹Jæ*¢¶�#rNF�8R“Zñì¬l¨®\*7ÈsÃsâ?”à¬T«+[ú4é�’©L¦$67ª!A`¨VF ˨QÃL1hÂ9´†¡tzH©¡"EÆ�(E”jØ‘)•5JOL=jD!©¸©¹aå +ŽjJF N“%Alf‚`qb3Sú(™rj8I”è`7ò�ž©¡ƒ™zŒì°’8XÍÍ#Jç† eÉѹ()˜T;≦�ÔÍ ÛršYbŠ’6Ñ@AÊ”¢Rä”™VfÖF�& Onv¤JÞ³$¥²™’HžÜìHÕHRRÍ\Ùñq¥Š¬j,A+©'S‹Í’¦±rcÓx,1cgIF«¨°![D†L\IBò~Ȱ23äÂÉ8ö…ž©¸®¼¼¨Ü­Û©|½©|É6õƒRMuMåmÚRWõ\5ó2•/MçLÅTGn§Ûú3gÅLEÍÔceìžœ©§³™ÊŠ-SÙÛu™Ú¼]„Ý4�e*²‹%ó]Ž©�sU™zo³Æ®ÆÔÖ{1fãŘŠjîiª§êm'²EU½´S›¦6KÖ¸Qó.ßT÷¦Ì­ •s³1™QQùš%j·‹5µõ”�j¦ö1ݽ\S·�Û•S1UÄ×ijª¦~zD­šŠ‰Šw‹Š§xاˆªx¨Ã† ñOç°!ÞaÞbf¦ªz;U×mÇmwÛµš=Ýñ£ã­n;Å]m×®Û¹¶mÜ­Û9z;o~u[ÖÜš¹±·ÛE<†§xÚ£¨ÖN³ÝG§µÖŽù±Ö²µËÖ.S›öôåÝÝßñÝßÝÞµ;Ç»»ÄK¼>f§ì”Ù%6;Ì»Õú;v—»»·»»»;º»·;;;»{»3v�]cÇŽ²[!;½�Ýêƒbg__Wÿ¬<ÝÕ]]}}×}ýZÿô°ßù9sæÞÞ�ænníöîqw÷æ~~μ½»[›»guýA]³nÖ¬»»QÝœ™�?«ë¦ºŒ¨FfæfeÎäEVÅde^æd¾ù”Yu�‘Ù=¹'}+cFßÞ^^^^ÞmÞÝÝÝÄÝOcfäõÝåÝÝ]]]]�Ý‹w{{××3f™}±c¾Ž�™ùø¸­Ú.¶]E\EÜýèàânnbnnî§']Õ[[?:Íö³òÃCÎVý ØýbV]µ†¨®Ê­ªª›ª}骢¦"b╪”"*"*"bSÕk›*6½š^MQ/Tä‹Q55•[U³µ>U]5JOO/–M?=‰™Š‹È~yæ6&g^›š¼¨™¸ùÑILdΞN–����œž¨HÃT‘i"k"#æ…˜‰|u~t/NäÄuÍÔü NóÒtG–·ÈIÓøéiÈÈIÃI£Í?«ìQo«ýYù]yµ>–�ÈÌÌÌ˫̬¼Ì×2w3;tع™u–—““‘/dddddVÝcÖÉãÆÚ˜1ãcT/_/ßqÒx¯ïúò²^{Zƽ|yJ>ÆTdÌOµ5�ïvO×ÙÅÉœ¹êz6ÖÖ/ÃëÁ¾4;ù2[sºòÅíƒòSÆØÝyžkCïÜãnÍW«noóîÕÚ–;½¦Ú}Íû°ùÒñØ¥²«{seÞÙ¸¹6ÔÔåf=–~ζ³�'2¿¶¾×Š­1g® ·•U“5¼p[•™w;oÙú]ÓݽrÛžãºg:SmËÚúò1ãÞ5ëNg,�±\V†‰ÇÌ<}¯i+뺶«qçím³¾_ãeåÆÞ›¨Ùjcîåváù!2¶œËL÷ÚòJÛ)»šuÒˆî1æfÇÛkØÚ¢7uänÌ={ûÒìt†‰~Ýx™»¨�Ë’›fªr#³m‹*JWfdœ¾¸Î:Où¸Ù²Äî¼fÌ»|ecû%óÖ²�;�yçö)ã%3ßmÍšŠxë~]7½»Ç¦Ü¹Í­S{[¤Š×‰M»%üz;�uÒˆØ=Óѽs±µ¯/wöœî„x¤t¤$äÔÌ+¤±TæÝk{­Çï6óÔ ;Yî±Ë¤¹fçÔEï«5wgnnç½ •Fä'¼kÝ{ìhDš˜í˜»òRiDΞطìòm§ÓÃì‡BÆØyûú:ËlŽØþÑ9æ{qv²lW¼Xs+çåë}Þ³J–êl/=¿ÖíÓ³BacWn™9¨”W&B©š #(<‡#R¹X”aØ]D8qñ<7æƒ0z- S±,çä÷ʦÇõo{í¦“ ˆªZ ­YÀÜ5Mû'ˆguÏ‹ò9ª>rT ë×4î(mפ¡]-Ø4?T¯4Åb:¦Œàr +Ê®£ñ”V.9°¿ÜàDç|@ò¡‰›Oº f„Òè#±¦<·ê sF·¡ƒo•ªOÜòk6ÈUJëS{Ï7{Be,›ïó>d ‚ú/Àn�b]¥'›”ù†–`%d •v#ð ®W§BŠuð@r¢ms•™l©Óu™ITJTEàáùIM2|® ´3¬±¹žBRfa¨’å�ý#e f ç°fz;еé\åø™£Tš£¤vµx˜­Lk�Ææjè«mR– I¢‘4ÆeçU¸•TP¤ñƈáŒ7�è»i¬ùÄ)u �j{H�Ž0)B%«ÜÍÊðc0Ê^€’1bFp³Me�‚gp ÛŸF±(¢ýñç…é”âB£XzÎcHR“°k«k’ŸÌÔ`hKN>œÂʩ׀˜âß(–`‘G,…pæJ…q£Xey«áHt\{¨¾Q¬ó2À�b¹0|8oØÖ frµR�Ó7ŠERh6ŠåPöpJ£ˆh‹î:¸¾6êµ’aV�biïçÄ¡k �bU¬­‡Ã9Ý0h‹æµf—Qâ"å~ÚÕ(– Eñf²5Še“Š‹TxöùûØ�'ÛŒbUÑTF±ê€¨‡Ã +M›„‹Q¬½Q5xÅbùvËÉØ‹b‰h.Yù,åÅÊ93a‡d¬ƒoÉ +ôpl/ì¯X© ‚*r¼(ðãE±Ê‰2µfFÔèûwçòs"(:T‘H�|}Q¬ªF‡$¦‘rQ,š·fhØÃ[ó„n"bcË,+<œç‘w>,3£X^\]êh…Œbµè²^š\XþÅ:ȇNr×¢|Å…~Eu)Åú«å'|sÖâ"í�{fk3q�,éÍŠ÷H¤�ëòNèÆPÄr‡ÓÝ„y|¢­(– +X‰,U•�C«(– ‰È±¸ø–êâqDÒŠbɲ¿fLBN‚ÇQaÿ`ŒDø";ñÇÀau_Q,X4âåB^t1å·'k—g\‰ðÃ7H*Š•ÐŠS„±´…ÙÇñÅ|4„ll` Gb ó…Àž²Â¢XŽíü³ÅzÏ—«nò°¨6`$´(V4P’ÉÃæ @³ e€¢èòa¶‡`éžÝiôᜤ�wúL�hÝ]®p3 zJlå?޾°iÊï…˜Õ<�bÝ0GÏz X18?4"Ã&½GsÆUâ9hr ¸(Úèߡ엀6t1̉¥Ÿ4ksZFÎ4o±$?GÆ'³­DnÓe¯ ‘ úàvžà¸£Q)œD,ËÄÑ’èù%k®ˆ9ýÝ�owµ½ ë'ƒ±%S�9¨RÊ¢ähñ¬S’JF>“(K@,«G¥+bl©ÎÞ#È·Oø§HP¢§<úV Y‚î‚ß7º®ßJŸIó%–cÆÝÓŒ3>Ä:VoW%%u¼A¤5�‘vµ:waÝ :ñh¤f‰Å;á°> ¶@é]YeEK cóÚUyP«qÒ³TGë°<Ž1ÿ ½»9¥ØUGiÿZfÂÝk)ó(>ñ.¯¥j¥?;Æ^K‰H){R&‡=gúvwˆPÇ� ˜†Z|�qü¥# _:‡2‡40�‹ºÕ´š‡�J¬»UÈŒ@‰%Zµ1MUè^ó÷ÔQZ$†öI,ôbh�.å“XG]Gnt?‰ÕöxŒaObe’÷`iqžÄº‚ò82-‰LW¼âÖèz‹T¡ÔòýžÄºûÛ`ó$V682M„'±&ÐPƒæxËÁûu3-<‰•Ó ß{+¥÷£Ôg‹žÄº8 � ÂZó¤H[8Ob‰ÒÎùÆIöÛãBçÿgqL…鯰Ÿ‚ML½3Oby’!WÚâ’"æü~ÛOå|zD„©Ï\õ$ÖNE™2!žÄZˆÇ9D<‰EŠ �W¤0Bô.žÄZ˜5Ó2k»ì“Xµ×[*ûDB[sizÖêâo„TB´ObU"p7 îÔQ†hns´x¡Ä"@ë8ìPbæ�¨v,T’�ý²œ’—¿='IÕ¯ð_ËPb�ú‹QÝ+@ûi4Kþ +J¬ YÓ¡'�Ú0ú'±œÝÇÁC~ØBÔ%�N]€�Ùx¡ö� p6«øC@7½q‘-çð¤v=·‘bëLO¯ �§ÎR1gå¿1{à‡Ð Ò‹¦{¹¦—ç.ÌCÊðP´Žæ¸žF)Ò]O(ñ;�R¯¯‚péÅÍ!2qGᦈq,Òõ O1 /|-ÒQ‹É;¢&Ÿ'±6ʦÜéŠ>e0‘enöÀEõŠê}•HyPbµnÕ4f£¦@‰5}ô_Él5µK¶µ?*AºLä¢Â© JzµÙJ‹¹6’ Äj­öŒ8¹ì‚+ ‹n Pb%Žäî劲‰�Obm…ƈV'‘C“wPúÇáÿ$–Œ}¹mžFlS«Mõ!Æ ñOb�IÞû/|+ÌY�u5HŸÄò–!{”¦éƒkpÂNþBºÑJ,Z`–f� (±$!„@á ÄZ;2`<Å 9d”XW“ú<ò²´Ô¨•Jß»³ôloeAÀÆÅA ”Xý5i¿µ,RF—C„oݳAꂉÁ ++a°K-X‰´SOg Q·I +”Xi-3õ¡ÄŠbሬ8Œ“oQÔö4†õ(”X9׫ “a:¡Äê~pJ,DeölfB‰ey¢Äˆ«II ƒ Ù2 +J¬ Ò1—>‰µæCF…+ã  +_ãKbÕÅKò§ÔÁè�óaåÞª•‰;skr•Wdñ=°`%èRB‰¥‡ò&ü%Öºc¦3·�¡Ä¢íeiÓñJ¬Ÿ‰½¤ %– _[Y)òµyLF–xRº&Ll½µ›ˆ*×%ÐD޲ÐL\Ñ@‰5WÅœM4(±vŠ#ñ„@d*j@‰µYÏJd8ö²ž›Å�¦ùÒPgLê–"  ÄJ8¿Ý2EMFAQH V=p?‰53ƒšR¼4,î† hs÷$–ó!ÁzÆ yecýŽ�a�šÇð$ttÅ ŸLXöŸBÀF“Ò=”|D.JˆŠy¿ËÂßÇ“õ¶àý>S¿KiÚÓà¢NbaúÖ»å^UÊñ>Sä¸ë)DÕ]ýœª¼n 8œªm x ¢þÆLÖŠBJ¼)o²¤ +[wf +ýœQ†L·e©'t¦u(1GÎíaüª¨Ö¡-rìÖv{ŸÄŠdÒ-6vûP¯¸>Ÿ¿‹`ÊlnŠã|›ÿ�ßX�XºÈ'W�”^ýfñúÖVfÒoæ¶ñØð÷Íj&Éœ¹uº7+!§4ôM) x§oì�ì›ÄÃÍnVÒ2 +õ›Þp4»Ý]pè‰MÉ7¯ƒ á¡3¡7ë°;}"vu¿ò¦”!£©€Z!f^ˆ_ÈfCžÛEL¬)ó‰GŸL5SÝôXØ; óKŸ¿!C¹9ÄU+`ú�äæÉEúOïúkÕ™uÛ|\ÓÐ1ámDL[·%y•¸@”ÌÜ_„›43NcE¥oó.�Ð>o%†Í�kó’Жßh¶Ire“�(2!‹4„¹ló7–"Æô“mV:ï�j*3XM¬éªÍRÝ (ôO6¼Ú³Œ#RÖašQé€ +Ö”ïÎNòl @hÕÏ�ù OlÊâ¦' +lA^ØU‰àb•±²>έÍÝÃä1­¯ö3Y"4î:×éÄ>k|�E//ÎSfL鸣ö+z±&ü3TQ%ÄæN¬;°§Œ°èA:<—Fþ_ÂCÑ@2T^ ›«)mŽÄ@t5¥égN`á«ù$q›çtVM +É催Z5�ù˜ŽÀ¾meöR�mï©غbÞ+�öQßóˆ ȼÝ�éâ¨ÃbÖ׋ĻQ“Ä@Ü©BM|+¼TuûŸæ…1¥ÇÃÖišpfiwÙ4}´óK¨Cüþ†WFoäN³¼7x%‚>ͺ]šÕˆÁg®+ͯÔ4ÙHÅ÷L_-Ii’6ç˜D±NM<�t…ÆWá0šTÄH7Q,gŠæZH� +¤VÑdÉT5 /)š7:Îåi¬h~s‚.€†¦g“ ø×.Ô­‚§I¢éÉÖyA Õ/Ò·žÒŒ¦:\bеºìs}B¢I¥c¸ +„®…€![ã Æ˜�ö4ÖíÛ­ÙP9ΰ*ƒZ:–ºŠp IŸB¹nÞ +O%‘Ø�f#CÑ—ªï–§BgJÇãvZ¡øoÙuæ äL£Lgʭȯ~|Ed†ÀuÒV�¹3ÅžûÉ™ÌækÅ’—œYa¹}˜ÛžšîæÞLò–cEõ»|oS�q0ç»b�¬‚«á_¹DÎÄè5¸†¢öÿ¬`ag[zŠÒ—þÄÁi¹¶rÍDS¯X#hˆ�"%ÅS¸c)xó—=ƒ�㣠ƒH&6.Öξãü{Høeý0œÃVÏÙäCv¾x\ +‘ÁníÅ}–fÊ÷­´@)öiË^ ¹cÕZŠUÚëÃNÔµòiZ ‚쌕R@‰k6"@C#%ß3 ÍóKæ,vo´•�U!”`¸P]Y(;¡MO‹I!0àäj±’…ŽÂÖŠ”5Ê¢]ô;zæuÑ1VËöeÎc�È +"J +¸¶¾í|Ê201=Œ�,´[êÙ6à Ÿx Âҽψi%eÊþü)ï^%Ù—•N Ü°ù…Ô?ÚªÍ×1qXÞ©È9¶Oy/~8S±Æ‚ͯj?îç×oÝñ3d‘˜);SSlç¾/Pe€I�ZpïÆà(](ÂjÑ„ì$eQY¹ hs±h"¤lëÕ¡&ç\J;ÇMˆÛg(”ºXl:NÆî»±ypØ`Î@ãëï ´íÍû¯ŒÈ›ñü†ÌÂî\ÐRùµ”uj—‹pÀb›]ã'^Í FÊp1}an?{ß<¶ûY™˜dE}±ÉžYûbQ¥—åì:äx/ˆ‡�×ò$Y@ÿÏZ¬Ð\Èù| .È~qˆ×áN»>ê}õƒæ´Ý‹#iЋjØÃ!î4¯¿Pï/n‰µëêR8¶ÚΨ¡U£¨µ#Kí‚ë¦nD^W�(H1c%ÅZQìš·­)ø«Ì gzG„p_=î8&_9´�É(¢vhÒ¨šφ±d’c`*^81ËÈÝ6CíA‚ÿÜAq¢Â€ä„��Ûk‹T¸£g;ïÀ0åÕ]ùKi¬k›ZèS 4*bmç2®Ð'|V[9¼­4Â…÷ÏwÙD&¶:#,Ôd\$Òc± z{È»PôÛáÅbyåm BO‹E‘Ñt#k'W|ÍÕÚ)­WÃ?¸'œÈ�XWF¬å8Vž�%1!ŸØGF¢º>`ÁW˜�pü,\èƒ3¹Ý7ëHë3V%¬ÍЖФ¥¢M¹«¾žŸðß~Íìê(¸ä8\tt ør3´„oJååÙúÚK"Ì5þ–tæÿwÚTìt{ÇÂKT,Rw§•ôŠ«&ùC››Þl-ky‰öª¾C9d‰UU.Y¬»0ÆâQ~/?,9Fµˆ¢¿— †¶×ýö¤iyµ:þ+9m–ÂûšêÐ y™b=Q�c˜ +…@ç(4¤G‹~ð½™Æ¢éûhô‰¥deÁÝ1ÖôÝÓù†—δrqʨÆ=監å¸àgq'äw^²@¾zvY¢>7Î?vÎ^`*¬ÑÝÇ\W½þçíV\_=CTNÉXwîSÃ[6`L/;BO~ûG� w‹×°aøJ0ƒ0**— µA�‘EúÚ³V‡'fugxN‚Dì ˆn+]�ÚØ­NeÏÖ{¶ ÕýX;bë‹s¤’£}´½íø…uzâëÞƒ'¸@È�ÒFy‹êIö·î}!ô·¦Œ÷ªœyya<W^A�Ÿó)´¼"WÉ`ކQ§�Èæ,Òã¤W±ÉÚD,½² 0) »I@^9Š!pÙSÇ]Å?·ÕŸ&õ«Ç¦�Ÿ‡=,ÌFÝEɳ:‹Áãj�ÚµÔú®šäç±Ùø®ê¿÷cŸ¯éÑ®haB°º«ª‡vu¹Æ*·wê*E–¬[•.¡«˜ú—~jÇÊ Ç£µte,zf³!®ÂvúÈX+\‰•Úpš©W~;�¾'x”ª ¿ª$®´Ì‘µ8}Û}S;—!× ŽaQ*ÅÂI[A˜AYmEÈ©°DÃú„J¨9&G5V­uÛÏ­hÓ^v‹©,ÍNÒVÆæœÚ "º…°ÆB¼[É#Äy R‰óƒ]Õ|ãë¾oóÕ”»€Àk,Ü·Õ`¨tcÓvf+¦ÀƒôM ³ZµN¿kÇiõólŸÈZ<ÓªÞS%›fQørêÛ½Z—6!lH£°�HN\¦R—VW`Ó¾<+à˜j—åKˆ `(Zý�œ³¯ˆRaíÒŽJ­$åʯe·¤"ná2æò5-Î 4[˜ZMÚ‘žÖ²“••@¥­Š¬’ÖˆiÔjUVãžWrX‘Uí›Àö1îÆÚSp^‰ÔÚžã½#gõO6O›7Ö¥õ�PíN·…d/d.ø‰¹ƒÓiˆÃ7ÖT/,Ƥhhß‘¼oáž±½ÊÐ`gíM* +ô,’)VTÀ9_W™i5;ŠÆ†¨’¶m9A߯Iw�·Omp,eùr`{´§6¥_¬:º#­RåßW.<ýt6N+7"Yµ¿aÈ‹47øûmâ”ûlù“ïãÉý‰¥ú ÎBâOÒRŒgIMpVÙÇÒ?wŽÊh €m[hç5§TõïZÍ�žÆ G[�ñ±ui§bLâd‹«!=9–ëÆ2`kcE7áˆp+Còl‡+¯o¤“lƒº*í(òÜBݹ*p ãÈhPmdé^ÀÙÔòû?ù|Q3νñ—¬J¡"ÀT~“ߨÎ èO¨Œ¢Ñ+_üöÿT˜S™2’‚zF.ÅÊŽcTE¨m¡í…ã·„©-¤#Y–Ÿ-ä²%� *¶ì�!^ �-ßyaÁ&J®•cáHq-X£†ÙèXªÅÀõõPÐG-øüÇ.Õ²5­%2Z&Z{Ôýêh 3ÀʀѿR´v„γGî¤�ýg£ª 0,¨Á7÷gi¥Ív,fž¨kjµÌ.ØkÂOŸ‚ÎP¯ŠA€Ë³@aÇ ¨G)´X£Eî…RÆMœsFçDÆY& o4®À®Õ×ð‚³(¦órsz0*19Hó–XYœÕ ‘†ÖåuEÓ‡½Â²¤$-¦ïXœY–‰ðö-Êß,±)ಀ^.1Ø—O}ìhQȇ>îrW»>²d]cŸ›ÏÞ;Û*Y¸ÝÐÝ•I<C$€[<+“09D=«$K+|Nu8W$]d¡þ¤{"¼2–Q´‹¡±<–S ºl6í0£I;`RY{Œ´ß�d„EÔc1X:Q¼=°ðé˜Ýe�BkE¡‹ 5ú ÇñŠ,‚ .ÉV/l3Ó"fjÄqIézYaÄFÝœ�÷yÓæ+ókªZýŠzø†“ø +|eÔŸ¢¥mk ªoœ¯y‘áZ™tÒFŸW2Ü{+œŽ‡·<œúX <€/îKöYe@/A' µ†àVVÇYI»’bö7«3Ÿ€Ê¾+]»e +IYI»b4¢¦Å>ÖÄ¥B`c_±Ð•<Ú8KèÎ; + +Å7id&T,Y�ãJ骶—+³ájàžñĽüÆš¿#»ÿV`£šM\™ ±®²çJ^þõP¹Ò«þÆÂÏd‘p¹‡¸öÞÄ��@ékЊr.aø~,ï³’l1 š•±ÅÁc%ÊJ–D AË”›k8V¦N@f`(òçôÁ+…к¢Çêx•¤>(z•'Kýä2®Rhõ«ÈX'9«‹ó'’~�µ– ‚?-áG´Þ(ʬsI²(5v­tÅÀ^‡*;¹i¬˜ +ó�é@ B•ݵW¸´�%mªË¢’ÿ¸�cØ<[üÍöŸ À%œªgÌÞUÀÖÜRª8c- ªÈ S�>­`¢RlÝ:¬* ÿ‰: U‰,ݦ\$ÔxªŠøÛ¬}ü«È'ðçbsÆqóå–2‹){ôa® Ž´p¡)4Yz¾â÷]Šô^1Fö·:÷Öÿœ5�Õï}>]òÒ¡•¢‘à \¬�ï¹ìÓßSÛ€¤G­:Öp¡›¤gtE þ�îèé –ÙÜÛÈÏ¥rEÕë¹:“·¦µås{¯‰á¼/ÏuZ=K�Âs}â®EWâsm?Fèº�„ÚóŸ¸lV‚é÷ŽÁú˜°ÛâTtme,%èN EŸï$è®Õ&Þ切”¦a;è¾BQeaÕ]O4 +Rð—=н*±õ™Û*Ϭ÷šµ’ k”¢L( ºxûñÄË t§­¤ 4ãà4ñh€Á1²Ö€î€AM�@ÒKyˆI@|m(w +Ýa¹ŠC�|´¾:]j¢[².p&]nåóJ×ô•$z6ŒÓM·õÙeZV¸Z¢j0hºFéFÉŽªÓ5±ÕЂ¨k¢‡(²ÜRr見� +c¥\ž +�nðnµ Ó]*Ž¢fÓ­k¡ZYÈV " ÜÎtºéÎ*ØÆ@V�\œ.ä+ðöM·>¶9pqEB�–Nún4)='fÍø®YÇL«xï6¹J–.2»?ìÊXºš˜'UÂtÈVR슸•1wÁt7¯‚Ž㺦ÝAæ’£Â%ÅŒ!Ô�qK>ù�,težìyusFpÖ<u!wc.�,CK7 êrid• —€{…×â:^g)Š)Ü;A4²×„º{'u- H…;jPÇ„Ã8¬„´é¶APPü¶Œ'˜Ÿ-àÂvýmºï…õé +‡}ð…ébB|xÒɰI'†A|`x²~E½pj÷M’Èê\nhaRÍ5rdõ¿ð+ +ѹð¬ŠÃ÷3�v=”Ò¿¡mý†cÚ‚¢ ¨KsAd@QJ�©_ß÷}Ão=Lfë…ùÇjnr�C`sQÇR—†X¡ÝÂí<›®ï½.®YÌ7V·0©–uhà;²ø'|u·6…æ˜Þcý¯ÖJˆóÂËíË .íÛ'¸m˜áµøM"ÂpJ殼ðéCÿýó.°f!dê†C²¤¥—$å�— +Àl'W8X^Û�ÆSdHœ�Q‹p]rΪ©Æ•Ÿì 7zÛ.{k‚êž‹G†‚E0U ŠÞ¬¹ + î3^T˜ä›÷O)%ÏQK5"ÛÕaºTÀ510³kV¼ðÝ› \yuÇŒd¬J§%Y0òRz¦[%fÁõˆ&ßòUÌ "V6Ñ8O.z©aê.ðy“:°9“SÒ¢q’¥ìƒÃúp�w%HÄZzýì_{–)ï>ˈ¦­ÉÒ|囩ä„R™Ë‰!¸½×{•,!•�ò}©2ð°¼%:$ñP+>‡¤q* £M¾óiÈ|TÌRöOaT“œ¬µ¬ UO›“^ É'”ð(àè{Ëä6—ºfj"D`çd…Mc®gbª9íì4}/‚œ]£Ršäµ†È%9%½Ë—¸ýŠ +©] $Y�BÝßÜfo¦=×}¬u£Ð âš!4›!»e�XD2oˆ]ÚâÅ’,°( €c¹•êèZ +�4Ò’båÏÇ.Ó÷‚™£”•#)sГýÞ¬g0Èø’ñ¬e±é@H] ï¹i°¤…«Í'rfÅjI²Rx”|$x'î)†"(–·> �˜¸t¸jÒ†±tþm§ž±›Tñúg� +t-6K÷7vÀõø½ž§ò¾Â b»´ÈÍld®o3Qδh¥7À‰Jûl:‰n4ÅYBH·ØõŸ¬Æ<+3çc ?ˈÓÍ•… ¬"±÷-PÔúz7¡²–·áù®Ÿ¢êá…ÐSïKÉ´2×þ+Mì…Ü�F­*KIÁñsrp‚NesL#PÝL#+û!ÕÍ’Ä[1o¢_Ûû:\àÆq_‘X°Œ»/zË­pá¤:ø˜êuÞ‡MŸÇÚw·%ÝW ÛäÌr»dß’ùÂ.õê\i.H„ +‚¤K…†x‰_ÉÞ}ž Ñí6 ¤……‘_áy¯ Õ¢d%k˜Þ F¨¡¢‡g&VY‘B!Ð2ïÏ©E¹þs…£Ã¶Ê" ý&¯Í›#@(õl'£~ùÖï°žÍñ §Yµ�Űì�´µ�œŸõS¸D‡| Î6úÕ4£ø ÷€õ2aö;”"ÙU�ô .·µæBuL[‹å£ý¶w|ô¼ÈÔïÝ ¥g£,|)Æ*‹»ÇŽÔdMïSuV¾€ŒCIÁW¶ às9\³‰¥vÒˆ–º¯&§ÑÆ“•Ÿ1gX‡Ô?a u(¼t»ÅRÝ<Ýdè·ŠËM÷~f#}¶9ûoUæ¦$]J!¬Õh3�°ÞûSV` CÞS¹?öƒç�riF= #pþÑäHgЙ¾ b„ø®ð�披 J®—Å=È~V¯¨`ïlœÔ§�º +áÌ}ÔŒÿ^FQ‰(,+/1çŽí|ë>mÂǪ«±j¡;ŠD ]©1'·=Ò®¤oø–@Ö>†v\K"� Çü±G—åPȲËBäáhøÑ€BÀ'Ûò.¤#Õ`ùži�PâWÜ””:Zx¤"~JÍwÀÌ©lÿ[ó+]´õÚhÎ÷ùåΰ@ù‘Ò�±¬rðœ½É¤±;$  ukq¹é4¿ ­ö¶ØžŸ†ñEœúÙòm¶þä�RǦEˆ0‹8ÿWòËÈ‚n=tž+|I¾p‡ëdYÁ]í„£`KC¬vé*㪂õvôê{û©Ëk#Ú +ø&¦p ¤B†þŠ?R%?‡a©A.–%,ô¢X¢¡œ ­ûˆ" Gm5´4·Úîç4|�­\Lï +&˧¸ëùNúf%�âJ´¬#²Hn˜UZ–˱¸Ï3Ó‹Ù[®¹ÿžõPԲą§:N§ ­ù_w-k¥Îì_O%–?½QúÔë3¹Š­H,!·{I ˜¡µCÿ/ç'‚+t,Ý;Ni”Š-ëܼ§±É‘z~ˤµ3“\ŸÝÜj-º})”ÔÒIÚ²@lŽNégÖÞ­ƒÒ¡á‹ŸËOýäýBcˆ4@�³ŸìX}nZ[i½m1/‚ñjvžØrûß¿ÿq�uOüæ¶–å’ß ûãDAr\Ã}›p +ˆË[O¹ÅñÙ¥·G›m4Þqöžâ¤j±®¯CÂòÏc�½s»ÍY<§äs 3œ‰ÌTM8ëi /;8ú_‰Ð2Š9•{@´2-¹w Öþܰ/†6Ÿ848¾f8‘=(FÇe-zuI<}*‰†A*ÆÂ:Ȇe">ØÊÔj92÷Îçp\YwV7sÊÌeÇÍð-%I$�惾ž1’è¬BÝ¿àÑG+0qhÚO¨kuÔqŸíxÛù`\FÞ)O>0ÝÝlº,…Ð¥Êo¤�J®K¥Çz F82 èµ¹ùL1Y£p +wÆHfäø{\UC`ÌÈ÷Iu‰íœ!êlg)ö²È~4L@çœ~°bìÃÆlU�‚ßø+ „Gò�¯‡/ˈ÷Dt¸aBìÛ(ý�᱕þQC,‹]yeÂGý½˜TŸ:"Õâ¡v&_Œ(®s—lO™ä¯u[IÚ;ŽDvÜܪÓWè„ËS)Ö—åqbþÔƒéäZ5¤®º#@. µëEF »€ëWµ–ø4(¾g_>$ƒÄnŒ¸¨ûsz+ÛAøGZ³<ÛP%c¶3‰Ç{$ž¢ùÃsøšgÝ'˜é­øs² 42Ÿº!úšYÁlå"†Q¯í \ÿÝÔ:¥­{x’zPWwË‚¦n•’ç£&Æ@É<ƒðH%ê÷ÿ°z¤~oŸƒ]½¡òÃ|©(ÂN`L¼M9œwöt¬ªU|Týk AÛXÍ3¬  ”­¢·ç½!Ç:Ù·K€"ÌŠw»Q •e„YnX—¬�ÔŽ“¤niü:7ç: ßþ,÷Vãœ�­/Óä¬_Û°×(®Xi‚°’¹j(úPp hš‚Y[‹ÕŸh0„ +¶LÑÑ€à¦X•rº3óQ&yCGg„xÞ:¿U_@[d©‘î½.´ync|g)guBaÌ�”¶«.ÇEfÕLùGhƒ´P!È�YJëÇÞ³ùOqfH µmÝUßÊ„òÅb+–iòVü[¦ ˆ-Êô—ǬPÊ›z­f<�YîÙ¿š§(o{Þrâ”ðÏc–V_ìÅ=f]¯w¯e¥ Ê‘{2c í{̺ +ò¥˜%î„PÿÙØ}ÌRaåüÖFàŸ^OÚŽÎ4Ññ•IEfmaE×é=”ÌJûʱ©¥’Yu@ã?³Ã�ÃÄ1Ã"U2¼ÇÞ< + µÿ¬uÚ²ê'ŸßÅèdVÇ•ÌàŒX\­K¼ÿÒ/—ûÅØž1ðþW(³¦{¿*ÑÂýw1?~Qš Ú()5‰Ø1ãÓ)Ÿ5èæ°D7)ÛRB%¿@!µ…YAÅ KeLãGѳ¸²ðÿ{Ô<çI&!ÉŠ`òVX|µa¢â†¢·ÿ‹ãf�9‚Ü"]�D‡Dq2eˬªç‹[“v™5Ìðå&]6Q’½Ì:÷]89žÁ�úLø‘ÒIîVýÙ4Ÿå›�âÍÄ̪Œ–##6E3T’ˆ}†Ã`bLLò<=~D0»ý £cúŒßŰVúÚVÇŸû[!ju%ƒú.Ï7Ù—�g,ÎW¥ÄÚéÙÓŸïb—ý­è{L²d”æ+±àXÏ®Í|§aûY_ù:Âa+3K~ùùU·±òñc´®ÕË7Æ'VQ{W4�ÕGi&¿qd�o�²(ïH„?ó¹,]¤�ó•㫯ÅX ABù®‡ðaE+-o¤ÐëA¦Ø—~·j�g5=Fß§§œómÿ£qÊ}¼šõ�c2ѯ¹X²áM¹/j'õ–fÂý.ŠÒyܱ²¤tZ³Ê:Ž9‰²üò*"¡†t„ä­êæ™Ó1PW‰�b=ÇßbÎ <¡ˆò/hj!ù©”Ô _Û@À^J릔v«Žç¦d…cÞÙ>°Æ|è–ò%3VìܬÝ(Þ£W«¥¾žm}óÕ»V(@µI0{×y›µY×=‚ÚóÏSœ·@æ›_×¹ž|~M0^œ�i…Q�$½Í$žä,/Ô_…inzΔ-pUt•e^Q©U›Þ’ë<=ëé�êcËãúK,£Î6ì8Ã…H6™ÜÖ‹’™’I“†ˆÈ$3Iu8nû¾oÌ…1–qÂýÛñùx‚!eÚd‡&BÁyN7L—ÙÎ7½\r˜©¨a謌A‘0v¼ õU}Æ4u³ºMcpœBeEøÉEGÒ_h¢y¼ñ¦ Òâ‹ÅMMÝ“:a=\I|ä�FãÂ8ræn5"Ç/ª£»¥ v–ß%°©Ö¹Á‡€ðʦÓÚå(Jÿ#a6•<�_¶ž8¨QEPTi@/•oævÌ'“¶ÚÁ¡¬mã•| ¯váXÕÅC¼Á‰áÀß—ó1%BÒìšÃ/EI‰ǧù €ßÍf05LW F~³*ÏBì'-ÀÒ£@FÉM¢iYu”† m AÀ \ÌÛj\-ÖŽ+¢×"'”¿ÿËÍ_8«"|�0¨ +ß‹‘xÌ–±™`(ùýOD6#F?KRBŒ™˜)ñ€¼`ªóBõEü+='gID­ˆ’Ê—=Éýîyjp–:ÆÅl¿w!œeÉ¢ûê^"§“ž«_Ä‚—Í…°ÉŽÎÂS´ãÆT”È}9Ã0óakt–)–�'ÿ‚š¶Ц,+’…;ŧWðÌè†$‹<��«dúz)ÛI.k½väaò�úF‰‰oCeÎZ(Òý޹–åÙ ¤ƒÞ7�åÈ&ÚjäZ¦Rá±Ìß3 Uk”™[qÖDÛ°­‰-Î;#yYœƒ’úÝâE§aÀ¥”Jõ�ç]rºC�}ã2Ë>mù½â¬k?—бÇV‚†k]–†æé'IWè—jõ#;nlÆ,�¿Å«w[$¨qª�õ~PÑåø4ÂØu¢á“¤> É´ +õ)eÝ +2Î’>Er+¤½®‘aygFbo\á_Ã�gx¶m ‚ôMÌ‘4ÁWµGˆ9Ê`r$_Î5˜z9¸?Ð;÷¦&�7|@ÙÛ +x,ÎÄÙÓmtCÎ:ð¿h•ÆÏ\"ÁÜ’ eœ¡CÿüŸí� ×BzôŸr*låÍ(¸«¶µ˜æU2ͤ�Á”³ð=|�øølå¬OÃfXçwl# :âN·7gÅ·–d8ßJ´McdE)�ÅYO;3ÅÐU’:$ߥä&rGµ6œ†_!Sg”ìT’z½ŒU¦¬Ùñíàˆÿ˜”cbÞáâT°'¥‚4CËÒÙ³^Æ€‘Å= VüÁÏlr,•~Chì,‰áe1Ž?2KkIsIêVTâ‚t ÏÓ¹S2JFÁw/ÆŒAYã�‚™íœ3¨Ô7@~,Îçϱ¬+S@—á³t²5¾«? Ürͺ¯)KM"°årбUO’ÖD[VŒåÛ.¦·+ ôQé)Sà�ëAãK¯f0ý®”b›õÎmˆrÁšþwަó>H>TO•‡ê_�Ê«Û~–ªxœÄ~ _�³ÎjgNüc '7~–‘åÎÚ}—R|J®»w� àuÖ\ß2j¥Yˆ%»Ð }¦Â}ûÿb ¤ø6ÕjÇyös€ä\ŒTU¿¤€Œ5,KôúÞÞ,SqÞ ý:%¢�§%b?—*–\Šfîv +ŒUôËgÎo¹�6o8øî}„qÆ ¿kÊÝ'šýа[Uõ.'t^Ï#>6ñ Bä«0ð®¢+9~r‘A‰Nìµ3WÆã(x8\þÅ(Ò︰ðùqÄæqÿê+q[†“ÃþžoY·àn(4böpÞ=ê¡2ËÞÄÀÞ‰¨ßá‚€›É÷60ŸÊ Å8…8±‚S$kka 6�ïpwgé�M‘nÖæ›lÍØ^ªø;«b¦kàM¦?fÿ�Õì8 e7¾ÙK\“ –k‡ð¬è7Îôìñ¡°É¡•‡žž¿“ÛOyƒop@L$iÀþm;O²ËY‰:ÅQAžÄÕM¬Qµ¤Nò¬“ýÔ}÷·cß•Œ—=¹x;‘ÜfýBéþŠQ‹&F?4ó[ö:Ñ…(î^ ‹ VÜÀ¬�ûòq1"|ŽÎ‰àc#-Òc~šÿ H±èÅW($ŽŽo7fåó|q¶�E[o_RŠw«x™}U ”Ô¨lÝ¢æ{nݽý}}b1�öaZ–yB¢á@ü�óã*­¿'ï¨T +xD¹)¨C{–¨-ï@+o]Lá5wp§ì?áã¹~£� øS¾Yפ2÷õÏöñ?�ã€øHŸÕåAŦ(ñÿ; r.Ó_…-0nìmsé�8¢`Õ1gÕ›_Û6üT;♵TÑÊqƒ0•|` @çIåúÀNÉJOoÿé?�—ïÕõ[žRÐP¸«¶d¶� ª°²T�úïØ�\Ÿ±œ‡{4 ^ÊÏy*v…J‰òëÍ9€‡�1EZüÐ_CÝPE� –{’t™àrP•23�úåN£¦®Ñ¼ÀöJ §/œ×çPݦCwÚúQ­°[î îíßF(÷eÜöô£ÊµÍÉqN:+1psÃd³_ªy̻蒾“™6hÈ4J@g{Èý¤ñN_~_»Ê©‚Ç|H0‡`½†%ZÂÔâ0£¡HèuÓ0öcHK`øIëñø•\„OˆƒChÄòûM¹ãÇ¡5¾<(‹³äcGÎ^0giáû(´Ø«ÒQ¹a°X—8zm=僎.ÓÇÔЗ5‹ý–{Ú KŒ{ )5v1õÅ(». î ·•�ôž‰ÿ²8úGIô±o‹êÍ FGF\㯮¬Å? YŸˆ ‹÷*ò„˜Ã–Êë§Ö¢ÁvÙL(2‰hÄŽš¨g}È«F)ðÌì‡Þ4‚ó®—(§gpÛ×ûHÈÉ91÷Æè§~kÔ«Ý©VþÅ×�Ç{²ïÉA¢„;Xû.ÊöñHýð öúL c A·¯SgÏPe6— ï½ÎÀë¹”B�è ©/ûQO7´ V0lÁ• ü¼/?Ø:Ï\Á’( +²‡ÀUp×G€1MÞ<S‚M.¢ß9öüxù:BΡÿâùï’µ­S YvĦä^ijîË#Äðü7²Å‹ÝA÷œ”sË36�ÐLVÍ�f÷¦m¨ÓX-<ø­¼üa =ie©`Í+cíë¸Ë?„Ìx}ðò Û»E›ŽD¾Ÿ=pÅ5ý4Ô k ~ÿíÛ‚s£ú0Í„ ¤�Ï ÁÝ�”½û‚K}ZĈžÂ1à¿ý± ÐŒIà5«ü2eq¡“¬ôˆÇÏBE®?Ô³ëÝ}9Í€vÁÖ¿åez�¬—ëÇú}ÃušXÛD$eŒ¢4R 3ÒÀOj 2bÑî¼ ú€˜_gÈŠ¢q n | ýþ}h¸žt®L‚ƒ’q‚A²-+{ä4¸ò¥ÒVê1ÛÈMÛ:MKsí%!ÕœLí_ÕòùÖ݈ö»i(Ÿ5�Z§ÛÁxTöÁ^¦×ôÄR·Éý†[º* ­¢ûÓ¿�…>�Ù +V´BO+x΂/3,Ö1ù¤°P 6û¢E1üdÅs™ˆ’ e}Ñ/Ž‚¬qY#Rü"'q,§”.•ò–2ÞWK&ÐH6kDŠ_ì$Žæ”ò¥Rž¥VzþH6TkÆgGb fú¢8q´´¢¬LÜçFB_d&Ž­Ò¦ÚW�;»[ËEXˆaQÖ4eÑŒDZOc±V¬Ñ¶ŸEâ'ØW÷‰ÀȈ#'³4ýD`q©“…cu*p–²>¯øyÇ œL¹…W‘¨Ç §¬Å+ò¬âŽ¥ÜÏSoßÀê/J"Úšx÷îâ£_Ì ëm‹ÞÉüN*-ðJèHï}\!Y`{‰ïB¯Ç¯Áaé@ÎËbdžë˜4_ ¥G¬ß‚m](1É`2K4Õ&V­žùåµÜ‡dGWÒ[ÔõV.܂݃þêW2ç*þëµ?+æÏ¼rMB^Bò)Ïí"‹Ç”42ü“7¢)Š ½Ì€£ƒ+Ì)DÉZ`RB0 ɪômœú½ýäÒ‚$úb ¬ÄšFü@O??¿ü’he¿(`PIFt¯kO0boÇ3©ea[yÒ3%ÌÐèq38õD¡Xþh¿Û¶'ãðT¹—ò™—ísZLÐPwhsÃ0éº;Œ¢1ÚOàƒXbA‘®pöZÓl•aŒ÷ÖOl³B„Ö‚Î$[dQ–Éߺ †÷‹Øi15(Kd¶Íÿ’¿†—vN÷Îÿ+ Ã…‰ãÃÞY8@P“±vd*gç`§ïTåשê‘X“@K†Ér†„$5 +©^*Ôã§Â¥Ü­¹!ê_»^ü²®/àZ;–.}ø¢ŠuPîìÚ�ô &Åç*}žî +éG£F¨î· Þú|Š®Ëí;´®™Ö`_ÉÆÖÄÈÍÞÑAQ Â(k +º$Åjïíž×0…ÝhEÒ*ÊŠÚ|é‡ÿ(}@l}çú©—ÈÎÓ´ì¢@o»ftÊ=aQ±EÁñÅÒ8-Ó­Bú¾ûÿ‚‚OôUb)ë0z¦T V:ìÓ'¢dÚ4@ñè.<ª‹@œ™.hUµiQü#ƒuär=¶•wåX€RÔš;ØÞÜ8ý�Ëgù�ΕïpsëÕØMR/�H-Ä}{`Sy%ˆ7 ÜÈŒºÛ“­má"<¼ƒœQ—+Cû¦›ߟ¬*HL“¢ö„ +Ó›í(úúõÆ!€TfSãWœß#ÖÄS•i&øWjÁ“TåàíèrqmgßùsOnI·²»véeàzûAú Y¦Èà÷z».©u‡–Xó<±–�ïO—¶2�¼ˆ71œ'Ÿ®r¢;ÿK%àŽÅ©4×ô9²ÎQŒ¯sˆ+ãC�ŽnP�¯*Ý}·Ceãtäj\ãK"}vBþ£…h£Kßìæ&óp³AÁ>âp�ŠüZ_num×â:.�SÁfçÚõ}ìƒû³Æ¸‚²\üD°‘@ÛT8šOÍ'P ˆ )ŸŒnlÂQ åw”D”™ ˜Me‘ƒ`,__’‚Ãq'ÈikFjé¨5ÞB(/%f�a–�x3M¦¼ 1hÿj±`Ѐûõdl¿3s‡“E¤ú <#©�Ú!¨¢ÃÜ2Tø³M+¸þÊ 0#´š´ä+Æ×õ¦˜ƒç3 1K«ƒB«€Ô_žç\%TÆ7$­‘`Ùg…s©²o ËOâé×½âZÕ¼ßPänHT¯×AWIÒþ.™”©'á¬wŒÈïíÄh”‘Æ^­ RHÔÈ×-Q/|›óƒDE ½¢ÌWy&4påÖ+ı2iá[jx”O'¹PÙŒ²ëuô›×M²M˜ô¨£D~ õûÑbEyøo�Õ‘{â÷¦„bó0j~6¸ÇI|<Ì”¨,B$Q\c„ñÜ:Ò’bT4`iB'i/’r»”îÖ�Sglüx°* ÚÕ0€ À@EG¬$CÿêlËH*STÆ«z‰’“ðÆsª›µ•Q[ +,(xÕ5 “Zã søH‹¿ö…öo>ÖIâöâ¶ü¤Ùm塆P”ýÇ´¦¯ù¨÷‘mXá)FxS­éÏÊÎÃÚp¤“�’§.+ݡҩ$:EML{SÅiêÛÄö|ìBÕ‰xXs™rMî ½/M=^B$™ƒN<‰Åh¢1§(Ÿ R3¢DeÑÕ¤"�‡OTc9EFôqpbS'Yâ5½gòGš£$e­:1|,‹Ç…[¹*hæU0Z)ÖqmD"«½—«zgxÙ?ÈXV1›CÒÅ„Ô �kUÕšì#¡”¦ççR3.n*"¬P‚¨¨Æç!—É1*³„£ZݪBò)j›™�f31¢¨qº‘ +‰ö’ìAûè1÷QLL1>ª4S•Í¡²M÷í˜Ä£´UÄe”)Ï8â‚æ^X(“·‰UÐ*$£y$Ô)Ù-/±gášZ¤ŽrLÈIFV4½ÂKOmK )Ò©ø�df!‹vŒYnm ¡Z�P¢TœuHë*h¼ÁD‚jʦJ,L$Ccºo}f”ç…¥Hõ¸øýôäìÁŸ³¹éÑi/qˆè—�QÚf´¾3m¾¢Ÿµs@ÔE)©” §€S`~Z¾/Ã=ÿdõÔg+0–‘�§»ˆ…ë¦ÞXæE÷ÌUd!OЬú7cs…‰ˆ$2µW‰fø òZmI)&/Z16MhXPÀq௪¾3M 7½‘ÍŒ…à&XpxÌLÏTäªó–rƒäaâò`nWÖKˆ*£ª2áDUä,Aö¡Kqe©ôè.!¾EaÖqbú�Écf¨„ +ÇÈ3ÐH k3ê#u�ªê.¶‘òI^¨FÖº¬±�2aþþÙ*%b +Kp†‹…x¾r¡‰ U䈺‰÷Ñž<’^C0EK*ªrSðŸ/-Šõ,K N¹šïÃRCKP�ѧ)‡ðwˆ  o­Èht®Ìç&Ü ÐvkBMÖƒ‚]qM(e¤Jª‚N< ”bÎ&|ⶤƒ„ØbÏ.Ã|)€Ð£Ý‰a«eâzPÓ&zP æëA�Ð!Ü"¯ýÑô €PÆõ ÄËr›Ê1äd•’Ú|n!!n´Õƒx6®%,[‰ê’e¶X„–" Á¥\‹ÈÐR´XJ‹ÜRs�Ç”RÊ +4)¡N&¢Ú¿Éd$5Œ£ă‚'…é € H0ðûwô߃Âïbþ Ð9�~*ø¾�Oß½_…çÃw؃Â-1ÌL +ôjª} +üçýCL„¼H´i—öI“üñ]€ï ýM“NûEÛã"°óž èú©iúöý¼zP÷. |‡…ð<(ŒåáA¡§aÂsìs¡éA�è‡iØiò `¢éÁ4sÐeÌ% DxP0‘$%JÐÁåuù促‚�nïÿÓkˆ7ÞA�ÚŽFfC)Ý3ÜÓ;(Lïª÷Ø.eiÊwPh_Ô +ÿW’Æ´Ó駃ÂÿRê‡S£w0ài9=]ZÒGï @— +Ü( Ã” +éD¥ÀY±ZHE÷´N¥ÀlÈgÒ±fYÁ�àŒÛo8Ê*‚ZÞ'$j&)‘j<Ÿq¬!Ï™š"O)V£"Ù+tcB¬˜Ò¨'» ª„ëñi@‚ÌÓuW=„¢X·ïÏŒs)ˆ§—¬a …›á.RACªÖNCŽ>|G +ŸVTDÃ’àH¦ã +bGVqH.…TªÌp¸Zb˜‡¥ð,}È•Ä)}C1†B:DZ‹RN¤¸p~’-^Èø2½�-B¤É2œ0ÞŠÿ°ÊŠ”Bb 'få¡8¬‰ˆ—¡P K¶+ñä²±IDcL… c{ÌZ噩ž†CB½ë.ŠoþáÐn�@`a@@dâæL§¨Ç?‰š�bECòƒŸ¢³ŽÈÐñ)yµ@},4"‘æ Î㈤ö™à)¤€ç©è À-Â245óÝããP.8`€  -ÑÔö CUë¨Bdî™*UÌ‚è/‘Sñ[…: Éý³¦ !ÔÓ—3EÔºLdåy HÚì©”ô"!Äjt˜†e„Ñn ‡ÄP‡˜�îŽ�!ƒÔ_­¢ÍF!äFû +:dP0Ð'Ž!©Xy�/MÆ7:ÕNˆDïjÌH2$ÍòÍ,�¦b”QòÕ–Ð šÌ +R„¨>P„Fwæ-�‹!LGD8L•«£!>qÑK *ì“+Ý”paô+)ªUbÔ¸jT=K ›ÜÖ¤¢æ0/YÜÌÙ`aY3bÊËØ3Y‚ÃíI/c˜‘s2Qç€Áa&$%�¶¡ìeÂÍY„‰6”-�2Ô3ª83Z£j’ÿ›ü¦XÂÈ—JS&|¤+‰‚hö¡TÓb^¤ —«¨äXt9ǘb®³ ˆ‰Cò¸(M ?€t4 &0*$,0¹v�2@€„È Ð ²Œ«nSÊ‹_‰�L�»†>ÂëÈ^öª¬s0´�û_ŒQ@cüÏ… +Ê:†Xļ0{x®-6êSLô¸î�XcÞá¥,%n‹çM/Ói\—`ÒlåñŠÁ3ä]š®úÛì.ÂB÷HCÏÃÌÿ"d%'p^m,†,>†¼ö�¬<›˜Ç“Øó ²þ¢¦g#±,Ð�Ū£n«¶�d‰ÙlúX;ç·Šw8ìß Âð}õRÀ•ŽàÂcÜþIX`ÌÀ0A?Ù»�4MGD‘I\#á@eßpzg…¾âàŽ%‰^dÃ�¢cïj–ÒhÜc‰–²Õ,rlr8ðH44‘WbIöS?–Tð'r äcÚz�:;–Y‡ò’“ü�§ÔËn9"ýGÔUΊŸÕðµb•Tb¹Ú\äCHG«•Œ«¯’pr±“ru‹T™Ôo¬Bmš^üÆzvÄi@Ñ´±ðÃhY*#uÆR534”Ùb f¬Â®åçœ"ÀX”[hx�!ŒeóÂ\ð +ÊYùÁX¼Þ¬ ÓO_âk[ÑÊ1‡c…´ç…C>cÍI7HMu.V±‡bý»³ª5]¬\K-ý7M:‰Àÿb-Æ. ÊcõY ï¶}ß,Vv®ý§ñÛ7«ð�"X,W™PV‡?>Jä‹R s†Ÿ»q­æÛ÷b=ŸS0ÆZË +‰±Ì�ÛêõÅX¶ÍgôԂЋÈ8+¹ ü—QN`*Ø4€˜ã]—†hÆJ×ÙšÝ c�ÎÚ?ÉXð‰íí|‰ù… ¸ù¾÷Jöd<ªF¹Ožd¢à$3VUÚƒßÖ£ÖNœð« +_e%uuÐ�´ÐÏA¡Ø›p«ZcµñÌU¬�,б1[i Ã |å*ÝeìÞK?i²ç¶NhŠ±Ú‚Å£•ò¿ÇŽqïÜ#ÌMLF½¥§©hÔ¿ìXýÌiÍGŽí`T9dRbç` oþ¦ƒ sí›(ÛZ�=Õ¿zùàüÀ‘ا”e_ùŒìݳ÷0ª§rÛ@½'´ÂŽ–,§`[VAhdª&ÅÉO z†ÉŽŒ• «÷M“ø­›iJg�Þfî-›sö e�ØÅ ¬W:Mwd#tL�i¶ÂìµV$ûÊ’K\ô¯ÄQš˜•Ubü÷Ä@بøGĦXü +K³ÚÏ�*Y�í5÷R¡¡,7½!üœQs)v·Øl?¸JešÃ?”-;V¹^ðÁ¤šÓ‘µ"näÚÁ·,ý¸5Uò?($[TÁ&¼‘+x�D}ߦepJªéEœUD†XÒ\ª`�ÃKäά¢`7àŸøs©è‚¢Z¯¾[àPUù†Zzî'¹‘Þé‰Ý[�hææ&7.DN0–ï*‚?¨£÷°LÔíÚ¸ÄMK +=w âNF ²A² k¤ÜEa¤"ïó^½Î@K[CºæuÜáêb$n„>"‰‘ à¼öúñ´UD)VY&ôMˆ�‡Ö + óÉþ‰Pµù”þ!Ö_¤éÀœ¼³g= ÄíË÷’HÒ¬ÉGÓ¸8› j±DSaDð͘�Ù�“Xˆ–ÌPNðØ€`“ +ø0š?ÜÌ>ÀËÁÒ‰ ëñ›i(D.ŸV*}ûÚYÿžRÆ­`܈_ÍhískÎù‹<&z™¶¢â8È 1›hòjº,Bs€"Úì›ÖÌJŸã^§º4È,&jp‘sL9t6ïS<ª‰OãË 1rQïFŸ¬Ö`)ºô¥Z€~ ò|›pS§”$7O4ÿ˜n¨É©¤O°Bü蛦)Ò6 $éžÈõØ“fã�I1È…®3ºÖ‚« §Í}ñ³›5Ñý2-—¥Õ¬Xȉi.àéŒ/í?!ÎÒfdø§]š-§pOnr%¾SlõÄüÔ’Òjäî1Deîà¶&cÏ!¿¤J>¼>±5·U·�‚;—×€•Ó»�->7÷ãVwjx<�KÇXq�<×vêóæH–\DT]F0ǹ/Í�q!bbÃêbr¢ðð£¡Þôä¦T�ü¸<›´Iüõ°(Ø5Î@ØÂ”Ác�E›H„5ÂsÁ=)Nàß‚“ÞªüËaäÌ;cãÞzŠ‰Ì D§n´*<‡[`§ÔiFMï䪣ŠÔ‹^-Üë·B¦w P‹ íÕ­S wÅéb½ýü ôWÍÝŽ;!BZ†fn€‰Å0m“bÔ�É]Ã=âݣƵ‰ +®¾í¢nW#ÿ9öþ‡WD2 ¿ìÉ�*·>JžQ^êpFåaÞ÷ò[ $§¹¹‡ƒÈ‰Ø§aN:]àÅ·¬>'"ë‰áò öôbå©É®�fÜéi¯R”F¯OEÅ»…2�fÏÀˆp�Ñ{°Ú“¿‘Ds�ÎÑÂOÑG‚Ò +å{Ûœºj#?@Q×ù[˜-8*öyIû¦7X—‚x +´P¦i˜'œPäÅÏŸ ]è�íŸäûYé௦l•ª�‰^¡þ£˜(1ÔÂ1ÈyO>1ÉfUÎIÞ\vå�^¿—. óîtݨÞKþ�)H0µçxè`…ìMGºCf²JI06º•à”Ý[¡BJÉ-ÇŠÑ~oV×l a3„ˆ�pШæ¯ö¬ódu/‡ +ca‹„Zàfæ¦TTYÇ1!<+q'yß^Šh°/§â.waD––Žˆu+oÙ“‰Mì´Ö^-abõ™k ]2‹ÇZÐvÊ`+£ÍWDw2‡>I3ÕÇåC©dÿ]xÍ ãˆo¨”îœØ4VšD8Ìu>˜ú*Ùº'=’úPÉx*‹Wý4múŸ…Ö_8Åh*�8Α‡$õ›-îpÛ:én5É�Z'“ T\Nlºh÷# +TY¡WÔðôù|Ñj”®º� ˆ¿³•1‰„!™»=å>ıH +U¦†JVì^‘³š@ðZ–$�$bÚ ¯ÉŸÈïóœG¼ŒT&ITÖÀΖ'Š�£][L–ßA¶\<�=D.¯@|È„N´“ +q ö¾t‰ù®A’‘v-(û }ƒwê—:°VþIh¢¹ìpMý·e›‚%ª9×7°=nzÙÞš,7DŠHWËiMÌ¡Ý)‰È@d¹Ä¢„¦Ú¦�_ª Û›ÞK%3tæzÀøñ&®Pj$ë9ËáH§Uh´¬ôö¼ Iï…ùJ­QÓêŒj`^í—ñ}%LœB‰=¤HA Á†"7zµå8Wµ}3ÀOž£7lÿxÎ!5ð5�ìùñÙoøâ·ð¼q-2ru·[ T@ÇÎdi‡„RQV'ã Þ … ‹ ŸÝÄ/SWŠ©t(m�O5—–ólâ¹ÞJé;…¤¾Ã‡½èûA% ¼Eªû…êS”9ª?ë šbRȆvE) ø3þnýS7X‹{J{\Œ�h fÁ ŧDù£- Š ù” UÀW�O™u‡ðö)Ì‚†«èOi +�Ç©FþO‘ VÑ>VE¾+Ó’=¥î¤²'¶Ðõn;|ð({Šršmǧé)jÂ:ïüÖžÒ÷”Í`~Í0�v.þdœ’¬%oÞSH¥—<œ"¼W‡ °Ý)‹‡�O1®yAI»†0ã¤!΃J¿#j‘o˜)mq”ùJ ~¶ò“öÌ 1ñšfÔ{ +*ŒŽ‘²1át–ðESåq®}æGj:$&ZÚô#¡"ƒ`èߨ=ÂÂ>ï}Âå ‹BeîܱÛþ‘7¾D÷îø]ƒJkf¸AeŸ4�¼ *00¸ÓìI\‹Ê-�"­+Q©'Õ)’ñîôå€NyÙ-ähß¹NáÂB¢zœÂ)œ¯ÖöG8)Na‚ «D^ É 2 ¬üd²ÛÁ)y²Sð#£â©ÔÖ¬ˆj§| +‹»šì”×”°jaöNûBä˜9:¥Ê¿jL>\§ðÑÜ�#Ñ)ï4ÒdcÕNiØí°Oá·‰ÈxÌÄP+Q‘ÃL ¦EúH¨´ÜeAZ˜|J@aˆ­hø”¢[®iȦ=e×'`¬kOI_\ÎÚy¢ö'“×q̧Jòf×ê)•ñ‚e6ªô™XŸ­²ú”LžÎ)÷÷)yl|Üú¾} +/T/ ÎÁ *S7OÙ¢Rñ÷½ÉèTø›ÊÌkBîC96•¢¬l@S!�¨æ·ئÂÊaÞ’j*5WÍ CfS9Ú¶)ŸÊLy{`<•æésp[Ù,OEXH" Ê~xødfRÑ¿•‰2¼žSØ8ƒ¢«3%ôuTZé'ŒZJEª�^åM©HÿHïýx•ÊSåH–ƒR*ÿuÉN¨H%šÃQ‹?ÎH¥vgP •D�l�Tö:3¥9‘JÓ�ðŽTø$žT^$ ‹Ù@*öÑ·ÆÐ„*« �7Z�7¤ÂuâÜ M¤"s¼iš[¯68‚’HÀ +š÷©$H¸.Ä`+RÉ: %ùR1$^Œ +<ʼnÊc +ïFô•èm$ù™|*g½CíƒR •âw^3,¡R©™@á‘BE§tVzÙ!TFm–“>)~·ö€„ +4XBýB*; +êjí[B%î#Û“„Š)òPá™îʧ°V™Oy€!ÕΊOÚ3¦¿ˆwžR&* ÒgâXø�,w\\÷)°MJ¼zPûɤ(-e%>å'¬�lù”é#uÒ½¹OyõR£t ŸÂ!ªV�Ÿ²V¤#^…uù§AÆ ï)”§}äÞH#Å3Bˆ¨KøžòLñKñŒõîE˜¬§>¥VèÎËÁ¬Où„ë}°Ò§Œu`Ø!' +{½&HBý”¤ÊÎ]ËŸ² +%ȧpº¹B{íø”ì±#Ù1ŸÂ|‘I| +�xÇÂËOÉi††& þŸ’FÌ(þ)â…¾$ Œ±P®r#QOaÓå21ì�–בÿñ)fôÓ ÎzYÒï)T6怟ú)§ûÁ�ñ óStdÖa9ô)m; %á2ÌSL•n¦V“{×F:tJwéààfùÍ]i•úU‹S Àï)2õ1qh“ñ”§@L{ÊÙ§2F¼3{Ê ‚ú)qæ:éÕø�U*Ø`*‡¯z ¿Vœ "È2ž—*ݬM# Rɨlc‡dîÇì^B©g�‘B;Ù'8�JC¾>N�ŠP!WkòP¬!›NØó®/*gZÌ #Á¥¨0‰(ž+aÑc}`%("ÅJ4‚¿g¨üW»XCuq•C.¡§ñA%¿,_w•n‘)ÐmN‚JRÌxka*Œ,HöTÒÑVæSZB<%hÈ! ="F±N‘°è`q©ûš"»�¢À~!5¥bzŒA¯5%Ó*%çŸb†Û”*kŒ·Dˆ:lŠgz÷y–@ˆ“Ã1º~éöªEH«Áô nSj µ%Î(Ë¡j€ôä뵋Eä+ž–p¶mˆ‡†rÄ–Ú¤Üm +-6Ðw¿)™ShAY„Þž6 „¾ÐM¡Å§„ÙM¹C†¤¬£j +™cÀ®)¢aNùž÷î¤|©ȧt8”[e˜œ*9pÌžO�ŽùBäÖPö)lø¸"} +å#ÊÛ§zŠ\eáî_{ŠTC] ‡h=%U8¸ÐÿÝS¤BøÖHD×S’%)EÎ{Šq/²ì”8]±ö÷”>ªZH(=E‘ Õ5 ÜSdöµðž8»§6æ9�D¾Ì"‰©§ írâ L„ì))Âå&6qè)è`»%{Ji„¡´Ý¬ž"µL  -¨îpý4 ·Ú�¨î#ǹTvî<‰[Ø6â2\·yPøùû—k^µ-,'hÚìö ÄL'�øà¹ˆÔË@A#ždª5f«<¡Y£¹WM’E,(’ä·Š%_ødC®‘?Å +_3r€$œ’É(3$îXh 'ÜFÄÚãÎ͵€B¹3‚o¦,$‡¯Ô; õ#~yòäJrZ~¬ÅØY…ðP*ÓÔÐ�àÑPݤXä*B0.5LœÝÓÆç~øÖ°äÁPß�™‘©4¤UÎê¤qȶö¸ƒŸ‡$q¿<€+¨ ߀zëPñ4' ˆTHɃ+8£œB¸\Æú4 +h›ÑTÉêI±‹HÉ3¯ÃÍ•ó«Ö�¤)iÖÙ ¼ +’:áÚ�0;I¨è}.“Ý# ¬à„«I=Œ‡u­=§Õ€¶‚ ÏÝÌG´÷Ú “s§{Z«"iWˆä¢C&ûüU“Ë%Ôk+æEš�cF¿^y56 ÚZ-*£€Å´^bÒ€c`áb_m›(¢xÊndµt©„ ¢f¬ïµPI(¦™P€Gb ÊD` ’òí?XÌ) UÞHq$à�ð¶ ‹AV‰óLXE}âSšƒ0‘`GñÁEÐ7˜µ8°¤¦Ž¢çÔξðØ­Éå³m7³@–Õ?'g㣞#{89¯Š]÷z¤Žô"G ‡R½"öZ:mV–é(¹&>†‘�‹€Wª”b˜âÒ‡~2ZwÔÿ¥Ä2¢ã.FIs/í³ªA¸a’ŒÕ-s˜0Òs!ZK7ƒzê8µœm�̹þ¸· :¤²Í¤£�‰U`ËGŠk¦ÐIùâûS¡ .Ê�TK¶I;hº.È…;®vº)åÝm�ø¿‚Îo’Ô´s�²‘¦¦ÁzA‹̬ò>ׄà�æa£Eéñ>ÎGz."Â`iç�lÝ�˜D× ¦Xë'¡ú¢#^ÈÒhoIY^^{ +ƒ^ð�ðJ„Æû¦rŒŠPX] +˜zˆ÷¢ÒG2yðÔ+ëô$$n’AE“ÀQXäX‰Ì“$EÕ¶v†ï~Ê…êÖßÓꞯl Év|ò¹#P%Ó©`‹J1�¼ÈýÖ³“Á·ª¨‘UéÕ�´>T:‘Ì-ž3é꼑}#S¨LË6HCf þä’˜Vcà–6´†Ž,Hqº-{�žH«ÑJ[&çjáñsŸ÷Ô'”Bï9 ø¨à]°‹¤´?Ýþp(™¸²=ã‡�'LN™4ŒÛœ¯ØÍ¦Ã%¼;OÞd4, +n±"Ÿì#þ7_�iÿ‰‰dÞÊÖ¤»Õå3eiK•𤨉@.ÑîqÁ JôTUÕ’Q�Œpê ‰#Øvê"—ôi¬ e$ÃU0 3ût�p}Z{R$¬ÈÒe°'|›�8«¤{µ + à +ÇbÍPãVÁÔO,x”¼Uq$ *ôQ2”¸È¤¿_eœ²€+hõWçÁnºcÿ8›Ò`ÇaØ9ôLMwIYry’¸§L–’H|b¢ÖkeBVŠhslºœ„.°ƒ•»/.mÐJ·6¢Ai[±¯r#ܘ¦4�ò8¨ð”š¶éìtY (äñdçäDko`�JøŠ¡\Ò¢‚7‘Hùµª2mm[̸BIAT£,s¢'÷$ÀÁWHÕH"�dÉR·¥CGÔÀ�ÃÒ_ÿØÀJž(ª)ì¤O æ£_õ +ªÿ'øSF S–”BËV¨Båþo(/Ž– ¿ð™sª©GLß &®ê‡\ênðÂpˆÒ²ð÷¶œÍ La#à»dƒìÏsT4é‰/¥€‚‡¿Œ^z{?©6"Ò&—’÷”"<”žÿ3!ªÑOd.@VUÞã~IºJ ŽRÈà¼ð–` Yñ³<ò¼f½ÂMXÿ|*ñá�&ƒw SmŽ\ïá"Né¬JŽÝI† fuÕ@«òCÈÚ SŒ»¼™Ÿñ“×uÑj¼¿9#ºªÊ¸%>÷f•ÆûPb€‚§+Ëñ¥Œ«G`˜yÀåÎ@Àå0Âý’µì0ã¡x伄¹ f3­Õ Ýé€k^ Å*ïÛÄä#úZ;Ô°3lj2JÁ›†&M92ñ7ƒ[Y&™·TV-¹·QÓby¦K”«îESÁ/tùNàT¾ŒU$QIÀ0éˆäS4X#$uÒ#â÷8sþõ †Á·ºCxñlÅ#Uë�Çz�½0e¯€FZÚ<~Þ ÿW�;‰% +âÊf�Ì'`îG%Ä%äÚ d²ˆ¸C¡_ÓÇÖÚïJhS¹ÿ(FœöäkîòEQɱš?,iúùJp©¼ô4nj2Ž˜Õ" FªŒqBô‡ÑœËõÀ¿C`AÜH…ù#‚K$Äí¯„‰S�T ‹æZ=á—ïÛ³ZÕãÔÀ@ºÐg”ÔÅ<øs* 5ï³N2È"Ž)æBhNïžæ®iß½Ô¶¸6Ü”iǯuÁž'•ù +"4r �‰š.ÖÉÀÉàEÔ?§,æXÿšTfä'm‘mò~ü\Þ,H÷|ˆ)eÔì´@ÿ¢¾üIšÔŸéÆoÂ{UÊÉÂà×HA5÷ ŒPê† Edæc²€° U˜û(*¥_\A +^ÛSVWjÉ¡bù’HL]6µÃ•vSk�O¶yE,î�ÙC6?¡‡IŠR6 ÖZcf¥áï�ºýAK¬N¿LçÀºÖMN'ÑÑCºP#„Œ» Êä‹à?ò?ÇNîàBg_t÷%ãâ Úp®/¢ìTÎC† &+s>¡/BÔ TCW8 0¢Bˆ#Â4$F,O„„Õf‰°Æ)Ò5v<-LJ8ýH` Áªhòƒš‘??ïíý\7ð-X^üdƒÀ ‘Lo’Ç\Ü™ÚÀ3<çÕ½�ŒáNà@£òØÈ¥Ï8¦§K¢~æÒa!3ä_�%Û{¦ÿª4�~‹Uƒ‚&øöø;¬oWÝ> +Ðup°Oœ :=„áµ4Üɳèö\lœ¨ ¢Î�ÝÉ›ÐHÐa ±Â +|ÎÁH†ü9Jó/¶ŠYñ=\䨽ŠÔD)Y–¡ù@Ëp‚ßÖ]A,¥SÚ W³[¹õíbªFˆBA’R¯ŠB°"]×F£õ� ”.»}ZiÁý;ÔG$­3ÛPÁÁ­ŸïTWL4¥ý …>¿hDÌSœP¢ä Ç”irŽ˜_•2 pLn) cÎ…•˜ì™@öc‰ükLOªY¢2‰5@£ömXÒ) eÁNk˜ŽéN€Êø^BÕOkR +Þ1¦Uês +4Ò¡!Ò úQÙ˜DÒ¬qé’Ï s”N+ÅkÝçûð`?»o=.ø{eÞõP2ûúc©ˆ䣹^'‹÷剡ûEu:ÌUÀnad œö»í'jêê{ø¿†Ä_ì”üžä((�) ŽÖÉY}èö‹¥ß:¯[2¥N$/kâc?xõ©íkå’_§S-žÔ™zJ{– •rò¶À´ý/—ÒЧ¾Ò]IÕSß3* Â`�`i¨žráæO‰”CõT/Õ’©D² ¹^2,�N!ˆÃ©Æ>‘8ïl'`‹™p%/ ÕSÝ>Éœ�;s´ ”¢Å0œÏ@©Á>a´g{€U‚§ ¦lª§ú×¾NõT‡àR=E¼íCæ¦zj|]�x‰¡C”G¤zª·ï¡`ù­Du©ž²ÍZ.Кç¦zÊzv”3ÛdZ©žª%;ÔqÞ¨žoyÈ–1U8ÕS…‚IõTù§žG›EÕSÆ»�gbœT=¥CÔ*% ßJM]µ}¢±2>õTu¬B´Œî¬@)5륺Í^ð-Pj=MöÔS•ƒã$Ÿxê©ò^›²¾M-PJÊÆ“P¨“6Ö¥|;®¢D†ƒê©Ìœ5­T¢zªæÖp0¥þ7c­¥ÙŸ�R«R÷¥vMˆŒF(E¹j#Ó•²¢V�R¦«l·ôq€¥ŠZØ �|FCF +”ª}ÛM=ÅSOÕQdX¦s:e[42Hi)‡? UýJÄ}0žæÛ(¥LY„Y(e«GÄÜì]JYt:RÁ—O¦(u ®�ȳkµ"(EÙˆHÔ¶ÛÛ×ÄÑV,µÖ¦ eÇ@)CE]«J‘þRÜ×ÒΗ†o)û‰¸6PÊí?G£<<Ò„´ +}RúÀ_s¬GªaEtˆÔ\yâZåpõT÷¸õ¡¤¾Ët¿RxSÓµã}Y¥‘kªœ«§›}c8¯ÕS259Òœ¿vJ¨ÕSÍ«¼ÖŠÂ N«§Ì^!ͦÚgÁ­ž*xAÃm�¨d· ÒNb,Ä´nàOwP>Îòö*Ÿ¤)ƒ«§fâZ�œ=ªî'til&‚û‰ùl ,‹BîÕS•-–T÷0§Iªzõ”µ|!£ß·Ÿæ°`Jº­ƒDO]¸(0mõ¹’ÏÛê©Aó’ ¯ +çê)鈨‚Æòí§i¹‡?õ>¯ùøö“†®¶fÀÛOÓü©-4ÛD“/«§¾óXÞÚTp?iBêmXŒÆ`èº|HàOƒ2D2D»Hu4up?%·ÔП«æÇ¢÷“á&sQJsp?U¿ÙõÎh¥Sa§ë©'Zä©3Ý|:(‡Y ÖS]3î'v´À8B°ž2…×h’  ÷S±‰ÒMqP‘ +ë©®9a=5�2X{vÂýD…åŸ ÙÅ=¬§6¶-j0‚b ë©—ÈuÉX�„Ša÷|áÄ*( ÖStÓ6î'«ŒkƒZ�ã~êü;6Á¸Ÿ61{\Qù†”õT1��š´¦Çýt%p°ã~›è‘ä�!Íu2JÖSÀò-+¾1EìÆýÔæ’n+qÓ3î§$º(Ëq?íŽÛ…h%C+C�û) Ø MEÉzJímdÖp?|¶›ÊWO툿L� ÷Û«§®X“ª¬3ñÕS¼~hïÍWO­U­_©Ù¾zŠã=ì¸_ÿzõÔäЛ؇§"—¯žz¸°€ +¤èõ¯ž‚æÞ6[šœîÃ;¥nƒûiÑ�“ƒ¯p?ý4©°7!k€&î'¦`3LÜOut +�©²Íñ_=u/b§Š›•q��û©èo´:BjÍÖSlR#eàmƒõ”Ûž[ž�XaË#ý­Ó²�ˆ®Qwôõ“WÚH +ÀÈî'„N´õB"!á~*J&ÜO`©¸Ÿ¸Ó™cÜ”Ô*5`xi5WÓÍzªºµSö©vÈp´Hщ~�• �.*�KÖS;&#þ³QUáû£ÚÖ.Y˜é:lÊzŠ˜Î}_Ð’)€•D?=%©JiGu{ed5ÖS³×bŒZ·�ªXH²Ž›DÏÕ£ —õYÕŽ” p¬§x.T NË/‘´ú•)-ÎØ—P5…ØÁ�UäŒõÔD@…KÏ¢L$¨�UkìéY¤’JžEBmŽHÚKœg‘*¿åÌï(ÁôÙÆFiaÛÂÍ’‰äÆž;Z£Ô¬§`ñÒ˜¸nBÔ>«Åy\/Z,îác˜…y͉|¯ê=y»I³›�™EëÕ{òä͵›ÕTˆíÁ$"ÈÈØþ„�ö_*)"x*Q_¢L¯–[ôÆ{3�¨ŒŒ¥Œ©@$º•R'êÃWÂe0°„ÅFÄC4By´åÑl¥DµŠÁ^‡ü)�ÿv[“í"\’MGbÌ™sgÉx©ƒÖKŒÁ2“y–÷å�²»éÇ©Iš9Ã~äÈ]UürM:Üç]8Än ‹mÆ ­$|p™j‡¬€×ΆÅçÝdûý¿Õ\öeð6ä¬ÔRØS—ÎC™½ [ ‰ ™ $çm�’ÝÏ�»9B£ �^äêJõÛÍz‚Œìã”Àʦ:ádoèk•:’Ï.\�lBuOi™ãr§f¤ÛÑâùÓ¨gÆy×òÒÑS60˜e/R.%Ž�””Y[›¸Æ¤TÎKÍû\ÕñÌ[•“}D¶SÂÀ�o%[ކšB v¨óEiIìµÙ@!ªþ §�ø/áqÝÆ}¬¶•ÿ~Fì•âÌÂ�Õ·OjÎçÐÌM\Bµ¨˜ñ6Jå¡ÊïèPm,ÎS²¦®¤ ïN·„^†Ä¢ìÔ†„zw~î£Ûrœ%J +«Œ;;„|ÞáGX²òÔ^/ÁvÏŽr2¹HKL'ù +¿žÌ¡¾¥Ó³êŸápÝ|”6ˆ¡M¢;šÞf�M©3Á -“\]Ïk-RÀÀSSB‘©ÓIË9Ú¾Hàsã)D5è©Nóiã(4®*0±–ýq §€½6ª“„|•[ºÁ}ij’ãdâ÷ô \Úÿg*oå:Ñ]ÅϨΑ5ºÄiÒr¢~ØÁÑb ˜«ö�[ާPKrIýÊà¿”uíóQµ,/é †·„ð& ÕYUkm/‹è ´·õ‘&3 ]¯ IÓ&�J˸ª7i}ܪO¢S£_†J¡AvqÀ¤îjr=“Š»³xòí„�ê´"š 9VœXKuzú†1;6]¹joL4giƒûdæ&Ä%Í“½ÒÃ3ºÞÔõnF7°Od‰ U€;1‰”ÄŒn`".£K„^„©Nêy$�&4“Hz„4êñiþ…Œ©ÿ(­šèÚ8!ÕIø WB>—}1:FfëT¼ÛÙ£2ÙÅÅ, endstream endobj 31 0 obj <>stream +êRwkÛ]Qêñ.-1ÞîO×�Ô”ôD1Ûe¶)­èWO—šÙ·2Çwi� q 1S¯ËµwZW•3æ7wðŠQ5ñU»2ó.©±Lï÷z•·;ñ;×É©ôË*Ý5^&Ó2­¬šf‹x¥c¬JÓCúÝà–©<&Mï®mIåè§µ2´ÔVfwêJ³æ1…0©“eô‡Tf­ÒÊX²iÌýj)‡‘,°î0 Á@0 ĉGb^•º´Y;Ä•8Ó˼Çj¶Ã{l_T=¾—á²/&’�4ÌÚ«îßQÔÍLÔVB3-\eô~iht-¸hÉ¿¤S+3d=}6ßuÕoå:Z›B[¶¤7/Sw]¤'Ǽ�º4é‹i˜•Aî£Y`ŠDÐàа@Áœ40ä(¥ AŽf ”4`àqÀÂ@¥ÅØÅØ�™Ú•´æ”B¥ÅÔü~³ü½îIcˆƒJªìÔìÎų.+KÅÜB,»¤šÅë¶å*mf¤$ H$¦i$K×P‹Š-’q�˜O!}*¯ÊÀì$ ‚€Q�£ +9¦Ê$¹õhO¿)²@†…Å,Àááa�‚oÐ0F]�ˆ/ˆ á 0  ¡a¡!ñj–ØÑ �?` +láá n€ 4 ” ^(<$ Àì–õ¼ 44˜ƒ0A„‡B# +ÐÀÁÃ4pp8C�&dÉŒÀP`Á„ EE¥¡† ˜Õ&L°û¼Ü,<0X`¿ûÿz‚5zhÜx$}—-Sæj½î¾tÚ¸…,ø¤‘‰´' 7s%�»Êö„È•vR¤ª/SÒ�ªä$åi 3QŒa)H9\™¤Oêá3R+é®5W²OZA=+ÒO{â€�,Š] od1˜–L:we;ž,¦–H0€,t·Ý•·˜-ÛŒ¹ Y×N÷¹{UzÅü©Þ%r2·¼Ü­Ül]§™u]¶-Ë«F]EEÝCíÃå¬#ÇÔ-D` ÌÚ¨ê1Ë“µ›}½"=Ý�ð£=öDB�üõROâð¤Íµ{�R�pòkL|Âù2âüd�ÙÅÊ`!Ì?X�ê³eñtoº’ZÈ1ùY¬k#^ºÓ&V—'óé/:Í\Th'�FCR.Ä…,ô…ò½~Ÿ4�xô[‹µwúÄâýô\´4Ò¬=>=ÚÓÅã_õœu“zNV´ÇãÉ1WŸ["å�vÒF‘ÕÄE<{Ó9hˆGj”£=ijlMu£;YÌ%m™;Y e™+úçÊì^R™l²2hJeLYÈ1}mÒ:ê’¼ôé|�é -ÝËO[/Ã<¸\Ôe‡ YÐîËX*Ÿ¶�Å$ré¿/Ú)Àà�™mñ¿Ûb%XuùÅ›y·_~»1õXK“ñÙ¼U¦o{¦mŸ]yqûºÈXÊh‹×h…Ç}êZã­æmíbwo$�P€pÐðà„š� Ã8Œ£W@„‡&,4x !�PhÀ„ +ˆp,0<,ä�0˜¿¦=Á@0�k™"‹Ñ—)}©ÝY0 ±ú¢@sŸ8•x¤Á`õFíÆ¨ª§‹9wÏÉbº»ªè“/Û DZÆô´èÇwô³¿»·òÛ¸ÅVܬÇ=륾nœ¨‡lªYÿ+K«6aWwj¨¶­§¨VÆZÿangí+ wy{ÙÎevÚÕVu8�³e[I'Ë4éÔI£ë“kU•“×¢ãsöe·³…,_H�IZ´‹®�ãH9Ä…²½\½Ç¬‰»ˆÇŠ•xl1ÆLxœÅD6²zaÚQ�QÌ}¬«©4íð Q”áá—y¾Üd&QL¾¼L÷X^Ò–R'ݳ«Y�MmEŒ¦Mk�܇ +ýh,£Gäɦ%Šù^1l]I[¦ñ&ÏŽ¬è�J›i‹i–i 9TiOHŽÞ¤,VÈaÊ´å iôU!Èb1E©gÝ—�êTE×cêÙ^¥>ïbNs�¯õs Ù8‰ƒ)& DaHºèÅ{01éþÏžg_F{öå0 ë§ïÝÜOJÓƒWªS)su' pˆà�Šªˆ,Hƒ_& Y ~òƒ/¨Z6ªbþ ZÜþ},«^ø;Ò˜üÜ žõŒÏ~ÄOŸÙqí¢÷Õ§^çmeýöO½á�]xfUCۮ¬L4÷i–ÕÝx뜨uª»ùëmž%Û]7wíê:‘Ó,ïeùD¶DÔ´®]£âþݨŧl÷»«³ä*ÕËNeÍbm5»ïÏTïú–oûu+žö Q”Bî;# +6¶¬ËbnÔÆ¶íÆ* $(0° DÒ»êâÔ“…,Œp>Ÿ,cÈ‹„Ÿäãdª#Q̬ åª5ÙOõ²;5¾+¤:iL_î_Ž�Xyô¥:‘ç YzM”w¼‡…‚ �U/7UæYêlQ’Ūf*ò\øi”F¸KJ…›J†Û…,J—*ê?q¨—juB›£q-YîÙ•ÌÉæcÔ“ªá?�w­d‘¤Å6³ôxOXj+å-7å)�߬Ä9X.�¶ ÏÚ¯mw)k‰çìï6ù¹K‡tùêîúYmÞž Å9í½‘áÜÚá�ªt˲:x@€YhH€àð@ÞjëÇ2»5Û³Û³¿ðZ럕®Ìå4öësبZ¼ä€ûq©™)O¬ˆxzˆLÉJ‰š d£'æq�–'»TÎÞ¶eçZóñÜ/Ó™ÛËÎɾ^êéBã`‹™oI qPWûR/i-aÞ*}{IS‹m±íLucW<ýÆòFYðä8ÚæM¤.ÃÆle/|K²¡.“UÈaÅKaº•äfºAÕ¬ìiÄ$r ]ÝÞÛ§fJê“ãðh�rV›÷­ÖØK8Yg'ÆÛ¡4*‹}WNŽl&�ù� ›š8Ð;K¼_º‰vµ½ý’îçØyTE�´ô[壗Qºá&Ó QPS½ì‹ì£¿ÅÒ²Oï*nxí~Òrtsœ€ãAa¡�ê¦ûp9nMÆÄÙñº¹×2 Œþ¨$Ò*塞eªHÃ@`$ E’�\.騵p2B*#Q8 1 Â@€!Ã@Ä Ça $ÖL�û ô´¸ÚÐôâåçéc<ÜOhÔ2× “Œ£•þú§³ö§<¹îU‚TmCñ6÷uHX +Lª#»áŸÁeñ%—�åq:ü¡±™Î"(»¬ÈÁË®?E�cꩺ¤#LÍîê*)=½ˆ¥mZ·›À'leF‹åx®Ê¨~ˆ²�çò:m´ábŸ�ÂÎ4Ü@h� ÆSÝÇñc¥{Ñ÷}ä[H.°õRº)_-ŧï›–=o!è©^âGû™íÁ©úçîL sZ3¹ÌùÒ‹§jƒ©rZqË3u]m«ý�~ë�(„jQ�–°ÄI FPÚ\iΉµŸ[õ^6ïPtÖ÷µ6&Ù"®AøóÄä!„P>‡YjÈãÆÄ‰‹ |\®7!±!·BÇo2lˆå»Z,êiºسU“à±Ë¯²Ž#–È~ò÷iœÙž²Üaž_yD8g&ç—å:)”0¸ýVÜpRY˜>ÇH®ž4z˜|¥xbŠüiîmûÖOoÆ¡�ùõ}/S*T‡£19»þý�|nhÊïUå ÷ˆêj ú«^0‰«ñ=Ç­ô÷o˜4QUÀÔè:nå}Ý%THQÖ(]rµ p´Ô9€x×P{íÖ 2¢>gm\• ‹õsÐ(HÝÊÄw T­…0ÂÎ!Èï½ëéèW=™f0x…k�íà Eråtè½Hm\*4j¤läx-•,N-JÎ$ç^ý̓˜¡¼ë‚Ž’ˆŽ‡DïTt´ÙÖñT¿ÊL/߀�7Ä8/šß²à°lë¨�9&£†¢™šÒ’V™Î?�dÓðÓÔSš=€~Ha±2ih8É +G�‰œâ €Qø/S’ÈÞhÑÙu>Éü/ˆM‹ÝÚ¼ÕòGžs×ÛÕ5u“¯T3ËÉષ‹Ët§å˜Êáwèz|nwõËŽÍf�‡€”ñ“Ål4\<öðR òâ¢n¿Y7õ!À»¦¼¸õ.‚ÀÇ“úPp©YÙêÆ%½­ÎèڜǴ?¸ æ O‘Q�¯ê-vê¿1vh½Ue–˜›ï€æl¢žÜÛ͖ʉȢ䑨|„išÛÙÏÈ+¡l ó9èEÍ©òhAt¿T…aú@�‚ØØÀäUTèc+H¸HLÜj =4yój‰ºÿ0•òIº‡�ÀÒ¢+È,�ÓÐ~N¡É¾l†1”š�;”ÞXºL‰ +B®•Ç"–“.8œ…‰–ø3ÒF ­Ö¨ñVž•sT>yS/ò¼»P̆©ßÔ®dÐ|s§5GGj’…Ü+I4;1ä³ ¾GÕ¶,x/#°m²ÂˆÃîÀCj¹ˆc³âÿ ßg»”YÌYw¾v:qF +­¢¤ƒ¤ÎˆDe„ÏöÛïs·å>z¬ér¦ôRf QØ÷²Øîç¹¼,>¾ìŽ�¹�¡@ç܆ÿâñÿð�feê5ï6*/‚¶)•ŒôdŒ]ËÕ•å{“Z3 ÆYVå›þÜø%ˬ½¿Ê%÷п .·ùð™Ò¼Ý½ÓÛXEб=>[šòØÈ$¢_9UtxzBBùJ%iÍü*é?ÁFx ‡NI¾uKrágp’b°˜à?¯€ˆG&Xñ�"ulÙ,A$x²u$SJQªÊ° »®KÈüÙp¯`©šÊ§2e¹”{0¸ø†¨ý,}ñÇ^AÌR•>D[)Ÿá]è^mÙ‚’c` �Õ„ÜÅp jc¢-#d¯¹Œ�ÏY^i@"Í1ÖÏKXIeîÈ¢Á¤ +=z<3<,hôà ­®‘#þÞ S„¾z“*³y,oB€ÈG”’æF²pªŸ ·Y˜-~5M$ +Mk¢Èqt@ÖØtêšS¾—G¸ûfµÜ»×šÚÉABj­ÝùÚL„ºt,`ÏTž}Ô�õ+N–} ”!ÕoÞ/þM;B¨âÄȳCGpk�ÀðôïwŠÏ["¿ë}„TU}Ëܺœ³3GXÒ>$P�éB×.Ð Ø#» ÆIÕXka¦ÜÉÀ¨”™Ìw7ïuÆ»¶å<òµ¨Ý¦Iš©œŽ +ôAŒŒB“§bºtiº>D¯`ª°Ï?QQMÄÑU«jBýìD kõŸhE4 ¿�ÃŽ9I‡I)ä5>!€"Üâ!¿ÂM±¢ÀÞÕ÷ Q°Ð Q÷ ]â•þ´Odð!©²Øö5&´ÙÔwEÀ. aùãý܇¯K¾”é”.ϰüÄ?ðÁ[Ù‡­«>K¶ð^0ˆ <ï¤öXœº’ø&ý&®NÄàªöE¸5"¹žMŠŸn…IÖ>ÃßÓ óÿâä^­Sgþ`G¹(ŸRá/ʦÐÑúÂH.,~Ù˜](À˜¹Ò[õð0¾v�ƒU!tÓ5|æÜpbaËÏ´W‹¨X¶°ÍŸJ¸Ä93(²—¾ãFÓñEóšé W $çˆà�9˜/tÆ<ôÕ±FD±Aæ¸ösä\X-¹o�‰×ùèƒbhó1¯Àƒm^VZafÀ‘Žìb›eÇÑ€Îu‹K¦ø¾ImŒ5Þ +©ºp0H +ÕƒÔf)h :ó­ýW ÅkêTõ\$ëÖÎÎ%ˆŒ*È–a}±AB^õ”€áÙ—äª.ª„ÆRÈ$ñŠ_ydGËì3—ÂÍoØpê['ŸÍé& ç˜\?L1bjö +3UèõVgô?+äóU‘´‹rHxã+,CZ.'PBTh5~®cu•Ä·<3åL'éÚH"Ac=(w"1ž©Îø[®Ü_þÃo\Ïcš©·@lhcîóz +®æ§NÃTVª©4b ÛÄt£:„ˆhT,çµ*grÅ- A5û@Ÿf½¨XßJŸ` ,€ZQR³u#:‹^°d3Î�Ïø–üE³ê–ý3›ÿ´.§åuŒÙ¥C¶ä®Jë­Lø_˜nšû‚ fD “—‹ŽÄUáj ½“LG�lK¤KRMÍÛU²*Õà0Ë/r ü)ΩüÆ÷r3mÂp妓‰uRʈ?îGúÚ¿xÛrQÖ^¨Ÿ”sY¼[eg;äB±À©µ_š½ÿN1·zÍôarKÀ­W¡n!žQ…#ì"í<kC}Á%›dR'¸r<²²•p ñõj2 á6;ËàΕ˜™²_£ +üsíÖ�É(�d£Ä±ËÊðT8v‡Ò=ûƒßñìòzU¥yí¸ƒ¡¿�3´Ò"©(P›�Ã"ï�”:õÕz«âiꃻÛÿ†‰oŒªU]_S[ºþU¹¸À:¾³à9Bº¹4N†‹íŸŠ§®[‚ˆ‰;ëŒÂfU…Œˆ­ia mÕ‚Õ2ɾÚ÷ª•—#À™oçî³™ôÈ +'ŸaËSrfÇœ�œ›¼ªG^:Q�f»FŸ0x?�¶3%:ÈžJþ1ªaðÝ#9OÞ!�á飼CpF ¡,xÐ/ +¹Y#3‰™*Ž W3ÔçžUHI8p6ÌêmkÑO˜$¯Øé÷l2n"ñáÌx)uÜ*\Ä Úñá'7¾Í{,²&°*Jƒ“ &T[Uè "¨~Þm,Âü6.œ*™M›,�Ŭ촠¢…âg&e¶ùÓÂ×WlTuÅ‚î®ýÿðJ8�3l7ªæ¦ƒ»1\lOSþP}¸û?¼›·Kž´›¸W#“eÉÞo"ñ.Ú6¢éñË9‘jÍÞ@ŸPÔTúæ”Cä_NôÀæ'¨]«ùsAå³\–$CT»£ GÍ ¾�S/¨ÿ¤Pt»Î UY)›J¡¿ÕÜCŸU‰ÓÀxmöÃK(\) ÃÛN…ǹ¯Ü(€]zù8¤Úµ¿öbkv’"WØ£UÚ¶db @*–8qbø§ZÅ©‚ļ÷FB�¿ÔÔÇ™z ˆx…ó±éÎ¥#� +¢ �N‰S’ªñ#­N÷ßq o>q]tè3w>w1—œþ%Å–ƒ±?P—âwõ¦0“Ök‡¾fÜ1RŹ HV3‰…‘˜¼£4äõœ’jeÓýE’Xrß�VÆý?mæSܒ൜Ës‘ñà_#Ù aéšù£‰k¢l*’¿�¡îT¨>mG0!ÚœHÅ ³ˆtûMÑõÚ6QQ£ÄdšS¼¥³×{*HÀ,·…­p¿ÄÚüëŸ2ZsËë·ŸWšøgg–Å�ý!ܱˆ�ì6ó‹?Å[oV†’3<üÅa±p, øS@;êBv~Æ„|e þÀ‚Ò‚Ž?? cÝNPý_kJäÿg”ðœ…?«ÏV§èîpß >Ò–ð§’ ‰�ÓNY�ÈeíG{ü¸ñ@ŸW6K9Àpž@ùÝ®ãï´A‘qü=Šê'p…^joú‘Ç5Æk>fžK +²#º²¡PT€gÞ_e&á·!Øß`ör�s[àé?üÁVì†D6c{-$¯¸û«_Mý3ö‰ ïF?èR0½Ü¹w—ô³š‰°8ªûéçܤ²‚ýôã‘~”: �Œ~Îýô2äï®»ƒS†Mnx~’Œ�ZWO{~Ü3 «�þ–íÇo˜�¯×çÜÉÎ`“íŸÅÆ@ÔÎŒT¾Ô ØmŒõùmga˾rÎÂoé2fžT”¦€‡‡÷°ôÂ+‰é°Jep_²Œâ|l:Ìmê:ŸËöE¾Ëm8H“ÈÛóXCÈyg|CÍp>}¡  ,!?šá:{�žt`¥Mjòwà÷öÎ{6Ó‰îI…"ñš.¼=Æ2¯Ç»ÀÍÀ0¥=~·~D½…à«×Ðð<×ã÷¾üqüJ=o¹O¹Øvp fšÏ†@šíRsçakº +?ó¤Y]’«>ñÔd«† +•V+g+lòPÛw:÷íãÝÙèH ¸‡�g‡É_íï”›mg - �†` }ë°“†õªã †Yñ vv†I‡¹LÇÓóö÷’{Lg"ÇS€„s“:…rs¢s¬ VR™»Nç7ž!³æ,±¹™Q•³5þƒ**'¨å8Ÿ‡ #…rúj-‰®…9VMç»9�ßfCq¶‚ƒ8ç«ê�¥óy#â{Aߨ·¤÷A#Tm_jò8w2^:ÝûÉÂvN?^סD…νÅXàá�™ÇN{æÌ<~ð`Žø�2<è7¶Õ»Ä·Øè©ZvŠdPs¨ÊÖ!ÿãÓ.ªŸ“Ly�·àP±ó$bVùŠ€Êùê±Ú°ú€˜œ‡8¨�{§hX¬�uE6jŽiF2ý�*8+ˆÕµA?L„pÚ°ÅßBøÈnØ«§¼1;l}‰lï*ök™gIí6›HÎoEKŸvÃèР»/wüHH‚br,²º«ëÿo”ŸñÝ;y:ˆ³�Hè¤W2’�KÌ(0þ�, VpªÃÌEL)Í�¢"sJ©^'Œ )¢˜–K< T½�EIiN ¶DÿÿE|äMÕå±�!ÜqZmÒŠz©2â~¾%mÃ÷KyX¬ÿ¿üw“�‹mMü F²ål’QÂ;³!ÿ§["”ù äýs©h_ØD£³Ú×Å™ù—ŽöZ\o�MiŒ?’{Ë Aæƒs¼­mÿ +ËÊíÅ[}�±iÿe4-j#Ÿ¤€‚KOò#oÔ„®£¡ÔÔ¸&Ž�NïóGå’ãaé( ž…�ŸŸ™ +‚Ož‡1víØ¥ó)˜A7]|D2�­ê5ûíèëöNžäâ 5°ð¯mèJæýqîeðö^µwí#‰ ž“ÈBQ|sÆj0$V¶ià5â`W› R™7[æpVm˜]¤O4DH]ÔÆ ×gÝu’Ù� +Àƒ¹`B©øR«Ë'‘ݼödWµ,KH +T#´ƒY…ý3®g \(ÈîÀ1ìº,ßÕÝ—.Z¸T‚&“côM_�¡ÍÕVÆë]‚²<ðkD¾>eŒ¸Øžø‰0]8; Bwæ²uÿÑw +9";Îù?Û wLà/hºFŽÿùì­Ï�Û^ »8ODª™>O¶'x–Œ‹`¼2ŽÙ|Z…DuÖõŸ†íÉíÎãj¨Vvv;z>Ø "‹áQí,àÛ—SOqK ½QTnËe¶óµ^Ë5±›õŸ¯0¬¸3óçlî4äÁIÆêC�þDtðS§Ê.´”cí—[)§ŒxŒ¯ƒ×æ{<æzi”� +.2Uð285TláZcÔ&š¶%q·©rzgš³’¼¦ ˜Í XI ð%?àOØð~ ‘ª�ì{Ò·á»Y!�X«Ì.ºc$Û\DlÕ/¾çœötÐÑwßÐ\ HËР܀�çÜ·« K¿•†÷}ƒ½O�Ú½/;5l¬±™7'GN;1‰x?ÙŽŸއº _/(qyß<€Xë†fð}Îfa¹Á¥¯Îü¢Šý!¡¥¸'Ÿó~­¨5˜Êg ðã}žžžÎΰMd–ÑOËjPŽ'Ðê ÀN ÝTvU²ÏÌ? h²Å(Œêöi÷¤\!Söí’šgê±]õEXæ_IÍ>¿Š…ª,ö<ûüðö;w*#×8Ö‡Õ8Ò§z¯oT|PÒ�xÑöfL•§Gz`�?W¦�[ ‹Ï’�Ò[YÂzûp2'ÌŸöãã°v¯�„î¥þT\úØd^ŸEâ�a{�…¯×¸‰ïV¡¹ÁÖ‡;YyÓÄ”k`áYÕÔÚ$*œ8è€L æ:´.çäüFzÙbH²vŠ¯Ð–hnk‘ …Åü»Å;BMÏtЬ×+ÚÂ0Kvûþr>Sôã�Hˆ³ë¬ið¤à�v=áyËú%½ý5zO…Ѥdê*ÞŒÜdþi2$ø£*‚œE�¾¨:”Šß<×�ŽúËZ‡)žzóúª¦ˆFc`è”Tù\Ö0¡XZy0åÜ~¾ +¯ô͈ž$1ÿÕþË52)SrTñIXwKž¾þg¬!«ypô¬vY6×þ¹6�'àSCp"­ùW2M—ôØØ9@#"Œ‹8ùt×mR4jzìgkǹÀÜÁÊyKHAUEC2÷A…èÇ4õPooЯ[§w& ºipéôˆ�je§7ÖqŠ!ÓéØì�s¶¥ÖЮ±Å¦°¼WP$xH?|mà5ô +:"ñÁ•VÆzúD:†Ã3až,êê .»i&,‰6 Ôi ð'ˆ�cÚÿ�]°âÎùÆÝä¿@©ÕÄqÕf&̩֛‹)ŽîKc[.O©ÿ%c²�¯¯+ÜC_úpĬN†“¤vaá#VJæ½6U‘ åQÀÇÍkßòzO’´SÓÒ—$p9euN! +4’qHN–I§ ÔÑ>ÜÿBHvR%9o¶&šA'ï£læÂÊ(;EÄíçÜGýüéŸCõm)çaá3²›$#sÓŠû6rlc@®ú ãƒÕèA“Á1,¡ 4P$G�Âäþ™4Áo8y¶†‡ ÒkÚÇõP ¬Œ“f¬™§âN�2؃Ù[×]°¥8ðúᆀ`Óa³˜ £%PÈÞï�e†G™iÃ:‰5QPg»›ÆµÄŒÎUBê0Špl`"Ûøw‹·Æ¢@¹_ú= ¯m0óÆ.Úh‹%àÚ“”¬6¹¶þïHr )T* ÂÝΫl…:ÈSBç¹+ÖÈÛ=�ÙÑ‹ädûJ®AjùÏÈtí6j>öÀßåŠauÆã¦<«vÍ5Ú±Š*žÏé¹o ŽÐÀ¢•Ã�¿Îžu\]Û©cbû€ÅŽCÖ¼Ó[Ðæä¬çSNTnë¤=žÌ¤‰2fƒ³Ã˼‰é€d9µØú… –ì’í€~ilìšx8r‡GâNE‡^YÀ:ÒäRéZáÔ�R¥Á8Ûb„SÙM?¹uìà7¢AâÔ¾œ¨  �„oY–ÉŸ-}[¿6ÇAšŽêÏ@å÷ä°s7qÔ�øhK¹™ÒØ{{"w‘!j’ÃÝ °hEÏL)ØŒäDmÇFèëñÝÁ±­Þ%Kvw‹ ¥ÊÍvÑB-±zi…9_4 G¡ËYšO¡ ã$=QP?�Ë.áÖ2¸Ç�^Ó�Δ׀œ¼b™p­ +‡'›�€*÷UQý¼_úÒQó˹%ßè,œÌB’q§vÝX[¸§jašŒò™�/ì Àº¥—^-HØ×›:%a4¼Ì:gÝŒÚA•Ô@¤†Ä±EV)XË;?fl—‘¼Ÿ`5ëxö=37ÄH™uHB á&IpÜÉ6ÓVÕ\]&UŒÉƒ¤i«WÁê �Î{Çë­…›CBV«ãm]@èÐþÎSì#vÜ 1©¤T&F¤äÖ„£Ô˜Ó¶ìiâLí‡JkŠ[†®ÓPµ€X�R,îÎ!Œj®ÃG7ù…îåqQe­¤Ü[vXëªC…¦¡HöhéU£3¥áFHœ1®%±TJ `k®Ïdª:z¢;:S±€JqE¨byYtúª)n1¸*’hÕÿµï'£âÍXIÆr×{s"JNj)s¢É�r/5ý¨£ ÿ7š„4£â…ÊðsG‚ eá5 kÓso¨`د<àh}mÉ\)Ẫ¤k•ÙȉKôeí»¶16#áP7Ïô3J°ö´Ã/6+=0á¸?ÖÒåS•9ïr ýA†4úv5—]!à1*ÛI1Ýé¶/»}ADVk.d]¡÷·òÐ3ª72Ñ%Ⱥx‰1F:K˜£$€‹w\@jýS(Ÿ{8‡F˧w%šùi‰uc:hDk8<îej¿Áo\Ëœ²DƒZLÉ&i±ÖËé�àTöüÑ‹ÇèSø§îl…¡éíc™Ò{�ÓFÚ0æø- æÀ66ÞPÆÅ׋”vª�DƒiÒe£þh.TN�Sðë™ô¸¢EBc–Xá«‘b(ÆõÕZ„ "èÇàywwÑb›Ó¼¥W lÆŸ7ôÆ<€hð½Èž†I?³„J”1Uá'ïàjPT× /tt=’„vÃ1NòÄtå\ÁÈ}›†ÖÍýÔl<)tø+۬·8âÀ�( úø“ +ܫҒœP¹Bé.¤È¢ùí©'cJ`o%Г§Yÿ˜ð¸½ãN‚†hGæ1„VéGnÇÁÛHÌ2ð¤ÄÊuQ”Q'鯸C)»•$Õ�‘=ôÒ_7ç˜í‰ÎVÔ:I¯ÏüÅ™0�²€6E-¹J�±6¶¨¥’‰6¾›ù‘›¾Þ/8³F‹Ö‹³Ò›Üƒ˜IJ©.æœ\¸¦!¶`ÐŽ ÍGé{ÕB6Šh5F{ÕŒÑëTÐÑ4‘6šNgü¹ÂÑQ,”äyÅ)¸¥£bš,Ã@?6JöLÍ¢ +ü «›íg]ªN ñdìà5i®ƒGÖfo¯YìNèø¯ÁîHöáÉp@èH�Ø&öècéYÜ#HˆKf‹ÖµV^fÏ£�4®ªÎÎŒ)�ªñïwÐECªÍ1 %�¥UDáÐd7Ùœú¥*‹¨®c ƒÒ¸ó|ÃQŒ•&Gw5¾l:¬÷ÍÚâí»Õwo|ÙtÖfì½ÿúçüïþ-Þ=ã}sÏÝÛÝóåß ¨Ó÷®­í:ß�}κßÏvþoüûï¿s¿»õ[Ûþ9î{�·î¶{œ÷מãë3×ýZ¯¯Æ_mñ×3×>ïõ½�±½Ýsœ½Ö矷æûû¿wï—M×ûÔõ¾óͽwmíõÜnü»÷omÿµó}ÙtwãkßùýŸÕÞê|±µ|ûŽ·Þ9ÛÏ/›ŽcÌýöÙr¬µ÷~cû;÷š_6�­¡ºÛ=ìC†BdûYëmö6÷o·Æþw}·Ý?sݽß:ë®/ Ž‹ó·þ~‹ñÎ9ëÿY�³çŸÅßœ¿»ñgïÝyë¬3ÿ}{�ïïÚrm³¿úî›ý¿çœ÷ÿ·ëûnl5Îû³»_î/·gì9ÏzÛ‹;¿–ßÞû¿ÞzÜ}ÏÛ{¹€:¯=î¾sÞ¯¶k‹­ÏÖz�»Åü²én¿€ºìógwÆ×ÿ�±ÞüÛ¼½æ_}³ÞŸõ[wŸ·ÎÛ_6ÝÿP·ï½¤xgÛq¶ø³9ß«u¿:ç½?«m¾vë߿ƗëÏvÛ^ž/Þ6÷�³ÿÿîεåÖv­;ÿy׸c~qÖùâlwþ_ϱÍY_ë·ÇØzo¿ïxÇúj»³æ=ûßý÷6Ûû/›Î^@�ß»k;·™c{õïÜã¬ïÝ8_Í·¾»ßŸùµÝc½¿{Ùt[_@¶w㛯Þû~kýÞV÷üÿÞýêk/ï—Mgñ·øÞ‹oï¸Û­»öœk}u\ÿ|ó·ó~3ÿ6ç�½¿—M—ïÕŸí®þÝîžõî6wî?Œ/›îöÛ9矽ŸÎyûË/öù~¶ë¾ûë­ÖYï{û¾—M÷9×ÚZ¬ñæùj½õgùÞÞoþ;¿Wçëyß�ï¼µµZk«ûÞ—M§­æ{{‹½ÆŸí.æúsÝ·ïøíØÚþýç¶û¬ÏÛc�wöùŸíÝ÷ÿÖþÓý²é®ß_›ïã½íÅwþïÔY}/¶ùþ›óÖ¸_ÿÙmoǼÛOûüåŒ/ ãûY}³Ýœÿ/·^ãn¿¿/›Ž÷»½ÝºãŒùÍÞæ¼¯íÙæË¦ëú^@]×ø’ràý?¾Xoþsß]ãm·ýPw5¾|ÝfÝýýïÎóeÓy|u=ãKʱõeÓý|uùß‹þønÛ÷½¶ïûÿÇÝ~¶Û»c«sçµ×¿k›ûÍÝwn¯µø^�7ú[ß·ÖýÛ=ûL‚8ö~žwÞ÷»Ykýwæ^o~w×üsõo¦º (å@€Øó½÷ÆZwðÊPÄÃA ¦i8‚¨é�}‘Æ»š”B:æ@ZØI°×çÏîÌ=ÿ²÷Vÿí/ßÙ÷¾?ÛÝï{Îõ¾ØZ›5ΛïŽo·Vß�ÿþvÿl·óÎzãÍ/æ<[ÿ¿Æýöž1ÖÛõí,îvs®?þ?ãë?ÛmŽsö7_þ­ýl¿ÖÚÿñ¾Ý¨»]wî½Î—÷l¯å9ck»½!AæÆMw“‰¶•Í_}Þü³zóžw·�ßÿ¯ßØwüõ|ýíŸíï»ñÇþÛ`ÎAÓÕH1I—GQ¾Ý~øbË}Æ]ì=þ×~Öìlg:{­ +ëøÚû'Ö~¶ÃÜcž±™’ )J+1BÒ=pâˆÓ¶DÙRÕùîwjövt÷_�ígï½wkÞ±Í^ç{ùåûÿû­ÇECÒÑYº®ÒÑÂTCì¢ $'Øúaâ@±sBgdh†�U@LÁ1L…c�ÔÜdà¸áöëëq¿½Û‹q·ýö«3îømwöŸí4Ö›ÿ½wÞ»wÞ/öß~ý¯çÞcüýͶó͹åújí­÷þn}ï·yïÝ7÷]oËùå^ã�÷ýzß|½îkÞsßV[¾1ηc¾{çÿoë¿ëíÇÛ�9¶�Û¬íÎÝ~}»ßÜçÿÙîêüu ¤B…hNv¢²Û ά•�f¹?+‚æŒcgist9ßo�2=ÃVž%-Üt34x:~Íòìtfyv.ï÷îÏvcî¹¾ÛMùÙ~¼ÿ×ÿc¼7î°ý¹ã}õþïûåÉÞ]gþ}žûÿîýò½Ý¶ŸÖx¢'_×Û÷½É»g¾­ç¸ß˵½ˆ‘.Ë8 Ü’É©„."§%#q~}>¹Z‰Ó8Ü3qzxx؈.‡ɬrÛ0ð×9(žË Ó‰,8Ô>‡‡xxÐ +ŠgÃÈÌRš‚kºÁ+ûŒª`ÓS¢F­°S­ÕRIˆ·Zë©Që9ZÔúà!`‘Zë)¡¨5Ÿ „„ÆzÔúððððà!"œ�²™TFpMV¼&Ž88&ãá!u[ ¶’°è`Su°­*4‘rŽÔñB Z'¡²ˆy§Ê†l<uXiPÊ&C2¥üir�O®b›ÉøÃE�Æùà6_ ìÆlx³­t8`<–Ãr>ž;©µ¢“Ô×Ù'e…ŠO­µHj­™àæ�R‰Z« ©µJ4_ä!V—G­•Ö€ò�D­5ᨵš¹ÀkdÂjà”±ø¼±ŒD2O£Qk}8(´v­µÚµV +6 Ÿ¨µxµÖ±¦Ð5«Zk=µÖ+*8p­µ>œ<¥í=Dbä¨5Ñ€ÔÚaxÔúðð`–@Œ�-ç:ù‡—é#þtàTH…4£Zƒ³VK.)L4ÕærzàÇòC'J'c0® +ÛŒP?穵vøê›oI#E±rÖÀó‹• ãXÊÊ=ÃáùÅÊpŒ™â ýbeÃ8‚ã^«é>ô g  •Ý1GZ¢š’¥ìCcjŽj‚µ�üP3–CKÚi޳/%ibXÍY­¡j@xIUG”¢`©�£ G3 ª(�¥S0…¦dùIC4–S‰)hâJΧƒš…1œ OWrÂQ¤•'Ê&mè ¢Dš›Hãs— +W]à¼g­KsåMV’·ÆïXw;²|Ï2„Áî‹4c ,uRqs]�¿HÓ]íÎÐÍî‹4áëÂKTìº+;áWѦ¤ q ÁÊÊ’¬ì¤`h UŽÎ¢ia)ïÍOf¹š”iNÓ‰4 ÉsZšè q¨8‚ŸhÎ:Ì+e›”–üGÑ3U�cî#ÒÜìg?}h7ÏZ7@F†'h¢$x¦ÝÅìÄ”ùil5‘wœÏ3Çéš_L1ËÕ˜3ÃÔÆÊÔ±X&€Zk­±¿BÒ…³Rv¶‰8* ¥«tN�7iÎLs§ü ¦:šº/Òtiˆ†'ê£Ðárâ,4%8:GOñ³) U)-,u÷ön–+ZXúMIñ4Ï0@Ù…Î OsCÎƺ“3LQðì¥X ÏN@8šâ(«‘¢ I°µ'©j@*ŽbH‚#Ê¢iˆ¢špŒ�”T&v�å�u¤(†ËÙV]—’áìvÂ)êÌ2Uu�Ö¾»ÿz‘dµ6³07©¼7Ï•œq 9a*À“Újbj?ˆªq 99¥…¥ÊÀOJ K©€0íBRÓ\Ù�!¦)8Ò:Êj¤@(¶¼>ËrüÀfâ ê~ë´4U0ÜY®î9{»7þðö·ß¯u·Û~~÷î8_nñ¶îþNîî�ó»/þ—Ûž=ΟçýåÍ5÷ÜÚÿûw­ÿùkñgmÆßçïõÏžw˜_»»ÖÿÏ{~ûÇü~ÙÞq»³Å“¯±½˜çï1÷ß¿X㭻œë¯Í¹Ùvϳ÷ü^ì·Å“¾û÷Üsíýÿ´çy’ùï�ßöæ›wßcÞµ¿Ÿþ<÷›±ç=÷�ù¾_Þ_wØzÏ5Ï\{íyþ÷ËúÛ‹9ï{¾¿¾=ΙïëµÖß½/Ö7wÝ_œ³çÜ^ÌyÎ~sžõ¶¸ÃÝêëwß½ßfÿޗ㻯½yßùç¿YÊ:¿ûÅùãûrï1žtÝÞ;éx·ÌBT„÷þ“Nó=�yh‰J•«1L}Œ') ª›�`KO�æ™$ÝóÎz0<5fyr¼™3KTÖÀ\�K]wïLñÁœ�iˆ€†ÎÈ\¹¹è&wßû}îíÅ)-,áÊ4-c2qD/4§¡* U` +vÂÑÄ�h%@W¦hNCIF oªN0Àc’ð&+GæYÐ CI†æÁ ÒÅB=-(8¨ú¸*Jª–B¬B`QðŒO¡*`ÌØë… zœW•]/Lla–°PˤJ» ¥‡‡PV$+„LÉVA ‰`Eð8AÁc)t\}ÁqÉL·Ú�Å94(„ø�C; žG0`Ñj¡U›‡Aƒ‡Ak™06Së^vëfY�¬‚«BJذ-„£¥µÕÉQA­2+¿Š¼ue>N ªXŠR±!E5bàRŠo¥zCΤ,ŠâH=x„Và!<Ç?$Ê�/ÈÑjAº�ÂP¹WF„R€6ŒjÜ<'I.‘pÂv¡s²|Lß©óÀ(¶A‚‡klµ!¨–Mƒ ‹¬•‰³1¦V½SCBËV‚hª’‡Ø`Ø¥ä:½£”Š éƒaŠÔZ@¸�Є“ƒ„ [¶‘‚m¥E!fD€s�Ñ ú "Ž,�%jx<4" i%ÕF.„ñØB·Õ qH߆ÎGÄd’y + !xˆ@ ~²A—G¥‚Ðôû°n!ÁçÛ(–Ú`Ðø¸pÑ£©/–çñ�ˆaP<*ƒÙÑØ :ßwuP‚SïÌr‹N £qFiªâ`JXÃÉ‚�ã!"²ÓÜ(@›…ÍiMÒ—+ø›†›@cc šAÍ@SsÍ<1Ìš›ÂBÕ˜7Ül zÕ@#wÍt¢ |Ð<3ÉÌ Jæ)£p`27Îd’a˜¢‰ñ݄È $ŒB¬sÁœ$�“÷ȼ�-ØEf .�sá¸2“ ÍAàñò €HfC ˆ œ�­pX ¦–ÆÈ`f))tV´ÑéX> ޶”#iañ�ËJ¬˜¶ÐUe£JM|*•—©H¼ù!ðy +¾Ùbl>Šâ�NŠß0@=�ƒàõ†Còf($à N¦‰×Äfh‡”ç¬ß0¦ÕH  î!>³Çï\¿ �áú|tŒ1S¥V\EÙ|xˆázžÙ@ ¼C$ÛÖ&²ý8QXÛãp@;Ñ þN!·ÈFÕèÂêt9Љˆk¤]à¢#œ”¢=„=$´¯•òÀâ+äѦ£2‹as2ÃCóLª:�ÜP”pW…3 ú صÀ!áÑSbp¤qÁX#:x¸… +‘·äܨŽd]“E×öP].åAp¯‡(9DÞ½ML¤Ý¹ f :µ–U Ò‘ý€;co +V¶‡ÃÆP”ÝXÐ( #%§•e!”ãP¶bæ)±TjBÈ£e$Gãb‘Ào!Pj}ŽéóÝ´ |cŒÁ?SÂ&òY„ZnbK}·‰ÉàÅ0ɯݚ”´‘41p ÐL4“JŸD0Þdr[‘‰‰Á-†“x2ƒL’Q +.‰•�$âõHʉ€„@ôÁ’�æ�xˆžJ¤‘Ï›"š#ç�É 2v$šeèDb‰�%+=Ž(Ô�H¬L! +â òÇd!,]°d@ÂEAn:”�8t8D‘Àø ‡ŽÙ~txxˆÌ +#>HµdxpF�ÙíC=ÐŽèñ¡ ™¦TêT„CyÈÂMã‘ mR·›ÑQ2G3‡ |½ ¹r`:“ãÀòñ8RßpqTøçŽƒOûõ‚i8FÁìÖ`hpV8ÍôP °�‹ 3Ïá6.xiÂå |]å=.$“g+°�<Ín< ƒ@À‹hRî‘ Áõ^�\Ä+0<qÉYª÷�Rs‘Cn ÉD[$(*àÕ¢¼ Êg°¸ ’ÔbDL‹‰&‡�Ûá,ªIÂ,`¯¿À±ê^4�,va-D5ޤ± eN‰EMÃ@6NŠTxˆnPàTµPq‚(P‘0¿‚¢ñP¸“KÃJ¡ ^(ÅåfPR|¬*¤8�: +„†Ô€‚faP  Î+"™±Þ•¯"ÄU…AL|(lÍP,NUBÁY�4á!De&L.áàb‰ ,²Ð!Œ‹%`UK$FÍ+a­+±j¥¬Y0¦Ú4;%N¡W)1ŠD MZø$T)'áà:`“x‘KÂÑ ð‰Q¥a'<Îtsšl‚ÁC' ›áD¬›#ÁPl ÓÆT$r ¨&BX’V™C}§²:¸*¸²Œ[MÁÒVK˜­.̃YU¥Z±*Ù+†ú jg¼ª‡°]`Õ#)j¢!ת¬˪Ú$RUQ+¨"Î@ÕG$CPaXªšÜ„TæIT_¦ª¨O]œ O…)8µ©ljä’µvieêi„ÁÔnÀ¸T‘Êd–ºPY•ÒŸ_³iÀ×v{]PHx 0vå¬\®‹T‘kØÑ[ P8[/b�R“ØW<¯Im-´$u“(ˆÔÏB‚ÔRåyÔ„1㨠[iT±OF­¶îÕX/*AG¢¨F¢2j­Õ›ÔZ|í�DƉ°¾t|µÖªà¨‰Z!¿©�šP€<µÖšŽ2µrNO­Ú SkCh–¨8EQ'÷¡¨“iÓɯ ­“ø&^kp"“ój@4ìÙDl5§Ò”%‰J3*HÔúð ðo‘+’�šLC)½Ç¼=nò80nX/‘,‹ŒÆ@h „á 1üqh¹ÙÁs(‡6ù8´ÏQi]˜ó9*4qÂ@'ÌQ¡åvÂ^“Ä¥M—6I\šÃËàÀàô1h*N—æ!"‰K³¦ Ñâxµõò\Nzzy.Ç¡A³Ùt�R]¶@ÇF‚#74rC#7´l�X,c@¹´ÜD"7ôqCCëPÉ�°!´æ\3ËqHÙCàP Œêà¡:}Œê üB–C»I� ÚÉD�¶ÇÊÔ‚ +É$= +*$¯ÑY™\PÉD +Hh¹‰ jA%“`0¹Ã_dWâÒìÇÀ‘snt3¦‚J¦Aº™nDº1¢Üþ"‹² UÀ„*xnÚ1¸¡¡5ˆ G†#J¢êqd<„‰ˆÐróÅPœðqh6T‹`B1©‡`$\¢Dº™H(µp8Ø$2)¢Ú68BËMÄC`“ž�ÁN-XEBÛâ¨,@.Ú•ÇWÍMdðˆÆLò1*£¤Š‘2ï£ñÈÛ–LÄ[À|n¸‚ nÝB&*mXô�áRé¼*%朷H§EªF1V%qib„õ4”%b„|(&KœÜB;ÅJ8CFJ2Ö4@C +‚ý«"Bõƒ„�äþ†®`×sïaƒÇ‰0ª‚3:ÈÍy !kkán�«R.0X¡Ía`hGЊ!,_A%³©4l´ŽÊPsž–Œ�繨‚Ä©,2�6%¶=!Ý O„,‘”Ã˜Ù‰è“øî˜�]ÐC¥)¶„ɽNa€Z<1 ä2¬0äW8²+Øè2*(á!T´�]p]'¹PðÒæcK£ÉRx½ðIÔ°@äõÐWtØöÄ$i RÁ ýº¨Ó»è騈$rQ"X,| ¢Ê^è ‚—Iá|u\Œ™Ai°8x ò(åóŒ +ÂDr¾”?Ô*œ§Ë˜YÆ­\À­ôãQ•¦X‘áu®PËy¢%±ø¥üñFu +2áD +™ìÈ•]4—ÏÊõAèX„×éii„òó„<ý¤��)ÑÄ.˜óôœ²3› zùa˜ à8÷Ùo2†á”Ñ·ÎÆDL(FuÁƒS·Ãu¡Xl²“Ú90Iªª’‹Ô�Æð¨6Ñ&©�àQn˜Hõ©eR/¡ü¨6žºD0Æeið’R„n OëlÒU&[ +r¥@@cS„bsjËD&¦ÅRb­L¤3lLä^‘†‚H„“¨Ô²g¤±&…Rˆd £� “Ñ*uú€gB(B>8*($�Hƒ‘04†„�ÅQÅ@FAH1ç £äÉë#Hß5îñQu„À|.-¡Yð*�ÅQÔ�,qªï›5YúŠºî#g"WF]ÃFH,t9cÖŒo”ÿåKIÄè,¤[HæJø\AJaFaA׆� �iUîTö�¨;2q¬ £]qG]{*¢®f: X¿Æ +ß?Œº8w±‹œU +a—ˆº7¾‡4tÏ!²ïàÜy0)z [[mNà�ºiZÞ$ÄÔq>£nƒ/}ÓÇ =¢nHeÇy_"(FÝùhŒ÷.Ñ’ùÓ]A <=ê¦õ‰�íû÷5dÒ:êö&PÃiÚ-&œ>f£‰FÝ|Þ ]B)”h²¨{³ZÕoý¥oÇDÝd߃{^>†±µø#Ç”£n®¶à3ÿ�>]‹-ꦾl_9=àY¹iˆº—TpÖJˆ�:�¢.1ƒs# Å +²ñóÎȧۡû¾u dgÃñŸÝ1’ù2˜¨{âUiÁîé�6–Äó§[ô�ºnf†oËÑuCç·Œ\W¶‘Ï>7ôb„"6ógè£ßuoQ£@£b¼ Èâv»f Ú‹í§û)÷“Q÷Ûß%¯è¹¢�2—g>OùØJ,•œ³³ð&ÛqÆH.QƳ»_OøXG‹,CY·þ69îbÃ¥†ä*³}ˆ:ðnB9 íta?æBÒ—r§Å6]Í.ã_Œåšäi &ÒäÞ/zá4Ù;eHê&@¶=$Ÿc l<Ø*‚ÀK ½§ÿ96:lÄ{'ùÆâ`i�újÃN´B¾Z¨TEçì¶þ;—¥úmÖÕѳ³8QvË3žàÕy—O®xþM¥¥2Ÿ¸‘n–d@¯k­¾M”×pòYFÉz›¦™ î‚éBàœZ‹°Æ•]ÆŽÃØœžà4î…LLyÖ+8 e\Ù-ªœø…Ð0Õ=œ²Èªîª¼_m5.4·…¨ÜšKª«úl (](kÿux¨ÙÛ<“úwÄBŽ>_C +DŸÇA­¸üôj´//áÂß}íÄI·Óþ £æÈýC¶W­Ò¥I R†jÚ Ó›c`Õ뜠á¢�ø}kn+s(Õ¦q¯biž ½úIp¦^–:M®†ñ$‡àCžà!½#sp3M(4 Âv¸½Æ!ß´¿âî;2„Ã]Ó-öo>×äl`2uS‹öÛõ”Ý|b‡Kíßþ’‰Ó�×6™e†nUlÅ—€Ÿ€<9R‰Fn§ÒIм}|5Øž¡È�Á?CÍѽ†€ýjÒ�•šj˜Å]û®%©P»WÇ…m¡ÔàŒ…TV˜(ª—{q&ƒzo�eØ£ñ=wìÇ� ˆŽú�Þƒy�öºòã®9ÉÕ¶Eäd±Éž<š,½àK¼`û˜‰�FÃÜ@/÷¶Ge fÜ/rŠì­}Ü-¢õ”b;.7âo X­ßÒ/[-9�Äž�(F¸Û‡iŠx°˜qŠrÞ¾*ÖQòòlªÄÃ2¯ZþÔjloÇ…Ï’$$DÉÞÂ9™ÀI¡¥êË;™nÙÛr5‚.ZºW”YÕ¯‘ØäsŠ¿ u/‡°÷àK.RYýøËiÂÇŽÄ ér%†Áš—jºÕØÜì ¶îV©zKé3eœe|w0T)�2þ¶Ã䨭+”jÐ& 7ß«¡ÕçãEy‘ã�­0â!‹Æ³îÐjK :Áz™^^ƒZ…BÇÐO|³ñ�‡<³‹Ï NfQ?ûôðŒSòò¾<þo“V +úkÂJç#Ð4™¹°ãÛܺ=–—­åƒ1,Ú%ÄÒÂÕ#:¶"ízZ!…icr F99î±Ëp”Ô~J�ji §ÜëêùÛp«:ùë&B@Óu{¥Ãs–O«ãYùê`fÃ1 +Ö1ø_Œýüµu—¢¥.ÛE³Š¾‡B:g²ÀK µpîèÏî.¢o|œ%Ô5F£Ó%9 OËÁD)»Ó|`<ï3…�9ˆŒVÍzn36-qe­ž¯K3ZРŠ|ûCkW¤ ž6VÈ +T0†GÈ9_c)OW„Å ñOÖí5Q¼¢FÄÍ7!ÉýÉÁÎT]yb>E€-*ki¯X:+)ûËm™žá�ï]í€N´›£d�|tÉÉô]t÷Wµ—ytwº8NÑÕêk>×çGwM ÷ÞTzb+vtþ¸6¥E‡N]š‰ÁžRt3ÁÑ¥ƒ[^tÏ¿6GWÙüÂh»‘y9ºÁÆàðŠîr9º�¾—û.º^Á iïÜŽ.‚šê—�YtÓWäèöÏO5ñdE×K! OÖÏ~t±í-ä©,ºäÀñüì9kÇTB|Ë?ë *`ÃTŒ‚Ãg¯ +ñ¥ E¡Ÿ òn˜‡°v ÈÍâj® ‰Ý CT/EJ1ÇÇÃúMk½<'Á)ÿw +}Ë)"Ù®Ö�:?;vþ.*¦^#㘡¢Pp„O·¬N­õLÔò†˜$8©�œVAb°ÜI¬* àkó??­ +jc«õÀBEÅΨÈ�¼@~å•·ÿ×�ÿwüäð—Eú;üð½6|{.ìötºÜ ¦2(V c7–�5oK±pÐ-®�¹R+À˜ÌEŒXSÊ8ˆ‡5G|ÍÅ=⇉¦ð¾4 ‚Ý‚d,bže‘'û÷áq’D‚sÄ †„@Éþ'ÿÃq!WÚÅÍáS·q|ÎÕñÊ¿`÷ðSãñ³R_jí{¸aŸÂ±`Â-M±ô/ŠÁ¡܃ø!föàýX$ó&ñôý·TN: Êb¸Ë=qî½–æ²› fl‚ϵ޳¯†\ã<½Î;4[„8A‚J«°Èç,ú�Í…7­ºj²­º9TD�»2 {W*~}¾MC½p?—BÍ Ÿx .…E?0©±[¤yŒ"&ç.NUã‰É½—N½šœ%¶¿pð¯æÿÃB[§ä©¡šÀ™¡ÖTsÝEz1ÌÕ˜ºœ`°¯Švx@§Ø,[ÿ«9+‚-ÌU³ xÒ›Ÿ²ènæp×�#áÚ¾¿Þÿ(·ÈÍFB©pse@õ¥…6¡ž¿;dÞZ'&aP2ŸœíGZÂ¥Ð7‡frþ/|ß@Ëk'§€EY¥G”QJ6œ¬žø,‘™!–<ÈEÁdÚòªøfÏw2�Í% 7*ªÙªŸ%`ò¥ébã¸Zb&Æ7Wƒò³2oÜ–œÄxµd…¤ý»G¨éDžÚ÷–…à£t´x‚^á�ij­¯Êî(€“¹GÀ +|k­;pÁ’ð}7³n í\�9À�»d~×›=´Û®™»p¬&­R¸ Ú-èÄ!Eä7o½�Á÷dd»çÑi� VgdþG¦–LrZ¸€ÈÖö;5ÖÌWøvÄkQý2Üû} ¡”£^÷gß�ô©#¿É$Z*>íjŠ€jU‹­B•í„Yݱæ†S:) ]Ä–ç= þ DëB-K§’˜ÙõÈÙX–O@R0ç×Úþ“ú}ÇQØ"â¡b~„&߯î…‡Ì|šRÝå80øÀüä–ê?%Š«€°ÓË3®hø@…ü¢ŸÒF}puL` ö>#5¯¥å“éc>“‚�;i7«{5IR õÊ8ï1r#dhR“t´s–—…1Ð$ÅL˜V²n( +òç ÇÇà ¦MI©­Ã÷È�FØú09šË·4¼¢7Ë€qª† +ää08V¿Pù¶Ø—l†7È»ÖaKò˜†#Õ¼š¥zp kæ€a  +©\hµò¥ym©ö1®N-CH±ÜÜ�¹åd™1BðQ–tëŽÌ?=S›ÕþðÞûÜdÓ×L»²å�»Ú(›Úð* zþÍ!S²×÷�y¼@àu^œpY }ãì]S�9+ Ô@ å]RN- ©SÉ,ÛCèœ#¥Ur Îa)Xg>ï‹3º,ºasdÔ¸ ÷`Òðe ¾GQ‡F=ä?:á0éë2óå~¯Çm°ÎÑÛ×j3ÿg1(œizãqô£#9Ò ßgœžoDb}òÄix3\Lý:ìkË*õu¥%á'1ÎrtçÐq?�Ý8Àb{ËÊæ‡l`è)^©…¤ç4ŠÔ° z ¨BŸÏƒÒÝ6í_}ÜÔžëV V�,"�Õv”ÖìkáPÉ'»ªähX?ÁÒ`ì­ZÅUÜEX†Å†Tœ•Ф@ì'ŸÖE~¹ 2…2»ñ=w“•Å^í‘ÀBO �°†Žd^ üwÅsYùQ4L‘^°·�oùU¿“iŽ+á�Ñ—.n(ð#.~Ðw2…1Äûp—qQ‰½`ö­}z /bÍùÀuÌ󢂇¡‘Ê‹Áq A J êâÚQ}8†®,¦,Oӓؘ‚Çd\ô†yRܬ¥òÐÐËØà%šp¿^Ïîˆ Á7ÙÉ—˜Å3«Æ)å¡à&™œdg„È¥��ý_‡PôË"[Þv'}Þ ô?¸&¡p?P>¯ kí ©&g ¾<Á^bwêHeÍ ÃJ!œ$¨Ï@o×ÄwRãôŸ­bx"{pæUD—蓘/„̺„«#Q…dhO–¿Â•Ž·%zE5l@.úF@MGv é°M|·ÀÙšÌM°Ã'Éê‡0ëã¡ë“ÞÁ›'¬çíÌû =MæG¢u·Á}íìÏz¼lqéeÞÚ+êø:¿&s^çÈ{í|ÜcsŽÓ jA Ë=ÜúËüÑ®Ó8â`‚p~Û +UXQEW´ ¨xƒí¢AÍúõþ½]ÁRs2•Ø_‘¤`³ÖŒâ}hkC?p œ”ÔmT‰ÈáÑÏØ5âfw¦ˆl¸>«PÃJÌ܃RÇ5æeÖÒnç¢w ö—DÒþ.÷åÂAhŒ¥äã©§ž,Ýf“ç)àø]ã1¢ú¸œ¹íÉ·?‡übžÎ>fº„YühvÝXf’“ž" +§½ÀK´½Lo³ „ngøÇ«í¤EÉ‘ŒÏ*ïœoýdz'³&Ò œ‡ÏÛ»¶’¹pp|3Ì9Wiy ÉÉ „äk|³¦$d!Ôî*5clê nõp“Ï�˜ðÆ•LߺiNñ ±!9ÉÕl²]W!?zNª¯Øîö‹�DŒ…žû?]8­ Ó ÌXÌû(}òcÀ(ÔNCÛ”½GûÓÎ-‰0D`†±|ˆ#Ü"‚µºÎ€‡Õe#îs| ϹWø”÷µ?ÖïŸÒð5áKúÙG#Kk|õŸunPÒhŠÞ7F!Ÿ"ňt NugßdêÑ/?gŸ�y”ñ ˆuk“˜KòŸ*ÁRâ¥àO]ËUªËàï9ˬ´Žvuƒj�ýSAòqÊõ9Á‡°ÒÄ%wtÝ_Í;´÷iÏCºai­¨’Xô0ÌkI­×R&ò냧ZÂì;é³|É- ·@I(¯iL^Lž=ú»díž>×âÌÅ4Åê¶E­fØA8O]xy~í/N'©ÃÄÅu°N8ì9Vg3DÀfˆn­p,MX=‘kM©DØdÊòü…bÈØ‚Ò.e¸�Ye‘¹¢Ñ¼žô4,ÑÜót²‰Väc¡õý—¢»ñͲU¼_”zë„›“ +3¤¸”.»‰e3Hï–ü í ¨"°†½Ð0fd�iýRB"Uª‡82œƒ17¸W´_,4jú£Ð…ˆè‹B™D -p_Œ.æ)ùçeá‘»8B{Á%|G`?Už:ø1_ X¨U`�2)¢¿}~C‚}}5ÑÑ©8ÂKÔXgbè÷CÆ¡0>ÉxߥúG›-ªëÍæÆŠE²¹È Ž¥–uá[üݛâzŸå¸årˆf@c'wsV¶Ù9¤�?»ÆàÌ<¦nÎ<È–‡vŠ•þ„Çžè;¯¤ì«¨—êvc<.¸Y+9Îþl¹ÌAsèÊkôö0¹2Mè70½W‚Íö–%£9iνò`�]!1LeywÔíÞ°é‡Î�x‰ßlÞaÛÉ6H[�AÇ?·"|MzâlFüB2VOnÏôzÄM„/ +4¸m&6Þ0ç/æWŒFC¡fcaOE¤ìŽCæ³&š|G£SÏ~"£:x×Jßšj2uAFDç8À´t�]:©j7Ä“°»±fªb@à=Üž”}z{é¿^;¦¾%ºÿl�YQpÉqëÃ8ܹB3ý-Ô–ÔOdUÁ¯ø îcº„\R.|tÉDûìA•dƒ<-Þ5_»æ +AµM�>’£ëµ¾ó™ßþÆ£æ_)²kÜFÚ S Ï·è«§k‹öަ2PÄJðçNðq$•UH{¸8Ò’J,ÔG%‹û[=�ÿ‰J%ø«N9´�åm!(ï` 0Qó¾ø’B-/#¯M¸ Ç?ßq[Ò¯ãa(è~6eöL×,²‰‡úÉ ¶äDx3ði[ýê‹®&=ÈôµcÚ')$ü®Ú¥Ž¬7`Q1h‹÷Vá€ù²DíäÄÕz'o¢"!Zwjñà,¨’%>¹õ34Ï·•Ÿ>|3%$¡µ2xVûÀZ ãÝëñ6²Å®‡x�]ŸgLåñ)Æ´lÐt~7„ðÚOòÓ0�öK�¼b�zP÷›0@us:H õ¼l?Εˆ¦Ho#ýãÞœP¥™c®<ª¤\åE¢ +æ‘Õtè}f;%ú¸/°›¾�÷zéÍÞçw.â¢1�h%Þ^Š¿´üD®œnå¤K6Eûw.êäd6¹cz]í�š4n +Ö¼PyDÚ«2ùKÛoØ›Ýí[®<æ�‚¸¡YcºŽ{@.¦þ…s²ÑÉØíàê)|P‹Í9» �H˜èü3¡?p…z@z\e3 ‡;\sïkÐá~9çrñÈ;ïÞ©6˜"¾Í$.q’I[„:c(æçgRÁ×r{“€ªT+܈Mpí]×ëÏÅðÛ°Ôp +(¼J² SþŠ`Æ~Hí3 tÄζQ¨½(6Ç?üËXYìì(EŽÈAl:(IË Õ¡ËE¡ (±]:WÝ-ÎÇ3À)í|ýÐV uG Ý’�¤é’•¹€r�ŒK “`ô>¼R<2 íSϤ¶[¸¹qhÌÿ×hÛ7‹�Dƒ ‚!DÀ¬ZT؉cðw ÀðÅ3�cR3¨½šŸÙ9@Õ,¡ Ü9Ù~6 Ó†›“J¸“myZN�—¤Ô]#£Ô(ƒ Ët�3ú}ô^OÙOKw“ìÜ'PEÍ?ɽ*aÆžÄ1He!ºÑAL>ºï¤ÅZP"¯“žàbæs[0„_Co*§¦œ`¥e_¶cèyÎ�¥Ñ5:˜�î„.ÍQ”^Þ±züj={ äo5|z; –±¨5ˆeŸ.3º¥pyÚ§_£òiŒávÐHxR„ZI¶x0p1Õõ%w— BAÖp²ÔÐ*”õjaÃIE'tÁ8Äí3ä m••¿¹öMx‹žAº³ÖYí8üó/ýÙ6^ÉÎF+ë™Ç ^¼nâ.„×ñö wd‹xkgº»Að£Mm¤– ùΖ(øÿâw¶P©ÃdÉ*ˆ`Œ ó±M;¡×6ѳ˜ƒKu?áÛ’·êÇSUG[ÒßYúê�1J{B]… +¶_%uŒ¾ÄµŽ+ØÖ6„Hbè'6…“Þ¸«(|ðê®]Ê5Cœ]Ñ�³®KR:‰h˜R�§³„¨U8v¹;Wô7äèwV‡È�\gWýë7€©pÂï?:ƒM°ý—> +ë8ÒøK� É6Ζ aç ¿”òÕR‡<,¦{ÙîY*�A$�9«Ó‘Jª¼gÿháŸ®ÙøN²^¶5Ö§|oâ5�AwµãbP€À_Øré®�µZþ…A¸p¢Oß¡ |~ G±ãö+ߟMQþ)™YYB. oÑæ6ÿæw¡Ï\ #¿§Ñ¥·[€uNŽFª¶„¬†²Ç‘èFO[îJVˆVX‚šEŠÇ|—?ƒ'¬˜93¨„J:[|”0£Í†-P)ð¼�KE„@0-J(09 'šHÂqj¦œÝ ­¡ºEe+îåe ž|â¥&5Òpô �F‘YÈ §g�†¡xDÜëŠÝ A‰6ä¾Ê±‰wÚƒ­*ª¬ÛÑ£r„Ý›A ÍNˆ'ýŠ`AÕHˆµúË8hKA½ë& ZQ”†ˆko-››Uš2ü@ÇF.Gl‚Ž¥P´~K•"“ªÔœœÆ0Å•îØâòR' +ù¤u0PþfËî/¯;p²0ø­iØÊ"8GÍñ b×�Ü�šFfÄfF<‚Œ;/›åÎÌAšT÷ÍŸÑÌ:Uª¼ÞJ.4Cç^¯áäj%éZ¾S�;MÀ9ÓO¬2cÂâš  âhLPLÍ›<ôÿFÄ"ž�Æà{ÝX)- MÀ�7°ÿw‰–ùw�‚’�<„‰n4îS…3nÏMLd~1§—`JÃËl!@Ç•‰óT?¸»=| +ݼ|’Nn·hâ<®ÔD—_¦o ‰¬51˜.9 }:ê¢è—óÀHÚjJ÷( s& }l“e‰³ÎÍ–ÿ!éÛ†DÓÜøÕÖ`§­J¿š?çCú^ÆŒÛÓ50ú³¥�À®™DUYr‚F±�lF›ÎSã4¨žLíhUÍ~cÅ®GÚ'[²TùÀð›îXoº¼ËÎ$ÌE¯l'±{e؆ˆšj J4oЬù.wm²ÀòOsP÷YŸáôßG\ Zˆ¨ªå"(�f'K^Í-U3›‚l8�2­U�›‰Ûí�8o�Ø!s0zpµJ˜S |Nå`@<¿Ì‰ ¾>îò.›Ó‘ÙÎwŽÉïôE#³ *Ò .r@#*¼‘s”¸‡í±Ze@¼?ÃO>8ö�á{Áé´Ë¶AÔoþ¸úsÂ˃kc +`c,v�Q0ì±븞ƒÙ/�?CŠ=vŒuUÒ v!Ý5:¸pêì]÷Áš¦TyÓ:2U×Wk¦~ŒZcS×Õg§VyÄ—“ÈRÉ‚gÝÆ©): b‚} +âÉ>;!\å¨~ÌÔê2œKáes]´ �p‹Çܧ‚Bî0²e$:§6.Ñùབྷ1€Ã:š{:hFX@c¡`w7þç´ód×¼-œì@%nÞª8íö¨Ì˜±Wœ;¬5óiç”pv�sÛÆ e#[9 š2k†½W­Œ³aù¾­sS7(=ÿÆøkÀfI@U@Aáñ1â�#<ƒ 껸®€¡& Ï;@ƒò+¥3n¿æ˜tŘlô+?�¥šÙS(+ð®9g䣰ij.úc>W:ûAçÀ†ž•&¼KƒÖ%ê•tþ®& _`ÌÆx�©Zß=?òé¼r׺µ˜4vmDúïoƒ�Û0úêm +ýŧ®Pï1ËS×€ä€4âfÊ´/5�$d$Oeo_Á?¦ÓeÅ9ßÈ›(QzIè}‹BÔÙðNWEF:ç÷çá&³³Ü µÜ+;óÌÙM¾í…‡NðÈ p…U’…j@t +Ó!ÎE'Éǰû€>ò™Š ÿìØJA®W–̯9ìÈ §TZøpIÜFPqáhÖì�ªÚÁ!�)ÙjÛ7‡ðun'éLp0Y-å¾ÛÃ5#°ÄÀ 9 ³ÄÈuõÁ½®œýyO;WÖæ0ˆSØù4>u21+¾�Ýt“¦üÜ]mq¡¥j^wù&¾hgð/ÊÞþæžÏã˜;xEÑ�üüöT ÐÝl‘¬ýÄß�‡§«‘tÇÆ& ¶/;‘~FH¸ð­Œºijüݪׄ Þ¹�Fׄ®ïL¢°ÔÒ2×[fU “‚·ƒŠ"´®‚™�Á¦ M{T:¥#k¨d`Á)æ·'QÍ‘ã#üy{"¾ûzŒR¢ÙYªPŒ€aŠkV�YÈþ§o¦—Úƒ¯ç˜ë/�<_ðt%P¼*äâèƒÍ:½63g<‡Ù²ÛåýBp×”Ë4ÎëaB.T� Õ"�|tÅ$ùˆ%–âù٪ࡶì±_;�½io@¿ØF®Æroµ-Ñ"’¶ÃZu�ïç-ü‘Fš³†ŽÙW×€À¯áÅ ×)@×°ÆWŽ@eàN•Èi“‰ï�-̰Ax—FàßgPd2ST. Þ(sk©bö´<®4R®Ç±åÛîí FmÒróÙ]kf D"HÃ~vÂN_t'èÙ Pã û@‹3KµÇºéYŸÞØSã�–=5ç¿‚ÝoŠ¢ 3xI*pgð9Ô +õ•Ïõ`JòlÙƒ–ºµšÃ`àì'(”5¤À$Ü©4ìN VXޝçJÓ4bÔ¹�jwBý(­ËwÀ¸Ê}²ÑãŸú:& ÚË‚,*£e¶,¥*÷†r sÔg³EÆ›7‘˜í6ø|_ø†ÕÎâĹ‘´,DÙàΕÞËíŽ2�êKVq51ºŽE™�~º`@æö¸ÕJ|¼x¼‰k÷¦y�éuKûʱ—„ÒRÄ�pä[Ö¤#q›3uØ@qlÆ\“¡²b+Ll–\%j‘F'Í)´qïÖ÷ chtK|ÉW—óÂ]�…xc_+ÜQˆé®Þã…ös½fFÓCóÕ(~,®fé{8Õg„TÃMßyÕv?O# �Ρ�ʆÑ!o"-Áûztå&I®¸^Ä"ó²…âÚ´˜Mï—krÔÃýL¥Ø +&0ñƒÚrð…Ú†�Nàu…dÚDZp/dä5àÞ©&^ø齸mÑù6[—�À]4LMè^|bH "<6ç6Â_ƒrîÎÝâ"p— D0K² —Áž3úÎ�6ÒÇ[Á°{žV¾ø‘-ø…½ ¬[zùbG˺R_F±©¯Í·¢[Ú¶aÎ0“¹Ù àXGÏøØQõˆžÙõµØâƒ#–Î;Q„èì ú/¼-·t÷ßíþ>õÙg§eZø7Ë Åãk2g‘Œý(MC�¶uüA÷ Í@äv-M ¢¾©¡tGb�à¯ÙwT iâ­8šy¨az zƒ¾hôIcܶ>µó& +:ãôEëböàà4°è°YUÝ5KêøC4ë½Ïë(úºGÿÞŒ|k€Psè b\ÅéS}Âߡޔã†õ:”-9ÎÇä7ÈI]ê c:š¤œ9¨Ž‚.ƒQz{§Ô% ¤ûÈ’j‰Hˆ] +x@Ã�¤»“f3†ö�½2mÂu»§!ˇ¼Ñ©W�^jlm7ˆRt=aÙ{!éååêô"-Uõ6۬?N™ËS¢±RœÏ‡tªMÄù@(+ØÍ©6ªáÒ­ º.ø"ä—Ñš át9O†õxï—PBmºÊNl‚�Ų¥'”ÇŠˆŽÎó4·µ1Ýv4ÕnÑp®çˆ‰œq§•5¥×NP³][áy¢C›ÐeŠC“.±QDõbïÆÆMEBÐ;ŒM« +íSôÖøuß /Û¥š"0NXùclJ¸\ÈTZ.0ÕƒN+·)¶"ä<Áø°¡£}“HêÒŒKg F¼õG®‚&Gü&ázçú=°]H¦XpˆÍØoö¨j{šF,Yïc²aE]Ðw–—fÀ›glÿpƒ} 8pyá…rKÇÞϽ‡:äÒ––ý€‰¶ ý»ÏU¸ »±èqaê™(ŽøwÅ$„¡×Ô´àBGT–š5¿þ%ÿ¥VB¢ÂèîRR1\�qòŸÊéÂVE*mÕÿY¬˜TJ§R!D;¸k±€Xl)½u™Dÿ@×™9’¬ +�ÿ–räó«„Óžê›Æ± Å³ÛIÔ¬ã…p® �¸áæ>ÉEÑQÛ? d;=¬g˜¥[ú,²Ec#êþ2›O®›Ð Ðdà‰1pª?I�iftÝæåbS­—àö9��¡Pºd‡ƒ9Ú+^Œ®½dgf½tÍ,IE©FØnVv†äŸ[ÚG=cÍ 6Dè…ãäNIè®Nnß§9po ü3ø=š‚Õ­‹Š"Åæ­./:¡l3¦;G¦/©' àVµ,=]�ÅÉr»0~ÓÉ™xåXR¢ÄòÅŠº³�ŠJ—N]Á�ŸÛǺí3càžB�~=åY~ÈÕbÐ rÈ€Õµ‰ÁÍŒjÄ…U5?+ŒÂOƒŒ‰Í\a‘F‰”^´7%O¢�åJñ†/ `4s·9 9(Sþl‹�o¶'lêQs?8÷6 +á­—/TÔ–ÅY\þâJë„ä;vÿ]YG�#xJK¸ÞÌÒF!|&â(j”gÅÆÍã‚Êðó¹ÌM̳HCH›¸Yn‡b¾ +$þ­‚¸òÙô×¼Ó ¸»‘/>D‘mJþ“ÅWU`Q ¨È}§Ñ¶ƒZûN½�‘Ãõ°Dù¨¸ŠÎ/?Ûlê[«ê’H�\äcá±m Ùav"/s{DÎÖG%ÆX½Þ„FÐÚsZÅÀf·nµç_Ë+7vâÐÛ_Çq¸ é핉J¢€bI(FŠä'8�¤·ú¢Î~�Âp_[�\©÷p2�\À+Fæ?`n°x$íI4‡Ë‹Ôj¼w@Çmwi§£`Ÿ=T|ñsRœ²¯’f’ÿY4HààØJQ¨ÇÿÙp’ú'(»úNØ�>¬9ÆåWÅk¥á%_æàÎ&»L+ö<†Wp}ñ“½ ýtx¢d­ ++^˜Ýö¡èWKJ+wwš€×Uþ�Jiß(7@Ö=Áh­*޹շ#^M‡x«ÆbsVó ëG^P¶¨�¼ÁR>Fj #þÕVH‡AÔÍmYæ÷ #ü¿–Å�ÀU¯­}6d«c^¤ê ÐBJÖ«¹É�5½Ô ì­:î൙ŒÉ¾áãýáØØ2G*_A÷ß²Ûsl‰újqêKb‡ ÑÕ² ©gÔCWO¡ŠtZ5­™¿Ô Â½òÙ�R¢RnoæqÃÀdF�-þ›² bø®/ŸÛK¦±ø|¯jÑüÿn|p+ì¨#ÉiqA½Ö²šŽ]¾øj(œ/2RÔõ«E‚,ÙB @GâO-˜<¦HmãõÔ¯�ÝÎ +¹׊è™kôs½”Mz ý‚gXô §¢tLÕ–èg€Žâ.t*_q÷CUª†‚#ôL¯®é +Ñ£W +y�D~ý.ÂÙ!ƒgêKéÊŽNÙÍ;.¾z4Ÿ½þ6åÖ¹£¼+j_hS3ÜìÇÂÅ«„Ó 7’ƒ_Ãýƒâ­\?Oš9M}�5£E*Ïqº©X.ˆ/âÄ÷`Ô Þ•‹'â�Ë<Á¨yZZ ÌJéÍ5†že4DÇ| ¨H+ƒÂŽØ;ÅmáÒ×èG€ÓK–ëê³ÙAŸƒÈðF'‰iL›‰­8�Å�„çÀ‚\Bí,` fuj%F&jõì÷„‹°�€8᡹ÁŒ•Z³Ck½¿eRÔŸ6b¸l°ŠA¾ X‡™«V¯•à–¨”ƒû¨4u µÈbðs2œ�£vv•|ìsw‘ôóš.Œء´G[D‰Ç°hΓr;•„.íÒú^©—ÐÖl¥kÆ­àl®Õ?ql 7ŸìŸJl틲¥f+Eð |ŽXÆ6fæûKGø€ÇšN „ÿâ~X¤ÉôâDKi?ü5þZ33·'#¬ï8×Î24¨m”|x¤–“A»ºØ¨R;ÛËúÅð?Pp¨r°i^ÕïO`ÁUx.íN©–Þð"ñŽ�9^R¦ b³ÜŒo ܱ Éi‡¨“Ó_�,C¼Ûïl[RÒˆ$ÓZ*UÿîÂäÅiàY�á  ýróó'‚V=ûüþ¦vsZŸÏŠV9Óéâ×8'v]tEíÑå¡x_bgï[é‰Z%Ë ….–j¨�µ~ñÓ¥OV€0ŠòBÿê kªr�ÂG†–AÈw™¦¼Âè÷Œ“m¶¦bµÙ¢vëv³sE3¹Qx …¥r=µßÎ¥0`^Î"�¨lÁZ¶5S«e%ï—:r־̎L…w±ËTÖhœ+ÁøJy-ÐymöÒeo3ÜÄTV~/Zކ‘7+:¥©LxPxM÷¤[IwY‚èÈb�õ¤ý÷GÎÿûÍòL•ûHüîgѪ¡é&é %J"úÈû�>…cóãhêW±ÜLÔ]èg6BÞ«±È—F'ÍLË…ÍÊÞR+C5cܽ¹¯*©6sAµcTM-ê™É[ÛüNóG¾YŸšœmßÂ8þð4, À_¾� íí+pŸjzåiÒÚÎø%JÇ{~©¯<§zìyU- FÜ¿û�BG“^¼‚) +H ]©ïŠÞ7Î,""R*p PˆÔ<5/Ö¼§r¡'* +BUÐ1 À�’KlX,ÌÅRR0t´úriY–̵ " 夰qba€Ò`- ˜‹@É‚�šà¤(MÇFëK¹˜6ªXjËž hœRá¡QÇãAO�ŽÉ*ÂC Æ +Þ%d„ååeŒ›f±X,0—‚wPÀX+!�Çö€2€i6”d)ÖÀ:H94`xãiöƒÀb¥$°X(˜‘\1”Iœ®hiX..uÐZ«•h-‹ÅbÑX:ȃACÈ€9ØB¡¤JᡎŽ>¥6L »� mD$@h§Á ©ºƒ‘œØ€H * +<Âp""*e´P'%T Ä£#‚ '¨ÖÇjD!ÌÅj"¥ÄѨ„$(28âAî€<�Ådƒ@hùXŠHòã²�YÌ•IÙu:+’Ü”<Ôé¨PåJˆ%ÔÉhú³rR¹Ð08¨L°‡©ÎŃÊç:``s) °ñ\J'¡Î¥ÔÒ¹Dd°ÏEÃA±¹˜4&<¦L<—–ÑT�¦ÿðPÇ;¤ˆl­�n؈.þ0"#Ì5AðÉh„6œQ‹÷,X®X$dvGôÄ‚¥fAIš ,)4±`é +Ü�†£7‘l@Tüê³2!²›�Q_@Å#'¡L!³(ÉŽÌt‚åÇâ¤Gø„Â2e!^s-J;PXn 2”¦ …a >P�åTÊSŸ6 +Blv ¨iËK„CUfaDr�€‹Ø`. +ÁI_FÀD F”Рsøp|¨ãDD² ,Wx0’�‘R „:�êðÉÅÆX²¬ž+F–gà(6 KÖ‚“ºl[íP °‡•ǃr +DJéU`ÂY¨À²å‚¡ÀÁI9û’®*B�¤pŒÂC�©�ô“B’b®Î‰ #éIJB¨³¡0�0øH@(`p4ìG„¹D§NBKÅND¨ˆ£ ›Âò­œ¤V&�B@”4£ŒÇ¡“%uÜÄ>Œ°ŠKV‡©a3žÇR‚जæXj4ƒŽ%Kˆ‡:¨aÁ’µá!O�H)ñ@E¨#¢¡!ÁP2e6Í`‚“ +iam6:D PÅFFA sY(P8‚PfGF¦Q©£àð‘”„Ìu¡*pЈÀDzâP ¡ä- [¶­&ÀŠDÜBm˜6P$Ì¥("Ù0mL¬’I"Ñ€4 ’�„ j@ ˆ$W› 8MœTD $+++*¦ FJ†éRÁÀQ¦%càˆNZªÄ0m + \ \�P.H¦‘RŠN*,ä¤ZU�4"¥e +DJ™á �æ’P‘¸0£8› –P f • ·D¨BD‹Ê3àV„*`.Ì‘é°`0,+­�mü¬Ø¿Ýú¿a¿ª.ú+þÿ'¯ªc{íEçéð}ê[LÏÖ¿WJ›×—Ï¡¶Ü'ÀW—�Ãmìú¯”Ëí¶Ysë¾_MÝ×Õ«…Ó"zõ½21/ò•R\·Wö{­x{ïæëûYÆ­Ýóuåd篮ʻíþ©î›çûÞG÷Üeúüåwÿ.ºç^+ݶ›ó²¦óãß�léûÏú¾¯±¾ßæ~ßarê•jXÎlïñ}ÿóœs×ʤ©ïÜã�·ª#sjSW‡n7c^m¯Ìúû @º?6€“TÊQžX#§NX  @äFS÷Lw�]6›X*U'o;uOU—KP ¨TPàÀ (š�Z-FN, ++E±TFPN%HdàT‚rbI©,@ 'MæÊôoÛÖÚ;vøÜ³æø�_«ì†íï#àm«k¬­5Tþ¥¸V¿ùÚ©rl(4Wæ2›[ÍwŒÚºƒ…Å’6"$À#›0a òBÉlT€æBeR@ºŽ¥À)AyÀ`®”‡Õ+4€ çWHª �òÌ “Àð 0"�r$DPÒ£¢VJ+y¨Ã� $Å•gÀ %u2ÃÔ°ž’‡:¡ Jй6ílTh�˜öÄ”R±É\ Lxsa®¦ Ï%SYñ\L#!žKs:4O"Ñ”<ÔQñhYA±  Z'(–ÉŠ +¥‚B]˜dd.­-(àhÙ]X˜ eãd#d²Á¡ÚuVP˜Ë¤²á±é–“ +“ +*e%ãrÀäÁ¢ò¨(}Œr#Åc#µ1QÊËj£ X —”ŠÐŠH¡cÀQU„:+! &-ÔÆ‡‡©eWB, #¢ ŠYÌeò «ƒŠ�¤Ô$KÂåÊ…'ÔI CÚ)yB�OÈãA—Âêl +2]:(\0WËx€ð�ËQ€ñÀ Á™¸Ç"/:,�Áœ@•` J 4HÃ2 sa.Ì…&–¾€ð sm,HX¶ ÐúØ�‡©a9žƒ‘DˆGDI � }D¡�„`a�tF’˜ëóÑ€NRBNªÄP“'X¨¤Ä£*)!!£Î¬œ°d¬p.%Ó„ç2 Ÿ‹‚s0¸P`ªs¡ °°°ñ\0ç`pÁ\'¡Î%#ƒ}.M�°¹°¤$ ¶p‘1âp�à`(a%-lÁBÕ ñ€¹HDÞÅBÂA#›è<´4°Tœ�‘ÏÅÓ*i.£õ\:FB< ¦J˜x.+T2*k”2‚‚!Àå€]¡¤4�ŽC‰¼))e �¤$`—�X0Wg�„e§ãã°H�‘´•¡pàäp¦ D8|$<Ôùt2Ì%á¡N‡åy6ê`&�Š8‘ÇIƒ¡U¨’•á u8:#É ˆ$ûÂ+)eËÃC�)ÔAÏJF'‚à´ ­"TL€êø‡‡Ú¤€°€¹ +´0$J+Žèl4,—°`„ǃ"G±@¤”X Bv°)�0å]r‚ÒÐ�`ØÓ'ã8ª$‚“"Ɖ— 6F4*¡s4,æòp.2ëÉ 8©gãàñ  ÔÉ“¡D¸€Sj³ œŽ†}Ù¶Z…¡ƒŠD3‰p€Á %`|b`.ÌbK°Ñ�ØÀ6h°Y” +lªÀRQ­�M‹ +,1«À²%äQÑU, ãѧ¤¹`PR¤ðPg¤K<( ‰Cá¡g¥�$Rñ(ŽB˜Ë³ði4#ù¡)Y!ÉŒªõ±™ï€Ë”�Ý´c™)È`(0š´>ö³rÂÒ3R +Ùω E5ò Ñ …:­‘ÖÇz,8–/âC”‘N-¦�Ž‚C§.Wr�:– ”R + +)Lô©„OJ›AÊ£*�N ŠƒA)²tI±k-JªÙ—4GŸæÂ JŠ Ìõé’ƒÄ!ÈHŠ%”x°�xsu2�nPRc’ÉìL£@µYi ­0«ƒSð %AK! >zâ�"�:=ÐÁ'ÌUR �bD½8,Ï£s½›ø�íµÚ‡Û¿ÏûŒÏ»Ï뼋̫œÌËžblÞ}ÞDÿT\ކʻ¼Ëû�yy›7Ñ�w›w¯3./.¯ò.¯ò.ï^«Å׺}‘5ËÝ+óm»×Š×éþn§ö6lººOWw±ébÓ]tÝôEÖÕÕEïý—º©ûrñår&ÚÞN-~nkmäÏåæFnî–Ë�­åv÷·wcçvs3#gžýÃǹŒÊÙ6n«§/y_:~Œý°ßã|ì÷¸a§ÞcìýOÑásϱsŒía?tt}çØºã»·b|Ωsìø¹{è�ÿùò¹ÇüžÓŇÏ-¶wÚŸí˜Ø.›Ûñct©öî¡3;ÆÆævÍ�Ù¿Ãõ×zæÌ¹¬Í-uÝŸ+76lîooýî̯½fßgg#¿¶¾vfã{Ìù8ïcÜ÷ÆÇœŽ÷�âò¢ctŒ�ñykÿÎÎ�ºvÿØüºÙñ9>v¨ÏÜÌØÍÈûØ¿)fî‡ï�ÍŒÍßñÛscl®�[kŒ�¿±cFÇÎq7åçÐq>Ötøøyvö?üŒ5ßµŸvk»6gsg{öÃǸÎïñº:^dzccæÆ�ñ™Ÿ]ߟÿý1>þ»ìN-o3®;dîmfTovGå\tffÎÌû¹Fÿ‡ÍÍŠÍÌ Õa³ººãÄ]lÝ™òŠpSñ}î^Ù%—¯åî•z�ªûPuªî^«ÿç~Œîÿî3•ßp=÷=ws;7Û²ÛÇnß{|¯mæ^©ÝMì½Vm»þãç¾ûüqqŸ£?ª?ãs{¨«øÜ»DïJ¹Ã·ý‹ùt9;ßbçËÇ�ùÚÓEMܧ{eº×Ê9tW‡þŽÝ˶sèνkÅæÞ3�ÃwŽÝ7‡Í¹wëÚ:wºW +ÛqÃuN÷ÊòµsÈë\WìØšnöÍ[ÃvÌÖ¸¢gÅÇ®ìØM÷Jáû÷¹Œþº×ª=~ÓKä�ÑÕ¡ÿ«C÷ØÞ/ºweM7›nÃ÷øï¡Cô÷Çüoß°½{]§©öïglì‡ïZÃÖôa{¸�î×í§Û§è~ß¹‹îQÝo¢¾ûæ0ßéæ:¾¶ùüÞî{kï÷ßï¾gäçÈïß³ËÞ%ʶފÚXÛjÓ|ÔÖ©í1Û÷ól‹Ïñ½G÷èÛãkïÛ?üOgÔT÷õ÷ñÿ}ñ¿qÿ%þ~wã¾îë'ú§ò]ó[[wFÿ|~ëèìþèO_¾Åþ‡ù¹îë^+çߨߘŸÃ÷¼=rÃ÷��±�7|ø>kºJr‰Úo¢suºšŠ/ß;løÛb:V‡Ù´ýËö‹ÞT}fsÜ¿ õ¥z;:uÇŽ õßñº;w¨îÛ¿ÈßÞ�ÿñ¿â·CþæýÊ ›ˆ³56g×¼5úg£¿óþîºï¿Fßïo�þŸ‰ÿÝ�ìÿY»ë^«Çæ¹+RÜö-[KφÙÚ{[ÇÿlôV~ôÏZ·]öaߺ˼©­«Ëëšû¼S·½ÖÕMÏÍ\q7s½×j]o·îÖݲ5uܸuëÖº}óæÍ›7ìÖË­÷J5m-[{ÿþýûwîß÷^©lM›¶ÞkµMÔí»¿ù»¿ûÛ¿÷¿÷ÊÜ÷z{ãónçí¼�·wóvïÖvÎÛyoëvïönoíÞýîݼ±y{7lm¯T{{¯÷м_·z«w{;Toooï^ï½2ï½VìÜýýÍÝÝ®»ûÛ»›»¹·»µ[»µ{»·¹»»{¯”÷wëînîmtýÚ9ÇÍÝŽ›»u³cç~Ýþž¹?~Ü�ݘÝÝÍÝÛkgg_Yvó%âÞvvîí½V “ß_ÛÞÞÞä+ÕÊ­ÜÊÍí ““ûm¿íuÛ�½½íèÛ¿í¶{y›7պݛñö^«ÖvêT]]7·1777·µŸöÓvÚN»½â«kkw·v7²v»º¾¾ªS}úôiï•jª®Ý½ª½Wæü²=µ÷Z5g‹¶=;»³7;;û=÷Üsï¹·ïufë•ÊîììÕìl¯Uö놯ßc~ì�]ó÷ìÏ¿QŸê{¸ï1?n½H®ìu¿}û5çã|œ/?F}þpï•âÇïõë—ùã½Ví1·cÇc\Ç.ÕŽ³VÇéX;f\Çë˜#;vÌí¸Ùñ^©u¬Ž™Ó±:ÞkµŽÙµÖ2Qó×¾ö¾–øškÜÚ/~Co�rkÛÚ¶m‰Ü¸=rk¼�÷[k®¹Öx¯”ÃoÞ²nM7n¬�9[ã{~ϼ¼™9ÔÆ{­¶é??3ú³cã>7ûó£ÿ?£kÏÜžÛó?ÿ3ï•âgþ¿DûŒûü¼«çÏww~îøÜ½5û{óæÌïìîîíÈÎîÞÎíÎûîœ�óº‡ïEÙ)Ç«�}÷wklîõëtײtÞkµÎú·ˆEÝÜ{ÍÙ�ÌÍÙÙÛÜÚª�O»»cã×6ñ¹[ffÇŒ�™ó1w›™Ù¹y÷Jió¶l¯·§"\æÅåeVFeN¡2+»}û“1™y¯Œ{åË"·Ø–™Ûòú.s/÷²/û2ó.ïò./£.ëò.óòò^)Þå_þeÞ]±(û½²Ëò%zÌ»�rÛk•ËÜîa³º{ʹ?·KvìÜ+s«œ¼Wæ²f÷–ߪ“Wôúí[ìׯß{ëî/ÿqsÍ=§OßæÃ|/_¾çйwîÜsŠÏ9çÞ½sçιm·èÎÝ£;wøn¿áïsÏás˜Y£¾Ýk¥oEêÖíº]·»n÷ÛíÃ÷œkþß¼¡ã7g|ÜmŸ7’+…ß¾akØÚ'ºæ?×öµmÙ´í^©Nn{‰šw±[·¶»× +]6lï-õÿþþ»Œÿ­µ_íï.¾ç»mÝw›oÃ÷Å÷]÷Ýömßtß½RøÍ·¡óåÝl…ùÛØ[»vÝ�¯_¿~�¯_ïîwã÷÷ö··ntýÚ¹oïöîÇîîÞîíÆîmoïïÅïný]»Ö»Wêû»»»¥é¨tövº"€C`ˆ$ ‰$cú6Gõ€e(:BZJF@ŸgjcŒ1Æ�Álâð{´3áC؋ᩩ%8¡Ž�CèyUrÿ긅RÀÃ)Ûö̹Àxr�‘¢§iÙ Á𵫿{•¿,èÍQpx;3`ö<ØT)Í¿Ü ®G +><‚woâ¥Qx3w…®,uV+1++pJ¢ ûÿW¬Ò¢µƒ»@]èêaЕ¸X´$ŒêN4ïKË�„gLÿe⇡; ´¬"ŸÌI*þ: \<Øòë¸îà 0ÒLPiËoãsÀá :n °—¶—¶‚°1Æm0¹ê”�L<8ƒ‡êNï�Û9éÓô®MÃpR4]Ø hkŸ‹èµ$ÀýâÁbLI‰<«øŒÃ2b5tþÈ’ÊF: jƒ"°S•Ñ�S‡æÙgÈ I³jp¬‰©Õp Èâ{ÊM*]»ègâŸä9Y£‡U<Ü4@lÇ¢··Â,Ñp- +P¿ÌGÀà,ÛhƒZAwÀ%¬Üûõ¥Ñaq@rÅ%¦ÌÚj-Yr ‘GpÃs ÿòû!D)çLÉ8úÉO×iýj]9 qU]êò€ †F�ZjŒ´–¹3vU/‘î¥ ²Æâü”- Sô§kFÞ˜Ù¸¨È:m-O1d|¾R­µÉÍ&°D1T­H@}ÔZÙÕc�Ø÷#ªd‘Ô¡*H>aê°\™2SGvœ·ýZ«+ Öz• é#™4ÖÎkÐ 0 úäÎtµù? 1yþ2SÒ%Ä,oŽÌÝ(ABz·lÈ]úñ+üÁÀB|ÎØ±µnÀÏ fuéá®õj;/•*+÷åÏ.þ‡ÙÕSc²t^ç�Ùþ» n¿``MPwKŠw9KFP N¬Æp‹°‹iÂÖ‚Ù†ãt*(ß9—Ÿ¬œºûxk Cjz y7_w7ÛkÕhµ`A9œüç¦ øŽÍÇ´á™E0óú€ÊÑ\'½mþY¿¶Àá€Ä<õx]ŽÊ~FèeËë‚È¿i�wÂ\ä‰?Š×ÇB‹€éj‹ÁãA ¯_Q¾ä+¸ëAïºDd>Evgíó¹Ÿ@x˜* d¨ë—´©À™<µ®Wù±XǪ;cˆu}qðÖL{X8Ù‘;sü¥ÐF‚ïlAE~KÇÑð®想쬄QŒg�Lf“ýü‘L”‹RÎ{ñ®ôú÷kƒÑž!Å–F×7*»zÙ¿s&*6O�ú§ð��?GÀPøw˜!GˆlîçqK1ØÊR Á˜%Œ#jÓ¶�#ÙÔXxçˆòÉ9b%ˆOóÉjãèæùì•ÆcBb`�Rþ­t ó9MþFgœq4Õb‹oÄæ.H§nåOµFˆiŒ9MYs{œ Y#p™W†LY }M»¤ÝyŒo®s…¾‚9ïÊj 4ÂHÌ/Kq7a#R“¥íO’0/ƒl�8ÞF#N[%ðÎ\F#Ð4ëŒ�…ø4hňœ;ßóÇ7+W¢�tn£¨_LHLâ�¦ìL,ùßÂ…�~vã'à±åƒ¼±k»±°3B˜,„>îÔ4öÍ‚[h+Ëwlg¹jïBÊàJC´G‘R>)`¨1î_Ì�+< RŒˆ†ˆXa6�CcŽß!FÜ� 5F¬¹HBÍ1e¶•س2b I/’OãÙ¯¹-ý¢BŒÐ¬g Ä]áÉ7<ž/¹LÈV0O¨&õ/‹m%ûg² Q&5¶¬‚øEEÉ`)0ÂŽ4t8mŒîØ»×ħ®ôs #>Zp˜Ôژ؋ðÀ€3°Çh²k‡2 +þ…š(OÍÐê…¦±‚ð#V†L/â €B«[Ä\|§ qw?þwìŒ#_8(Aœ$Ãòê`íø)p�%ßè½c™›�ÀÏ‘½u0µbjC<¿B]D¡dqW²¸¶J'�Usr‡c…˜AEÍèzÛP7:ý¡Éú^e¹ü �ÃaÄBÔÁsFæ)4[B‚š–h+R,oÛЀ Ýgç6ô“Á–ôi)” ¨û£)9Ù¹ò)¦_%G„}.×úòýcÞQìÝHÄ)¼Kõ­JŽâù’”=Xˆü¬ÖÓâUÒÊô©¨äHÕ.Öó:+&£[Ô1TZ <£)ùvå.Ω|:,ÑPîËRC Tô�A•Í�5ÅŠÞûHÂSyòn[ÊÚ‘‰ø›�‘P�«ák™�-Ï=dÊcÇJÂÄR'®*íÇl5Ó7?ʳ…'ereå$Ê@XÍ�$㣯8.½WØ 0wCy<ËRnKEB™²Q+Û7C°rZlp6¿±,l1ǯʟ,I±BĉÔ(@Õ:ñ'MGÜU÷ƒßBD;þ¤ºnˆÏ¡Ö­ur¾ã¥Ú¯ÏYþ›êœ�•àq×¾'âÍщ\âÀ*u‚ÆE´wŠaJúü¬Ø}­¹ëŒö#K Õ|W]��ÁÔ³§î‡6áГM(˜g±Å©+µj+К]Ôr»mý9!Ù¥T'Þ×7Ut$z ]“1úˆœË®Ù+ب³~`"‡-ÂZÊã!ÇŒÚ!½Á�))F(%Þ Vàýéî¬îÄJýxT„ˆ•.k5+XÔ{ïüê¡ÿ< `ÿîæˆ +÷«‘ ‰3Ê_é/‹DÉ$P&Æ8�ÏX_Ùû–|0Ðg# Fé†ñÊ¡µÅ&¡‹òW¥W4y�@0�2ŠÕ$òû,”¿‡ÿ¿lÎ;³4ý!4 ¿¢«ôÝKÈå!ô @ S¾— Ôä{dD/ +7k)¾¯ðØLá ñ}uÃ'BvèÁýE=0Œq7:Ú^•˜¹Ð•!²�O×féêl´iø‰=)|Õáþa–¸á'„AÉiá¬Á‹¾ÒºÔáÿ„adRÙDH¿^ûBE©¹Ã[ñ«óRÉn§|ŒC+ÿñp6‚õôjÐ(eðÇ'f¨Éd_i@7³¸¼ÑÉ A¢GiÉpýx¬ ¨OË/s ¦Êå€y =á[–Ù²†¤ì«¬âª +€w±¯L»«Ö•iw»+Ñ‘+Ê­½ïõÌ#á”ÌNVŠü—îv;5¶7D2£{qÆÞ}4›P}H½Råèšk™H†Åž;Šîü 6jýE›‡ŒQÉÒ%›ýÕ€£ a‘=烈Kãë,·‰cmÁ†#ìI°¨P<´úEé×ó¾Rˆìv:xzâè|ý‘²c¾Â%§%’¸6ý2£˜§X7¦ì š5ì¦DòÑhvžÄx.>£tA›N=*Ôr±…ôî’ÿ…KpìÚ4–+�.ü�^aöD}K¹<8O/¢ ±gûŒ`1]d+«�)Q˜FŠd€ÃjÈ–ž‚×v¹@Ð[ s‚(ïÐ/Tíë*üRP|‹}ý­.A«1=Ú$ZéÜî 9AcÛaàq™BEÑ%kz�Þœ¹y’, ñ·ÍQ hy6b€)+4’Š?\8@áIÒu +÷€"�#h�šfå^‹¥{ÿO¯§iÄâi ×9)n&¶ˆA3—t&ÒaÏÈû Ÿ…‹½„*…Þ'&0f©ƒ™}fáuØ?ò[ z¹Ä‹WöôP;‹}Ó\ë;' +½áDÐ' ðJài iÑȃ3….°þ«O~¦;’˜€j\¨°ôîò×À½@í°ÆÑá&_gôNþ$Íz¢Î°"Ba¤¹A ÏÄâ³ z”0 k¦!¦¢Æ}Ú¤ÏÂzò–Œ”-iªÛÒàùó•(¼Â€‰,’‰Þ‰·Ö=~ùBÀã÷öZûÝèÈráºd³þÙµ[¢Q€–(U2=Ò½pRÀ«w´˜µØ)0ž»Ð«p�ûÁi&6ÐIÖe� l¡`A2³1üŸ;I!£Þ<Û­S–ž +ͽÃëDNQ�À¹>�6qŒQ‚ìÈ ¥¯{-âýŠƒ–ë€ðßø¬ âìÂŽ÷Êæ¿:t[¡†'RfÙE0ÜæÍlÓ(+̨À‹ ¬Ÿs&\]N|é†�‚ã8° Ò’ ï¶OP†ÖÅ“I§ ®`î`n æÊ*˼¨IRï×>\šláQóÅ'ÕeržâÛoÑè +!?÷8žÛþnk#ŠS•»®a¹ø×róû£.9!ÀÆjè�«<�qóÅ�‹P¥°®ùk#uÁçÙÔ©aRar¬óëoŠdDõÊ‚²np}¤|Ct.–¤žöËóäHô'»¬ý‡àÄ!K;Ý;Ð÷jÅÖ³Og€£ÿÀþ•p5›nßÍ`³ñ~!/ý™¼?�çöé–Ó‰÷e:›#��¢ašï>\AcçØü BòmƒFRVLR�[òŠÞs ¶�­‹Ê&)GÛrnΠL¨rK½2rô™FŸÕ/ôÆÐ½¼�Å0t¶âÝ èû´”xØwñ%xê·…Àdݲ̼M#f#A ƒú� ~ùïyÔI^½H^K1¨}�ú~š)>˜ë4|¢Bñ¤EƒHüÄ¿*la tÆy~‘³–G'£¦ÀyR¡ê6%Í·*t‰Êî'pL#DPpÆÍa2‰»x™q_4Þd~:ãNÊŠnn3®„9p,éŒ{a4’³µŸq Î !Áü’WÜLOóY”g\[™p^Åå¸�öªõnm�÷äs_©Ëù”ÆU±Ý|0]ŠÑÃ}�0Za\ó¨W6œÆ�á6_ô¹Ð5‡ÃEÓçˆ@Â~ /.Œ»Î¯ºât‰6,k÷³‘™³z¹ã‡q±û‡2·»‡íy.`9´‡ô° Æ•Jš s©§®ÍrÛ{D�¸ŸX �øâžÙyU]áa…'µÿ£ðë„ã>f5¿‹/®£÷¤ïìåå$ªPâÚAÛ×ãªV0oõ{q“ªq%w¤Åc¼ÛƒV D§øA'ÃBtæ›FÁT7F–€;¬±¸7âUòﲸÌMl$†.‹›äç½ù BxI³¸^‘B½Åcq÷ÚÀ¼f_×ß Ò�ŒØ,®½ C„;ÿ(žOV,îpô`q#¥äÊY+˜TäÓœ?ÂoÝÔUÜ«—&h9,®ZÔn¸tåw7ëÆëÿSbჽNcq}…(`¢g3e:ÎÃ=kÍâfà“ÀŸ¸�y:!¥Ç„�’,îQžb¬Ç�hýoÎó'�@²Í†}ÖÏUA±ƒØ!¬õöèÑTì„-(™L!h³�@Š(`‘À�ÂÛe0-‘ + ünO6Ôúv�˜,g§œ$P—§ +Žuo©… ä�”yÿé€Q¾gŒ9tú ÙX:Àî§^e:`M�ó€|þã¼X} n‹o%ðÛ¾dI_} ¤‘ »:²žg£•åV às…ëý_ùK tŠ�:¾A€ŠŠHÄüp,‘Ú«ë~ó£OiêXrCÏp¢ûÇMÊ–[Bþᆶí'ߺPÛÛ¨¥j¶�¾£\.å×%!öÙvé¥ 6ˆÜ0Ê¿={Âø Á? ªÁݱ àô-Ÿ œq% ±ö›EãqÈH…<ã³” WfE}pN\XáÿæQf°Må~�Oˆ_}xø 8øÊÁ/[{TÀq�ÛLqoXB¿:`Uñ ±ùÝþ8t]÷;�IÄ@o¾³÷Pà;ƒ ¶üz�ñ€”'©óõ3j³�2`€]R·s­iâ?btž… èͰžB,Ûµ×`©N}CûÖ�š7)äõÄŸÁ"Ò^ÏýjJ!Íë9Õè¸õåH7Ž´ÍÏåéõ”ý±$¼ù[=‰P(#dÿ%]ª�ü U'ÈÏ�°hX€‘WÇ4k³WG‹kiD(;k—Š ;zÐß²S*:ÌJÌ­ Î ðeÔ1� Lµƒ ‡£έ�àݹG�bͳ#ˆ.Üux„õ4±a ¼•3!#¶ÎâyÁù£K$ÔV„ëÖFáDß'$ºDÈ9RH.<’$ˆ6–ÌD"iö�‰‹�²I@ó3‚Ñ’,‚Ú>\ˆ[³õgñ²ãŽŒ¶ýFT1FT˜ýâ a1Âóg™�åÖË…0íMy$¶Fì~¦ +a\{Q ÁùD*Mû ÿùiï-„ §›Bý(×kIß$ÔÈSdöŠÙ~‚à·¼az?ç¥7Ðç[rGXF,ÅàŒ„_¼Ãxã^T¸ ^¿$ˆkñÊøí•-¼öÖ(ƒáþ ,·ÀQQúÁ¢¿~ùÁ iîž}þ0$>èä‚™ŸEL6M°Ü +�™�1_O,)r…éYE EGò@0?.tÚ@È3cx�0\„Wi=B2²û@Euååp ˆ›»âÓ2ÑÀY'¹¥£?xDŸ¡Z‚<b9÷gV­éú!E£†ÔtB�ô‰}ó×Pž.l�úƒ²:ÖTê)¦¤´�‚ã\g  +oûé�ð‹›[b91N/ç=€Þ¦ÔTÕm!ÃÒdÈõ%ós%p¼-ˆÃ}ïYIÏÁvþ׬ðâ†AÓÅŸg*‡h& å`�ñ·¼ ¦áÆh»³øo€.HË; _+·mÃÞ‚1�VïcŠŒýžFYˆš «ªÆ¨­³ÚŽí…å}9ÃtüUT®‹@È:D½çŠB Õ˘Ãβ�wÑH‹i`Õ-¸še ¬l°?T•¥¿ã8ðlÈ[0Òìs|ÐjÁaìe…OËðs¿Èe×Í䯂9ÉZ„m5W$£}µÁ•Ár€‰Ð¯¬Ô$¾ÔÁô®ZµìÖq×ã48r6dŒPr½ÙÐ;)6ƒÄ†/}5„__|¢Â "ä=“KJw{‚³?'Å#'x„ÖÆ.öd÷™é:TI�Wk!dù¥£²…üÚ +*Þ$Áå‹· m½k¯v> ¶%â .©ÅìLRn“á@\Í,)ƒI|„ÅeY#BzqØ?YVnõZ¹Y÷ßcÕCékAHîn›£ÉØkÉa»¼J8Ùr¸ü†œ²XÁ»{£¤´3uGÀ”}—ì½Pt¤3t(Q]¯•Ârƒ«°¬/Q_qÍÅè°¤"H3UóYßœ±î™ ÎÌht;†îHH¢3uü&iö„�´f€Ôù×ÐúŠÕ²‡Tý[!,Œª¦Ü8tÜÿŒðüÅùð–ïf–V<[¸²à®Ê$›qî4¥»ôœ„4Uoé—2Ç>BhÀZVlSO—’–î€«`ºpR@¤?°A+^³ä7QÈ‘ül¤×û¤}A/ H9Íšfâ×1tžlS½› %îß1üBásuR… šŒÁ&™îо~”Yt©ù0ž°[ú¾F#]®_ƒ/E˜'Çuƒ"DÃ1œÀü¿Š_Û�¹EH€B‰‹òmg\hÙÙ�Ø)á¿Í•(Ô\—‘.<Âey š#—kt—vV;ÌKØ Œ¤�ä€åÂgA€Ô‡•œÆNÎò=›ï+J³…Bø 4P%º• ^>ÏQ¦ą©©Qíz7ÿu�ùxæP¥÷zˆ�LVW{ЂÒ!ÞÀ’}²a¯öA�c�PƒÓ÷€‰ont™¶ZÅö¶ðÝ_&Lý²WãÒ!þÀ•¸¦¼HS΄;¿ýI†1HáAtôH~³W :ƒ2èÕøÅ�_\2OØçˆØ}Å8�Ã|¼T­Ç1h ÷ÁÒšH >`kÏ£Ÿ´¹®Ô³d)Z!”,ŽUªL n U�{ŠR0µÒ˺˜3aP¢+«åa‘—\|œ–ËKä3oAð¬ò_$øóûT­9iÓŸIº„Â’šivßûI*‡›¥ží’4”NÜ61%¼ŠIMtýažwídD™é�T É 6^“ˆ'ÁºLÎL2Üv#Fܳ|¾ónq?Õ•pSjMÒ·Cf|l$A„ë›-I±tEш‹î&:4VOnÂ’ÂpĦ â‡ôi,2ʼn[Æ· N}¤°…%ì6 º ÛjY¡¾�¢³Î"ñ¸Ý&œ‡T#S�4$¨Ô7»ÕtŸ*»nš™§€�±$Li� +rc˜~‰-ÙšþÑ–ª§Eâ†ýL¢rѾ@šœn: ÙŠ!ñç‘Æ°"ÍZĤ¸Ïßa0GRAêô\Åé.{˜ " -’d &­³îŽôÊ´VíHf(#ÉŒ¡+â@ûHŠñ¦-Õ}‰¿/[¤Ì!J}D$,çBî6>P–¾Vû‰K|ÉPÿ‘lí·Ÿ!�$;G@€ÈÀ±¡WmDú®_¼Ô5θ†Q„¤lͯ’A +1�ø¹è„„QœMÜÕË«)¤°8 -¡¥Öÿ<· ~å“ü§ep×ÿÛ‰¦èšZ¾^¤Í§Š¨õ%ÒÃüÓ¦‡òsÂ"A·‹XÉ]ÜÖivÉ”½§BGI~êû—�¶[˜]÷ƒ>j”§oЉHý¶ä’QRÓЂ1<¬ˆ9BN.Gb¡O´·~%ö”»È�¾õ1ï â¹•©LqdnpŸRºóq7¡P›IËMyuiÂ,UK@ðã0†—.q?ý±bCB_Áa»¶üŒ ÿÒá�+� ¼�UVô.H®Ëí®·ô Ó�¦^äëdÆ5tÚ‹£È˜Âk`GÕ*ô†ÈÝÐåá�ñaªWs^„ Ç 9{óR…H­žOÇ+^,IXf�ï­éÓÍ�;SëÑA²9T\ÙdïZƺBø CÀô0Ζ¼rL†«¯7#—^„Ç¿DŒ�å|ÀÓ¼k„F®ÐsÏÞê…ÃÀ­}0?P’‘! «Bf)…Ž¥ºücÌ zU4’Àµ +?L?f ói�"S+ +Ä%/ m~mº†•²y … ea Ê6mÁ‚¦‚>¢— (cýÛ$vY‚ÛK¦þ„é«ìfK •&z2g€;¤³H;3ƒÒ+P‡æ>ÍÐê§õÐ~":FÒy6oh,q\5�#^íê{ÒX£tÏVœÎK¶àóe‰^]E £°Õ+H»낲‘TƱ}·è eïm–c¾™Ö?‘�>ÊL“‹aSª­š±˜G)–1#$V-Þòê#ºä ù= #¦‡ò:#½9Q‘×h;7f×|‡ªO,—K�b�v}ë +½‰´F/Ôb�ø$(h7§¥Ë½Ÿ¶Ï2  •’Kj•6Jº’™)m¹0Mh`ÌÊ8‡ÆJZÇ…¹Üè’¾–ef””4‡¢}Ç +¢“àçJdI ùÈü³ÊVedr†ïcÚ8ˆ•SŸÓ7óHt„FªÍè�Ï_NÌç:¦×êФ \|C›A¾~LV¢f‡ÆÝÿYèdò/#àT¦oîž3:”ɼ£U&³ŒÕ/}«ÌçQ¿e"…ŸË�ÚÛQîÉL<8”oSÃLìá �, s™�¯¡EfNýˆ-1 ãÃÝ„¬Þ¼¸”@e€ög&¦WÍì«òÒœ³’œP*¯Áð¬r ÿÓUi:£W<ßtK> +÷ ¯…Y·þx8wè¼(oh?•ÛU4Yˆ.’KZñëpGŸ‰]UÞÌŒª/i ˜šé’…ëLîŒõÛ~’šÕOçÎôÀšìÏ”ò‹C³Qæÿ™4Í"„^ ”¦ÊîÆéhtت��7ý4c¤XÓ]gsj²Ð”�sI‚$ÿ1D“^ªyŒ�w\ÍíȬYÏ¥±¦'òæ V“ÔÚ×°æNèœCÊ}ŤmCJ�ï¬~íÝÃ…±pÜþ‹ +ÐzšQëÇ¢‚sh’òñ­¢¦4C °Ø6¾í°šð_‡X�š +AeFá9ÆØž�€ïr›¦ qçÝÿl'?Ž:qª5Ú“·ŒÈÛ2‘—N1!ò:e¥„Iƒ'Øvˆ“Í煌ȟÅ|ÖÊ”Lrz«¹¾Qâ�HƒT¶…ëˆ+bäuNÊÙ!…[Ràĸ¥°Í�[xC$­Ù÷£!øj +s¡aƒÑy­¬†Ï Ó(Ú›°(¬Ð ‚éÔ¡AÂY"Oz×+úÎ\�?ž¤“BCYi³pDZ—b,e‰ ËDzë·Öé�e/4H¬æTü +v¯r ¬¡m‘ÌD0ŠΧ"Uã=¢ìP¢‚;2‚ÃQzbµa¤•‘iIäŸ2‡¹lª4ª´Çm|"Š$\]˜_�IÆà½ü�SLºùú…³z¸\Si¿ñ¡~Ën}ïµåV{·V¬ÖÌ锋ˆ +­ Æ*ˆ1=øtºj WÉ�0†Øç €Y +(J²XOLµÏCUqÃY¸'©ƈ>.úUyÍmUýÀ ÆšXçŽÄq]maq§bü#†s`mz»,Õ¶ó„·á�}KÚ•šnŽÔDBÑÞd¼ &*‘§g’s!÷ÉbˆkP�Y(v¶¼Ís�ÈI׊¤7AüF\é)B…»¶Ðx3c×P¤PèCm¯!v³4½O0á@J¹¡9t?§8ƒ“|ï§”ðŸ QJÆú{éUÌÏlÍDÛǃÌmð@LúÛd_ºKÔ–£vï-``áÇ-–]D«G[ª ýnå‡ +py#eLÄ�_×’”ý[¦/ ¯933ME“-HB"+…)Úý‘Nḽ÷ŸölQ_£Q~ { ¿›ŒlɘëŒ� tìC¦ÑáË-}6ûüg*½ì}_›ˆ"|_š>µðÒ6 ˆ”ÜX0N;cµW±?¶ä�5$Mð,ü&ÑÙ8=I>dh-Q–Ô³2>mûëoCÏMpÞ?:™É: �w<4´ô¹Ã`št¿v÷×:Ãf |”8n8a"ÏÖñZ¯î”ì×ZF'>—Ö%»xp"JÝÔE¶ØÆ-^/³-ÕvLë¯ršQrQLÿH˜ÒªFøÒ9kpƒ. ~Ÿœ"«Å‘”ïöHï;СѢüjÔý¥i´æ–6§K[4$¼ûaàƒÿB PF™RG˜ŽÒÂÎtˆS¬\á%‚ó™½ÓŠ…—69Ê’ö$ x9ÂêúN}Ë+fê °•Âó.S‰´X&v-ïØ\dPê>#:ù‡Vg­G^&€�\ü™J¶€º …#¥ PfßH €Ø†f/€,†þfMÔr#à™Ÿ<Ïäè÷›‘Àn4Å%oËüÇ5sÌ Â`ÓÅë´J ŽÖ­µ³RÀ(‚ÞH ]MU’vã„Ä8§ÐðØaõS¡rŽWº+K¯pwЋ8�Øc=�K„?gG;åE¸ YŽ +"P)l k]�t+¸Ð¡~•P3¤@�[¼gwB w®„Ô_7r^Æ«fóÄÿ•Û& Ív*ø€Ò…ný}@lwÝÁ÷€ôaBðÔ.û\yÕ®ø<@He„`©y@›pð ÓÕYÁküósȼöŽ,ô6=`ï“xasõEZ}0| —Fd"vð5Å<¡Û«? ¦¦¼Še VˆwÁ&!ÂRÊ4ÔXÞˆQäÑúùÖ*“„€7Fâ` twýG§  U�û™n p7ÒûqpÖÞ­ŽðM€mgé4�ÿÈXtÂc±ù{Àl½¼µò’�ú¨R;ú€Nà,ù€=­xp áy€,x~: +éíûai‹]ˆ_cGp”7ÐÞ»EŒ;žù5‚Åk²“dÈ•?Q¹ðt”w€ 6” HäfÐ#'°Ñ6àD´²‚ß ¯kbm›Z¡"ª åƇG³ùõ^2[K�Ý2Ëfç+¸Šh 5 ˜d¼`¨ßUfY —r†Ó$úœóš8É©ÖóõÛ¸“Ð=—îül?³áp½Gj7Q;-W¸u¶ý� ijçmÜ’ÞÌþ¾¼ý4FŒ,¨Tƒx>œX✼ÕßɉðŠ0 +w+lÜ‚’I × °º«{MÄ·±�g¾ S8À�–Æv‘Þ€À‚¼�­8`îT|§no@pQg¼âÌfýwb¥�'I -7}*”jØ�Õú:(Þfþ-¼-ù’xÃ7]ºñfï‰ÓÕu¸À�öò„læØIöÿC6“@W^ëÎù ×_FwH¤Ùë3oP§<ƒHT¨¼ÞþˆM/²A<ÁÿL¹Ë8±Ô£PfF,™öŒ‹ô=S÷Ùªð¤¼"¾œÔÆWé:\yJÓy [ÞÉkúU+Ï=Õ4¬´Ûxîõ–¶®¶ Ì^ó$g NËë/ /tˆíîÿ‚‰âTQxÖ¢>í¦.ÿµ( މ +fíªŸl�ÒÕ5Ä8C<ÏadÆ2m@@ ¿Ä=àÜa5�sþ6ô@¸<ÅÝùž%#‚¹9L<'PB`Á?Jx&Gž \@¥ë Ýsx<žZ’[v—z!�bõ=7x!àIñÀl¬F»ÓuØã¦0�OÚ^=<—aÈG ñªâ $äîÆÈÊÛRîà :I×AÃÃ)åw€yè +Éh`ðsÇÅ®§ ¤ÑþèlH™ì#@¬zt‡¼\ÆW†›ŠQxR‰è‡nöèù�í:H* T¤Æðèkëi��«N:ÝbP#UýˆÉ8{–P‹‰€ÿpkÂH¹˜�¥Ÿ&Röþ�¥?5iÓ$íWNF’rÂü"¥]“C�§“DJJjîÖ*%IãqoMš ž‹RÏ;ŒX¨RC%ÃΔ’@ +©”5DUWéPéþóQ?ͦҙkà A¡KiB᪬7•ÂOµc�UÊ~8ëX)íÇV–ÝW©/uˆÜª‹•R„P×Ü+H•Þt=ŸÅd×ZJ¡.ꊮ°¥ªº‚ ZÍZKcè­×¾e6›ŸS‘mTtÇ0·TVƒlK?Qaâ C¬þàŽêùs‚%å×@¼¦…KÍJ„k–ò¶NÄ"@ÿc)ΰˆ(ÆWXúëÆZ¹¥jn¦D„ ª-ÿ¦Ù`ÀÁ7µÖ4Ã2Fõ’¸Šúh)šêÁÿ–v>jøxÉèEù»¥©Þ’CG\úDÿã–þ·Ó4¡Š–ÒÒf1VçËR�õŽ-ÿ°4€×<àh–F¬Ö§Ôa‘JRL1�p›3M�³Ô´z«tmºˆ¸êœ~Ú¯ÇT[7­ÆÇ¯¹i_ì«rœ®BïBYœÖ^çæûsœæÓ§B +Mõ¦nÑ×é4΂ Qñêtüä™gjO§(¨¬ŒÑ)CUŽœö�9Ù§DÃ�œÊmVè«ûoœf1ÿײò.¹Wô�Óf”nÂØ^ЀSëAANÕ÷íàJcúÀr5Ÿ uS½[‹?»‹âSà´}ÁÊoú EzB%gNOW¬›*™\ñýREU±¨¬'ÍÔ–©N6-³ŽʼéG7ç¨ ÷Zö QüûÊܱüãÑd}iMÓ +àž‰Ë¢tj wxý¼…M×óÇ›P4ÌY$6âÈ>©ù•ë�aeCÍ0Õ|ÄÕù@çØ7,›Gt,ip%*©6™]¸¥%'¶™GM2ñ@Ap’WôµŽ&Ñï–!”“n¹Òö{|6é="/$‘·Òõ«›©ž¤§³”—ì¤Q!—Xä%Uì] )KBdc +<Éþ©«ücÏ)Ò›Íf.^ ynúKÒ©0•}tPR� §æUpkG’ +í²>±(íe˜…m©ïÁV$³},$iPgR68TVG]'‰ kÀP"I;¦N´$í_º¤MIe°P¦#“DÇDm¡’4aÅ"‘¤ÞæÜIª%ÎÐHf5˜#µ ù†U]$…N™#Œ$MÞ«i¤Ÿ1!FöÊH_QÈñö‘ÑHÖÃKJ gCFâ©.ZH؉#Ív¤8(l�žl Qá9l¡r!ÚBÞÎË Aó”F•3Ðéˆà0î/“¯Ò= aïÚXeÏùô ¸M(O‡¢UÝÕ"”TîЙj!éé#¡Fbµž×Gž!ñÔE[³F"édì§ê)ÒÙ°”’^þXÍ.„^W$‹nÄ\SdM$ƒØräζ‰—'\ØÀ Òæ=¿•-§3¾ª-ï{÷ˆ$1ñé¹nzS\¹’£HÍo= +‘04ê2Øí!-f¸Jn}�SÎQꆎ`NNüS*RÌX ®²L•Ô§p{ÇT…¾DoøS¿1x$=¦2ûë�½V„’Þϯd¢éb +y´_ˆÅ”Í*;‘¨LbêÂx Ë !;_½qÍq ÒøšzîË~†aêBŠÌ`n½Zj´` SñòH�Æ-ÞZœ0…({‘ ¦º¹R5s¬x`�5Ðï‰Œsº!æ¿3ܨզº… ïÔÁØ;âFÑaIB皤ò-ÖÞGSuòTJ§’"!q-AFºð+¡u‘É.ŠqªR@¬Ê‹ˆö8þÙØBAmêšm +mq§˜h¾|‘†ÈæÐÅlèä¥Ý¼Ü^ >ÿDOÚm·>pŽ3‡)=ôÅ’ +R¹z†8%à egµ*>kË- À£µ®ì_-—œt54ÙÉIÒ[Ž8ƬŽNY³Xnp¨©Løë×wÕÆäÑØB—Ì)å–Vî|ÆS1¾ÿ[!3ÜìJ™7ŠK^wU瞃Ò1†ìõ¿=à:ÜxÈÐ1®y[9î +r€YyÍ¥@Ó‘¢_dÍÐ}–v*~G:žQ<7à­1z ×‘+.Ýž-n*‰7á—iz*cϔԑŠçöƒÙÖ€6SKôı™®ß9Ûl2±Š"&„0MN©‚Áö&ãWK +`WIÀ.êFL +7º +[S0�ˆìC·°*Œ1ÅYŸÄaÜ ™¤Ÿ�LÂÖÉgL‹¨Ž.¼ÝöÀ˜ššÚ§Cµv{G{¯µ²Øˆ³�_Y™è¡?°kTîÌ„[Œ ^ °Ã*J:àÇ©=E3…’Ÿ+ä¡pbm|? 8FÙ/¥¦-\Úà£ÄÀ&¤©¼3Hw©È —eÏV­"{VY;FvPµÜ=µÊ˜ /Æ�ùz™�½Û"G-Ð=› ðݯL“t)Ò`o– Åd¦Ù9\M0e Õ‹†Ìé–¨1~Òã4V—ÄW^9yXÛž_žŒ±ôÂF?è'‚E©•DÓµÛH"ßó¥³�­k+–àyǦxu¯}qS¾ÜùåÈŸót + äMzˆ�çþ÷5å2p¹²ÉTÜYGH2Q‹zÃÆŠ·­¶NˆIõ�è5ƒWÞN9]ÀB…•þÇBÑé�¢êì›j¨�ßYulƒâ'¼4u$ Ðâôípi4ž½“¼Þ;&ß©ã²0¨[³…ªïkÀÌ ÎWçûA ŸD·ïŠÂêKM˜ÿÁäÖ�`©Løw­ßw At·/LkÊ©’"e¼Ø] ‰B@R_Feb„Ä1܈Ýs(ÉpúŽš�±4K…Ôá áº½ÈHïEŸe¨ª½dChâP’i¢0ÂÛ`#§j“Ó²Cð1 ßÒX‰lÙâÅb–6hm΂ÈãúP¶‹¶rÅ´h6rérè—j`‹/Ù¹ó}IùÜڽŒ/ p}ŸÞ‘ËŸ,èé�cH¶}ï%;5Ä€6d!{0Õþ}ÊžDÚXüéÝùc»Žè÷-%è™éÊÌ5 кj±ûp‰[@£~ãš�€z9Þ*¨Àë2ÐçÊøÀÍd'R1Ë˂䱷҅öø&�\HŠPëµ�6.„¹‚ŸbL:A6QÔÌ@4†-:L¬‰dZ¦•=�ëE�€¬î’Pq—ˆ¾%âó#­bÛ“1é.n˜²9ÿaGöÅ{‡i+… -*ÐÍ71K‘ý>¬+ðX/Ü©!ˆÌFN€Ê#‘:_üÒ‘+' Žžg¦�7G�¶^ð•C`$µ$Þñô¡•çý5îY„mu0nD(CNëI8¢¯gĽÿ·±*®ÍÒSënH;"šHJMCðr^Cp¬+cW‹#øN!›"¦½I€X-ˆƼ1`×%3nÌÍc)‘æA{}ŸÆ'ÉýR>ÙÔw½²ùd±õ÷p\¦¹3àÛr¬1Té†ä7g¤3{@ÌíÓÝí!/Ú3ÖŒA@?ØiGí _r§�×lMÆtK'EE”,´ƒÎ‹â’U—'2Ê!tßX„È!œMµ¬Ö +¹Ýü¢ZǽdtðÔ°br"'(ì“¶œSƒ-FBò!J¯‡•V±C‹±=ViÎÈ“�o¢�Ó¹Ða¯n,5�o$·8=¢EY�ˆ²Šðc…­³ÈQ ‡ l Ýä*#¢¬L¬D[b—ð}',¡´ä—: u*˜}ly\ �‚áÜ7áðJ芞M‘ŒHI¹AÀÇ#ÿ ?nlj,%9_{S�óø�« �ËÔ{y‰z‹`Ыþù�hZ ÀsdC†š‚s'I@»À hjÏàJÖõÕ2$äCc®¹™È#¯¿Wòu]ͳEl ]¬Ða ØŠæØÇnñ‡(Rv§°>‡c-¤ç’ßÝ%x¹•Ë  zÇ£ypW{èuV啪^þ¶ÞÙi3ª2—F{œRµô!72Sv�}w>†ˆfõÄÖp‚«Ü,¬*}[^ƒœïö€9(ßV+‘ž¾*f¿èaÑüpIŒ¾m)ÈÀÀDŽ[úP!Ï-Ž +ºÇa¨˜òÝó5B\…7pi�±ø'NE•¡+kÅœ¢N…t€k¬jùÂqämÆ=d^ºt³BóK¸8+ScÌWW7b“}4©�ןW•[–Ÿ¾I´³Îß~§» o®�Ëó+;а!dNËG(ÉgN·¤k¥ñ2ôÍÕÐ6IMq?bf<­Ì�ÿö9Ö÷ÃæØTÈÍÊÅI7O'R�»DIM#†\Ɇj +äŠa*–zVòöšc ,R7çÉ¥(ú‘ñ焵YTñÓ))åD“éÔÝ;fôI1R')~ñ ÁNÅŽ(,F�× *‚ +*žÿ±v™¤*RÐêG÷xÜÂ'ü?†ôqãóïAyd-�Àh¾> èÈ'¶ïOÂt 8£F<“—)àÔr¤>@¬Ÿ2ØÈôÓFrJjS{a8‘ϵ:£åøÕc™2O}g�äJ,I^þÀŠ#ÌY*wDélÑ%h©ef©Úp*¿À€ŸW:‰|ÛÝW •Ê“"¸ºá�iM¢D=ºI2�èJ Ï=a‹­Ä9x8ã î™[ g¥\÷¶ýz�v—jÓ#îþú+XÙ61ÇkÜwJ—ñF!ŸÃ¸jÞFRQ8�U9/’Àþ�–CÍ&§ÉßcØãÇâj°�&¯·‹tÇŒü +G½ÂUTîÔ¹“±Â+ã@&쩚 ¦B£ŸÂ5x@ÇÁ¶ä + +j q÷?Éf^Á›p«¥L~POÌA$FŽ`qHÿq’+éú�w;à Ä@= +äˆs¦¼²ãÎÿ,8¢ð€<¿È:Û(ü(¿³=®>‰�sÓ0Æm&ðÞªÎÙÖÏ&Ätš�ûÞ-�· —ñÜtV€Fmàèã’T³’iRöÍd×i¹š@ì#DŸaªépÆ�Œë‚ËÛŸ4,ä�ªn¾Ýé™Èñ¿’/XŒèÚ°²Ë`àh0Wàv¤›!QyßÞIÍŽ*zi]Í^È÷´ 6ÁTy…s„ç)Q�Œ~УH«îK¸ �k+V¬ K”BÓVŽ,Vºõí@S0ÎZÜTÙ#<2 ê¹Ơ+;Ô;cdÀmûò³‹Ž•– +ëú‹‡Ò¦ÿœpb™âb]UÇeÕ¡€ò³C#ófS¾±#“¾­ò{G¤Ç:ïc_8ÛÀ¤þìµ\@?ц¤œímÉ Ýè:äžtW‚;ñ)!š[ŠjåÓtÛÒV)¸m… s–�ƒ0KÎYѸ‹Fµ2lÂ䦿¾ô•Âa”ö]äG]®Ž[“"Zš#¶¥ ¾�#³Å!ÝÈ÷ Œ1Ÿ€0RW·w#ÃRÈaÛÝ6¬«íœž¿³u-Mu^6"Ê ³>u™­/1¬Re¸.´…ƒ¶]–¸/Ÿ^ Ü{±â§¾Ÿ8¥(¤õÚ5¯½r4I?nF`‘„ôÇÀ™? ªY0Œ]c‹7ý`¤Æaøà‹�Ì­YL ‹éy¶îí�b}RLyüc*†-ãœ\à(…Õ¸gà·þa�ß�_¤ˆ'+Í“�è�E!â mÒuEç[�0û‹dÈff=¢6’(s3æ~31ƒ!™Ø¨.s_øDÒ þ¼H“ñ 2Èñ£¶îË,<0Ç’,>‘ŒK¦ÿªöŒŒbŒiž�„¾˜$¢«‰@µµ%¾Ï Hó”izLè4¸Ìü$>*Ìß/–Èl,š[æXb»·MU*鲟ü†ûîo�H=à³i_ବ܇Í]9ê +ç!dpå-DF Ó£ûF[Egi5CÓ[ �ÄõŽRCœ¼Dø¡‹´Ð?�õ>™­dÀ§yÏvú§‹˜w³o Ïßr9 Äž@Ì%(ãÁÇO̰r÷=6-"+ªâÄàùË�ü6eaœѪý0f“‚¯S`öÿŸX-ßœ<ŠŽö–Ϩs�ÇP«‡æ4Ë¡§(¤JÇdHÖ߈­&ƒÎ•3öË„o?BÄ. ñŽÒ€t¾®Ì[z[©µÀ²=·9 Í(±þ»æ^näþ’‘ºÒÜ\ž3ˆp˜¶áõÂä&â^ ´Ñö¾I„‚b?�|]G×P-·h6Ö=rP, "�!ýy6XàZ‚Öbêà åC¦ Ú¨sè Øæí¬Üg-B~¢¹Ä+…¾â-{d½ös:_I§ª@ÍO†:Ï?²=àæb×Wºå®çn† } ‰¥k5›ÿ{µ9ΟÝ(hJá5užò“¤WŸ‡‰Ù ø£+’Þ2 oâ‹S”ÑÕbç½’×ÆA¤5þyÜó˜‰:·xíê�@njÄ#5VðÚ·|r/¡ý¿ÁMP^¶íUÐé%âãj&)AÄ¿ýýö$gïMl÷C�çd”çxçi-áÛ²… C~µç«m0 &!kA�`õ¹‰YIžpœ�/0®ðñcÆ“þXØ•Aœ€³5Šu·ÄpEвI #Š©ë– Íšn\ÎÖ~¼LýaóÄXÕ"Wàyˆ‘Ñ¢á½( ·ó,8Ö�%Cü|$Aiç�Ú Ï5@šS6lS*5u[ÆtïýŠ‹ºL"�ª#_†nAbÈüŸˆŽˆaöÛÐÎ!ßÕmÃÔlAü—þ6h~ù_|ñÛ1G5Úªq‹ ùjm¶·ÿÁd—ÑF›,¢�²u�ŠŒ@ú­û,1?…5 +ùÿT™ªŠE·’U6­¥+>BVF©sª%žª¥v™1ŤiÚ‹ ¯%¤ˆâe½Œó¯§,÷Þ”ÐÄá¨')ai„!Ð*‹DÑ}¡?û×>îPÝ Ám5‡_ÂB* |9÷qÕzõÓµWª(Üáœ/y%�ÌÌ+²rï…E,ÿ=ØÝWìÀ+éü)Û6ßékôý#‘Û¶ÏdÍâ.–Y1ð3"2*¯ Ó4ÒR@Ð-¡åիƯ3äB¬{)Q¡kÅð¦XÀ[„^¹"×lO¬Ø©NRzçW ôÚöG„Zˆ"𞥪æ:€L÷ã\�ô¹(´¬Ð^? +Ï©&ù§9×~À ù!Uewq^FOáÙ¶ppên sSŠÜ*¹ù–ösèhËnÈ–õÖ"‚ <¦®ÃEG^o(O†Ë*]&‘ü6ußFë ÔÌ¢.6ƒˆ)F¢sä€ràö ŒÚÄYûÄúÇÍ�� o€”^Y«%èð6­>Ûdy(†V´½ +ÀèhÔRÐÊ"…Û(ç-K ˜¶SÑ ¢ÓþVþu)†Æ¦M®K êï¯Y:Ó§†µWÖ +µ°r=s2Öq»�ºç$Ûì‹Ý—‹r^ˆÞ‰/O2ˆœ§Õ@$ ]Фý‹Ùód¥ãfÎ%órŸgØ:ÏÃcýr“ ʽó~@k{jVÊ'”*ΪÁb¤0N,qfûáföž¥§JÉ¢‘–Ƨo?üÎ$ÖQÔ3y«“žŽçÇëæ÷Ê7mÁ6Z¡Å4„Ý?LiRg߃õÇP +–Ma‚ŽÑ…Ä+a IcÌÙ�üO ѹU×c""ÙÅq8B’ÓÃrã/ˆõ-�04ì¼âŠK-±å‚Ayä ³ØY9‘2`ônÔ9[¢é!>Çaˆ¥ÆÎã·6¹©ÁœYò6´3˜=€ÃÕxò1ìYÿæt)°cü@KÛ’¤˜ ¥Ö܈Ï×í¼öC©F~`äðÎó>’ r!fÚíÖú¶ŠR'´'[©ÒARÐ`r~^hPOðÒKòw®Ù�õ;³eúVÜ…-ö‹L Lå0t’Sñf&І6 ̧Ñò«ãr“‡„(õ%`zbK´Ÿ ÖCñÈÚ»SÅ5ãb�/ |]¯Yé³ÿ¥0©l[M„!=åœwJ:ëë`·±ø%”l»%q’(wÞNIxpf-<È™ˆ4S'`J³ÚÐreºu�\.†] éކÂézÀŠnQyI°» "Â_¯ï¼”s/ +TÝŽ¾·>¡·@FØåÒe# # ‰Þ-`°ÄÁñÄ(컀¾�o`O+µÚMÁoë)èt”ñˆ;‘œÙIô.…ôáÅÏ}‚yžœ†!ô 콚ûï¦{Ú¬"ÎÊÈÔ¯[´{�ט¹SܾräÇ#¨ÏÚ*=øa]� Äwñ;Ç«§¶à¬%§6qI£zuÙz`àh.�I%¯™‘>铱ü’ =›Ä�™iëêô”¹Ó[xQ¿dþAz^‘i@aå‘Xçû(ÑóÒÏóñ¶Àd4- ž‘ÓÜ[(w€QBy. ÅþÞÚèœÔ�ýî/“I�ªã·ÓÆÔSÞì3ã+´nž8 kè {ta4!ÓȾ~î¬K&p-Šßl/oñ½¸$ÊiÏÿgˆS(í.HxHÒx´^Ý çñÊ\†NÑBŸ`ì—sœ2ȶÚìšÃÓ¥ðîLô9Èú÷6%Þ3ßõ8ûKKpß–?K‡HEYÝA.çŠl"jísx[J +Ëi† ¿~Ý?2 +‰ù°\êlòÁìDãùiÚ‹Çâ­¤Öäó–4Âe>µø¾ˆ@NS�²y ½Y«%Rú¤0ºRïc%xÅ9î¨ä`¬€g^[f’Y=�_йŽí|Àªhe-¬!Ê.,­;ÊÍÈÉÿ®#ö%جÈNGFöÃx˜^‘ÔM„Àü±óÇ‚fœ1ƒ+d‚±oz>LI¡Z˜áßÅr%<5¦ X'u"À(k†Ì5»íìÉÊùp‡#0IVáøÄ°�ïä;œ‡P·h˜qRƒï�?7$ ÏVKó†».p[SËs[»•—x^Þ.£K‘—ìíŠâB9‡¹žC^q|Ð5qzÅãý–;ñ�Vœ¿t­†«BïɹÂð3…¾qÞ[±= 8g²dO§1qq-šÊþ㢸�Fige–Â6b‘åbe7�c‘ÜÀ9€&£ãšvÁ¢Xyû¬ó�c¢¸÷Тî.°,×ʯªʑӦDÈ2r˜¡a+XÁêçÇ0ß}$¦Õ }NµÌMƒqÖe˜ò×/Fº$”3�â`¤ÓH2CðÑt†%0Œª”Ø@Õ£K¿/M¯Žžñœb™éãÍ6Q61ó—Óã0îTƒÎêkhžƒS§„“؜{¹‡òàÄßI=¤v19Á¯Y §Ù”¹á0…ŽDÜ(¥T}DsQýÚåI#wÆÁDA]Ý7¸ž®ÈK(:1<„¤A<&øè9Ziu´©c"Ü¢”E|ôF䥇’Jψ`Ôü§�¹£k0,}´Å”HØ«R°£“z +…G6Vœ�ÎASƒûfLÅ9J8Ò˜0㣧´ÀÐÑ!. 8a +¤󛤋u%ã +$»+-të·ØC-NH…ñ~H5�Ô-Féï+.%ÔPLgßKànôd…5„µb`—X˜3šoyüž9sQïgÎ.9K}7géŸÉFI`æl½$]õÍY½ð¬Óæ„s¾îÖ>9 —æ,ÿât¾ûaG™gÎRãU=™³‚97�4ç4â‘sý¿r¹¿JÄ ˜ }û2öÚ»Oëö`¶ÌY¡p /fÎñÄ‹‰×ä]>8ðÒ á@£yóІfÜÓ"²úNÛ 0%òÌ}”Ñ$¥tÓ& +Ч"¿¢µ ++'ˆ-Á�}ÄÏõ Z9"ÿŠøô| +ßÁu¶ éKv•²!¬Ê,mª@ aýž2pkàCßHî?0øù�¿°_å<ô„ØuyôÐÐ,uU¸bb_F£l&£»�JUÔí.L§ƒ)÷lO©[Mr2w^œè£"yô¿ˆaŽ?¨?£(¯A��› ô*Nu¯¨KÞ¿pYj¤ ã²îºN+š5ë‚é�›–z/«Ÿ¹�ƒÆ â·À>�˜R +„ü¿(�¹G²_7µ“ ÍÛ>äg6R½ –!D*â*óPmb¯˜9û"˜yª]x,9f;é|‘ŽÀ:B޶$WÇÖwB“„N¿¸eÄýÒ5× ý7vÁ7Uh’KòÆ�'Œ¸Â‡Ws¬ÞÉS F­XÁ”ø5ÀŸ¥‡ò—"㾿º€ßnH1ia÷WâA›PªÈú ›˜&B‘„ ©ìCªJÕ·«c?ûë*ãL§çmêH’Ì%‡gRóü ˆ?©ùZ„ì~VØ�¿+.–~aµéTù´Ã·pÂŽSÔ£:‹”ä�¯éÏøÌÙø˜E#­¼´Œã5jEÍ]z#–ãûŒ_ß.Ƚ®!ûE9+XìBJ›‰ÝŸoÙt6"`JÊ]ˆV*z+§>Ä•ál †ŠEubS¼Œ è±|‰Iʬ€ƒ¬2À'¬$r‡Ì”ù‡�¶~Gåà+ÈÄ%í(Ôûádˆ} €E>¼]��7pã”MóÿëãoY ‘†jºñ<)‚H¶v÷=.?+û/¸RÚXF:ÁIœÀŽœâ×%¡©Éšü²Rÿ.¯Þìö��×òâB+ÝèŒ9_&¿ cRªÐ]o©>ä¿}eeBœ¬Ï¬`ǬéìÇs³„Å„À(ë;� íPÓ5–(U¿O™¾–HdNDR3ðxÓ±rlò¹[™³àÊÌØî¦Ô TÂ@ë½@%$ZæˆmcÊàOjC²�3ͪ™˜´¤ué+9ø4ç€�Ùë³Ð»¬á´z ü±I¶*"¤ŸA=:»,ôƒmÀÀ˜âöÀËÒÿÔd·Û¬Yò|¬@ð[Þ=FÞN¶BVø2€¢ŽÔ@ØMãø´âí¸ÐxІ‰Ð@ÇÿîÀ€…À‹Õ|X"Ü ÆB‡Fzz¿XÆ3ÅÚÐfPù¡<Ì~Óæ= "\ „Z#á5d, ë13ÄÒÅ¢Áb)“ÕÈИ÷N½É�ŹìƒPPÄÅ™º`›<ø‘ûakvâLÄ¡²¥Èºä†š`ËfÂý¶ïŒñNøtj±Èµæ²¶Rõä‡Ý ÀÔõþ~HÏ­?\âÀÛ‘AÅð¬02k“ï2(iÏŠø‚j®6KgK$0Ü;OiœgÂÍLðxT·°ùÜ_œ w'= :ˆw ”ÖðËʪáEÒ—öðäÞŸé$>ÉÓbÝjRîˆ<ö;�wI¨„•ŠÅ:‰LF“ëI¤·,寋‹/"J£´\ãŠßê·>Ëùg ã´€gä£E´�Öâ2…#m^ù�£Ì¹�}röÓÜù×7°¸~Yñù´¿ ÙÏßZ8* q«ô[ ÝØû‹²D|Ñ*“Bó¾3‰ +ø=Ñìñ‚Q³î&\6?WYU½êŽíŽÍç¿5†iàÈË©º\(V³'fß\¿£ b~¡f §¸ò_çŒ},ÿFµ4€Ÿõʳ8þ·@’™,Á îE®MÈÇ|hŠÜã˼)v´öõ«½ùv$Ò£üº8¤ù ¯ B²&¸ëÍ»–Vr�i»“ÐU""‰ý=Ní¹"ðÛ/{Ö�‡±ƒi<¶_öRZvä¶"YõRìçf¤jßpŒûö«Òx&»µ‚üéî… Þ~c& 5OȦtö;&d/Ç3µ,r`¤EäšYüÊëx–n¿Ï—–R°‘‚æ¦ùÑz–6{¿ZîÉ2¶_�qȵ‡ûógºÜ÷Læ¦×eQÕ=K_'Âbn’›»Ýv¿­<š›çÔ?º~ö{þ6íàíWäJœ+ ÉÜôŽïVgQtµ\en¢ŒmvK—íÈ~¥^ˆ¾§YðŽ*=f¿*©®Áë_íö‹3¦‹–¬Ñöû'º7’Ù/5 +Ûïš6A¢D�l¿/õ}’û'¥qÊHA¾0# ^�Ó;·_[9³iFƒüٕؖٯ Ãö›îH§ìßT¶ßô††vÍŸ�•ÒÎœŠ¿ÝkxH �É…@©ô×àÞxBöj’wl¿ ±µ›+j 7¡ÓθÙÎìw!i¿ýŠ’�½\¢âå¹ýn¿Œ‚çìö KÕ<�ÔÉI: +ýfûõþì7ÐÞ~½r¾3œÓ¥[lû…woÈ�ä¡¶ËH|J·ßéŒÅ¹FµôNçˆóZ‡‚ԣ懰âûD#0 ÿ'arÚSãÝ /!Ï9ËjÖÿ.«àºK§Ûï9Pô’@üÙo€Ä„Çm¿þbͺoúêæö Š„ÅÈ`½ÀmÝdT.Ô^’…ah2ãÝ~p,𠵊%‡ØáŒu“vf޳ß÷uDZýÆ-# +懸k­8¾¸¸h{µf ©çóíì¡çL€˜ë&êu¹&ëͤj÷ÛoÀr(û’Îl¿댙«›Åº©WZ¨„»®Ñº)òdo7u©´Û/4?s®{œ‘Ü·Š#¶ß Ë—søì5ÿ¥.å>Ï~Íý2Û¯cKQöº‡t!Þà›Î˜Îì÷ÿ3‡zûUü…�Ê sûM¸‹ÖÓLö�ý†ºÏ|ý¼Üº/Ãn²_A¿ýfë祑ÑÔ+Ò¦«Êƒ&¨í—À¹Ù”xnjØ9W7 +˜ÀáäÓ¶_ûý¡ü_E^²_ÕáÙ¥ÛïÒU¿1èÛ¯ß�[-Š5¸ì{?âöûÛ\û…„kÔö ±š«?0ŸÒ�9’ÃétÊ*²ßªj¤{Àïü'ê¼!)§­%3G§o9µ$}âüô‚9ÌW>ï2.yËÄGQº‘@gÒe+™1ô”s�ô'Ì™÷Ð/Á|9%Rtìþ†”«ði$ýqƒTW¯øÉÝ|€Uƒ G7Jሄ~X•u€-ÛáOÀE�Æ |3 —Ó¦äîLW¡ÿ]XyÌWMùŽä7®Þ)×›àJá6ÉÄ™€mNNФþëµ`ó"UÏSö�°”"ÿ#ÔÝÎÒ·šˆÄîƒnXÁˆ å�ù vEËnÜÕëRÔ.D6œóxš–õ_Ž7ö¢‚rÑ?OÉjúºCêBäÌR§²™< Ûwk3NT½¨  O3£Û¸#ÞŽ³l¶£Yóʺ~ˆ’ +Ðý®ëJ4uf®ó%ZãŸÚËÅSÐ1ðÇîìú,26r¿F´ýcz(öµW¹É-Æþ4 µyâ:&�ÿz�{©Ži±@0ÙÝ /¹ð&l¼A'AqQ ^Ž�•@d×£iÞvÒ°úûtŠMÍ +`ÕŸKÿÇ]KÕ¨§…ÿ +»ãpø*] nWo#¯SÆ/>8°�i³^Å?KÖ,Æ:'ÂÙÙG³Ë¥==ùýâ4j°X^#2éÿ¨¥µ�©ÉŽ ƒsá ÔVB¦Æ… q¶½�£^â³?!nLO-ET¸3àíLp,¸²ø@æTxÄ1ö¥ãý¢Ž„LáëÑ÷šù¡ËÊ+UÐÊ0eyûXž0A=æQTúÀ ÿ^1Tô�akÏÑ(T›rB‚çh3±ö–¯4&ú.Ú3ôïÁ‹,¼]íL–A”EÞÁ ¾zåFa°%²{`È e]&ºE°�óàtÖk‡“ õõ‚‰r¼Q¦D\ñ<A(8°{Nµ—"ê‚ë=`Ì—uøt}×áȱZ7f¨€$0µÝ!cÆ=A] abŒd“í%'ÕLS^ÿy‰m<¹bIW©!Q„Öl ÍÙÂáã•™ý–‘ÚD‰^ÚÓ à»ËdîvÖ«ÉÚ +ëÎý€ñ”Röm²Zå4×<¤¸’K”Go›awi�±E§Î&#^‘nS¼[¢Ùªè@Ä[ÎxZg1ô_·˜¸nÚŸDÞ…Kìú7üfB×Ï•EÀ1‰ŠœÏŸHtCåÑV�àÆ*â^/Cefd| Ö€ô,ùð�Ø”v—0Œ u88üíc”lAÒk”83‡×†dÇj¡ž?OF.§ ‰ÖÙÆ†\;÷Á=ܨíyKk˜!ôw˜Èåð˜� +æ?ø/»x´,üâ­ +¥m£R­ñ£Ó!þK±e~¢"UVÿ»K÷þgÖ?SmÞÜñéˆ_]mÛ4Öý¯Èyˆ¤OÀØEb’c~“ V22ÍSš+n¸ßÞïê–©¸’ÑÐ\<°!Gó²K$áo~¯�—^çBøBt•ñªÅHÝ'™@ü»D"ŒåòIM•�èw�bÎ�Q`HÏ�|)2/ÅÞŸËRjÒ?Ôá‡9 vÑÔ1éh@Ôqƒù�– ªSTån¾|úÏÝÂÁ‚.†fVîVlÞÓ~ÃOGOò+my#·”»Ö°uÀ|Š“ÒŠyI—¿ãôËÝ$”Þsw2rFeX¾òý— ·r»\ 'å;(ÊçnÞX¾S—»½¡ð@ ^ULT§GlyÃq�”PÅ–ö«²§6ÛË1‹8‘kÆCª1uÁVeË>=¸Üê ÖWš�úI€v)�&‹A&Z‚�ù°�iÊ©š1ÈÄmÑÁ8YÙ¹ä_ò�x­ºŸë"ý˜T.³/;ÆÅ˜}#lõÈdmäž¡ ŠG÷�8H�“;ƒ2q‚‹£N@²x¼ëëô¬êŒú—‡Vf@QD4jSOêûø×ï^ïÈ´'ƒX©Xç³Ïÿ�רr¹viM@»Æâ’\œ wOú1ÀwØ +Büº�²Ú�Oçø/¹Ð�?%ø7ïÑ%öþD O¸š¶bôžh×ã‹SnïeÔî¶Ü‡2ènÙhÿâØ¦�$È�@2oÍ +D¯,ÿÚƒRa“cM1ŒŒ·úïûîe$´…7)ÝnÈÉAÖæ² Œƒ<™÷LÅ’%yÑ£lyƒhñmH^D‹ˆ@ˆj.šÃ<µ—Ù¥Dk#“¬ö¾&`e¥å  *Ë02©R¹b"Û¿}QwÑàwû¸wY +m–”ì® Çðp}˜šrvnÀÛþTE冺 ±{Õÿ½Ç’æðå)ôìîLŒ2Nݵÿ #XZ‰OWw‹»£÷ ±ã}g€gwGpx�º‹ØÕ˜ñ>¾º ÜþRÚ±�…Ý%�¬ Â<¨ôí;ž,üPQ�‰"¬^n°%gÄh–É´W&ÅÚʘµHÔ)åœJ žKž]OZÜÓ;Õ®®¬ +Æ0+H™Ï)óÍ€ÁBÚë*»ÅÃñe†§Ô!Å}ŽÍÿ+#\õXlF0ëêFlÑí~~”À¯@¡ò2I–¡Ðæ# ÕÔ·Dº +â�l‹·Êʈq5I(‰�$tCE �º¯S3S33c»!44äö:2NgfªCêˆéÔÓ‘Á‹œâ0™“Pe*ÒW¦�AeFŒL?(aßÿ ^·§Ómvé[ã�!ÎØ;»ÚÐ4‰ÌhÇí$ëIäyJE*–¬µÓ™¶<¥wO£P¬?Çc­wëÍÔZ+9Œ�«´šÙ®Åb>»ªŠªªÕA§¨ªÊʪ\ÂE­«XURR•bµ|êï‚’ µJu� j«�Ûªw¨nUY"a:Çœ£ˆ¾¬÷¡ë¬¢Á](ú…ßÏâw!L}0õÁDD}œHp}àÃÃÝ…»`»@6J— +±d  ˜6œ�ÒVÚi�®ªNA#†ÚE+àG1;bwÀ Þ¼8\|÷³³»M¤Î•Յº»1»Z8a+°+g7ÁìLè6F+³*³ƒÕ6Ÿ˜kDbbÁnö¹î¤Ä9\ ›éC¡ÿëwC¯�]IQ /Á/–ÿhc1w2ëX±Ñ³Ùž�}ßç³m»¶Å˜lâŠhÕU QÅS|¯_4‚.£ªWÕëU¦XbS\qÅ[,‚bÿ,ìÕª×PUÑË\¯ªjÕ«^U!@™�°û+È…ˆÅ¡bZ<â1‘X\3nµ?† µßçîûB§Ë|¬ò#i/íKe%:ìsõ¶‚Ž:77"�Ï'|%êˆÙœ˜›#ç†*'+ù®te�Ükf‚ljGæbÂZp­˜1×zQUt‚ˆZ–ÚVCQ/,ъɨTz8Âj¡15±A |§×ëµGNo†ìÌÑ5a±íN§ÓÎȼ¼’Y�%³Ž[{ÙÖ̬F¢ŒÄŒV›ÊÎ¼Ž€»Á�ÕuY»%®,Ô•eqªÓ1«Ó0xF\œÀ0&õ»öt¥¥¤JaYé2´f:fî!¥ð^‚ËœDdŠCÿÿûýþß÷í¿€~þŸÏÿ9= Nº™œÝÍü~wwFwBwé±½»ò™i>@ìöÛj{\ìû˜\U¦rÉ’d-¤M_(ì…,ŸÔ>!­Ä¨¤ùÇíÃPÐP ‡åBʲŠ<x08RfXP�&9DPtzÄ\-9l/ú)O(®Ö5np†ïÜž”R,ÅênþN £yÖ‚ã!qüsĈ)àBÎâ2R‹&…3% +ÐÃåkõejúóûoÕG�4êû7„€-0S.”´ël׉TÁnòDAñíJú´F29e•b9–E@è¶ ÿ2ÍÁmÌÈÞMÀ¼±`†ØòÌ8ä¿a< .§¦�Lý}Çd<ƒ„~ÿö$�ÜqKÅ W­‡Uï-Ú?1›xþX9LPÑ/ ø¼T"¸Í¨æšD£Î0aŒí.µqÅ¿ê�oMâb—láeÜ\c„Lç+?ó0ƃ3l‹Ìï¼ð_É–ž�7ciˆ@ÏÜQåÁƒ\¢ªB¦Î†¡p¶BÓ¸4³â oØ’hkZ–ø1`a ÿ@Ò0^;®�#†À_n¨Ž[!fÙÝdª:l|ôB +>Ð�Zmº¹fB´XÏO²Û4”‚“¦²–pÕÍqh1W¯¬oCýd(D¼£Eøøw?³o�çV›Ã%E Ðä’ƒþk`^^Ší–÷+Ø`ËFÿ9”Ü` +,u{a$š«—Á š2bƒ€¥Dº endstream endobj 32 0 obj <>stream +g+\ãaÐûx65u®�îå>{7ÉÖ�Ñ¡Œˆzýe7ñïµÈ :ì_Ÿû(ª$‹Yòñïä›Õm·X{Lõ¡çü¸'pêœÌ™‹Æœ>°!Ìú”ïkr ‡9Eæ2 úòˆ¼Zñ1Œ›bZYc/ËS§<਱ ¿¦NÑО3BÙVÄ›9²VÖ…2î…AZ¤NˆÔÃÈ:ëQG¤Ô› µë <®ŽïT¿»1àË”§SVÓ Ç +I‚è;“jôàMàËñ+Ö=±«`&E¶™PlëÐséyާæjˆZ:ÕÅ¢¬!eRV+K¡ÿ“Iñª?^#F�ñ³·>¦é'€ÕÖžR—nr6ateH§úÜL±ˆ “ªò…4/>:u'%43+ÝÔê™(äµ™Ø1©U)γ[šbR,X7üHæÄhκ½¸ÅÅÐm“‚FeA,J¹(:峋ÆýFÙ9ël/¨æñJèTÙóèç†mpî1*k¬‹ �rÓ„NÝGc΀“âÈ,w²æ/)û4EžïõŸSýk:U*çhî«üÓŸ¾-Ä�‚ûœ*xOl“ VëˆOÆ�1ûœÚù¢C¦ æKÊ)â!ò%u7ÍËn9¨hZ }L'º–Å�”ïA–J.I>0zö8nIi¬)%.Ç&Ø–TÃÁÎmKÊÝœUÛ’¢ð&]*|,›ªBÊ. ×ù¿ ¥ªbU2“ADRŠœ×³,)‚®¤âNf{©-­;äYR·:,î¬Ô­´ŽJ¿»¤üXgD%ek¥A{ØÕŸ •šÛëÂS zÙœAù!dÖ¾£hÂ|´Î›æó�©°‡C+ 8¨©Ëó£!Â=q¾Æä%æ”sœi‰Ñƒ€c…Óc3¼”ÞÁXØ eRýf¾œr{^,×Ò K¨½øXçq+9FÒräÂuxŒ#a­ÈnÂ=?m$¶=o7å?]V²Ž¬—‰±­ì{’îüTÝ©C0×–S<òÒ¦j•ß³j­sò \|EnòÓëÓ¶Mi°óŒ­½­Öí±\*€¤`Z9%Ãi¥kKiÀÚù´Ù Í©ž·ÎK›#gQ™ùIYJK7kJ9EÊå4îÞ5ìÖI}Š ´–&YMrnµ¥œª–ÂCN +R;î–Áüä(ì×¾6qº…ãá FL +«?Ì�WЙÂO„AŸmGÐòÓ«÷š³<^ͪlœî±Ò×.•…å'3=2*4G …rºðjt ñÊO%ŠYÙJ©ÊO…y˜By*?µð¿ÙïWHQæ³")?ñ ¿™}ä–òSC›åÎò7¿�ýæt1’CÒšŸ(?µs:Jà•Úr:»š 2+øE}¿×½´´‘Ÿ +¹Åhê-B­=N÷ãý#§C~*ÜQ}Ð�”‘ƒN§s’ì;ÕÍ£x¹ÃédÜ‹�åÑðêpº$Èsh OÈOèmøà³¬�Ÿzœ©Ê uÖ8ÇMݳ}Úæ&é#g~�u›8�ú¢¿�ŸQ€˜1ûøé¡ï™`Rnü?óA�Ÿ(–Í…Fšù?륧Ût‰ ZFÇOÍFÇCn©…Ó}͵”3Å’1Á �ò0{s¤Åµñ‹ŸZœ88ãU/*û3b Þ(¢ÂÅO5 ï2/·¬¨mp2ô½}?¡í8p#!çÞ�Æ%ž›c6ÍÅO+±m7D°löc½ÓM!Ë�„{*ÖÚ™ùAG‘#˜ƒ¸aºùL“’[¥Èò>Á®$õ†±.«dާ3f•1(wUüðGx#59%͉§C"ï'~2�§›ŸJKü”d¦` 4Ð#~RVšfå ×ýM„Áføñ&"ùNÇêÙbv@TïNgºÏÆ(©6mÔoŠ/úhÂ4Õ�9M˜NfÕé&�i :U[¡ƒ"KI–°–L룴@áÆ^«HoZœ:ÏÙóU$J£à@f“  ]âù_8oNnæA w"Su:š‡/dkÅ)áOVGÄ2 ™BHjKŒ'_êºæ½4ÉcN@?#¤i�‘f{ÛÚv4ÆH°|¸Ù˜&KnªÊÆ)Ùý�šÙ¿Óey6’á —†q›ž+ƒÛ‹d*3¢Ë´Š€Ý©±¦¦Ë3`,‰Ôfq�IÔWS$h ²<Û^$‰—Iõ v™q®ØéSw+k¨r;Î�ÔífâBäÐS, S¬ùÅë˜ç•@ýHÁ–Ör*Á Gä\¨!ä�)–¥i0u‹‡u 1S¬ö�¶ëV¹mX• ÒL±t�Ç«›µû1‚s†ÿS­„ñSYŒÀÉk–`Ø_/ØC¼�«)þ»ÖwT.6ØÎTÝ<�‹’¥D'–Uú•ÐS¬ß%ƒèûªj�eе %È޵¼°*­™b] ™”= 2®¦TM£)Ö8é„nárÆ¢ígŠ¥–K¾0BU¦XgÛ‹©K«×O°rª;œ®W¼4PA+úþ Ò㊠«ÿK×·v‘îÎ.7ddMäOØÔ˜S¬Â—)–Ì(6•£ƒ—¬k‚Ö~p‚\lB°A5S,=Žø&ÈdŠå?œ‚F·¡â“àXF¢²�Ž’Å 2Å’¬ÔJÒÐ ?¡pºPFVÌk…D†Q$'î’aQV=ìÌŒ²ª�+ŒlÒõMï¾VЯ +.^NàeéÛ„«açïÎwŽ)±¯ü&S0®AFÙð]ÀPC-vkbŠÔr¥ÿ4šñ— S¬Ó8ôy]®ïrúvc³IÉS�K‘/¤¡ ‰\ÝsȮۄØwzÇ#Y‡°ô'¸‰‰Nä�x>·]¸ÝýÓ¾œ€b +‹,_”bÕ}(®”b5hÛó¹f, ‹Ós£h„VXª¿ +|(Îö﬷€R“,È“µL�Åj£ÁÃî²ô™ÁØþ8ÁÚ»«/4g…¨@AÊX/´‰˜$aº üwlë€g�9ÆG±Êo* H$Öq{q9â2ÒÙ¬ ±K÷�b-}jœ±ÕÒí»®xÆFµUe m=ŠÅ—ŒÇ ¼Yf™“ä‡aÌöåšE uÕÃ’BI=¸4’*#ðïï>?.=Å¢ÏÐv¤ +mË;�’yNŽF±<o;òa"Ù +¿F±<‹ Û +2‘wŒé‰rˆìÍn£ñô€ò”´‡ÃÕ΄†ŒbyV�5ÞÊÅ¢ª2Œ‘ào�byU—°ÎeŲ å“™¼à@€F±ÞY6ÐÅ‚ð1ò§â !a�bá~2ÊÄ�…Åzæ]¦Ë˜æ™î£�Ü«Q,HXTàÓT#oÿŠþõ&J8 +úÿд +š4Šp`”LÖ(U¿ã£'5§Q¬Ö´· Äû—¢F±ün:ÈÅj/©lŽF±¼?À LmËÀÌ`ùÇüú[L£X½µ3[Îjw%Ý(–çC´hùF±fÜ%a[pÅŠ`Và�[�ÊF±úUYñp«U«D~¹Q,à VîëX¬‚ÞØ(X±ž1£X6.�’eÓnHþº¨2ŠÅªH;²F±bÖféšþ)‚W£X{šÎfbÅZÎ$ÂpD,ÌÔÈš’Ró5ŠÕˆy£X�g�ûuy~Väí85ÅÊ·8xÅÂ2ní¾A�béðº¨Q¬hkÌgŒa�båÆÙZ—éÀ˜F± ¯þ)‹ÚájƒF±üsF,®Ø(– sÖþXî´ÌÜ(Ö%úÁCU;\TW( +IbŽbuXÙ¿*ÊÇÒ˜†­}8Š5rUɧCöÐèk)¾®J¨ê�²´‘D„öÞ ÝÕ( Fšf|ž3g‹ñ­ùD#ŸÎ*ÅCÙ=5wíN[lЫ›Q,¸êY•Q¬#gþ¹�Œ#M F±lO!ÂaÀ(–ùÐq#Ý´a‹¬ê ú¬î›T›!¸Èé1^»‰1Š.Û³ñ)M£X*rœ‡ÍþA`‹8ÇÊ«zF±$?Ÿ  ¯ÉÅB(¦„P*E40Šºmá5Ša«èÆCuʇ&l`Vf)ŒbQôÂ=qŒb­²AÑé—ÁÁÚNŒb‰ÃÔ½‹b1KqÁűösEa=.Š…±P­�·¸Å¢XÜVY)‡SÅòm@Œb¾´eòŒ+F¨'–ÚKgíª�ÏwrQ,nø0þ¢XÊiRw(†@!#+°Ûy4™ö> O,ãñí¤êD@# ì¢X @a¢âJ"Ã`÷�”‹bá ˜À(Ö´®–dc«&0 +¸-Ú* D•`&ê¢X2$�„ÅjzXëþ û‘´(Š®¦¢QØFL°(–Ndk†�E±Ê½*ŠeZ+S0‹$y­E±¨ŸzñBÐúE±(â7Ÿ ÿÈJtwó@ÃI%\kðš9B‹bÝå¬ïT óQ‹b]Òþ%·h10úù[ Ž¦Ô ´ô]oQ¬ã…c,ÂY ]ÉÖ&•¶X‹úÊšSËÔœÐ�E±%Á_ÏPžE±ZéK‡´(ÖIíÝ”&§Y_qYK! ¼ Cæû^«ì¢XÊn˜™Vdê^ >ß#rJWU¸]Kª% ÆöÓå¢Xö·>Vb› z^ëÄÂ/¹|Vç¡çßE±<„5Ù|M´¶†¼(ù¯ —õ1mÅzJå¶$ÙË*„VV/Šw±¹¿7@JXpQ,$r»(ÖçíÖI² ]ëA1ÅI‹biù‘Y ÓªniîB=o_'`õ*1dã‡R�cd[ºÊ˽õ”ßRÜL#CE±T£îW›dö¹>ÿÆ@eÀ¤‚ÿsiä YVk‹ðc¹"RìüCêìq•«ðMh0Vuµ¸¸Xí�í‰bõy„©„SKÐWÿÙ´Yó¨-=z ™%Këñ5'A›P<MͰ ê>SË£ˆb1¡yì̦õ#ŠW +bò ÛÔAD±îñFN™â_¬Å|ð‡bU¡Â b™ßý£äZå“z³!tã<ɾ¦¿Ê<¾ˆÉ(Ï©gÊŸ¨y8Ÿ*»•%WÙK¶r”ò¢0Ö¹(2FßÒ¼°Ð[%>ëZˆ BæP¬Éͨ‡b) ±{y|\TZhÑ «ynà€ÀéZ1bè‡byψ¢XÅ`ªš¤ž% uD± zÂ>H¬"Òß’]…V�#ŠêÝ®—+ß2õÌ·ôÅŠà|+è°%¦—Ø ˆÆ·—[²Šl³BdF§h+ð1xJÁ/ÕÖ +&ê‡b-¥�.}K¢XÐN¬Té[O�¿-9Ÿ§.QJ”ÆSþµ“x›"—(Ö(úÖ¸ˆ°¬¤v +�¾…zƒD…†ÏT,?¢Xô�aô­œDí�²tˆbIiõ-™l-«ÿ@¬š9‰Q޵ûb̸à@¬ªÂu� BvÝɶ>›ŸÔˆ.2LÈè$[Œx(V¥ +Q,I’™Ó½!Xà +*ÇQGkäÞ²H¯,¹EpA¡üð�Zp¹·¦ª°f£woiÛûê<­¥ÉDHGÍb •d:++ еˆVJ(t—ø„±è,¬HU$»Òx±î­…#�(Öx¸©•¿"ÌN¢XÃP“|o‰"Š…Àc”ˆb 9êà1ˆb èÔŽ”þ‹"¼Jä–ó2†¾R ++bÝxD±Ê[ÍFÄšd� Öq‹D±V#ŠŸ&‹µ²1ðÞb?øü(`É z²ÛÄçhý˜�Üä =G‹ÍO�‰E¹-éêè¢X#㌵¢^ë Ë·¦E¬ïÎÔ”²6Š^¬µ¡E›ü«+ã¡X(s"…vPMTÜ)*!|JÖ�£ß¡Xï7´Ä(¡ é hö×QÈ0%ƒL2¶  еh=auQ†çG„0úC±ÊôÀgŽB�¤M˜; +cõ/GÄþm0kM?Ŷ¸ÙÆ@ãÀ·¯�;ä/RO»¼þƨm! ;)VW²�¹ ä#Jª{¨:€»d?_6:.ލûíctÛ<ÐÈ.J¨;Ü,ŠqS—ŠÂ5‡ÎÄ�fŠâ#6°~ÿ™(¹r”ê÷ïíáõ(�…þÛäܘ+ŠðP}<ô¿Á2•®ùßrÄà!çŽ l§žr†Jº5ÞÒÿænq£ýoÈ|Í7ÖK,âáàÊøÉ /ûߘ òÈ|óXõĶà›ç៪¦Ñ°ZRvuÑK;9U¾u-äÁ`<¬�ÅS�NôYOËg:i%\¨Ýx•ÑnÄvF2‹IêN.#õTO®!– \ÊÒ�Þ+�±ˆf3×g¦CŸ'ëI–Êdk”æÜç+_[ Zd[mý6þ <¡©H£–�óêâ? @SP8 ¨ˆ½É@Z§á|+¥R¦”’”eˆ…äžSJíðóÒ’0›1`ŒR¿TGLC•c°*?Á™Áy,%Õ̆,`eÔA×,·0H!-ñƒ¢Ò[1% aK1Hœ}â�×2¯yd¨¼€*Bê4¯ê˜º"áVí¶¶T5Þ<\R?s©F S_ÔD®è¬^&ƒî²Ä†®tÕT‡8‚¸SDBuUâ•·ñ ¹PËQõ§6AZŽª¯E†¿š`Á…f¨¥Ú§¢B«ÍZaZuÑlìWïG«ZÎÃY¬‘O,wèÔv©žˆªªrN3¼ê[Œ+ÈT_C$¦*M,È¢ŒiÕ½´à†aRµë©>jUª�ñ†a…Ì\¹" àF¸n?‚ªå½Z™&XpJ”&V8À „ÈpEÄå8”›N"¥®.X�8° "p 8�»PZ£É A¯W# MÝïŽd5²pÁB¢ó +ʃœL …ƒ4)ûJ%.";ÖÕÔC�k45¤ÂÞé¾UžiÏ¿ËMMšO¯„[¤JU¢\n´æ HAI)Ï3‘ÌLr¾©ùãóݪÓ4Û*Q�üðÎePÜBs¡'¯ËÏy— +jI—cÈzµÇ i%LæG„‹¶• ǰ§õÊxddny+‘�°™¥«”9OÃ2�)e6Án²î¦Îò7Sz£,(®1Œé´ ¡–_‹·‚É>ʈG+X°GàÀ‚ˆÀ�Fà@$€å‡dF|`VB^ø½qOü4�1¢j3Ä×, 6D^h³)—„å »­*䢒F‹Y'ü’øÀJ3sÖ½>€€­xŠÖÌ,ÏKñ6_œ0ÈŸ�p5*}FÕ×€�ÿ Z¨¿´ó"�.^‚kÏŠxUˆ÷5pD|ÆDž¢£ˆV Æ8Ь uKiúÓL¨*×* ÆCD–°WgÆ)j(½ ð +DB‰Ë‡â¥x,€ ZOqA—Ñ%"DQÐ&ÚG8fs¿ì†FNrKHp´�ÕljÆb0š¬D¤H¶ê&þ*ß�Œ„�ÊbPq¹²j ö)*Ê´ oë(¶×'R"‰Ø‡ä&®ã8Q|KP(^^]*dÆû¨™ø{ŠPaËXËe7+ßCãˆ��M$ªÁ¿•ƒÌ$î">t§ é+ÅÀ³È6q)¤»Zj»+�öZÈîå5(·2DQ×'Z5 ÍƒúÄdŸ)�楔ƒ?öÊ~†×KoSß 0(‘ ¿6°pÁÅM¥K”Q/úc¼pRŰxGÔÕø.ŒÜ´™cXn(¾ÂŸŽ™+U¬öCä«TØÿ¡ÅÉ€­g)“°ž�4ÞN•ó%�èËí¹¨¢ö�úÔ_ ‹qM‘„¦l ¶„ ~¡¯5혠ÍÑzóXÕº ð”A¢°ÄJW>6�!Cµ1¢¦¨­˜­Ó˜{"ZQ]áG�G]Á› +ߦ†Ó¼D;ý�®Ü”ï b»Ïñ rj5›L £åAs›(CD¤¼2%Bÿdˆ56p˜߃�ˆ‰zàMTz6ؤõÕ%R—Y¶$½bßsFAׯ©qd¢LÜMÜ)Dãd�H©^úi£zÓ\¢UA¨v°qIÕßêJ6hÉ�þŠ1TßX$xžE¤CGUÆUAµpÓ-“ŒpQ—YãI´D}R}qu×á{6ÚÜ«ê΢ÕmbFÇcBŽÅñÆdAòÛ áÇ‚c´¢ SŸÆ[…1}Ox·�gQaöÆ&Iº 5}µ÷Y2ØñÈ™pªQ#´Q†´ÿ Ih£@«—8HTadl°Rww`p“lµƒ1¾ ´±ÁN“�üÒY�tZ;˜hµ¥@î9‘t±¾±™�˜*í@Á”£v° œÎblD²Š¡ÅD@`Pœ�¬¨Þù,ÊRcvFÞS"Bj&Bª Š— Sí`ªŒª „; š‰ÃK:Šxš¬‹n:!�À"5ÄtƒS¬ú˜±ÁHËbôêaaô 2cƒVkC§073Õ+¦,À`³ˆ Â¥*)“„lP«× L$6ÆLp¼„±<ÎbL�flàá*,¬P€ÎyìÜŸ…NÈA‚½ÌÒrÚÁ¼Jb¦ +¤XAJ;H°@¼èIòâk‰„â'#ç&"4iX&jZÀe¿3ÁØàÞx<û˜À¡‚!ýö,0˜ò*½xæ«4`�Öe°vrÔCÓ C#‡ð/Òš˜®e¢ X'£^3kLÕc™>TQ(Sa/*L©D]ÎÔÝyŒ„-|¡š×‹|Îb¯”e<*÷£OmÑ4ú‚ª„¤b*”DIqj0­t4¶$‚(”/#ËL Ì�XÉ‹¥jÒN Gø~=*‹Â �’g£˜[Ü©jÂuŒ´(‚BL¸+9ƒ$”U“i¶‰Ùù¯u ³"i+^‰)¶rLXD]Æ5Ÿzc@ÞT#cPÄògPG,œe 暪�û6œF¤›*ÅÓ‰£Q&ª1ŽÅŒ�pÒa;}T„ÅŒë¨ +DªAIüfeuË/3¬Õ òÍ´\jI=*­" ÝL©$ 1#JP h"¡ÞLI‰†L�:"ɦ’Æ£5ø&DÂŒc°RK᥯zT C´¡ +Õ`-«³W[î $Ÿ{•£8©ÁVi[2cà‘R¤œGÕÀmcê�ÓH‚økqŠº…yCÈΧÞXïÔ¸˜ËL‰ª4«(FÞðËV•‘vÚ¢‘>&ò²®ô¤H–¦$Üc.35# 'QñéD/"ù‚²`D÷Uå·`ç¬OѼXCâ8þÞc’œPR(éáVþI%7†ß�pz!A8Æv¡¨ŠJSR «ÿú;€€ßÁøÔ> +T±P ì'�:"_‚$ý[ ýcfèÉ?aó=Ì2~«u9üKÿ;˜™ +?À àÄT ‡‘Ђ�˜ÃèP’Bwx 3ÌVʺÙ1ë®ï@¦ªüú>‡ªGQ ºbÊw¥÷Âì ]I‹Q`Ðjr,4ª.a‹Z‘iB+´>Añ(…uÚAÃGL\`%B‚"´,FK%¡… ÂHÄ?AåÔk²ÆYá[ÐNCR +"‰ÿ�ꟑ¿;(y°F£šO‹%ZœvP +â´)ªªªh‹ÊóЕ=•Y½‚ûû³M¬#Æ¿i@H@Dà@4 <2oÝ"¡Š'Ù1­XZ¥ Æ.F4/f`´RcØ:   . +=äd•øcnø\%‘“`¦ø¢�¤Ú`šGR]Š4Ü ‚5ÁÀ <Ú”´ŠÞ,B%h2š«YÅ<2ˆ\ôe›r! XA"¦–‰-6XȪ­=PFGHƒb‘´á×Г˜ ÁP™83“^ŒŠA¶d [êQêcºÐpˆˆ~“FAÑP<`ðMƒ-¥›)J…É×’”*~ÉŒèÈ�‚^À @Pãí µQ‘ämÆÓ +51� +ç+qƒjh2ä0Êö­ûˆ)H‚9Åt<“x!^Ì”|1ZÔÃç©úGŽ +4Öš©3Ô<¨ífÅ!–?+„ÔVµ‡°4Yå@¤“‹5œHu$³”Ñ|š©íœb>ÄVå› §rñQT¨H}ᔓaúF¢ ‹Tˆ!ÕàŽð²ñ]²@²-XÄÆJâ¹Î¹…ªþ(Ù�/D¢DŽ‹OÜ YVó@R„Æ™Ú�I®b� …Dx¢¶¨Œ8h¢hµ„#UŸ«HçÔ‚�iõ<*>µ" e�7:Bâ�!IÕÃ�$–6¼Â¯ªÅÌX«�¹šÔæ#Áφ®À ¹‰ŸÉ&*vUC´˜!ó¢ˆLFµ©˜á[@ +h‚õ=� *hVª×\õ-Ü^ll,�YØÇ—°\b¡èœP}³¬\2Ï�I!»kKOâ@^Fµëá"f\Dþ™D,TÝ"�ر颜•jZYH­N•Çbª8�ÈKH%‘ð:rÊ*�Œ 0€8à€$`€@ Là0`@&p 0 0`€@\@˜€$ d@p@‚ +0 P@ +À(€8�àà  Ø€< @¢ÈeR ÑMíï¸í„OÃa)ö!ì™>Á‘y�•Ý)xd†<•îÈú–#W½‚Èú†!»Â ~eÖW |ÊEÝYÔ5�0¢à|²°ê(Xºáw«#åŽWa©hêB�¤�;TghéÆPÒ˜–ÔTM„ªw²šb¢Ä1£ ú$ÃWfÄ3 +‘)rZ¡u±=̘вÀEŒ:†sä q(£¡é_,!ŠpS¦B§;®%t|æèE,ólQ3|–ÄÈÐéÓËTqz³ô_HŒ¥ú¢@žN Ò«/E)u̽æó¤&Gs¢`´8îQíIf¦< YHÄF*nfÙe E¥¦ +Äîà–iÌ7±Í¶™Ç©¥i�l +b$ßÊ!¦; }JÚ †Y¢™ÉUHIÒAdAx|d45² Œ�»„4­À‹ÐŒÇ³™¯æIÎp#8¨ªÅ¢K%%+M㮫=]±%#n(é„7ô)ÉhÃú§‚ÿ¼aF”w‘È¢aì{H­oËÈqWLfFŽ2ÍWkÓ(“Po›Ë|*lfŠ´TцU +y¦X‹!§�O8Ðìg(Î@wÆIÉZÓ‰‰ìÈË¥�ä¢*~Dº]3š¸„ŠŽÆ¯çäÈ»ƒ¢3ÃzÛyw@â=¼D c©0w·pÅ߸:Aê¥Ã!¯·nÈTÑ%ŽTÎFAEÐR�±ËÕ¢½�ª½„šXÒŠ‹«ùŠ*$½,•W(Ò©^±Ø­‰Ã…/}ˆ +Ö§êHF¢RXH0ˆ\Ì#'i$êʰê!y… ±ÒŠ˜9†‚TM‘ML?Ö¼HÄŒŽaŠZ¿†D§h=¹Çó*/œ§¦Uªê¼qBKµ7Xó*ÎvE‹åóîS—¶ +¢ÅExÕUÒÖåPq¦z WGªlÚG¨„HN\ÇîVd^Ç<´Ò›� ­áÄeV,‹žß¡¨; Ï + +RðY»a‡TÓ˜Œÿ +[w°Mæp *¦.ttGª(¨clHdFá¸D¢z�@¥`|ÿ�¨;˜Y8AO´*r¢ËÐVéåÒg"Êîª6Ó)±É±DU>&©šUÇ‹P÷¾�.ƒªq_-¹*GÇ�Lë2˜}·X°äUgwЀH@ +"p@†\:�ª-b)Mã›nÆ¡é Ó‘b¬:Ez]7å;%¸©ñϪøpØï�µ:A¥V0ƤÃD*ÖŠ1òµÈjÈßôPÂEËWGŒl 4Ó¯6 +1)øæ‰‘ ¨D’§d™¢ÆQêÑ`‚#�$ЇÄÒ <ÐS™Ç^"Š£±�D(Æ9�‚cBÌ3V-W$�PV¶dÕÔvÙ¶ÖC³!¬.HLtQ­.Ã-æÒyBFÀ1OÌY nF› M[××›ªÞTÀ–R„CªÏáy }ÉÚ´âõõÚ䟬ì£êøŽ¼Ùæ;‹)Aå9|®ëµÄ%d¯0ƒšnŽªÝ€ÆO˜ƒJ +î›ú%“�…˜Ø†Rþ¼7k^ ['If. C¨z‡u6RHXG#»îÛÀv¢†š… `ÁM¬ȇðŒ‚T,>he­°™¸a� ¡èÇ> !}›J#oX¶þë:`¼½ÈFvr„>pÑýP G¤Õĉf~r'à*ì5 Û Åf>-‘STäü+ŒÁDHú´ ¤‰z �f;‹‹8ßæv×�à´Iµ1ºUÂ(c\³äŠ]‚F„ó�1'zó!„â|šªu6±`Tõ£_úNQD6¦ Æ£L5îÜKî¥+áüÎ4–Zn.Þû�$…ëGØ`êÐvá=�CÖ”€«1MAšjªqå‰5oºŠ1ŠrÝ�39¯ä–z+  ¶2x”9 �ùEçÁdGÁJuxY¸S-?ŽÏ ~ÆŒ‚úc³Ù³væz +M%nÁÌ|*…¢uÀ‘è5Š € ž®[ +i3³´ß[f0‚€ýÀìØÈÁõH0³‚Y¬ ƒ*‘”Ét‡§`2UÊj䦂‰ÝûRT×X¶´¸otá¼sqZïkÞ Çä„5–mñrìÕzÊ,K;èïªQÔÞ›úãìò‘Mçö¥:¨³†]â“rW÷ F˜Oã_øQ’9F!¬³�ëT‰ìa ¹On4bËúKÃ�­^ü�&áÿ“¶èµ¬+ƒ´E¾êTr€µ�â2;¦ï¡h媙+æ3@&Gé+"ÖH“#€%’¬WÞÏ3}$ö[­¨ç:؉,_Ê@Gç­Ú­ ¡G¸ +§CÖŸ¾Q—Ͽô#7to4ƒ¤ÝúL²  +G¬‰†Á¤ö$0'ÎóïñwÛôŽûG²ûM»~\Š�–Cs©Ž#Q’¤Þ]i€8“—[Û>ˬgýxÈ(‘½ðϘ.âhN¾žyŸÅ-L1’6/]¯‘~–-T²°¶Ì�žHF bÏÊ…¤é“9Þµo™ÎGz ùL ¤Z} UZÀ`ϲª»",¥ÐN|/Dw \©@Ù]gKGpj}w=&Qlô¢†ã‹ùÚ?ÛÙŸFý§½m¦øä’Yè‹aââÇý*1j‡×ËŸ`·SÐ�!¤¾Á!ÑhýxEiÂ!õZyõÄ¢Ž> ôçŽ/c¤ºêc³”q=­JiSì|wæ“j׳‡ýVÏźæè +wv0ú £kȯšmqàoåè¦ÌÒ5¬¥´Ï˜ ðË +ÃÝÖL†Í·œE1«„Pò5`ZØ÷ެëæX…[XtÏ|MÖÆ¸Äø)b B»}ð-”y."*±§ç ˆ¢ºÃ"ŒÑ¿yN¸¢p;xÏMHç&ˆT‹YX[¦5_D&sž¸Ð¸A7G)ö´KK—H¿S-µù CÊžª -DäùÞ¥e@îâ9Ày¤™L˜0�»Hû�Ê‘x©ËÅ +ùj�Ñû’žÑqòÕSói¡"�Þ‘7&¯7–‹IÎâ÷dúWÓkê²!˜hË +â–Ôy´pšÌL¬‰kŸÛ¬(¥ Ï„¨ëȨî@ HJ\€6Ô{͵Þ_Í· gÈòå¤�h q7¶JlŒar1Îøã<ÏàDµdÚð8‰�qðE‚síe™Ô̼t»Ø�Œµ´ ÜD`� æ¨`[±Ç7Eßx÷líÏ'aZKú¡²'EäÆÌg®ÏâB–,NVš–² HÚò.¤=�ÖL\ÿD#Wõ—m }ÚNN+~Éš¿��íNCU"6SG“l�U�m›”œàGí�¸v‚†×€àü¬õ‹{ó/ý,ÿVo$ ‚£ÊF4B2$/Œ­hyXXoµ[ `5‹/� +Ì_®"øæuùƵlGåû—¡€äzÝБRj‚‘©…Róó-.H¡B€ß:»>›P¼ö‰q®?Eå=[ŠhôU^%kBX±kߨRƒ‰ “Y…ÜåöYùF±;áÑ&’úæ.¿žUDŸa àåºí³*‡ój]–©�¼CEÄY«ýð±dáw£¢ãËøú´ ¢æ¿�%ÖZ¸l»¡ u¿aG²É¦ãëx;'%m­b7¼;îŽwëÈ +Je}m´^ðÝ”žw&Ü;qoüŽí†ïâšÌj¾Ž¿sBÐfáÏukXd´•ÞØJâá{�cfOž r^ÞÛ¶S‰WÛ\pQb¶…èC�…ØFEšñµ•‡DQI^OözR³E“k¥UVå”¶Ú† sVv~–Ž0è ü)Ú–qƒùlýQq'`Å©Sš‡_2ˆ|}Âò/Ÿ×–.¦q[éÊJïâÂbó†ÄÓJYZ,qÎ\dzoÞïÀÉ©ôÏpò ,WDO-5tZu 'ß?Ì"Ñ]bJ.,܇LäÞVãš¾ë°è2ÜñuÇ’Êñ”ÓæþÕî<.ehÐÉ�jQ�¦Ÿèé{B ™­&­‹hDkØ +É"yâðk çÑN“Rt~ h¶ˆÝù�?gòü¶YNV5ë—ËPáøümwsv#KÙ¿à.{äx•dõ~/a­i¹ª2ę́�×”Òg 6|šê~Pqw�Àh7 ‡©¦3›|,%¤Ú]n'vŠM:%hNxp% *ÈSõÇ�=4.»áÍÒ”G +)D63á5YÅè,j(tv E¤¿ÿsè© ç�z~ºþ0”EÅúìò O­ÏE`g¾_‰};·F¥«0ƒ «@h„–lE„´­ G4ÇêÈP¨$•™Œãw ÍRS¼[ÒU*êÐí¦k:Wã‡ü½3h{¦Ár2Åý�Ë­nÉ5ë…7cgnDê1HŽe8Œ_§ñ’ec1‚õ]=ÏYOÙH€-±à¥ó’§œŽdnîW4_2jÖã­q0«ç£Xîã릖ÈqlëAW Põ²b4ýrîÚÀŠŒeL¾o¦”[°:ÖQZk“ÿ{]roì0¹®0<ܵO“çÃ1Âä¯òRRXG´P]EÅ¥� +Q0×b!—qƳ>˜œ†ˆ!^S>˜œ ë¿_’¸uýh‡z VâþÌ’—,GÓo4®þÇDØbÚ½EÍ"Qµh”Òï´�–ïÿò¤åßW� )qå ¢47°Ð猿⠒ƒæŽM^6W/pì5LìΖ`Ú÷N~BMÊÆÅ…ÌèUÔm^>Œ4*rH¥w�'÷·ò«°›”´Û=È5Ñòø­²D°°”‚ 1dz@l’ÍŸZœ|‡(–‰™vbè’ÒÖ¦.,²”íº"f±ðú-rM¼i +åVjßh¬sçšýqW¾Pâ ˜¥œV®Aèe{V¤À'œE^òH¦Pe{±ô�'Ò:Ö€¯lÜ !ˆü8oê¢otÆ>T›°WÂïÕñz”“‹ÏH6¥GblÙP=Ð4*c7ÚR_r¡€šˆÊ�YwÃ%dv%9=¿¡ XN°¸äAñã¼W{”×5›÷iX"ÕÚñˆ;Ï.gx&[À·“yÁ%ñŽÈ,¼Ĩ@[ø¿gÛ÷JŇ'ö�_pØä#ºL'?tJà(!)¶¦zEYÖ ï÷µ†›I61*[†€Ì3+&}5éÇ5�ÀÏ#¡ñ0\>¡NQW{U{)j?b ¿O5mÀY“[pÁæp½¤5åÛ‰AÄ9ñ8U²ÀÆñ„«<Ä”ï}]¯çøÀäÂæ`ï IFÁðÏä)¢$��Šwœ$2ÀO8<�lÐúj5·HoÐ1Œ’ßù¨‹ãž{TØîÜ_âd4Xl¦í9DUº*Ècø–Î&‚I™R7¹éüöª¶‚ØdˆU͸šÜš (HÍbäÅÕ`Ï©¶UÚpŸ[a§G®nÄâê­ú¡ï·1PÆ«7hr¬çŠgŒò¤nxó?{søHA¤‹Ó•ÛŠ^¾×M¼ zÏ˻笅 kl±oõÙO¥hT@F11N�ɼ{'™MF¹¶ŠûZQr.¼õœßìÓ;å¯çÐ(Ÿƒ�—›¥R1õœùc,¡O{îÏX»ÞêݪßÓm͇Ÿ1œí޹'²TÑ"6®$ÚÙ3mªç€„.F s~h°Hš“”�õ¬½#\íÛ™»15áÂOfºñßÜåÁ"xz‡wCA!ŸÔ41üó”Djþ$‘Gá3B™fÁÂåÓEO¯»é.é"ä@C*U½åƒ<®O[â|Ýv@ï†8™ƒ®o�¨G¼á3w¢5¶ ¬GõÄ= Ë€4+ÙéhÍýY¡½¸þ$¢=@8r�0©xÞ,g&�‘VvK=¥Sb (jq‡»xá.�!pœ)SÈýú +P�"ØÙRhR‹�ZãÚ(|oè”áå(ÿÄ—˜òi# +Úg`� •ÚBÎ8§zâVŠ�Ó½Hq ˜6ĺ‚SCŒ6æ¬òo:ÏÃFï¡Jb&—Æ É•ä‚~Ñ£ŒŸ#>]TlôGDOZM$äR*jŽÍ«Ñ (¥~p.JÇ7)2}Îwöy@t´kÁÞ]~‰Î\Wå$*Çr‘œ(NTwT‚Ük^ï².ŽÕWŒ?`˜ga|ŠÅVŠs¤ý‹€!‘äÔ¨DLŒe rJï�ãÀ˜�“çµb7.Á?$}·BÌöj¬@ïÑà¶iåäœ7`A‰ +›Ã™s½mvÆU8º¡pºVž%_ÿ$&;5UFÐ-'T¢‰K�<»»DêÎxs9£P:Ï ¼zcÿ¨Éì,z™ðäîÂoµ089@UN n¹¸åsE‘©äd¬]?&Ì%•+Wñ‚SÖý ŒªßÆ8É™†ì¶ÆZÚsfÕû¶üòv‚ÉÄÄnÙ²¹í€D²K=‰ ÝÔ@EêâƒíYŠNœ”l~÷€AšMB%ؤ•_r@Mu£L<ûGTÆ,ËËØÛPpòpPâEO (]àoodÁÝy×Zs�)P ¬Ð2®±fÛ·@‹`|H•÷‚C8ËèkßY<⦫?:Õj2•ÈK„!—Ûj34%äšV¬|—å"ÿr9€<µ“ ‘åûQ wæqÈoÞ R·Ûÿ9÷DÁ[»šû›À ‘ü�ƒómò�t +ÜZOLxÒM'®¹¦^¹¼ñH5tmÁ*!ˆÆn•½?~9:úôþøW|>¼^ÌSƒTÃàðr¦X�p,¹ÕN`twgͰ[äÃ5”ö 7ZY$.o`WZûIˆJRú!"6äÜ¡ª;( )ÙÜôÔF¬ºON&aâç–´‘)e Â}ö´.òZc>ínnÛE¸ÝDÀ7G2Y¥Œi(iDžS «9žL”¥Ž¸l ñ×nzÐ�ôÎ�—2 �gGI±]±àh7@K3ViÙÉZÓñKÑÆQÄ(¾šESíB¡Îë’Ð7À " SBuE0»„ 1”Ÿp`¬‚�a0žmŒ©…›=X¢zCsóã±Ù$DñÖ©µCÓ`JaÏ…íÀ¨ î~ÁS|QN¦Ú£®"µÍñ3®31…q&¹‡-ñŸrèg¸>\pÕÉ.@p~%‹U]!8²Ïð�™½¤”±†J‰4‹ó�ŒÂf÷¥ÐÚ_%™“‘–Þ7 ‘ôI‰Yî]5žå’�¡Ö Cºõ‚ÒQ:ÅgŸô +5ªPdTjS6í¨µpÙº§‰ÒTÇ5 h‘Lžˆá ±Ê:ªÞ„ƒÍš”–ÁEjRÄRZoKJ¿-¯'IÁ7çH©8,RTÊÉcÿ¼ËϦL&ø +rYMÇàÆÅàÜ Øû²0 ²üg.éÂÐVt@ˆ4®IC7P'K1Mé­„‰À!Žü6ZÞŠB €­UTävA�Q fdz‘'4Â…1ÂÿÛê?‡·q­ù7…"?uN‚Ad™ Í÷Ó¤·Î’tŒ8­Eï©Kï›f–&õÝ�_p¬X8—ñ¥‘#Æ,Ñä+ýP(]˜Yå0ú<_ÅRg(hŽÉÃsëžBpªŠ@­ ²4zIÏBHJ‘”¯Ó�ž;Ì ‡ª$µwjʨ¹Å6=G²®g^^£í‚¡¤ª_±£ ó:ûü#8—íï/Çò�Tè¡é¼b©1ƒº±gMЗse'V|ã�Ò&1â²¾‡ð´°�!—1ud]‘_^ħÀY{êÃç[ßÉ%· +}9þ¡&ZƒþÍc&Ÿãß”êÆÔãÚ$êÁKÅè*kÜoÏPêˆÇy1à•!jñ³,L›ý"W +¥ÒHÞæ5å‹i<ñÎ��îàm5&dÚìçß)¯ë°Îõ«.Öí3d"—û‘‡±P,v¥Ü饛=p|l@|upB³±©à­´lX‚kà÷,»¦Ð‹Ð»–a™âq Ú:´-Fz3@Yï˜õNj]�÷îÄ.æâ�Ì�?Q q·PïàUÓo&“±±cÚ*P;V"­ËŠº”ˆ�aMaø~~‹í²â `}NœŒå®)“ùQŒõ”X†!hÖNCHf$åð>v§K÷ù‚ dÅ ÔçóâåOÚ²ïƒñ o2ƒû¥Rôß�æ3@rlªó¦g¨Ë…j 0ýs�£>´ñ@~Ï´Š÷á�?ß@A®‰ìºüæÙ:ü…* ÇÔ›p¾RÉŒ›ÿãÀWÒn/j]W~ˆ©b�˜Y8,tK™À­6²>„Ø#@წ¤õ44w™IáYz(öƒ©‹¯�"F•»–ÓâUÑ-#‚å,æ£: œ\wƒô}d€ÊòTEIV?_ Ôw³¨r#cDúf÷¿® þ”D¿ãK~ßn¼À+0…ß‘øš— ¦nx=·Ä¿ ÔvC-íòŸÚÂZ’àl˜ÆŠ»°f&P}Ú ö†6fØ¥þ©Ý+�ÛßÛ.-ZòŸáÞÇð¿X*úYU^|œíwDë ?¯-â;ØùÑnT= +’Dv€‰+ØyäâŒü]4�Á»�MÝß¶–’ÆTœöØf´þdŒzPò>é;qåÀ—k�ÿRX/÷¢A!³ÊÅL›ºÒEü‚KoTúüGµóš¸yÜt}�OLZ£üÔÊ�›%‰(’ÖíD†¨ål wJ²IÇí ”ÀB¸Ÿ'è�²zòÝû\hƒb±ŠÒó‘n©(eNpŠ[WƒQB¬S�±Úì$Sêý-Î�WüÇáÆœ”õÔ«ÀN� ˆžÀðØoJÇUÂÉ¢¦$K´xLCfϾ/Æ�e×^e?ï €uE2ÓçaCL�¿ŸzRïôaÙ¥¬ŽG�'~%}õR¤¶å·ÙÄ·@�½¦ïÌ+Kª[“Ÿ,L„ì›XÞô°²OµêP¡'š¾†r¿fÞ°¼’-pIÛç3~òÉ�¤J¾ øÎ�™G»«If\Õ+HÍ‚ÔRÀyÁEÛCC6¤ÈF3]ËÄÞ¶Tn¦íT°11_g¸~±sYb@0„Õ‰!·lXíÈó™§î°0ž'ŠQ5mÝŠ@´püÅP¤Š0¾Y€w& +4ÆõÐ…ªÀè÷¹íUåB×´“I�˜­£4©­B¸$°¶¤ é E´þ4 pY÷°œJ|e–úwã‚{³ŽE?È(¦°\÷Ô˜×߯8 oó˜TgPqMµ3gúÞY” ª +NŽðÜ„IѲSšUO³0¿%ë,éþœßêLÍo·úòbGa9r�ÆÆs¼ûám¾–@»™÷QÅ ÌòÂfÜe¿Æþ,ØQ·×FvÄlÿêÖœòž/e—é‰k–ƒ5W<‹- `\ªì6H0bÍ¿•�æ^KX°´S~!e3>IÔbm¦1±D×Fóhmƒè:›³p`b-ió-Ý”e­×u*œëç§+.DfF0SO³n4N×›§­pÔtØÚ-\ÝfwGÒí·Ï¾$Qïˆ\mq¯�­�í‘Ç(•üJpPàg>ÕÍ Ï�EÖl–+ŸÙMðl{wK 嘥Žáïš'ÁD&†$Ý“(R ú‚bvòñ8¨ç¶Ä˜­ªµ9�—è-Aг*pÌE‹ËÿYÄ¥\u]NDô°Yйµ9Eyhˆ²’ÖkàÃꌦ™³ôްp±mÅ1”Ô¬-(/`NS\³ãÏžïj2¤ä'“^TbQ×m(Kd±®øNTÖ'‘­Ž+´ªLÐu@¡óa?j1n §I»�«„ÅÐ.$ö,fP¡1ûÜ#Ô¸ï´M +E àßÞÇuŠ�0ÚÉ}£‘�t†Çk¬¢± ´JÀû}°ÎˆGÉ‚prTÚ$Qîw7®)Éh^|¤��CËœ{ë‰"DïÌÅfsL?�Êàc‚”­¡Õx��[¢4!8—øÐâÉw¤Ê$¦7;˜ï’RwvðóqÐ‡î¬ ¤Q*¬`~Ÿ@Ρ}Y¶n8ˆB+™Ÿâ1u i$Eã;ø�²͉Ž_h"¢!ý#›Y†¶?-ùxJcâü9ÿãzžÑ÷¦&íðý¯·^€1Došµú6ǃ=eò°°2|\¬Ÿ{ˆfÎæ,KÛ]ºOd"Gq¢tè)BÍX +0Ç”ÅâØŽ2ð¼îMBÊi¾'ZÊÍÎ4þÑŒtW{¨u]Fˆƒ6i«ŒeQt”BC4™G9S³A $¬B6¹$PÛv¡¶ +_%ر³jѵh­T‘¬)ºê=ÑCT€¿wíæ´RÜ¢½\CåìpXÅpb É]´Sư-‚3Z?Ôß)’+®�uØÎûÆüÈÞàY¶NX,@Ïwº¿Kó±Å¯â™3rEbÂlÐd¤p‰€Ë�÷ü¾‘ÞHŸdC#¹Nð¡.äU35 +¢rí|Æyí Kç2çïS^ÌÉ7Í)!„²¹iÁTóƒíÒ/p6œ½Šre×¹'‹9Ћ?p£O#*+¹báå3%Íf›¸úhŽn°ŽBjŒR{ŽÙ“A>]aƒ�Š×ùfÂ?ǹÄD”@¶üǰ«F�—30ãZ#qf^¼RQ„HëfU)3 ¯&‹~a²Åü9¤nC][4ìÎÀæ9%WVÎ�¨q3îd…òÍ(#E]ˆP2t*HàjDhÈ©sö«Íµö°z 4É…'W­­cåì³n?³aÝã˜L  .Ä9'’Ó�ßÒÀ±Ñ›Ë­ûú”È1Øo©ì@·y:.Ó~«ÖãP[ªxbñŠßN++Øó[ «*å|´î{�Xv¶à¥´È¡f‡¨%Fá+Ù‹.¡¦É-]Õ;ôÞHó(×ä[*&Ö“fP¡ˆo1ƒ¿8À[\.öÉÙ¡òî\¿ã@ßZC_ÅýŤÌ/ ù·ºÀñqMž­RCià_„d‰Ó¾£)TÀå©Ä„®Ýø){™FF/7E‹÷ášÜoí*ƒ¿ã{Ýr0ƒG®Ó­|²'fq[‘æðM¯D¢r[P-¢´ôjš ¤QèPŽDZ&Ô‚=_»’wANè–Pn$b©«>ãÕ3·‚(<™ö8ž×­|BÏžc�Ê£ÁÕ¾Œm>-zî[(rÜ‚v0œíÖ¨Ÿõù?0ðm·ÿâÚCîW¿EjÉrô/¸¥¤Ge|ÏOCf¸eÕ&1YPQÙ³Ýpkì3Aó!b‰oÁÀ÷eGµJØÒLÙ4ú¸Vm-4ÉÏJb÷Ž”ª­Yßh;a_w6GŒý¹ÝÙÂlyÛª­’>÷8jxcèÛ÷ù2‹�A>ÍHÚrì| À±jkKø¥¶ÊÙÊî¦Úš‰¤DÁ=$æ9çê.'-’«:†H¼;mßQ ¶|øÃÅáGi',›Èc†â.¶1«x!úp˜jt·�×jìûŒA•ÀÐ,ŠÑùðî +®‡—£óÑ7¼šïœ9èÚÒh‰s~^xÔoÔ/K+½®ãõa³ð&ÀrÚÑ‹¤úœk+ldgÝ –F.õ +ïµ¥$î‹o¨'ÈÚbòÕ@ù;B¦³¶Š•U&"Ö–lÔ¥t{mI ¼g5nÖ�¸\~Mì�v"Ëã?×qbmßs{L®2QÖ}ŽXfš kË Ð˜ò2�–¹îµUaÛÖÖVÌ��Å0ðýQóÑ�ƒ£ª†‰`m«‡V(¼h�!†mvDðyÝù…=ôån N¹ nËa`+gìok­[ácÚ‡“o‹õJÅ òQ7©'Ìâþ'f uç\ž"SZNßÖu‘/лÈì¢ÁBQI];¼‚�uL'�³ÕT‡eÅg.½­«K=¦ìºœoÄ%ƒd%š´ åô¸ÁÐg (±¨ìòÎÉAWV*÷4ÿ: Ç Ç6ÁòíØÖ ‘Ø êTJ­ÆØÕD˜÷œZÏFŠÕ‰Úa-#$¶WŸmUÞ{äö&Q5�e•SñS€Ì¶XZË^ž +vË9ª>Nã�dÉßžcš6Äèùh"³L=¿}ö`ìU„˜vxgSÐB!‹MÈšìLÀøÆ÷$ˆ�{µW‹Aîµ…À� +êg�â}ú)4%\ÜÓ8ÐNÕÊÚQ”†æ¶01ÂCðÂCh� +|†¶Òª¨ œJ(ç]²Æ†¨UIÕŠî‘#U£…Ô�ˆÌuæG§‘Ù$"‚ÊhËÜ鎮Ò�^¦Qÿ¸%ÇíÐÚ‰cà³bŸõT²,Ï“o¡û¼â‡ÊÇONy‘;®¶ã'0n³§{¼çõô¤¨ÿ¸8jé€.w#â«H�0“ B¸ò0fš:+Mlö5ï%wVrSpL!LáêbyfÀYqÇI£›eQߪ¡Í$…Ö Zó›Kè Q:h[)@xd©‹.GÆšÆ΢!¨g`ûÙÈ ðÁ¢V³—ÉÕÎéW`ò0+ku”¥ F€”»¥³µ.î endstream endobj 33 0 obj <>stream +Ù£iÞ@‘¿-+°Ð—È$µßŒ|÷ýÆ>µ$òAF—ôM¨�ef£ô…fH°ÜVÑ¡üÔDz�%õf\õLàH�(—[ý“�ˆ‘ëÔ@Ž*·Ùà h6·Lo�Ê)ïÁ÷ƒ&ÑÍF-Z  67¶Z´`\I­Öy¤Y‹¦†º>™–ø0g¬Ò8Ü·>¸"!¸ ÌUþìpé�$ãû;i‘XX#ÊeÛJáÄI�¾N¡�0 *¤ä­QÄOä*êßœé#ÖÌÝQAlêdZ†1ÒG¤ +dݘIç>;efa�’î¢BÜ{?{bÈGêïÖÑdã–�êR7t�“!6¶NÌLœ +[Cy‘àîÿBì_~Ûë.YYáƒ$v¦¸$ƒÛá‹ãÑŽ©—º #ý㟿' <�aÊ…0–òËÁC;F°\â!:ìágÙƒ5)ÅÍ ô¨7t¶ö Ú³ÞÀ£Íùªg˜s€hƒšÓ}Cévwƒ¥‹þÿã‘y¼u f ¿…ôFšöŠû�>á¿ëšCúœqÁ²71ŒëÜj7˜gÆšAìõ9KP½l€¿ ho]N±é×uºs P†·k3æ†.Kø*jìa'›»I­ì¼Ã’ð‚5vâ‚”ÝƒŽ‘í Ø[»f“¯ãŽN!TNîÈ@ülu¼âÎŽ-�[wödÒ�põüVý˜æàý*ÄßÍâÉ»Jÿ—u7_½Ã'ôè»Þ‡ˆÀÓl #¾$ä�6„š),²;?zÿ]Ø]Ça¼DZöƒ'ÒY½Á¿‹õœÞ;`€ÒyV2w7ˆ‘ÙÀƒ‡¸‚óðR[Œ`Á +¶Ž¾‹•8Ï‘²À¶Ç®ÏáC–ÿ'·tñOÚÄûÛR…œÑª>ö©Émãö&Ä~•N‹¾?©»ò_ƒË}š›ôB¼†ÇKãÐäX3ضä²­Æ©°N~€qJØ6 f?qõrõxÙñd$¡½ÉŸÜTÔ^qÜŒh?¦—«ôI»±~}‹Û®§5‘äÃqHÂ{a1^äà €•ù;—È"0Âb b„�ý­J^¹RBÀè½–ÿ|G†T]8•x4ICÌ;àóØuRè7@ôMĦH š©>©I¦žŒ�<Œ2Øë™¶õlb"„Û¸¾¢Ëp²P=‘ÉàCv@–¼íùð=Gz éŽìâ‹’M è5rªÄä�•B…ñ½~±¦¨÷p6R$x"+þtl·¯üÄ<¸7_Àd‹3Ò^I$Yÿ_‹å¸l¾–ò¤È!ÅŒ½`œ(l¿>ºøFÁÚЪJ¾Ý¤”µKÜÖ§%�p÷ïMšÂ•y™Ó’Kχ3p$è�4x0�“P–ÃÄ;í„þAa^4ME0JN^È@'9ÓB<:&ÈmÎI°lÕG'JòB4ÛVGþ*Ü×h°§�"�Ëé_ø,ƒp�±11GZÝL®­hÛÅsÄÚrèyœ†åÜNoüPSj^0œê%Šx*¢Nåç×Jµ—7¢Z‰œ‘‘æ|îd/à�3]5¬NRê °„%ÈE‹ÆaÔnž5ÈÚMœw`�„0˜õdÎÀjtˆ,Å~t�Z·��Ìehךn.òFé*àëCv½‰œ3£9ýFl 4ýB¥ÜÛñß/=‚ØûÞ¾-·ÌW4N’æ&f‘ÚÒp«ø¶0V¹˪¤ç™$ß‹È$1ÈûÖq�H=p{]²¢¬»ÏˆGÌéa xÔYhòô©hÖ[øåí[²¯ªÑª��áJ¢gñ7±p¤Þ2ÎÇw33ÈcêrJïë üñxž÷ÒI8•ÏÓx#8‚¾îí¶E܇ۦ”îžû¨·ƒFZŸ±Àj5t�w0÷x�uR0‰ÙxBWsÿwWB»äûbAfV3Ðm’"‹�6&E&AKj›Ó€H ,Dòƒ±aBoÀѧÖ¼ݪÄ0áàÙVßïÏ9H#²¨ík—Á i¤OYÁ +ÁlU3³ÛT¢ÍuȵÒù€º�0è>½� ìh£Qý4µ€ìT8nI¯^Ì€e’Ç£�&Çônb«&u¦î‰ÆÐZ�ß�9Ÿ§ù5� GÂ…�^­]5EÀgç݃Ã8WªEdkøîþqÅ—d³EC¥¥¦ÆUña-1Ôr¼óèL$SКˆHÁ÷G>oø7:°^ìÅO™6¬¤Ó�cQj°ç6Í6¤&}[îl.jcŸ¢FÄ)QéÎïÃqa!Õ˜É8TW�h"Œ«C�•)wòÅfþWœõ-3ÚA¥ºS ˜$ñfw‰N8í&º*+™â›©À‹H'θ}42{ð,¾Ÿþ�V {ŒÐLÅÙkö2\í:Éa7³ì $g¥ÞYȇ€)4��& …Р¹ÇÜ †p—@u¥Û`¡\e¬hi¦ì"¶#júXµK%zVV°#ÚPrçÅ?šq%‰&�I2q¶„° 8@âÜB�ÔkÔ ƒÝ ƒgÁ 3¥à™d(Óª_Tšuˆé‚ˆZã-5Ùr®XàãÂhìóõû¢f‘MhÐ*êëkâN�×fC7Ç+¸ÅŽ}B‡Þ’F w&�Ýî!á’#ú³OPу QSC¯eÍ»a\šâqÍnŽP‚˜-Û`˜FªwdpÜQ&Í +U¸¬¢ÊÜEÛLUÔ”ï6Z´²A‚¥m=Añ� +‰¾dØw[@¦•Õ´ÑP͝± ÈÜ^™EëÑÈܲw€$C$ÃÔ'ï%zX^=Þ¥v¡¾3Ì™·—?‡2w¤YUR�¸-Ø¡nßhâZÞØ8;Œ†h¦»L;¡›Hm =>a€ÉøŠ[ Ê?þÔúhBò‹Õ©Cs Ŭ²Må…LçÍB6–Z[T ƒô5ßAð?¤cnWTIŠÈÅØ é¼CËšÿD�]ÅçOHwõ�ß06äÌz>B5¨g¢6ÜÀMöα]äü^¨iõV㼞-ìÌ£¸à4óçR”£ƒJ׌þ”�˜�'{<„ž]"@âVMÖOÐ?Нx4�²ŒßxüT›æJ¬æcp&ˆ˜$±Ú.‘>9ˆâŒŽÇ…̓r+gƒDÄbúrCÅDw`W¯…ÎÈW ôMß­Ñ0bI6͵`™åƒ°³Ü£DÃŒ¬ø­!®¶Ì‹YP:ü"Àâq“ú$ïèkKJ¦ì5 Þ�t8>ØÅAë�›B&cb13ÎÀñ°7€˜g§F2P|âåFeKj¬�ÕÞ…‹ov`+Ô¿-Â'¡þõéDV¨ÓjïSÊĘsg›óð†ÐTšpM/0&Áë}¿YWf,#ÃAÇh=‘‘¼D/Ñ›ÃG´m™ü{Aö÷Q†thfTàçP§»ÂŸÌ&qiÌ‚ ìx^€Àæ�à¦6y»ÏÏÊ „#ÊRD$;Õ YänÌÉ¢Œ&nFšÜùâ! ä¡ônÙ_€”ð‹Î©ã4&¾¾¦T¨ñIô.×AÍ—{ÀîïRt¤šE3µA‚Vù¸Ä¯mv4þ“nøˆ:=€apûƒSy¤S`e:Ìвeq>[Gì–‘{®¿9ýJNd˜¬PP5w*îÆmÄþ3à’5j y§þà)Ò++«,£>аDŒÖÅèdØ¥€Ö½DåϤ·.5Á†y¨-)†I´}]‘a³^“;âqmЦcG¤Ýs w¼n¹s±†é`9ƒd~}Åd,Уàò”dz:êµ"už÷§:³ÃóT›zôiÑ<&"ÖâÃX w™¸ÙBÛ$uxÙî%N9œ$‘y›œÌ³èmtꢟõšp–7Ì0¿.„Ò/U´ÀCÿ6¬•݈ÚOxé7ý€Ikö3Ž:Ñ ?MdÀlcàÛ솖»á¤†óÂ�`ÒñÇDØa†ÃÙ®HQÇCñõ±^¼È0ãD�ÿÉŸ µß|>™E1t|‰�PÝ+í‚¡v˜‹Dž´’lš��ö°×ü­…ÖÅpa'&Ès7ÎGY÷§õŽ<°a!OšN0yNñ8ǽz—[zŠ1\ +¬âiÚÑTó”>«©Þò*q^~'ŠÐgˆâ‰ 8’M­‘�¦‘Aô�âþ­H n#d‚Ã}àDÅ>¹ÑüèCvÏŠ�X>Æ‚k ^'ú�; 8w’¨”d�I¸[)‘ëiº_c£Ÿµ è=�R)í~‚w²×– õS®çü¶¶Þ„O ‹À[)*$ mj"HU0ÍõÊíF†¥AÕê +”…!tLBÙpMPõ*dãÕTÉ&%´ír´}€Ýb™Ÿì«Æ�´¥{Áº—¿i™ò �šý(¸ÏRÄ(ªàòÍ7<ç7´¸ŸÂÿ’¤¹ Úû u&.ƒ‡ZQ÷ž]Ž=OÆ` N\~¯Ú+>ßiê­ÇÝÇÑŠ|ªßQS³v–ìÁcðhƒÄ%ñÁ e—.²ñWmtXtE K&œB'D¤$V#/J…f)Æè$t\­gaD:‹(vИùÈ‘¸¶ÔŽŸ«Æ@‚ð$GbŒ°÷½6*%¦e¹8š>.Ê!¬‹HÌËn’×d½Ñ@0xç##Y‘Œ³ŸÆBDV‡òq-#K~×ÊûÐþ°Wd Q:C¨ºµj¿Gž$bLi¤p†¨ÖCJcŽÛ¦œëA*®¬ny€ HC´Œh®mÀW°(ˆ}«U®i˜kø/\²pò#¥4ý,1$:çB$ÖÛý…Ú‰ô7%Ð à°úê¤tœ‹QP[@:ý]EzÕF6K�C´(jšžÍ·nNç ezª é-‹©@œe y¨;‹60EäAXlª·¢«CÄt4§QìYžÇ¼ G%îj‚‡$;é™·’¬Uì1¬¦tœhêjS™É.¼–‚Ìú.¾Âiøþ'¢~Ïì†k£IB sª¼^Žâ§�ÏÙ`×örß,¸¡„=Õ0Ä;ðx…šÔÁkŸ¤š1N*8¥f§&,ÑNÁŽâj~ÁíUÈåº�™rÂÊÅôÇpñÅB&‰8Ò5Ëï…$ éȱ‘^ +9ª”~Uщ_~vMÏËýZ@¨gècŽ8Ù|ûhÔE͸ýʨË)q�øRFj!u\uÔ˜÷€o±?þ#€Õ%U‰ +àcžÌCQýÀ0èZF[ =\NÝ i˜“açí<¶Í?Á“±‹ ir\f›˜*‚ÏÝÆ1|ÍÔà=‹„ê0µ¾ù¶á€T©ks¹>pIW +VÆh'‰òÞDè¼j¬¼ÜP@²:¿¦ñ×0J¶¾/™Æ³d¼tT×7DµÇ"ÝUL³mÃÿÁì4öqRÒŽ†áßÅ**yõô[%C9�� 8Í w rœl˜–5o¼»Ï¼¥78h¡$›ˆSwÕ+P\¿8° +˯$5ì>P­ƒÿ xŸÇ‰ºÍÆ‘‹!EîÎ�Ñì ¿Mg°ÂL‚Ъ`ð#sí2Q—ÈÜ|‰âgÎ{QÜ8U¹¢D'}Š“¬E_ðÿ·¢¾ÈoÒAÒe¾ØÃpnud¡ÛΗ:–`00Ì ªå¢Pë<ÌêD¬ó:ÃÀj2'{#™$ýâ2 V2ÒuÝEƒ  ï‡ÇßKÞ»±‰§‹êß!,{93�$�P?+ܲz3,,•_˜GIÚA~góêB½žj‹èœÿxzNÍlk(<a<$góíÑ LºˆáÇ{Í;D“¤+$wj÷l^ÅÂL�‘Qmé=N3­ò/îàPL +XÒní˜ +.ë­‰y U#U&�HÓ²Ö63j§�d»ˆ”«šÑê5®‰'dz•´ÕÈ@™ËâÈT¸AÀj'(AD70Ü¥tº`\(l•è‹béÈŸ­ä�ŸE³ydÖ‡W1â5CXÇ}° +ʳNóØKB¿c4’Þ,¸9hÌÊC8*WöcÇ·À‡ð¾o»‡/³>«$XвËöÁaXh<(Ñ»¢(_Dƒq¢YНôÌ‹ñ¯ØZÀè‹ç­U¯oÑ€�äà SÖO´œ×,uО l“Òr# +™ÌïⱩ¤¢ó*K9l%¿?µs÷´/:û‡ +5fl÷…ý©gÒžþ†¨ÅÍ|$n¶ £³™ìNë_9‡"Û0°‡×¯² ¥*2gò¡V.+R°Î=Û[U(1Y˜ÙœÚWýx>V/¹œ^ãvûÕ´ÚÏ­"¶0|þU#l3„XôcdEÌUlÒ¦‰u”*¯È¢4ÈÌd£p8vÈù¬XÚiñбbý +O®› '¯¿îÀ5I¿‰È/�̪tby4 ÓŽÔdBÐ "%t>c®ª¼Úù¦’˜ìÁC´5 «þð º;Ä�#\öÿhŽâ?ÀR¨âÉki \¢_ÔR^~C07^@ÜcE^9†N#ìbk(Bq†×a42YÓh�®i™»DÑ€8�dªá·pÞh]"}=è.p³Üð3‹œ T]SÌÝN4bµ)$²–ZÎŒ¹@lÎæR±xF=–ïJ8#F4Ÿ•â)¶¼~ðd† KÐÊ8ÏÈîÆi· ‡3û/z³òuœ»Ôû6ÿo‘ÁQô?e?U×™5‰¿¢iÅ 8~LçÑ.úCçËê‰ üüº%£3[Š"ˆ–rTðt55n)l† +½Úðà#d¬r Ü( ~¹Íi U=’¥Ò 4�–”¿êû»I�W\ÿ)U ”¬3¯Ï�©¬m„‘q�ºübV Ù²L.Œ�X\§4Ž£ý:ŒŒ€|ˆÞU´ú�0DVëäþV +KÖã¯J0šO0ÎhœÂ1ˆ¦ÊXë`DÍCY Ђœ,ò|ÈÙ(^{«HèH�:¬—„Õ|ŸGÚÙs�%?õé±·³`�ëÜ3áýêøi»¦aÅxäëªl·ÉBÔAȈõ³M).÷¡$ ¹Éø5}¥v±é U°«‘{ +µÂüÇ$Ä?i—‰{œ6²íB�rˆ£šC¼8Ó¯øú…uä7ÝDaGa52ûˆØeÎ�Ý0š°"—IAÔ3‰~I¬;:Œªª—äT,åóî‚5oõb‚D`ì¨j"XRd] 81Óþ“ ¬àf ŽðBö7Â&&áD^Z2céž–¾œ=+‰%Rúj¶ŠÎ)Í&vè;8S¥çÄôβ:’—sÍófÆVÎ÷•J‰‚¥|¨çÛ:ìáî +Š[›É{¦Ç—’äÿj ³¶fìÖdJ,¤­XèÁ@ ¶6bË]ÄyY'¥]¡�©µ©2=¢Z!}ïU)ó¶WòÓ}éŽmýGÝIƒ^®uW­®#Œœks'Šk?BAb˜~šZ/6¶ç 7­h¥ÙÄæsC±ÝÁ.¶œp}Ÿ0>pƒð?5~@i6 aË ²%iä‚Ó±zÈf8 +�¢içÕ½SrÒçSt!Í•¬€IN“Ñ@Þ2OîKæ5Éè6æ5„ïï0 °ŠÏ‘ÃäuBäŒ+–òêŠ�g^6Ž5 ¥¢’�‡�¤PÆüÜÆA3„Túß½)«ñ?ŽÜùõ _ÁA|Tªy¸P�Ôà5.Š{·Ù¶â¿&’XQ…(’øÉ„ÍÃne_~ðFnC’Êk<€ë¾C&�C7FÂ!�tEÂß¹µWFbŒ+ɸ˜[¾›~à†�‘œÛ¥ÞÉ],h’?¤ŸåmqóÁv¬o‰uc€‘&¹Qi� �‰ê;KI°!ÔÈ�Qñ4ÓZ$®®dòQMG3×<�ÉnïŠ7-ÉÈ“‚À�KÈÇ)læ‘ù9ÃPâiü õ¹áÇ1;«¹�r‘¢1$¸q1 żÈyŸd£fØÑH›ï s0MËE§¶§´€Í“Õß‘¿Ìdº¶NÖÈÝ>t¼˜²IÞÈa5°ÈY­ +öuJµg°.±€n“�G¯ I ù®À­c¹_Áº^'i’!¢‰ÓN³(6ºßpµrµ¥–1U)½>OõR˜À©A¼·ÈÌ–ºÆÊô*eï ¯ôi<ƹ±o·\Q3q>´Bˆ$|v‘DäˆAkó·ÄtšÐµÕÒ3Å‘7¬"â~ ´�eq1&Ö_6øT©–D7Tš¹ ]8g EïšF¤Ydÿ ªoæ¶Ó÷>-ˆ hôê𠸚¿ÕwÁ}IK2¡Ò†þZ‹ÏˆÁå†üK›¦ùÁ‚¶ÛŽÈ?ÎAÀO ú¬í$@· ðÇrò•a0Ä£ÏäMã,°GÕX:†xkÄ™;@�'äÂ8˽†ÊCÂÜËḌ¾S¨Ç®ŒqrE8Ш”?0£…U‰Aî‹ÐÛ¢„¯ˆÍÏWìU_èï/‡pÚ‚�öJ'v',T+½o¿dUøÝk÷/\Ô‹˜¼G‚”»þn&# +çŠQßh„`¯Â 'l¿.¶ú4Ów¥LïÄ ž¡;!ÔW6Kã]ºÝ�ïê³!üÈ2÷�öpÍ]l6n©ƒ +IŒ6TN°G?¹à2Åи녀·àŠ;yÏ„¡ùÊlÞ#,v­³‡ kE¸kö³9ÔA= ¿²×röíZ¤T2ÓMPÈžHg‘ÁÓE +¨°}™*¸;¦A½÷9HEÛµ.õ …` òyÒ£1"µk”R¿n‰‘rÊÒ^Ô=õîr9?† ‰Í^‹íu!Ôì}•d7R;!=2qâÝ€ó–†×õ#�4„¬!u‰*Ò*ó(§¸Œ³Líj +Óz½ºµL«X +ï¡–+Í#t^æ½up€Š +®T,Ï�øþ¨ñÔ~ÓJìO?jb/Úmуoâ÷„ìžXE]µQƒ8ö¾my]¨ÎMYèr^ø[¿}Œ”r…0'�Ãpmƒ¨9š¤8­éq#‘ǨV”Š�®òÂ}΋©ÌÝÛ&ÑóÀ¢BÜçrœß–ðÞªb€šd½"!ê9Zˆ`4kŽAw�V£À;0>žÏ‚ùÔ¤˜îî•d,~t*"NìÒ°óÆj^øþ4£u!³æp.Q}ˆ†…´àB�†wgü¬Eˆà…–ë¨YnËÍ¡­!žt�ŠùÜÒÓ,˜íeË + Ÿ<¶å‰Ž“ÙG«Ä‹¸�$O¬IÙcIeŸã©‘p¨(Ýú“ùj' Wx«1”­ …Y¯J,ù¢WÌ}  d6H�¼]â[4ʲĠ¯°³O„È‘VX-¿é5Dàá–‘Œ+�œLÜYñôred_!bnÔü^é…Œ"¸š #É�IžK£äæ€cN•Ç@ãÇÎËø8Z¿q�öÂJúiñaöH +ò«¸¬®"²W¾äND¤r×X‘¢º IE„A¼¤ñŸ5µ»å©OL×OQuAcµ–x$}¼+ù~“YÝ#†m±Jë[Gè†Ô1WÀçÇ1D¾ˆ œõµ½ ÃQPÁŠÄÌ ‚Uáö(†~í€; ʾFÉÂûH±b>11J-P! ŒŠøü‹ÄÖIä�€®1»ˆµì.j…áÄ«±ØTÈãlØF(6Ðä¾*(±5ˆ‰XxÐúoÚëÀÖ7ÉŠ¤³®ï‚žŠa?FÍ7�n!u´!C�öÖœ¶å‰ŽÉJß>K�åZ!R ‡è!,!Ç1‘X â)�­Ê}=œ|ÔˆÞI ÂC6*ÒæfŸ ±R„2©é=J,T�¿üŠ„¸ú`ùê¨^eBÆÍ¸´*©Øî|òt¦Ä¼w)Çyî’üXfýkó¥ë˜¹ø.Ùš÷íÞA�ƒØÒò‰H\ÞÓ šs�¹GÒn"Z$ä‚(ŒÌõݩɦ>‘„2Á:V‰À¬×K-EI}U¾L[�O;_s–ãëpç§1›ƒá^Cÿ¬7¤îH¶ÐܾÆfÞ�ó%�²¬¬¥‘T±¯HxC[âúMÆ8ÊèºÒ#EŒžJM”uTë=Žõ0£LD^þ½bUª—Æ[WRªø?‚Ýq͵öƲm–X³æ×Ö”{4g ºfº3 s7~„.âjj Û"޾Œ`D”/*m ‹ÆwytªòœW&¿}'°�âv¨Åå ñ$ñ (ÃÁ! b~–äpÌs|>¾g´³6êÖ¦^‡xnïœpKâµ×ØiVsõ™ð…p!E=3“Ægh˜Ò¤ylêŒ�!¶ k¢²ÛäWBBÌÚͪ2“ZŸH€Œè®vp�žô+Íò/n#–�° +g%‘À 2Çœ\ؘ爆î`UÒþš‰*Ú#üžaynLfïÅZZºxª\-ø],ä”WTl‘,Š[$¹`Ö›Ùöjoðsv0 ÚH.t·á\­]?ú—Ãà’‚‡JÎEã²ùPc.Š'uöÓ~DãQ!~“íEy:o^33pí–újˆ8XC >eÅXŒ–ŠB®ªbsÜYÛnô™bB?“iõäRl¡ŽH¤bªlaSl;t|8>æÐ€Ã"™.\F3º¢Ø Ëo‚H!�bÜADV ±1ºbÒ7= c˜mHcæ\ŰÐnái �Õ=M›ÓÀrþ÷n½äúÓOjè _2üi¤›Ò.>#×kìŒ0í7µ\65àÅÖ£žnÌ–9‰�‘+\U¶1ú .0ÑõÞƒºÿšÂ¸1‘íO6¦Õë¿�éÒ1{aŽßö'IÕI9ÿ�_� ê2pŽõ!â)ã¼/ò�QtÝ»rpÌæóç,5"lFé[ãüæ—uŒ[Zß×�ulˆ’G­·±ðU€ †h´k®”~;Ÿy_§=ŒÕM'Ï8jèÖfÎmöƒ•ŽÑèAuU¥é¼Hk*ÛpLB#W��ôé�¬½„ÖÅ% ã=b½8Ã'w©“ž¢uŵ!£Yc° R~ìkNW -$žôÎ@æ˜vúT°§�A—зüX�ù—+�µàžŽ*¥ÐŽÑ@ãúr,$x7”Ž‘À8UßZqÞöÁZ@²äqùçô@`Êc/"ë J óŽ ï}®12K–R`é”·ï$]Tå’~>=Á’�£×¾ëòPRÄ�M6ÒV„Í‚ +)Àë"é�¨«èw8DÖ¡c`UÖmÞ@C^ï_Ô¼{ Í!ô̓¿îO¿Õ-—š‘‹ðà®Â•ýBº¡e…£ùñtAšOÂëR¶°×IÇ~ãhIΛÈf]LÛ5’åɰ  ˆFJ¸^|µêJÒ•Ð5 sFEÓœºîéRhEÕ$’5WÞ>Áæ7 ‘çZ>ɵk&Dq^ËFfNÐt™ö{éA1ÞDP¡Ç�¬ 'á¥éªð2ØN:�ø›-ç¥P°†b‰‘zM±®”$VBAôt¨ (Š SÓ˜à:ï­*“�”{_w©kéæ&ýgÓØÀBÞÐ÷fÖ€cl¨9%�Áêº[¡mÛDôUudÏòªÝ*_Ášñ�a².¨Å¸R¹L� öàax‚—ÆWx­T'G�¨ïEK󊟦9çtœ—ÕëWO¯¾cÌL Ö+ô×Amíºn¡tËZ“ŠbubÐ�! +J »PرYÃÈ.~1¸]6i˜åÔÔŠºGüá]ê^øùʯñ`ä½.Œô‘­ä–,,°øÎJû5M€‘Pofѵ �ÐbeîÛ†?‡9¨.� ^«_è Ze¡í.?¢Ó@ Í 8(‹»tÅ'Tg|Îk{õêö ÔÞÄ“˜*`R™ _²PeªyÇÔY࿇fmè3CÐÇÎp �iL�g$zXšÆùå…T ¡B� œó-‹ã%ØÀâil‹<ˆØ'ñNÉ¢ÄSh$NAªÜCcÅ�7BKÂvEù¥ÉD¥/ê‹pzùiP€8�š´Ú<ªЖøI¨ (¼ÃyazœûJ™5ßbJ>ül©6}[Ê~ÏýŽ+úûwÈëybgë¨}=ç��8Gxˆ¢&^AÖ¾(€˜ËRÑ â†/ÖN Ð6%ØpøtHûA5¢A^jЈŽLšnó;ÏZÝ×…?L~Xz•Ç# ˆB÷!FÉÔžçZ.r9–ÇûB¹‘Rh\Ôz=ï’iùÊ�‰(׉R°$ðâÒcÉBŠ#é„mQ{h3`‰5ȶ'®à(‰Íc]×EÚñ÷5˜¹æQDã¥ÐÌr‘¶¦/ôC×ø'´ù¡jšý|`h{¢-‰¢‡:FX÷qÜû0™�'Ê[¶U_»ìä*”ÖW HïGVuÂ=m+ƒÏÛÀGº�æ‘’æöMókæáë¢éàÍ@ +LWÞÜU–æ®/À�jcö»èKš³$Íå¦äá×ÿ˜b¡Þº Ó5ÿü³Z+uÁx&„±ÄXg” øYµÔÇ•¾/šSÈìÇ5WÏD_ê 9Vv§ä�0ÂãˆÒ°Û°É’À�ìÉQÝžÙ~ud„ù‘†gk,‘L”Àe…"óÂV Okæ@ÝÅâð?‚ +–áàÝgŠŸ°‚ˆÄxPÅÚ–æl^q” À ¥IÎ7Xã5(M„¦ÇcRâÑI Û7}¶mÿ+BÈ"àJ�GK Cõ$*D>Š©Ò¿D9_Î\{'Y®Ú¸åÅt�Œp›FûæÁNꢙIhsÍ ãBºk6üµhÙ¼�H5Ù„ôe„wÁbÜg¼Ÿ |þ¬L¢Øzuä&œ4]V´p]mÉVúÓa¬ŠP€Õu‰¬JzS�›ÍÅ‹�´ÎÙõ™G™i*ù76¸‡"¥–6gf¹aOg\õÉ3��í�_{±¤Ö0È-:ô=– +X‰TŠëQßDŸ'¬ †;Ï Ø”òr^ÆVð– Ø\]Uî\ÙHmV˜�Tâ@VÀ#a‘l ¬× Q!’^°7ëÇð]ð .ó«—’“Í.Oçù3Ò�½1U˜NEÞÎý<èƒb¤è-À½ÀͳÒ(C$ +$›Æ‚] 6n0/° ¥^A� åí`UÁ{2�B"ކ`CdŠ×œ¡<"�Ñ?R]l’ó¦+¥¹êh$A3èÚ«àˆá-Jö…Šm*�ÈüøAQ8gk*~¦Üþqà„´õð¹µçÁW³Ì²Ò³i�YyÑO1«Ûpy_µV½;å¹–H7®f �›^Q·oŠ˜G_zsýæ‡VÙ)$‹©Ð«7”€’ÀžÒ©Ò"·0¤<‰ {Ûœ™x||€Ðm$H9zÝÌ×ÈNtw# (Š%¼Gph³´êr+€Oïí�ÝiygÛ&#㥶£hWBA,¤Þd?�È44öè‘(núÆcxé«gŒPb\©Á²8Qn³ÙÒžÉyŠEn¤$Œ¦�Î/œY± sA}ôé¹TN$ii}ÚuXÈA`°bëW¤pË©øDE¼ÄCìÛà³ÈH0 |µï n‘–áÍný÷ä:èð¦Œâדç|-x$œ +kgÄÊ#Ö·IÑ?�€Bt’Gé=ña[‰ÆoóF}eŸ/šëÄ\CÞÖæ®L,²-½i¾O¸-È�¯ûòð.ò˜çį¨íölôAzh¨Ü…þøµ°?#yÑç¨ruÁІQE‘ Í5ú�5]:¨ ïèý€ÞÃAÏn”7fm…D“XƦNz~ûßÜ9¦�q›‰Í3‡|L©êñØ!Ï>þùUm1²çQ rT8Xÿj¥„À¶¬Ô÷LJ‹Óæ#yLeº�€-Ž[ˆÐõœsþñ `H-,ô l…C?°|¶”¿ *uîô2ÃAÚ}^‰�¹a†CØ ™j%SÞw,\Ñk‡¾æ…å%¦)ND[‡E¤¹’ˤ³ÇȺ^ÅÊDѦԻ%=7Žo ÇU°™q$˜$ƒ:Ð[i�¶ß“éŒù™ýû)®Š¤V�×3žãB#ÒáÏä£aà¤�sºwìn^4¿$RÌŒòBè� .𽳇H–0Õ¬"•˜}-z€g€_†É˜0áà/𯫭 +%#rÉÏhðÍJŽ Âãc� +?Êep"M§)Ò*”ÆÖXGà_=fŸv»¢KHÕÝ9âM_�·€”¿hrõ|ÆÏK€ /•� e¦Éƒ¤¥R…œ�·ýÄ£‘ÉÔ؃{€Œšà„šU@ÃÆ;¤N-ÝMB"i{ÙXФ&DÀô±Á1x%‘hE¼ìžrüvâ=v¥-÷úNˆÄ*x!Ïе1WÊòV^1Š ŒV3‰)5‰ué‡<ô/³·C¸?Ãê V¨áÿfñ£žYöã¿¢¥•6ã=çE8‘rýå}§›Dgºr`{éEÕýk"ç¾î¾(®œw0ÄéäczRTØCú¢ .õÊ\ÉÛà„ÙyæÌóPê³°R×N¼åA¯¨Cç’U€„[© bl«^V’ÜȘzŠ ðk�`èå%¤Zô]¤a§—ç¹Pì_byªÖ¦™§ga¶‚GG`E¡tsú€‘¨ 9öpÔ÷‚]k…2€Ñ;"X`ˆ1ËX_.]Ù6fwAd5 1L=%%ƒFG5ûûŠl×’ÔÐŒ?ž@ !h}694͘à +ÜU^êÝm$ìnä7z'cv‘¡²Ïü­H6–„äIp€×âí“öS0€(kKëØÐ¬oÄ+àðÏ� ,A½eA! vìy@Mžœõ®þžù¿ Ì‘¬– 8 �­º4êGZæO)}å¬%>À5¼›�Ò&�¸åÖÅôÖª×+#èÒ,Léj…o¯Q¥vW{A^iàœi¥4Ðàai¥¶äyêX4SL‚Û9jX2�5Ä>¥w> .’•LrÝNÒ|mä%?Y£iìkÈKÓ°Œq<%Ï«ðou«—¤U'/ü¾ÿ›cŽ3òL;ï%dèèwœ,®+xÞ{K¯RÓäQ®ž:“4SB»ð‘81†¡�L¸/ðÌõà8Žå=ï vQ�Ô®Û;Ö3¶’áÑDoᮡüð\ïÂÉMM±qQ-‡i�Íwy['NuÃ˯½™ct%}µ±"߸‚“s'¸5›‰KýOÍœºÎ•Oß¿v²5à·ò¡’ùsŽï_)wá�$&®ÿ×øa§ .8˜l�yBy¹È7¥t¤1•†„“Z¹$š¹¼H ÅyEi´P^yg•JÇ —xéBí�êÅÜ*ŽsAÔ܇%„³Ä/.Ž;S ;o Bʰ-ÌU˺/EЫvCo‰³Ô¥¨¾!Lü“ª¸´ÉÄÒ"fñÙ"ÊÒLH|Ü[8¤ˆ?Ðbèiˆ¢=Ow·Ñ�Ro‚MP¦|‡ºa/D…P—p65VoÍŽÑ“ôêåZ9+h¡QGU00þUjÖôã% +.1å�j–ðÜ£ÃM»¾ l¢‡’IÿžŸp‘ïçŸBBs{>º.ÜÀF§-VäP@yf,+æ´™™‚‹å»IAPõCAø[›/V#/„˜ ®Èf ¦�‚$‰g˜“?Ö"hÏBYÉÉ¡ ÄaÊ/[�ÜïÀT µ—�ßĪèöfx‡ˆ(T*þƒCƒ«j=J¥�ÍKkºÉàwX²œþâðsv�Ž4†‘›ûÎ+»aâÖ~†d¯)·î¾"D% +,A‹…‹~Ìs©5½á¿08!,ñlá‚>\q ç $ËýŠðJ¾®ÕW#P1Žˆ‘ÜŠp­Uÿš®8o/¤›PsÍnmÈœú]î�F5O3øzÓ‚-xgèÚl#·V¥é9D ¤ÖIDq¹lb¶tˆOátCØm6rúŒz¦]2Ø@,` Èñÿ,§ar¨#À™®êÓ÷Ê@r?Ç�``¼òç‹T вÀñú2b„–EÁ?óªáŽÂRcÍíyeV^¥Ò fýaß³S5ñb¶ ¬Fè£ÎÉ ¦�ž8(˜Ž3+*sQp¥¶+"”…Q®‹ÒRç…:«¨O= ®-æBÊj -ÝUÈ)>‘¢ žùÊ_q̰FO¡BÁ‡8²ß<"øh³ý‰w h !‚^’YPRq Ô�9‚�˜úL²à½É¡x"‚“I“òæHÍèÛ�ñâÍ�ÕývÖÏU‚Þ5§Ýw”ñë.´îÙŽPr]’Ÿ”ÜBXkÈ'þkÌ;žY[:º[êÀÆüÍJUhކÁ‘¾áüPs‰èØ]†èΈϗŽzÁÔ VèÎ>{ÙD½ý Úê¦Ë“¹hìì#šabÒa%…ÕÑ”£‹Ó¯ï&‡ñÔØk¬HþÞûñ2ŒøÍ§¥Ì6$t€HÒÓïÓ9tûFï&ŠŸ`l…z`¯±ÜÄFô‰"[—5æ�/AnaŠ4¼Ì�¾Í„Ô6šÑ靯¦o�Û�CL§ƒ10†eÞžb{1&ä—=Á#@C$'4­2€à\Ý*fÙ(ËéFEÑòˆ,iRp%¡tlnGà£ÄYý§ñd‹Ô³+§>] ªœÃ¸–¨C‘úzäØÉA”ÐÇ\C�ÜñëŒ#‚¡;jvÎbÍn¹ÌÆ¢—V%<ëŒpî˜ÃEˆ48UAwÙ·Ä x“¬÷ˆ|é0ûY�„�²“£žÊ¨ÔH!­¶#í8¡¸¨Éßx•²è<ðv¯ÆdF@©ä§Gx>uÀ�Zø…8u/´X9±Ú¸‹¶)Õ˜Ì�¡Ízø‹EŠÀ¬¨vu̩ч¹Iîa—~9Ü�p +SmlܟΊä/ý�M#sÕæJx»eÄ×^t¶ˆŽc¨S Qd[ »‡oÚ„“gÒÂUBe¶Mìr7¡S(¶šqü)¿$©®ˆm‰Ö6›°}Ú)¡Kð\ÁÍ(“Ø€( E·é's;¨rVßî,­Šjá8ÚáÇÏ©*¤Q’%àóíg +I=~EY­J!Žâg}ÏÙhJ€×£Äuåþ¼b¼£ç®(B-±|0Â^“oÀül(j>¥Ô_’@1¼F5¾¶V`UGˆup>šËB¢É¼’Þ"ò)fñÉÌ“ÃaTC„¸Ó«§¸EE�ÂlZä4ÅJô÷Sjk°¢ãP/F&ÜÁ^yõe dð,Þy*£ã`½\ÇÚ×FºëšÆ*÷7Ç.�E¼/~aë¼BzÅåX÷“Ô7óýù—2–uVŸ“éä´ýÙЊÁ1K1ÒÝJøZݯ^€¬"ú%Šp.õJ”�‡î´å<™óŸ;<#¼c=)RZ‚뉓³\;„Ù3á[ô¾$ {ÊíØ¼êH2z"ú´‡p/7œaÊ=úM•F_À@{®°Iƒݹ4ƒ$ñUDF2†�sÑ~¸ÎóÅÑrdÁ£"}ÿÞèÆ· Öüo¿ýrhîµ’ ‚‹kt6�‡šì/ºaÔb<Î&�"*¥¡[„ üs [\öEE¡Ù‚%Q|â•}4¤¢×ynÉŠ}%D$8ÑÐöúÌgì(/‘èám†XâƒÈ·Ü»â†ÑÎVÌçNŽ¡Þ¡�èVggÐ�”¤űآÃâÔ0ßèøö·7��w@ò‚=âÙAeÍÌ3Ô z`Žˆæ‚Ù5Eeý;m"FÕ„LåßfftÙm!×Î?™’üº‹¿q‰¦ñèd¢õ:ý€7Á7(覱;›Fn #¿ÄÕŸÅ9{jºAF‰Äh–®[šÞÕj ªa™È¶íw ¿NRIŠê ‡½yÇ ¾œäiÃ̘y të§GÖß×½þÏËÌD¦§¾¼TéÞ?‚•¶ $ûšÇ?a"f (”àn^ïÌVí%g�0RP$ÊJ[2$`x2¡LTS�Eh–ÅuU +ÙAõ¹ïf‡Ì‡i@Ÿ&.PëÂw �œ½á'Jãi¨P¬†F"ˆêÚÞš"³Xš©[ýfþ`…úlGMYÒJóDƒWŸ-´¤@øÿ‚ ­º¦�˜•Eº9ÖàÕH‚ÊSð1ßÉ‚Ûå,"æ72,èʀ˵¸¯–l(æÎ”Z‹ü©ú ñ|Ù€à1µ…õ´„Ã[ê—ûk·-��}gJ¨1J¼a¢mErÙ|-¯¢ ›»�’mÞxñ\óÎÍæaüôJ@žÍ§ks´ß�;^æ°9o‡æ`6ö÷[sh<ÕרÜ1ÝLw�æuJ#ù¦ù‡¬3vDLs`‘n)ã¦9Ó*î‡@À4? +ñ²×º¤¹“…þÀn¦ù•¢’|/Ì4Oü¶]kš7Ž×&dG;ð3×µ§-è3×$È‹+yæ„!²™óƒ%˜9¸¶C*sp�yýâ{�o¦ØxÌÝZõŠãÂó|­XŒ9-¶½¬3æ3Þö`°Xb¾eÉl=‰ùÃõ9vOsÉ¿C"%ZÉ Ô uc¥Ø�seó +Õãò0Ÿ ñ.*\KئŽ17x˜/89ˆ–ÍaþxSÑaìa…s# Ú¸7)GÉúàlJ:N€G½È2ÚÝWWÓ€[CòÄž±�oŠÜ”°-Š�cÈ.¯ a4Ä|�ÛÅlbh¾lj1G8‹k8»…˜»>ß)ш9†÷n�u1` +CFcO¨>O±`l,yPá1Éß…6Ú´Þ³,@pj〰¶q@TiˆÇåÔ0ÛÅ¿÷g=Šð]þ$&Ìÿ³A¨£›Ý ãЏ�&  ‡ÛO菉jOiè“ö·«³Q¸Â{Éų&cM›AH«Û4ÁñËì' &” xÝ= @Ç)2ý JÝ‚it8#�ø‚€­ß_¬øEà£ÑÊ#•!ؽhmÊ ?‚çEH¸‰”'Ž9° äñþCFXÃÏ¡�8bÃéhk¢qÔuvûtT¹x‹€cDNªÐ �(˘-ÂCõ€�°½Ü«ÿ›6£’•BŠêßgÝ'*ü-`טÊ?¦�ê×�üa¾01õÖ�õc®J—ïOÀ˜ :ÞçîØà´û@p‚û`ÜøvÜ2–uê¦ñ’ÇëIZ0ÕG1ÑjïGtX‰á††´j�1zIåóo¡Î�òÁÔø>ÿg²E±øÁŸ!ÐêãgþÃÎZ?ófJ l‘Øa´ E�±âÐÍoqÞ\V»ÉiKÄBÏŸcØo†NÓl¼ u�ÎÐ�Õi S¾C×zÔ‡ {-íŽÜ& jÌh˜À˜C¨È´lŘŽg;sNX ).mür~¦±kâjü‡U­~; +WHý–K0üä'‹¹òŠ÷ÄÀ~~Â)&Ì’�ióô/Ò 81©ä`�ÃMLy¤ÅƒÛ½9(!ãæ‹�p:S¦¬¡CÊE6>Ôî‚\�ûM�œdtp@~Í&C[úÛ+½ ÌPß‹¡¶å¾ôQ/óÏ´n÷F¤h‡ææ,}á Â^HÜ«›Ý„ügwô´•Ò‰PöVK=7~CÄ è +Cñ¡o¾H2, þõ c®°m 8žQÎü½Ôà3´€½Ó’PyâÞ_NlËäZ ñî†û��¬^¬A“ŒVˆ|ý.«Vu +wI#ÛTôŽBP_Õ†{W< Bø²¡×™nbbco*ÄOçVîS{00‹1(3ùnÀ¶$+fœö3CÚˆ-¥?íBh 86¦8ÍfÁ%æE“¬E𫾊NØê€ÿ˜�(´ ÈÕ/bܬ(&?¿‰¸aY˜7F’/nØ~ˆ4žA Ò&¸$¬�Å©Åúè¸ú-úhØ[çbExì‰E½­uÙ\ŠmAÄ9v·Ãj~ìcê°Î¦AUàBImHO‰"A÷¹Ä>šäAª½‡‰}@9æUÆ`¬+m¯rQ#+�‹y!`x0ß–¬XˆÈ¿æk +ö2xjÊ%JÕ¨ÆQcŽæà�‘ýÃ1¸Rh‰,ŸRV¼Ç¼b ëØÞŽ×é:18Â<`ùÝî䀻Bg �SjKž6·$­ê)Õ�ŽŒ…®føµ7ÕPÇnoäX6ý +0tlmñ±z\\t~ËzM—”bÞÁú§µ¡V¸†•D¥×à%<¸" Û«T^³­À}¬„”HHãƒkÅ}ÿJDÛÊåk¿¢z+dˆ +‡¬šì>Ìw>"îJ ¹5ÉJ)<÷ÍY§0|kú/ÉÚͨ*@L,&{AUZû¿›Rn´iªÈþܲdö�šÿn*Ù‹NW¢b;þ uÞxbÉ¢¹Ï…Áô{Íè“]Vγ§Î¾še`¹ CÖãã•DJlÖw�šíPIU-´±Ëó‰½g<º Žƒê¨ÂAK©¼�:1-jp×ù´ì’R\Å7Ž6r%€X–ÅnçÕOçý˜¸T²øûMA‚5|8´MDXihý ¡D¹„äíAÿ· Ø?iÜ­ Ú8ãÄç)‰Ï@øñ†`×ÿôÙ£8O•Ÿ,¹ƒ:Æ#0¦ÔutâQRÛî,¸¥NݤϥÕd…�ªn²Z°€¦üÂu#¥¶¨`‚7èþ6’G_9&ëz�ù…×gí!A°É²;‹¶ÇÆXL¿ |û¼Ipµ=0éÛó—b6áÅ=ð)EÂèˆA†éë�Ë0˜ M×õÿA{ì_�„›=!y=Ç{"𽂠�ãÙNF|.ìùŸ4¾J³Æçu³dÏ'áÌ=¬ƒ¢8vÀÊÙÛš>ßJð†¾í¡œnd…#s<_­QE„öhŒ›3òd$ `öB8ùˆƒ{Žá^ oy{¸¤f;ô ÙâÏJ”÷áJý„†€n2ŽçZšR�^üí�ˆ +ÌžC4Îkøª‚¥ê€Ëƒ› ݺwhë±rÝ$è�ã/.Ð8$²ñÞãžs¾½mèöxwe1KÛsvoÏ=÷\_CÚ#[TçÈ2þõ0Qa÷£¬úïàØÐ8xssŸ~Ûë)åI¡q6�~œÙ¬¾ÇI.ë8‚&¯6}`„ð!¿Ýì`Àˆ¼?&}k¶ ùühÓÙN.Ä,Q4ö �s/î2hGã€QO8ÍãiÏ8“~‹HW‰‡ÿJMÛ¸.1‹&b´¡.íìâ"fϤKr©Zy¹<–èI;`|lVêF#�€:Ó¼èEp¢ê¸œ;[éžYjÚß^’Ä)¼,“X­<ÿÎbÞïÄÂ$1þo ïy +ì|Þ©Ä÷YЬb1Wã^) Q“Üêñ8Ø•x�_…žá¤Äkó™‰é¯1ÿŒ¤�4d…,‹q®>MV×av«û¯(É%6õØ(Öf…å‹MçàÉÇó…fAJÚÊmçØÍš�Ç·í£¯<äï]‚fNÍ©¡õ¡Ê2c¹Cm?-üW~Ö)&­ ÂÜ�(Igœ8ÂWgûÅ —â);«ƒÕ³Ö&{ÎD† +Âìz�míg) +´ +wÒž¹[vMC#™CÓËzÜlÁÇÃtƃ¦ÞJ°›"fКš~Ò%Þk¸ÃiȤÎ?h†dWKh¢2ÄòZ,>L ?õï¾]óR|¸s ¡òµpÉÃÿIdwÚŽ=–¸oúY[†T¡Þ�§Z€®ÝJf¼÷,/‹ð9äR¡Æ1§Óÿ^¸+Úˆcz-¿LÙ†÷¯Ñ@í|zh%�îv-0N“J)ä0SXÅ(uŠkàë9Í` {ñAEË�^Pª°Š€zs‘ìpÜ…7¬ Cá]Kܯ²ªí¾ðl™ž®»üñ²ˆk˜"z¸ ôÑBLAaT9†kŠ/�ô¦†HuCbj+ìÇ/Àçè 3í‰amÒ,¯â8rA>ÖœË8¿INx‚Ä«%`ñ” l†–¾ „¦�ÔF‡ß…žµF¢³ÙÄòQd*ž)~<ä!€w}i.2.µ«Ç†#¨xh‡¨¾y�´åÜ| ÒËË«1‘Läè²2¼»–Ö墑¾Ù"a�º,“æC¦e}ñî0tž�"ž¼äÿ,CnÁõ"öï�¯9l�øc�«BEP½™z…ÍèF)}“!s@ OÖ“è(m'caGñîäQÆ1ƒ:ÉqÌ×À„ =‰+O/›’îjí¾8ºõ$ÐB¬#>ùµ[Ÿ¤an«™�€ò%ɲ<•Pºã›ÊøX _„Ùñ8[NHÍ›Â0!ðüˆówˆj‹’,ܯPºê�ª$”Q߈œP(ÍþEħŽù'/î¹C?آܘÈí»X9Ê�ÿ°xå=w|td”“Ô�zÿ†e[¡øƒ'`@ÓFñ²£sH4V`Ô †àƒ´ÞÉÅ¢EvúD½Ýž’ì�Ǧ×ÍÀCTçµ�ØÿûÐCPê;‚Ã+Êðínª%¦†àNÚJ_Î3.T1u?ò™›��o¨F ˜™ßq9é&JôÔÕ@ïô‚Éy#°åÝnC¡EëËC™Úgx'FCòÓ/4·ßȘ¤dw¬uAõGlç �èòÀÛ‡O»è:g««ÜÔdì¸ÞêE“K³ó1°*:ÌÊòå— �:¯ ä p€©þ()fð£aà^W‰µu÷o´ú8K4êÉ¿j`¬†ß4Í's—~K^š‡¦…˜‡fMƱ5Ò'BíÒŠ3PÃzä)ÈF“¸Êݹàʆ³Þã�bŽš@h0w”8ýËô‚Hßá –ß1œõìX<8fµSV3LÃe¨Y¨FVOД L5O»k~ ç’8&dOËAŽÙ–/­Ñ¾ÁÝ[2'P\9Ùš;C¯ÐDÈsÍÚvè<\Ë( „„VQr‰G‰j±pCw³¤E>äg¿¯¥×£Ì±£œ£tX"tÀÅå†ÁF"Úá©À`%1e€çD“ýËZ„¾h#'¦R1ÂkN?SláÌäÿí6CþEpè`EôQ«=ì¾ “áH’Ø�v^®@Žç[ÿ¬`l$Ë›Y#³GD0O¹E•γ½xSj^åWª./ÒÔWóFò¥éï¥;†ì¤Cüc3 à$Õú*�û=¡­Bµ-¼c©=ãaâ9ÙÀfŒ³¦³M¢ñqÙ«5Ç´° 'Zó»qÛV0])~øðL”Þh8¦sÄ,Ê’BŸ?šjñNjœEì:‹RQÔ·ljŒç&nŒK]§Yb×4)ÒΣÍIæ« zšÞ#jžÊQS—ÿq{@>®Íăe“¢Z4¹ËØÎÚ-iÊ‹'jIP‰wó“DÔ‚9’’haµR\hH-w°‡TOj¨í¸?¤k“iÁ+0}F@w–ïìÙ®?\�ŸPØ÷“B³ýÐap$m¥!&�t�¤^î 2óH..yí¸×`�Ú ­kÀ¥‰7º÷�ƒüÿ4f$bJ*„»9ïÖx¤ ²��PÉýÌøÊ܇wn'öÿãò<„2:øê�7 1!:ÕDؤû/ Ê/ˆkó\%¨P<Ä‘:D0usÄÎN‡V“ÅB3ɉr˜/>‘6—ÑÌýxÅÇ?qÀƒÞáŠ'NƪNip�}ñû[T H™â ä>?z\}YI¥‰7þf�Ÿç‡3m8Vc‡¡jþ›qñ ÈÝ +Û4=Qn÷!O¤ �’€WΨ¥Wì>T˜»žf/$(ÛÕí•R; ™eôŸ†D³?Òd›ÉÖ�VõVS\Oq}´ä® g<[2)•›oösÊÚcU9ÜÛ·K‡ ¸ˆ`Še/|Íò°sK?M²$6`VÆÂíÄQ%¾·åÈO6zjlQ¬´®€³p€xah†šÞäsÿeÉ#~ˆ? ÿ™ŒìµÚ½¼¦û¤ùÚûu‰»qÙ´‡7© \;ž¹’—ù­I¶Ìx5ŒœX^Y%¼œŸI8 +ð�&!š;¬¸¶î© v*Ä<÷ì9\æMP)£zJߌø´â ìƒ-ûu'ÁìcTE^©!­£8À®�úÛ¡ü!—¬_r2�:ʨšŽƒó¹�ÚŒÏ;÷i"äP•SWÕ0ºÒ}H‚ýç +jáerð6Ú«PI{åÙƒʼ ³tU™C p�῀?œ_‡Ð`®òÞsâA•€W:Ø!F.:º2n¯‹¡ ¿ZbãêÙnï +ÄAX<Í–4è Œ<%ÿø�+_øÅ(r=g\JbÈ;`œÁM€z¢‹%ÌÓ…AÐèQ‚š´ ˜â8+ãu†-/!1v˜�ª_.I~ +‚Ýq“Žn¦²;ݸ£òÏD¥ÎÛ>r®a.�-4ô70P=3žûCPzµœhG( 0[c)*KÔ8Û«=(13ZŸ#þRU 6'Iìé°(È `¸LQ1éiØ"¡Sé5fô¦|“mµãîtdñWb´;¹#9@šsìIÃæ+€=~þÈ7^“Y‡ì  ¤“”•DöjkyÁÛ¯–‚é0oŠ$»t±(Ÿ B3¢ÜÂî�í±šþü‡ü?¿º¿ +Ö+wy;£¦‚.îÚ)"mWØ{9³7¨É:DVï—¶U±íùÌ]m§ÍÀÁ¤ ‹²,o´¶@¦7õ€•yºƒRÈ�$X ‚JásÎëØÆ"£ÄºÉ 7ùŠ$÷tEÄ \²Çm]wÈ?h1nW‘Cüã™9¨’À6‹/ÈtV�„¯¡ü¦Ñþ1¼�‚’ÿW;n:Ö@æ¬r˜^Èì›`oÚÌù€Á‘ý³' ä"u¦ÀA¢ËÄùÊà ‰éƒ 3–õe‚ÈûX߇©QŒu¼R‡äóïú 襎ô¿Ð—c#�\ÿz0³‰«…÷]y"j]“i³žöh1J8�4„Äé�’� C(÷+ðCЇZF�MÃ… )¡«?°rÞQ0‡ÃØP‡ #(‰©ú%FÄ–;§09`LòPÀ;àâl$ +ìÐÈÍ-º½hÆäpÉiîL…õ”—G”‚ ˜æÂé@Å�s¸ …Ð0†”¿ ’�›vhP)tõ©B|ùÛw2$ JSó±úyQ Ü_á¥)tAˆ‘=h}å00ŒÆP@>@à©p„¸ @ÝŠˆ¿ü2&côW>·©û; +í‰Iæ‰!â«G<[õxíäVÅ3 ÚF¬Zê;Ô2×'“{”R…NþÝòˆJ’4�A"舩%â#Õë²M‘Qñ%QÙ8JÛᨇ³ +r.ætĺÿXîS_­#™b7e$/Ðf#‚ŠÙ\ä]P�f·ñGhl�‰Ø%4�aŠB“»åÂ.¡%¤&BB§ƒ‰'m‚ƒ2ÿF¬¿ „°5Ášòæ‚"j×á>PðšÊc€‹‰Q&ûTeéèüìp?ÑâJ8ÊØði䀒5ÿ𩮀s|#¨ê'Ô žãn£�DCcŸ<›/×'©.²Áí)ž°.×=…Æ@¸!Ÿðõ:Ö§9(ë4õ³ª„·?£~¾A¯>!Q|wÀ§—ß|ÊêÙ.¢YW|LuÍþ§Ì*ã åÃ=žÍôÊ€&TËã‚PQ !?FßpµA™©4´ –ú�ØÈYæîöìˆ0ƒSœ¸“o£)2àŒÎF£A‹ˆŽgr ¾ô–x�Âñ ^¼1È¢{Ùõÿ½Ã´;�sA�l-Ì“<¨þI‡qb�t,*Œv%jë -/d‚ºßC i¯€€h€DR�r`D$¿u%ÔtÀ�cŸ‡ >1¤”§žžÍ·ŒRÒ2Z \oÇ( Ku€ã2P“‚0Ä/%. Ò°&% ±>²$Xá¼ïJwÇÝ9èÝ*s�úˆøQ2Ê,¼ŒZ¥‰…®Õ6JNžˆ’} ШI´AYØu…¯äš€�è¬÷ÕUs²Ä`†ˆNH¹)•çÒ20!¢j…k.°è»E*ر†x�q·”1Ç ±$�#¨‚øLºFn¤6±N»èèE㈬a­,•T¿xŠoÍß6ÞéIaã ðX±d«Gfo#ïVã=ÍÝòý#¬NS�¹Í©Ü _‘ÐqJŒ©ô0å$_w³¬§„ØÐ¸·ädºpAwðP²@îg’æÝÇzô3´ìUTFÑÉdóJ’£Ñ)Ö1Ykó�`@Æ$ O9 ¶ÆóxŒÒÝD¬BH³¶sO"ìcTKˆ"'Eó2ý¼Ú�‹¸ä;²Ì>‘–|¥¼Ü�øåK +úÃFK.ýÎm$Hž‰ÌWÙ¸é/Ÿ*Ì>C?èA}û��ûûOœ¤qD'ûàÇ"ã÷æ&?¸iGKÁìâÑ®ävžiIïDøÀ�6¥DÛ&®Ôšèª.tj±^ö�¬p;?º‡ Sôb8^™Ff­´–‚¤? ê5nÐ�ã2³–¢Eõ꯻�i Ë[�ñ–�ÏnT0ypá¦ÿ%¢ôèîd +sSë@ÏfƒfÙNñªªõ…HN: ÇД^âÌE1]¯ù·‘ˆÛÀM±W¨¨³á#¿Ùé ¹dÞ `À† ôëNežûâqŠûì%ŽËAŸýpú­7èÄîƒ^{¸ˆâ ϦÖTFS è˜K¢@$n70èORåðš¿áa3}\ +¡â8±ú΀ +Öë j—ùx±<¢ü�Ÿ07pXÔiø YiÌç¾À,aÕ�)D^#œz £ôd6¿»¶#¢f.ÞÛ¨/!¡8p`¿mm�Õ\ŽÂ�…éàyýñ.â‘f²äAùÇÍ:-«^jÁÏ1=ø2¬8°>ýgßÈNåú»’Q}ÜüG˜Òƒ4ˆÜ !,õÔ�Üw•D׿£8sÄÐòÑž\8û^‘¤B Àÿ—§w¶†ÜAdf„zð`ïv>N­eDEÈðE®“«í ©�!=}é�Mã–¸1¹¯¿@Ýç#°ÆÆû›e63(æ³Õ¸”òñw¸å¾··;$º‚Œ>– ݃3’}TkŽÇÂèÂl÷¡+<‡7lߦƒ¤JC�îN 8+b¼\¯Ê\'ÅJ,J|–Ê0tŒŠ(÷á@5g_’êªQ³h]Ø€c +9 ¬_ír +)ýȱ0_«10¥ßó^ÞQ /ø£w-P +V¬Xï,©.aDlU!Ï wH{ÏÜ ùÐ"|ºlö¨Ù¦@E®\øzü6 ¬Hƒq&U™ñ— ¸ÈÍÁÛH‹ÝÆú û²cÇ=–]Ô€…n”&ÑÐ60x &´†ª +¡6G9ࣶãÙzyµsH†ô4a®Eïl#RÔ¢4�Gš¹x }l&Ù»¯†-*õ9øâ? ÚÔ5MJq 6>>ùôã€Ðæ06Qr 3øÑѬPh�9ª'b²iW vH¾LªP�¤;©Ç7|^„ÿê”*�MÈÙt}û¶–Y¯B(;á‚?NUA¸¶X4'êƒ�@‚`7æBœZPCÿ6Ëz4¿š�h�ƒ_@{²””ië’¡ïÔj€$'r„#"hE¦ˆÈBW2"<À ˆQ€(æÈ*„B(D(‚K"T âpTŽ!¤Àþ;ðúÿÅ ¾3"H!§>O„„–CD3í}”e™×�lBቼˆˆŒ<ÐõÜÄq³f|cŠ#�¦<Øýü—?>Ž?~¼j¨ª³jxá<øÉŸÌ…äËÿ°\$_)��þ�—¿âx˜ñÙ�iÅñH|ü1c‰ã˜¿Äd<Õ5Æßù'û§ç\þeN^º®Ÿþ¹ÿ?8#ID$Ç%Å$ ä7�$I6M†›ÒMEJH$BBb�#h%` KFl�îf8¨nîâêH¤«;ãŒ;¹ÀÝ͵›�¨ª›#3¢ºy`r3>SÎ �©kU€¦$Üü�ܶò±u�8ðhÇ#§q—ÊÑþ\Ú"%ÇcHÜÙ˜™ÙEYL€dÌäÊo0 +EÄÄ.3±° +ªˆºº +³a¸¸(žQ±JÊâº.–ÜÕ ²£(ªQ-†‚h1@‘‰¡Œ!=¡‘‹+ž[˜˜)‚Üígaˆ;C+Ll1” ‚GȆ ”q¤2e0³Aê,ìcƒ,+49ö(P¸ +I0š@r” +K„tCehfžásõ˜‘y&Ž ¼BEÐ’(c€¤2´†®¨Hz0HÁ "8©ÕޤR†ÉØ] ‚¸Ò$€`æ®:!©<ƒ©ŒbP)…ÁL°€6ØöêLjU’¶R«¶)R¡BÛ¶eÉad:cGA$::©�f¦sÏ™›^Gæš¹¯ƒ´†3@÷· Ô}ߣ�Þýýïïû.ÁGÉGD]Ì¢:/Ó'¢Lô¤ÁYÑ 9Ĉb‡B4Ç™³RdK@j¹èZtÆ ØPG4gà䘛›rNL€ +*,Ú€YjK‚§¤9n)Z2PÁ6zÑv˜†›QaaZ)m¥•‹oûë Îî�¥�•Ù­àJBLÈ”m…×¶¥™–¦ýë½½µ�l£=ZQ‹¶-[öâ²dv`l–M±Ûn2{Ƭ./@P£ únjN«=þ. D¿Úåo‡wŒ[@]¸ +2‚ûwww'R²TÉ�Få<¨§éÛg>!ÇÁ8#Ô66 ¡bH¬q‚¨µß&0ÄllÞJÛh°hT*•2`P“JGwÇ3«·»°ëÂ&Õu0¸âf MDš¦ÒÝççÙž®Ÿî|ï½÷¿3ñNÝ`% +uG®ƒ¨[w Ãp€‘@( ‘ÉSUäí€~ 00NhVT F=Ê @A¥}G¥J�} 7%B‹_’–ZØÐ,Ç¥X±Æb9~З­ÑSÊæëO¾ãZ¦áˆý'ÂEu6#RßI‹@ +¬eºy'¾[H\´R$û:RÐð%{´óg,‘ô'µ¦ˆHP»¸r œKÙyò„zyýØìW,ªb¶D˜Üú ’iïÌ�ðk’é•‹%|ùÈHÏQòéCô€c\)¹ìÓ—‘Ï D“wä2NpóNƒ…SöFÆŸjëà%ç¦,Ë#i<œÜF˜Ä56ÏØé.qh-;Í4ÜÆ‡ŠlL¦€‹âÔ2ÆU¬ÐòS÷¥Cø…²‡³BY¶? +E„ºd„qEþë©s²l‘'W>}ÈèNòç �Úö3É©ï}‘ªÄˆÌzÐŒV~cÔ€a}<øGšÇ.* +ø’ÁJ#Z‘ò'RÒ¤šU—ü™õ²˜ÁɺSwLµ+qGAϓɥÿ¿ ‹ð·aRh¼=¨Œ‚m +MR]Düè$)•\ÎN+Þ‰ëTf#ÃbÊ—BäãXÉZ?¿ôÏ#žÆ�D^’Œm‰ß§ì�½é�èŽä´ÜÛŒr|¼�œ(ìÆÎEû |ÔNà ª� ¬�þÔ¸ãÙ¬:uP®PÆ�ž[¨Nm“¥”G%ÿVÅ9„åÊÛæ©…u{YêßšLã�óE¶«>œùÇùà>†›3O.yI�|¯ôëþ+ÿìO‚¶ ‡à].3(ÛJ +4X¹"+X]•�4I®šÀ©àB)fø +†/^‰š§uÒ'ÚKù"Üî«\ìc ¯ððxÄQ' é.õ�s…X$Æ;g¥¿ˆ$¿ËA ÈÉØ»P„Ë=ïÝÁJìB>éÍa¦åŒ3îWå�“­vy„DÅheê‰ùÙ'¬?#�E–¸B‡ N +_C¨è *‚°˜_1{$|âbu†Y5«%[Ú Q<Z/�;Øž‘Wý à³ _õtj%â\Ñ:$óŽÿÀò³«³Ùçg·º+žå>Žè=ÿ|yÏ’�(¹T¢ÚΜ\Ÿ@¤(&XRÞ¶A­›¨ÄB¶ Dr»Âf\ìžGò»ž*î6) >J”NË”Ù4X]âûÞzÓà„ôïh76°¨Gâ çåèj+a�é|ÝK„>ƒ(|”^€›ª²HJÓæ°ß©kF#Ê"ç™Ëö ¨9“&Œ=øé"„}ÊÉxÅ\LÒÅ8@òELïb*]k”YEø<Ll•![Žø–8ò6¯ÎÆKL·#ò�ë ’Æs‚ÏøIjåÐç¦ �¾Ñrš#�°ø +úU|óÅN›žïcôú½Å;ì"â§êò•5…ö9¢ž«„ÏËMe%!({OT–'ˆ+©á‡v3úøüé5Å$ +b�¹äݲژ’1u™Ç.��Ÿ+K(Ê&6Œ¿3êd�(� ©8V° �ભ…Ü¥lž@€_éÃ7’ ˜~ëÇX÷§ÜGäh.ø<¤µ…[D0ilÔŠ¶{ Ê±ÆbJ6ŸÁDÔ=QñïyéÞ—öe­ö ?¬Tã +ù^C³æ kój 7hCV‰IOÛ¸úׇ b–ν粄7½b�¸aaCI "F�Åàùè§JÞ '4à“þkºÂËè>z³.:�ÍIaa§îÂ@9ž–ãâÍ>xpËdÜ]�™æsBd<Ä�<h–2¦/¸šÓóƒo±û¦œb à³C–)�pA…äKöãTÌK%d§·(f\ \ÛÂvB%¬œâh71ð8Û>�.Ĺ —¨Q¹2)\sþiCŠØ$ ‘T7J¹”\·Ë×ejàÆS¿œŽÅ¥`—@÷üxÏù2¡Žšì»[eONtõ $z¹yk\K—7Da.FôD¡f�¦ó1×M«’`u*ÈÕT‡6K=*Z€hƒåðõ¸^ÅÆ=ÆKÖ5K ”� �ßA¢Œ€Ô⨓JÄR/5‰$7‚ãJ (ž$¡�@aª6»Qé&dw¦ß®+ X†¹BÛ]¢;­îŠ´m£/<ÌCqÒ¼Ê@õ¬BpÄS’3y£TUþõì]0ࣧôF•šºn«¢Éþ@Ü(ž»Fæ°ßçÿÃ78;�ƪy¡ØgØ$¡ R4—•«¾^âÃçbf1 F {€°š¤!î׊¶×¥ðÙws}�÷µ¶^û‡”þ¢Ñjdò2hÿöýŒÖ¢ÇXcQ×GÞù>'ždLŠ@HðUÙ•ƒfün›'ÍíËt{Q®Î `ÏkLü½,¤sÌÁ)6)™”[Àäkbl&`’Ä—Õ™ %{¡c"X<¶‡È«m²z°Ur”Õn«þVècŸ9Ñò>¸<èÔR±“‹Ñ�.ñ§Ê§<áîi²fÄÍÑ1›ó?RÏ)AÅg]D| ðr[×9ÿîª|FѳÛjàæ÷ +Ÿ²ƒ‡úúVw-é÷»‹z]5�b—^ᆴ8ž"�Y³Îz”¥2ýÌ +x™vŸÉ¼·¹†-2;•…CFÖˆÖI¥SúŠ/5UŒ…M>‰�éÕÅÅÆ�eLéX[¹F4òvóñþ¢âÀ"¼<ü1!>ÚúTÇ,ýØûÊÓÁ�8zwÔ È±»X> ¤–R´?-g±qÕk€‹�$2më§ $E96v&Õw2Ó+Áá-¿šŽVI‹³`tÖßšê—’®èULâq¼µIqouœ$¼Y*œ}ì?§hW@©§âzrÀ"éRì÷PEðlyÂX¯ªeóWó¶@ǽơ+^^Ùc–Çj ñ³p©Z>|^\²ÎüôâqMÖ+Öú¹ž¬O è©'2x1bhÊúoÀ:_=¡Yß`¹„dnŠ˜#mÿY·¯Ý ¯¬ç€ÊëÁ‘�¥ÛµÎβú™^Œ7 ÈêØ`¬#q¬“ßcެ +�zxs!+š0Ø«‰K�†Õ�x¹dÀSx¨5>`»˜p5G8Õ‹ÙŽ¡C³ÑbÄƺÅè½·òÚп‹Y$]´{N2¿Øß„Ôû1¶5É`ÄXÕ•‰² ŒÕ‡Øïða,ˆŒ”À¢Ž19@XÇ Å j×="c¼2uÚF0öÂkj©B$›N6E3€½Xf„ +÷tÙ¨/Í•¬õÂLÕ%þÊl6âWÞœÛäŒý¸E¾]l—;"â}éîÅ‚$D²‘·Åpý,(—±‡ì?dIÊX[æ]DG×Y,óQ‚j'VL™÷¼¨®Åfw*[L´mCºØf ª’¹*&â~¹ßwh[…ac�¦kô)‹�D(ö�áÊqQ¬§RèRÉ�%¥ÂûB +©bœ†6£vÅh3>ýC1S1é’' +4M1Fœ +'˜éæ(}‚« +,�ám×øh¼æSl*`÷DÃÁ³ìeSO¹Õ©ó4ì3d~J)¡Ž­úGEfOÀÅ1$b2Wƒ…"ˆé8c¥'éEks >‘·Ý+Uœáœ¿Ñ†S$…´'QWß(ØN“�PäÝ{/ÌH·21‚g8Jœöìå({�×|ìŒùLq\,<ÂÉ×îHÐZ7$êÂùO—JøÿxuóØî¤Ö§;–EØîuŒJ�2ýy)éG;4ÆßÓc5†ø…+ÛÔu—9ÂË0}xË8£wÐç^<ŽÂY;AÑý›ŒuZßùLD!¾Fn>Ð8¸áÏ�¦1X`;hŸúü•šÐ�yÿ"Ѷï°?Ÿ�.�J1®(ÙZ$½�£„x⨒öA3™„LŠŸŒÛ“iTé±Ü¼žY�w +*õü8³u®°˜Dç•Òe¦NG€¾©fÐ×wd­Þ)a[g×½i{t¯ˆ–æëHÄ^OŽŒsËô*DÍ'‰ð±3 —¬ëîÏ‚ùkWZiqÓQ)Ç5ÎFºã¯(á/ +Ò-Xµ J�š\øÃ¤àTû¥{ëÈ÷ÄâN>Ë�Ú�•ýÖyOöÆL|ÁµŒ. ½@AŽ*¨LAÆÒ#Ú–äøn {QåäÁŒ:%߬Ì-)ø„ŒPó8±T9+� ÏVÈUî '¼§5¥Lk9´¦¯ú¸@|“Î…¶<+F›_8è ΄]²iôu „UäD$àm[ã¶ó›4ÏÓP_Tߎg³õ_×äÓ6ÿ +[¦ù:¶MãŒ=¶ÞöØ3Ù°p”³ŽÝû¬\ï~°l´ðÄɆíMµŠï'cóÝw³-0}iË�N;nhlun±BómMkå`ŒoA“Ú9, µa&㬇Pºwµ6Œ@ükÒMïë�ž�”ªdúM¨(ÆJ*ÄDÅî<ˆ�éÕ° ‚‹$yí!ìU0<ˆ�ØK�ôGæ>7þép°M&´_l[Ø‚ž^„—v|p šv0ªIÑèÉŸ «^nËq�DíNAç¶YÁã+èm}í8Ýõ¯O+$ã“"pÌTqÛµñù£¿™{…{Ðâ·sœîljV¾ºNÊ-tþÕç7î°Û»­‰ho|xs;¦{4sã˜/盿 Úñ€.%#è˹J~_r6�´ø`ÝÞBcŒD„¾ñ@Ó"BÆ>û15F†¢Ã†ë|רŠ2˜�acy~ÃÐðoZòQãWµßî£à(†0ÁɱÃ\C„#,Š9˜Å;¸æ8ᢖXƒë\Fîh"öo´ÙÍH]"ÿ6ã'eûEh� ÅH¡NÀ¡¾VªVP¸þ·”* »¤¿%–Uûcå`€UþÅú’gµHvæ—œ¾H߆E»a8ܽqA'fˆ/Ó<Ï×P(ë©{"ùgl×STÉ.#ðš™CËzVq¦Öf}ïâ™eÇû°#ÂÌÑÊ´TmøTD!Šø+*¨dY5û¤­»C§*-™Ïš'‘åmévëËè—JÎ!•q‰� +?CÈîå7‡ +>Äe(¤ÈüÍ.Cáu¶hÆI%«¢¶zf™�Oe[@¦Ÿ +ç—pÆa ÿ0˜V+"Z2„ +,¤ó[bu *í4Õ°L..:ìÚDzÊ3µ�TŠçœ�‰»3aùÙù6óôJN`yHdŠP­Hoþ§Cèަܺw>ëÅìþZcõ½mÝÆäÔ`5l¨á¥ƒþK¼²Dä©€Œ „çk�ƒSŒ Ñ®G¼€c¡eƒ”Cõ&®Pþ<-½�‡ØF RqÌtÿ_-LÂ7×õ~›ê.ù×…9ùs†UüͰ¦Î2uQièH˜ß;¿nØ âV}5½£¶ÓÂËÍšEôò L“*\‚‘HÍ _|oâ¯}©9á +~L}Þ¦ âžÊKz�®.ô…¯N¡7Ï qxoóz ½ÌÄ |CÐoÚ€yë0|’ @& £}‘LQŠ!ÏüÂfŸ yõ^G½ö›]†“ؤÿUÙç0—¬J1ËÉŽ·‰ñnkïÃæeƒ!Bºƒç|½Gøñ +‰rBh ˰’ö™ôIÔ£¨~< <�0ÑŠ ÿhÖìË +!+ s‹°ƒ'¤Rôúƒ=hð¡”–‰ôV*’¸“=ê¬_3ëí#ôl>ä—ÈÀùH¾žu /‹c!‹aðû 4xÎ*…$eÝûãjV9¼9ØPl _` ÷$ø$q‹/Ž«Ï#Ÿ°Vrì]:gwŒÄ!@Q^è�B8ÚNçRK ï×þÿîá}¡"‰½¤–°vÚnªv“ü'³Jv�--Ib†ÝRÛ ”^í~—³µËèu$$k eѦ‘¡Ûœ0÷íe 4ê*ÎsˆŠŠŒ»“ÑÔc®½y€èÌýøùÙ[©œa}´{ýÏöÖ{ƒýò¡€éÕ1¯èÇ–\õnÀÍ2\X j¼ÚÖ +Å¢מNÚ%èWa›ë‚à67rL…=n;I¹b± ,âqÔ²Û|†¡]UVµieo@ñ^f¤n@Q«'a©o0ðà'x-‘ù0]¢Û„Ÿ²*\‡SŸëSJ¬¯uôÚÏxEH&ž ñ®å>Àü0¹ù…­�Èöû_{*Bõãâ��‹"º…p¢N?×\ +×å’QÆ-&¹—^Aš!ŽX`"{» øóÏüë8CÅNôó|!ß„6KaoQŠÄW¤œØÁêãU; ‹Úr…f‚Fz8Å3«)\;×…ÔlXD¤²º–Yhm‰bÃì + ƒšq¡“:†ú°~–Y2�$ç+ +ÿ<9 õD¢"™» HÃ1¡wyQÝô´äÎ�«–"îÖÌ¹Ôø¹ûà@žà2¢i»/‚{©ªU£väÑäÕ€ÙÁÓÇ—ˆR‘°S´³×®Ã Ði²4˜}Ã…"¿ê®Sîó0¨MK¬×å“Õ¼ ðÀîÞŠ4fÄŸb‡3§ù¬!>NÅæ!‘¦�k��¸72l×®‹�¸Ô®št ƒ2oí¬ƒ7W¶èŸí°Y”¯ÈP»_)Õ¬«—’Ù‰[JìZdÂkyÅ”º¬ÔÅ-³«Ñ…1 ·c`Œx£tb­ëÒ ­úîÝRëf¼, jüå: ö”¾¼.Y^?f§ÉêÑy ¸ŽbX’Â; W@ê™uìNŒòÚ‰�Ìó±­HD.ä�h+ ª¦ À¤D©�êwxÄyŽuû°ëÍ'ãÀ!ƆGcc§¼Q­ Û‚­Ÿ­ÄC¥-¾¾V·ETñ,b«7zÇ…ø¨šƒAüÕ¢2ïÊvš„�üP°^ãp[(û�ŸÇuý$}ô’¢­˜8‚ÍË[ó×À!{ÆÉγƒÂ;ó­q$f{(÷Ž‹}Š˜ðXhoD²ó­¸£‰º€&æàö4 ¡ÆB÷ñ0oë‹¡¦ÉêFÌ!‘É5I˜ÕÇÉ4pÑo˜éÓQ*¡e’ö+pÇ)ɽqÚÙÚ×qüs¨‰¦�Å$M<±,MT%^i�Tñ®áúÉ–˜Éû‡{³Y¯±¤©yïÐQ=¡<âpP�æÎ@/*¥ør:súÍ7õ~2žs‘`É?B×®–Á”Æ- |y#höÆ�¾ÙBÑ»¾”(2Ÿ�õq-Xe=jî�aÞn€¨'gë¾r#Òhù$Ȥ(A +¶ëKœÖÜ;„1ªÝßE„©ïï:h€kG°Ik=-¸¶è{]Jææ/uTÅF¥¡;¸×V°•”-ı_< jØ{÷¦Øü‚diþ'{Ã*wK�(\¦fI§×À_†5³›ßoR'Ù*ºÔ”JÕ$‰øöm\uÔÃפ¶™nb–dÀK”ƒ‘mÊ•%M2œ:Dð•Kb¡AºÆ(Ì´$ó„n ÅÖ¯Pp^Ä™”ò†�×ÚÜwß-påhª–2ñÇ÷Ï*(˜n/?~tÖ©½H±UÕŸ?»zõ^Hš ÁiO‰à\ñžŸûeªE +‘Áa¶ša2÷·„ˆ ij*–„9‹?Qá%£T™¦¢®‡aÒ%òPÁÍ^n¬rôÁ²ðø©G×âFɼ] ?ëïtÐ/Ž t[ó ¡gŒ9šŸ5»‰6L?Í>°w¯ô¥¡ï…�”ZúÛ�[±¾Ê[ÏJqÐß¾<"¬ç±ÚŸ‘^E‚'›o¡ÔŒàÄ¥ÓÅE‡$š‡‡äZçV¸Ì”_Kª xm…'‰Êã‰)ñ�ÒÀyx>Hõ­3§'d¯ {yàd f÷uÊ jYÍi¿®¾ºu�1‡¶ëèÁŽ!†æ�öÃÌGĪLwšg]豟‚Lqýéð‚„ò´àù—쪺@‡×fªvpó2,›“þÕ³�ŠPT]±‰‡,–nãÍÁHCb…Js‚ˆÕ6W6%ÓÉ"%áŠq= 77ºþKû�Ò²ÀP—;KcÎÓb@YåÆÏÞ>J’¢Z„<ÈšÓ Ä"–1 +úòžÊ\¦4s”˜ÆÉ_) „µ+LùšƒK¡vHéB¶FÚ´E»~šýêÛ¥ g׃ûi@Ž@Õ@kÞ¢{X…ÙŸovà] ÀÖÙ.ô¼p\¾äiZIÕ—½Ãª@Ü(ß©OH3 +¨�‘BÖ¸YGX”JPœ|_ì“ã¨(PãrüEÒ¦0ðŒÞq8� ¶? L’ e‹há†B ‚zbkgeðÂ(*½x¹�e³dÕC!-£Z ÎÊÓ¬*ö×KB ‡LÑöæåžé"Š& +2�< ˆ©ÙÍé¢ýÔö !‡(÷+²³.pü·µ"‹„¯â’-1M”lgŠ/4›Ëàñ-ø­èQ«ÁkÍ�O�U—ȵ‡‰¶hÝÖ/¡:!àõ +¹çBb^˜lüañŽ�6M’'èWÚ›Åq[þ�GÎqç5t @5Ñ¡4�>!ãìJŠÍ`ˆøçÉ,,rý)KD�Þ¬[+³¨œLE¨ñ惢{Œ1_ª«óUxcÙ¹œ6ÍØ–"…—I„÷9éeÕ?«ì‹ÇðFÌ‘¦¥ïq½YI;`�ÒÂ~¬³¹Ò(®~ã=ÂP·«Rø=ØUp,j|ªdýã³:Ui”¶àyœnÀ4<ð˜OÀT~g®6H‡1~ÉÁy-p08’Ù‘`fÕ[›‘Ð8¬*Â…ªdÒl@ÅóB³Dzè+ÊñÍ­TÝ8ìÔÐ{NhÅâ�‹ußSp‚›€PuKG^Oë?�…öHéb—Å9h¤C“ÀûŠƒ}à&â⹇„ò„Ü}ä¥kc3eEziÜj +&K²¼p�[ÝnF%6 +õ¾È}}\ºþümf¶×Ë'$`Ô)üéW2C~L}.3}�/R ¾�ÊÊT3Ô…ÎòzaäT±÷�âæ†éñ¥çŒ<1M6›ØŒxþ¬†o ”"‰QnÌg€²XQf.#»™¨ÖšRGà4ÎòÄú$Ú˜%ó&µc'’KIc»HöwlÁ*èÇ#­yE›•éË�úNgDá0Ç”#€]­™l8Þ'žY“˜Ô|"Ö"×ý)mŒIÖÛÒ kNð2ìˆð@î£;¡Z¿�=’VÖ¬MZ7)ÊYžkªa‚s�¹‡p‚¢�—¤fS*¶³Ÿ R%¾Ô cŠ)¸ªy(8ucw(+»�¹f¬YœýSFXqÍ i:¥�8{žps=è„t5XŽ™Cñã$ÍvCª‘)ß’ ðn°äì_¿¸ÛvŽWÚ¾~‘S2— *JR9`ëÊB¯&4êØ!Í¥b7]LÚº9ñÃs�—0q°�c³ÛL)¯)Å7~n†VYv×Î#ݱY$Âñ“%‘_xÚ2›¸ð½á%"s¯Äœ«êoŒç•ü|ïŠAÇÕ…ÒÝ͹)¡ÃØ£ú@–)|œˆ~ÿà$50î$rp…à‘im!Ž‘‚¨RciìK¾Mcï)8 ,É!T×ëLÄR°_)Ø9³q&ÊN&îÙyPÁàGô€P9ù‘¤íÑm´R +µÍ¬pilf•°å6¦”L!޼±V�“�GÙ5_,‹%¯“|£MG„ãYöèA uÄõêjAY¤ 4ÇØçA¹ã33Þ’NiB/t�»â#s–§1HûÂá7ûaÙã ®�ŠxMOC+»Ü)$Ñq(×Ò¹:1ãÎ[˨ýïÓØÕÞ.`èCæ©ØwZÞîYýá0Ò…ûëßÐ4\ºMÄJ Ö€Ÿn¸ö¬Ë ð‡X�¾QlgÚÅNXÓîàVb}Qzˆ–%L–ÇN$¿ÃÕX¸á!Ùòé"×·±)¢h°ïÝ'bcšÂð »zo`Àh•ŒοáãB©c¸!‹‰?tuäŒ÷kŸ|GUÈòRm¤íˆžÜçP.Á“’-½Y1ß°§L3B´zÂ’µ%Ô¸ÓÑ®î †…¤½É ¿·ÝmPš9rÒpSä»p &sîkŒo`ß:Ö% (†êˆ}²ø™ï¶óÕM„¥MdÇBµÿœð*‹¬X3r$æÊÂóêâÖ¼B:i//-ÀÁ×>äž�Ñ;p¸¨wÐä:¥ãÞs„¿º˜¿ÿÛ„¸â #æeÓñë„‹ì¦PåÂ\w3ñru(!¤0£¶¨1òð’Ã�Ê.åju=™ž$[Þ€þ}õØ +Žq)¯œ6cµï'$$TŸu¬ZGÖdV^ç¨Í»øëͰ<åj—£„ÌÌ£9�ÂhÓ3 »ŽÉ�PìÅ>Ñ£©xq:l;£!‚¡DÀAv}y Á’$†Câœ{žFÑÞF}³Hß*›ÉÒ�^¦ÍN±N+Õmß”þNa|«˜m뇪GëˆÚ†@ƒï'$Ž3KC=•5-›ô|KÇ;w¦Ì…'ºÝVì#ÃÝðØ]ždÔù\¾RÑc½æ'²Ó¡ì ôð\œºÙŠxÖ¡»²X–^61ÅÚŽB`š‹iFK4éÐÄ™UfÏ(yä²gEBã¨6Ž€ÎÆÐôP�œ{çm¡Å}v³ûœ�aSÔ»æ©_\â©m��!ŽÎÌì‰O&;mùÒ½�ùj"vä†Gëð4wº¥ Ç02€H‚çÂtîé¡äGĺ«öÛKG·Æ+v‰C‹vnh÷»õ B±±Q^'d&˜‡7´L¤LšH]Æ€¦µr)5÷DAÑ3U`Ý7ÅDßÖÅ!É›`Ëþï WrNeÃÍ[ûO#2b–H->u¨�?™ûì!¹dü½€} “Ò\Z[“/ä”om^„ø�$m¼³K+á$ý µ_ïºmÞm£JñUs3úl˜î7ÈHà‹êzQ…F­Ê³¡Þ6r‘ݽÈÇÛŸŽ\,1§“¥{èï½t yñD�Ÿ·ÃÖø¸€³£4;‚cgÝÃ0"­ð×IC§eé$€¹†a§¡X9àÉÍë{ÕÄü.Ìk¢rû "mü¦V/‘bÿ¢òj*/<©¢®�¦>ÉÁþcrÑ?„þÜ ++C`Œñ–VÔÁ×ë¶ê™gèˆñ[w'­œõvÀ»Mˆ”wË"Óÿ¿¼ 8gÐ�-îÎIÖ¦™/éð”¦!O[S%áP†P–�4Þò(úõNàFѱkIïÿãÎh—*ž2šÈ̃`D}$œÐñ�s«™@æÚÁVÁÌŽ³ƒ’}%È•A÷ÏDÌk»º©1WÌ$ä÷ +é@…8à œ@h¿â§á)=U$‘)PÂe›Hìíh,„?ü*QÊü(_’‡\Ú{VwÑ«7ñétð$cô’¦€·Íæžbµ_ü°ÂL6¼F:ù(&/cVI3 8d?òs8v#Áæ@±8]‚Ù ÛÀçrÅQ6Ó¾.ËÙ}ŒÝƒµ×I:M9H ¨�> Ò+±ø–±6‹5þUÇ—�Ø~Нñü�Q_8°îŸS†I¯jyŽ9³šßR®�OXXËÝOô¢=¸ÒMŸžºWK£¨ ³mõZzÀï@¬[�="A£ëgÖ÷nkÖâç0æü$7)0>ÅRä"H°Zê…¿¾Ã�@S÷,,õ. S0HŸM¶X}i‡e“Q¸�ÜÏ ”º �j9Š“‹ dM€^¯î‘ø;*¸QX†øôº4t >�úZÀ£ àËáÿ‚<°_Z÷¼H·¦†©¾"ܧ™×Û¦3�wÁé_)’Ã~G½ÕÁñõ®Š¥ôhxÄ.³Jl]É�Ì¿J( t\,pöd}Šx&ò ©>ÀR<ßÉ{ø¾O¨;FÁÐ/´Ö Å«P¥¼` =Ò>Ëuª\ë'„û+‘õn˜‹5å0‚Kž›Žc¾â‘ªÑeʲVCâüºcà;0d@í¶i•”ˆ²,þ–ì¢ 2I„%mIWs݆u,m8÷�Šþ=}2ÖjI†ñœ£”—ÈN¡×‘‚­ZJ ·msÓ�w“=„(îÈ~K0‹!Cj ñ;#ÔjÄÚ&^ÆŠ†ÊÍ3¤1!#|XpÛ³ÿ6RB×Bf0²-†HQµ$Ñ7]z…�k°¶I )|Iì§½ -2M‘Nüâx_4ù_9Î.rA˜e}FA#Þ¯½˜åI!Ë%ÀÔ -/”¸ÄÆ!I(èJTV± +â-ÀÐCÇ!§àë<ÒÕu;è娽> ‰ðgƒ»ú|jûcÖÛÇô ADÙgù©í䉇ê\2V–1BÁy'ËêxQ§÷@€ÜLçdœ|Q§Õå®Ü`ºðŒáNù²â³ZKüs}®Å+œ¹•k‘¸TÆ¢Iå!Ã]„ç5>=ÝÑD­…ÿÈߨJÚ¦‹C¨' vü�‚Ç1aó•ÂGp>ÔÂå=—ý´žÃo¦›lûê½€©a!~ÏÑ R `¼AÂX1PvîИCéçÛüýž[­ÈyÈoëî¹0¡?H\"H‹VtÏ55‰ñP¢gRNÍÙœ\_c›_Æ/—j.Ä ØvqÏIn½r (dd(Cî¹�ƒTÕ®Ì÷Ü)RÚó�‹k\÷œ=ÚÖIE2Âöc?ö}*ï9²Ì7Ϋäàå„{ÜœY’~f‘OqÏÑE—ä§õtNÚ‰kôï9§¼åLáˆBÛ�]OÖõ\�Ô2O/ë9b4¢·É2—ZÏ-ovñ X*:Œ`ºneõœá ŸVözîâv0j\Ï9ÄçÔ5Ëê9ª³ã…$’zÎã7[YEÂô" ç±Ôs"ŽOT©§˜õÜ}„7œáBfé,&b°£@Ìs–÷*oG *1Y.‚¼O¢@³•¬6G,9ªÍs$—§ðÞ�ç4¾Graºû㹓�IM—"ž{E¸U“=žûX¶ÀD©¦,Ö¯P…³ ÓôSYÇŽP“ g ÷Ñmê†úΙ-ù –wN»¢'–•âšÜ¯/)ÙX¹Š¼s (žO/7þ;GO¤DÍæžY|YïQ 5AZ‚Âàiëw.<ÒCìÓÓðW¥©÷ùr…gîÄÃu¥hXŽt­>ËÒèÌwN²îÙ?Õöß9�¨Ÿ„Œ6½sÇ.·r¼µˆ¼s_¡ôߌdß¹cV‚!½s ËD¿A$ ¥µ&ÿ5RóÎug õyÝÄß¹¡qØU ÑUÊ;g÷zž‹ði -±v™"ˆÕö«õc�k’=Ÿ¢åø‹N‘~‰ >Ðô»ÊJ(¤D~`LQ‹W; 5Ñ?z¦æq}¤p+�•4fb§7úáb…7šÜ +�Û+À–.=¬^s$¸»é]ý�øÕ!w’~pÉDDv�U©Q…¼²¶e…%m`§ñƒ€±ÌÓ ØÊ„ÊF”ˆüžäQXdà„… +ª°ø«ŒÃ黼¯Þâ7ËMÄ„Mõü +º†=÷ȉ‰öl{:Çòöi—Ù¾sC¥/.£«0zd'v ‰‰!ëûp_®› .³Ÿ~A� Ä0�¯ˆ©l¥^ !ÀÓûaRnt©o�£:8íN�ZZÁPR¨[2’`ñŒca 3 Ë÷QvpgN¿%·Awƒ_6„|?h刘;‡uØ·/Ec½AnpH(]ë2–“ 8øYo¶u¸L`GŒ¯8b¦H[±ï÷¬"&YÅvõŽ&>*n^2Ö\�¾qVíÜØýOwß^'‰¦…¦²ˆ@6“Ì9K;7‹.‰l  6u6tayï-rÑùøU¶t—ð«¹06›<ÐÕùÜešŒ,üC#�¥ÇoÆ“*”nÙ¬�ÐŽ‘ +B"9qn jD$ý?Ÿ¨ÖrÕ�”ñ' çNýxÐ ¶Þ¨|ÕÑN�WtK·zÂ�(¾£ÎZÒV åpö–ÒŠ ‚U�Îñ…zò-ðj0ü¦!î‹UY4ÈîÄ€+)V*ᅦ�bîÑá´z¬“ˆ58�&Š'Ö®—ÄN>ùhpT�Q²˜�0ákJ0÷§Híz”–¼gÌlê%t;ÿ*ê–§šÁÃÎë–ãÙÄØž¢&uLÄÎdžYó®â”Þ~]>íÚð™E sG¢gôO ä/ö ÛO‹`–=Ñ‹Ööš­‚ O¢î¿ÿM"³¯Ï�É)ìŠ(]Q’ʰ0=,™“Û„ÊSZ�ËšP‡Õ¯OØ=¤xa”Ìp'z1yŽgÜß• Mí$d‰¼>fï]Ürä ÷hjÞ +M‘I„lÒ‹€ùø&‹¥u?#;i™P—£±ÅÛI´÷Ñ Å>~Å•œ ™)knŠú&AT‘V_@'z‰Q ó�ñêh$bý¦@·0a,·³‹>dúñcš$( Âõ•ŠS× m +¹ÎG¬?¬Å9ókXÐLaj‚$<‰Ý0BÑD5¦­� +;ûH>ôK8MtåK4/,¼%8ô8ù ‰ùà‡>á Åéq±VðÌ€3kžÐYCÛK]ÉÆ„÷¬Qó<Á ˜!e�ß„„�·H‰�TÙMF1LªM@eISÅW.©wdöj?àtrZDT €ó(Á`�°�´[NŽÈЬB.« ‰/Z¢ôxí®Ù÷C°Ñ8“Á€I¸U§rRqgèAÂ¥]M3 V -ƧÕ:à +Œd’È…ýõsbEp”­¬ð|R&Š7ù�ð2KV½ß�=¯Ö‚¡.¶PÑß(íRs&Ñ^x{†$¬å*å7Ë.lELÒ`‹+' 2çêÔ³ß#þ‹È˜?ví´èw#–|‰ªœ£ˆdíDI{°�¶:lkðª"žô»WΆ@’×öÂüGF­×‚Á%¿b¥o¬ÔLoÞSméOóôr€ ÄÒ'X‡ÍÖ�Ú÷ŠBò¢êa1¬Îs«Ñj +´�T¢”Œ�ÆG�òô‡„°ê¾“ðLþ„üCôÒ»>€ªh [¯°%wgˆ�s•ìS«ñ.€Yê‘(¬ÃÑ$]Ñc•»€UíÉ5«¤ç»è§dŸ°m‰øŽ§ªS¶âÆ¿Å{1`ÙAÿŽÞÛñ)Úƒà +è +8îïtN8¾ñ†d#ª³Ãø‡ÕÞÅáYý±måXÖî")EÏbz’9$0ýhãN_È5ë>.¼Ði_Uì„;>³Û7(ìSßdº#ìF¬Õæfo÷ÍBüÈ5”Þƒ™t'À¹c�àR¬¶¤E|k¼­@3V—2Œà}GÁ§µ˜™šàÇlé–Ë*äå’_Ÿ ¥AcÊE»1ê‰�[Fcÿ§©ÍÖ`øÚä}µåX�ð®4•(Piaýì?—¯ä}{#¤Üôq€ê«6á"èî0§øÎ¸5‡$=îfOYù{ ô +éø€£ê¨ËØ9™Ùér’¥ß|-AYvi&9U¥cU;æÿßß�t‹›Â9C+ÜÏòúZãcTp? Ÿ÷(EYÙê"Ím%Žyß–¸M±t0Á>€ÀmÚ†É�Kϰø>r·”ƒ.\ï”ݲ»Ž.ß#|xíØâè÷Sø:•C¤œB$ìÝ +ÀÉ¥|´·ZóÌ^Ma8+J¿o=AŸôìIޝÜb‰;À`üQ¨U%ËÝrŽX½cKðy„tÜRö9`Vœü┃!]Óq˜5UÂFmá*k—ê_[V^ÐΊØkUNÍj +OVô´WU¦A´Ò eâ³ä.æ31ùÁëAzâäúCÖîˆkD¶*o7‘¡�[=‡¾Ä€Ê°9»9óBñ3¯TÔ¡=ôUO–Äxžr¸õ™*ûh�WG�ätÊï¹DtW*#¦¼LDƒ¦;<'�`«ÚlÀtiy»yËnŒÉR¥…ë�f®,Inî߀Éú&&&æ´Þ–CjÁ°¾‚¹Üx"޳Ä0a5š™5UÕ´�yt[Ð2ö}CˆJôCÓÀp3±%b,M(t²ÉaWô…m˜¿?T¶Á¡ÇÑ•T9ÿ�ŒcŒCÊÇ&[ú2¼{Y=œV‹½Ü Ž"?!bš_ÔH»L '>ž5Ì(qú­”Ø–V#ÿ¶Ø!À“Ç-F�‚ŠíjZÓ —FŸÿˆ~ÓÔv fäº6t<+ƄӌQ£E$A^ˆ0¦p‡ÍõëÐS‹ä÷«OG�8&òä…ÌÎÏ[�f·Ö Æ¥”I‡˜J©j…orF¥ÓtŽž3›½Z”û8’IÛC}<âÌs¾Uººj•„Xšâ­ÍÒ¦ x2:Ðhî_rýÍáø)PKg Ë‘Î=ÑX;ø|Õ HÞ/ U²ÎÀmWãÙdxNüVéá ÎèR³BáÂܽ» |.¼Yü„qì«!‚OÒ^°™V‡‡vw"ª6OdëÔ;÷ 24Ü8F,Šf­m°O)[ Ï%ÃXÌlº·>d§ÙòÈú˜^&'8˜å; ñç $® +›g�»þh —¤!_(áûWD(RŠv´Ìï.ôs ´ V�E¡®7Ò;bÌÊøàMB2‡3,îoï#¼õ¦†4®aÒOð`¶˜çö�õ•Ž:Q]Õ¿Ôì¸cij^¾æ;Tªù–ñ/ü�ß-]’–vT¼J‹¿Ûò9º–ÖÿX §HrÏuúìsBoü‹Z®¡îä¯SS& þwR”¢oþ_*pè_,Ö‡.äÝ+Ý‘¾ý¦*Eô¨a”œV"Á T7€ßM9èWÿøÎ^‰,Vô¾FÍA!×ɃËj‚Zñà-�‰­ðŽTŒüKœwé�ïyŸ)ë)Ä¢r©Hâ×Ahû^Ü Ö<�/Y{¹�‘Ês»„ÖG3q±Q'ÜÛ\þi1=í/«ŽÌçIˆ2g>B?õ‡(à¦Y¢>“i›ÈЛœrçÚÜ.ÂΗg,JZë{VJOyd~ÁJ¡ØjÉÖ›`Å’ÜT?`5“Ä,Xk�Œ)‡E¤Šÿ¹$Ög¢¦E÷w>Î#3[¯0!ÄSºê Ñ_1>_Ê ý5¬àdÚä|;µmˆ$†Ëª.b BT÷PòñöU] ²àÌ6—‚â~M§@¹ò~æÂ�R'h¬’©sEà»ü“sF90`‚ž'˜U/]pÇåzˆß�@»’K8pïåÝ´ùBÜ.>=}U¿Rd­nÇRŽ#—ã1H©~'’’™�/8ŠÊ ¹jyJËjU5ž¹û‡”КI�1uÔ.#`³ƒm>*îêwœkÌ›ô¯Øª¹±Z|~� æ"bbO! +CZò IÇ\D8“fnŒVΙñ{É¡<c£X+’þùV³¯2ƒç"ñÓ}mR8àBø$4P#˜ö§A€aýþ%^¿’šPúŪqÂ}Â]¡šõBÝFôž@ŠÄ +�’»‡ò[Ôè5ž•øóÃÈÖêƒÓ°õ[s(,E0Ƶ ¢þ ¥5Ú¶Ïi*©%DpŒµk6è‚n!ºüÈÁ…T^^ÄÿWÑÉ� j xÿHÞÊ)ô5²Ð!ÁÃCÉRnVÖGÐØLIÄÄ‹ �ž.” Û1ÑÍ$2¡ŸA +B~)LÓùˆŸ`K»5ÜÉù¬ctƒŠ¹d¢Gˆª1ßÁBì·@bQ–lnO�z&qS&à€¶S@ÝqXƒÞØ"B4Tû1Ò®ôÙo/¶wèÇ+nàÅI Ê:òáO³ùJ9Àâ MxK.ž"Ê‚T‹�`m*@<˜Îh˾£�Ѓ•·%6~têÆ+ðئZ‡�k¼ÒkMOÊöb3öhn²°ûÈ{„Aë° +"úIÖEÕŠúU•ÝÐcÓ’Ñ¢vRɸ†Âàt-ů�Ú=¾k¼‘N‘óü®Á‡CEš‡Î2sˆæRíÒÕÌ£;Ãðx™1º4o7XB~-ÅΈXjgŸ­9©JcöËÓd˜EI‹÷.“¨±R^Pwê¯_Dåõñ`¬ ìá? +µ?yÇ•°O¸÷ÃP`‚ð\ôÕ¨¶*Æ‚‡F©}÷ÂX€L· Ð•Ãþƒ_h£†*¤" ™VRŠI>ÑëÕ=oã]Ìl�q„c]8”ú4Y`ç3 :O$_Xÿ¡~ +®‰í�µ›9³y¶¬÷œöl¬¶ µcÍYåŒApHÆD(”´M²þoö@C�»=$–ÓÕ‹ÀÀÌ«4eò|L}\fúõªUÜ }2®A}p` Þ׆ i±,«ÝñüQ'­^Ê?¼Ì¼t àfäûƒ~¥ûÓ³ {EkÅŽ‹„-œø(žtµ»Ò‚Ǿlh“q|cvK«žå°ì«æÚ!ŒÉª�Bnheba7A°3<=ëxaÍ6<ds„í—lçQ ç7½žsÎf6‘LÌdcC:o°Žéàì§ÔRn:am¿;†x…•‚cwnÈðíÓ2»~ƒGbÍebîª#ı~нlÄ/(0Ôí»;hr™7*Õ})DZÞÖ‡îžWuqQ–i×ne„å¯+îå ‚˜dPô¼K«5A?àvè|ýQÍ;¼— a.þ_µ;?¸<È”°·²m·Ç9 v,ÁN&_´ôë�u ®ý‹ëO òZ�´n¬€»8晜àé¶ŽÔO‡zÑ û»tA/1áF©2^y¤ÛcŒ­œòúæ”i(Ë‚Fbt!…0É}Œ‚œ½SoXöÙG¿QŽ@ëƒö&}Š<ú Ý"„~J ä6¶ï¿¾j,:óŒ§,²Ÿˆ9û*Ñ9Š.ÒÏ‹soõA¼¢µz/°ˆ·w�¼{=Å™ˆëoÔÓÐÑ M$"{ÄRý¹eDV-€üju™ÉpAçQø“&æÇp¾ñršG¸�©7AN+ÊT$‚•å¥t!ÂFX7Õ$a)Ù�ª†!�xK¶Q¶VA«˜' ¥åC ê¡’ó`eBšZ”%D½•<¡ØÒŽà|äçZG‹ª ‰¤ôòN¦€O 9·l€s ëH>A#DE�NÓL¥€ãÎëøÿ§²ifˆn3Ê\y ñušìêj�{+ ¶Y¿²>H†«ãbªÌ‰SÀT6³°p@-®0S–.à”’sX›0{ÙÖœ�]˜ª>Ähc4—^B©ò÷{xH�ôÁ]ØÏL ‹ø(J=™˜hý× ê/홓;bÊÕ‚èÓP$w\†3æüÐB¶n^Û…åGá�'aJƒ¼§¦f‹£ŒøwŠóïϬoi,íDb‡QdáœÒèG©¯}†7+¤™ÃQêQ‹‹#QëÄ”½È³š¥ Ê$ô¶�S*ŽƵ1ÉE3-Γ?£Sù à-Þ[-˜§2Ç4™yg�g€[-Äx, ™öÒ=eô�ZÓ…‚}�A )¢Í"‹qÕ¦ó Öuc/šÏ("<�a>ô…#‡w’LÁ +‰°ÃUi­_¯o�Eß +mL²Ö·ýWœËíë ÆFÀý>‡ÑÐ,âÎòÁ5±mßÉËJ˜È(Wi±ÈU µì®þ¢9¸*ÛO0ØÏ…[W«Fø:úô죩šÇÔ•ôYíºËçÐ ;õÖÇÉMy¥»NÜÖÆå+ŸU׸§�œ! és©)á=CPƒ æ:ÿI�}”`œÏ1 £ ª›Vì{¤Üΰ„4‹+x{Ü}Qaùh¢-r˜J^Nk}±§R!$\|ùuËÔã~4]n%‚iˆßJ SÞÌÜ0âJ› Toc_Öõ·wËáUÿó0F�œîÇT�/MÖþs%‰Õím˜šqQÅ×1r:(FÃÛæÅÜßOYádÅP±Ä�ŽÏ+ØÓù�¨ —󌄧†»B—(º6ˆ7 Û²I:ˆç9Uø•Þ +QIŸÙžÛ@ *®ûi+Žx”|ºÉ£H×fÝźÏkÝ} ‡~7k¤¡·#]ê ”ÐÄÎrL8úÖc£³å¸üöµí�)Ê1HÞ ¯öÙuvo.»ø[Úî�êó¸.S¬7ÔM*©U3¤KISd‘[¦ö*œ‡³mãzŽ‘ÁÊ +ÞbCYZ±‰öô[¸š+mû-ˆy1¸ké$èþ'óvI�?:§À�î [6¼†>§´ñ*ãÅÍðeßö,i€[ý9ª¥R&æê]”#¶vû—hdêʵ-ÉõJkix`ý›ÒÐa1(¢Jp)™Y¢¸.¹/^ev ½vìHʱÕ�]éù+Ð á@¢iÙþúxµÞäYî½Æ"Üþ úr¶G3“Ï#çoÚÕR;°<‰ ûilŒlšVS:NÚ`“¾µÕÂhba*µê�3Õ~ìf$: ñåšn°¢#ak°ùG½ª/zxÃÜC˜è3¦å?:öí?½’%]~ëö³ñ§'úQn�àâ2‘Üò—cUSr‹»1 >6UûOx¬-  4C@>œjA +î–=)ǬÜkN{7·°~Ò¶¹å®DC•æ¢ép(š[èÆÀýf;,Æâd²_ÃK¸e?f¤ ÜÒLég |[FæçžªÜ‹ɇ‘À-`Æ!ÛûÂ-ño¼ÒŒƒý² +T+an ˜T>niG j¬*Ç-R”Ü.«q©m‹Éþâ=&Ç—ÈSzî Täï �M#§Ngãu‡ExôKè8Sѵ™l>?-ZˆÎóh%ëf­Íà࣊–Xb(ê.ËL£Ç4ôíj‚ª;£… á>ÒDÁ›­º/)�ö÷&È­ÐåÈ�ÅÒOfJè’?Èó…]¬iÂ�…pNU*ÅÃÖb¬�„�ìh¹ëj²¡ª<..§‡ñXŒóÈW>Ü£x4Ù�uƒiÐÒKmžyHùæM,§òòÈ›ü]÷7³û\o)‰²›Ó{¶þ°¦²��¤’ 7V*"Ë·EÐ M!û 9ðdÅCçGÜm +¢jd0÷½;×óU»ßôÙž!ü í£üùõX€¬ü„ §h½¿ÏÊÔ$GpãKUÇtVw¥¶Š£�Šñ.ÁíÅ�3ò�L¼Ïc¥ˆŠ«V€6œ³`ms3  +Ñ +!™xÞdÕ¨&¼£÷ó…b„rK†·H²LŸAÜV\Vçä¸ë·3è€Uµ>Ž€€@‹÷Ž�Ž—Ó å�/«Á¤iÑ“@†×{¼ê¢¬çtYŒ›NÀ›•mw„vN ù2ôÀ¬rõ/ã|¶ËU)®‘‡ð`1Z*ù€þÆ@C•¸S¨eüä¡¥oàt�·êø8õ¢žgší\DÒ]•§Ùºê©²¹wÍ!·ÐªgPµrÑ, $|WâD®š+€Vêvõå*HÊÆ‰ ”§T» +yG¡ +ycÍ„šaû&„3Ç"�Ñ¶ÚÆ†¬€LNØXXÿ䋦EŒ­³¼PrM6ò‰¿>YÿÐ ·äÈP1g]\i³O7í!� '@i†%æ#]ÅHð2vê-³±•|BùÏpØ©T7³1fÊ®�¨ÿ·,”�81em+ƒoÄt-á´O ª^†Œˆ@�mFÏA2ÙkÊÀ»©DùÊü§Êp&¯á¢Ög*ħ‘yÔx“¡«r¢ƒ’FÒÂáÌ›çJàÝš5>q8ªO£»ö±ä4#rìë[àØ%ç{EçIãBÒK÷ò�ð~!¡ð[=ý½ñ”öJš,ñŸß¢(µ-¨+é)=­(ß²K¿¦-��ñpÀ’ýÛ± giS™!Ñu€ ž ôÃÃS¹Ë/ó#yÖ aØÈ Jdo…rYJ¢á3ÅÚŸ‡­"3�@zÞ`)·ÒQ¸á‰*fx©�TĘiÂi; + ŒC¸ªÛa_ç - IêÀÐÉÀø+ˆh¸�iè¦7•ÁêÊÞ-~ ¦³?–¼Àé|IM7Z'u™�HPª#†!‘¶o½é!ˆX‰áhŒÆ|HZÖmEÖ±ãªÀ§•0Ç�Þæˆ- ÐV‡;,þ{ó›°«eð?êcáýX"H{FA²vŸx å—ë ÞdéØÄXë(m�™%o“’ ‰@(?šfJøŠ¸�0"tA.ç/È xå9€ê…lFõ£z4�g@@?î+Na¿ƒŒ/2ñÍ!¹ûâ@°IúŸˆ2¡…µ€9M*µë¢î/ÅMæÑáÝã+Lj”¹}C¤´F¯ŽŠÄrc­ÕÂï/è™A9ÆVJs-â+XãU â+<¸µ�é‹N|Ŷdê‹»”Kp¹R[Ñ,ƒÂÞ´I²á+dXÆ„H} " _áæt0ê‡ð×^A¿ƒÃáë·éF3v,ý�¢Àœ/,I^qÚ׺9áÊ„óû£lôê™�c‰D�Pí=D4� »•S � šÿ6B^¹�Íð +¢Ý,:âZ‚+ƘæL/^jÐ'è»$ý‘ C&ú‡ßå£HÐÃcŸúŸD/I‚x-‹Öñ†³´g­îÞŸs ¹4(`»$&S›èMcE?n?c÷ÎÇ�ï-ùx �xþ<2;zMÿ 5/ˆíߥÊ@í…€:v=Y‘�± òOh·)¯rÇWNØâZý�YZÍCNv€&†iŠœ²CÏУê=Ášì Í \À¢<ÞKú+† Lùæx>t)æ® +…û…¼Í?¥¼¦Y­ä\ýL¼vyVÄ-.x…ùÈKÌýžDj*ïÒ-#‡|–„~ Є¯z‚’xX%; ï»´'‘m¦WàÐ?o^£SÖW3ô¦uÔÏÂxúW´ ŸK.ÙðFˆ&c�$ozé táŠyu#Rƒ×¦ã•`±Ç1 8D×,uCp¤<2ijvÆŒMMpH™»ÐÒ¤/UO8ù§ÉÒÏ™b¾ ŒáŸöžMhš‰YتöA*×Óë—ѹ3Ì¿ OÖô.„2&’Ä5’ –±Ú‹ åØ�Ohól¢Á 2î&P6‘ÇÁ0¦ÆÇ’‰¹ß °r ßSÛC‡9°ÎŸ3íyµã†šs Žõ¸tQxŸ2e ¸¹2Ú©àY–]H`ƒ¨GjüÖ¢—5“Ö£§”bB Ïd¥µ’C%åM‰óE-Î%œi—(aâS"©{בà„k0!ƒ€—¡¥¬ßms¯ÀÌ¥¥u³J|ùd—8hˆúÜ…<ú*Ò*þñY63Q4þ�ì—J +;"ürvßh4òÈÚ´Lõpú¼³Þì r_nM#‰„dŸ‘ê´`X^£ñ±0<­€ÖZ‰bòLO žBÁÍ 4 ±»áx¤fhÔC·Šè­~ŒJ'‹Åˆ&,XÐK­ Bt©Køðx¹`¾VCÏgpÃÑŠX;áOßΈ¾y6'Ôm_©v�\f2IŠíÎ0íIÑÚ@“צ3h(b|æYk‹#@.d�ŠEâåØm�UÎ2=h¾Áhv Œz…º1±ömÝ,é÷‘5ÿ¦RµkâûÊ”L¦×Äò�Ê  Òi@£�¢5ˆ…ëhö|kcàQüD#Š4¤¨ü� %¬X$?†£ îv/¬%Ú´S—'+P—ÉÇ´å"Ú ØM×¾2CY¬–D¶›Ç' +œ:ƒ £åYôµL¹wæ)¥ÄÂy¹ò÷Ô…ò@�ùáù=‰øô K‹…�è‹F[è;J…•²Ý~i�25¹3é&+ ŠØbÐ~35˜® ¯fÆXæ@Xr€ @ÕÅ ì}�¼‰–2l»…"Q‹ŸËÖu@=‚΂1fW—È»È.âÇ^WöÄÞÔÐôšì=ÆqS•¹±ÏGuÆÃ G€Ðj,�&¥ÍùBúO‡—)¢È§¬¿rPMŽ˜piÞœó�´ŸEæøñ“‘<‚Š®0CÒ%±,¿`’ãZXÝH(¡¨ÁþDs!­ÎÂ{(pp‚ݳC’ìzühk3¦>y,@ñ9AD§NÓç™Qœ_>4Ë1ÂÐ 0epÉ@¨5ýÀ +Æß PEü .Ê@îyE®�ü*4N±S@WðsÌý‡mÈn]ƒY÷á7È ‘mcê/éGkó¥®ÉPԅŽë�1 ÌòbcðA¯Þð’�9(¦·‹îå–32Zž‡4'ö† ø\øAsÔ�›’ÐÅ@àKTòÒ9ê’§²ç³¡GêÒ/GîB»H]È¢�kVG]ˆ.§€pQ¢ö�—¨ë�޶n¿ u™¤yä)ÜzK¿eÜ-Î_)ÑIõ*TKZ™°; +à_¾Þ¬½‡-wÌ‚„E².ž-^ð¾ Ê~.µù‚"eL₉‚¢'÷“8×TAš5ø•Ê{'6dÄ0ï™™ôt ¡ r2Z¸ZÏÂ#·Æ^Pôó˜�‚"Ñ©Ɉ’Dmß)”?·”»ìŠ4Þ;mïÑ*N%“î'úæÉÀù�‡¢`·Åµ1~"–=¤¤ üDOø–wløø‰ì¹�g+~"t»üoÿç'âÒ>‡"N ±°è)Ù£´žù‰*Dokb°XÇpéâÀ‡«¡~ÏBÆ›Zž¶N8NHÍZHþ�æ8¦UD(Å­vÒŒ Å KvÑÅU`ù@”¹Î�¢�µ® N6{PÃ̬I††ZJ*®nG™ÃÖ@w•øþ´½²“Ù ÓÇ àh˜­Ø—Ì%=Ó/c$ç9lñÇÿpàߤ™ÀøûP½� æö(±P‹QEÄcö0¨:ô¤DÏ=u½E¸7ãT&¢t%lJÖñOš +çƒ�ûu Ûî|})ñqÃ5ªÖ¡µ–€&Ëî*Ê� I®Ô ±%Ág9” L°Š 6Gz޲•M ¤¡oºÉy–SÓÒ´¤‡‚0@V1¡[Ô±„#­ €Ò*TrB›Cš'ˆs‘Û %¤³Ÿã;R^dËŠ”ej—ÊOÏ¡ó¦ã‡!è®ý¡OfÈO,1Rqð¿§âûXÜT¸D±ÄÈc’²½A©ƒ.“²D6è`€íS QW8|3) Tt}y F—¾�¡Ãœ5ÙƒP'7¥ctÚ‰!3¤O`¶ðúÓi2¾)|/TP‹„~�›üÿßY ò¸ÔšÜ{‡ë°øu ù5Ñ:(ø‡ç¥Û÷‹ÊNÝ^.E¦( +ø4;ïú¶¬ÛnMB•‹¢mxïGÒÕ½bcãPCpý 2L&„eÐìÍù-™hA¬T„¦îG ÏýQWô2J–㢴mp+xZgí~u/‚Ëö­r¸¯óŒØÉî´ÜByŠá‹lr +Ö�õ˜H¼à0câÒÄj„mžPi~Õ~\’ñžX¢ÏÆKW $¤š1ü¥PE>%þ£asôˆÆ>ê3D¯�4úÖkæÇ=Xn©K¿nos¦D1‚]ËÅšvï€'õ. É�4)™.)øØ„Éÿ�y|H ÆtY�f�>1Q-;O£˜`//ò£"F/â–Õ­¨Ç胊Xפ¿R˜P†óuöµ¼Ÿw�3Û�\˜Ø–ã[³†‰¼�Ì¢›¨W!~CþÙfaÂâXôŠ~VQ  R›.ĸRÃWÿãûq*¡ü[û &êw‰MÅïgò]þ?^y#\8`‚¹¡8o›zîý4š–$e „þ’•$Ñë�‰Jï€{‘Ç'Y=Ù&¾‹l&RŽ¢w�¿ˆo‰ú!i°!ΊÃ&°'D .}ÒÎýxO^~ï� ˆç&x?í¯†ž&8ÑÃ�Êî–~èÏ[“4›V⃃+|üŠ$¸`z¾¥Êvb`zqe^+„ MQˆìÐg^<òQJ€°˜Dð…™ôh ¢çØr¥!!¦ýLWØÏÖ<ù°Ä»ÜH;øÛ$ÏÓ]7Ø÷ø¡–БƒÐX‰‰=lþuNƒ�¬¯ƒ:AK°ý 2 tÌ„«Ð›Œfvçc6WŸŸ7£Y)À…hGB^D®Ñ¼˜X›•a©1vÚw3¨@Æ/R’Ôêz¶ëåÇ›ñ±1Øé[âÅ8ßåuÄnm2ƒÉ´³Á”Íp?þ&­Xíô/S®ëfèÒcЄ'x­ÖÍäàf±K”¯\7ÓÌç•7½Ý °Ž²w×Íœn쎿Úu³ÁB °± ‹ˆÒK¦ ·ã…KÝ üÖò0Öô«›‰œ×HPÝì« ‘á�éšiI·Mu3�æ>ávþñº`ÎÙLkëgÍË$÷ +S;ÕŸþ%(HMKv3t*øëXC+œÁ¦í­ðÅìu³ÝÈ�êlÂý­xàsrè홾ˆÖÍ>ùëq¹üçµJº›íéð¾›™IÉb£z7ÓOw,6õ1ÜhíŽ7ƒ*ái›m‘‰„Ñ�Èb•öY¢ÂînWë]?-¨uÞ +ë»YS`¹ïÝŒI&v¿›�…ÆaIÈw³çŸ{§¢RáÝL|BöšE(ùà~p¼›ñ¸jµ‡7«…<]G•ÖÒ¦¦ð_˜3û6¬£ "…V0·`»Ùá=hƒ­•\ù¸Ý¶›�؆·¶›}\nóH…ê ТFÍ/¦áQ�0,œ„þT)¨›%r“&Ã7”6ëy¨?­º™÷ñ'%l¤s3¹é ¯iž›Ý¡Ê=TnV³…ƒý¥›eDƒ*ŸšnæÏ?˜ ¬¼½,O¡[¯%X âæf’à^n–Ád�иÑÑWÚû#,Ë-¬,Ž™zR˜WÀy›:S„Ò~¹þQð»c¬£!7óhò#¾r39š–¨…óG»Wú ¨—›95�å~½Z† à —mìV6³Ð +y e¼hHÉÍ’ì�ÏðUcå×|2sÔ¢M2íñÌAR7ÃÀÄU‚�M�øvm¹êk`­`«ÄÍ:†6 ¤€f¢Ãð÷»Õ BÈÀQ±VSìì‡sÒ¸à.žy“†�yMáæ2i%ÆgPØ%•´1e6‡ƒp{‹X›b¥©~�Ê‘já'€‚�¯Wu[êkj +iBtvû$íyª±aNЉƒHñGáÁ�šRI‹Ù˜(´¶¯ …0m[»¤qCKÂÛ(»kêzAÃXPŒ|4ÉoC +$ñ$´¯N“öœ9°Fnk¯I£úIÐá™4%‘ŸK¸iÒ�}Ð,�WàÞÉ7i2{ "EmÒ¨JÉ’%d 4¦.ñÀÃPôtçSÇm}¯ð˜’¥ìuV?‡Òp•yJ3Kž´,ƒƒdlÒª'­ãy–òå¤�?§|L‡\TÝ6ñÌ}^6/Äous2}(n<ÍÑ¿šL[@�Ñø—ú!3”Æú/Ð Qš58l7J“ûìáÃEi\ @¡_aEÇóÑgX§÷S¹ÙVXIiyqÔ¡Z½HiML+Q°Æ•”¶j!Œ”HiUÕ³AêìW¬ô ™­óòdäƒõ&J÷Êlˆ¯ð)JË„�Kº�Ò8‰'WrŸ‰Ò°¯´Ìl ÌOZ—KµˆJpõgÚA6�†¬ó¿4´ 4÷[!A¬™ÙŸ´CÌË�Ò,ºfÇoFwòîÓ@{Ú(¥�)ﺥöÎQšK‚ž  Yä(’›T“š‚¾ê��Ñ´0‚ãÖ( ¨æ›ÚŸ£4H½@e¶Q¥ù­U¹0+Q¥5V»»9”p¢À§n)èû­,Â%‚;x\n@}q½üT5]³8sÙ|$ý…�G‘ÓÖÁzT$<ÜÙõ¨yd)&Ÿ€8ódÕ |iðå* DQÀ,UÇÁPŽ��(¾Áðª‡7­ÌÔ¬¡2˜†Îzö܆/ª;æTÓv3Üñ) S|:cÅ<ÈW †Ú°7!¬oz¨�Ê9q ‚͸¹yUÐì:¸àÛ;šu�;ïM0ÕåðKt’¹gvÆæºr´75.2=>CIXgÖ€�X³œ—a®S­ á°ð«áŸ~±Q}7Ò󷓆¹\RO½U¥ öþcòËÖ*•�!q¶, hu¹OnëÐÂ`LæÓ)®ÿ¼I[Ô"Vب0¨äbJº‚“?—mçUI«“r· ÆÔ1z[áª1]r@}7~"Ù»:be4Áä aCè°Büpaã4ƒ§("ú> +.|ò®á½=8Ì™l¸wÈ<Ľ$ª¨È˜ 0y�j†SêÜÒ¿yÃ!j0•âõ‹S +%žºh·ôj©˜êÿ̨s¾[šÄ·Ïºü.ì$BèWfŠæ835ìÔ-yB˜kŽ]¥3™;ð†6è5â‚ (t’7G2�«¾iËí)ú@"?<&^7§E#Z“+…×€(q¯âZããú‘ð² +ý™#ÑsG‡Ùe_Ž`4Éë†0ÀµÇx4�Êi%²®�€<Ïä±Ho๠9a`»X)ãE3‰»“Þt¡£?ãó¬�J�è†ðï² úí1Ÿ– +ÈãÔºAƒ¿XÊÔL½wT! ×Ûÿs™Ë9€)Ñ¿ŒŽ-2…$º-êÁeuÝú0âèËÿ!7øïsCD̉ñj-½LÈŸIcc8x7a°Ù§gÕÄ£5?”xMž'P4èÎHºÜšßGvåÈžýtg ˆˆÁIåÿ'�§ Ö¸°#fïÅÛÆŽô„ö‚ïÓÔiò>΄0� 2ÝOKI°¤k�®ƒ!ÎKÕa¤ø>¹‹ÏСz¯ÿQ X”dñÃ/ÐÙ骰CyYzà•[Õ$‘:(’d™@…tÀeŸŽvzMº` +H¦]c÷I"µ‘‘ÁDØb9Ò„”ó‘,)äµdÝ=”€¼’ðÚýº™›|‡ð¹Ž5eæHÍ, ©ÃÝL2ƒ–iX‰’üe‘—F…FsSCñ‘@›ˆüPh1¢R³ þ˜É�ÕÚ“zC°Ÿè‰óý ‚ª]œú£y¬Ð8žÅõBS ¹OþøÂÖß¶€;ÚÀËÀcÏ@_4!ãrÓ¤€kq,Á>Ë&ÉÌøæïhu–^|3<Šp“xʆe#æupN0¯tàÙOkl¬ßÙ"Tp HN*iWùPÁö¹Ù6›ãö 8?ß÷Ø�EB.X¹·ÁAûfÑP®Uí;Z +sñ¸ëæ±”à×LJ!øH†èTA�}Üe[+7Îõ3ø‰@¼BÕg2kΠ¬]õK¼ᓱ¦ÿÙj¯x `½“‹™ŒKc2+#[Ägô·ÞŠ8߈ŸìžtáoTšxQ!Š<·×Á57«Xj²ªØ*ŠKJ¿ƒK¼ÄTñª¿ù +ÿËšcœœ›QG°�Pà7Êõòkü•F{_õ“3‰\Ät/P|›;…�ß‹‚³‘BrS§�"’�ÓÿÚhäHŽ}•pD 8½Þ¿ü(«ÆUëõí> +’{;€—dŸÉ¿¨9—lç�.ºR‘ákî° g²‘DÃÃ0/5èÞÁ�L(°ÓY˜F9h…§8Û/…®n¾; Òýì¿ÝE.¢Ö3�U«J^˜ùC4L'$ Ç È-ªeH°]à:0WABb‘åÝ· ¬"ŸF-#ðŠ€�2Þ7kœ!Éš¨ƒP¶}vøZlØÄ}H¢¬4MÞ Cäɀð+¥ݑ҅§Ÿë :?ôÀÇêI±“±`°Šìà¡àç/T%ž +šŒ�¥Ä´‚1ê ;¼1F‚"\0¤+¤Å·äUÊHó];ÎÊ‘J~@«lŒ¯ÄœÒ| 2,?{h°‰.kZâdÜUñ—xö¦?zؘ™ñ@ñ}FŽò[e+ àR>Æš¥ÉÈŽÔ»+Ë)8 3Ú‹(³Ïœç<àuœ�­XBõJÊ"\â6Í*²˜t#¦˜Ë”˜ʯ ±øÒ:·Jn™I²,$êBDFP$Ù’¤Xe�Â"aI9Y¢ ‘‘4½õ-ßyûZ­e5k[ÖšµVšüå_ZÏjµš•ï@4Æ›™ÕZºêjU•«ªª,ªªDkpÙ÷¸m­¶ÉvÛ¶¥¶mÛVF‡–Z.ÒØ�zì±gÛ² +2ìtZ׿:†i1­”¶´ÒûŒH…DJCÜ]@ÈÑÿÿÿü·ÿýûŸNÿÿ!?;£‘‘Ñ™\>ÿésùÏl”Ùu�ˆˆV媪ªW½ªªªEU­–ËUUUŪ¢ª²ÝÍD®kUüÙÍn{u‰ÈŒmK)¡VËe¥©’ý'¢qy¢\£ +ÿùa.Iäѹ&ÁLèzìðÐ fŒ>¾á0s!ù ê!"ÞÝ qGg£�A¨»»»;¹ûíÿ9‘«Ð»á1~�ÂåŒ'—À>M¨­ef'33›™•™™ÍfÆ-«Ž2ªº]UU«T­V@ØîR®Ø¶Û¶Ý«MÛ·}Û¶½Öæ¶­‘Z–EšáòßÂñ? ¢�imQIê +DvØÎ‡È´2µö{‰²)ÈDD"!"™ˆˆˆJTñHB¤!"ž'I’DD&@ΰâôzÓ™I�N;4½vêé´4"êX:†+ˆ:îîwwwwwR’Þ�G!ww¿¹#:ºzýõÿÿÿŸ¸?™ÑÈffVŒC¡áÁ¶Ùì³kÛ.Âv3 a1P‰¨D%""""¢‰Z,ÈA"¢Ìg†È£ �4IÎx e¨Xtýb•YkÎG>3ymÆR™¡14²UD™�ð#çîîîj±'išeš�F“®Õ ³yñYæÑ‚KV•±H²F¡ œ``y¸Y“‚Ùš%Û’m1°ƒ(X"YK%‰WöÌÙssnI_M“pÏ3ÒæP<úx�ó5 +�˜ŽîÌ Øxtm{̦9Ÿ›²L3 Ê4ƒ�sgÀ4»lÚÄ™Aᚨ̀¨©v]xÔu}u]».ÌÎ#ÛøLëtîÈê9š#3f®hhÓ6Ë;�Nf‘d™G&3'Ds3ÃÜOsN8g6æ˜<ž@“ƒÁ`š4M*Ì$¾ÏÜÉøxSLáÆâ1üηͺÜXÎ<߸r3æ˜aŠ$æ™Ì`È WCnîWË)îr&wËyøL�¼7åùîïn.ìÆs4tå5 æÊ`”ÁpcrY–›:¹ÀÍÍ•ðâKÞKîBMš3¡6Æ ¹šñýrÖ3,–+¨7dwb¹ÀÑÜñæªs¹;ñxœ ЕœYÎN.Pr7sRJ�#€�S%4³PY„>ÔZ™HFvU·dtäÕj%u w$‚îdû;éNë9ÃyçÝY=â^ðèv +‘OëhQ»�eíÿŸ?Y÷ùóg@ü¼�a§�q�ªëgq“_ûBDöí�¾«Œ¦~êüuöEFQ3�:ƒqÍœ|+ß¾Ï`èßó Ÿ§�AáOK}©gÑ�q4#rÔ÷‚ãî ˆž-úã0Ã{ +†³§�tAHÌ‘ñÔÎÌç-Þ™À:Ó9‡ç¼SÓ �g@ÌÐù3 ÈsÎùüœ Ì9�3 fΩ‚N¹ ˆŸÁ°aÌÆŒ±vyMÍ ÑXfê#Ʋd3Š×Öe#T;fl}™*ª*zݯ +Ï>¬ä4IŸÀo7"&'$%'"B'"‘›vØé”¦Ïr§æfÚ3ÏÍe|4vr&‹¡‘¹‘+Ó0 † ^ üe’ylÌf›Íuá33Ž™2çÔPå©:³Æ¦’s4¬9¨D:,m(ó�¢@,IE“]’äu ",@\ZdLlŠ" ƒ©´óM¹IéG@ï*aÆ¿ÁAEˆô(X(Ü4èðµ8$½Í®7@Ž„c. í¡ª0_ˆ¿õÒ+¼2ÿH1(‘&¦þÅZŸc€‚x +‚_œ7iŒ�ynJë"=ÕÞv)‹v€›çó˜rí—ò7£¨t즢0DùUã1À*|öòa1�CžÔ°^Ü8$Ýòƒ^C§¾õÀv ÷çÀúf�Äýg–?ãß +R›Šx·[Ljª}‰ØÕY£è¨Î¬”Ö2™…ÚŽ+;™y°} J £$Åš{- ÝBˆ~ÑVßy‰Q CKÝ7Ê=ƒÍÙ +ÚbqövIQ_À±ÙðVa"kˆ"p«íPÆŽm"xÜ&áõ @èíó…DYæhØV!�7ã·+¿Æl^è/%ókrq�ž û׳+¥ó +.?¢¶;á˜ïnÐþþó;í3ާË˼r®Ùõêlóï�X qÓPðͨ7l$„ü +óÁ¶®DðˆùÝUx$°RMòv=:0žÖ›!¨¢çç]K/'€dö¤MBÞlðhÀ0ÑêQ0_ÈÏOêœ.?ãÇŒØH«ç â.ÎõŒg}S¨½<¼°’îë·Òàä[ý±dÜÄ´r¹ù˜¶+ô�£á›dEëÈ›K(¦ö+»Ëc¬x¨r^�Õ£ï˜DLRk“Z\\ñ¡7ܤŠ"©ˆ ,q UeÉ‘m^v\�ؚ䡺ð×ñ0?ùeÖB;!¥Há/.Y¥ D¾²Ó= ;²h½OmÄ+†ç-ö|½.0÷hø�¢Àm$o“ió•œÆðptËÒ'–â½hF,ûq1b˜»#üR™oŽºê˜T‘<át2ªPòÐMÖc˜<òüaènÒ§‘7) eTàœDÅÑÚ²ž0£Iy‡‚,¢ó ØHôÐ�×€rŠ5‰Wõ\òÔ7ù¢èP�+L·ˆ]t�˜Ò¨¾Ã¸7Éånm‘Xó¦Óœ¯ÞPJ?è_……Êü�íjÊnˆŠ8\h—}ØÿˆÖ4mߪ@šà'¶LÜõ¢cp„ÔŽáâ�{êt2V {ûgÖVZÍmc@ÞÊÏMÉ"Õ÷†ˆYŒ%V·¬S +2äÒ…m-@½^¥]x™" ¡�ÖÉá_‹H¶Üãzñxûf¶sÓ­ ®éÒó‰­!Õ‘ñÔÐ��%r�FÀ†â¿ïPŒ™²¥@q:Ð@3“ Â:w`Ò`ÿÊtÄèNÍN¤64tlTªOÁ�ª�À0e#÷þªk¶nä~µ’¢ Þ @€4V„~ÛÚ}ƒª£¼Ìd÷ŽM$© ' Xaέ>î�öÊÇ€_L‚˜IdŒ(㸡ä? ÓÚ-B¥o‚t.·å:£JÞ]VöV=>�n ™Þ8‘g%±n¢ë.³3ãìŽUgÛXÏ'Ë`?³;.Bâ„Ê/:¯·g4ú¾Ë6�KV‘ðAUý�zê5�›ùÉÍS9‡h�Aj'å<@äL®‘àæ�\©�ùõdfí�íe›0|Û +%OuNÛâ|Ÿ¬£õŸj£�Q÷ûÌLäÊß,’'ðIH Ý%¸Î•�J^Ñ�ìð‹´´ÀáàÆáËø³Áýͱ7·|zXõo‡í奈"—£í3Ù�M<}Èã_^3�Åá³|ìÒèóâÙã–M‰Jƒ) +RÉp:H iƒÖ{Ih½¨5lg*½Ufpj=OÈ}†GY®* ²%ˆ$‹Ý ˜‘Mú¶_1#O»6Î÷Hz˜–…º‰Ý8˜T&ã¤É0Ü’¦Þ¾?Í�‹€¼É•µù,� ]¿y²ä&J* f`f¶ºLªK3Žþù‚ˆÚ­©�ÖੈÀsœÎáMns ;iCNaT�ø¾÷Þ+‹UMý«@b¿c®vgmtJú³ðP™Ú"3Á~·Åx˥踲•×'ÿc}’'°%‘kÑ'kl5–ð:Gï S 1:;HêK\�àµë%¿ˆË�GÈŽb°¯þöúÎ~{ØZšc¬®Ñ¤ïX`¯ +âÚø�Ž8nDæb3�ÖTUŒ�¯=|‘M»lÞOi|P&£û®² +'«°ƒßÆ0�Þ ˆc­ÎîQùÂZ +Ô ÿ“ŽXôÓÛX &Vjo´r: YdrV¶ôÇGZó°õËiÎ ¥b3Íw“ +dà*a„Ø®vTå•˵¹ÍPÂA2t(vçÛÎü‡ ¢1 +â^}­‹`0W&úº�áVcTá›ϰ‘r…m0äiø ëxòŒ“Ä i„ü�^#¤ +åÇš�’¸6«ÜDš”!•p–Œ#>m>AGÇÈõŸ®©Êê´Ø;atã*½ä¾¢°oRŽi�¶X ø�ÔáêƒÀŽ¶â¾žýõûw¥Õ¥¡§öá�Ea¿sœY#@™¾AËLå¶Â!ÆOu�ê*¿,mî×Ä2ê²±JÐú ðÑSs¨ˆì:FЏŠLŒ qç146¤ÁÄB\þâÓö��Ì|”ãàV7`š¬€Z!ŠBvXaÈÿ6zýwŸÓ2‚™ÛúëtWt¡+�"Owšr! ¤PO>   +ŧ쇱X¯žFAsQÈ›} (›\aøé‰ÆÆ×C¦ã”Ê"·ÜPxy’ÄD;:rŠÌÛ-R�bÓ�JÄO%÷‰­±¬Ÿø„“èÁã¾>Eɰ4úÖµ& á +šzâÂ@¸Ñ«ßO¦ÏD–¢Í*¯ DP ²|‚èÉ¡QÚ¿$»HW¨ó§Éƒ°÷s±øßI7zb#Ïa¶%•,,‘�Žv¥jS,Æj[Hv�,DÐç Ug ÑYX7Ò¾ýÜx>‘6MáÉã +o™‡dÙ¿¸%L-†¿Kp‰Á.ãbeç̇(ÅÔÓd5&´áOÝþ ”PeØà� Î_üoÐÁGx…¢€ïì#SÄÁ¡œŒÅÈq´ÍÔ‡ E€.ôŠ»žŸð(Ä5ÄhOÑñt¡“KyŠÌCK½ ªc%””^Af76ÕÜ Ì1†GAøº2�"8^ý3½z^ªÔ>Å‘ÊH½BÅ ¨íªKu3";P¬*x\”{;O”˜’‚Z28+£zžXøg¬¾R¶Â*³b„¹äºŒý·G*@íý- Q” J ©ýx|õà´D+‹ž/<©œ3†JfA•-�õÆ×H;ÒÈK?¨/v\6lôð‚™¥k�'geÔïóŽz „‚Û4€3ÔrTl.ØÃ¦ª…w¤?1X£§pÐcÌk©37½�æªóö‘0“cDz£`�æÈÀFA‹¼ÒDÛ™­óQۢȅ°~Èø Æbà�:ÆèùÅQO ‚sKë[ãÀÒHn›ßò´¸•ÀŽU¹é€�†Ú»-àb0†ŒEu¾|0BiÚ­gÈÀq$@ŒÛM©4f?-šu¯t9¶ ™‘’—•«7RxÐ>¸àIX.ðå0,ôcv¢è3Ý#jMAækÎd¦Â<”xA²” C³�᯴ÔÝ�ëz*Sz ÿÚ|9*ÇÎÂaÖÕGÏãÄ>÷QIè.œÉ¨ÅûÁ·\óÞcÄ¡`¸Tûð ˆWäszŸpŽx&z¼þC“Ć<¹è¶ês¾ÐÖ®ýpÅ‹"8¿?E…»ŽeÑs‰8±À2‘0`ƒobQ)G)]p÷@ˆ*LhÛȈ£9ô Ûxžþ�k­ª8�˜%w)]Ä^Ò3WZµpí*ÝJÕt€>¡éEå@O�çj¾*  Bω@mê-Ü^²¸¼¶ü;�#U±Áä:¤½× c«»}“/0^¿(…61z!øáœoá¼ÜÓëÀÀøTZ€7’aNæSJÏ È¼žãƒcˆ?Ä‚Û8OŽ{úœw)划l¤„€…BÍ?Bxz?é†L}’“;¨Sé¯þ’ûÝ_ñÈbÕñÇ“ x)+Q¤JOt ë)Ȩ~O_ç÷˜Â�ºmZBÂÄ£Ý1æiú³ú¨‹…“ +Ý�9Wõîrv�ÀÔ;œïñaU{ÎQÒïpÐé"ökW¹å É�ÁñÚÜdLRgÞyŒ m'›ÔVCÑñ×õ Á@x'PÉ‘—¢XŒ ˆVtÂzþ… é…ozHÅçjõF„_ðW|jÞ@®ÝñÎÊZƒžçü§e¡{ýL\Fó1bÆÊCpêÇ7ÕrŠÌC¿#DƶÛÈ¿‘À½”ÞÍ ç�— v})«Ö ÂJ”YhcG£#,ƒÛ±ú ª%i||–ô²æ$i“úácÑh¬Ãþ÷nûÛà‡Ÿ!¯�FT$q~;A·2õ`¢-s6”eÜ@aC^ÐôŒab[A+'bnjÓt$æóÊAíTØšhF± @át²ç…g4‹u‰ÞÕ½ /•ºÑÉÃQ Î;ܾâKÏ”µ%Š=±Çaú~ó%\ã¡Â +x Ö¥ :úøÑ÷��œd™qM‡×WËX± ä—�‹“ +K^÷Ç1ØÊt¾ ÏÉ]ÖÎúØ=E†Æ Í‹Sè »¯7ÓÖ �øB'ø‰kß$ªa·\ïºRƒQG¡{DA©šO�‘£h‚€ +Èä賊rØÂ³ÿ\²n.âóòžÆörià*wE¬kWúÍΠaÊ”Â,Lµ �0<ÄÛ¿flÁ²Wä¹Y5ŒþÌCí).‚KU„˜—rôÿÍ~¸Mѳ·T‰9§|7)û�ɼIZ°©øÔ—Õ�® 9ø�é3ÄŠù~·Ð}G60¾ëq”SJŽDœ‡I† ^.‡CÔ}–”š]Žˆµ“ÿÛ-Ç ¢¯·â·¡¤`k�²t“º5.d aGÒiúª^ÚFà±…My*ì?#GGh¤ò”> ‰üyè_àí°)¾–üÌVur*Éktî²ÚÉ2%ãùÄßÛ»K¡d]ã,ÙIÿòÖ? år’;­‡1^�&z £d‚TìÁËû endstream endobj 34 0 obj <>stream +LDq𸉎‚{bD’ÝhÀ§öV6ÛåÄ ‹ßç+†«L­¢ÁT‹)úŸÖ‰ŒÞoï–Ë6yÀMÏÙ®ÿÙ$ùŽÜ %«+ÇXYñv‘gú ò×ÊŠ»×Ó0>¨_ÜÒ'ðüÙFúo�ÞÊzi—S™>S®­in—çù‚†xYpŽ�U¿…¢F¢ 0s{ŸÍ3»ìäÇrJ3òLKáŒXHà{d°†ªÌ!QÐVˆ~"YÃSÓËGv´Î*o h:ÕŽCf…Á3ܾ,צœå ½l2Ô†™¼°�&+ ü*TÇþ×¼ñW%"_T#(yäb<\Õì@¡«q"2àÈ3°šöÉ3°�ÏIûé8±B€�0EpÄúž‹r¹ø5`þf›ÞÃá¤ØdÓº7ò«’HúÍVTˆ ™ck�âB"Æ–‹]- \Õ3ã@—}%úÜa’.rѽ«&V±¶&añ:^ÉÔƒ>õ:\Äœ¸.¸ ôE¬õž>á]cŠ`†a�dˆ%‡ô]2|£ö�³8�ì0H‰}ç Ôçô1Ä»Ùô$ϰìt£‹eH™t»x. I3Sâ¯iKÅ¥s€G±ä)ŠW\ÝýYñ¸‚A N®àj–õoÒ*IÙc÷€R¹¶Õ`ÀM\Á¤l7´`\!órÚ­´ìkÿX±­&ûæ½B‘¶Z+A— ^ψњûj5â²J,}ë×^²ÍFßcåyÙâØÝ¤<»/©R\‚t¬j`ÏÖ”Y‰bËÁŒ²z½–·Éª,Ï3ÄJÓHÚþ h4VHïŸd+T8|�c—U¯ÆÁ:þ[¹`¶1+ÄÄ£ ƒXÑs¸í°ÚŸªž¦ý«–è…ÕG°wv w€È +• Y„7qÆ²Š·(åK±"FD™™Ð6&ªÝ�Ÿ‡ž5$í{Žû^öøˆ4/úU=PÉØ<[LX] õ>0ƒÕ‹–½Z­†«OU7`üª³�Ìr9¸›½½r±¤ F±ñ*ùßÇtî ˜2À�òtÕ³G^áÈ¿óÂÂHµ¿�¸ŽP˜1T±k@pM�ˆª»Hqɰ4À;ÈÒ&h ã¨pÆnÞ†ƒ6oR<ám瀎„W+eq|!ÐG‡A†(Þõ¸!8pGp€ƒU«ß©KÔº¾U™šáv×4]II˜QÈ+vg ì‡F>Y +¯”èò¿WZC^Ê<ŒçOýUQìg:÷ÌýÌxsÁßh¼|ß&úÿ)¦+TãÚ +^Ikæã–¹èÌû«Î4ú¥�;°;̪7ï +Z€Ccš’•t(~;®)¬ÒWÔ†H�!+1/QÀÀÇš¡vŽtsàÏ0î�tí­Õ>Û”\,ºŽ?X 0«ªoù²ù�€‡…u¡¸3Ê8Qn³æ=�˜Ç”Ûh;-’ÔÝb±$Ô¼‹ÿF¸�©ù©_XXO/ª: �­-"©AÛ°¬[Ý>™ØR�¾HZˆ l‚”¼zÛɼÆ6 5?ÿ@?ÂÖP¬hd�>Fè¬ì¹Ö›rúóÁ¼:9Qð”{‹árŸ£_Š`Æä$†1°Ö^`�};+¶“’ù¥z¢_FF"t, ý—!)»Y9s6�B®â +OYЇÄ=a]~ †áŒ@ðNYnâ +3YM^ÖhJ†º“µYr�@® %_—gCB.ºÌŒghl;.δhnJÍA£‡ãÿæP‡ß![4Úâž×+§ 3|˜ù¯¯�¬¸—CÀõoª,©[¿g_òu@ä'×O!;"'–è›u¾ÞjcýΫjGŒ»t¸‰9°4•ÆM$�Ö¦ºÃ™ý]½Ó*:‡�N~s©âÿ’ÐGŒ_»$y$Y„D†©6ìw�ý„ý·€RAÌ5ß1"S3¥1œÕ–�§‚ar…ÈÞZ}[ÎW¸rb‹@dVE”"hO JÁxwùTÇ–æ°;'‘‰Ø.úD‘>lÄ ÑH\a9èÎ,Ìõ޹EYÜ„£ºõ#|\#F„dš0OÁ°6 šýyhèÓÁï%  &j¸œ&e: è`-É%Sz66ï ´ÅQé‡5"–Ë+ +è‰C  jÏ.šJÿ˜~ÈÊzÝ®¦Pl 3‡O[¹mæ”ú‚{]íîÔk ¼@dû®ÔàþŽhZýH›À!ë0€ŒÛÁúô}HéÝ.úæ•îR^A¸™<˜Üæ¤Ov9´ ð0¬œ�H°1'¾F¥¨lnÌÜÒÚÏ:ï²ð(ä^œC OPLÜQ¸:–O­kÛÔ!Õé|-‘QO‘×ÁFÁÄø¬ °êÅ”Äià°™î+aŠÂà@ðTw'öîÞ®R1_pãWpݺ�6}4¥á¨3V~-˜; +>´¥ñ2| ª‰jöçLÓŸX§Cо~ dK<Ò?Û"ñ�úÐǨ"ëÑ �5C)+<f?XkD�Ø’\"�¸Û„JÔwøÍ44¥ 0äœÅ2 +Zd‹.ì@3`B• G302@ToT¹óš¯ È÷ýœû¾ÿ¸~™¾F©µ<'›-�cI=×>sFÉ£MÔ÷û�G ÃÇ2GD>S퉱óK¯=iÙïx‰�^�#ÿõZÀémUí;w³RÑ·a?ðP6Ì|fý!XäÍ<ão"ü?“TTìXÁÌä7•ÒüLð±U¡ZŒðrŽåè¦DBÂdX2CAr1GPzO`x+³áºý®!å˜ÉåW +U< 2‰D1€‡x‡Ö\7Ý" Àp ¿2…ö‡V;‘ÂÖíÛÀ9êÉ zUÔŒ”Ç4TSP‹Š˜„¬‹¡¹"ùzáRvi /> œ‰úÛf ^¯0üù-ÚKeX…Ý0<¬/8Ÿ¨Nj šœM²7jÔß z]úhýçJ83â ÇvŸ¨µZQÀëÙt~,©•°‘àÖº¢ äßësC¶<Ó6#Åjù'ª'úøÙ£ð+.z«Êïó œ§\b[aCÑa/A‰br’5Œcå+`4¢o¸f¯¹þ¼ºm±êÁF’ld}&hqÏ"Ò–h°_¦ò=6ÝEük+Ì¿v“Evp>GWd½ã‹4`¨²ø,2-á>ì |]=8L`šæÑ*TdO¸ÇshSòIÏÇiËYï +ÿaÖhXävN"@*Jˇ)1ãoUÚÂŽ¯l9xªQC9©ûµ²B(¡£àá={‰ Ý%©Àƨ¦“6c°(Ɖ¿Æ„Ñ‹ŸÛÔª¸º´+2²‰,7@�ZB)v»Ð#A¦C°qC‚i Û`m§¨�6¥"€rŽ®y9�ÕìøÁ‘“3ÚÅ‚fMbRdÒ¶Ãf´Z½©ž!lÈaÖ^`Ή µûa ¹•kךÉÖA+µ`°&‡ïÊ5±NK]fçåÅ*tÈsÖÀƒh[ ë H7'`0 ‘I{ÖÜì Ã1öst1ЂªÐª:;PÀþë%àçýüH~èÑ,5`�³W•ÿWˆ\À"¼o‹Æ±¢.T/¸%&«»¦bÜöØü½x»’’çZ�lzçYG/¶Eà’RËR{#¬¥¸ÅZŽø©ï´Cš.ÂìëEa@@?h3EÁÃX#<�¾5§h@ÀÏÏK#éÀ¶°qçx[Ÿî+–‘l}ãA�× ¡�í9±ô¿py軑ÄKÀî\®ˆÂ¨ªåÔÁíÈö>ž£ÔìfnݵW�ÌqêöÔè)Ɖw:’{b‡FLæ-à¿·Š°YìXL‡TJÍš-ZYšÒR)¨¼3°ëˆ^LQËQÄÅ­XEè`R¶ Óe['wЄSz,¶;;SÛ½¹Ñ#OçÃ’ÐpJ' &3Áp¹Æ1O·ý +D|£�¦P2~BƒEù˜ Ôÿ vXs÷¸Xž ‡Èû’(h×ë­�ÕÜ­0MÝšyÇÎmÈ/Ï÷Æ›bÏH7?fˆûî�…I¼±}é[ƒIœ”3XÙªn#ÝUi¸ŒÊ7|Œ¸Ó¼ §©ãmCWÍÐÖbžT i8ûå[0|ËId݈�?eïlÓþqÑ]¼ÒÜ(2Ÿ—Ž-Z$½8aªÍî]ê₱:…‹¥é¼Ûµ[”Éo•30=‹]Ns¾éã —Ø“vÕ¥]µ­rdHµPCº%ËuSÃÂ>†60;8†S[„ ›°Q·8±ÀÖÕÍ3�HáÐMh’¼‚àaºØÝ©¯?™Äùãà˜Õí ÕÙp›3-1Õ%.Ù1„}åhXu”)ð�ü@š¸6µw\Ì‹nÁX×á1�D€L¿ŠÜ@f”á4^ƒÕÁ{ÍÜé·xÊ_pË’˜m¯ûŽD,VÍ ¿ +8zhÓžæK¤$y�ШÆÙÛ{81]Ù¸µÔ«L’ò@ UíW[¸½°=(ê™ä´Çä¨iQrBà'„¼þQ„‘!-[É/|(»Rçƒ#f"JPߨ ÷ %�M$%Â�#,½Á`ƒÀ,ù¬\qBS‰å¶\­*ÁOÔ•ˆŠ µµæë–\{ ÌÒa�¬±T’›W©±pƒüo¯ÆÊtB”¥Ã²œNõ³äa"›ØVDp C$÷ï <~x.Û¬Œ¼U„ +èôfP6ºe\™dîRc�¡œ*KûšìÿO)¬Xñú-À›1­o°a;vÚ4iJÃÐm'šKèH~AÄ%•UUïoîÀN£\é’¹�‰Úcäp źסþ�†kVLCRÓÆ/»×/óî7øÕÕ_Î×ýQ@t+ZËW:Ȇ¹2Kª(y[1ì"§}Ñ´âP¦jZâÞÝMižpªSÀ  èv"'5ƒüGŒ¯¶Fq{Ñ|³i¹PªèÒ�MÏG+²œ¹JBGaµ)Ìÿ8­Ù‚ +> +â¨`›‰‡ëëÿ^���ì±bòiïÌÎspªá?{adØD,Ï÷h~¦¦Ëhv¼GËêvÝÄ ̽�¶Ç;…x`Ì›»t�o“öhõ7 mDˆ ºaªþSÂòªGcIÕ¯oõÔ—‹ÆÀða.Õ{ +Œ¾C¨úó°'šžzn¡âÀ›²�©¿â¾8ñCÊúÅÅÉ…Ä“ï�è¹íyK¨|�zžE�©Ç¡¡Lˆ…�@¥7�‰Q?îç* „¹H.@LJˆ­ÊE²î”å/©÷zª\n> +yN¼ ÉhåîZoÛÓ÷`í),íÑü)!ãÒk?%îé�ËÎáŽ�ħ\“1qúF*Kow9€°úJ†Ý.~úN…:îvz¡(ÊoÉM”-ùÊ¥R >=mœ5(P¯ö«õô 7õc=…˜1©œÈÁO89M_ÆQ¢àæ@EUß°€ÿA\ÅAQ`Rõâ¾êÙÇx‡m¢8Ì&}Iõ½ÁAî;ª÷$«‡8³Ò�*O‡@Û!Á_:³ÞPø+Zpê•ù¹Ëpæ»ÎÙ ï]21">¯¸<`>0*NP‡Ï+K¨ž ˜¹�ýéÉʽ"SO”®ÖÒØæ�šK‰3Ècs¹±yL@t«Q#’gvŸ½ZA­À±%-žì"¶Ô±iO!¹‚Ì»âv‡øžcèRߢÅk�Ã�/ŸÀDÌÒï �ù¦:àžÆdQ–ú“_’3üÝŒ¹Y“<§;ùoú›B�äï Æýäf×?ä[¤t.iñs¦{÷w³¹ƒšQùxÕø|4F¶0;Ív c½[þ¦Òkä ä{gm¿àïc #„•° dL……ÔHͯÇO¿öêH1vƒ…V½ ½lüWH°lÊ0ø í äÏ`ßò1Ë¡œO‘á¤�ŽÅ4�±¤¿?ì˜COÔó¢¢}M~ô 7Èe{íP‹Ú° dœLaÒ·™˜žmoc ýc+OØ'4¼˜sì«òö†du=³‘ôõ‘Mâ»Ôõ9³+ÒÑ뀊¶ßœíDBøàµ¥‰ƒù’à¾Z»“JÜ~Ë»ˆ";IÔÅ›ºÏL/®‹TÅÂ!)_'ÒI¢jKú`X_(Aì�kKï‡ ‹IÜëkËì,È DÐk py)à2ºä¸rE2–n›Aduç+’UÈ(»‘q” Ó5tA£ ;`Ü­3—ðÄ\“?Œ™Æº~\ý?Aû²t‡5(Ž÷7ùMÑU< +g\á0Žÿïëÿ¼¿t°×U�„ýÇã ÿ#èÆTËN Ý�Kû@…åŽÂ mªâ¥ýÛ^ q,&'…ˆ 5ò›èŠTdI¨-Òþ À- +yOû§ž3�xÃèïú5i ZÙ–}2Uƒ7`Ûa‹ŽÃY—D5E³BÁJ�û +·å­eaëþ—k„EÀ,oŨ.kZˆl�Ú:ÜG¼?@Ê6)­�Z~Б1¡Ã3LÇpŒ_QÒeHgxÈýŠê¤^c.úfÔu…ýQšB&+…Q55Ï[Æ{±œl`#°õ2.@JPÍø»¡X«~Ožú”õì\¢�°¯´�3�4E¼ðܧ»Â$+cž¯ÅTä$¤8F±´0ÂWX(]+®}³A05Éüu¢f49 +²)Ï[:æto¼gŒ›ØÖ¤?aÔ�æî@6;²kUPp—RùcöG¡˜N&ÃUqÂ>`=Åíï¨.$‹Ê ‚Ÿ£mÓ,"á·èÅPäŸ:RõrÃâ +ñ[�l’&²F?i˜8 tÛ]DA<3n^×ÁBnxêÀƘ.Ü¥ÈNË0ÕT+GOsB5A#D†)P訛0‰"u1ÝA~Z 6Rf›V„ü`%OÓ¾Ô6ÍŠZpî�²*aÇL�Û1Í/•Ô7YO×µŒÂ¡¯ÍuØ þ×M�,·d'��}Íïkõ¯¹&"Xfê^¾ÿÀ�ñn÷So ЄrAô ­-áEÜ’Km�æ{  +¶ÏÀ»€EìÚ† `¡,©·/¡ëÖR¶ØJ"θ³_àMw”TØÕ„lþÀç ÜXªÛŽ#‘hoÜ,(j $¨¾°.æe�ûlp|;`ÖÅÚ€Å>´=­BvE’ÖaÔ{{æPëŸy¿žhë×ÝŽAäZ„Ñ0¬>-~¾n¹ŽÚö&(RøþŠ+nMjz¬““E +�¯Kò€»§«BŒ�™Ú&ü(γõ3N¹Ø_¸ï†‡~ÿg„¬*•±J°gâψRT?kd“åÄ š| ½�*¸óP L`Ü dŽnð[¯ÛL+seuõ¿Â$å;Eë×Ê#7M:t½jÚcòÖR¤“=¡ 8>!ÃT[] +a¢ dÁW.àr°”}§` ßV´�·È˜ãg{tQÖÒhmU–=–xůä|Å@þ ‚ãrSp?z©ÏêÔ¦ÎÐ+*Å5PNÖ W8�µ0Ž÷ކ‚{„‚LUFùD{ª¸ùq€úßpÖÍMF¼ep·ÐÅÖ% ‘yºâSlÂû‚'@­9}ÐW±f{î^ÞÃhÔΛ�„·©º²• 5ðc^à�¡ƒüã¶ãåjš�\»Îädê –JàPò­×¬Žûò¤¯O´>Ò�®ùíp"[P]KåÛ.ýé‰fV>BG m6ÐÆq«öÁÁ•‘ÔmW�鱂[lˆa�wÐEããdý�h5òP¡<0bJã'‡…é¬PL®TÀ1EU�÷R +õpžYÞìº+Æ>Te:侚»·€{¡áÕžgjŽ@! ?ˆ>'…†Å‰å‚ªO€<~©ѱEÆLõdªšÅêƹWô‘…¦ô¬¹§ÞA£‚b½èÙ£'¸/¼êîê"=¥]Äh<°vr«É=Þ(˜›„�À“�Õ`=�{çMÔØˆ³ƒÝ#N9‘Ûá@Pž2â=Ñã(¨f@9�,ÅÑ\r ™Ò`©šçæ:E¼ç¢É?•ø”�%ž5&BÕ<mÈÙÍ{ÿRZëQM2t˜ Ä‘»NÓìÓOõž�ݺ›Øž©Ê ÿ«Y pÅh¡‰WRŒi‰Vq ÄŸÃÜUM¯û�8ݧèC,ˆ°×þ‘T SñÃi‚Çü1>+$c×)¦˜û¸ºbûõ©f­›Àæ˜Ü{Å!H‹tF.”\BÚa!¡RHÂêOÇfË~BÊ MÑJWº_]Í& �.Ñ ï0V|'d3G˯3–5T¦Ÿcë]™IÑ”§¸€*fb®ë.ÇcT÷ª›f^ÆŸŸnÆË¥d’†åhÙ¼z7¶†*5.‡÷D#®æl$úó€@¤áè ÀQ P¦¿ñ&Œ7¢ZåAû¸ +ª—^´|é{ÙDiÁåŠ�/Ùùìo›ì?71ÓR€d‘$u9:ØRƒgÚj¯¥2çÌh&[êIÙŸ…Í ¡1l U'ÉF-æèÔRçÆ‘K5'ïôRŸÚ�±2‚©Odèe6ÜÉÔ¿4]%ÆTf#ôõ£<2•·¯ SWejM�š© ‡ž'ðZe6Ä£6dÖî.5É£¬QŒ”iI†Rª¯ Î`J5M‹9ê •ŠEü•w“òUj.ˆP©›gX/r¥Ô·_À›¹¢Ô/ˆ‘+ˆ(µ€Æ9ì£ÔËØñµB©}ÌѻŤþ˜Îo[RG'?©O ˜R™ä‘+5%'è�–zÆ:ñÓKíè`*Ž3Vêþ;‚Å•Zu �G¥ +ólà;¥ÞŠÈ áãIeCµ¥f=')�YJ‘½Œ”»$\P-X‹¯§‘ùMv°å4NÄJýÀm< Z¡.z¸i™†´Õ€ /E¼§¨eö§&'ïÓßÕQ�±¿ÍšGÍ+kF㟥X-H± ƒ¶•Q„ñìHå¼ÁuAÄ3Ú¯�íäDÜÕã<¥39mœ‹R:›a9³ÔRV9½—T‡Ê(i ¼>ô.ÁQX•óÙU•:³®‘Ó÷B{Ý)§Zå”oiü ©È‰·Î9§÷3!6v‚!§å´ÎK1*y˜_aè,>H)¥A+ÎIí¶¼œž–°Ð˜×èÑß¡’Úœöï x {¬1t0˜>Pâè[8TtãÄ¡B33„#Û0lÒa‘;"$€S�ŽÐ½)W¸Í³*\Vƒ±5psa­ümj‡<8àDtÑÓ�Ö;e©öÖé!•,Çκ±èø°Ååò–Õ‹\�4²«ˆßÎðq!öЛ¯´Î§ÐÆn’d Ÿ.«Õ-èé«A‡H�ÞBš*×wE#g«¶9´iÙ`–xD‘Jd ¢&«¬�kÅ£ñ´—gŒZæ­£s\pÊEzçcÏÀ}–{ŽÖMÃç« ¸¢!¶é¸È£PÏ«V1¢Ó1R( äœt©)ˇ6fï1tfñ]X1’À?sxy*Brî-«<ËžàmðÍÁ2šy“íƒQËê]—@„Ìÿ R�Z*ÈjCÑ@:|Á‹|Óæ|Iàƒb=›Y¢à—›¥Ù8[ Ñ#цe§ÎÀ0 +î`E˜’äæü¨t8µ ¬GƒŒmn‰¦èAÞÅ1ó|lýæ+R2!bâE ‡7U»oáÎ$ C•jÌ>»ï D ­Ó[¯˜~‘×ê…§ ÙH`ãa+ŸrƒÎ@»Jôg m/h\ñ0d\ÀÄc×Cò|jƒüƒ1sA’vL§0™.;Òá­L`å~j“ŒþÑ3`r8¯,“£—Ë�K™BbÁÑ_«¼:t-TÁ?=91‹÷ÈIPdµ¢)¡}1IÅ‚Å?‘:•2ړdzÜ k rÄjjú²l§Jïý¨ëUõ&NßRO6ª%»Â¦V=5f= 1ú&lGÂÂìz<3Á` °d­×—ÉÀ«0ÉUÂ%¶BTòÐoƒßäøÀ›ÆÁw„—WÐû��4À¾$mDÑ�W�?Êå܆"qv™CHâÕ#­f­�„�:jŒKë1x–ÝVOv«—¦õb¸ÀËÝõˆc‹pG¸M[Ë­I8ö–IˆI¼>žKrPQŒG(QЦwr€Í�(ZÅ(䃩)-Φ(Ùí¬:"‡$IU9,¸z7ÿÆM’yý1XªãýS]ä’ñ„”Eƒ|Ë +äš~âE¯Ì*¤]Hgº·¹ã¼ˆö´'eÌŒ C°ÈZƒV )ÜT+°Åç“’-áqÓ`­zP˾P²;$íúçÁ $ØG!)’‹³j +3êÃ5^G‡�¨ýþp -p¶¥ýÆýoŒ‚ "ŒDmnŽ­«É™Ðïh ÓÂBÛQwê4Ú»`(NœÂÙÖ³…¸OŒuNØ™‹aÏ—ÿeä«B"ÒL;aËÈ=Í<ìÑ`ìAIºÈ~¨ƒJ Z/˜Kþ �š»AÿÆñ|v—ˆ‹iIB;K6f®Så8">�nM˜Y3ÐoƒRj 3‹òb€Ý¯ØÆØä‰—é³â‚öˆÝ/RŽ�ä’ËŸz d4åŠV]U&öh—»ŽÂž$NƒüÃ[O@Ü·)!�=ª€ŽZ‹Îæ‹‘½?[)%®i¾ÊÉ]]w¼v¦‰’’²ñMÇ…Ž¿¨M/8Z¶:"÷î¼…Ú—0ç†Ñ!Šq¬i)D^ÎKX³ôªqï1Æè–‚‚Ÿ2[rŸæ›šà«&ÒX´³I Z1Yb2´›¥^Ff‹¢–[o4{ÇýŽ�â2{›WM+Å™=Ηî4‹d„ìòë‚€¸|c¾$-ªÐ†S,ä54èúÊ#‡_”Ë>á^-ÿâ0È_—[�Ô5kÃê›ffpÑLŽUVgBIkn¤\éŸf’�wâ´ ùSïUÛ8àqÁ2êZ¸‡Á«Ìñiïºêª7%ÍŒ;ñš}"á©”w€Ék„ÄôBî¶©1hº˜Úâ.!  -mÑpÄ\Èçîʪ¼ÀX“ÿ!%VˆPä=çü#`<é>#%ƒÿ\· ĈÒÿ¼í°Jb�=»ZÏ„ oFhŠ˜ãÅN­t,쥪f:òZ ¢¾ÕØ2²49PѸ;›£?¼˜š¸‡¥çß>Ù×…2HPGÈ\òwÊRä¦oöýÜâ r4(�Ÿ·¸ˆNS[t¼ Ó­~ÏĨ7ú#¶4Ý·�öib?’ÜP“ødSÏñk[‹èé~±®"m‘wà¡Ì47Ù�"ÑE¿Ùµ]îÇø’pP?¬2Æ£0y£Óº$#5N!)Ž%b2„ñrå\çø¿ƒ+MѰŸº�žÎ¢Å¬¥JügxîÈË9›,¾ô3»¦yIîl0Móƒˆ&‚¤oꆳ™´–ÿ¡"ùÊIJ6V¦¤ßÇH_mÜÒ>‘ŠÀõ7õŒ[˜Ÿ(9 +$6ÁÿIººâƒº;©ÖÒÓà\‘¾z«…£ß Ö«æÖZ·NzÛæFy!Ø-‘Í�ä=âÚMÎ& ÉQÖi‘W�øs9"+ä´&üÕžµG¡+Èx¸”º°äÅßg„º‘FŒ’3Î{]6d³¦ÆÈmL+¨¯¸#‰d ¨µM¿É= ††`csÒCMA¦/ã‚Öõ�­`e°¡PÀØüØ^1œê¢6øåß_ ãH=Ó+w£Þ@²£Ú4˜Cƒi•£|2BF¦ƒ¥9eZ&ëL òî Yq¢sømÙk 1ø?ë`rèþy’Œ€ÈÛT'§ŽÃ•£‰·dO-3 ýZÒ5ðr:¦?ä°ZÉç£+Ûæ?Ý>¶ñ1�”gÕëRvÀ φã*¹è&|•mKve°`Mî!?L4<DÏJ†�“íò=ýúzctOÕ‚#˜¢XáW2A¬Gu³D`$¸‹÷ÿjhºfJÜ‚ÐÂÊ6^e2dû7Û�´ÐóÔšmL³vhîMÊ+;Î$ºy\ UÂhé< -Äùº’8û�“˜\ôÖœZp€¹1ñÕ¾¾ +Îà6ñN½°VãúèxŒ�I›ËY?9�mq®|3G÷Ñöz³{eßÌ‘w@°8ùèKV%%8ضƒs£xh+‡:Žã( ±Ê½öe¥é²–ûºÚçZ(]Îë$´€É¨t]¸”YÉðH +±³ïîãp f¯X¼ +L…@\z°5µ!j§‰®:âºFô—@5Ï£‰9n�2„2[ôâN ]“^ô/þVå +µ€öÌ*¥§RÍØ{£bSm •†Ðò¼‚X¹&»-Lý1„¤q_¥ÓqÎ_uø• ´ð†š�Z¿{ùg„ò&SÇðm +í¶Î‰ÒŒr!í3„ÐY¼ž…µ{ ÌÏ»s>0ι +Šõ�ÿm³±a!Ø0çgÄ‚ŸÒZN~B“ ZÉÝTØ^‹Kݱû'Ô§ "±4ZäÙDAS¦» œz ÇH•Âe„¹±†¸°šŽI¢«€/]Ó;ñjLo·¼�¹Ù�€…Q.‘P<…ÄtLdì†á{XÙvòÁ&uQà7ä5&e<àÓÿ½]ÔñÃ÷Õ§3’Ø÷ÕŒ‘îdìû$CŒnz¿€Ù}4€«‰ªï­È‹Ä®°^xéÙƒ9p °Ë•‰"‹•éeCuÖ¥y´#)K„q5;?qMú]í…*,í´]/AÄð=<š×ÑÖÏû–ñ噟ß{´ ›8À ® Ašÿ“†tëŽd<Êùβö/È}’@?´1qNWÞrm7нv/j|¾•6‚ sÐÇçúyÖ[¿ßé‚£·»—óÿÞ,_/ˆ‰¥ã§�G&ÉõsS9¼^¾Oð€¶†‡_~"Z”b+ÈÃÝgþ!â4ÄsZ<_Õ‡®0Ó—¯¹NÊü+·ñ 1˜ßsçF PoìP•²†�‚¹� ­Ä«œlì±?¶(!Êõj—òä@wÜœŠ¬kâä\ƹSàÂð5D«ýë½*5Äe�-³Œ�At¢q>ò&�¶û”Pr,­AÍýðÌY°ÛJR£�/e°ó0 Bž´²;¢Q`&µ a�¢[tx=é²çóUÉy…Ñ"]ù_Ê‹Ø 0ƪÞK!v‚ûjH‡n„O)Ù±Š ¥/ýdÁ8ω�Õ 5t²‡×ZÀÔ�ᤦ' Ê#=ÍÊ +òÍ=‚>�Ì�“ÐDd2Ã:â²äz¾NÕPÎ/èbrxµNšÕ_§�F@ÿÑÔr +k; ¬6 ¥O~ˆ­§LØw/(_òJÞ53òM¬�PR—KÎhÓP]Òƒtžìö¸Ä˗Ɔ/[“4°¯öÌÊ'}òc˜ƒy0HîY/Ä W…GÝ,çî/ E|CáTÙ‡sšÄ–០!_�Ò´¹9GêÁ#IÊ3›UJ’2›)F@�6wüÝù û„¿ß×�iÆQ9 :–}Eá„7m°K´Xo‚ÄnÓ²ãÇÕˆkÓõÀ ˜;ùg.=Ù]Z«o²€¥Pÿ…óšŸÞ’cá0 G ;ÙºS…Òèäa·ä&Š@²T+’ÑT¤f%ô$oãg›È Jðtn(–”~ ñw!åŽVááС 2çžo¿MK¿‰_» ZlaÞ0~«ž0W„A †o0‚ŠDy´¥¬´��Ê£yafÄõ  ò�)Ýfq±àÄ¢oãÂ�æ™Oÿ<«"Êô Ñ(­2ñ‰<È’ä_Z°¯£¤Ç”2O£8ˆÆ•Ï7ø<§Àù"c4nÊ¥ä=Ie‚–ím’ãv&´ÍËÛ*êâÿ­ûÁ‰mÉ Á´ôQޱ'­wŸ]äV¥4ðCÔñh¡PLnÁ ¤-ʽ“N”'. Þ»1Øl¼_c½‡•‘ÇšgÂþàCMXy#±�Zˆ-‘Áfëiãvš›÷pµop&ÄÜžÞÅÚ»è=8“ļ/1=“àñÒíßtG”¡SøöoI#¼/Ö4$ES ð�›�•~‡ˆknf€Ii4�n e·¸°Šð'{h�… 2#\Ãnà´¼$¾ ´לöƒ3!åKíë˜�¥*í¢4ô·b8[+"Ê?Šã×c�YÇËÖm»V^Òˆ±M 'l^H¿ÑIbI58y‰s-)0Џ¸·•ùÜfeCÎëZÇ´íÄÄ£“\ñÞmX4õ®;N¦¿�mͧã·ã°t6òÈXŒ¸>àø—WH…Íõ\En¼’y¥®­;Lw©„~åGö•k½»�ý\õ ”ÞVÈ‚"åü¾E«ll½œü?¶âLaQi‚d‘¿"ùŽ3™Éu ¿xoˆ)þYû&:mY=EðS–ÈZa6^¿4­†ç;%U~³"”Ë……ö*аRoÜ6D`Ôò|W$‡°³'*–»‰=„<ß°}²–ºrVfXaØï85‘¸ûT²c%ínÑõn·#;Î&w/¡îsSÔ4ºikɘÉãÁ.œk»Š€pòü9¦ZŒîœË�rSŸz�ßõ«yà€”â]~‹Ð£�J8­)ô~] açDÙh†à}€Ñ´Ï0'àï}éj}ÝDô5Â|Ë�@ùýTG€ˆþX¡Å<{JS€¹Ä˜_ÔÜf1}‰0lE–Ë6Q©ýßf³è± Cà´T鯷jó™C»PFX87Äã/aP(™ Ûgf;)à¡:�zþoDé€)#iP»ÌY×QÝ_]HŒQƒdŸh…Þ2›1wˆ„¦ë”©ì¯4ñAZ +5ØË¨#))9Êø&W6H¤ÂI5±2¢¼.åÿ~QÃë^|ïƒ|^Xï¸å»`X!ý `étÅÕ}¹be�èÛÔsM¼ö�P`�¡Ë”‚Cꇶ"DÈHæè„q%ã[WYDM¡üBÑ*¯! ¿ƒÇ7_¦ *ËÐ}WN¬ºà}J"R² +ë‚kÐö_Utž®æt9y0Ü¡ýû·9yð˜Åeîp˜Õâ=ähÿ]Û¨5¿:ȃD¹ⵟr¦�†v‘ÞÃ\ÂvŠ,XÍZ:#K¾ Ÿ\òµý!&�²;kI¸ª›FÐæ/†~‰HP̺9¾`Õ§Ä6yqS”ƒýF–‹)o©¯4ÉoÛÈÓÛKÈÎ7N¸„÷\4¢2]JÒ»åµw@ƒ}ÄKà{5pÒÆÑ�z*Ásâ†n?Ø„@%£·Úµýûâ«…9”þ UÖÍa£\WDÓD·ãÝ7îtâ™WOé+ Aç-)¼¬¿UúU©‰|÷óò<’1›h«Òç£qG3Ϥĩ¹oßoEî$ HõoµÔoöd1ˆýPAV×\³’7ÇlÂ¬Š c88úR³ãá0UsSzXï•ÿ—„Í çW+öÝ®Éô±vqA2ñôÚC ±³·2ý’þäSŽºzf_««xíæz µ7½ííñ¸ÌÎ ËŠ�šb™"nä Õ^†à}J¨j kta€Í—Úï:7ŒE§â•ÌaÒîÊéÑ£¬�œÒBEøG=Ì¡¥°˜ý‘1€ÛxTX:ÉezŠVXeCøSÀê †›=ÿ2W°\…¥U ¼Øòkºï +‹·¤ Ë�åDéeá×Z^xg¹+è@‰(…Å„éjÞc¥Ìxªry‘Äæ ÄÍÙ'ª|Àm•àaŽr +‹ÅÖ+ §°p¹”,éÿd‘dGºBX^ Fœ½bQÎÿFô©·Üâ Çc­ŠÔ׆ _©µcæK3ø¶ñîzû΋ÑE¯½ªl´m(ƪNºp»ë +‹4ÓÍШMh°·^(…™£O]_a D�p¼÷‚ +ò‚œK9@ž­ÇšâE&Ku×oŸµÕl±x¡.yqçùí’E�A%L6—p/Þež÷¯Fõ»xуJ3pSWXn 9”[:éFñà°¥W&j™ê€”·£ü�2^Å‹Ïø"XŠ’Pñ"öDdY€J(=¬!k=¹¦%á`¤�ȽÈIdƒÊØ‚†IaÁÆÅ§Ì³"'œ8ÆÕUv»](¢÷Š16£rô“±dŒÊÎ}^aá=ò"qGø0Ft,Ôv›ö[ÉšJýèe¢Ô²#2„�5@;ÃG!µŽ£ +Kz‘FñL±«Pì«dH}3oh0h"¬‹fH€[„ ž/T9¿�»ã"CGO»€“Jt2X#5ZI"YP½ù[�f�àö2Þ‘:÷wšti_üÔwzÁãé÷u!ŸÂl�VâýDZ +:A-ç™àS�»âBE]ì¸\ÉqhQ ÿ-iÐ êòw5’Ê=¡ÿB“Á4Æ…wZêèYï(‚á_¬€ERé0‘ë k&�Î~7 1�~Æ`#9ƹ‡µ0ÙŸ˜]ñ 5mLùJ«TMø‚éÅÆ]­È$�#+q¤d™i_Ï÷A}‹# §¡O¼¿ÕGvá:Ì­82­GGó%Æ�<~1ðÎÍq™uê�L¼ð2Ц¸;þ�=–S#&lMÑ5•Ã`ʱ†Æù“F¯üâÚ6J1šl¾¶)DEëpG Á¬­Hr=Ztµ²¢4¶ýa¨3³0áBãeí(S­Ì~+‹ šD¹ +‹H�‡2çfÃeÃ+?›ªæß:Oº0 àò¤Jëë§Dp‰Œ'W{ôBV#þ#ž¾ã> ³ÚÎL^#™É6Ǭ>eü·“„Xˆ68mñÞ¥ +15p§Î4•EpâÔüÁœñaå dO\�4VÞõ‘b(;ójÿ6ÌžG•»€¬¡ZæLøÒn>'JŒ”úT+Š�‡ vn늑ESتXsV7GKƒzh—˜ ‹S®ÓS“~¸ÞöøkIJálTݳ¬ 6Ï¥Û®}Ð+ôPÙk@k¯­—ÃÀÆ-f÷a3`+½Áfô6ÓÚh/6k¡˜³1†"²YÁ8;ä×_ˆ;«¨œ RëTmÒý2X¹qÉx¡.éšÅ+6:½XWVŦuqi¾8ÈácniÆJ¤’ �,â6fcÜê¤Ùl9(Öa:v”Ú'z7H4/nêQ†ÂÚ|[®ï!,¹g·JWÁûÐS4Oyv�©Ý׿è tF%¶uûqum’²á‡_wµ�Te”Õ•;Éÿb8mcÅb ×aXž~©Âw@cýPhPFk× kCÕUyÓæï§þ +ºt¥Û–õ·¡4m$çm¸¤ÚШxöŒÞ]º3˜I{ËmÊ*¥ñ§¾š“’I5kh�o:Ô;ë÷ÀÏâú³¢³Ë+IÒ¦39†#�O“�nö +D¹å 4qZÜ~˜ó6c�qr7·’v@è ]ßf(Õ¿²°¶I㇜v›º3Æ‚Æh/7ôQ­Ä¦¹qµ×"ž߀‡Î +pÿé?[§Óo†àÜYÕˆ Æõm\§Û|/œž<+¸ÍÔd‰]•Óm#—o)A·‘¹úïor¯mÓ˸z§ØFÏ®ìy(¤&¨²�R(Í ÐÒú8ûÆ!½åÌE½ULd A>s±�è6øë'ˆÙæìœ]'Lv^›Ã2ÏJ%‹µ!¤b€LN~z\!ì‰Ý6J忌(sÛ¦o)§~=©5üˆzÃE$Ng´�/84 h€\mûÉz­²ŒÍ\ЄÅÀ$„LÈšR†GD#Üð²R¹ß÷ÛøáþH¬ç +å”;£ÒƒÔfC +Ç0�.ô6×R€ à“Ô¾H¢²ÁÖüIð©óAm¸-‰2³ ÏÊäpi¥'7“ÔâÙ¤­˜€T¸Ä �ôÉAžûÙ>j�» Ý"£’µ¤vdÈ5zG.›$Ö0r@¥Ôðqèß¼ªe°Žê•©ðÙ%§‡÷…gFTN·áIOÓ¡Ô )ä«Y(o”nü !à Ê#*JœW dÐWùË@{U4¼¥„K¶#/m·¢ïpJ07/$ÕŽ ZN ȱ#§‚ä0ò�<ê†48odñŠD¸2 54ë†+³n¦ì/íZ�•Š6ÿ‹d«�Œs•ô*ó¸%+“]�hŽáS§¯ü9�´Ë‡äˆ�Êï•‹¯8’dx‰ TäòÐÌ"iX�ò%&š¼áWž²îѸÍF,;yIš�ù|ÜÛ]t”ÇUWf®C ë=?éùw„øR4çw¦Ìö~C6œ@P%bû§“W‰¾ÿÈ(ê£`£¥çXÄÂ~AÇbà¼ì¯|îcA!úqÖBJ�¸+'ÎÉ{{®|j·2Óy4 +©meÆs�²sÃ!W˜sPbfI~ŠL¤Ù,2| +RPúÏ0Ÿ’4\eì€Ê9ևёCÓq<¡8æ°–ã+VPóð<ÉË‹j6©P%èEb@©Ï±)JA MÀRÛuÔL÷£2,ê"Ð5*;Ñö ),e‚b›{L‹wÈáïÛÝH£& “ÄIŒÞ‡¥%›Âß©0ÇQw5å½è!FaûàüA� äçL¢Žª¦Ä!.Óü´é¾CdóÀ^Y,íñ„Ø”@ ‚·F±ÑeijÑÀ[/%ï¸âúª­á”«3?°ÕŸ¼UÝAE�l)`ÄÅ; = b²Œ2⬮âÄÄÖ“øÂÄÂ!+“}¯ ZuD“3þwEÁÜ­ÒTU~³)¢Íõë +¨¥ ¼šÜ»o>�@H%4Ë/™ õ–~=bÉDŒ•ÜLÒY•OòG6ñ ¿Ê+™\þo>:.Nv˜ Ð`J;¯é•8zP|¼]61ý‰vk<åËI2]2ºÜM’5ÓceÓZQÖ�ã+Ü¿$4›‚©Æƒ~ÌÔà:¤�^Þ�ü°_aċ苂7Š>~ânÖÔqîã‚ò#„ñ¡ö÷[á[@ç¥ᔓ�±ánªh�xŸýØ]LI}%vt|lˇ}@UÔͲ—f¡XVñD>8}IŽN€p7Ý99qpÿ Ï)ÜYŽŒöh'4€‹Y¿v›.Nl˜î<ÿ±`u4j£ç ×½yîex ò†šÍäôD¹•›L:eäðªÀ›7oñ!’p¼¶Ž�NZÖõzF�ÈOìô©Ø=Ü�/ßɹÄËÉ>mÝ�¢óÒ¢B…o:‘=ãÞ�»�>îAŸ¸ËS2b)‡~/÷�D/¾’‡��ÓÐ9ÆIhbð`«]ê‰�!'„•æú�š’`6jYŸ¹¦ô¿mzMn±ÿ‹úåÂßÃä1p®SM]#·UTÓà°àoˆwÀKE• ØeEpý8ùG¦wîpÆ®”®u ð‰_Юb-í¿–,Èû¶váx>Þ7(Á“h m[¥_I°ÿ1O`÷¶oS¤ë}«4+‰N#Dh¥´º”Sq?V‡�ö ³ëÄ ±$<«/ðÚ +¦âÿG÷þ'êè X£»YÑ%$�\ ‘õ–)drÊŒHrŠXO e€y-ô8]x_À åÚ"+Þ¹àSç84“Ô©´í®ÔMó("©³<�j…˜Ö…<@‘ÚÇŸ¸2ÝÇ�÷•]óC¼íÀ*Óä"È�‹CÅ�:"Èlq ÖÖ‹ }ýꨖHÙ8e¸“< +� ‚(+ŽxMéD[P³[N€D0Ø +Ù,“­ýlÙ'‚ü¤'é‘Gcó‹�²Ãµk*q­r™zÅ¡^ë"£@žp=cØc»È�îIŠÕ™-—”H¼³ +Ù·V¬ƒËŒ'À‚Â&ÉÝ )±…ÉäJä Hu�û].þ„bÁâÂ4�Ь‘,¦Ü(\N¼à½í�Š.gÿ��âÇxCP<ª¢$ÀOãD›cÅm"HwŒ쟷VŽ '_dšç!PÌ„à¢àÍ‚z¶ÉŸç‹­b¡²’�…ìÂe]þ±Yè¼ ^ÔÓ�¬õ'�šê_à…Nð8r—çQ[ý¼­.—¯^j#ì„A¸˜]Ü 1ÍFiõ�â±Á~-¢Q¶œQ$V_Ð÷<Ð]RÇ#¹Mõ¸5ÀæLý+²P¤¥z!HG÷4Ÿ¾ÑaWš™ ŒÏ1Ö$“>lJà?¸Ùgºë"×]9ß�l_á@?Ý¡(% ÛAßbdúZk?ß™½þTè¯m�mCÏæ–McK'zu3UÌ^<ôÌôtl~U„è§É }�¡×{lv+ô]P=RVúhÑéwZ`!õú®© €êû^GõØêóI¢TeÊ; ÊÁñh‡”#™0'50-âzk îd¹×£JU!dÀ(uý½B�¯×Ê]i�Èk'ÑlL9xŠM ácN÷·=ÿZÌQ @¬‰=c½'Z5ö‚ƒ¿¨Ô ¦O ¥õ�æe_èsö”\É_ Zzöø±ôVenïѦŠçjÚ\\»ÄÅ»,ÏØ³·|©hm%ûæ¨ Œ”}ݾ„UÅô'ùǾߴ>Ó]€Ë~š5äfßBÙch²Ïfc <öH½~ɲJ‰ý€H«+{å®,A¡ýgUÇ —ý��Qó³7—dFi�ù< +¨= 8h^Š1¿.®+˽k1õÿ¶Ã£þ³=†cù8Lムä�‚ ¼²ßÚóLšòuÍ zoføé·³XÄ)¢¾¿ÎM�6è<óÓ¶µocþ;�%è‚òœæ¶𮀷[††3¨˜¶/’P.ã£óK˜„íƒðÍ �éÄ=(û#ß"�’Ü߀T»'•-’óÙ†à3Õ$<ɾr�+o%Ù:AÁãú%�ºêM)uðŠÉ”Ž|4µ@ûqmkM¾‚iDï@€F|¤Eh°SmÌõ±* š8ÓBÞá§ïÞj¬Ë,£x¸i ¸Ð@ãæ8y¬Ý8ë(h¯+¤ ˜·Ø¹¾Yg¼Š¿#t2ž…|_/ë…HÔ³4Ae�—þ–Ñ ¹ñ �†ݪûpCom@:@Øàk€Tò±ôŽòÿ“ažúpoÅñ?Th“�²{T€D®»¾&ÇÇ%} 0¸�H'(5 �<|T¥á 8øNt5tÁûËÂÅÁ½+l*•á�á¼Úg‹GÎH­gU qÈÆ�–¤« Âfæa«×/ì†ï˜„x©æŒ¼0áHÁ¡¨×QB¹wâ4ýp/Ôâ_c·Š?f¤…“‘Ã�ãƒæƒj—Õ0Î#8b„E7€ÁœH©Áe˜ù!ó ©_Çî(�Ý%loç×ÌAn›�½aCò¥slyöa¿•"Rs"\XòÇíg`ïIÚ 4Ž@¦O]á/sñúl‚@›5Â?îh³© +O‰CQÝ2M6D„¶øµ…æ¿þ´l•úJ!ÈPÖažð¿õ`—Õ°î“Å¡Ùpo3Wüõ€Èóʼvžg :�’Æ.†-Íp¸Ì´Cäy;QaÔdA®HVÿ‘·ÂPÂÓ§›ï‚†)ˆc>Gz*ÈØ/�šo'Ä'‰ÇTô¥ºìŠœ‹Èp^8ˆ¿ã$5#Ÿxô!.\�ú¦„Žž™ž€8›·�›>ÃàÖø­!­;>LW• ¶{93!QTzxe%®¤Q +�eè4©¸=T“Ö%+±uxa\ kU�ÁÜëê%ÆÔÅ€ícèÝ Pƒ¬qsï«^væ'`(¢Cm¥ÝÀgˆ>A¾¹ê”ð"6v*í§Ò¦RSLñ/KH¾XÔ â;ˆ©(¯Ä9U}§™1lºélnþ×bò³GIÂé¨*‡zÀvì·8W(Z×÷ ‡úNß¼�­mö'%šÖ«¹êq�oˆßbÄã�e¶í–3ncjß G±*^ ü;L£Ë§°2Ê+MÔ7—†:NNàCÛR¸7ÉŽÀ�0)«K™éáÒlýäwFº˜ÄßEó4,Ê]êµ¹IwÃŽVUºîïųäÚ *g±²á±P:+‘Y/†)Ì�øªn jÔÌ�ÛCŽÝ½}¸Ú˜R«nE¶NŠ::—pÞ­†’±ÚØ5µWkrnû7~‘ÅÇöà~ðøÎµ&¡mƒ°.wGTbZÕÌ•õœÙ/òö·ObX„)±h|ó(_e=W¬é~ugu[ºÐgË’®îèøO&Iý&( A”È➟ ÖO¨¡lg匂9½ÞN1ö£ÀLøA +ƒÇ7Cˆ�ýPá·&í�ñ=ØÜŸa.å°NÅËCpmÉÞì+­×�hT ÄÐ @^ô °"Á±¬vÂŽ‚Ä<¹­ÒrKN¥ÎS¬KpôÊØdõ‹TX?'™~ðÈpÒ‚å–x#:ƒy—Æ59ꇫsƒ�QF”'¶DËžH|Q"@óÁõÀL’0D©)ó‚þÉ@ŽM7Ð ÈM')$æaÇnÉ.¥Ì‹yÊÈ^`Cˆ � §yø:Aë¨ GF\Ÿ)Ò½|lý‚Ñ{æ±MÜ‘lÙ!>€.₯˜ËNh ËhÔ„l $:Ðí>P×·ÿhI¿ã+Ó(ïñÔÂ~»2’ q×ÉáX˜_ÎÃ@ŽL„@2Öä…ÏAc�ZÓ<ãY¶K1?0r@x&'h¿Áo­Zý¥RàÖ^È݈,~ÙÅ•¸¹$ƒ!É@>—²ô�挌O'AÐù¶—Tã¸2ÄdÐàq«fw�Ó¶þ€¦}TeÕ¶N·šÁû”Ò8Utz«uª©”lÄ ¼Kßb +-¡©� “>mHÇ}‡u±Ñ�@Ø@ØNFTÅ].ˆ#yU¢¸Þý¡ep>Ia/ âÝ…¦ÐfŸL{u‰âC¸#ÄWñÿéÞ|²yçdÂé-x•ç¡St?IXò;;ðíÃ_7WW4 #¬” ^Öb+¬¤‰ Å§›À7åˆñ€øt¶ÕýâK� ÁqÙ~"ɪ­®ƒa¼¥‡M³]r9äÚ$ÕÙ¡À÷ …sÌgãÒ‰çU°ŒP0’ƒss˜M’‹ÕœÔV€[ óßPRQ˜�뜆å!IHt¶••Pp~‚ôÔz2Öšî‹903DºV«xÇr2£>0–´Å>ª'm Ü �"i "‘ˆ%t`Kv¯Á5Úg´·�SUÉY²Šwƒ(ÍFò\ {Ð9?êpWN%žëµJ@Å+ušd6Å-óÕ +Uúº1/ñ?ÂU=1šø9ÅGmÒ¯]özlÝNM×KW3ÝÂø'•ªUis7]¾ X â¹ä‰[ŠÚÜÿ¿žq ¶qŸÉí`Eçˆbñ¿¢3h¿¹?Ÿ¸|`!–Bž“§½cÑALÆ!Ei¯² /£êqNø‚9bîñZ·u®3 ’êüŽú¾q‰+FNQõv�Ú‘›†fÔ pøòý]ö�ßÒ‚½Fã +Þ}}§5–Cõ,ºäŸBRVÅÍêMSU0/þ/0=aËèë@À§- ×°ÌÿjÛ"_"ö&6a uÝ£€�aá¦\èă˜ôÓã1,Š2ÒliªàÔ­ÊE}øEžLL4E±F´Ÿcéê U�á÷Ÿ4��>ÃFàÙZçÞÎY� ¨È|Ðæ�SæbÎövxÄ¥Y(•ø-÷L–Øt"º\{÷FŽ`-sUPVÅ)¶“Oâ8&€åcåG—9¾�Ì^›ð¨º’F\>ŽÏ'ëÖAØÞdeÂÒ{ßÂÙÖÞ¨)K†žþ&rçŽK´žØ£ó'÷$|P\Ñ;� ~R.úß’Y‡pC A(Aè�ê¸ÍE®ÁúïÅ1ƒÆV1$!¢q€Œ�â"$†¡º®ûeqg»DÖ7‚©k¹´qJ‘¾Q@¤—k-XÎ"fû)ÒÅ3éêÖ�ŠÖŒ«�Lås=[t©G26Dm�«½~F`�“§à•ÁðÏÉÜDѬšÜ¾ê|±øŠø&Ð?›.ÀÐöŒ$ìÕ–mpí°æÒúG‰(é‡Q½„)�mÌñ±›S�‡�ç«Ô8˜AÆÈ(_½³)´eoéÔ?ù)íÝDƒÒb·âéŸñœþz.÷¦|Rf@rlXî4<¥Éì“ïŸxr��À[d‘�ûÈÒ¨“*þ€öÍŠÜçöE&Ò–ø¶xaª©¸ÈˆxI�; ÂV¹äSÄoð_ +¬ÇÐ-~’Ñ +³3‚ãX¼4rÉÖð”ÎHSâ’A)ÙetXæibä™!µpéÙxûìñ›;ãØnFžXgûÚF]$EGˆ‰€Ÿ#*:®Â‘i\àáLx‡ë̘KœKF„ †¿Ž ¢‰#Ξ2ïÂ]ÍúuŸ £ŽÓDCÛyØeä0§BZçÉŒ”Z“UçÔÃÙØs1å¨ +¢ëž�)>�g„s܃¬T#º“×ÓHoýð=ÙÂjDÚ¦^anž·8…$käÎodÞ“Ç‚ +÷+¤™Vàoø¶‹A…Í4”B39R™~À�<Å_A‘j;…;òÙèˆûÉ›I††7z`_ÍéF¯`r”r$Z=fÔ¦¥b˜Éõ8cSjS³ 9Fª”\X1ÆÆ÷CÂq˜ÁR¨½ŠÕ.­UT6 Ä×`5«îm9,Åt*Ö5s<,àÞú9 §–ÇžâI˜¾­¹Cld«Ï€½væß†Œ"M¨®Vƒ&¾ 3)"=”ÐfŠj b %Å1·÷±2�Ç2@†‚J‹în»/f•ÃÎÃá6’ þuCÏÝÒê”âY°SÐõ¤=e �ÑègEæ¤ Œ\4lIÚ“ÕPåä:‚ƒŸDW`R~õŒçb�ÆÔ)¼_ˆ6�Ç1<å óÍ~n5…FfÍ�µ=ÏVþoû^gò‹‚HÐóŠîécŒ�ÉC'<¤©¼ûÑ‘‡ÉŽßôˆEr‘BÍ»*yt�—×wç?ÀÜ�Ôó£3�‰UM\¶c‚ZÌ”êWYwÐA°0ÇëÄ i~‘æ@Ýïwá¿SɯÛÅxõ¾93 ù|¸��ŠFÃÜêb +5Sƒ5ý�žÒE +­ \Úf«fL>{g™ÏÜàmÄÜȇ–mÓ Óˆp��þ8_mŸýj +m'ÊYÜûÀ†÷Æ8ü@v±eÌ%p�ë”ïŸc1Ïôáï'2ÎÔ÷VÆ?¾ÃÒ^çfcœ )�tÞϤ(�!IÒEâlÜeTåážÒ°PÕ²ŸÂ†»š Dá§Þm€4�¡ðC%Z²p]n·Ïií-hò)ˆáµÀïŒOîë"au)ËO²UY¾¤ah[€€3î¥V®n¨ÁT�Sdê)`mþÜ´ãÊ}P-` ðÿÿÿÿÿÿÿ“ãA´íÄ­û.ÆIR-̦§HzkεÞÛMsGvüPÇùü眃,É Ïóex{YðÊõ¤ÐbhUú¶¥ôÕ¾,^tCH àoUÕ�Xsˆ$§Ó‰e=H»ã霨¬¥"+Ù9µçôd�#£²"*+CFeÈrHu$*’¦¿S]Xª££Y¯QE†N§:Ù‘!�#ã‘-GFÁQá¨0=ìÇØQagG9*–rT8*Ž +ä‰$Hýߟ–ú÷î{C’¶·ö†þ•º!‰õõ%9׬Ž<¨Ç—t²Ê Iê‡çƒD7z ½fúò®)UZ¶m{£”=ÈÝ—-ÉÄP¡Æ­<‰¬OÊ>ZVK’^h7éªÕe)wÿŒ4•;Ç»;D[Ñä>¬¯�MžóCÖ‹-=§ +²ÔÚ²µ¶½™�$F²V«Ù”äÔ×È^#kþð O£õ4VY ï‹)4çŬFçïˆFHØÐ‚† 6t€@÷Û D<îõ뿳ş‘­¤3feÎ9w kG»ü²`Ù¹¬îÒ\™sfjæuî(=½zöeŒöçò뵿£ºŸÉ;ò44ü±,û&}ï®îjýËÚwÙzWYø}{¶VºÆyÿó>þÊ]yÿ²pÿ¾|/5ûÿݯ(É9çœsGÆÈ昲˜YXV™ff–®]ç�k§5Gó?åÓ°Á;ÇDv‡¾ËVìeÓl~ã|X.?Ê6¶b»Ê6Ÿm»ì²Íf³]vÝf¶Ùf›]._™Î»\¶o»Ñ²]e–m»eÛ.Û¶Ùu¢$ŠR.ÛvÙgì²MÙ”²Øvù”˦èÎUUÏ=Ê<ä‘ùõÆuöª3Gˆ‰"PH @0ÐÀ!��cÁ,°< äñÖ±Þ݃ÎiÙ�MCTäs®Në¦ù°ì!"›;äA%"CÒ‹ÇØ�cÖ9ÆÿIwÑ9ÓÉ ò•OÖÖ´}IšY�ò›J½óô!JOå–bYö§PÕõ •1¦æº2X@~‡Ì(�aDŒºÅ ã8X(FM10ÜX™£w&^@X`PaãC‰  +,0Š! Rà„…""›ÓÂñ1<~ÎáÙ¿ócò8ÀcaG u¦ªs¢Í(Ö³–;d¬ê‡ˆ ¥ìéÝ?Uõšß­¬FÏÕí¿]æmÔyaÂcñöý‡uJ+zÏõŽù?ö9=Çîô:]Èê~>æ�/)óÉŘ2I±Ùϰ,£‹?&¥©±\Åzð>,kJQ®ˆvщO¥hFYLE1«¹M;wf×µi\òd�Ûl43ÿWU¶Û%ۨИ£233�ÿÌoc¼ªª²c§ÌS’rͨåG•i.ÛNN£\¨4ÛÆHh C �< +Ã!�`Ú#Ÿ€o220DVPL� +Er˜ä @µ‚aXÿ(sù|�Ff´›ÕÆ+©f«>+‘ŒÖ»x¯ya=Üôr)^Om½h”õa ö×ñõ­€}Pf=ª˜½!l=»a/!){Ü8à_Y�^•ôÛ³Ü?XTRÀûÅ­Tðè¿óð¿Á%¢^r+=0¼ô8IE?Úµ¢¾FG¿“G¯øD £d„P¥¬¹f$A§´÷»å¸OàC‚¢”Ö@f‰î Å¥ÿd:‘�êG¬ª4kUB_Óë®j‰JÌ™«hSH¢+ƒZ‰½Õ,Nâg¯u Pº¡Ò™ùnnuÃRz}Ê?‚ÖÈ„=郿踈Œôî9$?ÒìÜZOQ,Þ£9Ôà[ˆ´þŸ¨ =@]{‹?5%²äq^ø£WE?å�Å•á(ªO÷ö|'ù)ÔôNJTe° ÷Xè=¸—^æ£�ÑJªÙ,ƒd–iB¹ÊË«R»d¿4d„Oœ£ð6û»Ò‡6F> 'ÄüñÒΙàà4m1Ú"°EAQŸ¿(nÄ»lø +ä„Ϲp“ªwŸ´ê…ž”eÍ \­EIè]­{Ï‚ þ; @ º#4Q®¥X—¥Â\�EU!¯ŸEˆl§¬€µ¶ŠÉܰüüNê¶]û*Ì\ÄQ9¿@QÅû ‚ÝÕ:ûÆþ&`Œ´¿'«J™ïéÖ�ÁùÚ'¤o?oÂÉãÐ~Ÿ*ÿ«G-™ÃF蹟¤ ØdB8@�9Š ¨k5í0Œp�ù%Ö¥Ö«AæƒW©ÏoÄoi{¶öçœş N’ñhè(ª ¦cÖ?r1ùO;Ç«4"V¢oÜËÁÀÆôWßé‡Üɶx�c N +š=\{,瘌¨£K%ö‰¨üÙPxŽa3œÀ‹¤±Ï�‘€Õ)ô×àáÜÙçº!$CŸÔ1Î1EªrØ�·ÊìgþÈcçg½“ìcöøºÃºŒN’ÚþÚ# ë©ÿsÌáP�˜YËuG1Ù'„¡¾îd9Ç “­7ˆ˜b®´, í�¡Ýõã +>ÇL2¸î25ù0!dÝîv.˜}³Þùfš#/*ûåXÊ)„Ó›1kÍ„×Ñ? WjeŒHµÆ8›f[Ë——É£³„{WÎ�U1Ó|ŒYª©$½’�2Tcö4ì Ü@¼›‘tyA7Ćç8Æ«ó2šfõËoÅðŰæ:$¥nŒàR‹—§ŽYȱ;‡T©Il#J¤¹±Æû7Cgàb^CYQ˜¥ (¼èÍb/~ªY^ˆP¨Åì)u +ÐZL\oˆÇø”Å Äí»¹±Ã< á¨4ýÁGcÊÔŠäÈÄîÓÞ$˜búŠÙïN— +³“¯�ÖòÈ0 O�w\Æäå1B¡P:Æœ€º™2Œùõ†'n%Ìrað34μ�L4p&ac"/<`ÌÙj”×e=þ±ò‹ j¶ûbÞÁìy4$âNéÅüfïg.æ©çˆ¤ðÀíøÜbFE¶#7¼¨\LôõÃ.f=ÒCÏÀBŸSä÷b*”¿˜t}2tß¼“5½˜/¾Vî÷R�ì—‹ Æd�”p* ˆÄ$sQ˜«,bSùix±¸„šoQt8O˜x¾٩måÈ£Ó§ ãê�ÆGñ«Y×~7[ R¶ŽÎO#á’u7w°‘FÎBS…{ì°ÉoM® Œ"½ Ý™AôÂn ÈÒ,•æ`Ò[?$ÜhWKwk>¯æOÒª»ÿh®%n>j€ôp(»2n‘¬)f(¦>R‘ïa]~èB ƒ3- Úw’€/·�jž +‹×®qÛüÏ�ÆH+'ajx¨–_ܧB$E¡è¯!8÷!K¾X< gyßdëÈÅïcÆiíƒA4 ãŒ×½ù@Y›»ÿnüL_Æ@%_¹äþ¸9G샖÷NGø%Îãxmj˰3Âú¼uë oÂK5Tí¦„>]›øÖ~ óa:û„º!Ì¥å^üi#Ñd��tqM–5ÅRXÇߺáz8~(Î[*HÖmE6)b5¼J°*¶žDÇBüv¿,ð”K©ãÐùaÎÌ;N2!³‚!á­ÕŸí}y9s†½J)Põ@ØÚ‰×wUö"hdË`™Ì]’„�UØæ*MZ'K—»þt˜�ósêõÕIb“�(„Sóµ‚"G t;|ziÇlßf�•q:�±²4ƒWzUÙRSE— H‰Â!Ãd E( È9$W lÁã] ‹hë/¼NSY¥2Ap'#©wFtí~±¬ÐL~ Ö±/XŒx­¥ �®¹Llú ‹#Hvt�œu¦2‚Y)Ú˜/Iþì0Œ…Ž?!;ÄP8·­…D”x*VfÉÉå" tØ“ &Ÿ2ÜnM¼ñºr÷û™/�zíYo/Î3aA(eMš +o¿¥n”»¥€~Gã}µÃKõ ßw^^‚Z²•�aÅ«tp¬è¨+OòYÍp¨l\Û‡b´Ã=3lt`!F�ÓHrSæ3¡bfþ|ý3/ÖÃêWÀd0¤Ü ˜AÅ� +W=1ú•›ä¹ÖGÙŠÈ&°féŠbI\�s�Ó‹†0'Ó]gìˆ>#ôF¯ç‘@v ,¹IÂżBìÍ—”¢þGöOðOЧ¢¹ yˆyQÜîƒjÍÑsB“’kõ§L¡NŠÝ×ùÀh¦twUìLˆ%ŸäS­óÄMfÚŸøÂÍc© ËŒ3që.ü˜>Ij°×@Ó#¿°ºìE”Jšw{Ji�Vé?¶>_?—Ù9æž/ t>Ph€¸Š''=Ñ膀“Ò *4÷s<ÿ è¯Éþ6ïÒ['î®dµ1•oF6TñØ”Òlh‘ÁCx쾤 +õ&÷çÈ�¶�½ÚTSšb»bØs–Úì®äsžF ´ Š0*UsrÙ“F"¼7°½cý+% ðÏô!ˆR}cïÖéÌöÀê2fPý*@S‚Œ§2XíŸ!ôP×tÑ­ÏKý%üÀ8„J¼a�ê)E´È׸áb}Œšù’S2,è¼ÄÍõòNXZÏ©_Hûí“I´ƒÄ±¨R]Tá ẸÝpðºÇÅàÂMJâ¬bZøê8D:ã ó�FÊ #qí5^V6€×Äû^9ÊdHyÃmÌÉfór}nÈÙ÷!Ôüv€ˆ»ÍûYMp¿t6d-ÆÚžŽûeXÄÏE1ýZ#ôwªøè_ÅwiuÏY¡MZý2˜½žy?¼Cjäá¹v�P¤ž] Dpœv±¤�&x²0dx$—ª ™—jxÒÊ!^ Hj� G�l¡x†1“~ù>©á´¤¥*yÁ ãÀàPôï•â)&0Ô’žšÜ‰±A[8)=´ïsQóó0èÏÁÍ�Ó2ÏìC¿|òoa,ôâïeW“DÐÚmûIòÂîÛí*@²d)_l†pÒbôl×½ñ +RÊY9ìF¿C½pº<¤Ë³/tòº}´q"ÌÕQ÷éû“¢ˆ‘(IÄ8-d£©/›Øš{â?O.êK'Óy…Žr3¼]šÿIùòæk†TV_QïR((”’$Š0mc+`ª°saÚs�Á�À�;e`ñ5Ì@’¸u1µ^ͽx˜QáüZÕ‘Ó=T'ÎU‚I79*p|óHâ?�w¿È¤ËàâïY‘öW}ÖðBIÌžKÇœA§=âŽ6J þã]qésö�g#wùAwj�Ü:òµ�8Ñ/º°„W1…Ñ¢´æ:j,áñ ½@=NÈ©+/ éæUm0® “°¬q\­§u'à‡º‡…÷XA§y³þÓ +ÀŸº ƒ�o’Ÿ +—œÂ6\ÂÑCØqÝ@º”›�€rÝZ£¼\Î@¦GIÑ ï¹@[À†óýlb±\nF†Ø—Ý„ÿøûN”ÊY\�?$ö¦YrP¼ìvWO �ð”FsAŒ!ø¥|K1æE0`ÚÖ¨ ó9úç{×' –æò%w$ή\ìÞÑ�Tzßüt$/7Õøßn ‚Bp(ì¾é ÔXEüçÿZÓwHï $h3t Us)‚î#0ôdQÞûÀ´ÐÝh¹ùøDeœ¯sL§ +?Øúgq2µþV\gôË‚ÙðrkÜŒ>Ì퀠À_»³�PššÙ°Œ’É'³ô�=9��È ÀÔ¥ÐX¦dçà(=¡\TjŠO;4ϵÉ0Kv\?gX$â@7äL‚ˆ¡„‚¢‰™)UP2Âçx;êXôÔ,þ ¦©î ÅZlF(?²‰pð·ç�l´}’Z¢ß ‚Ûõ% ì…@Œ‡.�Þ¢19•_µÍÑÁÀZ»Jä�PO9¯Žw]BˆÚ¸…Ô—³=~F@9ÚÆ³þ¸àéLÔ)ù>n�9?æ…µùåÀã#ê³eTËë…–-6‘‹†EÙüC‘VÓÅú™€§_؆(îæ»C„‹u&ÚÛµü�L¬7üq‰Z7å]Lé‰$�5 +n` =ô¢.­\öŸ%¢D}»§ ’ø‘gq"ËG™zס£:FT,«:R·�€(*d€wHQ¤�›.(@£² r½nË×ìO\V4Ã[CøïQÔÏá×&Õ°–2Ét›¸,ò¸ÙPsEu5—�ɶJ¿>`F°ReVw½P1Ž•`A1Zh�o>’¥Âo¢ön¸¹HÛp>Š8[h™#.Ð|‹¦F!Þú(£€}ð„ 7i®�zækRMâ!kŒº¡|>pÙêòäµb+ {•ôm�…8qŽ�)îß ±•Âű†U…Lß“%GxÇ7Œ¬Sã”"UÐ6È´JûWAñC\J¥5FÖ0µÙã$­P±;ÈIGy`éO|Ãò=*x@Ò§Bà×G™"ã™ÑÛßL”5 Î +õ=“b $jfû�E-c¡´+ˆÜ¾&ƒ*�Ä[#;D bµtÙè‚Æ`r‘ê�ìá(IçÜIJíàm¢‘> c, +&à³åô<¯¥~†þÿ} #þÚh}Yøÿ…9vdyAò$J&©¦#ÐS>öA 5ê7 wOö’À…¶¤ +“�¢{¢¥FLjlÍäs™Ž–-œ^GŒ6Õ wÛ¾ª£©-ÑÜŠfnJâ'f�œòánåžJü”a…> ‰O �Vý¨SÀ±åd� Þ¬=Ã:]A~BCܱxøc•Y€ŽñÞ¸ vËN1*°Gù÷À<5G‘ ÿlª‰#`Ša€ +´¢žpûÖÛ� +ë5Ý4ˆÅ[¯LàAæ“ÇWò“eõÔçA6vb7ê˜Fûa¬®�ë–Y)!ùÅâU‚ ¼ÿá­uÌ^L«3бKf�²l,v3”C Ô YønÔPxfM{ˆÛ�¸:—7�™Z´LÍ®§ý2¥�º�k{Ü~©pg±ÆUMÔ *ª“ÀK�Å5±â‘ÿÐ^1Ó©_®†m+¼ÉúN�+cÐ+­"Âûï#ÂCÚ •¢H!ê3‰�H]à·œÖ =¨SýWøU ‚EÀýÈ @Çjêm2 ¾oøà­’"®1ünGÒò±YØÒîp�W~Y6«x0Ä^Å;çIO/˜EÞ× ¸eqùÆ+áiƸÅLH¥A‰ŒÍ6£ÝYRLØ¡þkDìvIÕ$ +íýh‰Í¤”¶-eVª¦§Íωü+ßÐ0Ë› Ì0´Û>Š&Qð0½vyÐ3×þ¡‚m”•n¾lËéŸ4Ão¼Ñ à±³‘a7h©‡[Ý78‰ÂÇOÎP˜gô»æ„lš1Rág~ÃÓ'"Å @;Œ~Ll „r»›¡Ÿú,£-o@ Ç8 * t¯'ÆY¨`@ÅŠØ!K2€ÓŸsÐJA¦æJ…LßqNa‘¦ )p¦‚iÖà +È›¢±á⬲%‡áœÃ Í–¸�rm6î2'Ťa5 j«d`´Ô !æEÆFü6xý©ÚæÓÔúŠŽéÍ7ªèy>x=»Ô€ inIµ#á@U•§$DB}„¾ÕíHÍnÚ'1 JHÀͦ¤.G½ $áä­’G%…¨$Ä;àlTM~-±Íoï…™ùýN[Ô~gËýÀk߯˜f•è�,qõAA¯¤¬×ï’�ø1G{¿»–g5ðW)ò,æöóÁÛ � Ù^ñU_i¨âyMN¦³0:Xí&ë©Í„Î'q™ë䩼ƒZ¤þü‰^h%¤Œâ&‰¡+ÔAv¹°¨V3Hç:ª4Aá}<iü­PIË•’rñ˜¤'¯™üõ+ÉÈ\u¤ŽM'¹�|˜ô_OøH–½†ÛqÜe�Z-*û«¿"¤¼^˜‘,”Ö4iijäyÁñ~Ÿ�Z[<Ã@ª½< +ÿ*"Y�eëMDÌ,WZ·B»‚‰!H®BË÷~Ø‹²’ò@ç�,�W -Õó±½\NŠ—@©¤v¯A¤”Å@–ý•>z Qªë?¦ñ¦-)ñdÁEö•8²¤,x‡üX¢£,á½[ÒîK( Qg o²èê$´C2Yt#n”å£á)Ž�â/±œ(q`�“X¢n²¥·º�Än*¾Ã¢Á¸k¹ÝwX$…źYâ°||&í&h‹ˆ2p«-и×_1Ÿ$ܤ½“#ö} P_~ Ö°W˜n¸¼èàüd0Ž`)n %àQñ0TÐŒ‰üp'A°ˆö¨cKfÆ%õ‡`É™9©,Ðvoß…{`ÁÙm`¤6¹éIX‡É)°TKD©ðX^9*>²!XMŒ©3ÝýW²ª9Gç�ÿ•\bıâø¡bèÿ_É�Ëì{sÿW’ñT½èdâdO?ú_`ê¶ÂýJõ†�xX¿¢½æËþ_ü{<V~!¢|e¹JK?ô÷ŠH&“|Ï0M…*¢–¢³ÄÆF•tªWžZês”º½ÚârÐ{å ãIù×+¶Š PÖ+(YZ=ëIª^B€ž5›r¥¾ÔA€¹+ÄÌþÿ”g¬ õß–Dû®è¸%ójW‚`˜fˆùeÿ¤±nëÉ(¼ÒêÉ„¯$üÍn +gx%µ¾ _W^úNeì1—™+ÄŒ&Mz¼²ó‘ÉÌÊŸTB�´ Ý•PÚ®»)¡îJA\‚¾Žaw¥°\j¸+ñ‚LÇ5o¾íÊg7Þe€v%Ì�Èdê@E�à$]Ê*Zç +ŠmámøÑ\ù_Ê:g~x6Fƒ7A(W’_ÁùÕo”+J|ƒ W"Œ_á +"êi š}+¼x–ÈX¼•¥¾?À¦3þÙ€«Â[Ùý ÆÀ¾R" Ù¢’Û�+WT¶[àJՇŽ4Îbfq_º3 •qÝʰN&Føº•¾û1ƒÙ +äVÌÌ©á}u¥»ÐÑ#°L¸¤0nå‚ee„q+¹��Töð¯­Hù¢~i+ÚbT]m¥àÇ‘b¶2Š‚•‹¥rWWóúÄÉì$8¸C'ûçm…W*Ÿn(þŒÛʺ³ËÌçŽ2ÜVÐk •.×Q[ þRü“ûÀ­ˆ>U n…‘´pT‚[‰@ºe5o+;J µÛÊ�ªÁÊxì¯!x[9oMuƒèç4ò…: +QˆÛÊQI�1N]h@™£7[Áèg“²•æ4ÅÜ– lEÖ“b{­Ä;PH ll­ü,öœþIRh¬¾�µb´´‹ÀÈ'µr¼V'\R+Xz´}0EjÅ Àn2`kêc¬­XB*»Fd²VÒ÷6§Ý÷ù øs%’V+x÷¢ZáF8ìçCµòU‚Š˜î¯ZIÍTÍ“¸«VøâH¡ÿR+Ôë}1®ÃËêÓÊÛ ×b T’�HG+l8Ä7çó‚§÷©eß=`€.eÿÇÀ�j91}?§ +vvœÌÎVŸÂºBŠ•¥K.èžO‘¶†Ÿ%FbE­ž:AÈê³´TXñÙHc“ +ì²S^®°¢}½“g î‘Í3¯°ò|vXñÔÄ +Ó²Š�‹6éG2ˆü?‹w=Pö`E`wÊÙe[¢n« V�O�’±¦¬Ä1öèoQÝ @ BL&7°’µ™×ýðËW+#IÍ*ê®G5GÀJžda¤k¹”#ºÞ æVƒ„DÔb¯_ÅSǕ٫$e ®u”¶¹0OE¨WA`ðøqžWY2¸ï*RyleI[Wññ}ƒi®Çl#®’ÕδysÅ>±¥!®²_™Bé½U"4jžò¶ŠÇè +‘,¾­R›MPĹrHÑ· uÚ + ²$qtâ™D/ò~\Å“tÞg„¼¸JÝudKt:\§­1½ W�œrµj¾U6L +sؾUüpèVA…|[ei‹ñF,†²Uªª\m§ÿ\«L”óB晡×*ûcjwg8£to‡ m>¡\u»YÅ¿Y Óºà,M^³ +7åîÏ)�·m=�_°k«há·ÙΜwò�U˜µ¥úU™ªeËQ^•ÓÃHÞêª\ArUž"¶�U‘.[Uy.êT9Œª¼ç«GTeeŒTED„ªò¬¡�öTÙv¤n‰äYÌgµ MRåo#ê;ªpH,jd·Qe+@�Š*Ç£ž,‰¨r;TùÂ×PE¶4OåI\Må§òß«Ze7•Õi9mù;•×»,ªsCbS9�‰Ô¯$V¿|j]DÓ LåÜ-�K%u‘ j>\™u䘖ʧGÅRA‚˜YÙAù% 7ÊÍߪV*†JTu*¬T\‹R© Í‰¯ 2¾×ô§={7.àŠa„Ÿv?‰£ò«ÅLTÄ;¶ÚÔã¦õ¨,ü»J�yTàûÀ¦:HE’VÔcÃzÝJ\¡–±ÙQÑ-iÙš·Kæ°QY¼?=]Ï+1ø•€Ï  hNDoj_‹½YUÿŒÊ3rQáRyGH"^Yr+*$‹ÉDe#4Û:÷u­mtQÒhÚ¾ÉÈçˆ +åQ=iß%#ø'a2BÄ +mƒI�B¥i¨<í®©jA} l¢ýP9ýñÝìü‹z¨ì68T„s 4Ñ�.·f×YÐ×A¨*ëj½Ý‘ë^åЫ\�ô¾dÜ´¥—ˆ¢«�ô4ïE´¡ò p4!Tk¡@�§ì‘ÕÃ…™ü=‘‘"„ÆöŒ¤½*B¼Ñ؆nf¯ˆŠÞŠ´pÙî2”f!BUµÐbÓâ2l¶ÇÐÁI¸ÝëR�…Dý¦) < +M²�sÕ‡;E§HL;ùUËIÔ�šH˜üX9k•§œyå`¤�b&œîr™Òc>Ø_/zƒQû5c� ˜¢"Ê!¤ñuíÁ1¶ÍzªñýVƒšD$`•mëD�ÃCVc�‹a0ª!׆ç±²Ør,XËét«ò�ÁÏÎTÿŽþáÁrÿƒò¹%ì>ƒ§ ]ý‡¨–föã­(d˜/ ÅzêCŠû惕 ÿÂÙ¢7b«Ú )úÒdlãŽ/ jv÷&ÎÜBz0K×Ì6RçÙ/’1kfvgûlÂú‹\q6†6ò׃nÍŽŒ2"á¶¥ì£y‚—W<&ªuˆ .ý&€¡¡ƒË!LÐÒ¡Rxí’I9œmdG�ž§Jœí� èÀXº›}nd•.\ΙtIE¦t=Ýmº’sßÿYTÝþ¥k¢‡Ç+i!mí5Ï18Ò¥EÌ™©eîÌÏk"�ØðeÆþ"ÛæqÛâX³IUX÷¸_Ã?øð·DÓeÉ"$3"Z•ŒL¤Ugô)ªð2ÉØ$�MhrNʼ“ºÑ”púDõÜêDÑ¥I%fz· +ìãý!)“ÃôªC¢î(ªeÃ…™4\C�®©ñ|º­ô"BÈÌì¯eÌltqi±ã‰ßæ#5ñh½ˆñ`Z/I(ø¦p’€ËÕ¨�qÓ›–¹“R˜æU»Øê}« + ›do"Ó˜ÁJ[xÎIix5m1Èä… <±;$ ÷hc™Ç"᜛‘%xâ/V*–{ÍPº�Lbâ›%Áòã=·5ÙÉÃÛHÒÕoƒ‡¾Ý[(yŠVK,t9ž>x� ÄçP‹ +Tµ@”™ Ë ^c@E±¶n¥mò’ä§[ƒ T`Ý\f™�$zY¹8êÝî‹Æ¹FÓª¬ +¥"öHŸn°Fõá„Z‘¨y6PåÐú•ú¡¥amG,?¤ÖÑ�¾„u‘¦å@å�[-$ì’±¢€RóÒ!3¼kg býðÛÙœÈTêúÿëI´MðEúrL¢Ôk!NTóFœBŽì…(V.ÍÍÞÙa†=Ðñ3¨:ðS•oÊ÷`D>>1XÙÝ‘A~!ji…Ls0€Î»¯aÁKõÁ«&‡D8D6Qé^$Z-�"{—²Þ=Ó³êb`xP0sÍNÒ€ø·†`î–³#€óó®YÇME$ôËx�ùâé·d½èF§˜°Ý|¬S¿O¤Tò4(  ExV|Àœ•éL%½ø��/‚0ˆF$uìNáf÷GÖÈ �³¶ÚœÅ4Ã-éððÏ=/Ày‹Í€ìØ {bA.ÏÛЙÿC©WJ*;Tƒ$í¥´–?´ Fƒt„S–‚NT w=µšÄ�èÉ¥³És„ªÅpˆÍVýÞÅÃlpO¨%waw¿€Ù2~.\ ‹$NÒJ!Ú@,¤*Ð�¢ùC‚ï^0 +<2ê ´IB¼HÖóŽôÏžð=3¤øða`~|™ ú×£Õ2à†>>ÁÐgO•@a‡‰|ÂÖÈAP¯„Vi›yK“þ¿c°ÁÜñoòá|rvŽÏ¼X]jqÀµW Ah`¾Ýº) AxûÜÑïÇƇU%ƒø÷;*±6„øT³@°RŽhØ¡¨^ËŽ`¢5æµ +œ'²@ü eãõBI;z­X1tBµµ¬c§‰#�•ÝΫæ�gߘ®—m îø¯·(ʮܼjpß +ŹßV×- Tp¶ä$]ß¡žØQ.Onè 5$uõ�`UyUJ/AÂIb€Ý±†+– +—¸yN‘/@! ÂiD¨ÐeÖª7g.�æsù4Û¯ÃV.êxEl‡ßç»ò¥½ ÔâùUaqºÔíXB „yñLA‚£¦H¬è‹m`:U+b ŠèChßeÈgejd| ª`,l€2˜Òi7ÐCZ|M1—4WúMhWþ¯c ›!Y3E0vëó e„Í”à÷€ îQž>Á�òO-(¯þ<‰…«AßdOë‚n`£xƒ·ã\2ó ÕΨ§ÓÃòâάDV•.e𤎅[j‹�”b`èhr¢¶øL)�W£½; Ú/þFÕÙ:¿U–A&J³pl(zNÊ/Üýæ€2½W;,Ë‚gkœ ëÆŸýæ"žD(% ,±¢¯pJ7?ö¥/$$›Úê�u¢$F�zg( ‘’£é4¹ì˜ª�.5Í<,Ò07’�Ã¥ŠµÒ?îïÊ¡™&âAë€@~Ýôرåwu˜)$½L·ÁŽ;yÑvD¨-þUç4y¬9kè™dÁ<> ÀX SJz°c¨?ŠØ¾%=”• ò$¼ä/†Ãσ„(‘�PÖò •µM¬· wÁ¸ÇQÁJ7ðQèB ™õöΠa·j¢ã`¬ý¦0)QWÓ¹ô¥@Èl±Ívâ„…Ç×y!GÖ9­j«`ʃ‰ÑBÑ_ésÄñŸÑH^o�”ñËÁLqÒKÛ¦Ƭ ÁR!ßü$J‹@ÆkÚ¿ƒ³ªÈØ^ÿIiÖâI]¸ähÒ§›,ÿÀ< 0)Þ^œê^©éØ-Nu�º(¹e3üÓ§`2~œyºµH®=Nq¯X2:îyñá ÖÍ‚}ÇM‚P„Ÿ¨/˜; wf^%﻽Deài¤HÕáòf~ܦƒÜBUM÷ô !¨¼ÜØUQ??˜ŒËÅv«7ÂýÄü;šaO€©‚ð‰^2[¨Ê–À•Áïç��’“6Þ> øpÁiõf^‚BüYí’’uÝirìŽaUZPtVÙˆŠGà6�È û““�yž9_ª5º2úÙRL6gÁ^œÊUe<Æÿ‚Å4crY©¬Xל(<˜ “q�j8ä5m$Ô�Ib—°KØ©Gˆ|_ùo„Ô]S‹)…ÁîLø¥aÊyÈDÍ:[n¬P8„<¡â[6@§þßÞ$ŸËYå†ÕÚW™WtG-¢¥EtÊ÷ô¢z,l©5½V¬OûË-£Ý!›£U‹ kR¢¤(©È£˜SDqÂæ9ÅJY¼†”Tx·ý[þ ៸Årÿ3l'„†¢¾«ZÝï ézŠZ-f!M©*9Œ’[’°ÀôÖĽÁÖàL µ ³ÄS(¨÷êM®¶$;qiŽ‚ëŒ ¾M˜,Çê-Ç|@ ­· ’¨?~0‡Ê%^»ºùm‹UNú#BGÑVJ0ü·qœ®Kú<&-0ÿ"UWØÊ¡m9“½è3$&û4O„ÄPÂÓ?e>8Rj§iT½ÛŸÌ ±]ÓªN›‰å·6áÀxò§Š~)l‹ÖÐ¦Ç ¹�H¥– ¥Ú„•4éÏÆ÷3¹üU±i¹„$^›A÷|nøÀ�ú·m6>¼$†)Š„£¼Ï£ƼZ»9íM,l8 j Y +(MéVe]Û”µÇ9�’Œ]9öd-²-‰Ç ö-ë5Šü}(™5p@{[&Khü”i>Aáã^ÆÆ3•Œ¤±gPFB¶sçÃ0®EXQ̇ÇH³ã8ÌçŒ+Ó<%êWÂlS²‹àÐE‰Õ\P×J]ç>¹hâ{lƒ»SÉf‘�®Õ(YáÉâ®Ôó‚ÂøKÐØíì}ÖZ�vqO߉WRñÇX{{Ñki^Siþ^HšÙ­p$¼Œ–|”GE±�ƒ»®ÀoÏ̾ ÷ܶ…§ /(öC£i`PŠM÷.EÕ©�j=0~D€BÄ·ó„—…xJD‰J'9ødÖ)ò2Š[l~¾Q¶ f:2ôþNšx'1cùaÇ*�²Ô#60V½º;;[ Жr%}AH±U{¶â±®÷…Ûl±w:wyå;Ÿ‘u)^²²zÍìâNn ÕÇ´µ¡9mÓí~—ÖéES—”õr ÀF$ä†&Ÿ/Äôj,n`t¬"‹}æ6Åâ$‘+&þëÚëP^¥¢À‘1ç>aƒgV_ÓâêIt}ßþ3Ma©ãaD0Ñòµ»�o’?d#\½œ×`+ÎgŽTÝÐé8´;é>iƒˆu:j»5!ŠÙb�`ÖSÔ| ì›;0cdœ³^:‰µ iOd@€ÑÚë»Fþéñ  éû`Õ[Ü�±hÖýs€¤ÂZ„]¬ûÃf;’ Í++û¸0•X�´\ìr¤O¹a‡“ÕIÓÁL�*¾'ÁGÀõyŽ“G"¯Œ¡¾É}ç%Ç–�+Æ1c¬� +§Ö�®*û¾[H`+`­%–â]ÓÔ˜°v…Hàü�KŠ:(zÂð;Œ�20"ã„Ïö-üycór  Q ’ß›?$TØýÌ×Ïàiå¾"Rxdþ ˆ c¡{ßµtòŠúÆÌ—P+Â#Uã Ujl :.ñöDÅÃÚNÞÕâ°œ0I79ø¦Èâ/êmäÌH˜úO"|ÂŽ¶Ø:îPÄO%t jÒ`ô­…r¸( î×Û¨cfJøÏ)±ný h7ˆŒ�‚v[<ÈozPîÞõîjbÜ�üz‘\$V…óìð�ÙŽä÷ßlØ6¯Ø[ÈúÞ*ýy”DóTŽØPÊwv‘¤X~s´ØF§ŸàZá™È¦ÃYÁs½÷¢ÒÔ·��3Bs,´œ¬ #hƒkZÈâr0Ue—;cåâ†ôP=ŽÃ9cw�Àù“Q +ÄÂ4\†D2›85ÔóKÞ¾Œ€¬ Ž´=óJ�ˆlN�€eàspXš{ˆµB_øéû“=Ð +n.:”xã1?é7A‡:õ_.l˜ÌvPúÜI@7ü¢*w1L ¶“3†ÔOd.èE×ô�¬ºðÞ_üø><ÛpšÿŠÈkÇW™¢ÌˆÙsàÖË^³ü"ö¶¼O}–ç>4q¬iH¿—<¤®‘í¦{Jn¢HÏ[*IÂõ?I¸ôÞ@`yÃöf7ÒÑ’-"§±Jš…+’S[[QíO× r@ÅER=ºTêJÃ~6M…¤af°¿åàÈ.ŸPæuòEAÛw%φª�ÉX4øY«' +WqÿÍíNp�œÕÀ p¸Ÿe[!xõ¾ÇŒ9ryHN*6›BŸGí†5Þà.!(EÅþ´ô±×€àòäD@oãòÝüG‘ÜðiŒß&•há0.×ðt|]�ÞL.Ò9Ì,þIà™ÕËoóÒqY·ÝµÿYLCÔí3슃ˆ[yìtá–ú€R«É€¹Fl{Ãíe„�%R]!ÍñúLq-Ô’a˜ó«‹2áùŽõ÷Ô!‹{SsšíM‰Ø!áEþ+6sum -ÑîyEÔÛuY enûMVDé¶ûЦî*­ß ²r8Uuó˜…¾‹}êÍp|© 4'´”f¾I@W¢¥®lÏl‚dbH¢â—Ëãv�6�ô©;ÑË"nmE Ô\A¸ñ ~È/7ä�ö™6Š�g'"L¥¢š§ÊH6Ï?÷µ9†1xj—ohýîŒ4eñß]Œ` 1ãì�c•d% ÎOÔyqUÖï ÂÊ/Y«7·ÛZ#“Ö¦ +û¹­mæf¿3ª÷ª}Yb~žD×u¬—ç¥×=>�“À— +àø¬ô­ÑäÆ ð£Ghhj �6ô¬ǘö�,ð®€×&¾y1â"œ],)ƒDõwÔ2;ï�V[Q’;~a@JîeØX΄räËô \;Ç@N/,»‘I°¿’à [ú�“¸æ2M‹ŒƒlW«`°F.ñ®â»V™KÛ»P… �Љ·¾Ûû<5¡…æ'Ié±Z®G¹gmf#Øb8Ò„YvÓ#›\cî¡ü¤ÞPI %ûwƒì†Î•�^eW4Ÿ NJø õìº@M #‰…ó¿òü%ƒœ¯ EÐkŸ�»ñBô@Ú{ S!ëƒy|Ä +ÒÈ6ት|„À˜ýiÊM“n¤SZ.þ �míÇ]_xŸS„¿«rO �›l�Ù?u +ÄKi6ä�)»wËì<Ÿ¿+…g;./QèlpšÇ&BzГz(p VAßVØ>f~n ²Ðaró™X•2Þ%ˆ‡esÃa•ä6B„´4îJ\‰_@�^¬^’¦_B0ߌU$˜<Û¾&ePÂEMX=÷¸^¸—OsJÆÞÉáá7Rrõô ²¢—Ù€2^"û剼‹³£ýÖÚòà R�Âô´:|}ì�@2iz-®ÃG4�Z„BlÜ(êŸ/ô šÀ‹Ð�êE +ÓUhõ{Ðá¿Ú©îÙ)$#$9‚ ‡èìJ6þ³Ž V†?H¥!ºÍ¢Ü¢vVbkŠ9+‚ljðXw•hËÂç»/UúÕŒTçó6#+º]¥76!ÚÿÎÖëè]…‡®Æ¯A¿E/›ƒ‡ZUe¥²�¸1Ús¬·Ègõ_+º)3ÖÂl»ƒ©ÿ]å¶$Â1_©ã4®¹ïi¸ˆ¿d݃k'$�öúŸÿ½˜ã6ÊVêºPÖé�kÞÏŠgÓn%: �4OÚÔ–.ëíÑmld;² ‹hÄvì+D:«×BèIº\¬²+Aâ*ùäÎ +:l§ }&EY«X6Ê…n»�PèTX™µ(í>ÇØ>~ì3 �òóZHŠ¥ñÐù³b·­Öù·ä¢añ!³€…ï$±È ¥§d¥ +U¢¨ÛcÀQ#O“w´ÇM„—»|Kc¡­l¿¦Í±µO£'ä�\‰@ʇa«>?TX÷»RGxÊÿ“­ ó½ß´>r˜gâ±�¦%Ï ‘¬b"²�A�®s‹!¥2P˜Ô¶†­ü´ýZ­€W˜]Ë´À;±2‚Ñ#'¸³c4]26/ +mª<_Ød]Jâñf4pʯÇ1(&˜’¼÷¨”—¤»{‰ yÀ¾Ÿn ÷IjU¡Q&nYo›DMݼ|Þ�„P²ðs\n"Ò_ÕW½†Ü’¬ˆí~Ç÷$-Å2úJ³î$¨Ô<Šú�˜™¾q•ÉüÌhH<WlŠÈÜ-Ç‚„ð >ý(àÁ À³KÇýÿ©Qëc²6¾j˜bw µ#wZdór1¿�ÝU±ˆ‹Edsóò¤-“y³sÃXŸì}yLSW²yÀ^Iu±šêÜ@QÖ�ªV‡61¤ ­3 Ë^M91¼‘o«`‹zNkê/Ý9!¼g«Ü0kš‹S²Y +Ñmâ¸Ëã§;†ª ùÃ|go4�uÌþ+¢ék„âå5¢ƒîV&öŽ\ÄþZ~)sStÀçèž9{Q9ððØ•×:î)ÀHýèñ~ 8s€ù |j/€A>ժƮye5GÀÕ� +·ZuK±€]¯{qO�ÌqÇã$Xy=òWÄÜ?1-ÿØY»Y2eK\ýFa£ ¦°™U—D±*Ä4xÊÆTú`¼k&‰«/{šCåçáÐáˆÄŸ,Í£Cüõ`G•> ,{0Xg‚m´�qŠ0-€ aÆÏˆ!IÈ›ñâ´Èʼ[üT–¾ÿ�.4îL7@ (462v¨‡šÜìN)¸Ë<Ô°F¼”/´X�â’J+¦, `Ü:3o÷;š×î%ÕæÀå÷(ä 푊 #w±ÕÕrVÜg�™ÚÂ.¹hPf¿°ñuÇpkuâÎm,ÙQzNVND°b.òµO5™~)Í LíˆñÖ�0N~™5­k·d “wÛ-Y?3gà7ôÚ¹�ƒhhL.Nù bÖvoŒW:n¬†;Ã(¦uü™WáÒëÌâ#÷5°Æç´[Q–+b; '@ù‚c™{ì¤Í”‡¬´¼ð šž©#4篃– +c�`�«„^´+ºµ]ކœýo8ÜŠ0î)þm�W½ –÷l]+ŽdKVboç5â»W¬¼9Ȭ%›úUÑ6r²�&î…iq$f{ÄøÆ9Za�ô(cØsÛv«˜®Ä Vôý§.h>žž 3E ä¼2ñ±÷O&�±0TU‡«/v8Þˆ6Å÷+Q™Ñ��TZ&²¬s +îvVGÞ|P˜ÊL|fý$Ý+Á0"þưĸ`…­8-�'7E0à#d�á‹lOwÉ”ôÞ‡yï†PŒ'@GæPê.�•óCvôŠ_6X2œÓ®«Ð‚.ÈOC‚`î‰mÇk%N-+Ш*9ÄçˆÞÚ»²Û@ã……‡4U§Ú›Ìø¸ã!‚``b㯱Ã.ê»éÿ t3ÀÄÒC‡ƒTFÌ>±K} “‘¾8“´€5úD¯@.‹áüx»´x ‡Íä|+vÑ]KªŒ5¬êç%dtNÕæ¡2iîÜÂ7&XšÀÉ».¡Z>'ÆÑ¡øæ5 ¶ KîÖ í\Æs+Yˆ–Àî�˜£è˜‚CWÆ=£×N…q׋TÈ8*‹6h!nöæÓ0›«äJ u+TÖ±ö\òœC´ÿT¥Ëâ&{�A­˜„÷Ð×2“Ôg Pâí�#v5øg ¬e!�ž,7q³RºîÍÚ7\L‰îóàú`øÓ[I&(ÖF´” /¢P~Ô-f+Y/D’3~ø¯ŠJE÷ˉ ŽuN2 A}·ÝD3yš£J‹Ô”pÓï€Ú$çÕ³p2å¼·täËÄX§c›¬”8Xrx.Ødi]zõt×PåQÚòmŽ3>ÀV¨¿u·fÝðæÏaoó•Í÷9ȵŒ/®®>[Ë÷)Ôz8ëÏÈ‘T¥#¯ÁýEˆxïõ%~ê¦�¼à›�üi,X]'9׺ªp8e¢§$˜Ì Um¯ DŸž¦-”ÐH†Ë¡¥Uk †�®�P=ÞÇÓ­q^3‘H`ÝäÅ£j²î”Ê̬¬,¶í`'èuwŒÌ(6yrNÿbý+έ1Qy³á·Ý^�ÑEñÀÐpÞ©;Ä‘äžÂV6õ¸/Â4 ÍæóƘú4V�=B(U6‰ÎB¬Â�îÀ#1ø˜ÿ„ÑájÈC3bžp¤�†Js-�Nñ{I�‰€qN¥%èr€Ø ô¦Î(§ê$ïHÌvQ*"Žo뉺%MælQ#¥FtR"¯z?õ*ä(íVUÛVs E½l|sÌ G‘!¨àjXA¾ Dr!+ ä*MáB U|„dI(TP°ó/P+«ƒ€ªò˜§º’Á€d®âsÉMW†Ò†¾-€C¦­Ä—£¯UL%—Vÿ-áš=«Ø *+Ý71ÆJP|ê ¬bâúªG7_pWõy(ámU�¨Ëªwt ^UŸ3UEI^LÕ´cE•Î,Ññ%O¥B›¦¢{Í™¥b†œ·IE‰ŒÜQ©¿Q¤¨äž¡ñPED@.¨žú ÔOÕ=šöÔU¢;e4­Üœ¢— éMñ!EVS„Ž‰Ì”&J*ý˜z+éKu:ÒR´d#»RlÒSV:iuÆœöwž�Q°�Љ]Fý¡Gº¨Žž^hEQg6ò'гe�Û‘3Œ(•%J.$*¼À'BVe@Í +€7PˆxÞ”IhÄþ‰J'Êî§ÇèÆÜ§ž;e�[›Oôéž¼ µª'z­90Odd3žš”&ÓUƒ�%ÆÙ d°¶Ø�Ê�=zßeAĉ£½ˆÒܨzŒë½j¹O$2ÏÁj‰øh®p½#vè³¹9nÑi™§“Î2†ØŽêÎ�;5¡Û>2ß<«›nÁ<˜cwU…ƒ†!7|¤¢M×w õñýl +6TÀŽÙS¼r(ƒð"Õö·¥|)]”tA^w_1x9ˆôðÂ)Œ÷KcÏcÞJQTmãá¾:¡ª_€QB.);°y.pëb¨TËî‘Ú-y.¾)aÙ!†“c+x™R‹Ì§zšé&tI÷�±‚ÚqQèÃøíWqëûò{Kí!Þn…’®Ä¹”Öi§n=¿…¦wóJPžµ,fâÛÃÜ//l…bL‹�»;ƒŒ?‡"Û¡¯¦ÿ wŽÙôàˆ%ç7ƒ·¦<çjX‚´ø)#É_p\*-.n Á#ÅÆhºß† t"é%ÎÒ“pÁ´u‚(‡}ˆÀDF)Û–ë‹à´©†â„˜`¸Ð>g㢔¾|6éƒÉ�^¶,+¿cÖoD#ö‚ûl€©˜'úiißÎkh<ôôÔ]lÓÒ�tÉX¹Ü&�¬ÿ>ô±ÛH5>æ3Ï“'…!Ü2܃ÊîÍÅKéÎY‰*.à-lÌÖÝQ’U4÷†NÚ³­[ÓÞßdi.é"Þ€óǶèÖ¨„7°øîðÂhðwy—f¯x^¿½t(fÍàŠà«êmÓø;kú_°ˆÕùÒ#–»F8ËÀ Zúf)Ž>‡Ì»ÊeqUø+Gï*¢Íˆo¿)"2²møãóO¨•ÑÝæ„¬j ÓØ6 s`‘�~�Uî%f�6Á½.üŒƒWÔä«ü-µÙørßÐÆ¶5¬±_%ÇkH$uåù24bJEýf­${@ØFâ±çÓ翉Œ&<Õ!”På£Z—Ýš¶N-_Æéy²áxǡԃ÷×=Ó©à:€P„u[Ütp‰…bfˆ‚PF›å–Vâ1eßžBS„ÿ¾ºýÌSqapÍÒÙ†§>£øKP;vÛ&ÜÙÂÁj‚£ØèÜàË^ØyõŸ˜UV+kª`ñ–ͳ ˆ}Û�Ï8çá�QÇí 7,ì¸"^… M^‹>iq�Ñg*‡{®oÌ-Æê(´&hµjˆ�„ùì6\�ÞlM©ê%@ÝÛ†\Õ|öØv02ˆé +‚¬ÉÙÎ8Ke,ò ãb/' ªˆè³�N6¼#øSqY#]âQbéäI°é¢<¿ãÇ0&Âq³ƒ!&Íäza'Iª#4ô‘Øw`”‡‰Ôÿþ?3"è„ìm!á kÁuôØ"þ�&�¿\Ãñ)œÝïÄf¡è°¼œOlŒ"›K2ÝðNáÁM@)’@_APN¦ŽçàqàaÃòF¹ú¥?°Ì÷’p{~RiÚËH)gadº’îÞõÖ}˜É4 3ußã­[@J®�cè,ÿ$}Ø»€¬uū͇o›¦Ïq‹€o4—Ñ<Ëç’ðÖ¢)"›ð=ufnÌ®Ñe¥!³°Q55xé1ë06�(�zÁZ&p‰c#µ…J®#â�Í@’dÀ¦Ò¹dþ5Zí×ÔxÁÜ•Qù‚ÝV¯YëöÆK¦×pDŠ9¯uÛÅ‘™uŠÌà ^CŸ”Œ6AŠ|×lbÄk× VNp]£X +”§k>"á¹æC¼r�! +ñÆ5ÛǦá»Z…kÄQ¿O±v«°a�n Ö’‚£½¿Z·bëJã%œÌ›·Wc†½S^°« -¦_Ô”¨_s°¡#’±È\Í4©ì­¦> áZ�O%ú¬f8IÔ�Õ4ÖWÍùæQ«v¡U�¸Frªöü\kIŠ�§š)áH.ÕÈõ“Q-¡¼o¨¦úÂk_ÆE_¦×P@,ô4@W°°=¸•*µ{Ö¸Oj¤ +/ˆÔœëkSØìSwÿQ»F«u£F{ÀÍ¢æ$ç5Q»§×:ÄTÛ¤yíÞúrµyQ^—y{í>è5!æ6{íÌ™áš'ÈóÄžF½ æyÚ]ÏZ �4æ”…ë4S¤’sšîX‚‚/mLA­å:Þe=0jM£ú¤iÈD vSðÂδÛ�Z ­ˆQ+w¹Ú-ewÚ}9…�]/ÔÓáõUZˆÚRLidX3h‹R’© �Ò΂~®+ê'í²�ÔjÒ”k%ü"•º¤ çh±‰¶IZG +"�4³¤2‹4嬮l®ài5¤Qg ¤™B*÷£émz´áì’­�ÉÂMŽ­niÁíS²h�&"_ÍhÕ¢ÙÑ(‡õ,£©ó`h~ÑÌ1”Û¢™ÅúfBäÍ0ó)š5ÁMYZ¡%Ï #š-2n!š2¥�äºÊiýІ³3:´Ò@¨Ó†æ*ïB+À2ÊŸ š-ç4㤠šáý`ÎÌ�vḚvä˜ÿ@ ö¡ƒ�ÝŠ|§÷3é׎ZáUùY·YksÕ‚‰eï>#šaõõÙ›Rãó™œ.83>k«ipÆ*ËüžÝU¾BÛ3ÎFŒ òõìúguÑô¬®Ôyv5V�åíDv'²ú Îtõž©Ä|«Î̈çìtF�àetæ¡Cú9»2å6gÊ{Žiã Ë™’gÅ$glý{,Éiíqv½üqÐf¸8ã! Lð¤»Öí}Jï¤w³Ö^o/¹Ù¥UKÞfWhÕ®ÍÈ4žÍüqÆf—`½zͨ�lÍÜ…·«Ç”âzjf½§™`nJ³/&gJ£eBC3Oœ)õ™1JYzgf~ àXp3{_̓ 䎽LÒÔí¡—Y ‘k2™…öß³gRÚeÀ@ê0³uä¤0Sœöx0ãLAÈ�™;¬P¬Ü|«e”2¨ÿ—ÖŽúGš®Ãmbžäï2 %¢ë2¥f¥ÏeÌ’Ü^\æ�axËX†/D~ÞŠMfz–exg!<–g4ðá=,#?QV‚%‡3÷Ý®ìNÊ­Œ.!ƬÌQm‹¿Êîé³*»’Dr*“¥TTv�,êSF ,iÊÔz^ÚRÆþºÿ£ó˜”u'qÔQ&u(Ê:«ØÆ˜…¹LWøPvO6fPF�¨?™ûžR]OvŽf;ÙùǹÌɼºÉ|ÑŽXMF– ìLæ'©ç=CwN¬Õt'[ñ«tóäh: Ò [Ü£^øo>¥ŒdýP Éì’ñýÈ”MÓ`�;²ÐY„72’ Êfdþ7H.²¹—�8&Zc™¥cÜÐúa™}¨‡Ã�t´X6¢•ñ>¥2¢¯™_Š6.˜Ÿ®þ-­-ò j,4\d�%dzíçVØù„ZµUg.ùÇÔFšß´ ÂpIØ|Ì‘mÆï±[Á_U�‘œ€m%¬n›èв�‘£õND:n[9Ž�„÷ÄcôqúÆl1ÚÝ�| }¾·±ZѲ1ÿ”»J#gUco/ɧ1ªïh 1AÓ’ˆ xD8N°v3˜Cjw€bæ0G ñÇÁ1][®¥¬ÐRtã9ë„gk™�¦Æ»2‘iùª?æÕ‘Í£¿S8ç-…ˆˆñ°J€Ê(™p愤¤šD¥š%ÂÔ_ƒ4�,F;’Ìy´Ê¹‰9ÿ HZ’ߢÒ5°GU(a4",‡AÒ>ó‘JÀ’#9\‚øKáÐÀ±>)tðX-f˜ƒdeC±EŒ¥X}‚¬o2Ô‰–\cpÚ·™ÁNÙ øe#i¸Ã,#å²Õì©!�ÄγÿÓq¾ÌG€OR÷QrPµ®»•h(b˜)\޶£¤´ +dX§Ø�ñT“sÁµÓôíˆl˜Ó#ÌícÄÜÄw5J{3þÛ ðâ‚«ÓͽJŠ¿�Ƃɱ)ZôüCFä`ÐÀOiOÞ®Äõ}4B,•è�IJêîU0’ÞmlpC7^¯Æ‚1ËPÉ»Mv�kC'0áuÄ·G‚àÐB¦G÷õÓÕ?A~�iœ57£u>,m–€&‚Õ"'ó .¬Ž-iy¯¡iæ(G%‘úLæ-p¾cGáI6Ÿ…±^à]PBb tù€Mµº%⤠ô'<Êë\,IK ²õ<Ž<åÖZ]�$kéhc'ú8\`ââ/ÿV{,3§ÑçÅ@ í‹›”í‡Ù¤aþsb¢LÏ]_©ý·mªÂžè‰tŠNá-¥…ò !t÷¨·‹ ÷Qή"tŒ�/…•¤ ä¿Cþg„&W˜oÂH‚]Š�àm½î€¼�dسP²cX¥5‰ûŸ*'¹8zÍ0à÷+EOÔ9†R±5«òðP]o¥ÆBn¹'¸ ˜!,¦^Ø»[®§aº°Õ·¼�Q"¦F¬>ÌîÑ€ÁíëfnŒhËázü»YAà­Ùã߯º“Ëìaf£ªª–ïÖ��øÆX°.¨\wz;KèA›×Wägù ÈÀZl|í‰ÝYÀ:-8swm+^ÄLîÙL  as²0Á� ƒÇÆiÜ|‡�ƒ²5‹›]¤õosIWtþ£‘-òz‘°H�‹¶‡ÁÚОGjIûüŠ{_we�ˆ7ª’%‰Df|£Jì„P)ì´ ¹=/mÐ)1$êD)}Êp7"'èÜÔ±.¢²ßØ’Ms\&ðMCCðÈÀè<Û ®K%Ýo[äh·Ÿœ&„©±ÈÆ&ïÈ–�éɈ¶Jú(üè¬br üpœ 9x«¼ÞÕ}sЫÈQ£éƒÈ‡š1«µžIŽn×ÏØ]MÙ #^-ÅÈõ™í‘ +ØQ-8 䛆 ιÖ:ˆÔgiô ¬ÇšÛÛ£ÎVŽŒ­§'2΀æ�7ìfP¸¬ó$v–Bhà-Vædd6ÚÉæ³$Çaà.ÆÅòw +Ž–&,´ðH\áŒZ+�7¥¹MÍ+µPðxä[›Ì(·””–¬©¿Çþ¸G1ÙêÝWXn\«ÐùNcò}g#ÖÑÞ-c242VÁV¦»_hïN`,Bg-�qÔžY¾µ6 ¦†ÞÑ‹q8QzEáX-D!X‹\X‘XØ¢{«¹Ø�åÆó¼× L̬zREÈ’Tj©šû´“V†nÜ8· Ñ{»¶3Q›DXzÈæŸ‡;¦%­ŠBmÓ„9À¨ey‰÷˜Ã=ðƒXó’Ò˜3:w`-_ÀÅ._|-%5‹6sÀb‰§ +á +�écæjµÎ… ì`9Hšñ ϯ5mŒH†¤VªÕ_Vóš_÷«ÒÊ´Óûö+�e‹}BM¿L­_· +´ýŠ?¼î¾$= ýΧO^å~ÕOw¥áh¿ú]ƒ£ÿ�¬©îDçàg\[Þ@š 4ìŒÝCý_! |A¥Ö* +ªS ÄŸ« +#ø®n­<ánY�~´,6(€CJd±pºeµ²^ó‘Ј³\dÝ|ÐÈXæÿ‡û7Žo ˯ª¼EV¬ +‰³ø’—ò{ÜÛYÛV-}@eê¸t:ÀZœ}£lA÷é13¯ÎÉ�ŒÕ}±!븟 FÄJ3J-µVß±$Õ–œ¯”JCeaj$²‚R´<(½Vä÷¥Râ`—RˆÇ#£á‡—Ô+»±œ,ñÛ +(˜”_í0…3– ‹÷“GöÇÏ©$øì€"zRzñA؆¢P�/c¶¾Ã +:QRÜéi Ù€×?Ÿ‘©À�Œ1&†ºÑ,¯óRúI +¡ ­¾‹챚Ü$5C(Ê•TÕº¤*•Ö]£�+P¥„ä[Iˆ8^ +r�q¬¡e¼K‰ŽF—š«ºˆY–öí[[uowÅ%†3>–ôÕ}„j ØhË¡ãm8¸o:r´ÙX@M†‹2 9h¨Ð$^2âòh±3Si Ì t[¤tKˆª :ŒÄ‰²/b ÍH[[cc£Áƶ¶–6-Æ‹e'H„¡;P%áV*Úòh³3Ô¬–'h(É;nšÂ€Å�« ì&N¤P±¢ÌŒ…YÙ +)N˜ qX, SMcoÒP�6 �ÁÞèü)�ÉMQ®°Î¸@‡ðú öåMW‡3Ö•…¨&2XéHèGç;…º ÕJc“Ó³BRúŽ%8EQ]°Ê°A€,-­óù¼u>Ÿµ´²Ø�ÁêU”“„ñW ihÛ“cCc¥ÊDa^^ QéÔz­Ñêøl‡Ž"—'4=AEIIMMQU ¢šš’’Š‚zjšPƒˆp4´õÑÑÖ\­SiT:­Î`k´;>ABDG]%&/ø‹Çcr™<‹Ã7ØË¤Ô=" +òÙÑÖ`gªS)LŒT†Z½bk´9?@AAÛ-Wˆ»Ýýøðèähm²43VªŒ4ó…ºÌ´j½Ò`kln´8899::;::9988Ú›,ÍÕZ�ÊÄD¥Ò)µj�¹^i°Xl6›­Éf³X,–æz�±V©S©4#•™N©Ôjµj�±Z­VkµZ¥R§Si4ã1ÑhT*•ÊH¥Òh4ã000010000}�:Ô¡þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ›™–”�êBÀ4_>j¸ñÁªék„ƒ­Êļ@�j¶°V¦æ&—Ç„Ê`¢ãºòR“³ÝéééÙÙæÔ¼¬\;&Ra’'ç¦V¶eÁL•Ƽ@¹]qš,Æ�B2H*>N²/379Û��žŸmÎÍÌKöä£b!`:!?nÄ CcE‰»ÜlÐÑ·ÉʃØ�syL¦`9TCN²-1579Ûív§gg»ÝæÜÔÄ´dOBª±La’7·ƒÆ™˜«¦ïPN¶JsÓ3´T¦ÒòB!ãÆ� +ö ø "ª×”].1357779Ûœ›››š™˜—](×�jÄA?({ü¸!…—Uyi¨ç†¦:S³³MºŸ®>ˆ�­¹ÁC’þD\ü@r²’myy‰‰™©™‰‰yyiÉ®œ”ü`qð/�/ˆÛڙ؇«§;i»S3cÅâü1™©²ºÈ`Ôà1WDIß_C#×\(+Ùl6» ›ÍfWRrYG>2z`˜å¯OI‘95`�ueQ™™ˆ~p°VnÒídÕ!LÚ�¸º<%é*WÕŽ��‘’’ëõz=¹^¯×’’‘��ŽjEDÂ+UÒJòêân ©ë`åt'q³8>DKd© ÄÌf´ÅÑAòDŠ,„†‰(ªÕŒ�Ž�����Œjµ¢‰†„X¬Hy‚¤]\Û 31¤ÈKD>8Ù«ÍÎöè;¡BšÄYZ›¹!G–D‘âˆe�°ƒBÃÃÃCÄÃÃCñúI‰²äÈ9mig$ÐY&|�¶;6ש«í�н�ªÎ]cg3€“àŽÈž'i¨øý + + + +^ üó£ÂAÚ‰’="wÀ90ãl¬ë\åtw!ôh±ÖiæJ�©Éù!R?aØê"a&ƒ�â‚Ü ÑãK¢A“'P¢¤Óé¾t:Ê“&$áÓr$îd˜‘èÚÂð$V"úÉ©™¡z•Æf'¨ˆi …á\À)^¤ÙÐáˆÜ�¼<= ŽìííñíííÁ@/OÈ�:l¤½Hq@g Pc¦¢ šjŒtjÅÞðl�˜ÆO²¸ÀJ˜ÁH«�ã­Ç Aäæèêììììîììììêèæä‚ùÑã G�4f%À¸².<�™Œ¶<7XëTó…Î`µ<\£%qS И(s!#BÁ› XŒ…J»Ñ#ˆzHš¤§üþMés’Ĉ +z´¥µ(â\å;SÃG‡ÇǤ¯J`BÃÄ-Š‹jFFõ¢¢‰‡d ôÛ IDè À¡ÖbŒEêŠ$�2%pÐ0Q‘ÑñÈHIÆÅ-†Z©DQ’gŽ4e?,…[ÔŽ�’k.”••l6»²’’ˤ$äê-…Yþú–èÙÅÝ@[!ÂÊàá¢cäš²²‹¥å%&&f&f6åd¤ã"¢+,É£ëÑ@’´-‰êÇ5%ÛR3Ó² åú‘1Q‹•¾$xAÜØ3779ÛmÆD ¸´;;==¹ô.>N²/57Û›š‹…�}M>?· Vi2�ZÝÏëõ™[aK "¶*”ËBšBw|}W¯ôñÝmMNnAið°ãëDDìã³ãA:fÆÆƒ›YØL2ÕÌŒ În/-xظîÒeÝx(˜Þ³ƒc3;S‘#Ôìp»ä©3X\ÝÞ^[ØyŠÜåîÔp»ã)­¯²µuGÒ�‡�kv&g&{Ýx˜>R·c­ìKkjÜåêl»c©¬¯jotG¢2J²17 £¡{S[ñ•%5înu¬Ùœm’8*ËKEšÛP¬ª%Ù’êB+P0˜sKSá•%NÚæd­21/P¬)fè�Ó{ò×�:²²2RÝÁß=93R„À +:º¡6 O å’×Ä�p’òRSó’r‘ЯI^�h'Ð î£ )ø)&b´I@D*Z)-59;=?ÿ=;95-)µPÑ€ˆm1L�á ¬ý)ò6]q�Áp ‚!J¤dÙòÁd—LÎÎNÎÌ.“lÉ"EÉ�€1ÆuÕä-úÑÒP¥1RêõƇ€ UĨg’ ® 6z~~þ7"^Ù‰q5óP5"Ÿ›+U +ó½Úð@X2[à ‚ v{Q Õ‘•—šíNÏÏOÍËÊHµ!`”=;4Xˆà`Á¼�Çæa<¥õ¥"ÍMNω¡â#ËLζ§çç§§g›3Ó’Ë£"¡Ÿ=9·4_ZSãAHa +Ðd1Ú€à-‘‚%ÑqÍÆÜlwv¶71ÙkÇD,R–ài‹A†Þ@!Œ$SÅâ}›¬>ŒpQÃG|iÀB5$¥eæf»ÓÓóóóó³³ïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïÿþîïïïïïïïïïÿþîÿþþþþî½Á÷}›¿*Ð-¬Ð`af)ÂTxm@›«( Ã¼ÈÀ:|Ëd3X|�Íf0øk ]„.B]Kx½^å;\—Å_ó-þ~¿à;Ì‹x,D‰d�Àæ1ßàòw‹¾Çcó÷ö‚½Qá/ì“Ç_ïm¯_QcñíýŠË·ùZ¢ø‡Á·÷¿Æ®_â°7L¾Ãæû:öEß_ïí势Þ29\þš¿_ó×<¾Å^pYl6Ë79 &——¸ß²ø[&ßÞ<6o³—l�™Äcï}—ÅáïøöÞ^ïø�o¯x‰ßàñý厅Ðp¡˜ ª¢"i4jµÆÈÐÐ@©Yh�ÏPO öj¥N¥Ñ)ÕzÅÚhsx|€¶BCEFGHIIÝnÒ�7è‡GGk“½Z«SiÔzÍÚà$)1y¿à°X¾¿¶?;87Ù«Õ‡ç‡Kt� ,.KÀ ŠB”ÔÔU(§$ q�xrl°Wšíη(i ŒáJ–† .PE9M ßLÝ"! œ+UæÅ&§gK”Ät›�¤.\a�ø¢€®®@|àŒuuaêIB€n×Gç;³óáhé6?QY À�« Ì€%ÈP  +Aâ°.d]U€’fB‚´CÔý–Ÿ¨®´>t‰ qbÅ™‹d(�¦¶¶ÆÆ¦–¦Z/Z”¡3 ×9ƒ(38Ñ)+­^b'Ì\ÈP[ �8p{Ûç¦#G› ÖÐ^°@1â‹ë|5@XÉhÛÃ$vª°¡C1-d¬5€ã­@& @Ž®®ŽnŽ‚ €üèñ–Ã)FxyÀ²à4fªÊ!‚ìL�¶·8 æî„àÑ3bD¯ž�»¹ Ø�c´' @« +ŠŒ[ƒ­ .‚¹ +ðŒì%YÂĉ&K’ð!b8h$P6¢kkŒZn?æ.Ðã[ò$ÍÁ”*V­üU¡ÂAú‰„5¨“µWD!`€@CU5³€Á0‡AÀ#+ÝÀÅã`06BA`X +a0à D!‘$ˆQ<³s÷ÏnÌݧ» v½Þ¹û» Å®ï.˜»'»PÞ=Ý�¹ëeæ®Û]»^ï‚ÜýÝ…b×wÌÝ“](ïžîÆÜõ² s×í.ˆ]¯wAîþîB±ë·Ž»¸Øžœµ6öµP¬·–Öµ"Õ©VàÚbÕ¹–¨$ÙtÉBwtÄU‘׉:Ϊ«bm©ÓmÚž™ê&S‰O‡fÔ;h'Ñ…¡YRÍ•œ-ðÀö›mêK0[©lèxšü`àöØ6uôü®k$ß÷Z™Ú¾å:Éùü(×HÞÄ# µ�~úǶú†õœ|á"„à ñÎPžD(û"Žcêhç †IÏë�ï�Ç]ÿ`)êV¢ôè)D{t˜ï0pçäeìÿ;òH…`#Ïk–äb@‚ă Á¶Ç­ÁY‚jp–/-a‘°Ç.fN6¹íÚnH„Ž(“E¶~q;†æA Bõ…˜­¦.'Ú!-./¥Õ–í¼ëU0ßìúh +DZ:öÕ’A‚ˆ¥Ö�JŸ DCìG%³æY—*DŽ#ðÛa¶L�ƒÁ>¤’Úp³ÝÈx}#HxTrÓ­™; ‚Ñ�]ͦ¯ —ß¿ÞVxéÝ ¥“Bh¤‹Ï>»Ý¾_z¦ei© ô|xðûãø�6ÑEY‘ɉ呗 =Å Gt¸;sDå)<.~õ¡u°)\i}&�tQƸ97"Ħ\váM0A�|ÖÂ*´rÑ–0�ÄkŒƒU\¼];ÂM÷Ї&žrã1†G|=É-™Xaõ(VÔ ¿’ÿ%VäìáÑA^uçç)rÈçè^o &!—zÉh…=H¹“xˆ¼¡'iCkÑ…ü¼6¦§FóŒ»Ãdš…aøæË®ñÿMÏ.ÊUmŽˆ +*¡GÉÏ#º† ü�„1Ù. IC#Š„&ÒR"ùñ¾I?l³<Ô4è:ò6E,t ã9)¤Ó…D Œt¡ Kø¡�7¡s3d +cå6\=ð¥˜B̈¬66ô^^ „Ló¯|PÑ$˧0\8Yõ`iH\Ù–òÂ&BЋ!Ä0�$úˆøÅù=¨ f•E-C¯º¡fïú ôÄìk§\ºX:öйäháŠy“ã÷iߌÜBöˆüväëDˆÜ˜«éÒm$8Ï-¹8‹¯KŸ¶4æÕ”œ‚pĈeÄKí�Ķ{�QÆ”\rÕ_EDë&ÅÕEºn\wØ­¿òOlO)± ™,&‘Ú«YlQk=Áöchc4Ò¥Ü7Ö‹¹´3³èŽ5}'–LzOÆ âcž¯«�é…�qI|²T9a\BÚ-í«1.¹j€•Â$ L:à¥ã4&½ ðQK067�#Óc£ nëhýÝ +’Ù�]:Š`i�Y ëþ 3ÎÈá”eS5 –ê#áÒ9Ð-&IA�Ýÿ%í뮑 >߬3â² ›Gáš¼"Œ*ˆû-îoÉ£J‚%tšd£OP�"àKÇ+J%Ø¡¨Áê]™gcœd©&ý8° cÅAÄKóÛý ‚Üæ´–rdã +Ïrtýs“­¨Ó +•)qvM¡Ñó«,û(UÇlrë´£6zo>_9SXÔ$îÁ¦ß?gx3Cjò|Ò™EœäyUpseBH»ÆÅ¥ÕÄßB¯T:°-ÓIƒ‰ú@ß Vºæîi £42©àÙ6€Î³ÂÐm p;´ûz#ZïºÇp6Haô]bÛd~„ƒ_8A®Mkà¸|ÅDoóàÎè ÜÏ�S„Ax�Ýôà€ìÏF�…¾prVkxS:áh€£žKõxŽi¨”y°+xòwÉÆ Çå˜ïõy`—ì B½p|iðx‰ÐF×ÃCVÜíX3&7p¶\ÍFœ ›Ýã­:¦ 9G!÷˜x~ø�gà‚ý_êO¨*‚·7dvó9™(дÁìvÜT�üÿ»vjƒ”ɸ¥ÆÜ-pHÁ5À‘ø##ú¸G¢µq -Ád3�ÊÆô¡¸à%©§pýKRbÇ^ÅÅdDïjä;|ŸpTP�LpE,JJµDi{ЬàšÂ#Ð\:¹¦r¸©x±Jl¬ÎJk%ÛŠ²s[ÖÊÊ-Y×À pcÅ­—À¸Dá W`\b·h\ã…K¾€}eñ½èÓ©/ _?¾ }}ñEéûë ¤¯�/¾§¾°ð}õ�éëÔ†¯_�¾¾ø¢ôýõÒ×ÇßS_Xø¾úÆôuê Ã×�/H__|Qúþúéëã ‡ï©/,|_}cú:õ…áëǤ¯/¾(}}�ôõñ…Ã÷Ô2Á½7e\㢄‹&\‚qÑ—bÜ”qŒ‹.šp ÆE ²¡Zö%eåhY—�•{±¶8+íÆªÍ¦ÝT,ƒ +5PÉJ3Ö4< ¬Å”÷Ò‘2D¤‡ªé‰r„ˆÄˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  + +! "# !$&)821/-*(%" + "&*.148:F?>;963/+'$ "',059=ARQPNLIFC?;72-  &+1682"(/570 $*19@HOW^djotx‡}zvqlf`YRJ%,3GR\gqzƒ‹“™ ¥©­°²¹µ³±®«¦¢œ•ކ}s7.& "*3=GR^it~ˆ’𢩝´¸¼¾ÁÂÇÆÆÅÅÿ½¹µ±«¤�”‹�vlaUJ@6-$ + (14+"&/9DP\iu‚Ž™£­µ½ÃÉÍÑÔÞÝÝÜÜÏÊÅ¿¸°¦œ‘…yl`SG<2( "+5@MYgt�Žš¥°¹ÁÈÏÔØÛÞàâãç¼³¨�‘…xj]PD9.% '11&¿Ìý�Œ{jYJš©·ÄÏÙáèíòõøùûúøöóïêäÝÔʾ±£”„tdUF9.#„ÉÓÜãøöóðëæß×Î÷ªœ�}m^OAŒ›©¶ÂÍÖÞäêîñôö÷øöõòïëæàÙÑǼ¯¢”…ufWI<1&fuƒ’ ®ºÅÏòôø÷öôóñîêæàÚÒÉ¿³§™‹|m_PCCP^lz‰—¤±¼ÆÏ×ÝâçêíðñóöõôóòðîìèäßÙÒÊÀ¶ª��‚seWI=1'�š§²¼ÆÎÕÛàäçêìíîìêèåáÜ×ÐÉÀ¶«Ÿ“…wj\OB6,#"+5AMZgt‚�›§±»ÄËÒ×ÜßâåçèéçåãàÝØÓÍÆ¾µ« ”‡zm`SF;0']jwƒ�›¥¯¸ÀÇÍÒÖÙÜßàáßÝÚ×ÓÎÉ»³©Ÿ”ˆ|obVJ>4*")2IT_jv€‹•ž¦­´¹¾ÃÆÎÌÊÇÄÀ»¶°©¡˜�„zocXMB8/& $-5?IS^hs}†�—Ÿ¥«°µ¸ÄÂÁ¿¼º¶²­¨¡š’Š€wlbWMB90' %-5>HQ[enw€ˆ�–œ¡®«§£ž˜’‹ƒ{ri_UKB80(!%W`iqx€†Œ‘–š� ¢¤¥¦¤£ ž›—“Žˆ‚{tlc[RI@8/(!JRZbipv{€…‰Œ�‘“”’��І‚}xrle]UME=6.'! #*07>ELSZ`fkptx{~€�|yvrmhb\VOHA:3,& !'-39?EKQV[`dgjpmkhea]XSMHB<5/$).39>C_]ZXUQMID@;50+&!  $)-2JLOMKHFC?;73/+&"  $'+.=/,)%! ),.0123*'%"  + + 0997832088068709l 3281547319632287987649727088645142318838620928529cl 33144212785c lc96995798353050575135%_%_333  +  ƒ€¨"µfDÀ$² ‚€8„„!@ ÀHŠ£ �A `@Æ`…¬V¤ýNò¬A®TÄíO….NO? ÊaTíÍû÷`µÌ ¶MµxF¡µšvÖnxE âbëU�^–�𮢵­ÓÏ�ãío:ð[úXȉ(~MŽ ÌÑÅГi’7¤@A Vœ6Vs3çB>8çh &mŠL24¨èÂÎG/ÍÎà(3‚ªEåÿŒu4‹c 1Têð“âìr¡ó6õÙõ`0ºû’¨bŸb`�j]ÍXe´Jâf-Ûæ‡‰ÊÙa‘г8pׇ@¨¯“M;. Å»ªÑËò:X®ÅËÙŽåÕ.«âMØ*VaßI/�N\®3;äa¹v~ud—,vøs}1–“Þ(é’^õ +Hï@z…´wP½ƒÒ+”ÞÁêp…å_VÕµæ:?,köé†g'½d&œgµ²ìòl�E;Ou–-žU8Ë@m7|s•) 7ž-¨…µg4Ù é+ê;¿³¢¾eBw¡aE£ë¯ J‹–YÄGc& ½Ô”M͉Èv¸>†f)~–ÜÜ1žÑ¬ä¥ucl4²A§_x�×+õ7‹Ê¼Žû÷ ¾¾Ò7ç´!Fß pM€´=¢ûg[ŒöÁùà¢Lè +‰^Òý‹I’`œY"ƒ_bµÓ_É3Íîß÷§Á¡jθ7 ü¼lneŽF¨°š÷ǸëýëÞ¿ÌX$d,ýÒÄ|ÿ^ªïˬ”»ÿ0U–²AñÊÄI¼ÃügóM&þCÔˆlà2ø�0ùs\5ÀzzÞ­nˆ°þs¡ÓבjøïÆKŒeŒhôT‹NÍÿ5*OŒ®¾ÄËN-âMëÅhcž!‹^h¡ñ߈ú`ûñYJ¨/$[”àþ%xÑùÉöÿÞtØoÉä?v‰=:ò÷<¥òŸ�’�,-ùë´vù/ƒ`=@T,0ÿ¹Ï)ÉK=´Ë&mÌU ƒ Íà‰Ç\Cå˜ë‡?sU0µp+í�ÿ–JŸÜRðü§dQnI<óZÉÒ×b9îÁöµ(—ØÌi“rÁÓBÙL˜öœ�i*9­å¼à8ëÚ„s|l¤A€ús: †´&[ZRÜ­‚Ë^éW)óçýžK[¯õ¯Æ{ÄbƒœãHh `uý)9Ep&«ˆ§5KåQVfKºz7S¯rJŵ‚”ŽT•{“‚ÃÝÃ¥6Ó�þLª…Ç!'Ç‘`Dº.Š@§8iì5ðö‚Žâ�å"ì’ß?UÕ½ƒ¸_¨ˆI9'•~›Û'xål“/_OÇ6ù±ˆåJëÉe��Ú¾êt¿¢9ydÛ—° $üP÷£g²ÜöQ¢üV˜è2ïÂ?áÒÑê�°û±þ)ÏíCmÚõh÷ó{ø×C·¯§òÙéGüórò‚þÀ +å\R‰�| ´Æ¦¬ü ”]aÅ?ÉFè“„N¥ˆ³ÿ%€+æ~“t“ÿla£Ky`'ª¦ñïGÒ'vÖgË/V ÷›iùý÷�5(€ÖmÎKˆ ¥Olùéâ�ÿë¶%1¯·¾ßÅ%÷�¦ôu’ƒy#@&CeH!ˆ¶Ð@�æâ…)ñÔE‹5&\§Ž$d�Æ à{¡KS@¤·.*Kó3 ØBŒ£`§Q¢È'¿ µÄBÐÜH +&‡ÿw2€‡ésK�ðÀj—ó“Öðì Üì‰0cy'Ißo=•®j…ÐÄäàáa›î€²ìpÍã¹) h5vT=ÜzÓ–pa�ãè'Ç/(à7Þ£8êbåB>9Ï€ànθ8¡Hýfò¦Øܜ֌�Ü4°mÜjxs4Å#<€ÙШ¹žQ|ËSõ†xfz@b�i  2íI@©MÿR¤2¥q1û Ò$ýéÀ€¸ûÀQžú� ðΘ]B€ØëÊ.«ÝV" ™£¢T¨¤5h|=Ñ]Íù4Órrf�¦‰I´jC#ˆÂˆ“ç„lh¼¯ÕsP…Šžg4s†�ù!868üg43n‡Ð‰Ä…A1u‡Æ,Dtíc×; é» v>Ëg£ª+“Œ^-«\‘À¬¥Óxrv\Í“)=LJ]—M(驮Н)Ü� ]aÝÖŽŸp2�íHvÂÊèWùr£¿0;QfÈUï¾Ow#ë»Cå]�âîàÕîðbwh¹+¼Ú¼ØXÞªï +Tw×w‡Ê»Å]ÁÕîðÅîÐrwxµ+¸Ø¸¼;T —|SJQ8DFÊØŒ"†"É‘³5TöAs5ÿâö â·©¦î6Ì+ÞWÆT_$qÎùÞzožŠÂ.é«ìV.E3 +BÎ"v‘0}BB YK¸RUJÔ@<ºÐ mNè²A¶^2†h�%L9|ÐȇM¡’Håj‰L’ ÊÓ®ÔàÀÄ p³Æ…?«`Éšõƒ#C}æ¤aJ2+Ø ¤(&"F¡:…„§ x@ôÇ…5%p‰"Öƒ³�g£W±fÅr•ЍL‘ º³™.!Ô¨'Q¦V½’U¥B A‰Q�%¬`Á*4›c©UÔÀ„ZA< +³Ã!æ¤a¡…¦Ž ñ‘ƒ –%«öÄIáËQð!BzZ(ÀX$¬ BLZD oP¨QéÂŒ-0Ð…Ì +w)Š”ÉN›@�’��/®G‘(\J`Sç"‚ð„Ä)V˜ÕiŒO0Ûj¸H!{`à!‰8É2‚š9} 9ú�“(S±\©*jS¥FahM„Ä4¸tt�%W¾œ�£§†E“4Éš5�S£ˆÐ2áÀ +^kÁ*^È´yÁSª\-ñ€YK´JUJ' °€�¯bP¶ˆQ3‡O¡(i5êÔªW±"°„+U¦Žø„IÒ¢bHš/R쀳%WÆÌ¼¹3¢G@p +EêÔ*D ¬Vª”JˆJŽløS§M®2¼6̈.cT˜³‡Ð¢H—:‰"uJU«W€õŠU*S£Šà‰hÐ�∱BËÄ(T¼°±Í!L°ˆ`f…üj4 S§P£L¡ZÕ*–+VªN•B'K�êC‡ ™Z%³È£Ë#R< f¸A‡I—†u)S¨R­bUj”¨O›,AbdÈÏ o΀Éò¤ÈõšÁb“B–TñbÂäè tC#I–„ðT„£’EÄ™~èa‘¡?wà !რ��Ђ… +”%FlÈh`Ør1ÆŽ×=€1’¤ ”)Z¶Ð:¸R…Š'KŽˆÍÂän^]1Z¨Ð’I ‚ç E0˜YÐ#îÁ‰›²BÄ‚°þ‹G3^°P¡ +­+(ˆÁUGrõkÓ‘ãFW' 8�B‚[-^ĘA£‹ØbA� ®,¶R(»ÿ·ëö÷þ¾ãÓ_¿—Ѿ—Ñö»ß½¬¶ïžÔ˺ÝZõ½Ýlãþ²ÚÏüBýe´§�ï½þ—ѶoÛöÝÞö'/ë"׳s«×K=?²^FÓ«>r×î²™ªêþßy�ÿ÷$Ëë2”qÞÊ +7¬Ü�oj?ùŽqÎKùnŸô"£ÅæØŸpÆ–±/óBãºÜ§á6WCø dy)'3”~ç¿RùàÓac[ ĨQÁü!Ä)V´t3C¦1`j\: ò$‰°o8¸lìX0 E–HÁÂel„ÊŒãEK•'Hˆ„Á¯4^ ,ÐBÆ ìcÈ‘'V¸ˆ0ÆL´ ‡ŽbÀs§Žâ¸9@ +dÂÔ²Pi’�ù*肱B<: %S²ÔĘQá�œ:yøø Dƒ @2Äp‡ !C®<éf`ZA׋- bØàÑabL8ð ™4næÜáhPnH´ƒ�)rÀ!B� §N6gÆÔhQ�Ó4\¨xÑ¥ã?ÄšTù Œ6 °Ãg†BˆéðR%J’zØ!‡D‡ùÑC‡5'ˆ E +’Ù|^3Ô&U@sfäùSÈ9ð ©’%Lš6]‚$G8Ø@ƒ vâ Ì-RމÛ�,p|M!J¨| &7.ìd#(YÊÄÉB\ú!’#E øƒGΚ2"d�bÄÞÑõB…‹®}Á)„9ãÆ…>ƒàH’%M�@‰:bÔ'N˜*õÀèÐ yä¬! Ä|¨×ŒÈÔ‡˜ÚÚÐéSC¢G>`”¤J)�*¡>m²$©‘ �ò$@…ºp d7<`�$x1aÍœ=ƒ=ª¤É“¨Q¦P©bÕÊÕ©$Ž(bˆK“Ù† fK#a›ãù(EKÀÁÑ•4}2"‰SªZ½‚µD,Y²f±J¥Ä¨P�.IÊÁê´Aaì +!r«ñb‚4È ÀjD)Ó§#J¡b5kÕ)R¡†5ì‘£†.R2ø¡^2V ŽžA8DºäɈR©Z½Š%ËÕªS¤ŠØôÃ#D€ì¸AaÌŠ’ p +&�=@Ç� ;üÀ)T¨XÁŠõ€Y¯V)�™&1"´GNš´<ÁìË ¢ÄÊXXÀCƒ¢ÝÁíoðÆ�4æ&„ç3÷ÒÏ´ÇóóýíýíÌF.2?rão²›¹w÷žvì÷¾þ&··ûÝ »ƒ²;ذû[wwëj]û”Pv [»¯j„²ßßblŽ#s¿©67Oåbw½±clNþÁÉuì÷}†ý­_KcdȽȽ'ÿ_û±¥œ1N(õuOû[Ü­9#s„ÝáŒUUUNø^¿ž eÿ2n¨Pžéd¸—ý�ãäXö·†-JØßd¿“ýM&„ëí6”Jå·ƒ2d8¥„ýMáëo�*mö·Ùß®±“�gûön¦Êe´§Qêë÷ú<á7øôQãäV�*µåûã�‡ü ìº/?¶¬Ö:¡r|>îõñFÈu|ûfø³N•û"캫ü%„û–B.•/BùþóSuªêîF��%?^ÈÅ—oƒÀ†O»§Œïi³B®Ù'?… 'CÏú7dY- +—Î/ä‚0Ê¿oË�qJ(¯üz—¥N}O£„ð-5Jå”%ä..ü{Æ¿ »eë·÷÷¥Ñ&³¬¦ï²»»ûqc¼„0îÂØÆÕíf1ÊÝå]^Ö.ÆU ¡B¨*UŸÆ]}PYF�Rwu¹[u»gË­¼ÛºpWe�îÊf�ßwe´ý*·Úªð»ª ¡vübìjè0.ëžveÖ³².|¹îfªPjd½þ2ÚÓ)£éç~“sÿíý²ÚewwwC>äÞwõ-'ã^ã^—Ó¯¼¼¬ön6Ï2Ãíå彌Ö{¸Û>rû÷ÏýB)wwÿ¾\ûëûʺ•Íþ3³¾sg]ÙßùK(£íþ»×½Œ6Ó¨Üõ×¹ßK¾¬»^6ûåÔÿí/£íþüÞüü'ÿoÿÖÕ>!lnf>Œ�#ëùßßß$33 23w̵Ï>ì÷¿É~_ö[c¿ÿwÿBØ=„B!<üáûßþíߺþ6%<ÜoSÿøøÿ����ÿÆ1>Æ‹QÿMcíß.Ÿüž//y(y–gy–—_yÙ=ù™ü~¾›ÿ¦óßtÊžòvqV‹\÷¡ü”¿ÛÜ>^Õ÷žr³%»û&£ýÛ·w�§Ît‹oÿ©ê·oË_YWuu•¹YY™Yª.'UYrQ™¿Iîzåo«ªª:‹Ý·ýÒvù›v·µo=÷q''÷ÛÚÿù›vqkÝ{zÞ33ƒÌüí\Óí×’™™%3Óø›lýv¿æ×ÝÛýîæîë×ß”›’ù6ŒýØÜÌÁþnoï{aäo‡ ™¿=¨*ù›|Ÿ¿AÏ1|ÊÈ12GæÈ[Ó•|ɲÏÈ‘YJfž’™%³d–Ì-™%³äo—4È]òãTꌑ23óNæÉÌÌ<™'3OæÉ“'óäÉb#ƒÌÏŠV$‰trS½¹—K€7¿…îˆòºF5ô­iøæ�˜…ýI“–~…€#Gˆè#·[kPºŠÄ’áÙ r$£Pq'öæ<¢Ê5i“ʪßå$Ý�‹V,‰E)¬™2‚´!šL‰€ƒòÚ3Åzú%Q+1÷ïkë­“4rˆvf ¥hÂÐ;oÛ U—Ç!0 ÞÛ³ Ô Ç‚('þˆçC3÷VÍd5’0¦M¼ˆd¼–Ç1ü*ÕÆ´áhjÑÅc¨HŸÀ$ª2\/|!GÆÚÓÂv?�ÎËI¹eY“1²» ~Sããv�ôßT�ð5ÊLû& OÃ.»ÛÖ$Ž€ä­ M`�R®´IÆ;B¢TDx#dT–kX” +0ƒh™„Fê¢)+a¾4³»ATÈÊ)Q†Fã[[NP±wG…*·Ú’ýv˜ÅÿÌÞFñ¥¬…ÕA5ڋɹèÆñõÏ,fæ:Ô¼þ¿xs×eñõŸe¤2ÌB ”š°¸þù ¿Ú^ÿ7{DÇõ¯ ‰PQ®ÿü«Þž�B¦(®–Ïßmll×+~èNA³ôë?OTˆel|®Ány0Þnÿ74Ñ ¤-6“×?ד;ÜË2wmÔ^P.›ý¼þǨn�új²Äü§~ ª¾þ�NB§¯&׬žWR÷¯Výû F8\ÿ¼jðHÀîº6&! ÞåöõߎÞ�ºD½® è·HLËq3·ÇíTaÜ:t +—g]¦ýôÈü´Ï+d9|yXˆÜíšidê•dJ<ڻ럛ÙMÔW‹ü->†F0}ËbI’ ¯Õ*C1âî Ùê(_ÆÂ׿¦ä€^"«| …G:Tjå‚MIàôaº{ �¡àPB¾Uã,d):ÃvÁ²ó#3¤)ŠK�ÿm  íš|9p^O”C0¤Ðó²L£äWñ0%d¹{Çqýºsýs!*Á©kÞtmØÐ‘™Xè^U(1J^ã¬×8·¨E¡Ú×?“²¨FªÝ×  òåO×¿Í ù~XÀ\@ÅY&д]ÿšreÃó˜÷úçÝŒ-ÍCVÍ8NgɵqSŸ/ö¨²Ü†Ú +¾—$ºþ�<ª¿ó×?çž–�WKÿÄßè�Þ6ºvýIho¨�…¸qp¯�‘œy<‘öävvº6„pV¡÷kA_£È„‚¾`b*kg€-õ{ÇÕyýwKäÑ�®Ž„Q솂dNûù¹]K¨$_0�¢Pôp{ý;’7´É&ÈÄõ/êäË=kÓ‡¢-$)EĦs[פ™uwí‘Dù@òÃQî‰QP\cóËúè˜Âci]E)‚é,1Ø‰ÕøTx4üTíÎs€Äæ§¢›ÿtÜPõ¦‹’ƒ[eån+¹ã}†Šød.¿rÏs�’r^°æS1ÀÌæ–É}]gÞWlÆ£Õ¹Áö©œßâc@'̤ +Hµ¤0%ßQ;<ܰ‡R^ö±è�zÔ]>•Ç\%…1êS¡•^±­tO%ÜÝaÜ@Y•¤‡ 9ïhLf†HËS9úJ/e? À·ÊL*´@À¯^Žfœ)oyŸJV`•Í”{*>¬´ÕY&OåÀ¾zâ½§òD€õ|{é>4iˆ�ƒú+‚HUùùT’<ù0´ê¸ŸŠŽÝZ²9�º*®€$C`‰ñOdªDIõ$Æ:½C±Ni–7Ì[®Ù%³áol€©˜d@y•¼k+ÐSïÄg­[…ˆ6Žç žcbцëW“M(¨{ _tЬmùTèü±„„ ¬?•ÎB§S§žŠŸË:VDBžŠ¸�h% ”CºŠ’IØ|‹òŸ#ÅÈ.æBAû�&c'ˆ"O…|‘!–ˆ’šDX·Ž¹…:‘IÚL“{^á$Ö¼ËìþR/”YÚà[óª°^Çö°É]26("­×4aÊáéGM [¦ô®:uì’-ã´êªÈ0h[f%ÿw̓aiËô2%a0U ΰØ2™φ,G5m–¢kLÏÒÅâYΖ‘–ìvyë‰N‹Í@QdœùÜÂîoFx^qlSlËÐ4H 52=NA Ф» ‡ˆ¦-Êê.I¬¶C&õ¸D;$f²v@è Ä—§8ŠˆÉG] ½ÿÕ¿q’ Ü×ÑaËr+˜:-„¨ÑxÆŠ)šã�–öeGON¢9L „�)ñd‚é×…;þê)‰Y Hªd4ý&³Ã;Z ôò–uçØ œ>* +]ôaˆèwE‰òÆéô;Vç.„'fB¿Á‡e0©“ºÌ@�‰"ú¥+‡R%nÛtÙY– +IÂ8& 4âA¿èç°PH›�šAv.)M‹«ÒolíKÛp?5!•vʶavqÂÎ0¨<ò!œãa]Lðôû¡÷+,xxÉ8¨!<ç%_†�ËÂ]¶,ÞZ´w×}K2ýr(ÃVEæ“B°3VúÙHO +¨Øõ»=ÙÔI«"Š ˜7}Mˆ·/#~f�0$ì;:÷yѯÛ=�v²/£Q˜¢ÑîÎáÔ'óðÄíe�'½?az,2œÓoÎ-"q+ì4À»¡ŽÐ¯nÖløpKÙ˨麰S„¹ˆ —ØI†yÜÛyúuJPBîc<ÉùÛ?éW©œ˜ªò–õ°3UÌð ¥ßyâÜAdlÃN]T¡à| +vbq"£ò[ú-Òl.<Óo8«?Â9WôIç¦DÓ/€Y©>„N@ïf:hè7÷`”­@ C}ŸÁØi A*b˜u¡ÈÖ5”§9ÁÎ3Zcñe´\ }N~êÇu1ZúÅŠùžrÓñQሑ/S±é«ÕFú�yëD[Qqú�÷¥5w¸CúU»ÛŽÜ Ž~ËXü¹eËúE"vø°Î2dRFL>c;õÆî¥iI¹Èß.åaiÒle‡ˆä#�Ñ/¬�tJŒdëj„ zï$XÑpyª½D焪T,æè4]—œ"±ó§ç¼ñóáõÓac—h7¶±ð®¥u´³Óo� ¹éÈÉ•d–x3érS¡%¡Gú·†Ñ­lžþÅûÖµÓ �[Á[þ8t¥Ê•z_¸[žfÓ¿\œPwåêîRSýGè-‹)úW{YV½“Þ‚º�09!E²T+\Ú4ÏÒ}TªKTBo'õ÷uWˆBÎñ‘b¦ßÁ�ŽVî'†%x°qb±¦Âfñ3>Rz0|êºdêo/‘'˜­0t +äÑ�Ôä9P¤ 1[tµvYDPôà\úz.Øè +c x‰bQÐ*¿‡§`«‚ú 3’UƒQ†IõáÂ(�CK<s%èÎìfa\0À¿Ú™VQpÊúPN§&?ÓJ/±7³a@ZDzrðuü'=Ó˜Õ!"ºóª°<òÜHÇü°0M¤A¼ôâ¹þ”ðHq£_ÈÆSG.eM¦&¦¨‰¹)d¾0>ÛJ¶0AZE¹�Ž¥Dô‰ÌÆhÐDYGNûÊ}Ê×ÌR J¦­Mí�E€Ö(�=ýªa<¥�@£[¨úb9PŸßÝÞAÿbÅ/0šþ\óæ‘6s|Í{qðQúñl8™Öý�Jp~Oõµ¹‹0¦ß=N: xÙtcÀ1ʼnoJKÆ46[äˆ2”çºøQo;Æú÷ÎM¶íÁ1­„flµñÃ^� +æ\Óêó¶V´(çïÉTß6��܇¨([İÜ6& ¸ø/^Òp+5Žâ¼I‘ðMëfœ3“© uÖâ:—1­ +ë²»É"õLk&˜ú-ÆH…äħš:£›¾WÙªå¬Ä M!&B ìÿ’d-5bÀøÑ,¤ ÿïY656 âÅïa3lOø8¥sÒæ‡« ƒýžï¥Ž )BòÎfi|$‹,Ó¯ž›ÖÔüGÚ>)€VHñ÷šL÷ŠD"EÓJrT¡,è%²éa2Ãpï<—:dþ{-ö'؈àO –a®…û=)(á°È_Å´¾êG|b”ÚšV«å~åÌÐjˆ±(è†Lkf¶m|;QOTÉ<ñ¹Jü§i*(YNèÎý÷ÜŽ"~q� -3&Tpe&x­>i–à÷djé½ë¦$<MÓbáÂ(¿'yº‘ê89ý�à�˜™¼rÉ ‡¢»¬Õ,¸‘_`º¢ÁëïÆn+¦¨‹÷Wpæ”8]Ë’îÆh•ͪ3Ÿ*O5VEƒ)ï[H”bÉ �ˆ,ø°+fä+4ØtÞœYˆQksfÓlb >2ª†–“oæ’·ày|›æ-kÙ<¥¨ì{󩼈Zøì"‚6CQ¨«ï¼øDg1¤”¯ à1¾!ä!‘ÐêñÑà—¥8k;ÆÈ„¡A ¾ƒæÐmè¬+Ç&ŠQ2NBƒ€á¡4(Ïk1RÐÑü·éüÉΘ¸ûþw$0|sÒš3I2CÅZYä3ƒÜòx¹\ ¥û-ßªÌ &ä�6›ÿD/ÙÑã¢hWõSö¥­é ÷Š\ëw‰.å "�c=ÄTÀ̯A�þðdØ1øÀ¨0ɹEø¢cý¨Ò9ÈÓ? }_À8'q4z—2�MA¦÷ùtÍ4ZhÃ#Ú˲™‹G•$CõnLP­HããhK™;�Ä)íÕJ8cS!Ôk%±fJn8J*½>®VØ6‚4¡ÛF�$ZEŽþE] Ôò¢³gX«ÛNæ¡äÕSp¸Fbj7{ŒÑ‚aé� Ìâó]sîB“ãD£—¢3'E¡ë✀šw¯ÐG÷?&bÂBSg–ù¾¦‚kB÷ë9Ö#×.ks§|Ò»2]Wè�e@Õ¹Ô í™mÈuR¥��ŸþÍ…‡s F£ÑBã×ÓÓ–0\¡Ã¡˜á¶)PÏeK&š¿¦å¢–�Š2æDoÔÕy endstream endobj 35 0 obj <>stream +Ún¸0Ä„2�¢ w¤ãŒ&2;þ^±×þ¾ÕO„Û»¹Y +- Ô�&í¿£áÜV+õnS醽Ö,¾K©ø2ªÐ„ñÏb�Çf<ê½Âæ]PM*òõ­#ª!ï‡íë3@0 PEðl ÒzÁrPÊ`õ¶wî +à‘ù—Ñê–Hr'ùI…h¼|õÆÁ;)C"hÒ„ä#°´bø +2šSo;gaIŒó(äçaôAHiÒ0e  ;ª÷ÿ²ÀŠÅœG{1µdÜM MÚ¥( !å6J˜[x(öñFˆbnÅÑ`¨šØaÉ O�¤Ió7HeÝ$*PZ–ÐêÝø[{¿*“VCRïèæ„ÿÊ̽VæÝý^!Ÿ´-êŠà=Ù]âf ¹õ7›êm¿Ô&œ’¿šÔ.˜}-¾HâJ«æê�Îêõ‹ZmË™d�u¯×Ç™ùÕÓÔ» UO™tæáÁéµàê+AyUïºSʈ kvÖóª]Iˆ(8Xûl~.©·e‘ü«gK~=')€Jy’5,½âžíáRï2 ψӤ4_¸H� K“îiðó;ÓIŠÖã•5ê-Ó%®iËhÅKñn-’hRÔŠá*”¾8@v¨á<ùšìÀ’ƒZ§…Ÿ4�ÄÖUP$Zd¶‰ õο­K²DhG“þ8 +H0îP46Ö·Á„YiüÏ—ŽÃ"%¬2�¦†h†µýfϹêæ&ÒªbÇÈô˜ˆªz‡Ý0Ï9¿¦bdnüÖŽîlÄü^œëOsÊÔÍcÀ2œVg<}9h<ë‡�™9…ˆÒpÓ¼ò©Äqœ m!è5šÞí'åK^õ¦;Ãt˜sÖÔHÂfÎ!µ<§dô1•³¥¶– ¥ú×¾ÔQ±âƒ¦Á˜xΉjÉ·ÍòÁ~Îiˆž¥@Ùüþ63Ÿ%ó%åôX`:˜ +\¡»$¡ç¾®Cbz˜s<ÇÖh—*Í9]�ºaÒ©­,òA§�Wíç(ñvªÂÑt©l ;55ë�‡ÜÒ_¢’1\¥TÚÍ÷êi¼ddñ:ÏM©zZA=µ¦Ÿ£JÌØ½/Í2ÚGÿMÖ°*lÖ%êÀJj¬! Ý‚5ð„° `ªG¾Y“1°Úìã`£°4á>['Ú}–ÏÜp(+|°aHše­ö)•X¹­¨P¿zjÐ$lV¯ñ}Tˆ¥3Ñ85z˜N1�q¤ë`ß ´7¼‹cLk8zf)ÕÍç­L1ŽŒYCÀ Õ°ÅÊU:4‹á¬ùTu@C³H±¡öXIÏ‹{DQ`õœ —¦°|Hž³” )Ö‹-ôîÓÇ�q8eVàX)j碒Ĭ/«]Ôùæ8Zƒæ²`¾X•É "‘ [þfl\´î øŸf”ô”wKÂ÷`àÜÎ=SŠØÝµ)�?QwЍqB„C’DY +Ü È& ',ÅËñÛ€�Ô>û>hØ8ƒ +ˆ*LõÆiD„ÆE`›Çxa�œbhFÀbÃvqø�¤Ò31_(Õ¤,‹QØIhò[^ûïæ"| 4�€G9›"�…d†Ä,¶æâóO]ì0îí†8µgŸŒ�öÑh,í5HB/Lˆ +B´H¹‹ÜƒÒù8TÙ ûá™L8š©úªå„£Óõ7…�:¬›àædž8/œX6Þ= eLîñÕ�3°QXš”sØæ”cQo–ÁìÍØ]~Jü6Á^Øh˜pb“) +4VyVƒO¾ÛR.Fx½ý´î†}“ kl ídÁIj@»®–ÎwVÿ*9"ܦ¸ :Ý)9ÊnSšZ‘•‰ö^£7fê•ñðsÛ oÓÄzÑŒ‘sº3ПY¤Óµ[hêžH†Y>ù¨°8d­uŸ{9Nb|3™ÿØOIÛ4/Þºl�ô+†Y<$¸‰�q)¾öª0¹F›AvIq<»Sè*Àч–Þ0?ÇÖpet~‘1nZ86Éth¡…La]é›9äÖa(ZÁ‹\€ØGìoO&bÓR +„\²–¯‹PhZ4q0ïØ.˜|hZj`F‚Ö"O£f5ã†Ý±¢„ÈùM†ŒM „sþP„oZ,P¸×^�~c®¨iA‡ëé`£i¡ÙT taº“¼Z8Bѳæ—ÁA~ ’µnZ.þ…&VŠ¡ÏRNkQÓR3z–]ûVÓÒS©�-iZæl«1Îé»JÂæ N/‹®r¦‡› ce¢24¼.MKX›XÎY²7-š…=¸7ß´0yrÓj7ß´hÞAx½ÕUBØ¿-9”™4„jôÁÒþ�XQÿ/lZ\l£Ë]é|MKk2º{ô6-s½ÔjZò}"#MK�[°þc�À”vÎ[DMK\ò½Y1 ÎVpÇì¦E[ã(É  6-MNyò‘ZºÀ³jÓr ü›:k6-„V{q‹G•›–Õ‘—ÏFÚ¦%¿²Ö�l`é„Ú´tWͪ+¶‰+Ãü�xÓBw€´1F•UÇl‚šæjÕ1á©{ÖfÛšïw]a?�›t“˜Û´ÌÒ˜û!ŠªkÓÒBÚ�̰ÉPËgunõ6$Ñ]è»VÌ:CÓ‚–XÐ:@ƒµRÒIsšÇ~5€ÆÂ¦ep@Éö¢ôƒFü½4#¼iɘŸ5£@—®tfΜúÝQfgcòâ+Æé5Ìñ˜³ö¢›–l:ìþÁ¡osV~¤ñNpµû~”æ¡ ×.ȊРÛÙ´Œx“oÒ¡vß$ l^“/MK72t±‘Ñ.Íþ™5-Ud… *ðq©]WÄ6Î"¡G–0ívøìGŸvéÞš„:®ii¥Ýθ {6-Þf iÓzj7pì5$”¦åg¾˜º­6SÓ‚AgîçŠoZœ„kÁÔ*íZÈV­ C¡][Çõk‰j—åƒÍ– +¶Ó?2í2;køšíkZҜƞû;íæ‘Q0nYìÈ¿ |AÞõ´Ž\ÖœÙÃ…ZÇy‡£v·ïTÀH‹k÷paú1š\»só¹p+b¥›–.G—͇/Í„mçRöEœñ)Ó²Þ¦¥uöŽŽh¤Ýºš ó +1ëÚ´4{#cô*¯]ÛÔ1L8e\»?¨·éY7–f4”d—u�f?íQÿ=õÓ®…z9¤¾i��Ûý´‰£žä÷Y Ýª§|3I¨ÓÌ“p­¦¥‹~.<ŽÒ® ÃSze¹ié‡m6�&ieæOÓ²üÐ/÷iAX¤oqŸhZ¬õüstkWN† 6 Ï·M»åjÁ—£˜‚T ±V€kÙ˲þTC(K»&rvþìÚÍÏX)%gÞƒiZ–$Û ~$di¬]$yIªÁÝÊc¤h÷̯ôñàyQÓ.â¢è¬ÎrÛ®ßÛX„ð.†q Íph©é%µi�°0u6rŠ©ŠYÔÏ9w(fé9Êaži·çšG'Dlý`YW@Ñír„�“ù»ûÒÒ´d?&SÓF, *×G‘¾�?# ¥¹’µkŠØ?»´T¼Z^îkÎÃôˆúáš�¡^áeÅsÐßʪ�¹Ùai�AM!�‰Z¯/0µ¡ª dõÞеƒÓëpw›Ÿ·k”SB*á‚]W_žuÕ´’]'‘&œ ¸g?(í:áâp¥¸f»îO“+ô�d”"ìó9Nfo×(Ǹˆy£îݲë[Ň5û³.JÎk ³ë˜P×ÇÔǃc|ŽÓˆ¾vÝÕ •[³ý ©}:_4`±AH+)ân»®fÀð'Òs¼Øuþ‰�µ…ª\|^v�L‚&Éy°g×ÕÕýmÿ™]¡N÷"N—,¼/Yæ¬ ŠH&ŽÊ®“�‰ò,BtôÙuf‡—Õ/ÁÈÁ™âÕb×÷Œ&3&v]\K6Y)ØnÎ×.»„²Ï> ”Q±Ê®›óÿ�ç÷`­mXŸ¿+}í:_r…:‘ö(C¸¡-±ãËžF]qê3šÇ!Ùõðùôl %mדˬm¼…6álW�@OdëÑÅÙõÎÚx¥h÷Z»îÐ è¹9„ü¯ôízz~VªóÄÙ’ånS£âP¦±]RsÌüÕ®«ý”¥Œ\HMÐ+}xy$^"±êä@–@njáÔ®K�U.<{ß®†�]�Èvé Yz@aUìz×`X÷?=ZØu19*ûÀ×RF~,¢g׉QG¿6¹]�nêM +!¶c âºQúv�ñæ<9±‘å*|t´·m§H–Á˜§ÉèÆ.IëB^0K¨‰·ò=Døä«^g±‰Ò®þR\ÏAMŒÝ‡á4Rn0)ƒt[�q°¬”“#Ìꜞ]÷B¡Šõ ]ÙuŸÏOÍ]å +möÉNR…h—¹‘­]w[yé[î´]‚ŠÈË”îüíq¤jåZˆjvñ£mn$ea +@PéÀ\ïÑGšTóÚ0#d<ÄBeAI4S +/žš©{j΀êDú@ _)›&¶ܬŇcÕò¦K•ü�?¢(q|>äµÌ ß[Vn¿N‹Ð÷D�ô�Vbß“Ju8K¤ÏJP,M²ÌérßcãHÉÐ>÷ +ßãÄÿæ™dßÓΪޯA5ßkiú€ˆEÌS©B¹ ÿøÒ™œ +x!7èúÑ6�—“Òˆ)ß¹f§ÞÅR´)°9Àa´˜ t>AÎH�Üh�W£úÞLäCÓÕ‰ïE«’ \)ç($‘ï…«óÎ÷ží¥#Ü%vÎÀÓË÷îÆI�ªÄÿhˆ&4I¬Jè­§°-ûX!þoÙ‰øž>FOeåñ=Í”Þ�‡ÌbßKÑí§dY‚Ì]E±¾g蜤~™qä{iÎñû*cÒ÷æÜ ‹ùR̈•˜!;ÔNAÇ÷,âóÂæ tƒ®ÂŽ˜Cì… c§îuÿ3²[ùµ?‘îa†<ù°²‚ð½ä�ƒ5}¾ [�Ðw`³c±ï!U¦§QTÀ÷J_ÁX0`"obßÛfcPÀœ±ïÍkxƒ"8æ{EñÄ«ö…/=ƒ ÷€�£ú¡ïÁ�û_gÖﲂÐ}ÏŽ\R¦¥ÜLf-prJÒâ{§¥Š°`Ûº}×3PìaÕ‚Q¾*ÒOÑ +óhÎzøEä=Gl4±rÙõ‡¡4P¾Š�MÙ ÒÁTQ"‰zlÄæ›õ!<æ!žoÛ^Û]]™�ß¹±°àŠ€ã�¶Ûå†ÿ( +ÄÖÝIQ†ø äÓ†Xñ;p#�bGÜAjãSVo@‘ +~ËÏc|`UåâDd6"£Í±Y2vú°BÕÐÆfý[,:Ѻž�Ðjþ¨T{–‹¡' p€ƒ¥›CPb[aœÂâM‹Ä2�Œa*pÊÐIÜæ8úJ D\çÕÈáø#w?³¿Òt8xàÑÄ^²o£cëº&6u¹ôÑ}Í \qá(R.Sÿ;úï-r÷ÚlæØâ30k;ì´�ú´ÓzNË�͘šZ_`+ÿ‹­Þ&àÍ9B8# Ù_¹Ã\îr +™> �MwZ”Û5z*–¤Î—¬KMHÿ•*=ô”¬0Ö÷£”kã(' «Ü†’ûeõ-¦™ÒªŸ_Ý�›–5:!°FW‡FCK°ß¼à"óñ»ö�®b£¿‘Å_qâÀü‡A(Rÿ¿µï8\ɉ +#½f*Wh,”ô{cÄý’¥XUy ž*¿j,¥SBÆ£v¥Ã€®)LQÆ$ËLx%|²+ÆYÖóŽÑŒ%_f�ø%š´ªÈ HˆRÔ3¹F0:WËÂ{ÐUSÂtm×ôÿãà6¡#®XGÅÅ r× ÖnœÞ™ÉÇÿ¦»SÏçÙ }¬›UpÌ%E{‘$ä6_î‹ñ¹?k�IüÉÃr´¢}Ö¬­å´-‡eUŸhO_o©lÁw´19Ý”´j\Æ»µÐ c—ÄPó!›*IÑ?¢`ô¶r¡0` W5Ó¡Ù¤?abÀágˆ•Uv—­xgœ3epÄr0 -Ê‘¹€…#œ¾×o¨y…÷Þ·ZÃØ0‰Ëdíø‹Fxˇÿ&¡åÅÅ]9ݲ®æ¦P6ß4H§ À’G(yº$¨�Ö|E�ñQ�•޾J]+“4ùþ +”'×ô^ž·U¢}ù�ó¸.„ÑRÎgÔ×)Ê~�Ã[u/Ùðç¥ÑçÉ` Xé†wÕÐQF7�jiÔ¢º_ƒ#üz`®Ï²QÒÂã‡ÛH¡o‰s{L ðd–Í ›� ©b¥82CGGÌ—ßß‚wáj Ú>­)=ç¼hpÇc¤ãaoß©ˆ ˆ�²úòaÍÜH‡Dd".�ÇFVSŠ™[lTI×!Ñ‚Vh`L áèî&E°ËóØ7öÁŸWÆfÂ!Ü+ŒðÙ�¬½ä±éáß{£éð�WJÕ´—7®íg+æ1KÌ¡[e&V†ÞÑ_…vbzãù}ô§;âÊq§L¦]NÑ«¶ÙPw¾3Œ¦ý� +!%ÆN’»·"ê�˜g!�E6QïÛŒáI‘0Жè€s#ë.0Œs¡£*i‹Ú«e¤<¡¥QX¥¿‡|´a¢pFIër¯Ð¨éß[¬?UûÑ#¶¬G9P�Îc¿–4Á¤”�)½¼d\™Ðü@åO€Ë€R¤×ÀãH@y®Mé VôºÌ´¢Ó˜Q�yãåù+`»!ÀŠÛ� Œ&ùv@¹*áòÌ”{)Óx= ¹}BJ¥ý�z+V^M³þ›ëýŒá>†íå„4ŽLáÁÛru è*ˆ® à�ŽYs•ÇÄ {G²å€·7=¢ ̪åÞŠ^ªQe$RJÌò®æ Þ2Çû^rs3`šJ×ýí .gbýè {X/i{C‡í¢GÄbÔ·ÑE%f¥M£_¢™�)HîÁ.>�‡ þ½}g©×Ã#YéK½‰� BÜ\Bûo>m\æc­e™]º»5^Bb4—§‰F°>Ÿ;¡í¥Q ±¤¸V°Õ%LpîöØÐŸµ÷7X@ +öYèùÌO LJÓ`dä+_•*Þ«,õ^Ÿ,ÔÈòÄâZs#A‘<¯U�ؼ¤&%ý(UPçg{÷�V›Ã'Ë€…ä0¯á]#%„ÐZ¦„ZSöNþæ·+1óªÌù“Žœ¸Úœö€¥ÿàáe/„¤ñ½Ôn9\Ì4° @.ÏOhA~e‰'FNQéÿ’-ÃêÇ€^­¹P òó„KÀ´ª£ëÿ.¤D•ÂRÊ:p55XøÝ“éh¿)N’�±¨C+$ìmF�ã(Cç¨k™p˜ÅŠYmmÕ &9h�wþ„rbp)ì–¸>• Rñ.*¸<â¿¡DæE D€,hÓatÚœÖeFK¸±ó6WO_51xÜ3DÓ8ã+9)ê™­âÐo.(ðŽŸ’åEw€Iõu”¾ »Y ûdr…„¢¾1ûÐv!À�m›E7] èMILEø=Ø Ðµ s2Ô+±m´sP)c!ÐJ®ª(�˜%,g�v¾ló…WÃÆ%67 I(—•ƒ�«ùš30Ÿˆ,öq@.KwîþZ�aŒ©á\ÍÔzÜ*4 +CðJûúßÑë‘*ýI3óªc4<ÕÐíFCkOÍÃkMo4öAlV8[4¿{¶¨Xq×…ÖÔ ¶+×ćä:qX©þo"gßos›Ç>žå +úã,ñ}ÈÛ"ˆJ¯7;DFäà©F÷³Y±Í­<|Oa|þZdV輸ªZ®U~Ð#¥¹«L®ÌhM44HÔû–nžC}‚À‘ÜÎÕÆÄ‚gbXí G?Q´ªÃìÂÅ}Ã�Wà‚›B@P×·ñ;}‹ž£Ülm]º¥)•¼‘F(ĆÚ¬Ú÷3ê�¦÷rµ ÿ3£ 2~JgÍÕœö0éëDꌅu,¶ízú@'O¼ª¨­‘–ÙÒ²`Î)2rƒdùÁVëþx´ýÆì°©K“ Ä1øyÓJ¢/³ÉF ^@Œ{?й^׬é +�Ñ©¯8�‡b¸sv ¨¦L¬€ŽÒûH:yªr³Üjÿ©ç 03dS0Nl0Æ4˜Q§õÔN8†›Xh$Á{ñ½dËbOùÄbã¢p±OqÆÅí"Âîëó&¢-g ŠœÇû]óÑöB–KAbë'!©Z8KBláJÁACEFÁL�pùeRÌø+ £vÎs£pÛâŸËsÝ%Æé(ÙѺ9ÉÈ+° HÃ}ךoG©r¥„'&ŒvS¦ 6¦UIŠ˜.§�ç + gJGza"Šz R)+¢Á¯Ç¡Â ´¥-WX«�1®™˜ÜyÉí0IÙÙ�¼Î„ âä)¸N@¼’¤ø7õÝpçE¥IõNF€Û´ƒºYb6ÞÑ{XÛ›Hc>LBdYpaÓcªÅ«¥U¬Än(‰®�݇ÚF$²SˆàX%bH¡Øû"ñi"D#l®„ƒ¥úkîn@¯?wÆ:!­Ïo> 9Óª3Ýà ÃÞ 8~É«I½°jPG®»×lõí¹{T¬Fç†ÁŒM$A¦™ÁAÁ Á÷Û›Úâ•Ã}áœj^mS Ìø¡ +Ä–ˆ€£¸z89�v~EN[ŠDfÖ°ÎÝxy”+Ø\íç´.ذ´»žl¸›£·?Z¸@·•,×n3Ä_Ïi7Izi#—ãˆÓh­uár/– M ØÜ!ÒÂkü¡ê#7ÉȽ€Ôep¬%—ê @Ãg—£oüäòÁí[0[OÎOT±'Šd�ˆ`ÇãKš0� ݧû!U¥þI†(+³ˆP¡Ò©ÿu)§¨4ΘÊ!,ŸH‡Ð‚†SíO1óˆg¿Ó‰ê¢)º{yÓÊõè60°[¶­sL…o€¡=OEï²|ítRYÃ@o˜™p¾M’†%ÚµŽè·˜Oû ¹S*‹%,TµÊ­1Äúk�Õô|² +r2sJ“\nØ.‰c?v–ë…Á×Ç <~D5Q£„†’n”!wF·Ÿe|áÔ ’ß�úÐÄ·swß{œ²ˆÆy*õ‚û6½VT’0A` +fÿ �úÑ�;J±Eì`¸ª>ÄN¶ïû”@ƒŸ–º‡zõ™»ÌûNó5i#/GZå> ,̈4fJ¢°çMÑ–E¿‘d€MX‘ˆŠä©íVš•_àyã¸ð¥�1C––åvlâË–nöbPÚ“‚ ãR´÷«wNt²²ß©û#9†ýÏëž>Ž^xnº¶dØC§‹�Ë(FYçlŸÍ¯ï±"HÜ…f°®•�Ðq31sK'à$¦¾5gý±.�@ TŸTW¹~r€6ÏÙÿ~”~&m"îÌ ´_úkš}Ù¦Ëk@´µ¸ú§�ኖú%÷%aꦎãc]8ïà>…>VgC$òÄÍP¨�Âăl™©¹¨�ÍSV¡B*Ós]á�£¯sî·KŠ”Hj¥§œö–Ôû) —à¨NýÁZ¢ ØÀ J¹ä]ˆ_Yhž+!ó¹ xÓër×äÓø PI¿ +ÿ½ŽJùå.aq³ª@ZoûPÂ]·´þ7™„Ôõ$˜ùÜÕØ…ik4þD#fç9æ. {`ºÿz>�âIO<‡i1覕I“‡4¦xS'•Í�ÚóP ý6¬N5œW‚;:šÖ7Ч§…án �„µËî‡oû#c™@•9¥p0 :ƒÜËS�ì˜'ÑïO„¸Œ8$ƒ¡én’†ôKf‹oÀ6Ëý“¨¿S×¼ÒÓŸºAõ¢°é`Îñ;)Ì–éÐ"�¸)sê­TC 1ÝèÆ±ÿÉNT™ ñc¶)¸ØÅ¢Yß ±mB©•šˆ)¬Æ7—¨¡/f‡´‰uW{³StlF&ô0ãj?“zÓÜÝ—Ïœÿ)CqØÉ%S§,dQ!ôE’„Öã‰dEBõœ ¦7œ«(ÎÑ^póä¶Ç} ÏRÙ +` {rkv"‚/&Çl„¯Ø <Ïp®èþ6¢–|_O•£ [+½=fGþnög� Ëxs�iv%JšÓ}áéw©kΓRw`�jÆž¢]ÊÍ}ðÑÖ<ü`paÊð*�¨ÙñXEûÆvèTØ€ÔRìnóãBì(�ð=/g *#ç¼%8·N�ˆYÖi5;9]iBjæ©–)dÝ‚IF»€‡m2mü°´^Ã,2gfD”دGÓê·÷óÝ­ˆ+j`gæú@Áãsù&׸/ãkyy²uò¥_g^ %m¬âä©ÚÛöq®>e¿cÿ¤€ŠPsФþ·c‹WpÕ¦\xª˜^¿åàÑÁc"> +�1d#‡S•�`EÚL[À–ìc®iU” +¬L!­ Iš§ÊŒ6„Ý�Ð +ìHƈ·ÙïÂub·\eÇ5ƒ‰&’ù…!dŸb©ÆÈù¨Ç¥¤Ü�‹¸f“üO+%v^D•Y÷™½�ÙñÓŠaÁ§ŽÖ ¾óɦŒ<ˆCWµÞ¨‹ïÐØ( +™ iœìnè•™ÄX Y�- ܺPþ;�_BZg/*O +:ÜÝ2q*öÔî®l3-YR˜U;AÇF!§ÃÔ茯ù&xWW™ÒÓò¶¡ªð°Îå�ó:r4_Nˆu»�;$HÜY€úNÔWÙ€JM·OÜÜ8:Øöæ‹5/Öœ”�ý¼+Ê&Áj#F¯Â`m¥ºqÎy¿õ´¢lÄœa…VØÎPñ ¥�ŽÐ͘/2uàÛ­ @ñD×ݨºj2µY?EUj9¹‰c)cB•%•sÓÜÝ(r…Ïu•Sȯ¸C¨á¢áO²F.xE’þǺFZΦ�NXd³°Œr~øa+i¼å€ÍJ—EX£Û'í‚w˜´|¼ž<_ýb0uíFɤɅ€lˆ? Ÿ+õŸ`8£döe!úµ3bŸÂ¡ãŸíoìuÎp¹×xíèkT…íü>ب–«U 6½oÐÃ$?vܲ ËmÝö8ûPlË�’a¥¾Ãjà˜…"Ì÷X‚ \|�6â€ÃiYrƒb!+¯x�aÅ|Ñsú‰à[)kÉ’º†·³|‡¸„g RVžãñ¬� žEÇ‘ ɉ¦dÙB§§¹ÇFWcZ'ÔÄi¡{�1Ô‰¨¯—Xƒ…ð¬DðÇ…´p;Ï—blØ’{°×àUÚXfØ´Âétå­R>•âý+þ†×˜§†¬´,f#'Fã#šùMG‰O7¼2jº+¬îõڥo2©FŽŠò *EtÚ(Ü ÛqÊ5ÕÇÁÃHY¶dÁ†9„Ç”À)$„L8ÊÿÖSļýˆ¸Ò¡Ó^¥NK|¯ß ¥óÚ²É2aˆk„í'Yî/#8 M�g¢"zÐP×S46MvGP�bèeòRˆÄÆ&dÍ�g¦=âÀØúpb.§/ ¦ú¼}xPhmæCvõ¾Â:Õw$T¹&  !<ÅœI0H‡ÿ†Ç€YûE”Å–âœÔbXûµÌBÛÂáÞ|ÖW&#Y¿u6öY.£P'’œáŒ^óKÇ™[Ò}·Í/,“Ž„\k(6ôB4â±Ç%’BdÉo=Q-­\™^ÜÀ’ò ¬˜4šŸL/Åoö˜ÙàFgªÒQ €Ó³•ØIk$XÙ�‚£ë6— ¬!Îú:¾TdÌp„›Ç¸T9$Ȳ–ô×G/#èâ(|“ó€bÅ‚¥!×8 K8 &»ÐÀ#yýÍy^w¥* ‰èZáYóÈÆ1cw®;½…ªP»n¥({V®YP`= +¾|NSí¸"éë¦!Á6ß\ì'“XÊyXÐ^�hsWÙž 4G¼Y4›7UD¬m,Qø Z +â àÆo4ž+P'rZfÚòwÍ̶H 0vš) {ª×h±(ƒ½ØŽô +Ïëøa-~UíÀLÀ adš2)ú­-úЯ�g:§wCÈîË _\ùцøX¸Å“(&rÿð;Þ½j¾ß„4V;Ë¢¼é3£SëÐsÛ9 Bðv•^âezP´½ÂWŽaˆ–‰mê(/Ä�’'¼ñ +W;ß—\Ô;Ū§[¶^Žè°òù<1z¸IK_+¤}äÁ-Hö¼|pT~F?0YDë�²§¿2ŒâO»5Ú°§Õ‡½yá +–+&¤Ðµ©JãŸ8Á>ŠU’=¶€í¤žEvz(ÉhsΠµ‡¿§€ƒG•KPÒæ2º={òw™U¨¯ô1�·äV¿²è%2‰.¯l¸É†›‰î®¦w‹ó/]$ +aYº]aã?�´8Ibÿ©g’­²ÇÒ+Ȳ:6¥šâI‚Ü0þ´2üÏVU–‡á^ ì›lO¿uˆÜ5³oéyïm–‡õ°Ïíï`¾ +3¸°Z8kí„dùóQH1ð®¬H0¤=< Bºíœç~ƒ½HQܪ?Ÿ�=t]×J¼ž|7¤ËØI©}-™9ökB!áæSŒp‚œ¹8 ^ •^£}‚㾈֭;F•²€E0qÃt¯„_`A0ö »ìhjiÜYw¸Î‚©aAuº†ÿz°XËᾑc3KÊ_­û~�’rÈh–1’ ·\ëŠNx“-·õ/ °ªH<¤žÅ¦¸¦è˜ÒÎÛ“ÆwŠl^©�Æã&ËDÚR¢lËÃqh×åéám×¶÷±õÀ=0›™ s§u{”ö¦u»ûá”vífC÷§“ñUˆz6Úð¢wËÃã|Úšò²[KîÍ× FZíjͺ]ÌÀñÑ\|ðc+hz‘¬üÁ×ìh‰û™Á Ù$¾X¬UëdGåôæjC¦ r:þ°¯LØ7zÅ««�²@lK'¡Û õ?V +ŠÜL&R½aXèV´V•Þ€Q×¾êSæ¤.WRYÌPô§¡n¢ã¡ã=Òl:µ¾�«J³ÁT|*0!‹œ¦¸(¨B¥È<®§Ñ3¨ÛÝèu±oŒ¾³6êÄ*@¶'s ·Šû¥u´b¼E9ËFÉ3!EÉH¡�ÐlK(À2ˆ6E_\«,d(^@ú'Lð¼�ô¡¡�{Q6Fb@´÷[Ö,±�>ãµ#m!U§p5� +vLö)€˜’Z›D†ìdÆ“[÷¶….&E6ç_×c¹C�Ñ£ÔsV“:#ž#åÍc5ü˜?†åM:YÕ‘C*Éé.°Â-Å­:FÈg뎒NZâ2½Á‡ð™1ã"'ùÅÍD«â©�q5ô‰šjp –o|…ËKÔ²s±:¾ù÷U<Ë/ÍUü¤%4(/AÕÉíW`€îw *ÐnöQÖz~ˆÙÚ±‘6jyÁÂô‚Ú•7-ÿ­‹"φå‡Ý@W³~øHÐ_€pâR¶C|„7#ã2ØŒ0ÚÜ� ܇$2YÒ¿·ÙDï”Fˆ~¬K íL€HÈ=þohKšQ�¤ÚŽ Q†Ò7×ÉÁ;ñ+R%$ä�v˜Üô#Â3š£*kì>¥ÿPèðÓÍøñé}l΂Å#«Ôî´©+„ÉÀ£Ú€­ƒôW@—PQvŒð¡Ï$X k¦¡€†M“uá´lIµ-„1ŠÃ®[�Ê *ýïüÙŠ1§×Ïü¸]l(É™Ê-HŽ +ÎÓÉ}:JЇÕwƒš€ºøe�ˆ¬qOHw^ÚW̃¦"YŒÐjð‚,kËTÔ§˜™q톇â�ùzU¹;C>óO<&î…v&§®[?Ht”æ;|ôWtÈ uîdí0!ø :ðüœ$ƒ*>2�S˜k‡Ýã V’Ó3®Ü,þ ½Éùšvš|‡$'•´�yöÕô@ PMªì’ÇS:l`ë”»âÛè¦ú7±†Û»�Ëoyñì§Oz!�òâ˜F?W¨ †°ªNÙºNY‰Ÿ€ÉήpƒHHíüÎ-ÜQ7`tÒÙB1ΔSH©yÞ�–>;Y©´Ù¤r”ãó}˜tR8îeE¯y'ü®+1¥Þ¾ÈÖ³Tް³÷ +çŽhké¥3ŽÉÚOÜbHAâ¨Ö|GV[Eè¿‚ +*ÜÓ-u¶ò‘ÜÖ ’kÓÂBõ"èâ–:”óFŠÚ˜‹åþÒ75¶øÝÎA …wÝâCi6 [_µÿRölë �•˯ q’AÁã  ®Õ "áÉ3uòÑp+cNd–;ÍJÇC'cJø•Ú²:ÞJ;"Ú­)'z͌ѧ* ÞÃÉšŠÁ¦£D5nÞ£¥P]>H}Û¡ï À Ú˜$ØÎ£âɯVßõkí!ÈÝ�\² R‰iç0Ìæù£"ñö*¿´šÐÓ‡‚Sö0…ÛÙp&ò~YÊØ0µJ4 +Š�%%Ê<~eTƒ[ +æk eÏ·,ÀÂ2\Üw^Û*ÒÀ±$šƒ9ÀBƒ‰gÕ7£ÜÇc pT»›!ôžx"¤ƒù¼K)ÿ^Hêβ»yÊ!QøMÙÍ{aÓjÏÍ]-Á4’¶U,ߪ‡ƒÏ}Ê¥")ôщþú8·ñ 0»@AÒÞˆ\êa¡jø·04þp36pXì+ífÏ éÔ.Žg8´“Ÿ@§•6[~{#Ý)‰¤rC­v‘ùøRÏiгEF²éEFP%Y›úàb–ÄSy:§=åèg¡ùÞ<â5‘0ÎŽÏ)Ü@ñ oô^Oñ¬w¤·(ÞÎÉì—Ãî«/½ PN™NâB9á.öÌ™ÃuÜ8òl¬gÃ7 +õÌÜ”cÇNõìŒq1íFš3wìÜ–¶§}H§øä¦˜·Õì‚Ø›?“¹–HIÿúœOrÏœƒŒ�DuÒšM¸xe$8ñpô¥ ÒWL�µÙÚãK �ÚÛ›48ÂN�øÜ"fÔá×ÐÚ³±¹�S—S|xÚÊbœþÅœ[˳nrAÓ‰ÔÖŸc|¾kŸœY¤Ì™®"–¡J0…[²A“rÌ •rqlºZ«Ùd&«[ºÇ�üS8¸›´êJ¡ÀVç]¶msXIIýyôÔYÓ�ŠeêÜΛ§0wªÅûXõç´v§EAÿžªÉfuÞ’à9I SÕл‡êŸžŽG½Í4l½O"4èÓOHó¢‡ì‘Hþ$¤ .à �ÐïV KÇ»2j ŽIŠü@fÄÑÂsQE ¹|÷"¦£ÙGIÓ_ÃÝEv­M³û +„áš/x`š´´šT´ijé¨vAhWÍúøáaè~³Ñ…8¦½äî„)x¶%å“�«tA¸RÙĺ�IjGI�–î¬þà•>âíòàjÚ©޵Æp½4jœÄ<‚ćÐOç嶺XŠjµ‚J�ráÍK’Œe녋¼ëõ¶J7ÞØë¬Tƒé2Ó[bÊ×Èèÿ>Üí¹bÀ4éãºUÏ=ÓM?F}\M¬Ç!ºBæˆ�¨GssqêµlCÖDåð-6ù8uÄO\›Žâ ÏÓ˃~vÉ÷£+Ó„’£km¹ÂøXàQÖ1¸)Î;Ìʶšõ‡Û"ð;eãœð6 +4Dм~%üDEÊå“éLo|sšªˆû–Ç(fnþ¤ž?ûæa¿\Ûù {0_!e¹õ�mOM2ùçlÔéKïÎ<–ˆ¾&RœÇ´s.Nºsdik%Ë–wƒ,@£ûÌÍlƒN÷5äóáMžVÛ2[ìá •–ƒˆ ëý¤Ýíª­þì?¯³‰ øþD3Ê,·ÁÅñ­CRSã¨ZuMÅAСF{Ùâ‹™Ûå©¶2”³aú}V™U? ÆY™º9ÜêQ�ʘEdQ�ÍP™›Ê�`$–):Áɵ�Ee,ºáÜzB¤Ìƒ%ñÛH€¦Ì«Xe¤=ûUµw›dO&+MÃLûˆ¤Œf*ŽGù_Ê\ð'"†ßäq‡Å<"”É^^Sã`“(#~š¢"²áãÅ–½P&؈$„îá•þ,73þ§Íž÷Ö«3�RÐh]‹n²ô«À«RM>×Sq0Á-…'“Ã,ŽÇ!æE&Á’‡ðFdl5fªQ„^d4_+T£`4”óyýC,PÞ¦fÒŸå…ƒaƒŠüwF~—pd£LË3_ýÛ"µ’à›f@|¯‚&�Ês¢‹Ña!ñjb^oh Éákœˆrk,³ÑQmí �¦±ý Ãgd›Cºí¨¼¡‘+í1Ï_W¤€Hw야F*{a3¶Y�¹Ü"”—x +.K;ÈŽ“-Û—úº$)äI§åE…v¨K3�>”¨ç¹5ojã“.tB´òƳ€1mW #„T…àý,zÝ„Ï çéI�¡jó`~ƒfžŒ ¬ð£tDÎ�òÄr†Ê4pü¦Çt-kóîÜm±SàUtéi¸üIRÒ63‰?ÉÓ†RM“fÖÞÇ {®iÛl/«+ºGwYMmÅI‚lÍŒfãQý_c”í»nJT5×>¯ç—å²C‹R õ@^•"P_†ÿ@°©ûj3ÿgs3EÒ*ÃgÅXè4ìzak¾ ‡­ÑçÁ‘Þû;à!îD?²M’í1p¸ó¡&; +n÷0)QÞÁ;Ð1Y m\­ nµlˆ„Ö‰Ðk˜ÿ´’-¢êà%ùÊóú+mVTîh)¯;Õ¯¾ix©�BÕ"på Ö;¡lkrg¿Ï)£ÅÔNæéü¸ÛaBšgu–DÉq2Ù’û¾ÒHË3#ºˆ%÷âxD“�LbÈäL\7 Îê`#{ ÿŠ›rÆ‘ÃëèP!\„ÂKþ6lÒ ÕÙ䂲È2Á Å -¬°ÁD'Ý™Y»_ÄÓ¹¶»KJó„ÑѦ ª1ËŠ­ÔL*ØYÀ€Ü�´§ÏÆ¡Ë.ãúк«Â‘»x’_´EÇ÷ŒYnü¨¤Ùw•á¾6÷(6Œp˜iØC·¬Y0>‹æê2ãçEŸ¸šlÎj6ƒ ª´¬i !™öHO;- ©\jrëz)÷¡–£åX¾[�ÃZaßùýÖQ)ÿ ›,ÓTšiZ6¿/¿ôÏ8§Zˆ#WÊŒPÖ,eÈãØñåO5OBö!º0�%K/ðNÁFÛÓ¬ +l¿+뀯&)²q0%ÿY|‚7 gâ\ÆØË÷ÃÒÀ` ýXgá&Ú4cÏ­A¯Új2¥ÇŠ�+G¦†t¦Tw0[}Œæ@ñ.ìsäabî.÷‹)46ž¹¼ÁW·ƒ²ãÌ»Ç,BÜw—†åñ‹—^EŸë:`ay!ÌÓµÔ®ü.]ë.¿b¼åÞ$’–ùÌñš—ó –kÍßôzÈ' fBG–ªzÏQ¥ãÈdÐû?‰ $ÂDÿÒkáá#rTà£(ã�<ö^ŽPIПÌÓXêAêÇ®)sEB¨æú)›·9Eí/¯`>¶D)s½ÁãªÍ.ëoÂ_@ŸD°LW~6yù*BS:¼9Tˈ̣÷¿ÅÛ@¬UЊ,Ñài‡Œ8ÍymÈ[“Ë­—±ºÇÍÉtÚi: hJÇL~'øôŸû#Ó+P['rt—*¹+-g#†1rfŠyÎÌf2ÿc ¼A˜·âAUÿŽŽ„aP£ÒÚk.¼©Ñ] 8çoàpÇ �ä`ðëp3äRli[�5õ0ƒ/—Ä”«›o$a¬/�ñcQEÂPmj*9Ã\šm¿Ñ´0o¨¦Íºl +$‹™B:ÙeI‹&ˆž2æÿRõ¥�«]`$vH²€ ŠÃ( Áìü÷$ÆD›1ן»»lÜ18@4X�R‡® Ò¹Æ\©æ“çÄ{kÜzÇÕ«{&ÁÎÝ`-‘Íöȱ<¦w}ÄhLÏqñEÕàÒiÉY>ÖXÿƒ–ø†Ê^Ìok…m)‰ô:Œóyàñ^²¯Òi¬7}*J¹3ç³24¨üDúÁ"+BL²l·ôÛZ ú ‚Y1±‰¨ÌŒ©#èxæ>+\c5éæéL…àÇT4+Ïb +/¤6,±w”ldÛýèœõР׬�Ü/ïìïˆiòVƒ ähç¾ÖO×TbþÎjÄA梌WM¬¿¨%[žö!^A6í-‘"7ô!Yîýõ� +�ÄYdßêdYcR—Wœ‡‰ ªšl +ªL ‚; + ]Žd8 :=—)ú*D\ÎÕ€[éù†˜ø6%`hÈ͘AƒNäQ¥ï<›ˆ£ŒŠÎµ^ÉÎF6êUçñKk! ÌêbAé-µ®{k03‚5°rS$ÅK ¹ôdÄ£„ØÞåÓ—òømx’†-àÙ¶W7.ðÂYI7@·Ù¢-²H$Á5Xhó7ÔÂY 1¤@MåM¶fiC�“ãè•öÑ–ICÆ“ýR]ìnm‚3RTï_(c„„âÖ�s#€¹”–Iª1Ð-1ÿFÃK1¥˜Ï{”ækûëîg‚Ʀþ½A(*‰"v±õƒÚµ½�oýÔ kZ¿ýà +ûi›µÞpÿ*¡´èy*?›$ �ƒ‚Šç#sOÏ:v?Àõ;÷8é)ù¸þ^n*êûûÞ|ƒêÆ“7ßÔò»yNÎcÔS·k®ŸÚY�ä¹_f²}´÷X©~ã¡Bûd¿àT?N è? ¨ðû¬GþíþÞŸ×ö"úõX"ïØøèÇ÷c6³gÇyRøî­ºoñúÝ1>øÒ—TFTl„ßµÎÝ�AÞ ³ˆÞ¡+úáõÃ0Õ\Íë7C”)J"­�/¯î¼~Eÿ ÜBáÓè‡r—H?6å=¶.> rôsÛ¼7·‘]–½MàêkžëõƒîËîQ/¤YM×A'M_Ú†îÎi¤0ý Þ7öïë§xä2öêë÷'NÓKëô;½òzú‘}ø}QÊŸS«ðž4 Gý¬¨ù¬Óï<.ä~AþÜäøs˜äL &5E?`Š‚ÀûîÔb•?ÊKÓŸwš· è£/ /Í­ü™†îTTêdÐd'25g›^ó=ý(Ü6l› kò2ðƒÐbŒåÏÒã—rl» =š¸ŸU¿³üqÙíɰŠ(½?<”‚º©dbÒ?kù€(zÜ0 Òòf€P)}»åÏ2Ú½£ÉQ»Rßyú)q:Ín…ØhEÜ/�»¯»üå¤Sb#ù”oèåüÆËŸÕúŽô±„•:—Ì¿ü µ*Ä©;ü4¯£_Áüe !>æ�ôBŒó7C¸³¿€¡×¸ŸAµõAmòI1–VëS‚v@0ºü:æoŽ�ûÍÙ6�Œ|NæÏŠfré6\ü_æÏ"É®Ùüþp�ßÉ#¿›ùsŒ0žOÙ7P¡æ#ãó33·rΛŸ9“‡ÚüÁÖÓ¯_<‚e`§œÓìyw�XÊæ2¦ù³Ÿéé§Ñª ¾²>ç àe"·ù £æ/¿�L'p F^¼°e3_S�›ëUÚüAaÍŸ)窇�¸wj!ØšiÕT½ÅP¢Œ^:Ï*y¿[w¤MÆÃ2ÍTÏ8§,Ñ• Ðtö3¹«™E_¼‘ÞïÛü<ýˆpdtdް‡9 ?$~ +¢W¾ž~zàðKûѰŠŸ~×ËX8‡"¨7?B#ý7Ë̓Âr\çeOøWf9£m®ˆÞ ^%çÊæ2‡\Âÿ"ðÃ~û´á”­™'©]*g%ðƒ ËóG”‰¤Ë˜G ’2{M~xz?mÁPMûåª�½®Û^Ÿÿbƽ$FËŸc¯Jÿç9ZuzZCïKóZÚ ûá÷¢Ùýw—õ˜ã½@à‹°ÎüV$…›ð¶¹�ÀÖŸP´Z¯ƒµB¾@ëù˜¥+ØYû¹³�¥¡»°Nû«°Ÿ{Ó �„® ˆ�U¡ÇäWi©‡ÎU†¤NàwÂa?ÏÀF±ßìt~)D®A~JÒÎñ—O®ã'öã �¸ÇÐ-ä4¤ÍÄH±ŸÍbâÇÑ­yÍ?Õ¿¸¾ÛÄŸoõøA~î5¢» /ýÄ_n;•û@"�ðBKÓ[�(þ,ÀOৈ øË/òذ¿¼ûç9æGáH馸Ëÿ�Òí1 ™ñvý òi,PbÃ_} $ý*þ,<⥟(öÇÝ4„~ÅŸ½>ø){t�~Xó€A&ì 5ÃÛü…¥Ãw\JD¸(è?,²Û~&Çþ¸±6�fëkCRBö—o§ß75(ÆÁ~O´;ón•㽯‡ þ ;;�è|Š4øÙ¿9êôƒîàS˜ÅC Â¸ÑòÃø›ûe³`~j[ –?rmÁòð4èï4ûç}‘†L`ö7û: ,ÌåæOqÍþò+þÈo¿ò71B?Gi.Ùèèæ/,v¯Ü +ŸåUb3¸ƒ§{YFø¨9äMoþZbÊ‹#½C8û›‰„0h@‡ÊøåÚ_¾ðÛžì@iÛeÅ·]¬;̧s:ý§;´¿™E6†v˜³W¤ýÍ2¿AÄr”s¨WÂÙ0ލ#ÖÓþ8�/‘å]�Ó¢¾›ðÀL”ÍJ>j‚Úþ»�xÇŸ]’£F�é¿3VíÏ‘ÆäW­,öÛ­–…7Bë1�5W¬F dkÖ:TûãHí ÄÝÚŸµ7âH'BÁ0kF]Ô 4¯ý¹ÙXüs–Å„Y,�Åm[Î2ÿQœ?… 2çN?^yÞ£pío¦sÈ@£œ,›‡ŒÚ€œDaYÄlu° à}ü™nc´ý�~rܾœ÷Ê.?½c„á‹å„Lª�@ b¸ˆž¢Š6—$eÏÅÐÀ*îëíaäAd<öØ·ˆE(""‘ðØvÈ0—�ÄÌxfƒ¾u Ê8½Þ¶h«]uÕ¨FUŠªª­Îá +�F<±XPDHló¼m+WHÓæÐA ¤DL}í +µ]Û¶gzÐa#."”u#˼m¾�ÜÉf ?ä»Á¾ªñæ³ÈÌ8™fQv¹¼p€4I(eÒLÑ$ $5!ŽaÄ$¤ôˆm‹Ø"£¹~ÞFÿâÿóÿð–ŠÿO<‘x õÔ›ÒÿÁ/<ÿß"Bçÿxôg¿è{s0O<ÏŸ¯¿ïçÒß. ?ëÂI’Á +d'ˆD£H$"9�Vt±XAEDDDDD‘�èD'¢!ƒn�ŶX,¶Å¶mÛ¶m²m¶mŒã¸­b¨O )XIÆ`Ä×¶m;•ÚöÛÚ +ítÚ|M5@†Í æ¥O'jªÃ°jhhˆ4þøµOóÍëŸ Íg>44Có!Óܦ)�Œð¼T¢! Í`¢Í B¤š: ÍP�WM�¬ å"&Æ:ÅÖb²Ò> â-O¬a í, ±T꡵mÛvmÛöL»¶mÛ¶ †ˆ´­ÈˆˆŒˆTDDdDä"""""""""YMDON +0,DlrV M%±DÒ‡_,D9N�;:¡£?�;.›î¸‹NÍÖÂD($ÉðÜk=Í"]tâDW´6óÇ� kxÂÎ{ÜñÀS�;@}–‘¸ÌJ [Îþ2Uj“Æ÷7àµúyqQNý–úzi Œ ‘X6õM¯ÿæÃ².rK9pÖhF6zx»7Tãè´ËÈzÌmÑ) +’,ðôÀ3(XäÀX3Î\’5p553h.‡ô$!€ '©)^X; ¾tÙ“ ûÔO¿,t+‡ÐI†.&ÃCªª/p5ß,sÂF1ôÔ`²±¸ŸC3oÁ }Š·€¤11jÑèÞí1Ï­Â`¼�¡{¢¹À);afÏá8¹§žéU¡�!§kx�|  ÆÈ…ý«qÉœ»wÙ=ñ°XOÑ.hæÂ擞\í›Ó9 +çæ€E3 kbàV¬¤õèÅDÕ±°­½ŠPvçÉú8;r<µ�­Ôü£å{ÞÉÉ!é½Túv!&f³]TE…ä c)aæwV³‰HÚ‹�3äÂBÿŒ.:úðŒ�-�C‰ˆƒ äN­NÎ%»™éfôË�í6%ðŽÇ ÔDšÏЦ ´“ì’w'ü‘±¹CODïI‘bW'o�¡?üfÚ´µ)Xu³øáÀ¬ 8{ ü1íËæ>/‡4€¾g =™SߊÁ»aÿð0´Ò°„!�>F9—½è7p¼�|�½-Tïxø‚bQÊ�Bš)Q–qÔÝp {eŠjô3¯octÌ UÒT“Žè‚UX#—æ²ßYijR ýáwÃ>KÒÀ´ô6íúž[8ÇR/¨<ÜñÁÞƒS=•3<^ÈÌS‘%`Ê$~žHAäÚè Ù´cC•b’¾MÏÒõ”ݨY^ƒ,·ÞÙb4˜�á\ÐÄÄ%¢Œd|b�˜ÅÝä]ÇXê´ =zk: OôSœðšÕ‡ï[î‡�¤\ó�4t,;IG•-Λ¯+¢BLá"Qb¡`¤�ÄëÂ"îÃãÛZ‰æèVT³3%B¥™¡8€AíéûÕB¿3]?¼ÑåuVhºF’PKudÁà&?<ÁÂ97BÖ:Sì)�SÐGmEG5ÅúfqyuŒ)>íÌç'wgϹBŠêÃñ¸~l€@Ï2Xyô…Ç B”7]µŸ2КÛÒNÖ½ØC®~J�a\1{2–+¸–²}ÌÙìÊ &Èý¼Š/ƒ`ìJû´ŠÁq­ä7¥¹¦R Š?: d4åBzHòb ì6îj ¾5!2vzì¶ú(l u«¸:݉ŒÅÂ�ó-…­G`#¾Ž[ˆ&ù!>¼Iß]Qu³úX:¹¢·’aQXz:ÃÙªap|N!ÂzõÓ„»´xùeмƒo¬yþëíë€AjÙàF)Œë¯SîÒ”’o�y Èþ×q×-“Û 9ÿ`’FLǦá±Ê1 ž÷xÇAîIîdd®:»¢…²÷¶Ð…T9$ŠW½5vÊ=fW|«‚E'gRò@äÝY!Qä‘àü˜úá7š-åFQ×aÙ;8!Rõ ç?¶Ñ”Ͷ?@¾"ƒjX&”ó×e´>ÅÍÖØƒbñÂuoE”{Iq´ˆMÆŠäRU€mÕ›Ò¬»bÕa�q"—–†¨­� '—\Ê»K1¨Q+o%¬eŸ‘¶Á¹-—%6¬0*Ð}ÿëë…‚qõ¤+ñœ23åNW0,…gÓ�ÐÈXo'¯¯£d@-{¶;<Ÿzw>û.ó—¹wŽ ­¡“É2› ZéN—€êóÚÀµgÍ˦ u+]$�Σ›ûoa=ø–‘ÿEM G0ÇWi…A×µÈÚ*Ø€¬«Ug+þ*'À’™cYÓ[žI“²F|Þ]Aó´‹Ý.Å åNòÖÐ(ä^ž;«”X`š…ÍV,TÕb(¶t¹©¿"EË l¾ÄÇPhÙzFØÆ°R¾ªk|D³dúÓÊÏ@â.Ÿ\ZÌ;²îl<ŽY9j†²]†¤jš.ÒàŸJ¸tˆ.°'ÿ¼ æ/h²PôTb�vcÂ@º„fЍ’OžÊaÆ€AËU¢,sƒMï!††=R‹‡ÐÎI¶S)ž…õæfVþPS!e:p:æö³ÙyÅfó‚Iz^0µ .�ËÞr- µ™î“�ÐU#1€»ª¶J×-â—ß}}Ë<"51 °ÈÔ!¤úTÁšþÖÐ,&$Xâ쾩ó)�ñ¹?¤Ü˜¤@^~¾ýu ׉]Ë©�û™ øè(!ÍaŠUPD¢®Uf:÷YT,½Ç…Y.©�œ1A®N5é-‚upÒ?Œ·X¼œ*MÜŽm†2[/žÉ‚Õ,¡åy¢Þ2WyÚÊù1£Óù-“æèJ‚g&…´À©bš 2‘0Êî?oàG%b H_!ø3÷ªþÓFJé”f=.‡ì>ªîIñ T–t—¸˜ÇBaÍ.ÿ]ÞãsüÄœµ—ôæŽVκgç´ŒBeÑ–.Ûéd³„[ÿZKØðdn‡<ÑŒý…»È±,/i¡}Ýí¨ã-2\ 0´t�FŨ¹~S¢Ò¸-²üX§ôZ©q©ZAÎÌnÚí�ð¾©W-Ï ×Àæÿ' ËÞ;Ìs÷é•p^ýË.yÈ–W’1[˾�-!ž�4¿�|d½ Wéî…xEQk +ÄÉqW‘Á Uðá3ËnÉÀ�ða­„üo-›%Ýa½ Ì—íÀl£KÜb>̲b'E†­©]š[Œ¿RÀ2ÀPüw—��ƒI4+g¶ã6“&/…¨† O¡Ä.ð�úE´J£7SCoI~ôøŽRÏœ'޽¬i½‹RZ|¼'ÈEÒí÷Píd¾��Ö lˆNX¢hØ—WKC±ËѰ–ƒï.ÃrÀu<5¦Ö±%…›5üIYÔ÷º»J§C&¹5¸�A¨ú.Þy›Ð°r*ø±û¯E#…¾o)^dÃ&‡.¹NÞÄ +²&O�MÒ3ío ²@‰qþÄjçÊ“KSt¹5”)'÷€áD˜ƒœ‘;þ·|+†5JEÀ¡ ¬+žkõ)¬�µÜTI:lÿbwp±¤PÙ7�:w˜£Äâ`á·×Ë”çíKª=n,_ÑåÈ{O‹Pä�‰áI‰8`5õXr_¤hC(ÒLˆ€O-–Ô"Æ#‚Œj,ùšgL˜`FÃñt©ÀþMïGÉRÀXŸµ ��±�wR3?»Ä’Uªê=ºõ�%‹é¿W�J ~·QA�hm±ø°dÇ”öŽË”x,)ôØX¶ êr\ K2Ž�‚�%”YÛ:áN8…�t€ xbIÉÿ[N ²Àþ”a 3ã~/&uK.Ž‚K}R×K®;f ÌÖ‘߬F‰ÉS²êlI?äˆ\7,Ùè0Õ’½ôÍ'TØnf˜¼#³Ç‹5¬—C¶ûÜ�§ÌwÀ-;@!¦ä=+6iØC!ä«€JÍÓmíuš5ý…ØÐr5­žÒÕU¿‹gÙ„1š…¾ý:R|øÝ»~��×–ZêiVܪ×!f9{Oš®o ¾pbnU¤h|Ç(0mÞ¹£ELUäK�åì‚O†¤¨¸ºg}Q"ErÖ¬6É +KŠhšþ´‹TF¬¥ŒÚ玈)†Ím^Qâ½Üv—R\8wÄѸ~l=nØf ¥ˆ KOˆêx,Emà’ éK•âÊ4¸�ÊYžÂ6W€ÎY1{’bT”°¨%*QšHqæðAåà’´c„ƒ.4gÜÍK ê7â­�¾9*ÑFÆnR}aKÞ�®Ù€ä2fŽ“"ÌÆÎ�0ÄväSÑc�Rœ�—[õKÀáSSŠy�1;À@¶ze)’¢A7Ÿ‚›þq:'E#àU!àdQV»={½PœµLÆDWJ àK±ž'ecÓH&:�71™P›4{%ÄËÛxÄ]¸=XQ˜®Z3f_ó =ÂS+cá-<)F#Ë £©9Î~,�NÆÃÌò=?ààñoª„†sí¯FSWÈ´%Å41Ð=p U#†Jáy¼�ñæ™Ö~¡gÞxo?)ªA'‡ÊpÄ}’íúD21i á’,kXÑ?‰”¬ÆJõ|•Öµi³*µgÁ»â‡Z3ÞŸ,�®VtÛÖB$1 ¼)_A•t �=+‹ÂŠP¥î¬ -x鄱ñ€××qíe"ï%U”&¦[w�sŽš¹ÿGD+®q�È—W¥/Êg{N6úoŒ‚ÒÞV¤•÷@eRœYbRð ;«#ÑQðÊþnŒ0‡–ûû¤™™.Ÿ#Näí¶›©ø/yÉ÷rß>�`‚#¼&ï3‘wHs�úöL¦É•A Tßótº U”Î/j¹‡µV T£Zc å$_9âÈß5a”8¾ ¡+êw»w‚´(Ôê•nàÍkéoŠ€õ^ðL‹ð³O8Fº™¹UôXVlƒã¤=»ÀRßd�gKJ[*›WØR·ºcéÝš¼�ŒuB< µð�ޱ€kë$õ§ãž­AD ¢Sn’ZI$;ú�cª#h½Åñ8dÑ ÌÍ/¢[[4…â¨p&BV+j$LÖõ1ÕŸ›FQJRÜ ðihB‘‚½ãºuG'á+<­Ö>âÞ­Q�6Oª$0sUJP\.¦Ck“^Ud�¥¬3Ì4^â!°+Iò]fìã¼Ö5�ðûzra�?•s^gJçÂíŽÙQq íD÷ âTÊK÷_Øã<÷v¥Nî¢JCÁtN³3`Áwº€øƒ(¦ª£ö*TDj´ý¦½Øä3ô &û+aƉ4‡QÑâ-RK¡¥"):€îœ\œ ¦1iÎÀêQISÿá¨Ñùº#šêlø[ø¨mâNÉà *ì0Ìyq­\qËt :ð&ú 2¯"{©æ�Á/q«a�2òt"¥Nä‡Á碂*�ã mîÝ‚PâîL#jÛ»]|t‡”®D"1 K�œ‡u2Â^�³ +€Qs—}c1úòýC[Qî—3®²Äd„ôØ}n B0ñú]¶Ì ã¿9EL}åçNC¨@³ˆ>ÁVò¿­{hâ¿쾇¢t$|pt$؎ǾNÊ’3ÈxÍÚšå‚Í,©�IË�$†Ø8xÆMTîÔÏÏs»9›íWXdÿ§@(^��vG&á�Ûè{»r‰0ã‘Ð +g‡ óËJì¿z.ÃÇõéævÐØ@éÅq%„ã¬Ï󩯍5�9²òÏ^³;aИ+–i0J¡£ p¥½‡Ö~Œ‘d�}•Ú:¥ç@a`rý_8�9x)ô¾­ÍnfzàÔz@Õ™pQ€ ¯@ç»´¹Æ·ø|KW8ÒÒQö1Ȫ9‰X˜ÑÚ±â5¶¯äwŒÞUŸ—ÀÍñ¨·X¯üøˆƒi¨¦Â0˜aË ¦¥­…EN$ÄbþÖŠ¿›bŒ¦Óz"¦¤ä÷—bŠþ²F븤Êà<¥ð÷úbl¢³WÜô¬R) ÄNc�ÿ�Š£| +älNO£y±[Ю�ªé¢îéîµO!áì z ¶ýM?nŒ5TçüÎ#*unF +Èâ<��Žu`5nzâšB1Áî ±æv›­Ÿ½wVBkBSÏoÙTÄ(g>6¦tVé©aOUSîù»±l‚eÞ OgŠfÁÔˆg‘žË*Ùyeeu+θœ{ÝMÍçë×¢‚˜·–¯ð_%íÒž §A_9Å##}q2��Â!¦Ûm¯³¡q{GÅ겦Ÿþ̱Hʦdžù,§V G)üý>´„Å,n¬\‘"þ“2Ê9yB–Ø5�Æ ­Wäq”¯§ €Ýá +@Û·µÝ¥J c¬ÌÎ u›„¯6öݖȲ=`�Ôãˆùòz�«Z‚оåRJÑÓ2µ~Ú¥ññ4|h=8 +ýdÇd�ñS +³¥ëoh] ÒH[ÐéðØ%¾SŠ>+nnXrÇe‰üž·7ÂÝ-��2»¿ö �[²çÜ›]# êý ¦ˆ²²„Š–Vñ~L\™WÁÛ⛯e£©E*ÁE¹€]~t §·,C[L*ÐtHãê»,ð%¨‡¢Þ;'8OÒ|q„¢£×‡é ê°È­ ;_MÛí©<äÓ1�Çô�hIßí¤x=· ¸;ÏP*¦cGõ¿&ôïèèiôû;Y/‚•g_›X�Qo„T}6cL:, þx^[UsDÉeL5ûTÃóe ³(g1lf[n—Ã%b“™ 9G³vWØEt6QA Üo2È· ‹81ìÄñ�!v@7»QD¥€SJ4³ÝTí4c|�;ð›uEÖèö˜"è°YƒøK%¤£Â�áÈò™ÅŸ@FØ6Øx®ÛÖØD´t»kåâ„Ζ` ô<,„]¬%ל`(Y͸¦§7ÛqkÄàlUÜô]ùÚ.Q 'Ÿ:$ÁP„D�9Ÿa8©ƒCúie{2ͺ´_Ä,TZäçu+”:­cü©<1¤6<�åcÐÊV¢À“êã~¦#�ã%è¿O4¹£7^ÐìèzÝ^ÌâwlÌ 0¡ñùg›RþS�ß"´+$'ºQ2a@œ·‡#Rxïþr[ÑÝ`¼¼T¨€ÒúXãöÊÃ+5dš‹0?µÉE…¯€wT,¼©î’`%�u)—Qů+’3?œ¼³ .|±ÞÚ¯­q®wÙ¬žLZ&áXl’<îT*ÐF¾ÿ·P� UäÝI­$>W?3@*�ƒ3HÔºIÀMÇ%àØDt9ÚZÑðFYSfp¤Õ•ï�‘�3»FƒÔ 0‡î¸Ч+*ͰÜþ×�J›JñL‹QZieY<ͧâyЬ×ò+ãŽ�B½â0ío¬e�±,ÝÍ?Ú„<žñßS)Ë257V-®¦ê xv&(HMÔìyÆÁà~?÷{¤ô g©I$ÀµUêVk!/àn@C¼ÿè¥N8É;—$äá +3 $۴˳­—Ô(‘”ñò\ 2 ­áU¾ˆ·äP ø,:¦Sâ£eíÏ‘/$Vâî;l¨fÁà AXL­_²ŽU±¯B3E8ÚøHÓ^æ™YÖ†±–IŸeË'ÜHqE».ŸãS'ÈYñÔÁi©¤ÿkæä‹¸ßM|E«_lþ@µñ^‘&Ë”ä>¯rOÑ +ñ�}th¨æà+Z™‘˹’æd#`6býCóˆ{‚Ô‘ÐLJ ²¬¡ fÅ… +L@±!¨qE¦ãjNK?]¢Q�hîl#|·ïkÒ$fЇ6Úd>]�a®:$4=ƒÍO«;|R†_LÆ�¶:Rzí38 #挀pJ‘PEwÁdyÁJΰ1£x>/¸"È鹦»¼�ÜI‘´KÎs.ª˜Šõ’îK9Ñk•9RMe-±:á C²bJ³)툧üvçz6×Kˆ³Vj�@ÊX¢›¬râ>£fÞDÊЬMÐ@@a›+U·!öiýÇbo"ÚÏ#\&éïó±˜Ó° Cÿ.y¦S,]H1¬ÐÏ‹Xavˆ Ðü¢Ødä^ `ÉÌQ^ìxÉ%˜R;^ì¼·.\«khh‰òuù-Pª¾¡q‡¼îM¤|`Уv¬FËÞ`)oÍxqB¿¥ÞÜ}µ²È!Y£3¹«IÀ1ê� EX:�f/¼nº¢]Pâ™vcQ%›¡péì[jé»ÂHÔf�&^REšüífcv0?˃=3ùfÈM”—P5¦­^}Hæý´îtáoÑ]MD»èò l{P÷ LKéOêBr?²zÝuì2”.¶z_�xB³cÅÖ=éSßÕÌÞ�Xðc¿Î’N‡‡ÒW53…½ê<*p¢ó¶S ÐÓyÌJŒ¦òeMVî;®f¯‡>ï†Öm’çsr¯°`t'œŸëTWz1ÓŽ‚rɰ¥e•VÁ€VB«ã˜ëîmÙ½.Û�F„²!‘í�í$uPÓ(¤2ó£ñ¨?š¯%Jƒñƒõä”VîEàv¥_ø­(^Ô™0˜ÄÁ´ÂΓڿJ>š‘ÅcJ¾îŠ81fó8ltØbEæ* +ˆNUH¡ÈAÀÑxÁJG¯!ôClýmW°Ã +‰­ù¥Î�è*„G�nZ¯°gš3ÑžOcOv-oþÿäü¬kÂióÛ;v,¾É©A]´â‡®»BmDoö9­´ðy?÷Èbvd7utC½êh»P‚àì³q÷•Iw<,É¥¨@â¬sÆïÁÞü3¼2~®ºû鯾»?Þ€mÿÃíMå6¡ÄN"õ‹­]ªš‰'½¡yǰ>i´z·qù�öDÁæ”JC?QÓ�6"Ëz^è ÇÁ•þu+ö·\”Ÿ~Le«þºè—Äû,L+ÂÚ † ”b^6µÚ)/û6Š#_Tš˜rƒ0ˆÁ�FE¨'½`<×%ÕûÝVû1¦`,awÝj²MLÃ*8¶íw�—%ÕÒdØTýÃùVRþƒœÒ,/­·îdDËžºY#ûìyÖìÇ™ºÝðlã7 7Ëõ4Vb¡;³žŽ˜Œ²ÿh²8Aë¾-ÕAܺGØb×k¦løÀØTè_ Ñ« +o$/‘úÇ<Œ¯ pÔúÆN“‰ô“çÑǘ'lwè'`ùí^;pg´9Rÿé&xÑT¨¥z!@ó.�äcÁ66Ff¢)8­±‰~_”×>wcsž¨€oF“!а“Ö©µ8^I™Ôó‡”3ØË2Ü6T¬$ìcôÖhÜ<™-öËšS8ä 0΂³d°ÃK>&®YG7ÃèíMx(*Ö²Ár€¯H^žçìÚîC”Œ˜ï(V›R‡­%Ó¡~ �§â#UJ'¨#ŘÍÓÉK|»QëçÞȉ]¿¯&¥ƒ�¼:¼¬Bóôy:æñm‘žÆ´‡�¨íJ:3ðÎ;„n@‹—꓎—¤$�ù3´E<ϯSvt¸\Êý˜��$¹»²’›‰þ¤C^­Hä¥rÁ4�Ýb…R(¦Hn[à79m³`Ò�០kW�ˆyïa)ÛùÊÙÀ“ªPíci|SÞ1Ȉ"]; ă׬ˆÆÈß¹À’Îs)¨³Ý¾‹ÄÞæXa44óþ¼™�ç�w 2¦)èÁV€¸kÜ»“¿Iç]C�ÄWánìšt¼k„XŽM »†akvDùµõ_«UçD/Þ5!*МžEMþ%ø] “ÁµÛ/ã̯cà2 ]*Ö.-î®aÊ&ûÒÎß5à×N:äÉ]£É[2^1+îJ'*É9{ï\޲‰Ä¾khJ7:0w�Ÿ/üÚ¨»†{_ +–´„õ€Ïô$×WÞEñkè]Cw g¬DèD¸k¼¥Ä^”»Æo¼ŽÎÏ™äP°Ü5ÒSÂ)H +=Dpv×ð b¹�ÈOà£Ù敆NÞ£j�jL¿`ÐÔ³ªñalû€à¶#~,šõ9ö�©h„ÂÛ¹c8’VÀíœå®A Iœ—‹!ñQ™Øgï¯eV9¶»4½k„#ƒdÒî@~¡3y.Ÿ:+a+rü]ƒ4éŒ xv×þOŸPeÞ5°‚ž&ð¹k`vkÅ‘@xü1jC˜€€»EÊlÚŠ£½kŒy�A3¿kô ÷þRË“ ï}ÁÊÿgî@@. Þ5Ì1‰Tw jé?ð'xr×@7õ'àÜsïáºlO#19�ßæ®ñym¨¿å®‘°?±ävËTÚ·×xZ¯ìÑ„£d¥y7úÆ»FºÌMÎ7?–»FóD«"ÝÍKO%´šöö�»†(viFÎ^ôæc¬ ©ìµmk:rÏi¾kèU¹pzwÀŒ¢ôwÄh +¿;¢Ÿ¡”™ße.4⌨îìú*@'Nð»Æ¹Ñ,‘ùÖw�3zO"ÇèJsLͲ"/›ßw× g¨ú&<ç‰ü+µVl5 0žà®­Ò@ Óu[4 wüRÑìsÞ›ØhC·ïä¦I +¥ˆ‹(h|²xô8è¶äE_%+'¨�ÐÕ(JÚ ¼ÆžÃ� ¯"ÙĶ@/ì,n×”ˆ¾ŠøÁBï—jà¶œ»„4ž4šf®í¨F[·åû©²øáó~‹ÀøL4;é P@B”ø� `$�ÿQ°x 'D±Ç1ôTrD¼GÙx†|µq¯ñ´>* ^ã0f(u~#Œ†áB4o´fÀJùåÛH±T;¨ÑT™Ó–"ã5EuÓdšæ=úhL‹\¬–L«à¢ahî÷”ň“÷è<×ýì¹y£Â³ àŠa•1iƒk\i&yÁ›0äøLLˆÖä3«ßÊ¡ëlÁ3õwŠ)Ÿà]—áç™Q¼æ&‰…¦ ÈKM¼æ@€°Ñõ¡®+nÜI;À1^ãÛҼfUB%~JvÅk‚©®°)î#™°@^bx�k¨gÌ< cÌe10²\¯‘qƒ‹™dFáမ]NF»w=ñ¿â5~(Áþ¡;ö‘DY^Z±÷áø™Kñex�Û0g†ÔO½~›ƒ×8ý(Å@èc¼ªf†Ü+}È�æf¨Ï‘Œm‚ÃÊâ«ëL­zåô dÅk<µÒv›;^£ŸL‰šÆèF§x}cgF¬ ‹žÔ¢!èIßÕ]ëo XxuÐ5ývÍMfE_àJ1ù‰ÇÑÖ¯ñÅn¥ªXž¿žö–—¼ä½ —û%ÍjÄ”E`Á …œR�Ù�âù�©`9 V�Š­DÝ$nƒW�…@b.Ø•ANÑú—îõêŸ;t­/-AװǙꅀ;ÔP† Â…v:WÚß—° à²å˜ŽgN³`€baÆZÉù¢µÂa¯¦+¹?7!šŽ±6±#ŠÒ,`¹‹ÝÑ^@Í ¢ÌÎ>çü +}jŒôy##P�Ð3»š° Oç5…OÈ©ä 2d’4ºž–ó2;jå +ƒ7F +3˜÷“vÐt¨dzêâÏçŸ&µÈËÖ!g¢;E„—¹¡ ÔE0²Ø C‘e0;U'" Mç_‹ © <4Ýrsê`ñ{ÊÀZ®™8ÜÁå3zR&\_K¹¨˜cÍd�{™N<ÕQEÚ7$§ç™¦öÚêW²,šÒBØh ü½Œ‚?–ßZ¶Œ©.ªˆ?éÙË^ŽÔ`¸æ�ÔË€:UvûZ¢*ÕŽÑ5b` PH‚í ¸]×ËÙ�ÐY©@Ir%ª;$�hÅ÷^+·—G¥u`4º@£ ~iƒ�ö,g¨¸Ó™œ¥ñùûôw(RÓ˦ÿr.R/c+è]PÆ¢LeU�¨AÂÔyÔ^L¡l¡|y*Ô½ é +Úˆö¦0,ªÎ÷ëeëß×ÑPÎée¿êÇU4ÍHœa€!7Û›‘^V >›ûŽ‚�¶½¬F¥ÚpXc2ü0U‚Üè gOSðÑðñ1lÊH�Ô“k|{ªœawÛRCè s"b\7¬èvGÂÏ4»;…ÚÊ£¤û5¥�™ßþ/þ ¡ ˆ¸öt,«ÛþA¼w …-?x’»ëlÍ4eG› «•G‡¡w„]%ìš„‰y˜%šbeK_3‡;X2 2ðZü º•¹Î—Iw° + 4võ4­a ­×#|ñ|¬FQ +ú[Åã'¼àyëZœ€Rü…Ø­¢ê(pC¨ò3!ﳬ´˜Ìta3DÛ=íe�²À™×áú à£Ñ¿/poØŠ*«‡…Y-5wæ¼Ñp•äÀÔSd±"ɽ²¨¶,AC“Ó +”][Â�3Å ÷?�¸ï»QÒT…µÕ%¢ÃÀ øTÛþù²l§gÉ vm²JD]¯b‚%Í‘ÁöJ·µ¤0ÐùnÁÿw“|V$ˉçÑF…�+mŠ×¶)šÆÐ“Éê�€t„à‡<ò…~zÓr Zü�DöGÁéo´#�æ'oa +��åh+ðºNžÌ”«vtÖéoŸ&ß´ +Œû°>†¡Ä(í°NrxWRîU hÿ…ñh_5»ãÃâi¹]‹j–LÓ6œ:Y»IgÉÁ‡õ]gVKðh«NÖqË¡„dWÞ¬éôa5YÒMW‹‹ÎþR‘†x�<ŸÐ³úH ^�Ü÷ÇeHB³¶&†W0\Q¬k¿~³qç/¹RQº^Ä+n^ +¤Ómç!ƒäöMà2P›ÙÝ6;ôau …‡°²Š™›×YPðo†Cxk.·—>È~±£Î0ÏpSfP÷ña}ceìF VnIÄ€Œ“\æ}Ì Çï,nÝÒÑW­Á.ºfpY9..×tþ±}MJ�<(¥"Å&ë8®\8<ÔÊÀ—K?ÐìúŠg£‰žõà*å,„²çùèŸP�æZX衃&VX&bŸĆ…¨²Œ™) ÁA¨Ó<8  lA /àŒ#J¬’Á„…FoÍ6_& +'ÊÆ€³Ð!”�Ñ�DW e¥„<ÍB†Œ¸Þòû2MÓdSœp�°� 7RJyÿDªpû%ü䜼†—SZTÇát¬-+"’òEÇýÑ-«s4õ£ÎLlˆ-^î +t=ÂB-,ŠœÑ.�’´ÃNɰРF©jdÜo4“=-:õkØÀ[m�ì&¸1æjVË5ã°ºVN¿……B£h?ÑDXˆóøÇÚïÂBFó³CÖçz+Åê(à`RÕýA1¾‹s†a¡Ûó\/2Èî˳À(§àßÒ‹N#b•îia!ªèü— Õ®]9,D#´m,a¡sEœ-w¢°ÐÈÚßÀˆgj–�kG!žæªò ˆÈJ‰½ŽÁ‹ž¸„$6îƒêŒ §¸{Ia¡ôµ"*e =�šÎ ÃBZq ¡´ro„ç³ZIFxq”Û÷gÙÊ$‘…?Çr-ñ‹v½£‹|©g&sB1LjštDE·Hô;2!…ê,ÄÈþZÞon&mãÿJ4”æ6¬·­�}0ô‘°10ÌÙçœÍ85PÅ"´`)k�Æ2Äе.µ8Ee,Ñܧø0ùÂrëÛŸu 6£ô·gvSF1²ªl-ÃÂnب•úÉ5¶S̘îI4$ÂŒ™=�Cµì ¯�8—Ù(ü/�×h[’݉�©Î ÛÅnõ&äÿ¨B‹*Oíý·gÀÓÀ~Ža©¶™&ö!hîš"ruRÎÒÓB*ËŽE6ù¦NªÛôœXn€(a•žß7ÐuF BŒðe€-ðH›šÔZ›2ÄY—fq_žŽ/Ð2ªxa¼Åz4¤çXÍŽ  +‡8¹×ö½ó–4M¬ © 5(€3±è^°PóWÃÝž+ÄÙ{*y©=©ÓÀ4$;øz VS½-kR‘JHQFDY-.áÉÌù‡Ñ‚üF⼡ÁcÁ°K•�çM‹O�aÍù B:ÈMÁ\vµIMåÝ¢k­&«uùoÐ1ÜêÙ6¾]¿E3ÉÌä E:†MtÊê ¥¹Ð$Æ×†ÜK”h ¦Û³"÷¹€l�ŽO mv�âã¹* r“Þié†þöÖJÈÁw¥¦âštýäc¼a²1$Ý$’®-‡Ñ ì÷_†4wƒ¼o[‚Gâp9$ÕŒ>ÉóD÷G¹ª8ΈcÀ@=XXuõ5Àm!-€„xñÞÔ +6ÀSûó0—“ÚókåÇûæµçJó3®Û‰Ó;¶øÛ±I¢ùëè›êÔc�8Ëü)6þÙ•¡"YKèÄòIö YKLÓ‡Õ„�ôŽG_‚=.£€&¶«Ž9*xæ>Ð@ÙàÆrÛ•ŒX¸>Ó0;GÐ%Ð.QÁdd=×ìŸÏa‘e-—FrF8<ÝŽ2Ⴜ˜Aˆv•’}¤äɽ–�×kÚ‚Þë…�O5Ùê·ª##¦öºö³Lw Z’zª°ùºëh¡³jå5ô˜ë*h[7bhg*Äž@yôz•HZ$q &lLçfwÄ“Ó! õXÇuHAÕ®¥íkÆÚ\}û#ÛBWßFP”€>.슉{ç m€2ÜSŒwã>Ï2>Äî§Hèœ-W£¦k®¾6íêo�Q¼º2BÃÊØ¤ K•4‹³&DòŒ.âê‘‘=¸:ûè¥Ö“fY¢óz >€Z=ü=Ž’'ÔÕËëKFpiQ®^ÐrN­ Ä&6™§ëй¼WÈ0ýqïQ3‡dèíÔXôù�‚ „�Ä ăb±’Å…AÔ7w�%»””±¯„‘fÁÈI?8‚]}øŒÕ…Ùsõuó,„-<Ä\=çRìPÈšfÙ×E¨æd�…× íÌE�åê¹÷~ð°ä‚DÕ$Íò-Q�Š…“úñ´à§@4êºÔ`!gEb”�2±š›uõàT7â…«g�èƒ U¶à†«ß±Ä0&‹ñ‹Õ™*â¬CSÎÐ@ãÅ¢@ê0s÷ºclNx=§Ì•Ñ¥É4?�û֗ά²Øˆq“/zÊrЦh ;9V?›¨ÑÖ�)H¯°‘ë̾™˜º¥éwuólÄ÷Y9Ë€„FÝÀä¢�Ë]š[Zšh6±g-²€úr.lä6;œÃ gt†Œ˜Ò0o\Ï"r[96B=Ñåª#"Zt»�ˆº x\…Rp]A{ywçÐŽ<²d”Ã…«`@³ËT;Kz4Uµv[ðÎbg!Í–qÑÓºbB'`Æ_’ÃjM�€l[Ùô ülÊ0Vj²mT‡›}Kê–ÁÇ;ÛVÒ{‡5ÎÁ�¶ 2›<žm³HJüq°McÌxpPøªø€d&Ͷy!O �m“‘ζ�+yä‹‚¡ñ*�94 €Ï©º5JwÈ•lYØm†Þ"A÷h Á�‹œS=N\|ƒQàTY€¯ãö•û‚%ضI¥BGÃ6¶�äYJ÷3¤Ù¶KÂA\ù�mÓ¯GŠùDÓo (0‰‚} |TvnÛ�ó`Û}Ð +Ø8UúVH>’£ÛÖëeÞaûýÍ¿$BÇa̶ùÐbþ3ð­#Ûæhq̳Ä8U‡}srª¾Nü´œ†m{íª ÈÄB~gÛœtH�3ضÓÊ)Áò#ٶɆÂѵTR¶­4¸ åÎn üªÁ×#× ó"APKûÆÀ¢íCª(W)3ãÇAz±Ø·L ÕÒÞŽÞ>„ûÔ8d;жÍ4¹`ÛÈá‘Su'‹Ó±pªþjŸFdsª^µhH8µK°Ö�ŒZŠÂïv­ØÂ +I»ñ¿AocÛ⯎ãR¯óïr|u&¾´•·Ø�Ž"%Íî5Ô@„Ñüi�&ÒIŠEÈ(¹|†Ž"&fš‰JXPN  Í ‘–û`%,zæ—±ûPGøõߋק|ƒC+¹Å ²Zغ¡|&k"ÚªA|¡³ÕˆtÐ'9¡åŸiùÃ-zôÉœ³ÝÑÕ¹µ†Bêº9}30¬W(ÿsGSئlÔø‚@˜ ®À@ä2GüBª½¦OTüBÍeiölÍ/ðŽM ŸÕoÊ¿)HˆM’9œ`¬?±UÌû�,•"ì@M +FREwa‰,lü˜¢ŽTv’ûp ÎhVóÑúVbÑ„Ì +£§Ûf¶­Œˆ“úW¬Z@2+¯E\�¯õÉG3Yp<“ �&€k`þȢ̷¡Ù´úN·›† U ²Ñì –z@f:BÙ›Æ2ÇèÂ=NQ¢HÜT…áyÏéTD0UÀ±™Ã88B÷DSæˆÝ‰(§ù!­_¢éÂböY6˜½oÌдw–· Åß’#sT«ò`7iB¢C¿N¼¦F™Ü¢o„";ïð˜ÂÙÌøBËÍM•9z3†â0d™Ã7å{„ZÄ;¸ÿGþ# î05ç² ñÖD(”>¤ö Es.¯#ƒN'cs +BÒ˜‡å?S9…à²Ìlò²YxÓÂt|ˆâ„i ’›jµ¯sæ"ŸŒ&ÁiaÈ„(Ö& ŸkÅUð)a' K]¬È"ä…–õX$5È™.–×hfßî‚ +Þ~¾ÎÏx·<#!;!iâ¸àBÇý•ÈŽT€ª‘ñ¥×W‰Ä3Œ„¢ü+½�0.�D›ëE3¼ù�ˆfŒL[ kÁÑŒÍ1|bÅЩ�À<¸·\‘Èt0"I4v¥y™"X¢Ba +zà“0£å€LÇÍ7-‰ßÃï2]]Äyo¸™®»Â¸Y¹Ø“é–èÞ¢ì’qo2ý'Ê9†K¦3Ðu21¿ï¥åxB¦÷ÊÅjDOìdºä±^˜ö!_áõ‘¦¼ÃÁôöø ™¦w%§V¶8��I2©/9X`6O&eÐ÷"*™.�ò„€ìI¦Ñ•×ëáN¦9a_8Aõ÷óírâÙʤCì@—Ùˆ|n™?e_*Qq/«R‚´7�Ä‚†«¨Â[ªÀ^í.·`£ +ŸhŸ˜è›žx Î@€À%°¹Ï}ßßîÅÈùø²¿…½ïÖÐ> +Øav­ÖËL$¡ÍŽš+…:Γe ðïõï\¡A¥»>8^ ³\v¬<N¸éð•'ÎŒâ~y­Ñj·+|ú�´ BÏZ.\ï¯Æ�ž•${i¤â”1Ë·?,ÛäØ^ZtŒ²ó÷:,B³x²¨±#­øÔ�X.Êbùå’´ŽúONk|Jø;SšP.N~ô-óá\¢Â)+ògF`Ì_û¡Bîíù‹kµÝÅ¿ Bm‚%„U‹Ÿx¢ÌöY0�‘lÿþuDó¢�¨¬…–z{Â|þ*Ìo’Ê{ü}¨\EÔì%YX%‰¼y¾·v�¡²¸•_ÖÅœ¾�~�1µ°‚~¸ ð¥f£]íòXòKþò�º`þ ÏHŽÈ@&˜�¹è’ð¦²DÅO�j¦¥` Ϊ5!ôõ¬@S A"@±ô�†Á¹EE>mζW0–�Ÿ“éÉ�ü4Ïrþ¸•K˜ÑëЙ̮Â6å$è¸îZƒ—ž~n�I²úa20B™P� +¯pñ ¹²d$÷âEñk—‰ÙAÙ q[˜:PçútüFI¸s+/“`¿;7a3DEW�2ºEyù +fûj˜×ÍcpkZ8 ÙŸ*Â`‹Äka` y­@Ú¯›5³‰\Ð$‹ëˆ ˜ôCx`´Œ†II™Äþ®Ô‘DHxŸòAJ¨:þGÁúí +ß�Þ^ºl–ùžî×}é2k¾·s͆'a’øÞ†œ¨ƒá{Ûƒ†ü—ñPkôÄ3ÏRDê%„°¸ ŠØ­ï¥dß´ÆN¾÷9¢Í~øÞYkéðkÍ“ÙG-è¾÷“F¤ôf-¾‡¤¨iÚ”î `eÞJx&Қπíu„x÷žÎKY²鎆ÍÁ …ö:j8‹Õ�»�3ºsßÛ �šîQ/€·ˆw+TºÒúoNöKn}Od|ü)×Õà€`D½ñým`ˆ6=�’š)ÅûPŒ¥qhWUòƒè FŒ£€Uûn »}o"�ªyRªïµ·Ÿ”7‹ŸïÙ‰®ú“øžL)a*�%Á÷Æt}†ý'×÷ +Qö©ñQƒ]›ë¬µ´�òE[1BÛQË”a�r>Õ6Ï—ùþã÷½3ÉÚ,¬nú&ÑæKQÓXK”¿¾§´íç�ÇN� Žâ{¨ºþ9•¿ïéDj}þ“9pfÑœõ½ =^¯dþÍ{ôRå{C ½/øžJk››=Nö9o~n¬[Oa+Úe¾‡¯d‰ˆ9Î ŸjØÒã‘÷¯Ii2t“ ûg +€ï)¢ 2Á‰ Üšžoâ­>eE›5sÎ#œ)ó²ÞLëW#©°ƒ¸Ó—WGdoÞälÉt‚ÕÉ׃‹rD÷µëã·ô¬ýJY €ÜzÆ)‚3Rmqâ0î>›ÂÚ!¿¸ðŽ:öŠ“SxK®ŽºW´3–ÄÔ�€cèùµÀÈ#-øâç㤘˜£ðR_ÓæµáÜm¤¼/¤šÝˆ�Fhþ!-[„™.›)­ä> }‘ƒ”)ºA«�ÃC¦6qÀ`aÀȿà ý, N‚}»#oàç›­zæLON€ ØÐ+=Å€cÞ[F†¡# F³À¼pÖê®"Þ¸”®§¹—­+¡_ +ûÂHnK«~m�\ÑâcLüÅþ?TœÊ-á ïzPÁ­J%ðÓVÃ\–½6¨0Œu/¢ƒjt÷N¬ËŽ›�eü9id“²@‡v ÁŠèGŽ S)DqfVÒ)ÓH<ñضˆÍÏY<.[Œ?b­4‚®¬€ ôþÐJ^“u»6#YŒí…QÚÚ84II‘+øŠ­,èáa$ÐÝYШ^¬Ÿ² �{�GÚ¯ÄLGð„í»öÛÊo3–€A›5åeÕÛà +÷é,†E²X€¬‹Û‚¦ˆbû3§Z·N“O}Ç!ÛX †mG�ÁÒ/Œe›ÐÙÑÆ­1)£…”F/jq ˜Ëâ 髯ñ(û Ý„{cÄÎÄû¸ b¹cÖ«·Ž Qõ¸zᆻ‘{âÑꈟÿ›˜ R�XcS +M³H'š÷fèNið«b{½Íù`ðk25©ñjZ'@¤€[¾Z(DÖ �7Ë8“èÏzfN�7{¦g6¡WÌiü†ºWWøÃ®ôRléñœŒP"¥×dTÊrŒ7 TöR^fâGCox*"p +Òõ=bó¤E‚Ÿ$æN'ݲ$½dï_è¶Håg ØQé-¯¢cˆñ¬{½óE­†6…» �‰k±èÂw¢ †:†ì4òˆÕ0¹¿¤ÛÛ·®?>Ä,ãÁñ”»ijüêp·ú;ÙR£ThX¦emï5²+Ú7=Õ9C´md�íßpK?‚†Ài=6‹0€w(†:Ñ6CŒ©Í„êø©x‹äpÂî­UãÄ€!,‚)ûM…\È.Ž“ÎÊÆ}ˆq™4<³½ÝÕî¥ÓzìÍÝ�¿“ªñÍ8Šó¯&Óú"Ã:>�º7æ`WÓêW v7M’”º}Xx“ 4¯s8Ô+œ€XÃñMHÆjćå|S‰�‡q¤‡1·“¦uïJã{aÐO;[O;t`z µ ø|êü嘯Íg&¿Š‰ü2#ÕÊc‹Æ+Çí ™€¬³öJ|ô ˜Àó04±ç @F—Ïÿ0$jY $Õÿ»Ux/cÔc§9)ãÛ¨MËá€h#×ùޤ2Κy+é+ä ËŠÀ43UW™lŽÌÁ¶ÀB%3ï¤ ¾ã2præf¥áıž!ÕÄ.~BÇ„¨•Ìä�¹á9”b€“ö™ç Ïœ®ÀQ‚ @f^U'ÑèÄFBŽÜ9lškXg^‡Ç] b+g^ÿRJúÎÔ(ØT{A3s$¿àõ6$%ŸUG Žüýüó�gÀ„/ƒe‡ 3Ç0>G³Úß  + ‘ɲä<òdqt\ …˜BC—_B_iæ¦ü)Û›ùð3×­¶×  l @ý^œ9� +:Þq°\0èçËÃÉÑLÍÓôlB||îX‚à§¹jt>óÔ,€§Eùü±“úR�™[qðòM6hdæ`�|†už?„MC2ó-Å•¨'j-²µ�Iü``¬1Äç=Ÿ…ì‚•­_%.~¬W‹êB§ÄÛlMñ—üè'f×Þ6¹µ…¬},ÏG"[°o—E¤±¨P +íÊã ¹UÀJ‰­CC=>@{bt™Âiý*AM09•;mªdëR¾ºÝvqÜ’ Õý¥>W—PÖ³4N;ZµfÀlýf'0Wd£ú ë舲]<ÞViIÈ´¥¶X^Koæ»,¸QüóÃlýi¡ªr›ñ±¨ûXÁÈÖ߀ùðøšêûŠ`Šô)—&½ükÓþ¥ò"[‹ÂUü>«#ÈÖ™DåM:v‰/ÉlMŠ6Ðþ)�GàŸ>T³4l{Åvè+Ò‚M“?‹ÀgVg¹b‰eÎ_Y”Z“#MO^_Vç^±Å <#¬¦o³'þ³ª¡c,".¨Dó2ÝÆ@/A“óRÑp6�dÓxª1ÂÝþî*f5Ô=«ç.s^SW,yû6ì ñ;«×Ìwte„ÄW´N§ë–ÕÙÂ"æ¬Ôe!I´Ä«ç™›Eò1~ oÔæƒí©�ž­/,Ž‚ä‘„ŠŽˆBá÷Å]^-¥ÿ!šÈêÖVc–1hø°mÐK‘5®àäýCé1k ç¢úéîöze»ŸÔiyfôaÍ)Òé•ÀõÎ9¥‚Z5=ö�=Ê +ì Ìäo^ã4× Ü¯<»èô3îpx|õBQ*'Ñ^ž¾E¥aŒE< ´ýܹid'%Z”q(o÷TaÑ>ȉÏWo(ô¨�”0—Õëj )ÛuYgKYýrI+¬…‘É¥¯ 8#ÀϪgð79+J¦HZÞä)%= ?à¼t¿t©m®¾Ì]¥h7¼¬øœ&Ìâ êt[‚e!ÒÀVç~yRÕþ‹ ¦½Ý‚®°G5tRó…çݶBrìîÁ©˜ë{ƒm5†|¥ä gF£¼äQ§jV¬kÁß<îUäÀž@ñ‰àÕÇ,Úô—ëDE…Å]M½@-$CÌÍw�`“ ö>0ë²�±='%úÞÐn}ÞêVfÜÇ ;6b’ÇÉ)«µEÒ«Òe¾‡ÕËY+­?ÿ1a’·"¨ò^/$9í1r0$ä§v[º!§ àµ.W{Ò'1Y^…ªd~x>†oYpŸx*òðø!ïf£.½ `”J²*DrP „­Ù]õŽ%êI"BÕ„|…&öJ\zÆ3GµøØ!ù…¦•(²�š¼ڳ̎Oœ^y¸¢J}ühá8_yWNÜMš4/1Ëëƒðÿž‚mVOIÓô€R¨þÂù¯³qˆˆIU¤‚oØÑ•ƒíÓ7 +öžÈ0ƒ}£NßcÆ¡ÄYU†Ñèô¾cPãdG™˜HÀ&«½à-]$ /ñÝÑ�­À¢=x^‹¥E2»Ÿ´ÀÈ�n ¶¦±07?%™[ ~øCà(ëìb”ŸS Ί&–•3ÐÁå¢+8Ì´�ƒÔF¼&§õmDä +ëUoj’äQ¨õƒÒÕ”FÂ1j;ÁQˆ#P²?xh"0ÉÙd›kG"vp +vSÅ-ßP^ÆVóá$ýYƒkz‹†€#:Sö3Ш5¯òÀ—àš‰ýL€i‹Ÿ£[INV7ttÃ3yh;:UœÇ0„ûó[xàÏ‚<û³¢0M8D¾GM?nÏ�—YÔSo[¡ü_lCóþ<öf|¥‚zðuþ�ƒQ~}MG˜1tµrÈAšOÿÊ�~çâž ±wÎ$Ç™F{ÉaÄC°Xd§1ëÁ\ØKeáYó¨ü°ªÑêú‘c¬2õd 5cX•‹¯fÙP§Kâ­QñË‚9‰¨oÿB…7BÊ!­&žš :K•ÿ¼Mu?Qvð9/ù… +aÀö‘Ž„_tñL±?¡îú‘˜÷Jàs±Lí\ømè_±:``¤À…dz3á™-þ�µÂWDÄSsZ#`u�f8•wµÀó¾FÎvÒš—/Îĸ¯oÌ‘ �y�ˆô¸¥±:x¼×ýd-›ÇŠË¥ ‹:ÌÅ…”Ú½zb;óD®”}� ¸ËÃr`�q”*`Ao`Ýã‰q±�õ(558ïä“ߟÿZá;ÂZÑcb{–p»G&ãFssÈ¡³I„Y¨e‘±œÈ|8 +BWò„ëëAàÝKô‰£å +휓%º´HÜoBŽŠDŒÐe*Y×A•(ÆWaõÔÌ…Åfb¾ª©Æöê|-ÃqíÊgw" kMáœT�ŽwÅ) ‹2¡zц`°üö¾9`ÅÔ˜¥�“ÃJºx¬øŹá1¬¹HÉïag¥RO–Ô9)š a£c*Cõ{^™¬¾ûÝä”wõ#¡‹[hf¶ëS!�¡R !ÖEÂ<¦þÜ„""†G_t"¢ûÈšnÁÄYä]̯—{¦Ñ&üEg}lIž=ÉkhŸ§îÈJÚÄ Œ=­.¾ª…$A o‹zx¯9u€ú‰¦žS3¶ü¹("¤!É*�÷â}‰MLÏ󿯗�XçN_/¸Ÿ½“d‹Q&²Q+�–N†ø°`å>áµGc` +™�NE�Ø—iQZC27²Ó¼x�.Ï¿,Ċ†ÓfQcŸkŒš]fÛzÊ):›E(Shð)×È=†Þ€/W +kHßQ¡¿¹…égû%NUb”Ï#0Êc|øs'Gâd°qQéé.jv +®ÃR®UÚ)œùCów—Z¿6Fp.>Kžã‘c2\9²…ö˜k)GÒ)Y½MéXôƒ(ìdaÓ1AÞ¥W}MOþ< ¢ëQ¢âˆ(‹ô9.~ö›a2&ê XmgGʬÉl[§A…-ñj’#»AÎ6x¬P òP2ì9’H2d>˜.Ô7ΆÞI&zt:´Šy7-9r‡p1‡ +¾‰ÔŸ“#ù—_Œs'{=” {¤m„™#õ/®í•#³³Á‚6F]‹—€pŽu“ ÌR;�ÈK .6ËaÑ7©®ó{I‘óˆékzƒŸª¶mÝPKޤ*{'gs$Ÿà뼩ɘsÛ™®¹Ü Ó 9V¹ÇÖP†ô¤·•�›Ï[rg˜[�˜©Ï|¼„ư58³LÖ©È×»M‚ŽÿŸU‰ŸaT¸è)G²]Ë•#c™ ˜J6G2ÚÅŽâcŽ”‹ÀYYYrägpFR‰x¥¿kQ\Wø"ì „Üö§ö–r»f6‹žv(�û„e©Ô† (0ëO&2[tñãÒ‹!HÞã—ÀD„húr¤Ò SÛ%ÝSjÀJ'�ŠÂHûg �h�Ê:µ�fV±Á$Œ®ü©YT Yz¾˜6C g®õ™@š1ipå©O8A¹W�yÊ$J£ˆèø�h4[oAœ»ëGt€ÕZЦÅuÑ +5VˆŽ{o›òvÿù9’eOÇŠDtü}X�GDœ’cQtéLÅÂÇX“¦‹ü\‚aPqU!öCõ}D‡5fO¹–åV�Dš&)¯jÐ{ ŽK±ô¼!ÍÈ…syIýFt˜%QÉR_b C�È<®}ñ òÛ&D伤q�×$˜Ÿ*têLà@ý©Í@J•[¦iÿ&)d¨É÷ŽVn”Ø^³îè�H£{¨hÃÒÍ6º‡˜¦Óˆ‘výèrꪋÅ8ÆÂ#J¹†3%M“™@Ò±agO÷ìM³•?¶4ë#A�£{~W}Sƒï�.-ºGǧ”%).ÝsT4!ú…S‚�.©¬dÇNèži1I®´o¤g¯Ø§ß6Í�!Òf#=�&ºCÕÕ™¼•<¦{XÒ³ËXŠtO­c¯UA÷pƒ~’Ð=oú›mrZ*©ñ¼@Àj!=ñç8n¡Pû>!=ϳ´0y Ý4í¨Q®`=<Ë‹ô„"¶ÁŒîqŠ·h’kÝCa>tÏ‚>RÎŽìѫ̓PÆÕèRo¤›Ù\¢Ò=¦¿û'ÔÍ-!2tb0ýˆô4ÂRg±žtO'Â…že‰Ƀ6=¾Ì4 +�|õ±~»ì‘žT¢~—Ý�ž€`IÅÀ1q9I�lÛ�Î7YýÒ=&ÕÒf;^‹¤Æež¶7K)Ñ=uëçrº}|ê1©Ê2õÉ\%5+Bù²�îaèäa* ÝÃ1_dXUWRƒ‡Þ\Ȫº§{\Ôü +¤ž Áùp£_RCg‹s‹…ÅA÷8˜5á[„ôÌ"ÄôCêä£Ë´&¥šîW~žø•,î¤g?ƒ2�µ«ß!¡t ?´s•ß—pÖ��K»âuŒFoU»(‡ +v¢V0 lßo@ƒóFÝrÐ=!§–‰³‚çáTAM�ËD÷ü3mnœÕÇÖ‰ $jÈîR� fwåkWq$54e7>n{Ð=©MƒådmŽ?ºL·öh¼:°u)QP×,.“ü5‰4ñïk{&¨Év‘¹zèòœøvéuP%0nÄc¥Õh�ÙÑËPC¤K�JSk¤4ª¦çò™c#쥻êÙC;•˜Î"wiu4Z4¿.‡ªŽç,ê>n8‰­h´(üø[\Ñ“wïW�AR™¡lª�–«"Ž„ Œ—r£ ›n£åê¨×tl“¥› w<“� \ å¯NãC‡þghôhí 4Kcr]1 'KAÄ%?¡˜0~+>åä÷ ߊ÷ 4I<+Ȥþžš^g�z— Í +Õ–xÐõémVÀäMÁ S÷a„ä4Ú$IÜ0=å +±¥ +uGC™M³5dŽ)d…„zŽ,+Ô? CŸBÝŠÙãP˼­˜~÷ЙDL[¥*+D0Œ†a¡ÛeÁmÑZ4u!+(w*)Ò–[»˜2•?JLÝ“f+ÞA9pY�›ßäíú–û™ Æí*¡žžfgnÅ�O!Æ( yhNƒdØ�çy¥î”À +àÓãfŽÓÛ&‹Q¼¬Ð »¬µk¹†^˜9»A¹†‹CÝ𸠬Ï1½ÜbL C�%J Ká3"N¨%Gƒ§{ð€k›eç,g¿7v#/¨ŽfLùñ! +¼�í3üÎ’Ω­:¤ôÁ2¹ù\YoIqC½¡óMþ}ö¿¬ÍuÁÌ@³¶çâ¢Éa„ôGkqºKp6+ãnnZGɺ¢ØÌÄXüðHÀø�[Ð ˆL-…ô²&£å¤Do ßD.Š7¹î šoÔw€‹§¿ÕÞùiOÉhùóíÊq§a‘wŒ„Ϋô™1ów\è"—ÃâoOäLß`ΖÙ!–¾ÂGB¬Eœ1)FJÀNŒC(ã¹�Éò DÚT4® ¢e"Çé…EÐ\‹Ž«£ß*D(ÒGå3j"ÜgJ=qMˆÚóƒ3­”Nª„ýw#óÌY ŽêÌ|‰Åy°´Vñr¤=½”I—3ÃÏ…oiF Ÿ~ññ8Ý\ëZ\¶¤¾ñeT�ê“”˜šl--3Z ˆ.ÕšY{Üp;üÊßÚC0w×TÜáÚSÏ@Ç)NÔNBÈiêÁQëK$é¨öàP½ÉRù¹ö[£–{%'Y c¯j@ßu™q¦„Â…é@ êºc¼%WkjSv¡19ÕH¤^¸e ±õÆEº�Æ«¥)• |N1ÂÑòªB|Bã«2ÕH{ÓiOƒýõ�ÐkA®ìE¨¾}OÜ€ÈfV€* +ð'q¶ºAiñr„h�­‰ÚPù~ç�3r¥QBÈ'h.”÷ÄËŽˆºŽ s±Uz§±Ó³ƒÊø;F:ªÖþxPþáàÿÜD•ýqÀÊTL"<‡Ø¯‰bc/û#¾båQ'ÇþxqÛ1Ë£QhIµ£iï—'Šâxü¼�%Ô86~ÅŸ‹ýêÊÝšZb¿…­é×Âh3Î)ȱß$Z©þØlT+k‹Ä6�à—ZºâÈ�ÞÎh¡À9§¦U„ËU°è."~S°ãÆyÿâvÓf{2Ç wìºù‘öô8· î!‡$IÿdLõù¨."`ì|$3BÁÆ!òzrô~ù[þH:xâÓkã dZx‡š‘Áƒ¢ý¶ñ:”ú"3¶lÐ’¤"©>õø£ ©³Î\`n%W°"ß@8WUûáWU–åÐ>e‚¨ÉÇÁDª) ‡ËJ6¡jéªæP‹i”!„)¹ +èÌÄJä÷©¤þ„{sëc „oâ9tR ó52W¬ïö%gø³CƒpDZ‘ié‡OiøKA —I¶ÚseÅ„E(€¼Á ±¦ wªž¹ªIoò)*Ð^ê Õ\�ú&¢p9eŸîÏžÕp÷1:vê?pH’˜#ë�—S”Èfo[¿æƒ:~Yï27Pæ*ýJ•@ŒŒˆa_GÏ#¶¹?|K¾ð“ñ‘s[}°0æc 1ú%QIˆCh@™·Ä˜ø€`Šïº0%ÍõçA Ó�`Í�lò\Ö +‡Ìˆ�³üÓ1#ï\µ2Ø›»wê_nÒüA6™(0ðg©ÜgÏzBË:ð)ZØÕ2.%EZ>Lpá‹óËÁø÷ÏàÛƒ„b¹LR´6b©×=¿œf�mP(™ÚõÅ^ý¼š¥�ƵÞ$ Õçá#ü‘�ùƒ½àáŸ*êS‰xöv¬‘„kÏ’˜.†É<2³`!Û=]üè¤d£ëIu ‡wÿòOâè?Y)C°Ê€žÆÞË^<Õ¥móדÓ11àUÎ{"T @†ùíì¨ø/{±iÉ:µOìE\”vŸî�Ý ŠZˆžyªÈHaŒ +_¼r04ïð⤠+©IÅÅ>³7 +|šÐxç݆ z† +ú‘M D[z;ºE{ËêÒÙ‹„ Åíx  +öÅîs°ÛQîwššpt  ˆ pA H¦L’+7ñy ‚ÎÕØ•©Ä0f&&f011󊉙ôÎf>áB= +tG!(—Øzy‹ÇP +U ê‚© +Ö+¨W¹Š¬ê75í±¡ÎøŒ‚ûAQÏ¡&‹Œ̯«Ð*VÕö³7ASgÕ +­¶\BmmÛ’Õ¶m€µ4nݶmÛ¶m©½^h`´Ëvëûìú‡Öv[Û¥†í¿µ¶¥öÔj{møÝš%ˆ··ÿm[k/¸=‘©¡&77Ÿ ˜úzêB�$‘D +ɨ4É’,K’¬ªÎTß +Ô�m#J¤ªå’zßz‹"dÔ0z&n$CHd8O=3t¢`0È`Oñ#HRH“Â+žCB_(¤…,!EHâšá�æl„`‰FR’¾Œ ˆ¸ˆ‰ˆ°ˆFD<"Âшˆ ‰ˆ ˆˆhH·0™ J.�Ý—‹ŒXGæ7öÌŒÌgæ3Ó™©`à<�QP$ô£@ÄRNFvIþ¤jB³z3¡Ì<¦bÈ"�C3e!&&Õ"«¤*�HÕU� á3 ‘m;`[l²m»¦-¾™.“zÀE&`›D&Á„"ebbb“ˆ sùÑDNÙÉóäI<Ë÷n¼À²Ízöäæ~‰Ôåþ_]ŠmTEY•DE…•YUØ£ª¬:mEµQ­ªˆ²*�.°OD':�N>�\G§�Q�‚ÃÙ°JÜŽÑE”HɆI,¤!VKÀFD¢ÁÆüF$¼mË@ÛV&0CR¶�CС!‘ É ˆHÆB� +ïIxßË[U‘ Aäã¡‘pC@4#DÒ¼ �ju[ªÕj­QÍxD;r‚`Tœ#H‰ à"¬z\„ ‹ˆ�B1)«�Nl r†!á*µÿÑWÝíµÑ[ ^ô*«ÕX˜ J¥R­dEm-¨Ù�ÕÄþ©uf³ù½übf“©LÓq›j›§«‰L55�Ö°ŸyFt +ÄÄãP<—øij4w## +r‚ddD ÝȈŒ†Ú–noß[ìrõ-Ù¶mÛR»jÓZ1Û¼ øvßÛÇc—�¿RµòÅ,­•²ªl­´`g‘<ù“4ŠYŒÍ)âVY¯ªÿUE{ë6Úª ×ò­Cë²Úº6æéâÖöé“6 +në66¬Ý¨ô»ÞSP ‘8$ˆCIá+~€MPV(>XTR#Î%r…hŒ r-ä»/Ü™zèÅØA¢ºù§M™1&w/ˆ}`ŬàrÝ^ú枤ì)µÐÌ…Ž;Ý€÷Ê&�µåîÞœµ5öF¶�„õoœ}Ú¦�q¹·pU=,QKØÈ7 +ŠI[�[B¶õÛ0ÜÐ\L" 9dóö['¥”IÊSÍ�A„tòœ›ÔÓ¤o¹ÇŠÈÙ>±´xŽ'µ¡QŒB +NT’ éÒ…?žx ¾uçoÝ|# ÿZN*£q—ˆ üˆç�Ì‚Lr-Õ­ñ�1HD@¼ë×SŒâÝ÷öyÈŽ=ðrF/ÛÕ�‚2ÝŽ*–;�sÓå¸b�¿ô×bm3"öÀ3›6sºGl.²¾d#?Ó&âÜR¨ +IDjÄZ+¯šºxëöhm7tf*ŠÃ�ü9<AidÔ<…™šèìV% &hê*µ4A=V‰$ç¼ÿ¸bÿMF¦â¥í_A?Âfq’Ü9܈(�SKú‡ú +õÝ AÍ K\ˆK»4*¤pà|m[à„¨æ02oVóh@­µ�V� ªÔÉ#eQ Ù¹7.I’Ì”8¸í¬J<ÈÓnÄj�ÿÖ ˆû +Å¡bã„Ó‹‡Òy€¬L/=«ù hR~À ši’(µÝˆ¹—£�èW;:Љ‚6Ø7OEÁ‡`t–µ>T¾tÓéAmWqYRÂŒy§oâ”î›Ä ¬Æ1År»ûISózñ¢nÊÆj}xÊFép)‹s œ¹m9”ä�Rà“v Χ3ëò¹ÉlT¤°U’eÛģ䢕GVƒLHn–F„!÷êߺìÊ øàOj^…ð™Á$Nä¬!�þOÁÚlCRE—æKùó~:ÊÙï ý2-܈9Òš¼Ú™oŽÒ¯|LÊ‚S»�§�8—t¢„jð SðÎ >q �†é¨‚Þ¤>¶)[ €Ål+’&ÿÞ{ ¦ŽéÛäz ñÀ뫦Ó}ÌêW‰nCŸÜ R-.yžWâå6[ŠBÕí Á4RÜ-ÒÅúêØyÀ›!9™„��Ž�«žÛѸpkGÁyþ¼DÀec¬�Höí¡’°49‰!æý>!WX€»c@ç'¦Bcs¨X9 »V@ÿ>;*Vvµ·H7B&¸ä 0K"É8¶Ÿ ÊJÐç'Ú\ܧ‘´ÙÁšd¤¢…Ÿr]12ÛҌϧ1 +°Àm:¯ei:¦ðÅÄu‘„h!>½‚Xïšó~PÊ_ŽY©!§QR«²gúæÜe¹RlXOli +&þ$AgY­ŽºÜMÀñX¼#nv€´úAÐ6¹‡Âë¹í&~¤EKg°öª—Ð/Â�� ´nÔ·Ý2™áàq_zÇÊ Hio®"ÅkØ;O¯¨¾@€N}D'‚…å¡Dr5ø»2°�äëìë±lS™mxìãhÚ=ð_ƒBU¶ÍòÉk0Z©¤úÓŠ‡¦[ð­L¼Îô$2p�â¿„É%¥¦µ + †¹ìß0ÂÜ4Öˆ‚I¯hÔAœQŸAÒ }#$Èâß2íÁ¦î“cÆÎ© µØî¥¦¦úLˆE‹[‚Ã(ˆÁC!°u2cèMrZî|ZõGuÞo·€ Å€‡kÈhpª'Ǧî´ì‚µO: ­±b\·|¾ëÆÜ�'“é^Åö)À¸tÜ6ñ’Ô‹˜¬Œ>ÉJDÂ’¦¤é¨¥4£«ÕC(~�¢ÒÔj©Sæ`¦ïÅ w*ª.�Ù9 ¤o$@ µ@ªÈÐír~Z®ZDJ÷’Q+ j²%‰À&Kå‡õË +}`Ñ4]7üž ¶ÊÝSŠ“A€¦HÞ?¨‹1±‚ç‹ñðIùÒìZè´G·§É‚qlFó¼"§`Ò3Ð/_7mÖèp +耈!`Kеl›ö ¤|Þú»ñ‰ò+m›8@ =f¡zT^²½Épqª>GR{ÊÕ§�D-ïÏóôDo‚VVj(–¨Y4ÄÿEX'‰ltI°è†Ì�"hÉ¢òÛÜõèaÆ~¥¹\DᘑޓœJ‹Ho×·©}\å7ת¿mòš�ŸHÏú¥*wÝŠô¼çç÷t1²M.’ˆb_ãÛçm„‘ŸÝÕÿfFz¿°Ôc0 ƒ…!j¯…Ä™å‘9PþVÙÉC‡#Páð0q"ˆóáûÍ Ûr³eF�ÆÃ“¯PŒôf<‰bJ‘žáйüè‡"=à"�ÌóN—×£çÿò +‹6�õGÈ3 S÷K47qWDîÖNTÄÆøkÚìiÆ+#Ž¥Ò �žë(’ú¨H˜ÞQv^—=ÿ�C%¥õc›ôÛü¿½`¾ËªuxôKÜgÜÌ~(n�Âc‚cq’—sè�Þò+D¯¡ì\�ñè±ÏÀ0C%ã.Û$oÃØ¸ÁGoч�òòÑÓ>²ÑeÐ…ŒpÏÊE*³HèT°\GPzXŸÎ’¡=¸p êãò:|�·Üz“ É›GžÏcã°>ÁA¼ç~¨G�:ª3,{?znhýf– +Zd_¢p.�ïêÑS²ý²¡”�Þ÷ae‡�ðE�c»k³‚’½_»4ˆE°AìG¯7ײpʧGï�ãØÆ� ߣ—øÞÎòü¦©÷�÷CÚG�HŒ†ûÌ?z»'®ØÆ•¸ïÿ£7Od¤¨Ô>?z¦_Ô|ÍçäØL݇Œh ðè=Õðƒs”½'.<2Lî–™NÀ‘2Ê #£<­5>åŒ Ò[ïS‹ÔÖ&·Àí·'«‰ø5,5_|ØC%ñ].@!Ð;ý7¸™¡]VÊ,B‚Ú»gˆ)Õ¡J×k$j å¸E—uñ.R\ »Q©ýöeÊ1�W(ì`ñZ%‡ó«šå…�H6‘üH˲äjäßÿÐnäb �vx“£"ˆÓ*¦ÜZ‘é‹�„+Î /í?A }‡Â™ÞÏC¬6ÓG ¡SDXSàDÄ�©‡èÐz }ëbù`— Ôt±@onL¡eŒž Ö w¸©4že„¸7Që¨åÞô´÷ù+$,iuìË¢= µ�;í_³ãïù¾}f=ê_"MðM´Œ¸Y4”q„¤_Q¡r,d0dèX%ÊdßœÇk ¤>–Ñ'"ÛýúÔÐH| +ýÈŸ=;mbn쮼qXæúÚ (XÐ4Ó7� ì£Y<÷t·@üSÀ�ê°4¸²�ð.-Y5ëÀžó>ìä«Kd§¨0cj�A�Œ îq'>­!»ù¡Ò¯A)©Üú$ÇThÔ…À¬ $ÿg>*B S|„\Š9Ú…ˆ@Ï‹Í>‚ôð4¸ƒ*|÷_ß—ËÕ•µõsaQ“TªƒjÄG|®ÛÛʼnUø» ,ÙYÞºN³Ä¤MÐ&‡$ÊÌ“H?Z_»½S ˜ë™Ò81z¡2Žd¡s»¹[û Ë—í2{«esÉpÔRÙ§÷Ÿ^¦ŽZùT¾7µ Â!nàòêZýΰm¶†*Ñrœ“稵V~ˆXv„o#¡9Kûý§Ÿ¾f6pt9¸3Ê 4î" ¥óÛ£`QlÎ÷àŠ�É•©eM8“˜ 0�gz‰.㼦4ú[N"Ukr�07 hgwE.Çz5½´ìb÷Ë5Tlløi£õã—îQÈê¬,�HznÔ7R÷û³èBéIõZiMÁx„µ·½ƪlAEž +,/ÓýãÍM‰�¼bø‘d·†¬ …Ã\'–±vƒÈª&"ëòzD}t/ôòZÌd–˜»ñbn¥˜{PL¼N´¢sçžoI>Š?‘Á3P$H [^Yâ Ctßc7 ê¼ÉS¼M¢¬Tw;S58±$–ÐÒĉ•�˜ñ  –ÁBøÅ~:ÿ‡>‚OT‘aΟ^à‡Ò§·ý\“>eåþATðà?²Põ‹OÌÇòS<0Ãkð)¸_`Ýðw=¿–Û™òè¬�Þ#ú½4x'<¬ƒî'É:F’špˆÝ0þ~7/ê°_pÅKjÑÒÝ]d�¤¢+ú Z€Ü›p;-Sn¢g,þ…ñ•æóBîPŠðHBø`IT!1 +(^’|Æd¶²‰ÈÄ´1¡4¾ôÚ¯õ–ïò% ±t’ WÖðó�õYÀäºy$)ÐCà +UîÆÎÕ…Ç¡öEªÛÅMÔ†3%m*’Š Ëà©è2No܆-"(™Bãn+ë?*ê)B[?r[ êÛk†4}ºÃëi¶.v>JG²YÈ.nív§¥–TŒ9·Ò#T‚,™DžFp0ƒ’ÁÇ<›—F5èÓy‚# 1]2&a# ³N–^vZP2Yã¡¶We¤°‹·0N`Šó–ÙÆ•“½¬¾üþ }.¤^\8z~‘¿£¡nèIJòŸGEá©L€ñrÕ's¼àE8ˆ4e)kNA”`¸T;ð÷šþ’èlZb'ƒóÚø'Hñ׋ˆ_K£dß´�Ûs„…ºÃÛ)”ÙPɳW¬5ÞLÙ‘âv„÷»‰-Ažô»é^ú👹MÎÅDrOÒÌ´¨^"7€t”⋊+ü9EbkU‘ÿ¨çæO?PM²¡¾4šêºöäl^[#�º~‹½ ZÚp´é€vb‰ á’õw”,!kt.Õ^À6bKt/gF–ëR�$u QÆ‹8.×®ˆf>@4X¼ƒPF4¡zVc{’î)hJm×Ñ´‘|£�(ÆÜѨ8°¶Agsœ7‡}°·XH¾N†â˜6`^êœæœhü^Bd(ñgÌÙ™×l‹ï]ߪ” ¥0óŠ�,#âAÈ:ævÿ™Ö“  æ oš¬ËT4½ÄˆHκ×Ù‚eS‰ÃVC‰$uô.ßÚs ö:�šŠUŠjv5ʇœ88�6Y¹ùË®iˆ#ò®áµÊ®ö—¥N„¶œ0LÈÉ$Ö„-òùÜ�m8ø]º€|ˆÂflݲ�ÏȈ9PcÔTC­¼ÓK;¢ÎÐH'Þ7¹ªŒ‚¬hÚ-$Ï0vcp­¬ú©ÊÊ»7®O(Ãh&0™³üT¤— +ú`ƒ¨MBåˆÏFŇ&?½{�Ÿs0�a-i=‚ÒùI݈U�ÎÁ¯æäž§ö4b€z_¦sv@ÿ9Ÿº£T%÷+~{Ã%#:ÿ flà ˆ³C +i&zVP‘�$*�ÞøŽPm !|pé‚@H$84ݾHýĽÇü\²ŒK{GË[®Ÿ"Ť¢+‡Ð$† ïæ†¾÷ÚB6Agð ì|€í‹è¡Â+ï—2?›ÅÊp +û:þ¢?7­Ñ%w€€ÆÏÞö"4LŸˆÎË]ß8¤3Þÿó�°9ôè�ƒõ¡XˆEl\'²q¨�â�.›Uf }H2‰,Ë:-}€¦ó–ó~e‚˜Ž*hÐ"ÇÓ ÃàÆ¥Ÿœ!ü‡þÚ¦ˆÕôb,à.îß%ûÞÕ"NýÈ`SåÐoºª›lßÉÿ=ÅoZÁÔÿ,“çî† •¢vB§×Öd¹ðŸN¬|hb»�<„.¶£Ÿ¾0 Í`@œÍÐßSy1Aˆ‚¿ú£OßÌH…(æ} +tË‘µq¢«ŸŽ}äÑGÕÑ`œ£´\Ûワ9jt[cG Uø›Q)‘¸º†P¯ý ÅÞDHÀ]þ` +¤ø^¦è#ð¯†ì»ÎLµ?ö�¶2Ͻ ͺåãç¤jD�h0Z}Wè“Dñœ_Q¹çìOú/U‚[tBžø7Y)}~cS +fÝ›ãîpæd_YIgl1Ï%1ð.nZ ’Ræ˜VªÐ©4¼¤RL¯Ë¤†ÔoN.P9ˆ %Ø>@¶\ò•kqñÚ ôÓ0=ÁèÀÊ*šøÚç}"%êÔûŠèi'îÑhàZ„ÿýµíïO�жt5•̽¦ëÈ" í:-¬S|=}kÞU~½¿µ7jC‹H1q€1ŠÐD×Ò Pwªl1 Þ®›P¨™j2ŽåK¨ýÓ9 ‰1—Ô�G¢ŸLqü£fë’‡S¶×ÑÂd¡©ß¦€QÒ—G¬8“ÜÉ8Jà®KÆFÛ®+$‚ãüñ9¥7Œ-�ï¯)p•Z�sÁÑñQâ~[PÐ(%sª4Î)JB~!_l8‚èb’¡BÐnx÷°'þ3‚ýÓø·ˆŸ`G¥~]”EN"ëÄ7ü5ƒ“oÆÓLÝ0àg»–pe;>Ž?×\Á½x&òqN¨"˜ÏcM]�ÒÊ?§Pp5µÃï%².^+`cŠ’™‘Ѱ”ASc¢D;w +r¯Kð(î¯âë‚V¸?Íê DÃ) —›¡óÚ …—ÄϘμ¸P鯃àð)Ûù4 šÔ¼¢ÌÅr8%úrßdzO¶´-²è”N9d�&±}Т$‰†5@ ¹Î ~Î� R66fi?ì’êÛ5\2¢¦\x,¡<—3ü%±£ŒPsX%ëÍ7?žø†À]R†-ÀcS¬uÙjNOBKfZ×EB˜T!ˆdëtVÜ@I5/ ñâRt /û†‚Ú¶Ž�>:ºz.¬drXØ § +Ãh¼]Êû[¢d#2’b_dÁpL;ZiƒüF?ÜXÝ�<ÇÚÔ;«ö i— ­6<ÈY†Wü&âI(g %U‰��ãϵ*/ïɱ ¶‹oÎZ½#nU„/f|ì-q½Üã@Ø�ò¢M%¦ÖwQaÆ9UT/â«Ó%jz¥}ÔR†Ðb¿[°˜F˜xÀ‘²> Þ·¦)š.Ui_¶×æM³ ÞåA6ÌÕ—ï¹.q@µcÜ'knɹ²€®™¯…mˆλ´uØVÜúR@pJQÌøÆ9Ó¢B•Ôä[öP©Ú­†Dˆ¢»®:5°V莶d’Dñ‰‘í§k‰NÈ™)�ÜU¢#S4ÈÙêèuZl–Ø‚ö Æ_YÁ‰ÿ,!Nù‚"kéȉÈšÎÒCö $Ÿñó}íPèL!v¾ÃD¢ÿÇ’H„© +œ”vu*ÄÓå2àïêžÂx;Èž” Å�(âïØM˜ö¥¯jÑþ8¥ÔÜÞeO ê·×Õãƒ-XC¡�XAu§¢·Ÿ`Þ>ùvrá;SsÓáÎËNë]¤°ýê"º´øý£9y€=Jª¯Û2úŸ?� cëð­Mß*&ˆìƒåb*Ï—F\dËaH·Ddèþæ?roÙä3Ä9ÐQÖ,ík…n·n {`t b0)ÚxyTX8ÁìBÞ¡kwAøõu(bô=ç”–aL:ãƒ#õy�‡Ý×úµ ¸ºvo,g�_‡Pü;Nù^Ö:ÉD¼s8T¶V 2ï$‘æ¦#‘ ’ ƒ¶2u“°½y*'’GŠBs‹°¨Ú&. +�FÀQl aY^øøå 3PK�(O^¶ ¶Éö%(¨D [.t43f¢„ž³é1 +Pù,ÿ�›Ï5ùæk5¤M‡ÅŽŠYŒ +ÂÞ/\£81 ª#¢—µN@–$M`ÝŸñyŠ0àhà\àöé1' +�¥jÞH©# ™¹ìú�ˆa>¥p �tôwwà7˹´(4äð¾tšŒãaâ/Åá›yñQ”½G4®BOè«þ Þ ã€RQNú9[¸ÅÆÄÚ4�’Ö*óŽÆôú\öUúc�w-D9/�vÃÄP‚N]o 7ò^N1ˆ(®˜9ÞBt †§z2>J…£Ï + my»\µÁ‘·¨ÿÂ>rÎ"[7û6¸˜;>Í.jz9=/wS^¡‡§qïf=ȳüW‹ L#¸Axû}N§A7R‚Ðïeáo^,7¡'bổ�y|î@Ä:îàä¿>š§!þlÅV¼'6�\¸ d¨åá'$ÏËQJÒás€Èd\Wö,‚™#fT3�/<éM€ýÕy‹0t=ñ£4è‘%,ý|£ÒÌ�ÔùÍÚ¼2²Ó9–ü”:Ûûè©•• ¨}عä|ÿ�OV‘‡HU=0}¤òàRº¦ÊÜ4û?³é—Õ ¹ÛŠfÐÝD—‘.´â2üŠDž»!G¼ÄäåáIpË­^,¢˜Dß›Pa²Ÿç‚�½¶]t³Î&޶¶Š¶F¡þ±A�$zÆópöli" tIƒƒØJ+x/Ü„¬dÿá†oŽÝS9ÐrâÝ© Þs“¦Í ÃZñ�ƒ\¯$l^Ò¶Z¹{•“µ�´ù­C,^¶¤@µñ“ÀÜi�9-õ¶Ìwa<ÛÒ$¿Š):�›€Z¼ó›â‹c¬‚ËÚ»jþÝ+œ+FöïÞ [�ᬨ†�¡÷ÎýE3«]+‰à‰æŒ6%À³rðßÁâ:¢¡Lžïp�ÂͲӊâ±í$ÈÕϲLZ¾®¼Âu‰_äMÖkM´Œ‡ƒ½‰¢D•aá*þ9P*ÖÑêu½Åð0þ°]½:‘”yн÷>ÊgÍöðT2Áø¹³3/p`‰(/ +mæá¬B!ÛK[@ÖŸò¯ó)v "—3’åHX¬pŒ¢mU6ØŒ‡ÒpÊ"�À… +HŒ)ÛúÀ‹)ë9Z^A"—Ĝסpt•ðÛD2 ~à蚈¬ @kvñ�[·EÉI»HDŽQÌû+t ÷ÿ ’/#‰ó ÃeÀâwVšs7è*2嘙Œve pðÅçzŽI÷¬Þ2*ˆ–ïÆÀû heÈIéaŸ ìV�á1§”ìO~ZpÑ€­TZv¹tü1…š?fÿ®Pá:K“�k·Ã‰I½çÿÕ3óBk€‹á . 3Z´IÖ=N QÊ0±I¤\'Cgáê>(²-êÀI_½œ}Aw ¡©ßg‘ô3Œ$@¢Lyb陇b€Œ?XÜiÐÉb�Síwž�T™U ;òäSn¦«÷‚¿œé9Ü‚ºQ’Bí&`¨‹ÕŽE jis]r_þÊy/‘TñÐ;‰«p\ÌQ·¦–�Šh93‘O|ˆ'ùV튥fÊÆäÝÛZeµ>”ò/$€[M 3±±2rÃЛS@¯Ê=Ú\oú'�„Éø}÷gãÀ›:ÅÙ,Y,øESx%]zK SÎÀçÔÓZ¹#_T¬Mùh¦BWJ ¦>Àˆüáˆ�‡žÉ¯Z¸§ü˜�\Û’àêM´eí¯Ï0ĵ– ¨r[+ÀŸM# Lœiˆ[^pH÷@ôXÓä=£Î{I%P¬©s2øqD~6î©I‰@@�®ë¼BEÈ¿ŒÈK›ëáNÇß ˜Ðدöžk]“?•.ØDZ¾9@툺°È\HEäÄøMS£’ÑõšW ÿAtEåÐ +™M�ë0ÙÜõ³IæôßLPÑZŽøænœÈªÊÆR»-ù(þRºEAx–¬õb¬ñÛ€ù~R¹½Ï9Ó�E)dÙ7¶¬ +!£Î…m"< bô°Ý‡nÚltWgÁ^ +ínYiå«>ßúìf÷#?q½çWAE‚´T·&T'?òo¢8lþÚSðD@V´…~¹~q\yyMõ|lj¶ÝÎè8Û¸Íá±öóHƒ4#É…ê3Ý8À%Ýi�‚ÙS  �}5›1¯3SpÄ¿àßÕ¯ ½ à[–ÄZ jëOóq.õKÀÑ“9=évZ’¡âfèÏ�}³Á…5S¿H¡œÇЪ9é¿ ÍVù“ùôÑ"|éV¸r¹Äýœ®"¨×鵋5¸÷ï <Ÿ⡨�A`ò@4¨ðTH+!è—Gžè:';:ãšµ ð�ïˆO‡+3øbzáb AÏÙÝÙûLèŽá]%pÈž±Z+‹‘7 +ìÔ '/°K�Ø5Z.Τ¼óÀ—ÊÚ!u1œ÷¡!rº”[ÂÇž$ñß¿.Bµ”-!¾ Ñé‰aó·qûÞÙ¿I¢÷D£¼mƬFCÙ�P«�JrõìO 7B …¼ÈÊÓÕBÄav„?°·°e;g{ìä3�¢µ€ «÷ÝŠëôòžjg €XLè%n+Ìåä[:ËëÚxµlKq}ï'H.)¯¨ˆ²0ˆ ^WDW—Á=ÌXD&þ÷4®Š˜\¬„ÛY©Õ>vZÔ@J!˜�k…äWâ…ýÏù…™ò«–#Êoï\C¥LEEGŒH˜uÓŒ‰1"e"t*}Îø¹FÐgѼšëÙTáඇ¬8"`»¤Á:¢î&zñ£…Ò|e"šÚ#ú⨒JQW>™¤Ò�èñêð$jø±Ì4Ö +]P|âÎ>ÂõµcBS+�YI~8Ö3ŒeþºÇ'Lü¯/Q$B~9#òg‰D9>ýÆn’4Ûò›D^¯ÜŠ®“hhÞmù«8|zåD \k·ÙJ³}ަ @‰J �ì(JlˆÓØkoÄ3’0§D®),°>â" T¢Úpf�Zú‹*‘ß´l¬™}(Ï €lYi¯ÇÕýùW §|›‘ô@¸†ñ‘M úr�wŒœNÃk¿aM¸ +üw„ «C6I,tn%¶ ¨Èê–6íi*2 Gñ}{Œ„e”(!(Ð&Qf ïÛÀy#´ï^§}3œ˜?äÙä/‰.¯C–“J“hUk<ãP ±-8$¨�àR6pç…ÙÅO�T ÔY á¢÷”�¦�Ýî;9a6ºŸ§: 1 º¾ k»ÑŸÿ�{+<’¡‘0<˜“mÖž*ÍPšyrFƒ|_nÜF »†Ï©”ŒÒß¼4.Aà�i ñ÷² +¸ìHôÅ÷IŒ+M dËWxž¼ÙÊ~œhK7ñ‡¤6Ä!âµ µR0šøYr€RŒ;yM˘zèYÏ›ý@\72˜û[A—¬õ ©Q»�d¸Ð +n`�°»`h-¯’»ßYUÖÁKùL§þƒXKë»}zGþŒÍ÷m€1;ªä'©�Tì›Ëð—¼ù6Te’B¬½Öùdáˆ.Õ‚V‹Ëú_eý@BùÞWV�Ù©ø>Öð[UrТ,^DzÓÌ[£ #”Ïܪ â¶àjq7ûLG8vðeB-ÄÁÅP`v´¹rõ?¹³`¥Ñ†&/œvîO8©^àÂ3“Àª-Æ*$û—·Þ fïCGÔœ(%•á}IÆ/¤Uc˜ß +‰ �ËO�Ø÷å¥éíÙf™÷Ï[ÒíKŽèù½“E�xh/¶]?_€k]„ýÛÏÛWA�„> 1Šù•£:+}§ÃD0níKœ7øÑ„ç…%ê'ä!æžWuôƒ†XÀR îç§HÍßè¬5;—Eõ£|!YD£z” ÖüõK(ˆc3Ð ÛÜŒÕgÜóÓNM�Åàñ[!ñòàžÊj³›¼í ]|�>� F ´–’ÜS%@m�„8Ø\N<äåg²d¯C× c_Ù�îÀeÆ]±t3w@rèàú”º±*¥èûr,A�—ýz;&0&ظH®â6ÐAf0Û`®�›gTˆ=Fç[µël§fñ^A#•¨ˆßÈͨa²Ÿ¿cðz£PÍDÙÇ‚iÛ@¤–þ·4måðòÈhj‚ïÐÔ5ªã¥ 3ä«ËVóü[T!nnˆ½=»#\:ûŒ´¹ +K¦�­bì™,ÞDnª øðöX~Ø›Df£¨)ù”±®1)½¸uåå·KS⯌ÖÁ‡jœ£!�ÃvV)=ì¼Yàɶ¢Ž™,™»3CdzV,\2“B MlŸH¯Dc¡ìF%Ç•^ü™“~ÉÁCAÂGÇ•UÂ’'ˆÿ<�…&„×µc›bÎŽàCÓYqΛ(«·”(¢ +7Pá›V^²ÓÔ�Þ'×°žŠ½ÓãëGgýE ¦à4ª‚/ïYRÔ�ÃwW¬ï@¾ +p¡¥£®a„¦]ï9 ¿^y¶Bn9HÔPíiÛä¯&TT>A# ö)8˜}Y3sô§¼¹‹¢XÄ6¼20FÇÓM%jm)( _m¬âàÉíÜÏ­Fwë>�CðËc¯Õ7Ý[³7ØØïìÕHb +Ñœ‹Í®epFHÕ$�wÉ�È@—SNı“H>ÆdFZÎ`†Phmåd…yLnìUŸ•c3^ e·Ø¸’¬gÄ34.Ç3ÃS¡ÔH»ƒ�§SX8ɳG{&ÙýÔÔ¨€ë ‹º +ð¬„<Ƥ[ë…8¤gåy æN•|ÇjÊìLñÅß45$UÆ“O50vOÜ~AV« ƒ¡tmZX$onNÁ‰¼¿°ô@&ÂÕñœ¹žÚtZÎîâñ8¾›NÅÚ{¿ û•ኀ –ou½V :û…76¹@8:@,¢µaÉÇ@1nm(¼�Î2®?Õo³Ñ+h�œv«‡ö¹x¤9,á¸=ÏQ´âÊyG¢nÙuq™VºžB×{W'\YËu,…]1à#Y„Æ j{Âò&› RÔÃI`â ´ùtëaŠ— 0#1MÃú)Γ‹_!´8/÷6'QB ŽWŸº§Zhyå�Jeß5?ú8·ÂÁÑrbÔ›dž £Þ‰B(HaÞÉǂѢ*�FK3YD=¹‡Ë�Ž®Ðø%­¡&GLQ$]=ká[ö ´˜/GÖDæ>,FzÉÀÖŒUL 'EI†ãõÉy˜1Zê?¹pµäû +z|ÚJJ¯Üøëê�e!™f"8Þ¸5üÇ¥sb§Ó«”åɳ˜b•ž¼ˆ‡ÇE¸ì¾Ï´‡"[èh[(hŠHÌ"°bó§W‘?æ.ÇL7H"…®*nç+eôg +¤ ˆc¯“²ZsŒ×ù$wSooj”mÙ¹OÆ\�3¤ÈžÜz$©°U²6"+ኜ„'ÄáOŸ¨àÒ�ŠÕ¨‚‰4ˆÐŠPvœ»Â V 1ä7úf×[%P÷gâÛ +>~%Éæºõ&è°N4ÁV)ODØh–µLb'°ïéz^Ô»ïzø5+^ÇÒ!�(J�å쉟ÖÏóüÞ÷ÅÝåƒnY�& Mç>Ë…ù�©ÖPjÏ�è'iR�0¤"ÛB s1-9­óã�©Bƒj@™ +Àæ#f¨ ˜~Ñ&~*¦‹2\žóƒ[Ë1©“YZ¹&`”0þ 8'ôé�Õe9ÙÎ �l +Èö®u¿¼hé�Þîä¬+=;*q`óÔ�T�JBé~HMê =ê‡r½ù%ÿÞò�9Çcsá&"  cš?~ÈBQb£¥kJ`ÙQvQ­Ì˜¼ªŒÔâ\{d’†Ï`*{(žfÁ�^¡¥}­l 3�í*úŠ0'Â�mu¥ïg[OY;ueEÚçâ\?rYÓ¤}a¦½�õyuÆ×X¡ÿÇMY‹€9ÛrÅx¶QßÍÒt—¼Š 6�e^±�ز¤^‹æ‹�Ȭ"¡ÒJÍTýñ^mT–��“M‹kW°UåߦNDõn©èeE¸!áÚT<˜MH)㞟ª¸™ 2"‹d+Pµü9Är…úÄDŠdÛcg¡tŠY:¦¢fö)ó!Ð ÉÜÎ)–)ýrV�Dû5ôà ^ÿ•¶á'`ÁLºY…‹� b�Fä· +p¡ül”AÈ>½pkKS ‹kÿdÊÒ©2ÉE2 ^Luª� àôæáæ*P‚ÖAÛë+b­rÆ@ÀMzžçÇSX9"%iV ÷¡ÊžÑÓ‘<õáê"¬0MèÑ ÔÚúq +¿:KãOkDpÉÚ\h’ƒ³hÕ°‚ë3`Ö Ô¼M®8Gày +M•É€~Mnê%ŵ&„ÒVÊRï™Þñ�>*>Ë®3%àÏÉI¸bÒy,©8Tûàæ.:;êš k ø`¢Ð¯ ÌiâQeHPüßCéå]„*ÄòàÆC±ö"™ZÓö>Ÿ›ðlÇ­‰íz ‹ûÅOä¤^„VVñP½`aÐ8òE`³QÝ€ÇpE ‰|¨¯@*U^~·Ÿç%üQÿþ P-IÐVÛ¡1K¾ ]êl'ŪÀ-²qÎñ£dYuoÆby÷�üSÁ3 ˜÷‚",^8HxÐȶó#®7ÚqšTù"“ÅòÀ‡�Vµ(óY”‘­Qa—¨ÉÖÍF ´�Ô 2µ^ŠX ˆ µM~Ü2V¨Ý6u$ö÷ÔmRµ½1&?ÚÛ$™ÏíÓ??ªo“9µidq7Ù´´�oA1óËŽèŠ2j…aÅTÍH÷fÀÀÅeB´’ÏŸd¸ Yšñü; +ÄgÓ—=[Km)gÚD�g‡È—]9Ò,“E™e~™‡„ÕqëY¶Ò14i±Rþ@5ë©lMdΨ{5!q Ä€ŸAÍá×à5#Û»ÛôÖk.…ÆLk*NÕ¨!¸.ɲ‰PW|�•%Í‚Imœþ¬´‰Æò…ŸMãžäàÈJÓk�F"Xm.À*|¾Ç¢&ƈECGªhLµ¢4èëæ×ü z?›À¹:xxSdª>Ã4 ja6µ9/MìÓB�‚*O+Ú$™ð‡Íý&“è^„ñb„/|)¦EÈÞ?Db�*ÄsÝù‡>ïm'Ý€¬ÌpÒàr“ëå�NÈÇS‘{ïñK}Mf%&Ý1& <ƒ«” “JéDÅé¹§%Œ@y+Ÿ4@¦›×%„ÙDæ…8 ã« Q%‡8ÖÃé=¢òãr`|d…­4ù�Û”‚¬`­h^Å¡&…Öæœ�„óLAò,¿r‡<�îÉbÚ‚‹Ó{éÎ*(ŒÛõË:ƒ{»h›”±¿sï{óiõ.§¹Rølh8_ææÞ ä¦¥d2JNG·9NiëmˆùÀ!¬6…îª÷Yƒ4FD%LÃÊg€ÁèÕ”+k j½Ð‚cŸ§©ÞÐ X¹¨¼<„üåå”2 +¬ÜWvæ18 cÎè· =Ù$²×óÞ…p½¶\ŠÇËd2¾ç qÈá²2v"ϤÈ,‹%vS}”å)8,Ö¡_q­Ý÷nËî +s©.(7ŠÛÙ=#ó3n�„¦ª4Fî8ÉÑ9 + ⸠0 +ŒâŸß/‡ê;ŠZ‰ð¼â ,%€V#ðìÉM§Õ¢½ÇØ;”tÙœ(ð¡J-:^‘ò`¬4=]û +Õ�L@c L=ó."ëÅ3À&à‡Q?šÉ¾VN'„BOŽO™þ )²ø¶¤upkÑ=‘·ˆ0_•†MÙÂBIïä’]pLˉ�—ŒZ¯9`­móê‰L +Ç)(&HKX€” ji¥Ç€±¡–»ÔÔ$m£¸Ç&T@©Åc5$`<ú¥fòè²1ªåJÅäœ~1{é%„qþ:ÎßAÛª%%[~U×Dÿqr(U¥Á{=ݯ––õ|d¶Äø$ ©8£$cÑTý$y×ÎÖ@Lcrª*ÊȨLÔµdŒh"7 ga×#‘ȼÛ}‹þ˜«öT–�ß�;S‚œ#ü¾–60ûµ´5uç9¶\\[ªX¼�P¶Ä�@ðÓ�ºýõ…­] ìÞ_s“ (ø×;¡Kå@`lÙ÷b° ¸VÿJ P1$…g3ùWVs´µý`·âyƒ1[°´˜ (Ùüq™ ùÈ�-Bdg÷€Ý9wÛýf#mY±iˆ¡Ó7Ë7FЯA]j Üû¡ØÈaõ§‚‰¶eÌŸåß Ü¶Ü¨ÀAõÖo îê]v[tr ­ÂÛ"ƒ€òžèu‰É.§ýÄ€&»Û[ϰvÓÙƒÄAHn ôL�"ñ,C¨dËgnùGÆÛ—ÛÜò÷¶�ÕZEGÀ/Cá’;ÝÒnÂ$�°EÕ-†‚ªsSPu¨ÍF YT¤yZî!�h·°«É´ãŸt-a�u�–v.¹(t/(Uf‚÷=6²�ˆu�Çv(–¤éTŸV»4#®L•ó/rÔ +%Q±Æ©Ìm˜“pnè3k$ʬÙ.¬ãàÅ÷Ê*҆iìÐöxžeja��žê-øÍÿ*7Š¢2›¨W]f(‡r¨2 +-ø9�˜CBX!Ô5d(}+#°ÿé¢_B$"¬,‡†½Â �d¦ä âß -Êü:”¾áüzÉ©‘4)=VcÖ–±RfæÀq|ÒOE²a ÷Ïe<à)¯ØºŒ¤*¸9ö2â_„i%¤ð…À‚U�{GÄ 1áÃ΋9PbF€Mêñ¼_1£Êô5Ƙqà +ÆÊŒ_eáÕt™‘þ�d±Ëå3ã R–¶¡J3Ö¬øbfì"Õ‰êvÞQ³f”÷“µ†…ª¸I<ðáû±/�…ÎfÜ�ÎT´úÇ׼祑¿I�Át²mqŽc³&#hÿ¢€ìf9côª0ð³a¼á +![W\|—3ÕÙD)*5õßípçèwÆ#à€?væ”ö Î<·N/¾Ü/oaôŒ� zFÅF=ãá×Á·÷Œ`dÆ×4Ÿ1(6ÜßglˆüŒx%3*å’ú3š dÐ:i( –x.¨©¼4î J��ÏÂ¥GT ц�àtùTÓVE Q¤Ð˜k„Se–ô£›äY Ü¢;&Œ¡q ë T£íy%É€&ö¢qPi—ëˆ1‰¹‚"å¶Eã¤a1Á’Wíb™�_�FÀÆ 2jÓ,0Xw(+§÷ŽF®o銳'¥‡�³¯7p’4î!çôÜ–4^X†ô „xCôn"¬c‘UÈþ«�O*Óu’ú1õÜžT%ff‚°D+¥3öY`äDbiHG•�ÛFç^ËK#ÜâP ·ƒji*Þ²˜J)ŠF‚ósM`¸+û‘XM£I„ý=tŸv¨ù\S¸¬Ê|ZO#Dý§QßÂD’Ôì9ü5™IL¨ñìŠ~¨yº(d {-J[̨/jä"³‡+À|ñ4Bb +n¶#5æê¢|âr¯`ø‡ þ±¡[©1eqŽ•Y!`‰þ~Úx£âê>_õXI5¾�‰‚S�œkÍC ð£7°ÈÚnRóÌ) +ž2c¦z9ÓàâÕx°®>89©~5¦÷U‡Ð k|0Ÿ�ç‘ÇyUªòKüˆm\^§j“ØÎ\65ÔU× ÁÁÏ® ]g¡ä÷ªRQÜâ -BªEbtqqàµ*êMÑ΃²Ë”÷ùùÌé=2-3 §4mNH;ìN&ù€ Vº¯ ÿA µãQN3gøxc`�Pr +’øï>hKÕþtÈjÇû¼r¬®²cBo\æ&HÅ@JÉqi¦3� ªDÒHé‹ õö{®7 q Ód�+qÊ�D¬µ4­æ�Üã²xhÁ÷�Y[ ƒ€ä“3l¶ AVÁ‹™z¸Až([ úÔ”>%u !ž­(rS‹å¨¹"B0CÉñ´‘<‡‹\Ñ•n¼g‡lGí_ù)ÝEÞþ�A¤ AðeíÝ}içú9ÜO ²1ø�)jAj"Áº‡eF‚YA†(²è\J§j¸�Lr'"ç —žÍ^A£ $•kT í^^ ìÐG1H��†Æ†yo !Y™(Šç¿¹—“‹Í²¦CÈäôå´[èH/H$$t9ª›‰ˆˆ(€3Š‚ÉJÈR¥/&¦ ÖM³!…ñ p…oQœÁ¤Ã&zÛ¿„NgaØ#—0-ˆª¨>­æÁ�ye(¤¹ÖÛ)E!ÿþ±‹£x™ÒF,Q‚ u+“ÐfhË)êHqÓ@§J„ö"#ýW&£í¼œýFý Rv°© kËÙ&‹DŸÎ³}Ì ˆ3‹(ÿI�ÐçÇìÆ­·üE�º.�dàÑŸ@ì’QOã½å‰Y?� WÀr€SSÚƒ�%¸7>`öž]—#™õ;¾ôØY=LÒZ3² 7 ì·«Pi&œ!šœäåa–€´¯ÓûNô5F›¹úTÍ^A!rú€™,Ÿ±ßðŒ‰ ñ”hy +ÀAäßg‡rÚ²¦A>ÛäÓxžk�Í“A¨­¶ò¨?"±§ÜóâÂþÎÆMr§êBÚõ²åNJ¦Ö4—ÂÅÃhI䋬$µutOöŽ1ê+{ÝSÜbæÐ·dEÁ‹`7­”šŠô{RÐG´+‚&K‹ÕA˜„Bq½\V*Œxƒ�˜…²©ë‘q™Uï¬YÁ™˜�αãæMÀfXßâ`¢üŸWØP;&> *DžžÅAËîö…f7@ŽG�d’»Yu¾+ꛉ´¥êÁß±% ¼Œ�mQ¯Ÿ1Vl,ÃwVX9J‡©p¸¶8äY±ÒªM³èYñh¹óYyÍzt�‡ZN<ç­À$h•`A|̇Р+)¡ö¯ÝÜThõ¶ Ñê�®“A¨X´bwˆwm´’Xj5_'Ò*à‡ýq~.i¥•Ë•^ÿLVOWŽB w-ìþn�‹›6µ¤©î˜nÇmãõ!=‚ÛKEHQPsÚ#8KEŠN+“ÇXG +O+,• +‚¤"»P+“ì'.�ZI7C¹™B�Z�DÁÀŸ'x¾£!ÙN†¤ªj…f®_‡�Õj�ÚÈ…°‘*IÌ®Vl‹þ«•b:ÉÚí„maÜD¹ãhEÝh‰ž°"­Èèê’NÛ¢Só+æ ØZÍ­°€±äÖÊQí’¸"@תeX,ùœL<÷¥JêüÜip‡¢¿¸¢h!)k6µð±¨c#g\Ùª�C®1@]¶ªQ Àm³UÝëm父ÅÓ<ȉ™ÐV|7OP¢­4 ¹ 󏯗¶ZÇ;–ß@¨¦¶ÊÙCB›±ÕVo>Õ�•-k+›×€V ¤Ô•ÇGkm«ê‘V�ÖhÛJM”4¸­j§°Ã­*‘P(¤Î.(O–@ãVУZ;P�:äV ±œ<É5vÙÞ°´rò×­’ßÂñ o¥#©Å|¶Wç­r¦až{«Ó)„|Ÿ4ò­˜Ê¿Ò9ìïhBÛ|»?ÿ€G®íõžíÁ‡Í5Nµ7”ëןßšàB=O•¹ Q´ ~ƒAWo¯T{[�ÆW¸²O‚Pë_¢hˆhª”8ç¿§Q^¡âB#a.`( ×Á©pj,Óq�J¼ÐOÒL¢w™Ë}|§„Hª—>kdŠŸ 4‚ÝRw(à3<]C_%%Í6s×Ñ 0Ù< Tö…ôA,cÏY8^AG§ ïÜ70È¥“á/áÈ8CñMÝå”hÉ“<ŵ“ïGÀd°+˜ 7$}SÌ‘—ZºXýzþPСg€L¢¹‰tF½Êæ€')�ê%˜ çS ø- �qÊ­"vLù =9x\˸ã>PÙÐ)ÿɇ&`áIuÙ¥‚ 'i΢·h”ÿåød”‘�‰cH3iUm ìI˺;AêÙ6z„ÔÑì¸54`ØREŽ Ôé=b È¯ñ-^ +…x=Ø“š{A½œ€'½FõvÜÕêIÿEÞ.ÙÏì}lž„1š~OU¾b +·øŸð_YÉå6i×Áž À>MÊ‹Ækvû^xxŽÄGLdjÌw%è=IzPèEœãì4R^ü’õЃ'Aí� _,Ï9ã,ØJ�WÚZzÉdšv }µï?ÎüÄžÄ3ÚlákQÉäSÊ—KÀ‚EÞ©c_¹O +½ýì¿XÈc^câa1ÁaàÑ5H‘j¾'Á+@^@–á?�ù©h=é–x˜ßéĪ'i”� ‡j20c nØôß;Få)}8¥×w¼³¤}˜:~ƧÉÌðQùpïajf (Uyšú¸Ýò$þÿ¹“�4}°_ø‡ ßá'[iÊ*¤mˉ +2Þ’^RaOÉ¿®PŸSLx⟧î¶ô™évMˆ©%Ýe’Ë,Þ¢ 9(ðºk³lÆ^2J9:CcV[6±ÑÖ,¨Á_\×(zXŒ�ˆL7jTcâ”2$‰�zü‡¶zA±[’!zIí›ô¨ªcª§ºŸ­=áÕ·ünâñNMˆD“t— +,1Phí¿œQ þQrbÅRÝ,Å>è\¼mì6º‰!ž¼Š¾÷åæaɈµí\éG‚Sžk̈KŽ\TتZ`ç�ܪ^šåi N›ÈnØùÅB]„Ò£{ ¶à6_v�IZ�QSZð9¯Ûøqp¦Üw6—ˆPd2ïÃÖ:Û'Sø“@¦Z +Å&»Úa#ÿ‰§s1nJ¸<Œ þü)/,:õ#‘³|—ž*›<’Ëb–êÁ½�2Z“;¸I⥌¶á‰±Ù‘÷ôc §N#Ô2C<¢•ö²Ä/°áÅ’ ÔKîgp(WÏÇ ~²à‘Š0t…/YŸ›¡û§êY®W@ð'1S‡‹–¶Á‰|5ߌÃÜ l˜  d™°r6AªL¯øí5ÿ‹d›H´ú6i©Ì÷Ì.\ƒ‹†>g_ºR”Í´ÏÌ »ßõM”ú•m‚~õ×B‡× Ù§”®‰ïz2»HÉÞc)OËl� ö.×79ØÈáüA(”RÁÑÁ˜- +ðœÙî¨5’EÆß";ZòögÝB{;„2;í G>ͦ‹ú9-‰^@ÆŽ‘�vÕ Ë*­�2{�Ö±åîR‹ˆ¿Ïh° endstream endobj 36 0 obj <>stream +£€�¯âD„øNF³�A)9ó[ç}¸vðÐ�Î[7ÌÚ ê\øïC‹f¤§”ƒˆÉ/ÛPÈ÷cuµý/p/ïÕÓÏLÔ;2 â�'´ÈÂG£ÆyÁ&ü†ah]ü\ ¤1tˆåãV†–h`NGÑã²C”ƒš„nY/Ç=7|Yîb#•pÅŠ½ú,µF3’áYžÚÇOHiõÎ4S.ý‰¬ÒOŽ@a1žH×ù; %dÅXBç0Å^MÓd�@Ö.#xB>PÈæn�MLÌñdñ¡ywmpˆÃ¨vTÀt€Àå0�µËkõ #Š—ÀÐr©(;ÑnH©rKn²1Gá¢È" +x|¹×%Ž�ó|Ë,€ƒù�&%Ôž™“e�ï@ôÙë>­“#9u/‡¢úª¸Q˜AôYŒIÌä¹h¦Aç,zZÄäjÍ}³¢�%¼$g«sÒð·Š2 ¼d‹™jy�› ÊA¹$5¢¤— µ�14šãÉa1‰6ßðaü7SÊ&‘K«Œh Ó¤EýùiÝD8z†øÙ8SòÈ¢¹gÞ<º<™ÀJ�MéÚ¹·…ÔE !s‹FLúöT�†/ kÈ`/Ñs52N·¥%›Î­ ÉêÒ­…Ñ,ˆLYx�Lݸá w×CB-�× ¢S¶ì;Q _ò_ß[s ×H r™eièÞ‚`•Ég‰‰w¤x«eÌ ¸2©åОœÝZÂOš†>“ò M_éÉS ¬(q ¾•šŠåÞ©X»´š€ +�*p¼ôVHB mq“K´ÛkÇÕ·”ap¿‡K�Á»Ý�^„QžøGP)»K| 3D9î¥èˆWTP)åywól§ÆFFX5¼ úÕD�U‡à"Rš');n­ z„î©ê,uÓŽ’JkÖ¼%¬îØø~¼U9 g Ù‡n¸ò‘`´ü켂»•Îè_'² @ݘMhz¥W®Ó^M¥KÌèjÈ®~›ø >¸½Äµ6ä>«Å>½S JwÉÊÊy«sÒ On Š–¢5;Öa‡6±ù �Öx­Ýwæús¹¾Ž úï:¸|î7M(]…ó +Ꭰ•9—}á¯çÿ{ì’"t¦:‰Å YìˆÍÏì<ÚåÕ/„Ç.¼¸'òöÆæaÑÇ"t�eÄwaÅÎYCFÀ(Á½½3ÉR.’ +Vè ý<56™yÊn°Ý ²M«¦ûÒŸKÚ]wÞÀ0H’¨"S°U  cµŒF QB]gâËC’0UÝž¡¬�¿×=Á6Žç•#}ð„PÿJÔ�ôÀäµ#ø£UÒ‹üŒõ!_#¢D‰D›2—]&03>±6žZ Wµ@„èzë0€#Å}Á.DWÍg6º§�0ëÝ/gl�•^9¦7Äv¯«Ó¼Ì¯ÛH1¦!݇…Ý¿†ÄY©ñ#P¤KBôz±Ø]�\1gƪåïÊšÇOtSfóÐБ4†H–óÃCfûõÃRÔÀmÏúm*KÖ`R®¬ +ýRf êsædÒãKº¤¹×:£‡$ +wãÞƒ[Ç\œznp3¥ 8B±þÉ®ãò"„‘EeÆòdüÎQËad¾O°q&÷ó( ,iAQíε6mÒx5k"SÅÝ>zòg�ŒâvÚm›ã‘Úý`8}YxCÌP‹Hn$((_¶O’ª‰aF¤…u­)¸”÷WVÂ'Ÿ„…ágžO:†Ä�î°"£ñø³LN%’G*—=”Í3ÆØ—�â´F:€D‰ˆ‘¨ÊljÚ[†0#8@LG$Z»ª ŠE("‡¯æß%¼"„ñXrÇ2ôQÀ¬˜6Áº»{±q¿÷P"òP”}NÔ>â¡æÎHC»!ÿ�ÞV,n˼z)mè+Þ& +M ¤ë 3ÂUPá˜EåC÷¯é`EÂ4 “Œ��åÊ–A÷ùiÞÓáÓ.ælí[0~Q¥‡Ø�ãßßLi±ÒY0l%°zSªI4wƒZ°?bCï¿�—lŠäÄŒr#ƒêFlvW…,!Ãç|ÙPÀl™9^ð¸ b!ÅЦ< B69Ï M¦ŸÒQg3J²£¤ë»8gh!S6þ�\ÐpÈ ^µöøbôø&•À=BeAE†�tfms?Z¡ÛÐÖÝJe:âîðŒ3Àȹüu •ü5©$ˆ8Èdâ¶ãt\°âñ‡Õê¤ze©0Ï*1hÏ_œ ßÓ.… À‰ç¥vû²a £Î �Ç@.KŒàн8 é#…ätN³ 7°ñ¸c×ra\¦ô‹Ïª«HA|¤¶|w¿”»iܵ“³cáŠd1Ç +“ˆÝz¸.Jöñä§ÅdÊþ²�× ƒŽï_ùœèàB + ±^;®•Q9ɨ=¬ì5XŸâ={Ô?æÉõTWM…l-ƒž™`tjåâ¼Ø8‡7-¯3XšÂ¤Ÿ„Šw ~Jâ5¶Å/‹f‚ì]cäã–EÜ 9!š'(–£¦´$óˆ9ºÚQ,"ÚktÂ{ÆvÔå€ãP˜�l¡ä6â¸çß= íB»x$Ä/aqD5×Ä7uN¦ßì®ÇÑ8}0›¦¿£-³ãþÀ;Í*Òê«Ö@A^=>7å5•&Ãp{x d‘®Mƒq&ç^{Eä;Vh0ˆ(¹lPôfFC†K; è‡óeP•ŸB $Û‰Öáà}ÞwaË +;X³myó›ÿ(4ä1:>%9b\5Çï?ö–G)60ñúË”ðÛz¹×”[�éíD=TEð2³#4dàÈ^d +õg¡‹€¯íaž3dàç„Ü÷Ä€‡³úвc““t +`¬ØVÿ«¢ßǕՙáY~X˜¡¤Àª‚Ä$î�&µ´[y¬ø|\((²Xq“K;*s ŒÁO=ØD@Ðh´šæZ·÷xv$?œ\Æ[ Ð�ŒJÓ‚�R*<©Ù¿O©l†aàJ¥q#Àâr郑Çñ6Ñ.-óÕŒSÑZze_¬ª9†)¦ùFͽ`@ù}ÑDµ[�ÞôNù‰càA`ÈÑÀ¡›wbÞd’¤)¹ Îåfy C�Èe “ðÚÒY’n�ði"�cÖÖ¹Ÿ¸P¶œKõ2cIªˆÚÈM´>²ghí`S¹\QÛâ\màÖ·ý\ú¦ºÉAÞ60�ÇHÄs,'$ú¬¿žqÉF‡ôV·ÐRQõ¹ ÛíB=ª(œ‚Áh¾3I6xo47ç}‰ûvϵ:_�¨·ß±‡+s”™“=KìP�Tð3;ö¯-’©UÞ\"ŒÙ£�´.“z͆®v�Û™÷È VÛöR.™ÝÍ—(û–m°`�.¨I8,#�q§Q­§ éKv ©Û>ë×Ö1Ïï’9îäGÍCµÔZ ·qh­ªžVQ®ìÊ[“‘n´#@sû[‘kéâsbu6_Ujç¸s¼Ð5Èè>|Tì�ƒ›q2–£6›£ùOŸi6e$}T ÔƒÛïr8ÓØ÷0k éÙ„rè'Ž(뢳måh«3»@¤ŽO›±¾Ály…K­®dónmØ kÞñó!ÿ+èøÑ}ÃÅ1ËG^ß#±&èc_ +×–ù˜„ÇÀ ©›¯ð}j¹ÁË3Ϩ!Ïðíw�—–OÎ>°M:>'ÎX&#«‡6'ÂAN_À!èÁ³ š³q÷ö —bOÑícÿ,­XÜ×(G|Z?ÑdA”Äö¡¶Ðrâ÷Cá¦ÕŽÖ&=Ú—œ»:[ŸšŒjr9ŽÈþ¼³ìíÀV#2Ã=ïzåjɺöLHÞkÜ›%û>\¿¹«ëü¾�Þ<�‹ Ü\} ‚OuæØCоsñ¨NÉ�EÂÀŽ!#Ó +^!M@ Tx�靖ça^eFtwÃÉ�äütäVªeY�~= -ÑäÉõ1©O»«�½ØÛ Úlî9q©¸yš°„Ñ*ˆxº”ñóiœN¡ºf™ Y0Éf=øoaÙ3ޣሀf¤>fù+¿I7 ÞÜ•âËDQ ¬¶SM+6!óân;�sA±V ×ëSÔL¼œ©Ò¾ d{ƒI{êfÜÀ×Ir'ÿ=|— ôª§pÖ{§‚ò¸+�-0³Q¯h“tbÝxÀ Ž ÑR¬Á(WÚ$-s¤O/~ú�]ˆeúòðáƒeß`f‚œç²ñSC’³Ä0´Xõáè¨>ouÁ‰aQª˜ïCÛƒ—î4É[ú¸«>k{Oï»k‹˜€oMäÉBêy!Í@…#¥ÂÊ51Ücfå©�ÄBþ€aL›¿ {Ý¿×B¥ÕþÚ0½ú%ís‚¯•Thš34Í}ñ‚lÑÖB¹EȦdpºç¾$±_2+‚D‡Ygbó?vý5Ö›„€3n{÷ˆ -‰†ÐuGÜ.ùå-KšL‡Ø$c®Âå«R=F�Êháå %0yH©Äa4 –R8ršunêI-W Ä„é–ï‹Ê¢ÞæKPÈ«ÿ54É:hž‡Áá´™_±oK�L#B@\6ô««¦÷¥Úß�2ê_Ö4þ®OBiIL½Ì’¨ø@š �ä.pƒC`ƒ4ÌÅ’ØÌÞç£ÁdY#8>âØfO½eanõ? â}$³¢¯4`(³dú‚›§{¨‡£>°|U1Bß©uâˤª9Ëø"_h·b@¬‡ƒ»�¡FÎ’£�hSý´YçR�P|¡àªtÏùþ·¶?–ç »,Œ:JMüÌpP%Ø=ñó±b4lËô•r“{Ål²-Üzüpd$Üh”ÝtÑ®r‘¿“±Šƒ¼‹]çã�´±·%Û%…ƒ33,+r-<åĵ +¨Ø®SÀœ�Ñtš_|hJ§x ôk%^¦h�ãÿt7™±·3n¯•Ñ™ü³YFÔ£všè"ÇÄîÀ -k£|ÒWý¡ªJiq£Ò€^b�ð§ Kh“ý^ µ€C ²˜{sF�ÀF2D•î—‹l;iðÑ—/¹‚bˆ²~‡µi™î ¸]ѪµPÝýÖÁmÚφ½P1‡¹ +éWÑgàWùú]Ks¤�-�±6¡ù�³D/?@ÀüÒ×@ ZV'Aõt÷{)!O�‰HõYÅ:wôéÍb(kM*ŸIìtª3zŃ\’ØŸ;¦»»µ§p\�¬N95ŠŽMÛp׸*â Må¸bzw’ß—´ \+?-‚ð›æ:‡^�Xw£� YDAý+X[؃üÛw–Îóy<{AcÆkƒÉ¨x»P©þ¾á9ƒ†` Í�§S%ïYøK#ͪ„;Ë¥D™¿æÎÅàžµ<œUiÐ; ¢“ |ñÌä“-q.ŽŠÆîeTŒ¤=%§)Ñ^ `?S!/Å�\',$«»v}ÖùQæ µä¯"`ôÆ÷;ù�^Î÷¡`ú�rÒ¼!ò 3yr.—Š–«„+IòAýÜ3°Ft? ÿI=†Á¼mÝyu"gPï9£&�4Î<õñoʼùˆùåv)yß*C–@ÈÀ§ô!¯+åM<¶©ê�8üCJºñåF4’9ä}ÒGIt¦˜+I�÷âÑ¢aíò¦ ¶6+%÷ÝÄ^:½?‚`ÝîUg†í›,D;ÒÌ]ðóå.<ÛLL©iÝ2R¾T©ï6D> a3ƒÙWH€Â¦¶ç;Üê³þ©×`£$zø¨Hü`|X[>�‚Lô~#­ÓA‡„‡¢•å °Â>¢Òá÷9<“NJÜØY��ûCd˜Aœž �Öavd³­ÆËž$yÒýR¡\Gý!j`Ñeôjº–^À'—4)v!äxÂiÝv´e¸ç1þqy{Ç8È ä“š,1Aɾ +€Šqô‹âÛy�‹®_ƒqoìˆ5R�|™33jëCŒÛ¦H¥Çw2IQÔªò†bïsÁ\鯵E£x³Ñ:sŽ#cÒɰÁa Z�çé0à1Îâ©'sc 4@ïŠdÙgÍ:FB„ýA\œÈLÀ7Ëz’dó–‰0U’ÂèÞLA¯¹1¨s4`¿–lÜB Ô]õD›�Ô#_ö²†ƒà0¢€Æ>s×9vC5Gü‡¾~‰ðzàz«ÁìàD2MŒnô<†°¡äh~‚PZ# )µËFÓļ6ÓÃ]óE½Æ>q;%È”]Ê™>Ò‘žFǤ—'®wyÛ²,SOIo8Ìê\ ”oEâI\¨(µE]fC“DÉ4ÿ;…JºóLÿR™ä�Ž¥¢H6ݦ�&½g@D-"?�‹ñÐ9keVuŸD&;A·nƒ� J»1OÓ?ˆ‡ô1 Í8tÔ‚¬Ã0ˆ–Ú.KíoUIfºH%=‰MÊçÀ<¯ã³o4í]�?Äηø FJÖ®7T[j4‡!JU^†6I¶Ší‰ºäA0ý h/Š¥ .ñÍ×kXÏHZÉù[,<¼�xhH^gú¿÷õÐ?q5qú!î¤ÌSåB(üØ>M®'aAÎA{¯bˆ*?KvÐ#äæ=è# ͳõä�ÞÂlõPq¼Š›Gà„‘¡ÍPºÖKÍ{«¢7©KCg–méö±gs^/´�Ó!;ð8ö5>ü€žãû<ÖEêÈr¾)J6†q–Kl|rŸ‚Mw;Úp hó�üjžÞAõâf«lYSÛ4ç‘<àÇ唯ÍÉÍùùÌ’P' ‹ï¹µk ÊòóCÜŠö;¥zÑQ¡ÞøG"‹ä-p[?ût¸*WZÎ^ø= ÂÌ�*ÖÔGS¤Sìc·ÛØüœ;ðtP]\†¥1ÃR³YK[„*–‘£–)ŒEs×÷H^¯œÛ=äµ?nŒ')'âÏÊ'îëoÊ%k%¯öL©¥½5k¿!k=hPìuçîOi÷\ªûo󕉧ñ+l£Ïwúm�ÞEèœf2.28= +ͶÁDFçß½ æw`¥Gcñ>9fŽÌ‘C6!i³u–¸ËŸ“ž‘ÎŒ—í%nχZe@Þ÷ðUÊ_¡_ŽFêÓÕå©¶Æ–¤ …;í¿áƒ}óÞUÀK4¥‹£Œaî¤>Õ*sAºêšFÃv/öçû¢*‚§f"Ú®&忤P¶7 ¨U3•e42;ñq�){Œðçu—�—ô‰f ›Ÿú9¨ä´ ¥Un*ì¼Óœ5&'¬#ÖÀ”7Ïn&"õŽ:H@&/Öv5!3BH¤Z"è�l@«ðP’ù¨†f­Ž¿ÁK+ñmB:`U>ÃA·~ qK‹zUqoð,ŸÌ´Á½ÚNPŒÀ Ù)ü†A…ºùðYv—§oÓP„.‘[f확¿Ó¡WgÚ[mCvmµ,ßX<„¬V>¥qÇ+U(˜d¡k °Lá$‡#£ü†DpUì9¢mÄÕ>Ÿ4âöŒÙŽÑ€RŽ/À’ ôßíà(�ü”jÂÍÓñˆ´œüjoŽ—®€®3’7ɇ˜jØ {õOwFFÖbâŸÏÁ²R’êŽá ÁŠÞ q{�MCYG•£å|;‰](û¹âtRÜeˆ†ã<Ñe�ºJœÀælÀ§ºlÒø*ðìªK»/O¿Ãë‹îþ¤Î,’�>¸h¢@úäŠLyÙÚr ‰ÁƒÒ|ŽŒ´ zé·á¿¥? 7Åôä«EÓ`];D:£ÿp®„ô p0þ+6»`®éR[â�Û4ÓðFjÝémj6Ãÿš¶Ø}×SX6Îé�ÿ™EºÝ�ò̯åD¯¢uå=öbªØ++Eãr: àG¹ŠàSÍ‹Ó�¯ªU‰»¬�+Œïªá»ãÑØÐu ùô™Ñ�ø�†–9¶~³¯(—ëQ£ñº¯ƒÿN/_…Ü ŸvNÛ¥bvFp5qV4 ë‡B�iJ™¨±2)BÜ,¡‘5>³ÈøÂëÅ•h‰(•¼Ü”XêH—)ZÜÅÝ… ˜iÚA�IZrO 4ÀÙ>�^öª*km§GºöbЍ5n€§Ç’ZÎ î@±vºXË’y_2Ò7¦)nï½`\Ðãh¨x zä|lâ:Ÿ‘LÓYëa1É/Á j/²’P·ÆÍÔå~ ï®ï>¯½IvfXoœ˜·ok¡ðr¦ÁŠsk!Òg¦zü%~z.èOlcßsÚ�xû¾ø8ÊÞI¾k¦Ôùñe¸Æz‹r‹\)P†y�¬<– Âì+{”sU¶ú�nŽ”øÅžÛ€Šyи¾èÌ1g¶²s ÷©pJÌøÚ¯ÕK¼J°›ƒ¡²[ýæàN¤Ï½U›: !ÿ}3Ãü�Ó™ò¥Á„í,„×[€gÛÁf8EEß ’çlQç}gIˆ`ܱ¼¡!’æáEo’æ£Ð9+?€—à *Pà¼é#¬#!ërñ]ÇX\0Μ &Á +…œ0ÇwÃÂÑÅ «ÄÛmטgw,Ñg(î";cðY„}Ùë�Ð"jZSa”»I¦›b µÄXs‡º×8_CÅÕŪÂâ„À�ãŒLÜñ¤@”N£¿Oôü«—B§ +­(³ØåÑwŒMÓÇW¦ö“p!‹õ”ÂÞöm¬çô8ƒNÀ|€¸:É>¥'Ô�È5°•§~w›ÚNP5+?Œþ÷Gü9x~ï’t;Y"caÐÃæöŸóì~Ù©¿›�´�“X¤DŽAWˆÐ»ñb 7{¢u `¼Œ¯ÌǤ‹e· bcÍ‚ÄìÏbLL*óhÆH)@~õSƒÕlIj8�£ÀúÖ­=}7…EÿFTÒ–x§Â,lƒžMcîÝ»¶]Ð5¿a‘ý�TÎåÓf(êäq œ¦,Dß²ÕIúI^!|û£¡:a_‚ÎÅ— ëŒÈ%ó|·Ëµ/ë,Îù4?¤•pò­žÙºdªAÐx(ˆ#? Œ¢C¾{ö>2Û#Á=ÑÌ’ƒÄ×ÓMQšÆ“k‘¢Ù.Œ`ÒÃb9ަ"1¬üYJÎÆ*þF­“’š ÞQ×À�”œ1ÈH%O¿„ Ä„lbéVÎ^š˜̤ýeä{œœ {hüÝ}<ªË aâ@,ða~5�e¡ó„1ùw³~Ù¦í*ùwÓc66`íf1R ø*µ±(ÑL¾›“…˜DÑÖ—{‚“wXSdèYîf +ç´ˆÐvÅá ÚmÓ{ +-â*îa=6‡ÚAf`J�Þ.Ù±³è¿‘†öþ—.È-bÆ‘ãÝëUî¸ÌQõs ] œ8š%Œhº “#{ÑHdBò/�Bîl`H$”y¿>ü²ƒ®ª|;|;g¯ka´ÜðOçQÝË¢)ÊVÌ ±H5çÙÈ'u~ åO‘(\®YßEŽàˆ5èg—¡%"-¹yÑ@é ðàM#ÞFKà÷ráå—§Þ_öüDkSjÎÚ9¨1N¹œ˜úy.¨µ¢v §™°1/tž¾÷öˆ ÍýçuŸ½¯’‚pм¦…SK${S­/ëÞŒ„ÚÆîn&qVëBÓ£‚rQÔÌz0¨)1�¨†Çàk¯£ØiH%°©NGCù[VmÙïB#ò¬7ƒb{$‹9Ã…0’<Æ8iú†uŽB=ꦰõ":d%O†¬dÎòCÕà\ðƒjvhû8„��.4SÀ óûÇ$)gXs/ðpß…šŽ V‡àu†xé/mlëB!L“$y—žêÞ…DùMž'38ÜØÞ­]yã6¦’™À޹ñͲì.âUhÙ¼ÍôFÉ�ƒl¹�žû (°Àœía&FHT´’ f­DüZf¿bÝqt­4yF¤ 5_½?߀¨9Õ|A_È1BÇV›cA Tí³šÈì,‹Ôi>þ1 Eûs2š�ªôÇå\$‰ù¨G<Çw~F£ ß¶òŽYÁ0bÓà1Œ×p²‰/g´`[ߢ#œK7Ž{.î]?Š•§JÃNÏ4ë7ø/÷~ðÔAº^ŽNtàQ8Bs;–ËeìÖ8š5B$ÕSÓiÒtAžzV…™™û„‡ð“δÕ,R^i$’¤' +ÔÙ +ëæSÚê˜w<¾ŸRêÿ0¡jª%ÎJ?lÒ·Ÿh«@&°s´“Ùd‘ŒrЛÃÉ<¨q±.±�æ +#¹ñéçéî‰XÞo$q’�yúVZõ„µˆ(�!y[¨a¥QCkºšt¦ÖÅ[ñi±eĈ¤øŸ‹|5,±F>øÔ$0˜mÛFŶńÏdÖÑJq¿+ W–[é¶"0dÇØ��šlSÝÚlf6›Ù°›Íf³™m6 0³áp>Ê0g(@‡ˆ„((ˆˆˆF(…Î Í„Ûö´Oí™™²§Ìª™Ï|>ŸñùÈgæ3óùÌg>333‹!!ÂA¹ˆˆ„ˆˆL633-ÙV2ÙDd昹@45ÊþÛÆm´ml‚mÇ‘ÛÆ�Ü@ˆÈ(¬¨±Ž¶Q½y LìÝ;q/‰ïUµxU­ªÿ6\ ¿{Å¢j‘ÕªbÕ„Í|à)€­Š ‘Ë?ˆ¹*4‘mÛl33±mÛ¶­ëæmƒEŒD')ðÌ ˆˆˆ(lï­Û¶Õ¶mƒå`ä¹ÌWpHëû¶íÛ7ŠC¼Z\b©ƒc"&‘¶R +a)‘ %Ô/ s ävÒ�öº´Ã‡õÏžÏÊþo9A?{i ÑÚ[ya 4ÌU¿y6-è©ôÍ�=‹ù»„ ñãkz¬\¥¤Oì<Û ÆŽÐo¸g탞 œ}W|öç¶"Œ[÷ÙfV‚ £“?É6 ƒæ´s—]¹ùE:~ߥA2 íËo�1I �QÓ QÐîÐcH1h `ohw‹µäúCÛA‚òÿDË0\BëÑù³;çµ…R_õ¬*ê¦QfÔ‚hû`°Ï2Tfµ£¾  Å,L¨{ •(÷œI£8h]РЎß9† pË‹r;ØJ+á…[ í-b)’ޤëÁ,Üþ퓺ؑ_Ÿî1¢Žks^žýf{æþè‘¥‡7–ºtù®±d™’Zøl• +uîÓo•Èë•C@áTjOí¦VpýÞÿG^m‡PR=&J¿ÌÊ Ó%¦x†úõ”©º¥Ìë#•ø<=Ò\;mPâ�žVØ£z ÒéAÌ–\™ý,„�€¨Çé¾oÓ=èú8Jñë„ldýQÓ:ñÃÏè(óLaÕz`�³ß²Ï(¡�y‚GÂò€ÛVqð⯬óŸÞŽÏ®‹:ÚÇXw+)ÃÔ~ +]œäeÌÉᆟ)Q¯GÅCâ`ú%OXa¤,�B®Èá t¶„òõPC`g›ta²Ž‡dÞI=¾9>‰cŸiã ë@7CD¾Œ›çDØt"¥||ݸáøÜc7Šs0ôxŒ¢º]óÖCPÏ©BO–¬§ÂmNq¿ëâ¸57(åñùÈWÂï6n”˜G¼Æ›«pºÆ¢ØNWÌ$ò�GÓ¬òdž°Š²òe^ß{€ˆ¨sY?ÿÒ  Ø1ò­èC�{zîþ²3^(ì$34°ôgRÒ6‰Q¨‘bÃL¸JA› +Ð-)mR¤ýó¤ôàCÜT¶3IAì®~èrcªRôµu·Êù©ÙÒ˜úIÚõ³�G¦£!€mo†Ã¼•È­!8ôÃlWò0(øõ'ª±#jŠî×L|!b�lTÊ7=5?ZÄ’™JCž š(è'_„­Y‰ó +úþi¥r”� aYÞYæ…³ï�QÐ̺Rä%FrƒÚ(,×rùU¡Ò•¶»þžq¥Í¥èø—Z‘Ší¬Žh$ZtÒMáùÛ§^iüö$Øs…ä•’àpyßpWrA ç‚gÀ?¯´rfD@ó£ ÖÎ+ñ‡Ã}mjÆ~ºû‘K˵�§ô?�„!büS|L.G:Y×}ïëK·á«‡µ¯Ô$]¨ÐIíÑꯎ&{“\y˜©.œ!L§êÂmŒ °�ž ñEº–K:†Pi~ûw]:N:³F�¢+¬œâ7éÔ‰Îá“aûÓŠò¸e¡¨(ˆ•p´—êÍdðò©mûT !â–[|!\ʘ.&(Ÿ@ʵÇËð¦e�&EN»ÖÞtÏMZ<ã.kOa1™8'íá¤é]s $CgÖ@F² œ(†[ä&ÔòWA¸„5ý eOnÙ™N(KÛ,ƒI—zmœb$?¿Ëì'¦yü¼¨¬u^äßûÜ ‰ßõh(tþ ÊáêØqqÖôÔÔçü"ù÷n!>Êßn¶¦ßÑa½ãÚê ‘Z´IzÁÂK7ðR�ÂZÀ1Ë­ñ~süQ¢H=ŽÛ0 ÓÞÑt°ÙO„Ÿ1æŒTOÛõ©°Q¥ñŠ‚MsÑ·ÌI䡯<âû|-ô�ka Ú´#TÐTèrª&YNox-ƒ«õ½ãïÍÃÞøj°Ç û%^Wz\o¼ód¾ho`,`Qæõ†Ö[:“^uÁ©‹ì�ë¡ò\ ÞøÐè«1ƲïùÔê/s2šíXym [³ÓU72ðD”ÝðMeçç’M Ásƒn$�h¢ÕMÒ�´á(—�ßz¸¡Åd8˜Pì.ÎêDŒc$zwUB4póPî1µ +܈ï—Ά£ºñÒP~ûÖ�ÖÛW Ã�ƒR¿ú7�Û‹œ÷Ô¨jÜETþ©nœE“fáøŒ¦œ¡Œ~ÅqCuLøÝÜ×UÑLµ´æY2F@£�ÁæTƒ¡çP_7Q”íï~ºÖ×%Ç/[ç›Ë푪ÖÓz v è« +Ö‰E;™NV.,÷p’®ôÅ_ò8´4’·qT̨�­RPUê9 ³ˆØqȵ1¬äø2?°uc¨´Mâ÷ ;‰VÈœû «%¿þPúN\´… + ·^°çH@;ø[ÁÝr³À… + »• ooMÌýÁ?R(ðÑŠmã˜(çþ‘_ê¹#¾ ¿ë�ÿ¤Œ†ÑES\PÀŸ+rÅ|ÜŸ�?÷Gœ<ÏÜò + +]ò<ö vët*�T€Ã‡uÛwø8wü¤lüR—ë\Î&Þc‡ôèI²�µÔ5ƒ8AÑ +[Ûû!d\÷„ôÜ?™›y*þ¾ÐCÞÓÄ&XŸ3¾­ì–p•´ꩯç0\%Æšíîu@p +õ³ðŽÂ¡œ0œâ7»¬ºm.¦¤¯¢pkî�}úÿúÀšÜKr³Âï}úΚRæ5lÄRX°£˜˜íÚ­·ºtØ~L°´·Aì½:>ÁQÂÂû”[/¢i¸&³ˆÖÏ@¸Š +6 'ç!DÒÚ*6(ÕÏE{ ·@¦\½PXr«"ðȇ›3mù4>I»5¬ÓÕÆ ’(uÄAÑ/VHO�¡8nЊœ ÔFÙ]¦ïl;?}Ž)ØÎRîa£nûh“CÈЃ>Ê‘ÔHR͆—2¦©¤çKú£P÷×B¥^c3¥VŽHWlǬÐÝ ê¨�0 „®TÜhÇDt‚ l!ít´BÈe6y`s#¨^N"C¡ÛÜ*Ÿ+8Aì„®,hŒ‚u˜è1Fõù�Sõ+w‚µÃP7ui“Z‰ç“¬ýòòÂv‰7ÍDð�o"|ãÆ ºˆëz¿²Æþh3w´÷ ¬ÿ5¦êfaú&k ÓÌŽë/§Ë8•JãkA�|ÛoŠõËhÀPé¸9ÑvcÜ׆Ë�k'�yÄyUh"l˜&�ëˆp9†ãd n›©þÉê鉊0µÎ…>ô/ßÇÐ"ÌÒÀ£ð“¬-;ÕŸ'©e p…ÅYOÇþÅ" LÝxuðGF›l^ÿ'7 wxŠ€ZRx]Y‹Ú>óùº\‹ ƒSRH�ïÙÏT„p 8@ðF7¶…ìuxë ö”\Fnî „¼¡9Tɵ0ùÚË‘Tq+…Õœ«qkŽÊIÐwaFº$(˜)X\>å–êžÐm<º\é%&Ó*žo¬^cµ«ý j¨&ÎìFV.æ‹oÐc�ì(Ô?W¦߯ ÔÉ9å_úMDä¥ÛWèɃvtVsbÞíu;¶Ar™£ò–üH@H~VkMÓ�Ÿdì‘ëpx�å:¨å<xh…kîâŠ@Ä«™³ðß̃]óuÚâ°áŽ™¦2†@ÐsåºàÏHO_=9ê�¢tT§²ƒÐÐ@퇂(·T' Üv`kŠ�Ù´A•=åèKHFLÁu“´*…�ÿQ,ÓA!'ô²`­é2›"¥ä·y©6zÓIÐHòì~‘*0.ö9Ô¹‚¢þ^m£ÆÆBªð«ÆâíÐý¤àQîõ‚D&’é%îã¡ÄŸAìXì³Ô­'=Uà9Ðmèÿwâ UÁ·¶8a½³ØGîšÛ¢¬Ç—*††°½­Ël{Ä)({žb[2üTÏž1ÓºåºR̽ˆƒSBSy§5Ç”Jʰs:¬Çak­Ú;vžOþê°XvJÍá­ZqßzÝ{hì|k�ro‘Õ7V’A„l=ˆAΟöñT_Ò¶Crš óV1 ZòM©4’]¼©¦ƒxý§�Eå¹£Ñ[@F(F?þ<Ü5º–-½s‰we/ž1¥Å9¹Ia�ú ¤š‡2˜z=«Éñ” ¤x®ø$ûà‡Hÿ2̡ &Н{ñi?‡5³E{ÅŠ%†ër› +3v_ïŠ>0]Õ +<ž{�­ÅôŸÛw¢„4°ÕŽrÖ³qìTaÈM袞oZ.V_rmõ ƒúo‰@íÆÃ “{‘³¦DïôŸZœ*žŒ9.m’°9orÈÂ- “ÏS4 �“\â,Q¿ñO”cPA©`E ª{—íÉÑOt*‘œÿ¤‚B·q2fbȳNCt�ö¹ â?@Ê3 £çföæp.%ö]ïA¹çã ø€ò+Þ9¼ùcÌÇRG<…)ôQ‹h¯Ú±˜‘ÒZ¦¸'U[³ +}áÔš¨ý?U. +¼”ª#Æ™æoªGö"#åÞÀ Íäb¨ÏjÌxçá(U†(ðî/Ûav\ªµy (é•<Å•JRž†¶=.½†f*݆HrµCFøÿ0‰RÞ»´J¬¦9HÇÛŽHŒV×_pC[âyëF�ªÄé= +>/O¯'‰+ÎK,�2¦]pë<�% À¾LVÀ‡çÐ>ü§¯Ÿ¼èÆñ ûÊhôIk®¥‚9ööíWýí‘ZÛ5�U&W§ô±U¦[×ZN[røö”·A¢â4�Læ³E:21ìºõ„oªÇÕ&Z“ÞNÝ‘2ˆy‹w¥à–Ô-Ã<Ð b¼/ŸÉñ ÷™™6€å›„%¦ˆ„ž`¦=»1ê¯ü¡¡[£ñ©bÀT³âèÜ9Ë${ÐÙÒ$j4øƒ†Á|˜éÁ"ì|ã²×{åÝg�Ë!kÜ¢u¥Þ�Âõúy^xÈÔáúQ03ðWõ2áZ™röþÁ2pã°óô9U�DùdÞáF¥G%XØ(o¶znZ¹0,j�ÊVfA¹™�&¼OSjVípÄ8ÎsVØ�Å‘ºpýp#F ¸Ä„ª=… +üiþúâ[Û±˜žàåæü××\ ¡Â—ÉDn®¨ôk‘y1ìsêÌê#Néè™'ç °dXô6á_xµ �Wdb½2kââøü!�3õ\ìy Iq~"ø‚±OÞI¨å4e#z}:¡„×­£“š[�-¢J‘šÃ©ø¤�g�̸ô::¥.F)•ô‡¹Z©‹Ñ²$íé2ÞMÖ±a¥¢e4^óëݘW��ÆD.Ý•d;TƒB%ÖÖÔ„ÛŒÎõ1aW§OhñƒþD_Öû¶åxüG5bÉxŠ¡ïAà¢bìÌ3«xYáˆ/\óË>ß>,Ã)…Xô˜+`Y§�{΋˜2ÿ7°¶ÊÁµ¤íÁOyM‡û×Ë͋вêX[A°_R(ZMãã÷kŒâFþ‰íž}¹j_V‹¼%~šÚYŒa<ï ÆEÄxøø�LHpYÜZ"ŽN«lJ­"Ýx™Á¬Fí²Ü?úÔå—UZ}S+¬&v +„ÿ¦0N%#¶ŸJS²ä4×V0(LË�£“Ô#zf·b®ÄôG®Ò%NÿÀ7[½ÂˆRU\÷\µjD— ËbuHÓê}ÃU:`IÁ@¬éZl®pì#­ˆù‹Sÿ™ƒ|½ü~›ñ‘÷¦ÄbýÓñ~<8g$èhÉ®xxÆK·¿öT»ìs:5ëç‚ia“Š#ÃLÉ ˆoõ¡¼C_dIPIÒûÁGÕ›:`¼3�…ÿžÙ—ƒõëFdÈŽ$¤j™”·Ï á�£ùå"qe/ó½ã;‹ç¦ +éÊ^æ"À2ñjõ ZK88 ?1d±æß*b±�¶ÃôtÏÀgF š5V\É�ÙhÎrëE¾ÍŽ †¬,ÕˆÒ€ÆR3[ ¡zâÂ}û3f2úÚdî€'ü°¨Rk¯»Çé@]"E8ÊÇ1X�·|öãQLNccÀk¨†½‚�Ê@ð� +HÞyõôol2m&üí]…AþöN’n†ÃDàoŸSù2Ñ,>…Kϳ„ÒaÂdIY´‰S´ ã{!z=*ûd,‰0bD�˜‡ñd"i ­wÁ[R”ÛÝ‘\Bš‰ÿ9˜J{4:ÿ çT¸[Žf~a7bê[�Ú”àniâ±°*ö�£Æ½,ÐVÉQùÐ>pyÿ< ¼þUvSú7E°ö2Q,ÚdcÝ<ÈÄ€úÊGŒrøŽçå”qÉÙŠ`ªt΄ɻÜä½ )à^—«Vå3#/\¹OzC Dg’%J£ý«(ÑObÊ}yÜ:O¹X®‚ãVÉ*qô`”2ö›Æ·ÕCx¨ò•šc–´«>÷†Ãu’ŠÔ`•Ö(§ß¦,�#ÌEÇ:<¹PJ`Ý =î—3KT†å"Gº%šÍâ?8Α¶íV«CÁyŽ`4ÿÅfôf¦ÚTÇ´~wSùBì%ÒBžŸÔoâ¿ +ÿ–~jl(/·kðžô­Nfœ&h{š‹Í2’þ%’lºãrŒR¿.z+æ¿UGr¯C€«€=.}ñ�\T�ÂÜèMW8k� )�‘yê5݉>EÍü3^Nz•2,Öf +çš+ýxËLNNM±Ø?"ÅHžŒPÐüŸT…¹5¼"ªåUm'ƒÒ„î7ôÁÿÖ~cœÍ³Ë30à€8ËæÍž9jÜM$„ÂéåIW)tU´†•’”iÀWÐ@_M\H²ÕfV +Z« '§Í…Üü_È‘Y»ºË´ÅÙ�óð|–|£—àI ®þzÑÔù&¼ãóÂäJ›~?S¤Fm·â‰0;TKzÖ™`~dªPö¸C@§ú”¢.v�%»d3MŽÔK±‡�Îípö"Ç´e©pî쌿Ñh$K(‘ŠÎ%+l²SSð„kËÄâ¹Hˆ ®ß€ÈòŽþX=PÞ„ç²ËžgµóIï\èV˜Í(r!ûè)8È@��…Á,ïˆ#%d®Á¹‹zŠÛ†°¼?ÏøÅvõ˜1¸¨On-ºã˵lr ¸Pusr°óö™ñ›\ñ +ȯ"EN[ìunö¿r&wG­M@š±bKG‘k—Ù{£½x”˜@›Ë-à Ø’c@èýÇV•š2'?„ã„bê&§ýsëoÅÉ¥•vX/t1ÚXy[àõ"«âHƨ?H«xÌ®÷ 6Ö±•-mn„#>¶þâ¹Þú–ä¢>hç»'¹»Z‰w3Žœáƒ¹y̹uâ#gªAb†©‘‘\”{ à +Inó‹ÞX§’KµÊ¸V½¾ÃDÐ%Çt1ü¬(\ÈWŽÕ~j/¹“¥9R"…KŽÿÇ-"©+ÉzEß09šw¦„m³e‰Û9V3QC&g_›1 c¶°É0G1³…Ñî”4‘ï‘fÁÉà'xôèp#Í|òZr3ŸÍ‹­Z¢Æ‘´èdöPÀ�‹%Ç“YÁF³[rL!ÎÃSôæ„)£ýgŸZrÌ9¥Šî.¹]²T�(QÕåníšgZ!µÍGÍÈÉϽçÈB’åȺ“?Ç\.‡ÏÍà¡Ð e ‹î$�£ÿw‘@™bZ%#ó&ig�Q*´ ±¬ä54Ïfdr·45¢aQ·0I8‘äeÛ ³ß½æ6·1påjbÀ«š•bqzx ¬>Êð4Õ`Ô×—PdCH�ÀDö„‚}hDnUÏÝ5t¬ã%²šº‚Š!€Õ¸»& .‚}\™ç6Ïü[1§Ò'±û‹ž™¼’ÆsС�Žz _©¹#$§'$úNÓ>KJøÇYIˆ•s%„Ú‘_Iø)ö’ßµ!&Ì8Õ8u ¼ A"OkdŽ5‰�)=„O¦Pi'¼« ‡ Iñ7T2Køûxì5 ŸNE$4AoÀS6!~½åIHVm{t‰�2Q·¿†ÊĆ&Ïx6ÉÂM¿ …Øá µÎd'ü­ M€hƒ…BÂîy®Ý^7áà6óZgT?Ò�Êš0£søÑÕ*hB½,tMüæMyâÌß_0áɦÀT„íÈôïä#÷C&äáÖ„Ö�º(Þˆwi·|¤Ì•ËNˆsÿ—ަ+V¢Ê©ÉWû¥M +19Ôÿ7ù¦¿ã_û-¦æ)ÐæQ}”Pý(”ûûc-öñÏ~¿^7»Ã¿í¸ÌŽûþüŠ~à ÒÐæÝ_”5u:Gs…ÒŸ³ç)¬þüYå¨Ê¬€J +#OSÂ/8.ŽÐaùNŠ]Än9˜mV_P›ú›ñpÔ±[íÅÖ·6,êºòŠt�çdü +åèY +…ZÒb´æŽuŒ+÷J�ÂdÑ¥’ÁÒ¸lW ”Á +uíoDú`Ê3 +©~î51KÝ” OaΰS�þÅÅpÙn�feË$¨ÖVZ�m´?ÃjsDlÑ‹ìïoL˜.™Å‹[×Ù%äyûR<±v‚áã!·ƒáÅ�äFùDæO°¢áb~VüCôNyy†Î™}-(¢:ù‡Ïú"c/ÿn�ô RQ|ðoüímZ–nÿHìÉ.Mkêü»Päðg Iª2'gƒxʿä|»È†ûìä(¿¥tÿÙòuŽÊ.¯€„¿ºBNÿáK[}ês(A[íwîRj$’@šiæáÿIQûÚGŸ œïè÷?SšB$2½úŸ”# +…øﱈ=…`Á_-„Xu1öts>J§2=•G4X%É.ž6,A Š9›‘¹¶Ê +Büz…¸lšÂ¯¯ì|Hx 8á×Ó{–"HØùu’ÓÌ-5À¯_<ɰôëùõ«—½…Õæùõû Ïì+ƒо…´?¿Îý¦¼)Cèë � ‘J_·#*—¦Õ|}½B€KSg2J>ü¼lEf�„?f_îúÑdöᧆ¥sÙdÚÀßíÍ4A+å»´­2ûÍ9s0fºi:,�ÜZvd®kŽ`eˆ‚.Œ ³›‘ÔX4sžJÛ¡¦ëú`‰H³½¡‘•H�š�¢ú�0PlvX‹šÀ ÑìO®Ù¼ÆŽ£‹-Ôì&fâ¯j3[k}[ÃX̦94´]¿ &³w_Õì²ñµÙ7HüÍ^œeMðpv° U7üåìIMåI§q6œfÓDÙì’Ö®Zñ©ÄïØ‡ ÏN,Lá~ˆÝÒL›lÅ>;…Y†¥9‘Ôü¸ÿì ý#­àh/bÈK`ØÐFé.¥w¡=.„\ÜòA»Á0­“Äå£ZiRê½�¬‹Ï~ÀVwˆßõÆ–¬pÌ%óÌm¼{–cÚ�Ú;Óˆª¥IÀa4"a¶Ð¶]e¿’U|v«±bbý³ =ûxv×�îì�ÎôˆB�½n!øÔÝÙ7àù¹¹gÃ…ÌyAiŽo@ºa# �m3‚MI&;»šH�!� KdNk¸¡� ˇx²½Ò\§Ì_@ÐFÔÙZÁÊKóp 0¶ÿ0�Ýáòš�ð8›±Ö–KWs6äzF¥ÕÀÙ{[@LRg“yf‚Ë�¥y¡W™ÞlõÙÀ+óKýìžÚ ±_´{^D_Tjn£…¥Ý,9³ Ê0ÓØa® +ï!¡´  U\8¡ï<<Õ1`>ÚÇ8ÖW"DÜðj3.´´ ¨™i³5#!¹ ÿ7!ñaxÒuÀ“m[‰"ÂÉwØÝt&§ Y3à¦;º?!¢ÿ¤’pRã&”ÒlÝ×·ÓëK±‘9íŽÀì¦eT…ãJ`9Á b÷±F.ÿÅlð/ÄôŽØ¨ã7f}‰e[+V듈M›^›%�›ip®´KÇýL~!øñ“¦f„ãz÷Tm3% ÑÖ“–ÙCÛ�xd˲h�ÅÓh´!g +=¹T5OiËÚÝ‹ˆ4ÈP÷ı°–e´Y8Zsy!…î»øœÕ]V†îƦ�ƨÜ8ív�5¾WùÑN2%©MÆ‹R½ÛT™¶c"nÚƒ‘‰°ÕB9mZNZˆHÿp‚-“�|6]q‚Ù™$ι:†½¢dýÕÙ‡›ßzó´VúI:ð~µy?ÜvÓæîs¿ä�UNœ.]Ï4ÎçžlCÔ~m|8„Ûv;ó­VŽ<ý—LD›>÷µ'þUïôÒ±�Î�J½Y΢vÆmK%×�ú¾Rù¼�mÄ/#“ +…Ì?ÃÜÿ¹§·3Œà|î„¢á‹jg¦0sóü>÷5ð™_D䉧'3 w@pÅvYáäw i¡xèA.Iަ]ÿó”Aw5ßtDC<àvGnõ}ÏÊÐe¶�Á7@¥”K¡æš``šÉ~ GÜ•[WJøÞˆÌ©P,bX@9 ܱ)Õ3Œ½’A¾Òº\/EŽ)ɶ2'à·5Ai2¡’:¶°(ãV‰¶caWˆj·I ¨â5èÏjTÍp äJ9½ ŠµÌµõçDL ¸‹î¬c0Œ‡8­Cð�²èŠˆ®Ÿ(Ë|�á�¥ m� Àÿ,ž\�CƒRí�ˆ-`Ÿ´+œÊ\‘­\]ï’éÂÔ9¨xdÆ†Ä ¡r +Ê”ØJà•â}Ä`/;ëÉ—ÖÃ&%+øŽí¦»£Aco»£¡9£¢M..‰Ìø°ðË{pex)#×NW©=ú¤aÊ—nP- ¼zÆ„j¯c+î;™”�TÑ£‡–çúN>¤’ÕwG<‚MW2ÇÅÑ£‘彡XI�ÕñMóð…vIG¯§ãawG‘˜U›©øL' Ñ;¿%«±WW²›¦¬jsó»)¼ºq¸OPÅÄ;^F�.4i"Eø= +|Û +JĽD""}Ž‚ÀIK!¦Ž“É­ÞÑBè’K§.åùbŒ–ïpÁÍJÞÑU“èê�­xÕŽxÁåÒ¶ã*d*Êx }Tb6ìk!ÔÈ]³À^L¨,j›; „£Ó0™V&}´`XZjÚ÷ÈÆ‹Í*ƒ.wðÙ‚%14b§.¶úGµãCrK�|j5›Ê®#dÈ@¯ Æ%%)@0HÊÝ@xú¾ÙÜPôí¨pã^ñQÑ ·°ôvhQ²!Ú"áÄP‡Çþ\è":ÅM íš5(wH�:Ü6‘~Æ";·–™ Þ)î A×¹Ö÷ÒC8°‘P/«Õ5‡ñmpQä7O(�ÌcãéÛºx(–h±·©ßÃü2g5¶ KÍ�ŽsÚ±ŒwOÈ–ßhÒn4Käæ' +WÌlýU] Y£ÏA‡¯HŲ絬íc`2lhÆn;«¿âïIînZ {P�ªÒesùG ~6u5‚uw s¹Æ‡¹„),*Ûs*>°Xc°óy'P·Eü¦�ÈLcÙ•ŠP›dQô $"ò}Lñ™Ô6åáÁTÚd.‘ù‚}qŒ£¢zAÎÕá~$ Ì`ÜQô<Å%ÎHÇ@H|Öº� xxB2Úuç?ä…¼2äZ×mØŽ\ðƒ‹ßv*WþŽÕ—›˜³Ž'Z÷žäÒ Côhg¤| +¬0TËâj.L­K“lC¦†ÖU”jh­[·„L»«lݺî‰ÜhFU÷àÖ½¢M1ä·®¦PlXkB…mà�ˆÒX^Fqy»Q�Ç�?'-$㈾*‘̇ K:d9—”w”¸™#1— ;…‹nqÃÀCµ“î0 çâ¡]È� 8ÍYÙçžä+¦o¬ƒ¶õÔCÇL舤+zˆtúÔ܈oU© |v¿PYz躱öPõå=ÄÄMdÅzÈ÷E©�w DÓíôê Ø™æOúø LƒT%ÒI1(-_DNpÖ®¨&zŸ�k÷÷�‹cjöʇˆ\HRNå²ù‡À�2Oˆˆâ£z‚Ü ¢�ûª$Báa2 "*eÿžuW§w˜Lõ…ÐÂ~I/¢»õSá ‘¡.Üy‹”«=&[ÅŠÉ-4ÔÈSñ[䌒jX "—>@�Á�»Ѭê“S˜¡F�¾*ù×C¤Šé¬© Ú ÑßNÝpѪÒQm)x�ÈÛNËÍÑGÀÅÙX"_P þN "NÒm±€Ñâd0S3�¢ ëqz&Ÿ!Ú»‡Ö/q{(Щ‡À�ðä€H±ÆHV�œÚqûؽCI jXnxÈg÷m›/h‡†tXNü®Ü¡¡ ™32[îwˆTž·€)ò<€ÈÐCVe(M%kµÈ}µ¡Zƒi*LØËô‹dà¡Cðl(X2ÍtBÓ€¬Àú¡ø¶ý!¼‚B>!A„?A�)†3âùv‡<ð�KMAn2õI³gH“CÎDâÚ¤Ò!'Ê#ÂõYÕ5¡N(6²CkZ(Ãc¨üÛ¡5…oy*ŽøØ�Ò !šÇ¯¶Ñ€0°-E㓪£Î_}SU„=JûÚŸB‹Eý~î£é˜es¦T@NªŽ—ìâï3‚6­aq áU—ë +Ɍ̼ÂÃ)¢¶P:1*hàµÅw†ðG,uû§u§¯ÎŸá)b€ÔVÀön~µÎæë€m‹!?Ká¼¶N6n$Û–0(wÝV䛺¤°…[qØŒµÅ-yœ7@a·ö÷²úÿÉ‘g�qÄÖq­¬o(jëZq¹C�a>WZ«W!j͵ú{¤Š§r“G%¿!нÚSè£k‹öxw-ß„-v­,ä&“®µ^4ro=¶ký™d•N¬em�ùO2Í‘ÁuìÀ†éíK#Ø÷¡k‰c±(ðC\Ë Ù�EÂ×1@”ÖZ�qà%¥Öµ¢ž‘©sª Â&skMSk�Äf‚w€ k} rìÍ#²Võ:§ B˜—3ß1‰Y«!…·Ò /\Kø vT”F\kø$ÅÍ%©n-àü†Ìá­ÒA\Wt—ÝZF"ñ-‘qk­ˆ/Xwµ¿ÖY˜º_ +s­a¸)�èÞéZq÷5ó]+‡°ß®ÃµZ…˜rÇÀµXDd‹ Àµ*·kk®EâÆ¼„â¯á%· p­«Ê7m0ĵjT^cèƒ +®ŒŠÑ” ZZ«U£»ÁáZËP\¾¾ã¬%e`&jCk!p�P†±�Crw±Í@]´4€ˆ¡&òn{ ¢Ç¹ÁCpô-H$i- ž{Wé—,bB¯¤­7’Ç„ÚÁ¼q:¢:Œ™Fp†´Œx¾RKÍê_ÿ±ct Œé»ô˜¶ ›Pƒý8ɇ/*K)d×íÿW$ô<ß^ÅÍí4h¹¶U™¿•É07] pÔÅ":@�Qüb ,bN°>øe‰Wwy¿_h3s–@^TÖ¨ÿ’}˜¤q{Ï3<áy0V�t¼ƒ1ÿrÕ$�xž·ê˜ÅŒ0O–†�í ¨T‰Õœ�Ç&b x\‡%%´ƒáŽÐŠºƒ¹¶ÃìHfUkØô8ô5P(`Äý‡EQÅ,:ÆÀøÙžà·d ÝQ ùTìI.Ñô:é÷°î¯mÊd*€U<Þzηv°ã »fï»™ý±z!ÿ|¥£Q`ªEü�+;õΉ~jZŠ‹¼Šæø²*~¤€$2íõÙUü› nŽ|;Ùø. y1+2XjI€1de‘Iw0ƪó.6m;˜Y&ð&Vìv°}¤ôeíؤåŠÜôÙ|C-ºg5ã¨v³²œ¶ƒ¼ç5tU€é‘Au9³h¨à$â ûÁ…ó'×ñi>Mýpôº&múÜEÛ.ÃŒÖ tØS3€-Ï‘›èÀ¨ 𻀠üÁ@öÎGix® Ê9D®u"”�ie•`Ê}Žˆx¡5¹Ë©ð8 ÝÐÊpÍ�/âÛÖ0,e~$zi¤‚Ó*ï!öÿëŽÔÒú|wFm³ )eE|T€C‡Ñ®=íC:™Ç�¦éh¹zí~<3ÞŽ®f�}¯qxUZL�> ^äZÙê ³‡B1òùåÓþúB +†ú-6Àç� ÆžOrWiA�;¡ +$b�±xÞî=þÏ¥(ÿÁ€,òÊ0½¢¶ÿiMŽÝäø[à +{L³'à¥Íá˜^¾¼~�´\– +Kç�ÈTY/ëÄ PÁ¼Vñg`Q–Ã2âî‹ +šüî$›•Üíòêº ­ƒâ*í•Ñœ+'³ >!`7®Åc…v—Iø�T~ÎàõÒÙ”#Slê6�màF™‹7Ê+êDÌ:YNˆ%/ñ ª°­1¶Ö}òÄéÏP–è)Ód„m̹gCÓ›.èT1T×̱ ¥ ˜ÎŠ¥=¥ °^7&â´Ñ-HhŽ)fªë×Pµ9F²EÂ1Ê2qk)!/T�´-F’Ü‘8œ\³¨:“¸š zôˆ�(^�Ј®)b�£øZöà Ü þÆeAO)Öé!ʘÙð\Í-•™‘=û˜¡!òŒMÁO‹2F)=mQÒ![îú«Fž£â�ËÜ1öŽ#ÞÇko–‚FAÀÞŸàE)´ù(!£Ë³Öçê±J##ôÄ'éT#ßém2o@)¸§ Ñ·âÁ¹Â Ž>É,¸ÿ3(ÜGJxÈ«\aƒBëpñÅy´«5I¼²Aïñ…ã}Ž$KŒþÌ´._kDÈç†yqsZéÝM¢¦ËGPgC ¯ C”þÄÿ¿ÆlyûÍ!ñ +’ÇHDðw_’Òã2$ ¡N´@HÊÕ.€†H›Ù -õ–ýxb”VÁ-»­0sDE&­ÍY'lz.-Ò�¡’%åÕ‚Òtî“%$!™8 �IÚòµJÇq½áH·½b¸cÔVÈÕ1Mq0SzÏ&¸.WQ)º¶š\D÷ö„ˆŽIˆ†ÙTïh4Ì#Ft ;ïöñ(Œ²4�ùIÞ»=ɇÎçŒR|NDÐkÔîŽýÔp÷~y…4N�'–>Jzé�6€S Á düÿñ_?�’¥­[zÁš Ç¥Î,"ƒçæ (4@22dÌÐ0ÄvŠ-Љ´Žf¼œ$€RVÙŽb:õ5­ú6aÑŽË“(=:¦îØêБ«f±²°iºô¼‡¡1”Ô= { l‰$ÕÚ©ÚþtZ ³>å ’D:3Þ#Â.®uZÜXƒYƒº.ïRè6ªœÙÖw,ÖÎäf¡Dëµ8j^d„i +Ó°w‘4%¬ï|VŠT¤r"hâ£s¾v…6˜š_Uäµé>á–à-"îÜï$ ð¸±~*i]�ÐVd“Ψr§KPÅäHN¯ó9ƒ?-в-x£¶D9ŽÎRu¾ˆ¤�X¬fMé4*øÎø¯Z&ÜK¼4‘Š goj”óò6n%øýÑÇÌPüMÅëç›ÌìF­aŠ­Ý_3èž¿øºâáè6³åñÖËÛk�,僺+�Ãî!Âßñ—ðK"ÒN£ÓyÈ!mX�Úo�Øå}ˆ£�‚ØG%i­ ½¦§ºO +vUд¤àöamyŽœ×-ø`“Ð�Ž?.kt„p�W- ›ÄÜrÊÒÂ�#R0+³$KÈ“Z§Ü‘ùÀ‹öy0)=@e'>w{w0!~#í]Š?+üß NÂ-ŒÒþ9`H¨n_ÖAí¡¢þ¬*“˜>6CQZÐçdÁ’ +F!æ'}&¢’Þì¢F±Ö +”GRf†Ð‚£ã“Lð%y²Å*Z:Ñ}îœÝr´BÇ‹ka¹pY`,‚p|0v¤'äf„!5…x/§Dk‚=ö ɰÊò½I! ›JS£È¥ªSDJîQ:må—‘"<ûŒ³ie7=�ŒŽXû¢®á)Ò©^£2�pW)"/Ф<²½T`Ìå!½OOá±زE?1¤�t57ð`ûIhr(6ÄÝJü,æ33j�2ëÇ{¥Õ;¬¯lŽÀìn~VX +tKt7Ÿ—4Ò®Ùxâ’‡èK†iù8Ïö>…ÆÖúÔÇW�—½ dg£y©š÷ €>P=v!2îåá4Id±“:Ç2ò›ªûŒ| &7¶×NÑc:ŒÿxNÁQ’›dÑ׃€&6q  …¾¤‡¸à f0D÷êÿs¹¡ˆ¡ßáˆêrµ�2©‹—'&_h}ðÃ?’¬VL<žõáºvW%ßnAøÏUÍɧa+#WµÏ­äA¬r^ø`°$ã…gÜ륰c–U[‘“¸)YhvœW,H0ªX|Køl%ŠûÐɉpüþÓö‘†ýÒðk•)lý¸ët¹Q?îYÞÒ�Ÿ^°ýtY«¸GV$c7/lfúÝ��ö(ú¥œ°ìö;= + A~ž-Ré†5ÐGøÃ�xí”VfɨBSMÁƒ#Z+Yê¼dM›?2Lf'Ÿ†¾m¤ÉÉ 3ýN–”¿*„˜ïøÃö“þ{8’ÝÁÈ{Ñd –ê Ûï\  ÅÓ0–<Ää]ø¹ý¢Œš°ÉZÛ¤9�å¡ +’)}»Ì$÷ 8ƒ/€¤T’Aª„•Þ¨BbQ•”b:eø¾ àÜ×+-CìÄ+—¿œnÚ¬LV)MzÑ ¤kW”‡&ÐÃ3VF×¥%{»þ/ýW –9:Øâ«ÈÓŒMÄ8ÅÇëxŽbÊ‘R +rx'ÄÏuq¾~ñˆ¥ Q56›â™8Å7A¯PÙŠ¤"ă!ò;–÷Vt]d¥ûO‰O1:J{Œ*™Ž�i ä§©Pk´ošÇ&%yúH�Ïj:n|‡-½9�Æ“_ä(LÂûzÈ#Õ>åð€zê sDÀ‡.øÚ¡¼ Å -›–‚eñ€x)µ¢�EBð`ÔÌ[¬Í±IO4=�2—]ºÃˆ<Ê„!0 ž—žÛ�'m¯÷ªõÙº?�–€<ªdþ �&ﲌc—.n…Q\dк ^šÅ9c‚ñú KŠâ ÔÔºØê‚ò¶^-á#O°¤ÐwfeÝ+Æš®Ç•"X~“T¡ÑKŸ[…àš?ð ¦ �! µoýN¡ÿœ�ö•§Ý ‡…æ(Î6G¨Ô‰@ž^ÊHf…f$–5•»�.ÔÛ¥)E¥Ó@{Êœò•´I.5_‡ôç‰$r ðRè$µKö•Ì +àüƒ­9j[†Ý^~†I<�,’k/©Á%¾¹rC$ƒë&®à,ߊ8�(Ñ+0EÜÓÕy¦y-@LC�î(ÏÞ‘"i-iê�œ¬ôE:ý‡ÄœâUÚ‡Î`¦Ù­1�ZÝáÒg!–Þ±WÚ…Ûµ Ü VºÔ=èKj°&E4º €aXéªZh ÖŽ´D§¾a<¬v�Œ»&€·Êé9�2�MåVÌ‡à€¹�ïØ%›¹”Où’%ú[¼Ê‰†TT»B#��’*­YË!ÁR¯™ 9¤4¨‹¤SÚÔ7½Ã‚w¨!Á„›éš+ó3ŠÆ1ÿpÀÃÖ¬R³aþ’ýYà32‘¶ˆñ¶p^�–Q"à¥úËý¯‹`q4Nƒþ{iAÇKËá±zÝj˜Ïlª@Âv6OC»Ì9l´�h Äi Å/é„Lþ_Q¶å tPc>‘cDªÉ„ùÁŽ]±ÂPZ�%»]¦®AHWs‡gM ÃÐÈÔS˜ÙlÍ?0ß±W‚“†å£�ˆ_å¥I6ŠMœ â4b¤Ò[U +™ÿÂþì* ·“QdsuÍU÷™)ýߎÈ4pVñæóå(‡fEÖ&6« ê,Þĸ¢$FÀ�ð¬ö1yf«$ÆŽ�ˆ©æÜª¸8€bþrB‡ŽJ­(“¹I–®–«äg¹ª9N”cm�û*ðÀË�y#´ êáyˆ¢UŸ¡­À¸Ê_#q¶Ò.ð±ý£¡œ®�Übx¦ÆU�`MºHÜ]¼Œ(né½Êæ~ÜC�K®þch°¨«Bˆ%B Ì +¢«ð#3”Á6F¥ +d�´±× +è½½ib÷|š°¶]( �ÅœóV "[(rÓÜdç‘~ÿøõ¼ñØ &ûlÿ£O0/ù¯ØÕÈ»’ñ°S5X +6#œŸ²®ïn( …bˆ jOV´þeÓù,‘±`†öç¾|pžãA +õ–˵ö*ÊÌÅÛj„õV �z@…Ì-¡Ù`‘3ò6p¤1šÕ¨ +¥T´"”ø.Z‹m¡2EÂe¥D:$³¾ +"}1¿Ÿ=( P"ÚÁsº½ë_Î㟕˜ø1ÿ}ñM‡!Wî'6~Øo:¹µk”aØÔ“Jćß×ó§Q¿QŒ]'K�•jM7¡–�ëF}3ök @„á�!!¡›o4äd¬³¨"t˜°Àâ-ÏÖÑtRx‘dsgný3õÙ÷5òÎ<ÅYëP¦cŽlH­¶ÁÑH†wÂ"]`eud*áLx.ç±C$ÿVY€Lr]ª3I º �Öê)‡ ˆëßã+£roÉ#'˜ñ +&^…&^ , S¹‚dÖk´êpð+Šºò6D0’+Á¤³{ƒ5—Ô[*ÎÒ¤pžÄH[™6|Tròy�…”¤3¥Öžp£;û« |éÈ�œxœŸ¾Ž¶ÊLZª£4â„ÒäF‰h¾Cõ7çÌp�%iZŽTÓ{kA~ŠHWÿ”\§æ5•}"Msß“–¯½`”2{èj�K4“¼�gd„yT$Ž­#ØÕ8¤Ø¸µº +÷´«Á˜3Å�@ÜpŽÂø»\²4�ÑèW(k-_>³&w¬£f7°µ}„ÐÞ1ë�_¢¸ +Z0ÒjÒÈ­"«“A(ôN˜£L…*ûÚH‘d3Ø—Ð_lãá1†>[y»¥ÝYÈ›XvýÉÀL¾…fè V5ýâ±´”‚q/.£5òqNäJ®«�x²¯YSìEñ�u²oN•Ú"ÌuŠèLÄ•ì+Í.m¿òìçvúr˜læ–�ädGT(R鲄ީëïgD²³ëÞ·Œ¥–•˜l¼x]�Yý:y0íPª°B‚Ïô׆=yÁd1³zµ¯ç”x»PGŸÑ%QIÉÃîS¥`ƒ¯WÿÙî›d“¨sdì&lŒAá!Ã…%˜@�ðk“Ê=Ó+ú�€-Hй±žõÐÖ†�¹ EÁvUd<áâ[�²®lJéWÐW’QF½¿µ¸&;zxܲñžG™ +ñ/Ë7®c=K²Í&.6spòØl�¦Ùw²Þøãpa`70šioÉ™B3!œÓ�PfÀC›ÌJ?úÿ»jLCæBÝ‹\^֔עĈÞÉ zZ¨ ¢ H�F.ÇÒ½R /ç·ÇG–¥Ís}Ìg¿&PÙ&r„ÖN^°à\;�Ãq‚A¬ðåÛ‡+V<‚ Þ¦()–Š»K¼Ü¸úO\2;UuäßÒ‚ÏÖ÷K– µÜO„%®VTU †ãemg�ê›hu¤ÛÚ»%c#SiNÓêñWÁ³UnÝW·8—è—YnöºµL`Û‚¡¨ª}¶íä “¬(t”ú¢Wr,Iç•%L¡<•3§¸q"Ì®)3`@�>§j!cÌ+bŸF¢t:ßÀüRëo +¦t~Ï$H¸_˜f1ûõý�öa Â(tBÕð·’=Ž#ÔP‚†Í¬·“šjݘ ÜÿbÝî´ /Õb;Oý†u'l6•*óêƒ<0§‡4gÌ5„z<Lgv�)gÃÚý´V"¦¨ +)(ø_¿Î-„‹€B�†‹¥ˆ™ ¢p½Òä0þ¯…kSIÆnÔƒæ† Ãd’�°0Œ"¼»êp,äÛÉv¯*϶UËåŒ]Á!•¯¤Fƒ ÉOf+x+d\�T˜»y}5£Óø#Œî2Ø×ï£ÑÜj+�©š„J#p=¿¨~¹ªD½Y;hkS�U*¯BÍéYRî¶f±ˆ{û}nöξÄQÞ&eLf»fÂ)@T�Dr‚Ý£ «ÖJ«Q¥b�rIö¢ÓA]&«™y~¾-ã/Ç㘗­‹~¾ŽÓÍñÀ`ÃþRÇ‘'Hup�sñ}�l3“°KM °¡dg6 BÜ�€Œ(ÿd€y2†Ü4 §­¡’ž ªyÓ[&Mg’ìÂOÖBÁb,È—�ÁAzYÌ—?S°˜qŒ?¿ƒnÂ_”¢U¬’–Ó2X(•ŠÛ‰Õ_5 t +qô<§·[Äðž¨ÈSÀ$ŠÊ@î!̹W·"á!’“ÆsNQrQ>È6„´×g$Å‘š01@#â@~O„¤1Þ͈EP$m,'sG‰››€·]çƒh¡'þ®Ÿ‹7–)2.Õíßæ#±{ž�ì1+pD´C{B�n‡f-„•ý„+ù*/¥Dâ’Ÿ™Tb÷Â’â´Í·ñd@R,Ã@¿lÂú–Zï¹È7GeVW‰2¸z�á"·¼<Œ?áç4]^>á¹Þ¯rn'š¾zú¡7�Çëq®í'1½ …¢ƒ¬nÚÄ``é™Î_ÿ$)n„Í"02MÇ3–O¦õ›ìÉ‹À …´£ùñ¯�ÂOè úË5<Éš@ø‘§�‚ €{ÚMÖA¡™Õ%YË[é8» s5Ì¥*ÉêÅ'´a¸n¡í$d}`f˜ð¸TT«…n>afœC~°¡§Êk®¦è©g¥é‰‘z}^ü=†d]Þõ˜ÖsÉõ$¬fKEW;Å&;‡_Lù·‚âý gUÓÌOèÍ� 1þ'|.é^>Ã'¤ý 0 6À'�‰áX ¡ì¿á”w%ú„]ELd¬ÇÂnVú x ó ‡¬Ù§�Ÿ>!`(L5¬Ô>a›_-K]>á2ÈdNmÙùŸð¶mîk":X>!àâðvžœÂŸp²uUaƒó 9Èv0Ù�Ì|Îܦ7¸¸ƒ§X7Z;¹õX%ÑyÀÛOHœq÷Òâ|B�C‚Ïb~B”È6”5ØÓq� ¸{0ïÁÉÚ¤ µöÚÄíþúëž}Þp@ ´O¨ ÂÒ?áî¨ÑÆ>ƒh\¸Aù„é¨cóO¸nýå?jãh”ß:†©ŸO˜ü7�Ïô ]¶Í«þ„÷ ²Í­à£>¡!²’t+Ÿp•éÂ1€OHåãC<,Ù‰OxY¢LÎÖ�AÐãáŒ<âN�ç–éÒEqcºÖÕs +È·Ââür’•Á\1a!'¤Ö ÜÔ|ê’ÕlR0#j;t;^=Žš¸F?šG¹Ëäë þÀmßßgM–ƒøGê2_ÅЃý¢yîœ7²#HB\GÔ +ü“Kf7îÁëzC�…±÷…€Zü›aY-­^ÊöÇ”·<®áO÷}ªWõ¢UÆöD`4íé +Ûˆ‡’¸•_è.Ôò,Äk+Ûè»< ðTy¼U†”€¼EìrÑwó>ÅÉ]¿ÛOÛ™ßÙ™�[ºdµ/êL²Ú»ð@[¥ ‘ïX×ô!o#:Èdòˆ±E®wôFü´l^é•ÚgYŒ“°. ¿î­ô+PWpôãºËQw ØD~�fQ‰(ÒáÆ8bïïn S Ö g_âÝTËÆ•?3™ã®Ôo=BÓÙ�%ëYÉ?®V¿ÑK…h‚}PÙNÕFí‰A«½É«t‰´xŽÔ‹d0¢ë@fÜÉŠ%u´'Ôv£M�¦‹¤H o¦Wìî+Jgm�= ðÉ-e™ú[fìQhˆ6�ñ–«ñþŲ_%ÞºF‚_ ÞŽê P!½RYuŸR›b¦s &Š/°bÙìªÀ…”C†Ó ¤DË ˜´8µ¥”â¢B ꦾGôC‡æS~¸XbW’ÌC~º´©®;¬�SÉxÐ`‰e}äiñm»± 4곩�é�k%"­”¹+¿Áx ØU¡'H2�ÅøtÉÆ¨l" Ø7›™&[GáwÍv@žvÖ&Ú¶:ŸÜ½-"g稜Šq+ƒ/€ ¨UXÕùìÍ9�Öœ#B!ñ�ø†ŒnîK"®¹4�¢D©«Ä>[ã¸7¦dÖ¹ÊÜ4Z!�@ó]gö, +xDcŸ¥6UrèÿT˜äT_d›AŽ«ŠýãÊèÞ‹�ðC* ÙwåPg#¥Céà«À×!=3ÈZ_¬`ÝÆ�wHÛ[§e1‰0RCDÙ^æú>ýT˃Ÿ’µ*t#BÜ S‡„Íü·¹b÷LŠj­=Ãd„“‡î­ÞhG3ú)cQ–=%ÙX¡�eÿ³’V£É½“-\¸rä„ì6"ú�¢NI¸?|~¼¯ìOØ]JÌE› +°hî‚bÌ‚†“¿c›¢à™5|HF7ýÑi Â¢â߯˜¬ß,^÷Õ!)QÞAäW'G®<4ä�Ó$�±Iñ_ÄHˆf#]+cKÀícë}§q÷Q{ÂÎáƒO ]’ÏNŒË‡ì=8³½¦yUáÎgÀ…©µ¬1>ýÖ—†”ã±Ñ Ãôª=:tŸ×BÛ!�Àš}Kb@ãAiŸáCÏ9ë´pÀDæq†’â3[©ç5„Å–Ï<Ñ]fG[ä|¼O¹t?ç!7ÄhnêNT>Ù}{‡¥+ +9ʤ  -Aø�pb2$¯iëc-Ëé³Ó�?ä%S+´:PÙ‘B¢›�dªëÅȉò_6 qÅ‘+ùä!a?=éÊÀ½í5Í’ß4(¸©�ÅhÅU"ùš#«6gž&�s•…X1D5´T�q);†^T$ì$1½Ú3ôh-°pÌé¸á&›•nyM +/$A=bïzÞØ4é/R*èŸÑr1¡)<ötQFÚÏ +:Do2ÖEËÖ™|ðdóbw9n· …åøÏ;¢…€� 6ñs„$਷–Êh[w#ƒaCA×ë„Vy£'¹4$Ýwu>ï•§#.ièìZ„^rE†·$9©eÊsœÛªÁ*ËuÓ¾uŒ)Û‘ +�ðhÕÀu«p`¼Í ÝüD&ÖXpË© Þk�õ­‘I¬„Ûhb\¾u`鲫ôé''t`5ë‰b‹g=‡ašõϣ̀V-ßd–¤/ÅI4 "ËIÍL½Ó‰‰jLQ¿ÂÃÅu(­ öìK¿ÅDTm>—Ķ„Ï—¤Lçò—“„©eJNÎþ¯W¬”vï&6 +ƒ�4?ðȼ .áAbb‚P’“g_S<òñ§ˆÆ@vø¶XáaÕeé�•HŽòø)™¹šˆ:òjÛ¹tH߇ç—J;iÍß.Ÿ ®Ú'°myx,CÜõ¢U³& +˜-I¢ÛN`‘açÅhRV Èo×M¬O“üéVlè1Œ£¹¨eŸÄ.5ŽØ5´ÖgCʃé*�„[‘M¯$ÏM&È2Æ·\ì.†8n ÍÊ–‘gPòÿ°gÐÖÆ�kz×óèòî2V*³ Â›¼ÚE*qy¼1Ñ÷±€Q7Ü)¡@Y€ \Äl”!Ñ9£}›�ɰxˆNùÚÆã2tt.Åÿ6Q%hû�;cçV +¸ÀFØ`©—Oëʽ,ÄPõàÅõÕìÐÓóe�Nj†YIS-yh58433iÙ» +¿ãâ/”'Lh¢)Îî¾Xašò–° ,ˆ}UØ¿®çhÁ¸érP,ˆª?l0å°`²�?Gî� Àǹ\ÉŒ€ðz—ÅÂNߪ4u&åðã·Jè�Ù A7[^„¤) '+}iYJ°à¼ÁsËFA–p&/„¥#!ˆ:•�æ{ý‹°àštŸþ,ƒ€ÝRiïÿjmÀ÷0,(¬ÓÑ-ÝJ'Y}À‚Éüÿš/Dx�}­YÁŒ'èmffÇÊåV€GrÍ…‚ŠÏ´hmDZ¸Ñ¬ òÛ’QX0ÿìædÉGX~ñ’K¾B�À2-ò8 8°À°JîN’y°`ä×{ædõ(uCÏ%üÂV’(ï'zT»‰Mj$XÓj =àg^ Ø=FVš9MӸ擻ñ4>liáŸàã ÜhúÀ�}ü€£ÝkÈgʱ/7Ö܃¦ÜUxISuòì% "ÎIMávcè�«íšzJwÅl&ቛÒ0NhîF°UÀ7‘În"ñ[°ƒ±m]"”¾·üîˆ%щóžE»ýL8|'²'ø+Iœ°Ô]”æ]H�}P?–Q³M�¬›"1%‡8ÂïÝâ�£„f�Fý¯!�$Û VÖ�ºHó­NÙ¦gŽõÞ x ç¥Éq&·w[ÁͬÞ)‹“�¬õ@J�c<ƒ°*À*Z9çjò�!‹�ÌÃÐ¥®”¢ZYñô€�²0{BkŸ‘'w¼RþGï�¦ŒÐ7ÏÖÂ_¨ÖJ iAeL3° <î Èïü[áîš.B ÅIOÊÎÐÐr3Ò Yºr…Ãt¯ˆ­x;×¶ }®öŽcM'‰ªË>…¤¯P£Ç�f Efæ�ß¹K�~¯’!+yÌJÝöë] ´±Bëٰ¼‡eÌ„lR�SpÈ´Kξ\YA¯ —„¸€ 5‹—�ѯg…;2ÄyûeƒÅxRtÄ‹”5«Ô{M® +jÚCù—ÏÉN´×Ó¾›bÉ®R¡0 UÔÔK•§ô¢I^v‘ám¼Lk*./FÈÔ…½eõ�ôú'<(mP(?ad_¿ç¶_/9g4)QØèÆŠ'Ê9B�l[tZKärÝ`ÁUB +ƒêÕÀ™ª3<K5K” +nx42Æ#¯_bIãO®cÒXC£"‹±”N‚D(ú­.›Bðß;z‡{9™CMnfÎÉžÌÅíjp¶˜©2—žÏ:¢õ7>‚V>øæ‘V +\GÃŽš‡ `e©)éŠgª»çP@O²Ró\¢fìš.2’×*èƒD[Ò¥Z$�ïMæ’£ŠþÎéˆ[(p>ÙérGÍ@öú4N«ÐÐAÚ%áñ±§=»ðÌ�ë<ÔT +©i:jÊD¯—éArúõ#ïQ‡Üa|ÙŒH?Ïüqý™d%AÍŸÅÔÉ£f}ƒˆ„hjââud‹Á¨©Úœ‹ÔüÓ‹F³¢¦ö|Õ¥ô1#º›Ô¨©Å¯45¢¥Póóm×WXjPŒ%ÏR`ä˜LyJÔ$u)RztQS�€M¬T4£&Ñ¢/§xŒš({'Ú5ÑÐ^¶(ÒYÔä¢ÁÜ?DÇèašœ†ÈG™¡Æ¨Lø<Œ"jR�ùÄ\ÑR„¨ù*òh–¦AP•_ëô8j^(ª 6iM×>KŠ8P4ðöþ×–*P3�±c¯á +5ŸW=5!am;F½³ Žk¬ÆFMg–×r�¢æ•ÙæK½ æ.+B~�¨ùˆàvr¼¨©K&¤ìì]5•Ft9CŽ�n%ËfL¹AMrµ¨åæ‰�ΩÁöFhNº¦…]Ï‘Ñh —×7œDÍ“…Lƒõ÷2¿Õ¯-‰þ²Ïlþ³¨VЗag+a¸ã:CA ÚÁ‹Î>«z»šé±Â½ð-ÆbÎT:Å:&Þ Èψ;ÈrM<ª]:é+øÏ®i,‡ŽîCô_ Ó^ð€¯@3‘ºmëyW²΃PųŒ%Án/dj}gÆÍ0äD3EÀö¿É$ÇÇY1Û�°¨Iô…3螉 ªMîW¿\þsÈS*vâ|7QX¤Ö¢È:òwºÅ#Yiß"VDÁA¶Lè(öwRÎ}yOò/ëƒ{�­¦o£òUzxEìÕMB•Îc*¬:IºF5þyØ õS ? å†5­hæÝ¯¸/xÔ",³üHÙ±CöF”L.Dwô} âzÔÒ3Åù­¥åõ`€À:AEmV*¿á{!‰ÿV‡š‘Æ$©+ª´À®”2 ‹x�W 6½§ŠÕ¹Ρb¼Ý„ès”+6Ž„¾ eÏ,fm¾�Ÿ ¼<¶,8Ÿ]ƒó™.]dÁaįa -G^CðÚN3k¦‘¥?5°w`‘)&k=r…k;¢U73)¢¾£-å�õIAÕ3®%1†$§2rÕqƒ™ð¨ŸŽ6˜{¥‡[¥ÂHéÞ¬ðdr#‰}vHÂô¿QQÿ¥Z>YÜ«?é‰V‚&o¤ùÓE—µ"Ù¦W¡`&7X©9‡ê²€<™wËÂã@#®_pøßÕ–cõ«+p9\ÏíÔ£¯pÀˆÊ³Wlÿ]ll‡ŸÔO½Ò�”²J]ÁŸ.P à–ë¦6ãÙàŒÚSNwAëÉú8Ä•ÿÚ——Æêì$uS†42Oºƒµ åç°µ‘ +K*"�RÍŒO(L1!>4-»EÕé&á¸õ¹ÇÄž7Ò@7Ajî:�pŸùªÉ¬:ÚŒÇü±õ› G•W\ªñ¥Õ›u°K#…2!§1>-íA+PšªÈ¶kIž�ä$I¢õ®ydç'>\‹ bZÝ Aƒ?á¬nyÀÐy2¢wi=T +ë'X´¿£C¶.šÌäòâ:Œ¢™ÃPÎçÊ[dJ¨_‘%ý·ùV/€+äuJ¿ŽFD�x Wƒù8•¸½s¥_ô‘–~‹D³góxãõqÞ×Ü‚`ˆI;%5æÄd6pʤT!àÒÊ~Fr-ËÏ�’\º8rî²HNò¸qíÞ÷¨¶¸¬ÐLßp*o„>tóꨊTÃæw˜C"hãJŒ< 5¡!8N#•£ŽÐ¸ØÈVô;ñ6Y½7”SkÏêV†ì*üŠnÅ:шÔÀaØw“éèԦÃ÷œÈ;ÿ*GbOø‚›¶,BÛÂÔ!r?ÈÑYáv;^[uáZEDI¹G“%&Bø÷œTKvíeÈÒÒæ¤õ·à¡•„ø’dôß +}JÇÀÅsAí‹WÁÅ -iéêI0uþ.B9($2›Yˆ¹k.Gúæñ[KN5bŽb†O;Y€ëùÙ²h¿™]Ìw;zl +Z£M±K¯š#óv�¬³i.ŒNˆÌZ~C⬢)Ïmn‰…nÇ—,©}üZ»Ú¾T­¾Íè`¢¤ néBWöÊ›K2qzÔß VS@ƒÓO�Bt@T‰Ù²˜„äYàTBJÁÁséH̪´O`• 2Æù%þÙÓð+¹"îŽÒ'p/�0zS�¡¸Œ˜ ©¬ö©a¥¹šjŒ!frb"°y�TÝ­S[¤±“Ðp÷Éo…¶ä¸%Áµ/ßë-F_DBj@+¡�êÔXGm"øCi‹â&ÜVS©ó}º‰Pé�¬SAFÍø:`¦tõmbï&Û`‚)v.âÜ bx¥ø‹èqÄߢâiE-5 C{±è"Ç]¯j=ù:[°óçÄ’vMôtÿLŽîY­ ñeSø½ì96à¡,aưu••n�â7Gžð"yn÷�ÝÅ ÿLŒÇoa·¸øë\(o¥üÈÿÆÉˆßå‹N�0qW~רžoSHŸ¡îË1ÆBù„l�”’T3ÊÑD^ù*#Š&5ú'mƒ³zÜb£´ˆU5X½ ·í.%³X‰+•*ºŠÓÀ5‚ù$f™k¨:·“V½Më|$ǰ�›8êuM§êÏLªšº÷—-Èü ö™^€)"”õ±�L˜ûÛ¼RÌÍBèBRÝ�`¼Ó¸çtc¢Áîú¾’Ûf/——’ÓÀ®0 òØpc‰€K&dFù­å�dv(?ÄÚ3HÄ�=ÙÏ×Ü­û åKš"„s‡;MùËe‹Ž¥B® ÈV/Ïl•äÿ)§ �fËxSÖ/·²œ?×Ѥ¯ÇR¿ŒåŠžýˆ=zõë[Q¦ª73³‚©>Ù¹ý÷¨T ||ÜÏYÛ…íÄaFÎ”ëØ¢N6YBÐÝ;a3ÏLž¡@¿‹¦qä4ºÔr™êâ7J² D‚InãNÜÚuãxNmñP¾”•ÚŽä˜%t ?ž«ÈɱD�ÒÒ{�È?‰<‘b‰³›lKzÉ1|ßΞ“êH9­my;éˆc ß´Ú|išÃŠCÙñˆ?µvý 1/¼\¿˜ô.éãh¯’º·$ +ÏÒ…¬\ôú#í§ ¸wJQJ‚`l?¢j-௄R +«\€0;!d¦¬€FSêNvÛ±8»*MPTg7;(›0ab’ è¿°€ÙÙ·rf‘ 5­'šž¾÷ù‰7:Ó8 �”drš ™e§;;ô¯gÍj�h ^Ÿ�µÏjÚ�YŸµúì?dd�[y’äì¯Ì®cܳЍVO`vЕLPKŸý¸oöŸ¥Ó?dȳ¥Çñ!G1Áø%ŽÏÞøìoÕÙ< +«Õ¨ª=;>ëÙÒÛ«gÓŸM’Î4©Í ÔêY-ÕÀQýà™&9”i’÷� LéYçÑ9{ß³¿gÉèQ,êQ…íY= +{6Q|ŒDáÙãQ|VÓžõíÙðÚüñBÌ^üÕ ýZÅlŠ‘âbVÌþ³Š9+ÄìEŠY‘�%”PB %”PB ÄJ(¡„Jx %”PB %”PB %”PB %”PB %”PB %”`t%”PB %”P‚•PB ¤„J(¡„J(¡„¬„F %”PB %”PB %”PB %”PB %”PB %”@VB %”PB %”PB %”PB Ï?Ÿä,É tÌšžL0;?± ~ò œÏÏæ•&€€a:þ_ÿÿH¿=ðô­zùÿ5ÅÿçGþ#ýL?È‘þú#w$ +§ÿ�DñÄ6Gâýÿ?ûÓg?ýÏúÿ?ûßÿÿ·Ÿþïÿ þÿ³×üìÿ‚ÿŸý?Kÿ×§òg}ÿ8¸¾ÿÙû¾ÿ“`üÿOàû¿ðïÁÿYÜÛÚ?‹??{<?F×ïTU' VU¼ÎªêXª³©ª:«:«¤ªC5'PU @�UÕ ç�œ@~WH•Ý�ù’H"l£Ùó�÷£ªfÓvh§OC%CJ»«²¥é­zpyXÀC -̉V3³Ô½¼#ºq¸´4Ë¡³·²2›5ûÝ�ÞM wwf³ifØÍÞÍÞÝÝÝÍÒýònönöènãÔÌÌÌÌ̈MÀ&€€QUu˜U겫°°ªj®ªY3›Õªªª€ª´\Y5[5¤&¨š­š-,¬Ù²š­ªªÙªš@D”DD'"¨‘ivöLD4d iˆ² %š%šµ A¶ÐY%"š%""Î`gï†XL�'0HL@ â„Q A bˆ¢‡Ø´˜€K(¡„J(¡„J(¡„J(¡„J(!€J(¡„J(¡„€ +W!’ ³CoOOœ˜àĉ'ètOŠYD(fQœ˜=1äÄNh¦‚¨4‡@ÐÓ€€‘8(ÈÄ"²Øô€Qr 44JX\V J9‹)B€¤F7§7>Ò),©›ž,çƒý¾¬øvì¥Qb÷É Y'ϰûqyÙ%õÜ�ñËŽ€xdC¿pU8ìâ·J¸°ævÃ6ÅN‹a‡šðoÖa§Õ±ªJØÚ2Aã­›ráš°/Q ´¥ìñÄßüg€ e“ª™Ê(yÛ&–9y*ˆÁDy~'ÎŽªo)š†öóòlëÁ¿RˆÀÅ/Ÿ`¶2e ÕXžé%’!&H_íÏf*Š]=bõKצRWÖþ4 X¯&»yÌ94ãÕ[åZ«u Ú†®C³>©³ž)åiÝ;ÿ¢Ú%2ž Mñ-`,×ÂC:Ð’1¼jM ’â¾�û„hip¬X9ˆ”H€,«ê +i¸éЕÙÅHûù_öÂã‰E+>¶Èt‹rÖI¹×8$T÷ÒE*á§ 2»ˆvÛ,ëJÔç«–K¾*žÉ>dw5ŸdCò z‰ä¨)òo¾i/áVšh6hK¸A«W'\:.”™ñ<…¿úw¤ØúU4qö �¯áȘ±‚ª"ˆþ›ª\Ô””ÿâ +µù€{ZTò5W ¼Œ�êM)hlÓvBÆ0åƒ9ºÂÔQ�ë4Ÿ ü/B Paaç¯hy¿P’bù¢f5ÿ|çÄ•rª¿E†¸hÈ[Ñâ!!û Éeà¨F&ï4…á8¨øÿäHO$ŠFæ`åÊ[ö¿ +š*„Æ/>ân° ¹0KÃ¥VŠ”·š•Ñð’æ·¸’†)kh7 +�ˈպCÔÕŽý Ó +ô”¼ã(A™… dx ahÎ~„&?k�uJ‚ï–L’ë½öŸßŽF 5 *Y߯+(ý³µãAŠÄÚnìdÇ’TÐH/~É'ªCûJ¿1ø6‰è#ÃFÆvüfR{û'YïÇ– ë.[}Ò{­4¡¿£ôjßBl¯F=J’�¢9@6J´!2ˆ�Ï é¸ß„Â0K>”½Õõ'V�§¶ÔõµÕl<­ØàCÛÂÅmÀÝ„˜ &‰_;€ fÜl–¹ _y h#âf³Ø6$éÃçe€/×ópd¼‹0Ø<ÓÉèÙ †²ËÖ³L‡áåª;ůN#G^å29»–ÅH—ŠºÅ5�ã0æHiÕ(¯Ì(V¤œ 'J¼—¥RgŸ#’fâCÔ ]ïÌ ò�.F»Q«J ð<€çY±P›âirV—�ÏïëÆüòúÝ@º +RÉS�æG}O[x +|ÑŒ•I�-ôR |Ü1 µŠÓíPü´ñß” ϸ¯Ï% %‘;ƒÅQ-m5E¾'nWrT"@ĆIOMk ‰�êIMðø/öÞTÝoucHÙ«ÿÿ">ñÎ‘Ý +–Àj>l¹Kè(%åâ· H–XöÜÜ‹`ËÆÿè‘cÂawõMÐ+† Ω…x”ºƒOSf|±GÕ ]¶ÁÛ ÔÂyÑ¢•a&Š�`s\[`ö—UŸ-ùž�èç¦5Ê�ÒçQ·×<Ð{ &c%œ¬ùPòiº(yŸ�\:�ÏUþ¦©q_Ò^ëÉûœ‹G!òØ-cÅ¡˜ >$|ëž¼·C?€b{ñ�©D zdÜn D«’ +¨¾âPuœgvMAP�Ï+;G4«ÃB。+ÁR™¢—¢­PHÄN<�ê´Ð¡é &AÀ È’ôÞYâžž²úb¼ç0÷=ñ%³ôŠþ¥|bB¾# +Ç?­¿ÑNÊQ;DÿÿZQyRLiÅ2î:îWW �ë@À¤ÓkU�Î`IºÇ!0 ËÂäç¥O¥¼ÿW.SjA¨M&mzõæÝ¡Cq#ÃÓß%³˜…�MÀtÊJV�ëB®Ì€hSÝ×\à%™%Üe@›¸F)  1£v?±X÷”Û ñ¾d 5@u'€«Æ\ݾgœ½Ê (ÒâoÙÜÕê³3 3qËÈ�¡Õ"Ó|~[oü±,Ì3ƒÞÎâèSA�™ÒC—ƒbÍÆ+¶òA€ùK—5á[ÉTvÆ]`!†Ð�mx«´ÙÎøm ÕkØÿ¸Ç&´�–'œz¸þn$Ž^M{ âoòÌǭȨ�ÖèÑN^¸\–^±Á¢g·  vE¸¶nÓÍ~Ûó¶gÖ¢z¡Àoð%ƒÂ/(]Ž9…Ã�T~üwQ2|ÈÐÇ{pò~͵à0OvYAP&•4úg„íßÔ5g�<Ò{QI+‹ ½´Pµ(ÂsÊ–…8Æî¿>’Z¶-Ò¬ö5Fà_xGÊ~hQ¼sÜ€+âÂþ§�§ãíïÀK8¾ÅÖ>ž{§ªø=à +ûûKŠ%×ŸŠø3œó»Ò±yލu…”’Ã�FsÔ\Øma�‰�½ 9‘‡3šÕÀvüÔ äÖS#f¶ïHìQÅXi³×9:œËÞï¹aÅ—6Xˆ)S²frþ¼áò”g`\f×uƒþÖDhÀQµj´a#�HîÚïV¯Ú²àâpàHÃ2¦3ØÉÝ\t{ÚVʶx>Y&-zU_©|‹¯‡6¡ +I�8Tv¹Ÿ�YãZ|´PA_KËÑMùAO� .+�{$À…‹“�ÑÃwãì[ØŽ`~.1YÊLø†!šÝ? +ó +µßŽ 3‰yW­OŽ•Îâ)å2�RÈ‹óàY‘WYKM¤\ðQÆ?Äûf†dÁñ¿0ß6íöéäáh×òë0º(9¢§£[g¦«Û…2&ÒüšÙ³ßsJçÁžGu€¾bPµ‚ )Ñb»b ÄÊ.ºÖǰU]S€—[šºeûú‡b_œ dÝ¥¸m``˜Ð–‹ú�ˆ8 + �ùUL¢\- •+)]¹á˜¯¸IáH×òˆ®V°®y6Øç»´Ï ¬xŠßj‹‹JƒQ‡yÌdT»÷ê¾=(? T5‡]^eµ=AòK*<(¸³ù*MÖöd¾UÑèå—Õ—,¤S!Œ«™rIB.ÍYØnz†7tâpÛ!™B\"žŒ—ÓGáŸn,°&µ¢ [~„lœ C�zÉ'ä4Ùï° Ü4àÜ,§ˆ':bà¬ÔÐÂãò:sz�‹ÁŸÀ:ä\œ…À• '¢/†49 @~[!3MÁ+A.{ÕÑß:hŠò¾`ûO¿82d—ÊAÚ>Ì�˜Q…¢×m+ÁhÁŒJ·é$ú­ NP6úŸæ7@÷»eÃN¶nì)rþ9M6ôªìª:ç½7ÏSiØ+´*—eUD±/…™`9¡ª¢Å$kC8QLöÀòµ¬mÉÙó‡ügäjª)e®r‚Fôe$M×+ìjÎðe03â/Ñ)g…oÙòï˜âdI…°‰Y2 6è|É „û¦Ä5ùk¯Å$³€Ì_-J©³Y�¡Ã§ÈGÊ4D³kR r”g—»‚áp(83Ë~{B¹»C6ñ<( P$'€"ðÒÀä @?™ÍC¡œ|_¸¦_O˜ãÆ›'Á“>`NèJ‘qÞP ×Èru‡½¤%K'zÔËW9oÎ,ãÄ4Ä™†›h:`ÑŠ [À¯Mi'âNÌâTõÏ‘$B²w†o2š²rl ¯<4Dõy÷›nr‰þÈ×ΪfïqAHÒéêØxZú@ñÕYPîF¬Û’ô­™ÃjO±.�GÝŸmŠþÕÊ=UÔå:È*ŽÏÉ +\ q9=Oã{déò¥X¸°½ +S8[×ÄíSa_ÎÒ+𠀬|f¨ãH"l‡Â¼ãð#fƒ>¦­Åj ¤ âVT?Åk’n"ŠGƒGRRþøŒÁ&�O¨=’¤§6“±ºŸ‚R¬ìMÓþˆ8ćÀvP·(ŸÑkåah6¦®®öÄ%ìi¥5 ^d¿*ô§;®Ã¬9HØà(� 扷œ F˜�…ºuî¨n` .xÄ«³€´ +$‘o÷×_̽޸NNsû¼ŽL0xå=ô¤±¸vÇã2ºÇ´ÖíÉšv ÑÖ£ÊÕ«M³‚GúO�¡J1ö 5%õ…ˆç¿?1$Ah¯Ebð0]ůQã´mëìí0äuzêÉkäÓâÛrÓ ¸{õ¶R]/|A ¡'Æ�1ð•©&�ƒŸÚçsN‹pHSÅM<~QG—mµ �ÿkvÈN +H [â +³¼®ÒQyJS#m„–-›nÿ;ñÞ½ü[wS«À;#É‹ŒƒžTá6iÛ^¢m>.“�=xמÕ<ÙW¬P“—I¶±;_=”*À~—–JKý† ²w‰§ÃIç[ILÜï‡rskÆá~ŽK7"G¨²ZÇ7áð\wi¯åÝzˆ‡ !åNˆêaæE|Ó:Öt§O°Þ§ók]•ö詨wöà9@œ�N…t?î­0¨–BWä�êèD%ÃGó€r£÷ü„2Î;—ù.ëÕ€èÒËwý1TØø6Pg¬¬Ïv‘ùa³œä øftJs\PD0€¡zÁ—Z¥EZTgn¤gÅ—õ67ù²ªW¤§¡Â^ØÐôò dræ(o"éå}¢·îãzå¢çY·Û!q^tèôG›bš7ÿÕž1¯ãyç!æL/ÊR³¼¹rtXSžÇ&y0Lñòögzu¼q¥2¹–Šgn6âáý3¼,ÂÛ€Vït¨˜íñN7·»ýOêÍÄXÝeƹsûpùl=Ü®eé�íò»;µ+|Ô!í‚lv¢#ÙmýJS9›ØÙØú.ìÂÆ9çu3ޏ·¸®üô½^ëÞ­±®‚Ep,[ÆHu9ÄyMêæÃÚ1¡®ÝÙé|ö¾%„rrL7ÝUéVÏH×ÜC™G£CzÆ¢kŸÁt�/Æ™éƒN«ksöÐç‡B�Ñ\ã¸\'sY(=_˜+‘;Û-ër€Ø×6e9¸=•ÓÙƒ läåÀm¸™œ,rªÇÓÀq½çlQ±¾yí¾¯‡«¤L/ŸpB|P)X°!Éx6øEM6îâJó¦©L�Ï®maŸS2kqZŠÑàoÇ9²„¾Ä"»Pê,Ä})b¤+¼å1ä…µqΪAáÔBÿˆ»Z[�_-òçvâ*R²Ô\g�Éïƒ�ÖÝâ@£B¼ ¾Ô¤z™0ÒíÖd=E¢²MÜL_#åýe^‚“eß’�¬ŒcØj—Ée3ÚñÞÔÛø¹ ží™:]Ä6êXØÜ¢‰ÚxµÅ:ˆ{4Ô4_™a+8;¨ƒ¥Y×n…¨ø°RÃDZù»P±Ö$�j©9x�©€¸ <Ò¡P£qbÙ +0>‹VxœQ̤ç––š8á¥j*Ø|ƒ,鱸Á~JnD¤ 'ŠäBBÌAëWZÔ¡8E4u& ‚¹Y09¿U&èÿMˆÈÎs²ïŽŽ…zÎʤɓ1yŒ4´TA¨ÀÆbIæ‘&Wü*PW@š¨!4T‘oY ¹¾Ávɨê ×¶I,اä‘EÈWÌÅÑÆô›‡¾×.õÀ4[_,åÁCÁƒfs€¶�å ËE’‹®øÆS!.j°‚/­òĈ–Ë~Wµ>ØUiO­*í[®O YòªÜß:� Å³ýU¼"Iûóè¬õ1;5ZŸƒh`øàØc7ä«Ú—^=Bü Cͱÿ&Êž´<“ª-n§~%¦ˆb´©zfÍAS™\2/xz"V-îü7=r¥éQT‚&—¡¾!ð£��>ßq‡G ]�”¨w4œ¼´@æÙ/�ÌF[OAÛz­“Ãi«ºø±Å¢¤FƒŸ¶Øí�˦=P}¯ËNË�ÚÓ*(½â¦¼FQaß!ÁL%�ÿþ'º1¬ Â2©«éðE5)#Èͽ‡.|À©˜èåÁæÉ� ¨P�0�'€QOÑg}7¶Ðî:lV»øpÛ°ŠÓÓ›Œ¶ÏBv&Ù˜’Ù®†lÐ(¥&¢ÃÐG j�ïv¥!ñ>¿è,’Dj(o<6]…DûˆP¨„å$Y«M ݤˆNãekóËïR‚óª¾Ø±ŸÄÝÓjÙÜAèxoTÞ4žÁ›éÐ ²\m’JÖ$K%+)<ÚØÛ ÖÛ`^×Óé€x¦ø3ré+Kh~èb!Ø¢s0ˆ„b¤ÓHÙÆŸ)D5Ä¿d@ŠhX� IØ\5¸ìÁ +'1äôL6ØüÚB(°æ}÷�ê?Û9wï–l)�q[sü‡î ª°¤ž9a±åRHϬlÿx';sYŒ…BZ.ÈËuaj&ƒ6<å×Eó‰~S¯ý¨Ñ’¶õ Ðö @í±aØX‰zW£&°,°¶ ÷l §žþv'è¢5@U¼ñQ¶FQ»~HRévv�¦ÓWšî +§‡Š±1ü%2 ã¿x +�Ü$Ò€ó�T Þ›öbõjª´#LDq»˾žÙi£­÷é +e +ßN÷AËM»¤ÿÍgaÐP#y Î÷°òýBU¬€Â»]m½bLUzE+æÜyZÅ0ç¦eðb·’=ó¾Ú›cœ¨å Ô¥tÅ^ŸÁG,íc~ ´£Ý}“x™˜è¸Q6{Øx"ÂJìoÏ{Õ�“XïËH¬w>buâ¸o#f[Ä4çz'b©s™}{ˆÑËm^í¿mVˆÑ‡Í ö˜‹ÅXÂV +Ä&R¤<ê‘ÎØþ›/bšy¶,¾ cn¡ÌÃj‹ºÃ†®:lbuø$à$qS‰5…Ávù»p+D#±ÆVÂ�Â0']ùŠ/Ìë¤óº0ŒÌÚº…å[ȳ0õ�3ÀÄßnÑKÖFu¤0WÍÜ`™- ê9oå,a*>Jx膕„u™RÒ•Âìó˜?Ïa}Jk†šy a å~² P·ùöƒ\jêÓc=˜ヨºì`Îp»ª9Xå~/WÍì [Áè VåósÕ`)º¥Õ€x3X åú1˜ÓöÀÁ¬˜‰U=FÒ‚aƒ!ƒ®`Ît¾ §`Ðï{ò8I †Q‰íÁðM辂Áþ�Ýݘ?\Úüñ¶Rg–Ò¼À²_¯oXJl$IšŸ”B"N`ô,P6ÿh¦q|vÎÌwcÆ;.`üæöö næìnUf7ÝfW0÷чøE†¿Zÿ%@¥`øJ÷¯Tâ�¥-öæ_ÏÝ_W“®[†Û/¸Ùúå'‚Åãg*ËY�ôë/Ea‰ÎÏ/Ì(†6”É"¦gíIMìÎèµ¶Ä”µ�—ÿ(ß<~¹—~±×¾/æsÀ”VÊ=…ø{ìBáaeÄKŠÐl\ôuõ|�e ‹>_•8Œ™bõ¯²A¹qØòÛ|ÇM¾ ç4p\ÇŸË㫇ʂVÞüºá‹tôzØà«öÁï5ôê½6ݰf:¶²{±ÕÓŽ��j´`�øÀÊÖ‹ÓÕö»zùŸÚ=O½œ.“à�T&O/ܢ͈•^XiôúM³ÃB/ˆ(õ?¯ßZçÕ3:eÄyÜæ…·®ØžO™WÑóòÚÌ| 9õàëÅ[yeÃq®ËB'/Ø�¼^ôÈÇËøÄÆ‹è-^ŒYgWâUOu{:¼úÇת$Pa^Í“¶»Íc¼À]:¼NëßU(î²¾ êÈ»w•–w5º»‚~×]·?w) L‡ HZ$pPÖ»öË�Mh »À€ ÛYë×…wÆàŽ».ª$%™Å*(�0g'ªã½°‘‡²:êrhOÆ„½§ 3·<`ì#›.÷êÒÅÙõµ…ËÙúŽ“.ßvtñ»?¡~ÑÝuè²Þt%ÿý¹Ž비¶� E‰K]Æ—Š2®!–¥7ôc[¹„2§\@ÙÉ…°´ÍK®xNa£y¹Ê Ð on-äB®X¦�«7ë¸ö� ߒL&HC¨Í/œkë —L`íárÏØp±½p±×.fw­x�†è\Ñ_ +.èã.è×tÞ ºß‚}xé„Û·ÎØæŸ| 9 ðYÛî-_½%‰T²?<õæ­¢o-b�öÝ*‘ª•ýQµ;ݪh˜i˾­êQƒßnëôºmUÞ4ÅГ;ÛŠõ* Ì»¶:?RÛn/{�n(k®ÚªkÉ{¶R5 ^~7[êì„¿‰‚èí¼²uÙÝ’-ÛXçg¨;¶úá=ÅÖl’·ÇKEŽáLšp¸w­â6c„l·/׺B fvÁ›[‹zçB^k½~ÎZy Ô¹9Y“ÊX«½øj-)—)ða…ºÕÂç­Zö»}½S¦UÂËR-¸§¬‚ë\jý´úÄVAäP‹´ñ§%z»Ó’Ý7-‘BKlN|ži�î»´N¨´L×IË…O¸!Z#-¸Ñ£eiØ@I]î +´„K«Ñ^û‹Û¢Ý­×™Óñ†›ŸKoí= 90}žïγÂ庳@oufæRV怮ÛW¨ ›ýæÊ®±æv.Ò¹¾³ñàâ,÷Vo{A›Å<]Þ:h¤«$çÍðs€§5f;U�eÎ5™ØÝ\ûÚ‡˜/ ‡Xê²25—2=³²e¥$ݳYVüÚE¨c]Y•ï°ØÀL¥Ä†¤``ZÛ@Žªz»O,‹Å’ Ç<3j‚6ñLwf:ÕDщ¥˜Ðb¸ÌC!Ç’èZÕÑ�US˜€š1æoôUcµ$4!g,à1Æúb >{¼¨±dù¯Oû¸•â×ú‰\Ãï…T¿^ŠU;ë‰U±_b•ìÄÎ|™d8 øªÚHaÀŒñŽ˜Ýk�²ýD´·YºŠ^úXn#0«q°…‚ÿ]¥�œþ§Þq}«^ÌÃ8öE$oƒ1- ›^y--i=Ù]Ql1#èÚ´ŒâŸ#fpò²÷Z4½EKú$ý(Ä®11ý‰R@òûø]pµŸ[iÌ© °Ž HHÿçùZöÃï ¾NÝãû&’y� žKE–‚K&—U‚¸� r{Ÿ´4Œo2 LŦᯯ‰À‡�6*ÕÜ¿�—½Tßh‡-ÿÄ¢5]µWÓWu+=5¦",v6àîe´ +éæ¡0Øeþs.“7hD_è•ûJ©IøCüìî~m!í2(BmÙõÌ€1ì1*:¡Á?ª�®ÒŒñ–|Ðd¹}ýâ¢-<†FFÍù0ÂÀ™Ö¿WTçIEÄT&ÄX%…?ª ¨½OG‰@²Ä@U£j€ðÁ ¢ªxpÖd4Ì ÿ¥9ê‡]¸Ðgž¤k¼V†Â]ºƒW™-ÈÌ¡ž°�6ÍjÐÀåàÈêÏF:F† ª)¸|ë¹BÈ’ÖQzÞK?bvË,§-æo�´ctÆyn Á¸á°37ïº,¼´ÞÝÂÒèL*2Ò$…Ú²'GC¡Õ`P±ØÊ²°¸WIjº‘b?‰‚í¨‘+ÀãzÄG>‚ª½‰©R|O ýÔ:íëŒÛ,´œÒëmä6à«›W8¢º—²—qCØÀÉk è74�ïÝ®¿m·*q ö™ã ¯À3ô1t”6iãûÐ3ñ_£Œ¤’lá @zºÕSÊhž,Ÿã¤i\ 2rå’~BÏÕ÷ä ­5+yå)t›Hò|zqªj +¹zrúSvL': Y‡¬ù’OLõ|x¯™‰q—ª�XœL.öÊCzUP,ð&3ÒÃanÿÚ[òŽ÷éåUÙ�äŽßt=¼ƨ±4Ä(‚e¢Ñ-×-±¼îÛ½•ò¥� ×áÄ¡q‹fÎá>b¥e]A¸;=ê?Vä!JÙAÈ£È`ù -©Î\Ц®^;À¶‚P˜ÎH¶ßE¦�r¹e¶Ò Y¤Ã^šµÆ^öC�pí_ ÓeNò%™P…s˜+ˆ¿pXŸ†LìäFÇF†Øxº‚Z|‰,vGˆYîaÃ)¯¤ìüâÍ/ÔW?ÓÛÍu“Fauž­ƒ�Ä_�aä;¹£na mœ:³¤‰ ßq?ßEJ}�*^+&jE Ÿeúºùb—cðÊ«N·±”4b1Âô»SüQ !²QÒÙõ¦©ØNè€!8Ð0­aÖ¦2 üH +;®#b€_+9!âµw+æÛ�7rdÓ!DÄ�ï+õÙ’‹(Þi—Èèª+d× @®K�a¤ôÁø‡ô$È£9êŠòËÔMð’ãÉ[ªWq6Vå7&”!~ mžŽ0^�³Ü”×—ÈÊ?c‘ê}‚»L˜É°„1@Žoqú� Èî�†�Åα9í·±½ïB‡¨†¢¢J$A‰;�².wý¹Xv�H~ð( ,H|Âʺ +ñ–Ý  <ðI!Š�E» fǬ¿æöÒyß~6tÂÚÕ“�«ŠÔûn?jUΟZ-ÐGeÝúõŽÄQ�SZ,b, +¶Ÿ44Wöœ²ÐßyD@-{ÔD™„p$#‡ƒDR3¦j›'µèŽê: ÛÏK.29`†·íp”{ÄÃðÕy?Ôå‹í¡8‰NZˆOê@n=æ)á¼Âàk÷ë!/8ú& @‹PŠöÛmùƒé �‰:Þ¤6µõ�´D‰½ ¾¶4mñò’Yá“®‹I +änÕ݇×T[^9)mN�Y”<ÐYLÂñ,Û;˜b/M‚‹Ïu!y èŒ2Ž9C-Ûv¬Ê“yR(}¢�Í  ß®qЈ­ïwªž•�ChbÀ +î?º<,8;ÁT©xÎò;˜Ê{Ò­Ð*”%´šcL²¿+2¡÷¹¢f¶à�% +^Ü&GŒ ºC%%;ÎSs´¤à¹Ü¥F Ö�BÖ‡”¬š Ò¯èu7¥ ÙÑðƒ…|òŸn—^¥wÁ®;êêPšòÃ!¼&ù¾â"µ×ÀËŠ—þ“Ë`œT'b:v*3#œ·aîuðk¦;öŸiMBhëý±+ ,Q|»î¥&cQœÐìuM}×ÿú¡1…W‰Vzô’¬ó}^'è{6«f9*nÉýq7d3u“LX‰qâî²V§N&XÍCBêíA;âõ%H$ p¢ G.3¯é'p +I4 ëB\²ê Õý*ÜÏ]éŽÔãa]±+hµëù`:¤QUs°Hw�@–ÁÂSg�‹õÓú¯ÏRž‘¼Òcg¨ta¿kQyäjÈ ¨‡û¬ÇK ”Ü;Ô<“ÒJÇbÙâX“8HÆ­ž—{:ëÐ#![]ÿ íÝÎ�ú0ÇR¾%¢¶‹ˆ’žæ%$âX‚rä?P|[‰í€¤–¶r‘ñÔ`}³S£s›Žô’…2ÉHKƒTå礔#Y3Œãqyå�ºÁ†ëÂ�ÅAiÁmöpãuà”‹ +WÜšÃN7×X#•å�5OÏx”ô@ø0û¥|oØê’¯j’ù,ðÕU 5Se¢ùV©ð9W;¡˜DÇu4BFÉyÎÔöèû®gT mãGj<~Ցĵm>‡º/|‘lbHzbú™â‘Ìr8R˜¸«&0ÉÀ Úõ£Â®({níÇl}‘#+pÎô÷Zc˜ð¦.8"¢Ò¦Í…þL-VL²FÆú\N€Û6}BšO¾ô“9_Ýy¥tƒWAµæEòO‘儿“²ÉpÇ»/DT˜,.aÌUàÚÒ@ðà`ÐtäÉ´ð"ª6ûóöƒf¡5â¦çèÂW;¨à¤?2·ïÌüFzÛ>0*Ò@Q¥a@Œ%)�âö€á:. �4ÐÝ6×z–ïæ # 迪}Æ6Ó&ði“,»!Ö­¤¼mÒŠ¶‰ƒ¦ªWØ2P?A*3¤·<ϾÆ^É9bIû ˆf#ü‡R$x«…I±Ï—½„TEÊ‚IÊÔmá˜ó�m‘›÷ÌäÊàÙ¸¿œå#›=h7”hž¾6­†tý¹ž^j õï›S¥ÏäÅÐC½Ù¾SošÙ¨±2—ÇZ!—¹sxÃDã*7H_æe³+¬£"˜* QêPûåË”Qã×¶_/?˜PÁkkôÛX®Z„ý6õ×LE.åt̽ÿó!YÉ‚rÜ”ëv‚�®ÐÓŒïQ¦�ÖJTJS”É9šb™¶4—©AZ S2Òtðž^Èw&¡‡£JˆðÂJ"ÿêmnŸW&4ý¦ƒst>Âp›ƒÔ Õ÷RÂ=×þ�ßôM€Èo¤è- E±É(ÐJ¢ê·€y›ïѲã—+޵2œ) +¸˜ù@„¢*0¾�6¸K§TÀ*; �—¡‚xûåŸóoÀCŽÓ–G¶%ÎàÿŸJRÞ4û%EmûÅ Ü*FÂÅüJ פÅή†SlƪR™³¥-Å0®Á×D›ˆEŠ€á®Ùµ†KöŠ;ˆ†™WZëo@¸�´ÃÉCKj{rmôÚeàmß ™*›·/òä�¹‡—È’0¹'eªû ú{µ½10Gá,»©RÕ·˜!4 †~Z†uŒ zÊŠ�[ <ŠÍxJ딈Š*´’šh|RV9dŒæ( úSË·¸àµšÍÂ|õ£‡ ²}¶†t$ЯÖwü½“oX²†Y&ѯC¤æü™yàÅyNP2š@¿9ù?LÍ © Á˜¼Á:\i–J:}ï)‰NüÉ^žö#•ˆV­è´RœÎ—D¹ ¯giAÖwòrsªú~8‘¸©P•£³ô¼€˜^Û‰¿e”¡š÷ŽªÈy!s®Â; Â|3í¸k�y:)€‚+Âvmwê1"¤¬nê!PB†ôXwÉ›ÂjzAx+7 Â[C]‰ÀNï†Í÷¯Ù6—öyTâ±=+—øŠá΋îb¥jÒµ½ä±µY;¦o8±Ô¿ÉŸ´Ü£‹ ùP™oÁg1ÿxÇuÂñŠð×Ô¸Õ³/ÎÈ#;f†ŒŽEãâ½µ—YJàÚó™xßClZ1ªKŸ8¥AþI{ÇÔˆý“~wo‚ 'ý–IyÒ{vÍÊQì»&¤xWèÀI~Æ 5“¬¤±,�cQ�ø¤XæcäÆ=ôréGÞ§ÙÚˆ\¸`i}RáÒCÑ`‘‡Ú‚0C‡òB#ÂD½&Ë|ݹo Du°Œ†¯#c�P¸†WÝœSó–KͧI6,s#¼X1ÂĶl§ƒêÕ�ýˆf¡â&ùeÖ2©˜_Yïf{ +/  y$¸äsv‘»'Þn"Ù:`m-òv®ƒ1µt(ô¬JkElÚ&Ž^HÇt‰nCÙÃ0Á}g8 ,ç†eÎ ¥d”©G½Ô€Â²Xdç(°»Q¸Ýs1;c½m +ÈÍÙ·$‡X—W0[L½Nú|bdÜ7:ÕÝ&v\Ô�%¬h쓾å«Ü&jêü†·íÁåIØ5‚$öŠChtéèÜÏ›"?y´ºí]‰yûipLÒj¸÷öýM7á\ƒÄO·éõfr£ +.�9EÎ{뉀Dv©T¹Üÿ¯É`§<Úký±ƒEfÊô°G[¼£DÑrªäýøôÜ–Ì +EMªÌN0ç¶áÿÏLN³Ohê¯ÓFAnJwÈÒ1ÌZ‡YQÐ…Uï¤ýHcwÎÃú•å¦×­=i +ÎRð¬@[$Dùi^¨âÌÀ:þbVúk½š•g3O©G‹¤o§qé)`ÜÂÜIɇu ÜÆM­ºr%ú*}{Q¥»:¸zÎïA&­UD,RTø8ÊÝØÝ54‰[$ILâªp°ûÙ<ì.•uû‹§ÝµáoÉ÷#°Ÿme2P+0hÚ˜kkã![¡-?¤•w�œÏHJ Õèð½ööìA‹Uˆú&Û"¼½ˆC ±D_(�ïd,Ö¨þž©âuåR”a  + LÌ<:P-ÏfÊ2ˆbkø"΢Šã•0¥„ð'q{f2&Åßd|NˆS^ç/ÚLÚ ©&½Ê8¢o—húÇUÛÇg„‹f>åì?G~r©sbáWŸÑ"ÇqOSÏ�;élxmQXYñ´ãÂ\3[ªhê9¹ðÁ�ó þáBa�Û¯Z¢ùúeÑ3Õ›H#±cyzóê~J§‘(÷ù4K¼Ê­Ð]æðÕý#žÅÞãfJlÍ�u~�á<ü^팞@l $ +Æo«ó§_°P˜)áõν`VÔ›GLý§®‹ï@Ö ´HßI2ÊéȧÀРq³ÕMø^ÿCQ޽i‚¤Öb€ ñ_¯:”ó-;òßr]›~ä5¬pº×Å¿“ '©Ø¡ ¤ž'Öˆ,úÂö +â…ûMfûT£ÞÚ?ëqˆª]£ºâKH¹K×ßbCpZ?ƒ{8¸:8?�Ò@)`I_ y :x]TþÓé|/[Ö÷—aÇY65å [aÁ/Q åË{Öëžžà¼)è50÷_a‡í`* ì�Æ0¤Ù¡áéþasV”ùsØÃÍ/€«ý J±ËÑõá ˜ö€¶Ê@(Ï M„žñ‚/ç‰ïÂñNo� +;ê5�‰kߊ}ªÞ¶–bHH÷“û¶¬/�Dè}›Ô€€‰ijŒ@´¼²³‚Å]E°Ãו‘Ùu¹­ 8d¨L’cH�Ž— Ðäkè:ž+g3;ö\&OÁnËì‚Ü)ŸíýЙyÜá%‚ Ò2ª ÷|^zŽ[ºç*6§{™E>Æëª:KÜ뫘áÿ† Ù9 Fh3¥GØyÍø^!±cu ¢^&îï�UÐU4¾vëI-“’é‘ÑójͯÈö‹�™K,„·c!^>5Tâ‚]öF·?éhg¿LYÓ±;6Ñ‘B‘‚3c›é©E1ΤšÄ^#›6(ôš�²�+V¬XvBâH m�ç.pϘµ$¨Au"/Ì/�Ålª¯Å›‰ÈßÃÑ4Ä–³ÿµZΓ:c�J­¼¢ÞÕíù¹:€ù¼õà,›Ó3$îÔ`ŠjΘ¶øBº 0±™)¬€Õ„u–ŸkJåÑžçàÍ�Oý¹1ïžïp�¥D†\-6KO‡žªÔ÷�'p©ËC¿ær×âp;Â<³§4k|6÷�¾Ã®íJÆ„[Â7—'ý'ƒ«,°P/•wƒ™”Û0Tþ-ß³í¬è;@V‚ᮇ‚" ˆÈ¡�ô)ÖÚ.¢ý~Ú0€=F'>ªã "Ê —´ëÈEX + –$ÑvëÖ2FýgÇÅ—b=m)e‡Ì’ÑGGö/è­â_è9 u5:ûWbÉ25}Õ�/Œ½ø¬) Eì0w­pÑüÀr‹¯—Ql.ƒj¨ÿ“݈"eárÏÅg¼DßXâAL9HJºY[Ü¿ A.׃h^Å×®7°Ná�œtïЦïñ‡#L.ô‚â…§'ïAÒK*RÚ.r´Ë�¨Ï#éÃVÔ± ÿ’JªK U¥K ¦ès¬0â‹ì -²Ž¬ïÞDi�9ÈŠòÇŽœÖ᪪¤à³}Ìm¸Šo´£ÿ8�BrM“V–ó´�â%ÝŠç�â²âe±Qèl®,N Ò»çM½Pü4xEZÉXFŒˆaü2�ªCO˜�¢%÷o(Ðä6êP·ˆÜe #Ý¥ƒ$[æaÐö¯úüû¸1�Sr/ñD|ߨ ‰à.)”Ñ–‹K:€íkÐëïIEèáÅZ}Z‚»1>&8·*Và5«&QÍB²ø·Ý ³pëj~±Pû»“JZÍ3BŒ�ošø»]Tg‰“ ˳۷¿“óAaê`ކëó€iÊa5�ØÀnI™ýTW?ÏÑ®5`ïžgƒîïfù¤Ñ†¦‘G/®…Jü¸+qGÀZï"É + =‘¢òwÔ~ó uˆ˜M7� ÔÕ�¸öb«ë„:ÇݱŸ¿ƒ¢Ûë·ø;U©IúkÀU@�¦‹‹‡¦!M]éükzñ,D7B5F_—qñݵ¿“)š­Ç‘Äßµ Š¿Q�\`p19ÿ£Í¤ÐÕßeWK ¡øßÀ–T•M(7þÔ¥#ˆèïyê 4?Aüá”Ì_‹xš¶ÛåïþNu™¡O"‰�Ì`8þ®�û»µ„ƒU¥K#»¿£ƒÜ=F¥2í–s¼Èáo +;s ÆŸ>ÐïUëÔçâWÉ,‚–^<<æ>y”‰×tB„âˆ2�ä-©+ÈX'©`èÜ +w +ˆC 2î ¼u›]€M®îÚzú0 Úº%òmÂi�õ‰‚^Ú‚BV�2 Çi +¢L¤†™¯ßèÀ]Â¥b0x÷�„aÈmj�TFã›?^é“òb6ösòéˆÕ]‡Úü$á›ÐÏyŠê|Ê;\W:ôRåð�2íå�q'Ü^b.±ÁmHxj.HQ<"!þnèYD@­. ¸¦ž¿éwZTóσoPA g�] ¯²‡}¡)wÔ±ëÔy˜‰Ú2§Âå$Ã>ˆ½DÎ�XX‹N#ã’Û"¯àŽò›t¡wÚˆÑÁm²ìOÒÏÑ¿‚ù*ELŽ÷Òh=~pP.¡Sr‡_ô´…Þc"*˜”rɯ)¡K>Õá[BGÕ¢JJÛq`”±s™H¸Ê(˨}È–§¿À~‡:±UIÐbTy† +”Y ¥ ì lþºÖ±iBÙ ]‘Kî\'ìô”$€?^e}”><^Ô+~îs•OZ” 1c�q Gk�ßwV0~èýG�¨/Ë526Þsiò»À>Ï.'œ'råú‰²XË®ÆÉG³c/èü7·rŠB¿ÂäÀz94áJrÄfIPe\8J@‰ˆÏØ3¯4!à—(ñ¯Jh÷x*‹y‡P„‰_ $¹K­D=Ô.1©þ$à¹N£f!åB;*©¬nûç›R|-zùjë½NC`°qJäÓ `úê§]úIG5Ô{Ï Vk —uøvû«S D»ç­¹êÉ€˜Nƒ¦µx¼Ç4HTˆ$B »|¯+ÔN±Xzö‰¿³KÏzzèÒ–+…OFgˆ•#¯€Ð“‡&Óø{ï©Kmî Źӆɦ„�^þèXë>¼k-ç‡*wà•vÅNe‚¸¯Íé|¡�6!¿R¨Ṵ̂ðªp*§JÄKÎ䛸h3²Ñ· ¾ÇÍj?H�‚"±Ð…µ¯9B™—àÌwZ‰P€V6 ÁQ|HEGsãAÕ@C¹ÀüÓ7¾Án„6·H–§çß4BÜŠ ç "PÆ*ª‡´Š…do5Xa}† Ýc(s”ø (¦Z’@ý ›™¥Ð˦�f �äý� ö÷O,f¼ÿ˜Â’eWô· +Ü|öP¢uª¾( ðVл¸é]rb*ƒøÐÛZ(¬H»P,Ç11þåÔè”…©Øw?»Þ´µ‡�w_’ÏÁ/Št™sH"yE§¾ÓŒÔÒ”ºÆòßükÀÙÒSž!®“�ã¥'ÏÃ7 R QÊãçÁô¢ZIŸ´2 +n2iEayÍ­ÊOõ%Uf±jðn…fy@4>›è¶/åË2Мeîíš0$ŽÄ„fRr·).&‰ón<™,ðL: g#$¸œcÐÞE$â),r:¬Pìr&ðì¦14%£ïÞyœ‚Ãt j3Ž šI·Ë”èEË‘ÇË]P�j�¥´hrÙëQꢣ̲Ây³˜µ}âMŽ%tŸg+Yp�´6™k,ŽfÞkBÐð"ZˆxpŠq”™æölO‚"ûƒ3L:jßIE~Ú| °óþà<Övf%=[Ÿ�í”úKW<‘/¯Ðã,*qP‘ñÔtìß’&�¬'vu§éžíz(1Ó¾ -�…°#^�mÖܰ}P–üU +W6 h+MV²Ï­Çsø|‘þÞâãï8†ú“ê%ð“!".Mìäaà¬F£À°å7)Tiܪô ®â#°WªD>ùô` CBÝüåUòÊ+›>’Ä ú$ÃÆqÛ�Ðï¾ÁÕH’±gšÄ^‘Gòˆžtl�Õ6N•é:úou,È^¬}µ*ùú!íæ‰\â�6F¯Ã•ŠÏ]`X`ϋ༩ÄñØu›l’X¬ÂÜ£Í\¥ÕjÉ‚½Ïk$ýb÷^p�É£×®žåÝZ4°µŸ"Ëé% +··;;ÇŒsˆÒòØ¡â˜“ŽžA8cÃOíãßbn™’rEe5FÞWî8M¤»6â ˜„—¬Ï�+ªRþH`ЉêÚ õ¡a¡Éÿü´â'#ãˆh‡{p1pb ‹E þïKôaZUäú.ÚNÖ~¨m*T‡ìŠXÈ(¸æ*}�†5&û²aŠîhA�ɦ4ˆ�ÌѺ„ +\Ò›Ꚇ•ÎGÅR ï¨ke—5ZÒY%i{ÞÅ\˜ñ&Ê«ºOŒíVgù²—ó~üHܽP¡°€žâœ7ùëð;ÐZàVÿ�t‡`œ]n•AH¤r‚áÕÉð†ƒú4™iµ{lƒ˜T<0�+M*)‰¶=°œÛÎy€ù±ÛÒsDÁø,£rLDcR§Ÿ_•?HSÑ÷ñ]CÖïrŒ +‚“öz -9?^»›Œ �©#¯kñ‚ËþæºÓ꺶nåˆGûxO‡ö}s¨~ª2ç§oíÄÚW_Á?ÒQ?*°Àš›£�ÆQ�_ÍXïez–+¼é· ^p9@ð](T'tΞ[ ÔF$ +Š\1�RPÄaìu²:EÔÏ&ñº·d#_f1 ÚîÄ…õQìÑæ=`¬^ +ÒjÖöîî&À¼&Ô–ée“–™Ú­G/¿' + ø®Ze'"§ï�¨3‚…P" 9BB›�F7d&¢:|÷Nˆ¿H=0è5YVži¥SôƒSDìjÈSò­ïm`X=SÝ"1íëÃR]½/‡Z ¹õÕêXºeÞ!-ê�OzÓÃ&2ë0ÒÐÉ@¡>ÒѵL¿¨CäS¡@µ Ya“wUdžÒ¡€sÜ.5UÖá´o†E”EqÔsÞ/ÝÕ<8UR˜.Q,š͉q?ÅaKÉ‹WÓmÕ÷šRƒÄƒ¯DÛKa÷é¹ÕF¹æá 4)PjE�¿‰+g‘—ÚJŠ:1v#Ó*‚tõ)UâµþŠzš4š)YÌ+{pÚ5É#—*IOî’¡Y"?*‰ö:r¶ï.gòo\Y\÷ë…Ô¯Rçï¶��AŒÇŠ=;ö/ª”m1n{þj?Wì0©¹Ïcü¡9nKÍ)ÛìAónõpd×%æBzê§l²ë´ð(œ‡Üœœ»ö)é��[˜,�L|›§í§—à¼)EÜoq…З—ykÁ›?‰æíõU›x»Nñ‹þÂ*!f~Tí%UºCd9afFy-dwšJôo§çUÛ\ú�Î +£†n1~9…0ÒÝühðɽ\…{±î*èØ)V-BÓ嬸òÙ?GÐsEe(ÑzÏ—Ý€Z�Œñ?@Qb“`ÂÏål'”„-k=‚бp(ŸU³rÑô'û"ß<{û õùàä”8xå•LÁ kjó W¶ƒÔüÍþ¾Tâ·‚o SËøç[Vˆv£?ÿæä¨–ѳâf¯„@š¼½±¾�ÈNv±d‰"ú:KË”¿nEE Èå\×'3(űoGXl¬­/;�'Ìdb,ÂÄ3…¬N{i‰Y-Ä A\2Ÿ‚Ý8§1;�¡j"ÃQS)[°*SŠLªÝr˜@ß(ü¡³š²|†|K,vÌ'FªgŽºî‚«¨Áª«´ŽB`aÑšÚ׃«v»¦†H½”¾Ûöþ{Â5�$ô õ¶3 ÞÙ½ÿÀ7c…Ë/´þŠ=Oé´[Âl­ßRpÔ_7”+ó‰žÿšÅà´¯qF䙳h4Ëz"z:}÷v¸5­Î‰æqgãE¬6Š`A?QÊËwæilSÖê]PJnj¿‚ˆFèÒ±©ï ê‘^ ÀHº}°íÏÅ+˜R&:Ôtb‘ŽÒåžÙ\Ÿ6jΪû[Ög‘�è.vÌÆ5Äü]Ø�sÈpLkSqm�ÎV(owf†�ífú\`ù·`æ­jgBë>šŠ&8Ýb¼z)dÆpHŠB«wWH×™’÷Iºüšlñ!•è„ò”gû*sp¯I�›4‘gQì‰ÖÏûÒBfËãVôî@ãÌZ’ Y?s[M|!È‹7ìÅf+£rD©&Q7\Û_W›èDsò-Dž“°Œs’�×! ]¯¹Ï úÊ /W4ÿ”àˆd[T”¹V벫�V{Faö>UîÚ™®QŸ¹FøDÌ¥ìýöÍÂæµÏÂ�.°%0l�Æï3~ÂÏh™Ö8åï G4 xNy†ÌÙ¢9/Õ!X§f˜¡0N�ÑoÎæ‰çÜóþ§–z©M¡ÔÃ�”üë6�ãçÝØµJ˜¦Üçµ—íã=ç&ì‡ ÙU2ì_"c:}…�§Œ¶ƒ 30eTj—mM§"zæ·”ø†÷¨A¢à7�Ú‹w7W7Óé3´\uΕÑm'hÖMÓž‘èé ®ïÃ6Ui@—Ûê)Öß�´ž¶:¥Êt3„tгg�È™wø~<ûK�U„¼�zö«jlȳPÐg!צ%ðy§ß6!6-hfÒ½ÿØÂ8,úW % Š»`§°·2kæ’y! ç½ç˜oYž�†÷èr™¬ü ¼§ãö‰Í0uÓ±Ò[ï¹V?Ú�Nxþ{±¥q>9 GÕÆÊUJæûdjßjœAê”ç�Ô}§Ó³IÝìê$¹)¥îA9€ +Ã¥nÊÍrgê&FÝ–îžGÄ�ÒŒã¼ç>(t°Ü’r"2Ü"=�lN}ÿ+ÇÕ{ Û|wG.–n\;[Ž‚ÞÓB­#ðò”n¢�'®ÎG§Ë Ó¾P� ÏÛ/ïð³UQºÏVº,Š2¥šDÁ\í/A3T�!*Ýžíã~¼g^щ,â=~›ÿ­�¬ð÷Øß6J,Í˺#\B%K5YGØah�[Dq{äOœF3ÞCwµ‡(Æ{ÊEb¸|Å¢[&�Ù3Å{\„°Jñ™±Å7ŠNÑ- Ù8ƒ{l³åfânÞº¤ç�^Ù·ÿÛwOì)h9ÃM'P×z3^tÑ ÈÂ$dzñŠnìN04÷<òú%âž6ècÙÔ¢0Ç{¢*Ý� {Þó©çŸs=1Þcv‘æï:*«÷¤GÐ6˜vœóÜÅÇ~OFÖ°D§ÛÓ²MÛ¤|öfË?ëŒÞ¥MÓ WÁ-ê §›�#Ñ{SëÄüð{á{ ¼Ì)ºx¡yÑû»ŸM.ßZ›™n˜¼öj|b“5º–v–1ãKŒïIÄN”£¥È²Q0†‡ƒ¥O¦8W:†l8§N¹F%ueÀ¹‰F2‡îèâ@àˆI'\«S><‘Hn“„š­s:e7Oâ–„mð,ü§šw¤ì*¡Ñ½1ð¬*!$`b¿7DOïgYT‚ž£:Ì'SÀyC•�¨¾—Ù¬ÎÆdð�jíS‚&ö”iRáÇ89®4ΆE\\\%X�ª»�‹¯¯xN¯Ê›gß@5𾬯'‹ZÎøî/Wgð$ÆÄn”˜}×��;ªh(Ìù>­ þ±±ÕøyÒ�ˬ„ç~$`äÑã]ƒw“?¥éK‰�ž‹K7%àrèwY5Åpø§:] |âÃyÓü&¬A‹cäI‹}Å|Ü^ ]ÏÌD?åT¼Aj(Péu»² 5‰ƒ"w� W?1©à~¤€YšgÜ‹IpÚmÛxþ%yH÷žôGQ§7œ ÕM"ƒ:�º³²I(NF ¶i2<£Wp(ÐWH·C“ -�–v–×àÑ$a0^yƒÜ�Jo‡,;["òŽ¥ÒÒé.(¨^+÷‘pAfê5«½*¢Œ)A¦[öv…Ÿ“²h/%ò‹C>/\¯B¢ò¦J,AVÃ+O!� ¶ãÀøÓL€%O?›mñ²Qƒœ€n7ós2;‘ÓŠ°1"IöTÓ \¹ å8�„r%µK¯†ÞévÆÌR¹ûJþüû‚÷4°§× ü¡!zøg9DðÍX,šßDBnoÕX>E˜1Ï�§”¬Ãñbl�81 Ggé#ƒ‘ÐÏùˆGB]P„+ë”#{„2‘�ÄÆyM‚Ën�D“�:Æ”O-]WË>R‰e’')¯çitžl+Q÷î9ÑÕˆ~¹Ü3;%€Ëi¶•í+$Ç`—(^-#¤.¦!‚Óéò¤¯Ä…»®^3ŒÙ‰ÍY%'OUĵx½;\I#4‹c2sƵdD·ØÏL\å®±ît,�"Ø ŠDƒO²-ð—¬Åá’¥þtɦ¹î_BÕÔËô¤K�RM9OpJ ()>ìWúEÇíÙ�)DêúZúð”bUƒUR(}IHç¬-þRŠ*ü3Å-éÍ&Ž™NV�Y˜Qú'íTÖ<œ±Æò§Ð¤?õç*¦&ýL –ÆIÝ[ª‡ÉÌÈœ"³‡ ȯϞk>Oš¹…Wc)¬ámJXÄ‚Q5ÁºõÚ ¥ÇY“:ØÓB¾è5láBPºs©`2LÁÑñTj+Ÿ!Xl¶ýÚ²¶öðªÖÁ`S˯ºŒCê63nÅpÅÃ7‘‰qÅëÌÀl2~Í#©nòÃñµM7™ø5¯Ö>zBìa91ÛÖe�LJÓëÃáQæÆëËü­Tu¤žF?ÆÎŒxãé2³kÚ´º38§]„ëhšËÉ2õ%•D͵ÿÛxDXR¶Ö‘D‘Í`6ôÌ'@×÷…œtøIáÂ+~‚Ìè’Ñ€'V·5¾3Ç«î*¢Œòš±Qz–Ì:Çm.T}6¯À°Ï{B—¢{€nðC" cÌÍcnÄ]í3iÞdO»äN/UÓ(÷¶k}ß±R{“&ï¯'¨Ìö¼o�ò¥ ±¤ÐU�Ý�¼£¤� ºðR"¥”2“=DÍç ñ£Ïr.öÜñgN~=4VoŠs“öÑ,é)"¬•žëÒž�í©vvºXWÚSÿ~i�Ýyf{Xùù–^6ƒ@†š“rS®8w‘F²½çÜê>Gc5Éò ²W’ÔÙCbIó8¤ëNwöÎaû³#¦Ú$ãÝmaw܆PªB£EI¨IršUA,T�sº¼Òf–\ؾVÔi¨•¸2À’Þ ÜHÑfï÷´‚5™PÌ'o$ÄÁœxØ€Žoq医4wÃjÝq,�ÇX/§aç†öÛ»ÔC~GL·w@âŽõO?¾¨P5¯yig”l‹éJ�g’4þ«nešÒP8a÷£ÿ<°(y¹ü€@³ê�¸ 〉°¬Ç“9ñæäG;öOÏÕ“�M¸A%Çwúð~ÁçtQŒ�zY�·AÞ]xäŽ +Ô+â²¼!Yœz¹ÜN…`M‘½³/z$í_ÕÇ>ûÔxúÊ/Ç °­b�Oë‹ðcäDX!½r 2:õœßÌTë^ÐlÅaÀò±ìà +<¨@_p;ïX9 c}câ^ Â�æô˺„žG*Ϩ”A„Èç_zÂè‘^ÓœeqÕ_B8ÍQ.vÍT1Œ9I‡ÐÿG÷r"ÛÀìYÀ¡zF—7l9;PSYÕ(9�X¿ùyŸP/ÇuSe<óÄ[0‚QU¾'噺V½xnP6G‡æÌ;&8y«Ý‹9'Ǫ̂3¹r¢ –š&l»¾ÈÇ½Ž£yHUœ(|öÂÛ i¦üœÖK{Š#õuenãÄ6B,–Ȥ™&‘†ñ@nvNÇ‘á¦õ¯Þ°Š·=ƒ¨.ŽDü-;•ÃxøÉ¾ª WœHu†—bDœ4C‚¯¡·Âދ㮯3›ûäSò%Q+¶òx�CTY±'¦Çé’º¹ ×·‹™ûPÀYyÚ­ÑržÅ=�©|¡Þ¼È‘·.mêdÏ.àBù#çVäsž•~AE?d]HjðŒTé€é°Žq4žŠ)’Í©DL{Ž�C›¹sDM18É�çÈ‹D׆ÝTãqYUyÂÔi²ºvŽ&í÷õÖx8Âïsœ‚r­‹[ýÁFþå3©uBû�x8^ <¶6ã¡’±ò&®œñØ #ÓfÎ�ø“¨N�ÛÓ·ÌbÍx2eA‘ �ÏûƒhJ¼9›š æœ ¤Õ)Æ9F�,”ÞÇžñð¢Ë<5›ÃÁØmKOÅÕ-1lëœ,3I–?²J_=q‡}ØRsôm3lƒO>Ÿs@¡[|ç<õ Ò|wBMË€‹ðà1|hg<ô÷�3]§xtd›Ä£?›£zÐ +‡…ë þW‰ÊrÍçß8‚9M?l<#”„#í©.°ñ8CŠæw|²6æ*–mMs6ž‹³ˆ(ŸìÍ�dÁ˜Ž ç dDÅíãÆƒüÛ:oUácyÐý¾ñ@�_×(¤n<é#ÕUïüæ|{Ûq:Ä$Ì‚ tÈNlsYíxþ€fpýsžÉæ ãzh�1eMEç¸R6Ç•Â'ÏðWq+rÇüé8˜§‡ÿK›N¸4/HÈ/Óñ“Ôr…�ÝÇ“ƒø Š;ñ~`VÝôdŠZuVðJ2KTèÖšŽZ)0‹à_(|Ká‚Êþ–Ëb¬œ›� ¿ND›�)z{r Aþ–…§õ? K,tW$s@[(ч ¯¦.•>[øí^<1AQŸ„¶A 2Q\R»UR¨Ÿ|%µÚ™�oXäøýõ$÷þQôtF­¿µÂø3£<ÝìÒVÈ,BÈooK…·œ´3Í×Þð]~®Bä蜅=SP:ÐÝÓ2¯=’L +˜{ðÆŽþ'ÀµøÄ!b÷"û}gAÊwDRmîÒw€K�6Íú%Ça‚éEÈõUó†ä×�’DöÍ݃¼ßÿ‚MU‘Ûß‹ä‰c…ΔLÿ)±³ÅhãpŸ5™¥€ÑÜýšpOµ +Ù�Œ`W ‚©ëîW^ŒHá ˜ +Ïîm�ДO%ÒÌØ·üS¡ýA[þÏk§"ÆÓu+ßvOE€”†ˆt*òßqŠ&þñíS1¿ày*$é:Ìp‰SQ¶Ž öi* +¤n¢En˜ÆžÌ”�ò•ÚÜTœ¹Ì^|´Ü}™ëKÖ[lS»º_`I¥-‡†€#q¥àUÙ¹¦’šbXŠ¼Ï±*¢¶}.éŠQyyt�;¯9zÐô²s:ª½Oš÷XåÈwŒW¼ƒÌê>WgÉô†çûT®Ï™…PTÍ‚>U­<ò .ø‰4`²çƒŸnWó®Œ ~2GY¹j9ˆêÇÿ�ü¤ÆCu¾Ï£=§Ù¾ÏËE5/‚KÉ(t}êp¼ÜSÔrÍqñ›Îs[£²W%”sö‘-°ù?nçNŸ£”Ug.sTƸë“ܧïôI›ö›�p%yºÃ#ãõ÷(¢°leÏ4”{Ƈþ?©Ïá�7¨O,ÈŽg7Õg€Ù|zç «äêÕ‰ô®njâX¡ÊC­@©Þhe þ¸ºïd=œ�8/» +ÂJÏç2‚J��†Z5Ixw’ês8èS‚j´›¡O'rŠú”vœb؃>ÿ7¿’#Š6xD@n�¨‘-¢*ò$СÂxŸ°Å ˜cô‰‚Ìõ GŸÝçgªÕ7�‚LÏ�ë3ú¦Ä‘“17œå»ù†°*  ëóì¬$ëÌX�2ë³Kÿc(t¿f!òÝîPŸÃÊÓÜ,ê3Þsó>Å|=+Šr¢EÉÏkk µ¼š:Á'ë+kÏÞ¹>Ð{*éjõè^¾Jg +i„…þêÏ�>Õ',»ý6Žãí¡ÔÑ´ú|Túò�±âôy¡üû>”LŸ³YP¼°ÛiLŸÇÏoß1¬>í°×u‚h%o+ká"Î9éua<º9dÎì³Ï”\ï Ã»Wç‡Vð;#ã½úv¡mýl ~\&\Ì™�VáÙ,æ²´ãØœHn'´°»J$ZÙ{ðÖPŸ#´]Ãë2ZhÏ2h)m=¡�ÏG™qÛZƒeµêƒ¶=]¯ØEh÷€àÏïm +Ðn$Ë] endstream endobj 37 0 obj <>stream +h¥ œ¿’e˜"ÐÞÁU±r•AÛRRÛ8Wy Öªeõ$ £öd±Å®Hl�¤ÐªO0ÞbõkP¾@)ÚÈó,wËÇÐöîjÊ&úQ@´´ KêÍœhÇèÚÏ¡=1á4ÑF¤�gø—®‹ðFûO käѽ>öŒs±+IKZ?7œ]Ú£-¢Å£ÒB¶_ªú¡´} Ñ÷ë<š´’B+AY$눸β²b$:9‹Ú˜ÛEk”6 ·Mü 뜴Ñ7Èì2;�´*[^8Ð'˜ a0%F´ºeÄ  ¸°lËÔºS#u‹ˆ”bkƒ0&ÇÇ¿¡2²™™i™EdÓŠ¸U‚ .â?ýïôa)âöÊp?y®õvÓõ]vïŠè…ñ"¦®(£2ÀdÔX6Í»# ˜$VÂt�ª«Z�&¢  ªˆ–ˆ*µªp‘*BõÔA•‚±J¨Œ”�G•@•A­¨·-¶5Ú‹­ˆ¶ÚfÚ¶½hC+ƒWDÛ’hg9}N§ÓO+bú© K ™"2«jŠÓi¾Sd€"DÜÑÉÊL‘"¦ÑQÌ| +RY™)#Ó2/EdRfxˆˆˆGDÄ0ƒôøÜ,´=˜ß?ìÃcðƒÏ�Y™÷ày?h5cÖD²ÕE%ÇžIzé¶ÍgÚ‘ƒG=Xù�5麕kQ_^Zæ9é¦ '}'0�]]K»ÌÎdoÿÌÔïv�fœ!Âéß/¹ÔöZî"Îî?gUtHÅ‚J¿ìlNª·†ÒЬðìZgÏÌü}t�‘HÆ‘  ‘ ³k%P¢’Œ!aÐLñ,Š˜cüó×\’ˆ“".ƒ²°2WÛì×\ÇÌÏÿ⛞úÜê¨ £váh &2�áýéÿBÝ…\úÒ“Ÿ»ŸÏB^zl×gۈ崹h;ÿS³Ú�«|ó}{ý÷éžïª>ôñït“i…öç¥ßð23?öhN¨´ £aÆahhK�ÞzÉN¡Õ‚¬Ù_ƒxÏî;‡¦MÞP>¯ÒPðÄ<«§ßov'÷ff›;³™É7fW·ñ¤pwwwwwa�Ѿ[ ý+#:=7cü‰Ïñ÷­2D¤÷'· ˜òU+@ž™Í +³×Î"Þ'¼àÛlÁ¦{K%C`»<ÃibÇŒÞù +(Û�RFŸ =i�f¬LUà¨lnçâ]}äÛüTÔJšLûL½‚cÙõ,Pv§qÚøŸª,ç�VgEÍò¸•ãBü 9ièü±:y#yÈîÄ̶ýLQ`; !ÕÇ�I? õfJõ­F•±ª,˜Y�U•ÙãF ã›ûü,|ªÏ˜ÂxÝA¶ý›ÊÌÄí3ã©U—â¨Ô:çJ p@²@0 ˆc5�Dó€U\ V4FZ\H"Š-É*¦@Ð,dÒûtJÔ>+Ms¨ØÖU§ê}•#žDL–¨9·Ÿ— [jí»S 03÷�Õ1à ÕÊ€�œ,CÁ¿ˆ·oÎYx�³j5ÿ¯öH ÿÃá_× èï2l• ê� ú%_ âAΰLÚvŸ["¤Ü Ù¼CcÖ"Hj  !”§¨yã˜æÙ»($áTƒ»ŠšÏ›¨ù{Ù•˜¸!0W¦=öî[¤´�Qê7)4¿';|XycYöMa¢æ<<—9ÏifâàÍõ«¿ÐvÄâ_ø€¥Å{š]æü%NŒÄì�¸y’ ±}„99Ö̘€œbíòÛ¥k–̵mèA‚æNséðѱÄñ¥c¤VTë, {¿üåçª¯Ê 4X×´l¯·Ä‚fá~}¢ìÌûŠõEØÉùB|€ s½4\<^fÓ�þf$h]7\¢4!D£ì<’Z„„ðy†Þ<7._(è˜I‹?4ø�¡�—Ýø)?>Ñ„�0¾‘� IÃE¤¶±Õm‘7¬ãÊSoZž|GiùPŽ0åšjð…GΊî¸ÀZƒ„@fäAg�h’{�¬ú$åa/%b5·baz!±]åÁÄJ« Òð =a;çgÂý^7sŒŽ¤Z½ƒ@29òÝÉ¥¢Ã6sá‰;Œ¹îDJ¹p›ØS³³gæùýA9 x¡-D΢¼üx‡U¯M»RØuÔž…d^ü¬1"Ô8¦²ùiÁg$IÇ ¸2£C�/½Pdx ël÷g‹&K¤A^GâZÏÇÚ%ÂïÀEßÞ‚&¿ +L-…OVhÏܞŭjo¡®œºyͱÌPu´ž\Žh"eu4½Þôûxmcö”™Ûzx¥q˜¯Y¶Áˬ‡R +çáKz’y%¸³BÄPˆP5 àÙŒÃWTF.‘¼ÃWö�ªz,'óÁšl§?ÒýÖV“˜ät¢Kåo‹½°5fUdu5×{„T;|Güœ}^}d§þðµðÑ·D¾€dâ𕽸ú3rt=§Ôm¡ØÎ~õJV0ù×ß.Y‹ÕƹY5¯ÐÆ•(G~lir\àÉ¥ŽðXª¹�–Æ�ÖÎeËÝñ†ù!,á¬Ò’“›Ž ðœ¤>ʰˆLèSW>à‘t^ zÛ¢ká•]”'°ýd ?D“©z-/=þàt$ôkËðwMþr.Wk³s„«Ðš’QOäb=ìálQÈ¡„¬ÍBÛOòÉPÑñ’:`[”—«µíáRh•VýŠ Æ“Ûu² +µÒßÖêÜ»$ň²¿0ùTt¾ ¦ª9M%3q†wÞ¡eŠ‘øA"wÝc@q©�ÄaŠo&5dâ¹k,=sÎ8Å^òD�9ãp÷5Ê7+ƒlåðUÍì“á„ÖÃF….«ù°Ó¸as’œ`e90Ì[µÁúë…Øà·Ç¡Ê:lsΟ°Ù¬1ÖšÈH¤+„(|‘­¬œÇà:žÍÝY•qmxÃÉ�+?â»66¶ïðåNïá\=@†ÆÒÙîTH|óã¥oO§�”;DðÙ€Óä½rjÀéä;FW�dBóår]# +E-™'º·×!è�ø‘.Æ=`ý ਪûþÔMüruÕ„ä §áìÚv$³Z6¥ùÈSÔ02¡®h_;!  “õA›Bç˜[³!C/<û3±�dÄ�vÖWï /ÇGWšp«O•`‘GL&$¤ì]%ŸáÐÉ€4›¼paúÊ€š¦HÛ‡’AÓ›Uè~Y1`Â�®ÝŤ ór{vlëàôfÜge×™ü… X +åK*ï:ò¨žjw#yìqë¾ÊT´—'Êû>k¿ç°øsl�¶c¸;H‘¤ˆ&¢µ5º6âVÞ¿áp‰¾S©ŒT†>sû@@Ç– ]ö_O!`�HOÌJo XKzÊ�qÄãêdK@i¼Á—žèè1{~åCêбh{�{Nz�Lj?ÖbHRò«Á’!éÿœ'`ýp Ó-t¼ï­>jVzPBÚwf­ArwÃÇÆ€jTjOåtALÑåÆÐáœiÅ(‰Á5­’I:Ö¯¯aT=¼Ú0å†lý ]‚kúu«@“Ü Hä(vL E4há¯BæS<‘«JìÙÙ(ó”àXÚ«í<ãF´Ò`^y§ð—1ÍÒ§XóB:�¨þU�8Z�‰ø­@kÒáÊþüä’,`VŽŸÄòµ�/°ôrÆJGDßî])� Âa”xTbW�/ŸZ»–¦:ÆøµÄ0ë°„-í+NO´Šß&\dÎi<1›�4!vë'÷KÀІÏöXø !¸a‚Îå¶”âH�êê™ ¶3²ÚZÁŸê¤à•NíŸLAÀJ ²elÒ™,ü2†Ìÿ:þ,Ã7{óE�¯ÁòŒr“1iÊîJˆ<êï_m½·iÿý€S`…tô ®ë{¯9© ¨TH8ß}µº¯•6ºÒ2s™²I*'e^œ×æ,°! ?l++¯u|¬§çý©ÿòð™’Ç+9«Ñ“˜iûòº¥éd–�H*Å)Íê�ÆåÉ¢]¦Õñ¦¨÷9¿FÐO‘—þŸ\GXè�,OñÅ8JXf· +Û€¾N�@ËHçðﻑÁ'ç&C¦ �#b{™•(SçŒÞI=Êþ²§¦½Ê“t€Žªfá~ß�ñøm…ŒiBh*–"½�çéEb •":ÈeÍâv\yD5ÉAEâҼ顛Æ;ê*ÃjØK\ w¾§G¥íl Áô˜ìÅÒ +ò袾h0¡Û/@— +Õr�#ƒ¢ÔÃ>Á3A”k¤ÈPŽªÀ§k +ÐhXœ,ÛBÌ®aìSÐ �?qDÐë|®}РÂ#æºû‰Ÿc§ñ¥·Ö)²ì‰Á@z…クìh¥X.®ˆ~¢èÏútoË_®.0øðà?wÎ$'Fô�4fÅì8š¤9“¾Z„•»Kдñ™çÛ̈ÚZj¡þe˜ß°–Ÿ_DÅ 1Ù é ìþ!`²ë�:¥e‡ë‡õêQ}TBiÖ-;åšm½n‰€p (k“Ên^³ÏYø)qêkŽs�~ê]£6�ÚÈënÄyhIxH@réT#Œ3c&¾xÿùœw€äÿà•L“ºòK=ˆ5³Ol;š¨X?Z¹yèÊqoO&Чt`ù° „Kl†äúmùÚ"déÇ!±v¸NhœžOLÒʪR²Í¢™dÇ×,æ;ü¥é±‹nåA€Ò,Fø94vêÎhXmD›8©‚ñ.%¼'9a¨¸/Ñ`dÃ�–áñ +ÑØFM È»úŽ2¨pî¿áø]&§—îá µ6— ŠÛØón寡þÛ½NÃØ9í ݾÕ@µY+WÚÛ1¡Îò.PT½ƒ›«ÝZÎ`I¼jš‚`¦±:Kt”òAüJ?4\y"ë3¤°’8ÿ•5&œ›Èî­¯ÁB¾‚Oéb{Gγ¿Ž/\iðu]¦&Jc+<]W»7ê‡Yj¦OmJIÆŸkAäã®õÏ�„?06F‘ ��“L¥Ì‡' RŽÂ$±®DCj=î‰™Ž‚r)h“ P+gk!øÁΚ¡ Ó‰+pQÃÿ(N¨CÖxªTM‘ïxmöµ%¸+ʾâiÝT…�¥·ã‰26%îæ×-×ï¸êäHÑDa±ÎfkÚ–ÃÈÄ7­tЯ6f(ÃaW±h³•Uñh`Úf&º÷JË”ûãbÐ"¯ã¯q….í¬'q°Z‚ao!6Ð7“£ÁU$æ·Üà„f“èa©@Óºtø…¸§›¤šÌ7*‡X52õ‚¶—Q"äîlW£.ÙE$šrQjçtˆ¢] à¦yÈÞz–¸P~²:¡áŒZ9?†4>‘ét"ŸtÂØŒ)9ž¡Ú£ Hü8æä#°«!“¡ +ELnÕ³ÒíDÄáò[�DàS¾½÷á¶ûÜB�œžð�ÌxM°¢œ9zç “*0ÅιžÐˆœÄÀŽS.DWm�ã˜^½Œ6=A(HBðªŒz¨Sª(‹©Ù¨ˆütQå`d}Â#yØ<øœ¢ Ÿ£>WîAqÐs<ÊÁÚÉiDâöÍœ!Ã^­ëðŠ,šÉ;æ<çN§¼"ž§\×ÖŒ6ÐüÀ"åÍBì Žyÿµ¸WM–õ‡Ëü?lÐ1§;ZÝþW@Š6¦QoÉ›4âï2³±¿±·w‡Jx1óÞÕÀ¢ ™•OçÉ,¿wÆ¥šLMØSZ3c(γ±ÿ€†GÈu:¤lw˜:§>ÇU«j‘FdŽR6þÈrfËÎèëa‡'PñF¢"„us<1hÑûãN’ôk9>³ùÛæ~ŒË_¸mvÀèê-P~›éÁ(�¯Î„�d™÷ÅD5 ´GËc‘ÝÀRÎ$� +Òδéx2±4²µÆ´tù‰”ºwMpTcò¬Àôtkp?5tîFJЉx.XøÅ�^)ÐÇJ™øŒí(f£_ÆDH¥-¾”/¢8KxW¨sÁ+n¼s©{Ôû”7áýë’Ã],Õy9|K‚äN„¤²Epô1u8¸ät$«Ã.<äÞ¡i¨�½§BÆÃ4‰½=N½ô2‘€ÚˆŠ�",û'ž6FÒºªñcD rjqÂSÜ'<�ØÝMÖ(F‰(z OŽC’/èÒj£óh-Äõ%„«Ü‰¡’ë„<Žð�Ü��Ž€trÙŒêÁåya0[Ã-˜d UJd#Åx‰®¬™¬Dx¶®_òN�j…* rÃQJˆJ3mêŽÌN¬{„s9×xëæÇ¬9B’½×Ç•«›ª:(Ø™”ÿVÿÞrRñÀÊŸØ—�€±+<TRLוò–=à±riq£cè(WлØ!Ûô+ŢŨ„ÆÜÖAÖeÁc&×û,Ο€•“›gù'Ñÿ�7¼S4Ý)/ng"YR’g4_MOòÄ ü³L�äq‹Tèá™Ò-�Úd åš9WË�8þ])ˆÄ¡�?ÍàÏX™Ó˜<„&ÃDÕ§Œ“,æÞÖ¬b9}� ûá5ä¡ú€öå9tÖ8/,øÒñ×Uˆ': Zè7ã¹S�ó†{îHd NDk�|nÇ0‚êùÊWFG_§¸æMÆãilÕ¯Á¢àéYó×öWg K ¹ÔF \§ehÇ|çdô$ö«Ä2Œ+ +2ü^yèã)g?öüÏiöºVIó®÷(³œ‘†Z2•®`ÏÄìÿxãfâ‚åùu^¹Pßñ7ßläK1÷ +4e2ÔCÍ ‡ÿ¦qìD +>6�à •…¦Ë¾ý›69­\K–å]Âi‹œ´S·…àÇŒ”õ*ë»Aé±ù§ôÖ�Ý É#h/½’½g_È?kÀK¥�[»zB³ÃÇòÓ:…•ɩܙ-ª››¾ªT¨€{va«¡E¦dú6�õ¬°&òHÖ„ç¿ )ê‚/¶vDºì¡èTX +)Åç\áÅqQÎùëÓžsA·Õʽ *�¡±á‘LB•ªö˜5Ÿµ¸^4L™2EéÝQD‡­= ¿‚2ªÅY«ƒÏ"Z" ‘y0tQ†HbÐ…ÍøX\(ÑivŒÌçá>[¦‹ÌB\*U�ï�Ltk�öþêöµ“ÎÖHn¡À– ×K÷æAÿ!V-ød¡ùMþæ)¸h<#µ�üpjò +$^µ6¦�0�c �/Bj_MÚø Ö\.°Ù?]™½P/½—¾‚U=0ñ¾¢å½'j ¨W½æ�îšaG«)•»ˆC!¢H Éõq´2 ‰è Öì +qX> åP_§ )Ò÷@…E*á+áK\  ñâ^ìá ìi�£üilh¾°úí Ô ö8Â3%ÞoM°??8ºt ° ÒxÓb¬¶0ý! i̦" kô€Õæ:p˜(&PÀ€?a›å6A¤; ‡™+ ·x €ßµ«c§£$ã‡æ¥ ±,OÌO/uC` QE3�EÄuVxº¯pHà'Îû~ µÚVÊk+š€ÐPb$êA/y�EêLa²Y¶‰ï@JÊ‘¶JÏeÍüºµ\Ö(²]ùañ†�'Zî;bí‘•>—ÅåPŠ£ï¼æ�Ÿ H•B[ñ…çygòAG7B$–‰P§1±Ôô°$Loð,D·)ˆ|ØDgÚlÒ8‡ë/ŸåšÎ2À¨åvãÇz f +aLÝbӹȽ lknE³ÑÀvš™?YÖ@O6 §ºkç$kÿ‚ÄÕ˜ÄØ\ñ®9ÑêZùÌ9j‰¤ˆù@,ätgDª©—i5\ƒ‡w˜ë†™ç)D²ÈRÀ#D†å;:çcQ†~xŸGOa8÷a +ϰ„ˆ\d ¹3è‰$Q_u‹¡Çž%Ï/Íb2eidnµòA›tªWx�¿ŽIu1?&WH/aÑÑZ.»¨ÿ�…•�Ë^¶3 q!¿Ô¯N²u¦6Jl®z¦j‰Lüý ¼XìrÐ�mp±,µØ6UÈAÅJ´Ñà« åtN/¬‰˜ŠU±êâ‰ÆB—AA‡«ÖO{q +Ó_§Æzâæ–«0ÄÊ gO’œº[i‹öI + +tpE¤1Ã+†æ\üÆ´Ê; Vðj‰m(a—ÑÙѧ†=â»q8ÛøÂÜŽí3³ xXÑ u¨˜øk8¶Äï“ûÙ¡((x,‰è4Š<ý12%0¹î!´éN9æE.r?®ŸLâRÆôyx3M^¹•?Ì& Ù˜™ÛÑšÏÏìRÒ�—ù�¸|×Û¤�j9øH—L‰ ±T óŸ[~�_Hbe‹°2ĹkšáDXVMåÕ3Ñ,M)ô4q+¥Ú…;Óá‹—´Þ¯¿£ä”0(¤Þ½C‡ì\ì¥e¢uQæº w ¿@Î;MÿÒŠ|S|“,±Ûa�àÇB„„ׄà,­€Í“Ci…Pxj6òPò”s»·Í ìS¯,Ì3:NPÔ„µè?Û‹VúO‚¬æú<ÛsN�ô¥w�Döàƒ·6öCð3ÏÁ´c`Y‚(SdÏf-j.PC]œKáólŽ’]>X|¯Yj¨^‘îŒÙ¤bì<‚X2€þ\Jë  M'ä +FiÕÚäØÄÿQȳ¿Ãçjÿ®™ásûgŒz»î<™ÛG@7~s}}=Â$}çª×ë¹#­�©E…\i†rg-*úÜ\¼{ôÜ‘Ø,X-]”Ћ;ŸÅ6‰€}¤Pl +ZqÕ Èhḙ±Ã$®³Æ$=ØBà”¬Óm¯¼ñ +&ø/îŽiZ«³®Œl€Ä·Ý¡jø‚ëïBY¬oëQ› Ó6¤§Ú²�„×jª3“mO,ÿÅgK:9Àor[êõK׊ˆ]ÙøÇO £ÿLP ÐxF„“„Ë!o ÐE�Nm !¼S=r\ãKeЃÙ~Ã<.BB‰òÒ1 `õùÈ(Å—I H˜W™ öuä“4Ÿt¥ (¡ÁõpKyhÿ´¼·g¢�~PN�D[”WÌëò.8éFÆb“å$4‰wSðÈ +IzkWZTáUB@ž˜DkÊ´z'ÎIÈŸ?ž}ñ60MÂ�׊qÝgjM!‘QÊŪ»m¢ÑpðѬ̀/Ú¢Vbø%µée®Ñ,ÄñÈð‘ÿ0G1x5Q ?‚«Îêßò±r0‡ÿ‡Xæõl}écXA’š ‰5ö3e…MÕ¿/ %á/Ò|ªHŒ_yEÒ£™âEæ2ñöæ:óõ]_SÚ~“—¹s½ƒ ÷Ö½�.ƒ9ßöª[z£¤²3\Äîˆr§�{š:´d×Ä8p{BÒ@!¡Üœ± e™±(Z.þ|ñ`R΄CSÌß8pf•™qؼÓ?>Žhn'«Ò82Í3°ë„¨U$*¤@]Ð)µ”ùåFÁ + y)÷ÄòrŽ6 8¤qW¶œ{ó5WI$zª Ë©½v÷¡ |ŽHR‡rw•2ÛAÆFå"±·�äÅ£+¯@ñ³R€×&Ô¾°âBš®8•¸öÄiÀwd¤üÛ(4J“"Ô2ˆfã›f�Ž#˜dB +Ho†<íÐ[÷ÔtsÝÊ}ÉÏxi¹¼B pÝ[ ØCÊ’ÎîT"¦Hœó Súï Ÿ—Å4 …K6�ú¬¸2àκ«ÓÀ2ãE"阆`H *a;=\à +‹„ ÆéòfÝ5“œ¡nCÔÆï²º�GÒOl{ʳP\¾B†¼ï_R£DEˆ —{Y„]VµN|¼’•$ï«Î]Oˆjd›â'«ýXœ� E@—Ée¨¿ùÊÇYW2YÓÂHq'2 _šk�J¦…ïÿëê\É�i5#È_Sk† ?N‰¼•œ +> +{ˆÞ2TÞ$+!\ÌCÖ¸aÈÊ—Ó:² ,ŒF•ûG,ê ®¸#¾ÆaEZ£_õgÓK>|﯉u@A¯’Ÿ«šŸá_ —¾êCd�>Á5¾3þPf'½™YoçÌߨçžàÈÔ YyŠ‘Y"æÈñ¼ùÙ3±‚«râ92±ºœ!GW²1�rdè„Cõ^Ê@ú†‰H…~�Ñ'¥"!”ǘ²TŠÏò;eñQÖ ÈsWpÐâí:@þ%º”±;¶xŒÒ6q±6Y¦8”�ÔEG:Wy²Çzo“w3Ã�ü§§¾)V|4.>`qZ7Š,Kg1&˜Ð»uä–Ë`d¢©3øSb•Äñ&#ã�¶Ðð| +±¤lÏbñ›Ô8(÷Êp4ÁBw(w4Bj¤x8^}&êµ—7•ÒÔ &¨cʼn +"Åò‹ù#I»ÈË�ÕcìÙ¾ñµ.Äúò üpÕí)ú±�TWŽ´Útp%d1ßœÖǧie!)Îo@ÀƶáþÀD“8�Ë‘·Û ÓH):}›jªIœY°SÉ bÓçÿo(¦®gr¨’ùµý‘Y‚zÝ+ô|dpÏÇÞó�wfά°v(Zj#GåÀ;è 1âÀ¿ ª…[B4VO£3 ­þüè�~ÖéZŠFT† ™À" ¡~…e€f$e87#e-rmásG·É‚“qrwC¨N¢®Ã€"XG­6 +Ïi³k±¾¨T€Û™IXï)^fRKGrõµS‚ƒûäŠìã æ*•Ø•W}ô@4�¤ñõ‹—ø®Qz£<æ¹$œÉf‘£z<øš­ýMjFè†\î¼DªRaõKÅlÖ\%n~0̆†4§Û%'ôRqÂ\s;LÅœ¨Äl¾�g ç`WQSÀØØ8uv”w.! Ëà`Yùõ6-Ñ÷°µd^þ¿z{j¬x $™½@²v:œöT‡jh`�8o­âNµEˆDZWS—hm#’ñ +Ë3Fö3‘ ÇbZ“ +H˜‰<ñ_,—µ.¬½c…m$›d.z6ïèÁˆ ‚VŸXKK^�+hn4£çSΚÔæøIDA†¡uªdvW4­€�ÿ®$^â#ëb@Û÷!Qœº ³ïq»Ç…%ûŬB VÉ1 +¢¦N8®5FŠ.£Ú|òçKú'‚ª +ö˜Ç‘tRIÔï ê›vü¦æ8­ø¹ç¤Ôþá´-kõeqûwý¯$¡qŠò(­@¥$\,µº`yN€zÖ5K:ÝÑï[²r6^!á¤1ÃÄÑU2œéºî¢!­}¼d`î(=�ëÈO¢y? cdΙ3'Š*ÒïŽ�§–Ã&¡=„Ó#Øp ð*T +S\`¾òDþ؆_"ŽàŒÓ: ñÊÏk+]˜¦@®C4 ÓÌì[f'´FŒ�‚(•ŽŠÐÙiô²Þà¾OëÌ'¹EþòEÄÝo;øÐnYC^KŽ"2Dc‡$º5JŒ2±±žZ! Š|ÇŸÛHü°(•R1Œæ‡;�mæ‹’>£»AúÆj‡ÅµQ×â t£¥>ƒÖ= ÷õÛÑC!“§æ1!¹-“²FÐ 3£ñ ܬçÈÜliËrÛªöÄÈ¢÷b ž-|®ãÝͲ̺YäAfà0éœ}s±j#wcmQO÷Éub.–�Ž× ¾ŽÄFã‰,,m|ÅĶ çz�{OäŽÉ2¯Æ\d¢í‡g@»¿Ùƒ ü …œ•~rÆÂÙ².Zþñ£_S1ðÒó'iµ=?á'À*›•r^RöqК:IXR±Æ$u¤¸~•Ä’?ð·%&rŠcò¸Ô24MˆíˆsL_–­ë¸Ôæï11Ï® +z³½^‘“,lÓ�®Š¡5Ì À•° …«›ËÁXbëÄtƒXoêæ˜Ð²�a2L�BÀÛó?µ�…Ef¡{’žmWò1v˜â¶€�3d"„a`XIF¸äJ slq_¡"à(-<%x_f‰ÃdpRa~ +j�H„Õ’¦猜ˆò¡vTËß1dámqpPè)D¶é¾ÁD¨cü³¥ÙòóaD0y$¥€�é|Ò³WV-¬Ó„NÄ$˰7d9-Ï[%¹„nèÎhðÄC)6»R %a4 D„BÉA `“lŸ ?€ðªÀ 6wù>m”2oŸM­¢–Š­@°ÿ¼ç9J¼VcR ][öÕ±üb, iL¥ö!mp[y#�ï¹´Ê>ëátÑÝ„-aµ©Éœ=ŠJuTê½R®œœ(Å „9Ïy:I}H65̲1;É–&RxçM¶&�ØfuÉ^,€óRCµÏàPkÔ8­S^“92a¦¬ö³ÐÃêCÅX�Ì9:Ä +j÷AÝ3�áhP pº­6¥3:�Ö†þñ[Éô.[õ¶im9z<ù•Œ¶x�ž$õ?ÊvIIT2ŒE‘.L° «`ù&ÝDYáñ/_“ݹ`iÓ·]}ݽÙU°Å–;ÆŒ¿Û½Ä¹~rsc]»‚Q ÏD9«û#D‰¡fŸïbY‘Þù®yïŸ åËöh„ßC )‰Rx¹K�&Co’`Ÿ-M*‚_ùß6d%LÎ*ªÔïbi @YÑÌ +*‘Aü®À§Üª‘ƒ+}lš´qp@,@4y�ùÎÕW1“Ík€^©ñËÌ·ˆ�¿%.«â~C/fC_œ�й[ +}س“šé¶Ê°‘‘/H¡É5Øæ+$Òª¼S€²òÚíl±ä Ò‘@x»µ£Êm˜…ÈÏý|šØq€õ“€j/¹[ªX—_Dw¥‰†Y¾s¤-è�(r˜‚bq­W5IDB-�½Œ»^€ õgk•çò~8ûWGÅ‹5Bãõ/�ﱦiU¦ûJIøîÕHȬՅóå¦Áuõ²Aæè°�Ìó°Èº#–ÃCШ5È”=€CwÓƒLfÝ)Øa‡¤kƒE0Hß-Õ:lÅ쳚k3º9ámñLO†²É, qL%˜€œ=2ã"½H±Î?üãsfÄ5¥–,.×Ò“-Ë¿ºç“Cqür±,cN&ç;¤ºeyâÉ-!½É™°t>ùªžQÔ‚¢ÂüZ®Æ<Ñ‘­îŸ/N½¦s£#<½[Ÿçì ˜jUDecŠ”d±Ç¬¡XÖU�p¯�шK…yÿò5b*d¸ˆNFgmfÑÓ8htb²ÔÜÒbÿ”ðì‰Ù¡ºÕ�žðR̬3¤It sáH7O!À £¯ ¨UÖ/mnÀLd€0ÎHvix$Û�ŸÝ&…®Æÿ ©Œ�Ÿþt«ýP#x³§µ¨E£Ëî5ʪ7�’ƒôoðÓ\ÕË4§ÅƦâsè$iþáJ>Ô´_à«QœÆz›¶Âü¥‰e)£I6Mhð¡ì¿¯2 ÇiÒ¬f®ÍÒN‘Èÿ‰ŒQVÓ�Þ4âQsÜáT{^`í =¨cb̹ (¯i¹ ‹+‰sØ„œD*¹˜�¶f¸âÒ%ÌP ˜ÌQiFéò”$ˆá:)x7˜Ý娂ö„Êl+¡{Ò:;ñÐfjÙl œNç Ø~”I{3 #!ƒ`ö7…Ù×Ñ ù1wŠïof6ÈæL³ÙH̸W Ï”¼Á�i³ŽC¶¶ó‰ÄL4mc›_é sµ,‘s  Ê YóÌ¹Š¾éî 8jL*ñ^¶}k¯ƒqúH§Ò…¹ƒÂª¿@OWÉ$°BÉØÀ7þEƒ¯àÙ—¢ÈÏ)+ÁXªl‘DóŸÕù,•ÁG¡l‚×w‰žâ€yˆ>§2 ++=µ°ƒY…Q$¾ö¸»Ä,r‰Û8Ôñ^.@O@ÖC~d ™Yì€�LsÃb p›m}‹5�}íN0Ög`ɰkpîž„6vd/[±¥3�°kõC1ƒQòGGª˜pïZ“1¸p1”+]±W#ªj-Îk[lc$Ø÷†ó”&W<¡ +Yv Æ–€}D¥ógâ#ÑGƒUÓž”r¼FmH¦åHO†¯‚ð´=&ë’ )ÒêÅè1@IÔž�?oøf¤—…«+J +¶¶­ò†aÌ”L¦³a*‰Ôû‰’wß®ÄV8ö¡Tœ¦3#VICCËI¥$p¢®`Í»ãÇÜ7ö,È+t¿qµ `’!a|Ç+ÇÂ:QX“ ’�Û€K1…¤ÿøo™}Þo‘1lR� <¼'Qé�ž~h,#âðC%ŸÂËA.˜ ÄŸþñˆB +¾:÷ÜÕ ÿa·Âe�Yi>}X•C4YÓÈH�‘HÃHXzú+dÖÙI|j` bÂÁ?Ç ÍÍ +–n‰ †µª¢§Yíøæ#Œ¤ò†ävG“§&°-bÍ÷Xq“¯Á½µfÔtƒâñ² y º ©……<í ö< Ì%`ôÝ·2I²\çz®Ä¥¤U|…ÁÑÜç’”�&}Fg¶û(]¶á±â¼õÕ‚SX¬ ÌÛ×y`½jL†š¾±GÛ 'Õa4~†îƒ—¿,„½šÃ–É0²�Bhå`sóÒ•(ñÎÑ=8~žQÖ<^&�Þ +œñ×ï_§O4$K îÌJ‰»1ñ™(‰òM­üF-@¨$sjª¶¬‹ËØ”–¢ÊiEþl€Iêÿ�"ÇCtB9‹ÖsÞ�A¨ì·¼EŒT]Ž%{÷Ó +&£ly4@èKç§‚!),=zjȽ–t¦ì}NÄÝÕ 0ªá}Ô^2$<0Ä‹nªM“† ¤!‹E²›Q$ÜXL å�·´†íMFŸë&Ó`-½dmáa¾Lž'ð¥Ñw¸*ŽMl6ŽÇY„°F&rÓ Öœø0‰2™8CÄ ]gjxh:@�˜ú›î2�{.Uà¡ ,AìÝ]X�ÿêÝ�é¤�Xf°è…ò= ËÌq˜h‚�#væ0'³äü=°w寞Ίa“fö$¡Ê¦¥/3&ÜÒà§UéPo+7Ì>ü)~Šc“1Ÿ^.p[ð?íÌB@ÂÀô•õ¢µV»T`#b™TÌ!y7S3±ÝÓ`˜yÆÁ4(Õc˜M·À­ì +ƒ +n7Œ©×Òœ; ÔnÇ4ú?Ñ,@üy~8tÊÚåûÿl 8ô&ž¦yö\☈9CÛ§å}«ÎiÊñ„ÝŒÌh“M]ÝØ~zC�Îþp±?Vdts=yªÛ}>”4WPTV7Õ×ûmhÝ|_&9�Š>—lª6Òs“säONÕÅ1`à† «ó>ø…ÈÅÂN_~ðÞY“²m3Æ£XŠê‰ïZÖ+ƒZ®¹ÃÔ�†~ûB'o‰©=Š«>Û´®âAž‘0Aï"fuCÓ}ÕÒæ‡™J6X“�´)<´[Ú�'^ƒg„C‰ô6ŠQ [éQüCÁ që×éîAÁdOõ3”‡�ó|”µœËt„íIïTd—zǪPֶר�T‰cqÝ‚ˆ©) ÒXç*– „ÜWÛlè3 +€7º"≋(¦ZWÌ©È8Š÷Óž8'9SLŸõ#M`¶ ¡4ø÷˜×û§ @·è¬¥U?â8;‚�üÌÐoTá¦kÜ….ˆµ]o¹Š’´ã¦¸ðÞáð`»‘0ãïºÉiX|0ÀÙ'� (&‚øN ©cÔEAÑÇd»A@Ró9´Äò÷Áe6Š8«îk+þO…F-wÉ�ÁÝåõ%’[ºÖ3€l!Ü.iÓ$鑚ß4R—ãkôê …Õ ÜBr@v +„ «íjå{ìÜ{£ ;˜ýUÇTA +pËW ºMUÉÂOÞ&ÎÅïô .òuolðçf2ÃH¯=õ�ÍDŽùIt†ÞPOÇ6ôíAÝš¹xEÖXÕ8¾]F3 ~Ä× VUy«B`þ�]TaÊÃd"'&¸”ÐP æ�¶$R¡yZMÊ4F@ ßj0Ð +mR•¼Ôâ›1 ¼ÁN§?~œy©)Lt©²\üjdäìyMZ7ë[n®\Ü~Û•ÇðYU\¶h®¯2tÿǵbP…@¤ù_ÅoúeDÚ!ƒ¤#ªd”X¢­«NQÌnŠžžÖCöÚ,.4} ·QàMT¯ö’]óÀ›‘o05­á_ÑWUÂñ7ñŸÐ:­¹É–ÑYÜ‘¹€äàëDÀ¢L¼!¼*I48°i©¶îA ç¬x‘ ^˜=ƒ…ÏüõMá3tÄ€­²á­ȃ¶Fgô-À Ûe‰,ÐÞ0 8è”H™+E{çÕˆÑ�0P‡R»s6�"+W�¤Ðxا/²<ê RÓ"*ä[ŒØ}.s +ô– çWê“d€áhµB h)\l`7®5}"¿uÙ0„†þcG“³�H�ðÀÛP?eìå&®sc• "Õí ‡ªsœîžWCÍJº‡â·€š‚Î^¦³°c§Æ§õÇEdAx±õ…_*õÙJê‡m¨ó¾#û)gl¿à'·m ŧí{ˆS‚TH+ì�H†e¶ª>inSHMBeÒSWg{î½å³ AÇŸ¿,û ’w€ u�âfºŠˆ˜nÕ†'ä *øÂ²Ñ!lŸ6ñ�C…ÈǬ–»3uBÇ”[U‘s—¶ciªÊ4XâAŽŽÎ •?#N’ÀÖY²þSì_m¯÷ž�*gZsk° g½ÀG¯m1~mÚ‚:?b)Û߀ +‹$•(¬ß¦j­mƪ©c +-v¼ î‘>$¦u˶Ȓõ•vÒ_«=ÃÎøiVyºv¿UŽ`Å ˆ¹�ׂ% ?L…¥6€î‰ð,� }»¿QÚi§Ívá3¨ö¡�Z€ro‘9|. +e$­=GaÒ0Å!F©µ`‡2^}¹{20FaË\"?GIè¾ääà¶å!ÙŠ¢¡Ã–a¹ÅûTõ±‹åŽFsãQÿV.:¬j|ª +yˆü‰w£Á茸‡ÄªÐKåX ÑáƒTô\iÐò°9Éw”Už^ÎnˆýçÅNÙpíÃ@þyüäOcü¸!LøÄ_¦ÏaÐæ{

FOWztme]UMD<3IR\enw~¥£ �š•�Šƒ|tlcYPF=&.7@JT_is}†Ž•¥ ™“‹ƒzqg\RG>4 $-6@JUalv�‹”�¤Á¾¼¸´¯©¢š’ˆ~ti^RG "+4>IUamy„�™¢ÉÅÁ¼·°¨ –Œ�u (21'�œ„…”¢¯¼ÇÑÙàöø÷öôñîêäÞÖͶ©›ŒCP_m|‹™§³¿ÉÒÚÞ×Ïź® ’ƒuf'1=IWes‚��ª¶ÀÊÒÙßôóñðíêçâÝ×ÏÆ¼±¤—‰zl^PC +,6BO\jw…“Ÿ«¶ÀÉÐ×ܼ²§š� '0;FS`mz‡” «µ¾ÆÍÓØ»±§›�‚tgZMA5+""*4>JVbo|ˆ”Ÿ©³»ÂÉθ¯¥›�ƒwj]-6ALWco{‡’œ¦®¶«¢˜Žƒwk_SG<2)&/8BMXcoz„�˜¡­¦ž•‹€vj_TI>4+# '09BMWblw€Š’š¡¥Ÿ—�†}sh^SI?5-$  !(08BKU_ir{ƒ‹’˜�ˆ€wne[QH>5-% !(/8@IR[clt{‚ˆŽ“—›ž £‚¨’ueF€2 ‚ˆ¡HˆAÀ@ P?€°8£†Aa€ˆ ¢°dMûmÐïnz—JïeÛÛŒ À޼çyiÈ‚æÁ˶Ç{iÁ@ãe[Øm„ëö%ùÒB+Šî_¼l �Z8X2bßý—ˆð²­h¥¶œ°Èš·L -¹î^¶-<˜ˆäof÷ð²í‚d9èeÛ€¦0ÿ¾×c FéeÛrþ|šŸ×F÷r/yožÙ$p°ÃµîOÍ·7É â¸Öî¦À`öÎûíM¬—m=S<®7·é`i<ýô^¶E ¥]ê�Dˆ¨2SÄĪZIoóÀ3çŸ×V;6ïÅV–W¬ ÇÈkløbÆ {/Û*WØxżL3xÿ…œª$ðݲÚü.V + lÁ9Tõ�w6oºËbù‘ 8O! Pך”’R.ž'+J—­ÌQ(›¤„bTýÕŠk‹p1Y�Í@Õ~bÆ@Ò£…>ƇM/ÛúÒØ9´*6wˆ,üî„ñÌ�bµXâ^¶Å³W±©1ð£WP±90»Gœ!+�ØÉ³ l|XE6O[Xå2,�P<\öÔÖ"�›íÀUX:ÄåDŸi�¶µæ�GÖ¬ê"+Äÿ¡-Áú÷…�§ÈšC>} ;à„:˜`“LdÍå™±«%°.�QxÙ¶…ìW?lÿ¯¤ò²mÁÌßoÅV²_ç/½lK=ž9 àe_£�Ôaš—mÝÆþÊF*ãkv5/Ûک̃ÝÌ^W›—mqàeh (ô +QåeÛTY³ ÕyÆ+äeÛ¬¢×I-�î�w5sàeÛ‹Fo ï5»Þμlk†&¬Ï©«@/Û2Ëè +èæeÛ�ò¶„o[Úï‘k/Ûzd©…á·¹n‚ѸZj©…1ݺ)®‰~µO€Ÿ·ÎÂ˶dÙ„UÒB =šì¾ +ë\M5~!^¶of ê�ÅšîÂÕæe[7"uc��JÝGBYÒÞ˶çãŠVjšZLõ›A§ò7ƒ7àç^"¹×ÔÂ)‰¥"~J /Û:„¾R¸ƒÅh®i’ø4o2Ðõ…•*}Õ‡È`[À€ˆŠªIí‘8ʬ­­FÙ°bg¬í-�éûtXΣÓß%‚É4^LSûŒq“¦ÏŒ]hœ°÷Qü?CÇÙ¸Ïb¨”>7ãŠYÒ¡ ÷y…y0Zåz"!;£‚±~Tk2ëÊè“¥›9çMÚ·†r†£lèYÃV­&HSºFÑ&g¹+ªFïe.»‹#a9K¶<í²YQÛßÙ1wÊôŠTu™RøZû‘»œ‹uÉïÌ�;/³Ë¹X'9£iYÛº,O�—Ý)}d畎Ã�Ôr\l*œÙ@@etÆT Î[ÒdZrb›ñ’Œî†*Ĺ´–ì�ÑYOŸS›éöZ´;íŠ]¹þ·B]mêJ¤âpí8ÀR\&q¨¹�ÍV½d3vçáËÜW,…û�êG|šcâ~ÀªÞ0ÝÂOá‹“È1°•šJdÅoîîÙ¥?%Ìžaµù0”ÿÅh|@tÕ,oVä@>vW\_)QÏá1��ß@õ†áŽ6”Œ>l(lv!k��#náˆËjÝV“•…^N@Ò q9¢ÞG�×쎜Av‡.¤ªÑÜ)îºÚéW-J³7( æÉyž7€j³óÝ‘¯lÖÃ4s¯_PóŒãÐj>V±Aþ 6x³@0Òm�´Ó+ *$Ô¼�PsÕªžzlg„ÅG5^'³xjèèÃm\Д*d™zHME-Ÿe;#wÕ:ù^$Y~£-Çoê¢ÏA„úà§@�àÅd ‚@å‹mØm�AÇüºì\^RúhçpEàï­QøM]A °¿”=³$Å€šõ[¶6†Ê^ Ýæ_²è:Ûr…ȉVv`²bpL,”÷:hP1@0wwTïÏ/RŽø"@Ù‡‡¤€Ë‚!Hž¨dƒ§wÎ{ç|+tšh. +tô3Á4€öÌQÈž»3^ªð1{£†Œ+uH€üÚÀ¾JH06`À¥tº¼s>ûýù~¾ŸoÞ~:ßJiÿNŸÖú•×ßRy™òl«-ÙÞIiÏ÷J�N['¥ß×J+öøÒ¾.V¦\mµï³7e;Û—³J¾•-ËÙ£ß/)¥îb�-íùRön·¤µïw?Ï·³ë¬ôi0R¿²YÞ¯¶J+û�gì½OË~-íq­öߥSÊ÷ÎwZÛ/Ë·µöµ—Ú;ŸYN¶ÖÒ¦´ç ƒöŸ½^Ii»tç*i[w·/�§€0bá€0$ #ö% +^øöÀC g  ;P‚ D• ÈÆV h Q=h°0á¬ÌÁ ä¯uÀÐ{ÀAÙÙ„·5v)²äFŒ&D¸Z>±Š8—ˆ‘&Q¾¬ifÊ ŒÔ.D(C`àmÆ&XÌÈ¡sF‹“ 6Æ�Í,�X • C xa“g£J�J¹ #ňŽ%žC…ð IªŒ‰ƒ‡(R&Q¼Ì`aâ#ˆ>â�º-hîZ4«Ö­\½zYj4(Ïš.uA¹/¾†@ùÒf�!H˜õ¹³“b$G‹¶º¡g&ææBÇ*bâà%’´‰Ô*S�®P3CÇ#AwÐl¡{ öEܺ-iðjt T/=lºÔ ©ñÂ'C¼ÕR×…M*W²jåñqʜ܊µYæ†O^$M¤T½še -D~îì¤Á–ƩԘf5'‰¥Þ¿•§H°ø™"ž-]»Ò¦¦Q©^ñv`�žB�0‰B¥ ÎG-ht2µ +Ö,[¸´ÈadŠÝ]ŸC‘4ÝâÅ«�„4^å‚O@�‘"ÎG“,gêüQ4‰S)U¯dQ "æ®O$L¡N±‚5«Ö-\ºt%ÊÐlprÁ:.jîZD‰©T­bñ2å©R#(dôPbe œ>y�.}:«ÀÁÛZü†<‘Ef6¡‡’*Œ®Xèð`hQ ÔY¦ +“Î}Û¶ÍY'Kv§UÍÛ¶”=¾�×édÛ=íõé—ÚöI­tYéÏÚÜ’R™Î¦´¶]z¯e*Rù”þíÚ})7å:™Öëîí4œ›Ñc¯n¥Øs{ùþuéSìõý9Zj�öœ|­Î5unÉnïCö«û•öÛþÏ÷óý|Uöõï`ü*�>Óû]+ý:å ƒÀ—¶7»mS*¿ÿé[çöé·¹¿ÎùÓ[Î0è_¿o_kJžsRÉp>49Cï²±0#\-­÷ Œl,lÊÛ{Hë�•EQAâÕ0 9X@H“92T°¹èKÆÊÛfBꬱ»B7ûÁ¥H‹ áÙac‡–¡×Þâ>ešÔÂqH%GyxuÒ|ðà“À€L,¯�5~0!T& ]986º¡ç ƒ-ñBG‘ üîj»¹»¹ÝjÓï9úèösNÝ&Ï)ÙNÉ>휛’Eçê”Ì”ýå¿Ïç²èÝ’EË,Yt¦´kuÉ^«¥·+õ+™z·÷ØsM)¥Tr¥”R*¹ZŸT²H+eK©dqŽtü*Yt«ó¿ÖѯÓzëÝøºßZ«d±RwÉ¢»;‹Ó%[ë@¿ݯ»œï’ÅwÉÖÿå»»û»W¯~]²«W]¾d±¥d÷Êwœs÷Ÿÿÿ,߯¿[Ý�ÝÝ›C·Z]²èî}|ÉÿÜ>¾»»[Éâ³øü,Úfž>ÅÛ­»C ßqŠ.ÿmOÊ}-µ”Jž-ÒçÙl¹¾|o‰t¨T˜é3†¨j£€€I$‹C‘C û€A`6(8@:HX4H£A +a B`Äc £XÂçcUEp\Ús,OËp…b!ä¼AæxÏ‹»†Æ4wFîãk:Š˜ÿCÑ ÐÌ–ëíïF¥ú¶HìFEqâÈd<ª¨)Ÿ§ÀkÆSz,WVAú 5bcÍ2 —ÌRCQ»Ò`;EgÈù¾¹j¼Ç�é™ϹŒESroæ V.ÍèéMé²§–û²˜Øp*Õ*^HœHÐe’Wu»Eñ š"™ÂŠù Gr»¹áîàÕ,lQ7?˜'<‹×{1—}ßT¼}={ÄÞKŒsÔÌÅ™#ß`Ô©oÃ31Qê<%:“Xø­.!uS)ûm˜ÄM=Ä1ùPVRqÏa;øŽ¾¨§Ù¼xË¿°UèkV®`lÐ垦ózþíEOºÒ°b½³Ò²¦cd?'¨€ߺ̀#XYCCç‰Ñ¡® ûÞ†UXAt£!ÙîʽŸpäùÚ dÖB±ÏÀ¡1½áà!"ØÂuŽž¹Mð�&‚çÃOØ>Ê>¬y›]ÑüZ~ƒ½C–þ%ÏïùÆã¹YPJÃrj«o”í £Q­ÖíáÎ`cC¼Û  ù8èêsR€»Q’Ö΢!M˼ú©¦%© +­‘í´€Ú�“‡�Àâx>`FØE›åžYÀê“ #«ÁR;©Ði&y’A†oBç�DEÑtÛ'”â&ç¢eå&íØh¡9½ÄXG)×G…­¡ÈËÍÝïpÐ"–";ÏJòT]8ûy‚ºð‹1(n€žg‘vwÝPw±„÷–#) š�ÊÓÄWŸÕð_"4(îþºì�"ç°JÁ²)µè1Æzrlü‹è¾ùk�GRjn¹�%_³ºYÎ:âv›‚}NàpmÁçX�3‘ý‰y†F4 ¥³.Õz,–øÇ™òñCµ™A~«ð̺À}n  (ÃŒtÙéB}ƒ#øõDr ˆ‡8´_¸J:Ï[úx–ˆÚ‰¤„Å ÓóØ4e{Â=þ´Fxî÷`Ý0ª­å-Ã�øGÄé­Lž÷‚âtd⤭Â6írädDír-tB11ßiü³è¶llt&é· 1¤;´xß4�ZÛ¨ë?k´ejê;�~q'1?³Íûã6½Ÿ|=.g˜F]ãÃxW”™j}†”~éY?¶‘ŠÒe·î4V›ãÇ÷‹€°%ŸD�¤ç•—ê%Q�G�å¥xõ ”Àø*„U‡CŽ>â¬ô‹Â½fvÂHµ™ +1«» “€ÍbðîVb� +÷ì± høãò:÷ }$½w”NçÌ3œ:­xo¬ÇnB%YüF‹[•ñ¿­``G°[}NãnjO’X‘ztb¦ÃÉÐër"TËcÔ[»ft¬{{›SÆ’eª:ÞZë@?î@€FíÚŸ0‰ó/�6F:Sp»â¿kê¤ÒzþÈÅæ°›öêmBñÞͫҋO¶�l\9Fé£AímP†Ì�pÞÃø—à]¦¶ <�ÖBŒƒ){¯}Ç'CŸ[~ðýp¬ó�5†XP¤õOxDM†~³ü,’0ºœ?u1¢Ö!úÇ ï0iÙ?#‰å…”A°)Ìâøêé5”¼�ÏF—B§Yš~A1´ +Œé!§èöÿ .œš¤á°«,deêB¾´SÅ›ÙÂ;£Ÿ÷qAT9C¡uLnt¾¼›ÿd{ûÈRà +&j„‰q~©:8­Eëæª|Ñ<Á²EYÅ[Èª×ÆL’ï Ĩ°™g5 øÈÖóF�þÕrÝ f‘�æq·»›Åsy�Y3yrŠ1ÒÑ^W¾{I_ú¿_„×åB5»l~[Æ&4³:‚¡«ÈMXÕ¨HîÐô Íy’¡fŠ™õÉhA¶ò`§.¾Ìw„úšÁ¼’¦j(]’ŒQFEˆ¿Hj ˆ8 êRµ¨d&¾@ÝzÃÉNîŠhb-S?©¨b6¢fd³6nìNV;A@¿!摂™€�>–ÖC+|G£A�Þecà³™²Òq×U‚\Ep\™›ûå J ‚R®™°²±Ý©sRÎK Ãxˆ6µ%ƈ¡]æ ð6£Xø +ˆ½0 ôh­º=–èPp}×&¹#Ë}"“bhÛD»ç"¼õùAì›�v«PsaC¦Ÿ””pöÉ¥óð$]úßj‘AG÷@ +ô(!JXÂ7“´õÇÀ¢#6`ªË »ÞîzNqø+æZ�_xï›Ù¯�tL�³´X–͆¦,®8²ah“äë ,àƒÎÌ z’„X=æ†àoÏøaôê€ýÀ½Pwð`‡u`SäÀyj+¯OW³"$¿s7”N Î +ÄKŽéqJ̵aXèÒ ùõ§|=ÉýÈÉ1å´æVeâÜÁ±`Äçî%‡-y“]~Km­uŸœÅc¢üä�RÌ+Ã¥w1…•™èV%ÏM;˜Ë/£PYó…©ö!h¬P~ú”·¸ç×�!@ÌE&ÇOM¬d}1ݵö˜ õåT4ÕŸÆeͧT:åŸAÔ’ ³”ÌAݬi±à¥T~ôs†jÂsÅ�)2ü�ܵž‡Zr®†yüCt¦=¶E �ð•z1�~ +¢ÊcüjÐ3vÔ]GmbïÔix0òh-`÷dZLn8h— +_è?×–’tÇðîÅXîÞº V«A$;T¼Ù[+ß�Þd!’(±]¯Õ�ÎÏäWù{,·�½áJåf$6íËØ[O_²›[„78H¯€ï°Žæàh[™@N³ ?.�û:Œß¢[¤;é<Í�„€•4!=¶€SîŒ?EWƒ%¬Ì�žæël·û>$kXé¥7BH?Â7aÚÖ!™£Tmôa£ð?õ>ê†稡¶}¹öW¬&0âàÈ5T¼Ç¬Í‘~‚rÐíøq¤Â7UfØCX«ù—™ù€GÄ)¼ Q:ž“ EZÍSjt¬ÝÞµSF(À®”—/ �¹4'°­á‚:-û!ÜCØ›WL¶êW8ºü‚?ëÆ�‘Íœ·WÌÜT~š]6W}r Ì›!£4ÏÖï»Å·>á†qB úU”“FDh"ë3ºÚË<Šý¢µJÿ­ŸwØ÷k¤®'h—…ÎÏ Œ"½á²4¯¸¼ØŽ¢/ F M¾üÇ«’v�åC¦�õ=Ä=L*]ðªQ/ö…šü}Í”³XOöÆ?�“âÎÄ�~€;Õ†rg àC‰ç„¼ÝíçYè65Ác¼¤ë€z;ð(qUgæ¤ù ´…Ó¸0Km2ñr ’ØVO¾ˆ Í*ZFF“*$þL! Ï ¶À}�èm__ï\»Íu +Î&MH»^-;ÌÇJA‚oIPG)„aI>¨ï�¦D¶YhkÒ�W0§£F¼S¡ç0 ç +…£!Y23ªñ?�3q%!J2 bµ"yc¤útJß»\;Zñj�;“c–yY¨)™‘ù�B7‡« $Nä lÀÕë¯~-û#ÞÈ3½yæëïdæc6Ï8­§_N“ÛAþ0èÇ0¸U@E¦®[zPÇ;Üû~I™‹X�‰IYËùŒ�ô&dÄxÏ4†¾væ‹ÿý(÷¯K}´#¨ +³Æ{¿�ÏÕ&Ž:hãüÁèxûZ/xG#¯Mç¤Ñn”u‘`ùu®` Ȧ¬ö(œ–�É’î e²ðÝ@¡”—`Yõö’/Kï$FJ©ÒÖº�ÁŠ¢“ºp†‚[O41,š…‡C€Ödö2L$K•îe =àýn8íu_œ9ˆ•¢L]i¯!¤K¯b ÖLü–}ñ'4…Mß$±b��<óN7ì,w3]Þ‘”Ä×÷xÆ|×—°ÐØ#*$ éÆÓàÙ6ì>–›¬£Š�Xé‹°ÐZ …îËÚƒÑ@÷ Ñþnx'ˆ +ZknÙ„‚ëÏ´Ì­ì‚úîÂÃ,E²—ÂÄÀÃg_7ÞQVŽóŒ 3G±ƹB¾(sß_¡×`âhMoR/ÜœK¾M¨Zv/;å—VI*z…ž;óCö�C(þÌ ÿõš]8yͧËòL¬ßIƒŠ¼¦ÕʺT`f€ÎYÏNCpyYg>Ð 2[tlñÏ©±¦+t†O^JÈEWhøvG=]·2ùJÐ軥Ae†’îÈÓ3‘ùË™t-Õà=žaC|IWñO~èéÔFÉ¡‰Ž=äל 6'ãUX*.ÁTèÚž,š­s˃”À„á Ê$i£)ïÄîŠÔµ´‡¨¶G˜åbB©GLk¥tÛ&ô”Ce”Øòs:Áâæ€cyðÚÈSõß$�“IR¬ÐÍom‹¹KVèôbëhcâã~H@¶A±µ[]¶ôX z¢JŽè…Æ~C|ÑØý¼ íº)±K%÷G5"—çaQuã1¡i°[hßûèFruH_‘”þ¨qÙ\èlt:¼ +ý~áa‰O?º +ýU9‰KJ¸Q�«ÐÔo»§/AJ�U7o*_Î¥³ñšëÿ©ÈE,%dò +æmÛFu®äÆÕ¥•åZmü9šv»!™P¾6ÂØ N(h6|]ì>nÚ¿ó31ý×k|ÖÙ5X¹ J§D`a »Ø­]Š�@?bº»F'B³Ãó1éô¥Óži"´C? ¶JVÒÀÙ’@kcœb…Lá/Ÿ`t†P†Á‹YL c >$e)V¦èßz%�"ÀŸV5Ñžß~»Ãwàzí'Î ï€geJŸ8NRïmè>M~g«#êYÂ%Ñéd#yæ©®üˆv�óõHùÈòJ ÐgòÖ§‚ ï°f£[Sú@[s„©?Οš¹î›NÇ̺7ëZû�hžæé9rVáí˜É¿‹UOθ¿ H18µ×¨WXæ‘b°¡e§¯ŠlÂ"V†”ö_Õ‹ì,eyˆ(iQê¸÷6/ûWŠ6²] +:L”0ÊFÅà9H52Ã:uÏãNuWÖBƒ-c”"vÎhÁ‘Å  +z¨^Q·ÌበI¦%cjäÄŒ¸1”Ca㡌m�„IÎ�”“KÊ rn¤ ,�µ·… ɹ®>Á€,T97¢o8 íGÎ�4Áö O*U¼%çFèÄÒÞËA[Û‚nç霡›ån¡ý•ã…ûde;97RDøÏ®86—�Œ¡plA ºO÷7�97¢á“�[ˆƒs°.éa6À…C� ºÏ0�«ß˜Þ²tƒóÆyê“ ‡S�Övj<í Ì9[�Ÿ Î-.iŸÕ¡¤§´—-¨VtŠN{­rÈl®�xÎ�H8ms`3á ´ Îæn[ª0Ñ÷[ªÛÖ—mYÈ…Ec (Ôl i ƒóÌÓX *¬(Yªròv›Ïcp^Plmdlá,š ÌÐÊaB>d1?}Ú×rdLrª½ì©§Z([` +Æ>"|:P!@‡C$¿Í³�D‘Ôº"ä.D¢�Û£‹:ÜëX|ÓË†Ž¤V¥j‰wZ22£öWO�¾^í¦;ýÕÙ`vAµï½ÑºÑWŒòw9ê’b½jå’†@…¯3�KÅF¬‡Ï&Ää<¸ÊuÀÕr_ªï¶»qZ;Y}ClúFÆvJ3‹+/ö(œ“ÎCPÎ�ÜkÔm‡3Üu+#Xs97¢z{Õ8éM¸PÑG 7¤ûÓ7"èH6­ÚäÜÈf‘^Áj¦o„¢AÆÏㄬÁ È] ä, ‚55s,±�‰–A‘µ vf‚‚Y ç]ÇÓ yÛ…jÃp~ôæ<÷Ál †óuoÌ�/œ¿Èañr?ô&è•Aæ*‚�K¦Ýö�syZ/y¥³ÈØ\ç‚3›hã‡é7fõ±õ€m5�œÇaïcàN ìÎg"\:ï_tä8‹6,ÝÄ’’göõGï"ÀªGSJDb@‹ˆ]?êÑÚ-/h¿°¯ztEXaH´KE'Ñn4üGjJýf•¢§GgLÐÇófé ÕÐ&à•Î y›¡ÐÇ.$u¬J§\yéi+ýØê�@ëÑ7´š^#,ÿ`qa�Ú¹±¤ëÒIoÙbw¦p¹‹&êåuxKœg§Â7Üô÷ߦy0›Ì"eÞ|IÄ+Ä–­#ò»5ÿIÕéï`ùqâÝn —s#Ó7B‘xû+ÕeË:ñ_öß\rR òÏE MÆÚ·e¿yA¡Í—ƒM߇¥Î[2€€å"08úPIHë(áÀØBj¼µÜ�ÿˆ7NCÚîd@ø¹yK()+ºjKl~Ö2qiAZ©çu•™ËÉkøýÊŽ3–W…?ë�ö¢NŸ¤�!½‚¤Í›…¹æg£�?äíµ×©]ÜxóçšãÜæu3 ��Ð ;Ö–Ëœõ3M0[~ŒMž/� ó#:qW]#Ag«õ7hItÆþgæöYü‡çTƒEÎa‹².6¯¯¢›ç/‚±Äæ? +¼˜Î1èqvÔ|I§byõóüCŠãÊ 'H•ê€ðœ×ŸÂݼÖ•§|þ¡nfÏ·éA¦oêZ �d;ý‡Ñç#ú§��5ŠÊçß'AÊ�yyü:ÿn™M}¬B_D*£ã¶O3Œ²Ÿæe÷Ó̸†BsW¶;È‚½¡|þþòïÛ†Ö“JDzË?õCíßÙ†>÷�&"먫¢ÉGÌÅû+«¦¿'Wg<†öÚzŽh»þstǦ¢wÈÒp�…ï°{ãÙžÒÒB Á=5‰ï‰ZZ¸nN¦dPliáL?E@Îni!¯�år�—V r¶hnÔ7öAxezÙ–ß¶^ÑbšòK—º�^¶u`Ë(D�š‹t€60‹°:�L"”ˆÔt�pÈXú$ äñZšr AÑUÏ +çØ9†“3ÇΘcÛ¶m;†ˆhôZ!M$""""""*‰¨m' ã‘Žs¿Uµu ¥:†chQÕ‘ªêXÇ:VQب€�ÁŽ fLãcùècè1}t�fÇÿ?þèÿÿÿÿÿÇŸN?þÿÉÿøÿ¿¸ý@ÜÑ(pÇ;Þ1G™V-DtÜ‘$I2À€â I’äP&�$I’d‘2ÁNÒ�äœ# •ˆBC42b:ÖWŒ²D­¶­LhÛÊU Q©T³öJ%iÝ’Q•ª/AjѨò°R{Ÿ•]M¦µ¶&c£ºmk¥¶Ê¶­”HtˆHBD×¶m&&·œÁ2JN’$VäDN„$I’$IÉ@$yB’‚C:‚8gààˆéÌfffnÚ¶m+íÌffÆ3bÆüêøR[R·¥RÏŸ}[—�¡­è8ýÿúÿÓ‰ Óét:C�~úïtúM§Óÿ¢›N§Óé¤Áªª¢ªª³®UUUVUõ:«ªÎ0UUg½ªìu†{ÿ×Nv;«™ýv;í´Ûív³ÿv³›� üþÅ÷}ÿ¿ïûãû¿ïÿ¿ïû¾ïß÷}ŸÁF@>ýgøqö_ü×ëiH'z{Ìyüíÿ3¾ÿÿý."�;ƒw–ˆ”ˆŒˆŒˆˆˆƒˆˆˆ”ˆXD„B‘ŠÈˆHà ðȺû‡fåc ¢ÃÑŽv4ô¨�Gm"Žhffj쿱ª£¨ß/Æ‘A 7ssÇ;ág%CFDdH™0”™¡”Șˆ‰‚ +‘ ä4àTÌtDTDƒÑ¶µ¶%""Õ$h”ˆªªXUÅ"AŽŒ ²X®™1Î y²h¢dŽ$IÒfHÒyqÈrfÆ�É13×Îøa8œ!̪© +”V®ªbˆ�Êf1›Í.W™¡FÙl6›m¶•™Íf³Í`6»¶mÛ¶X˜¶mÛ¶mÛ¶M³mÛ �mÛ¶m³mÛ¿íöß÷ï_Ìù;×g»m{öý³HBçAK�2& +ygÖÈ3¶™ìf Ê‚…Û�A…²` Â"ÀŒ6Ì‚]ˆag›mÛd{ì±mÚ´m_ø¶íÛ|�û¾¸Ïg_�Ï>×ÏWcD„"""@""""""&"""B¹ð¤Ìœ\xÎ92G’CÎ!xžðƒ•yE²/–‡ì/~sî%Ís¾ÏØI3Ù²g${œÇjÚ6üõ§¸ò�lG×8"qÇß?ÜØÈ +�À#ItƒnDzKBpdjœý2ÒWFÉPúÚ(:6Ïø›O÷G»ÚÊÂ=ùA*‹9ªG»â‚»uSîEü’�ëôA'r×L”J¾íØ4‰•õ]C–ŽõqÍ,[z»H2J;ºL턌.PÿXÖã*o‚š<9"aס»-\‡ï8@5ÊTõ¬B;Ú$¦n‹®¹áÿ÷Õý/ro¾[g%ß¹’ýHqÄB–ý"@š²M*YLJvÏ'¥ð¨yûÐn-ìô¯ÂÏðp­Š=Š»õýý²Ÿ`÷UÑ®Àô÷z†X!ÚÝŠÅŽIðÑû†ïÀ4’ûçø±®¥‚…Dh”Š”Œ² k�ƒá6¥Ô�J5çU~Æó u¸_Gߟ,©‘?튦�¾ 9�u%%áLÖûÐîM#gZß×Ñdzƒ-Ôí¾Ž>C¦@jÔ‹´‹Ž""ï‹�À_FÕ«BœØxöxÀ[¬ÞkDî‡Î¦ùU]›^NX7 Aw’\ùøê`ëYÅÒÂ$ SïnðÝšèÜ+ +lCÊ/ ÀÕ>WªÑ”3øȶ;f7%‘kc)3ð=V].­@pëh±_4“™MO+þYÒ𬣯Ç9ï‹ëƧ“Wh9öùI�²Žîtû'‡�XGc̘Á’ïÆ'ô ¸ …uA¢F•·¿ä…ƒ3)t³æ`•‘AÖ9™¯fBVGaRî·ø�¢È¯Û˜~y.˜ äÛÛŒF:—âèÅ·u¤ >úrûL·kXö"·_hà“ëräQWã(é»F—–HmYOt=Gm�ŒðŠÁxBÁþf!UÏXs\E=³ÞþŠD}“BÊ6®ÃiTätË=Ÿ`üéè@Ð{ôbé(Øå°Î„¶B7ϲ០ó÷/@�Ž.Ùî3ê¿.5–#÷×ðÅ? Ögd^S¼òâAÿ¢9ˆ¹MG‹ÄÛòƒèz8ÓÑ´–˜AfÆÇ·Gtè\Ž®:d:ú®i—7ý…I„p#uä§ð£ˆØ$ ðvàwgØ!Ùp˰[œÝ%%‰öàÅSë +È×E ùs(¬}HqJ”¯¦æÏÄÔKÈÖ.ÇÇõ†H††È›õ(Ëæë ÝLO%¹•·S¤oSÁwP<=’FÍßÌê�Àý*§ÆÕ2‰�Þ …DZõ–¡ÛYûüç'‚5”XëæþÉUÿjå¤Ó«¾Â¿ "¼YX‚½µ nX==lƈ`õsaÉêïq-­Þ‹×(YØê5ª©ûé/ø·zEŒ©°ÞÙ_üôi€ë�K¾ü- X?R/Ë’{ :ºÔúlÂzé0ù8᫯ö™Ø_½:HŽiv'_ýVÇÀr†‘œë_=½¿`&`½ƒÞílnð’YOùÜÂ2ŒY¯o‚qBEúRöŠf½IeˆPþgÖ×DþDk¿h¶W*Pž¬ Æjyó!>æ”ËÍ'©À‘'‡ûn%©ÒŒL„¶tÌ °Û0JÌh£Z7r*0êÃkÌÞ¥ÓÝÉ]‚ÌzB_´cF ¨ò6éª)2/‚-7‚6ߘ þM“5tŠ üj=5É–¹»éc,‹´úZá6¥ª§Öw ɰ?N­?‹<©€Dpä =i<µþÕZé$Y[j= `oýЇëA0×­¨äú I£0åPs=GÄž®Ÿü£ëzˆGÇ5¡®‡ÎE"×õ9£ âÿ¹ß®?ÚÅûñvý!¸�N±+d×ýõÎ#/ÄØX%È0=�:ÎÄÁ^©ŽÈùÔ/‰êÄïÅl°×û¯÷/Ø›L^û[Ü‹~?õÚ[×þMi9W²¯-ëÿAÂW1Ø_€B¤Iû‰’yŠàu½ž§Ày5ÎBzxÃäáì…Ðç’ˆ‰{+¥$§«È{$í‚cQ;x¼à‹À>–nlZƒ�}(¬`œëIy`ß«F ð9q +“þ†ØžÀ\bìÿwl4D t²ðªÜJ5¡Ò<½óûÎn‘v ÓÅÁ‡ýÖvôà§’!:á”Dv®5ž|üñªTjpi²ª‡.p2�) *9Ÿ �HÄM¨I�)ªy9ƒ\¡¿jèTæØ2ãÿJ˜­œ¨­Y³½D,·ßëÌOu|ÒÕg¡ á]°Ñ,;'M Ú;þÅ~ÅÍD-âùUXâc?‰0ýÏñÎv­Äw~‹ý:–�ÃĨ­Öw‰ ¢‚Ó·Y‘ˆQÔŽÛC‰0 Øñ•ð5›Ù½x`£²*ðFz(¾¨Eœ«:\k‘þâD¡ƒD8₤�HÄJ›Ü ûê.‘? +ã#¥?Ï! Cp0E²ûÜ�Cââ¶Ác€™D„DâjòÅ–MQNÌ�ÅØ pvk�¸‘JÄ+aK­ ÷ö?�Y‘åÓ,—ôÆwÌ—²-¥6C”ü¦ç×$”Ÿe9R¹Ð*JT—Ïî_›f¼D€’§8Œü7…#áéŒÏDÿÛ†áH}m¾DÈ— ~1z¿-à?îç>@¼D˜V¥D¿÷X¼!Ñœ.Åü-ÿÝÝ׉ïF¬Àñ–,>ø;‘“·8²%jѾ¹ÍêÑ�¥—ƒƒ´ È»{¤ßНÜwÃx9H€Ø×Æ$ÁäBž�[í>~ñ©Z1R +.qþÀeuHæ&˜^«WÇ3Y±‚åÈD8´œø%>jÿ0LÄÌ ¥ñ¸ Á!±—!¨}[2~�h/¯zÖÇôy"L´qj5“š–“oŠý¿Ù5˜{»Æh?¸"Wë_(ÏRX•Ë$²ã=BÖâù‘V!Qãi k!³�ÄÌÑüüÇ^A²TraÇß›ìÆ*>M”ã­AM½fÆO›­“Œ¹Ë2½?´Bô·6 ‡iKÇ‹¸­ ÷‘W.ƒ” ƒ2Ékó�:­çL •˜Ní5)E¼�;¼ª!ÓJ0ze°Ÿ&i©WÒúÓ÷U“˜›I øÒ$‹ƒ5…DgåŽk*¶pŸ&ùÄÞúšdb5“”)gþĹVÍùQD#�:gÛ‘±?dˆ'ùå’L"ÁrA7–íêj�ìS0H|$U0E¡€ê:T §}/÷…xˆL +aâ Òo¨0IuwáÆÑÊçªHŽØé¦Ýœë *‘ûa«‚w�Õeúdy + j<7О¬ˆ zlô�̸d'@MƒSZj~T¢övšÊnG$ ¯%ÿ�R¹£8Ù³õrï2ÁXèNx]|îÌÊÿ@¯ÆE�}�¹Êà‚ߪpÌnÝãGOäÈR¹S¤N˜;ôZÏÚ¸“dšê©¼�‚ë°Þ™¹%Ûy¹uÄ¥ 3-^¤v¼Jñ8!µ3I¦?¥G„´s Ðj‡ r¬aòo–¢Ñ½ r‘.×Ïv"àM·0´&’'9ã2ýlLÓÍó P¹ƒÞzQ¨«;�¿í¹¿y ;ôX ôD +z»]ãVÝ;Õ™ +§zqäêàè‚·m€²À�¤è)ðÞb�r™©¾ ìWl³÷ZãNF·8'S±ã¿‰;I)‰5Àk>,›¸sëJÀ�“uê¡pG wz‚’ˆ>­±EuvÒ‘?ˆÉN9¶•¼ ;ß| ÷b»�nÃ$;3ˆ„{%ضãòô¾ù"—c­Q›¬×�ìÍn¸ë`å�ÿó:Ë'‡Xƒ¹û:*»t$RÒ×Éd–4ÁNkƒº¼Nª“I)[ÈA—:›�NÉ¡-s%Aü�øˆ( ë{�ç Þà˜2uågÖ�¿Ã�Ñuò$‰Ãâæ\) uJJpO&›ÛâÛ"¨Ö¶1UsÕX ¨Sê­úMJϣŸ-å¹òï›á +‹É†ì²Jî¾k-¡ñƒ£Ëj’‚UÃÿ)®Ú‘¨Þè¹­ø¦I”€”áÔJŠgnŒxbÄØá9åZyçÃÍÎ/ ЇkÔë{sÑH랬ôDèâCë-�(°a²ò¹r5óòÉQpó7ÞNéâ–Ÿì ¸&CÜÁ¡¼d_nÆõ6DÍfC#!Ê‹›À58Ú*-"Ï4ýr|Q–ÞŠåÆkúû‚%°wŽjŠ<…Ò2„($j30NÜNR_Âhlˆ: ž›ÃQÕ˜M]!läŸ ñ[Ý]^. ©A7¤óªÄÞâ-/Ÿ7H>p´² E¶ßñã%ý^ÌÁ  Oøàˆ±ðûP5@Í´sã„‚²R�°u.7 ÜA8 Xà C…›õ˜­¸ÂãÍ®\(´¿¿îÙ�å6¼ô„f5Pá ]�W�‘v<�!€ÀìÁY«éG÷4ßumżEòñÊ�n¤'e�‘dJ—êeZ¤$øVº’ñ.—Hž/Ú¬3ø�SÁÕÁè…8ú•?xÇ™Dgò2)’ –Nüm/Ê ª$¡Ý¨b¦@Ö6/–4<ásL:D©}Œ¢Og_“[*~IoáÙ- º`ÉIôoænʤL‚Óa´¡®”ÉÛš –mÿ^™IÙK$lˉ€uA~ÙܶÔ>…Ë529°‘s#"×!°-·xÌKÛ¶¶É¸-î‚ö&G?\Ö ‹fË…,êkJ&&6¤ù\«Åú€2OpøkMÈ{ÙnA‘EöIW¦Š…‹ìJ{“ Üf FLïe¶Û�ê[Ì4¶g41£~+¬ƒf’ä[p™’ ù—¿¿'ò-±[åÉ€SäîF—,#ô×Òß1ã}¸©-A™Z1î&l )öWý&�™×÷!ã4e:�Ž““­9®MjÅ“Kñ7ÌÀðŽAKÇAÔ:36†w¸O,ÉD1]LÜß@•Êä# ŒÒȰÔê3%S¤0ŠÂSe´u £ÆìÈ—�¡¬#Y +õˆ‡-†ýÁ3¢1™$öÌ� O¹› BVe´F´øHæB8’ úRñAöÌ+)£-ÐY¬K�Á�¡5nÊH +]t•<)–Þn•st˜éKøº% d¹_žÿˆ|”!�Íœ°šŒÆ/…â2!VÄ q(d4ê;÷22¬+K¤L‰`׎�ð.`»*N3Ž�²|Ã\•aÞ|Þia1þ P­&Heä‰XxCaÓ]4íåÑ.æ+#Î'QŒ¢¾¸™¶D¤`HÞV&…_švAú/sEévÅ®”—’i 0hý–ÖCùéf,ùÕG/Î0²Â¢^¥Îä­º˜O3:v”™ÏV[1•´?W[êƒä&×j€Œœ˜ÚÊìYÎ1bµ2×\SмÊ@lOþ˜ŒQsЃV¦Á#æùðBòÀ}Úf zÖÒ .€‚E?ŒÈÁi¤Ûž®Á.h•¸>.T¡)¬t}ä¨âz€ž_/} ‹ÖÇíåáV:¢|Üó¢`ÿ�g,­>¢•�-cqõ!pµ©+J«ÞR(°«ž³ÍØ·�ÕGqž¨ìc!§¤î£‹NWY™¤È*%7pf³ð.8Aâ0à ~¸˜h‹wôï +@},Á (‡v®�'óñÍøQúh݈?¾™a<”?xSh�ðÇ�‹“ð4Hqòã¤ì3›ûš|h Â1ü(eУ�?‡crüPc +­¯Ó7Ãà눯äG0lщEC¹ß,¦ˆnªàÛs%çCr£%°Ñ›èQ ôÈE eg•~»"¢•Vì«.ÝnïA�b�l±í>*÷‘Ð Ú¯Z:7¿ %â�…8ãÇQßÝVœœ(9ö€X„ü¨†È�™bw…NÈâÓJ KääÇçâç�äÇ×�$oÇ•¢sØÜ0'?^B³ƒè‡1bU>�$õ¤ôÇâÞüàé¸óø•~˜�Ý#Ù~ä÷äB¼{~c˜?Ôóƒ*›½pCêùá-|º‚ÚÄß™’ñXÔz~�ü_ì4SŒ¢[ì«W$N?²0PñQD?xÅWpX#ú1ª ú…†ßé#ºÿ{( ð²éÏMï7@ ŒCP,4Pß*� Gx¤Ç6~ƒ^ErY °]Q"§œoÑŒ3=Oqô5çð". +àð4©½ 'r–cZn¼5±;é[þS%ÿà2Ý6‡¿È'_Ý€™Žfhãt­(Å s6Ùȶ·Kdb`ŽœM±MÁˆ!×é48ÐÕ�Q*Ø‚ëÒVpH\hºÙÏ +�$])”BGÑ„¶€zÆ=[l€z–�õ6Hü?I�SÅ +š¡^nÂE×*ÅØ%ÖëÓóMاSÓ3ƒB°\ðÃc‹�Dˆc£­¡_¸2è꣘oß—Æ£f¨á¥p ®ál6)™³w!–þd€ Á™æ}¦Ú-›ØI\¢µâ‡9˜!~¡ý…üË8zw!×G“+:É,z¬ÇzÑ"¶p“ÀŽ¡Š>s†lÀPê +Ö»F#\q ïïÈ?Pf4,©èÍ>MONâ.<ë#�ÇZK°H +6n·ÞËs1ueï*Å ëÓF n—¦çŒ9º-‚éÝT¹LÈwÆH¿4>ÖWH®)áqö¶{rIj(và_žÄþñº†Äë×@ñ¦Jl +ÁlöMïª~ÖöÂy¹ü挢ÐशLÉ”ÔmÇX‘„º‹ð馋©8!S!îü¾Åù7 +”ö¼ÖÝ»±¹¾@�¸aDÕq©ô�RQà6MÒ ËüD! !‰Ð,†ã^û¿ÝÅxôiòØ;t?§(´§¥ Cѵ�MíÒD McF3x9¢Ð¤vãâ?Hæ�Ë,ä8P’� +=Vº8kö+M‰4 I*LV£ƒ”ózóDÖö‹FqQ²êà3Æ{ãÄ­˜j”ÿœ|7LÒA:vŸp<ƒžD+3›×CYU·_‰ÔåêÀS¨¨Ú3õ²±9\•�lßåËÔQr›¥ÓÆþD€!„Ït]ÆBÿ>6Ã…#E'¸”ìcùwŠVQì/@&ÚY¬.žŒ ßü‚ü¨1£ÎÒú»€2)Wd³â™æ�‡¸J깤4�©ÛÝÛ-Ôý 륙N‹,ô£Ë:Iwv©@IÊOb,§ZAx¦ ÛŠ*CåŠ,\‰7’úáÝœ.Òé&~™M~hNs}þxj�=âoói¢¦ù˜-›Ñ2TìW;5}ÈÌÊẠ’¬ê¾>´†yÀ*y7〕s<àI]–Î#æÈM¯ÊHÃr{EB¡Ô(9à¼ÈRCo(�ûãÙèOsFø–ŸàiJúÔFÐ#p5/—žÎ’ÇÙeBW=ÒÃØ(œŠ�díÉIÝ?¾+®OÚ; y‘ÖÄ–ûˆé}yÅÖß.?$U�»�þ9î¹°ž&iÆðÁø-5€�õ¤Ç 2Q$Õb)�˜�ïð¨;5°l¡o¶J©©Ä¡%)à?Ô¹Wg�ç” ΃Ñkû‚º�³˜è/¯ +·ÒÀ{bDù�ÚŠÑÀ§â€ÝI2ð”C Þ¾÷c<‘ù ã·áÀlr–Çïýr} <"#Lx›J6<‘ï +~ÞCØ]Ïк×W*Ë °G\KºÀ�%(1MÕIüOTRð0Œl€€Na¿š,f?“ÛÁêɌͬ®dlªá=¥À°H§6¦”‚È|ÓèJÁͱIìò÷ ™jˆnâ +aë!$^Î�ÊPrk  wQ�æÿW”áTL©Ö~0Æš[) +œK1ì~�–›±·‘ ›ú@§nèQD’Aæ—ø¦\ï‹\R7’\ôL6Euǽ1Iƒ¯|©ãI£Óç̺Y^2!†¤�׸�˜€�t9¹é­ +‚¨nÝ]Þ„ð6÷Ìjmìä<|´y±z~¸O^óc_u¬$}úȺ.Š$òÇ� +Á�&Šnðää!*(½Ýð¿@D&¹P¼¬eÕDýøL¸í�&%õèϱƅ)ãˆDžG[tØÐ̣ʜb,tÍU‹ò_�& °Ó#kø—Ì{›z^Óq�oº[évá£Ec>j�Z¬¥C·_Ó»»Ô•Iü†‘ûhhQLx~}FðG( óõ1(Î< U`ý>«£È„^iã`�ªìüyüȸ„æG}~°�² Á¤­Yü$ˆ}}Ó©,–\ÑßùÔ|}›ÛD¨}4ÄE)Ppë#ðæ°€ñŸ�îËéÕâ‰|TröÑF=«õJ’Å Ö?‚r¢ (|}Ý›2‡ïþ‘I”Ã.Ë3.H«è(kRƒ+®([¦aÇ¡æ�ˆ¿”1ÖýýÙ�ç½)âGï&"²HD~ú Pf“alïéð#¿_Â#$ƒåNW>µ¦["ç™·�Æ××âú} J‡¹!ˆyi-Á‚Ë{l“|”ºþ?J EÙ¡8äxŠ’Fù}[¼ÕçÌÌT+°9â@p—2åtÊiµ4…½Tõ,ô§ð±2|ðÿ†Ô´ÊÎL ŠyÒ¦åD:ñê¦Ø]Š€«z7€®ˆÈ8ÛØH§Õ´âƒ„Ή^r|¾z{—RèÑ.¤¬@ÒÁ)�ò�¹Y 6�}úpÍ£…TÄMX7Ÿ#ë¹É!;vÿ¤¾õq†OàC°ž(mÖÇ¥Gú�Ôò:Þ/��8µ8„ƒÏŠª¨ŒÛ�ñ3N“ðé“ -�eÆ/ŽÔ—>”8oÅew]�ÉpC�£^J%±¦X#mñ:’®N² g1YÃÅÊ«©=\Mcçó�W#ZŽÃOÔÖ‡y’g<ÒüáBÓ›²¹�‰{b¯üMl夎}} qù©@R«0È_m°Át%m,n¹7X@ÃŒv,8yTåý£ZÑòÆÍ¨“,–%Žüi Ùª[ú{‡í¬ã!¯t†ÅŸ �ždâUœ +À™Éh¨p™<¢ñÜ@Ir¥C^pæú…A7Vâ ®8€ÊŒðË7›Pu¸l…ù�!XÍî_0°Ï3`¾ïÄñÝ‹ýd�Ù8 þãӆ͜£4×@b8äãoÈ8�‚Á~EË=.1à T¢ ê4‰:Ôyï@zWîÛ@DEHÌíëjtÞåhÇ(Nøî©´`9½,P¼\\ˆó¾T`õ>s£¹LŽwa76”•ÒÁ@¢<-þÇPþ·È=“wWOÒv§é¯a>±Öü±¯ë³ ã›é.ûSE®mÿ¡à1wÛúj±ŠBîmKy)›·Ñùm:œ}sJXj>’®{'Eá¸Pù2ã”õ;çàœçu†Žw�>ð2�—!€þÒ‡rÚÒ°¶ˆðHcîÐXQéû **zº²Á­‡.�b@ ‡ÖYV ºCÕX¯(&¼ZGvÛîPIö‚‚ˆ*°¢…;~<¸…ó*ø× Ì=©ó˜ÇÚ~TV¨D¯4÷eó‹ !O’œÔ�´§¦ÈØøZx¾¤5l‚oðѯP"A-�iª·YÃi-ñR†h€$z7ŠÜ(‰·x'6`©£táÓ$¾ð, /bZ$‹öñÌåĬiwÑ ¸9i„PlÆQá™Ú6sy¡õT´΋=¢9®”éC«—ùÄSUaÎçµh�"îHáöš»¯[ˆzS¡Éjx“âuâKž\Ÿ �ƒ!º¦¿>ýrA²-ÍG­¨Ç’Éþ†-°;¡„þX\ß_I ±œˆÇ_ƒ±oþ›þç ™¡ü—»0¥Z!—F˜|†öøš~“JÎ^EâËýjy8X�(Ä‘¦žB™ >#þä’‡TéQD€t RW­úÉŒãRªqäÿˆhèú¥¢)F¡š¸¢ÅŸAKâ— Þ±MŒüRÎË{”ÃV¥à'ÆÊŽÿ—'"¾Î[ Ì—ƒ±˜þ·lñ°†’ÛOÆ@(g2œ�«Â(:cÏÌ0‹žJmß”,:³í>µ?X`Û�Rîã9—¨Øþ¢¾ ¢—E9XB¨Æ¿UÉ*ú‹ß¸ö˜bóUðålp“oFƒxg„YLU›€ý¼ªx‹¸­~rÔ+ƒ‹-ÕOÜD ¿³Ñ¦È”»ÌM öGfoWðÏv m.bŸF >#s©<ÊÉ›×\‡·œ[°“:äOf°ÆuŽPh~ÜF&*]7ïN?]£˜AÈÀ>pãâ›ú±` Œµ$¸_OB°MÌFL¹-v¤8©ZïBß©µÞ‹¯i"€ºÇf†€xÜ‚ŒbsùÉZ®ÞZÞ‚ðÊ�•Ÿ|UG‰äAÚ»TǃÂ! ‡¬@¶ä'»Vʯ00G¥%};qiâ cúq6Vx1š@^Ü_ŒY TÈÑ›h×Ú +1öj?9\�ÛQø]‰§=½ad�šM¢ +!Ïc“#Vÿ’y¡£�×Îlt{Ò$àv -†µûn�hzLfþ Ê¹û‚fMâ|ý†ÈÓƒaB{ð€/tCc­Û¿QÐ’àŽz uj}íø'ŠÇ„ð 0þV³à²ÜV^HºA]ŠO[WÈJEOé0… „þÑ»OÓï DPVTÀÁ>øH/¿ºˆ[+�½”æ@øT1!,2y’ÒæƒžLP€#þ'ö+_½Îr:n€Í‰áQåaÚÚcñòÞùÄI¡ØöÉHxðî ½×š•^ò/kÓ³­’Eס0A5_^J\'R=•êU$]’qÀ¨ÈmåFª�3H¤ç�Ò×\rS©`ej†³ �ÔFèL�åÏýÏ)e@3­÷ÿ‚)eØ%fبS.¨÷�£˜jZù±Mê÷‹Ã‡Êfœ¯8ž•TOÃõï ®¥f2 ?°cjì¨åÑSÿû†Hˆ$L5èpb"%ëF˜´D�Æë +¼.9€™‚€ ©@fêIªÿЛ©�¡Â…×fÍHÏ›)èÔýègªÃ´:C\ÑÔ�½4~~ ž7Ï ÷Ьé™jxö §–„® ”KF«Lã¾OC<ÈŠHŒa1ùå†�¯5=”ºäØ�q=€€7‘ ‡©JNá4£`jÌ.÷Á +ÓD&J ®¬sQåJØÙÔÂ^…qv Ïóå4µáú@i,u(x£®_wÆSsC?ŸTˆ)œ¿�‡À–À +¨¼T“ņ/¥ý%žåªuO}k� xƒB3…½áš›SÝŸn›­ê»fq¯ ôeߎ‘sîAÔìo¶éñµ–�ò&y×”ÑTå°¡FMÍvìÀ ©©Óˆ¡t.M­_˜ÑT�ü†¡6MÅ_¶ˆudMÁ×o/°òºûXD©r&âg@‹Sój²PˆSqK( Þ�SÒû"Sþ¦â¹Aÿ¦Œø‘pbSÑTÚ­ð"Ïø6y4µ$�(eA·^ÏÛ4e籂Ù`Û;}Œ¢¨oÍËá:ì™r¦œjm™l—S¶âTQ¶œ/ÃUžpTÎßê�…D×rªÄIB³Áx:ä$"'J/ ®êßfÑM™$0§@2éZ—S#¼#� rŠ©(9é HQ¹ Ïfï& +æ�TÃùz–S»· ÎÆP}öÍÇoKÎ1{J%¬ÁÁÄ–Õ"¦þŸ +Ø#C¼H+€|Fº-]ò4—q½O4«Â~Ì"–'kU=ú-áH¡ØY`åVf|¦<H½g¾{�©‡ùì9ÒäXÁꃆ‚5‘–b¬*Ãw£é&ºû„åãUÄÞ]†¬MÜü0:¶>P6ú0Z`sÀ›êã7IÍ ¬?¼1eÒkcLTa~�¢Õ„xÔÓY¾fムUa•y—лj.„7ÄáÄô‰ª¦Ãè(òA©f +)‚»DtîSeds­^õs€Ûº £æO(Õb“Õ‹®¦*`7 £'h²ÈUýó‰"–B>h#`(•Å( +° ¾�˜ig>ì–£¨ÌÖûψ]¢`gÕ–Tgy¼[Oh†t¥’..,z’�Œ4©à À¢ £�ä0—O}ÒGæØìhoÈ|·XÓ”D4ż ž—*cÊ9†oçÑ…ÑiAŒ�o�±-.AþØEšÁ>Ø|3­G?—ÍÑŽÞÛÕÑ9¤¶á ²\=P˜�‚2ÞÈ:ƒñ~¢‘ÂpªÀÁà +Ôµý1™¦BHÔ ±|€ÂNÝX$¼fe�¬IVS ÉO`ÍÇT€M¡UÉᚥIE;Œp’ 1ã}¸d!ðN…ÑdÿÄu ŠD­ö)ßF=ñ9ˆØ+7YŠÈ®€];økC:�H;KŽ<7m¿@ 1ßE ß~S jæ„ÆñrKãC±/­™Ÿ�Ê>¨!¤óoçZÓ>%Çÿ Úcí¼— ‡o‚‚ûæÃ@æÈøJ†6þ®û–×…c^y£2}ÑELºž á úû¼ÜŒžÌ.ýÇr 1È¢§§Û¯ éC‘»$hÕ‚º¸´,ÖÔmQbÐÑùP>*‹\bž¹ñ¥¾À–!!^èæç „ƒ˜ÞA €Ýj”ÆÈø/¬~d®²Z‡Ùužµ^Ã"�”La%\CÍ0Ù>ßSè�>qp~—üe™I2îËWÄ|Ÿ…êЊ±¬Éa +ð ¡DZ[;²ß”þ�•ƒóIA»¥Hå9ÊÌ©EÓ1åBïˉ7QWì!ÌEZPÃE¸ '�~ZZxK)… Ö E<›TªÕzˆ=èà1Zç¡{âPá‰0à ÑÝ!Q'5+¾L—¶åT~0•DhõE—ÆÒ¨2©ÓȪæIå—|ÝJ–ëÒt��nxÇ%*Gýl4�í‹]W}”Xó BÅþî6Ö±X(äÄw¨Ç(º�ËfuzІW-Ük#*K¥®Ž®Õ@p¹(*ù5fôÙµ)2p¸=™®q%,™úºÂ¥Ú�9¢?òŒô#GÔzd‚%ÒµrvS”$ Ž:CBÉ7H‹c˜YºÑÅžqǧ(E[¸šÊˆFd¬R©ƒÉØH‚“Øý(³®eå u…s¨K¤_O8xÐk¤ÉÖ)®vV‡ãþ­"q/íyÏѧÒ"’t@;C²QsRäXc‡6 á“yH#ª8~Ö’y¹&¹+ìF*´¯<Ž €s"\È •ÌÙÖ¬ªA4XäèRš‘kÇ„2=)sÍýÇù„ÊU꯽`‚Z¥[ÁgŽí¾­q[¾J`nÝÛè!È¿¦Á SÑŹŠuO`=ª¢H¾t™zzÊÌ2– ºŽ£nVÇ«­›(·®^ÛrTðÒ^!NW˜”¯û¤Ü—½ŽË9½–†y}üb)�ïñêµ�|óú³’kj�rEÅ)ÓÔu›Ô¬Ð(¸j¿<xš nÝ9ä¬EyrJÒŠˆZ:­§g#ü<äjeÓ80­‡*Ö*|!‹÷9xÌT™ä‹?LP+ö/dK«[_–ZåŽòò¯³ºã ì{Y­Rî§U5ëo=0°uH,?Ý�•j+Ý2kxëKP®KœØ"[xÅVV€ߣy¦{·"ëÃF!$!VPÌ %«X:NñnVé›ÊA½ÖÙg`ÔØshåI‡Ò€ÒZÒ80J3k}¦¼È¡VЩbÙ²0jU}¤Æ|�¥¬Öh¤@*H²%P ‹rµN­W7¥•¥lÉ¢8+±Gaí x³ÓÀß(Fô7Ût§¦äÞú˸¤\êÓ + Z«(‡F4$iñ¦À©´fÓ:J®' {Ž„DoœñÀ�ûœ •P·/òœYp{÷È„£°ÅmÃ@¨ùñ¼1k¢÷zÚ†g8ñÍÀ5ažz^¡fޝP3KÊú +ÍhãÌ>ì6H5ú�ʸi4¤`.UO¿P3ÄñÓÝ›|€æ‰n8Q +×–NPÒЩަ—¡�ñ2rØ 7p†�¼o b¦OüºÁ0l[Àc˜jfC·à?ë$‡œÑ¦¦7"�¡Ö1>�×�TwÊUÞPËvD¤ûÓ5XE‡-�XÖh•@~£fHó0ëÒaÕœ‰¢Ü™±ÄÎÍ£z>‡JÔêð gb¬D�8ªðŒg{_&ÃS³A¥À @¥ð\ÎÕn\5Å@ê”>íÇvûC÷•Ф½¡Ö„¨ê¥µ‰ø!˜>­7« Æ—ˆÚHr7wTt´á¡ä8W®õ7›·±b�ñjL¬žöဦã¶.ÏÔ¨9 uÚºÜC4’1¤í9´p“Ýf_°#�ÂòÁ­.ÿuÄ´ñƒÀ ZøÈ|ã�õ›�Bk‚+ÿ÷™Qó¸ê•Õº<Ú|—ŠD¶ÅtÜZŒˆ’/à®[áß½ûá«•ª§ œ ”¼k ªÜÝ&ÂæD'9ê¬ñGU£%fë?u{/U�EéP ›“£Ð{¶Ç)öœl•®†ºBŠü…Þ³Ê?°Úv›‡4x…ºs»î^NîŽußp%xlÄÁ.Ö,YòQ(\±ŒµÛyÂtØ?ñD¬Ëçibp)N%1ôëʬ;›Õб»+ ™ -¨mJ¹hq2Ñ¡&±öTË‚at‰D U:aHi™Ãi�^üÄ‚Mg1Sb'àiêS §2R…j¢ ·£™(ÝNüªŸÉx¨­°Ê×ÖJS±¬Ý'L2%:¨Ú�/ò"ü$„nFßfE4®./³úŸ×fWèF@pÿf¸öa‘2—ÿ@Ĥ#sC˜Ô´~Þuê“\­d¥ @²ÒngÁÿî"uÙn()´®˜ßRBŒ�¬¶ +ÕƒŒ'³5^u¥ví$v©ä›^•ŒÒ+áÈRF¼ŽYè¬ ÂhZy‘=Õ =¾ü!% e'²À-pr¸> äE>Š·°¤(ÈV „AŽQEA¶¾ºø¦(?6¤@ä/òä[`lQðÙúH!ô'‡Ot°©VIþ¥hþ³ô�ûy‚•z,‰ÄòA÷ÈÕ]K6Â2’$~E†�[˜Öy�›@5ƒ”9,[(ÏN|ˆÛáÚC>(n–,F÷ÒoÅ&¶"pšÓ&VMDÌe#ÁRKÖžm4${:¬®íÜVˆR‚Lñ‡X:[[4�*Œ´lÞ׬ðWä]äöÁ�Æ!‹ +ò&{�‹5C`Í¡XØòx+ÐÛ „aN¨&:R@Ž7#ù3‹:ιh̉?*„ˆ,êE;Fš‡<´äÁ&œ&dìšÇRÀN.¦x¬]!˜ÐŽ‚ãR3˜Sz¼!Á<©Fø N´îíR©×9oÿWWI�ÿ[jR¬ñˬNÅÁÙÁ9�ôr^bìXXîÉ€Ûã^\¦>–|§ŸôAçÇÛ’„fÃn$# +˜ÊuS,æ“ZÅ,Åê@.òý_Ȧº¼À»FèÂ>‚ìº@§{Iê#ÈÅïIü UáG�1��­Mž¡ÈÖ!>‹{äý\ Ò~ µâð@NÕky”¼:Nˆ˜Ã“»ü‰L> šÊƒ³ã«»Ö) ÄL…45ûó¿•™‹Jï˜8:ñ³µÈ«‡}g1°ØýajÕ&ô÷Üc:ÁE¥»N´©tX�òotW妥lP(›¿Mf-ÅE­rDómÜ.#+Œ÷$¦¶.±É~Èø˜7“…Å¡4#NìÏíf¬¢éÜY™°Vö-M�[V’ÊF¼µ¬Rð™4Û¼3FÏ5>¼²vêÑáìëuèÓE[7¬¦6@ÃØc:k¢£ŸU<-:ÇâåY×*Êj½Î*¿(_#MS[϶k �Òo»Kï HÐ' @måè*PY¡ˆÒvíS!­ 3B½Ý(¶“AáªVøvÂÌôúB\áä+þ¤ŽÙ¢ø‹¹Ì1´!r‹�òɧ¢ÊBZÒ4v"·ˆpÆß‹É�+޲N\LñJ6Ž1�5¨ÐÅy<Ýê³o±³SµÆ¸ô'«‘µMq¹\ ÆJ±À„®Š£]K.\5Vá*IR‰jIs�ïs`£˜7—NýÕç¯Ní€Ùl&z…`†²Pÿ ßìU%áœf‰Ù +9uÊd -¡1Á± +ñj­•¬GØrÄ‚ý‘8ê¹³×»¸ÞÝ3Q¡C…NfK�s­Éõ(âPÈ⢠qùì…ûFÁ>À«h1�Nãa*ybÜZpn�å¡çpÊX»ž‰‘áBˆaä¾í:Ø#-ØËª¹ßt¬FT„å¦^šb,yÖ€¬2üt™e,®aï -³f:ji÷z±�ö�d×ò"_XŒœ^¹…¬7‹û2]ˆþòy# €Õ¬t*ès´Z£èh¼™}Y ,Í�iT9¨“Ë /¿ +Nf-ç€÷y·Ó*•~ó3?ºÄÆ0ÁÍX(›E+à ƒ¦p3#ô0gR¡‰_™ +r^R3ôó‹¦f2ÓŸðí²ÿ\U*·ËXý˜èT&›ö„ƻˌqüp‹½nè]L({w?ˆÉ{<@O¾r$¹V Ï»€oLñ4HÊ ýèš4ɯ2xñÐe¢IrÂî�qDl�ÊüÔs®q\ë3šFëÄêè2:—ü7>ú+LÙ}è³2C�‡„ù¾ qÕg¥‰Uüž:q*7X‹^9„Md2‘…¶‚@†ZÞ§�"H… ¯ŠrS„ùÏ¿z'™;Üÿùxíü¥‡så716ðH´ñ ë5Éqëüþ/‚_^ã'ý•Þ«�Ñç§ÍØÂ¯=÷½~gä½,%~™ N!5AUÙvö(Âwöq*“L ;êÁ$ÈÎâµñ;n;"€Ó€ø]»ãì—¹JbLbªÌ9Ÿ@ž ÆÊyùê›<=£kÖ^ýÀßï‘k6¤CUÄ牺!e”º¤àlŒâo”µÎ- 6Ü ²Äç7p.2þcI <$µJqaã­��b^©8ÂÆªg½ÛaüÕVJ§å7L6òn>δKìPáµ_ŃÃuq"^¿?6ØP”ãé]xâçªEæpçµo”‘¬¹’âÕsç 6ZTyÄáš6¾À“(ÿ»övª…¹‰ˆæƒÅOØè£RŒ7Õ„¸Õôz¬F¿÷54ÀNú9ú„¸•\}à Åk”Õ]<ªmí¹ °¯á®�ˆ¿“)2 •×è`t<.¾‚ÖÀ5ü8ú‘8Ql  7´çÔ5šúE“ãØ5îJ‘ÚùЃ·à7rbÖ%âqÂ;öÿaŒÿ˜cÙa‘”š… õó=MýÊk—òÂ#ˆe&g¡Q“Áõ:¤=d ÁÅÍ#Üdÿ� !¾ÃA1°ÑEµc`áÙð±º(½æ×Ð�N0žÝSô�;:Þ!Î'3 ÀÆÝ½rœ´Ý ›8ÚêHÄ!vŒ4ôÁ†�¸1Ë®ì{ ~�©O oʾFy$`í3‚Ê�뫽�¼­}D04ñÅÚ5nâůAô$ l\àeT}m=�#œ¶÷P0– ç@Ãð&J#JO‘ß= qc]:ÒD¨™H‘0Tïî5Þ}6÷ÂÆ™FŽóFZâÄH= ?ô[Ćhñ6, +•0Ð…e“…|¿|�Ï:º÷Ò×�—Ði Ü +­÷¥„ÍÑ¥~ÃÍ +K$OÈÖÁ†!ñå‹wOŽ ! ý÷ç§ÎâxV½Dbz(·7à‡ÌðÖ“ÄwÄl`ˆ ½^ZXŒ¸ÞoKæF$¿\áÈ8~ 9V¾KFÜ”MÛkʯÔZ–ÖåºL2æ„YñПø½H�Ãë+UÊð�«™/[¤öн6N¾\'üb=’ù¿Ç­ß§¸å¯¾¤ìûvŒó]‚)¯d®›2T¤£½ÒJ:㶬 ÆŸWR°jì´ +<-C« >¾+òû¿h¸ MˆñÞU†8EN6½ï¦ Gæ7¿*C¿“üèþ[ÓæCB/7½•!o§v&t`ðjêZ„ù^.¼}”}Ã|RHW"À{5ù‡#µ‰eF|Îîwm“ö«�¤Lû¤�î÷ÂL²™ê{T)jº bX^·ô“YŒ§m2X³µanBù+kx~‡9jˆ½tM{­q�y«›.ÌÁÖ¬mžS ö3¦­z#²GÇG Û=L)ö›Ô´ éÇ÷´‘§IZ$ÿaPñXÁ§ †à&Æ gN»KÐÞ.h  Î�Ña§~ö\´Hq¤ÇÚΡ¿ÆM2üBÒgoÛüJ*we©I•ô¸–@¹�¢Z=vPb³ÛÉêÿ˜Žq{ÜG×CK´k̜ҧ:³ó—‘ÉlTð +¨AÅMÈŸ|‰P¨«KÜxûÓ™NÈiŒËïÂ&m)b`èê:Ò6(ݬî­IˆŠ­WÍFõŠ?*jom$îѯuªÉÊÁ®uB»ï½Ÿ´ù:Æü¢’І=aÿJÜš¾âÓà Â+7�OYNHÕ"€šBŽèæ¯ÄOt‡II)Ó`Ôƒ BÑa ¸ J*'b`i]$ y•ÃÆ‚MôÒE +n�æ)�¥ß‹°á hwk̈½S0ÞÞÛû‚ùó²¤ñP'=à(˜óó-^È¡|G#môj•r±¿ +Geø‹vCåYR¯Ê*yŒúS7êbßWG¾Pf{¡PÇS¥ "§¿Î-É"Þ4Þ3Zfõ(ÞŸ¡ëc‚Cé¨ÒÊëܘì)8;ÄlO×c;T."3À¡eõ ¿BƱVŽý0Ý °‚«M¨cwMžÖK˜Ò%9øekîWe- ÁÉ�d\onáp5È é.a礻Œ ‡�LÌÐBqCÁCbtÞZ&_Åç +û|ZÜè@,ýË_„?blkh­Íc¾¦´·û…[ü~Gßß+êˆ3óà¹ã¡Tµû@4` �"ç:xžý±eå nrÒeQgU0E¢È�òŽVÉ…ŠnŠHÅÃÝ-C4ñUÀžAE—®™`ú!~”ƒ}ºlef � ’œ’¢ÿt}Ù0”*ºPÌF"”1ëÇ¢¨.ìƒXåøÊKE¦Û åø¬\™ÆÃ9"�ö”îZÏPã8Wê\ÿ|â‰C|åoȾhAÂóM™�uïa çøTQ£æAÆÇ@HÝÑ‚ón²xÿàlÿ¶hË6¯„LF÷¶±¶<ÆÚYøøÄ2#dÒÔêntŽ›\]2(‘®T[S„LQ§~S­ÍÒý�(F¤„l>dÍ DB¦�gâ£w[AÖOý…°ZŸ£~“Ìñ—,ª7}™¦|9JJy‚\…ì}ñú²N9¦Ä/§•L¤ÂOÀ‚ŒLHßNÛ VB í½Ã¥áq¨t^}ð™Ò*cÏ +ž劓/ðM^Êøþ›ZžŠ +ùFnƒ1!Kûìò*²Â©�ÒA=—LÈ€V ` ;!ûÄ‘Çú„,k²AC‡Öd²̆àJ +1ÚxÄ#Ù?ÃV×™u:^^Àv@ÅFÏK´]psc3Ø °=Ÿd½{§Ýª£ÂðŸ²&š9b †ÎcÕ KZi™N6Èþ Å(œò½Œ¨��ô��ã“âÄòA¶¤`ÁKXÈ1€Ðõªt9™öÀÙ/J:ð…Ù ËÌ +tUa¼²çð» ‹ÕÊÒŸs Á[Ûv & ^�ÕÅµì‡ ²ÆøúBü‚ì—f.QÌ~KãXóšC» ËÿgU⇃1|RÆÞÂÅ2QÀaS˜ëÚMáörZ&Éiî‹‘yŸF1CµÈ QNBv�íÔ:‹p#Bÿ½üQ¤”‹ˆ—íµ.ª(ì³(5Ã]ø³?ßd�µëŠÕˆ¶rψ*U¾ö +ïlQ¯ÀD§ET��„�qèŸäÖB¼‘8uì ) |Úö³«ˆŸÅž¼†ÖÝŠß]À}Óue°© j8/UÍ3èbˆÜ0o�í¤=ܥ᭮z\ÊH.E"lH÷¿†�WÈ ¾á´çÿù=ÊqÇl8Ñ%^É¢€±‘_:“®}ïBeþB|m5ßF’4TJØ•DšA†¬ÚÕò´i7]j#‚�A +À¦†TÙ3ä½ðpppÔ-ØÛ|g‹OB¾é áeE¡U¶ÒðV8 ÅÃCfK«xáèÁðœ‡+ˆ£i‚ˆT¶©v´f(‘ +«ÎÝ4Ñò¦Ò‹`lømÁÒ1rÈ|ÌìX¼u¡w™É&QH˜Š:‹¾lB@�à v~ +’ó'Íñqé¡¿•µ„hÜö\HKâMNz·úÁÄɨ�Ž÷ýˆ=Èm'ê“¢1…¬SË(Äô“iì[gjÔ +ÄÂìƒaë»çh$¼`1@�·Ç¼z×8æÈmg$…ü$œ% +sÍ„]Àû4 À^+;û‡ªrC®‹øè:Œ„(XÖa¨ãÆ2%üc:`«©,"“Çâ¤êsä ¤ë e–°�ÞÂ/•ëÚ¡IQ’‘’ç¡Üʳ€Ráó3æ}-� j©°7>m¾×,4vÈÕæiú…\öG\«®r®¥io0Ežmò¬…Ç2C+ïA¤Ñ-À=x‘yPpþЊU¶êŒ§„þb4ìü: Ö¼wâI¯xžhÅ›¢'D4©+ÀÜ¡°è-ø^;WžgéWeyf9&O*:]B44_kª¡¥L4~½øePž\ÐcòÿØÉ�v–|°ÅÑå™Ðø7Ðv¡eýL¢Ñ¼2KþêuoÄ�Ýí‰Bh¬t‹*7L žSË�Ö§ï�ƒÎ¥�¾D—wƒÝ©�oQùZ<“ø¶Ð�Øò$dÐ_”õAÄ‚ÎFÖÏ–ƒ¾JÕÃxÐòFèëïmmh-²sÕÊ?Ö|g! ÌÕ�Ç•ŸQü;¤z…Ô-\dèÛBe:±¡UíA®ÔDäÛçA@tR _¯M1RVö´’­Âɉ80êÁpââÊCþ„ô"Á•@D×kYŒXË'À–4kå^Òf•ÛðQ^Ö5?÷­ös5nI‘Gç û«uâ콚èn‡j:è·˜PΈž× ±´§²±´¡ÖÎPü�!ÜA›åH‹¤íaË7×@ÓÌ1}¶«ªŒú‡Xà㸅Ʋ?âŸ;xϱ^[wN,·“±2Lž_:’jS2@VT>Þû6�†"Å +èÞµ3hÑ!|…Äßu]Þ¿�âÊp“šaT/£ù29°Ù B)dîï8x{ÂçiÅ $»„O°I°“öõBÕŸŠ}r{ËtR¾q¢«; +�k\¿”+Ç`È-OãxPŽ-@‰ÑµHN®Ÿaé-?ö¨šãÑž¿ lª€¢Ä‹AÞ�2dÍ-�,|èü™�ÅÒà ]í øYŽ»d{Ik­SlÀ„øUBïÌù±7Pµ“Ëç�[_9öý/bULÚäi­Ô¦×ÓYÊ…Æ+­e[2Ûr9�¦Èö˜Ü«1€5ê…—í:B!Ó e›…üsxt(4âQøÈuj¿–Ð4�¾ZăS� ¥ë9ô §'—•KOxÿäÅ”å4¿éYjK�ù&´ŠÞ›6ÁX“ŸY¬ óÃD¨øœp.y©�û O´ü«ò¹¡PØ‘;Àn7xÑ¿ùÊÃ.£�ñ>؉ àqY1I5ZäaYøñ·Z4.èÃÜþÁϹHj +ˆ +Z§�ˆªŽ裌“žŒ®+�­fW°e“(ë¢0s“.Ê5&B þ‚¦Å�ˆ�)lB˜=Q!Ç0g‘ +_Xƒô~Tè}fçSH ÜÆp§Ðožùã¼²ÁÖ>½W +Êñ¶îÀ…)Ì@Ž„7…‰ëи]ÎN!+›«–œ»¼ÿN_Z´¼UŸð/N±Kܱs�ŒÑóXÞ 7Î[DÒúEAÂâ6X ™?+Ùx–M›ÀïWtîÞ©çÍ“òT>˳ÓQ™¨?u…WBå(lœôôJSÄDȆ¡S Œ[ïI=�Y/›óE�[9±^ +»¿Tìû„Œé Íû°â “åÎÆ0¥lØ.9YBölô"lÔš·�ß� +ä®ðúd5/� “$o)æQ¾ßú¦·e2ËÿaÕ(ë/ÕV òû¨(4È?eþû¨4¾?ì´n9MS%XYé +äå³øk]ëë]!U÷ÑÅ,Éy6@²_—ä`)Jƒs„šhÇËBöü8ÿ4q¦ÄŸžIdñk8°aXŸëíCTîÑÐCÀÓAâ!Àà¿Ü!üuK€$ùõâ÷¦†ÕG˜†x `CÔù]~!úD•ÑÄ2Ó–p3‹¦<$LV!jCæ +q}u�^%B8ß°a +”&„2QýàL ¡$șŸ&aä¹éÚïƒè8¶ÏŽyé;ÎŨç|-CõBôJ©i’€ÞsB{Ýu4�é¹3ˆMuý1Ž�#ƒ€ˆ™aaÔA왎1wåòAl Qy°H¡¸‘¢-× +™�Î0 ¸ê1K€s+&ú|W7Êáì³XdÇü…t~µààŽ“ÁDß‘œ8˜/µ°ˆÐR œHäVj·óçÝ &|ãiÏ6�V�«¾$äxè%àÔ<„µ–‚´Hd®>P4>²™U—ÃŒÌxùÈ/ð($òîO—ÁYÆo>˜H]œÍÌËÀc³ÞèXT¬\ؘ°vÄVœéZ_ü-ŒÝBòSÁ]‚ǰíóô{÷Ÿ|Lááñt,¡J“-L=-¿Ó@µ4XZ‹m¬æò¨ß«@n3-ÒÆ‰ ÛwÝôøbpØУÍ–Pqý¿› ØWž:•ŸæÞfæ©.waðñK GüØâÃD«R@ã|´?~HìÍ7n7|d¯ö]´ü˜WPX|(~Ž�!ä¶#Ñ2úq4›€¾l£w ý˜×ïWE}º�`$‰ ž·àuñ··bL#ö�ü`E6%~¹9\?BgÖS/]!Á*`QWNfYw ç@?°¨\ù¿χ@{Ú¯ÍÌ;l¦_ ¤Æ®œhÓ�?H`%”xóF ˜ÀþÛw¶%Ëý>ȨƩp~“ǬV%‚תÆú±`M6g|Õ™‡ j±IŒ€-�Å,/ÚXB×å�記Ê+ &‰¶ß£´¥¼�5ÜÙœ°}¯Á¨„8…s¦—ä¹m.í>îyø‡LDÄZuH¹Œ³9/'BA!”oÜõ?¼� iŠ|.àŸ�wdÌt\ƒ¬ö1ñûƒ‡ÑñO)x§E"•ÿt+ƒ‡»/É~1P€K½\FŸûE Ì¿¬Óµ%û?LȘšà“4¦¼ü)ð«±M;|\™­/cÐw,Ã)'ó¿MMÓTij;Ëß·ÇjX�̇mK‘ �S– “¿âÒ5_é‡Ñâ±'&ay'¹ß¯ãpW×ÿÊ.d€Ñ»l¾Ÿ1o¹‰·p“U¦mà*¶9ÛÐân´ã%ü°eÔÔ>Zf¦· +TJƒæ–½Ÿ•A²µî¢zŠïId·,ú™%gHË‚À‹I¤•.Z±Þ= š9A°Ü¥W�V莭èm¡íJwò à X{uHtÄÒ¡ˆE„àmý‹;RÍ\¢/Qg86µº9u®fG¶§ýÑyŠ|ï{qÜߊîÙÕ̺•ú©þ…Y¤Êõ\ÄÍŽçÞÜú�ŸTÈXòÏr�Æâ€¿óh™V$êdš”P-ˆá´è�¶gL¨÷7;SÉÝsÍÁ$¯}�Õ‰aW£jŸgYxc(Â÷âdp¦Á–Cšµë¹ï¡¯­³‡(‘×pÃ¥�š°h�V¼\VOnòÓõQðØ;l‘*%Ïõ±yÜŠÜjvÛAC­üŒ’ìÅ�žJhRþ¦ä…8¡ßŒ+�i†œIKÿûÀ +øßçËÙøœ «ÁsZGJ¿3¯mñ?+ ` Sô4[¬ÂÝio™o8g +ñÝ#3G Ñâft€´!Á/]?šÄ_ˆ†Bá}¬Â^ £UÏKá¨��Rcà“¥B†Ï9ä{m„܈Ð' ¬Hôsç6Jо –¯Ä×ýi½sqûd-Uö?’‰ÈR|ãtÄ1¦«V T‡x7¢d”7[Qj±u¿ +UåăS¡ã S‰-|•~¥²É Ü&I* ˆ_*Çjf©©Úr%PÿaWU–)CÀ¯0 uÚ!ÏnMNç ×{`:IúÂ�—ôwM¢ê¨¡8óU¡|Ñ´6…L‡,»)m‡N�  Ïš ¹.|/\%þ*—Êkº¢ëòÀ§{ ßc(*VeÓËú›Ø‡FP®[%>ÁãôýзJí{ >~£ú›D¹"ó ÒÝÀ¦2i=ÊákgVBGõÑ£–ìñ„p™>·Ìëí÷k>ý�ÔzŒtaÛ^hH®<Æi‚é ®n¡~Aœ “ˆÄZOC¿Žºðt•¦ÀfG™kKS[¨lV—Chί˜;�ž¼{{$Mº%3yÕÙz7÷´ÅåÔ“OÛNº9A'ô8×í*·tY@Ư-Õ ц6窸°0�¼#¦/¬�=O•zµtvp*(™cª=N%” j·�„Øy¥ÜRJ …ÛÑ‚BA$Èþ›rÇ/ìØUU_PÒÇÿ¬= k)kJ€K¢d^ÊR+¹�bÎ"r>´ÖGNÊ;aw–0SH\�+`€”õ¶zÄá÷‹`+aÁÑšrHÆö˜¡¿§(E7¨õÖ•;‡(Õá_ñ ²øÚ„ª.W4²¢¼µÜ·’ŒN t©N/$6\)Ë2¢ÍÑc§º8§1ü§:‹ÇKúT7 �–äÛ©Öøa:½¾5Cõ�SDÓàÀujˆD�™m‰Ã¦ò•@ahÕáàºç´h5àð[¡ÇÏu\#¨…§/‰'‹œ< q„@Û)Žþ<ãÈ—Š\Öí o—QÅæâõ¡vã…hNN4†Šý¤M*@ÔѸxa¢*g> UŠÚOµJe]ÆD­$×UqRÔ—ˆTŒÓ¥ ²ÊŽŽ¢ ¼˜w!QªS8\O�ºA¿[Ge‘oKoTL³˜k'¿°‡Ú Èû_éɵǪi£6ÕA[°7}Àö+wÅÌZ„É„ab•h¯”šÅ�†ÔlÍã(‹YTI˜ãX½v1Ó!uÙH»¸mÛ �+Ñ­4ZUH1ij›(þPTØÅŒåèâ@ÿvàñ”AZÀ8íbc,3# +^Œ¸–úMÀ mÁÂêý.Ônð‹:ò»�|Xdz‹Ž‰ŠÇú»(>Ož& ø.F!Ÿ¾ðX¥ +“*Â]è15E¢‡GíE•Óc‹“»=�8ALv±Ð¬e/â·!ô‘î´Ën;Qð˜Rf�À¼žjÚJΔ6 ^X�£Ý»®;ßgA¯ã¦_oÛ±fªVdJÁ ªOD‘'¼¨Ýð¶¹A;å3¡�ž8VøG¬ÀÀÂÖ¬·_Û‹Ócóü�Ýu¶ð£(ÇmŸtÊz@�™¿g~\Э€pC©(ÔLäx¼þáRàÀïV!D»í$Ïã£3úz¶Œòs­ÿ5?bˆsÛì *„¯J²ˆÁMÂ¡Ì Ñ£XgƒÆ<œMŒ ~1Û‘ÖSÛ¸*ÀÒÛËáeçÜH !*àÓ¤ÙÑv}ñI�eÊY°óÑPë%ˆ¢á¿Y®U àˆBæðùŒƒëÉ/ðP¶%‚$†Þêz_‚GüðÇz�{XÄ8mõjå8/.G䙥ϕ ,^2¢ykûd�:Gú-®Oúñ›� wVÍa¥¹.-Eâ�ly¶ýO@'¢ùT]±§ª²6½f`rÀ }Öé�_‘˜Þt/òð~Ú—0VʰÇÉ£ã ÒªD‘IQ OnÓòãÊFlÒ~^ð„£ÇȉÛPÈ¿¶ä½Ç–ÒÍûZŒ ¤¿QŠä¼¾ÞÀ*¢l¬žˆÍJ UÃ�îf’ÀXßóSá-æ]_BâR}eîC/v×P‡Ø_ŸºlM >Bà’ˆòØ‘”Õ¾^•cOÝÆŸYÀ'ÇD÷zrD!?M/s;k8¹Q +©”vEo¦0üðX°Dv²i%1-¨ÚfvGÆ¢ß[ß½‚Àãaˆp:Õ|AÒÎP{àµ-:1xÔ¦qÌp‰ïtöÜÉ]�T¯&KT0µ41'˜Øû�ªø®D’ÄÚ(Èiû©�vŒV·ˆ5µ©èNø&,EH;µe¸r‡…/ ŽS3¬9Ÿ%bKo°¬{OÈ…Éú›Þ¸þ“_›¢§“–�"üã$«pj•Ý© ÒÆ » ÀsQéT‚`ǧ$ªçsÁUŠä‚¦‡ƒ¸àZ8îbèo¸Pp‹^�×-€Æu‡Ï<íèr¡�ƒH+u Fÿ Q¯‚­XEtÖT KuáxCfÆ]Ð\},ç�ÇmÒ\˜û7-#cÏœèÔrAWi»X�OÊ…é½Ó*,Ì… Ø%`³‚|‰� # È€¹7<œà} ¢- ÝÂIëeÏáè-XÇÇ0Ÿoaò§jŠs�õ‘oì�â9×Kì¼÷¯øŠÞ ¿!-lìk²dE È·DçÉ …)Í0mf€¥FJÆDÙï$ôHöÊ1|U j›Ââ*.Ó‚ÍG‘€ÚÖØ‚*Å/[P»ÑÛGj {õÁÜ´‡ÐÇ1V츸?.Œ�ÿEB–¸à¬Q×…}êõ•RR¦E´@[ºàJ4U›è‚›¾]ª¢|. ÉÐË…%{Â]Øß¹`3ÿD\DRÐ.ªaae.¸ñt-�µsÁ½É2&.é‰Eš\X* ,¡âÂp£LYÁƘT!ꋱÄ8¸Pt }E6l5jûrýîêæ+ï—ó!˜wX¦J�ž Ç19uß<™A¡¢[†â\¨Ì T&åÂYŽh‰¡Ž‚G•�¨¹¿\ÐPî I‚¾ÎÚ«QÚÑ›ÿøÞõØîMuÝ;ÄA�¥Ë]>qA d¨Vn8w~XhFÌ@¼~ƒ†l¡[u‡QZtWÇàd Pÿ ý�*€Cé!y‰Q¼N§ÔCë¦VÁî­]†%RpÆ‹¥‡ñ˜Lc$Q&Ëqù+䈽ÈNÑ¡çtQoªqºYç]äCÿ�:^|î¶€¾o÷zg �‡Á- +ªÒ,¶¸·etÎêrOŠñ‹káw±C/<{Ù\-Öºµ…<Ôx‹ç­ÿRw»@�Aê~Ð|sì.¾þróYଋao.ØÓ‡~ÁXé¥+F¸€•t9 tÂè­×rà�Éè�˜Äà¨E½¬ò•ðSAt›ñ“È\`�#±¾(G^dùæø–�ÜŌ݋½Qd.h‡×äÁ]Ë?5FõDø ¤LÍŠƾ *±1Vh&±Œ–õàKAd<_›ªã ˆÈЙ’1+VàÕð£ZpXC ŒÑ9B‰Ñ)Ô±…¡B6!ÙÂî@۶ Ú…�`ð"ƒ¬È+©ì;ÕÅ>�Ä×8 [XÕ®"°¶�Ïi{ÜÐé伉ÈD©ä»¨ÖÛ¢t·€–jo­¶8˜’ &¼šÞ“æváñÞ|çd×s–Lã"pDu1¤Fjø÷À'›yR©žº`Å…ú#‰>±buZ.5ãÙâR]I áE®?¡ÖÖ‚¥äe>½˜Õ}b‰S3#-ºeõf�§¹§›‹ßRÊÕ|¤‡€_Ãú.~¹Äs÷¡.²‚¥3~ÃP]¬=¢°‚Rç!¿8NL³#Øæ©’Õ’]R©4ëÞœ ô¯MO¿0¯Î• E×âw™%Ý(yJ�àKož-зEªfHD��ñY¡9ÔÒܽgÕAD¢Ï"I ÈgË.gÈoûì—ú²žJcǼ‹Àp`ôÙ¢sc�Á1϶‡bϪæÛúl͹«¯¨ù³Mm£ƒKŸÝÆ\³?+ø@J!ìg5zæäþÏVØ·�¨Ï–HÁd?á†aF‘ñ#òƒXO° ­žÅ�•7 ÚŸ=,‘÷¶“ÅÀ0mOþììÅ–¸5í &EnÐÊÑ»z‘Z.6†ýA+¤²Î´Ó~K�Ô©aöjB;«ï)ZÌ ­z—΂Hhr˜º…v‚��*A4„(ùŸå-À"·K¬j^ ¶‚h56 Tw}_+¾dòÙŠ§¿`,üì諢߷s/E¸ +°87&uåôÙ=¯¬bãüYÞGÐêJˆôs�XôgGÛZ(@+²‹*)(ögÆ‚JáôYEå´„¢Ÿg¡^‚nÞÛôËPE;Ë*ÀÏcû¥/œéÙ&Kp>xùu‡‘ÒpÄî cIÎqÐÒœl8ÚÇ~?nhÙ¯ÕÞâvÖ”-º'|IДz¿W ­ŒStÒ -j|@ä ­„…ãzC«1ÍKZ…VØ´¤~�ÐJ¾@Ò‚ö ÖŠð@+$v‚– (»…Êò¬Ë˜|ÓX/‡Žc�\7^õbÙlž¨úg‹+¨‘Vç «Õ3€˜aü¬x³~Lq®¯žAŠ#Ò±âÞìŠFðÖ³C•Gú<+DiÉèÙßEÿ° ãÙ’ žœ_©uêªzŸl“2hEÉÍÙÔ&�BZYVÝTáÄ$ÅûwÓÊSwo‰Ç"Ï„MŠ×Ü’x}—ˆš~Îl´Ko‘×ïøCá—ùQ�¦EJTZ„“Õ³Ðhˆ¬ ` ou®Þ‹Øˆv£^V íü›YžÌk…ü¿…[¼a[Óíjè¨ô¸ñºý”R“�'E/Õ©¤#¯VJ ª›¹Ô5ó²õ*iÉœm†*àÛàN3¶é§í¥Ì†Ð=Õ.…�™ ,ÕåÓ�÷WJîãÒⵞ”¤»¨8;ô¬¤ +¿ÏnÏ€K?%åÌy4¥1�T À&wà5`&ç€%tÚ₯Ã:ÁU)¾F…ž”Æ®”U£%qQá¨nY¶Òëú‰‰£¦éɶ¨ë)ŠÂ¯0í¾¢Š·…v1(*c»=ÕÕ¾4 'Fé%£�|£,Ù÷à(cv„�š!/Ȩ&¢k¤¹ãFÉs/lâ¨{-kiS£d³Á¿!hFå*øDÕahq—f”Öß(¶€Ôx (�ÞiŠ�dåPùõLGÐ]8³ øžGÓÞÜÛ,è†4ÁÃÊ Ó¨´ÿo×M#<¶QU:¡®·;pQ*Ö>¼+ +ɈZž(Ý–°ã!ÿ.¢þØæ)'*5N8[¥¨Û8>PRŒá ŽQ}3\”E!wRE;Qæˆ^1…¢¤¼Ãyé±lKð¢–šÂÆÁЧÓuwÚ¸bB¹-ôµ0èF‚ye¾§lU*8 Á@xøºsÑ/ìXӀѶ<<šZ�xÇ2Œs#:¬rc(6d ‰#óÍ]ZÈqÃ_¨ Ža„ ïvCW¥þ›'ylò�‰p‹&DO²C\YÔÃ$ÁwVh⮿Ø +;h¸íˆk‘Tc4»ÓCð �€Ô0,Þ9�Q¸> • ?„Éí¦Ûþ\"ðT�}œ]´Y)LVûÉ›-%E¬ùà«ÇlÓ­‰ì–’‰˜3J†ÝAï¨xëv» +t€í4ûž= ÃEÖ š¸§—‚Àüú}õWzðs(‘Ùa�}‰ðng0‰‰°©ç²auuU »cl±î÷6ooÊ*HÈc9Mi ³‰FðÌy‡±Y"ì"Çfßóѕ˨±ÅšW ĉýàÊI&�Gï<�ø¤Z›OñÿeïQ3Ÿñdˆû›$,—ò¦ZªG»cÛV§]òùJãÜ”ÕxJ,ôõ�ÚN–ÑJ wã%ò‰/ÐŒ¤áL9C^´†:@R,Ÿ~ÿtíoû„Z8•…Å\xÛ‹…d:˜ �A‰ð>ÌJ�‡îårß�Z +Qõt·¯ˆ÷”ŠÀ‘�–«3<ЙßÎWŒ3‰œ¸ø5ï÷§ÖT¨TãÛ·éÇw}ãŽEÉÑN°¼LDœósŽ•ð3U8©ʃƒeS0‰0»¤EèWÆ ªÛƒpBW~û€•å_\Ï6üÿ5@±¶Ý‹~;äGdø³‰-ðýBGTq+¶AE4—†6öÜ.†|ÜŒ¬mÿ®mZ¶2óت?ET2·Ã®µ¥­ (Ñ­¦• +m!(Å�–0n…›ÓÃ+]:™ó”åaØ’*‹c«³ø@d«ÄEüª¥ÞeÜo7¥£V{"8¿(’”–]ÂíÜ›A¶0ŠŠ �L/K×ã‹ô—ýW»Ðܾ�âKÏø[úu §á]Ƭ±HTyAd°>~9§¸Ï˰Ä�AsIßÐ*u®ž§�íE,2—à8ú˜¶>^tw$ÝÈ m�+Už~tæÓñJ(@Kv{RDÆðIsÖàw]**ÙJÍÉ¢æ^lê,øv6j$þD#†ê m +ÝI^MË\/™Êôv{âqPê0 Ú�#bv>¹§ ÀêWƒašï%:oDóC}¯æ³^¹¤¦²¡à%ŠD�RßRÎ p�âH_\‹ß“dË¢e0Ñ1;ó ¥‚IÚãYNlo¡P…Ì4˜BF“Èòž�ï#¥•° öË ,–¥ U&‘úz(°K¬á®5.Y“q^Î�5ï�š@‹¯Ç' 1~”*qï Õ ½<�ËCÔÕÌæ&6UŲ¿H"HwÏé÷öì@:ÀÌ–¶È£ ^ +zœ†Ï1€Â:áJ>­Qþ‘Û€#R……ú±ËŽ‚t‘ùïô~ä•ÏÔ + yº¿!“�qÌ,:ÉãüÆ¢%ýðÚ_Ô&ó•éoÈŽÇVÄŽh.ÁôÃò<ó{¤$}^•Ù9Šj’¤_¬0䀂oúmèÌß~ïž;Ñ£�Œ@Ù{‹*óëį̀›Í'¦arȲ3�Ä%§èŸ%¸ú„űIšŠ0±ºó˜óß°do@é³–uMͰÒÝ…ýðfDu¸³cÔi|rÂnÈÖëµ›‹)Cv´eïougødVY•žfU�~ítqž¦÷ Ð!‹F‘ÕÕkQ¤�äU;ŽòµÕòÜ$.ü®ç«Â°ˆp€KDC”Œ,6»ÀTm{�~ _¼G*Z.yŽ„Ð5¢î™ûožB—»ÍÀšÀB¬›Èhº�©]‘˜–¤²¨“4D;8;Ä;Èæ°l 阮¶˜Ä*\�ƒpBͧBFj°ÏrðI®¶QFM`nÈ%ãôÒ(/F &щÅ×|{®sù¼bÛ+T©Gsøð©¨Áäî¯v¼?#÷§Ë•W¯€(' Kóu©ÖJWœWïlAÁ¼å›S$ž ±ø{Rv�ÝšzcD"ñÚñ<lï’£ Õ¥X«€ëÇ(mö’§ÕŸ­îÅ4BEöu5G�$>zç©kíÊ–’„µä⑳”�ãq´”{㺴³ÎDTÃ5Ѝé{¿o‹s•˜í)¾4Þ�*29nàið4WeÅ~+!Áà›Åæœ*¨ 2_C»™]èä�öí‘aZ0lÉ5IŠ¥-‘!æÄͧX|aÅ3̆sÙ9k6ðdúDÃÝ=hÄFÙ‹%ȰÒú»`ˆ˜ð6.õÁÍ-Ÿª¨|ÍÁM/]kÇ +4ÞgæÎî�}xÓ`dÚJÆÅ¡j´“:H›!:ÏÌ-•ü$Ö�È^¬½y3C_êi–Ÿ~vTTˆz•a¾Âhë[bv|«eè·¨>.øV4qÐã(õ¨iê¶_/6˜vQp +áR` àF�Ç­B—U� u¿õ6Š/føcî­ÈL:vbO\‹ ]t »³·mÛ¶mÛ·¥q"j‰ˆÈˆÈˆŠˆ„(ÀˆÈDDD'¢‘�Îl2Ø… Îó)Î\¨@GwªŠg¾TsêêÎ.ŒYUpêî!k°ß„]�PN°¯®A.øîÂÙ]°ó�ï¿?Ü… â�.Ü…pá%.8h›O˜™1„•¶]‹IÇ`l:™8Ø®°v£*È™G«T]•YU™™-`U2!È„ÛÍnÌ‚™]ÍÌ,˜�ÙÊÄfb6™€SaÃJSsW…lQ�Æ™ˆdHˆŸ¤mç35ff¦UÂ#33�¸]çÁ{Ú²S¶OÅžáð|3­ør0˜±�CbFвl§m;7µ¶mÛ¶ÔÑ*¢’pHHB"Q‘QEÕ ;+3a¢Ê²"�¤�0€Ì¬¤ÑÌj-3“™�’ +Ëœð>awåʘcHí®g.˜òŽ�#²³iS&�ÁØtLµ¶�޶í´bôm!ÅB"dèèºå†&Õ­ˆÁÏ-šx>Ê-s¼‡$Y ò~sÇŠºc�HÀpr"2áA,òBH#I‰’ D0ž™×4¨áHÛ¾mïzWAٮȮª:m«(Š^"”€±�A™hÇÌ,`fbf0£€™˜­¦«±«®Ä#T»««VÕ¯ªn‚c<#f̘�°�BwꈀZÎh‹ˆˆF@DÄ!M• : +,0dcr­©ÿ”›ºù � ßóûçû¾é‹~XÕSв2mIḚ̈mï„T\Äd -0c3Ó~È!M&šéÌ É C¦'¬õ Ä„K1„¤„r‰ˆ “ƒ" "]ñ„wdi3D;ÃÖ�Ç!zü.\sáNÂwîv÷Ú‰@5p$"'‹‘�+Wgvu÷9r�¼» \K!†~¤Yî\]Ìo=éXùvSÏ*G÷ûÉFÈH-CŒÌ꼫�¨Dü>#p@¢8$ H3AVô?X H"2Tj^N#õ8tFZ¾" +Öòÿ)åMŽ,Oð‹Xt]åÌée41\ÃØKÐrí§ÄñÏ”‚j³è™üÀj®>"Œÿâ†aA ¾'Øà6G-L›«LýƒÜ¼S!ŸÔL/ûF6 {˜Êl2�Aѽt•°i+š» +‘•4’ä1ƒ!ƒMËÍþl‚6Í¡¶ÖÐ\9¥0þÇå„Aæ¯i{$Dü²èá8zÜ¡Ûh›Í2¬µÁk_Ón Jôáï/5£db&”Ëù¤dËî»~m˜6%̾²5gºwMK²”Þz‰Sl·¯Å#)Šß�4Ct…�ÞÃþïKZ^ =™ L$2=]�GL®º5:˜1>À€™¼<�Ö ¨`$!‡™^ èÙÚQŠ- (Á¡’ÓܳÛR›ê!Ax†×ƒµSï=ýp1ç½MF1¯áÎ9P@Mû‰4kO@GëÎZó:€[%™ Ót”V `(ñ2¯CA¢D@ÃÿpWˆƒ€¦€rÆ8ŒµªÏáÇm´¡ÀtV�6.ce^W¤’íX0®r€¶�3pW`×eô?üEóÀhÌeYèˆáf€²bæñ îê1Cˆh‡ÊPƒÇ0‰‘ÈâAÀðÄdrãjÚ¦¼]–t¨Lè`ÔãÖ: Š—Gm�Xè3ü³ÔTBµñ"¤AVÓÞ[~ZT}…ÞÌÕd‹LÉ¥+ ½ptý›OŸ”צÍÚÆ¤¦@ù ‡Ž+*#—T)™¦av¡› ´…c“Ô>µÃlvTNkúôù>Ì鯾¼¦ÀVç¡2.™”»z%€ÀvÀS°–’Œz&Öxöà¼-Nr®¯_ ÿÞÜÛñ@‹�-¨)̯@œŽEqÁA.æS‰"’2’=SÁÅÁJ‹ n¤Û¶Êé¹må­‘ÂùøaEß4nìI0šîî?²y e>rä¥Ô&ÄTºÉCžñ�þ fVËUWâæÉº¨Mž9~ŃÁ7äÖ‚?x׬A„À2:*@®·Íá <¼W'QW7mâ1&ü˜g½ÑŽò!…–©\ºg]ÐÎe…>—k4±âÈaÝŸÏ}GyÙ‡L}ŒDÑ{aXE¨ña—Dc‰‰QmŠZt³`Ê{Þ‘<ãh‰H_9…žÁWMÓ^'Öµjš¦Y§ñÑàh /µ+¨à×™¦a”ÏÝsj~ôGÎ †�ÃA÷„‘ø‘Oëõ&"«¿ÕQÙ¥év3²>1…3�ÁÍ^K£"�³Þ¬âõé[}>ëÎ 7"„ÖÞXè +‘èa:<ƒöéó}‰²yöhzŒ9iþg™E¥Èc4Ù åÆ[%MK3.ǯU¨MF$U%�÷‘wl 7Ö’'m¼Co�y • ÑHuŽ»¶ù´‡?e•…ëícòÑ™±1èiµÑ@’‘ðÅCÓ®>ð3�§eh+dCfÙvLæü�¦7ôT½h•“-0äX¶ —™~F© €—¦€ µ80Æ7:›"»¡]Á~’°&6$­Ž(G€/h] +Šë Ów]³œ)Æ'‘*’¨ùàñÝ‹ÁÂ’ FÑtïG‚ŸhšÄŽb¢ôpÉœ�p“G/µBN=1\ƒ€ÜŸqôF÷OšÚ^ªÿµG¿ø®s8pb¶ì‹F¼��¿Èsâ %µšÞ¸©nú¬¶4VµÊ ʯüx4CgKÕ{½¢CÞ“ZcÃüà­Ä˜fnŽhDLŠ1ÅÏÜÍöšÇè7˧}¸�˜òÅ­ +ç…Ä]BU>:Zw/4ùäôª“,uX¸×FËgMáõ©êˆ­�¢‹•€šn• Q«p6h:sãåL@uŒ!°»?hÓ2AÓ]G€È¬çnáü0,òlpD'…4¡æP†ðU›¬)0_ìnx%N� ú˜5¤ÌòWWNŽ›_œÚ—?DŽR@Zi—~ÒŽ´Bñ�ÎléÅ8›v¼öêìÈš�ÀRÍ0bBØQ*(øíÝBÃÏ´i↉)b +÷^:טçw’kÅùIþÆð2ÚŠìXF÷ åZ&šRYC¶yÑq‰â‹ÀE�™Ïq%â�Ž1ͨqÙz+Í Û¿É—U¹�•GÕfÙ„ª‡åK2[Sgò<»é’Êõ˜t¨5v¯¾ðì¦1žéù}“#rj›€x‘7GúÀµ1×æÍøQ Éç›ñjüC&Â;[(g¹!ý YncD¸‚ÖJ—”;°Ž|ÑÑ"�ÿ¡k5˜¶Ž ):‹’5k�ÀôñÈŨYóÜË-¾Ó™f ц\+EO+˜…ÌC¤‡ +Õ)©:ëÑa>ܳ”i�<«ü-�1›I”3­ÙЇyãLó] ^O“ ?œi®Ý‹QF”p¦‹u�Á™^ ô7¢ü›i+l[|K¼�Ô)­B�`iÒ`\ ë3ãäfºi†ÿ‰¢p3ݺÖKÃl¹Í´edÞH˜Áê�ø +àHÜž�_�$=�StûGT„BpžúÂd$j%µ�).ki ÆaçôºÙA@˜¦a�ÙÀY­�ÔÀ²cgx+í�f`SëO:ÇÈNÉØƒòmÔ�ÉRÏ÷P¡,î>ºµ>Ýýƒª‚OßÏqà®{úp�FgØßΤû¿ª14ÒM” ZgÔÎé†Ì80ƒƒ)ã8��Š¡0ið›üÄc|Ýän)HZ#.ò¼_K  Óƒ®õ—§`«Æ©³r^Ô}­èj±Ýf!æâˆ™¾Ò×Ö}Ô‡S6gôÚ2Sý:CÌRÊÉbôìëád`(èì3+.² $jwôÐÒ| Y�êÊMM†Å :¯ÅÕO@Ìg :Ù³P?å¦ûÅÄÅ(pв¼cãeº‹^QîÜeÚ&)ëÄj‰ÛÅ`l&Ž'é!˜j­Ê[¶‡Ë4d —Où…ŸeÁ!Ý1÷úY‘ÌËJ˜âïákV"~rêË„$ÕZ¦-Cë»PÊUŸBΘIAßï²Lï’ŸªÂlp£›‡ Ÿ=Á7My·BÅá[¯ªS–é˜`s—I–—ýT´¢¹Õ`×/P*�+tFÊy›6ÝÛÒ£¢¹®Œ[û ]ù�… 7½1¥Äèn5q˜Ñ’ Bßg îB²A~G»¦2K>YêœnãÐβ×XþA“p7xZ +ÕrE7r窠j4ôqUÂzØ@ T2ª8™TˆªO‰ªj”€bH]uF”f@'Z±ƒ‚l� Ž>æõâz˜nJÀ:ÐÿŸí7+p)&áǛۼéBò<õ0šàÀuiŽ* ¾g=�ê&Ÿ^J"N,%À&û=ÙâÆFü\üë „›ÑTPòQò˜(= ƒhp”(5�éÍ«§jR†šŒyþí³‚ò%NVÕ­T¯3Y$‰Uœˆj"J +²ªìp„(éXl›ÉG* %Jþä:Å£x>õ–å"rôÆ…ÝWrÏ"Ò íÎvkY +ÍxS6?QöïWSþ¸,û=¡U–¿w½ãÛÒŠ áó$R¾Y+µsÝè<õ9ׂùùå,°ÓN•Ï‹Ðߤ%�Ïùqm†\s�åçîš"%€~¶8‚ n*@aO;Fì€ptL;Qáµ:ˆ +6 Dã´t£��i³ZÀ¶\øbZßdÐÑԞ숖\e +v(Õ“P‚K[Æïé�*®Êú ê$Š6“býÅ3$'�ßÓaŒ%9ÆÈ2�†ÔtarËÇà£SÍÜžÚ ` èé 0æ²ÁÔ"ç;Rª '(¨uJLKPEœähoµ0ZEì�;ý^ˆ3KwÖP�R,Š<,”79Ã(¦]ˆÎíYê<Ói£PâY›â:ôtbºoç‚á–Ýìb>‹ŠèÄÈ:qšÞ6]¦¢ûYPÓ®umV*"ü‡˜Æ G[ª?Ü·0hi›F¦à»…»Kk2Ý$ +¤�ŠÞGˆ¸Fj® ZŽ2,UñÚËÜBdZ&bzJè¬Râ Š·ÂôÆÎ(à:r#ðØÚG‹ Âù ¡Þåî$ÝéHáFú=&wÕ%ùv‡Ç7P‡(TB=L`Îf“©Ëðª·Ð�AdÕA WÌ%>¦èD=L÷H42:±t ¹[/ƒŸi†<"d+uZ¼×aZŽ$)¡hV¤ç»Amz>%ë/ñ@>86�b²ÿ9é6~^ÃÓ>™Õ}5£ÿÚÖ¢�ùEÊž )zȨ�6œà–†Œ˜�íè7ÀBzɇ(ìO„W•¹òMkAÓ¡:Þ>àUšÎ}žåÞ_nÓß Ö:xET퀪?ÄÆZduÔ×O,l9 *àŽ»ã–˜e²ãN ÓLš‘•¡!a¢[Ã\ôŒ0Mk¯véž``£œŒ‰�Ê(5Ü48¥tcµ ¥Y&#`.ŠBTÍü}3ÝØ‹ØñV‹Z–U¬³xÊÇ Hþ>˜Þ•´š�Ë*ˆ}ŹTÎŒM²“TçÎŽ9WB¿~q”�餒¤(Ä—T!®¡0˜nmý$Uó$)0]l ßÍïÝZ!ûbr‰ÀG6ÀùÀ·ú˜VºæIÄj¦ÆµK ŸèúT“ŒŠ'5ñêS¾öâþ‡lšL°ë†*$µ#3eô~ÉŠ,œ \“�’ÇŒ§$0©ÏÎD?Çñ»_74~Ž[ù’uƒ/¶FÙ™M…Ìçiü9| ^žcÐømo GcŒä"äˆtÚn +F‡)£Ó“¼©+.Ë$ľp e¾£MiØ7PcÏAñuGz³,æùŠÕ=”§vŒ"á?éV¤ô#Ï'qÓóå&ó»t:B«‘¶;Ÿ€Ú[´ƒ»\ûHëæ’¥ØËÒí`Èé³}"l2¼Ô�źÕñQå)|÷C³'ËâðÖ÷ŒïL ÒP†�À [É@Αw0Ê®ÆD麀‚•»ÁÖ²D¦CØÙIï6 nç¢ü6Öö¦â%¥)²I­¨\‡þì,ÚÜ!‹Uò–.}‹ra.êŠj�>ïŸáǹÊJIT5£~P”½ÂÁ°l—„OG£5Ú 0lViLcº’z«’]©ô0sïtž,ƒ3}�ï†NXaëÅ;\£ƒAŠêª´¯ó 3Þÿh/ u×e6é‰m!˧ Ë•ˆ³f7xË1%Ü…h)ÀhæH`ß»0n|‰U4•V¶ÄØPÎÀÄß�/ÛÖsÔŸ§ @¸ó_c²ÑXç‹}&•+ò¥°cI±ßü¶r9j¥RDÀ&…ÐDü´yi€Ê›‡d¤JûÈmmH³ì[N›Ê•B»6á³›­’ÿë®a!Ô_ÈH7Ã>cz÷פ€T�ôûÁ±±G5hà¤üGµ7F©˜t‰9-òå-4Ðb�=ZW䯗ô÷.ú®å�ÊBrÂ,º³ãÝ5R‡g»K÷ØuùU"9¯œqˬC$�¹þôéˆóüäÐ :]Ö+|’#Bˆ’s©ðØOÜç_a„±šoA5(½ °úÀÈØnxl‚t{ REº¾PÝb~#jÑ·¬Y¸Å%‹CÊšS´r+@^¤Ä›Çžç«¥�[ÎÊîe¢±†®9ÖÄô ku¸™c/"Ó�j0Ò[–ÞGO!|ÃÒʃ;¸ F™Â2»´ÝŸþKBbdèÊJï` ˆ•Dšð ùD‹×ðê?ñßVÖ[¦¥"J0…’]ªneÀ)€.QS)]�‚xµÌ8³°×±;d‘Ʀ-®ÿ6ßä +©²b#XgŸ% ùtÍH”?c¼°îº¾·»¼áƒD8H‚¥'wp2MÜ)Àð`•P$¶áR¹få4n¬¯�ˆ²ŒØT¸þÇ9ÛŸ‘f&œh4 pþ­ØNèìáÊ‚ï­RúxØà©c�ˆ8lk(’�›¶þªF9‰0’Ü—~ÁYÙø†’>êFbüpðJ—žö- Ô[“ªê©5)Ñrr°—©Iê›ät•æGR‡Œ^%SÃî³YÆÙQܦôÌÀ'NSëóGÂ`Ûj¿ ÷2v>GòF!‡KAHÊR/ÀT°døýþRË[xÜôÚ/Å%9˜Tê]P”ÿâ†zõ�rr«eRI…/•VÖ¨ë¥*Cqå:·¼TÚ6Ü+ôr=«ŽÈšœXd2¦hÁÀ.•Û]ÖDu]jºû ¿¼ }1Wi6¥Ë¹ó»à³!D—Ú-:whÉ0¹ÔµÑŽÀø@dnŽŠ¬\ª·ð àËÃL?¨ˆz_ú�µ¼y3 H8µQ¦å›‚|±¤°ñä6+r䶃À^JŒùPzx²=e0(DÚZ…a.½'£<´ÚÀ�À‘kÍR¯%²‡Ð,K­ WRvü�9[½>´­XC|Ý<éC7�ËŒtg,�É÷+ѼR:xΗіÆðx·Ô±r0Ò¾íÐò›«}½z)Ûì L¶Ê±èv®;ŸnNlC_îÎçîy6æÐµ>¹ýÏà=+ 3j[ÔR)ò*ìS%êhÛQÒ®Øú wu;B@žÍrUfáÄT’…ôñ‹'Ʋ³×˜¢,Í%Ø'%x“ cUAD4½–±‰ ŽÕ�hääÝa °ÈVú4'h†,dô¦Xû#’¹Dq+LE©ÜòŶV_?X¶\%š„C0©H•Þ§® š[9~· /¬Äqh®oð*±ÙôPB³`pÝ�ïanÌÿ(B±—2§`ˆŒuå©¥ëÈàÓÏÄU¿‰¥(„Ûð*Ç�¥³hîö­…¨Zmo9ûû& óúà,^7-=ºjM%;„VLÐã+ðÁÃABŸ†‘÷l˜ í‰ï•'è†`Ÿrªïñƒô8a¨)\æë%…œ—„+ļ«>=¿nP\ù¨ ‡ÄBcﵚy3R‘‡{¶$õ‰·=ži”0ß š�©Š·<]ŽîÜ�ê<Á`vP -ÁƒPt®z’ÈKÍPK_WæV=W‚1¼ÅŸggµMQ~ˆL§°ô z¢"æ¶%ŸVûô2¯öT€Q{_J£”ýäÁkêp0�õÕ~Ë̆+©"»6mÈI@˜<’ºÇSÕc×-îœÂUÇv¤écHß8£éð%ŸšÐ–�”Ä"&÷lh ©ä‰ Oø8ÿÞHïF? Lк¡;l:Öѹµ±5ÅYËÑa–îåÏ\‰t*Ñú m€=”¡C(&BÃê+ði‡ræßYªÓ5m7=f�oû±šÃô•�6‰ §¾â¥T¦Þò׈)ƒÄC‡åCBlªáXÅÌOx»£?iŠlÒ^¶-C�ÔO3ló¡Ç»¨<žû�ådÿ…?�`ºAqÂ(Ï�ÏOÄ9î8 »‹Ä–ïYéÀ·~ &:[Ü ³Ãçß9¬²Â‘³šÆAžp£ÐS˜ ÊU±Ìck^&˜ÔÃd˜ø“‘w[ÃQàÒKî^qiåÖÜ3Ê´R…Ym}ЖAÓ«°#å¡>gȈò˜Á%½ü?ÿý˜:þÖmò²ðÙ`ò¸†LfVòP_0¶*,ŸÌ’‘XóL|‰<È|•Ü…j„ßcÿãQߤàˆÈ'`‚àƒ]8HxXÚ�2úÄKvv<:¤5†.(qñe…áG¹Ãs¨3:B>i‹ÛD1¢ç·Š—� v €ÉOa‡BÁÆž o…êRâ›W~p?ëHf.!Õeü2/{iñ]&Èvôá1†oSw$¿`inD¢~‘exT L"=€0<¦ŸçÞátáñºIÚÿt¬�XÊ&º¦By’ðèPá�âð®eÖ.•f+|éà/~‰‚ÇæåJò(>³ÄŒ|x�Z <ÌË*¡�Çü©×ätÀ#DÔ¹Oƒ¿C£½A,Ø“^êPP¼sIˆW»=e®ú!D§M¯•EW)ÿd*Ê:TËf÷{ê!ºä¨0F¤f{¥;ZÊ�] 4S0â³CZº½5¹AOÔ‚Pæ‡èŠ‹”uê‘(c°�•‡;AÎàC7²?@am)¸Æ7ÎŽw:ÉN>øøc]¸:pÖ«]p­p]Thf_CW# fèØÚ•P‹ê¦¨€ËZ,`肊[JŽºi[@’‚¿�7ùjÌhì4JH±zß+ E~Qèî}-N �䙃1Ê�üE-E(®î×ÞÕ•‘Ž–„ؓ˄nˆ‰�m×RÒñÖƒH�«Š•>ÝôÒ‚ÎÇ@Aó ºßÇùmŶ¹’MWX²´$CÆCŽ>X ñÝ…�[å¥ìmHð»”A A—¼)†§ïOyö4/~™[Œ£°àáv:K…¯}Žó&ÒdŸK« ÔÃÏ4Å×Kå$ésÚÑŸ%ô¹ÚØ‚�Ï!m<Êø +êå×J0Áø\al*™À^†ueQ³l@ºßH*5S}Â|©iÏ…xX…E±çŽ·Úc�ë¹ajq¬žS¨?›R,õ\prÂwö§çn#Ë£‡Y³Y5•º$Ø»µôjy©àèªiX èåðØù @ããgn¾-V5MXtçFáÄaŸ¡ey5�ï™O–5x"ŽÔñþ‰x… Su.)yq` qEå7êœÒâ)N^‹éœIÑ2´l™ +°œg1!˜�(3¨ínT¡s!ìw‡”�Î)™”íœË�oÖ�h_=6ëT’V%�ŠŸ �sÎçM1€P™_‚êöworã™C�l'q¬?‡bÕ ΢vÊf«ÍZ¹û: Lý@…®íuyåݶòxbNR°³ˆ¹è±ó:è xTw}ýÜG¿÷«ö6~Mì4¹õ‰fÄœâ .‚­Ýûï:PLSà¯%ÐÚ°ö\?¿C×)W„'–ýs]�3×-”ëáûòìÄ0¹n<®qC®“=ƒ¬.%Çu¡J'í�(®3×f{ó„�¼7Lg¸vÆx'AŸd[8Ĩ?qÜPWö÷ ê¤ñ[AçcE…#$�xøÝ­“ £åQÿ·�ô´jIÆ�̱&ý’gÚ:Õ% L%˜]á™1 Ч{¨"uÓàMóîž6õ SFØ óÐ5š$¨µnš>éÀd­ bÝ�]Ae­ £Cf4LùO­Ó܉]XtÜpŠ•„ßi¸62é%‚o-cô:ŠiDNˆ�Ý¥­“;‡Öܵó^†'îÍ59¯»ÅÉdè„/–}P‘g1²n\‡f¼_•�uÅ䔤¬ªK¦ÖºÍóAB�âˆu¥!Ö1Iótÿ뀃Ž*|È£èÙVÕX!�Ðçd� D“‰,öaf!In"ÕÛâ]_¥89¯)Ý˾Ïõÿ(‘±HzËJ§ ),›üÿÛœ$iÄLÃs¿"™ò)]ÍÎèÄjuú¶Š&gë„…ìИÕéyýÜŽ &A™:� êß +ùæ Â-'Mkª7ªä9¦‘Í÷sðô�pŸÂˆ(’R$öRºÁ©ï6â–¡“´8GVdIÛ£)'a”Ьãrìzãfü©žŠË“^@hšTýh*Úº¬b¨B4Tm6 +–Ò¤qê%'ã}ˆ£°:Â9I“rÓ?™Ò,yP)ÝçÉX2‰»‹ˆ®ØZSSëðgB¨Fü…>жc]-Jé-kIzqÓpì:â³îcÀYçßÿ:ë ÄŸÒÙaÆŽ;•€Wå=Ú³I Í�<¥(Õ|™B6d¶„R˜u±Y�_ü™<¯„.t”øs.7nW +ñ+ñ’�Y*'•J?’`ø“�ܶ-ª¨Ž‚~!t%‹¶)±ÃÂì1 +øó ½žî?o÷V8éÄ=Xö~àixçýè³kqw?ëîkI¹í*Ùý@û}”Ös¸•wS„¥¹Þgh.îV,”Vµ�yƒ;^›ïö: endstream endobj 38 0 obj <>stream +n„J£u‡1Í9ÝЀšý˜eÕB;BÆdËý�­)¡Ÿ¼ögÑý,Gbþ­Ÿç“¥õ3¤0Êú¹µ|U¢Âú© 0D™OU?ÒúXø©~Ž×Q‹…ÔÏG;Çx?ý@ƒ8A3<îô#f–xC*ITúÙS,±ÂþèøÐi;€ž ˜j#ú�“·õùI `=£3PÕäÀéh²$xúµCƒ ^Çœ „ÀYó°Ïׇ\Oð”çs„œ¨P•b¢BœŸò?ï^~$$¦.–Ƀ£ª…0}¸–xÇe2ER~Kò. %?ðÙë� ÐKäaÔfæ†Iü,N?G¤Ps¹W>º9‰m¹SJ½Š|ãõkŸòrø(�Ò„õZAÎD˜büdûufîâg`Õ¢­ø‰"ãSw›S†ç1P§¹ÀÉ/´�2Ĩcàðs?õLZm ?Þæü—ÐðAš†Æ‚sjF á'–Ü>È?‹ãMýxï©аї8Ñç!]èÍäA"ð“àšâó#¿Oô= ÿ=¢L¿ïs‹•9ŽYU «7«•RBò}v=g¥Ü…{Ÿ<Æ›xÙû\i°ª¤ë}Fç‘¡„ã¼ cÑ2 j§rˆ/.,Óë6S¸îŠ ¾ÔFêß}"�ê?6.€t µ4~ÝB¨™+6IÜ�L¶å>ñO- wðæt—ûwP¢™¶ä>€²Bxφô»ÆÎ0ˆ¦ÆÔøB˜Ÿ’“Ž;$\«ÂµM댟¶ÿJ�GÚ²ËÚšöˆrµRúÀÖ™¬ºßÐOxz�‘ßÞãº3;ß/m,�N 6‚#+Qx¦3ÛTòËõŸá*Ñ¡(h·C#¹¢„(úÕJúAÍÑ)Ñå‚À4¹r0æ0P^²ö» ä}��@ŽÏªfdnA ­Uo€ +ß½á�1Œ �à£�b¾ºí ©Ê`}ƒ}gø@Œñnn;C�ï#†;c>Á—RK˜W¨¸‡ °¯¢äQeÄ ó^‡žg–ͦ`ØÂ3�Í“âxfò{½þ÷w&ÑyÏH‰Ћ÷h{^ `X=¨Ô(rŸíÎ\R(J:|Òì¥@Ù0I:ÀÿÎ8ºg4çô½Ð»�ág2C÷ Ôž�ÒÝm LÏÀ>%C6ôL«ù³‡¾gì)Ø�šã~&Ýyyƒ!ò3 ¤‰=|ý&?šÌ{%.ƒ×f ¥?û[üûÌ×nvåõ™­äNÄÞ‘ËᇠÓg*ž!]Tó:’ >úÒgZÝ>ÏKV,“9a + æ…•dÀ+E t#�‹FêÐVÐ šÜZS%À¯îÞ2íl C¢Ad„&øÎPhx&€}…›.=ŽBóù¸‰@‘86Hš§ + `wãÐtC ¦:“¢™ÃìY4}P�…ØkÂ6ÉË&™Y^g›ðžtOzý�ì�¡j?QTÍ31´Y2Ë©Úÿek(¨™ØLƒ'€‡ÑÑ4=?ÅBÑ+xZSûϼðÂoÜÿaFKî^Äù‰!� ä#ÞFF�åIï Œ+‚^yÒX¿“´øáwF⓵ÓR¡«8šB–t·7yh�TFê‡Îfu´ ‚ò¤ù0÷±ÐÿßäIs[eê�ú¹œš—M<°Úaê>|b¿jëjýKj¹ÀÆZ‰…Ò;€6 þà�$ªßgŸ“¥D²÷\&“‹˜3@b=’:"ØàÃ%³hxÒTö;å)êjÅC‘Ñ=¸g`Ô‹†2$™ÜÒ8U #ócÀ÷¡è®6`‰«¢R�¿Vä?úކ»9±#ã1B[¦DN÷øV•? ·}–{} e-Éÿ—¾hõ>g¯d眙�’ÎoÑ©ôp²ì(Ò‹Ö·`ÇÞI›b>ûòsïȉ¼“Ö-�@Ë7$~{uõ;ïNšÀÞÂ_Alfÿ¡ +äŒcr)´’€ò£§§è!äR„eÐê?•vÒ|ºé½¼ƒª“<èfrM°Oç+úU%"4Χ՚·6s¬eu™ATý¤aNõUÊÃPã�à!#�°öÍ€„øócŠ Ì4IÀŽ¥häZW–O•ÅSdáDx4l;ƒù–©Ý‰fó«¿ÛÌu²NºM-·ÜUŠöä‘#Pöã¡ÚQ*ÅõÎÝ[S³óóy/o}NºŒîgö‰V¯qB¸ÿ+k)ºË{‡‚}:_gÑ$†Sð@%š»lÔ\3ÅŽ*Ô�²><[`@SSI Þ“Ž¤,À1YT@KkΜG=y”]N• ";�šÎêÔ®Râši,6f~¸Ù┾\vQŸΨ&> ¦"tMÄíÈ«N>kMì´cŠ-a~!ù^’( +…jFÚb© + €ögÓÇoá—¤c6…֒ߪ°1ÆÁþpÒ|3_â1‡Õ»ÚÒCïQN¿­g�AO4ä(Ú¨ùŒ“æ®Fn›ˆ_£Xz‹®Ò”Ùw(GDUu¨/,ED•m)¬rE“\€?FlèFmÜPወ~2zY m¹ÂÀ�(½x�{µømÈ¿än›XpëÈ’‹\ö*ð8Ëæ;qyÜ¥Œ¢5¾xV‰§€!û‹q +7éL +Æ(÷†{1 íQ7U'Ì'mY œš¢…‰©TEo*J éXü}3Í ˆº~“6G‰«F +¦¾½B™ânNO¼ÝpV‚û}Ã1Í4ŒpuòekôäÕkBÖ2ìOrxpzäó–3›çhß›»�Y£r]y“æŒ)q"ø…fOôÛ´WÿºIW=:ª¹»•ã‚"-#Ùlu"ô!üŠ.As‡ Ĭ¬#èuÅ;Âp,‰?7é\Ýh¾ Më”å +s_ò©2+nÒ„AÐjÁ§{(Ù(ÒU·2àäámÒV²Šfİê6é"–™Ü&½üƒ…ÂÌŽ5ñÕ1@Öè}120 °Mš.k¶ˆ÷»t*ZžÓ‚‘°imÒ\ØÿŠ*œäj䨇ߺäT2Ú´êÈ᳤MZäv"‹ ŒUƒW¸œL8i3_ îÓŽwOWé_0L1ƒ‡ÁK1 ¼;Gf';ÜÝ@^údn±&Û QÁœ �—®ƒ£÷€ÌÞ$v°OcO–�¤õˆ1L£Ú�~»è)àH—¾B´œ¶À‚ +�²ynB´b%~Ì/‡ ®± ‘BF«Â¤{Õzº^özÐÜâ«ëÃò ëºB.›OÃ)GåãnÁÊA;Û@=èY*~› ƤÉäèh1­. – “ƒdÊ ,Mð;Ì.”ðŒ¸YF°™;Õ¥&½mV!_XBŽbã­s ë(P“xÛñ!Õ^uùÁÏr»ŒžÁÀKQË‘\µäQ(yš´ÅS ³�™TØsf¬tOîÎGéOÃrgÅ+ã`[9Y!¬£iÒ (ÑI~ÎÎFã0ó?;ëj>†£½5͉ü8Îksrˆö·ž+Ð/0n_è˜ÑAƒ÷LZ|2ÔÅÀ°æè\|� UÚ{øG-�2³ªe …‚£=‚Τ•?'AôôRtña ùð’3i!á_&ºx;C¦÷ÀÁéršhÎý ¢M‚"µ-•x9õÈD³7¸­üÍÆÜì;¿]] ÷É—[oWo&m�:â¥ÉîPƒ6eÛLZu´ïÁfÒ¤EŽD ×L­Ü©L +¡)3(?.Óô.ˆIñ²6K3“îKî±´YÁi·C ÇLºàS@J\ükйrß}”Ü ÇLºE«¢„ f°qF[§>y÷uVru�¯�þ³:Ý3Qñ2i£2 )Ù#†(�‚»@gÀ.2}‚>vE^M(%S@·çB-“át÷@¡W�|ºñZ�¹IŸ¤ÍT) �+J^±ÅõI5’­7úÍúËí> [Áò:´÷þ2¢/±´¤j™Q¸ —“_ ž'…ÔˆŽ‘ÝÞæEÉÏE±]Èð>‡cêª^õ“IßÎ ]íèÐ|â]Ûº•ôH Àí&c€†ÝMñ0O³">Ô•FÓ¡5OH?_]`‰â[(òAöùȤUâj%)F&Ý�4"™›!†C±¼¼%Dd¥gŠš‡Œ9´âjw£ý]¦„¼X ïÓ˜xU1Ì_�Ž�ÒEL “VKuí�søÇ¤e ¯ý +ߥ+…¬þV)‰åä•Wm„tI““濦=¥²cÒBÁ~ÁP@:& ¡Eø‘c›C.¯áœ„€á˜4‰úÖãØ @î‘bBo¶0é–)Íá:˜î—Go£$¸(ª<\ªÂYtøJ5óØ Þ7Ä™�Ò¤¼ürÛ©e¤•²Ö¾B¢¥\Šx£ÖoŒN>id}.½í�Ť“ëíÙ�bÒùl[ã°+Á�I«5wbÒkí�R¶’ØANz~„œKg¼ÇRRLJw„¨6­œòsðû‘æ|! +–v&iy'õþ;–å@�THæï:TÉ,"t­ †›vò°V[ø ³�³zL™äüMˆ_Ÿ �¨a#�·¶ÉiøgQ8€üwCc¨<ì·Jë²ÿu2±…– ZöŒæ¯a™+ÀÆY“q>víg¯¤Ã¬1…£ +¨Mv–ˆ‚�EÞ ®JúÓ4Õx¡aT%mûÒ°­¢§ˆµ¼å9^ª¤›ÀlŸ{›¥H®# ¨’F傆ÛD¯/Œz=ŠÊQ¿4ÄX¢�X”óB]†·Bs?¨ŽÝ«÷ÏF§G—™�àJ%mk…U8$•4ŠUÏ*HF*é¦ü´!}Â?1Óå™L.k.Õ åñÓŸ+¼”ô�°pŠ Ý²w mÍõ˜’¬ËèRҸǰø’›âñ®Ÿ^Ÿ‚¸�.tBà!á˜qw6þ�Oíz÷’ü +ý øÆ¿bUg[1o† ”�{ŸÑŒ…„\׊O§•¼ÑÍêX +Ke8hŸé +Jzl À««(ËÑtÚØ‡-Æu.AÈËÝa çpa›0,n�Ò— äg@ȆéÓ¿{KZ+ÐÖý³HΉi ¢õ_Ñ!`ý…�e"n–m¥Þ0 $¥*5f‹•ª±¿ÔRëùq‚lÕ8Ý‹�·+Kä�VÜ”IÂ_K—Õ^\$LÙLykàž…’†”aC\Ô„’.O­5•ÿH+Öׯ|±)²A®†¸¦-?.¼h^y×bÜ$ÍŠ–OG¶»9ŒY% Vkcáv1r•¡d�üà<ª¤Ù|Ú�°“ºê)!”Α.çÍì˜(¾¤kU8%!çž.„ÞŸ!Ê{’~Å¿U½,¤/aPAº63n¬ÐKy—jvf`)müº‡A7žæÂU„cËW¢¥¢�g“»<�±~ÆÿÏ–Ÿ”l¸›ÅÁ&û�¤sÅgB4FNÅ¡Û:Ë® |J2–LÊøÐ—Mx�¿}8 -L‚G‡Ka°LùŒÈs’î7}üF¸›¢ò"nxºÚ:œ¤OZ +ÿo’6¿,UãÕmd+×½h¾IÚ¯ál�ó¼Iº£y Îù »-A7I.€c|~± ª)LNk’¶Ÿ]!D5IÇS]‰ž„A³ä¶±ìÍ v›�ˆ�ž€‡]š¤•ŸÃ˜’Íî,K§;`!•ÿj{ø"�Ý€3Ï<ã0p©d¶© +û`Ñý䑘cE¿€ñ£:pÖ XÉcÖ]æ3EtÂÐ2E¨¡2IWKäjA3É$-…_鉄¤ebööhÜ.W +ÏMêv¨£Ù‰«²úãd +&i”³PºµßÑ�vF×~IÚýU˜‡Ø¢ù8XLzàŽ°,„¦ÞÎGjžÃ¹[—i³*ÂŒ“ Ð’qIºWÑÈù›@ÕŸ&4$[’ÁçiV¹ÁÍßOq9*!4„Ú3<Á +xÎ’tÓð傲œ­eñ¨в>ˆÃ GOúecA÷Á2I7iÞÅ`¯£»¦a¼/÷ò|œë®4ÜB%éÄ%§‹�öŠÃ¹ DçÞ‚rL#é²~°êÕt’u¨IIDi[ ²Óìšø[ÔÄHÙ %i«6VPîá¿'«F+û®ã»ÔBT£VÞ¤]ûžö 8¡{éÅ£Õíù\È Õð�‘¨!Õt UIÒ…æuøË{CV·t0 †r9šáó¤èµ63bEÿø;—)tã?ûÄ©i‘!D¦‚Wïø©ê¸�‚;:\ñÑ¡èQ~‚‘�•.’4¸¶gnþC$iñ-1¹D‘©•$j”J, ·6Ÿ¡µSs‚éâXõ§1Ø+Ïþ´GEÞ§ÒôåÀ� i#pœ ($ËÃ(›’µÌ¯¸ì¨­¹(¹kÝj€ûtã²Ç4ïÁ£>Cq­*C÷ÙnP¨túºŸæÌïØ4ßžIfÅn.¾U¶?�=è ë‰RÄÒO•17؃x ¶ªÃ4hÿS`Î�Ü�Š8’¶ÈËGdƒ#éRé|Æy½W`Öˆb/k_h”µC¤Ç—Ø~!ºø4&�ÅLvÃ!ºTæÛ“޵aúIñcbƶzW½Jæ4’†]C(°ÐHú StÓ‹æ u!†ÂãtÙ-#iÈc©wËÈHºEçy£àuõU©I®÷)�‚êõl¸*Z-®Rçÿæ•�a$]Jg´ö"’2ò½t™ÅHZÎËÜ#L²Ägû@ !õyeÂ2 ÌxïEÒMìjµHïó‘…ik‡Ïòs9¼´iWðî3”f–‚áÙ‡Ëóbüãçy}‰?H…ø•QM‘t"\ÝURO}Qrc7µ}©R$Ý�vC™¨*>½Â¼O­Äè= *»–%‰kÉxÀØu*yGó®°×㹞�Ïr–âCŽdO¦cÍFOn1K>Jó– +¨QnßÊHOà…E‘�DÏägÄJØ3Ì©a4R(÷ݧ%ƒ¯PyU¼²"iüË8¨Æ4?$�E5ÒÁvdýá’þMuÇÉÀ÷$wÉ š�lWHuÉiÐ×E�RTh×tBóE‘}@ôSý+'GÕ¢&&ª<¦¦l+’`£YR3Ç�è ïõ#$S¸ ÑP,uHZ·øwqðÒDDÄ tI¤§“†z=A=”6BÃ7 õ‘¬º™¨þVeð�ÏîìÌÚÒJæ<]€4$Ô6‚!ésB5h/$�”ŒH¨o7,‰ØècІ©Š—Sbе«À-þ�‰@`.МW¤}a<ÞÞ­ú”»Ìõ +Á}â[ÎÑ3ŸÑûôµöÞ¿7aÖor=ÊT{â|hËj  ñN2Õ ‰cŸŽ@h¨Ò a[>œ°�‘�GP3åií¸ÌûY2þä²."Üýy#×m¤ò\)Ì.v6Ú£¤¨ïjY|H-¢õ<¤Ç‘KnãÓòYömAQO?ÔŒ½Pm1—Q” ‹‚ü)ž޳W-úW䨹ür�tÙÁzѼAÒ°¼­mB-«HŒ ËçײjN¦|iüIC=¦+ÝM› ô–×!â„R—#.ˆ7¸šÃh%½�hUܧŽ–Î¡úh'ê.$Œ-â4œ­«ëX£|�;E¤FâÃËéoˆ,¯ÑCaÜsº‰S?Œ*�£¡sš? —Zzcè ÐVš*ÏÂ6¹óf· NL¢�øLÅ^ê"ýíH„\ÁÐ�ß?T#K–ð©9`øu„“¹�„‚î>X>ü™xTÇûóG›úDHló|‘èýyX‚êîþ5]Ýõé.í£1¡ŒzH°ÛãeÊèÂÖ3˜ª/Ã÷¥EýédUyñGQ>ñÅIó<™z�• ö#Ý*Ó¬P{ºû˜]ˆ�À�iDJíÕ Ró#Ý—@?oË�´¼7¯L6øg´«‚Éõ†(·y¢=8&l5 ̈ƒWMšûHg{t¬ üYÊNòê#­üѱXƒ%e3¯Véʬý–Zp—à”èn@ìÁHˆk¦9V‘äýè3²BHfN`&t)g“¸-ŠŸw'«ž’Èð‘îÓš§ö[B´}ú9\†™�†¸8¯¯B’Wu¿¿æ¼ÝäDj ËôxV™*¬¿13Ú¶ê;úä{°°‡ÓÛiÎ@–`–êQõR¬þÃB[q�.6' Òœe‚3oIZ¿�yvÞ�ô �E >PWÓ7Ø«BV¨ º¯ž-¨«'æ0¦cÿ¤ÊjžcE¶oõ‹ºk–RûçzãAi—Ü• Ä�" ’Æ•W…­˜šÒ#,óõÞpØpòoì‘Kƒ�'¾­”èO»qæA¡…Š`æ8.¹ïŠÒ¾¶Âê·A™q'[=À>.‘çZÙÌxüªßY»q©·ì‹p¤€éC£!‚Q² b>Èq8J@‰½ê·ž|<¡4^õ[š�O�l«~);í  ¨Vý2´šÐ©€Jpž;"m*[yXÚg4¡t÷�UÅ€çÂÚ€Ó‚&` Ý7»#dŒÛµ.¢h„êaL΂:“È@zùó +}•Gž’K0ä7®_¥K{$ÇÎ<“{>ïz·o©�ü-²÷ÌFÛPHЉY·É:¡�xmG¼Ì8âE¢ [!p¨`‡?¡úå©£DÕ/û¡óq�hïôéñ¢ÎƒÚ‰‚4_¤™ÌwöjD€å�¬SfíÒßܬXìøcÎW{½Ô{ŒV@—´V˜~«ùo“ŸÄ ¦~KË>׋ûß ìZÃøw !Ç7#òáô[é1‚Æ…T妱ëøÞËæjÿùŒî‘ûD}Óaì 4ðt½Ã…}⺰©î-ˆÐÁ¶ù'fyp»�²wð ’8ÊŠ¹"rg¨_Uëe�€—(#q”ÒȲ™ÄÕ@1êo?V‡ zeÓTÇ"=÷ñöL@5Õª“=UÆ:?÷a¨žµ€rgŸLx~å$›º\ï9´fÒÇ£>Voþ?Úc�軹ò=ðê·Œ”€½U&ü—,CZr_oñ.KébuJí;½Ka«¤œX�ÿ�C¨ðW×8[`’ÑÑR’¬.A:˜Ïøð¹Æ ³AÑH#è/<ór[¤…— M¾M|á—›6pŽáú*« J€ ¢@$�-Ò=ú¿¾¤Í>b“ÃMäzÓ#÷©È›ÙxéÈ(Ný×ÀŸ`�zt[‰Ê¡„½ç3ÿ99Çê<ô"�¾å'^¾V÷äF&À¾ßUc ˜M”!tðÜÅp(eÎÒcª#؃Ò¬?z˜[áåç~$@‰½ó|7Ùò(3@F.ñPÚM�Í霅FeëÄo·;º„“\à†Tݘկ¯D,Ò™Äí]ò +£ÚÜ�y}ô &_žbŒâ+ÒRµY¥t' ÌËH¬É+ÒÁc›…�Ì�ŠÜ«ÚÊÑh,¬¿µˆKû8±£#2rÏ@”ýņV«�8Ùž¦µ=wƒ®#@S¿Õ¦Z‘´JˆGþ=58“!FƒÏ„Ó3[�[¬Áˆ×*G!õ vKzðcb�ÛU ð=[… ­œöë¯q“‡¶’m…¨êØ6døAç*ÒƒœtÓÏg00.+â�ÚŽìGBÛís¿ì4±�CÛ„Çhï:Á¡þe“$ð.öš�ãfº¹—¬Ëííl7pc‘(\í%äD¢•^/l4°(JÞ»ÂYT >a¯H#–�$0î…¶Èbõ»W¡CfÅ»‡43ð$ÿâüøL�¦/4.‰ éª—Ã-«¬ ¯Ùs�1Wõ¥�mi!¼ìÙ©Ô()OBã,ÆÃZF +ᥠ\0êcÁ¢‡àB'Eé-.–JAqI7+4º½åVs�]pMÅ‹×ޱ»ñ™wî¹È?Ö‚.hÃ,!!zµZ #>ðk]i¦‹Øú–óð�!|…»Ä›Èî/¬2ß`89d/QâPúãŒ)Št]W<ùmYI—ë+Ds‰Q\V°à›ÏqNiH‡}+È,î9®°'ôåI+¤ÛOH‰¾ +…D?ô¹ªÀaàЕ +Rj¤Í&súÔ@öZ€):0a3Âw�Lvv`ÐoË5ãžË4©'#âæ‰ô_)N!µÂ Ñ./—6`©…�šËtûX«²àG¶°ØÈíV>k0 ½bŒ0ÆÁ5¸…¢;r³ ÇWr臨D¢Å{qrxˆŒ‹�H2Œâ$ž¤h\´‰t£š�Ã^ñ.:�ÌЧ‰´3»òM!ûÔYȰÖ;p4lj±p0Ÿ�›x!Àã(¬È:´ZkéœòJtÞgf†Û&fcÅd�@#ÿa)Ù8œ»›Ñ˜â=pWÂâ:<Þ<0‹9­½åІåŒä¦o� #Šßû_½n *Öä°T¡€9™Ð!@£M: +¬¦â‘Ø¿I¤mØŸ^GÝpF]ê”)¡5r’HÏbGá—`úfa¹@Ó’—ºHE7�Égf�ŽOæj{…Pî¹í&G­„&>Â#Š�=:ü‡ø�Lñ�ð²ðîÃ>øx¥)€0fl+;J¥Õç.9xtDZˆRçëÓàÛñ­ƒŸÏàoöœBmª¼ o$-¢¥ÎÚÁÖHc…è•_²$¹Š¯¦^Û!H³Á5>ôiDÚ®–ÚD»VVËfz«!VÆÚ�þ–©k`´ÁÕµù25�%-(ƒpß_ê’¤_žðøX +:ØØÄ6cî;õ5Ìg£'D=ˆ´Y–(È@fD£»ñ@ ¬ö‰RÛ�B+B¤çá¾aÄëùTÎkM%Â%Z0g¨dQSêXeþà‹{`�,LÃ)ƒH Ö÷%>° ÒzjÁ³°að/ë?é¢_Ü]›Â±—¼l¸¡©ëMtsuu±˜‡tŠ%ÀO”¼Øl—¨Tz†5WóMÓí÷ +év°"ÝÇ·/'ÞÝ “1RÚ‘÷=Pe‡ˆ3ba@¤]‰É‡„ǽÕû©K‚¦UÚíXÔÞ¨X®œÔ…¡(t¹Êü…·qÿ!m’>^¯ž·NØXZ$c·>¤A Œ»—JÍà'>RXvæ�è·%kT sÑì²ý'Äñ«½@“Qìíp•¹&|9ñ·¾ß4I9<ˆ­GNcà9ÉÇ„Â=lã®%ÉW TC`&\³‚~1¾Ÿ]ŸD&IUW鹋j²RJÁLU #DýhlG¨2¦…–tƒwÙAüØ­&ì!h­áP•BÈÃkc«bƒ“æ½CZVŸÜ&„7ÍsÜN8á™în+2=è­DØ/�0ï‰@ÐéûId/è'A²ø`Hf離à‡ˆ†L@�b½5‰H€`Dÿ^+Î.p�;d•/²%ìl$‹+áÇÐfóŒ:\g 4æûç�” +W›lL x˜ã‘è¹@ PII)Ó,ÈÕø‰Gß‚E~à·}V)<¹ûȨ`ûñƒRÇ 8½ªú0 % ‘0Tà¤Ýn˜4¤- +j›þD“ãdYIø>5¨f[Õ“¢ì�g­ˆeY¨2å¨&Þ4Žñ!ø ¸£#y +i‰¥ÊàK*í‹�ìZeZÔ‰®DÚiÁ¾!�„¤­Ù‚,[Gõ£/‘J&dmЄŠçúùDÌH{c~ª@ŽVÓñÓ%�‚uÓ2ÊîÅó…Zobö¡s~¢Ôh„–‚ ãÌ!’�o®iŠñüqn_tœoªŽ¥qŒ””ɺ`2êó«MàÇT©|œ�*¯§ �KiÚI þ7{³zò/[$§‰QÁ­ö;#Ëq 3š�é�$šm‚P‹s±»?Åâ:´XÖÔe�™Ddgm†|5Â&%„cBN@Å–•Ï»k#õÔ®%±!t#(Á„šh‹_ˆŽ%œªJ¾Ll<‘ 7×»ó«nÅìðMW\–�C‰Ò�iŒ—"�z2W±þ~iû„ ÿû&zãíTM°X<ñ'YBtð‘ˮ ôb[�vØ­î�ËœØSÚM3½Lìû?‚—{ìªÀY¦’`ÈQF`âå˜RK)e/«V¨u˘ÚÚõ䑺µ‚y™F†à¢ é××ôáâÁÓÁÎÈõ:i›™zŠ›7å™I‹UØ™�RM^~‚�ŸÇ9ÃΖ€‰0Ø2yÙ¼£^•£ëPð;ˆLÂ÷Íÿ@Á×k"e§Õ‘ó³I;5†>ƒ�žô�uÌ@U6£»$[�äH©#}@¬*MÑæ +·k)H’bÐa»ç%††‰¸rDíkW�ܨ #$9NÚBº_âlÀØ tÿq©r©�ý JúÉÚtÁ7Š[*ÒŒv´7Ì•d&.X�;)uҰʾ<$¡)re”FTp5Ä¿êBv¸¤‘qw¦á±”#]χkÉè�ì×°P©¬:EKøæwá7ûÉ’Õ5¥ÊÐÜÙ{|äÄë¤×}&ÕG#°Š.WT½¸1.‚=­òLß]–I¡éb®Øµ�P‡J펈+Öu0%ýðñé—Þ\ÝØ4NÑ.ÖIŠ\hxùiɱp`C ‹�YY ËS…(ô'kû%JˆPNþ +IG®É!ä21#nZòÄîPs|Ù|Šƒï©ö§= wfk�9Ò(ebâï[EŸ(S^jAæâp`Ð(è4iF²à7/Êá ®ÎäoÌú+jÜ­VÌ d(iŠJ0‚ò×Qçv ½³wNmçÞ ”/ÐÐuIþ”7âx� ¿&@%°<6|™}~öšÓ cî:܆ÍG.'¶íåOãåx´�6¸´~¢Ùöì+š˜yªäc[ØÀËn“ •˜ÌS«q#ç'|‹39XŠfë¶CÜ înûäùº½·±êwׯ¾M xƒ•2@nìÞxµ7…%T�ÿD7š¯�¡xŠ—ƒ¹§ø­•9‰¸¬~®O3/LM ë½ïdh% GŠoÇã&te— $#“nãVn>=æÉd;Û�Gî0_ÏÍë½îîìd°^'(9°k.Š6@Ëßs㸿ÌÜêìÕ77<¼Às«vÇeZ—xõ`½òn*�ܤŽù=á’"¤oƒòs{‰un{LnLu;�åö|I'·"ý¬Öc´ã…š€&åÝJ€?“ºŒäˆ•ÁÀ çÁ°—Ù2ÃMý¹÷�XQa™�þ¨ý¬úËö2_…6H½ d&›/fH ÝÞúy-Ý f\åR7öçž +­u“ J2dU·ÇÎ3#ôt+†ã¡ïuéÏs@�¨¡n°à?Azd¹A=)MxäƒttÏ4†™Ýªeðù´O°Pr2qì&@1”ÔºÉÖç5››ãý`µ["=̨na•#zÖ;ÜAFo¦}ú”[} ú;Ön<µJÜkyƇVRƒ^Ü + D|¡é AóœWKS©ÒMmï®Ɉ.? DÀþ¼êÜãiÓ#Ç4û+|3$AÆp+Qá£=Vx3W…-ÀÂräiZÞðÝP—Ý‹ ¯³½`È¢pÃ~™uyùÙE4¸Ð’J¿ŸKê"ËÀIx |Cÿ� †%3p8 °V©øP¬Â­y§¹­kGð +�æÕY¥Ð4íû‘Ê–À½Ò4Ž{Û©®ÝG™5�KYÊÚ £Èg8MÊçXyð4I¥ÐéâáÓ¤ßI²Ž¨wšIˆniÆôѦTš‹=©öÀïÇO¦|ܘQ¥á-g䯤ÅÇúåW rúȤâUP„3Þµ;º”Ó©´fc½¢ì¥™bM-æÒªÈBÂ�a»‡Âûl!tP5z]¿IS!Ë›&ë¶ìü74{Í;Ã×yÕ ¼JO�W„Úy¿]D‘�Òˆ�›3ß‹̇ó� BÕ ~FÂ1QW´òØ”öÞô—]�dšzVö²zD¿ÚsÝìeàê, E½a�‰2JÇI¥µ5¼@Ò_ú)ºîJ_RH}@eSiÞDWÒÎûvî^ö¶‘ê²N" ·lFâÑP‚1’ñXèc¶˜ L†$�§•ÏÂFKæ0ÄÝ ý·e-°ô¹¾s³Ö8 'FÓš.nio 2©4ì8šIS¡µ•`jáz†ì¶›EVìÑïS5†l½Ru>Ø)é^„¢:ŽKþr:D_ƒÎ® A…>à!0н§&H[ftk$(pþ„íWÄS¨`�“èN5L°Š–]7]Úšà£guXפ†ßM?‰xŽ8‡“ÉŒÛ÷Ma9£b=ŽÄâ7t6u¨]ô>âWgSŸ_ž0Š äp¨ÝòpJ}á1ÒAH(HÄ +—ÁkF¼C# ¾ÏÈ!§hLo,1I9Á+k!rÇY¿a<¿ZÊl '‚Ìý´ñ’iÞHNí+Oæû›*JÕà]qCQ@ÈŠØ]Ð2¶‚‡Ìjl;¡€�±ÊhÂá7Wß°r^äàñÔDÑÒó†³|íÏDŽÀ7mÒoú�UÀ¡ +2-D)buaϤ׆5{BéÒ×´bGXR¾b7 Ûè¸3 3›bßÐrªäÀ¢€&ù蟉¾ryYI÷vç¯)°ØJ¾ä3jJ—ª¡Ów½ç —d6™Hü€2A°:ì´ØÁ›ÚKÞ#‚ç!¬ò”—sùxº ³g¨â¥2þr]½‘$ùUTG±«/LP úáZb[ýÖèFr/.G6¶·3¦ÝÓë1˜Ð,f�b¸ ЈeÛ¬Á?ç8u—¸m?‚ŸÐÛûM6h³5ÃBC +н‰ÿJÀ†–4œFóÓ¥{µûìXÕ? l°{u¬ž5›îa73³S ©fäÞû²"tøŽ-�ŒÒë#záR:€iÝVŽdœ_uèlWÿ�ÊWn l¯ãiå¶çÙ:ÿ0%Ǫһv{pþZ“Ô)ñ.ùkoË-Y°ð9¿y˜C_s*˜þûŠ66¿�@ãøìNnOñÖ… ÑR_/u†C~ºèµ·¬j¿‘<…�†ðS³"I˜ýT ‰Ï˜GŽ ‡‚�ÌU8VQ£#a´Ø5ý£ÅR}sBä¶í2¤±„`â4or—‚|;…3 p8cµÌ úF¼Þ +5ì¹Ï…(áÿt^ÃÞÿÑÛ¶çÓ¸F”䌃<<_pï�QÒ:•„ÕjkíÑügähÿèbèô ûGcâd®yåAÍÉ�L 6³ØíÆd„Ø:bÀmÊ|Y'±OY{ÕTç²°öÖœµçTñÌw‘Êÿë1¿õ#38Ðé5`×?šn'Ó ;Ö71˜O�]Q&¾‘š™%#â2Ù½£–Ha¶¼þѽžè¡ñV½&èRð +~NodbÌÒ€ðÀ»ý$þÑTGÒ=ä$kýäã$üXbê:£dÒ´¦LÝɬ’t¾&«.7šŽŸâUÁ"öõê”#`p”�•LºÙîÁ}( ḧ¥!¼�¯‡Ë’µ[}|¡ú` û{§¡Êqe ìK”zq©öøõÈaß6C¤tr]CVïä’佺øRÐ9pýa�/¢á +Z| éüÎ5EQà«Ã³×-Pð¾{NœTfo0ÀWãÉÉnëfüÍ1˜]5 p·Óþ5×øH™&Á²IoSµ& �ŸqÁãÉ�²¸çÈ�–¼vÙXʺ8:utü;0±"©šÒÓ;&ÜU‰á‰`@Œ#”‡ŠšÎ�êÈ�zÄ)Šá s èÅ> …î�¸–Õô|ƒ)ûÚ´!ZÀt\Ôˆ +CT–ޝª’gä�B†�Xä#‹5GwîG÷Ûã/™€YðödáÆ�¿ÄÇ�8a£½fHGz¤fsHhñ]ð"NêI®|΂YäÝ ç6¢¹Ö+ 3è>„Út°ác™�q�¼škn Ôn•l~eì~¯þ›´çÿ­¦%3mO>œLAex‰ç̳o û©ädæ¹HÚÐÖx»¨ݘÔf ž�ëÒŽ8ÆëŒg&f@"Ô°=dË>@‹Ç5ïKšøì¡çÔsÄ×ÿ�”Q¬:I4 V�O‘ó…zvT²j]@\5\¬ÑjàÓf¼ +uj1²Øð:è +E"»nw¹£ž�õfçâÓ +Ômæ†ßt�yž¾Â噺ߣ_Ž%Á“p'Ì>‚g¼A2JNÐÊIŽ.1Zá8rd“¤F•�6°ÃŒPe)ÜÈØkDAø;�ɺ( +±5½¸Å`£È!OtйÑͦÏÐI!ÉøÑηXâHx§2ÏùBFÂ˭˲b4}ÃÛ·t~�Wµ¹Ü4ì�›Ã#bW`¤!áMR[Iݦ.n©JM¥ÁåçllÌ…»$ÌAo R=pq‚Š&3ñMž@èjΆ0»‡JD�ð³dúäÝ£ªÂ®e’èØVLl +œ"*Øht.4� TÎõý‡„DcÔÝ?’Ú‘þfyíNänƒ:ÞG×hG½²ôaŠUBÜÄÍÑ:øPÁÖc5Ï-�Ø�"Ç;�TËB ?žpd­k:VÿdôæÊûÙaLéRE®èN±ç°á/3'Þ“bCpäöѾv­ +>$d( +,B¡j'@#ëVâ I…O�àCð§Ñ¦¥OoA…ñŠ„¤À €ÊW¬ïV N—ƒ úß—�oŽdÓ2ð>Qu&ßc'Ô³ ^¼›Bˆ &uP�gIˆ 2Ê3Ÿ`Š]>v. ZzOéŒMó¯KoOÚµãjS0k÷�Ö~qEAÃñ�F xˆ @ðÛÕNv~æY’Ÿ§l­(ö§ÎîxßΡ~sLêpBÉ�]µ�†ØëHE|½´�æ–·äq¼SuãßßÊ{ÿÊÇ[õºh+ +|­ˆgKD€½øïS%\;R¬eeÖ`'*\ÎAC6�‰Ÿë†>šÒîâêÄþ~©&¹(ýØë -ñ àAõuùIï�ˆ�öƒAô.Mš`8’2üfkøå7ßzDÍGË”²5©ã•+Ÿuý+_çIìåa9%|MˆÐX»ö›¯GÔ„P>Ëú#‹Æ1ñ 7ÛÓÏÁ>©â¢È4Í(†Ã|n=Ù¾²³q‡!ÃÊ€ÐMz¾tº;õ’òmûTÙööêÄ"á±sF¾Ã;¡�P;þ|?¢Jcüo ÛÐÑoÎe…®Y€Sò7Có.ñøg’®Uh^#ßàð:¹n&ó‘økI¦Lð³M þGþ®O&—}¹ŽúD uö"Ž7Õ)u]8ß}Vÿþ$9�uKP[z�9× ëyܪJràÆØpa Ã3VäFÓ‚÷ëëà}Xn¶ªˆÄûG¡—£a>rÛþ$sˆ.&©ˆ$¦¦)tÆ=¢¢EÉu]îúÙevÒxüóìó7…J tÈ”W©H]\>eÅ´} Zà÷þv*3 { â”í}ª¬w)5†‡¦%�ç/�‘µQsŒY�J5¶TBbÄï7¶Î€6Ýaù¬‹ˆý)dN&ß$<0Ý…3Ÿ�:üåuMÜâ8Fðîtq¢BTj;=Ãŵ¡�mºôíâ¶¹ç6aý’.êKaP¼ôè¾|f(â£Ûü™¾¶×$¡¹� ]à~ »qÀÆh²w%{»Æ‚'>é¸2d�Â$ø-³YÑÜúuë-@ÆÃnCälé«ð¨wŨv-};aL*_^üCc9=¶ENj ã÷° #óä”M‹r»# +¦È@‘qN8ø×q™ª†”üûk�˱Í÷ÞºÐî ·•zŽÔÖkÇµç ˆò@%¸4Lîä…ÁÆÇˆ5úîž*à ÞgpŸ«·‚Ÿ™O�Á¬¬hà€Ò+Nœžý‘ÙàZ8¿hé9»n¤‚’øÇW˜Z줵¶Ñœ©ä'ÁyF…Ö‰àЃî}v%ã¹±ónÍÊ‘»©SÓ ¡¶”HÆÄ5'¶Øt°ôÉ_|í°£•¨3 Ü#Ý…N +Cð¹á£5Üþâ]Œ$Ú=Úüi< 1P�iôüÕ~ ´¸:P¡ÿ”%O¯UUJ°êG‡wôåÛÇݺñ`¶B6-/b Œ’£åκ +Áhk@—(}12 @–ñ«L lîѶ:Å@Õ4kI¸1ÿþ? ¡¨â»Æ«Œíì—Š&B K%£¬�”ÁãÑo "3\5éùbÂZé+ë°IY‹lYzŽ`{ÏÕàmV„ùàù‹Gðú…âz\ì-é|¹é?zäƒÍG¬�YíÑð4b/‡\v‚Q“¬ÔM 2™ë«ä©Ãx§øâ¿v¨ô )fâÚ£åÏ…¡¤zˆï�“cćÙê{Â\Ë*Dÿ€§±›;¡ý‚¦ÍìѤ# 5Yló¤çQM©åùïüø6ƒ"x=D·ÒÿßräL0)ÞÉ8²ÊM»ŠÞë7´åû£$\vRCCé«s3[n‹ºÇ£ó“”È +nµiñÚŽð¸NjÅÓ¾Þƒ«Ý1xå1’†;èÁ»'â�œ½çƒ>2�àø ­§‘~Ç=š1‚�ÖÅ9ˆç-›¯æè±â]4Ù�„äá�œH›\wÚ‰ªÉB —-kîÈ3fäRõbmŸ€]ã�º • ó°2ò)£#.ÍWgazz§(Â0š{ù^‚½8æ“]Q,A:A^—¯+TktñU´ŽÔƒ™Þ¶wn» ê>²›°�fŒ�McmE( \‘wR÷ ÅZþ°O1ŸÀ›ŸÜå³pCªÑ£»»Æb�eõ’ô¿þ‹Ì° ”äÅ)Oà?¸—ñ¿ZÜcX,¶0Ån‚A^>¶jdcüj¬Çë*�(2Öeˆ =!6 Š Øâæ#Md™Ë^^ÓîÚ- +Šñ™]!àUku�G±¡»…°Õ–|bÑ;�ë¼{KSS»àí+D}R…2À æðôIÍq/aQ0‹T›,THÕp‰,LµƒP>»ö´{ƒ¦Ün¿¬ë:Ṏ�‘W˜GÛx3ñ­åä@nT£Žï +–(鷳njZÞ½˜![‚Kf©)ÿHòèŸsÒ«P›aJ¼7ÅFY]”CÒª"2ÜØ,BpT-À-­Â_EœÛöNêI�Å2ÿ­¼- Ü•P/5¿™GÍA4TÀéàÀ¾º†@×:R&�¿PÊ“GǬ[«nA>­Y€,þtE`Jà¡�–fh-C¥‰'Z·›oИ­†ù1\nNƬ-E´B›$õŒ<Ú{Nq9[÷HxßÂj0ÖÂU¢Óoî,î+L6¨õ,C@+‡ùÑòIfO»Â õŒè¿ È´’užB�ejÏ‘¸ñfÂê+±SªÔ¦ÎáþÈ„(Âä›:ß2:’nלé³Â:Þ)¥5(À;º]øoRB€‚ÈrÕ´‚¯xÖßÒùFÚ">19ɉëÐíÚ1çóWJ{O§ÿÉd·:èvýçÚ[6¸Ç}.ÞìØF²pò;ÀD´šŠ¡Š�~¦i¢2¤~«)]ûúURžtR!Á›¢ªÅ“ªIÈïuK÷>&Â!}ÖF7:íèà¾v¼ÌšØIß3úœ€J¸¶%¿©âÇ‚+•€EÑ4®Ú2p *ŒÒ§Ä©c_¯<|mü¦&(Hg5�PÊ^xôÊËrº#4AH­Ò1PNÍ¢h üpy­j´È:>üƒ)âãWº{¼n6ãû<™j�|Ur÷· ¯ÍÕIòo/ Ø!žSnwø§-]'—�ty‰Œƒ²)vö·Ô[ˆÐ áÎ-‘ÑIšGnWtï­?ÐYí +X�r»FÄ“ÊQr»‹¤7Ý ¶8\»$ÚHDjü6»uð–Ue]ƒåÖ,ÂZ>á +›�G#–Ø’70ˆfw¤ˆÆíî½? îæ=:ä= †0Þç‡àÀ¤6 ‰r˜~À»[‚ðZûNM"º=ÙܣШÒùùDà™þOC\7U\s2ê¨2‰ˆ:½Ù˜¤Éß0½+D�n!RZên0�µy„‡Ž¢ü×õ[èr #’¡ÃÝ>o=¾£gˆM–„-Ün3� {çDâ?ÞÜøŸöŽæ³í´ºé3�AB¦�M‰×­¤�5Ä™w4™?3á“ÚÈ*¤àcB`ÚI&†TóûŸ­üm»C�YNf©´#'!‰;bOˆJµÈècNf­»/þ¶Û–]7¡¹Ö‰“WSIð ÞÜšY)?» yn2 +&5 ‘ˆBúµG»£MDýÐÑë¸ +¢ƒ¢|º»¥Ã” h.ÝJtgKh8 ÅÀÂ5EU2>ÿ9qö…=AÈŒ¬bee=Ë­VK�kocëP¯Tª R©å3]ÀõRÁ]ª™q.#U¬ª +è舯„ÊÊÌÌÌLΈÂš¡!ÒqH˜G9%(è¦f@×RùĨ‰ "¡ëõz½R…®½^¸�^WR1Î|-[»©M;½*›ášŽ©vÀ®gìá\™û³­Ù¶:}kQô€·í'«i¬«ˆµÎ‚;)[ìËL�­Ý.�©°¼8S!Ÿ{.Jþ¹znN¿%â"¥¾¬zu®jÝtâ¹®¶çÚâZ¿Ú€Èo4g£€J=ŸTÙÇó¿\.—ò>÷œ7ÿ“Ë寜?¢éT¢N m/¨”ª*ÎÌÇÆXäîÿïâ ˆˆEDD,"®[‰“N[bÍ `EÚR@ê33¢ŽÕ’ÜQ•Ú@KT"ª›ªk{¢ZíÌ^­«cµÚc•z¬ªÑK¸¢ŸÏçÓÁÀÌLji‘ô2à³{]ÌéßlÛìÿ~¿ßOV8¡ôÝôxÓ�šî¤“ö" +f³Y ÓÃ7Û4۶˶m›í»}¶ŒÉB„BñùÎc‘!9çÿ»:ÿù×»©iÛ¶­Á‰N7:�N§¿§ÓédAåÕ§êuuû¸ØíuúöúKvßÿxŒ Q™HøBvU$E´r@Fr¿_œT‰+CJbb…4V'™+X빑™š³�pÛRÛch;h†éwAWvUUU]KNv$Õ*A¢•N³Š‰ë ÕBc. ÍÉedu<Û›#‰`C�üÉ-—å"†%iþù|~™ÿóþùÅÛ¶�¶íuôóý§ ªQUEUÌŒÍÜØGpÜÃ÷nd#ãrRÊ Æ¦¤D.NEÄc3GCCrr2b(>!Iãçlæþ™Îô36f:4DCŒµ‚D@U¢“«ì8#VT‚*¢™0Öã±�ó&o4’4õ™ýhÆ/¸éó£¥¹¹»úÆîÄ]P×uýº]“ɶ³©6íºvM×u]6*“Id +¢š2ƒËfs©¸¨|nó€A �ÆR™*êAï€Q> +@K#ü“m?¶¼ ´äo“ˆÖ �Ó\ï‹(·Ÿ*YÎxA yÊ®O1y'Ë]úÀG®{ܾEä¶G&¡…ÇHÛ; +�Ð퉧ܾÔäëqàýh¡CY[ÕN“ö¡Ÿo0©}„]òû“ó8ÎÅA=qšÇé"ÝúËk‡8Ä +¹<·§§]»c�SyæNñü$=¹�c!êq¢)J¿èZéò8%§úÒfPxœÁ‚Y8±€»¾Ó㤟‡G0Â5�ÓÓò>¾ �òñ©Üã„]ÿe~>˜{œ(P›®xŸ3�³ÐÄ`iÆA¯(-––©N3¾Þ¢¹ùÐô8£gѧ�Äñ8�-¸%’âq®ÕBU†Ž²\Ðwò�认Ì;}‚8Ô:œŒj¸l ¥[4“,‹½F7(œZ6-YLCK(Ün +0‘ò�ÙúÈb!©[ϰh‡ÑÇÊB�% +Õ.å´hšH]0eMæyd÷fà[ô·Òl/Aî¢�eaŒèƒôD'KsÖ¡)îG%ddÈ¡×îb.ÿ4Sxgˆ�ßy³‹ÖbÂyÅÖËŽx{hÔx>ÄöµAïÿ^Ï¥|C‰PÿÀî‚ä*¬<á +ØžÙ·»ÀBÝNKI¶e) û([Úà.ÔQöÛ“Õ"É kÄTvv–A4!ÆÀ-ˆqÜÁÈx¯S!˜É¤›œ!>Ý+­ÏÜRÿ‚‹Meœ8�Žýû©"ù:1r ñÉ8ÈÕ/â!�üËñrˆC’íÖ1½õèñ‘'$žê�Èl©g“‰3ÿ"<ÄyÀ#]æ•b¨˜ƒ'Á'Ãù.G—ÊsèÀ„ÅÖŠ[¿@¥g|ÉÄ2Äa÷Žâþˆ¸™zŸfw¥ümþ•)h ÛkÍ ôÁù-»´ˆLtnn”Y›TœB:e5~z…wÁ1­hÙK)�Øð/ ¸x¨ÚÈ€+.Ö5ÂÜܶN$0i?Ù‘„îïÿñ?çïd4­þ¸ÁðE “™aÃsQÁ`éóù‚ª¬ÅÈ_r~?†8ªìŒl—QQÎ¥†²Azðrö~î—õx¥nˆãRkˆ`éƒp2[HÃ0Žò¡˜`)¤ÖPÆ;pŠÝC/È•ÒÄ’w…Ò ä5ôñâ–:[Y–,I¨¦áˆP{®1ø£q j˜;>Är•G͘ÆdY/U¿‰Í“°Ê¢#Fí61@ÞdûÖd¢vE.ËÉIW=Ïj ‡„´‹ +7îpê\! +å½Bì£Ì§M&§¼: �1PÏ7Ô††.}É€ž´B°8B4L´�Ђ@¢ÒUT¯á6àºJíé9Ò‰òéâD;=aÿ�‘›Œ°?0Ú ~É5yC1¿b>Ž·áT÷É+® ăê ¹:A6ÿkïÜØâ‚$b~é h’±xÀ|æÀ¨Ñô¦@PÁðiº‚ê\Xy�|"öÐx™1 ýưÍrd̹†àÜ=B¬0ªlH`~=úõ•µž"Z‘?j²”a•(Œç:9ëO|ÔÀ�¹`AÆbFr%�Àž¶¾Ô`-¡ŠY˜½{¬ÿ£"ù#-âc§!õ•N¿»ªZ:§ðƒê¦€@ M\qÁíÝQª½' éU�´ncîqm¨©+à ¿ç±Å'ÈïaXÛn<Þ1îqÑ)dClʪŠœÇW·è'Ja¢¢�S“Jh!JE§HÉz·;³ÐP,]*0¶0oÖ¹—Av ñ°TYîÐÐDkk3=´=@&®¨K‚*c̉mŽ!­¯­×»¥M‚wÌEUš†+xÿ¨S)ÌŽ±w1‹ ë@¬ÕڌМº‰ y˜9Y8’ÁÅŠ¤±FT�|çÖûeRÁ pZ�ϤÁk>bjÍz‰S«×€E…Óª…(Pt½`£v#*éìYR•]^1 +bvÓOA1ÖB²»‚…ŠFðºQ€éŠŒ-pî¨CtHèÅ5ëŸÓIW©¦�F�©Œó6‘æÂ�È6KÆ¥ùpd»£U»¦Êã>k©€õø÷m¿F&…–62áTm„ ²úMžU™÷<8îê÷~tjòœ¦Ný �à¨úNÁ‚I4ýØô{�æ=D%ÅÉø§ó¹Á?HÿNízÝ;½‡ë™¸%­Hˆ¡�§‚ÿ«!”8P*a$kF+VÂ@b@Æ +xÃŒ!JmÝ�Ì<ªé´WëGäh£çÎxñ}v´OÃÏ5(!2KsGÂN§šˆ +ÈÌÃwê¿Ë„“òÖ½ìò�ª!z]¸jtàBØÈF OØØó�RŠáƒá7^(ÈZ0mð¨;þ¤â�"Ç©SI¾Sž³ÿ�)“SRœ»·ÿÅŠ +•`¾åÌ&„ÜÙYA½vŽRŠÛ]ûêt”;*S5YÄ÷wÊ nâD%Žé@Ã>ª,¢…A#\ƒŒ; •t–hu¥Ïc*GÑap– ðÔcE� +y®g> l´cmSÎ2�—à$MosáE÷Ñ=‡l8c¶oQÇi7Ù\~áZ°Bsd÷oA}xïnâ¨CÁP¿¬óf0 žÇž%ñ·ï3ä\'tƒF¦”ÖÅ ~!—;øS˜¬×®ÁH‘C£µÒëE·IÿK‚uÕsõ5 [†L¡ÌÈõ˜,´ +Í÷�¿O ŽT‚´ì7Óü…‘Z‘¹yž|‡#ÇÈÌ`cÙ½Z²L-ŒzoV eiع3bµŽ�™:',žŽ Ђv:peB»>°Ð€Ä gÞÀ�ê­ÝÀwåU°8êOµeZE*âiþÌ/"Îå +_Ä00êÀ‡yôñ%^šÐˆ [õ‘�Aö™û~]œÒ–1JÌ—`ˆ[Yb†¼¢ÙÅ®£¼“öÎt„xJ,�ûÏ­,Ãò‡ä¦^�—Ùâ æcÐ qÙ%ØM�s]n?¦Š7bJÞŒ)�ÓNo1­x [B‘fù–†Êš°“C-–ñÞ"˜ß$@.Q˜$ÐФ@äCèlä/;†‡~‘�/Dµ)A'¿úe5/2¨ +þvøœMdºµ&sh�� »^â¿ðU#-šð•±j õž®1[êÃP�và¾c±²ºÌí)ÛÌí«QÑœ“¨…á.BJC.32* �Sa*G�ÆkôÀÙ�oìkBÅïKŸ¹‚)N ‘o—X·c¸6’oÙ�¼úñ«®(³H§ ßhã­¼ú!ú#!¤÷ÿ[M‘¦uµñžî!ò¸KdÛ¥Äcèè{ +Šn�A4€ŠiÂp¥Nßë^“8Ú%wÑ8W)­P¯>ˆT¦BJÇHKñ ³8ÎQµL}®�õ˜%â»W8P*ªdñÍée(Ö%0Àὤ:ûéÞÄ<�ÅöœMW¿¬|SÓaó™²ËY6£ôô¦�ŸHÖx° °7J·×±�o¹oYLu!š˜)i3»LÚˆ/U`ðÊ"Æ�ÍA‚´ÁqGº‘6±@zÚù¯”3¹aºO¿,¼´bŒ3;|(‰öYå´Tm]H—ÏÓ(=®-­u –ïÆŠKic/m�¤åõ©ÖþJBãqg&h"ú(È/÷Þµ^¨­ÌÅ9'Ú0u'.ÏZ� +«hp)ļ±³lƒÿUm~·�>7¾¦•ÔOzûþ0EdrÞSµ,ýS{ÈÝü¼{m�jzÈ‹>Ÿ¨v¬m)oÊ,BA”Up³å_:½Y�a'�¬•úŇà*.ÞÞ±NÚdh†0íÄ +�õ½ø¨†®J“¤!½�'NÂJÂâiɪtÊ©9OH:˜…Q‘ àØ(ø2T¤ÇÍ—¢G ¿E†¦xÍX©¥Q@¾wÜS.‚36½"/hø£Ç'‡>"ÃTŽRízxꇲn‰™`ChíUOeëy&‘F]£Ê™èLØ>«•žÉã_¿õ”}¾­½¨ÊEa;ß9;M´Ž b„'¶Æ6Ur“Sá¡GµÃ}ß½¸ F +ÕàÝ'^WÚ7SÁ æâ(,K^ +RºO3lÒ„Lˆ`…>þMµ…VU)¤kbÖ_YÓ�¸„æ$ÛföSkJa“Êq� +Ün€”P”‚ ò÷£®7bá¼ÐHÿ~YÓQÖÓËÈYoG‘΀Þ/Ÿ™‰J�è’‰*§{æºfk¼ìéÇûöo´K"°dn)Ô7vÙî '<.bJ¼ òâUM×¶TÙ¼0êNŒxò¿G²Âºk/ òWSà0Ío3¶‘Ûxm.lˆì¿™›,»¹1µŠ<ík¥¨EÕZ¾"©»M×x@œja>•:ùÞ”d¯ñ\™&Ðî^|gŒ[Æ~ +c¨ èC½ð‹— ˆ£J�·%£T°%p=ý ýr?t@) +À@Y9‰V©‘¸¹�V}îÍÂÐZoQkÕ'‚;µŠ…Œ"psÓÓß”P‹{!Z2cñ„é_‹ÿqLk+¿xS¾N}‚”–Cæ8—ÇSYø:`§qÉÉÇé*ý%ãf(‚ý�mL vèJ=M¨¶„…âuôï äâ„LNv¶øaA¾»Dœ÷ù“�žf$âó'«"ê:©™eâ®üo’Î~©¶Þ�ÇJí2æŽøs°‚]l=A±3êmFŒš�Ò,ø½ôÁô"¾‰rqçà…a +ÕyrÒÀD5I4ZÊI[ã'sKb@ý Hú¼šG á)DÕkv«!6VqF$!@Äá¢`¹‚ZÈheHœø´ˆ‡ˆlÒ«ËåLݨAšÛÿM®BIš³Fq†#gs²ì{|ÂeüQ$K<±Õô�DXºJ2¸QÞýâ¿*º�‹¶$êf³ ½.ÿ z¶uQÒàZ¾Wiض¥Ÿh0®úX­-Uû‘T�¶m"¹Í‡YI1‡Q„#øäí +�oÅÑhÝI€w¥’:fVŸCþá–- ÃMå‚€ñhØHøãX´wîWŠ}V±LT’9«AÈê¥9{Ì@¾=<ÑK$ ¾ Ö¸#žÏËä…»BÒÀôn©ú!‰»ÙWû¯”§\Ó%$qлÆáø°u.‚"` E]23ˆ9 M{ýØFL2z¥7(¢+*,*ú¿PáÈ-_¨™9Ò…ÙäØ%H|劊�éY:� d_ŠˆýÀt €‹DP¢%-T ¦Æf)O4pê iá@¡¨4†’ZwµfRë‘[⢕¾A¸�Ÿs®\öáÈÊÃ1r"·e$ ÂrÐd}QYâ‰Ñ @¿º²¤Ý÷Vhòû|&QyÚÜù 4DyXœ/e'öóSVáˆðam=H‰ 7‰2«àûó÷åÍ•G–œ´{ò 4 ~݉pd‰/‚ÍÞŸðI®pä|�D†öDo‰JœàªÛùf¨„Ëï¯]ÒÿYæ Êçç‹á�_sù€¡k�wQaÒeÇÅåAWýX­ÈX#¸ÛTàî¦hlî7MkðÐ8«E@¤…ÉWÉ�A  7cE!Àßøê¬aÒPŠÏ™ûÙ_ƒáàp—QàpyË ’g.¯qeCA9‰.ضŽÐOíP`øpߎÐ@Q!ñÄ(Bà o­J„u + 0‚ù4C€[är¡4—¯ÛòFüºÓŠ�îe +{.Ï1˜"Úl¤äòü`23ŒHÀvÑÅ$Ø á ,zz'" +] Ã~�Ö4¶˜|ȵV +«\CÿƒžB`郀ûî¯,ÎÁåEu°‘Ë+4òq�ŸË¶h —güCVäò{MÉ7úpU‡¥÷£ÍìÅCI*\¾cÈBmïZ7d¿¨Ic.ï­ŽÓü$4.TŠf„‰™³!H#Z¡?ÊH^vÃ-¿ƒV¾…ÕÈæÇ˧�΀<ÀªWßn8£¸<5îú»ea�ËÃæY‘êàò›ëh +·`›’Ö8‚Ç'5¥íú,ˆ%àÐIZȬ(ëåÈjX\Í�,ó±â‡+�mDƒσ¶Q}YgØóML¾rhˆÚ`"œÆú0e}Ö‹Q B‹5õ5#! ”‹žú\Ùd©<Ÿ®<¨-—«¾¶¦Ša ‹¨¶×v…ñTvª…Ÿ)[T*×¢AÔ~"¨RøåË‚cLÄñ 0lµ–33ÔïÜR–ÆÇ!†àu ¡NÕ±àZÀGü¦f´…ú} ד´¬Aó‰Pp ⑱‘6 $bzVö0,jÆJX¢5MhÇž†ã;áÎwÕtµ£• $CÇhË"#4^?${f^àÀíÑ+xX 6Ö—Ò)§Õé:†YÉO¢Ö]W½b¿­Ð%!å(L2€ ,#6JjûÖ« �X £ô-¤,gYrÌBå@wcdB:±¾a Ä¡L®W»æ£„¾ó+ŠoJß医¡Cú˜1TÒ„n?:éëïȉU•-‘,l~á!Øÿ +ú^êÛ �‡‡1ʘâŸP Øôí h£É){ á7 …/§>yã8M^«?QxÑ÷jHŠïÉ +»“)&g‰/½&]De#HöD‚섵t“× ÌJu‡ó e8Ç2k ¹gX�v³¥+›ª–…N@Ð7ìiÕ}Å‹ªèûÌ^%;}·ŒM…‹‹Áé»ûuÔå ;ƒàj*FÑKjRFGÄlžóŒÝJÁȉ–Ú^©N.ÆŽr:2Ež&=}ƒAÜ]ðn$5‰F£ïK‰Þ}dð0Êï"ú–UHÚR£ÏV‘_Jß ¢àùõO¿87×Eã`î5Ò6ÌPÔ»3Œ_&ÌCß9ð)ÈÒTÙômîc™c%}ÔGÿ¢ö¹f„¾£æ.G…FêÇ켫*—ôÍåi§/ÆHâ Î=øô!ûS0§n&bj‰cº³È³ß x)Æl¤o.>&Á�5xŽ–~ü‡6ïÝç.è»Í5B?«ŽÊŸDªÍå2=¹W +�²*™Âu 4—(N¡u”l18˜ +óg"úž ¯ï-²çÜ+¿°aOï‚� ðF¢HÓwºÆ•‚¹!È*Öô}Þh4 k-mîŒ��Jr@ßÎwÿÃîcõÄÙín€PÈ¿ä¸iW´wô-F¿{Ê^$cˆ¨Á͈F3ï' Q#вþÕN©¬ +Sp–lùmdœåB”’ Bºoì±¾ +¿�_Á_4FIúâ  –ÃÏ6`LvÁ \ß&j§m´9šr­õ¡¤�Þ`&®**åèÖÝè9ÙÏòqŠJ4fg‰ŒJy;R»fHTâô˜,-héFܺð¹‹ówГiàY QÃT^ÁtTbäÙ<'$Áúmð4òU:“‘5¢CB•@Ò(ÅŠí¬}†. zóJ¬‰]ÍÔS‡L…Yy£hÈÁéÌÊRpä¤ñ0Q�ìœ ¼Ch|˨„º„6-îø‘¿ûÄ NÆ�QiXO̪݉]‰6“/?ƒwˆYjú š~ü¥ÀJ²ãA‹ýÏNûÈG²X«ø‘–'„¦k&¢’±±¹n0Ød)*}ÂÎþ¿Qé´FïÚ/ÖxP»v†îG-�Ô®‚ˆ?±ˆÉ|çº6#׈ªñàö~G ˆJ&¤»¼Zµ;,FSnr¶ä£�n„ÍýUéžžv�FÛRH¶8f…!óõ²‰>Æ­F%xëFLšŸRšÔý×tÙ|{¤ºñLñ@—¡èž‹Jé$�s†Ê(°eœÐÆ„#Q¤‚8*ÑoÕ–V0\f'F¥°iØÃ($„¸šB¹,âI¦ŸY€à¨ŒE&:\.n®ã™-•èE…¢ÐYü‰ŠJœ]sǾSxÝIT`f|J_ÃÐãŸù… zÁö…E"âiêZ(iÒÐMþøÂv5‡Q\Œ.W>ªzüddz„›a‰¢*¦!Sg ˜¹>îC"*m¢R�b ÈEnEóŒÛÚÌçüÇ^Ú2ù0¢‡Ï “5õÙQ–™¨Ì*gâÅ »áqÌ +�“�A¢#Ñ#Ž~EhäC:|¢<,Ý·Ÿw+„¹; xë‰-ºéæm™˜Â`¬Ôi=&ä˺Pôʇ3wßLêžtx)ZÐ+Åz/�1ê Jl£ÓÉV`.œ� ÖÉJhû ŸEóq$’¾r+Ëð‹¾´e +iÞ‘uêଦ¶h|¨.i{ æIdÈ ÞØ3ûo’sc÷Êv((W‡ûŸÇ�šG=”Zã”�¦Ì^Œâ ô¿¨f ¯—”e¶™!¿õNؤ&:¤ kqip‹Y9‹uFWX9þãNÿZ¢ gÐÕ�sr§ñ‡­u5Œð-|á< ³æÈeÀp±7skñ} 0À*ñc5бR$Ël�+ΕÒÕñˆw¡eŠ>§¬k1ÐäHu�ü¥Þ¨˜_ЋF)ñÝÔ0&yC\ã‹ÜP¢Ó-yŠf£)t²% žß–´Šüd?Ï6Žâ –l¶hTDiF ["³(Î4ƤíåëAZQˆ¼³:Šfçàq¤ksG¹EGõcÏF ]•}n[¢•M¦¸6ÉÞSÜ’=¡Bªå)ˆ±Ú’ÑöFV¦J¨3™^¯ch¸nð¶/óMÝßoQ#˜8S»n¿ÆÉQÑ•ð¯qøþ.i¯Qæ±½b\úï´çjÑÌk„ƒ+ßþ„™% º×¸vÀШõØÜ¿}ÈË‹Úa¢×¶ÏÓä:�äúfµ™˜Ü¤Wë/ZÐOELÏ ók¼Êœ~ñóðoì,ÃVŽ+‡»Œç5ZþŽŸh‡y�ŸÜŠÜrk|�^~©|à‹¯ÑLÎ�C 0Ö€%S\Cq/|NXäÆQ€¼½÷}ò]qä7éóQ‚èøm²÷›S+áûB�Sfà5–l¶a31úcG—¬™@{�B¿ýsÖÉ?pbÚ�a­àŠ×$“X¦{K.|´'cH| tÊ8Ý[zê—é¯qó>1 ¯±ˆSÂÕ³üézI ­5§xY¶¼Æ tÉÉš’鯑—ÇBÕoDÅk¬í—'T*iDâ´4Û×È{6'¾–Á}«$Ø—UÄ'r¥$ö5Ž.øy˜¦?Å*ý•Dº70Ú"¢YÓO nÌÉÝ­‚uÞkl�<w±ù¿F¬� }S†oWöò5úÄt9„¤Ž$ü9PÐ0ŘA’m2y°øŽ&�~ãèaXÜ Y¿5¸«L›{fr—tK ÔÔD–�Ñvafl Ðåx‹ãé?(l›—Ì�§+ŒˆsDŸõЧùw:fï±ö +žÊªiF9qê0å.pr"€VëŽ •<{EŸS+ZÆyNâ)0§Çù·69yÿžÈÓ„§oèc6„BOÓ¿²bµ�ê3Dàqpcâ‘H¡÷__sWq0K6„ZÚSiì&é:ˆÊd<5ñåÄ┄§å#I󈵷¬ÓÁrFöpnnøOcQn×##3ˆ‚󮀌är¾ejFÞÇáþeVÅSÇp«��2㱋#ªN[×€à)T¾±z³ÊI<åp*÷Üþ¬«æHEQ‚3ñt6×Ì{5'9%pk–QAî…̽µ{Æ_ZÛÚ,KYi‹q}šá¾îØÚÍŒ�‡´ZöÀ~Σ¨mK®“à|rXTå•�a5ö?]E¾¶F¬í øã‡\¬H�§ßqª4ØL€= ;¿e÷L¦Ñ£sæ6hYÞuåøú…©¼˜íf&‹°+nkë4)W1åbÖÇѯñÍe§,ãÔRqr–Ý+yñi×R×mÎrQæTŒÅ pGìØûÂéڵϤtwÆÓ‘²\,H·N(Ôhhhæ‚Xå,þãaØèM ±k­€Áõu_;â *HÐj *ÆÙ´¬÷Š‹x\–”o™Z�+‹û[|,ñÉŽ£ß.n!ŒçÈFÔ#A�ò&ø™µ®úöŽ>Êšúyΰ},ÿÞVJj€Ž�)e󗡆l>ª+6˜knÙQcéj�ÌË¥äïnËŒ’çâ:¬Úc½MèŠÃN„;´ßŠõ&·C‚»€šë;ÊŠ&‚GFdžéiwœdªû�Û(¡„¬É; Dï'Æg‘†@ßÊâb ‘õÆ»~VrÂ-N=p>û¨ìi'(‹â)Š Ùò6%ÐhÅ?qáÒ»ÊmKGVã}Ïpù°¶¥õ!ôSTšü «[wAœ¼o* #1µ’üá¾Üïb ®5WÑ£ØM^Ú¡F#X?iÏ. BFèò“ù2à°ÁèMÌ|Æ÷‚êäÑ+%4­ÈŒz¹[�Ýu¿¥Ø‡`TvÔTÁM°+ùññ +e7ÍoWû˜®um{xKi¤1 ñwŠ_¾ü96Øéó–hÅl_Ëžb9+Áéo"E$]Ç.Ë϶Q3À5 z7G2æ¡‚°2 Ðv�†ºÄ�ø6}ªÂl[íÎ%ð‰XÍõEæ‘* +%¤d&&*4I¦WOÝ÷D§<Ö¢GyÞ&2 +„ÎT ³çª�^]‡Y9$.*t1½'j ñ„XÕèÇVšD+p=ˆ|>™cÄOÅkÞ£¶öñ¡.úìåY@&BʪSo6œ–¦*‡H}átgùÆõšÁßpP-5ƒ{'ܽyëÄ� 2cW•êܽÀÖœüÓqAªË±êêFˆ4 ¢ˆ ÷%fÔ¿ÉÒ<åYAÙZ ’0<�¿i`GWk²^Zè$ͪsM˜UžÈû�$…Á¦ÉtŸJzKs(œb-Y_Ë�ÎN¶:÷—ÝqÆu=ò)µç3}±‘Œë,.©<µZO²BDèhŒ—b’.ŸŒtUSXÅJ{4Âà0K^:,Pù^´Ä õ?L˜|ÿo| EÑÓ¨].4�c‹¬êt÷¡;œ):Ž4ШPR†»pÜ`f¨‘àd +2W­n4ÆÂ­„ÁÂR‚3•3À/1hÏÈÆ°i3×LYÂìujØü8FžðJB  v¤Þ +¥ u/p#õnçtoò«Õ?iœhÏ×ôÀç­Æ“VŒRL ’"ð™m%vùB‡‹xÀ»­¹Á�§¢{“Níf_^RL埖§„�üÙü¢EÚPºÒþÖÇ´¤ÿ9 C0 j’%n¡�íFÁXë�Ô�Ž_�×h�EoŽÕ‹:�Z.€Ô7ƲÀ áˆ,æ×;âªKö>1\FlK?´@¤Í/FåÀ©ÑT·<Çܽ)¥Óí^ØI»åØy°ŠÓÐbC½{TãÂ%G«3òÞp%œ 0îÌ2úo²ò+Hpqs™W²ë´Õ“ªÑk�c‚!¨ô%ëåÌrô{‡@´`OÕAÄðìÉ(¼¾Ë¨͘Iɨ¾á™]�¤S©´Ëüã™ižÔh“Šbi +FV-ÃìkZŸÆ‘¨¤ýí*“€Ùz$�0üõG~5‡­ã‰Ó?Ý'àiBy„B ºgím½7%1vûr‚·IשfÇ\ß-µ¡Å*�ÿPöræBÅ¡F_/m%îËŠVáapÝ«vZŽXÆQ¬Íq_¹ÔGÚ‡%":ïÏбŽ'! �x<×êïe…~aññ—3iY´€?NE9Ç$å�‚¸“±úÚ”¡›Z hnTÿaeVäw>²t9Gæ¾³3PCÀÎÚã/¼êæ3¡ˆ‚À_´ž=“=ñ!ÃVÏ$Ï"…ßí=_£,hbXmÅ1&,j!ìL諵 � çé¬'Ü"g²Ç‚«×½ Y ®h2 ›8rïLJ¯ê’t•R¦ët°€ª9 É6`úËF&Ò›áçRhƪ;ªFçü<¼„õ™Äï=y{ŽQùQ¨Pןk#ƿֶx<UˆÖ.y=MÆ™à8ÌEHSeí2ýLLÉ%Ð>tgr Rû¿³�7EÕ½õ”žÁë¤íâ ô]V�X+¨ÁÇ©ZÁ8ÆfŠòÓá ¯u`ý’ÔCQVb¦M²^J¿üšÕLi:ôd::¢72ý¶æÒ0«L3ÇÍKy!ý\ÿ9-ßÈHtwü +$óš¶LÖÈÐqn\Ó +3”£¨A»^Íì�— +$`1Ø1Û°Çú�*�þÐݧ„r:¹ K?!´Í�˪IXˆàyÅÿ8ñ�Û¿=¸v÷û¼±§aɧƒû'yw~pÇÖãÔú–¡âש�ññá„, ä‘Ád} +bO �?Ht›É`a–Lr6�ßDÕzÕ‰›g¹ßϼšéf¥AõÖ­DVÀø¬ðrŠ"äÁC“ð�lŒßÿˆpA÷“¨ÇâÑ�&^&]hÄg?§d®âûÕĽ$�m‰Í³TÆ'㱪»Ö†´†“ÑüÍ‚VüÒ/„ÝZ¢a±Cl壈¤%1 †…%¯h°hD¨çWD¡ã¤ºþ¬ºÐo¤‚^Ëùa"VŽe>“Õ2=EH +±0“‘L3êryˆô@»·Cfž‚× ýT:Ô„þþŽñ‰ Û˜Àb*™y'ÔsL«hr%%CÓ!=ãïN¤h"¯‡|, aéà›pÇXî¿VÄ ®ä®éÐp7mŠ™ÅÌ"kçg)2 î)÷¬ Û|Ã,ó;€BࣗJ¢jq'²W?ó~l�{^Ì^ǃ1V +¾“rõߤhôY+6˜¼Âä)5»ºÓù Û'­,H7zö£]ß°˜û‚´€»�ôK–kH3.檚dÎ"XÙ+c�zõ6‚Ö¶²Et$ +ÐKcý€†'ÔæD¤`Éaþú—ˆ—…qxºää-NׄjM~RiÀ׳cæZXúHV“UÉlƒ¢Ûnɺ@3`¿¢­�öƒëÃDj1I€ È24TºÐ™ÒÛÎEp;ÀñSi[^[œ$ª17M×õ*\�Lø9‡JZ€M-¼~ÇERª�PqÌ.¡G‚×¢Cö�ôÄúºKñ<¿ñI©Û[íØp\Ù çÇÐà5Ãý ÓúØ + +‰ä5î#Ó'FÒýGk?-±DÄÊÉ,Ü +8Â^šHƒ�ÍD)ùÓØX¿3Ÿfæ}˜A8E üÜ7ìã˧ô°é‰‹£4ïÅj‚-Ë]}Òô—E·dìÑV'Ù$%‹OLOÓÙK!î¸PÚ‹�Á»ç‘ + ãà6U«ê… BpŲyìéÅ$6—£Ò–ÒÍ<.“+¦3ë3áCI`>bk$hK±ó�*�¿ŠÈ…NsÁõ®€ZYË;Òàæ»M“©„µœXpfÖô,H'Ò|q#[mÇ(žp‘þ­å8øµÛÊJX[¼\ÙI™Ó¿ptªwš£]�vÐ΃† QÍÖ”§ôM:RmÑÉ͆h©Èôflëã³m½Sµ^´u¼�D\ªnÌN=äýîvh(ªF�ÐG *¤±×SE4ǘ$Ý#…@1™ ÇG‹Ý|8‡&š;¢»Ò üwz"÷ Z©éÆY€ 6Ž8KÝGt·;ÇôåK“PÝ€›Ct©—JPr”"¶ç°ÞÇŠ õ:WÂyh©¯Ôï"²á$f :ÑtÿÂí„4¼¨ e(pÒW�¿¸ÔN_“2„I¨Hðú½�Šy…;Ü:Ì,Z” ñ͈¯1É +@ñ/дLbÎâœ`/:C¥"0*ð–_דï=x t6®Æˆ„viÚŒC›ý¯\”Ìójÿ鑊¯Œ4�ÜO)ŒÃË÷nµò#4§¬«•Fä¾Áwì¢=3ˆZSúGˆ2+ w"‰§JA´öœææ¡”Dž|Q+Áð.Äà͹=ù­Sµœá|1 ȲÁ²ÀЊ®£/Ý0ã¶Ä£ªÄŠ›u†&"Fã†:ø�DY_¤i"¢=œ�•ˆÂv¸‰Ü§ˆ¼Ø;:!Q›{ýú"¢�ȘôK„œïVôNÔàã^{B‰«‘"½ t\, r%Ma¦×sÊ'À‚º8ÒD2‘%;ëW[#Kˆ¬p$IJý¤ì�–¬p©›M¿_ÓÜ‘`p;&íÓ“!¶K+n´QÖs¶yÁõQö’�È ˜±q+ÀŒ‘® ‘rªÞC >Í�”#Õ¢ÝDr4Cš+Lõ9dÈ<ã¬;Ad~õ`G£cu^wxê¾²Ø + +ȧ£Ÿ ¯9,Øñ‰µ Æ'9‚€ƒ�ôGØ-·‹4£•�¹F8Zf|yËuá�Ü�ËH]E`Í¡¯>j …ן›i{±¬=Í®Äg¼5íiÉ�2 eªFüƒ¯tzLÇ�9’5¢Ý0rzéÿª¬5_}�C¨¢4€ ˆAVêÃU±›@Òvïv"^ÊW«¹ÆìÍ%©ðÇìŬfá‹I¿ò¦kÝvÆÓér¬ÑUÏ;‹ƒ× h؈­5²~ZeŠüm€Ãi]²[q�¨`¾,&˜‚1 N@¦É9jžó…¬³{’?XŸ€‚OŽaKµ}ïf^"@�½FOÝ2�ÝýáLYÇ�>UÌíèÑ¥;Rö�dÖ¼)ªI_ñ/ô:Jò¹‚�5oÉ Tf+ƒx¶õaù,œ-Û7´ß&"ã‚lËÍã0X‚ÁY&‡™9ô`´#J)Yýª%H­óˆö®E‡¯ +<õ­ œA“MšÓWžrRl;„Ïʽð�CVû*D ‘oB.aú{vì¡í�E6¶´BBC�=¼ª5^ Ã%(täõØa�`úY7¬õöCŒçÙ \¸äï�eZ8ÉûIWÎÃñiì àô]ËÛÎÙ ³e…Û�,˜ÕòðbñÒdƒ¼“’M],¥(Ë/¸ç~áxY4+Wû#ȧ‚åLª7äÔá)>±Ê±MÕzÊM�6F5k”›“!á·ùåHÝ#“.ŸÙ„çKaJ1´ /btÅP dÃ0–ùY³Ô,%Ô8{ŒÛÓ#)!œ:��܃`òx‰ˆc¯çWýé~”:¤•¼œ™‹Ì ÿ6¯%~Ø¥ÒÞ%aQ°9àŸ&‹CV&�by-Ež:¬…¡Â�°ÊˆÑãêcé8Qí�ïc­N» ÒSaø–Û (¾Ë´±Â–;¯Ø`¬¦ƒ(‘ó=°:¤�º”ÏÕýó‰6ú�ÀrEËê�dMçaG}ìî v϶˜)Ï´��{çAêë†4ˆÖ-IôôTovC› 䘕Ar‹áÕ <ÓL·iÙ5 «™=yEL̶Y�eg‘È,뛘*š¦h7+tkãBlz¸ä (‰ðr#;äÊ$ò4Ë‹ù­ÎfÀ,Àt}œMkLqøº$²ÒeÚZÀ—bZdGCR&™E¯;Vc;Çâ;{šzQe¡Æ¨.IE×�Ê�Ø�…Ÿ“bC�Lz)Ê·”7� Ë`Ü‚e3`VËWox Ë5�Æ�ÎC¶üT`¥ƒq›C>¥¸üÇxþ b>Vt99·úyw´õœÒ%ÕÞÜêYÔ•{ÈkÓ/c©%ÝiGÃUzã} +1Y†�l Œ¤èÏK"R|ö$˜âÿgáÈï©l±ã»,´.žPàÍÐÈ\²Œ´…¶Ùž]Ãè’3B G_q8=žÖÊî¨JYXu"(˜æ�Dq°%lXñDkwè`êid’ç]¯ p¿ UBd¶”¿D’½¬;˜·¸'ÙЀ:œ”|¿HI&ãÔž¤"u³¿^ì‘D5Ì@’�h–P~ŽÄ¡ +ÎÔDè¡Jê#t1õN,㊉ës‚‘å†nbU?{–V-c¸•;L%ß P$­jáæÂ.HY<á>oš¢F¡�„!Ç’ël¢µ"2‡Ï¾ò-ɨ8˜®Æ d�àçaY‹æÂ§šíSó@²Æ;^¡õ±Žÿ¦ÆâŒŠg¯,ï•vœ#Zj©fg ϯ-y´d’Ͱ- hg J,‹†áyϤϚˆ½Š6¸{�øR�í<ˆN^iä8Ü•uœv(1áîuÐâüvÏf�­“„Û˜‡Â�mnî@Ì0“îmšï©ç]XHiÊLž¥cw«Ú9±þ¹d±úÕÆ$¹¾^¾¸làBBÅc££ƒ.0Ç­*‚Îôl˜èq»Dò{ØP¹¬BÄ xð @êA¹Eµ\A^“Øi©ƒ)ê‰ÞÔ€NBˆ& o£):WÙPÄöžŠßºž˜®dm`!U7�òŽ{S&9Û�!€$É?ÖáLÌÌ�·Ýõhxzo.}om`À9g³kq®*!xâi�uìØ)&fÑpÈ °€Â;&lCˆr„¾±ß•T«5C‰˜ð¾1Yý+ó¶¢?&Qà½ÌžGQS—ßæéX2ZNˆyŽ~~U‡‰¸ß§¹¬‚ì�uGsö°Ñ©È¤;‘èèGtñK qz/&Ýßò‹Ùõ`™h’g›ÛT­6( ¢ ãšßkÆeýSr!ÄI°Þt5솲…Ld¤~áL¦”‚hŒêt¹ ÆèöœE£<¢=£ha®ÀgÔò°:—2  ‡f%ÙÅk¤ÐJÃF HVÇ¡&uÓ̉ú±ë‹ 2 Ã"¸˜BÌøCÀÒD­´¹¢AéôñM}edi› ovœ‡C�9`øÎ´é*¼Ý‡<ó°=ÎwßtÍΩH-ô!ÈIçju¢%‰ÔwQ7B^ÏB¡©à~§p�…ýâ+¦‡028’V/cR²Ñ‰S�Y臔;ž·Å»DEë•MktQÔa&öh|/‘Ô÷\ú¸° ÂQí2¢Ø3¯L_ï �®úô¨T–ÜêƒÃw˜Óæ« 78j§°ŸÖ9<¤ó¶cã(¿häÉ¥H2!@Å{ðÓM¾ØtJ7WŒ¦[ö?‰6쨒®ÇqábJÂ$É,¦×7Þál!ã%S~ôm4QéérrŽ"æË€×h_ÔYf¸« kZ¯F/ÑEa¶�…6ÍY?«�m(Î(›FÞN]LŒ'ôì¯CrêjX *.l(`.Š…/ ›“içY²}gæ@î{gôÒAw¤M²óªyÏÜ)f¹¦::qð]dSö£m‚Ÿ±|f¦ûèrrµdFä4úË + Ib²áÁ,)P™õo!!¬"%ÅZŒñ%¦‚U»Š¶…�Å"2¡SFûlé.�È0–ÄK‡© ­»RJ#‰í¿-ªÅ©GÎ1'ßå¾}·„½Òd0”½J ©÷ƒï ¡kÇõ=™Õ�÷�^ÆbÒ˜1ôLsAâO=ý1&Ú‚1†°§NdãØO3vv0#_�¸º¡‹™ÿòŽÇ¯�÷=î5ª0HoTtjæI{ŽÊr(•Þ(ƒ¾Ú I8£Qñ¿¿Zµ:J�½lÝÒëÙ(5‹ø¾¸šQšñà3�‚Q6,§›Õ!ACž{Q9�“†ìsÉÜPm31XOÝgrĽäÖõüªçeýžH6\T¡öÊ z¯�%V•‘£œN@¿d5s¡{P ¨V86¦ñ¤ ÍÂÀ²Ç¤f6Ê­~WZÜI™Å�lûà^o³ýhwLX"'Y–âÛ0<ñcùY aØ—�©ø/o �†„òt‰èΈ¢E —Rä$DE ‘1ô ’$¥‚#V\0Þö)ÂàÂÖš>¶c.å’­ñ'÷Ç<.ö|žÕ5î9ùOcóD,îÛêN¤¶ED�„σīٟès†#|?,-’A‹3œÌéàÉßLE†ÄÙÅ#Žp“í0˜NŸÖ¯ŽÆzÑÐ6¾†7+�Ç ü€ÿÖ`YÂQz˜aÏIŽ�ëØóS㺊Q,Ù¥oD0‹¸p� â–©p%^°×�Ò‘ù›T8ï?(ìW�wZhŽ ƒ©†˜’¹”ÀºY&D±óf-¿ÊRs¾kYè¤JeÈ2.“ŠAÕMfo Ø +wã=ɘ‹ ³¨Pò”’òoKDàªa+Ýs香kÎa.@¥oº—J®gkfà ÇD©�9÷C]F›ÁŽZö}îñ7MŽTmÈAK_@aÿŽÓbž¶Õ·\RÆò•¤ˆªàêŽ)º’î³½mm„?ÁORjânPx‰²a}BÊb”17Á¼gOÍ$�U] ±¤Û‰2§LÕ*mk7Á@…Ç$x~p³ûB0œÆŸô‘,�|¼¤é[Pþ�_-™ÍMŒ&Ì�ˆ@³`ŽñÄ­„úbšœë U@åt¿išVÁ,hó4 Z»dI¢| Ø·Qø:üÞQ'vêVÚPkO6½Q?Ë ¼¼,¨§)Í4^< éЊ¡'¦6q�#Ì6õ¥14HC—t@`3‹HÖ7rën<寗°* #ª¾²eá3˜/ªkúãé$¥§©Æ†¥�7'd{A¯@{0»#â"ºèÁ<Û>––z(ò¡Ü;iÀ¹%ÑBÿ1ËÄ,í)@‚pAâ=ÝbN'!v¢„vo•yx5ÐÿÁâ~K™Hœ\£'B0Ÿ aÑþ÷^T¬ò™ ±-‹ +U=;ñ˜”d:F"GxZW_ÚgƒœxÝ7Ä5ˆHÏ/ü.f°f5w®îb�w˜Ú­ôe\Af‚ a†eMÖ!›ð©`�#õ;Ëd’›˜½R:ô¼(Ú%zˆHS@©ç�UG0›ØÞŽÔmr��™´hƒèÓ;�„¯ƒèšÃºPÅ¢ÒpÁÀÁfVj¹¬iU[)™׋d ¹áôäÀ3)ÆL¤n^ÁDæ ˆØ6¤ÒÈ÷^NBMÈz +;„Ë�¯=¿^$§‰•@|esFb×à'õ_Ôñ™Î.8þÈ Â´8<†{âu¦~1K-^`°Êù³þuIëGûOY9Ev�'‚³Šm‹7•‹ÂÈò› k€!h'©—Åþ-Wf�T�Ü2׺ÿ $È P¨±Üb*„+”´fém®bZ,ÓÔkâ¡3M¤s‘È–a-ᙋӆd�ÅÑcAÏäë’ÙÈ :eL ²bÚÕ#?'œ3™ƒSÞ"«’ ¼œÏ +@¥?~.`>¤Ï,û +^Êò©òH�â À�’ž½�)t7M"´Ná¸Â$еD¯d'6[heÁ˜Ålkeº§z7 !¦–•숇8]™1dãRŠ1B_ä&`íÛ y< ‚Ë# (ŽàbcK_‹bø +ƒ‡ÈêõÐGrKœPaq€åÁ³ã›Z÷ðÊ0/�ô;sdd£ s¢@œþGçÖ öÑvM4l! LÝÔ-#•tv!À…AÑ &$ºdX×ìÁ´Æ<‰›2¿´›R…©­ø—|3á-uSÙ(Þšÿô(µ©ØÚ8 7ѹEЬñȳ¢¸\©ÆSu[DÈ"ø;±òòñNQ°§�hôô[4Z‰E²Xå(§°ª99/‡<¢"žºš'Ù +³7 ²ÒÛ‘|TÙ›ã€bO:aær;7ðä fŠ+•-�BÈ®d®KäÕ B;$4ú²Âžv%§Ä—TQ¡†¦/’’G^=�,Æû6ó;–mòýF<—ë5Éó_Sž b§Sš!õm ù ˆ 1M¤ë‘`<ñRΛÌM´$Ÿ3YtñæBužyýñ= o ŠdY¼àshó[ðD™Ð¾¢¨™KYž0m +8¼yü"Ó$K³µ™;Z+è>�ÞhGšÂ™ß “*ÁH[ ¨š'‚1¯¨Ñ°L_ÄÕ­µ± -g#ñ@Q[¤#Í +Òmƒ1+Âq.¥T§EÚ7Å=ikcV‚ýÕ·AŠšEÚÿ°©ðkâSõÅã¨ibðp·ýÆìá/ÕŸ?ÇÏ?îeúil %MŽa`qCkÂ1û~#cfàzÁü�UØwêˆ>)-ÇþØnܰE¯P¸†2hA|ÆÌrÌx[߬:ˆtÉ1eY¨‹„‰œ&�ò½Þ¹H#Ìðr‘FóÍS,Z>f8(Œå%Ÿ?r4’ä7è�ÑÁe¸lÂ4rÈdCi +ÒCÙŠF†˜ÒìÜ]ÆýbF7ãaèéôò�æÐ ‚âw„9ö½²Àx™n{`‘šÏyQ¾Ñv:³óø +EtÿP�“mã ÁËuHÇûªº²p]Î’4gæ8eì•u£½„~œ8†D‹iWŽ£’ÛR7§Œ˜Ãâ¯HÐÂ7¤‡*†ð„€ÂE7ÇtÃ{^w€.T \Hä ‹7£Æº¢]S#/Û„ß�‰C�/â�šrÈau—Æ8ó™êö_´ûF4º¥K]ÿ©vÕ@ÞO¸!£Ü·3"py´.zíL^?FíO¶`›r–JUr@¦Ó3Éýþ +‰ÙœÿìH:š�,»¥+€³ns�N£¯€kCº*PbJ1¤/-ñç†7 é‘Ì á¥JóðF¸*éÜ¢œ—nuT‹AZ”ެ…�o=_H_§²E/¤§è»ÇŨ&ùcfr+ùÈÛ"`úÒýÎôç¤�C ›.rá×}mŒay4¶ÿ}µ?Ì·Ø@&ÌQ”5{Ùœ¾ƒhÏy¢ £®„J�ž¹5n2)º ™BÅÅÂÇŒãeø9‹�¿å`¸\!ÀñøxGîEÒµa‚Œ† H¢#^Ô žüoVlÏ”³1xä3F��9‡uÐøºòê²çG(v4¢þìlK¬Ù>R"¦f ”¨™M3ÏuÞ"ü�3‹õ„|< b# è!¤Näs’RyÒ^zýÜ|$!íùÊ­zÙ³nº+ tÉ`~n…ï€?Êúé…E|Ž«|7ìõ.&ï›*FqP„´y¼2ÝX"¤½r ÿöz„i_%ÑÁdÉ–CHs|›MBº­=±üÓ*¢ +½äÞ‹CäˆK�,UØK´i“ÈÐ*U×î+@òîÕ’Cöp~tâŠ0O»wƧ- ùt�ÉK즀á�úD™é,–1Bƒ,°s Bêé>Ïhé\ÜÞ_/W,/Ô)�h ß‚�_Ôl\aXŠ(#è m3d,€†ÍA:‡¡LbæHÅGs†é�ã§íYEƒšj¨†œ¯Z)Žd\*6‹‚xˆb¦gxuÅÒ5H[|F²kc+ʪuR7ÐÇÎቂïþÈ?*UÖö˜¨ôšAÚ2Ï£ÔßÒÊtÆ �J´[¹çzvWÚ'_Ë›ÿ8#ð¢(ð±ÑZ�¦]*rD¡i[ÙÄ»Š(kV�& µÎÜk‘•‡(#Ûþ+ú‹ �OÊÚ^%Eo¡Â•D7Òa›±Èb!¹Ãù¼Ë 0$�ÓjmB±fMìs€�Ž*q-à­Ð!ö›.m†¸(xlG Í¥­§)]: ñàM÷èfà1ˆÜ”›Øü +¸NÄO­h‰ÂvV‚ëg^·BCrœ£Í€ç +`†.=ð òÕ¡¬0Ke–×:NIf}Ê8+Ú}Ç»3LX£o 42••˜v<¥6—f÷N{§)%ÕÝ9Ô%�~ ©+1rÆ—OŠ×©Ú»yÞ%¼„›#*85o¹´è…‹-Óäê—/šH%+—vF¶®iˆ&<­Çg/—Ìa8+¤V–@`¸©¾irôŸà‘p'/Ë$€ +ŒŒ…\Ú¼ **H –ÇØ¬�›a©˜°aö¾¾°Q<Õ3¤6µ#½³Ê +Äè{J.2-.½ŸïÀŸ â?¹Ké,y ø{+å™tDœ· „¤7å‚ĥ÷1‚­ï‰¸´­voµÁþ•°î…­zPÇ5ÂùÈGùN‘1D¼ˆsçüv£–!hzfR ½¿* —>n«È"îKnRŠ\¸t|ÚªéäB‹â ’ÞâÀY¿¤M0gI%i¦'sA}*Ë?ü–F4ILš<ƒó’T¹·´#¥Í*už~ì¤Ò{€¨Ë¡G.Ô¾Ñþx°Ì`zë4[Æ�—‹¾5V¿þîŠÜTÎ�E$¬U›Å¥}b�˜Ï:lr# +|Ô¦g óI)òR§×¦ +´r®lë/iv8Kƒw|å6’�£\óY[U@ð{w°kHme‚¤]ˆé=ŸÂPa` G{€¡¥`£¶ø=N†–‚‚ˆÓòî•3š44áxQªpÆ­á±Óåµ¾ÏaÑÃ$ Ï�áK„Ħ}ûꆯ9‡(èÐôé-µ_/T&Ú|~¼àŒÄm�%»ôNišÆühv©¸Ž¸5âÆ!\šË>Y3Ub:V`ÕO–“༆0‘Dó„}@‡¬d|±n!át/–ûjãþøKعǞã½Ä<‹V�L÷/Lî§zƘգ}žRÄ”Ê(õj¸¼ +®\ þ4¥Þ+î;{úk÷0jcIØ~ºÌx� ¹/Ö™NÐÇ@ãû“U“ãøÈé¯Óh€³‹&YM—^L™¢_;Æ6Ï€ "oÁ`C…ƒ(‰²Ù pu—þúU“�C5Uúê?bÞÒTØ!‚Kg”Ç e¿Ö|Ñ´D,^²Úm}M°y˜ˆâ{—£¥ƒcËŠ© õ÷îþ¨”Ívé‘¥O1B|*Šºå �WE´¼,VJÅñ÷(-ÒLñ€EŠ‘µ¦_YKÛp +¦ :Øœ�üLÔ‡#TÂâ¥e25—hE‡�¥Ht²‹°b¼Q°J˜Ÿ@—ò#¨P@çh¿ Wr›ËU¿åœÎCÑê9o<`µâš‰¢USü‘⎑>Û äÊŸÜmu¬àG>=Ÿ½XÏcëqÎ$™ZçÍÇÿMŽ…ýáìÌ@Ð#.ŽJ“*Vš�¶ábšåù…æüÎ<Ô;6nò/WEÙäGs^jdm"dP§Wì}UÑjqxš úÝêÔ.Nyž köKÙCꤓ èSù„0Ñì‚>²éê•[‚-£ú–jâ€î�*ÛjL/©Äi=‹¬-uì´BÕ§$Ä}�V‚‹-Xü$zZÎF>_„Týú "ït™ÄÅN9D�Á(õ@Ú«œIzÛêkaü­C²Hzh\‰‹;I‹ö[›ˆ5à4Úv…o{Z^~ˆdÑk´Ÿ#¬ÅIßP:^—Êõ©ðHþÿ1Q Ë�¤ºR€ý<´þaµCâà d¬B$”²ížø]—ÔBv&i_ºÖ™›Àæ®Dµµ�õ(#“t¹©S¦¶;6T5›Ã˜ûÁU¨0Ôü¦Ý"§Æo`ÑD…QŒÜ(d‡ÀWwü‘öì¶þ ÕÅà-I£IEÞh§á¥awñø»&c‚RVrvµ^1Òu)'¥Ô@ÈL%i‹6 l9#×0×£Äm4¡$M )ç�$íy¥ñƬ@qÖ‰(“–$íPÔ\Hx\@…ƒ$4@áiûC’téWÝ¢‚}µìšú/V‚ô…©G@¡C’Ÿ¦ÙNB’v‡ûp¼ˆòö¿™ýÔÝ0ïH9�-0çdäâ·Í2 ÑöÉ ]Cqð¸˜Åc§y¸]ŒVè]k|R}‹+ßO^�Œ9‡ 3™„ø*erVüÐX,C’l¯”ÍàRÀ }‘´aö*R[{�XƵ%Ï&@ÑâD‹¤ÝU�QLªÀ9šiWAKŒt®£œ’‚à¢æîh ò•ÈŽªQ�fqÔÌóBד`*–DÒ¸l !å‰Uø÷¥5Ѫ¨"é81ÑÒ|Ø :-ÏÖ—"IZu"8jˆ¨¸˜!iäÖFTŠL8;q,m§ÀÀΗkhd1ºg¯ý#l€à31ÒX[Þ$EùŽAÒ¶â9zÔM‚0BQZ9+ý“âêW‚¤IPºk (Æúãñ’X�4Š" z»ü"c›—¥Ä�ôH…Sÿ¼ŠbÊ ŽÆ„®É˜ ‚䃵=q +–¬ƒèO0ñ̹(Ǻuû`‘í³n*}¤§£(¤% MjgûS2ùÀÌr¤çÿá#M®ƒGRE§˜S4ؿՂÆÝy¤g3�´oÊñHWAOL†’ó‹ÁJýQ=§Â>ìáËi—‰â|ƒS0 ê­²yìH+¬!æ&ÊuÕ(_¤ЇÄ6½»£ƒ—c“”ççH§&pŽ´ýLÄ0|Avèû•H9Òe&JËlEç)–MÏÆ‘6G À·=‰â¤›.Qêë=Ú@1_<²’úÌÕÞ$Šõ„Â\[{†Hh¢LXÍ�“DÑSt×óëm¤©E‚<°W…ß5*$äË �YŽüïƒ@~‡Ÿ]‘lŽT¨c.Ú/5™{º€RBû¢î*�Åj¤A”ñ`££ +^¢kÓMé‹ôª+b¤¡‘ò4Ò©@”¡Êi6n¨ÍHwQ<‹ã™ &ÌHKÛNdd«5{VsAÚÊH7£¥Œôr¶“‘N>¶’Ú ÊšðšÍ�9‰‘©ÆÃHŸò2Œt\|¢Œ)<SY‚öD‘ù4‰²ôõßëZñÄ·€æX¢a…bK"mšéV^2*‘çEzؘbMŽMAS¹4�ÚB‘\³H"aÙZÄ*I�ãxo�nºH× 0å­4æ› Jë,Ãà+©`挃F#\¤‹)"~Æ+Èõ3Ì̱Ì×x¸ú¢èœûí?¤ÄæÔŸ}J‹ ¤&n‡*¹›‹¦ºÙÊ4õ,Ø… Æ.bSƒÐ¤+AæX˜‘ÊP€Ö!Ç–s©“±=@Ô§®A¡¹©S¿=Œõ¹tGKµÝÊ× 3’Îw±Ë•rj „°îk-Þ]qŽCŠ�›öÙ°u1iGuýóR þ˜V{ðâ˜{J×DÝÄôvR+æz'µ4n1ªŸQ.ü<ŽœÞ� â¡þ`[”(|›Òq6]§'ø@œ°¾¾©/ËÛ�.F·Zê Ç„HIs4€÷�ØvvÞCï¾¢‘H|ëËÍÃÙH´áÉ] «ÏÌ'â_EwϽ®¼™!lxDø|"�íÕ4,h à�nE½ãÐ’lá/äWXÁ éŸ#¨Sº]›à„5ÁOÂâÍm<…SöñYöoÄôæ ÛÄh„¯QâQBr|§ÔßqÛÌ/ÎS Á²²Ò±�¿‰0 7pý Q=2kZà +Mß}1“?}ô‡öæ‡dÿæÎDZM>È0?{Ù*¡¬T‡‹’!í£P¨—Ëeåëþ7×åÒú�ð†#EÔânÏE¹²‰à›`HçLö±0Ðô…tÍe´½˜70/ ¶šyÅÄ¿Ô6ò(Èë®q÷åG£rÔÒ–*G¤$L éù¼fSê�œ‡<ˆ«f‡PéÄÆPadQ£Ý¦ºv™ |{¢¼Mñ=5 Jõ0ßpÛû3s …%'`& ¹Î;’j¦ù«�>ΘaMrYGI¦NÀÅ ™î5§Ÿ3chšBÚ8x¾‹Yl4çnºãJ.ÕX¹Ïøƒ„K…Qåc qþk›°Y ˜…+, »õ®‘Y5[ËŸÀpš®Êõ¢KH‹�Žrs«W,!MI϶œq†ù¨¿·ŠEñT/©[ ¦Ç„öíGð¥c>™D»T2s‡ÒÁ?m�½mÊgbs#ïä*ä‡�–wXÌz²Sm$"M¹jêF™<è@†ôp¤%Q³Ð%âð<2ƒ�¾ÙT�(×BÚøŒ›ÃVï¡X·��Û~Üû\“\ƒÔ�ׂµC¨~¬q³Ðòa¶¨ÀŽÛ+z»ÉÖÿ–‰éFÑgß¶P2Wu½Rö©‘2½"‡A`ÊØÜ6ÉLû-f1ØJ?U4¦˜ÅЇq&5¹ÒjÛÖv$ônèšè¸¸f –D» µ¹†ˆvLeû�ˆF©¡_ÌW#p~ +›õbÏúÉ®€Ð¾¯FWLg¿ÚËѳ8*»e¬�«õŠðœà �S“vÒª@ Cùt¹µÑØÇ Òß7 “qÄK'ÇíEZÂɤë2¶{ #Š òíôho”�ï’ ò<1TPÐ."§ AñβÃXU©˜·£$Ç ð²Ÿ_øzåÌNQÆa²² ý¦%µ†ï ÄZ5A:}g3 �Ö+W +¡"ÿL…gé—ùÒ £AöÀwdüh­Öª][Y®rŽ?ýxç¤ËŒøÆ¤1X°¹V!,šr|·L6|ñÚUÒÛùy”áá¢ßP²ú/ß�´‹óÁu �~]Íœv9e�´ˆ… QöÖ†”\âÀ$ú¤Ïµ ²ì¢ÇèAˆ˜¾ÐçZš„q\ªÊÌß(�eæÀºÇ/ãw%µEÆ+�nù3*ºÂWvµ%5�¿„Ê«oË¿Á7vrg(¬—¢SOûÏ ’òË©ÄìÔQsÐ[�4xÔôT6sÓÒ�xEiÚ5`Rѯp›Ð”ªÒ³´Þ3ébSPçhc9œÍ#ú¸�.“ mÃÐÛÒ÷D4™ÏÂXž ¶»Úí÷ʬ¾¢[¤Í÷ë›A)=åÈE…3Ρ*uÿ©°Ñ‚þyÒÍJ?´õ6ÄKw€´`½?ãéÔ®…^e®7Ìß �Ný<32ENÓ–B ®Û_= ùo‚Ru…¥ÈzfhÈ‚6ƒMÓÖ¶Ó°b†ôi¹ƒ½Åa>`§ûKó'§æ¤[ ƒ†HÊ­Eß+Ó|­-¶q^õž%òF¼ÎPÁíwÚO mˆ L¼�g _ã;Ùé:bÌ\òÀ�Ó˜µ9<³Ý�Pz ÉŠMB<Á—+ØçÅs¬"PIðq‰yeYÐ1¤‚BL›j]ʋӳÀ x¢©&7; °Žr¨?H¤ÖoJ¥¿xL(÷…ozÀT-gØ—NlU°(;tªºf1Œ™�âJ=¦]‘G»ú�'MÅm€–´V©Â-‘qÄ,Î×es­Gü˜Ol¨ßå[‡Z>ôש³ëÍÈÕ9Š:/d­“Ç +ÜŽ¥�úA +v­®÷“¢qÆu4ªê´H﵃ðÖÄò?’`i¬—í/c!¡ò"¡ùký÷"�ks0¥�·H|Êÿ9L†¦ÿÈUÄÆLÃ�ìÀµÒ(õ½áÙ!þö•¯¥`ÁŽ”¶ÈÄÖ�,Í,4$‰`¾u +\öÞ†U�2„oiDÁâ\‰ïkãD6qK­£´°XCƒÈûr¸eˆŽßÀJ“+ØèØu?þ–´\5M8¹G� qD!|hw-7rœ¤mjPô½gSÙ{ìÉ)y>Ëy+ZB¼ktÑŠ Æá#ùZY š'7€�D™ÚÓ8Å^.±üf,�Ÿ†€9+¥&ýüBR@ýÇN†B½L‹•§¼LCL .rËlj?dÛèIjžÃèP±KdÊÓ¨‡®^ôwGÒÆ73`p½ŸÍ¦w@gÇÒñAËKî6ðAKâ¯Çi‚ÍšÕlúË[±'C©M›q5ÖŸvSðC�"Ç7'g^Ái|pçT»®ïár•3ͼãÒ1v#ˆFìèÔV7‹„üá¬I‰¾à–ôjZûÈhÊÀ—LÌbk…¬ƒ jÝ*ùc*ûÁ†MÒ]Cƒ-^³3:5�¡9$¹�šS.Ù9ÙµÉ8ë¿èrÓ=cá›5 èçŠê~à¢À6 åJ¹°F¹i'ËÅjŸÌÑx·ù:© bsf,g<¢„ýâ!êyÄÍk¥Üv\/"† +t¬ÏmÇ–¡,©yRi�ÑHçS KŽD¥Š– Ñïy™öøyb‘Ý:­#‰O@ª³Z—N§Àýë$žÔG¼6¸éDÜV )<#¸i5õ3ÜææÙW�Éøà1@"sÛÚ¦_tÔOÛ²öR³IºR &¹1“ãcÅ[‘ÓœSè·:e4Âã-Î\¿"'&sܦÇò?Ähi¸Mw³i6¡U˜sF /khtG÷Ú›|RXˆ(X¸˜’+­¤múÂg{¶UáÓré˜J~†(øÃy�. [±MÇgK•ÂíñÂŶ”£«k`›Î3t¹„únƒˆuՅ觪úïeò“3¹ŠÈsnÓDÑÖ¦Ë,5âÒ± µé!K‹`GÂÚôuñräÑ,•È@ÖRºzYYë×Ié_£ø�6­“—�/Î’5†+jUå,òi�°)ߣ�SÕ÷ô›&Ó÷N˜áÎÀ¾ÁÑÀžŒañ@KÒú1àƒÝÍ¿}ö©NqV ù¼tØ¿Þb6mºììHÆ«÷®’#Ýø4@I(ôv)ÕW(bLP›�7ª%1&Ðq6­œ–™z„¿T`_ñg•»×ín'{勘H³ie[e8&²B,ÔÉâ–�ÆlÚk¡“* «Êt©Ë() +¡'ì�M�£RµMs:Cd¹ãf„�ª¬dÃ… ‹áeÓu¬Ì/ÑN6½ˆ|ƒ;E˜�{_Ë�š€¤È¦ãB¦¡w¼b\C,d¦ñJûØ´•BHÒ7.BwlºžŸR>ÓÂLø„ƒjƒü€6;Q Œß8 %¡D¤¢kŒAÆøöü&Ü0ÅmŠv_D3Ïg2�ýš¹é˜œ˜›M›iÞ6OóܱMAÁ›I3…™ÂLa¦ÎÌÎæg÷/sÉÿä¾ySXÈ÷oŠ›"€` +óÌG@âØ‡#㇂b:F^fŒc3££:’FAAAaÆ1 +N 2¤Æ~0 04o�âƒBÚ{éQ¾«�X8¹œˆÌr„US<ÆœóáÊ­D¨ÍýnS“˘ fü­YÍCVV22’ ÙÙ0UÙ´Œ¬¬F•ÙlÛT¶mÛg{x˜¢3»±š‘ÙŒ{+µ:::ÚpvgG3ó�Èè 7;±AŸœ¢\‘‚ª>Ÿ‰Qôó((u)(¤R +©”dK’ŠI")�¤  IŽ€)lH@’çȲ$QÕÚNàdÏ`¦C’ˆSÅPŒ™¶6†,[Rô¨iÙ–JA­jKAG%U•UKA%‘‚(¨4SU +Ž)K1\§%%ŠQŸâRp¸,Ý’VkYÖä(Œ¢ŠcI `)ÆèÉu(n`Ëž‚$x +ž¤_ + + +! + + + +) +dåaÇv|K» Ñi”Üù椽›»ÅÊYÆ,�ÞDÒ�ya@‘Óeê"#f  #.32‚.##Äp +õm¾LáºÌT94¨DD""j[ƒÕ]Ë\-jÕ¯®ªLü +ýUÄWU]?Q½Z?_BÕPã’{äûôÛûöí½¾Ø-™j×V"ñÏÁˆvDd'ºm?‘DÈz³²v¡föQw5Fð>ø­cøÉ1Ü&$#uÖÁef“„[©HE�ÒË�3íË9«ìõËÑgH4í¨ +Û¡By•ª¼„r‡èT“LDCR•}ZTW ¢¡ß~-Ÿzóo*¨J�àlÛ¶=l†Ø‡º�¹›ûÝ0&àˆ¡)œá¦ƒ ¨Öv8Äè×#f�F€Nç½›¹©`(Žb(Ä: üΠáÓÖ*#ÖÛa %-© +œàcÎa3Ìì1ãF3�Df‚ÕÊÌÆŒv3Á0aŒð“ßîæ”TÒNv9ãùÊð�ú<&©†ãÞ=òë™.5"SbÏ®�«R»ÐE½LË6T!–üNÒ%`ätóÎM2Y1*9±D:“UÙPQÄÎŽz¿áÕLé\}Ý–)©‹ÌÇäŽ 5l ÙŒÑRÊ•–›ª øÇ®åï’W@,u2½r,9]àv;ñÝî"BÎà0Žax¤3Ú^u´�χÜÍÒ^U|,}SºëX³ÉWÃoÆÐ"‘Ðí®è¨÷ÒÐýŽÎ}ï7-ÕÕA?:Ñ�dÚα–äª5¨„;f( SP²@( ÇcUOäÒHX +B".FVhH&ÎE@ƶµØwÞí½r×·U<Ùy±¾É?zóV ©„•NT¶b�ù­† À!’5È"GÍñ†Ióbl–ÿ„°Ü-+e-¬ëCsþrÚ,…ï û0RýÑmº’[,„»¶&�&bDŠPfÿ\y5aé·2Ðêì+¿x‹ÖØ[¹"ÝïH\áFûºU3&8™Q +œI!'5Ú€�bÚ|HDg[âÓ£œúÑ1z­�Ob—šH`�7Öf¼Aù‡jµ1Õ!)u ›kŠ­�F’Ȩ²æp9‹I´£�/ø²Y³6n�öäꫵg>#àLZ@gB ¹ó à‡Š:.ôö¹IWÑp÷ ›Þ™™�¾÷iY·Ô'Ï#4Œ7ÖféfÃ&ebôqCt»K™«Ñäß•¶l¤#f=•v«¿Š�“V]Óý\S[´pu­ñæ|ö²©zÿȺ^¾õåì•Úõt›ù³”z�?Òä{ØÿM6ieŒ$€±ií�>TµG g¯ÈbÛlÆÜ@˜ójÎ%V¦ºÄ^‰`l Ì oçê1›ÄПýŒíý�³¼Ø¬|Eà';elXºÒ—ÄØ¤¸�Ê1ô´8dJD± ,’eÿÛK�,¶e�Û?fÙ*ÄØJg±/¶fÚ'TãbÊ��wÇU:Y›È•¦(Ò�-i�جóÿñ Ûª†�¡ÊÿÚ§þ�Ó\’ÿcÃþÚ€KŒu·ÿñ…¿VZBæ&B~äân¢@»FCÿÙb+ù�ƒ b÷«×¯YiUÕ†EKC÷Zñ̨„^ëÎ\JŠ^£ý´în¢ëv^«HüÇ/æµ9á?n–þc£×jgÞxéçµR@2cjXÌkšpÿxˆå5tò�<ެ6dÆVJ’àÄ£ˆ�:Ó0xͶõ�ï)=%a£èwM=(¬œGäªÄµPU^B2†ÏÛöcv¾kwå46+ Ó»T”ù]ËäøÇ{:Çè“ÿ˜ÞvíRâgЮYMð'¡]ƒ•àé‘>ªÖMt�ªÉ� ÏkùýñáÁ˜§±™©7[¿6S­:OüÊý1 ÃÚ«í�d®Ù2±.ÞU¸j¹&Šör-RÝÊnÔ\ì�u-­yºþøóïß[fÐÒ>6œ‹²�úcûßÚ€ ++–¢øÖv gç¥?~ ®­«õ> ÿÁ5VV`Ôº®,aËr>¨QA—qEe,’R6ùÀ5¬xŠ3�éíÀ5+-�µ)>@MÌtÌKfÆòÇV½µ¡’?ndŠÀÙÒ¨yXKW1»5ÇЭu:B½ï¾y•®Áy„3èÖ¸ÖäO¸¡EÑÜá��˜k‚t§Råbª‰À¨ÖÈ…âÊ´¦2ŽDk&ø~üêYÀÞ�{ÄÓû±43¼{ä¬ "ènòvDvµîǹ¯ÑýØ´6ÛG (æÈ³†=Ü�·¼¿ýøÍZM·“eÖ~1ù²'õP™5ðT˜ç�Tî›”)†~ ³F{ìÇ ·OL&�çRUìÇ&)k¾~¬/\&bž2[7 …'kŸZ?~ŽY[�õã +a¯~,zY«I ÏΆ:NuY3ºÑ÷YYÃÝnŒq f ¯V�~l€Y›šˆ.ÒPÊôc6—5øGsÕy%€B§uñÝeío[ó†{ü¿ž¡4;/V—µJ�gfVe&k"Îa¾”¬!{ÜäBÖ.~üUHÛ~5º¤Cc WÏ�o3Öª¿œ´V0ÔÀ{º"±–Ÿ»½wpVßia³ù±àBx”XBsV«Š�òÜ¿þDã>É�±†Ú0?–�Â+ß…î[X¬õã@¦b­ÕšzæøB±Æ>J©—?b¾T~L[±våÇÙ&ÖÌN~|Lþt½¨@S±Qd©øþ+Sq°vAdÞÛ°ö¸áÆù.üø±92Ž3Ñ«jüX 5Ç¥¤ÈvÆ�5îÕœù¾As¤WYoÈvþYøyµ%à™»"ìÊ«ý/Ãk ë#~ìHð™Ý +ñãÅbj®Ÿr3OæÇì?žÕðcè Qpqµ{ˆ¢)dö‹¼•àÏ‚ÍhŠŽ¸šXƒ·^ �á|hiüÅBþVk±Ak>€¡³X…m–s�/ËâAÙ­KÍðOpì¸y€S„«ÿ÷qÎE`ûÇä8«Z…¦oµNa�™|>Ko«!§¼J9!Úó} ¥¾�½”jâ²b&ßn�ë}ü¬V›pQNÁ-ÈûØ%­6Æ<³æ#' ¬£¬f–×bhAÁÝÇPÔÍîcÿ²šÜ‘£´¥xe5­Ø_‘J XGÅiµÊÉ>þ!oîc×jÀs¡UJˆÿ…/CÌa³p{Æj¢¬5ûHmÞïÕÛÇÒÅj»}|¥&ÕVœÛÇÍc5¡ñQq¾oëöÑÁ!T !È…`¶�©ÁcûXX­Øµ�Ÿ~Õ¦³öq¯Zµ�5Èœ‘´ NûxfziC¡U£ícÚH”$BÜ]ÕØÕÍ×PU»7ËS5×a¢j ößÏÐ9ÌÏë•:FåZ {'DÕðÆ®F±ÿS éÛ¸ÑØ£©†Æ°�·åß‘F,ßÔïÕƒå»õl-ØÇµá~},"ªVSüÆþUÛû´ ŽªI�×ÇM j¨º>V¸4"l<×Ç÷š€%œ|>ÕDÁ¿`MSm­¾ämèZ<©=•õq”šy»\¡ø…+—Íù©Ô"+T�±¹QMŽì.3ª!ƒ€�hn@Û �’#P Ïém?aT«ŸèòûS“�yòŽOÍL’&î=5‘æ<5Ð�œ¹O55�\j�ɘ%ÿ뀩ÁÊÔèyÒÔ$2G‘„`¨)á>(ƒ,?§> d¦Ô�Èw <ôº*¡e�÷~’I�÷É5%5˜I‹ˆ“Ô4{ŽÔ`¡©•œâ¨1Ѝ¨¡óaÔÜÑorꢦè.£†AºQ+œß&T(á—¯úlþµ'j2Å|&æ(P�°�Æî€�³íPC°æããfQwlÕPÚ鎕¿˜îøC­4oÜÉßw¡6ÄYÝß%Ç™jFCw|¨P›tÇ�ÔÀšºà�5Bù�ê³HËOû©‡#PGüO£;:˜á|‚_åchþ4j´`®QÁWjãMóÂK Û- •;æÇòH²~WL)å+û´î�zYyGe3+ʧ=D£–Ãh1<Šœj¦¢t6›´Àaòi_ ýž†ynDx&š8¦žvL$:OÃmLÅ«Ï ›�ÁCpñ´¹`;JŒðÃÓÐTóÕ$Ê'OþxšN„Ž,Ê&˜ +-—äŠÕAÔ75ñqÃ; nDÚ�Æëkù¯9s‡é®÷ÇݶÓà�x¬�3E^ë.£ 8O\˜ÀFq Êpqd²™±*ˆ!ìrÏ0ø�Å]Iò•9Xè/N=9œB*þèôí©p*sÞãÏ_-lŠOókˆ…‘óeÜÎ.Yþô”d r´ð_n% )DÖC™Exááè_`Ñ0dÎî° ä>f[&Œ8å;Xk™0@¾Þõ|žØiû Ö02!¨Ó%—6@(ÉnIëoéѾÒm,Õ0Eü‰é—I [àÐC%±NVßÝìe׿ú¦jå ®ô:¤¥P‹J#ü}Ç-¿KçÐÓ‘«`®6ÙMù¯™Ý‘P"û6÷àc +øÃ$¿|LNA†ÒË L�¸›°þ*’á&j˜¬BÐ|û•fvö>*ÂŽe»xË2 +X6ÊöR²ˆ±…sŒ.M ñìX_•m·|Û«ÄhÅü¸XêaÊ&vôû­zÌ1ÔTñ�ͱØFê ç­Ž •.\»Žd7r§�+X¬Ê.Þ´8'«O檛¯²íÕÊ,Ñøýu?`ñß㘉’‹¬”mQPçb`F3]NvuM¡Ž«;�¾aWw¥0iîêG~!ñCu�~e÷<ÜV.»%�<šÐTÐW($6$Ã, §ÿ¶ÁrÖRV»Ôð¼ +±Õ ˆ0Ï%(+(»J$D35êS•� ad7£`aÓ”Ð_ž¡Oþ~×P‹@dù¶W¨ÁÅöÁ×/Aè[�›@DD7'kcjP)BÌÀ~>ÍDËþCöÙá5ƒ.™©V4™ËЩÓµ–&R'ÉgçdL&ŸŽÝ¤‘ÍY\š:'PEæ¦ÿ5 ãŒÐ·,:ý % Œ.ƒ~‰"ÚoÒìv˜7C¡Ñ[Ôkg‡„X*”Øt¸\©ô‚—#☬ú>BE•+¬XI–î uËgŸŸ+ŠÌF”ŒÅ8É'ÃeQÍ´(ÙB!Aæ`XB´0×$+Þ‹�\� rÐGßÇ…D„C†×3 ñ‚Òü$=ì˹h ]ÒÕ €z{¦X@W‘| äüÀ(°Än + àV©ŸgQRø§ +òYKîÏ)€Y¬)K*[Ôà(í^7oNáÆÛ¸dÝŒ{êD²8ئ…Úo÷�ê`|‡Ì^ :¼ç6 £Dü¯,>:®ˆJCž”R ÿLa²›ŸÚã+½|ù�]¸Ê-ýYùgÏ¢0Lf”#YC’´¢ˆÉø�÷ϸ¼c™Þpa%‰gJå@Üõ:a}+|6H‰ÜEµÞ_p‚‹~„Y#Æ* CPþOå›§Ùfa(QxÎFíge¦týÆÊ]̉½ÅÒUyì'†ÁDzߓq|Q´ô¿K«�!ŠÍ8Nb9n2�ƒÁœIÂãceä¥c” >ã‚aêo•üag�ÝãJŠò[{V\xY¸¬ßÝúCïuDÕ¡ó›&EÌ‘šñ8rÏ!Ÿòrþj)bdð�áni!im`™Ñ÷lÍKƒy!Ý‘ ¯h25Nq °”Æ0\ÔÞg·8Šö*¡)!*§YùÕE_¼=G7.juï¥9.L\¬_\¤ü}-ðΑÚ¸’éo‚”÷t6‰WˆYÕšÀæŸJÍ®™©zæY´EN°ó´5Fɾi\RpI!,bÚQ R–�O*ûð™ ¸iïñQü,‚¡¤góüPdȬëþeǦÊì˜ÑàaD(}¹d‰kÀ7¯õål8îUú +Z¬xΓ4.ùUœ–fŒMwObAF¹mçJíGÀ×?uu¥>]B¢åêu»�ÿÆs£Q +Æêüߦ®lïë–ÿ’%’©"­dI¶š‹.Á²�MhDd!¡aÄ·qIë?Àq©AlQÔ}‰Õ™*>ÉhaÊØFŽáXL0¡g)íXµ @ÅöøÒb=íÍoÛŒd Ñ»ïÎÔ͘ÛòÛMþË>ÒÙÉ<¸ž�þÅ5¿òoDîðd’©L1}ú.EÝÁx~}˜qª¤ äÓ;0dÊZû7ø`o�#þkç~>žwº#‹O3Î Œ³fEG.ÃE…Z<ˆ#¾ÌŸ±} + B¤¾ƒS:‚2üSwKqÖ:~O-/¬² ¥VlÐd+éÌŒGc!¶|[rŠ–XgïÂÀša0È0¶ýu U[l}_¨úÎh䲃TŒ¬«BÇŽãchÔP\FÂNt0ªƒwþ_×C!ñÈaFæ àXÀØ!_˜ß¼îãUánH¬ób _œ.ÒÁÜw|l$¥ëÌXRmtwš[[° w/ô�#Àë…­`íú¸\É5Lý¢°z/Bž0ñüÌ8ûé%wvœA»Á8µî,˜C{@LË´¦kÚ‰…„çx³ÝóÜ„uÊô¾%šê'›@ÀC«-›`yÆwþ^/ìð’áj B·ÜɯóàQ]cx!DwÃH$wÜ/%¾¥‰m®9=Ї:ÊÒî×Õ#hPgƒ9]oƒ8BÁ¢õþ’“O@ûƒÐ©mÇÇ1 `î(#ã•‘©a4Ž-g¢õlNæ‰ŽÊÆÐ�Šôsb=Ñ�$V¬XÌÆ£ã²0?a¾|XÈ„‰:`QY­8�ÐÒå¤9W1d<7ut©2ê¸TMu†Ú³£10DÇ$ÖU” EÔ®ÖÊ-ŒŽÖ¡¤ƒWn™§T“rU”#ë»0‚.noHýŠ´y&K�È,d_]oמÓÀ¢©öê;·G?IJ˰ó°w„{ŒXQ:̲¢Aâ|^UqãØDëE5P{aøœÁöh·äÈê…d A‘ qµi-)a±zo·«$Ý-™ ó0-#†…ÙC~α?ÈDÜåA¦Û´âI²J¥+•Íñ¯ä6›FiÐë®›yÜåsYu§2~|ï›­¤…Ì÷¬Ö,�3Ñ…b<“.É8 *T´²œcù̉þ08Ç\W(Ÿ¡ôÞIsÚÖ~– Œv8S¾¼ïå?o$ö +€Òz6hc,b„%bå�󰈨• ôÝš³$m7„WI:Ì0mŽa³"üR˽L¾¤ÇV¬1ŒˆÛü¬ÑªZ|^±`ù¿˜Wç4ØQ¿ëj¦LC"£½Ï¿`]øÅ½¯>Ú?= Òu�ا.a÷úËs8X“‘–b€,eÏêI‹VÙˆØ (bÓ~^Ë¥ŽpÉЮ ɺy¹g :æ~æ¸ÝÓÊÉXoŽ'¼u�9z{�’ö¤&1ê’PˆÈ�fëÃàÚ‚?ÂLû!†“w.FÃÍ‹_ÚO‰öŠ+�T.3"ÂÅ7™­=ÇzS׆³ +\þR/îQ"îi68ÇìåÅu\Œ¸U—·ÅÑÝJ Ú)ýqòBë…»Wuñø,äM“æsÌ*ÊrN’Áü c0MèÛO +´Æ‘£+BN�Ïð"ý$$u\>H`Ž� ÌÜp㯊0ZÚš‘§"? nî3úw ²Ö”ÚCûßý6_™…¦g0d$oK$1°K±µ�JºŽpŒHFÍÔ.÷h�Q3Ï41~fc9öÄlRFQV˜ P*iÀs.H\å½Ô#¾8M�å½òÆØÃ÷´jmF Æ%Ìâtús�)ò¤Å^DŠ=®5Mˆé ´“Ú_ß$~óÌw=E0¢Ñºýu/Ea'ª„0YŽå²ø�d%˜Õ”À*ͶúÔÔtЉ©¯óíÿM œøÑh–ÌÞÌ('?œmîåËç4:–DGgaQDuë8·£Ýž¶IÄwñ«‰vÀCön­¬à‘â6’Kn›)ƒóaEÑÊOU>Èæz¢ ç’ƒƒNš±CQWO“ˆ`›ˆÐ]±¼d»rHõIcµYADÔ°>ÑP +²�zv< «6nbÜÈÛ¨CwÈA›£{à?iÚL‡½Á¶l銻¾\|b¯ßcj7†ûx[5—kïÑJÓØ)óÃgyŽœº˕׹ûòž”8eåiÊ.’Xq&«ßùåo¼s¨&­2V¨¯4+9VFwAKq ÷Ðn*�!vyJÁ²;#Ø{¾]æ¿Ô²XôÑ�ÔÛ‰2ê9‹ê�<·>¾Gòš�³í£ÜXk£;•c·lžaD¶¯ui”�¦±l½mÔó‰«Àƒ*¤=dïC>Ž_°M9óyšßÝÅ‚jM’BÙÊ·ô} ÙYï”$ž.ÂXn YoÓ… Õ¸º¦e6úúq5ZlE‹É ­Dä:ÃK "0OyhÏùbÚç\ô³5ZŽÅé#õÍ^z„üsÊ—¤=wHÇ5)†¦….ys+“zqh‡§œ áæÀÝu�[9ГÞGÏŒžâ°È½‚!jtÃZÕšBÝY öƃ2¤¡Ýéb-YÈøÑˆ‡·�'^]:à�°dP|i*H¦4E™¸Þ´m¥qÁ‰TSO*Tl®`”ž‘õ¡0̹°.:è1_A…€6Œ2DØÀBÆ +‘h“"<?æŠn<>•È�Ïÿ%†¤7�&©92V,ß°o;­,¿Âñ)¬&«rËhA†Wÿc°“‘½£|?gXÄHP;±¥¿0µø­ IO/ö«¸NG(ˆjèÎk³ļÓÉ�ÏI¼ÒP©ÑLv±r˜—«²’!èË äØäÊØ ÿ ~fÂÂgm[—�þбˆQÙ"u3ô»ô hbp°òi‡#¿ÄævCøUU§sÓÚ’äÐí'Åm9²5 f«×¥Unvʹ I¥&H.aÙÛÑÚ�w=²=ß·r$ù ã>u9rÔøÈE»Ä+røXúo¸Î¬%¹Òv)qQÇúã …¶¶)xa#; ¨ w§å_�t<ª ±ín4ÀJŽU¿D½€^tTädïŸ +ůü`Á¼o™C"(_�º“wtS›Vd`²ìˆ%ÏÐ÷Qn¨TÜG•°Þø1õÍÂI†±–¨í�ð¸ Ìüòôé£,_BÆ!Œ!G èØfb»{ô]u&,5ˆÁ”çRõ¨;´ž6b€q…yK?%ß6®fqî6ÂgÃÜò~·j� ÖŠo„’jÙ’¹Ú‹’Öý±³Àñ™5»A¹ßÞ[„ãÈävO4Vò¡� A/¾weP[BLí¯KOÖfkêd †¥¤ÚÐá½­Ǒė;ÈE$4,ùä+<wjÎLFMùJAß )R«�¦Óã]${9Ô*o‘Ê.q¯‚ÇÇ 1 ¸�–‘Þhov�JÁ°Îû€+q¤ð0ùÓ¾)œìj™?ÉûÅ‘ÖSw§Øë0h5cümPÚ&µ>G³Gjk=QÊá*E€P�”\ZÛvÌÌÚ Qn>æ }9¼lg‚%ù—åôëòàš1URb[¸ÕýYº$x ¯É&pKcß!—5_·cîQz(絟¥õQÑx~)¡ôЦö ¼Œi»Â#V7sê°}"M¸xžJ0$覱ҜGu®â$9O¸uîl¥Ç_Õ÷/á|Å£Þ[£!Ž×²Ó _;¬[‰*ÊÂlAÃGƒ!ö^½°N¸š}©ƒŠÖ �X£º<íÿÀ¬¾@Ϥ …g+OóiFj�¥Ïµ›d-+ú~tGO@p15Ÿ5,èôaäAíèo¢.ˆ‚ ´…Ý}Ϩïo�= +´Ö�ëÙØByÁ¹8®Æ2u¡±Ç´U =IîááÃ{TÖ/HåL#’ŸØ–w©t* 1Ó9@¾Ð{&ÊLG)3OŠÅbI)¶§æ¾t\fÒ�Ãv(„€Å% ÷–Q‹~THl +2`¨y”ˆÛköw+𱺶¼ÄªJ/Û´ÇM9ÍÄ›@;œ2°?òví#`fºº1UáIvF$¨¶Qè§qęڧÄÓI$³²Û'«%®,¤bŸ¿ +½�P”ürù¸U˜×.YˆJ¡K¸>yk‰hFØ>¦‚�%ø€Ã}ôÖèßéU¾ÔfƒþRL£ w÷*ÅZ€°ªŒG-C�£Í˜9ÛÄ2dùÎÎÓ{Á‰Ü=éÒsäÿu…A"DM mìÕW(ú¾¤Ð¨#c*\­‡î/¦$ù!ˆ¤RÊ`‚0GCeBgkv‹vÄ29˜:ZßXÝe×vsí!j9 =nþ¶�$XúQØ]³û»•ƒ-±‡˜½÷Ô¢‡¤Ô7}+?>ä<Oø—pôh éEå ê1.#—iG¸TSIý,ªozL�À÷a Äj/ÀÅrÜŒzì‚°qoÃæ|R3Ë™#Ô«pòg<Õ·‡ºj’¥!ìÛß…Åv²D•ÈçG|@b�Ä$�ÃM]ô€º +�!\}ÍÉã Rhqác˜:e&pŠGiÃÑ{±fjNvÞ=qî�žMõ#bªžhŽ�WD­9_%“ +®€´juFhµØÉžî/Õ¿U…Ö�#Ø ÏâÒâ©·QýV¹Ñ*%f'hÊ‹èF-õV©>® @‘ŠQ�®¢¥°“ÇÀ~œQýF�>èbD¿AF¤,ÓҼᙶûˆ¤g +þ~nÉN_`“E½ß˜)o"M}e=Í«7‰â$:-REá_�s;ä’fs®þÏQ4¹G°XFT A›Å¢*ÆÂ{×e€4_Ñ[J:#?ï �]ô¦‰ +…ú� +'¼ZjÞ¶† ³bÜ5_ŽT´0íyèÉ�KÕ{‹vº¨žpÅÅàšž$ƒCc`é³§\^ÐYˆïe%Ƚ󧀚ú^m†ÄT_ÓÉsÌȬû}”Wp;çĤ:ù¢iœð$|¢>’þÐÖ¸qee8è·è¡ ʘ›x†€Më ˜w¤Ús”¼nõ©/«ûmÒ’“}%�€îtä¤ò5,@fŠ5O¸™Ï‚NYÒxô«ñ i‘*V}  ØãgtÛ…»´åÚ‡É6õ‘Úa#°ä¿”¶Ø$çíf‚ë@”ý=ŠÇ?ÖAsIeçh´²¼aÍ'1ÿ¹ÏÑýlÆz•÷jÄ å�ëàE¨-?äMŠJuäø#·A+º­qXàX�äÎGvòoõ +'ÉAO@-ÙË-ŒBÇÕ�ùHÜ«Ps2›âä¹ù„šR âw8.�\s†v*u�ßbavMµtõL¸«&à�z2‹áåµÏg’Æ| X³9 sèiãµ uRÛåƒ+6ý{æ|µe*Ì »ã±üµ_ðVJÇ Ž[¬õ�DQ€ãŽ”!d±©9&zMøa‘w]f±:×­B!|™žÝ¾ò¯œXUž?%>–T^%ðÊ8Æ6p¢§¹ï­SñXSÂñž±^#™p˜Ô¨IírhŠór7%¼$g×4žBÁüË2Gï©À'4”O=ÆŠ:Ô{óÐà�ñŒ�Ï +- +µë ÿâ%¶¥Bý‘»CŠÞcÿt‘>Ì& €F>4À®š'ÃE¿* –HÏ´#2å?ràž¢T¢”¾~}qÑ=�aQ¹)œ2^˜aT ±0³<¿#õ9žsñ´®D†ÍüuQ"¢Ê¥�¯;ÃÚ�±8¡§ÅÐ`ã»Ã‚ê—ñü?� Dºnáè0YðÔŸ�ž¿ã³Þ® êíÅñÙð ¼JI+ —BÆ–.§öRô¶gv¾|+`l×J»§€aŠ¿“$ Síü¨ BÿO@XÍ+ó&��8,¸YÈÝ–7;¬z�ÄÚÉE�ŸzÔ/ ¢ÖÛŽæÛÚ1!å¢q2ÓAi#MÌÀ¦Ž­'7…[×Ál ` •¡ô§@�[ï—£ì¿ôûø ±&ãƒßžò½ƒæSŸuÍ@0z  Ã¡»P$ñ/ºÎ½8 +øž+è-t% $n‚¶° 1íÉÊ3–Ö9— +§Qª9bƒXŸ—ô8øfèåÜç\tþ>&Uº™ø‹e-¬VýxU¼µ´~šÝ ulÅésÉ¡ç_'Uú¢rRLÆ�ÉÖè`ÜtÕ_§aéÀ6ëN`†^¶C¼­ÎT°…à°ì ©ˆ�ÝPš­*#÷ßRˆ�‚¬.ɰ†ÜZ;} ׺O¹¯óë àuÇïõµ_Ü=e¸”yE¢i)á Z†OéÌ™ØÛ€ 9e b·8zQ¿  FAÌ™¥�êÖªê°apof†l)G„ çúOö0¶ŽZ}J™ÜøÓMŸ~Ô—üâÞ�Á�\@Ï)3ôÞÉé‹O¼E…)WuHŸ,ã$ÜÍk¸��?‰ØÇÛ*d9''A`™„Ý«üÞ†6 vÒÂ,šŽå›àæ³/Ãõ¢æ·/^1„­%t`\÷N�!t@6¦UW¬œgx_Léø ûbi;�Jò˜î2ë^/B›­E^²Àâ0ÿ¿3‹s9È0Áj �€æ2¯Z0ˆ_ÚìN˜u=Å4ö$hµK¤ÈM-êÑ%�ЀÈŠ(…—´"&äWŒ/ÿª€+çâ× ë\‹‡¨ ;'ÌÙ93¿ Z½Ž:lŠÍÈ:²Ÿ¦!%ºØFnÕÙk}N­äA¤¯?+E…ng©4ÂB˜3à‹ðI4„…É~/F[šÃíîÆ¨Hîfƒ›[9z+ò–ˆÀ^\)z¬h{ìXÝ +%D¡˜íz±IAè'+")rZ%™üñ¸í+pùBu&öâüà:å7\.Q¢»â<ÏÿVˆwe#+7xw6;«XÀ¬ÎåËõ¼ˆ06™¦ë¦Ø‚Qª(fiB†RÏu@B¡(¹È®ÛI6…ǵ ¨—¦•±±«z–'Cs°PP±"Hºõ¬XIÿ&±žôb*¾�TŽŸtj¢%£<™â²kèÅ�p”ñ0ïåuàß0¸ê“ êÑPÕ_"1‚²‚?µßPeQaKè �õs% UHÍ꺰ìal`i9OÈ*\|\¡uóbÇÐStìœ8ÞÏ÷¼‘�éüˆ¤¸,fÏÄss„ŠÐ3ÖÉ/c<6 Q‘EáËB£mŸþ�--=þüþ¨�£ÔÔ`þF•äøƒ5ÌššX§²\'µß½F»¶°G^,Ú€ià€á¼M}œ�ƒá¯dîv,Èþ2’þ IAGe`²Fª @Ìë÷B>RA3=Ûç@0ûí Ÿ°‹×fxl¹ÖH9&ø¤Å‹$¯vÝéQ'/½‘<%9Û{Îì¾XªÓ½¢ïF¢y‹îWôSU „)ýl¸ ˆÌ/¦~£_ ´Ú6§Ï~çrŠûýL‚¬ò(ÞhÖÅ� +�–Qª ý†ûgL{$éþS¢kwD"ZŸ°=ÏH 02«~3­²Êjàň&÷ÄYD ðb¯tMÐ3]y­®¿&(Ê0‹UvfåïA«Nð¤€m¶ÆmÇ0[a�¥í¾‹õ”ý�‰&–�UäJŽÇ“œ˜wìA½Ã¸É°˜zIRÝdÑ.Æð»ÞÅWJ¬�×€¶rB¼‹=b³GóçLÚ0‹žäqó?xâ�^ÛÀOá3ì‚鼻ˆ‰†,ÃÀ1‘D >�àa¿5ñš¤rãî–vÄDwqå}Óhq¢cVaE„ "�¥ÜÅ$ŽÍ«|!j"éȼy•Õ‡�c€kîp¨‰Àíú«‹=¦-ý=ÕY“yŽÝ›¯|;öéNlU)½«=®Vð˜ >ûeE}²RΔP¾¢9~SÁ6ɾ€hœ +‘@¸jåACuäÞ:2ð—ÁÉ•ymùËàÐÊ!³fjѬû˜Õ;Ý3×üªW\ýÍÙÅbT¯h’ÙåÀàþqÿ©Î´¦²óŠ8 Z•]ìÄÅ‹±v+TvWZ‰SUàb1«}IJ¢/_æïibEL¼éP¹(Õñ�5,µtõ¡Ê'! "Š`«„0ÙöUeûëâÞ‡”£’×ņ•Úô½LEÐ<÷š‹Ð3ΣW™Üv¥ó=ApÞ8¦Š²i%°l9ELmE†û +�±î Æí®rCD#ˆ‡“Öä—PBhðç<È\¿áìæe·NÞ$ºtÊŒæˆâñ~T`ÝZ 5ì˜âY"c�bSÐnuÀÄÀó`œ'eEÓ9ßÍ…ÙœhÈèÏpÏ}ŽÜ F×çUMfŠR­ËÞ•¨ÿ ¹t1)¼¶CÛÏ_¬Iî0 pÅgb“÷C\ç¬üŸ4®[LÿúêØpÆßs8·÷ô�² ™ÎñD(u ¾‚ÿ° +êÓÒáaZ›mæ^M^æt¿Xïq@Bï}Ó½�Æ=E#sö¤3'\Ì(õd„Bö�ÃTÔÖ `>XQc?K�î™ÅW�ûCGÉGkÒ-P&#À֘䱇3‹ôÇÚçÕ$’¾ÞU÷¿‡a˜oõQëµs3U?h/ì7ŸÓÄ•p©¾Õ7߸֛CöŸ°†œ«`Šü"¢§*b&‰„Ê¥B¶dL}÷2Zܶ-k�”ËoÆ +cEÙQɶ@¦ƒW¼ „Úˆ¹¨GE‹Gë’”KL‹�G�p¾+fÎBŒdÊ“ïêŠ�‹gÊuÃBÁ½yÈ©¿ŸQ¸•xäk½p÷ß � +` ÕýŒt„äg„ÌfMa4§ƒa¨!{Ûv7‘áÐX›Ú(6þ®å0¿#¾Ÿ�$86|ÏóÔ i.Uå�rx›<%5ý�x…ªpZŠ gz)ÖR ä“2¥Ã`ÏOÞVÔnD_¯펄³�¶ß½µ^ž²³—Ã!D÷é~V•²q\ôÔ¥ÆùPfÐ3ÚºéDù±ÏÀ]½—¼!£6Ò\b�¡->㢆],_JDT²%MÓâ›l?Äâ"Ì\ÿž>Ôœp—Í1|#m,>ø€Ì?3�©LW§1×=ëœR]uÔ¶™]‹×¶·HƒO�—.¿±Ë³5�w‚„Yí'ˆ²Qx¬ÍíVN]f¼ÞßÉvê�$çD¯p´8è§åãÍ(€/ùnÓ´�£t‚Óp¤ +ó«³:è’‚([œLç’šÂCq¦ i+ÿ"R¸½;‡êë‰àz>2ùôœ£ò¦Hôγ™’kÓìЊ Žå¢bª¤ ìuT/ÜÉ3î 54«e¤Ý"ËœEP&k]un›ç-p£:€½Jú>ŸåØ\N«á„ÛU‚§L +�Âs�Ô)í"|¦W[•dä%c0¹í‚;½É%ùâ¨Otñ�Fé®Í[6>*J”ý…Á9²Ç\Ïbó>èP@{ ùÅÑ6×¼ç~`_-½Ù6Âõ�ÝVjEþ�ãN&š�†‘Uq ¼æUÕ¨m"·_7!*ñ´8�X£i*B±¸Jìq—XZT§i³ô‘­Wû«Ô��AغéŸ=ÈFZ=ÙÒñĨÔH aì {RŽ¡ÊÚòè´õÒã¿(êßÚmõÝÓ™ÐfƒÑ…×$¬pÿçN­®%(é"®™\^ü ´·jv$›ÚŽÇju¾Fe +¦–ï1zŽÊ÷çÃÛÚ35²xëŒ :æj€œ†˜úÓSlÍT†«Q<å¾IÂŒ¯Çh-’‚o#.Èù%S/÷ë!§k˜ßmKAá]άíX¿y¬—0iˆ!/{ Z›Ÿ%$†Œ­þwZ&æÛûï_zY %zôzÖ·0Ná"]@ç°æXÂh,â[´;- óѶLͤR”Iüôè°Ÿ³ Øòo‚– „O)ÓÃh´õok’›[:Õ +â™e‚Ðwþq{ëœå!u�~‹cÃ’°E-D VDäÓæêŽË s¦-�O„É +ئ?qKTÄcªmºá7Òz⃛DB„„LÛæXè µ½Ÿ,â½@ÅëmÙ©?É+Pk.º³¢üB¨5ß5Ù2˜ï4HíA±…òêWñŸ¬ŒT6î?é$·oAjÀ’AóНc€šY¿¯^2» +<ðÓBÁFƒA¢´¡Æ”sÅwP< �Ãq¾SxZ}eK8�Z³ªœþü6Aü˜¾€öß’“¿ÎçýM$™eÞW~2­™€1†œ—?À Pœè½¹AO�/Ê©+ ™kz˜øÎsp™’wgD�ú±ñüÞ˜ |às=Ð2ç�äè`„‚¤Çâ4¤òf&CYpþL`±}´fŠíû§@!m ¶+VŽ„1ùÉV•*Ëà�Œ{'Ñ3¨S1ûœ÷Iæ2ˆ4Šç5 ׳ÂHK4õY3©g¦ p °‰ŸÜ¬�°…ó¿I&SñšñIø¶Ç…ñß÷›0£g!;'òÎ-ÌUBþífõ–H +±t³fmf…>»¤°îfÍ +‰äwÆ­c�ÃfÆ7p¸ +ÍšK c¸�£_?ŽÇ’WfÍ‘Œ}^ p!Ö¼ô7E °´fþˆ%°JÇòΑ¯c·L–5O*´dÈÞÚc×A)þ A:3ð.›ýFv,÷Kõpï½s““�Xs3}Ì{] +åðä8(+ kë +°ÍqH6¿x��Á'à¿MrÅȨ]íÆáX$Ül¼÷™«ªÙV/K�§¬áç¦('›¬™Ãê߇B›%k&;¥lñ…=�ô¬Õ‡J�8j“žñá¹å†oG¬änä'ócÍyö ‘ìH6N,‹<õC½ÖMìÈÁðo,cabª}Ä~QºÃ1Ýîk^Ä +qî‰ßp(öÊP‰¶s|ºšw�]±f¦î/]jflfIÅ-ÅšiŸ&[Z0hïT §Á¹\À'X™ÊXðµ²MÁ™÷jÜ¢,"q(¿—dÀì·?WÙ³U°9¬Ù»}ÏHLà5âÆÆ…•ÌrÖÅXé…c…KäZÝ„‚.Í€Õa�D +kŽ +ãDÐ"ñYdƒþ$H6Û +ªX+‡óÕ1$Bྚ!f—äMœÚÜÂR�}–ñh:cÈj ó„í>_¨æ"uÞ+6ÖÜ ·C;iFÈK˜_w~åbÁÁñ�iÿ(î€2„¬ä Ä„‘[;”)Vc³¾fï©è|#øª„âÍãw#gr5ú7©ÓŸ>nH«˜Ž’j+ó_Íå„&÷1…�ðÀ´Š¼‘çÅ‚U¡”¯´mp Íá ²Í>0ºß%ÞkÃßæ 1X Ak9=FöJ×v^O¬d³ìÌ8…¦k¢à•Fò=1(ïÈ>�Ó}…ÒG,³óèq11¯˜9ÕJ 7Á Ž‘•n¯�ï‚á(²$Àc¨Ãø£¦YÖŠDq’ +Ï=|‹¡µ�ä”ú»E]ÁIëµþÃÙz5Ó¼Y)TO°Œë¤»!y%#¢Ó“븆ýÚ·,ù£ T]�Š@•¡?Ò–Ž€HyÈï¢Ud7á¯ÈÆ^Íʶ:tçóÍ~x ÎÖá§TN{Õ>z¬$bÜ£¤‹i·‘IjØÖÏuíã¶á“®^Íœ;ŠÃ]…lFYHDÄ?PÉÕ¼S¿ú{øZó»Ã¥QÉÍYØÃ +óÅKkzYAXr…O¯ÿBDù-� ×J?ÐJà\I…a�qv§÷£Ïµ\—½F„TIy4ðPˆ]HY�¹Íö^vVÑ_MúŒ²@ ™¸ëB¡Å7¶Í‰·¶i ›&‹±� Le˶ 34‰Ì°æjlê&1æµmÓg[]83mÄÞÆPÛ´…ª*ÄÛ&÷¨ØT’š2Ùq[ ÉµK4FމM›OL®:’ÎCäefÐ ¹ P}ó MèHà†Äù¼Èm*¯[3-âÉð¥Oh!=̦J¡¦�,ˆ�ž¸Ú�0�׳jH´²Á¤Ý<”ç8hÌÏñu�ŽY[À3¸Ã7?<�d‰A€üç;í=uŠøás{Ø{{Ÿä§òaÛ JÚ\Í˳ÉçÈ�+ÃfÓXÞ `gF`·™jÖÖÉ#£ÿó€P¡±AKXƒâ4î­¨Q4ÔÛU\Í3™à>®f³@ÚɨA#õ逤ADØ‘\v}_TlÎÛ]rƒBµ\ÍÈ¥ð蟄î±Eð² É_ØG¤L¨ÿžÑ³_x8oÿY®fKŒŸj·s;oMçÔè%| %R웫™Êg(ò�(r5·IC²¢6×Q#¦ÕƒÔè^€€¥ˆfŽ£ÁÕÌ'd|dÈ1ñÝ©u®UrQÆšà!WR‡åƒs/vôDaM:€‘a誛b:,xþÛÐgxÓÏÇ÷¸©y•c||d@øM–󊌱ð'îô]ÇZsÌ$”ž²�U…šµ˜8Šâûµ­õ²y]z˜RsUWÉX†V³—ëêÉGëJç°œãC¥¯šù.‰tylë\õÇç»wƒò³˜h Ýuƒ(cm«ËÔô�bsLD�å¹zç †RFJ\u ꉭ÷~Räó†=²-¥‘JÜUFÍÌɰÁ:8c�Ï¡©+T´Añ‡»­Úù|)(q•‹raÖL8C�—êO+î/#`Ÿþ��ù¤ûˆŠÈ6ÉpO¦~ÕŒ 3<õè;€q(òœÁ)ïøª¹�ž'_R‚Fý^zFZ£ÎÅr©i¦$xÞÞ3š¥$ç¤ +÷QÄUãèïP"¶,„ñ†f >Jd`[™uÕ'=U/JÀÌëg¸È(¿xH‰&à¨T�C'ÛR@3T±€·YyZêgIÿó÷¸¥g†à}öæMRÒÐfYÉV¼YAvfuùwܱkÍŧ’à ’É€Ož f4PÆT4 ²¯‘�É(ž/Ë”`ƒ[9‡WÕྺIcĪy…dL™nþªfÆ!\T¯«š¡÷âdäuéFúñÉIVE4&ˆCÍáጤâÑl®ð ÑSØ!‹Ì6Hg-¹S÷ þ{c •IœÊCEð¸$¨68và°ê8em~QŽ;ve,a–BÑd3—â†ê ‚ü¨rœÉ–¬ðV—Æ´€xÀWm·Há%i³àÞ‡æqÊ«‰Ü¤"ç—IÕwOiÆß“5ð-1�âÆ]BÞFžÎ·Xñ@Rþ]I)ÕÜÒPA�QÈL¯êÄ¡o«ì’T3gÛ]€À.RÍ^¼'Úƒ¤š¡h³=g›|sáZP*0j-£ˆ�0¨T3„�‹ÆŠ`·FÄ]‰ÚO*'bUs€”‹jîeíJãöÕ´Oxèl3DjUX† yFö_ú²•óUïå,rßߦzÊÝ–@O4£š½?…Ìý¼C=+‡<'9x2QÍG—AôžÁ|�¦¡³òt�‡]u +–j²7TóñùCû¬Zê)ë°hŒØéx¸‹öc¦æFcÔF�–*€À,ª™€¦‡�£±øx¿cYnÍÒÜíÀDk5ÀëÔ–83ï:ƒë5ÞR_DØ@(¡šËÝ™ð®ŒH–wæÇØqö*ˆ÷ŒÇj±Ù^¢�°>stream +!u£S‰É`“Ûxj†*ÖNæKÄ Ø’C²fèj•Í3Ëô°f\¨ †=)´ÐbÊ7�L±é¦f´ÀÐ �Õ¿\ó AŽéÖbEvÂõ¾UÀ8°vS3H‰ò_J˜Y›ð"˜°‚Qœšá¿ì:ŒÖl�Ñ�—Ì,Kx¢‚¡÷!æ.d|>\[´×–ìI¹ËKñ]k¯|øB‹Uj©?”ÕI سÁ ÒØÑ½Ü`‹í°õCAf úò t2ÿÑÓsw›šëÛn1ÀÿeS³Y,]x’çšš­@W'—#朔�$>–†�¥é´(¶ž„�]Ÿ¡Ô9ý_«,5wTe–¥ægA.§wøn Ô.ÿ’³j¼¤�†ÖnX=�{zªR>©+04 [„M�¤Â›È}n\µøÆO¯ž—Þb.Òç(µª{[_¥f½%”š€ü�ÿ¾x-©Q–”/˜;õcãM:Y&ˆ•„aÐý¡H ä·¤ÅG‹š;/²�‘c° ¬Íé%ϤfxÔ]�”ð!"4±Èv“š+cê_÷z)ÉFäñìҠˣùʤ#Àñ›¯‰dkžÊ#©™—.Hr.:RóÕÊià�Û¼&b´ÿ©wã6ÔuýŸ“›GÙ)Sхꇕ~ý…1G–‰Œ5¹E´ß̉‚ÔÌ6Q‡(YÙPþ¨ ��¨+öÁ¼H„¦›ÄÐÔ˜¥‰Ë·E@¦ü”ýœðP!qÿf`½Îóðu ,¢½ŒQóÉ·Ç‚£îÚ÷©œPì£dÃøªì3<ŠxS|6yñõ'ÚÖ~wbL5¼v•�QF4QP-vc¹sså5ëZ½Ð?wG�ÖAâ‚ÅýH4ñ+bBpÓB«W®‰­[j.Õ�­|yÂÁ�Áôւ⚘fY'nĆÄãAh±]ÛÌ Y½´b&é³m„paò<†”¨YH8PáŒ5PÛ 9Ä÷÷˜¨Y$æèR@CçñŠc@•ƒYU}<{X_w²@å$ÙDÍFéî¬+^A™E8'‘Õƒ"jÆ7þ°ág$À5þÉEöÏ÷O‚ac¬“¨™Uý�F+W{ÏóiÊÖòär†¨ÙU~i°Þ3�l/mŠ}BfùKøg³T“,äÎËK�“‡ÿV§ø¡&Q‰• `VÝ n Ê +p`dŽÞˆäø7ÓÝ?e(Ïíôþ- ¡¥B¤i> Œ¨¿jjPŠ{R9I€¢G³íf\¢(×K©¸�’õB)_'¨|J”A˜¨8µKl1¹H¹_Fqµ”XÅ—í_ŠA¸Cº>û“TcäõÁ~2(ê0y2‘Qš ‰ŠT•ñ –�ú•(“M¬�¡q„««œkq‹ù í³^÷áË¡%X¼E(bqW(¢ú—¬$: ø­p²RïQǨl-è‚�) 22eêö�=–å¿^7ߢQ}A EO”¸x¨rÂÔq*÷Tê¨.î§üø¼À4jE +²bÎ ëÀZÊ«—d€Q ðé4� ꚥDÓÕWщò4tšI"^ªä �f?ÁTêWX;d©Ã´²�lWsÁF½ÈlñI�ñhƒ¹AZb�Äïr˜ +¨ÅÙ¢Ö@àgæñ‚IÌИ÷æ˜Î/u"QÁÉ~>Z&ªúŒñ¼èê Y6OëFgû_ïÏJÇ}D‰›½ÑM��ˈȰߡ텡û3W³_©•y +§-"Kð•÷un‡C,• ¦'NœB»-ŠÜ@Ü�€âB¢5îØ¡PvÁh^A…Þ>~X7ͽ™u^·nšÓxh7ÍÈ 1À­È …pëMs@€ +x�Æhð�ß‘œf}t±Q®½5­K-+P´œ§$9.ä.WJd°Ù„¦Ù£²†#ŠaÞ4S*²ll]ï Žñk_Î�}û1ë¬é ±Àâ¾ wVx“AŽ�w¶H磫ƒ®SùO “Êg2eq�•ÿ˜Í²ÈŽA,Z‘RqÀÔ ›fÄP@S £»HåGÉ/\ŠH±0Ìab´‚2ü8Éòq'ÇѬ?þ]€ó‘ÂO�;#o,ùYû�Eafà|ÁE8Sšf!û« Á]áŽïöE…?'X4ÍBQ’ Â*!A™w0 ü5tå¹Ú½ø~ +£‰ Ôß­–yp \p-eÓ4«ëŸ#̳°ÛnsÙ—T„oAݦ ­8VÊ…yÍS\Íèœ]“BÑ!)ZißÁÕüÝ 6^"{¨XÕ¼Ó„yVóÙ«5*û¡ûRØ +™%['¡`X>ÖÀ…ƒ=<ñö›•ƒª¡â“[¡+N<ðc¥ ‚=§^éOõáƒËätTm�£oL…‡vV{H×V§í¨d=QeÔ;½¯ÈIÝ(ÆÍ¸ëº³¾!i ùuñ^­šÀúü|ºAª ^î#šê‹“ÓIœ!Sûr+ˆ‚/¯ùvzŸb¼2aâŒv9àOu¶Mlü‚ø@°¼B~¼h~’êhy¿õàkußÓ,Î_qWd ò}ÁæÙÿ…€­AŽÀ�êÑ\s$IÕÇKí)Á$`T™:xî šA(â5}»£ýDHàðXo ¾‚T¼‘yj¦HˆæjÿÞÀºBÍ+ˆy¸JvXĽšÄ�‡rMÀcI�€»Xë-WZ[&l5¶#Ø´‹ha�P7ÂÔëw‘$KDü�úfyÈÞ˜<}3½Bå™#´r9SzViBœÚô͘èL@[ž@JFáÄ*süL�¢`Ò!ZÃÍÌuaÿg ZHÉça=”&'Î7»Äæ–ðÕ}³þ Ã+^ø ±Z2n¨…TÍnZyÇ�túú€²_V<æ›íOr!öÕ(—;wj™ã"ýŸs3KrØ+`_)Fì»G + ¾þÆ)AN”Ê7'Ò Ø!в¤4i™÷–jÇ n¡‰H&P.3ä›Qb¼5ö[LÒøÂ qÔ2%8‹aÏ}¤©š›DS©êd¤f’a Ì E㛉ž3dßß,`[Š›‰]1œœŠ:±»˜Ñ¹hõx6ñÍåŠZÄ7ÛðBblq¨)OÍÏÇb“PÙã°ha‚Öæ¡„M�Ññ�£¹EM·�KTô•PuMI˜Jô]ö©á›Ë•Jäù¾É Ó»§‡‘TΑþ"ׯ†¹y— +³ëß|ÎõÞ P‹ƒû�àðÚ`Ü 2Œ’a ¨sL‹87�\qT¨3JzJ_±Âš±™Ãÿ y2±E—du{5tBù)Á¶`›XpáèÃüÕ… êAgçlïºá‘Á”Ñ%P$ ×ðè$@¶fоŠp9½ª©AÖ/àùÒ`Þ»c"'Ð…F ÇÁé™óv‚@¤ØGÝA\ƒˆ…pº7Ó€Â]\ÃßÖ€4‰�>ôìsoÞÔ,GS“ðß;Dýb‘¡7Çm( :­">Q#µÔÈ/H1¾Å½¹uzÚîͰÅåă{3B>•=ÌI²=$|9{Iýû¶™Ýf¨)Îó>j1Ø×^ üXÊÑ¢ð÷½BE³VÓÙÆ µ7?f�Ë0†ä¸Ñ‚Ú›…ƺq�½™ÖéŠ]»ù�ÇG‚ÁP˜¥”²)ê8Bl(DnÉÀµs%U‚öµ¯;åxš7ª/WüŒs�PLÉaoÖƒB­¼¯¢£ûƒYÞ@ñ(ãØ´ï�%$<VÚpE­"è 'p÷ÁsÏê—…ð ‡oƒ_k†"§ö*Æ^ dQ¨4¡ê=ºoË&ÿÔz³¾hĈóBK¹5D´ÞŒ°È}ƒâ>])÷åV°™a½Ùp•+6®êÿˆCn —-GPÊf€5~s÷�™»ŠuWl:¥ 8OÌŒ+)H9¦$<¹™ä ´Ç:²dc&UɌߨÕÊ :§Ÿ6†oÊÕ›Û“!æŒ{©Þl{·Ãê\™É#4t‚Yp|NjüˆdU­*31¾µÃgã¢ä ‘ÿëôæÔà‡MoÖª zÕP“éÍ%Y¢»`tM…d::çü£fÈ�ü3Á‘£7#/Úçf!TýÚa¼-u¥ë…ú¿¹;Cad¨jPùʺHÙ¤uÅí¼Âù7ÝúåbzïËÌ  í¼k[Œ³r÷¦àó‹˜é¢YÚØ±ü,Λ"@àO”‚.˧‚ ÀS|ÌæpïghO9&·ç6²�µü¼™Æ6^Ü$Rʳ8©§"cndéø£—¨¨�7gÄÙ)nOò+±3ÊìK ÆÑã� ññÃЂHùŸwÍœ77ëoàC‚´ù±3Ù— P_|�H@5•ˆÜ¢Í›}�”ͼ™gÄÙ4TæÍýmÝjT¤­ŸÄå7áúÿÅ‚çž|BpB¼.Gö¬aiäeKÊp€t÷ó ‰¨†‰ŸGõl•eDó‘n˜7Û�A�bg{^s÷ª!”‹—T0xìc§¯usò}]:ú �œ*ožöôÐ/‡–Ê›óR[ bÃW(�Ö£‡ÐÞ„y—Æ›!Ýôân÷Ê›]Ÿ™$pppþ_eùÇ¿6d%«¼y¸%CQô³Fb„ˆÊ›¡Šˆûû‘ €³ ÍJþÆFxeÝ?Âdvj~ü­Uç@ƒ<ã©óðƒNæ}æ¡ÌÀ]-¹íÙg ý²ÛªN]I¢+›òæ\a�t�‰ña%n¦ê9øÞ<‹ŒzuQñÝ5r1Ïua‚Ð/p"sÇÀÌJgÙ¢(%ä†X“7׃¤QÑ ÎÈ£± º."À¥žì3®ÿ]¶ Ùê1?ßÏO¥PúÄ2˜£ˆ^« Ü:¡òÒÃODb—9›�Á¬;’øÒ|càãÍ0»fH©L¼]gJ …È&ÏõŠÜÆŽ7ûµ$:rëx³eÀ¶¨ÄtTLÿÞ€=ö�–ÄHë¼0UVÈ?ƃãkŠŽpÂe%Ïí(ºVÊašçRM-\‹À±è"ÙºA;Š;®‰ö<—4ç¯ã¾âÍlHä0Ú¦µž¥z¡�ÞªœÄDVÓ`ŠÝßÐêù="gâÍ­¬¨^G@¿‘²’üFZ"²˜ñÙ*@8”44sܺÖÛäÉ.KAóF´Lù?vûÇ&+/ˆK‰Q¢ØUP<3‘ïæK•`�µA¼ùTôï‘ÜÞ ×r´æCuíË—ßÑ`:ò‡õdû¯-â¹áÍ„EQ� +ñ›Ÿr¯”dÖ8œc>dwÛUäðÀ6Î/5þ\ÝÓœoþÅñX?�Ç@U›¾^�k@Á#vnÁ,+´P¡ú +Æ/‘:#½ŒÜgÓØ�ýð#.æ æyw¬—Ø~Ž]”Œ„7×a1ÄNœ„Òç]MX †‘z)EA0‹G¤!?‰ˆ5ó„œÅ°ÙÀøE9J6÷éôq%¦¿ÀBB$†³_(iòyDèÃÇ‹ ¼Ÿº Û)žU'¸½Ï£•ÊÁ$ÅÀæ°1˜Z`–Š20 �< �%“bˆˆâ‹6äS�Ïç³�YÍù"—ü‚Öí h£'ÞîÏGÁ \°rÃÀNøušÏúÊ 3|†UyX¦]@.0î�ÃÀúQêÜKSZ4°ÚéH9íئ”œa�qjƒ'�]Òkx„µu�}¶¼ÉCÑR^„p�¤%#S¤Ot)N¬í¦1XŒJ+4á�‚–€Q|üšMά.&pãÀú<� +=“×í!®Ù¿èNÂÒÇ÷ ¥]"~â¯ìå3ƒ„¶­ 'Ý +†ónF%R;Uá8ÚlÓý#°x a¹,å#¬œf~Ž�MHæ�„ƒB2�§E‘˜:‘CDÞÍôßµ“òló ä +‚ÑäàH&æv÷ùîÇ.�v–ónn�­\½]7ª¯Æqû:wÛ4ps \b`<|–º«÷N6ïæÝÏÏ´(Ðòn^Ð/ç|@�wóRaÀk]y¯ ñêÌR”»é‚ªýÌØ³ö�>f»……'^¤Óh˹ìf»›gF³83ÐO‚lµÄsgµf’™ Žu‚øSw3-ÔN¤ÌÚ˦Ç*yo¡t7w”WèŒîfƒâ>ã ÙTØhåiïf·L¹t•ÙÍ‚ˆXZOŽK^iRŠÉ–n|4Œæn®Iö»ùªÓCk 5ÿ€?U»âLYïÿë…丛ñE”Á„WËÆ?t9�ú¡56|y²:—¸V…@]K(BãºWÌ)^Œx4¬X Úë‹ô€äŽâÑç¬g?ËÛÍ�ç%ú;“´ø:À§‡2œ¹Ý åû)û�Ûͨ|›g:DË–T–;UœÇ¶››ªÉÌpÇ:(ÛãK*û7ÑWÃNàíÙnÖÒy°�Åå†ßµÀ5åOxY˗Ը禞n)Üg_Áéµ› Òžf •Á?¶›õ6” yô¯ˆ".€@ƒ+_�3®°±¨‘¶à :w+–óçÇ5SœØ„l›Y¶‘#^")ÔÐ"Qø…/Àu³Š×QÍ‘”Æšÿ?‘–E†ö¼*₼ö{Ÿ©Aâ€ÓÊÖp±ø¬Ç…�ix专‡cr´Ò7“h7·VUÃùñh7kˆô¼Dk"gî`Q�Zš0<ª(wVü�Ýì«*ƒb~dé˜Ç³›�¨¦IÈÁZ{náØªð£rÛcxV[ ó„sm¸-_„Ÿ-R»ÙŸç(#ñ›g#ªpÁ çúAGO,>ûdˆ¸QšÄ¦.%\e鸀0ÏùëRGk9šf´ø—||ìf=¤‡së«+žuhç#­ŒÝÜhó Âb7 d²+£3±›§¨á”YcWÄØ0²Ë§H8¾Ž +´�8TI×»à0 +ïÐÜ__qÊó€7ìù¯d„YíèKíkPä+x5’àcFÚ@^Q|:Ž+÷ØàÅ?S{kœîï LïWáaíÃbvv£¥Ùä Má'j*K$!ÓA£¨ìu³éŽ5†zÝŒÆ /D½gOÿT¸KŠëVÆJrmៃwüpæ"!ÚÐmØ–Ù仸ØúÖcä¾+bÎBëªÜ¦‡1_+†¬›'¢œ3E²)!§Ü1 FcÝìï r?8¤ÊÄ¡¦é]ÖêÄ ÷º_"Ð`Ýܘ(0æòWLHU�&t åýE5…9µu­—âÿÐÏ¿în�øe‰E­Öû@žçHFEž‰iû\{þ…HÎuP†JS³¸¾ƒù«Ÿ«ÚëK"­0.ÖÒQÓák¿Æ5 äm”Ë­nö�Ò(=ƒ«nî}tÔW#ÑÏ˪›­[ª›Aû(´D!Á¦0’®/UŽ‰šø˜¿|³¥;)É4¤.u3±ò2)þ#F_¨h�q|�º°0ò½ýÂb› +n6´8¯:Q7³¤µP{(!<™žÍ=:ÑÊ{R“œ|$$Y7dUúð{à‰$Ð8UwéåmOlÑ÷NæP±p§›•¶jq\[�VICÍﬕ{¿×­ÆÊØ… BÉÌ—b|"ºúÞ‘§ ±j>© jÈ›n&[:¾çŽ­loºùÏ»êžÊ?½6P« ‹áhS•‰IÓÍ„ªU”ä.%|d¦gv Ôx,‘2CÁçõzúTvèÐ_ɵZPÚ¾]oÜRÿ¼á +ˆÕ—òõœîp¸ÝÆ4k ž'εŠnvÏÂŒYŸ,ìâò×ù�°%&4³§L7‹;©Ò©{в>.ä²@1Ü¡‹r‘zÙÙ#Y/Ýì*ÉU‚¾‡f¨\ªÏ ÒP¸éú +<‚á9ªÐBðž­:%˜¯ì-)ù6Dk ’qÖ¬$õˆâ„z~[B²—W]˜KEýPå+ƒ ZF“ðù³xV4ÝÜÏ(¡ÝAaÊŒ´ÃøÎ€ÓÍÝDiX�2 ÂYƒÚa‡‚†€FþÜ @Ë¢ÝÑõ0"�£Dÿïá,d�œ{óæüwÐ>ÅH—µÅM +Ìc”n†É©Ð#Œo¸[B¬•î»ô"Ñh¤×dÿ+á�ã¯dôD}*L®ñ´&#Q´€´ž`+�‡D‹¬_”¬ÿý-­B!tQª\ì’øõÑÓƒ‡ÑÍÓõKKødÁ�$W� v� T‹Ö¨‚”¼ÑRW,~D©bÝ{œ'xfØE7çàN +1+—ŒËЖZÅùF££`™‡Â#R¸Ñxì�¢zFR|–æf)zé\xèæ‚›�FõTÚ Ù¡—`Ξ×<CBB7ß4è–8JC˜§&éè ›y×Ï�9Ý<4%‡+§P|åâjôøGqœ›yóènß>7ËúlèMïm+œfÎ9 Š� ÕN¯S%çS u—Ú’4Ý9ˆüN�ÙPÓã“/˜7>7ËëÈÒ:�›µ\5ÆÊ“@˸¿[ ºFªø +¬&* mfÜX¨†s—WyQÙé[óC@*ã³Å‘¢�Äù.<7üà5$|UâÄìZ–ó_nÚ�I�©%_œ»5©æÃóÔ�¬ô]Ú¸¯+=W¼pC³b_£Eb¼àà@z't îÈmÇ�Ú€,08œò]DlÎpBܤ(õÈwŒž¢éÆ›só�Øjά°ä£æ!ìâ¼ShøI}èÊÍrë”é¶kþ…‰]lA9)+gã›á•Ž˜B=ÙòÂn*RoÑED”Y. Qاkr.sN˜äôй90àwZ› }ñØï½žtþiýþ’è!bQ¿Y�úøØ^ „*4øBk ¼Å@ÿüyQbÊ�$YÕ9 ƒØÉ¾ôõ�M6M¦RŽÈ�à´ØÁ¾À›&Jˆ^kP /÷€˜lÄ�eÞù¨¹PuÕs¨Räd°bê:†¾noÃ+›lß»Lß÷½4¯Â÷†¾ +‡-¼íÞÀq£ÖÑÓð‚âãv¬^ßýóT{»>Ñ4¸(ËCr-O¼¦ÌPtðÕ#®Ø¡»«!´­‚›õ¿J†·O­„²þT.eÕlãXP2<»f#i(þ°Ç’Ð]˜_JGkÙ,�Ñ~v =L¥ˆ BÚ`Ê“�s®U†Xº·C±0�å¥K_‘ÔÊÍž¸‘!D.#‚M‰ª(13©}|�eQh¤G¶��Âø'ï +˜±O¹kð'D9Ðåð¹«ä5}'¤ÝJ$=þÒ̲š'æ¬ÚÉ®Ì}]ï#7Äu¡§*7 mDvÞ9�‘ñÈ]GÆ–³9:·ÈÈ:)7£!Áª~?”–!ŽVr8=}6›uÃ?!³^r3q"‰H’%7“œ3`¡'Ãé�~ +û"5ˆ¸våòyÎpfÔ›f"~óA7˜ ĪîmLhÛ™ƒQ.nœ_ÅgÜÉmÌÏèz`è¹Ôáµ�}9CTC�ܬ†:áSRkÑCZlZ6,yfÆ·mŒ?!ÜþØC¾ ÚñZѪÂÒqIÙ ”§s:ƒ„ˆ1Ü ð‹xÑ …j@ëpTÃÕæg¶PX=Ò!Ò…Åœ™ +N˜à0 +él§Ûº ‹ÝJÎjåÞçƒ*‹8ÛÇù±J¦«? Ÿ/`–�E¬$Xk±Ž›ë$Ý3A4åm!TÔ™&:“ Ôâó +sf²SJÜ}‘Ìf¶ÍÉ6ðÐ B¯MŸápé{L߸Ybm{þ�âh„E€º8ß®j—Iyþ×vž<¸¾C*Ít +@{E™c b1ßÑI_bu– b߀^éŸM¹^‡�ÅÍ¥8žþÓ’YÌ'n`íÀYV´âæÝ ²K™WŠy�gh pËIàÙy—XœN0LÔHK7óþ{«[¥@öt: MµùQÜ<ƒsDâÄø(`bÆ Ï§×@ì0?µz@ÎÍ�‰’aá?çhFÚ ‰›û'Õ2ÚxÊÓí5�¿Z‰´è°à^Ú½xpßüØíelTÖoÍ[Kå¹úK¥¥^ã¬%(n‡˜}ÏÝô†S䈿Øqó9€[YîÑ07_|Íjz½*øŽê¶ÇàXÂV’„º¦Ípk"ÝF:ä•„Ðã]eæ�êÐ"âë}²2¼ù$èÁØöÇõ<)ÄH*”sbR›“SQÏå@Óoïts„¨¶CG lÐI´Êß·ÙŠÇ2#¬Ü¬:j^6™¼ÕýC¬f{ËÄÍ}»4\!¤§‡»0æÙÔ·óÓæNÐkC•­òb�¹¥Þ!‡.§0¥hóxWz»Ž?ó‰¡R–V?Â?Fwª„�žó21M·UÖZ70èÛÙbDÐQÇ„w³Ã×EúWÑ�ˆÉˆærŽ,�jœ³ 5ëòkÕL¸¬æ÷.9æ�×wcUuY}.ÒlÛŒ4Ó]y*NCŠ®Æ +wÁ‚Io$•šûH ¸ª^Ò}^¥óroÓ1fa™qFùY#îEq¦L ÒsòÅ' Ý'ÇYе„¡*ÔÀÜ[³Ü/B ^ºE;ôeÑõ‘e=ÓéA舿J(û˜ùÂÿ‰ÙÐo¦†Êu +'Èå@BÂHºˆ~3†\ò {¶r:ލ®ê�¬Ãw¥Pw…p¹Ï[ß6� ´R&�„à �¸å@G84#Öƒª»ƒa#ÜD7™6}IÅ)Ì€Uø¼ë7}ìã�J0™’ûÓvز¡}îÜ:àf)wûV$C¤©ÅžœœÌgîZ£^þ 7I+Zê°öÀJ”zyd +œKxiˆÉ�=a®e«ˆ!Î(„H¨6ÍPQ¯4šÁrز,ˆ¯‘HÙ�¹@½”¦>Sk�Ч^òø[ ÆùxŒÓu´•zq6QÿÄjÄ?"H”�¥­`´u¢¢¥Gs¥Ô‹´m’l½(†zÔ9»ÜR¯Í7ª›3˜üÔ‹­™ öŸTGl 9ÉB�ž ³H:4j2Èÿ’+¦ÓQYb¬~‹Î;J´;}w›º}5ꨙª…B꥽IÆ8õ("ɲ �ÚCÚ[ÑU³šd[hXI½€ÇâÚu»ôG½@æ×!æÇ)RÒÍ2ÃÞD®›�hý¦# †ÌL7!1ç<œW��0R¯1Š–¢Äâ ^º,Nùwx·F) ä…[Ìóô-.‹øH7Ñ. Ç7h�m¹Ÿo¢�›ô+‹Íò|E¤$ê&˜Z»x³Í˜»Álƒ Þ® 9º | êUÍ·ç4^ŠžWˆ�6Þ'™E_ÏÙK#íóY´™Bø9³( ´{þð2Ò! Ÿé +‰ƒœxØ`„>©•®4¹ÛþeÁªaÈ¢?ÿ¢Y4…ænC¤ùlPqW€l¨g‘Ž<œje‘ñžŠ?J‰à�N­òµ9¬¯Y´S +Ä=„:„èIdR¹n®X÷¢ 0Ë"°»°� +ß¾s‚?&Xò„ú�<± +�šûÂíšQ_Bê*Ù>ƒ\2ì�õ€fo¿ˆ ‘ìÙEª%”Ò @Å?Ñ|·|˜=]C1 —Yô^ÓEОR„;mÄD˜kä¿iRpxHwG¬YD<ñýYÍ3>ØÄ±&ãæ°GukJWœEegK& <öG^Cìrž*õ]>“EW…ÜoC™øáy­º­È†®÷ƒ(hiJŠì‚Þ2è¯2OŽqBÌßÍwãkþÞlÛ1ůð¡A›99ÛKoDÝÒF¾ÙòÈÔËûË¢VuU¬˜Ø]Ì¥Q:ê \v$k–ÊD½È - û`à’b8±,YóÔä�IAIìz÷òªz¼`…¯ˆâçu21–yjTXµI€¸Ã2ÅÇ<ÐFEa©ìÔÞAYñ­åÊÝn–mˆtY’mÎT³èQitJÛ�©^üë úE±î� �Ó2*ÙÁf™rsBó[”r$qÏׯ«? †X‹å›ø½¤ñý†,¨™s—‹t÷w[–$¸ÅóŒ`6(h  ‚ÇQV4Úeãc艢`^>z  JR.¾ªˆÔA,ÀKõ`ë%©w¸½�¼ïà +{{4ó-¦ÝcÖTë2ÊÐö2Šý�î¼-hëÚ!鯥eÉ ZÀ¤Ïñ†ü“k‹^¨¨¢€‡ÇX«Á`‰�ùè—Èny¬‡ܪáãûŒ´ôvÿHw]jh&U„m[’®fÙ”¤"”‰ßP­bßi'ÁT: ÓãAip ½J4 Q ÓÒÏá@_ñÅÐ*èÐë®cFž’+ Á¯@äØ)7è-¢j±26k”Ó‚Äát]Qæ:¹£÷Õê¹õÛÔjcñB¼;ë} ‘A$�—½ˆTÒFm?Ä) ©*ÆfßúÎM�im3eª²@ÅÕŠ…KÆÁ6#›FCUWÓŸ€¦”»z�ÂÌnšòló’ŠŠZqFlÈ?lÃ6E(zûåêÙ5)¿îoÇ„WDäLá`BbÖK(�:ÒÞÈ" kU7¦ÊPq0…nF6pU›iŠù¨D<>piŒ…ãáXhê-{€W:B$*Bx`Z‡iä Àˆ€"3 èæeÊè­¢_¹Ï>6fJóáÖ!ÌÇ@"l.Azä=ìšå2« _l7¤=ñjžö‰¤ë?ÇšëÇûÀÇO5ü�œuÊ={I�@ìLtþ­ŸÞÒñ€kœ5k¨0Κ' QòÀRÿt�Ùûbº<†Ÿ7Ù-‡˜ "³w²£¯ÞùêÏy Œ· S”|Þ%×4¦•‰p‰Ô"�ûK� ˜“¨Kú\ò]µæj‚œ¼ì—Wgú8Ä~˜Æ4æ?Å=y €'VW„'k¼Y“ÚEpr— Û>‰ô¸¬ÉfœÓœ\ëw¤‚<#ók]tþ?{,ž=ÈšDcr°O'7\´Ð™hI4vÃI ÍÕŒ1p2Ü/e–ËÛч5™,2½Ÿ+$Ó.Õ:¨›øÓcÓuàR½Á-!,!ID‰Eõ¼´èh):«˜¯X׊Ù^nÓRif¸}ûÜ#ÑkšåÝœ¸ŒäÜ`–ÍAï Ý­PË NÔ8Ãû[-ƒF7ä™%Mév´n�~Ǫ =ÄÚ =c/´¸%bÚ»!õÝ„ûO÷Ï˹G“SÝ ¥ªnHÙª°Š¥À¬\�¶2ÆÛ©èÐG…Ê•÷·¡TáÊ¥�ð‚ òB…W –!ó‰Ä_‘Þ_E•~å%ùä¾lùnbÛ]´`ÒÐJCS ßÞÂMÐe6ë{ö’ƒ¯Ë:F|¸8)—_€ ”ÿ8oŠûµ47´&”ô œ¬Ñ´Á¿‚½$ +œŒ2pàä>Øm™“õÿ›5¦�L×Ð~›0 +íûpíˆúÝ«žœM٤͌�®“Ë*¯TŒB#}ÅÓëD[þ0h¥_pNNY +Ë ¨º²?k:fx™´÷yy\Ö„ë—þ¬s•9³g5Ï_Tðô·œUzsãLŽÈMÖVr@>†·Ñäê¨R‹F p“û55a¢ñßȳÑ_%}›¼–¥&›¢ó +ÝäbyIlhü|/ĺ±4"W�é½5–ïÕW_ÃeE©=ƒ£âY1½FŠé#”»ë4EyK›ÌFRLxˆ¢¬Ýÿ1è ×Ót#{ÎÈkk‰Ç÷ŠmI +%HÚ"#(¥µRöPîuÓcS6½HIi G.´ŠØ¿>œIJ!ZÄ �:hÕ¬ÓèÖ§Abص‰ÕQ›ѲUõünÄÅŒ�ç´#]T¹nmC«=ëšY#zòKDßWƒl6ì¯M+¯2>«Ëæ ±ÿŸù�}šî®´ eh1·e ‰`:„-¾6Ž+ïPTƒ8‹ Êÿ«6yÑ¿æ¨6™Г6 ŸÏ·�oõñ�Š-ó�2ñ#¼™+�›`œ6y \|š6¹~(¡-�¥MŒ²-­Î¥{þÖm¤· ëg8}/¯«Í™ax+«¡^ž…êF:^Œp¤7‚ÔåËgÀJ +)I–÷ó`�û!Ÿi7Zò”ï ŸQò1~aÕß7i¬Rz™þ-p/¤ÃÔ¹ €Å³×Kƒ®G@>û‹F‹Ðö + Ÿ©;Rɇ°Ò + € Zàâ£añ^Zk@­ñ·°¶Œñv«Õ3¶½ò´‚eSÌ%‚(ºß‚è†\«›”‘öÖoÄŽ %RÚ- l«Ñ× +!41›…xˆ~‹��Ýio¤4À.$þØ­¥©k;”tis+Ø”â·<ÚPbLQ'2*ÜïÙ+!“èºÅŠëœm�ÎÙç¾µW¥1÷�øD«¨÷Mûi´ÆÜÙ·ØÍ�9¦\'þ I£Ú2^°wûÇýn«æø·Y'r$Ë#OêV1*MfÚ¦o9M²ÖÍd{;ºšµæ˜Õ$ëÝ<÷[„¤�¥‰@õ[º9Ja^£«z1½ä³;úÍ‹žßN¯æ7DcùvŒì‰ìæ7à ]~3Yhy¤¼,ëßãUòÖr€ßò?rßôŽä}óâØ‚)P6“^ð›!ù‰ßÄ6g¥3eH~s ßf~L� Ño�˜¡‘×0[ÄÆ¤ÕgÒ°üö:?Ä÷Ðöà&Õ•î$²õøË6¥ñøÀ XdUÊm<«2ÞWw²Ø«å¢7ìá«ÜõæbÁ€ã&XNðAªÿYR³PÁÂo ‚’áÖ·ý¨.§3\è]Ê$.4ÂæT³é›(äMµçÚ=}»ÆnÎÓÓ³pÒ×>=c¨ê£o…o€¨(S³÷äüþŠa)ÒL7™otл–ÎNÙ’oŒMÉúþÖQä[¬×†ÑΤ¤×þ¯¶õðq³ÊÊÆ�·hÛi|Óݼðñ&ÿYÕn›É9”ðŠý½:Æ¿î‚iA!t¬0ô”c¼Ëº¸À7ŸÿDavfæê?žmøo¸[‚À&W|3V»ãUBù“¼²TÔ;§îÂWÖÅg�s@y)&| îܳgHëGdG +ý‰ctí9®gGÿ$’ž‰,|.*: êáÛ ÷s:R`Ã7åÜ7ŒµoæfïSúf]Æcˆö4R:·D :Ž�c ßðbÛ-Ÿ ‘Øð‘Þ ¾ýN%$¬¾ýJ º¾ËÀxË[#˜9´”ô½ÕU�úV’jg;VŒ7½Û6eÝV£ú¨ ðm-K\¨¾Rv%­zQr®ÿ̦IX¨èÚ9h6æÜÞrL]Œ0‚¦ÎÂûÞªI +(æi'ú½¬†Š*ÿŒµ^æÉ?c£ÖXîÎÀbyàÇ2­ýÿkâú϶˜úføŸõe…™z(KV±eÖ„¾–ö#ß/'çG™rÙŸ ¬ ?¶Ú^o«ú³Öj(€Œ±«rCš_WT�ñì�T¼œ#óú@poÆ0ªIXF>µKmMOÜé¦Ýy* BtÊÊ–ç¢�Û³ |{3­ärÅ@e4ºÐ U" +Jâsž ë³·oxÈ3”3¦@#Õñj‰dcoÝë®ÌO#ÊÏEZAðh¼HYÄâKj¥ †ÂÞháö$!Eeƒ<¯‘ÛoœAˆTÉC§Š˜Éwªå¶Sˆfâ-ÄÆàŸÉ‘J óIéÎ]Ü|¶0Ÿ,�ZAÏù‰Ùx ,(ªé§§€¦Õ±rÑÉ(€ìØ›¶�»¤pÃý`e_ñ��ñÙ†Ø<,Ò¶¿Í¨ÚÖ¬Xýðÿü‹qïê:^ƒ\í�C‰Ò¬×P;E0t5š–m0¼wQÀßÔ^Ý…]@üQÐï¦ ¼�u@ŒE.c#ÔÄñÆ|Û†DKµ’)Šx[×`Fýœ±ôUæ)lþ^—«Wö,Jpô6ÙŒ š}7ßI +ȾJaÝÄŠnïà¾à4é½óª�Vv ƒX”B"p3B�þ Zz×Õ¯–·À@߆ÌÔ~dá;n“·óè,@úàéÞõu;ò<¨ºðùäùÃFS Lå"4‰ÙĪ Æ(éá=-Ó/äp;ªÐ"ß0—›Âç{µšˆ/–áX�±ñ/õ&(�â�ÉE P÷æ{€wkÀâªõTœq;éËÞQ*ê4Á¯ôH™q1 ì”ñÞV+y�âRôñxÐãeë¹Pj—`q+P£»¶Á.•4¹xÃht€o³àÞš.Ý(ºg„�ë¾ÏÑ¥•ãÄ4zãÞà,·<2kxor؃Ýué©D,³‘r|ŽåX±`÷öKm»!©®o×¶ÙÔ¥ŸÏ{+5£ø‰v-Ÿ8 ‚y�M¯kŠî-®šOº¶�u"mî¦{ÃÇ<“\‘@© ïg:“¼`|%Y3Éqí~‡ù]õ(ÚKEbffˆi`­`ÐM•n0#[&™JW�*“|ho(. F4þ—~D>(ϲ73Ò1É„ÄíÕšv;D@hr…ð&¥´It1ÉÁÂÆZ4MhÿÕΆ:Úù±±U+éKÍùÜÒ›e ÖmbLËë#+øa§sÑ$±¼¨®SÇʹ6‚±f£“Çc˜€Ì‹Hô&yÔlù—d¬óæÄFs7ÐwÞBlX_M`KгRžŽ6ZÒ;yâ*7ÑV;š.oÌ>„M¶1;4ž#GK5•k ¹$—Ë['ìFô +À–·Ê±á–ä½3Ô–d�y#¬aKò¸‚#½µ$Ÿ’¤,´6&Þˆh½¢=DxŽMž¢a¼T¦OKàË”Xˆ£Í ¯¤CnÊ9–›Ö‰­‘á¥Û5?®ë= ¢¡�°Å– å-/êk¯D©^&Ç[²³.Ä"+³ì,j_Vi?S¥ÈR<;¥�dÔF=•äê|UêPX$Q_gÚA“:N߈,Öµ­T:¨<ÀÌrÒH€aFh¦—h…Ã[hwûX;T@1Ä(%™®-N8å Dã¥ÒiŒtÌ•÷‚5¨ê¸Íhñ oª¨Y¿ÌF*nÉ4~6[ƒ?�’< +o�ið¼eF¨i’ØíƇt�Bbf±6ÞÆ1ÝÛÆ­[óˆt™“dEy5ùÙܱa¼ýÄ[ˆZ›$Ÿ15¨WÊöÔœxxÕ¦©ÃìKLÞ.äçÕVVV·-2Iö´¹ÉîŸýO@™Î«A‰rqÒ4x{À�‹=è9 +¾)iÑ0ÎxK5Å� +ôøcvFz®±vJƒññ©\F‘ç*Ççü»¹Rʉ»þð9wD$XîX$�±ÙÏju‘ÁA*ôò8´3�ÍÈò¼d%ÌÆ.Û„.YëÅքıY<3€R�×~+©Õ5Šø8rŠ!^"9ø ŠúDp²œpŒu�`\wQ«rX/ç�Qzéä;?ßû/DN…ÍX% ïð{áaа%ì›>.wÄRrèÞ´ýØÖ¥ +Q”æfÀ/¡û'Â8z.Gˆ.âº[(èÈÉ9Ž47É=_ià*¬�`ø©õ³vÖõÖÐâ"óH¸ŽÈë;Ð�`Cê[„^˜„�ú€'–H¬í$µeTzÃÝÞCÀØ +}-̧L�©$k +»I‡ö°[¦$.Ôúƒd·¯’\ßœçÕÉ{Çn¾Æ�Ýr�Y±ªº‘°K/áË{¾¶îFÛTÁ|cÞ¬dSbU£H¿¡å¡Ý +õKN(Ú’šô‰$ÚBÒӰמ–¡œ?;Ù¬÷‘Äø1�ÂÄÇÐí»£n£SÈ¥ÞéI’�Sý�Š;ö‰*C¤_:O9¡¾¿ïuÈu_ðÆdb `•Üs‡|5CΜ$e¸|7�Q‡ˆ(¤OrÒhmrïJ�v«˜ +-ØQU™z†còí „c['NÔD®Ó6A"èÃnÃ�²Ñ¢Ö;ɬÞHôºQK–¤ú£Èƽ¼«]­ÀP{ôNýYçÆh±Ùãá»k¼ÙQ°UXïBò$“�Úß‚´\çQ õÚ –I-ŒÚ!·Ò³Ú„+�•'°ƒ¨iÆ9÷ŸcÝô ï˜äS™“N}�=ö†v�)[Ys kÃ^(1Ú ë¿ í ‚zñ¤ÎenûÅ‚,çTP°—7Ã<¢` 4TK±)Š¡ÅŠ‚ê�+—Ó(ÜZÃ.7‚ÐKì¦F[‰êá?0º`{ÌÐÀ;A)£×�aJ4ݸy~R¼y.Òë?à¢h¨ð)„-ÏC8\l1V(¸—›PvL²³â¸_†Í1Iù”rs>�©,× ~YŸ©f3V•ôb}§0<¹•\KÓÜÄ×è¶O1ñ5ƒNòÊöDñ‰ÈFú£ì)I`ttŠÃ:µ�[.]ëè>éo’þÉ6ηU�øoòëXæ,jžûκhOÜ�©7½S’ÿNc–É­4FóÀ’�x�·÷ubPÍØØS×ö¥‘[¥dL{îÜýlŸ¼9¤~Ö~K—9ñ7β•òâ—´Øì¨SHÍ 5k H9’�^'Ql�¢m:tp_]™Lå(Þ£âVŽl3«DÅ?9l£ŽÓYŒs wÅ-ë 7‘rííƒ +VGªˆú0ÖBOtò ~”ùˆ}¤P]!%jÆf»0†¼,·ÜaÑužC¢ÇÆm ”üêKÀ#PU·X9NÜe–¸!´•Ón»Ð¸ì!ãï•*Q[DqÚÚÚ/„R±ÅÛ ­Òuþvý�,‡›–LÓNèÚáVF–7¹àp«Æºn@hÐL‰]Rè]�ËžÛY5¿•5w)Œæ£Òûu°lÒ™B´Ÿ æù±†u—ú:¬Ã©j«%µ�vË(M×¥ �r|p¡EÄ …U½&&8‹@<€Ãm �§¤ k!îþùù§Œ +�ŠyÖi2XËŒ•nÚ‚Yá�íoÍåb_¶ÊLEñ½¬'ÐÏøP¨Î Xb»7Ä"Ù)ÌgŸm~€éë"²ø8lôjdEȵ’+`Ü4û¡5Ë ö…ï�¨¬eËóóÀ-b¹:ü­‚ùªõK²OÏ�¼ú½K¦É‡©‹ò™^Èãbþ66të.jð¢U¨f\´_{ø ™Á?Ôðn®úãàB‡=‹ÁGc¾yÁ�Uéam¿ÃÜ*°ÖŽÔ8nêZ +íYvØÁFÆ Èí¨Mý¶¼¢€“;Ÿûý¶B.ä˜êk "B_GºtR–¦G{_¤ÚQi“ù,¦+ Îc"øNCP¥�d œ¹ûì¾-4 ¢à±ªcSøÖfRÓñÇ ¯ ¬jOú…þ~uŒÖR÷Ÿ±ž—0à;`µàjÂoËÝ2/ÒÖ$\&§iîÒ¬R^"q”TôdHÌVox»€˜\šzr +~÷õúÊzF¼O Öƒ°N�»aEO4F:1ßöi …càAÕ52ÄÆIRŒÎXáûr ük€Î‹ ”M#‡_ ­-%}ÉgÌá ®§So¸´âh^8fŠÚž�CEž1zZ¾ÔÜÀŒ�&�‹ÃþéI�?Ÿz”A¥¾�¬OSaµ/Ö­²åî!8äÕ +5%G€¨i…„�ÌmÔmÖ–WÓÀ¾­”¥øÀŸKþ˜laŠ,7‹ïlqú» À­N@éIÁÆ“ö¨�¬¦Œ£T›3[$ã�4t{üvË7â’†„NsíøÐ“EDey’ +>p ÚŠÿ†&|�st5]§Œ¸UM“ÁÆFF,;°€É»n�pRÈ›}Ì»·žøÙ$‡Û!¹­B’ê>Z¥- Ö ‹ý$^&:7hó·e¾è”�W’Ô0WñwðÁÍQXöTF©cE'[‰`)‡ºQ/Þbš–³_rîoCp1£»È¶FŽKXŽÕh7éˆÀ�8¹ªW¸ 6¶Ý + +C£dó5{W…•z掞;¼Þ„�‹•i56(¨ FÞ=³¾P§Ûl ÃzÙï%YÜ€çÙ�¯ÌIÖ5Ù¡?È/Ã3­Äž°°[„¢OÌ÷ +Æ"«å'§JÆÁòè�®¬Û˜lgxÔ=XdÇ Ëå�ŽƒF!Î<»ƒ€1Ýÿ!cÕ½ë[%YŠ%ÈHñªnd_RøîQ fmøw;Òw£jà�hJ¶¹8ìõk�Ë:IÜB–(=ÂòÍÛ&ü×6°_â(·Q#k~ͲR¿L^$”ª*Šå;»`¡z,ç_<ÿÒA³Á~©¾ðÊïßd“ÈjHC0”7ðb[¼-øB’GÖôËÕ¤–×Ý;ã2ÇÆoó·Vä ZßâÛD�A ëÑhÛª@ÏÃ{Y%ÎŒ\:Öû-ƒ\ø‘ìŠ=Ð›ç˜ø ÌÛöü�ª§3ïdÒ®Ý5%]vK„�FA™¶ èLö6Ü€øß:’ õˆŠë¢YŒL’¹(Œ“‚\qЯ'5!ˆ <ÈÏe8SÞî qàZ%O킦ÙúªŒ~.¿',äé×jÿð_½ ‹Bo +^^ÜUYæÙOZîmcY�ŠÂ÷ñÌ]1ù[£8wN¬ÉÏÔÞ¶ÁˆTÕq„s”„$kÛ¯d·Mb’J •‹£¸—3²Û/�"ß­P§ ûp*YU㮓µüʰ&‡X�+ùÕ¶hSç&¼&€ÍIú�ÂËŵ¤æŽ¶…pÈšì¼´ö!m5d”�¬·] (m3æx8±¯zÛd �ìÙ§#,ÏÄ`3Y3RWs…ði�еL*ll„Ùå‘À¯ÅvιÀÈN艙Küòþ'¸õf©ÎB½HúW}ÞüìMGò¥ü?‰ U’Gçs5 ªÐkïE [`‘K]´2Ë�¶Öp7£*º­Ã\æ™A<åt?åýrRöq8«Ÿ£¡±Åý¾,õe¬SÓ.\¢xÛrüØìÃ…í ZÉÕˆeÙ!}THÅÂn ˆ‰ÖfiO4­ªö䪼^ß@`bUð{UY²I�篜©Nq0Š{õ~Ã¥ˆØ„ÍO3Xíˆ\YgPÔͼ²*ͧmG«ÿ¾2™ÛŒ +Xüí2Ó(/´#f­×·â6K}°½{ðSÜcÀ þ `�Þï¹F�ò¤¥¶gMÖk¥¾qí¼ +Òn"x¿Ä„›‚ž(Öe$˜ýÞªªÏª; ïñ„]&®k±<¾Ttm…^ñŒÐɽû9ŠRÞØ¶\^+â_Ò1à4÷YRYĶ¥Jíh"iQì6‘;[&·ìô™BØxl­*�*^ÀGOaåÚ0Ž#vm[f­TEšYöS\°0íÂWŠÊ A¼ó&µžAÈ£ùK̘%aK]¾Å’nÛbï‹õ…s\[­Ðaeh�Zôm]gÄ`÷è#)Ÿ<"ìš-5€ãÃlÝsˆfM©ÌXµÖš�$ŸOÁë…*Æ�½·jØÖ®¯ AÑm‘p¹Šõ²raOªÇñÄ·aÚ]ÔèÓȉ›�šë¹êÇÛ.;~ –' SV$½ÙÑÑè?A³ +J˜WÞXʺʪW'T²¶�1WW1.¹`M¹2[Æ1ó¡¶-ŸVËåmHWÚ�VÍ÷ê\wZºÏMA;–`ûAÄB +´7‡÷p¢åB3òs0ÿï¿Ñ‡4¯mZœVê}l™�8‰²¬Ö¤÷Gv°ÀÚÍú,¡H£ªáÚ–½¯(N'‚}8�7Ð�yÕœPP1½X»Üû•Ósjpm+¥–¿[YBÉ¿ü! µ�è(ãL†,iÊ!Ô‡^ܺaó!xbж(Ø?/~ãÇ¡8°Ñò‹b ç”á+<:740,($  +  %*/48SJGD@<83.)$ 4:@EJOSVRNID?93.(" &,SY^cgwvutsqomjfb]XRLF?81+% 5=ELT[bhnsˆ~{wrmhaZSKD<4-& 7@IQZbjrx~„ˆŒ�™˜—–•”’�‹ˆƒ~wpiaYPG?6/' ^hqy�ˆ�”™�Ÿœ˜“އ€xpg]TJA8/(LWblvˆ‘˜ž¤¨¬´²¯¬¨£ž—�‡~ukaVKA8/' y„Ž—Ÿ§­³·»¾ÀÂÆÆÅÅÃÂÀ½º¶²¬¦ž–�ƒxnbWLA8.&Xdp{‡‘œ¥­µ»ÀÄÈÏÍÊÇÄ¿º´¬¤›‘†zocWK@c²ºÁÇÌÐÔÖØÓÐËÆÀ¹±¨ž“‡{nbUI'0;GÌÒ׿åäãáßÝÚÖÑÌŽ´ªŸ“#,7BO\jx…“ ÖÛàãßÛÖÏÈ¿µ«Ÿ’7 =JÞãçêìãÞØÑÉÀµJ=2(Q_n}‹š§´åêíðòóåàÙÒÉ¿³§š‹}n_QD8-# '1=JXgv…”£°úûùõôñî°£”…vgXJ=1'n~�œ«¸ÄÏØàæëðóö÷ùúúùø÷õóïëæßØÏĸ«œ�~úüüûûùåÝÕË¿²¤•…ueVG:‹›ªîûŸª›‹{k[L>p€‘¡°½þÞÕʽ°¡‘€p`u…–üûù–…uþøõš‰yhXH­íóöþóíç[÷áþþýäÑ!þ)â‘¡±øø±¡Õùðçíò}êþÍ×àçì�‘ ®»ÇÒÛâèíñô÷ñíM\kzŠ™§´ÀËÔÜãéíüðìècr��ž¬¸ÃÍÖÝãèìïøùõóñïëçâÜ[jx‡•£¯ºÅÎÖÜâæêíïñö÷óòñïìéåàÛÔ̸¬ &0:FSao}‹˜¥°»ÄÍÔÚßãæéëíîððîíëéæâÞØÒ˸®?KXer€�𥰹ÂÊÐÖÛÞáäæèííéèæäáÞÚÕÏÈÀ·­¢—8CO[hu�Ž™¤­¶¾ÅËÑÕØäåæææåääãáÐÊĽµ¬¡–‹~r'1;FQ]iu�Œ—¡ª²¹¿ÅÊÎÑÔÖØÝÝÙÉľ¸±¨Ÿ•Š "*3=GR]it‰“œ¤¬²¸½ÁÅÈÈÅÁ¼·±«£›‘‡}rf[ #+4={…Ž–�¤ª¯³·º½ÆÆ½º·³¯©£œ”ŒƒyoeZ$Zdmv~†Ž•› ¤¨¬®±³´¶·¸¸¸··¶´³±®¬¨¤Ÿš”�…}tkaXN%,4DJOTY^bfiluvutsrpnlifb^YTOIC=7#(-28€�@ à †aŠA „a€0Ä` “Œ© +<š¦_ÉÌ‘¯Eÿ¬±‚œ…­á•±Rm 䃜VÕ)±kì`e4[å’u÷ûÕ]€–üä0'ö‡í•Ÿ¨/À�e0@ëÊmó/ãR"•¥ZF¼•ÂÔÊ»éìQµN­ÿ`dÍÒº4JMdûG;oR U>à/¥Ù2?ëKñ[È·¬~úÐ&|+À„Îá3'!R5¶z¬6-ùCOpR»= ÎšJ?DZ~û„ìä—»ó`†¡eOÕÇ3��Þ†o²çË\êtɧ?$ø&/uLý·’ BœiëÁî _2[n‡Fˆg¡©ù!X ƒôAeÇòøÂɸD=ñ¹›7`€ÛÌÙÞp£üIUwˆ´ÝÖgÍ7\ªîmy˜¹-jôfCì‹Ú¶…>Uv,[æÙt“¹s×5+ÚŽmG'þ_Ý)nÐð?Gž_[íïtæ§Óö懚+bÛÜûšl3S´•ƒqgŽZÑ9¼ú†—ç–Egè-9)øÒV¡ˆ@ënÿN¥Éì=¶s#¥¡RÅötHíÙ[ç/lbïãã83!jVŸÙï™íR¤[4[ré¼zøLe{¢{(áö˜™•Ä|�w¾Ô¡%ÛÞ{{�í©;ÇJ4ÂÇëR\�ßp‡8+ ½UJl[ +!¾†“-ÁC0W^ãpƒ �°5ß9òÍ–†ûÍ‚¿%Ԉؿ|/W $Ä˃ÞЛÓÉ¢®×ráä5Tvì :& ±kßε/²síä’»[î-G §ßÀ�ÀŠkQüN# üó)¶ƒ4H‹'L¬´ö<’­MQkÑçL²*Ë—…!­D™|Ö†w`9f¦ˆ`ùŠ–z) ŒµJþ†‡×»©L-3—z0æÐf«;^íûÜ¢™eP}áä+š  pY-[Ã`B*ß_�u6õ¿ÊW|ËA1F¥j[îS¾^žfB²cñ‰':½.¹6žu”Ãbü©uåO­ê¥ôÔ IiAgkÅåànÆRK}ádñ7D&Ÿ“»“Þì6ʨUÉÙlÈ)íÍÏÕlÀ­¬S·ƒÚg!:¹%Ü2;ׂÂ<íáÁ¬É +VòoÚó£(¨'3@(\öl°Ç±oÏ?xtQ�à®·HL)ËÙ׬Y ‚£›ì^àDºæ…�d˜Ï0È)’"²Ž”V‰f`>ä_P¨j[tyG`¥1AÙX©ø£–*áàNÛcä…\ÞѶ°éb¶9®Ì8U,ÞôY“Š 5«/R+;7Ÿ¬5k?2'· +´•ËãKîÎ\rlx ™“iXÙ±oMSñ ßU‹·+ʰÃ-ïßË]·n¢l;O²ëÀeY;søi^VRœ¥]•¹VvlP §¿®ÄÆ‹º’9Ý Çëa)Èêjþv7ÜBædȆ—ý;¼;�¢253ÜŒeº2"‹]ª²cûñ7ãÓ”Éð`2têVv¬³g.ãPd’9WæLoù4­®ìØse¯þ>¾mŒËûß�«Òk0Áï/4çRs&80®Uí¼pr²ÔR1縖‚- ÞpÈ› Œ èyádeÂK×ÕÄU» ?KqSx^8ùòîVécŸ‹ì±·_P/ft~ád¸ÉÕ”vàÊY˧Ë5ܺ8SÙ±õ _8Y¿Ø<”"R{ë›$Ï­~ádíG'�HƱ¹/lC«kåæí¢Â¤€^àäçð8ß/œŒaœ¤ÁÁ€ÅdN¦¨ìØ7Ë7Ë׭Й¯»#v¤• Úº-IÊ€Å!þÆ8<ðO¤ƒQ±Øf�Π"_8ù×Òÿ3bMÒ6;Ü·ƒ e¾ ¡©ÛEîjužÎEøQ>feÇÊ}áäšt�Ö?ª{:~]€%€@/б´yáäô†Û~CÛÀ¬ò?ö‰o[”yáä1S-?’~ѨjÃÙ='&uÛ£]§&v—Ö4÷p´)ßTÖšr“Û^8yi0‡Ó>/7ì &–Æ_Ù± 唘5 àV3Í)ßïü0›Äok’8’1Db<½q8gý€uœÎ#-²ÎâÆd4@+õt´™ˆ-¶Óº|ø€éY}å[BÉ +�e6ÖI k‘™u ÁÞ•^Mœ@ªÜÄ$‡XP;è.Rq‰Œ$éBFMñDéSŒÀ‹egN`L3¶ºm#+UÓMBÓP‰Lã!/@•ÑÖn�¼ ½ì)ÎÔšƒ¶ +=XíO|zzÖ¿4ý‹MnëV™o gûÛd›>_³U‡P`�kÀ¸Uò�9ÈfÎy®šr5%%¹)É�¹éÌ…Š\TæFEn*sÓ"7�¹AZu[:œÙ¹0‹³Ð̬ŠÌÎh™=lq8g+Új=¬Z¿ð³¤jápž§8ÛéœKºUCkI=/9W›ŽjÌHH-£²‹î’¬Ýœ›­uwŒ¿‰q�n„¸ \·õ¡€Åàp„dÄè›D`HL›µ4A2"¬fqôÆû惘€�cŒÂ+^3 ì«�DHámœÊ£ÚÐKë©>9!#ÖÉ®NW¥ù_b@NJ2 Кƒ#84þ^È�àÂl+EÄ9k„Î7[¦ÂQV&D-ž‹ãPT½fœ¢Úî|%àØ@°h”iD`S =¥�ºÛGäΔ2ËlOÁU=ŒWÖ?óÂOÜ•95EÝΊxìzJi$2£+ÝÐÈÄOtX#r~Kñ­ä^³Ý{bÇFÚ>ã’–pôSñ¾±dSGçr®r—½hSª‹± ±=Úd¨Dc-žlÓˆ‘e«eu'S;EôËVÕŽ($‘¸kIÄHnª’ðï>ô±Íý1»#J ñ X@àÁB†VèpA X¸°�რˆà° 2�°�C‡ ˆ HX@àA8tð`¡�‰û˜ýT‚uF$ +  0pØp!ƒ6P°@‚�Ä +<аA„Dx` DèàA‡ D páB $BÐ ‡,�P`Î$*&ˆ.ðX•æÄ¸!¬„9†‰2ˆ€Á!$0dˆð@ƒ† Hôáˆ�È·É„Yn#ý:,HÈ¢¸ˆàpaØyó›YòNž'Oá�ŠÅ³ŠÅ#‹t#�Gù™‘u¡x²Nžœ4Í4mšBO4¢ÍEÄga…T-‹ñQÓ�‡Åy‹‡ˆs€­p°B’r%|½îHrXji7w7fl†ˆL$RdtWô#h»qµÝe7.Ø®î†=γ(Ì´!´�ÍQ8œ1¥3ŽW„£í�kmÛÞ�‡ ¼"BŽŽá¢„£ŽZô„ã!‚ƒf, ` ¸„‡ 7wc"cv +ÒkE÷ñPÂ…ÄX…®憨�×�ÿ\­ñP‚±.akPÕˆJ‘aÀ ÀE2â8Gñ<‘ÎqÄ1?âÍq1çuÏÁþ&Ïa“ç8iOžCz_ÏÁ1/_LöõD#96B.¯º˜)훑ÅâØMÝ•i#æ+ê†%t ͹bÕwDצv‘³“šÍ¥õÜÂ(wÿúꇷ0ªÚçEBõÅ×)’w'…½š#¿ªœ�ÍU÷éÖëòÌeWc¹e.<"r©^ÑZ®/lưaƒ6cŒcܘa6ãfÆÍŒAã3ÆŒcÆgð3Ƹ1Æ£§{AU¶ëñ† <(…2XpB5™Tø›°!hƒ6ˆ™Z&leÀ Â(Pp BX¡„ øJ;…Æ„ÎG”{ká*Ϫfˆ,d…E×9*‘{ ¹C²ñ`� yÀ��8HL�&RH01BB$Ä?@Áj“©–—¯<9ÉIO;Ïìí’Ñ�"4(!šÍÑØår»ÞuîÓTo¾bùØe²-C\€ ;÷ËÐÔËÔòC &˜0G‚ Öt ¿„”#¡@ùራFõõkº•ªätÕĈÑì|�¬3Ä2QsôÑ¿™jqDa¯ÅEšG’ a¯ +mrúl·R±°*ùÞ:ªóʼn‘WÝÐX-$J U®È.ÇÕ¦Ê~FuUÇT»ªje +2öÈ—r¢)©eWD¼³Mvge"cí.åØÐIuµb/4"›ÙÂxŸoÛÈ’ìÏaô²c^=Y–-µƒÿÝH©ìýǤ§}N +rù¬™ÙáÿEzzéo%;¿¡SÑa JÄK²…'Ô²´tfbssÜàVÓjFD† +×}ú=3Â"ò k £#*ïh„TÕ)»LÝÈ©€àËÊœ6ÇËø’ß”‘éñÓþìäceòÍ�¦g•¤„ˆ L:g3Ž�肸ñNKDÜ‹ ÑC„~Ǭ¨yâucBx›[mŽUêõ�•ù™âø×ñX§v%.×Éÿ½Ðf“ùda�ê/^Ää¾jç–ݯwb'Õ±}vŽÚ2ª»¬W›ÑNª}O£)9jÕ‡l¤­¯6ã3:ùG¢:%I•ìäs¥ê\-ÎCev%/De6u!Ë´þWgf7½o¼ºÉýU}¬â¾ •I_Èy…T±SF›[§W‰*Dâåjê"3r ZÌ­l…Éb"lói£“¦®g.çØ“ƒ<�æ ÍaúáÇ™gŽ# +ùèÂ!§q#õE%qqð$‹ÎEgâHå'VNÊåòž£ç8qÌÉr ÏÁ* âb…>3¦¸<,Hv³½ã!bÈZ¶³,¦»ø¦FÈîï 妰–íÄ +: +QnéÝÝZgsck,¤;‰¨›ï²ð˜­x_:­zí,¾ÚqÖ“Öʦd´ÈŒU>îJÕV�ØUÑ©ñA5óóò¥o²:ùoŸX§ìR÷HüèÑß>“‰&'Ô¡âF¢èTÝdZÄ)OlS’N�¶Ñmaçj…î„&<áTýwCŸ"ÓDVD:!‘Þ8¦ É©›¢YqBŸ•‘¢&¶ß)YiбvÌü²Ú•îzæ� +WøºW’JÝW¡ùÑø~÷º¾«ØneCrBû§”³‘#Ú�S‰Åòûxlh¨°1—ØpqµNË"§¹Ý"Ũ¿±ÿÑQùk‰í»š©“=zï³›¾„(<ÛÐüëxý ĘX­åqBʺõæ†D&œ1]�bÅ›_íL½Å*È­½ì‹êE,½žVŽ–³Æ~‹yQ¥2©ÙMIQ]Ú“÷ÉÈØì.—pF¬˜²™“ÚwÉœ#¤MªjD’³Š"’gˆv½fø’ª9*s¥f2Ÿ{ê6‹«©áMi¿Ó™Hѯœ!*Ú�¥ O�uÎÅcëÚ„ �û¨t·w1¦d¬H £ a4Œ#�ƒ°³€|N.".448™JašÃ B å¬"3 2FÝ�îµy_Þ'7Àõ¿\å +²®¹«7µÙjVw mFôÆJÓ$;HÑàúOãQ'}ÀÊ=iÁÎÎñâ­¼ûÂò`€Ð×úr-'~¡mßT ’4ÐïÍU²pýÅy€€1ú ¥¥û™¸Ùùt�n­Äïˆ ­‘[þd휘±·gYK½Lâý¸$,g"ÞÎi´‰Uòò?ý­†´,2üí +€·j�З=ß,g*u±÷E�5Õ¹1—¿=]è‰i‘6�Žß†u€ó(Ëé`†²€‡Ôr¹ªI¹Øoÿÿ  H"ÞR8‡ë”�›Ú·´ Ä¾Â›u:%p(…OÀÿ†šLóU&…Z¥B…Úýƒ ¸ãçbLþÜt]€ü$é¤Ò!‡*¦o-“'34xRnë< wZ¯ÖÙ‰vê¼�UÎkNàÝ€Žœ&T5+N»7¡8­ÏÓ›Bs…17ÙÜc1võþ­E$2Dyõž“4¹›!ç Є&Úý“8Ó40Sú-|P4*@âÕ.¿õ”0ù#¦ÍjæKôaF¥lŠ—š–ý¼þæ^ß"Ì´©yéÛ= •ÿ4;‘û¶g!Æ.¡ƒ‹”»oá¤WDŸd v£—cÒ>á*L•iÊõ¢ÈâAõ® hßµ"íµKRÛUÔ‡vQFöxX‘>^«· +Û­:�×QX½œ $úÝ}“ti<�(•ög­€¬µß©œ½Ûù=¶­ÿŒ‡ïl37ë™=‰¸}ÐÁûáe*#&Í&nr–d#Y©ûŒM}Ög÷-[îɶp+FS”P© „±âÅÉh9ÕÛF*ÑZì�¶ñ¼DüÃºå¡æä£jj[ÿJdmÐóæ?Sè|�%ØõªáyS+.¯OÅOz½ÎXôG¬r\SÄ­ŸãûçÚǦÖð;GjJºâ9ÆCÍk3*`̤·€xuŠ›FðÈPÒψ¥jŽÝ1ƘêÖýT%¿Z•Xhsýntw¤.Õ7çïXðéHéK÷™¼[™ú#ò…m\ïúM’�œ·ù°Â5õë +bë(A�æ 5SFð½ûiÌÇü ÎtjõnÆ{ Є¥´ Ý5:^}¥ÔzeÐÉ®'¡�zJÿ–*`ɺ¢5îßÄe.•H´¨i^Ì4”ø�˜»�†ùZÆgÇLŠB ÚÇ*l,Ù�U;ÔàÓÝ.m³‹âÐóiQ*YJ +®IÚ(íÒuo™›kM*3 +ÅÔ‰¶î­n‡IÁof/f‰3iÁ4öc·Ò0�˜¸µ�Ö<¡æÒ6å¸6ˆmVo�Ð8c—ÏÇ/®‡#z ]ڷд2*KÊ(>7§tUæ¬æNßzh€^ýEÔâ›ãiÖ`¹:ä;êÓFÓI'÷Qtÿ'€#ž8­[ò9Àüµì3R§S¦ifäkHÉ!b£6tDhó „ŸÝRÁU«èŒ‰5lŠpRDQ ÔiÖ-ï–DøG¤«\—,"ï‚÷¡øDDÐþ¡¤î¡ï;´CôY&�åÐÚ åÈÇ·†Z�Õ‰3”ú«Éƃþ"N]wÏœ0Nu~Bý®„ä5!È~0rBzé!Ø.UÛ¶¨K7n¨.èIm“9A1ÿ0³|÷¾åÖ/ ¤åå?‚gˆà)ZðDa¦ÿÜк"(Lú×SÌý³8·tPIßμTi9PíXZ-özP‘�Õ¸ý+*ÔÏÔ$,´?"X´Å+iÌâˆ(lÖî¼_S'+0aƒ®êïÚç�«3J\$šù³8?µoË`5i9û}¸üËÇ„{a£«‘¡ƒ¬×ÉlÙÏ©|ų¯ºlÈ‹‰”èkĆFän“sfî�×®¥ÜY +¬&ÒíGY’ Àa�k âˆ9þâ Ö•íŠrêîL¶­Z «4â �< +šÔ©Ñ0×*fNì‡üm‘×w!//Ê€f´(ùÆ”½tÖ_c E˜8JÝÕÄÝ'³4ñ–M±eMæü‚}\çm�„�ùÊ#g7×àÆùÏ�Ø-{7,°"b<ǽ¦È¿»’}`j éð n£Hÿ+¦èÍ�!Hƒƒ©xÛ§HÜ�haÄ tz¨êžMôi}-«ò»#&‡ò›%"Á’jã˜Éãj0<ž‹ÿ)°ÿ‘ŒE°"�ŽWv›'¨—ÂÉ4±utdÏJ¤{ òn9R&w«‘§òh1"\¾¡@ÿ7ZÚÌ#6 yw`#Ó‚¶œèà²TmÏTé®e9e}\Ååüâ� x’øF�e¬™´†À%èw¤B… ¡DRAºSpfHj»•)ì §ˆ Û¬òüEÆ­+CG?«¶ –‚‰ëËM4t=fû¨[V0åý@ö­8™óÐÒ§›æg@ä0¡IÍçK”YoD½¸äAŞȹ=¯f:žÊ¹¼B¸èÂó¸x‰ª¹Ÿ Pìˆ,åÞ�¥#JzK7¶wØÅär‚â6ãøÐý±Õ–ï¶ +Ñ«—«©ÐßN�}Ëp“ö”cäP€¼üº–Ú4JÖ�5æR«2žíó]‡Ê1ºÔÃ#…˜Ý`S‡Á×<©r8Á ÐÏæ;ê‘ÆÇ•½Ø;BX´À$vxÇ×)�³¾ŸÉ¨ß![Y¡Íß>¯r ºxÞÒJ|qÎn‚`#‡H…-}¤ë³ƒ°™lq´UfÓÖx±A(ÙJÃ"2è¾��Î7SÁ‹ ¢ã ëÀ˜#‹ÖÍÓjné3o¶ Cꊦ¥…æ¦-ߤufBÚ®I™é.S UrŸ“æxa3ðûñU…6%õö¾¡,õù:º)¿ã�æC +êê@" +ȶc_¥É!1*ÑjImúÏ&6|›U¨™´ŽÊ û¥ä²rfBÍv +]mÉ:¤í#|»,@[CÐ@”Ö"ŒçüЊrÉù9|X°Ùy‰Ë’ª3� œüe<5dhì˜Ð1S©JpD âRç¯\ë¹³Ï(—Jiîá¥Gmµ–º`«NUÓÝ ˜MïFoÛÑ]ÁØÛ¤]žƒN¡Á*‹Vz«ÌBŠ®!V¤:VXUÆh¡¶,#¸ð Ñ‚ÑÞö“]nJ±õ–_{G¸b$åB”s¶à þ×3¿O&»¯ÁN^nàD ûÀ¨y²�î¾T Z`L]¯|V*EZ¿“¨2pÖ)eÍËzy¤ÃùêO#©îY’ûœfWËVYÈ/o¨µšèH�ù¦¾dqÙšùéì7æìú^ «Õn?*uË“÷ã¬à©ˆì.Ï,JE$UŽj�nƒ´Ä{‡ KÄÌ­bžöCjJ®Öý‘ +ÅD>Fã=éz‚ô~HÑui|¦,‹÷™pÉáqM8·cxÊþ�®Kç¤DV[e¶JʹƒvÂ7gYѹCƒ®5³cb³à†Ìq«\J¼Ä[@VèA¿ý¹Î�ÐHðø Dô«(,±­Ú±œ5m’ù…«h ÇÙùdx}|Ób¸“ÖÆÿV^²*†ÎðUYxæ�!þ¢vÒÃÐåoyžt×ît"þ+,T¶ sqìàћӸ pNŠšaÃUÇ öà¤X.‰ÃÆä#EœoA ¹sœÐ-ZuNµL Zi::âjÕîÏÉ—tjl\ R‚¢M,e™Ô[Iç{n@y¤ˆ(çCÐðF#ì'o3*·y¯ )“Mëð·¢=~£CÞ|úã“%˜÷õj¬„ Ï£ÖÆ¡¯Š�L@&rEÝV +¶FN’7Bt3,o™3sÙ#ï±Ýµ'Q^˜¢ç�,Ô¨¬Â»•‰¼ÈmÌ@?•n¤ý¡ãcå¨lt’y í[‘IFù‚úˆpgcæ! 0[ÝÇ¥=�qu¾Éêò×s[ ¸é 5Gâd¢são·€DžDCÐð–~¾Ìͧ '²±²–ïíÄ1,ò–èE%ì‡+˜$ëUFë|±oq•$&pÎŽ±Z󎹸úù%Ìèªb«ƇØZIš/T[%б5#Y—qw�®»kvACøÀ?4¥€‰&‚¥‘hiî%©2Ô7J0l!!Å�ÑÄ›qõµÆydLù€'¬…m¥�¸©�¢V¶Œank¬È>‘òbÂS'âvgšø§A{DR"—ýIlQ–mñvFÌ´”dN¹³_³ný3( +™£Œ™Ñ‹�X>�e\«¥YaìXAý2V äNRUÇ(•y÷�Çr{7Ïʇ*ûw›AEùqþ'^�ðJ;c04¤)/qfÏ\Í‹ +^[†sͼK;\›°cQ[sT—¾U±�ÏÞÅ»Í*œ?úbKŸ´OÀ�?j†}W<Š0úäþ¢Ò4AŒ‚–®mú$µe!c/-t‰sa}'¯û¹®…Ú^×|Ó Ù4ÒÃ2jꊒDìÉ"Ð! 8²d¸€K‚æ?ëvi2RÁ#Æ…è­Ovò><äŽpF{œô¹&¸Í‹õ1b~AÛM0Œ"½ô‹>ÖÏè·1r‚YTÑ&;O^ÂGQKÔ·£oî£p¤à¦­ u¦ˆ&ð°R•v�y×ü!þÕ#÷8í¶C(�æPï¤î_n“"üÅ®¥ù¤PÓi'  áqWpN€&αR>!H;ód™%D=G(¾r±.Œùó¢mgΚ|Ž©qj)z¾ä\àã„�„ÁÈŒ¬ÞM9¡a &¤ÃÝzȺe=c.m<·7!‹†[š& eåY„FPó»°»À¾šîàhKËJ½ Q�gUÈQ£Ð¸¨ÍYž)?fLEÞ?f"ÈìDqr"iÌ9Á¾èPNͶŠóœÉžÖF¯–Œ*Á +Žð|­²äóëè/-Ûäóœc9!V³›xDÒ0íìâÊLVš˜0Ň˜½óüqÅV àDåVx¢É¬…j‰fƒAL� ‹(5ކÔ0˜Î�–}�žÜÒjb  ÆkOäá•øž~4GG ì ÄÍ¢MU+AöµÇÈ Ú·+œ|¹·g7ë�ï4 HË9ø›%,Ùñè£U(té4áR÷sxfƒ�¼¢„�å?œ�3ª²rKþüM­‡óW U:=±É¤ÛL�3j"Éòá­eHt™;…߯Ï8¹PÎ>!?Õ¦h|`‚’k;GQ=g1Ϻ Eâ�N–¢¸&Ú} Ëq¸Þt¾PÊ(Ì7ÇüÎÕDÔvéÞ‹ÚâÅqm²ì2F9‰ÚX¹C †�ü½‹üÉäQ¼X˜gÍ!4Dxž“ ×æÒ IkK§­˜»[‘´QKÆ"Ú‰ÁJˆtâ‚©Ã4òÉæ“ŠY«·`÷¥ÞÖÁÝzë3Á]²ac™t/ܺ +©LÀQ³‹ðb–@þÜ3{ðœË‡S*a23 W¨~ÃŒó³õ•ð”³FýëÞ¸@½réH2,cÝ Þ¿ÇÏÝÈô¿º-e6ëá&ö1”°æ|ã€Àù�2Üòœ8¢8| s‘»Õ•îïPèâÉL®nY¡9òõ‘mdAØ*¶–�ª…ë¦s¢ a8ëðÁ£�פÄC܈•ýâïLÅ�–"=ø­-' æk~—3ôÃX°R¯f?Ë-%¾\“p¥×nlj%CƒbV ·iÙD +Ü8ý²÷`°8rɼpOI15 R;¯ =F€Ài¾�¾”>æ›ÈÔÄhJ´ªpÚÀÕ&¼šµ*ï†?¢ çÈä¢éyôÖÈËÆxK£äs°j‡‚0jý·ÁðmÍÕ]o ïƒY�™N:ÚzuÑH�øŠMéIëRN:·[HòzV¯ZŠ$q.þúVya»9¨A9;/bÒöí�©°‹üÕ!èýPbýW9† +Î×›=ZµùóÿÜÿÄ •Î*»ë%°ÄQRQX¡Èº®�aM_L•XëÓ�»®�Iû¯¢š~~•sè6)�n8¸eÖ*OɈJ1µÈÛx\uÈ(å4C«ŽÀÇT;Øù*bt™ +ßC‹7'cMVpŸÌ ÿ*½“Š©å@$"ó‘Ú7i^f¤^_bâ.‘«ç¤Fˆ:ôpŠæuÁN™¬A«ÂâaJ ‡\@ s5cÿ•Xò}8z–8³�‡ÿïƒKèõ*™wkè íŒwš�ãÛýcÉ ¬—Ua›³~øLA,·âÙSž?#§Ø�šÙÑâ'×½×ç¾Ó¾” 7ÕÍX=�Ÿ»¢‰ð(GxP�6mmýwF+.'b[)Œk¿X¹ê¢º’19²ð PoµævñgO8VË£´Ã›ûíS0ŒïzÙÎ6^í9dy`iµ±uÍõmQĶ [ ��_`åbÆžECé7<ì[6�B¾­H[C¯sΗvÌŇˡªI¸X‡÷oWþC]¸â#¯þÃ6Ìʇ�, º„>軾ÐNr¢r= +Õ ¯Îmÿ¤>ûäÖÒñ‰Õnª˜~£Mã+5úH´Y°¢ðc[‰Ä}¦ù ÉB¹å�ð6ãšr¤ {NÁ©PBp1ÍxÈ-[¨[—VYßeóÜ×$W}ªA…˜‡ +&ã‚_V²UÌaÏ¿."ÓµÚŒƒˆªëä[¼òR÷Šç9A‹œÿ·•°äd#Vëųa½Y t�KsÀÌ®Ù>)Ù{vØZ—µ\,S„R< Çk3Ö ]œ�vÁ­ÞË,{èÇ9VFâZtA)Mÿd<(âMá'˘2Œƒ¥þ¨P)¶'èsOf¢|æð+ßöxRÿ5JeÈÃ/z’¬FáE‰Z¡Ì£è¾óç®iØ˳áäÁ&wràþ âÎÒ4±:I�€¤³R­Á¡Õ=¥Ê&œC›Ð!£>/«Sų´O¢;*‹;Ìñöh1”ކ¥²pÚú6µ a IÄÓ¯ªƒŠ3I¡¹c @Òß·¦ ¹. +eŒ‰CSH‹«í[‚MäP�¨¼ð`”˜}Õªp�[èFðé¿Ãßx–ÍX€�N®.ý'XEi´ÉÿžÂ 7f;Éó2¶¯\"éì–MG IbzÖ?Õ„ÖÒÁ +‹½Ð4¬Êó�“#‘<}»:ÄÒõ•Ü•¡ÌÛ‰So,Ä9Ê»/”T¿³6@(ë3ãAYí©vô”,ËJ€qÎ|f Ñ )œ!eÀa%üIÐm;—ð-Í7‚=œPù1ÒÜKMC>•$#ì¹/H©œ+ .ÂmÎ’£´-oÃH}ÍU¢OàÀ–?O©Q×ÒHZ²–€&'htŸä ÓI zÂi9=�I¿¾°´á4Ã*)”~–¡ID ¡±1ŠÃ�ô”,€—%L‰ô¨×Àòãúp5•,Ÿ¿<ši[)ð{0Õ0t”©Šî¸B +F§weXHÆ—ÑÊg QëXÆlÁµŠà½ú)ÑóFw�;j±ŒØ%±¤¸•¼yl¶ˆGŒ°MYnr&8‘ònW§1AT~~P‰J`eÁ¡þ©ÄPðlí�C/‹K0žžéW¥Y¤‹�rË'ã¨w¿Bö§OÇ€³Ò5]vؽLº‹MÅR»õLʧ— ³»JˆUgè>ˆé;Š�œ·Ÿq�£ñÈ-xÑœ„Ýòè�£òr,k¶é¸¯ße ø¤g˜|õpï2Šàà\}éSv‡Ö¶9NEn¼dÔßbƒm0¹±KžþZrÞ‡z͹S0/ˆ“�A=yFx“d+Y¤3½<˜œöܪà%9�]¸BI"ê @™$S²òKq2'�…LZq0ΡýD�qÔ|ŠÑ£;•ÇÇ"É‚æ%WÈÓ.²ñìàmÑ‘Ž#WÈa.üC²{6ÄÁ‚a1½ªF!6*£ ¡ÂgÒûiR‚Ú`óÁàj Æ=Š�u…}BÈæ—ëyµ4ìAüsùŸ;ˆïÿGXØ“s�¯™òƉ—é ò¹ä§3Šj`Ä­¿t˜A”{O6+¥<ƒòä*úÙõÀ “5‘Κ0ÛIš¥K³‚̾JÔ�yI ¥Ý– K6Ã'РȬxȘ×�ðþ«�D*w_ Üêm«bœ¹~3¯:;¹ÔWvÀ²: ­Pv�„ë3>ÙLŠB@TÐlèùh2ÊÁåÿ7F€˜(d÷ +uƒò™N=ç“ÿƒ è3«bùð”ÀW‡ÕDõ�'ÜñÊ™p^´' fûc.uÈ\OÀžîßuƒÏò‡ä>‡{ë/‚?ÌŸÇ"¿à~l')4¬ù°ú1ä{p[‘�G?èäˆr-mEóCuÔ,RWÉ�ÍP+Í�Œ(ø� ¾WØ>–ÖGjHh-ûžoÉiÜA×ÇaÑÓ„›)ø±�†³Ò.L&†%¦ö=E}tRÌü +ž\mÛdó#YC×à`õ8pc ï`!ù ”óGN¾ ¬,L†A>è…ÆÇ:Rc®H²'ÊêOjT +–2jâÆ´,>•u¼M’û±|zeUx�iг*1j@B÷(9"Z(Û÷°L"y;‹£yÙ˜òÒ…¹£Ã9Gôº^ “¡¯RKW[˜é×�kwÚ3½­hÈ3p‡hò¦ð;üd�mSP2*íˆP½·×ßqõ–ü—ô ¶w A$ù©½»ƒ �N¡þºƒQüÑŠ)sGÈói†ŽºcX5åÌ º#nN*í(”;~�dÎŒlpÇšЈ¦tšÍíàjPÚcØŽ úG¥ƒgÇHMYXvœ¾òÊYc#)—�8†Öæ ¾¢‰ƒ@éNÌ’ÚëÐÀŠÀ4‰ã9||{]߉NÚ9ŽÊ÷dHØXÇû(¨ó€Ñi«ã][¤¬ßKª£ñ^©CIêþ\Ú¤Ë;”µ¾º*�j†éÀ¾èÉ;a”‹Ò;„v €ñ пj·z=[0oŠŽTRµ˜­”G½Øh_‰ÍÒ)6\1¸-ÑÑ*“(1W W7œ5{B¥ï ¢B­ ͰW ç1%cM¨_÷ô’ë$tm6"´L2MP ¿g'}`A‚AqEgCÊ‚4n€‚€SÂá7b“�ЯC*PÛQ½a �Ç вdPú”ý½ãZóTäÉ?�+eT=íà÷„?qZÁAÒ~Ä{E?0|Àeööc‡ÿaJNS±lG}Z;(z ô™†€ùäÞ +áVc–ss®}ØÀO�?ÚsÜ[¼@IJõD•Ò��ëÀ–+ÿË!‰!îièrŠ>ùm,æÓ]¹1ßQ`�«6ªÊUܨ/TCDUÛ±ÞóxÉ”*•: +)ÔK%§ +D.-¢Ð«ÊKÜþU7ÈSN80;oÇáùNIL·@vÌû�¿ÉA +‰Ñî-”(úä¤S8$ ìc☆Üþ…¢jGjqÏ�ÅkÈ·i¦˜*¼#£ø@aQh—B×ômúí0TgøÁ#úrâqo‰A#r$Qg¡œ§Ðt ŽzŠ\ýc“ËuÕÄÀ2#-Jò*¶„K{Þ +¤­Xsœx°£9 "2öÐL‰bTQöP0j‹”ö¼-æ‹dÂCaÿ ÙòN�šâÁÕÑŸ¬C‹'â`j§ÉY¾XÞ0Ó¤²G´v†nEÀÅ Ðg:É~�1´�Â9"è)úûŸ!1š|�A-.l Ÿÿ‰E©SaÜiÍoÝë¹8šþüZ¸†Ô³¯Rý¸¹”iÂ6!W±EzWšTèô­3l†j~Ó OÓÒÇ]ªÂyahjZ½kN£Ž=ôLÑÖ\³!7¬R-VÔ}ÛÌuÖH�ô–;L*?]ÛŒ=#Kk{›TÙê�`‡îÚeGÆÄVJYI¼)4µÆ¸»—\; ŸQÙËßÈ-{ò{TžLÝÆ{pì:Ó º¿ß[/N0ß#Ù÷M¾5I*î�wÆg)Š©Ùæ:åŒ?Ål5‡csó½Üÿ² Ãß#OŠðtƒl©�1j +„qÈzGµ 2ÀÉß‚[å²»\>"'Bz×ÒuYS« PÆ0ð.ÃyZ`7pÙÚƒ6S=Á}€°¥‡T +öy—M=ã˜"ß{CˆŒ�õqä:±µýŸÈÌ͇Äm¥ì*^Íÿƒø|(ªµͰQó�Ì ÔQ•ß•iWÕŸ‘,qƒ¡yŸz·Ù1ò+û¾+ш«:r.iÆ”[3€J8¬J¼vÓ…4³×Ç„–áe“ ‰È®]ÐÕïc£]HÎ@Çy±û2?Óœà:½ í'H’Êü=óÖ].·ŽÍU‘¹¡†Ëg‚;çÁØ÷> ¬ÄÁ‰wF$îWŽóCIW6r#ŒšÙEÕ}º¼H’fü¸D ô¡îl$ˆ`•©„]LëëKž@X¨ôõ+‚€‰ˆ­`b ñ70‘ ®4O(!žÿ±Yk=û‰n‚Ɇ˜aú(ó³cŒ±õ1…�b¹5Á¦zŽLªÏé‘ü‘ž;7å¶ CLAÜ©¾\ɱÉ,fg7>ñ£&‹ Í“áÄ,›zeï 㛆"C"˜ÐSvùŸ@ò×­tZèÈl»6 D.‘1XݱʩdB¸L3÷xº@N4sñï´œcˆÑp‰÷ää1LÈÆs�5ªšBìßË4Œb'rL½ñxk1 ïG‘]˜ÛB9“-Qò!>ÍKkþpŽÚÌVgC  b(ÔÆSrê‹q ¯ÏËEÖÝÔÀ’¾JÑdeSðÐËBžï€?8]œ^4'Ãy|=؉ãlÒ*T7ÊNÂT +P¥±D)°’etš†±"ê#ª\LÇÜ ¨SYìÙ—°ÌÖ&kñBçq»‡ÏØo¨Ì(}’` Õö¢¢e2NšûBÖ]/ļ:®øpí1Ž9¬"_þÝŠ¿ò·^mKO›Ù²K5VU%@ÍjðLÄf/k3óG d óŸ]8?�}lìeL £²6†ƒ�OLF«‚º8>ˆM³v®;W. ~ýGA£ýY;5Ë:|Ó}nÚQ€4ޏ<évn$ŸÐF‘@¢•É_J>­PVL߆F5ã‚ÕÖþ�JªY†â<”íÎ…T­6þkJ“±6ï±/*@ZDßPBBVY³TŽ•H:z)*šIãÑñ†éJ½_/ŠTïºZî„¢Â5POÆ~Z!©6by�XTizˆúž°wÑ%b*®!Vˆ¢k6|m±äú; bFšaÎM×î)y:fFœ!Rš„ã}Æ¢pn¨zúœX=¼p×o�¹‹0‘"ÐÍœ QET92$òÍæMî8¡ 6¡=2«a£Žñ·d„Ç b¤‡=Á‚±WþÅGg�tª¬iVû_õÇÎR>þˆ‹Øå…_µM@ßJî€Ä$ÆH³ؘ]¿ÆE)‡A>ˆŽF)s +H59JÝ€ +_x. ŽõFIã`S³[�Ñ5°*d:ŽÃGµj¥›~ HŸà§r¦¶ê™ø¦IÌ‘hðÇJ&#íòݳ2OÀÐÆÓ|j½ &ˆ°ö+ÂÿKŒ·õÿ½ºÐnª‚ûÙÜX÷®N +ˆ—bƒ¹„ú8< +¶í|<êŽNån^v±ïé�xÚ§vHÄí/dc+hEf v BÖ ØK¬pâOñXD‘6ô_£°Œ‡Í ¼>g–wâ€S†\tSmŸåz@à£éO2Ë +î ˆûhª�›Â…PN¬¥‡!k–cC­)¤Ù¥¡i*ãqtÞ¹3á·^r샙D»&üâcûÐÖ´’BÐáòŸÎ™%ù~/äÖ‘«‘f ¢Û]»š,x›†Ö€é +€¦í4ºöUÊìš[Ç|yKÑÒò÷0Y¬Ó!^'3–\”Fº`Å(�ªÎéˆ~â·`Æ•0IçîÝè`SñË1[‹8°©ñ2$ƒñÜ%3¨±è—0.Ø-qþð�cððå[¹Ý]Óç©þJq¨"$¶Ô{þÙ§#»E–ääÃÉé²�Ùý=½àÌcÑ eXðÇy/Y�®Ä[,“#PÔ6¡’S%häqcoÐç1‹w²%Ÿ> Ð"Þid‚ã·øÆúø"è{œÞá  ¥X£ b8{¸æŒ¡WØEéy›¥«â }=Î|ÔrðàªÈña@Ìcâ­jˆ|7(;ÃZ•1õT2]¶õ*2_À‘8 ù8Ï÷kt�ÕKŽ›^Úü<ª™ß*°©†Ò¿ò/:ç«àhÀ�‰ÕÄQ$¡©ýô·bL]õ1“›_e3Ôq›ÅÊ)¥^Š=Ѱþ¬-–TÏȳœâH·ñKãH-ÄôÿsDž»SÜY“K 7ËQ’¥ñÜ×è8#ý"¨ÜÑx[•°°AE]mâÙŒ¹ñ ¤.Ò.¯�séßMª<ÿÅCaŠ2½ ÑÌ4¸Â.‡œ‹SKˆu³e"¦hå] øG7žÑ®ƒp’oKoÂ6Ða·±²%cbtáj8‚X© ýgò‹»^X!ò…Z_�–M¤gž¡ÞÌB½§Œ4î‡rLx4z;µJФ¦Û +D~É!)¿÷¨‡$–1E…ÉÞy=kÁI1‰�Y»ÁÇ쮀u{y‹‡ðiÊë³¹weNA×ì;zÊê˜I²Ô”øä×Mœ.qW‹‚$~J³’döa�¯^¥G߬%¬la«BúÚ\–ÀÑ+—ë7j^³E“k‚e6çÝk¬·SdÈéOÑ)kæ³<¬8„5Uj³(HÀ´cý‚>˜Ú˜iɹÌr|,ëÇB·÷Q9ÌÃ\u…BþëìU–œh’%ï‰ +éæÂ ˜ñ‡ä;дB"Eqp0 mäã÷dÞBÖx;Ø/œ90™ÔG±Ì„«ÏOÎ-}«f¢irqëëXC{Õ]iˆŒ¸•}\{C³_RÎÁ�T3ηälU¹±Ô*~8Û!�— ¨Y–òÃn“ˆ ¢¤ ÿË\±(‰ItÈÆ›B層�\*Ÿ0¤B}cV(&g‹é˜ò¶ytdLa1x¸ »Æ<óŸ ¤/RñÔR†fS‰ÜÓr´09¥¹½Ù­öCŒ«CGn­d/EPª?{ルj4“–4d:®ùî–¿¯\ž‘«EÞ0] D÷Lf] +�p´Š+ºª¶š2LY�Gá ƒÁqEÛŒé£�Ÿö¨­†Ø#¢«'ùF¼eVŽ×’4r|Ë\ ùÒû$ó² aÎ:÷\ïi¸�ÕJpWHäF$€@‹vÀEk¬)Âú‚‚}¿–‹h*ÐÃŒî§2F.rå¹¢\k—v2Wü¥h#@‰B›»®ÄÀç5*R£ÜøaçJ À”ÄPV ×íQÔvAŒ¾ÛÕ�Çð1#‹†Šˆ¹I +•†ÏÒÄ4ãm({¡�Ös Q6”¨Lü÷žŒÞÄÜ~ñ 8¶**þ@ö‘™�mÝ Û�º1Êñ±Ø–œGô�å�Sòn¿øŒv{ƒmÜ €1<ó¶UÌ�Gh!µÔªâ´ÎÂÙ#þ1Ý~”ħ)#€ö¿¾²Û/"šÝFLá%àɘ÷èW謖|ôÖ.‡›{(0Õ¸Í;nŽ;)q“9ÝÄIþ‚:ÏÚ�øÃÉ}†t ¯a𹼍(V¨£�e on«]ó¢N¶TTwT^†Ÿ“%ýõ�lIaÝzDCãäÎ…'_R¸2< ž­Ž:²é-«N¬â)FŸÏœ¸q*|'[D$Hm‚Êeq뽓]Ö†ê­ë /¹ÔäÇ/ÕµZ€!å|é¶r .@t“¸`¬-µD’•�K–ÔÝÚ«‘‡o“v…lé7á¹Çm/ô ââE=™£÷î_ .ºÑä׋ö 4\€8CSl2öWuðIª…{#¯4íÆ™ïÉynÞ�i�ÆzœÏMXàÓ¨ã;ÅŠŸŽ©ß\v»ÆLûˆý#X¼ø2É%€…À˜ÃÇ1ÿ�¤$$%±*D3úÜ´fNHnµP]+e¬d+²<ìmeQJFsWΉ؆:2ù¹ŠÌÒ+âÐ6f“›¹;íµ)ë”ÜYUh†®§á wu³ær 熛­(R— ‡†*«¢ªº*AUUÕÔ¸œLU \‚r¹E% ,£*�”@PÜì6uFÒèüþn=òªŽÿœü³a†„Ÿ•Ô | ` ` àW?yÍÇbB=!öì”#«x)*NÕ%[„J,ëm™ë{î]KvF&Ñ|åsdc6u ìssoiŒ4 +ôö¶ê»"!ÉÜX™á¬~¹™d%5UšS$û™I™P§¦Dß]ëþš–xÎ¥�•DÞÒP©ääKWÅĶÓÊ££Z}ýÊ×ê‡!�TVž%v¹IˆöÔ•ˆ}3S½Òùøšªñ)-šßè„õ:žý^,4Ö‰NwRþì^Ô{¸£ YCb½’æl%U&%¥]Õ]!Û è›Ö²« Gû8vö»!ã§ì,š#71©� Ôˆ6çµê500`"»;Ý/*yµHì¯zAô–íjÅËÈFW&÷©Š[c9iR?3±I Í Ù°Þ#Õù*þ_C£€ª"2º:_–’»³HUi9PÝ\bÿ—òtdÄÈ6ÅRI'T/ÕÑ^³Õ_·Ïå,­‘V[4¤«óFÉmFÆU)æc×ºÝæØ†¬­ÉµHF„6U½×®ÌxFöN’�È} ` €j\ßÑôR[hì6÷ pBV;]ÀRZ‹É ‹žWª$Êr3$ô +¼^ws§¢¡2E—š“S§Gê8$ÎÉM¨’F=kôPÚŸ¥Â1ÝtóÅŠƒã�Ùµhdø1!9U欆�H”!“‘Ç;kϪÎáWîÔ_Tz|ÅÉyj¸¢:ÎØ•0íõNàöš‘¤U/cCG6'¦èÇu{{FE>JË÷e(Ýù:&;šl.FÂ…ìkMHðUåˆ(tbV‘Ìí©Œöp~½¡ +§UÏääfèä.pNÃ1ñÌHU(&U'›&Fi Qëg¯³Žìnv$ÔM�hü!)ûÙ „»¤W¥ÓÙ»2#Ü� ÓX¬_˜ó�çËADûRnY ˜�`Sº0&’@®M…Æ#cIðXÅî|lÄ^$yç^:½ã"_]E‹I•º±ØÆ‚ cОW3Ÿ+¡ýXŽa ‘tŽ%ÐÉUŠ´©m¦Ì¤ôÁÆÆ©»š¡ö~¬ŠRÕ"»RIè·1ØÎÌJ/Ú¥¯>ìˆÝ-Gâ¹s‰”ª3Ó'FÅ{ª,!©©+;»îˆæmÅÊuM–�òbÿöÎr“¤hïÝüæŽi Õ]Rv²Ñ�L™¯]³®÷“°B"š‘Q�}lgbb6­Ô�Ù¸CÏnÅ~®NFc2™ï(ì§Ä"‰7¯÷ÏÉXêBr§È¾À�¤îhD8¾–,-+›Æft,ò”Õã׋RW³puõæ”±º¤­SFU:ùýT´ø¬«Þ-¿ž.›ûþA@u⺎ÐjáÝc˜Ó0c=}Ÿf £Ð�Q†ÓÑ‘;ÜÝÉ©¥b‘Jãõ¨?i+s“„�=ÐPp�áñE)¨@Ð +, 1 Û‚A0 +rŒA:XÐ1 A� ‚èƒ8¢�FA7737§Ï nFq"Ñ ŠŠh753ˆÄÌg3Ÿ©™A gž�kÓ=ˆƒ{sÛwùö=†Qص{Û·ýñíûÄe<¶mÂ×1ÜŒÂÃÐQte[Ö0ööÞ¶Ã; +Ž�Ì?ru7’¤IŽÂÈ /d]X¿1øoc`¯Aüƒ°AÜÝ âBIÞ ¬jUõ‚ˆˆ>ˆ¿þAüÿ Îl5ˆz}ÄOcƒ�Â¹Ë ÞA`aƒøxå‚Rƒ(I{_Á N¹1c0ˆwå—a3¤.¨�þ ~»ƒ°I0ˆ*A ¤€æy Ø‚(…-”ÐCúên>”ôÚM¤Ê­M�í ð©ý�©Ó`«Ý(î:¬“ Íj‘l{±‹î™ +ðê ÉUTrÁm<¦Ê‰xXõ³)�Ÿ¨†,z§†„Ã@À@À@À�!3󉜱5'€•|qè¶þå”´b¶ùD”땪=9þRáus¿Là‘øÞþTæ“m"�®õhÅ +p¶Ò<+Òü8Bñh"ÐiT6B‹�7�‘;¥ro’ßýÂø‡ˆU%ãÁtæ#å4^§èhî=UÕ¦uÚ˜p6½œPïTª@uÃWQNžðè-ÁÆNÈø#Ûðîyc=¶z4‚Ïg‘½~U"¯ Ÿ“²O°9¹fg'ˆ¬›­„rªþÿBy836MuDÁˆVÕšK„³Ñç4ª˜™iSùu0ÅP|°iO5ÏX�çSäñÈÇHf±³³³¨÷½>67333433c37BDÄ ÅõÜbáñt6Û\t³[·µ;NÇ0Œb*nëÖµ¶D]—îµ×Öƒh[jëÖm‡¶ÖŽ¢m‡¶mÛ¶mÛ¶?¶lÛ¢m;m¥CÛ˲-*˲-Jöe˲RaÉ–eÙa[³,ËýI¥ÒŽâÒbp饕YLÚ¶­tR‘Þ)•J+%) Å€ƒ8ïÈAÐñŽvVÜçãÔÐhgÆHÚ8Ff7‚&r6ŒÂTUQ~UÇ0†‚R5(V¹ªªZÅ⥪ªê¿ýöÿ±ªªjjŠó$N�bPÂ&|TD"ñÄ1¼áj ô‡£�ÁÌYFfff8 +�ÅöÀvÙeÛT¦MÓ¦iÓö <Ã(̈9Ú ÅùNÀørȲ,9%ïÒ-+[–S–Dy©‘d9 +Ž‚¤É1 ‡‚æ€Ë…¢ÍH!) +))ä(Jîæîîîîîæ®ww½»A\�wwwww77w7ˆÞÝÝÝõ|ƒ�â̬f63«™YÍêªÌl LÌ®ª¬ÊʪªŒfƒ0Íh6»ª²*ÄÆP7†ÿõÿòÿ?ýÿÿÿŸùÁóÿÑÑÿžˆˆŠˆˆ†ÁL‡ˆ!*јÆ0c0c Éb4Ša +:œÎ8ãÏ 3бmÛ´ »pmû6½<»NcÛƒ°mÛ¶kûoÉQˆÏÅ@à€¤‰Æ Ž¼Aü¯Aø#p7w¢A bLãßnì1ö f1÷Lyìê˜i›B´ž¢32"̈,‚A¸<ˆ�»ý ÚŠ@®@FŸt¨$ظ¥™™!š£`9$ Ecòx4�É[" +,:2NšvDšh9¥1@À)€Ÿ·Ã¸ �zÉ×ÑÖ´±³”._:;Óo„9T0äg¨9 î„.Üò&ÉUWÂÍ— ®Þ¹2Þü:D.?ÛeBç–Š/ôF¯ÇÈ$Šø?Œ£:8“ÚØËøú|4¶ˆÿÛ¦2i= mó)ÌíÓ2%wµ&OÄ9§Öå Uµl‡TDÞêD´êH;õæ,0]\�|ÆÆ>�ÀŒ³äóì.� �¦hèÆ­ç D¼YB:—!KÞ¿6ªžCiì{³wº™.$`w—úp*`LPXiØ"Hçe~ÖEåŠB7 ûD´1ük0Oªˆ�äSA�àºÉµèSŽ2í�¿2㯎a¤âŠ£{¾ð×’í +Û×Î +7ó†/¨b¡ybâM,$®Å$]ðhÝ“³Zý”•;Ñ�†D¨Ð"¾’°áeBslGc $ –“ýÝ u¾üC€WòÁÌ Ò²g +Ø>²39t �/Å¡¹oñd9å´¨R!Ï®(ü*ìÝŸÖ¯ô¬ÕÁ„³7±¡ã‹Iáź"N^>•?òO/ü �:·@´ÙÊŒ`S… Bó§@ C'þœ¸JŽsJ—?§ÿ”+Г™¢ñ¢7k¯±Âݤžïw‚é'€U÷ ùäªZçÆëyµ:áMg¾}Ì +7^uÔ '~ž9„shÊUœ$PÈø{õ.ƒ�Qv÷Zæs´,h~ßmsáKÚÙ- Ó©«´F„ÛI««G^“üð6COÃ+pø#´‚7°uR‹Ê 9R^0&¬{ˆ´ ùÁŸGÜhž%„Œs ,hnm%ÿãõ„ꙪŒP¾`As{Ê�Ò^k!%@19èA` ³Ê&A&¬ÈèkfûÆÛÿH�0&±#‡­wîüÀö£¨½lDø˜~éÄ€vb½G‘‚œEžŸ�b~»ú O`·l~X’fÕèövån ñdf …¨W“À@Þø`‘ÕrBzÌL¯�—03ÖMŽ je_¸E¦üAá5cxŸ#�k»KÙF£~‡(H\PUg.K"\ÄQ2¦9ªæ#c’›ÓªÇö‡ïüT<ÆÒøì7ÉînŸXJc¬Ô]ÇM‘YhFšÄlRN­×(ÿ„bìOB;1f#1dkeàÂØäõaŸmŒŽ‡-†qÀ§-z3¶Žr×ÿÄ}ùŠãDà¿–ï‘ÆýáutŠ£`lN +˜MÛŠ—Ëùaˆ [Pº'Ôz2ú‹×øJnQáÛ/^žB@¡“ÿÖ¿Wéªùâ +Ü�á0aÚzîÌž•õÃèQ¢›00[–Aûʦ—¦Z%‚�]\'~±³>¦›’³ón$<¾Æ\œÅäõÕ]R.Îü§p7®K*tp üx§FM|Ýónb̵ŽrýîÜâ )N +¹NÙhhÛ+[LSVF§µ8Ÿ|E&4”˜u@G¾q<_ØÇ=Úɰ³¸¥–Ü�¯"-⨠+” „ÜêÁx¸JýºÉâæ+„ÄGéëÇbE’z� �‹õ ôtÚañ3KÒ}v`ñ’Ƞ𣯪9|]rÑ`'šóqlŸ½¹G½°Ù[q=Þ2ˆ²ЊéEêôÒY±¢ÔÉV|ÌgÁcW±b0¤QY‡«¸Í¢µ ©ª¸ç$µµŒúÔrh„XSq= }–бHÜÖmjzÒ¨ø|d‚N¤õªA¤ >½ÝöLtŠ_â1S‡úÓçàð1Åk$´gÓJM̪:VRœA¶„þv¦ÿ‘˜Œ®ÎÖ¯aL㯔v¶×No]_iÍ ÑÐÙ ŠU¢gmDu|3Øö̧.fH˜�ò§O& +;9 D„H¦W“øµ‹cô¸„u�驹ÓÀôÊ +�C¸'nÝÀkþ·$¢Ä¦'ƒ"+˜†ï›XÆ@7.±áIcÏ›$8‚ŽÎ@8Êp¸+²�ØÄÎ0—üDµ‰ÇžxJùBŽ´Ðd[Žà Ué*GP¯U±Þþ|zõ�¬°¸CJñ<÷j^½7 +åŒ#ì–”7Ž#\«ì¢ `'1A3£Ñ[?C×BGø$»PAA¤ýÇÂâKƒ#t�ÊÞ Fƒ¹ÿé ›ºÖŒQá:W’ˆÁƒ!œ«&å>Ç*û€#ˆ#D‡©›"%�-èILÂç(e‰Xã°¼£Ô¥Ó“Ñä*ÀO8½…‰èj¦ÈärŒLeŸ BŽ@9Ð*8MÁkEåMÓŒá2Öj§¯ÛR3ïv +:&Ž iÍAO.�î�0?ž¡ŒT?/,}v9Âa™9âÍXä"âs® +³c+Ó81Ñ‹Èp^ÈÕLŒ’#Ð*Ò *1~I9ïI%ÈË€#¨!à»ÁÝ"Ÿû ê¨0pºlÔŒ"`žs‰·GÊDK ™M™ +�$¸�ìÊ"éž“Ä@híGOó§á&� Ypƒ%lÍzàÒÈ +˜Ê<áã&ðnhœh}j7ž•#HÆ#™9-lß^ø0Qú Ð’ÓµŸ^ÔV±hRÄm<’Ò{µCXÓר®‹“u$SŸÂ"œ‚ˆ¥ë 2q'Y|ÔÇ£e5‡0ûòŽGD@ÖÔŽ�œƒ§ö°…‹¡Ñ=±_ÄM꨿„�5Æ£‚BôA÷EÚHÈ—À´Ñ¯úÓ›øH&ð=A/ñ›Y·W SçÒQP-÷\c¹³Ž… Hrt¢:¬ÿD»Ç} +ñÙôò¨Z²ûß“,44¦Š ñd_ vf_ÀB¨à·VeOUµ* ±G!s¼óTõ�U…f!O2¤n²Ï> ˆÄBÈ–sh˜¾½Ò³ ¸”Ý2,®…'6‘sÌ¿loj)@Þ]Å AFçÌ3¥•…P¿œë} ïž17¾¡3,„Ñ~2¢œkŽ”ù}�,–åÍ,DÐ9“Ö[�Ï0Ì¦ŠŽž&܇åc3(å/RM&:> +”Z+G_[o*Õ7ƒHàÎÎБ˜þúU‰¹âtœöÉѦ67nm�J¬IMpS;IŠ&jϼW`«Ñ±ø¬Ãý¥a…/%êû’ž /¦¤Ñ‡ŽE ˆstaEÙ¨¸÷,“~Å¢«QYnz=Œu7´Î—âú0–(ØÀv­üa!Z8`1¡°Ü < Ó@šÕ¼ ‰¨åºÑn ¦IEÉžºÉ¥Eç;Óšº!OÉt«Öˆžf5 +ú «)RÁ£=ÞEÇ �ݤ´I¸cP,)š'Ô">47h|°¥E .Ðpst9÷¬j37t&Eój”’‚ „viíÊž!Í*\X8UgÎRæâ–.¿ª™Úzö…’¾�Ðî÷^ñª]!µ,JŽÉ‚ÆxÎ]OØ%àmrâS¸Ô%¼L¥‰t.±Ê¶Û=Þ7_ìÑ5§8q¬#Þ)1qoö@L¯gÛX¥ŠÙ™‰üz¶»ÝΪ[$ú¼KbdÎ�ÁñÄÄ�_ÿ]sý?t¸s¹«¬‘¤–h}Ι9[[§Üu?¢ü¯ÛỶaÿÐ}|1qqdS‹dÏÖ¸1ǯíÈ@»åÉ ’P +—B%œ™ne|MÌolò@» Jº*÷oàß¡ÅkVÆhíYü¼|tt§9oKÈž]iÔ}›°ƒÁÞ@= ýÀa‘³gŸK.â·pn°fhýG· ±³gbî3µ>V¼Ì[g›%,dÕ]tCv/}¬¤íù×–7u¯ïÕÝf¨²è08—cùÎ&×ô#¦AbÊrÄ3KB"õ�Ю9K"ÙX8™ƒVGس· §Ð3‹&—I ©ž"‘LÄæg @9a%%À&ÝçAŽòˆ„žéï¥Nùž£«§Øbâ2Ô@Œ +£3ÌhÉ÷ߢÕ;¹¢N®i,?õô6¶â?ˆ +—¬Ynç/†� +øàm(ĉ q'ùM¶¢Kä÷ +ë¼�‡xè‹+¼Ui6 i"Ä4r¹¾SóŠ‚`“p±¦íŒcýR°¼iÕ0hÌ/ŽMC®£ ÜÏæÔÊ>øÑq7öp,mGM÷�‚÷÷?•|çÒo˜17't†¹0=„ñ¸7âqfjÀ4¶hC³))NQ{+>�°l==Â1ì0z/‹k±K/ŽªÉŠAÝíN]êýÆ’³ñ~n÷½YO%õdîX5!í”r îä‰Å\=ߎȀ0äRgöb:0w¥PÊ­l.u~·ëpk¹åR­#0€»¢ %¿=~:¤M²>g(YÙób"̉«Ö®C0Ò¹”¼ +€ýsá&~v�[6YR«6ÖwKS¢cKõ%ΩKe·‡Ê‹éÑø­q‹²ŒçŒÙkÚÓ­KñÕËõÐÚuS—Šs iûÂH$SSq2 šÅäN ‡X«�ÂÒHþdžµ–¦.%©sôUbš0þDJÓv:6fÁÆ’à«Xl“ßzB@áyÇIu)ŒœÁ;A&p†·—JÕÅ–ªLÎ4|^–¼k�[iÚ\ëRy§|f‹�"ÊUJ›Në#.1»ßSP)Y¤^’3$`aU[•J„e`½M=´Ç&@øV<«îñ†»ýïã6×VmÂS-Rc´ÊïL²ãÓ:•ž0[j|×›Äa/bF¨ Üöu<å⇬ªvÔ+K#4ˆr—L(†²wŠ‘ :*?V®�V�”Ÿè\€%ù©EvÜI–ÀD^ô¥Û�œÝ˜%aDÈÓädÚŽHýoÀw‹�€y³Î˜c:&¼‘Ò¾ˆ3¶o�Hx­&·%(�ÃÇ—H=]qi%5—NÖÈQ—ҥ徸GYɱ#%Zã9X9Ð&%" žø,­°1k2Þæ" ¸8¡‚Yˆë¸ôP +ȽW"r “š µ5(jåx·[)„Ѽ¿“`jý!ì1«Ã©‹G«HbSh‚1.e ¤! +V… Eu•|B ¥„2×:&‚Õ—t‘œÚ|„¬ U#OHæW?UóLÊŒôHý1Jã|ÂW$ÚœeO™T¬v×eÌ_œz ¬DR&¾ (“J«;wú¤ç+È$G~ Ê„U +àí:áßnxDT¢O-ÇS<ŠÊ-/£V2eÎSœ·ŠCñþtŠ@Ÿá@�Z$ Â"–#ì€îž¨>Îã3ƒ(º µeŠùB¨3�…7ýÈŸÀ@ýû/X1Vtmxè§Þ¨ñwÄCUjŠÂü²&ˆÆ›ŠP‹›ç$£¸½W$@�¡ ™�™’,ÔøôÕÞUgDéÀ¿¶úà9zL¸^s¾�õHÈ€ø…zòžxƒ5I;èýQ„YÍ Ôèè²¶Í Öd(I¦[èk&ÈT@fÞÐ1†+i Ÿ¬“ÔÏñ"Lz\7!bM TÉšvÔ]–nçTéÔL‹hm^ŽTA~�ñÖº]Gc¹y1úñjî üŠ–® M W°V“©zë÷b ¶é*9%ˆ<Œ1ó½Mçh• àÀxOœM + ÔPbJa™Ä†l¡þ2ÿ,­�š£€`9¡+Ù$9:¼*ÁŸ3‰˜‰œéD3„@ wYÕR•s%¸<¶¹± +@ ÚÄ)F ŸJ¤¾¬8ˆE¼´­8sŒ»SIn†‚5"Aij}7ᾓ_ØíeÞŠ¥wâ##dÑ‘z@ú¸õÉÅ#ÁO–׈•�£ÄÕ/jFp÷¨¡G!ÆOX×àÝ�¦À?"õä†ïŒ¸ÚÉc™<ýox—è°Ë3)w1%~ì’—I‚¢é‚Œ�æ,LÑ•#á]d>|‡ #\©=¬ޔ«�¤{Ó¿KNâ�­ȫšâ@EbG‡ŒÀÇE²�µ0;7ÎcT“ø1½5µÍfa<î舾Œè ëB<بŸ£ãŸ»|춉ÐUdLojKû•ݹ)í•{`Îç”áÃ1¡prÜ� ‰ê«zsL®I!%³>u6½IT««gW~Ë4úÌ,bï�ù”N�^”Ù¯½8d7ŒØl¼p¦‘z„™mçãu?é¿ek€==1@Ÿ! #°½l.M!!¥¸!ËÑp„ßò1†äõ“¨Ö!`FÅ% ø,˜‚¦CsHŸäOOI%ß4`€ªsçGÉhXl»¶”TÊÅH ê{/ˆv<‘FƒF� 1’<7`ÿOÌrns’^¿Y¨\1J²¯?sã(År;�T¹­"™&b†çqUƒÚî¸#¦OB`ÜÐQÇsœñki€‡<â&?ˆò^з5Åèu€6 Ѧ9R® žæ”ÓZéÕÙ=´Kk°« mP†¹HHm|o«¡.ÑY­�Óq£ƒ$ØÊêiíË�8 çÊÞÊTº8PoÐÝà^pçºS¡X`;e[ƒr6ë¿£ïC½ X‡A‰€Bò&l ‚Tèµø*÷€¾iþ:÷[—+U öd-À]·¥M ¹˜NOÆ�ó…€ÿâ0k� >އ<øÛ· Á'0!¢Ó¤Xç°æÊ×8Ó ðáŠGAPAãžç�ýŠœ…U ð ´F8gÉ!öÚ®ÿ,nÒ ±oÏI˜˜¦•z(s'\û´rÝ õ|®Þ{`%Až‹•×<å.'«[æ�G#b©¾4z½dRiCT‡ieÜÑsÊbŒ±Ñ: ϸAìˆÕ^:ð[I¼s@„ðg@¬@®L)6ƒ'l +a4×¢s¬bŸo ‘¹�ÕÏÞ P÷€ôõ´ ÕÌ60ÿ¡ø¾YÔ^Þ]k�UpW: éˆW`¨Ë¿ +Jàhú&tOžô�mª 4X“iŠñ‹ÜðÆ,`£¯N}�õÇ€�ö¯‰§bÀ 1‚j�aÀû#µh¹£s00ÉŒÛ>]‚“—÷Z3ÒöÓ:>®ë® w³ûF'½ªÍk¾ýH-§¢ÕoUGâùÒ=nÕnäp!�’×¾x±wÕón‹Èü~²r*d¨Í ­= 8/'ä�®ŒO�í„g +XÑ£ÀÔÿJ*¶ƒê¿g@ãYi¥yùq!…_¼Øý™,:hcÛ‡ò©è‘VÙÔñÿ¶º©ûÓRƒøÕ4“]‘š“ËëÕ_r•s íçÔ‹ŠÊVoýú^n,]‚Ê;Nüú¹ÓÌ:UHä±#:+™S¤”Ì wTñÒ,IzJÔ–îéU¿‡ú¸žžþ‡lç+Á(ó¥ìÝÀ਻²Èv`@’‰ê×â9˜ÕP5ψ&;¨Ö¡ct÷sÐäÖ P�d¨!™ŸÜg·¼×þùã�X?�N9”oÐhËzU¿þ"ç Æè$;¤œxàºÓKê'â=ü¬¡§Q F]¿úLàPo‹:gxŸ ˆó‚ ûœZåFFÁGßFÍÎtE’£qFJÍ„týŽÐ]I6 >]d¡WBý +¤*5@å±ÇÂ_ÇúybN!¡ ë¶—‡p)}\Âb>‡ø.4ߣú!vB‚ï€d@Ûé7LðMm<PJE¤®ßÊ’y^¯ö»�*-kÔ Í�@˜Ów]¬‡úirx±(”¬Î=’ KÆ×�âø‘i ü�‰€¦}éŽÄjÀS4™°Ü÷;)åîj«…U?—Z+ÃaLŒ°þ®�A%0G�ŠjÞÚß´ +ŒJÐ�Šy£} Qõ仲óq¢ä ýÍtpÔݤ[njæ1C÷b°Ò0%>w[¥ÇÇ7©R¯(²��þq£íˆJ‘”Ç8¥“§X‰)…¦]°Çã¾Ô,ÝûÖÕê:Í>JŒ QŠÎï +¥eƒ<ÔF *²Œ›æ“BzwÐß“Ê_}uR˜)ôæ¤Z _6iŠíqפ±'ge®!$ÜÖÖÀ+ª^äÌb¸¤û~}BÆ„§%Å@{ŽL%•W/儾i’’:¯„½ÊIJ‹Ÿ– !I5†ä.JÇHªs·‘Dû7iUõ�÷HÑ�{9Ò2Ö9.d©�ôVl;Ü8#:é‚ ^5à,ö<_˜;ð¹$÷?6áþMZ=TŠÒ¥§’ú�~+šcH)çm´˜õ©€Å:À†5LHe85pè¦Àæ+iÆÄä¥oª—àµ. t¢s¿?JÇZ’Kô]Ë� Þ£}´„P5ñÕ`sõÓïL‹È63×MË2P> +½1âUÆaa±¾öƒDì6«¢dg§ðQ ¯(õ¿Ÿ�Ò©ÊåžTù(±Kôèöè‰ò.zTÚ $ð6Q–G·„g³ +�‚8¾@Öú; + ©ñ¥€Š.b§Ž-låÜ èè=¬a +#”Çr´Á0`ÆÑ8#G_‚ÃÆ–?9Bò ³TÛ¬�8哸�KÂ�Ñ�4$=ïŸb›#¯x<0‡FÕàƒ­ÝÙ+£ƒ[ß§Û¿©â8*�I`¿† ¼|8é¥ÞÌ¡Ž;œAø.seÜ”Îa:’ÑáíH€>;Å«¦h8^jE’òÑk;=æoœç¡·¦ý5¢–"ÓñOF;øÍ>Ï3M("a2 ¾œâå8_œÒ]PŒ©yÚ6¢Ö�¼3~ŽóÙý{çÕ~Ü‹ž!pF�àbŽtHĘ]�tV†íy I>ÂÐ ðúÉ�RÉE Ç¡pø×Çr2#e7™¥&öõó›jPÔ� šyœø&ÖS©t‚c#ÖY†_`—ð ®¿,ƒÒ1ÿT÷¤D(ŠM";±©8õìøY5œŸ IeÑ;�“¹2ÇÜ(!ÒÅq„ý¯?heõy µêÌRkd¸~ +NÞ“"|ٔɻÑäv…dë\é±­9bˆ× )Š˜8ž3ê‚6ŠÉùÙòj§eHV.×FçÞ:E˜Úñz²t@§bÃtüÐÚ²ãv…]À(H¶`gÏ<�h©\“zm8À¶§v„GÐféßÁF÷•À� ÉjÆž%~å´Ê)hyÃÒXÀÓð-‡y WîîL™Ñ|ìÖ6†„Í¿�x|ðRCŠâ1qü»;ôËa‰!¥0ÙD1&ï‰î§=©&Z•ÈpdHGFqoAW^�ª×½ÞÙ�lÐ-¯iéSñ6hãÌ”p®o™yŽècCs`ž4Nñ$ ¿Ž¦¸�¹¿bžÎF§òMæñéü÷M‹•¤7³“¹¦aRCç½4Wh¡ìRæéƒØ-\PNŒòKEñShžô¶ˆH§›ªµ+û— ÂÇUl¹d¸`Šd yI7ºP™1v}ç?Hq(E[bB~&‹!^.¨¢+?©š2œ#1˜™Ð™ÿó}²³»µ‚¹q6tg†%0 T“üj. sZ1¦`lBcâ$å@$XséÔÖ ¬¹ô•‘6§5À¬ +)N)9* óê(5„7šj>àkîT#m¿ÍùÀ�tž+ô÷õ_Á%VËGaÍ�ÃIÌûáÆþÒv,—›ƒ¢ø½¿Þ:£gÓíŒîÅ#Ï "}þYxøT‹¹Àˆ5�xN_ê…˜B‰ÓO�ÄМ´ +0~ƒ93.ƒrÊÿmþR¯DDÊìy63¡¤L8{fL¿±µ("0(ûO4kÞš¯˜ÞÑõeéï+òh¥R‡lækSã+ °p‚¨\c�ÎZó?2 ä‹ÉØýTøSÇ +û‡®&»—2ž‹avÑßÁMÎÎ�eDŸ�¡úf…C#Ž#@–söCÈ{áU@+üR<â)5Š ¼áß÷zÉzW™Õ§€ #†�ùK.&÷ ¨À}Ý�l¸ÉÎå`5ó¦�›í'æSå2Ågâ �;u†�µ�ýÝ4O¼ô¨ŸU(¶Â÷HÅÞºç2Ü¿8~)y8ÑŽ�][&F_[Ko'Ì l Ê…PξV/kßÚa`ãAöP³¶´>0õª³n¢Âd%d+_âA�­*u'4뚇Ã(Qœ! ì‚æ2Gä…=0@hw uKüÄAWÐ\=‚Õô\£ÙèÞZ{ß=¢ºN5_ŸîAŽ#|�«ç­nÆj¤¨N¸ùrðk [ËãÊSÒc=•nx•1Ô–g".fsMŽVˆ…Á³K3zŸE(yØõR9‚çR‰�Â.N”éH&d`“¶Ü«ô¾,ÿþR�4)àöíK�I´Âè_¦4b>´rù¸Ƶí­Gæ„ }>޽Ô�dص# „5â”·¬²‰ãìÜKþ˜ª†ôÉR¡Ps‚ã{ø‡ª:ÓƒËQ¤G—Ö½ëHv ƒ3ïº6—èpõ€,¬ª·_ˆ×<\3¯ Š–às…&E—€1´jT­Ú¶ûÜ‚ñÀgó.çàf˜9‹™‡À;ø¢Ða+Ê! 7vr6›^E«Eáªz“]ÝÂsèJ¼çÖ“_ñ—ñg˜¦ÔƒpàG4÷¥2ûŒX„ÐãhüU‡‹mÈ +~+â(èÂXÕwdd|¬j—²þõ #ä°!�,ðïÔ1„‰klµ7r~ ÚSôª \_�ÍcóøœÖªN¦Ä=«±9À2é) °÷œÏñ +<½S¢k®"ì­ðKC¼¹´¤F—í@a%v?‘Y¦vªZîªzØ* a�|l BÚËš†ý+„sØÔ$¢�¨IÀüYõqU+d˨ª=ì¦.»‡ýÏ(Ñò²µh÷h†kh<6g$i†‚ùË ì÷Bðù°MÉ&Á„öì§ÕþEZçneôªk)S¨v^[› „[ßy ð²ô­KÅÒhøDr@2™sú�"Ú(Ž,Å&·Ý‹&@ÓÔïA[" ¥.1˜aÕ¥A�@lÎa'�êÉ@läÍøÕP∗bÄŠæýJKM›i:)‚Ø­ â5¦óV�µ Ǫ™ªŒ"÷˜“ 1áþßUËÒ(…µu€‡¢�†È"¨i·ì¤¦æâ&ž,NrÕ$,KIý"K5€»m f �ƒh¿+]z$�P-ÁÙ1œ© HgÇÕãUJ?Ð/Ÿ™B^;ª1›ïË\a;Fyº9¤ƒ ‚ÆSœÚÓ¿?<:|žQrN"h¡Æu±ÌÄ(0wp[ò¶ãRÎær;£{ö©‚@gÍ6„cõóVZ�BÃ7ˆCáX(×»¼b�híÄåUer>ë\Ó¥W�IðAW$†"LUó½+MlnmÄr‡¦áÂëwÌŸ.u'¯@­âŽûRþupIÐ ë!-á—V”¡@¡í÷#ô•‹œºÐÄ)œÀË^îXIzŒäËÅÅî¨f^ôöÀ 玱§ÖõùЩœú6Ñ•Àc�íV.eº ºã¡~·5(Ý +DÒϹ³‚gyz® +GÕ–àù•:^† ¡Lþ…'̇U·‚áÔŠb•w%vǘ#(+Û„«®ýÙ¬ Ç„vŸ9AÃnÆ�J>¡§JWÝwÇÐéÜ¢w +NŠOÐet‚xÇA᱈…÷U×Þ¡Ÿeæ_�P×:�Œ|•ÒË;ö}uV�¨0õ}¡_©:8÷èâòa£zÇ¢œ4 ;vÌxbI×±h•’ä)‘&¢m8{ÇþÒ"W\é8×ÚÞí�{ÇPed`&n4ŒJ_˜[! æ/ù°µR·ç%åÉA,ɳßf†}¯fYsæFw\ñ³˜Ô»S€þ}­BèŸ +8±›*­1ËÉ™’}Æ,3Np1R‹4ã¸{^�ß!Mw< +\©¡’YÎ#X D—e�ˆMÙšA1X-j›± ¶*}”¦ùUÑFôïmS=ù8iQï�CôÙDoÁVÀkTgîífnöêœ (’[%W\À…70(dÙ·—`0¤ ¸­Î"gÍâ¿.bÑü¦fž»BF¦h�d®;~Ùµ£–Uª!-9¾eŸ ªš[Vä̧r +ñGä–ZŒ;Ìð –eX³ôtl%Ú�-þÁî.t“ X»Ô í—ßû=_êæ¤<aDG웋™fôPd›'W—‡¸@¸9¨à}‡X/ý#OM©vëÀ&_§µ¹xKl׸-Ÿ$²›8¿³ÉÔ¢j$vóWI{f�ÅÕ€Íin—Â1ŽP§òç`âµ"E®ž zÁ¢X±úØT`ÙôŸ@�Š ´æà‡K&4#®rŸpѰºÄªô¹Ý|(DP$‚&)q=²3¡ Ëô ùĉDdœõ|Mzt/”¬a4ñS vb«cçÝiwsY+‡Ÿ¬¹Ù‰ì#€å«qõƒ8GêCfÑ­è/vjrO#J ”Fj<^9G³†`E#øºžŠYÌõ}5c7§è¨ïM\^p`!¼áè²cG($~Ë•­ž³df*…ÎÚbUmªÀŽ“Gqò�Ͻyü¼ÄЛ‹Ó!õƒ¡Â€7¿‘z‰ ùEšã‚úÒ›«@ïä$pŽª(iÔ‚ ½ù{X« cÏ)Pr¶Âq +{…%ñæÿá÷Ÿj„ˆ”ýzs op“xZ:Ãb Ö>õ=èå‹cØàFÓËücmž.ânAÉáì¹q²¥Ö\Ë‹žÂ�0 xòÚ› Ûù9²½yX™º©R˜*ØüíÍ¥Ëá-÷æŒï ¹=ìì=͇ùôLé; s•_m„Q'ž0�EØî-à\J‰qf –¹Ü¦ðE(.ZxE-ÂÛÆ°èJ;nÍ/ÞÞó3œ˜�Á]\u|óóñ, æ™ã’IH'S“q‚Ò-Ó„íÄø­ã2ê3£ª9^O’gNv­¥QÙ‚ñ÷Í¡©T•§âŽð ¡9B8å›?ž¯e Íèå¶�–€2�Õ}�¦³D·ºÎÔhМV˜J)bU"g®€wxÕß½áÿŠ*Ѷ ´Pcï2]ö_UÓ¹ºV Qÿ Íľy�ãДHàq\�¨ø¿*Ò]Õm‚]®í›÷nìw¨ªíúxàÒÅ9"]hп÷¸ÑÀ;qâx{¼ +v]ŽU»wsðÅùÍ!ù�i?"Iã}-™Å8‘'CZÂF\Óè½ÎH×yåËýz8ü”¢i6Xa7 _Æ�S`£r9?#Où›ë7+bü“÷až|?Í·ô….+=¤]Õ´rS̸Åæuýº0`µ±î*y‹©v�bíã7q3”@Î[¾CÌ` ¦\õCwú*¹ò`“ĺjÏÕC¾l5‡’Õ®‰Q¡Í+ˆv%¼Ì)*ש\ôGÎÜ£æÅª06FÖÐ^y_GÔ¹‘è©»h’]a¸Îḇ)0žäeìá +Ócžô9%@7ǨäPÛ‘ìZ6Ù)çºfódšTZ©¡¯QÎë_m¤oA'ëÊjJC´TNEXI{Hgæì©4úC%•ºê2¹u”LU;ºÜ,ƒ-Œvß<ƒ¹ÆGŒhÚ´eŠ˜ô�!Μ?#¿é¤½dwY¾ Q­ªR‰–¤ÏF1'^î!&Cc‚Vÿ±|—ÜdÄr› »¹�?¯ü<…Õ^p®žÊïhÁºzãPg¾9–èzǤ3qš�f zÜ^¦1Áoµ¹à5Iì–�Z,×Õ™”ˆ�Ÿ3‘£Ò +™„`Æ‘µØïÊ4/ŒC3ãõÂÐoŠ·F#ö©*œi¼î¨Ÿì†Úض-ñæôúJ×ïÎù­{i\?Q–š‡jÈúHЗ¨ðß"ªld4ìöé r%±ðxÒ²‰]Åõ‘ÐGÌ1Ý ç`æ6†s:>ìA÷ÉÎnFû16¦s,‚qç½”š¦JÔ`@ÙBL+ä�Àw#š½¾òuÔ·ÊeÈÎO¶Ua•ìd‡’­Ö+æÿŒ\óÎ[ +-Ôü§«¨$ŒÍ9Gƒ¯C&W¬T’=Ãv» �5Ê,¾‘iVíq±ÆjOÎç!€0²7DSV…àr@«¿ÏÏ3únQÇ3Š„óiÂLºžX$mµT1Ê­Ãu¿yÖ}Ê¿DÇ<Œ!ÿH‰ó³¢c.q.ƒå*º<¡@X¬CuQ*Ôz@̺ì¬s‰¿ENœ�T0*Ttªdf•’¢²Pðå»;h8ƒâ¼Ðz¢8yfæ5£8wql×ÌçhÐøžO?Öqí $bkâ5§tßibÉO +=¸E”ôm-ó�*û<(Øâô0.0ù>¨-Î}™&¤y.Î5ü•çó;…$bͺ”�<-”~q¾Ë�Uw0Î�Þ5mBÊÀîFMPsŒó¶Ó)ÎdœG„¨ ‡¨ÖN‡E¨ /ÖS0ëµ¼<›qµÉî4ÎÛC3R€UQtårÔ E)°ÓŠàQM¤!‰ÿ"ÁŽ3(IøµY,sPJ…x̶q^Ù¤ÇÉI‹ÀriSEŠw8¹uµÕ=_«ã\ïÔo†À=³¬âÐ\¶WÿTKŠBÀâÁ£þŠóxÂnãqîj™n©ð2ÌOƒÞ(�P¹: Ø«„^f ‹�x ñÃ~F’�óc §{�s¼Ã Ô¥[y¦ÔhÐÇ9ãE5⢭ìƒX>-Ç—®—Ûä*“•ž&¯Z)U†)®7âç*µJ`˜ÕF·ÁŽdßëféÉÖ×’RvY 9Ï­Ä0e…‘³:�Ø�€9pxÌÍ@•GÏÔ$õ� ÀµˆL±Ì_…‘'eW‘’>Ót/T Ïßì9”xî]nŠ·îÜ胺Ëbö—¦ÝÓ-ã“çzw¤‰`h¼eÿt¯ÿG01]¶ %ç¾R‘qä#N�G9y·äÜ zÆ—œ‘”…6ŠŠ3”C’qïú€¼ËàMÎ�CØÈŸ“óÐN=ùV¥„sŽÐ9š‚É·‡2)ìm Îs|ò‹GƒÛ#Üç¾Ì-ì!�ÝðH«ä–Šñ�Š”sC¾Ñž;SŠr®R_?µÖ@ÑåÙ.œGÚH-Ð~/8“’‘ò‹î#ƒ�þVLÖ)×2_‘�€‘zðõFë�+ÈP‡8ÄK.$tš6^ò”Ü4²rn13/9×`9ùËx¯G9$ÞðbÝzôñ†w.�¨€îß9«‡5–e¾ŽµáÅb™Üàˆyjk�–s‡òèJ¬c~u‹§4mq«”{í0Ö±å¼\K·ø-çv°Œ��ä &Ïs9gBª…v—ªúÕ‡6�J© S€W—úºùW¸áÐꌜ:`Î®Ë +é¶ùƒlG¿¨àúÏ�Ë¡!Ž Ð•¤˜ó Pkâ]ÂsŽéÛ�9´8 ¢Ê+M ª£)Gñº›WpeIIÀl©$üW�S(2Äè§Ÿ¤.QæÜ {vߨ¼ [8‡Êœè÷eÎ †ò*²¼]™s¹·¬eΓwfïmµ�'æË«fÎ3M);Ç/ý.»›9ÿpb¿ù2�ëuæ¼®žûì°H‚åJ»F<.Ïë ”7Ó‹#[¨ZØ–Ms¾êçy 9͹çI´Öz˜ƒÇTs®sÛ²æ¼;¦7½ŸÄÝýËt ü(| +Ï·%‰^s^ÅviKÈ;“ê”B»ä§06ç"¢}ú|S[f�(À¨ƒ˜6ç&`oæå2µÖæÜd¹7ó²G¹·½WßÊÅ� +Jõ£Â4´Ê–Êâ}<Q,)9œp ʽюÚ](çÅPh’Ò¯ ¦7“TÅ£!FD7Î +Zà´49E/’X†¼Nä.ÅP^*wHð�³.Ð9—…Ù¦u%zµ‰¼f)mq-®8Oø +fAùlD2JÇÄ=Qé¼G‚Ë‹u>Ý]úS×ÎñÇT>DðÆ‘)@X5ÈazBõü9ÿÂ—Ñ £‡¹ :+�A —ô&âp š¨1Áo.ʹ# ’g¢c Ñ—å9çD43¶ß—óÏÄK@¼�|Yƒ>ŸHö÷Ëð¥¼Ïs¸–jܶ<]çþjÛËhâs^YÿcÍ] �såqÕå�Þ¼²\¼€ÜÃJ$>š¼>Wø\±ìDDðtνþÆÄ#ν¯†9ŸŒ)ïÔ9W7u\áûGsŸë‡¯Ô\æ+Ô¨�Á˜Ý1£'›å0„ÊìΆ!T1Û9Gé±¹»œŒ§˜ãß,ºCªoá©+ÐÂJÄ3c£Ÿð%!æaÝžÂ6àNÿYe�‚ÇWXõx`ßÝH0ÙT{IVµq°xö—ç¦Çí€ $=Šíœop¹„Ï<´H*õ´èÜÎç˜x×@ðI7€?~ûWáPß²xnÙT“Ûúw;TíÒ*^B¨gA¨é¸sÞãÍ' Ñ|&nLܵ²F#Ý\h8¹A7çߎRÈî)І¦Ÿ­°¯‹ç¼¤@I…3±á 2ú»¸uÁ A(6ü"zÊZ\mL=YQ%Kªp!c²Âˆ 5©wMDwòš>¤ï¹¹/›»�ÌX,¯±ÔF‘Da-Þn‰W÷‰Rú„‚øj@5 +åDü~vYo¯ô&@µ9hWÊ“’ï_z’ñz = �B÷^ÍðQÉØêMEΪi[  ‘Wmܧªm²O´›GØ4¸HP¶+Œ)û† AÜ–î¨0fûvcwÉHÐ[St]õ6ý`Zæ#Ä%˜L§ á²c À”.M„êß¼Âþ# bŒÇ¾*0ÛYÈY>ýš•¿zŠÈ„ëÖ 7ĤfRIS(p‰_ú8×ë-±d†‰ôéÇ¡Jœz.>4u¬F� �s +¥ÌòWº'K‰ëuÏ5±¨½,Î÷œT¬ûdœ:ËÍ—2 >kÉhƒØœ +amz;ã<åÜDiÐU±*±Ë§s9þA2Å_¹Q¨â×e‹ÒÖŽˆ8Šà GüÈJeMx,%¾=û<l ƒoÎXôø6d’¯+SàL02µ>XEýáL[Kìrψö¦åÓg�l‡½Kê./`W¤�é]ÕpGš^{;>Òû¬štÛ² zYiçÜz#Ú[ +|/Ùõü„—j‡<½—ü„#ÎÝuôÄV ª�™�\¸ŠÎÉìüQ†¶Ä *J[âÔ}r2RŠúZ Îædo±ù+©·¿4£èù6¬R¯OEã½d eþ뻦uÃj®Þ"l¹üŒ·ô—ö°Ta�›�é¼³´© EDkÃCÈ ¸%= rˆöˆªùl!(´€�êë¾YèÕ À= úé ’e½¾›¯Ý;Üä;ZI{¶r`MhðXy½ñŸ�îj?À=©HapšÚ€ÒDƒ4'š^ôµèî/æ;•kƒ£L ¥Zˆø¬SO”�ÍïtÜø`æ|~´ö›ÚñVï °¢†xC«‚¼Ž÷$�8º¨)úêÆŒ&T™ïÐ\×K ² ºLUÂËäÖÞª¸`ÞÄzÄ;÷)J¼H:‰�×úT!Á}=ŽÀ�+`êýÕÇàn9­§îµŒñ1pÅ-1BiZŠ^9ôzKâ4‡|¢gà#dð8* 4x¥—Rà?gëŠÇFZ„’³%×§êÒ#å:±]žŒEªhî$¯–Ük5´åŒD.u�ãT�ÌÍpë€i Ò+"G"}·�PæÈþ€dúÔ=’S¶k:Ö²Zñ(?' ~V¥„xiçSßðr¶á›¤€F¨5Ç.ž¦É[­ô78ØÈÖo~G°7¢– Eƒéb�–J©\ +/¤€Ž?€œmaö•\E�¬ë?a’HsM0ŽÞ”ÑÕÜPc‡B�y¸àŒšá†;‰=‰fÏMÆù­�¢²h+¤¨ÿd±Âòë‡I“kd:TΛZ1Wü‹”.g“jæ¥ +¥YEÁ-àØÄ²8þxbå8Mr+Haú/¯}SÇ–÷D�¯Ù+#OBzÿ��Æ@¾z\yD¦Ð—{@@�•^Ë \?”Mïû<(»'é⤄gèaza½¢¡‚¾æ+.¢ +hHPõ›È^¶´CìÆ·P†ú[Ö)§FV±ÛÏ}�(¹*Aoдë + Ò´h)1�åw(¡tµP¶@ÕÛß/×HÒk].÷¦‹’Ëì;ñ"éEÚ ÎßÀF¬z;nѳ^°¸W°2�-|4Úé=Gç¼`ú¸UŠXv6Í®ûúE7Ûª§ƒèï³W­&ŸktŠÕä?ƒpÑmÝßq¼*P±7HØhå_¨ÄÐãËü ˆç¹#O¢ï�a&¼ß¶Ôk×€ �3=ª†>Päž_EÚÍè ÛmäM„‹wˆx™º�ôníR?ëÑÄ«ìjP9 >Àµ€Ô#ÜÈš¥b1¼žJaMˆ¿“E�V*ʳÉM§,�rÿC”`®UŽJc€$’¶IãcªLWæÒÞ^…¯¾P8Y’Ÿ¹û.*˜Çig•efZ¿GYjñrŠ|ž»|æÉ(-HúíI”]D·”ŒF˜%O1G`] F¬K¼:9L¹LÚÎεšFeŠ…p å§Ê§�@ÞO ‚`&çÒ°ƒžDö æÌŒZPD¹— äµA£û“ZÃ/N&F•9°°E4´’+ky¢ˆ�n:¦H¢Rx“ãØl«Ü…Já†ýMª”žðŒ¼ÃKàòx!@¤BãiÀ3Ú#\é/ï³€%£ò_ÕžE9ßJYþ©‚’ǧö—ñ”cÚ Ãb鯒i‘TPષðÏ Aƒýé Î¥šÓKDº1&í`(Î×Ü„‡ïúàÂ×Qr'Z G˜À¼x‚L»]Ý„a ÷;„²  À~¢`—øüâ 0 ¦Àië½u(¼KÚé')$×øRá "#J©P°“8ªÓ¶]¦û£¡ît‡ ïá³øQR Ñ&'Ím¬ˆlð›ãºnäý1rÿGœëÑÍyaé‘ÅǃhòIý'9žŠMÒ§3é.—hà 5LiàUG#ßej¼^À–¾Ç!ˆŠÈÖ¼(î7÷јB?U˜¦ Å3KE4 öK“1?^ˆ0³…×nø1ïç°|g!܇ü4Í:à§aÿmýÕ"½�~�û÷r¬µ9Ð*Áj_Ò¶oüº¥W¨YÌhä¢Uf÷Ðó¾ ok°g[4Ù ÌíþÐDK ·xŒ §éŠ;ÇólÍžÐ9øƒ{IMz�y.ÔBWV Ê© ˜2ÊéÑA ‡@q3¤Ž¢6aæè2½£fÉ/ýÖŸnq°lˆÄ¢Ýo×ìf¤„… +¨i¯Ç#°{Ç@I�.i²°hÕ +,0`žüêâx^4‚* ø� ³�Fͼo†�k,“¢|$šT¦Mâ"×Cdž‹Zç&~ 2 £S1’ï^;Ïò\MO¥t5§jü¾‚¦Îh°’nBn î3zšA—ãçT!Dt=ï3Åøb€�Fã|¿G´¨jÂJ°ñÅÓDÍ!ѾIÈñ^š„¨“iSP}s‰Õ�&3Nˆ Ÿü#¥@4+lJ½}š9Œ2x¿ÂÐ ¤=Ü>(h$¦ã¶X@ÓÔèƒÊ5qíž_rÃH{dÞ]• ;3ýŒŒWÊDÿ@]ïû–Àû}5+—s! >‡ú­³Ú/I›2!W#W¿Å1ÃGnºaæjÿ?×ÀˆÈâ#ç™xƒé¨ÖÀ�ÿÅðo€<Å·cÒ|I–ò +©Û ¦T�kÅÔ÷Üϵ05Ë ù™¶¡ÿÓ*JŽ>§ÛëS£ŸÜà“ê.~ +¿�ïäi«D¸ ¿<ˆ.EÂKñÇ;ó¥X‚�HøÌDÖiÚ/W°˜çy3°wäÞ/…!†FºAà¨p�쨉ÐÝU†…A½î_l€Ëå2¯Ò.„oÊʦ�V mïÊ}‚À’d@Cd7�Џã�Tç¼ÙxôHoס`²ù0 áÖ,€ÙVtÐ|þ"Âp 1"zÁþ¥uƒÙ>Õ¦ú)ÖôSwéþÁ´¼µpàÿb<!@žBÜ1§^R2ׄÔÇ)¥Ž¤°jêz÷'k] ³“ÖŒƒÜð„‚€=FÌb¸ýS\< g}bur™ „1”ÕJÎ�³BÅ·f¸òjˆÝðÚÏùòôb]µ¯|làüTê¢öåEƒù�]p>3Ìô(l…p-<™òûæ#DO‡L…ËRJ„!°?ˆ  +Œ]ŸUc)÷œ‹æ%”±Ëü½Ûí�õ,ÞW}øƒtõ嶬>º¥‹mÂSºL~�ÚCmÕ¦uy÷ŒôÀMë(¡VLÁ�lêò¾ÔU2S!2—‚ÿþÑö2ÌØ„# +>d¶¡Æ¾R;°W±·ÅsŒÆv„k?‚’L{blš=¥ ï7dûJé¤Wð+Y‘°Ÿ’½G)¢øë^S•—Ò¼ç.¦dQŒlqB¸?§�q£|H-¸�|p¹`9‡ÒH°0Ê‹ˆrt`‹s±éµmoTºò³dDaa𿉠ÿÁXHc[C4yl÷¹]ˆ–îð“!Yz#¢�¨³¤Mµƒ³àôûÀV…̘•ÞP¬.H ½pývñIé­Š¿EÍ/ÜHýÇ,êxq‡œZUŒéøúè2‰Ø÷^ẗÎ&j%{%˜*à+"‰´ôðÁ¸—À©9<Æ+ âwB€ªF°d\Á'˜MIP�0u˜®o6¡úWýPðO˜ttœw²ý5‚Ü–%ÉÀ›%¡oj�@)•© Õ[5 ˆöL© fç0‚ëZ™t{mº¦¹5` +eߌLGñLÖÀó‹Ý“P›† nƒ¤Ä‘‹©¹�Îãß°'u¿wWÖ€ÿ9’�ФbQ"ImCkF! À$Þ ï:͹ S>A!YM-¾ëõlÚL7|èETѬZ#ðßO5¦ 3ö|ÔÜJÉz‘Ìž#�Ãt·a¦ ·0—ðN€;ÌÙž™ˆåxõ›,yU©z‰:~Í#@•gYi<‚ +‚tyuÊ>È–én wj™Ê‰þ>‚»`è/½4ÄZ&ÏmšŒÐ2ÝdL˜ñåPÚÊ$ 7‘ɃŴ êó&¶HÆ8SìÓH‘@Æ šB¿©ÙGБ…2 JLõv�ئŠ]‘g|•á"A_� !1Ý€á %fàäÇ,Bf‰]…²Ð�‘ÀhBäåº^$x«éÅ]˜E£,hcàöH°g$§óO�! àšø“Œë1¿›œ²eI`‚Ûú×¾2T0ìúUåÈŽäÜôD‡‰n�A*Ôø–®“!é×RÆ$Aâš%Q"€³NÑ@ÖŸFrè2�,CŒ; °áÌ$”¦ÿT3 +fY ÃTe¶‰Bw^à$ Mº£ûa KÕ$З3&·˜ö9¡|p =I�Qµ’[ŠÇ"«Í&e £" ;ÂØ + +>@ †Æ’¿® Ó>c„€ A6Òì¨4 +ð§*Á,¸eÏ@9�Lå°©„©%±]XŸù¨½b&`Ÿ “ƒÉ¹M8ä÷çIp—k3äœá´×&Áõ³6ÓXê$¦Á:Wó �_–ã×™ç\Z"`+ °iø¾ëÿ¢nAˆ1 + + X‡©¼#4#˜K‚b®õž +™+1MwJF®©)&ÁÚriïEó—ÎOeðø“`¢g¿#Òï¿tât"9Íé$P> 6%qgá(Ú>P?xlÀ”‹à'ˆ/#@ –—i¤ %è"ľѨ&J`aHJ°ˆO¦ÛF§8V¤Æ—ù¥áÀ4ÎUž4Ó¸Õ]ü’kŽ>ÐÀáÅ¢Ó¬´ta…F›/™Ȫy¢­\ª)Ⱦ—ö[‚­þ�ÛÞ‚<â„ÅãÛÔÿP¹•‰\:O¦æF)e‹I�¬¢Ifµ5¢è¬ÐÒK0k,l ÄGÙuµ1A/eOdìþÒHWŠÑ— ©bÁ](YðpLÿäåf4Ú6Š…}ü�*™†z:I+øC²2+ç×gÙç´ 1-üÉeÎNKj-a«Ø¡P/¦©‚›_Žy}Ñ'1Ó町ÊP°!ã Þ�Ñ£üô…F$yn½6ÚQìõÌ/:R}) +›QŸC“‚® †d \¿¬’=CDø/š“¾ã¢˜Ì9y¦EJ”­,²žÖsNó2u³¢R­MÊc9À +?ƒ:KDLYGf¢ö1ñ�‘Ð@)Ž)rn%ãlŽõkˆÀ¼gûŇX‚«eñÐð9[A‡n9ðžqÈÐmÈ& ©âÍèƒ %: ©É¦fš‰~“,dC¯”©Boò�ŒCš}²Éś͖7•“AÈ®£¥ô›(IF 4ZI‹AåÄÓ[�¾}m4¨³<„á@Ú¹ö:S¥ìJ�Rå–ï²~ô�Õz!Z±*!¾A«ýfÜÊÓ90_“Ýu‚=GNp˜†ð{­ÝÑ‘žsþ�G&<÷XU”v½ …õUÑ7ðàn9²ØJƒ˜N³¥¾b†}èÎEÔüû D@ÔIX,Œ‚OFÖ~·Œú=Dw…ì±îP¯_Hx†é-ƒzì9(hý\µÜ1K¢�##�ð�Ôm¹{´÷^ÃÙq SÔ;÷t¬ Ùš‘€È²„BÒ�Gïrtè¹_ÄtÚjø·»+ÿéåÕ°&à†1HbŠN=à.!E:�ž’ò6–急{«Æªôá¦OoÍä;bÅ's"²wY2égf‹)Lîø¿òÃÙ¬ÙÜŸì£6AKcv.�/+ª‘>¬WÚŸ›ß$|…¯‚÷_|㇯±T”K�N²$^[ÏÁ üBîÍ^„÷Ϲv½Ù:ûíl©±‹æ…0ߟ |©øéõeI5ž(>¸Ø»h"ø£§ŸÜ#¥ÞQõX·+mhÀ{?fuÒ`Á�fª[�Ç1²æO*)àdø¬Á@‹Æø«ˆ°�ü8Úy7% SçsçA»k꽡˜]£@‚»jéq¤5Õ L!“±ŠcêårT‡Ñ໹SÊnPlêöu ·|£n%íŒ*ƒÐ>SwMÇ8´'Ih­U”Ãáê’ \1ï‘‚Ô*-T¶èï«÷‡›‡‰>"-(Åm›? +Ap´]àük>šÐN•´“›Ý�LGÜØiYÐ*‰ /}œ R@¦{w_jU¨W¥âòmŠ«£L‡åÕqx%H�d•�¿/OÀÃ+ÀûPa +Leî³&�DçúÝ'±ÂØÞÀ%mH=²m$y©šüÈ6²‡K~\F52w ‘½þ3‚9œ ˆŒà«¹çƒE>¡…þÓO‹¨J©D€EÄõ°Èèm&]²çœÈVa.y„OÛ½Ù®@‰Žð‡D|²{#:?D#"2."²‡S@¤RãC¤át‚‡¬ëŸO‡ž×kÞá�tes\¶&†IG›“�ñ'ïðhÒþzS!B×+ ��RóI".eêêDu“VÔf%ÚÊ«#¢k¯A�dy¸º†³^ÁÍçÆS²èa!ê¬qÝ�r©Õ YDÿ¢XŸ$:½ü#ŠØJv/∗f¥Î�øži¼ãQ¬°Î’ô㢞¡•­‚¸‘Ã$�?¨ÅëÞÈPào5;±­'‹£c'$¦Uþ {esqG¨ Æw¥¤B Sô1D-Eˆó¶Gº‹>ga¬ˆçJ*�ËY[ÊL¯{™2˜Ì]äõÑÝW‹MãÝSü&˜,{å¦çÒ6èM¶ÏñÛÀ€ŸOõ3::^³üýs�,øH¤¡“Ħã`T°×™šÞÕYƒ~¬´Õ3óÌJˆøü;WÕjYU©j?"?‰_Œ}iÌŠAÔ |¿mÁnlŸqá Ë~œ!�|ð³Rê�¸s`f¡?�üL=ú\V˽&šRqküž…hÓb? 3 a¶¢Oý¦¿m¡�ØÖmè�ú±¨Ž:ëɇÑMÌ2únwÖ~Ψ}‡~!.«¼äì§}<âÖ¡-È€ÅmçzǼÀ‰Ïv&À¢Üb‡£[õîI·9Ò˜JHÏY9³$F÷˜ééc—o©gz‚4·’úß±šÓ‰ñä§ÍÄÆW}j®ÄÚÃQC%�vÚ4÷¦G"Þrº+ +€v”9¾×,l$3ºMŒK·bg}é6ú !„®ëyÒmî|ftbD’aðöOÿêhnBˆ0Š¢¢8-?HM&ÀÍ‚Ýz“ Ä ÖúNzÐ þp‚±ÐaöƒQóæöw#)«°�p ½Û ¢E W«ÿmMD‹Ý¶J¢.ª�85l½ìn»¿£s*4}™‡ÆùÜmé/ž\¡hÁ™qvP8!‚tAÙLKƒ¼�BÍ%¹Ža@…û€ÿ Ÿp2$t+Š9BWO7U6 `ž`¤ ¾ã)µ””—ú‚ƒÝíO«¯ á9YsW;mh9…ä�`œ¬H[8YÑ™è›(‹¾(u“Uá¸`›(å´g“�Uò5åןr5ÍÐËdL“ eCÜ»­ŒID;O7ÉôËrQß9&Ä´Å12¦S¿Ð‚)ßoH^°Š.¼�˜'K%£2ÌŒn$Þ’¸×R24KÄ%Š«Àà^©}gv�nç„D œ F­A'/Éï&¾³Uý½Ûe<žÚ +ºg¡×�PÞÌ[Yý÷¡ºzl•-”°_N͘1ÒÆKÁɱaExëRùÖx¬Z½ ¹¢&9ßÛ(]”šëž­Jžè�¶Û†®· Iu: +W+BÛz Ÿ¤Ì'ÛÄó×[£?ûüâ™{=�žõÓ(N0vèRÅ߯b¾äÑ{@v/;bæšFš÷jÕ†}ýTè eÞÛ“”Ù¶®gþÎç|ë�CtÅAöe�³tú–ª0¬Q±'wï·a ÿñ¹~ݼ¸Æ{,²RûVùÉ%x.(F 8-n ‡a‰ø!n¸kgVm½Á?àn=šk@nÌùqêî¿eÄZJªÄ� ‹�ª.¶ÕRR’Ü;1fô› AASt¦bffCðÍ0›a³)TUUµª +iµZ5e�ˆj"""Ó(þ�ÿÿÿÿÿÿ?ýÿÿÿ#ŸrfòmÛCl›ÓoÇm[l]·CŒ­Û»o‹mÛ¶CÚkI{cJ¶­hÛ¶¢íØÒR q[u-’®kÛ6ñ�O¡2³ë�Þ›Ù�û·;A=äS( ©C‡ CB†¶¡Í` CŒÁaÆÂècønÿ—û¾ïû¤ï{kÿN ê¤ê/þ‹‹‹›øÅ/þÿâDnqñ)AÚ#�¶Ç”gŽôvff>ÓC2Sä�ÌÌÄÄ$$DDDDDÄâó�ˆ†hhˆˆˆH袇§à�íÛç»»ú|¶mˆ‡Ü¹gŸÏSèì‰Óì!hö‰³™™ÕÌÌÌÌÌÌÌ̬ÊÌÌ<Ä<Ãæ!æ1¥ì)æ"¢–‡”‹lâ®×»óyL±+£Ùlˆ™˜íÚ6#3+Sì2)ÛV.OÁºªªªªªª23STUUU™Êõ*)’䲨RGd"“M%"J""""“Éd2™ÙDDDdòº{÷ŒòàwëÛ¾o“û|!ì»wïú®Ýwï{Èmß·Ýv�bdÛ¶]üšêѪ‹pñÂEض°…MlÛ‚f³ÙfÛl¶²7²SÆ”,¶†‹m[#bñ°ØQ:äîîÞÝ]ïîîÌîî|V­^±Z­£Œê”š€¼¨C¨ÍN ¨„¨í(ƒŠè·�¶ÕiÛ¶"ÛŠ!Ŷ­Ý¶mÛ¶nKÚ¶mK°m3Û¶£mµí”÷¢433‹¨¨¨Iff^æ%fæ!,³2sLÉ€d¦›NJg¦3‡4E qä”LÄ1¼;» ðnÈ]^^ÎèÝõÎLˆ»›rw7ÄCl¶'¸:‹A¶�l·¡mÛlÛf³–m�N Úbk­Û61‡Ý²†Ü28ƒª’S*ƒ]Ý ¹3RCÞ:‘vN± 8Ìp†"šÂYVUÀ€Ì.`À�á5ìBM© ªˆPæÉˆèˆ�©5ˆJD‡%sïÕïÿ+GZþÿ/î„Óÿ¿þÿ÷}ñßùÿÿÛŒOy`f³m£‡ ÑS>â&"”®Â¶m æš™ÕÚ–Rmk¡Å6¼­¹nß¶m+JÒpbfÛ¶B\+Úö25K{(›1AY0»)B7l ­ö�þÐ D‡ô†ˆ!Aˆ!B„D8³ f Ã`!-X( +� +°0¤,Ô­Ìîf˜aã¦\ü¿øgˆÿ/y™étzÈeŽLDD‚˜™ÎÌÌÌLDD4DDDDDô}£Ï>Ÿïî‚»»»;qwwwwgffâÐPj+‚¸hU ;ˆqŸÇ@üãlý Îwúµm²}÷ý¿¶íÚe‚³mi³Í +Ûö}Û‚ݶ­qÜ”‚CÐC\bû'ª!wD«nŽî|ᣂՌ«)IU'Úª*QQÑøÿÿ'"A÷þÿ¿?ýÿéõ¿èÅŸvÑNûïO¹ ×6ºmÛÞ­uÆ”¶mÛÚ$YDQ¼»‚CšÙÖ—�º›§ä2Dˆ@SB˜�‚þm˜b7³¼ÝÌlˆýV»*«@ �0RYejHVVa¡Uͨª¬PY`½ª¨jHQU½²*©†TÙ › IÑQÀˆF)""¢ÿDDDDDDT¢ãñÿ�ÿ¯.þÿþýÿÏÌÌtÿ¿OÄ»C‹÷ïŸè)wŸÙf&“ËeOðÛ¶¹vÞĵmÛö»¶Ó¶]§8¨”™Œ+ƒp01 ‹DÃA©d(e¨I.DDZ¸ž`Þ;€$}HP1c&çX=¶é³ÿ�Dýý±Qvi­b0K�®ÊV�:‹²ÅÆíôºè�Ô`• !Ö@_+"C±îI¬r,–]@S$QŽ¥2Y呹t.ª+¤\8ÿ1f•Sh+Òßîû>RëøÑl�âªHƒô®KApçE‰áËq+Ú§"õ¼'Â’pJ>hi‘[KŸ‹ãÚXõHi•CîaÔ*‡ y˜¹üÿþñ[?¾C»ïzQ� �Ÿ­r>SV ÷B¸K\Ä´1Éñ«ÊSíÈ2tÛDæÝ*—ûé¹½UU?,€«\Âú+ŽzœfИ ²£$ã*Ç‹zÆg¥? )$Oð8ÓÉhù»éÛ Tø×í'vqaÞ*náœÉe¾f‚³Er‚W¹7»°%þhÒg~elt^ésÏ8H1š¼8­q©ÐwËÒãæ=èÁ›"Ls‰Ñ·K·«ü•h ²«œmŒX_7Ý?^�œI¾5~P—QØ®^åò[ŠW}<Z.c«2+¥àm´³Ž -ݪ�üuMî¬1Ãÿ ””n¼p¼ˆ�…�µ×ÁØ|ám,VÝñš’—‰š*g l³uô«<ÑõØÞAKÃA*R8ÇÙ‰I±b­õQ\ðaù®$Ûúür;‹ó¥4LÛ­+ÏL©Vs3M¸:èzGçêcxò‘·"͉ä¾�t�@‹²s¸ŠøBµ ¥"ÅuLã&îbáhÔµKg®Ž]e7Êþ܆‹mN ˜»špŧDÙ§Mùô–Ï´*'×.Ñ¢îO8CTDòIP±r…Iv$VÞë¡×+À (BOýû¼ôLè�i(媹>h_0:ž`(¾iH®°âÅÚ}¤9ñÃ$04�ÇÊ�¨_²ÐGжyt§ŽDìJÈʉ³IŒ¬œÌžŠ¯qà;À‘¶ád?ß+;‰ ×öɨ©ßF[!µZ|=Êo쪉êbu¬¬|…áÝ@„×+MóföqÏ~/+‡õ‹–•ï^ç¹/+n-n~˜•oáNEÚðC~.—ÌÊ!ß²H³ò6”¤ˆ²:ßÒRb»‚çÃ=èíLªÎÊ/2ziëfQ_ø¬\&¼�ñØÛ¹õ¿î°>ü†éíºv‹¶†LÕIgÿ+œLõ]ÑuH +k�Ÿ¼õ„EB¢V®P.Ÿ|4G�®žMÚÉ£©È–oõ…QçSá +´é²^�…5®Þ:W¿w«Òü\pÙj”O�ĘՊ=‹SóS­]+�½«“Ƭ\ß’¾¬FžÞ¡“^@ÜSÝ3kDßæ/ΪÕ)W\I¾&¸=�…$Ù¬ë^;Ip½Ÿm娫OšrÌŽö¯s‹TŠÔtœ:NZx<À"[ºí•‹�#¡öm�ÄS=H[ +·ätiC»#ÊâôE=\?|·I�Jôòrà�FŒžU%åDÖ[Þ` ¶ßz�+—~lY¥«qÑŒ.n pQ-¦äBõ-�pOÔ+k<¦ ͹xÓÕ@™Bi½4®j=§õúCH­—Úd]¹¿ãe$·Áô5p1†ª X£+¢É˜ éÊ©6à–÷i†^Ä.„©0½Õw[¯Qµ´†Üz»pµeoë¥yˆþ{lÈ0¶¹<¿õöQª«àzÃt×íô1zè29äÜ‘a^Í!iôÊ%µŠ©»^Ħ^�dÛ:¶ì‹Vˆh¡¢½rÔŽ¨Wy½>ë „„ nGòOƒbé^[¯×ªèvòq$of…b9¤_xèäG|½À� “†ÐÝœ }s1SæõBZ"ìzƒ`º“ýzg´b•¿ò5ymW6Ñ7ƒ9©ÉæWº:�›ŠLdÊ�†mJåëÕ‚ ׻ζPr öN€õÁ±å 4Øûïl€Ôé*:³ÒãÁ-ð{C¸ìO5.£ ·åx†´D^´•vDe¥ÏÞÇíþ`™ë†¨êî¤ÿyY6¦í1÷µv9.;@Ê‘â*MŸ­/H,oŒJÌõˆñìéBÔk*mjToí£¤^2{f-ï*µ–‡Ë°Ë¨}È×€øP‘4°\nLCøËF¡E ØÏUäòš;”`y/×e&VW×òå�ž~Ž`9RJ¾$³¦�|£í–ÇÀR Éo§ +sH*N”Ϭ‰¢”#“xÜ K¹`¤‚[/µâSfŒìVh?o¡½^¡ŸØ›.î(ÕléS%ÀwE·!c¤/ïý½—°ÊážVét)ϯB¹âèÒ¼ËãY¥òØ +ªU…]õÜ›ã©Hª?£(Äx¦çSAI¶fßh X^§Žót—OŒ×ûȯ=‚“Pº¢r•탻sá.e¹n§ ý$yó)´!_ãÙMƾ|–ãõZ“¿ûmÒy®UeÑc;ù‹¸b¬uÝ�–` þ,¯“UT‚:ØÍ{ü8DæqcðÁÒ˜9Ø�ndY¾,>ôŒ¯.\¢Ú„X{ìåÖ:¸Òó�¼è™R¼m _†²WþëÇ€>ý½’™8F±õ`wû¿>{"Î=iëE<ÿ<Ù©v� qéñ2ãAÎf:s¼ˆ¯©í¿ßÎò?MÙdãɼÎN«‚s(û�DÏ#j•¾5î7¡4"ÈU–ã R­¸ÐÊr Ó;tÐʸ>*BÅ(ðÆÛ–››Œ§zÁÒ?O^,X±\Ù +áÊ„Ëzí L1°ÉºŽ!ÈñÞ÷÷w.ËÇ!"«õðƒµ÷ÇÁÀ%�ËUýpj¯Ú®bó¯Iít1ß µèˆ‰�’èqª(ó¥Ü'!�<Á�¾)µ2�\ÏAaÅr9ƒïÀ»m7®éois:k­íræ�ÿ`G§�èª^–§ˆlnQõd[Orç.bE%xEó„a6÷Ð61Ì<ãúú�ö4±u•ÁÙ ¤ÌÐ#Ö8ĶÑ1œnÕ0g0.4µ L`JRNÞ#¥¯x�ùÃ*ÐÌr†ëý*O0%ÌJ¾8€Xõ²H)ÿX¼3ŽfÍÒ7c·¥ï«:¤öí¿¹� ­ªÍFüµE· Îryo¬’®#Ç �‘»±kDßÒ?† Õé¦LÉþ„2Å$­ˆc\ä&ŒHf2¾ÑOë}—óœ£xÕ8€ª6ê§o�P\ +´Äɼ’”h6[îHE1 JxS¡6,Ü�ø°é" ðè]0Tßïtc5=ÔǰÜb›<‹þ³�åçmýÕ`þºYÞ–¾xÖ6–/…›‚Öÿ4lr odB¢�íPêÃ`DÂ,$yKÚ]}ìàÔpù›cȤ]bfLТReB}ûZgf¹�ym�Yd½hf¹Ètî<³|u¼Çñ�_h–ëqhŨ3H³Ë¹ÊÿÑ)ÖàÏâ~ÌG¤|šî¦ åR›ëW&Ðò™¨‰“ôÂ{ )À-'öœ3JüÒ–ÒœVóYïz€‚f�Á�(éƒ0¿#Ðoýô/Xp…Ö}<Ç©’-ËÜ:í™çÕ+æÅXn“ìü",Ÿ@ù ”¢åŠívÑr°½Ë%L”Tli:ÇÑr?›:ŽàP(ùÒ‹uÒ&æøÓTÖô‚éªè[Ë=6…2£øº¹M—–gÀé‘EУ¬ëÂÙn²¤¯P‚¹7-W 0ðâ�ÔŠP‰z°fô´´«<-_{h¡ÌÚÒù"±R•2yWh>÷ô¿:.£e¨åÚÃÑ:¬QÙT2ÁõK6^dù¾°0¡âUÍîÔò1“–Æ­£Æß¤¦7^»D>3=ì _z¥E*nàÀêç=ãíÔr‘™–p†d%¯…ç~h T°À§N2Ç¥T˳U6ÑyšézýmÍ–áÓÞ ý ÷+ôyþ…_YÔ4üž*þ_x• fnÃá 0üz Çý†««n[µœä„¸ŽÇM +È-û¦¶T2ô…-¢Ä­çœîëéÞ9e»/—Ú�@‰vÝlí�„|çÍÚêÖªšÌ^®öéÙ,Ýî,·oé±ìô)^ú±gàSÙ/"+FEŒ1"�ÝèʯÊž\�‹ƒ8ãn?Ûw•tHÕôÖ.¯éÊC¿é@l<\@=7x�5v„çP½Z>Æü"÷ÖL÷Žè°–KÇÙ@–ÏKò‰eÊþ(Ô@ŽCf«½Z.ŠùhÐlZ(ì00—±r�9E¥ endstream endobj 85 0 obj [/ICCBased 87 0 R] endobj 81 0 obj <>stream +H‰ìW¹®äÆÍû+øÍ©}Iõ,8 C�”?Øš %@žÿ|–"›=ec'šà½æ!‹Uw=÷ðÃ?Þ¶?¼…í»¿½m·o?†íýÓö0’þ7þŸcÛ>½ÿvûðw<þåÓ-la‹-ãq=ÿó¯Û¿o¿ßþøà~YñÓöÛí÷-nÚ`›e/-µ­�}æ>¶÷_µ3þïµãÜ’¶¸Ç�«Qp5"þaùûí¸[·ceÖ–ï0ៗb +{¯©o1¤=Ô^žGÜñÒØîiOq»ç½gØYö8ñÓ÷Ο±˜t»§Ê3î)ÂX,�{H@ð+ZpOco‘ �cÝKÙ·{„•é ËŽ(Á´erÙÓÄ«aÔ½ �Îãròþ�aÛî5ï6ö=ÊŠm�ûØk¬{ÆÂ¹]7Xæc:­ZøqâRi�qÃN%+9ï ¡ÈS7Ó²£î]{ÁU¾ œ†çáGú>ŒŠ¢¬§™~ßSó›Yf%?‹i…ÜsÚÛdl÷…ã^lò/Ç�cn<5ï# £*�Š–¦}pÛ 5@ÚV¡g:s +^ö&‡¹kœz‘îUœrwÊ3àØ„é ÊeCÅÓ”&£jmݧ sö‰jR¹Í&”åpu“ŸF¯e DT¨ã6³Ö¢4š°öM»ç¿ûQôÒ¨Ó€CÑÓ¬OƒÐ…†—GßTTE ðºT_¬“•9†@R™¦â´(³MQÍ +yu%ÀtVrâ*­ AºPØêܰØ|×ò>«RWYj €È{û 'hw§Hgñd³JS¦›ŽE?Ž%”®boW÷ÞjúX|OJèNs„EÝ©O2 ‰3e‡‘ºüq ÷þ½ç½õE÷¦’0x_vÌqÚé†�^ýliðç('ô :'5и¨V;y£Wï YtðÍ�DD§õ+`¶ŸÆ" ¬ÐîŸè›½+»@Í!‹vG=ê©J~ª¨�xPö9M _éÊJ%»æöqI,pªgÖ‘‡Ï‚Šù(„W¬ä"bI¯úJíR|Àì `šÜÓQ~3 ÕUµö+ŠæÈ4YÑ�.ðÙyn�NÈSÅ?]¢EO‘%2»K O«½Í;Õ¥·[µ_袢žÍ\ãI @ñd LÚ6.œ‚ÂÍQÎÝk÷Ì3»¡@¢ÉRKQ!ÅLÚºêƒC̾ŠFUY¨QÇ�ÍYKá˜|µÄ#93”ÜâúÈÍcÆL˜»\ +$ì±Ì½à®™Ù4˜�i �vB± +h Ì5|1Ϥ¢Î#’-A ଫBc-=`Ô)U¹(QûV™À¡�V wM7fQFJR ‹C¦¿¢’âíka4–åEDË!]æµÐ`È’¬šã)U/Ÿ"ϲšöÅ“#l/û„Èž²éÍôs˜è&«ƒSwˆ?&›ÂpµõXð>ˆ¶e+Lo³Ó]·Oµ¨waa3ý>b¡÷eÀ‚è;†Ã¨k†x“u\fB:üák[¥——µ¿¬ý"UŸÅêdà@Ëòš›–®’Õ–U�Œõ¥o/ŒñY‘ÉÚài¯/=‡DõjG5xb;`¬iK袴š‹Ðª"ñ%»‹Z^ÎÄÃ-!¿|ö‡eó§J"à‘YZŽ£×4ÐSS’²Œ¤1E[Q]ǵÁlv.ç#¯“ç*‚¾ñô +•AÖG�¢A׸•òáW`ýêÓg²ÂÒÒú“ÝÆîògÐd%P²D=£ɪ|04”:‹=�~4Þ¬‡. \Zê"„¹è“4?+¤ täR쨀2Wƒc„SÊYˆM�‹±T™@=º»  ¸ÌË´}øãí‹#ñº÷š¤ok«‹¢ªÕ�ƒ‚ŽÎòäj\gÕþ£3Ý8ê¼9Ù2óè‚ÊIf©*°hÎ$Ð.�&ë˪hÒI +ú[+ñUŸD&©Criåôg{ð~Ð%ê¢,I|I›È˜³�Êò‘³'sÈ`½>[õý¿­8‚j`Õv`2£¬’XŽŠ)1®ê\×f85¨¹ûÈ¡þ©'/ÖÀp +_‘LÔŠP§5œy zò‚·Ëê¡w��Ú£ðõ=ñððì 'À{3v�ü„�êZ û‚Äìt¬~Ýéåœÿ…'IüZÁû«“Þ·"üV„ߊð[~+¯ÇïxÛÌÿ +0”ºuò endstream endobj 82 0 obj <> endobj 92 0 obj [/ICCBased 87 0 R] endobj 79 0 obj <>stream +H‰ìWËŽ7 ¼÷WèZ+ê­«7FNFø`ßIö0kÀÙÿREª{4؇ÀÈÅ î%G>ŠEêá·G÷ðá1¸w¿<ºíáñcp—'úϽ\¾l¿Bõ×Ë\pR“½œß¿ÿØþܾnÿþa_V|r_¶!:þ_ùÿèvöW\¢çºV| +I\K,îò¬>o{ð9aOkÝáïQ¢_FÃú‰ø¹º ×�zþ†Mynâ1—Mš/¥¹êSï8Uº/Õ5sw2|Õu/¡»Èc +„‘·�¿ › +þ^Ï» +¿/ÎNi…«Bô¡Àˆ;wº¸=ú(ø$ß`ý.ÙKø6ßFÄ·û®çî±øÒ ‰âs…cI|ˆX³ß”}‡{ì¾J⎩‘‚ÀtwÝv/qU`+Se2ìe„‘—}„—í ¶î9{DàYÿ>Ò*f6—ä³àÊæS£ˆãªÞŒð œ{A*Grûð=4+‚w˜qÈ7KÍõ¦ÉEM2MEþ÷ŒK;ýO>Òÿ„ÄÀú=Ò6ÊÅ·hCìzjb·È$BâŒTó)¥L7¸£B“ôì’¹gqeоê yÞ-z2w _¦¨cò=E•s*—�UŽÀ!7DßÕ쀕ø²HT9§¢éM€å�΀Peøà`¥1@b—a³ú ï†p=d©¢Š’E¡»ŠBßH­Ã¼/E7?BWMÜ€˜g“ w +ójñJU�€¦ÌÆ(†Úlr`|hV÷«Év25©¦vž‰jU§ªÏ1*&Z�*K2«PÀÑVær +Qs2Ô-à¿YŽºå›ð-¶¢ð,ÄIÝ@úÑaÖ‹åñ!< (ƒ î=ª¤õhŒ  …}X Ãe8'|aE·¦‘H/šÍÕá¢ÜFEf²9f9²Ú ERÛn''å2f^ÑŠÀ •¸hi€(iÄ’kø"ˆ"€h"@XÀÌõM+—…ÒC9 Œ“‘à˜n”QXÇ7F©8­®”Ó˜øIJDZ#„”²h¤Z•ÊÕ²)u\OyrÊÞ’¯íäž½[ù/§µ'7-LV€s×ÂÆæÛ𽔓­H®61ƺqúK¹#/³óä¶SVÚ»9vÄÖ\Ë„;"£mѯL}ÃÊÉÚíRÐ9)’™bÈ©šG!¸!3�Y›Ü& +ã–hÈIs<‹N´¾âЍd°AæxÝ„$Ií€2ыܰ¹Ô|ƒ*ä¨å~bš� ½Ú|P)¶b$Q¹híX§ç1j%ÿ‘Õ Kµr­hš2‰Hdݰ¼n·j\‰Ä&% ¤ cêc²rà +ÔaÃz¬ˆˆ�T®«8‡@¸Q4E5“¤ ‹ÖÇ$1Ì)µ—•æPI¬qð¦ÒfÇfND1&¡¹Û ,3 l-+Æšv4r/dÑþ‰€Y�.b�…‡¡-áìQµ%Ee’d]Í�‘ 2žAGÉ,dm6 @*˜L¯âWlÃMQµ23§ ž˜B�í¬•ŒR޳ç“Yw“é†2-âˆBÒ"\~V,G$m*&a€R§bïhiÀ*È Ñã)¢¬-™H( L¯‹b è�xyK"1ãóºC¾Š+‡n2Ø”rÇ<î�ô¶Ëf¢Úr�´Ó9|¸óùõØ; f-‘�ÇX‡^QúâìÃÒ5¢tp›�]Y�¸ýªñ±˜±AþþÊï>òòl¨ßy6”õÙ�îž ¯n«Œ ‚¦�€u^gsÐ"!tºVM&%q^+Z¸Cc]-õµÌY2Ú¤'6˜&§˜‡epe“Œmœ9Rç»Á¹XU‘«GzRo“¡¾<}û•2Íì(«;GGŸ–j„|XLxtIŽK‚àÔŽ�éÌ \ ÿ£‡"“‹1yp…_‡hžãœWŠëM�oí¦(¨‡1´—g¶âá:çG‡šbßë κ¯ê¯bšë�'šª q5¢`L@Q™3±p/_ùp‚óÑ'÷î÷×V8¸õÔÁhʲ`u¤`ùs_VÔ&Þ ì!ƒ_¥UMø»ÏîáãSp/OîýggÁìh c,ÁœŠÓ®A†¦4ŠNb2`}ñƽ|Ýx(òÎÀ�hE'�jGØ ’Õ¢®ãúkÍuÑ©:53¹‚JáÜuØ/•…ÇÂ!Ó¨{ÍÿØ9kQ` +t:Ì<,­aãyå0hT:Ȥ,‘UºnËÂæ–3@Lëù—Å#fgc–;ȊsÌ\ˆ_牜C¾a½‘íäZØßØí!㔤¬Bb O€ˆt¸"­ßËWnMù\œÍ‡yÎÝ-?Þ‹Ÿ�)~Là~rVxCßúÞÐ÷†¾7ôý— ¾ÿðèÉy!n endstream endobj 80 0 obj <> endobj 93 0 obj [/ICCBased 87 0 R] endobj 77 0 obj <>stream +H‰dWËŽ$E ¼÷WÔtNÚù¾î‚8!„8À½ìa öÿ%"ÂYÕ= ‘¦ÛÙù´ÃáðÛOŸ�·?çãÓwŸ�Ûß·|ä£ÔžÜü°:“w?þùýöëñ~|ûá—|üùí¶'ôÚÛÁ÷�£&+–±ÃãëíÓoÇÛ/_òñíËñýoÇÏ·Ÿuȹu,,Çý?g½}ÆI�o‡éïøöøë:üo ðP;zO%çr´’f5Æñ¯·{Nµ9�1|_ OIm œ¢ÇÏýxpÞê×oXT÷"nó¸ÙH­�‡Ì‰]m¦Ö�‘¼ÎÃVê«3Yž‡s›cÕÁe×o†‰ç¢†ï¯û=nÐ×[Ì,�VŽU¼X>>fÚqwø % ÜîJ6>GËñ9ÓÔ®wo© Œ¸¥Úñ¬b);fzMk-†*MÜâî3u8+öˆ5¸eï·;®bþ:€¥³�6nKÿ:¾Ôä¸Äãöw½×šðþ¯úº’óV%e^ñ©†#G*ƒ&¶ë:Î�3ï­¥²€�•f2;\w^ã´Ÿ7=GÞŸ#µéJ1Òý{Å¡“ï/Éùþ‚°àöwçÝh·4<<ß!<ñž)Äå©‘&J›ÏàŠŽ‘¢½[å ìÅ™ÅS×uŸmÚ™+¯èòÝ�Øâ²k]²[®²(äOS×Θ‰_`›¹ìZšÂ[:Ú¹ +Ì€a§ûðÀΡÓV<˜‰ˆðÝxÝ2·mÝ4Ð�=„’O™Æ·pÚW¼¾5-hiå©‘¾¸>¯a7®4Æ5üUº�‘¶=èn�Úvž\4ëù=­+™^4Ò5¹ªGõTÝ…‰Ñ]¶•¸Ò×cFfÜa—ìŠÉÒ³€ÿ1šo·Ōƽà'=á§GW|0_"vðá��¶â9]–ò1ø@Åý0ÏáZð‰[Ìpf‰ô¦hv׃[Êkj 2X€£ìÌöF³¹¦ ýb2F^h…c–,NZ + Œnà‹ Š¢�c3Ök e.eæv§"À^ž”јÇOF騭¿RÎ`à7)iƒeñj°:Ü œêfÛ êx¿ìÍ)÷QR÷Ü;±UOóqÝö⦗lVÀöªžè¸l}ι�ŒtŠeâ©Ã‚±žÜ4€Žä÷¼¸í²E{χ�¾�§Užr�%ú´=>0s{²Ï8tNŠd¤èòÁ‡tÅÑnØ 'Læ&€‰òzz°$N�I�GŒùŠ ¸(`ƒÈñ¸ )Õíq ‘˜ÍžX„Ýz}B¶+Ý/,c$×@¯Jï*-f¬b²›r‡xRòÂí¢VòY ¶õH§5šÂTI@"ó†éµpzdãâL¶ˆ0.Œ¡÷é¾V$$¨#8†ùØá éœ×±�𤠌4�l’‚mÊ�Mb�í•æ�Å¢pð¤6vÅfLL³ÜƒÜcPVé–ƒQ…±¡ +ã`ƒ"ÛT?á°¨ÑÍ¢²°âе-_5ª�"TÊ(Vµ@F%ȸJf!k³`R9l¾ªÀ-<º2Ò¬jˆ'¦Pc's¥"•}×Ü6ó�[¼ŒX×Àó¸âíÜ vnUvÓ½AxcÉ^UáÂH'SVÀlÖÈ/"YžéEØâgÖ÷1ö +ëQñ_;Õü$ a\4»ô“D®‘ +#º'N×ý~ú»aÖ®ë[T[Žx<È{\oZØeîûÁ|†˜~D¢iŽ'–©}÷À& @nÜ'JeøDLÛe"¢,…I( Mß_’>ˆ·ÎàЈïãNûq^èx¿!°d°m(䎽Ýié´Ç-LÝå}ûž±Éù†oþŸèE.¡ðc‚)úx•ð ã4VDÖˆâ`&]¤¸ÿÜ2 QÇÉG?PPƪ,ÐV8ù£ý~[i©Dh¶TúÞ§§¡gÔ¨qе ±ˆ÷ÃZ Û|}“DT&ìdˠ΀Y\¹8ÔµTµe ÜTuGõ î~�ytÃB®ˆ|%ùÚUe¼­…YÎX×}÷&~¶=¥„ž©�ÑšqRiöbŸ ½Ffôµ‚¡®BI%!Ôàaª8ªã‰pæÜ- ¿ò0#- sÔÝ¿< eN�c¯fc:éBc©� Ï xÏÚÙ}e}�™gœ‚¬f<ÙÀ@KA¬Ò�~Ǥ'ß9{1¦dZCV]tç*+`™Ý�'3x&â&JÃݼÌ(—ª‡ÐßEäÁ¼Vñ•ŒÂê°"ä¥PÃ’2v…Áš‹ø0 Ø±#›Œ¹aÈÕË ŠŸb`R2àY!2  Œ½UEرªqIJá‘Ù àÆ½Ô¨9©¤\™át ã„ H= ­ÂÒ›TÜ´mÉ9ÕU‘ +ÆŠ—]½K ’b§kµÙC]¿c~·h|Xó�¢Ó_nBIƒ°õɰsŒN¨Sošá¼²€Ý(õ™0²6 J°’øÎ¹—À—llá,‘Ô©‡ÒCîmYŠÚfrûe�ÈúžK³)…µ +`ˆ~Ôæ �R+â:Ò%Vª;ts²Î(Rĵ}Ä}YÕ¥1Zsy…-VKp<»ë—Òb5Õ³!Å ¦•æTÏââém1‚s¶Ó `p +�‚ÄØ÷�ÒY `£K +‡Z&ˆ˜lNa³:’¥?Š\°QfÕÎís!¢V»“‹P€Dârf CF�¡¨ˆ”Cå0�®ß�pßÕDœÒqn¨oì(…� /Õ«žF”U Î0­HIN\zS bD|�Ê +¼0ÆFh‡&�ëH>,|p‚ØL°müÉ³Ê Yt£¨o(íै¼8[>=xêAu Ñ�¢ÚDÄ@’¶É‚ОUÆ”£ù FÓÊ~‡ßC@œWmTÿ•‚Ž*”Çð#ZOst/dVµe²“tkÀ±«?sUvfÑ<+¼DáeœÉ~ÚEd¿×‰!×¹)3p–N<ñ_¶«)b漂¸J–,ÉŽ)B^ABÿOécFf·ˆð,¶4gw‡ŽÛ—ý’ƒv34ÔXòŸq…,¤zÆ:d°ÑÞ馳Q½<:EKt.Ípöæ~¬¹pJ¶¯%â66b GÐA�êÛ>Rv`Ãýí1´í9r�× 'F¢)sÆ�ž2•ìüÌuØžŠ´=T0 +å`_³ìˆ:"bT§Düå¡LŽÛ+ò–+ò7ÑøP ”»?i ˜/n’ôñÏC¼Êµí$§€'ÅðN•ÚÉÞ újªk¦ˆ¦+G_¼¼xÔ¦qÞÿÅdW“M݃E:¯ uH²;…º�©Øo&7¾9á»tˆ"Ú¢³1À̺øV5à–¿³0–A,†Dj�•›£-+_Ž,Ëøí¸Ô>Çáƒqµø´U$HE]vS Ž�Ø9+tª)«3(¯½¸ 4‹#v³VgXyoS›‰ Å>à‚¶�š¹‹èÍJ„é"Á 5¸‚8”ù⳺ؘº�uÇõÍRœM�ÕëÔ›i»­¾_¾ž ±QÈVÀï1ˆ¯í†Ä­Š±¸D¡º„ÕÉ"u¦�ʤAÒÓ95ͯ¡>ù8µc)4áç%¡pÈj�ÓBbh>xÓΩaLÝxPRòá3V‚0©L{~bÚZçQê´¼‹Þœá„ŸÓ?[tÜ8Ÿ•‘úçÀ÷—?óþñöŠ?¿ vq·ù endstream endobj 78 0 obj <> endobj 94 0 obj [/ICCBased 87 0 R] endobj 75 0 obj <>stream +H‰ìWK®ÇÜÏ)úÓ¬¬mE^†¡…´�ÅŘ€ôî8"2»§‡¢6†ì�‚o:ª««òŸ‘þñqûð÷�iûî/·Û‡�ß§íí}K{šY;ÿ®¹mïoŸoþ†×?¿ßÒ–¶Rûž-oVçž{Þ~ýéö¯Û/xu,ø†²Ý/;~Ø>ß~Ùlã¶Í¶×¾uÛ[îe{û·ÎÅß½ ÜZqönO³âiþ侽ݎն;‹|ƒÿ¼ofûhÛª{¯m=Ͽ㋹Ý3¤Ûîeq·…Ÿ±þÌ}NwÏ�ܳQÎ{±=e †ÇÊëïyîݸѱAŸº=nw\L˰î0 #ÈòÖ=C¦Û'u¯u¯ƒšãqqb%ˆØÊ^!ãØ ¤h8†êßçÞ*`Û 6®}êö�k�R~œ¸6Jà¸ã¤Zd�Rö S”¥År´}è,¨Êo�ó”â¼ü0ÃØ§£*këm¡Þ÷ÜýË"±�²¿³&Æ÷’÷¾hÛÝL(ÓîÕƒó¥8° áÎ[Ë>‹PuÔrÕÖ¼O›´HÇÊôtgéBÉ÷¦½KažjKRý©HXKê.il]˜º \ +ž.7ÑM{Û¾©˜{Ÿ¨e…ÛêBEŠ7·cö·æ{†u»­¢½�.¬sóî/«ûø+ó­¦Û€SÕÛ" /iMߚ܊ø® ªY€ó%úš R +‘9§@V˜æên‘g»¬Zdòæ‘Ñð‰GiC}¤ +•yNÀ«‹ï±¼¯&×5F„ÒÀ¸¶Oj’öá.’ÇéFü$ÉG/¢šÉaË“ŽA?�FI¨CÄÜnž{‘ô=1øž%a¸ëè#lîú,AºÊ¥äp¤,Èsÿ>ÊÞG„{WH8x ¹ŽÊqÊé) 9}÷3¥û”«¢Œ¤8gi p¦T;ëÆh2ÞQT$ÑQo¤BtJsù),ÌÀþc¾8†¼ ÔÝD¨¢Ã­nz«�_ +j ^Tüž.‡‡»€Š\É쇸c^ œÛéuøaØ@VŽP�yU•<ˆ€Ò_@¹_‚˜¹L‘G>Âo¡Qëz™Ê+M‘uÍ| YžÇ#ÊRð/Ѫ·ð+³KÏ‘ˆ¾É»”¥˽¹^È¢*žÉÜì, @vV�^hþgMAàS„óô6¼çyuC€˜KmE„T¯¤}(>ØQƒ™—@æ¨É Ít «9c)}€_"–x%{†œ[=>J÷6ã•° ©”X°gˆ{ÁC=³«1S �„`PXÑ|ÑÏh¤ªÌ#’,I`¯kB3¶ÐtK“/ªéÜ&Øô‘ +¬@˳Ê#5Ë�ÕM¦ÿU!Å.:b£9–äU…–?Bz,±ÑÁ”$E1Ç[š>ž~‹4+JrÈgg�py™'D®)“Þëõœ^裃]wª~,&…ÃHëð>; ˆ´e*8X~L º»Én^JQ?…�M÷û�ÞB€€�;šÃÑPñCâ9y˜ éò‡?»Tú8¤½èåÄÏHùœ§þ†¢°ôÆŒ?9¦7MžŸùåà\ˆ^ +5s„îOÎ…Ø­A¹ðÈpÊåèI¹?)²Ò©`P.$]'åÊAh¼“„– å2/™A¹À2f?)—©ñ?)—5ç+N¹Ì»yP. §A¹,*¨S.«~‹S.�Œ9.” ¸÷“rÕ~P.€Ü.” ŒdÖ“r‘ŸÔ“r¥ö¤\0žšŒ%óv” ­rå åní¤\@ùd\+è¡.DÓI·–*u°­£åÙZ2}p­¥ì ª5#ãƒiM(ž5•ôA³fdc°¬©âá$kˆ¬Ç´Ç“b UgXC ìëil´�³«î-Wäê kzí::µjjcάjÄ¢«(T^#t”Óª<ʼnUQú93(ÞØœVýV%©�T%Ö«¯�]�ÚcPB7°~�»’üfÊÄŽbðÄ®€cõB£aœ@W¹Õ+RU%GÕ’ÙE&/娡–�|æ[e÷A%ðÊ"&ÇŒÑgjç@tR‘�¦ +à(rk‹�¸b3sÙùœ½«Â!Èï�>ž��¨ç¤ zÆR.‡^‰ñ¨Ág1Âr0ýÅlcvù´ $,¦w”";'Ÿ4 ‰NT¸‰·ÚÁ +H–‚[d‚´¢ �æäï*K22ø:b ®Hp4p9§aKÍb'hGvÁ*úVø˜#Ñ'��~H_\‰¿Ës¯‹øöYdŠVO´¹—wã¹(&ð™é‰£lÁ—‹)Ö¡&�,hìcÎ!N™ è=S!ÕÔçD}ÒÊüÔ[Of%iG…äÖÆÞÏôàzÒ#â¢!>€ˆ�Ѧի¯*jñÆÞSØd°_C«¦èí|#)"¶�i’JTÙd –D‹èŒgÞ—XõSLC¸$)´c?1°µéš½âPøä’ÙüНÓÔpƒÀø¢ÇNòmxŒ3–ž3ᑚxÌo›•’gÆÓ±ÈScß×ÊÉd‘„P?IøŽÓÝuÛS³yY `{pœ�ÉVóÅ?ÐéF&_¿@ iŒs�%Ÿ5/5%«#W‡¼âljIè—ã†è[Ègä +ü8 É„aP™@{'8'^�4¯øqkÅU B*rìC{ÏFYñhbè& R¯øqàC‡øÃ†ì…{~Ö=}– 95Þä4¡ïåñ~ÝÁ9³�G 5ø·Ä¨¿ûqûðý§´½Úþúãæ¦ážk\l §\“ÉÓB Œ†øýJ""ù´Æ+~Ü,Á/`¥S©ÈÌN¶ÌˆÇ*»«³~±ðx.ž:±–àö¢�ÝÊFî'Æ‘_¬ü¿ŒÊBۣ̤³²vx�=Ï�†éä¥L§ø¸;¡çözÄõø·‹F˜ïzÏ…ÙÍ„¹_°GyëÈ¥‰ÖÛ¡cY¿+ÿUÈÏX \X`Ek¥$"Æ^ñ©À>nÏ­CßÅ!í7Šÿñx‡ˆÎ謰‘ 5:º ’¶v¤å>Ñ©Ž­/‡¼Üð¿ÐáOWåþ(Ãý‰kÚ·Øû{ßbï[ì}‹½ÿ΄˜”êÄ@š·RÑà ³Í±ðëOºÏ8KmÛûÛçëpÕË^* 23¨LþœH3¦<�f|JÖh‹÷˜°:7ˆÆ©–Æ%üdŽ�³“}bNÄ㬊 r Ü– \ü¸­}!]b÷ÜÂ<‚IS9/Áý|ã~JåÂs®J·Às™lú2 0�bð4Îê杖ßC&™ÁÐ ˆ2¼ƒ%Æ^áÖº�ª�µ‚Û|› 6Â¥°ÆAƒ+FÑFÊY¤ó@†åŠ Ãü9ÁÓìD¸Ôcó²0ª^Ó°ÑÓ ,X…Û°»øîb] )˜9¢)¨¶›¼ŒlH�¾Ðäù\ሚvÌÿ!»\r#Éa º÷)|�èÿYf9§h Ñ‹îûo'^PJ<»X•)QŒ`¥oD„5Á' rO*ù2 ¦ãÍæT Ö™ªºMg܆��L8Ÿ”š˜¼Ÿ=é~m&jŸ)ˆê´6«.ÃMœDj•uTï™.”ÐÑ_T{zaA¦R¿Ê°FýþP®iòúTë ¥ed_EG1f¹ÁÝ(L•̬#Õ¬’ª)ŽV¯4»žVTL}Uæ +Bæ®Ä«P `µˆ¦ ‘yUÕ¤g³Pýäxf�P´;�{?©ˆ§Îê—٦à +z¢ã®Þ$­lÔ +ƒ:9®ÚÝs‚\ ÊÔ~Wú ©VtUAwv W E©Ù $c'ÎÉ/Õ4S¯–é'÷Š�jÏoñeéó�j½céš#€Ü¦�VüxV7MµG^åR¡ô+›)ý¾`È2¼ÞTÇšJ2ú`¨ +`º( ÔÐéW+„¦EçfaбN{?mÿãã§Ô¯$á¬_¥wCw *é¿î™[î!ùûù¦xê!QL •Ç ŒáQ<�_Jgz)ʸ‚^«”èЈÚe™Ñ˔ԃø€ä£;A\Açæ=ÙG† êÝ�BÔ™¢©ú®HYU­¦"£‚zRð€§Öê¦L¯*¶—Fý¬Oñ…Ü­ÓuwvÅjTßQ w_±c‹ÛÊ*5 DJêÓ¢TßÀ$ HZ=7µšþÂ1°+Sõ×¶ N4dë² õ]w4tSUÅöéVBƒÚZyû=… �kFn›Í7Ôà¢HØ-2zŒ!]Þ�Ìð\\g‘Á>aÙG[^,ιÎ+ª%â£b¥eÙ¬FG˜´¤|dQ€»ƒÎTw}Û��b<±N iq X€ºBjä©{«eZYbñéF!ašÄž8%Ê>­äò †ïº£ÔÃ"K '¢$òQp%N‰Î¬ùîè= +*åÜ +8à±ÃaêQLáÔ¢–ࣵ¢²³8šk8ÃèÒæÝ_ºØ\IT§X6ÿÊ3TÌyÌMJ¸UãèíIÈÆy–°»ƒý¦ ›–®jË­bYì°ÒmY +J ɅѨ,TÞð�GñuO½W…WôlR1TØc`nŒÝmh•|¨ 8bò°UÃúˆp­~Ãàë0êTµÆÉóÎVÓgjRùzc‚ÜšC²"êÛÜÄ]s¡UæeØ™´Ú`ýTaÔn ç™4Ú†—+y8;AÃ\]� 1ÈîßÔsMŸç +1ènp='«h,Ïø.$•YµÜía¬:#ÌÕÓ$¾yTHdÉ0¾…·Š1 œ¡vŒ%ªúƒõ©4ó¶óSI6¬lçvN=Ñz•š"Õí¯ÉH˜g;³(Nôf3Scέ»×ìÜL®Íd÷hú ªj9y—£ˆ¸$¸Ö–€Œkêoý±æÇJ#t#Δ¿~Wo—KŽt°—gBÄî–µ‚™ ¤ÃÎCáŽA„Êw#"^÷àP�mµpŽÉH +WÜâ1ÏÄir¬9‰ZûøîÑ™šxø|³ïŽm‰õŒ¥…µóøŒ<˜3}9¬œõ•&žÅÅÚÑ$ŒWëØ^’|p¨1!!Z¾.”˜Ëç×mbúvâˆÏ>”‚o"åVûDè7Xœ0`R€9†Z”zÑÃà«[Sw«ƒ¼¶¯1ŽC ]¿–Ÿ¼që÷ǯo¢X™f¦ÚÀ"ö—(¾Š¯W\¤„.Â:IùP*Q¹“,(àœÆyèA!t?Nß´\Beº=.ðŽG–r<£†»„Ý2½N‚+˜%Ý?ÎÍà„Œ¨ý¾æõ¬ÇÄSïfä³Nñùf©Ç q¢Xë6¶‰:ÄþéÍhþù÷ïOýûO€ñÉ" endstream endobj 76 0 obj <> endobj 95 0 obj [/ICCBased 87 0 R] endobj 72 0 obj <>stream +H‰ì—ÉÊ$×…÷õùuûÎÃV-ã•1F i_hXT7HýþàïDdfe $0ØÞ¨ùᯊ¨;Äpâ܈ÿü¸}øÇǸ}óíÇíöáãwq{|Ù’ým_ŸoþŽêç/·¸Å­ÔrÊ[ª3äž·ß~¼ýtû•Ÿ…/(Ûý²âûíó-†8ó¦ÿ]ÿ×ô³å�›¶>B/un­„ØÒÚŸìÂO·{ µ°gŒ¹ñ}5nm ®°�ÌÏ}{hÝêçolªû&ó¸¥Z[eNNM3´¾��¹2­ÐWßfHqnYÇHXuhÛù[bᱩñýzÞƒ(üëâLJx1ÇÚV ³�üîÍLÛ=%>JEžÔ�æâs„±2Ÿ3L;öž[Ðþ{N¡vV–bfe®a->KÕÈ3tÂÎŽ]“q™ÛóvO)¤±bz‚£Ò( 7ËfÏæp3f“¢*Y@NYÎ*ö&±e[nà7&Sæ ­f™¤… eQ00<¹ ¦8„"@´# ©~•뵆®êdÆvò„SIp./ÆÁΡtNëWÆ{â•^!mBÆX2 ©w#r³l�9ž§¼SÊ}”ÐÇÉE÷.lÕC|œÖžÔtq`'Øw]h¢cl}­¹�H9ùŠ¢tŽä„õ¢¦:D»'w¹�'µ�²±Þ˱#¶îZ=©œ}‹}¦]?X9ý÷>ýRØ\ ©L)äCŽtËc¸‘³•Þ²âÔ¨(½�X,W1¨(pbÌ+.Pd# ‡ ™BñŽ)Ädixz‰Ò ŒÈ­×V‘³Õû f4±:|ííÀ2ùŠU’ÉMï�ªaZõwãV h 9u¯§5šå©Š9€¢ +Gõµ¸ÝËqi%™-fùaÊ}.^ÎkyEÂN2*‰NH¬Ä(T=¤�s„„¡iVS;K!§Ø^,Ö�¨õä9*¢$9tSÐ6æ�ÚÈRìÎUDïÁ¨²aOL†ŠÉÉÞOæotKNˆzrÚÆ•êZôÚ�b°,j¢ô¬92ªP¦3䨨E´­LE—åU!~Í7¼ÝJ“ƬšÈ T¼±Æ}•ZÎû›Û\Vꈋ&u;£y:*¾ë,äØªÉÍì®FMˆ«Z¶Pt1ee³z} ÙTyT‘sïþ¼�±ïHÝü!‘£ŠHŸË>í{éN »4¼±gf·šY`^%Y… +k7«“¿²Òd÷#w7k&—ËÜwì~Ê|cXÂG}°L÷É ¬†wWìDAvÅ}ò”ñ;$0ôí"¸÷çÈE!€ê|^‹bw­ӹ³(Ñûu‡ü8 :OµÚb®]:f?î�ì¶ÇÍE³å¹ »�~ÈáÛϿov'„§dö¤æÚë&£-õ<ªXà'ò·ëõàñ›¯_­>6‚oß߯üÓa¡^†…þ'ÃB» åmXøÝm¸¯/E½ÊÛq�÷É D�*ЙV,UL¤>­Y½.!(©›UxÉV]Eäè¼Ò“7¤ÅÞåa¼V=Žy\ûeuÒõ­_n^M¢¨¡N^Œk_„Ø?M¦ª ½;s¼ãû”Ò�…�)(Zï¹O)\’¼hÏ)åh��)E‘»4ß0àŠù:¥œ®Sʩا—#ƒVªù’|ºUõ|eÏKÃ…¢ç$� +õø<¸)V3cÍq™ý.?O™Lö]žÀcѥҊä þ¤‹è5žQÌU³¤£ÞÄç�'$±¼� Ÿ7Jqî>˜8˜¤ÌU8x—Ÿ‡|¸ žèûí3ÎÆíç[S³6˄͌Y!rpùz¿®P«» Ѻéqs5aÿÓí›¶ßý·/¿lûaóPª›)éÊ]qÚ5yÌ(ÕÝ‹ H­;¸XÃ{wÄâM|Þtdi88–¹ºèŠj‡„ŽÓ‚Þ´ûwŠçKq¤éPiM‘_â+d)BDý9ò]ñÿ +élöìüPÒ§Äž¸]Ý…ÂW\Q€ógÚésße"ÿZ<¶Ë)0ïõ†ÇÅ)ï^‹šaUÌý"È�@øÔ‰¥”5ÿÈãÙæ4›ñAíX4Y�íÖèÒýtú$¤ÈÛÛôRÊ‹wù)¹CÇêanì½Ýò¿ðã/Gÿ­Àýeiá+ò¾"ï+ò¾"ï+òþó2fÐ(e†›R»O«‡â·í>M—C3æìü§ÏÚ¶/�Ï×)¥Ó'Ì”7ÅzŒë„GÌ’Í8�¡ŒQ¥k†£½Ð¢�“L*6wð‘5‹Ép¦¤¤5‰Ißï´ eYL�ë!?o+¬\ŽÕÖðu°^ÎK¸8ì÷Ë*7^JÔÜB˨ª³�»ÈI‰y[œEê¹K­›�€MÓ�jh<™))†­J»Yð/�Âm­Ï-§PjR©®ŒN`a]Vge>ÆÐLú:ƒœ›N‰KÁƒ¿£ÚÏ +,ت”6bÑ$›ªAËV ¬( *bÖ¬§9µÛòd§Q�6èÚ÷ÒhÖ£{�ËʬQwÙ ù´D(k¸7ŒaófÉM>.Kƒnª6íú7LQë”ù_šmQ±O +qšV +ÓÒ-9pUd±;#É$¢&^ñ™LÊõ=딄؇¶Ó»R.”â¼NÝî¥Iõ›ÅWMüîÏ›™uÙä¶kBÿÿÃÊÊÍm!)0ðÄ Òÿ‡öED$ék¡°¸Lë�2?J¡çp¦üù]£]",9ÒA]ƒˆÚ-S–�N§´,Üч ù€×í +¬­ÎaŒDpÅx&N3`cÙ$´öñÕ%¢cšxø|ÖŒwÇ6ÃÚbU{ìøŒ<°™¾VÎztJ†gqïv îjÕK¢/®5 œåÛB ³X^ŸËÄôåÄw Ÿ}(_DÊ­ö‰ ozqÂh“´!z¨E©3Luiêu:¯ík¸q`!C½üä�Xÿüñ·I1Ù èë]_¯üú•5lL~51D!¹Ë•ïâK×+5]Ï önTP¯G: Ä8§Û?ô w?Nß¿\B`ÛDðŽ�L¹ âáa·ÌHÑ"'ÁÅL<“î‡ç¾pBŒk¿¯„¤=ëáƒêÝŒ|ÖI#>ß #"õx!NkÝÃÆ6Q‡Ø?}ÑŸïýùÒ¿ÿbÃ…� endstream endobj 73 0 obj <> endobj 96 0 obj [/ICCBased 87 0 R] endobj 68 0 obj <>stream +H‰dWË®#» Üû+úÜ#R%m3² +‚ ‹|€q“,θwþHUQÝö 8À±)ëA‘ÅbéÛß¾ßþú½úó÷ãñû£ÖæéáGmqºÕãy üñÛãŸÇß¾ÿ£¯Ÿ‡éïøùÂÐ_0ôïŸ�ß1PðgGÄYKñ£×s6;^?ÿñx–³Õ£œcÌßW÷ÃξNчãç8^œ·âþ ‹Ú^Äm^gïãÀ!sbW›g�cœÞæaëŒÇ<­ÌùM‡±Úà²û7ÃÄkQÇ÷Ïý^�=þþq3;G¯õXíŒõ×ÛL;žŽ@ᣞ£ò&í´¹ð9αŸóœÚöéýìu;[`fµ³8fz;×Âgmç„7OŸg òX±G¬#.óøz<á‹ùç–θl¸Ë;¾´ÓáÄëñøúlíD~èë:�^Õ³L| AÍàÊ8ëÀ:¶ �Œè šÏÞϺàò:gI3»Ë�Ë~{z�|½GZ—K9Hÿ³áÐÉû×ÓaV¤¥òÚt�aèçð B×sĹv]sŠö8'J›·àŠÀHÕÖ½qöâÌêghÌœS¡§s\�te.¢37@luÙ­-Ù½tÙr�Ÿ“Y«3ÛAÛÌe·Ú•Ý]vi3`eè‚Ag€Ãi+/ÌBBxoÜnçö0 tT‘ä3mãå @�•×ï]+ú¹JŽÄâ +ÄœéƒÝ™'c^3`5t Œôž3Ü-Q»WÈ€fÝ?ÎUs U#¡(Vbvs&ÆþÝjz…úõ¡‘¼î &eé^ÀÿÈ$ÍL8áÛsFGývrùgHW~°^2yPÏâÂ1«,Õc‚2 +ÿ0Ž—LqC9?áÅÌ æ‘HïJg¸.ÜÏB°a 1[ÀÓì¬öN³»¦ ý¢2¦ž1ÅþJŠ„3ΩK‚À2»€MMF@sK +˜Ù^k¨tY)“èÛŒÊiCîÝœÑYÈoJ lŸœ3væ™_bmCâ,ú+‚„\äÚ6“;¾n{“ÊsÔ3p•M6Ï ¸Úe¾noorú¸À¦\`¯ú Š€³í=ç9 + +*gTæsXRÖ›œàÁ Ýì•~ÞävÛâ½÷Å®ØæÕT!ˆ”{.ѧqœ[b& vÌ<|>rÆbÈ/J¤ݰ]µ·T�\2²w¦›âX¸Ä`®n``À{½qƒÌ Âxƒ +¦‰%8¤bv{£v�ö+l�ù‰fŒ”–øU÷À%c{U“ÝÙXS勸‹]I�$6ØY0ktå©‘:EV láô™àäéÈl•WÈÆÜ»î€Ò[Y’ Á±ÁÕ1Q‘¡TÙK +oÂHWUmž‚m¥¿y,€QEõf:”Dµlä’>Ð\ä;¹(³’ ÀspÖ¶„Ñ„²¡.ã „*ÛÔB±lÓÝ’ÙuÛ^î>#qY)¥ØÙ�0ã¼(É…ÄͦP•´ÕuÀž Þ¡Ú„–èiIõî�M`Ã=ðœèeø$0ØŠ¶ Üg?J“@u~} ,{.wc%Tæywٯˡkàë�t†Ý6àÁmöv—¥Ó^�4åË×6¶Ÿ¹Éu‡_îüríoÇAÄøïàã4¶Bd å9 Ì‚;Óÿ¹µ]VÙâì­¦&ª[��Ù*'ÿj=Ö¹Ô4[ú|ïçPçÎ3Zö‹<žN¹|çË7`e§É•ÛÄàŽø `5�‚ ®Â›”öì\d 0zEìÀÂÒ}|<p +ï ++ †K|°Í“ $ uå’¤Þ¤�™¢ëË¡¦Žû1¦¡Å>kƒf%ϲu—𳫅z?uû +ûmhºYªC+—þRgÚ#_ÒWUo“™‚zÙ‘ŒŸÈÃL3ZO ä»T‰t>½³A—û\¯ÛnR€\6 +Ãi5ÍT›€ÉNU&+G�Gä–€ ™1ØCûRvÛ•¬(¸ZÆVºˆ(ñÍ�€Í‹Rf-¥¹ )Ö³©QÍc_væc€� «6ù ŽÖ»hÛœïÄ|Ö!Úp�CøQ±µ};r‘÷‡µ@±åþ&m¨Jب–AÖ‚Y]µ8ô^Δ‡S“�z]0¹3›‘y¾†¥"\™#ÄJº5Ô[”<ËT8‹”ýÜ÷³Ä¯O­)9›ç›hÍ<ªvû°/”Þ#3_´Â¡ ®þH¡ç n¦.�£ +ÑœûµF¯<ÌÈKDÈm¿\*î…î¦Ûñ™êÁ&cCl, Ø”ï¬Q ‚øAXq­]ÞwÙ'›yÉN€.L(Ÿ.ÐPP«ÆñÇo˜ô&<ç3Œx€>ë(«›ï\}4Ó�š¸2{&ÂÕá~¶ ¸É”Ã8„ñ®b¶z®ô; Ö¶r; 0‹Þ- +ã+Oë5éaB±a šŒµšY¨ÕÛÌø‰Ÿr`R(à]).+ Œ½K¤ø3½±lxVö¸áVi)Ôÿ® gD˜¦µ3<´ +ÿIS|žÂS6Û”W|N‘ +ÆÊÇ-Ÿr%U +¬`«‚’Øå)2#uÐý;æG>uÕó�ZÓ?Ääè DzU”ž-2_3Uò¿ +#´‰ó¼%‰F*Èö»ÅPPç’á±[|È,=ƒ‰<µŒ%óƒ½2²C�Ò|ÑÀŒHɉÊèpöH4V¶{²¼K¹féWÃâË?Ô9o%)¦.·¨J‘…í »:µRJ&`^j/Å êÁÅ»z÷’•˜tNË÷'Ì… ³ºý¶Àd±çÒìªa­Du ñÏõ¾[ˆ–ØŽ½t‰—SHåd«Q¦ <¿}¤Ãlì’½»ÂÂÇVNˆ"»[˜*cuµ´!Ñ ®u–µ‰­šÍ�38SëÑL`pj�ŠÚØ~Hì,�°1&•Ã|ù±ÀÅd ð +Ÿ©%Ù~ðS¥p€‡�R«÷/•�Z n$:³L7Ú"0'EBQî"Ÿ¡Yöi¨%&ÚõŠ®á»É—ˆ×µkoÖM<‰U¨¥¶äXº‡ê J~“Ö–„TÎ(¾¼*:‘uº÷?²«©böœ‚ x&‘ã8©JNAC÷oÙ�”<Ñ#±d}vWÎBxatj.ÁyéÍÄ¡´›û0jÉ”|½L|Hol*¨š �3(Ó#†/ÃoºÚ¨«µç› ö¸b81í1eío6ÛCžë3 =§œºrPŠÇZ宋¨òŽê�¼ÿr ÐÐ +(Íæ¼Õº„üM4<Ô'¥îOÙ‚ä“[dBùÿvq*W¶ƒdBè�:½ÁsL'‘ôȺöÝ\Ð5[Ë6.N¾8Ô¦p.ëýÌtØŒÕáLcfjCÝ!� Z �ºÔ&rC[2ƒá}H†X¢3‚x�ÙeŠÐ8€¶Ðl[üjjá`J!õÎÉ›Z[l¥^âËùƒU¿ÝOa«Ô†*ñé8B H=ÍË&CAë›õ9E‚„Õ‘|·¸¸ +tk#¢•6…°N„Ï{“˜Z´hèò;bЕﴈܬFš. Ò‚«ˆC™0N1+Œ�ihØY{øïVâl ¬^‡Þ,Û­õýòõ‡�B-»í„Ö~£a ±w(T—ˆ:Y¤ÁR•ô$G:§ª¼ã5Ô§¤è.M„yJ%œ†²ˆ<-õ…F„žVŽÑ6Þš,õð™ Aš¦£>1c]çQçôòÅhŽ ÂÏŸ-î|ŸU7µçÀþ—vyÿx{ÅŸ_BË¡J endstream endobj 69 0 obj <> endobj 97 0 obj [/ICCBased 87 0 R] endobj 56 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 57 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 58 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 59 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 60 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 346.213 148.262]/Type/Page>> endobj 139 0 obj <>stream +H‰ìWËŽ$·¼÷WÔ4‡É7¯Z:†±é>�µ‡¶iþpD$Y]3^Ý$_´Xìt‹Eæ;#_þùéxùǧx|÷·OÇí×[<¬Œ�Z:ri!Y>î{á·Ÿn?¿Ü^>}ŽÇëÛCIÿÎqo¯xý=^ÿüvûõ°#⟣†Rç<š…šZ>^ÿsã ü µãÓ’ 6ð4 +ž†áOjÇëm¯ÖcïÌ:òõöïÛ¿.˜Yè7Ì®zÞpÇ7ã¸'(rÜsèÒ&ØÄO�?#Œ�ï©òŠ{²P¶Zˆ ¨â±P€{¡7:6èTŽÇ펫-=a °ƒ#H¶$.!A¦Ûu/%”NÝñ8¹±"D¬9ÈØC†ÇÐ÷j¬!cã CÏpźv¡Sª…'.•8n8©dÙ#ç�`Š<µ˜–5t�Uù-pRœ—o3ô0YXo3õ¾§æ_f‰ ”ü�¥eb\pÏ)´IÛ3¡D» î—âÀÖ…oÍad¡â¨ +¤¢­) µHÇÊôtgnBÑ÷ÆÐ¤0Oµ©©þP$Ì)u§4¶&L].Ë +ž&7ÑU{k˜‚T̽OT“Âm6¡,Å€«Û1ù[ó½ŒC„ºÝfÖ^„FÖ¹)øËâþïþÊ|«é6àXô6ËÂÓAìB÷F·"¾)¨Š@àßt‰¾*ˆ”BdŽ!�¦©¸[äÙ&«f™¼z$@tF|âQZQ&©Ba¦ðÀââ{,‡YåºÊˆPZ× &1tw‘zEI›žt ú±%¡tes»zî­¤o‘Á÷, Ý]GaSw×' ÐTõ$‡#eùc#Ïý{Ï¡õUîM!áàuɵ+Ç)§§0äôÝÏ”nC®Z GÅ9K…3¥ÚY7z•ñvQ‘D»Þl¤BtJ¿ æòSX˜�ÚýÇ|±wy¨¹‰PE»[ÝôV!?Ô@¼(û=M_îÊr%³âöqq,pª§×á‡ng@YÞ¡óª*y1¤W|¥v >`æ0Eîi‡ßÌBuE­ëe*s¬4YÖ5ðÙey�LÈSÁ?=D‹ÞÂK¬8Ì.9<­Dô­HÞ©,ÍXnÕõBöÙðL~àjgi²³j´Ló?k +7›"œ§×î=Ï«ļXj+"¤x%m]ñÁ&ˆ̼2GU^¨¦kXÍKq÷~‰Xâ•ìrnñøÈÍÛŒWÂÜ¥PdÁKÜ îê™M�˜Âé$«€ÚÀ\ÍýŒF*Ê<"Éåöº*4ÖÖ M·Tù¢˜Î­€M©ÀÚ4=1‹ ˆ´e*8˜~ÌBtw•Ý6žJQ?…�M÷û ½.|€ÞÑŽºzˆ²ž£‡™�.ø³K¥�—´½œúIŸÓͯ°@”–V™ó'Ïô¶É¢b?oÖ…øU©P;GðÎþd]ˆÞ²H‹t9z’.ÇOÒ…¼t2¸HÒ¿Ì“t¥Ei¼“†æ é2/š‹t�gŒv’.Së’.«ÎXœt™÷óEº€œ,Òe«†:é²â·8éÍýBº€[;IPi›t¤z!]à$£œ¤‹ ¥œ¤ (Ö'é‚ñÔf¼,™7¬EºÐ,gº�.àZOÒ”NÎ5AtÊ…x: ×T­^|k7�E·¦L¿ØÖT~.²5VÎ/®5t ˜ÖPÚ/¢5V>.ž5T>œfuѕŲ:íñ$Y]õÅ9VW +;źDÛíãüªyÓ½Ú„M¯]G'WU�̹UY±èÔj•*¯:ʉUYLÅ©UV:7ÈÞÚœX­`ñ*Ií´*²b}môjÔg£X»N^Q~3åbG1xbWÀ±º¡Ñ0N¡‹Ü굩ª¢£zÉì"——rl«%äŸyÇfÙ|TI¼2‹Ë1cô™:�”%$…)8ŠìÚÖF\±™¹ì�|NÞWáä�wAPÈ ²†Tt’=c)å­Wdüjô™Œ°´¸þd¶1»| šŒRÓ;J‘œ•š†TgU¸‰7ëæ¤K‹]$‚8W9@'MÑß– däb숀2W‚£…“Ê9›jc±2�º³» ¸ÌÇ´}øð‡ôÅ•ø;=÷š¨ok+‹LÑꉃ€6÷òänA^F5˜ž}D,¬å$<3éó¢ÉQ‰í�LE…±"v+°÷l9QwgL]žªˆ˜�ËHJÕ™l%]ü�näòyû`üˆ½Ÿ ,ù�ÓbU²:rµqÈ{ü81)ýt\}ùŒh†;¼2`T&ßÎÁ™WCÍ{ü¸Õ�â�ª!›Æ]mT&FnÔ$õ?6Þ*<à¿$ïíåûÏñøùMWµ‘R3NŠ*_ï×6kïðEçdƒS¤ú»�—Ï_âñöåøû�‡[œ{€w=͹NÙó§.E0SBd©8Q̧AÞãÇÍ"\cn¿¦LÝm›Ç +É"Ó«¹~Xx<¶³öÂò­E¸§=Íf•#=uÁ‘VþŸ†U½]ÕfHt¸¡˜MäXcwª´O#Ceb½ƒ�Ûs/>>œs½äõƒnùZK™éÎ º_°ÂÞjCr ôâmóü]M®ò@FáÄ*.z-¥Sö@=®ðq{níúnRÿGÿ?G ¶�Õ3 Ã{•¥"Vò£J§7‚Š7u§ê>ѼöÖw‡\Îÿ³tø+–¾?ÊvñB÷-¿…à·ü‚ßBð�0#fª20º¦#—ü|ß ¿ý¤;_>áÆ×7Î^øw¼½þr +qËZ™‘5xÜì—Y6a>ÔP‡‘)'N«|�Ù¬q䃨œ§0šiÐÂOâð9šÆBã㔋ٳ# +§Œ\6~Üf˜©ìÝA¿Ï�•AÍö¸¾Ô}=…rÙ9�EÎi`ÆLA}¹ 0 yœÕ¿ +"à{ˆ›3>*´ ï`ˆ +<]B/Úˆè˸­¶q$ƒ‰p)fK¬qÂÄÄ‹ö†Ytd©Ü‘w© î0¸°9;.µÈp½,ô¢×´«AôØ 3Ž€±;ûîlM …0q¶5RUm·ÿ’]îHrä0õu +] üì�5÷ŠP¬!ÝßÝ— ²ºcÖ™iT±H™H€�I]PøÊú~¢»múÁ­�'ð žD8¯’Èø2�ðfóäc [(Aã6 :©‰ç®AîýØR™îÏfRî³BžÖÖ® ¯l&(NVGõ‘ lE¾x)ÙÓû‚™~m¢‚ÆÕ4uÒD i¬<$C–‘¬Wåòa¦dMÊDT3¥\ÁOªÊŸÕx „Qee® cîø]ñ¿ˆ€fÉš8²óª¤¤g“�ê²=3XDüX»«Žï/rx*á< Zf›6«Àƒ�»ú�´²A+šæåãª-À=ä"¦LÎSnQ¤Àˆ\©¦J(‘Á+F¢Ôl ’¡ƒ²EAêMÕR×Êôʽâ¤Úó‡}Iúç¡2½®/›…¬éŒRÛf$ Õ�nÿÔ&» æÈ"•ÛÅ¢‡<‚5ÜIÑÕ¬«éV–wñZðQQ²ã š²j5`™<~ÌH õ)Ððºê¢ºr)xu<бÃ]³DeoÈ�_IJQ$%õ© 8Õ·p¹MÑé+þJ¦ `ÇS +B/B®m)�8©"¡ÓwS·5–s¶O¹Ê4ª­•�÷êÓ±÷èÍÐmÓùz"5‘v‹ _d±.ïGf´.®½’Á>•Hqdl9ˆ±ç:Ÿ�Kt<’Eh�»2˜Kõ–´ea+ ¸'SÝõã@ÍoXœ†­A†[À"¬«XÝ]:j™X9ÎŽ +ÆxvÍ””ói§a�=‹>‘zôÇR¢� YMYÔJ„(•Y-œÝQyÊ&ºé} ˜æ§Á‹=R J-2)tØL´ÐLTlÎ5lŽapUæÝŠZ$}uƳx6È’v Fýö+¿Ùv=߉‚ðöô°P�3jêMÛ–ÄÏ‚¥9•Ò�báü‘gèž@×:שÌ�r¸º����³«»‚ý™äÁê£]Ám“,K�ú¨G×Ã'`$wa8ƒât™á­šºGŒ.Eð'[ ŸIy=íËU±»Û™&}©5 ø’­�O–\«_3x¡}4çTêâøáAg£ÀYù¨z gU¤TbA C{w¶éÎ몙»¦¬6´}ª"Ô^�rë D-Wò\Èø +‹åˆ»aÝ嘆Æï¤°Bº‹›uô Ú[ó4Y&•»]#ºªçÍ0s57N‚(Y[‹Æ +[`:(fÇLBî$>j|dÁjfÖv½*ÉmF�lç`7LIô€žT«`êvÄkj̳�AT}è£ÉL†‘•ëØìº©Ü.“]£é{Ð4¹³6·­tˆë*„ôià$SUã1‰äf˜‹zT©‹º ¨vk„jôÌ€ót•ª;ìJ–yux…�qkýÚÕb¾³B +pÕœt¢ªÇ×¼í`¸I 3ËþKö 5=»¿*dºQîr3²¡ùÁˆ=Cç3s5:ö+y¾yÅØþlxDâœ&vÛq +uMßá£Æ]{Ãý—Ck7´××È­}ºfDb<4Ýœã-ž6�ìûYàðúÒ=4<�É!|½°ß@̈£™râOï!TÉ z�¼Ý+ù›Ÿ TãîŸk[—wÜy­çÿ0ÜWum[ê)Ò_©ÈDðpº1Þ"vêÞ +zWãZGti83ëO_~úh˜.Ä™òû=Å]Â,ù´‘®ƒÎ|¨v·,>rD¼½\·ns�ïžD ^÷ÔP$Û”°2o�¸â�x&E3$Ç Iµ +»9êc�‘I‹ÏƒÌôíØ&Pk±1hŸáGqÔL­XO“bÜY-ftÍ ž­Öéy ùÐm Æx$Ñòe!òŒ\¾ïÓw_5ûÀßCÊÍö±$àÂ☆ºC`ȦʗjXørgê.u!Ïñ5†qÑ‚Ë×òÊk±~û÷‹(V�²Ó‡ZÄ~k⫸gé¸ÒÕ)ŒpG™2“£GÊÓ9�ò`øÜŸÓ·,§@&~nO +;¤¬”»Ý2\":+«pD´o¡&éþøynÇÔpÚï'Ѻžý4ìÔ{˜ÜYÇ‹ø} KžÇPìuC�c" q~úè2ÿó×wþý'À >Õ endstream endobj 140 0 obj <> endobj 141 0 obj [/ICCBased 87 0 R] endobj 137 0 obj <>stream +H‰ìW¹Ž$Gõó+â2:ȸ]õ.d-‹1$¿ ÑÕHýÿÀ¾GFfe 9:5è*²âàñø‚|ùïkxùÏk +ßýë5l¿l)HQ›†\ZTÉa?¿þ´ý¾n/¯ŸR¸½‡ÓPûßøŽÞoøù{üüóûöK��ð'¡õØr顿˜ªÌp{ÛøÃÛ¶§X2öö>¾ÏªAb�WÚ‡âçn\7Ûù6•µ‰ÇÜ6é±ÖZÌcàT±¶Ð£–dÆ6[QÒÊc(Lƒmço‚…ǦŠï×ónÛçígDàÅÀÝ3ÇQ»>{3$슨á#Çã¼(câ³Ç>Ÿ#;v×¹W‰¥Á¯,1)Vj‰sâ3^yĆ4`ÇÒHE\F¸o»H¶ŽzÈ0—FŽB‰ +#nÛغ—€7û:£Ò*ú›‘¡"¸²ÇÜ)â¸f7#:ˆæ^k̈˜q¤nbCì3ùa项?4¥šI®iHÿ^pé ÿ9*ýÏÈ ¬ß•¶Q®±«G ±C~¨Ñá‘ÉDÄ©2J™npGƒ&ÛÙµpÎâʬ±Ù eÝ-v2w _®hYÎjr)ÓäšŠÉ +rƒÆaf'¬Ä/�EÔä’«¥7·jr*†fà°1|p°ÑqÈt‡Y €ý†wS¸²41E-bPb´! +}µM÷¾VÛPãLÃ4mrb^\®Ü)Ì«Ç+7sšº"¨*ŽÚârÜ4›û-Îì;™–MÓlŠÕœj±¨&zS“%»U¨_õ‰y‡œ“ZN¦¹üwÏÑð|¾ÕWTž…8™H?#:ýƒõâ¹C|(ê$ˆÇP“¬�,¡°«axò —ŒOX1<Á‰i$Ò«e³©9\�â¨(L Ç,+«½R¬jË ýFe̼¡�™&q!ÐÒQ` {r�šì Š¢…a3×sv«\ÊHõ$0NA‚5?(ƒ ;ŒÒpZ»RN_‰gz‰´NeÑ4H­£›eKt긟ò┽çØúIF{#¶Ê!ÞNkOnº8°X¬]žh0¶<Öì=¡œ|Epµ‹3Öƒ›:ÐñD^nçÉm§l´÷p숭»VwDJշا,}ÇÊÉ6üRÐ9)’™bÈ;i–G!¸!«•Þ´âäPqpdr¶d¥Èª€}\�…9n�:Þ·0IŒ# o�O‘<À¹¶òÀ*dµz?Á M*_{|;`)¾bf1¹ZñPV½ˆ»q+ �´Yš×ÓìÕòTÈ€" ‡õ5q»—ãäJd6›UÈÆÜközŸÓ+Üá$Ã’hˆˆ8ƒ4®k8‡Hxp4Õ4‹¥ ‹Èb±ˆŽzå9TD9xSíëÉfNÄ@&©9»ûÀ¬0 |z1�u{bt�M{@0¤«øÓÂ'‡¡­é|¤ZÏËÌ®ŠÏš#£e<ƒŽ’ZHÛ|1€©ä2½Êˆ_õ E³ÒD§VLÈSxd‹¥ –u=ºÕe �¸h¤ÙÀ!Uà;Ï‚œj1¹šÝ`¼>MžÅÒM#UÀl/0"ežEÈFÐ|à{_;¤ù“ßé!äDTó“Õ½ñäÜ95Ý[hÌNÜnöüŒw!<\,ÍÌn©QwH››7Äå<ÖŽå0Ý0ªEQ(@šÂå7Ã2[á¥XŒÈ-Å>ð¦«`ƒN�—ˆðwÉEBez¿(&ŠÞ™· 'ÑÌŒ¯ëùvt(îK +[2€BîXÇ’ÝvÛ\4[îKXvú!‡O>Ûö0_B”š0×®WŒ¾Øü°t�C² </žesâñ«uÄÇF`Æùç+wl(—±¡ýÎØP¯cC~¾¹ îTº$>ÌÛq�wÌð�=+ 3¬j +)‰ [µÂ�D�°.«•zV+³L–ToõÄ;ÓL°rÄ—Ε¯¤ökçÌžº¡8˜¨ÔB<Ë÷C>\`sôCø +g_¾ÿ”ÂÏï[eç6ò£˂Ց„Ë×ýº‚}ï¡–À—¾�Y‰ÿ·í»Ã˧/)¼ ÿþ1x8ÙÚd¹„s)NÛ^6”ëòd¨ Kwrb ¿#Oâ}ã‘õÆà�g1Ù˜ƒÈ6±CrXà+w£¸?GªÅ‘ZIø%=Â& dÔNG>+þΰŽj}Ôô¶�à°Ý`3L*p•E£0ùYFô‹{¸œ¾ÞpûÆ1oi3;dVÏ~‘ 𘋀öÁSsÎsü–ƹÕ)Wá{´d2áÛ¬ûEKÔД#ýÀp%\#g�·Qò´0]åû6ãÔr¬FØŽs* Ÿwàzd]åcMâ´ƒ“µh;—ˆÄF% g¡Èì*˜€ýÈÐphT6¢Xj0ÒËÀ˜.††Ð€w�,Mš1öFVŠñÜZÕ}Výmû ZÄL…DÎP:اY=%¾|)NŒ˜àÅϺS€¥"ý½Æ‘æ…îà>îËTUœ™<1Â+Ã8,¢¨mC$"x2ÞÙȃuÍ}`T!P¹•(rr@]j0мÊs�XµµÈ‹'rœÖª§¥C}Š@ã'W 8˺ÈV¹(xv pSËþ²«É�æûŠý€\ðŽ]ý +'ÖNüÿ*÷Ž´v²+H3$4º›ŒžìMµüÈA*©÷dS}³OhÓÆÐñ-ü%M‚™b Hñ¤nª!râD6hpÁàuEc‘˾ìW†êjkñò;ž^{ô¦ÖmÁùdB5‚(ì"¼Ñ—>®}Ó Ÿ[èŸi� ~#;i°aäžså+¨%xý("¡�ÚUÓàUKB¡Ù[RÀÙgª»¾l„Îgx¸ Enn {]åÛ€‡®­–€uy_!3|Ú Kaͧh‚�ªð;ëý©)Â22€È*€0 +t-|D²ÌjNv{òXMðæVT¥Ôw¢¡»’hRs!Ù¬ET\d…s …c¨·œò®/‚ + YÝnñ Yƒ‹Ìްô#W±D‰u­;aŠ¥Óm,šS3jzã²Æ=y±©�d�mÂ@™õØr>¦)eSåÙÎ èØü$¢®ùÕk�ÿ)îáªèÚF©DtTÑ-JjÙ·EsXÕ&:GäÓÉRÒe0z•¤¬xƒ@B%PÖ/ÍÄî³Iw`x¼"›U-{ŒØ¾µú � +®C—S1™‡lÎÿ^¬Gå×›îõK “*@(½tmJwðSÕmùÒcµÁåK%œ¶Q=LãbÀ� \E®>è ‘—æÝ�´Ð0×o˜¶†Ï…Ç2 t�6žƒJ@ÜÐñ!T¥ÜíÖT¹M‡W•�\H:ù8¹èךe`ÎA¶ jGê¡ì¡ +â2�¶ó§(ÊØ¾ nŒ/&¢È/ŽKÝ:ñštƒ×liC©B/3eÀ0¨'Â2·Æ\šÐòn˜é*úÝùÙöᤊñÑnªR ^²>!z•ÜBmAW{!'pDÓÎÔ~Nªôu‘<õ]–ðΨŸ¸Šêó=ñã>‹rþVµm⎜$î\®­�&†hYÊÿÒ¥Ìç¢w–ºòÈТ«3MWƒî‘w+•è¶œ·ãL2Êøa@æ;›ö{ÁäˆÜ�èÂÙ2@¨Ó{;Gš a¦ÿø|´Ç¿'õñ’áÂÈ2�šeðäN…*öyÍ}xüӤǧfBéœëiû9ˆ%ÔgRòüåiAYÃ+ëv.L¨ß ]:iv�X´ üxK:ÿÿ‹!Uå¥mQQH¿“Ö„‡¤„dGíæ¡wU_ë°@�Âáø[¿UùVQ‡ÄY®çïîpWªHçFé)vKd¡-‡%ð(¹).ÅÁßåC¼.ϤmŒ0+Ü€âB#nû; O3HǰHµ²wsÔ;JÃćó Û2¾;¶ÔšÆôâÓy„D�ŽšgM‘‚ÙYÍ�.AÎj¥äðïÕæˆ¤¥«‚ë º|Þ$¦n&ºhèì)è§Ú‘ÀÙ‹ Ý&T÷‹²^œaö7¦®Qgç±}µ',গž<±�õñöS¤XdðÌ ™vhÑûŸ¿_¸²¦‹i ˆ`n‡*!)ãÕ +='ÝN¶Y²€xMéäæTóžCÛÎÇ©«—*Ãéoù‡m†‹8Ë¥õÐäp¯‹óÄþXÕñH¦œ?òª�!k?¯XÑîõh�êÙŒé¬ÌŸO‚Ž˜¹_ð�¼Ö9ª·q¼yŸoß¿¾ãß_üáŽå endstream endobj 138 0 obj <> endobj 142 0 obj [/ICCBased 87 0 R] endobj 121 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwÒ¹\Õt„Áæ -‡*£þ? 3sFföÔ €¬°XH_Í�ßþñýøö÷ïåøË_¿·oß-ÇãÇaú;~<þ{ûö7Üú÷�[9ÛlG+~Ž˜Çò8{ÔcL;WÇÿþyû^)Óþvþ®™+”³÷uØY[ÝßÖ1­§ï~¿•ÃlÆa½¬ã®K<øíà·\¦œ¶¸¤ca-ù;¬+ø³c´8g5|kmž³­ãñyã£ÏÛ½� [ÀG‚Þø.WÞ?[›/hÇãög„ϯö%Ÿ8^+øý€q|Ç+]™–°½n>-ú{ÀË_ð¾uîúúý£3½Â™RáLÀóÒýå ì®g‰ÁÕí¸Çéxj§WXvvkØÃñ�†2RO4¿휫^àqëg QŽsF'(Ç<‡u®8ÈÛ:c÷Š@€iQÐŠÊøl„¤,.¹±ŸQ×±Î^¸)++"w¦á-˜¶à&âÃ[Ùž§µÀ« –çõãÓ×…Ò'|±"½íª…ÇMa _ˆÞšÕw¤a¼1*Œ°© „íìÞéK‡›ðÑ¿ÃB_Gœ¥O~XÏ^¹Á¼;ª�Öo\+m�MÆ‚A'ƒö­–ÑèW˜7xÜæ3R�)= õwàH=QäðªTnlqZi´ÃQBÕZ $×M€ýëÔÎãûÞ}72?C‹Â,¤?‚Éã†HïIìŒfkxÆê[ÕõD¬œÁdnŒ†m.ÄÀܹÎâ:ìn„‰.«z +�º-U Ë ‰œ4ˆþàÕ8_­Øü¸òb(?~ÎRöÇ[#Ì@Ʊ��`’üÞÃ@ÅèµÑIfCh vWe÷Ú<=Ô¯(ø.Î:2ÅõoQaµ?‘ºˆØQÙ 2Ç9AH_oì/tƒþ^7”�Ü=XehU_‚u**RÉý�ÑjR—é +ûÓG½® 5ÈÍ6¬£Jx2îh¬ÍÀ›Êƒ½¬ø«Î‘Þ®:YX¨×q<Ýz¼¼b¸±Ï¾¤d ˜‹Ô„ˆzã-#åHfÉ@ôÁ;£ãzªµÐ¹«!Ò•�—ñ’S ÷Îk¶=�MTQGK°«ò�¥} +ñ 6�+¡ ±UõëZoðê~Ý.EEÇ÷±Òd&öRØd¨Ó¹ v…êeØý²Ìž¡ +r½g«ÆÜmFU�9»¹& c÷ä%d½* ±û¼ 5±ÃÇžðo+ + 4"ŸS(D¶øï.<‡“[™drƒÐò"×'-hŸûUï_n个\ëýFA_7ÈF-rû.r4O[c˜‚PV>öÁ1袔íˆ7”¹1¸t MTÁ‰Ä„$„†››T‘މi§†×’ ]4šò+û=ž&~9œ“äk¥ÏÂü�±Pêà:··Ru,xRÓ‰–àX�y�úpW¹¡%»žƒЬci~±-çs‡¦n Î!8ª¢kžr4ž�~¢H1¶LUfZ¡Fòž‚ +«WÕ;UK½ª3�g£'dýŠÜ‹ì¯eí:EtºR²@3Ÿ·]õ÷táCSÒÄZ•=�ýŠ(�4~!òáLê ܦ%ŠeHC…ܨ™&ŽYo=‡µÃŽÈº.ÓÃoËo™úÉzq +K‘Ç]¦¯jaÏBÁ't˜OÈêý +IB ‚%¾ØÏÑŒäZ|M�/C¡&£q/¸ÙWNÑÉç> @Ö69y#8?ÄꃓM�=g56¬âö>D1î#ÃØ»feïIòÑ7ån긄é5j¦ˆó 2°ä,”:Ïp/R2u„Q±f&�Òiu#X#uÄz©¢Ìh5¬V‰’¸š¨¯²mö5b½¦ø�È´göÆ�N㘄 + ]VÒw +PBWâ8B—”nJq´ T°˜XNnÉzeÙEp`¥"’EhÃ"¶ý Hb×|ÁùúeíàHG€wŒ‘Üœ´RÈ ØÕ%–ë”AÃ$‡LmÒ¸ž² mS)…}1ñ©Á„TŸ*­}8Õ"XµÅÚ[R˜(¢²Û%š„fdt£„'y^ݱ�þöÖ;–LJ«wJ–23—F¥��f—gŸøºð‡°^®P\Æ‚èªÿÀ‰ÿ* ·«­½SÍî)ˆÂ#Yƒ^B0¦Ž2bþäùƨ\’ûÞþ§þ£RœN‚daY ,�ñxWŠh¥é[)6)aŒE€­B$Ñ ÔJÖÿyÖò±ŸZnV!¯»9„Zc÷™#2‚,Ô8­6bí»”tâØú:4µºNW²NŒO=›¡ MBÏʾ¤Ä�0g¾*ˆàÏq*«¦]*‹µYòÀç*êBAÄäÝSÃ.–pª^¦æ Kä»Î¯œžœÆT±¦cÕu§Ï¹eñhóyãÞuÔ‘Ï.ò–¯›4Ì“M#ÙRmOÍà×5Œ‹ý¦:0‡w>S%o5— õ¹Ïj–‚¶”~ysÏã&P‰Ô«^èé].«MšD&¥FE$Ró8„ íè ®W¤89I‰Àv‹�gDxè¼æ&�nñ 9ѽPèð¬‡Öž[\µ}|“D±M6›¥"­1@Ó•Þ™4 4Mv$ÐŒøÈ÷…ÀÒƒ¶­Ö9ÛrŠMv� +Ù¦&Ö6×!Uå Z1”§Ž1“·ÖlkóÐJ­Y�¥[¥ ‡ÜßÙ@ýËqÐg‚\c»©²ºX�-žðñU¢ÕÅ%ZC¿@=›ž"­Š´¡õEˆ�Ëæ–@¦¨]rñµK5=Ç;O$„ldÒ‚IúOD¿pˆ¡Ò²1PB&�ÕÐËŸÄ~ƒäâ©‘Øý�Sú‰j§=¯WËN$ÊRš:C’":ç®Ñ®¾r~ðÒýb@‹Æ%)"=²¤&‹Õ¯¹‡K +…êLÕ 9g +ÓP»Ãh4@g©ö<¢�ŠéO5å°uF¼´70¥6E´EV™g¤~ M Y—œI1Ÿ˜vhYÉó[Š?�‚ Ç7DDÑNä:Æpu1ª—Tq +äà_:ãXŠ¿¥9ö\� +ªŽ K)²“ñIåÌÈí…° 5)€þ7(!ʦÁqì×¥š½Ï VÍE +Ò ¨KO(}é6§æÞ`"xê ø‘làbï„8 –ƜԃLdFjCõ R FmSR¾UŒ!\‹Rò`õ¢¸l9¶œ×H#CäG²�‚‚Ö8ò]EˆÁæ‘€Ñ)£Îœn½p‡YDZgÚµùеYX “Oé°‘ŠK»šºÇEdSgµ¢Á�R¨ìJþ?ûe’+GsÄàý +_@BÎÃyÞÆ Éß0ùETwk8‚!à©Ø•U•É(¡6Ý® ¼¼MW[pN(`k}á`j•OT;_ñLÅoUœ§lÿpž1ž¥ÆJÒý¾½=©�¤ÿv�»îÛöjJÕô°´úÎk¦×Èéd¤:—Liã¢c{2ÒÌJŸÑ�ŽÂîí¹Ž‘jâ}âgÈ:ÖëMØÖ|•>²O¸ŒN;]FŸ×ƾ=;ÓV¶€ÎJx“í�Ì[ !ª …=èë%“â¡Ë Øý| œFYvaoìÁR«°C6Ó‰ j1n2˜4,5ä³nÚvOU·½‘© ðf>”½³ÅYû!žøañY÷~þÍþü€i›ée± µÅ^Êøw»-5­„áß{~ ²2`ÆÁ?C�߃$ËפZ�™¼‡‰$ŸË<[Ø×òËþ}½ø}`{ó%üG©/Ϻ ˆC~­ŒùË�UH”öƒýW#¹«Æ $jÝj�‰öÕýcVÚLX½ßÚ‹ÆSÇÕXâ�%­A¯b+gÈ‘G‚Pc/ tƒC±53t’Æ MUWÿÖ›;¬A–ôþæ‡Qg àÞöêŠoiØÂðˆv¤NŽûÿå¿å�•a=÷ÓѦ'äT�Sÿ5u�þ[œrÂÌXGÚg‹¥lö&ÍÝûEŒ«y�©-^¶—)ßÂÉnæ¶ìïÐÝ¢=E‹côš×ŽÉY+‘oè.Âo‹‘gâñå-¶Õÿ"[m¹luF˜Ó‰ÙÅrÒ7_ì–Ô²v^#¹A�Ùý¶%jI€^³n†!*x„j­Á5¥D§Ÿº8˜@`Û©ãKBª#ˆìй Sõ²Vs¥/‰kÜ5´l$óP}ÇÉ–•±`‹ÀÃUnèÜNc‹dܰ«Ï¼~%*¡©t�ª©¨ÍJ)ÔÄnúp.·£w¢ˆÆ°t�æ¿ w¹àaÞ5Qæ|•“Ôc�õÕb§-6í7†K†²xº`e‹‘¤@póBà ïÙ/®ýí;v¢(-_[ÏL¦¾f|PÙÇdÃ.5¢628®D;�>´E*¡Æ˜Í³«×$Åž\,µvj f4/\ô]¬Yëz€ë›ûà-›J/®¼³Iƒ Ì9>qô j••~1î†v»7|½E ~°–xÔ“£žêU£;‡³#\#uÁê¢l8S–??ÔJj7ê'"($wÔì¸sË—à�[9ÿ¹L^D;!ìßwåt­ä~ÔJ–×�5èvÜq¿"ž•ZZñÝ=bq˧o�Õ[ÛÂÍöÝg±<8–ÃT83gP�Œšâ�–ñžõ¤TZof ä%̃LüÓEZŸñå�GS˜Ç®ˆO‡.œóÙã»îyÙÕèÌé„4Ð×r˜lå’.Ë Xykl“öe»6ž­jÞu{¶t�8›Íïóƒ -`©AáÞ¿ømÐÅeúvÃç茮‘ƒ©Ð‰<bœ…Ýw¾eT}V÷SA$kQÐõ¢:íú”Ÿ*öõ»C8VF9„rö/fØå»ì›Š¿5ðÖg�Ûí’»3)ªiÁ(³Â&Ãô1Z%X ¡tÐ �Z|!#’ð6ǬœO¹`'c‚?á°úø°LL¼ßÒx*Ÿ…`ÇOÙôŽÅ�X VLœTà\y‘E`:óúÊbÜ@ÄLºHR�¯Žºï¾žc„’b<Öü>>´6S¨©FÅ®\Ç×–|!po€¤öƒþ5d¼]ØywK{y¨‘Ó`ë=¯]ЫÔDN¢´ “jÕŽ¢6´²ÏÉ xr†Šë +_½Š"¡r¢“iÚT¤½†gº‰ =o+’ÖÅñtétǽrþ`|T‚ç’ó̺ÐÉo N0úó…!d¨�` gÔ©;¶¼$x +"¡JzÙI´MœléåñS&/%Þì$ûåL·ëb×GCãÚIrFéoïè-#j¯‚ ,6/‹ïú‹vgáEíÚ¦�v ‰u�¯óÙ´R»¶˜@6n+�>Ûi÷í’ 6ìöØj§hõ^b0ÄâèÃ<ö¶ÛH={%@…õØ»)‰æ«ö�¥®Ç1{Êõîá�nÁþ…ù*¤ +Ö¼4"óÚ¨ÐDØýzù½jbo›V׉?³§Mø#¡Êá¬R;áñF÷µ�ƒ|´®R~q“ªåºï3&¾>O(]χLF`•¿L_CÌÑT3¢VeéþB¬*Ù ›Ú3©ƒlVm{Lû'˜É6i¹Ä¬êÚ]Jרý³é¬Ì•J’ê~}ˆ‰x§Ó-~Y(�µ¨ÏÄN¾þ 3�RÙÌúÕâ@m­G¯tÅ +×}Š»ÀóWu×N· +'€JqÚÞêk»¬Ý2{M©éÌû�ìm¤‚>0¦ÇáOOjV>íb[ÄÂüºßc‚€X“ÄVD• 8h?´ªN?…uµzè…X�>«O1€Ø€j“�¢¯õ4Ž2­iÔÚ Áål�¶<ß"V˜dKÊÅqÊY´°{cÞ,Á¡¦g½°Î²1U»Uña!� +MZ¦œÕŠ+¿·Z/B9GzŠåg=Ž—yU{™’?„£ÒÕ¿ý÷ë?U}�Ó(íœú£¬m~*�à±_8÷ µ[oôo“2£ÐÖCj„Æ3ö©\”ïa"cµgÇù ö§ŒÉÒ&NxAI9¬ÄwEFãÛ +}®Wñ®O¬¸ÌÏõŠÛúăiï½~…Ç~áùýc瘽_ Râ5öryiO,ØÏ¼oT¹g1ô·TÙi®T©¼AetÍu±³•Ïæ²ßɪqEQþäyE¿åõFŽâjß'Ã�íÙN×mØ+ñhþ½ÁcîŠbGáPÿ~b¬Ôþ€™Ä+TÖ7ªz�¨Ï±mº{¿Ñ¤W¡Ù±Ì~TýÄð‡!3_¨Õ|çF—(,:·û}â‰'ÄÐy*n@ºqñ—ðx¶l +�Z?Âckçužs®y¼`ên±�(IK †ÏR®–øÆœH, ªCÛ\(Aô%äD dSìrÝr·ÈËqoãVc–µzÐB1§]Kò<‘¼]�ì¾µ=åZLK®¸„t—î$_Ý�O9æÏÖ¾#º:÷—=jÔ•ÿÊ�ɪ@§qG�á«æ™aRg¾ËwÜ¥N�ï,Þk!„„gÎi¸0+Ø=V+äÔö[ïÍÈ|î3]ËJ waû gÝ™�¨x–`œtLÛŸÈÎZµÛ“Çj”ò»Í}h®êKÇ·.£SñSIëmžG6²9®µÄ‘sd†OØóÒ‚6P¶³a%½|V|Y¾¨¤5}§tL¤o/jé®pr}"Ì�ë(븵Œk©9ñ�÷òW¯Y›ƒ±ÿÏ ç…æ d9<² ÄõƒæZ¸F¨±™v©ÐÁpä 4 Ø®ÉhH &ϼ°Èv¡»ÚØ7UàWžŠIJÅ39òh‘ +¾àÙÅQ�±²Æ½ ÜÔSÀq¬éÉgh]ìÖv²‡üê`/à>T�&2¯!× .œ .eÝn!åÕ÷.[:6‘ø FõÓüÏ9jT‘é¢îQ^5™dl<Æ…p̰xÁ÷õˆ$SÌZi€Š«ƒµÃ»öIÊb„Êcš|3^…Ñħ¸Ø9¡‰ÁzàÆÐlžuÄÊ û^­æ7>ÍtIKõ5ìÓ¹*Ç“Ý=ñí—)Lò`ÆìÕ=¢3^ ¹à ;ŸXrïØMhÿõýÜ Ûܰ÷Ê49Aþ8“á¬=úkȧpÏêqH7Ì?³¾V5ѵ¸ç&¸Š Zf¾UíÄkDªA•}cHaÍ$ùî‘„¬jO½ûûÕ’åHn÷s +]@ó€ßóô¦mo|ÿ÷Œˆ%UÕøÞTJ&“�øŒ;ô™AôBxî'+C‘z?Ç@Ld!¿ºîŽß.»evs‹‹×‰_£˜‘óíTU‡DÈ>‘º]ßtÊvߨ ¨vÐ=�Ž\®­V'»NBöÓ«�qH!Ÿ±\Ý?É…«r p´?·ŒàZc–›ÐX9W>QM„bWÑ/jQH×»ÍáðP´k9S ÿ€N¦ó;$”�ºÅ6ÙÉcÒHêªÏV9KÑÝÙ!ZÅí5™’måoUäN7…' +Äùû‰’ô…l~uÔ €a·Âö,fa.ÎÛð›RÕj_ñF®€Kø? þ# vê­AO8@7;М•׌Z1 +=§âè!àžÄÿÅ«Sj–ÆÐaïÒ”Ð\*¤ú$²/üJ\ç¯kRºûn«Àm²ÀPÛ¨ºFè0Ž§È‹bËp¢1·Çå7 øx¼¨Ï7g©â‘÷Ëo´ÃÞ0öÿž«6Êá®Äpôr„Vq5•\pZ ÊÉ‚ôë¹þ Ç ´¬`¤ß¤bùöÎ7v2îUF]6j¬ÐËE9±ÍŠ@�A >*ë�‹£?ÛÄ“A#�¦$ñ’g@N`ïO‚�,QâIZ“—Ä6HJ¢ÔÕô8>rÇçnœ5‚�ãX7¤¨hzrý©Ì0ù[¥ÏŠÀÁÑ0CÀ2Õ2§ïJ¸ò0»ÅËîZÚfi±e°NË™”®ÒYø ‹§3ˆ!¸wB,Äs +'„"/ ¥½"µ0?(.ÃIÖ¹ñ„�G`ÛÁ6χ"hŒ—êJÁté-Ói°�Q:Õƒ«âb!YEÛV™,†h6r +’VMôT¾Õ%JÑÃ…ê´�D±V½*DÂ$]V¨®Š*ÔÎÒfL:«x’ýØ"ú’éUˆŽ³˜ +×oE{ÀxÒÕýàN¸9cáQ´ŽJ!¯DǼâ¶Xô)ËY� ô©Û•µ‰jÇ=%·CJîP»·^ -®Þ[·¼JaVI²œÝ¥–¡8¬ØÂ—¼ÅÍž®'™ÝdžDËâ›!DYRöÄëâ wƒ~¤2°B`Ñ?'jƒ°°àWiæžD°¸<¿Jæˆ^y€‹&ŸÈ"rmÜ þÎj�Ç~ýû ©$Wyæ§7Ü\ÿàÜôT–< Ê·¬á„€g$x0__ÿç–F“€½O&ª¾¿W¨˜j¼Æ÷Q½úmÍ÷Òõñú¡Ý÷¦8¤á?¶ÙÉ–‡7ñ!&–IL8µºÄÌÞ;ú (¤gYùR@ª5*Ý®—‰„¯ÙY\6>CI(ô5¦z9¾^uøœTCܵì+ÎëÞŸó¥KÞq—~Í$†wÜJ¯ù3Áö3ì<V/¿Â!çÁY=zö-hÿô©þL.ö½‚²WðÙpÈ€%[‰Ü¹N¥Ëgah²¯(ÿÅuÒ°íº6Fåáx}Nã Ý +‘‚:^»CYÓlñÍ ›âÚ䨔.z䯜à:õ!ôÌK¦4‰ýÐ�]ÔE5Ó„Pœüšõ1K�Á䂼…ÓMÑR~\sai¤¥°ÒÈãE9¯ \/ÎO2‹¯ù `ª‡n€L‹®òoXxÁN>å¿2èõíÖùlÕ aœÉzêܓټé#¼ ¦m zˆ$QËø�#Û;ð;rã`ŠŒuиÒù•’ü¤+„`{,åùñqÌ1ÔÏó@|ñn= ‘cglq8˜ l_§Â°½,Í3MQ“wBÂÓXD‘tIÆ.àa!/ +ã ÆÍ`Íz†¦Í#oñ¥‚~—D8®?Ó±Ce5Dñ4—j…a*vÿˆ„*ÚfQ|á›É!ÈÛžF‚íiÙMIâ¢aÊõÑ(VKÈ÷âk-î[Ž`d¥ $ÓOñp•D²4ÜÖ(¿�••gÃà€ûóåÔA¸ +ƒuÁ`ò”öq¤øV©hl{NpÊsÈ�ÃÒ`'Kªêßxr* �æKdã݉j—„ÜÌww~ŠW1¥äÙ»4b¶Ù¹õ)è9ô- ÛwKh„fvT‡‡(·œ¨ëßô›ô:9N¾£nŠPÃ>Pֽİ*ž²�2Q½ðÙ'¿¾�»·<ÅÉ&‰ž@:¿ðH(´GáS£†_ÁÄ©Z2\O5Ç„•jÔ‹l{Öf’ôÆï§·i>åštd¦1«/µÿ¡%1²çìw< ª9 €Ž™Ï4®ü¤–Ûæ©ÏŽüu³R±‡¼É�:ÁÞrÏ• +Ö�‘j $QúºçkÆ¢3\„FÔuÖeÿÓ ô +œù6áQçæ %nrå5oJrP<ö¼ét³ÈI®¾éŸ¼’Æ(ÝŽ¡dp¶F¾E†£³Ù¼‚Üt‚l..(s¹]Ñ?z&‡v•µ2zg™eMªç�6;Ã~ÖE™©o*¸·¥nŽi^¾ywÁÔòk]C÷ çÇJÜdœ½Åæ¯�çs‰Gô¥ÏS' h:�éw¨c›þ‘ÃÇQ ¼:9^—´Dþq :ÉSÜT#¨ò/ëkƒW˲H´É“€á?šdtI #?kr›.[…·xGÓÙ‰Kȳ¤™­Ë.Å3s#{ ¬Iƒ:»Ü’46ŧCv† ýå¡q%LÏÎ~‰ª ïlÄu‰]Õ›D»A‡D»¬©ª¢u#”6E¾7 Ã0““”Õ]n—‘šºlK~ ÓfÕ<~Ïa"F/Š X#0Âà´¾èLŽ“XŒÁ<ïqïœVQöD9óÑX]Ä#*mÈ+[bs,lÏ${×)Žôgð„[Ê�8û”ì嬮 +ÌßÅ„QµŽ%�QÈÔ?9Ê�‰¤åt ¡ ÐLBCÑþÿ?ካ„ñÅç�ENjÛ6 h²h.ïÏŽp^Á�5±¼z¹kšg^uË/C$–É:ÂõiXNC£,QemSÊÃҰ—´ŸOj0’ þʧ©˜ˆ`¬¦ãhûFS² X^Œ³ž ×A¿x2Í˺$–t}Ñr´$'¡ÓÀêöaÍY,Ù1{HÌÛ ””6*ü#šŸP�“eЧQ£žD]©FÚø cfŬMˆDñ,ä×r?“­µ(ñÔ®�€ŒÌ!3€tŠ9 é[1GACƒ½a0}®Àj!!ÜÄ�@Z]f wO¾J ˆ.ï6A)±„›ÊkC �ºyïÿC�ý—ýjY‘-7‚ûþŠú�®«Ô#%m�¼ƒg_˜™EÏ|ÿ)Õ9]Ý.0x1mÌ…Û'%•ùˆŒpÜ’[*xü <�궛ꔸcJí¾<ã‡Å"ögÿê0Éc5~¬l½¯Îâõ'3ЊR„Kó"Wu�@ ÑW6r¨mÜmDeœ×# ~¶k´ÊûzÇÏv•®8Ö» ê°ÛõtóÐegÓZx'q}V5øB÷ió°Ls•zU> –é¦ke(.yPîëâf˰U˜ZöÑ:V‹´Áå„ö •¶�­Š7cu ¢�/Ñ&bŠÄ*=^­'eCÚêCœ½„l2Vei•U˜uE«AWørúž›7Ñlâ÷؃= �)êïƒ[8Zû–î»�þ"c±J}ÞvéÒ<™Éˆ%Ý#;šGãÎl„ ×PGW#"}ˆo$yêV’Fb³á�½ˆŸ!U‡:" i,ŽÙz�j‚/)³N4æ–·E䥆ô¹ù{ŽGò±i”wü˜5u{EWÑ ›a{€EÊ&î�?@¸º\]qqØmˆ\LÓlÚ�¸ªûâ½îá뤢).]TÜ\a‰nˆªâÊF=Á‚ˆ¼Š8ncGúnšV”äœ×`%ð^_§�}mètñ¿ïê¾iåYwúÈS$¤Ðq.AXåâÍ sbhZÐiuIöÒé¹¾åøº-“SGìªÑ<#uF¼0½CÛ°?Z&›øRQg�ÂPë ƒ �Þ™£ÆÄ£Ù>Õ÷ML<êj¦¶¾w"†E'D ³E[UË`×{ÇQɰÍä徤üì‹÷ñÞ•Á§/ñ† y!A€ÞÄœ ­Éö§|bW•ß™vNÃMfP´É!¥Â�:±SòSŒSˆ�ºÒ|®€Z‰^ǬTœ’TžÄH‹T"½C~+wš*x1K꙲®¯¤ÊÞ;¦JÝÁ^÷wcqk-nÂÜŽ#c»A#rƒGe2é +–Á€1¥.yçy ‘BÍ8`ÍËz Hîû�FG.8#ƒGĸ¾'Ûiü•ûë2_¸ØÄц&J +Œêâ5µ‡¼ã�À2p^"|ñGÒâ›õUù™Ôè€R »ÇÝ:Œ¸”�›¯úâ“Ù@–ä…sú¦­FÑ£©ê›¯bN@1_êBR¹:EHÓ) +eµÈi±.QuÖ\ö†À‘Í—yÓ[‡5é¥Õ{¤ÂÊîT9¸m€� {®—brnåÉZÖ¡I=ƒ *þè@áW¶?þO�?¡ÿBJp�Ï•v@÷C‘Lç’®ŽM6wÔÒ¬Þ ?ù°²)RùÄÌvZÿh&½OõæRXi–Àlr¢>Í3O;޵wÇ ä)æÔ ú|wÔ·?ý`—Ÿ¾ãû¯ùöÇ_Òå÷ÿX~²”‹T$¨zFœ çâ™õ>d)Á×`ë¹âR ÇÇ‚`•ZâÃÐÛ1d Z.ÍwCâ3S`¬³ ˜Q©F÷}öÀíåÃ÷™aõó�QÇ@tÞw² ñ€Â½ŸuX÷ÁÖ�CoÇÐé!÷¡ýþ}Öá¡uŸ=p{ù0Dø<"‚‘�Qk)ö'{9)wæ©Mu¯ÖË'ôv +}.pÐqº¡¨µe\£Ø1„—£% ~ôtóÓÝS¨ª> ½Cá×ònHá@ +ì³"`˜Ø÷Ù·—CØ|"´½ääÇN%ûu”~œuX÷ÁÖ�CoÇÐé!÷¡ýþ}ÖÝCû>{àöòaè!ôB·×–0dvî¥tVùñùz^Ça8+;rcäë,yè Ÿ#Ж9òá€kM±]é'òÑáËÊëuÀgw:žX/¤Wv·2$Œ ¬÷tüy»Ø®-“qÄN‘ÿ@ÿuʶoñ}³æ{`³÷Zæ:áö²ìõçmÛqÕµU:õ�»ƒòÉAe9è³¹úd®=™ó'sýÉÜx27ŸÌYz6iÏ&ó³Ég¾±gαgÞ1?aTGãD;à‘Ô�@�gñËH¨C±Òì`\F!J3Éž˜³ËD�»�Êïµ'0Y´"WQp–zà(òfîÀ?(æd±oïÂ{üV-øÛŸÏ=ôßVˆLªJ°Že•¨ÞÐæñŠÑû8•Î1‡Ÿh�Lžï|EE‚Á¤àçlšúìW‡ÇæuÄx>Œve­¬æCe 2M5¶¶r2IWœk]½Î¼w!ÌëûQª+PxË4vèÞOÏ€¿¥ +>¼7þI˜ÇŸ‰gãO.&2‡[UÚn{%KrZ –ýdøˆµHƒ‹®>©t@Äô/´¬Òû×!:Â×¶.9dZ[Œ¿²¿n«\Óˆ¥Ëôª¥¶t# + 8®úG»�VBSÍ}K}ßøúfõ>ƒ&Îï�N70÷*<Í…xw× %O™¶(‰ G©ˆN€xðŽÝRCðaT¶/dºÞÒDhàÇ¡‡*ôµêÕÈämÀA±Ý²ØH¯t +ÎKüNHF¦Ã(ºÞ(Š�¹(m÷;`R`B+"ãT– +Ý6yJƒÑà=iR8Yºü]‡l§k3GK%�yô"zÀ�¿Q¢¸ýXøHV}—»žßäÉÜ×ÒÆÌÍ�Y”9ÿ´z¶¬x¬•�FçšmY~JlH8%b»:~Ô"q§ÒcL9¨Åå“þiue]¦jÌe„«ÔVe”†Ú½ö¸,;3½�”î… LåÂ\iñIï³²×ø\’ªâ•82äN õõ“‹ @âD´à+#–åFfxeê�Ø)ˆ¬?ä®?t}/ZåCé:§ºäÚµx9Œîê«ab×Â9â ý¢ kW)1 ¹0� ´Ý«Â*�/ñ©¸ö�(M)a…Nš$Ì,JäŠü†'P"¯’Ò²²FwÊéxû€S³nÂ)Oe¾Ã©ê‹ÔvJ@V—[R–«Æ�_‘÷*J +b‘G…»ªije^pUI‰Ý±_íæÑä8Ðß(”€î#ÁˆxÖ9có·UöŒVÀ¿#Ól6Iõؼ¼¥2š‹ïm}‚7˛ߨ& lÂÊM°oqÏl%##Ìÿô¾ßâlè!b;AþÕŸ0ÚÃ,‹UÅb æ't\W¥-Õ)Ì´(o`³ú¢óP�¦#-«ÍŠ>±D$Èça~“à:—É÷ó½l4³ä^³¸ï|�„v&)Iëï„“ut'¦5M‹AfKó~ á6¡"(ðy�öi�ÛaÖæ'&ëä_°éÑ“.nøZÝìÅÜ‹][dÛö5ª•l¢¾îÀL}9r C°’í“ ÀfÊ(›8™h‚VŠ/!1ähˆ>ÕÔï#á1‡9Ãõç¸b4¼ Ž…>âú…ÕaBë•7‡�£jó4‡³öݾÂB‡÷�'Ø5¸Ö0N ‘ãÀZs®…"„9æ„9›Fu¢ü,”YJ"Œ½*¿3äçøã 9…\Øñ°mq læ*Ž2ކÂ7’ÀòÒòË�Yž¿ ¦¢÷ ±F mX*¼6TÁÇ�p[kÍIˆ#,�ƒ')1FÝŠXA•ç¦:ow½Æàš�µ�‹‡è�ÜâO5Ǻ艟�0ÎnaïNçv¼0g3Ž8Çx­«‡!´Ó?¯p™`)_‡ðã«$$чËÝÊ#½—ÀÜ@ÞGÕ8@OAqÇÂWJiƨ%§©ôy8-dßzë܉ IÎ8/öØE_¶Q=½�Ú$©°±OÚº-¢ jü÷‡$lH¢þGÊþ‘²¤ì)û+eOÊpëo1…8çêtÍÊ…Ç#§†žäÆ–Ý¡'6•�ÂirÙWdýŠ=J›Ö1u¯«`â-ÂéîÔüòÞ/uÉXÁ/È�}` ¹¹óç'ä²+Ï3DhíÒ\Çïh£Â¬ææ QäÙ’��ÒÎ[D!¢™yÐfO]nŸI{‚ârï�rægBÀÚ¨e0žð¿•žô‚“ó³dkÄòS<»ì‰3w(MgÖìG|yílãŽÁo7Ê"~}êÓ!RpÀA¤ÔûMz(ø&�²¥þ‰GÒÔÚ(è ²pb Rà²< <Š}’‡šP$ˆÚƒÔÖ”í܃°§osÍPñYXñÀc9¢Œ`‹ä�À ßR¤ÜÀ:b¼Å}Ø~#<'<¡±È}±ÓO‡äÂÝ´§¹9Ÿ½½ÉÏæ‰Ãå�n€é úX¡ä&’7émš,#•à_l7d +½àeÜ{îRð†N \W/Àu§¢ÂM@;Å‹î€Jý�îì zÖ*)!Å}¾K^ Òa„Ìà³1�؃ïµ~mjª±Ç$åeèñµPýÚµê|˜“(Úa(‚XÁ¢ +ÚcGHÏSÏ2ª¦ûݘÞl\²‘6/òVŒ„"ì%y¥¸Äxç ŠÍÃÕ–-Úî‹Ú’LB°ÁL‰×Ña‚¦úa/ÑÆ +{#aQ& æí\"* 1&&²�{ÊŸ$&éÀ¨Áq£$Ôh""b¤2Ë{¨ Ä=äKPÚ‹‡fÿADí¼èKÕð^(¿ˆh%wîdÔã·kA;‚©¹Š–¹´«?7(Zå-†×`¼ùUÌÛ.{Uõ�”U /ær zX+ª×-O ³)6¦`ÈRî*œ3hŒ‚϶HdP&A_ä»… +vX<Òøí<ÖGU\Ó•9=H$‡?\†T ÓlѵÌIïØ{��s%k�ÎlÁ:#4Ð…®^Iv<Ù,ò©y'´P¦xh’ªï8ë<ð:ú�ߣœ+ÔÏ ´Ac§VN LéØ +ô&‚M¶06“3x{´©Û Ip¬0åš6^B[ü-%1¾ +½qeç Z…Ì€*HÖ\Å3‚ Ì;�S¸þ’_&™ž¥ŠIŒj  ¸V¦h +æÆ’Änžè i5Äx9«æ�‰pIQJÐ8�(µsÙ‹�(á$I |™‡•WÄ!Ò»~‡ŠÅä@’¤T„të¡ ËÁÒá�slŸÚ!ˆÎsL Ï:Jˆ&ø€ªQ;?‘™Ê®öÎwZêÁM ’Íït ªLcÊ>5š™|CméXöø­€Å2ˤs'“ó5nULˆ&ñ£áÄÉ   ¬Ñýä +hŠI{¡.Áhiw@ezIñr°­x²³  »é+‚êRßY_· :a^%Ç­¬bÖ:Yå4/‡Ãj©8¬B:𠉂 Jo‹:ÇdMáE<(*�ãÙ ¦TùÀó0ˆO?ø»ÏxÆ#Ê„0êD{ wîar-¦k{yn°Ë'· hd¾Ë_òJ{Ö¡ÀüNÊ‘$Iòe÷£ þ�ð‘ïå­~@x–x9 ”x“:g†%Ö:ëcx ‡¡ìQÕL#÷(,ÆÃ^šD‘äÊV45®uó"SUà9ü7%Xé&¤€¥ü›½Y±¾hÌ ÕoT>æšSÃÂ$ßw¾×œRÖµÙŒ­¬ÒTú–Ì›>=hÖP‹Ú­QÝ.Ù§aÛ’�#â%|Q[FcvV ‰ñØ9ÿáó$žåó&¿vh*šÑzïÕ.|k¥„�ékZ7®Ð—ú*°å+ÍycÉÔ6À6P + %ë,$$:TÐ.a!Tï£e˜xH&‰™Ò¨´6K�F—2{@]üð Yu²�¤(±I��mžº8ɃÎ:5V-Δ‹õO›5�‰ _�!q‰ Zd ž2¨åæárÃÄ´É,âÎË9&—¶ +»•ñÙL'ê“KDˆÒŽÉ¶R£CÄ# è_¶Ëyòâ‘ÊŒ””-€�bNå‘ÁòâHï2L 1|%džèÍé6�SJLÂþb‘#Ð�Œ|÷‹Ú×`´„Œ–èå-”7:ó>;Sþ,á[ö'Pƒvx"øMt¤æNõçÑ:e:T)lIk,ä­½+Û®©³Ëeêét–ïšïÔ‡æº Xýã°¶!8ù¢æÚ§¶ $jÚ É/ï�õ/Ì·{°>#ÁÀ©ø`zØ A}ZúüìusÔøõkÌæ›1›ÏÏNMÑ6‘›Neq ¥�d;¥ùyH:©:-l€9%ò*øä)Ü?Š'n†HŽ$Š,¿ks6úåCÑ8Ä·°+¤²èℊÀeÊ\½Ú¹«"²uhe“FªN6z·ëÙB?pîøÔ,jâ)™6 ƒcó°Zö|©¹Þ¡ÏáYHAP C§pÉÈ nɦ˜jÀ‚µKA±Ù2Sy¦´C6¨]¯w²dóÇ;¹�ë�4»bœïÉâl‡ê‹‰óDÃøP‹7x%µ;Ò&¸ÌÇRâ~b Ñ/lÉ~k‚ Ï“Yðdú’îkî¯jXé�׆fU�ù�S|šÈo�‡ óÚx3›ã>KGÜîá5ÅÆxÍ%- ÃÓÝ®Ñux“`YXG¶†Rbt"qõ£Âÿ±_vYvã8 ÞJm rD‰¢¤=uïÿµ €²o:5g0ó’Xe_ÿˆ$ðah’“Ã%%ìó•§É´QüÒÛüy^~Á1OœÄ3ÐnÀ(”7ë¦]óØåXF»‡I…m•(3j-Zªm2öâÃ6/À,{0²â} Ç ‘#Ieþ§è²ñ"9¸ÿ�.ÿKÑeŸìáŠ.à3ØDø!@×kŒñá:x!ÙÈ>˪çðŸ×)‰^5•R¾Ã=TK~ƇöZ° 0à/CÏó,R£NuQ­— Ï/�=Ú£‚P~¬°—ï�Ìîø s§½˜;Ehô=n°Ø�[»D¶ô¡BŸ¸®=jù‚Atm“&?–ª?1 t@²§]Çù-K + ö#«·ßëK�É­/…]ÌyØ hìy&MŒ·`Os¾û;MÁÚQA˜•d×Ç&i)4•<7\¦�’²Qù(æè´–P sÔLmƈ[¯ôˆJpgmFI1 ÿ\èÚßèŒ#¼ ªJ1Í’FgÈ:�”3[T/$=…9˜É¹æ{Í#ˆŸô¤ÖÕ€[=Hç®y&4­ä !0 ¶ßRšg±B>ËeîªãBv`ç;u†@cQ‘êof:JdB—¹û›êŒ½˜…8C<¾P ¢z]««aß²YÈ’ºá³QþpŒ“a)FÐŽhÙ_¿ñ6NÅEé(#‹%l=®˜}‹ä¤" +cb]ã%v¸?ýðʾ/æÙ¥!vëÒ;ów¡GÌšö¥B„ÆgÛ�³¯™ïÛ¬lòN#Jñ°øX'°al¸:rËÎïò4Ü‘‡€‰�`¾ÙúÜE«oóÆšZÐê÷‹ cK7fóZý©Ü½å=-{ðGåYP)·Æ¦má¤ä¸_Ö4{¸ +Mé<}¿Ê}®Ècð ù×ÞüÏÕÚG˜„Y)Àî¢mÊ-˜ê»*Å{—}±Û�)k×›~éesÝKT]œ’y=zPÖ‡W3!°äzJÐ¥=¤ùãœwDÈÛ”ð=eà6á_¿9‚ÆLŽà|Ú¦ü¥q?³2[þjnRšî u€]ó6eŒ´wˆ¹c邸Á†r/ŽÚT7/Ž"[Ô¢5e1.¥—ÂH:/:­u–ßË�� ÉÖèO7{Œ¡SCóÙ;ïÿ7–K{BRÊ÷oòÔ'ÆNíì(xßâ…ªÅ|�½{]vͳ.°‰­3•ÐVwÝÎ7ow ­,›l¥ž�I‘ôSâ„lòÓª$2XN…ÈÛ‘¾ï.ƒÛdÊà¨ò6[Å�G)s¥¢„$ÂdÛ‹¹töLÒê4ažCõ žžØ$Oi˜ü‹›l!›ù¬]…Ð{‰¦�AN¯$£½Ç‡yo—’;¡Šjš_ !“ÎDÎàY×|n½€‰ªÆ/ÑÌI°*§fªöÒ¥nò#�õÅöE¬}WHºvu©»lövÛ¦§P7§X#_AJÔô‚Dç&òp©~¿f»mÒ!´7’0‰0±äÀ¼ykÔøô‚# T™üùó";´ vQQ6FššÎBG#Ý� !¨;Áåcrú³øSÊ7öy0zm|æ#åh™ŽÄº™[ !Î$¡OÊ)[ïqâäb¬™É³goË6ÖnþÒŽBXÙô#j¨€^gòós\ÐJ²Š…›ÁX•Dz¯'3)”¹cÑO¿˜]´oS™œ2›g—iæw¦«]V‹MûX9’—�K†¸Ò÷ÿâÂ¥””÷Í� +F‰ò‘#ÀÉ)Tëf"ÑNnŠÕ;ŸKÇEøÊ;w6H!H†zƒIKÒqŠ”KÌ´ŠM4L+HÑ7w�-ê©&@Él¢½Nö@O€°®üÛO�ayÓ°ÎÎXã_&ï…Uo�ÔwµmvY í16�/c +Mâð7ÛoÚâ.Xse´5µ¢W>± ]„Ëyn’v×~Žw]5ѳÎÑöÄx}3î¼°e~£DÊHöÆ�±=Ý‹=Ø‘Szâw¤yˆaŠSØŒ_ÕÓ–ß´¸ýYã¬ú/ wn4±Ñ«-z]m4ŸÅß™(|uv¾ç¨Y*véªý2 VÐv<Ù*GiíÇ{\×S«Ä‹ƒu¨8¾ð=´iKK.)#rѸm�ñQÚ„Y-@ä³Çƒn¹mÜ™à±Ý8´±»›ÛtÇÓÙ-П¶Ê>,K“ÍuØÝP­¡’`‘{0½ªÀå�ƶӿ^ŠÆ>_ゟ=lÛ·Ú˶8抡y®žÇNkÝŠµÚ5�],cAà'ÑVÙ5®:‹°eIÄ)¶l’éì}ËH¤1Hï +Y)œµ)8Í1jÊDÙÒfóÒæÕ]âìgtÙ üÆ›px/IÛ”]ìÎr +&)ºX`ÊŒò"ËÌcvwÄݾS^büœ¬ÀxêyCsz#Px\&S¸•$kû{Lâ¸ùS©Æ¥Ç +'GJ}BŠ:ª¦1­²$ºm;é†KL#’%Wùkà!X¯�¦Üp%ýu) Ó¦³û ±µRGÙz΢ÛôTmD�o/9Ö 6çÕck›¦>/¨T‹ç­š0T€‘ºeÚÝ® Ïâ9àv%µü[÷w±¶d¾–³È�ê8èx u¼šwªl-ðVÈ o2U07ìïwµD¾JhsÑí¹iÞÕTÇ–¬öP±üÖZ„ê/µÞ”·R†Ë8 iœÀN›’£ ÍClfX”þöU VpØzÏéæ§sû×¥Ç2] Ò7�¯£s + Ìw¹êu%× åj€nÄyðãíâ¼Y7­h«½€k~‹€ðÎèà»sî +�¼rž«%ßG]˜ ËêNð¬L ‹D¢${tÌË:+1~�{÷'b²ÏêYZ`Æs1È:ZøQûŒ`jó-C±Æe(Ilæ2�xSð¹ òd8¸-ÉóÆ42ÚþÌl}�7³Å©ªyv=@vßµCå÷I'[™M{:ƒ§Í#¼¦åVgtnËd8óÁOì¤r2—íàp•7¬Õª1ÇÜu¶¨1¥Q=¤Jxˆóü¾¥à°�7bŽu;¼Sýå¨Qï¼Ûž˜N^©¦ xª  5ŽôÍl|$6 0­‰Œ‰5ñæ±AH¯�È~Îú00Tù¤|fàh_Õ§ ðJœDp»B<0Øl©G %©Ì“q[" öM:ü %W˜ü°Øwoò/ÔXú8ã‹ñîFBr‘á9ØŸ—‡HJ_J¨ïci–Hbw–ö,ƒ0{’®´Ñ†ÈË?àß±EeƒO„‘æ;9¾`›Õ±‚! �+ÄQD„ 'G™¦�òjœ ó�ó/²½5èñ:º-ec²9øù^-üý”æÃIãü¢ßý¤1üeû×süK½,LêÓÆ(šMß\»Ý4+läÆ|qW?šçrØAò[Æë„!{™¨,À'³@Ì ¸Òënöòˆw±<.¶ƒ›D°8ó­BÖ€3óöéDÀqž¨Þ°á<³®ŽåÜåˆH(‹žÔAb§)Rx2+ËAoÊXsú›±NÌ›±²gòbšfÎcÆ0‰Ù>Á!V&8 ú@.¸¾�ß‘�ˆ”µ¬· Ý2éëö«I’Ýúsо@�H‚Ð}:� =B¡5zeèÝ?B™ ²ªzV!C’5ÆîØU$$ o:¢PïÎÃ% hU#ÈÐ)YÍ—(‹g¥û²‘&9e©©ÓÇF@Ì�tݤêýxN L´ÐxZÖ˜FjêB³Ÿ¹ÂNMò^ gÆ·(€Øž8DÓA6à|U'B”(4ÐÆã0 D̘\¦á㱑EÖøq—ÀÛéÂT°S㚆”¹JŠümÚ½ˆ8l�°H)¿) Õª0Íòk� 6��½ªZJ¤j§â(j�ìSv>›<ÜVv¾;ši~Ô^JW��.çLU^uílü®¨)¸Ú"va”êrŠm��Ut_Ô cDMª1mÞ‡¼¤ î_{üññ�ñCy êN€g Þaz™4©¤4›6U^“·«äg]ëjZz;ÎÏ(Vöó-;Üc‘ “Ka|’ÉÃ� ¾¿×qÐ~œ{íò¹ieÐ" ­-S”!…/w?¥ÒLž¡ +ÀŸÁ«8¢†ª«ÑÄ)»ñ*¹îÁEö{#º`áRz7ì̺PûJ¬ðÓ¬—•8âD+Óô÷:ªq¬ú©G§[T6DËã@"ðŒËªEù;ɱá{¼1¥nÅæc»¬óVË~žv­t”6§^* ö�NOåeˆ:g%ïáhÈ0çui*zƒ™¹E�j »ÅôW�”¡ýØ J‹PçÐùÆôÒÊñ.>ÊŠ®Æ5#ÙÒÒ +')Z¡Ã`›LÍrÈ0þÇ€jÊ‘ôüdhø&û”|`ê€ëá‘ÒKM£Äè®ÀM©]`i¬¯ÎðO¢17-ÃÖ0×CzË– 1^°Ft2JMÙTÁ„XX q¦•e±oQ)ÁÖ`[ÂA01dµ„£c_h�.[³ª¼Ê²ù�/K¼K&Ì2 3.X¥£fd®®jõˆP• GD” +Ö† +Sy‘šë¬ &Â%ô= bL)/ä¥^•“ß%¹‡%Åkd®.¹®Ñ,ë‚ ¥™†°,cùñ®¹i”²ðHce51ÍUGÄñ˜»(Qéµ8»d[ŽëF9·)OÎbœó"Oôº‹ +è Ÿ]*Hž…¥Ú}n+*ú™;G™�SÐ2>öÕ6!\w�ÒÄ]ãý«T{ÔÔ*ìîkƤ¶ºø`°‰]\Ñ£¦ƒF¶%~9¯¿‚t“Ÿj&õ@A×~°JD¨E1¹–ľ¿‡±”p¡ÉYeå ÝCµ4uDÕOgf§©3í£lÜ0„°^à2ئ7”있|»¡od1$L†päàì#ñ}B6|Ò=D4S�mAB<1šÝeÄ£˜8HvÔ¹Giee›EÅ2ÔU;%‘lòX\TÞ´LQ>‹¿›–5ô²i„´«ä©4š‘ñ®ƒõè` �-•jØ9úÖ¬BiÏ"4-³fòß�‘ Œ /êTPØFiDж]’Þ�÷´.HÖ± B„ï^vôÁ&4£Ã˜ºÉÊ&1 £ê9Dûe}¬I …ÅÞ‹�£®¦²æ§F–¯™ˆ$ìÕÞR¼XV³Û/æ°™HX)¾ ×",««|·Ýt¡¢¨£�úÊ iÔ �J¬ü ; K\ݯ}>-=¯¥í*EÆ_è�³¿¿á�îsrÚ¬�gü»?·7IhäYŠ£æIöÀAY?ß~ûýñ§¿üH�?~<þüûcG4ÒÆkä×Òý†lËùö›ë`ªRÛKÄ>-qŸ }7V 1á5£¹•Ì®V7€Wº¤òYzÞ—Î<ŸK'<&:ok7Mý Q¼â§¥ÿkäÁcF@9ºþŠ<Ô—‰OîZ#̵s�Ñ6垌+>-)]·Ï¦>»m¬t}:üãæ¶tfJ>¦Êô¸Ù«šZ#‰� fÖñ×NkoÒ–“�>N¦ ÔTõa¡PpcÁc�lÀ‚¬FÕ¼.=cŸâ/Ÿ!áóeã×ÃÿgN~³×—ìõ_�ó7W}ÉUßxþÆó7žÿmœ!Œ³#=QxóñŸ‹“NÝl–¡O±Ýhhܣ͗á¢U\â}R¾cJÉ83¹þ ñSñý>êe}ZšºB(»Bþó ¾£WÁuL Ô×UÚÙ¦-ÄŽ­.cN)üòúYº>ìŒÝmÓÏ“Œ0'ø9LCïÝ©ž9”¨sBœ�¡ k£­þ"å¹HÚî(5é€ ðË�¨ÍÌù¤r +ÂüÓŠ†-Ù™pu�À"ëð\ÀäÑÏpU …hæ’®±g7%—^Þgἄ +7ë¸)üÂÜÅiv$x§s¢ øqedz„9×D¥„××=¶½/ºíç¶›¯çL`‘ÆÍÀ8ÌÇÑ;îf þVTX ÀˆÑ¢�‘Âìîðð=Ó9c&ÅÄdV´³—¡QÊ�6 ]¦Â[8iUœ8òš%�#,Vè9GËÒdæê²SÊ�»JÎŒœ>±Bðpv+Úת2ZF“mM—ú,¹ÜsôY*²�()$“s3†VŽ£^µRm?IbüñeáÔ7d·.7°b,F£*ÅDB‰/2÷†�åGU¾™Yhk�¨¢D4¯ö"»yÖàÚZØæM_€$G�1uð ¨Dn` ‹0“fZ?„Ò±V +ƒ » +s,ð!;+èÀ¢Hö n\”aI¸ “]\Tpä{Ù%¦°b ìÔM‰› zÐ�ò•縙fF¡�U‡>4êˆifRÝu#T ·ÁBgGSõ²ff±“@8%9ÇEèsƒžoJÁÓg¿“:× “¤%^hÔ¬?°ƒžÁvE#k!Häy-,z98“ã‹vtØ‚ú]æÇy铦n~,†€ë«g8 +ÅçÅ2`ݬ4hά ÞX +½±òƒÍbûž'Ë� ‹oÎí(/÷Tõ¨?N7 +�*Ö”O˜¤ +XÞTuX༤3“Ó±U‘]—Mš¡=Š*+˜¡®œCAÔ¶JêòwŒ`AŶA„ÚðbÈ@à÷„ VŠŸ… ™¹^ø…ݬÝ>Wq¢Òà�Ž(Ñ̾ê#Ñ*{À„'ÏE Fw%k¦èdY“æáël)lé›!QÜôÁá»-Zð¨ÑŠÛµ¨©:">ƒxˆl«3&5aÅz¾ÈËq”Í‹Ü`[²;ý Æ3êɸפÝDÛäÉÂ�,?£:"à�‚‘íÌmØ“ üÈÞl5-X¼êD›cØkÔ;Û`oζÚ]�3pm²u%JÙ•SBeA4Ù‰_VâLÜœ‚ïhÈ[�žšš:¯ÔïÑ�ޱ_-¹’9p¯Sè.‹ùÏ­Àð½/ Ü µ�ßpÉ”RùÚ³ó<4Я¥b&Á >äÏŒ�ÒõÈ ¡²§ði Ha„ð¬Ó:GDÆžCÏúœ-ÁhªÎ¨CéŽ+6YÐÇ~XÏ1”œúÇxŸù&ˆ~8xø—ÎÔ醗$þþ…de|âýyÏ|V/0R97hZ½Æ<¨ˆ +‚ÞqNðY)icC ^b<Š)&N®?‘Ž*å6m*v€\žAˆ"¢³'Ƴ0¸Î:†°’eì‚ È#¯0¬²1:g•;ß×ÅrnH6kÑŸ¡%Ù=nÏŸüÀ÷fÏ~¥ÓýÆfçrçáÿ1ŒP•ˆ¼WzbùÝbX¬ãAÔ,„èöRÑgC‘ «%|©»~˜»ËüåÔÿ¾W\+Âsyø°WÜ+ǼŒ|ÿÀÈ%¯îÍ8:Ýš¤QÛ&¹ezM©PÛ um`,M«¶`ÊS±™ l”nü¦w�GéÖ¸˜�\N.eMÅí¬‘c6hKPƇòph¢Ž|ýÛõ·+‰3lveLyßd kyÛd8û´È`¶6/2Ci_‹Lµ‹Ù-A�ó~p;1™ ðEÆž�½jï¼pû“«²±„°1ÁGúÞ@Bã¸BÊ„¤]§gõ›à‚œ7ÂÕ®ñ.¡[;4œÇ¥ `´ +rQ9å„¢rAu¨¿·9·ˆˆ +¤Öu–öÈõ}‡:‚0Í^]=Ô�íVä¼�áuÔoûˆÄ±ÿ¾¡¯{:‰—<\Q…eúôÃô}<@å.±}*kÓ†óÛöÓ—ýÇ_¿ûŸ_÷Ÿ¿ìg ¦ˆ¸ã<�én™åVo8P½—¿‹‚!8ÅhA`´% -�+m4ʪ¬q�¨-/[ËŒšxç \Ù¼«Ìv>ø�Š×3Œ.Èÿ,ÊœšŒä@À…(sRBØB̓À»ÆôV÷§:ˆ×y—aE˜—é7¤¾Ù&ôÁzê{òÕ”1²š²vÞ3`mR2"U)õjÁø(뜱µ“u¡s\Ô°æT\H›ˆºeP9äŤE~oeç„ �ߤtÿ†6Aí·Íç©ÿ”sŸ<ôö“x>ëõ³^?ëõ³^?ëõÿ§^±b ¼“ÂmN?þç_vÒµ�I€þ:P,»0®%ÆÇúš¸½B°à#Ž”•¥þ^Q·-àÉq¼ímÛŽÑÏ;ÖÑ[ÂuËÓÑvĉrëÕÃð”ù‹;ìvá8h¼Ý÷ÉʽpIÀV×piþ­øÁ7B<;^�@û¾’ðÛ_ocÓ#Wè¼!�P­ 9W-ùY’Ú+Vì>xo Úé�™œ!jóÔoH"6Í–¦³.ÀïÓ+tÞÐäÈ ÿÇYw„ü>xo Ö¦„J£4Ží^�ôxAêJt¿eçE¾“ †gù%ðÞ>@ç �õ‚¹‚öë4�®ëèu!WÞ½(ef„„\< Ä4†‚PDUñgåÅŒ ™*ï<\o áÍÎYH +µÝƵÑ@‡ßÉŠBôä|Œ²aëªgÑ«ä �3t…ä‚F$CÄ^5Ç:$1ÜM/í `Jú.t{]ÍS® pWksØïç(�°kÒ–'Ä[K%Wjp±”VR noÑn¯ÆÆÂVŠÊ5;Oˆ÷áÇdP±¬á›¦qNÀid÷~�4ûòv-þFµƒr¼þŠ6¹›‡ãï1ì<¡Ó ílüµà7$/��ªå0¦Y µƒi %5­@s v½ u�ZÝÎR;õ…æ{JtoÕ€hÍ€Öܯ'¤vºÎ%–BÐ|¡ƒr¶ÚÈM””Kï²'tÔ4=`pm„Žq‘ ÑM2o>ˆç ©Äסl?Cì(EF΀&Ÿ: *N}ýÄ…`í 'ò¸Ï:�óÄí GÁ] ¨(n¸u¿ÏR;ƒ“Žå«ó®Öp)%#f£6ÓEÌ3¤vºÅi­•õ é0Ål@ËN¸Oè4ȺY,=ñïw4nPºEƒÆdïíäÀØ5hë*`÷ÁÁiûJt;Oè4(«_ø*éÏ’9 •h@ FH­»�'¤v²ñò_³ÚAW§-3l£F8ÍRšÒ€¦�$õмÏPA•T¿‘Žö‚ •<ô�¾—CßôÐÏÐH!+Ð!ÉK�1Ì׌ö~ÏÓŒ~BçľyÛ±âá>OgÙgºæ˜,—#àÎN3jòÿ‚î(j4ͦcüäHÈmˆ¤'t”Š')»�z�†á®)ʺô¸�R;(:ý™gŸ€Ò€ˆþÆUE+tÔ½°´ø8燈Ðòä0^ªz…NƒBŸš�€U£· �öì²R;ÅJ†,«Ã€Ò?W§HJ4 �8?¡Óª#øÏDÙ@c†jùj& „Ÿ'tšÎ-CB©�tXâ¸\‰k“š�&cÚd†h'!.Í ¢)ÚØ`õ“’ÔÄö t”C€±ë#Ø-CxNŸR;Í?¦¡ãŒZm6y»¶föf¢Dð}b�h's¯2HtHhjìX]^%—!±Ø}HíkYªMsn–@(œ �‚æ×“ �dÜç ¹ºX(ºM@ §FG‹ G©EI; t.�S@ÁL8Lß5½"€ÂÐ0lÛæX6Íô:(_�iÀèU@Ù€"SÈÝÞ�|™ž!·£«mÔ¿‡¢Õ +@ôGr{ÿ„\6‡br;ÊÀU\d§ °fm—�:¨^P£Û|¸¥\ì�0L—ÃÞD±@CÙëHê¯>ì”h€Í–¡ý‹ ¿ag‚æ a7¾Z< ×Û×àUh½r´ß=ÇÑ{ûmÿcû÷vì¿o‘˜…QÊ~àßÓ³p¥MüŸY¦ºk1¦˜÷÷·í§/û�¿~•ýϯûÏ_ö_¶_`ID/—²wö`áÔ;ÈæM"n�¶÷|Xî/àhÚ¾Ä +�7Tàjy†2æ8gÌ8)sœ–º_—À{ûÁ FŽÆj†ÀZ±Þ�$´gOõ:j<�ÛÀò +�74¹qAÃûqÔϸ�?¿·1uAaŒ~ípÉ8cg�~­ĨÌ�vô¾cÒà‹û¹aI&uW蜠ÂYçF>:§�S¤åþ +eo¼,+0¢p«ìµqvª B!Ð`÷Êf“¼»h¬;$&TÙ/?+G_ cwš!� y¶Tè'ãB¤³Îê :Ézå*bå"èVêZw tNÐ��(Š`£Éw” ˆ±;ì,»òWÒw�Û1UV,œ;�¾OwÄǧøò/8á›í–\E±‡¡ømãjøP¸ò0{ØÃ0éÊ^¡Ñá¨fk�˜.ú‘A”sCt``7¤KÀŸ¥ ÁõÄvµó„4íI'UngÜPÂÒ‡ñ18ƒ?â›Ùì,í@WQ¿Ö€WX>$¹Üè•„< +�†‹ªOµó„hÉ�F=$ü I²RhB ©ƒp@ߤ�¢�Œ)Æê¥h%AG‰‚‹Õ˜M EðsT�;”�Vˆv8�‰g�rÔ>I¼Õ9Gqs*]ÚY ÚáäE‘ªºA îm—8Æ#È(*�´5ÔÌR3ÈNJ +5]Ü y:Ó¥abÚ)¦À35aÙð u�hD™Xj˜ÑQù‰°'jN�l䯫÷EÉX߬ÍPÕ3:dЮ?ƒì«úœuÑ–Ê7ó„Ô «À $-08 ¢à;ÜýÓ�‰kÑÞë±&ž�Ye;šͦV�³ÀÛ@R_&«INâ¿h/—Ir#ˆîëy�lñOÆV€0ÐB³/ŒÔ‹jš¹? {æŒÌÈl ÐFh +Ü“t’þ17OaæM…� ;�iñ:¹•mŠÃ”ª¸Ð�Jr…Ïؘ_¾«6âW¥ÌTÆ7®Â $y +e2²r3q¶xý¶ò¢±�:…ÎÀ…š +c-åúdÐà +“#P!<¢K½©°£´?û©œZ��M‘]‘赎gû™bùIuvi?§êÒ~†Þ°æxQ)»êð…<Ô…Ž¾½^ò£ð~zýª:£×Å)„QJóÈ„òÝùlª§âóã'Õ×r*Z ¤Nxžçž$ÌQ ×<;ÉãÅ~ë¥']žª.NJp3íù¨G»KG*¼‡MS‰îG ÃW…mÌoi.ÇGm‰-ze£‚_Ë ðTÆ ”6ò¢ùâ‘Ù„æõ¬<äøÉ`¢´—Bžiùš=ï*Ûш”Ç3é2]¦^ÒRdNc@¿äò›+*¬>/@³^4�³BÔBõÈy-¬w•í,3ì 29³¢@*_½Y� å°sÞUØ)ñI¡+mØ&äh ˆú@¡£«.£Ìt3´�WvÔ+øÊ< ßR^*Í–ñ¬g S#ÜX¸XËf!¯*ìŒ[^ÞÖSÔ:?4üÓ’òÜßUØZæÙ²0�gÓ`49¼àÑkÞU˜ÑÐy€Êïjך¦´TO Y)I»}d¼«(Hå`)A¬©…w +•“QŒèO…•†åwv”O�&/¦"æ®m™t×� ©\J‹VÍÞCÜ› +3Ô{“õ¦4h]QÎ ÝüwŠ¢© ÕlnÁâ^5_¯šýJQ†$_�Ðï˜�Kšä5¬6Ž�æµÇßT_¯ª¼ö8IODU” K0 +9R apƒ¾Âô«ÊvÐ2æpáJî�в% +Úf71­)þ¦²½Sà0Tø (CÑ:W¼vŒP:¤fì1áMõõª*kž”;ñRÁC‚< (´�ÆnE£G¨ð×ÈaúUµíôvXUÏm�·«ôW¾�Ü‘²ýüx×<ùÿ¥±œcÃU%Ò{ÐÆÎ•I&÷£ÃõSãùüøÛíŸÿúH·|@+†ˆ—ÔIÿîYÍ)Á@õ"À[ÇÇå|üù×ÛŸþú=ßþø~û˯·_>~±9U§¶ q‡»?ÿ-NºeçÕŒ¬²§�”Të2Æo?>îÜúvOĽм¥Q,ïrGEÃÅŸ?øÿ½!Ì~ü�{\ƒ6WÓå%\Ó\Qo )PXT½‹ú_G�¿èëÖku‰Õσx²Þ“ÂÇ "^c¶Ê*KíÔß +ÐM�ýë/õt:áôAÌh¯*sˆË¶ÃÛ.†�šo‡_ã*–§!÷¹rXŸ¢¼’]%3žMKMMùÔôÔÓ‰§ýÂ! +I¿UÿN…›IÁü†b…ÂgH¡�®¹…¾«¾ÂN:êu[ñt{1üzøÿã…ÿKÚ +ò5kÂPÿc&•g&Õÿ’Ií™IõšI � ™,ÏRÁ7�.~ R—(7qA®F#ûñÔ“{5×zXù© +:H¶ˆøÐ3^¯>©¬ì*sI œ¸ýäæ÷ ¬¹êÛ’ cž– +ò ¥^~¯4RI0XÖ†,R•€ü»8š�õ!¶§¤Û)ýmüùG€Ô`ñŸ‹Wéfên÷NñÜîšõ­Ë²á¾Œ"¿» Y.âØ-=nµå¯‡¬~T}¯J¯’\ðõ½ê>‘Ó#åP<Ô‡JÔuí½I`.^(\¹²ƒµŠÉ´½ÉÚ®†¿JªD)ÇZX±½‹Z¸,ù +¢äÃR�µJ-‹™‡úÿPOuŒx¸¤¡Kd —&t>/rx{·à¼!êw6Ù»ŸŽÈŠbª¬U�¯(­ìhST”¡¯*þ{tËàØpº¸¼‘ª½ü(~ºý OØ�TòTú +˜œñá õx`�4-jÉ9úÖÑœÀ^ רŽÀä9¼69¿„ØzE;ìšÃŒDšÑlVÓCÀ»½Óâžu8%[$±²f´¸ÈÑ»³Y¦º VŒ¸š¿—ïó§÷…[r@%Ñ%Ñ9Úîa.k¶VP^Ó\�´w{K±°ìfw.Ì!HF»Ø·HDIµíò=åî Ç¡¹ã!ÙSÛaÅqàÎ{늖½4p½�Àck ØÁM•528ãÆ)îZ�[¼/Cu^6ÂAcËÅÆ +ã÷ù[üúæ�SšNZÛˆÏ0ÿùaÉGÅwÜÉ{÷]/¯ +¢Æ�“%жbªb¿ýñyåž­ëС¤™Õ«,ò7Eù•ý]r/RWw GÖn}‹L—o�óJRqÄÁü\fO!˜ÕI"$]fŽsu†›ÌÓôa>$û¾Äy³ ¹ ¸ÇÞ��عE�?¡J)�T¦6¨‹ˆ:)iëÕ|¸«½/?8SÁD:~”?“bGc^7ŠN�GÕÆ ë“[_±B¿id‚ãzSÍ—bÒÿí"À&¼öTèªhhÚáö�¤- ¥«P)ŹjÀ]{ +Ë`q”¦À½�üàDý¡�(W�8 l53Ƀ4ÎæÔqŒá›aBHh|Ô¬SÜRPDŽJ�/ùG¯ŸzrX*ÒÎÈ á±òzr‚ä:µ[‚ß\# ²™ ++3üP�x¹m`¾‘ê0W¸—\¶w€½>zŒ3V³ŒA�3è¨ÑQÓ=N7+�)R(M¼§cÛÓ…¹¸º 5%º¯^J†Kf³ô½“¥ýe†æºØ +•³-"#­Ë%Àõ䎦„¨†ʦé܃ÑȳG×EÁ£@�¶ŸUÆ ·³æúI{¡µü>Uº¤€ÉôÕÝý$II�iXQÛçTµ¥ñ‰æ­GjJúeÍv2¶±°*q&¾–FÓIÆùˆFÑ~§ãRÀ‚nqðøÖ6@ï•\ZüÉ#K±#*j£/fÜ­F¼ûÊÒLä“)¬ÈÙä^èÄ$­4øCIÌsäñj꘷¾"ýС¥ŸŠrUiù.T–•- +4¥9¬š7;„7?­HË•]‰IG„3„æðâ*DëÆ_8ìO9޳fáܘ1ߣ#ãÊuóž5×àM†.ÜÇE?E�cì¦a%P²Wf§ª�›Ò¤U¡9©úJZMÏ‹ôÑQô—Cˆ«¢F'ø’äáBt±&™&ØãžNJ»£­;¨†~å�”ÌóP*™ o$=8ýœ ØC;™‚Yy‘D>µ»—°‹˜PÍðÉ3‡›á¢J{ÇJ3z¼(¥ +GÞ†ØèŒ{^6ôç�¡ñ6`„$ŽDˆý¸Ó”Iç”3ŠVñõY�—ê“v�ì¤Æ.Þ �Âî/\ús·ûòúhÚ~¹;º3s³wâ q,£dŸXð‰rldE­ º(ã^° +… Ó Ž…ê¯KÑ?Ö8‹ÿÿÙ€hÏkælÅ^^óð%%dȵyAYj´|5Ç÷6ù«=¼÷¼�PÓÆ|�ßñèÃGæ¹HU_·ƒD j·Þjšqâ^ëžúVÁ&ÜT@x9Yˆ®äR}h6u¥ÉÑ‘°Û0Å]>ªˆZiŽÙTñRÇrnº/KÝå3ç~ÓªéÒ²a¡éÎ1•¸�V}Ë”¹®Ê{yà]ò\èAÓІ©}ÂÈm8½pxi!‘G]˜qÚVÆ.wDÔw6#B÷ Až»‰Ø”.qËÆb5á¨Ü|¼Ÿa É•*[é8°õþú#¹„|B›!�“šþýßßÿlõôNò”ÝÉL ¶{ó ¸í±§ +ÙÛ¤ôHw Ó#ºä¸ø?DŸ¬úóE°Òx²¦€̺|6ÿv”€°äëdg„×YއU—â:Pëô/Žh§á{‡¦ž´¦ûÁV®?͵�œp€rgQ€LÇ—ÏLU�èšWåÊ«K¹†êq¬. +HÛök!LÒÆŠwè …W¬ò^Ê‘Lî¥ó”œ…,R¿¨Ãk,8õjåPdyVŠ¡_Û�—Ñâý@ëfÿ‰m³qz‘õ–wQ‘½.�ÎâN·œ/‹,}i^�¸¢|óä.·³©x4AKϬ{¡Õz[9Px-`ík/ï`¬3¶]–‹> +*c¯²Ž5Ô0!‹""‘ÊðÌ0 Åq·IhC¬?¦Òt7æÁ“ãb ¡| ²¥wI¬œ|'!gr�ÝìŒv�Ia—¯fnYí�Tr„#ðü‘“dY–ªêª—?±ŸÕ0v< ;™å±³IÚ(ô9Îüç‹Xfb&%ˆ�=aûøý�y z0}µŸ�œ˜ÓÒ¢ö]‚å|ŠPÜ}ŸÐ”~-Ààùk‚%ñùwg¶áNÕÌDªºü&êªg°ZÖ‚ñ|�¿¼m²lQ¨³òOˆi³Ñ†]f¹ˆÕQw4ì= ühÚ~m“ e÷ô1ñ¯š‰jD ¤Ù† â<–VHfˆZy`p™(èÅWfN FÙQwT]Ã$XRuøV S±¢úK(JªÁôÛH®¬¡=Y…š‡ÀÉN£ê"ļe5•dçcó�¼á–‚™u¦Š™ü$‹¢òPŽ,€œJ8ŠÊíc� 2¨ˆ ¤á4¨°U¡Ø bÛÀÚÜÑD.+7­¢‡Ä0šš‚ÊÕ�]ªD3ÞiÌ"b*UàøýzÆ‹€kFX]#DD "N¡Æ…PѰ:L±S‰5AÄc´¤C"¢ëhØVâÒŠAm¨rˆÙCDz~ÆM ç½�dx5r%+b}š¥Œc2ŵ,8ùë_uŠîvR’ÿyÇ|Ä]9u˜¯¿|¯2ª48ŽM%ç1–­ŠV\›][j:@Qt ¿„Q`Éap óKÒ`Ÿ¯Ñ×Ãg!–cð@Dl†ÏJÇÙg!Ž�7Û‰Ìy|V’Bß>+Yäì³hKŽÍJ%€6 qíÇf!¢¿±Ób‰çÃiѵ�ã´�qœàà"„Ó +Ø…ÓBÔ�ÑB`çF 1F ]ÖŒ·ÑB¦ÌF ±Žk£…H…ñèK×Ãe-Í’0Yž/á±ö( +‹5²pXC_Ù`©3Ç_u‘ÜöªÇ7TÖ= +EúñfËt<3m­ktœUUR6VÕ~R‚«NÜÎJm¬K}¯ˆÏ]í¤…’âþ`N�¤ß› +pâ$]sL6w›É“$޼¬\J–•.{¿¨Ú®¨±›o¾õð t˜{ áÍ +º‚¬QXe£K�¾pÎs,{W +Š„!JZlÿ8ù9yŠ¢§8�ÙêE¡ÈºXOœ]\�´@tÉB´÷’l[Êc Òw4 5)ç 9�5( (ÿЂ¡ÀÜo, +=QÞ¦€®¶«¼x'x¹öþ:%û` 7s„,â“„¢�󶋆åj÷Ö)• oߌÇFHW‘5…»"éN&|¢|ãï°îàéצ]v ú ßÉZÀžS•LpÀ¬Çò•ä ÀÒ, +Éos˜Ppq›Ç¥üµ ÌàD!Áw­À—?_ò½‚ÊÔl+lõôbÆWN"˜å£4Ÿ•ÖÒ¾@£…¹Ù�Æ»8ßÔjPUa'Dò$,j‘4p5Aµ:?�9Îz©Vñ=i_zQ%RˆÄds´è±üªju”�½Îõ¨“Yy2¢×MpZ-8Àþ?Ÿc>£òëH_ϱÊsJ28è‹=¼”Ú‚£•Â…ô/®Œïèÿ 2¨b,|cîý¡2¯ØÄÈKÎ ÆDÐfÎ uîïµ²êâÖ2<=NÛôw«@;WÔR0D.’YËúö Úi9y¬'3+ÁàöúNj! 0ój;ª†AÖW»Í-EÉ·{àôM’T´äJU“òçó(r=Ô�g–]æ¦Ú ”ÎŒ�m¹|MÌl5FnC§� · êóöYòÖ“O¥ÄB›Qº«žS܇à'ô÷þçéç‚ œbï¾à8_å*W4$#û¼š®ÛßäÉm -ƒÖt:ØóÜLãã‹÷ã º‰ÁoµÊtñDbˆ:‘¸Xvª{Fê ¬m–áÿüæýUP¯x$lw þ£PÀÁ«4¹f­À… ù²úó›÷ùfŸí�¶þë¬CÏþý?ö˹šã†Â9Wq7p©~?RUi +üç,—ЬýWù;@÷L“’�Iå€ Ü™žpppðÒÄé!%˜C«Iƒíøïyüžƒ6B' íi øùÇã§_ßÃã·÷Ç/?+ËÈݬtey{Ž»U�­ßñh]ªùŽ—Í‘O�9úâá T„‹-¯Õ0šFµ´×raÖ cûÎWÏÇáYÕ¼«þy_Í´K&‚Ætß6‡~ñüeY–@5�«®,klòhÑí–Ó•uõe_»)V¤ùÕ£ºïèRç™fþêÛ«ö¶’¨jq>|žo“VÉTœ¨RÑþ·ØŒ çâg‹-‹ƒå�Õ d5»Û¤Òì¢{7)d‹í‹çÃ<³�ïDÃÞ}æç¯þI±}sП‘ÕoÎùÆê7V¿±ú�Õo¬þßc••*BcjßãßÿÝ?tm\±�£j)é¬Nµ¥cåâKEÛ§¢b%÷¬¨¹²×Ttä+a¿½hSmû'^ézÉÖ¢^¥F_�vAò•ú:© �1>ªT#•WÄ©6ªª}òþ�ï·¦Êuøöe…Œ5Ž×^ØøR$Ë%;$·ª|çÉþš‡Çh‰á±Ðm‘­�…�Ó{·…6±³¦d»¥¥0óFÔ®Ù_ KªvZšŠ¿×]âÛåÀ¨:±È©mì·C'qýµYGY�ìØõ^õ¬“/a±+”ì9.ÌGšŒ sõæiOòg—Ju¾fãú<¸êœ/; M$PC8«=Ÿ‡½û(­°i0ñöËG’ä¢zŸb.�…ødbEžbÀ…Ù¸÷øÌ<2»8$5.@¡¥ªÈ̈ð�™¹ûþïN†Â�Ÿv’G�™'Ý|ã�F�Àš�=?˜‡Ò?=ú�¶›Ïmü~ì¿^ý§¹ø¥Yÿ‘=ÿÓ)ÔŸã/áø Ç_8þÂñÿŽî2³Xyõ÷óMYSß·o|ÿým lt¢sq{2ˆÑö?/Â| #nËb +Ä�îó~ûˆ�gÉæÖ«ì¥ùÑ v\ˆ!#@� ²©±C®âM“>^©«ûc¸MÄEL…"“\�$v-}¯iö˜XArÅY"‰jÔüRšÈÁëmÁ4Ûüíý;FÓû¬•Õ½ÊøÎRjñujÅÖæ4UµÜàph9W#TÐX$)8]úóäÇÇu zb׆­êSá%ÿm:#Ê1þÍ8b¼4„\…+ôyKl;W¥çñÁûù¬;aÚ^žÎÀ‡±dXY¸ˆ\ŽlTâx•�²±¬�†¢üI¬Ì/��Ñ]l,¢%^Ôþª)C&Â�ãÈtRâ²£sU2?4›?häk“lœKÂ�>&¾½•W³'˜³ÉÅÕ*û Ƕ´T¥._dzlþþ�§B8k�1àÿkéùG/Îè3rõ2‹F¢‹~ueÚN +¾‹�ÜÆ À™«n•¢«H>”ˆñÚ]f(Z’†«J?[¤°,§€ÓÁ¯»ûy$ášœ[.- +Ÿâ6|U—�Ïúë瓸2›�^Z�+‚=<Ü%í5òY!Y%œÙ´¶¡W)Õsë€z[ðÌ¢ù-¥ƒ~fQ>‰ž2º«bÐ̳ÃöG¾üŠö4¹Fâ\Utu°ð¨©µJ}Á^…�–Œ»µ´7äæ&ÑQz{ài’Š&+Ð�äBzµWy·2’*ŠËq!@Ÿ +ýV 1´Y %GÄ&E˜…P]˜Å^±µ4Òù\8~|{ÖìIMňXun¸1W1óÊR�¸8ÍàíÈæÆ–Ur>Ü€y»çàÆ”‰y �€Íb6BŽV”CÃdqÃÚêµ0ÐMá*A‡³tJËÙ»NÁ¨½ûä¾,ˆ«Î7;ŸŠV‚”Ak‡5B�;J³ 2¹Rè +dt´#…Õ'ÑC±Ö… +£ˆN¬ÊÚ +!ìÍæ(sÊÝ9,Ìù~Õùíö†êe; @'rñ*%�yâä¥- åö¥Ú‹#^úð,Á2ïĨ¼\¯F,H�iÚïee ):akA‚ 4v¶ÀQJP祻;-®°+*U`�”ÉeÅÏÒ‹Ôêuƒ°® A +ú®øzD>ÅQQg¬$ík9Ú–xà´ê8ùi9ûÍ^ý±8úŠ%•Äk»rÈœ8Ÿ'QÙËO“ FhCToáCå›T9,ç’Ë쳪Nc|¬õ1ÒÖ½¿m—D�,]ÅòìÂ¥”;p ÏáLÂÃ|7>’D^ +Þág”veµG|Ürç`!ÞKâ\ÁZÐb> F!{¨kŽP�‚(~Z©7IG,�¦Rdè˜âž§“nEƨŸ•…x•%M¾Fq#úúyÝò.¾Q DkNpQÙ c¤\¨Ú¨×´9À¨Pr—�9¬_çðK`¹_…1Ó-ÔƒiÿønCQ5b–VõüR“̼XEu�64ÖÚzó�m¿ª¶Õ¡Õ]D––âŠMéa‹:n¢æ Øš6^½Z˧”݇œB'„Ö`ˆzC‚%˜å¬7*Ñžª½Õš�ß¹¨*HXò~¯5ijS@—æ#©�È©ºy†ØØT”©fäf�=ɽIó#kµZ^Ì'£äWEˆ¬LWNÕïmÉÓTB©LŠ$‹ƒÅžŸÕ­÷z ¿ÕFIæs¨”ÌP?7Šª~a ìQ7r,…Ye‹Dá…´{ÔÓ-R¡&ÉÏ‹Š›’A©’*åN‘zzѧ•TáòÝ:Ïž+úùçÀ£ç60"C„¿¼Ít'’/$g­ãâõs.Ç'ߊFjÞÁ{–�ÂÞ"ôÏîÈËõSÒîË#£·e‘ìÛð Ç­@Éí±ásÂq#ëÄ*@wÂxÏWUÂF5C™§~»×ÖpìgŠ ñÿ÷Èà1¯g%xÇ”ÇCIÈtÓóÉv¢ÝV«,hlsuï»Þž¥«Mðý¼çèuŠ�{çjU½>HRÐFè­«™*nÚŸU?Tð“(T ¼YRW’5[ºÒÝ©#Q¶é‰‡û¨jjå5ŸU4Uú4Öîܼ¯XÝÝ ÕýîI3r¨–�qD=w9UIóhóS™¬iÕ½W¼äÞ@ó‚zÐ<=`zœäv\øœ7¢yq�º©qVæî³’¾+gybQÖ�D¥dnE†™«U$Ÿû5d`\mn+c}°õããï–KämF*†*µ4üÛßSÑѨBC%®‹s@üQÑ+Õ$_BG=Ó�ƒ}·àª®.+: œœ‘RÿßÖ(Çfºà±6ö¸ïé÷y§Yq­0�øHL 4º-™|þ|�qâ¬Ø¡E숒÷·ÀsW˜s̈Åmaü†í±'|ŠãŽ·qQÄÁ¤·ÊôË_ÿò�Ÿƒ¨ endstream endobj 122 0 obj <> endobj 104 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 989.9921265 112.0078735 cm +/Im0 Do +Q + endstream endobj 105 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 123 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1289.063 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1288.0634766 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 124 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1444.599 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1443.5993652 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 125 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1478.447 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1477.4467773 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 126 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 711.008 m +1093.816 711.008 1061.304 678.496 1061.304 638.534 c +1061.304 598.572 1093.816 566.06 1133.779 566.06 c +1173.741 566.06 1206.253 598.572 1206.253 638.534 c +1206.253 678.496 1173.741 711.008 1133.779 711.008 c +1133.779 565.06 m +1093.265 565.06 1060.304 598.02 1060.304 638.534 c +1060.304 679.048 1093.265 712.008 1133.779 712.008 c +1174.293 712.008 1207.253 679.048 1207.253 638.534 c +1207.253 598.02 1174.293 565.06 1133.779 565.06 c +W n +q +0 g +/GS0 gs +146.9487305 0 0 -146.9487305 1060.3044434 638.5339966 cm +BX /Sh0 sh EX Q +Q + endstream endobj 127 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 711.008 m +1365.01 711.008 1332.498 678.496 1332.498 638.534 c +1332.498 598.572 1365.01 566.06 1404.972 566.06 c +1444.935 566.06 1477.447 598.572 1477.447 638.534 c +1477.447 678.496 1444.935 711.008 1404.972 711.008 c +1404.972 565.06 m +1364.459 565.06 1331.498 598.02 1331.498 638.534 c +1331.498 679.048 1364.459 712.008 1404.972 712.008 c +1445.486 712.008 1478.447 679.048 1478.447 638.534 c +1478.447 598.02 1445.486 565.06 1404.972 565.06 c +W n +q +0 g +/GS0 gs +146.9484863 0 0 -146.9484863 1331.498291 638.5339966 cm +BX /Sh0 sh EX Q +Q + endstream endobj 128 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 982.776 m +1093.816 982.776 1061.304 950.264 1061.304 910.302 c +1061.304 870.339 1093.816 837.827 1133.779 837.827 c +1173.741 837.827 1206.253 870.339 1206.253 910.302 c +1206.253 950.264 1173.741 982.776 1133.779 982.776 c +1133.779 836.827 m +1093.265 836.827 1060.304 869.788 1060.304 910.302 c +1060.304 950.816 1093.265 983.776 1133.779 983.776 c +1174.293 983.776 1207.253 950.816 1207.253 910.302 c +1207.253 869.788 1174.293 836.827 1133.779 836.827 c +W n +q +0 g +/GS0 gs +146.9487305 0 0 -146.9487305 1060.3044434 910.3016968 cm +BX /Sh0 sh EX Q +Q + endstream endobj 129 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 982.776 m +1365.01 982.776 1332.498 950.264 1332.498 910.302 c +1332.498 870.339 1365.01 837.827 1404.972 837.827 c +1444.935 837.827 1477.447 870.339 1477.447 910.302 c +1477.447 950.264 1444.935 982.776 1404.972 982.776 c +1404.972 836.827 m +1364.459 836.827 1331.498 869.788 1331.498 910.302 c +1331.498 950.816 1364.459 983.776 1404.972 983.776 c +1445.486 983.776 1478.447 950.816 1478.447 910.302 c +1478.447 869.788 1445.486 836.827 1404.972 836.827 c +W n +q +0 g +/GS0 gs +146.9484863 0 0 -146.9484863 1331.498291 910.3016968 cm +BX /Sh0 sh EX Q +Q + endstream endobj 110 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 1403.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 130 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 983.06 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9890137 0 0 -684.9890137 925.2645874 983.5601807 cm +BX /Sh0 sh EX Q +Q + endstream endobj 131 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 618.106 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9890137 0 0 -684.9890137 925.2645874 618.6060791 cm +BX /Sh0 sh EX Q +Q + endstream endobj 132 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 934.687 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9890137 0 0 -684.9890137 925.2645874 935.1867676 cm +BX /Sh0 sh EX Q +Q + endstream endobj 133 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 565.467 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9890137 0 0 -684.9890137 925.2645874 565.9667969 cm +BX /Sh0 sh EX Q +Q + endstream endobj 134 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1060.808 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1059.8078613 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 135 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1093.605 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1092.6047363 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 136 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1249.141 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1248.140625 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 118 0 obj <>stream +H‰ä—ízš@…1ióakLëXiquš€€†û¿·î.hDITX9?:¿òáÝùØ™3ްµ ×®ãH"#"†�…"„¬‚M„ì*²!ë`K™ ä©Çò“ö¹@�Y“ßä¹&ç²é$yõ‘SXž=XžŸa>/5ùA°6‚õí6«^8€�qjè m]Û.„L0½­»'fÇ�0í)r!ûŠü.bE¾B�¿ÂÒ<‚¥™a×YÀÈ ½Tý—+p†›4'ò 6#_‘×9†Ø&…\˜,€õ‘‰ÖÚ�434Ø�q1ÐM{… Ïa‹ ,غ²éAÆU¶‡šSz4Ë5‚ «¯?º¾rY¢êë¡‚ sÙC¹\„\ÈúFѼNt–.ëò‚¬z.CÄnn²¼�Ô�2{-ú/ Xö¾— ð•n^”¥ý“]•× •d“cÊÞzÏM ƽƒ�býpÿBdðkï³QpéqïÕ•TeÝ{ á2ÔþÏÞÁUU÷íñ ÇÓžÁyX‚9ì<Þxìõ emQÖNw¥}¹4V ¨}p,¹¬òx¯E¾&‹>°jòî‚}â·~°N5&ŒIonE½žjÛ$ .ó£Þ®/1¬¶“½×˜ïGìÑŒ_ÒüRÇHÉ5KDèÑtî¥vÏ�'¿G"ˆ<Ábaég�·'S业bn7ÏŠcfc�Œ#?É>š‘™´®¬XÜåËæ©`¦Èk5Ëì‘Nr?=L…—„~S!XÛ ?·õ1Vc3{¯ˆäâƒ{ÿCu›YülãkÿôuîG endstream endobj 100 0 obj [/Indexed 70 0 R 51 169 0 R] endobj 168 0 obj <>/Filter/FlateDecode/Height 140/Intent/RelativeColorimetric/Length 1431/Name/X/Subtype/Image/Type/XObject/Width 122>>stream +H‰Ä×L”eð8†À€ A@ÔÄZüQàºÐ… ¥dq�º™l"Š?j„?²œsHk]�M1G%édpÍnT ¢P P¦(?"áñ¸{ú>/Çý※÷Þ{¿ß¿àîý~?÷¼ïó<ßç%!ÜKë}1\BŠ)ÍA�i)=…"~�"Ãͦu(ò7 ß@‘O€ÜŽ"çƒÜ‡"ïù1м dêŒ!¿Îd 9™ÉR ù&ûcÈ2&aȱhò LÄ�£Ðžóóhs;šÉžr,Ú‡¶o¯FëUëAnC‘SAn@‘Y—¬A‘ÙÙó[ùÈE(²ä}(òy�ÓQd%È«Qä�ŸÁ€�ŸP:æŠ!ÏE{Å` £EÎD[ÎÇ@Þ�"W‚¼Ef‹Ê–|&/ƒ|EÎ9E.G›`=”ŽºaÀá0äk0yäC(2ÛGâ1`·!JU(�9†\…“S oÇ€%)ÕaÈ 0d%LNƒœ�{ÃÌÖcÈ;`ÈW0`òÈoaÀ2€ûÝ1ä +�?À—hAÅ�K±æ×b ȉò7aÀ˦rØ©àVùm6ä7`ßnö”�äb6äu0ëË´–v<¶A>dž\„oeð}ñá¥ÃLNökgðyña׫ î _þ‚Át“øp‹§³smöNP3X.:,ãÖ‚Z©âàOD‡c8¸ÜIlX6ÈÁ¿‰>»Ö�pð?¢o!iO8øá³bÃ{¹uLû#Dv%_r.ˆ–^‡Wˆ ‡·ŽÃ�–‹ o_Æ´7šWú² ?Wr||nÑ{‹yåG Óx%.PŽ»ôæB^ùä'Jëøä½Ú§ƒ•þüàhȽf{šW‰Î¥e³øÁäK¶9kUÛ|�w“¸Ù»mÌñú\7µ¨j3_—Ìa5"mËY{gbÀ·—ñ†¹w‚{6e—M¸´JÊ&•Pàk®—ìœpÕyöœ|C‰õÖ_ŸÐ¬p{¬.!¬ËX½,B/é]zVjLj F©•×*Ôz·_nŸK±™�dÕ¥ÞG† ¾8ÏN˜f‡kú…×�>ƒÛcï€ që†:Ç­p÷¹ôŒŸÝ0Éd…ÂfºÊïP¿‘Ûo¿KœØ¹:ÃE �ž/Ìu&›X­é7ÞËÆŒ\Mq�.qj€bw§™_®iJjW„:×nfÕr¦üznA—‰Û�(�K$-Pî_/Ë_º$]P›¸-©Â½¬½Ç +æ[ü*ä`§ Koe¸æ’Ù½l”NþÂ#½Vkêþ)Ð%¤˜Õ<`þ©s|É )KëS„»Ï,V±quyš~ñ©Ù]¦Úª8AYBܹ·’íÆ…ìo2cé�"\`—�BV¸ÑðøæçüjÎÒŽÝO î’nÉtÿÍËþYkÎj.mtZébÎVü,÷÷ülå$–>8ⶉZV½?N{~™Ìª+’y¾âÍG9 3ìÃë“Tè‚{„é +–"�Fÿ¶ÀöœŒrKḦ’…ª4ÉQw™‹çz,²£•rÏ™“퉠6 ¬ºz‹Ô±,!þY`·Ív4 Ê|6�^Ü" #n4a‡Ëßðƒ…Îk ÿw&ÅCbŸžíR$rzµ6ô³«ñÄG¹ïÈ7¼â눶0)¼-­cíÀ�µß)¿/_訟ñ´Å-Ä84Ý�Õ%g%G{š54#mXmmu%™²ÎÂÐ÷­—õ¿àV–ò#ÛeJ„¸ñ­|d*D#ÙÚÐr·wª9UŒëÂÅ'84zMJæÎ‚¢Ó?*oöj¦—N6g¿°¸×² +ê;F-È{'‡ï’µ[ó¿ºÜlxÃé–Š#~BäÆìŠ&UçJ!ªý/Àgù=ü endstream endobj 169 0 obj <>stream +ÿÿÿ9>333.)('''&&&&%%%%$ $!$$!$$$##$###!# ##!# ##"##" "" """" ""!!!!!"!!! !!!!   endstream endobj 167 0 obj <> endobj 103 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 166 0 obj <> endobj 165 0 obj <> endobj 164 0 obj <> endobj 163 0 obj <> endobj 162 0 obj <> endobj 161 0 obj <> endobj 158 0 obj <> endobj 160 0 obj <>stream +H‰ìÎÛmÃ@ÁeþIþ0l‹¯kJ¼]T•î´¼-érKóÖÖõ݌ܼ֕»Í}�ßæ¿o=±�ZWì¬Ö÷:¹õÆjݱýZ÷kwÖÝúÛ¬u—~>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 5024/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖy8ÔûðÓ=…aÃ,Ö&ëØ² Ž}-m48®®�­£Ü$FžN�’µ“«R¶¶S‰¨ëFŠq+�Â(ÉîHŒÊ¾gߪ{Î÷÷›QH�.Æsþèýÿ|ž×óY¾¿ù曯ádV,:% G˜Ð¯ÿƹ,TÇR} ²’� +³u pA¨U«Vqqq/u¸¸¸@á•Ó¸ÿ×T\Ü<<///äâ×õn.6î‹mÓ.ÀBðò!ùP(AAAôÒTB¡PüüH>÷¥¶i`!ùQ‚ha ‹Ãáñ"K<‡Ãb1ÂBh”’�±l_c¹øøQha,^DL\B’@$J±"½ð°+‰‚¤„¸(‡@ò"¸¹ ™þm ãâ†\B¼¨AŠ$#'¯ ¨H&+-EÈd²¢‚¼œìjQR\‡A£�¼?QÖ$¹xx‘(!¬ˆ8�$«@VQS×ÐÒ¦PtXÑ]hØ¿§P´µ45Ö¨*+ÊÉHKŠá1h$ܶÏÒ`˜$Ÿƒ'ÊÈ+©iRôô�ŒMÍÌ-,,Y±ZXØ¿¶°077316üNWK]•,G"ˆá…ùAÛ>OƒaÜÐ0œqµ‚І޾±¹•õÆÍ¶[¨vööö‹ ¨agGÝb³iÃ:KSC=í5Êò$‚(-À&ú™]ƒv † ‹H�äU4t�Ì×mÚâàäìâæîááééÇ{aaýØËÓÓÃ}»ë¶­Žö¶¬L (êJrRâ8!‚ûÓ´i˜ F” C^£cd±a‹£óv/_?ÿ€@-ˆ•} û×A´À€½{vïúÁÓu«ƒ�µ™�¶šIRD…D°ú ØJ.F”UÖÔ7[OuróöõÚðð‘°ðˆÈÈȨE'22"",4äÐ�à@¿�ž.Ž6ëLôÔÉ2@ããù †ñ QQ)9Um#+G·ü‚„DüsòT\|BbbÒ$11!þtì‰ ?¼?ðŸ^Û6Yh*ËΠÍ×2ãC ‹åT)ÆÖTg¯Ýû~ŠˆŽM8{áÒ•”«ié רDÚÕÔ”ä‹çÏÄ�ø9ô@ ¯‡“­•¡Dà�Õà%ã!ȪRLÖÛ»ú�‰;w)õú²²oçäÒéy‹�NÏ͹u33#=åbÒ©c¡ûýw8S×i)ËHâÑüˆùš· �Dã$d”µ�×;¸í + +9vúü•ë™·óîÝXPTÄ`/> £¨ðáƒü»ô[7Ò/Ÿ‰�ú)ÐÇ…ºÖP“LÇ +"Áζzjr<z:æ4�Õ2A¬¸ŒŠŽ¹�³Ï¾°“çÓnÞ)(©¨­o|ñª¹µµ­¤cq�J´·µ¶4¿ljxVSþèA^fÊ™˜�ÀN›L´•HâÔGM{ß2)EM£ ÷ +9~.-û£¬æySs[GWwOoHÿbéííéîlo}Å|V]Zx'+%)ú�¿‡Ã:uy"h×t˜|(¬„Œªž%ÕÍï౤ԛ÷Š+ê˜Íí]½ý¯‡†††—" Îàà@_OgÛ«†Ú²¢;™WŽî÷u±5×Q^-Ž›6{œð0‘h¢¢¦ñÆ­>ÁqÉ™wÏ^´võ¾‡3±ð° +Œ���ŽŒ ô÷t¶0++Ì˸Fóv´6T—'àÁyÎ'‚æ MIZDhæ‹dàÓ$,.£¦oíä³ÿعßyTÓÔ“C0Xöfrl¨·­±Š‘wíÌQ°hk¿SY-&Ä�˜)ƒN#!»Æpã?|Æürã^Éo/;û‡Ç§8Õ2˜�³ãEíã»ç£Üé´Þœ€08�Y2ø45Œ7mÛ}èÄ¥¬û¥Ïš»F& g`Óã| íIþ�_ŽÃ' .+1ë8Ù�A^ÓÄÆuOHlröƒ²ú–î°fk �qNŒt7?{úëÍË'û¹l6Ö�“_�¹2øÑ°Ý¾7ôtÊ­‚òçà8¸f¿³Æ Þ�p³“OÙãjcª©@ÀÎ|6 xΈŠÚfTwðh¤æV4´öròزɱÁžÖ†Š‚Û)§C÷nßb¦¥@À},ÃÉsªG`xüÕ\ðh´A2έٴ gCeaNj|X€;Õ\[‘ˆÚ\™zhi i¹Œ*&x4Æ9x¿Ã‹6?•E¹WÂ=ìÌ)dø©�-ƒþièXØ{Ò"ÓèË&êkgV1rÓ"hv²Ô¼2%K{Ï ÈÄt:£Ȇ—OFOKŒ¤yÚ[è�¥DÐsdH¶Ì+(2i9eÃ@VÍ §'FyÚ[ê(Í’­˜-ŸÍ¼âê¦e–%Ey±eÈyedýË%kª.ÎKOŠš-[1¯ìZ^qMSÇ2Éú?È>%“ž+ãèÇ齬£©¦8ïÚŸÈt—W}žæÊ¤ÿ¢2ÝOʬ ¿´_e³eû¼¬¾Êþ`¿¾£š<÷8€·‡ª…0’@X H¢Œ°ä„�)"„R-Ë¢‚ÌÖZáQ¯\@e© ×"CåŠ ‹A/ .{ÊÙ S=÷y“`eè© öÞsÞïÿÏ{>ç7ž'�e° –Á2XË`,ƒe° –Á2XË`,ƒe° –Á2XË`,ƒe«•ùî·5ù”™Øî÷ý+ešÿ#²×¯f§ËpËË4ÿ +ÙóöÚ²¼´Êp‹eS³¯^¯¹løcdiyeµíÏ?›¬­––›GõÝOyGöÅbåÙðg•ÅR}]9²�oe_@²�oeÔ¸´\ZmÛg’1€ŒNËM�¥ú¸RŒ5 ï—¹úRc?¿ì~jL¨�‹�±'Ì¿D&Œ#hÛ¸ú„ƦæÒè@Æø ²IÆPo+½ô~JLˆ·‹�‘»TÆÏ–¹x‡Æ¤Þ/¥·ö1&×Z67Ã’Õ”ÜKŽ9álmDRXV†U Y;Ÿ‰N¹WRÃ’ÍÌ­¡ì K6>ÔÓR]œs#êo^N» Õ$ÑžÅ24�îrò +ŽJÎ)®négÉ֌ƒ1Ç»›«Š²“.y:Z¨É/•ñ Ð’òêVŽžA—’²‹ªš»Ç™k.›fŽ t5Uf^�<}lŸ¥žªœ +Á³þ]ÙzJRNMßrß±À ×3 +›ºƘÓsk8hÐLOŒö?k¨(ÈH ?åá`AV‘Gò-•IȪ�¿uð8‘˜QPÑð¬tbZ�5¢½á<›/:êžä§'„�t·7×ÝŠCòq/”qó!Åñ[uÍíÝO†%¤ç?©ë€Î5lç›×¬Õ„ž€²¼[Wβ3Ó!nâå^Çõ‡Œk=7¯�èf¢Ž™Ý¡€s—oæ� �½œkU4¨d`ÌÆÁj–ÜK‰a=›ZJÒÁM_/�­ûšW#¥¤ŸÐh°œ`ÆXí\›IƒJ6;�Yc壬¤‹Ð¥aDO€ÀÆÅ²MÐ#@2Ë Vàîïåõ�/F^rŠöÉmoX%c5³½îßï\ ?ut¯¥>ti@-×—ó²/¹À…® 9U²…Ñ“añ·”Ñ[{Ç&¦ Ú§¶A.J6ÐÝRSš{óò¹€Ã»¡_pip–¬€Ì–mfvý¨1)9EO;û†ÌéYíSáXŸ‚`³`ʆžwÔWf%] +öv¥˜j+³`¡Œk74iEMck'ÏÀÈÄ;ù�k[»ûG T ØØ¸O’×�knfšÉéïj®¡=¸�ð�SG÷í4 )@¿ß3Π�_Xy5=‹=n?ž�KÉyTQßÞ;0Ê`NÍÌαqœ¬ØÃÉ+àš�™b2FzÚêÊ ³nÄPý}š)+�Ù4h<ÐN¢Ž)ÅÅ+(òZúƒÒªÆŽÞ�ÆÄäô „ƒx¬¼^Q8‡¡ïÌÎÌLMN0Fz;ž–äÞŠÿ帓µ±–h&ß‚1ãܵ¼‚"8‚º¾¥ƒ[À™è¤»Ëjš:zû‡Ç^NLNMÝÌ,;s+ +ç0øÌôÔ$s‚16ÜßÓÑXMû-ãרP¿CödUy¬ð¢fη“%�ߢ³�â|ü—°+©Y�kÛ»ûGÆ/'˜ÌÉÉÉ)V¦WöYðæÄÄËñ±áÁ¾î¶†ê²‡™Éqÿù¨£µ‰¶²Œ +±°™ì?)Ð3€‘E³Ø}Ð'(">-» ¬ª¾µ³çÅÀÐÈèØø8ƒÁx¹Ê€OŒ��� ôõt¶Ô=¥=ÌJ½xb¿�9YM+"ÈÞÌwdóECKà‰ÚÆV{ÝüC.$¤e=,­¨mlíìîíëYq Óà#ƒ/úz»:Zèå%ù™©ñ‘Á~‡vi²K¶¨™,¸Ò I“WÕÝnãèz!>õîƒG�ŸÒë›Û:žuu÷ôö>‡Ò·Â°÷öötwuv´6ÕÓ+Ë +ó2R®F†ø»ÿ`mºME+¼LÉ vBEC Ä¤ÕõÌm�<B"®$¥çä••WÑëšš[Z[ÛÚÚÚWp¼µµ¥¹©¡Ž^UN{ô[öí_/‡ûq¤|CV#H‹"—)§hܼÂxe ýß9yø…E_K¹“óà÷bÚ“ŠÊªê:½ä?+ t–N¯©®ª,B+.ÈËþWrBÔù@?wG[s=’’Œ8Z`ÓÒ’qж�‡OH+KÔ4Øaëèæó˙ȸĔÛwsòò +‹ŠKJi4ZÙ*Ž—–äçædÜJ¾AýÙûðs} "^RD��gÃÒ’qÖô‰ÁÉmÑÔ7·Ù{ðx@ÐÙȘøëÉ7Ó32³sîÝÏÍÍÍ[EÀñû÷r²33Òo&ÿójtÄ™ÓþÇ8X£§A”Åb„@/—)ÙÛ~nâGŠâäˆzÛ­v;»yýH »}9!ñzRrJjjÈÍ:›ššr#ézbüåèÈó¡§<;}¿Ó”L"Êâ0HÄ&[¦dì~~µÐP¢8Yeu]c Šƒ‹›§ßÉÀÐsa.EEÇÄÆÆ­*±±1ÑQ#ÃÏŸ 9ý“ïñÃÎö6;Œ¶©)á±$?4d\Ë•l~Ô ªa°xEUmýí–”=N�xúœ<J¥žYE¨ÔÐÐ�à Ó§~ò÷>î~ÀÑÞÆÂDOK… #É‚±†l9Ø»4 iy¢ºŽ¾©…µ�ƒ£ë!w�cž^'¼}|9ñûÈÌŸóñ>áåyÌÃí «ãžïví0ÑÓVS–“B|�›†Ãá [ÔuôŒÍ,¬(vöû�œ]\]÷³sà#Ã9æêêâìä¸ÏÁÞŽbeafDÖV#*È`EÑ‚ØrCö¶h,ÚF>”ˆ„ž@TÓÜF6413ÿÖÒj—µ� …B±]qÀaë]V–æf&†d Ue>stream +ÿÿÿ endstream endobj 159 0 obj <> endobj 176 0 obj <> endobj 177 0 obj [0.0 0.0 0.0] endobj 178 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 1403.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 179 0 obj <> endobj 181 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 5024/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖy8ÔûðÓ=…aÃ,Ö&ëØ² Ž}-m48®®�­£Ü$FžN�’µ“«R¶¶S‰¨ëFŠq+�Â(ÉîHŒÊ¾gߪ{Î÷÷›QH�.Æsþèýÿ|ž×óY¾¿ù曯ádV,:% G˜Ð¯ÿƹ,TÇR} ²’� +³u pA¨U«Vqqq/u¸¸¸@á•Ó¸ÿ×T\Ü<<///äâ×õn.6î‹mÓ.ÀBðò!ùP(AAAôÒTB¡PüüH>÷¥¶i`!ùQ‚ha ‹Ãáñ"K<‡Ãb1ÂBh”’�±l_c¹øøQha,^DL\B’@$J±"½ð°+‰‚¤„¸(‡@ò"¸¹ ™þm ãâ†\B¼¨AŠ$#'¯ ¨H&+-EÈd²¢‚¼œìjQR\‡A£�¼?QÖ$¹xx‘(!¬ˆ8�$«@VQS×ÐÒ¦PtXÑ]hØ¿§P´µ45Ö¨*+ÊÉHKŠá1h$ܶÏÒ`˜$Ÿƒ'ÊÈ+©iRôô�ŒMÍÌ-,,Y±ZXØ¿¶°077316üNWK]•,G"ˆá…ùAÛ>OƒaÜÐ0œqµ‚І޾±¹•õÆÍ¶[¨vööö‹ ¨agGÝb³iÃ:KSC=í5Êò$‚(-À&ú™]ƒv † ‹H�äU4t�Ì×mÚâàäìâæîááééÇ{aaýØËÓÓÃ}»ë¶­Žö¶¬L (êJrRâ8!‚ûÓ´i˜ F” C^£cd±a‹£óv/_?ÿ€@-ˆ•} û×A´À€½{vïúÁÓu«ƒ�µ™�¶šIRD…D°ú ØJ.F”UÖÔ7[OuróöõÚðð‘°ðˆÈÈȨE'22"",4äÐ�à@¿�ž.Ž6ëLôÔÉ2@ããù †ñ QQ)9Um#+G·ü‚„DüsòT\|BbbÒ$11!þtì‰ ?¼?ðŸ^Û6Yh*ËΠÍ×2ãC ‹åT)ÆÖTg¯Ýû~ŠˆŽM8{áÒ•”«ié רDÚÕÔ”ä‹çÏÄ�ø9ô@ ¯‡“­•¡Dà�Õà%ã!ȪRLÖÛ»ú�‰;w)õú²²oçäÒéy‹�NÏ͹u33#=åbÒ©c¡ûýw8S×i)ËHâÑüˆùš· �Dã$d”µ�×;¸í + +9vúü•ë™·óîÝXPTÄ`/> £¨ðáƒü»ô[7Ò/Ÿ‰�ú)ÐÇ…ºÖP“LÇ +"Áζzjr<z:æ4�Õ2A¬¸ŒŠŽ¹�³Ï¾°“çÓnÞ)(©¨­o|ñª¹µµ­¤cq�J´·µ¶4¿ljxVSþèA^fÊ™˜�ÀN›L´•HâÔGM{ß2)EM£ ÷ +9~.-û£¬æySs[GWwOoHÿbéííéîlo}Å|V]Zx'+%)ú�¿‡Ã:uy"h×t˜|(¬„Œªž%ÕÍï౤ԛ÷Š+ê˜Íí]½ý¯‡†††—" Îàà@_OgÛ«†Ú²¢;™WŽî÷u±5×Q^-Ž›6{œð0‘h¢¢¦ñÆ­>ÁqÉ™wÏ^´võ¾‡3±ð° +Œ���ŽŒ ô÷t¶0++Ì˸Fóv´6T—'àÁyÎ'‚æ MIZDhæ‹dàÓ$,.£¦oíä³ÿعßyTÓÔ“C0Xöfrl¨·­±Š‘wíÌQ°hk¿SY-&Ä�˜)ƒN#!»Æpã?|Æürã^Éo/;û‡Ç§8Õ2˜�³ãEíã»ç£Üé´Þœ€08�Y2ø45Œ7mÛ}èÄ¥¬û¥Ïš»F& g`Óã| íIþ�_ŽÃ' .+1ë8Ù�A^ÓÄÆuOHlröƒ²ú–î°fk �qNŒt7?{úëÍË'û¹l6Ö�“_�¹2øÑ°Ý¾7ôtÊ­‚òçà8¸f¿³Æ Þ�p³“OÙãjcª©@ÀÎ|6 xΈŠÚfTwðh¤æV4´öròزɱÁžÖ†Š‚Û)§C÷nßb¦¥@À},ÃÉsªG`xüÕ\ðh´A2έٴ gCeaNj|X€;Õ\[‘ˆÚ\™zhi i¹Œ*&x4Æ9x¿Ã‹6?•E¹WÂ=ìÌ)dø©�-ƒþièXØ{Ò"ÓèË&êkgV1rÓ"hv²Ô¼2%K{Ï ÈÄt:£Ȇ—OFOKŒ¤yÚ[è�¥DÐsdH¶Ì+(2i9eÃ@VÍ §'FyÚ[ê(Í’­˜-ŸÍ¼âê¦e–%Ey±eÈyedýË%kª.ÎKOŠš-[1¯ìZ^qMSÇ2Éú?È>%“ž+ãèÇ齬£©¦8ïÚŸÈt—W}žæÊ¤ÿ¢2ÝOʬ ¿´_e³eû¼¬¾Êþ`¿¾£š<÷8€·‡ª…0’@X H¢Œ°ä„�)"„R-Ë¢‚ÌÖZáQ¯\@e© ×"CåŠ ‹A/ .{ÊÙ S=÷y“`eè© öÞsÞïÿÏ{>ç7ž'�e° –Á2XË`,ƒe° –Á2XË`,ƒe° –Á2XË`,ƒe«•ùî·5ù”™Øî÷ý+ešÿ#²×¯f§ËpËË4ÿ +ÙóöÚ²¼´Êp‹eS³¯^¯¹løcdiyeµíÏ?›¬­––›GõÝOyGöÅbåÙðg•ÅR}]9²�oe_@²�oeÔ¸´\ZmÛg’1€ŒNËM�¥ú¸RŒ5 ï—¹úRc?¿ì~jL¨�‹�±'Ì¿D&Œ#hÛ¸ú„ƦæÒè@Æø ²IÆPo+½ô~JLˆ·‹�‘»TÆÏ–¹x‡Æ¤Þ/¥·ö1&×Z67Ã’Õ”ÜKŽ9álmDRXV†U Y;Ÿ‰N¹WRÃ’ÍÌ­¡ì K6>ÔÓR]œs#êo^N» Õ$ÑžÅ24�îrò +ŽJÎ)®négÉ֌ƒ1Ç»›«Š²“.y:Z¨É/•ñ Ð’òêVŽžA—’²‹ªš»Ç™k.›fŽ t5Uf^�<}lŸ¥žªœ +Á³þ]ÙzJRNMßrß±À ×3 +›ºƘÓsk8hÐLOŒö?k¨(ÈH ?åá`AV‘Gò-•IȪ�¿uð8‘˜QPÑð¬tbZ�5¢½á<›/:êžä§'„�t·7×ÝŠCòq/”qó!Åñ[uÍíÝO†%¤ç?©ë€Î5lç›×¬Õ„ž€²¼[Wβ3Ó!nâå^Çõ‡Œk=7¯�èf¢Ž™Ý¡€s—oæ� �½œkU4¨d`ÌÆÁj–ÜK‰a=›ZJÒÁM_/�­ûšW#¥¤ŸÐh°œ`ÆXí\›IƒJ6;�Yc壬¤‹Ð¥aDO€ÀÆÅ²MÐ#@2Ë Vàîïåõ�/F^rŠöÉmoX%c5³½îßï\ ?ut¯¥>ti@-×—ó²/¹À…® 9U²…Ñ“añ·”Ñ[{Ç&¦ Ú§¶A.J6ÐÝRSš{óò¹€Ã»¡_pip–¬€Ì–mfvý¨1)9EO;û†ÌéYíSáXŸ‚`³`ʆžwÔWf%] +öv¥˜j+³`¡Œk74iEMck'ÏÀÈÄ;ù�k[»ûG T ØØ¸O’×�knfšÉéïj®¡=¸�ð�SG÷í4 )@¿ß3Π�_Xy5=‹=n?ž�KÉyTQßÞ;0Ê`NÍÌαqœ¬ØÃÉ+àš�™b2FzÚêÊ ³nÄPý}š)+�Ù4h<ÐN¢Ž)ÅÅ+(òZúƒÒªÆŽÞ�ÆÄäô „ƒx¬¼^Q8‡¡ïÌÎÌLMN0Fz;ž–äÞŠÿ帓µ±–h&ß‚1ãܵ¼‚"8‚º¾¥ƒ[À™è¤»Ëjš:zû‡Ç^NLNMÝÌ,;s+ +ç0øÌôÔ$s‚16ÜßÓÑXMû-ãרP¿CödUy¬ð¢fη“%�ߢ³�â|ü—°+©Y�kÛ»ûGÆ/'˜ÌÉÉÉ)V¦WöYðæÄÄËñ±áÁ¾î¶†ê²‡™Éqÿù¨£µ‰¶²Œ +±°™ì?)Ð3€‘E³Ø}Ð'(">-» ¬ª¾µ³çÅÀÐÈèØø8ƒÁx¹Ê€OŒ��� ôõt¶Ô=¥=ÌJ½xb¿�9YM+"ÈÞÌwdóECKà‰ÚÆV{ÝüC.$¤e=,­¨mlíìîíëYq Óà#ƒ/úz»:Zèå%ù™©ñ‘Á~‡vi²K¶¨™,¸Ò I“WÕÝnãèz!>õîƒG�ŸÒë›Û:žuu÷ôö>‡Ò·Â°÷öötwuv´6ÕÓ+Ë +ó2R®F†ø»ÿ`mºME+¼LÉ vBEC Ä¤ÕõÌm�<B"®$¥çä••WÑëšš[Z[ÛÚÚÚWp¼µµ¥¹©¡Ž^UN{ô[öí_/‡ûq¤|CV#H‹"—)§hܼÂxe ýß9yø…E_K¹“óà÷bÚ“ŠÊªê:½ä?+ t–N¯©®ª,B+.ÈËþWrBÔù@?wG[s=’’Œ8Z`ÓÒ’qж�‡OH+KÔ4Øaëèæó˙ȸĔÛwsòò +‹ŠKJi4ZÙ*Ž—–äçædÜJ¾AýÙûðs} "^RD��gÃÒ’qÖô‰ÁÉmÑÔ7·Ù{ðx@ÐÙȘøëÉ7Ó32³sîÝÏÍÍÍ[EÀñû÷r²33Òo&ÿójtÄ™ÓþÇ8X£§A”Åb„@/—)ÙÛ~nâGŠâäˆzÛ­v;»yýH »}9!ñzRrJjjÈÍ:›ššr#ézbüåèÈó¡§<;}¿Ó”L"Êâ0HÄ&[¦dì~~µÐP¢8Yeu]c Šƒ‹›§ßÉÀÐsa.EEÇÄÆÆ­*±±1ÑQ#ÃÏŸ 9ý“ïñÃÎö6;Œ¶©)á±$?4d\Ë•l~Ô ªa°xEUmýí–”=N�xúœ<J¥žYE¨ÔÐÐ�à Ó§~ò÷>î~ÀÑÞÆÂDOK… #É‚±†l9Ø»4 iy¢ºŽ¾©…µ�ƒ£ë!w�cž^'¼}|9ñûÈÌŸóñ>áåyÌÃí «ãžïví0ÑÓVS–“B|�›†Ãá [ÔuôŒÍ,¬(vöû�œ]\]÷³sà#Ã9æêêâìä¸ÏÁÞŽbeafDÖV#*È`EÑ‚ØrCö¶h,ÚF>”ˆ„ž@TÓÜF6413ÿÖÒj—µ� …B±]qÀaë]V–æf&†d Ue> endobj 157 0 obj <> endobj 156 0 obj <> endobj 155 0 obj <> endobj 154 0 obj <> endobj 153 0 obj <> endobj 152 0 obj <> endobj 151 0 obj <> endobj 148 0 obj <> endobj 150 0 obj <>stream +H‰ìÎQ‚@Ááþ—6~`…FÙy&]'¨*ÝgùZPåŽå­«Ë¹« ·y-T›Û:]›ß:WëyϺ^³¾ÖçZïk<ë~ gÝ­Q¬{õ”úÚ›u�^þ&ÖýyK}寖ÔWnlùƒX÷d%6¶ÄǺưðX÷b‡1ÊeŒ2F£bcKt¬û°ËeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQƨèXäÌTÆ c”1ÊeŒ +�ÎRce ªÔYj¬òca³ÔXUè,5V:K�ÕZwèe ™m_±�WÄl÷•0ÄÚg£W÷lüj�}juÎ^mµãWËìL«¡v¶5¹FZo¸5åvmusî«Ôo›?®hå!À¨Q‹ endstream endobj 182 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwT“iàqW)I „’PD�NiEiÉatAD‚+E‡µ!RÆÂ**mÆY,ÑÈ c[¤©ƒ´ ",ôéMÜÝ÷K"JX€0Î9ßïÿïžçÜ{ß›|÷áeδó Q„¡„>þ›ð2Eõw�¹ÂT˜�ûzdš7ožˆˆèLGDDžûÞö•,€G H(¨é‡[ÔáÛ¾”öžTâ$JBR�–’’ÂÌL@%4-)!�BŠóm_H{Ï*”Z +##+'‡Åâpò3‹•““•‘Æ %QHdãѾÀÅc!%Ð9œ¼¢’² +^UU�õ©‡_AU�WQVRÀae¥¥$QqQh Ÿ‘ÍáºDD!–´,NA¯FÐ jiëè�Hº3‰¤£­EÔœOPUQ’ÇÊbÐ(„·iŸ'oŒ"bZZN^ OÐÔ&-00265#“Íy±˜jøß“Éf¦&Ɔúz:D uEœ,FÅmÚ§d\#R#‹SRÕÐÒ50![.Zlcgï@¡8òâ4µð¿¦Pìmm¬Z˜铈¼"NFJ4í“2®KT´ «¨:_{�±ù"'çïW¸¹{xR©TÚtjxzz¸»º,_êhgmif¨§EÀ+Èa$‘`œ“ï´_\—Œ¼2Ak�±Åb‡¥.ޫ׬õ÷§Ó¸Y7µð> Óý×úùú¬ò¢º-w²³"éÕ”°Òh¤¸è¤²÷.)Y¼ÉÐ|±ãrw/o¿€��Ûv‡„„ò²kjá´sûÖÍ辫h®ÎöVfÚy4Jœ7͉]sy.UM=“EË}üpÄžà@ÿ•nNÖ¦�LZ1Ñšñ !)#�'ê›Û.£ún Ú{ú—s/ÿvõzÖÍl&3gúa2™Ù7o\ËÌ`¤¦$�<¶c½·Ç’Ŧz*XŒ„ø-ã RƒSÑX@¶]Fó ?rêÌ…ËW³rîÜ»ŸWPPXX4ýäßϽ{›yã +ã\r\̾à�«=–X›�JrR(0L�–q)§DÐ5]ìLóÛòã¡%�»|-çn^ѣ⒲òŠ +‹U9½€ +¬Šò²ÒÇ<,Ƚ��™ž4&Ú`_wgË«ªÒ¼lFÒá°M«–[�Y¢¡YŽ-ïMÊ‚IZ9ÿ°awLbZÖý’ª—Í�À5òvtzž ‰££�¬«½‘]ùðö•”ã¶ùºÙ™ê¨Ž—¼“ÂâµMlWølÙûkÆ-а†ö®¾ÁaÈûߌ…Oè倖=ν‘z:2˜Nu´Ð#(HK| ã­˜¼‰ìà&yòüµÿ?{ÙÂé€\3Ë£�Ž õwµ7Ô”0É?íÞàµt¡þ|%ðK>Ža�¥- 4:1ýf~Yu}[$·_3ËâÑÞ�¾èélª³Ì8slÏf°d†šÊã¶À ÝWÒ0XäüÃÆ°#?_þ½ˆÅnìèá7læ]<ÙÈ`§åå³?îf¦ß¿ÕÇÅÆ˜¨"‡F| �Ú}CëåÿÜûïßîh’B‚A²·ÃýÝíõÕ¥÷o¤žŠØéçnoª�Ç +ÀD z”®¾ÛÁî_Ï-yÎ]1h’Âqñ`Ý 5eù7/Æ +Zëá`¦£ +ý( À°xS{w¿�§S³òʪÚ»ÁŠ ­a@Áz:kË ²Ó¢‚ý=È$Uœ )~�ÌÀµŠŒ¿x3¿¼¦�»ûB…�íÏ’]QÈLOŒ +¡{RÈ$µ‰`ÐóôŽJHË.¨¨å>JáMò#«�ÉHŒ¥S)æ$5yŒ Á(žô�¨Ätfa»©³gpDè°^>,):4€êh®; ~s +•î+ƒYÈš=X«(‡‘3C‰ŽýU|Ó5w¤‚ßćõÎŒóF„AøEQc°˜$FN«n¶`Íu•E9—> £}€q¾=Ø¥œ¢Êºf¡ÃÀ!„©›0‹‰aê‚°!aÞWAØ®u4§Iaß,̉¶n ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á°¿Ì‘ +þfþ'ÂBhŽ“ÀÔaƒ#£ïffþ#§ˆU×$tػёAA˜Úd0êXçŸû‚!Ç`ÑI f!‹=[°¦:VQãó0zhtâlÂ:?À¨“Àpj$2Å“•˜Îü?»uåÚÆüíÓ!ƒY˜Ífìcƾ̄�ý�dO¯ +¡M9 +¥7urdi=JBÚ´¢ÞJŽpN*‰éh±ŒJDÉR¶ÄØsNŸ÷~žjTç¼fxÿzÿ_÷çû¹®ë¾Ÿ‡Í0îÿÖTË.Ê9–8 “‚`ÿøÃð`A‘ iÙ…åœÆöîðìø|XzâÖ`/»ùŒ¯Â¨t¦­G`D|jVAY ›Í‡lÆae§'l ö´c1”ˆ˜/`³q_wôÂ�{Õ/Úºûg6>6Ìíio¬)/ÌJKˆ ò´e1¨_À$ÑЦ±µ[ÀæØ#çóK«Z»û†FÇgo–aXOۋ겂‹©q�¶L:•0&.‰Æ+Ò ­–ø…Å>›WòøyKgßà(´d³$ƒaCýÝ­ U¥ùRv‡¯r·1֤ВS`(¼‚†�åâ¡?&�¾vûá³æþÓ?;0àúc|t°¯«¥¾ònÞ¹äŸ6ù»ZÑ(ø©0 +GVÓ3_ôÏ�è'ÿ}ó÷'à釷–dáÝìíh®{t'7óЮVº,4ÔP0ñÏ`sÅH¬¼ªŽÙ÷K×nߤ¢òhû‡fm–Àï>x_ŸT_9ypÇ_g }u +!“àý÷@¸–ùw+Ÿ¿î|?02­ÿÌÓ> +ÖÖ^‹K{·­óq4ÓU%c‘ñ¹0ø!3¶võÛu(óÚ­ +0Ë^Ë ÙŒÒ ذ±á�ÞŽ×Ï+Áî�� ö²7ÑV!É"%Ä>ÁæÌ…Þ ¼¢†�…³oÈö}9…eÕ -�½Üa ãÓfȹÀ†õu·7=©¸u-óPL˜¿›µ1�J”‘þ Æß~,YU×ÔÁ;82.åÜõÛž4µu½²qˆÆ³ÍHþ„Xãc£CÜw¯ë«Ê +s2ömñu¶4 )ÐRóÄæÎùã-™ƒiíêºóà‰K…÷*ë^½éî²±ã<?Bsøù°>Œ� q{;[k+nåž=ìí`ª«FØ} ú(�Yš;ù¬ÙŸröZñýšúæ7Ýï¹C€Ù œ?… +¿:çÃØØÈð`oWÛËg�K rŽØêçjÍd(ËÉ +Lþ‡O,V^E{¾­›èŽýDz~¹SÁih~ÓÕÛ?08<2 +pcx*übpÌèÈðÐ ·ï]gÛ˺ªòß®f&ïÞ²ÆÇÉ\_Cú }›˜%‘J3°pòY{è䥂’œúWm=½}Ü�Á¡¡ááá8£B…W èï{×õ¶¥©®Š]|ý|ÚÞíýÜlYÚ*ò8ü¼ +ÂÀ½Ä‘UµY6®+B¢â�œ¾\PRQ]×øº½£«§÷}_?—Ë1àˆþþ¾÷ïzºÞ¶5¿xZÉ.ÎËÊ8¸ks�·£¹�2åNNÌZF¡é/pð Ýž˜’yùÆmöãÚçMÍ­ío;»º{zzÞ�ô +¨ÒÝÕñ¶½åUcçaÙÍëYÇ“b#×úºX3µTÈ8ð¡„ñ[†ÂÉ«0Œ-- Û±'åtÎ/7K+*këš^½nimkoå­��‹ÛÛÛZ[š_5Ö?ã<¾_RtíÂñ¤ÝQ!+ÝìLõ4 †!'ù©eE5–õbŸ °èÄä¯ܺ÷û£êÚ§uõ /›šš^ŠPÞØø¢¡¾î)§ê!ûîÍüËgÓÞµÁßó{sCº ‹ú¢a“-“•£jè™Ø¸, +Û—”~&'·àfIÙý�*«ªk8œZ�'Bªåpjª«?¬`ß»ýkþ•‹§Žî�Ùâïådi¬¥JÆc¤%¦6Œß2 )4ޤDÓ7µqñ ܳ/9ãLö•¼‚ߊïÜ--++g³Ù÷E(//»WZr»¸èFîå §Ó’vF¬óótZÈÔQS$Ê"ó¾›Ú0¸e@&�ÁË+kê›Ø8{û¯�Þ½?9ýÔ¹¬ËWsóòoý*B@yaÁ�ü¼Ü+—.ž9‘š´'&ê‡ÕËÝ-™:깉A~ƒe¤ ž¬¬©gbåä±èf6Й<ÕôY“67 ™#¼êsÜ,D$ÔÌ2g˜òÿLÉÅ6– endstream endobj 149 0 obj <> endobj 183 0 obj <> endobj 184 0 obj [0.0 0.0 0.0] endobj 185 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.6710205 112.0078735 cm +/Im0 Do +Q + endstream endobj 186 0 obj <> endobj 187 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwT“iàqW)I „’PD�NiEiÉatAD‚+E‡µ!RÆÂ**mÆY,ÑÈ c[¤©ƒ´ ",ôéMÜÝ÷K"JX€0Î9ßïÿïžçÜ{ß›|÷áeδó Q„¡„>þ›ð2Eõw�¹ÂT˜�ûzdš7ožˆˆèLGDDžûÞö•,€G H(¨é‡[ÔáÛ¾”öžTâ$JBR�–’’ÂÌL@%4-)!�BŠóm_H{Ï*”Z +##+'‡Åâpò3‹•““•‘Æ %QHdãѾÀÅc!%Ð9œ¼¢’² +^UU�õ©‡_AU�WQVRÀae¥¥$QqQh Ÿ‘ÍáºDD!–´,NA¯FÐ jiëè�Hº3‰¤£­EÔœOPUQ’ÇÊbÐ(„·iŸ'oŒ"bZZN^ OÐÔ&-00265#“Íy±˜jøß“Éf¦&Ɔúz:D uEœ,FÅmÚ§d\#R#‹SRÕÐÒ50![.Zlcgï@¡8òâ4µð¿¦Pìmm¬Z˜铈¼"NFJ4í“2®KT´ «¨:_{�±ù"'çïW¸¹{xR©TÚtjxzz¸»º,_êhgmif¨§EÀ+Èa$‘`œ“ï´_\—Œ¼2Ak�±Åb‡¥.ޫ׬õ÷§Ó¸Y7µð> Óý×úùú¬ò¢º-w²³"éÕ”°Òh¤¸è¤²÷.)Y¼ÉÐ|±ãrw/o¿€��Ûv‡„„ò²kjá´sûÖÍ辫h®ÎöVfÚy4Jœ7͉]sy.UM=“EË}üpÄžà@ÿ•nNÖ¦�LZ1Ñšñ !)#�'ê›Û.£ún Ú{ú—s/ÿvõzÖÍl&3gúa2™Ù7o\ËÌ`¤¦$�<¶c½·Ç’Ŧz*XŒ„ø-ã RƒSÑX@¶]Fó ?rêÌ…ËW³rîÜ»ŸWPPXX4ýäßϽ{›yã +ã\r\̾à�«=–X›�JrR(0L�–q)§DÐ5]ìLóÛòã¡%�»|-çn^ѣ⒲òŠ +‹U9½€ +¬Šò²ÒÇ<,Ƚ��™ž4&Ú`_wgË«ªÒ¼lFÒá°M«–[�Y¢¡YŽ-ïMÊ‚IZ9ÿ°awLbZÖý’ª—Í�À5òvtzž ‰££�¬«½‘]ùðö•”ã¶ùºÙ™ê¨Ž—¼“ÂâµMlWølÙûkÆ-а†ö®¾ÁaÈûߌ…Oè倖=ν‘z:2˜Nu´Ð#(HK| ã­˜¼‰ìà&yòüµÿ?{ÙÂé€\3Ë£�Ž õwµ7Ô”0É?íÞàµt¡þ|%ðK>Ža�¥- 4:1ýf~Yu}[$·_3ËâÑÞ�¾èélª³Ì8slÏf°d†šÊã¶À ÝWÒ0XäüÃÆ°#?_þ½ˆÅnìèá7læ]<ÙÈ`§åå³?îf¦ß¿ÕÇÅÆ˜¨"‡F| �Ú}CëåÿÜûïßîh’B‚A²·ÃýÝíõÕ¥÷o¤žŠØéçnoª�Ç +ÀD z”®¾ÛÁî_Ï-yÎ]1h’Âqñ`Ý 5eù7/Æ +Zëá`¦£ +ý( À°xS{w¿�§S³òʪÚ»ÁŠ ­a@Áz:kË ²Ó¢‚ý=È$Uœ )~�ÌÀµŠŒ¿x3¿¼¦�»ûB…�íÏ’]QÈLOŒ +¡{RÈ$µ‰`ÐóôŽJHË.¨¨å>JáMò#«�ÉHŒ¥S)æ$5yŒ Á(žô�¨Ätfa»©³gpDè°^>,):4€êh®; ~s +•î+ƒYÈš=X«(‡‘3C‰ŽýU|Ó5w¤‚ßćõÎŒóF„AøEQc°˜$FN«n¶`Íu•E9—> £}€q¾=Ø¥œ¢Êºf¡ÃÀ!„©›0‹‰aê‚°!aÞWAØ®u4§Iaß,̉¶n ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á°¿Ì‘ +þfþ'ÂBhŽ“ÀÔaƒ#£ïffþ#§ˆU×$tػёAA˜Úd0êXçŸû‚!Ç`ÑI f!‹=[°¦:VQãó0zhtâlÂ:?À¨“Àpj$2Å“•˜Îü?»uåÚÆüíÓ!ƒY˜Ífìcƾ̄�ý�dO¯ +¡M9 +¥7urdi=JBÚ´¢ÞJŽpN*‰éh±ŒJDÉR¶ÄØsNŸ÷~žjTç¼fxÿzÿ_÷çû¹®ë¾Ÿ‡Í0îÿÖTË.Ê9–8 “‚`ÿøÃð`A‘ iÙ…åœÆöîðìø|XzâÖ`/»ùŒ¯Â¨t¦­G`D|jVAY ›Í‡lÆae§'l ö´c1”ˆ˜/`³q_wôÂ�{Õ/Úºûg6>6Ìíio¬)/ÌJKˆ ò´e1¨_À$ÑЦ±µ[ÀæØ#çóK«Z»û†FÇgo–aXOۋ겂‹©q�¶L:•0&.‰Æ+Ò ­–ø…Å>›WòøyKgßà(´d³$ƒaCýÝ­ U¥ùRv‡¯r·1֤ВS`(¼‚†�åâ¡?&�¾vûá³æþÓ?;0àúc|t°¯«¥¾ònÞ¹äŸ6ù»ZÑ(ø©0 +GVÓ3_ôÏ�è'ÿ}ó÷'à釷–dáÝìíh®{t'7óЮVº,4ÔP0ñÏ`sÅH¬¼ªŽÙ÷K×nߤ¢òhû‡fm–Àï>x_ŸT_9ypÇ_g }u +!“àý÷@¸–ùw+Ÿ¿î|?02­ÿÌÓ> +ÖÖ^‹K{·­óq4ÓU%c‘ñ¹0ø!3¶võÛu(óÚ­ +0Ë^Ë ÙŒÒ ذ±á�ÞŽ×Ï+Áî�� ö²7ÑV!É"%Ä>ÁæÌ…Þ ¼¢†�…³oÈö}9…eÕ -�½Üa ãÓfȹÀ†õu·7=©¸u-óPL˜¿›µ1�J”‘þ Æß~,YU×ÔÁ;82.åÜõÛž4µu½²qˆÆ³ÍHþ„Xãc£CÜw¯ë«Ê +s2ömñu¶4 )ÐRóÄæÎùã-™ƒiíêºóà‰K…÷*ë^½éî²±ã<?Bsøù°>Œ� q{;[k+nåž=ìí`ª«FØ} ú(�Yš;ù¬ÙŸröZñýšúæ7Ýï¹C€Ù œ?… +¿:çÃØØÈð`oWÛËg�K rŽØêçjÍd(ËÉ +Lþ‡O,V^E{¾­›èŽýDz~¹SÁih~ÓÕÛ?08<2 +pcx*übpÌèÈðÐ ·ï]gÛ˺ªòß®f&ïÞ²ÆÇÉ\_Cú }›˜%‘J3°pòY{è䥂’œúWm=½}Ü�Á¡¡ááá8£B…W èï{×õ¶¥©®Š]|ý|ÚÞíýÜlYÚ*ò8ü¼ +ÂÀ½Ä‘UµY6®+B¢â�œ¾\PRQ]×øº½£«§÷}_?—Ë1àˆþþ¾÷ïzºÞ¶5¿xZÉ.ÎËÊ8¸ks�·£¹�2åNNÌZF¡é/pð Ýž˜’yùÆmöãÚçMÍ­ío;»º{zzÞ�ô +¨ÒÝÕñ¶½åUcçaÙÍëYÇ“b#×úºX3µTÈ8ð¡„ñ[†ÂÉ«0Œ-- Û±'åtÎ/7K+*këš^½nimkoå­��‹ÛÛÛZ[š_5Ö?ã<¾_RtíÂñ¤ÝQ!+ÝìLõ4 †!'ù©eE5–õbŸ °èÄä¯ܺ÷û£êÚ§uõ /›šš^ŠPÞØø¢¡¾î)§ê!ûîÍüËgÓÞµÁßó{sCº ‹ú¢a“-“•£jè™Ø¸, +Û—”~&'·àfIÙý�*«ªk8œZ�'Bªåpjª«?¬`ß»ýkþ•‹§Žî�Ùâïådi¬¥JÆc¤%¦6Œß2 )4ޤDÓ7µqñ ܳ/9ãLö•¼‚ߊïÜ--++g³Ù÷E(//»WZr»¸èFîå §Ó’vF¬óótZÈÔQS$Ê"ó¾›Ú0¸e@&�ÁË+kê›Ø8{û¯�Þ½?9ýÔ¹¬ËWsóòoý*B@yaÁ�ü¼Ü+—.ž9‘š´'&ê‡ÕËÝ-™:깉A~ƒe¤ ž¬¬©gbåä±èf6Й<ÕôY“67 ™#¼êsÜ,D$ÔÌ2g˜òÿLÉÅ6– endstream endobj 144 0 obj <> endobj 147 0 obj <>stream +H‰ìÎÑmÃ0Aºÿ¦ƒ|Ž#JâZïØ©`ZÓ�—•ÊÜѼsua7£õInÞ‹Ýæ¾Æoó_ƒ·Ll –Š�Õr¯“[6vPKÇöké×î,ÝúU6Ö­¥KO ÍÒ¡—eféÎ_‹ÌÒ™wKÌÒ•ÿœqec¯Zú±åŒ+?K7zœqÎ8gœ3ÎçŒ+>K'úœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3ÎçŒsÆ9ãœqÎ8gœ3®ö¬d­9ÜqÎ8gœ3ÎW}V°ÖœaθVµÖœa­j­-1+Uk‹Ì +ÕÚ2³2µM¬ð¬H­«QëÆ*Ôvb…gñÚn,];ˆEoǯ`í4–ª Ä"·±×üÚðkò ½&æøkJîÃÖÍ»k«ï>¿}ÑÆ�:ÊQË endstream endobj 188 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4971/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖwPÓwðú<ÈHa„„™°aDÊ1ÊR†!p(µ ÃJ±HA"­rà±l9…Zfá(Çë�ÂI(Å„–R)±b™²Žçy¾¿_‚Êpˆ¶÷üÞÿçs¯ûŒï/|€D�Ù´îü­0‚`Â?ÿ—À²V_õo!ªË×ýeÌÚ¼y³°°°È”……qѳ„EDEÅÄP( +fÝ�Ë€rbb¢¢"Â|Ü[Ûx.!Ð+Q1#..�Åb%%%¥6$ ('!.ŽA£ÄDAï„ÞÚ¶èE¡JJZ'+‹Çr�—•ÅÉHKuŽg{ìCc$$¥qx‚¼¢’2‘H"©ð¢ºæð �HD¢²’¢<�“–”À Åx¶7Ñ6Á0àB‰c¥pxy%¢Šš†¦Y[‡B¡èn@@m²–¦†š +QI�“Š£€ ¦½ÎÆ›¤°( +\rŠDU 2EÏÀИºÕ„F3åÅl�áÿœF3ÙJ564У�5T‰ŠrÀ†A‰ +¿a¢0l³°(Z\ +GP$©“u·›˜™[XYÛØÚÚÙÙóâ°¦ðlggkkcmeanfb¼E—¬NR$à¤ÄѢ›_Kƒa`Ã$¤ñ +$um=#ÚvKû�λ\w»{xÐétÏu”ððpßíºËy§½�åvš‘ž¶:I/-¶ ¦½fù ƒ•!(©’õŒM-lv¸¸Ñ½}öùî÷ âåÀšÂÿq``€ÿ~ß}>Þt7—6¦ÆzdU%‚ Ó^Ñ´E˜$Nž¨®cH³°sróòñ <q$’ÁÏÑ5eñבG"ÂÃBCúùx¹9ÙYÐ uÔ‰ò8É×ÐxW ÃHšzÔí6Ž»½}ƒBÂ"¿<s".>11)é亓””˜w"æø—‘a!A¾Þ»m¶Sõ4I0Mø� Å`qò*Zú&yù~y,6áëS©gÒ22³²²7 YY™igRO}�{,2ôS_¯�,LôµTäqX |¡+e e†ÆÊÈ“´ hV;Ý}?gDÇ'›ñ}^~AaQqÉ9�ÒuªPR\TX�Ÿ÷}Æ·ÉñÑŒÏ}ÜwZÑ ´Hò2Xp¡B«4 ^2”„´QÓ€fíDÿä`øñøSi9ù…¥Ê+*/W1™Ìêu©º\YQ~¡´0?'íTüñðƒŸÐ�¬išD9i ¼j«µL #…WÒÐ3±ròô aÄ~ó]nAiYeõÏW¯×Õ7°X¬Æui¨¯»~õçêʲ҂Üノe„øy:Y™èi(ᥠU[Ñ4¨e`–85 +ÕÒ‘îw(*îtÖÙÒ‹ÌÚ¬_›[ZÛÚÚo�t¬+P…ö¶¶Ö–æ_Y7j™KÏf�Ž‹:äGw´¤RÔp`ž+šÆk™¸´‰ldîàSXVu¥¡©¥½³«ûNOo__{ÝEz{îtwu¶·45\©*+ÌI�� +ñuw07"“ä¤ÅW6�×2IYE }S[×�ƒq©¹Å—jêšnvv÷Þ½×Ïá <€2¸®À%8œþ{w{»;o6ÕÕ\*ÎM�cìjkª¯¡(+¹¢iÏ[¦¢CµtöŠ8‘’[RQËú½£›ÝÏ_g ££#ÃCƒœ~vwÇï¬ÚŠ’Ü”AÞΖT•Uš&+«¤a°ÍÞÝïptrvÑ¥ÚÆÖÛ½÷†FÆMLN�Lo@ :“�ÆF†îõÞnm¬½T”�}ØÏÝ~›�†’,½ì<áab¤äH:T+—½ÁQ‰éå5¬Ö.öý‡£ã“S3³³ss\^æ×~�¹¹ÙÙ™©Éñч÷Ù]­¬šò‚ôĨà½.VT’œfé8áa¢$dÔõÍì=ü¿ˆMÉ;Ϭoébs†Æ&¦gç¸ó �yy²æð €RóܹÙ鉱!»«¥žy>/%ö {3}u Ô’qò†)‰W&Y8ï Ž:™YTqí·Î>ÎðøÔÌÜüÄyÊϳ5g±„\˜Ÿ›™æôuþv­¢(ódTðg #²2^ré8‡©B1±qó=“’wá'V[OÿÐøÔ,¸^öügÍyÙlÜÙ©ñ¡þž6ÖOòRbûºÙ˜PT–�¾Lx˜ÛvxE&¤V\kîº;869;\ëò¼Âló³“cƒw»š¯U¦'DyîØ�¾Î—d"(¬¬²æÞÏŽ%眯-ã OÌp Tí¿žíé“îÌÄ04­ú|Nò±Ïö‚qj)ËbQ"/d‹kFÔÞú¡+fj~ù•¦Nв©9¶±®ç6@››MëlºRžŸ +ÆéúáVmâÒE{¾fº4;�€ˆøôÂÊ-ÝýC�f¸�Ÿ@ÛXÏöìÙ“ÇÜ™GCýÝ-7* Óã#<ìhºË –‰KË«�5ó:pôdö9fC[/glܲ�‡Á´§OÀ¦�pzÛ˜ç²O=àMM^Z|© |šd5¶˜;î þ*9÷Çš_:Øàa +Óàq>`wüRócnòWÁ{Í·h(Ê€ÔK2è4qJš†.>‡¢OÿPVÛtûχãÓÜÇ‚j¯i�¹Óãÿ¼ÝT[öÃéèC>.†šJ¸—�þ@§ilµk_hLêÙ‹W›ÿ蚘™‡d‚��ÍÏL õÿÑ|õâÙÔ˜Ð}»¬Œáã\"ƒ "™jíêvâLAÅõ–îûÃ`ÍÖ2Þ8çg'†ïw·\¯(8s"Ì×ÕšJ&.y6x2øÑpÛ—VXY×z€ ×lqÑÀ Üi­«,L‹ ßï?Ëeà9#é˜Ø¸ûƒG£èrýÍΨ@àù ŒrznÖ_.φ¿»�‰ zЖÉ$ +ÍÖ=àHBFqx4 ™× ^4H6ž�ªâŒ„#î¶4 +‰°ŠL…=´‘‰™%U¬ö>ðhpy¼à‚g£¯�UU’™ =µ••2蟆©=02)«„ù®eÌ’¬¤È@º�)ôoc™®©==�‘”uŽÉºdÓïB6 d·XÌsYIŒ@º½©îJ†/ b$e¿Yv#ˆ/Ã<—mZ*ŸÍêÆ[ìw'cßj¬Î¥²MËež/dãïF6þBæùFYiuc{ð]ÉÙ�Õ¥¯•©.— ôãÄÿ<-—©®.3{ß2³ ÌÁúKû~dGx: 2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2Döÿ*³÷ b¼/#ÈÓþ(3}ß²ÿ[æñPïk?¯WYgŒ™a0KËLLYf�B–ÊÒ¡1Z¤c­.GGЍN‹¦s«ƒn–:Òjk¹)„’�NÊ2%„¸Œdgkéu¿¿ßŒBN÷DÜÏÿÏóz¿>Ÿçy¾_éÉH“ÉGÞ�Î&Ùèû‘ÁÉd¤/’¥å?{õz®È^¿zVœ›ö?ÉXŸÈºæ†¬ëk2ÙwÉØ§Òr8Ïê玬þ''í{"ÙwɤEdÞ»Ùñÿ²xöno™ôçdTC+–w;>5‡Ãdü¹ ã2.''5žäͲ2¤NA†T$QVN^Aq©ÙsM–�äådÅ ’‘Ÿ“© K¦W`xlJöʺ–NþÀðl“ ð;[ê*f§Ä†z1-TâdX"…nÁôÜ“|«¨¼–‘Íæ©…-DÆ«-/º•¶Ë“iA§±“ɤX‚–Á +G��¿žLÊ,,{Éëè› ²¾Þ˲Â̤“¿îôp\a EÀ"¤&“ašúæn;BO\Ì((­inïíŸÕç ~œú{Û›kJ 2.žÝáæ`®¯IÀL"dx =³5›>uþƽ'ÕMm½‚¡Ù\h†½mMÕOîÝ8uðçÍkÌô4ð€L|™¤ZU}ÉrûM~û?{ýîã�oDÏÓ,¡}=No_<¾{ýìïûý6Ù/_¢®Š–“O6O\RVA…¼ØÄf£ÏÞ£ Wïo™Ø|YNMÇxÕ:èS›–ÎX0h³ed3°àh€Ç |i×­2ÖQádç‹M$ƒNèÔ‚³‘”ù ´¦©­G08òntv&íÃè軑AAO[SMéƒÌ$p4 C ?›“È ƒ� 7ÿƒQçÒóW6´ÂqB¦}s¶°eP˜­ •�óÓÏEôws€�8gŸÈÆÎ^Cw¹�‹ï¾£\ÉåTÔòÚ{ƒÚ·fƒ¸ °AAo;¯¶‚“{å�£û|]ì–ë«ùéhŒ-§‚òB0hÎ[‚Âc’2 +žV5¶v�I¡}+8¸6¦ XVõ¤ #)&!Gâ’3î—TÖóÚ{øýƒÃ#ï„p"M›G¤÷€kdx°ŸßÓΫ¯,¹Ÿ‘w$Äg#S?iÌàÿ¶¸§‘µ“gÀ¡ÈÄ«9E¥U -íÝ|ÁÀÐ0áÁ�–DÅPŸ‘ááÁ¿»½¥¡ª´(çJbä¡O'k#8LøøHö1N"EßÌÞÅ'„s1=¯¸¼º¡¥­«÷­``pÐ �õnZƒ6Cƒý~oW¯¡ºœ“—~1&"ÄÇÅÞLŸBœæXœŒ*™flÍt÷ßìtJFþ£òêWÍ­ݽü·‚þþ���AXCÓ’°4éÞöõvu´6×W•ß½™|êè~w¦µ1�¬ŠAL S§¤,J‰DÑ7µÛ°5042!-3¿¸ìEm#ïM{gwOo_ŸÏ;C�}}½=]�í­¼ÆÚÊRÎ݌ԄÈÐ][6Ø™êSHJ(YɉaŠâ”FbTÈ:F–®>ÁaÑgÒ2î>|­®klnimkïèìììêž¶ jФ£ýMkKSC]·¤(ïfê™è°`WKC² +)=)Ìq¦5uMV2Ýüö„GŸI¹q»àQ)÷ÅËú†ÿ45óZZ^Cj�¦àâ–^sScC]Í îÓâû¹é) Ñá!~nÌ•&ºšÄ©,3 �VV£˜Ú°<¶ï ‹:}éZVÞƒâ’2neUÍËÚººúúúW3(¯««}YSUÉ-+áÜɼzñtdXˆŸ;ËÆTŸª¦ŒF|nÙ˜i2òXž.Nv–&úÚêD Ù¼©,¢‰I@h8y‘ž±ùª5¬MÛü‚öür ôpXxD›}db³#"ÂÃ:°/$pÇO[Ý]œì­ÍŒt©d ÙT`ãÑ”ðjZ4ƒ¥æ+í™ë]ݽÿñÓvÿ€�»ƒv‹ü•« +ܵ3À»ï6o÷MëÖÚY›ëëhª©*) ¾�š ¡ ¨BR§.6XjfµÚÞ‘µÞÅõGwO/oï-BmýJ‰Ê¼½½<=ÜtuYÏr´_mij¬O£�‰ÊX”lª!ûhŒ&-'�QÂ/P§Òô ML-¬WÛ®ùÁq-ÓɉÅb9O[ ØÉ‰¹Öñ{ÛÕÖ¦Kz:u’ªZ^l% ö—dB4°¡R²‡'‘µ-Ö£-]fj¾ÂÂÒÊÊZ¤•_©±:++K‹æ¦Ë–Ñõh‹4É$U&oå—À 4xC�m²HŒ’*Q�¬IÕ¦-ÑÕ7 Ó CXFÓ�°’Á Ó ôt—д)šä% +)+-)!ÜÊ/�‰Öà{1``C¡qªÒ‚…êšZ +•ºh†¢R)-M õ… ˆx�B.�ä_�‹©lÀ7„< +�UÄ)«â "‘$Ô‚iITL$ðª*Ê8E€…”ûÈõwÀD‰ +Ù€qr€N�Á`±ŠŠŠJ3h�Åb0h°¤@Ž"®¿6fÄ&ÁÉÈ<‰DÊÏX  !''+¨æKˆ%—È6(ÓïÅ ºù’’RRRÒ°df aÐJRr>ÀX_É%bƒ�ÒI|3�fb€ê¿;‹dw!9ä: ó¨ @fBœE†»à޹ހ‘g!»Ž€2WQ×�ÔvË(À£Îàf endstream endobj 146 0 obj <> endobj 189 0 obj <> endobj 190 0 obj [0.0 0.0 0.0] endobj 191 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +154 0 0 153 989.9921265 112.0078735 cm +/Im0 Do +Q + endstream endobj 192 0 obj <> endobj 193 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4971/Name/X/Subtype/Image/Type/XObject/Width 154>>stream +H‰ìÖwPÓwðú<ÈHa„„™°aDÊ1ÊR†!p(µ ÃJ±HA"­rà±l9…Zfá(Çë�ÂI(Å„–R)±b™²Žçy¾¿_‚Êpˆ¶÷üÞÿçs¯ûŒï/|€D�Ù´îü­0‚`Â?ÿ—À²V_õo!ªË×ýeÌÚ¼y³°°°È”……qѳ„EDEÅÄP( +fÝ�Ë€rbb¢¢"Â|Ü[Ûx.!Ð+Q1#..�Åb%%%¥6$ ('!.ŽA£ÄDAï„ÞÚ¶èE¡JJZ'+‹Çr�—•ÅÉHKuŽg{ìCc$$¥qx‚¼¢’2‘H"©ð¢ºæð �HD¢²’¢<�“–”À Åx¶7Ñ6Á0àB‰c¥pxy%¢Šš†¦Y[‡B¡èn@@m²–¦†š +QI�“Š£€ ¦½ÎÆ›¤°( +\rŠDU 2EÏÀИºÕ„F3åÅl�áÿœF3ÙJ564У�5T‰ŠrÀ†A‰ +¿a¢0l³°(Z\ +GP$©“u·›˜™[XYÛØÚÚÙÙóâ°¦ðlggkkcmeanfb¼E—¬NR$à¤ÄѢ›_Kƒa`Ã$¤ñ +$um=#ÚvKû�λ\w»{xÐétÏu”ððpßíºËy§½�åvš‘ž¶:I/-¶ ¦½fù ƒ•!(©’õŒM-lv¸¸Ñ½}öùî÷ âåÀšÂÿq``€ÿ~ß}>Þt7—6¦ÆzdU%‚ Ó^Ñ´E˜$Nž¨®cH³°sróòñ <q$’ÁÏÑ5eñבG"ÂÃBCúùx¹9ÙYÐ uÔ‰ò8É×ÐxW ÃHšzÔí6Ž»½}ƒBÂ"¿<s".>11)é亓””˜w"æø—‘a!A¾Þ»m¶Sõ4I0Mø� Å`qò*Zú&yù~y,6áëS©gÒ22³²²7 YY™igRO}�{,2ôS_¯�,LôµTäqX |¡+e e†ÆÊÈ“´ hV;Ý}?gDÇ'›ñ}^~AaQqÉ9�ÒuªPR\TX�Ÿ÷}Æ·ÉñÑŒÏ}ÜwZÑ ´Hò2Xp¡B«4 ^2”„´QÓ€fíDÿä`øñøSi9ù…¥Ê+*/W1™Ìêu©º\YQ~¡´0?'íTüñðƒŸÐ�¬išD9i ¼j«µL #…WÒÐ3±ròô aÄ~ó]nAiYeõÏW¯×Õ7°X¬Æui¨¯»~õçêʲ҂Üノe„øy:Y™èi(ᥠU[Ñ4¨e`–85 +ÕÒ‘îw(*îtÖÙÒ‹ÌÚ¬_›[ZÛÚÚo�t¬+P…ö¶¶Ö–æ_Y7j™KÏf�Ž‹:äGw´¤RÔp`ž+šÆk™¸´‰ldîàSXVu¥¡©¥½³«ûNOo__{ÝEz{îtwu¶·45\©*+ÌI�� +ñuw07"“ä¤ÅW6�×2IYE }S[×�ƒq©¹Å—jêšnvv÷Þ½×Ïá <€2¸®À%8œþ{w{»;o6ÕÕ\*ÎM�cìjkª¯¡(+¹¢iÏ[¦¢CµtöŠ8‘’[RQËú½£›ÝÏ_g ££#ÃCƒœ~vwÇï¬ÚŠ’Ü”AÞΖT•Uš&+«¤a°ÍÞÝïptrvÑ¥ÚÆÖÛ½÷†FÆMLN�Lo@ :“�ÆF†îõÞnm¬½T”�}ØÏÝ~›�†’,½ì<áab¤äH:T+—½ÁQ‰éå5¬Ö.öý‡£ã“S3³³ss\^æ×~�¹¹ÙÙ™©Éñч÷Ù]­¬šò‚ôĨà½.VT’œfé8áa¢$dÔõÍì=ü¿ˆMÉ;Ϭoébs†Æ&¦gç¸ó �yy²æð €RóܹÙ鉱!»«¥žy>/%ö {3}u Ô’qò†)‰W&Y8ï Ž:™YTqí·Î>ÎðøÔÌÜüÄyÊϳ5g±„\˜Ÿ›™æôuþv­¢(ódTðg #²2^ré8‡©B1±qó=“’wá'V[OÿÐøÔ,¸^öügÍyÙlÜÙ©ñ¡þž6ÖOòRbûºÙ˜PT–�¾Lx˜ÛvxE&¤V\kîº;869;\ëò¼Âló³“cƒw»š¯U¦'DyîØ�¾Î—d"(¬¬²æÞÏŽ%眯-ã OÌp Tí¿žíé“îÌÄ04­ú|Nò±Ïö‚qj)ËbQ"/d‹kFÔÞú¡+fj~ù•¦Nв©9¶±®ç6@››MëlºRžŸ +ÆéúáVmâÒE{¾fº4;�€ˆøôÂÊ-ÝýC�f¸�Ÿ@ÛXÏöìÙ“ÇÜ™GCýÝ-7* Óã#<ìhºË –‰KË«�5ó:pôdö9fC[/glܲ�‡Á´§OÀ¦�pzÛ˜ç²O=àMM^Z|© |šd5¶˜;î þ*9÷Çš_:Øàa +Óàq>`wüRócnòWÁ{Í·h(Ê€ÔK2è4qJš†.>‡¢OÿPVÛtûχãÓÜÇ‚j¯i�¹Óãÿ¼ÝT[öÃéèC>.†šJ¸—�þ@§ilµk_hLêÙ‹W›ÿ蚘™‡d‚��ÍÏL õÿÑ|õâÙÔ˜Ð}»¬Œáã\"ƒ "™jíêvâLAÅõ–îûÃ`ÍÖ2Þ8çg'†ïw·\¯(8s"Ì×ÕšJ&.y6x2øÑpÛ—VXY×z€ ×lqÑÀ Üi­«,L‹ ßï?Ëeà9#é˜Ø¸ûƒG£èrýÍΨ@àù ŒrznÖ_.φ¿»�‰ zЖÉ$ +ÍÖ=àHBFqx4 ™× ^4H6ž�ªâŒ„#î¶4 +‰°ŠL…=´‘‰™%U¬ö>ðhpy¼à‚g£¯�UU’™ =µ••2蟆©=02)«„ù®eÌ’¬¤È@º�)ôoc™®©==�‘”uŽÉºdÓïB6 d·XÌsYIŒ@º½©îJ†/ b$e¿Yv#ˆ/Ã<—mZ*ŸÍêÆ[ìw'cßj¬Î¥²MËež/dãïF6þBæùFYiuc{ð]ÉÙ�Õ¥¯•©.— ôãÄÿ<-—©®.3{ß2³ ÌÁúKû~dGx: 2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2D†È"Cdˆ ‘!2Döÿ*³÷ b¼/#ÈÓþ(3}ß²ÿ[æñPïk?¯WYgŒ™a0KËLLYf�B–ÊÒ¡1Z¤c­.GGЍN‹¦s«ƒn–:Òjk¹)„’�NÊ2%„¸Œdgkéu¿¿ßŒBN÷DÜÏÿÏóz¿>Ÿçy¾_éÉH“ÉGÞ�Î&Ùèû‘ÁÉd¤/’¥å?{õz®È^¿zVœ›ö?ÉXŸÈºæ†¬ëk2ÙwÉØ§Òr8Ïê玬þ''í{"ÙwɤEdÞ»Ùñÿ²xöno™ôçdTC+–w;>5‡Ãdü¹ ã2.''5žäͲ2¤NA†T$QVN^Aq©ÙsM–�äådÅ ’‘Ÿ“© K¦W`xlJöʺ–NþÀðl“ ð;[ê*f§Ä†z1-TâdX"…nÁôÜ“|«¨¼–‘Íæ©…-DÆ«-/º•¶Ë“iA§±“ɤX‚–Á +G��¿žLÊ,,{Éëè› ²¾Þ˲Â̤“¿îôp\a EÀ"¤&“ašúæn;BO\Ì((­inïíŸÕç ~œú{Û›kJ 2.žÝáæ`®¯IÀL"dx =³5›>uþƽ'ÕMm½‚¡Ù\h†½mMÕOîÝ8uðçÍkÌô4ð€L|™¤ZU}ÉrûM~û?{ýîã�oDÏÓ,¡}=No_<¾{ýìïûý6Ù/_¢®Š–“O6O\RVA…¼ØÄf£ÏÞ£ Wïo™Ø|YNMÇxÕ:èS›–ÎX0h³ed3°àh€Ç |i×­2ÖQádç‹M$ƒNèÔ‚³‘”ù ´¦©­G08òntv&íÃè軑AAO[SMéƒÌ$p4 C ?›“È ƒ� 7ÿƒQçÒóW6´ÂqB¦}s¶°eP˜­ •�óÓÏEôws€�8gŸÈÆÎ^Cw¹�‹ï¾£\ÉåTÔòÚ{ƒÚ·fƒ¸ °AAo;¯¶‚“{å�£û|]ì–ë«ùéhŒ-§‚òB0hÎ[‚Âc’2 +žV5¶v�I¡}+8¸6¦ XVõ¤ #)&!Gâ’3î—TÖóÚ{øýƒÃ#ï„p"M›G¤÷€kdx°ŸßÓΫ¯,¹Ÿ‘w$Äg#S?iÌàÿ¶¸§‘µ“gÀ¡ÈÄ«9E¥U -íÝ|ÁÀÐ0áÁ�–DÅPŸ‘ááÁ¿»½¥¡ª´(çJbä¡O'k#8LøøHö1N"EßÌÞÅ'„s1=¯¸¼º¡¥­«÷­``pÐ �õnZƒ6Cƒý~oW¯¡ºœ“—~1&"ÄÇÅÞLŸBœæXœŒ*™flÍt÷ßìtJFþ£òêWÍ­ݽü·‚þþ���AXCÓ’°4éÞöõvu´6×W•ß½™|êè~w¦µ1�¬ŠAL S§¤,J‰DÑ7µÛ°5042!-3¿¸ìEm#ïM{gwOo_ŸÏ;C�}}½=]�í­¼ÆÚÊRÎ݌ԄÈÐ][6Ø™êSHJ(YɉaŠâ”FbTÈ:F–®>ÁaÑgÒ2î>|­®klnimkïèìììêž¶ jФ£ýMkKSC]·¤(ïfê™è°`WKC² +)=)Ìq¦5uMV2Ýüö„GŸI¹q»àQ)÷ÅËú†ÿ45óZZ^Cj�¦àâ–^sScC]Í îÓâû¹é) Ñá!~nÌ•&ºšÄ©,3 �VV£˜Ú°<¶ï ‹:}éZVÞƒâ’2neUÍËÚººúúúW3(¯««}YSUÉ-+áÜɼzñtdXˆŸ;ËÆTŸª¦ŒF|nÙ˜i2òXž.Nv–&úÚêD Ù¼©,¢‰I@h8y‘ž±ùª5¬MÛü‚öür ôpXxD›}db³#"ÂÃ:°/$pÇO[Ý]œì­ÍŒt©d ÙT`ãÑ”ðjZ4ƒ¥æ+í™ë]ݽÿñÓvÿ€�»ƒv‹ü•« +ܵ3À»ï6o÷MëÖÚY›ëëhª©*) ¾�š ¡ ¨BR§.6XjfµÚÞ‘µÞÅõGwO/oï-BmýJ‰Ê¼½½<=ÜtuYÏr´_mij¬O£�‰ÊX”lª!ûhŒ&-'�QÂ/P§Òô ML-¬WÛ®ùÁq-ÓɉÅb9O[ ØÉ‰¹Öñ{ÛÕÖ¦Kz:u’ªZ^l% ö—dB4°¡R²‡'‘µ-Ö£-]fj¾ÂÂÒÊÊZ¤•_©±:++K‹æ¦Ë–Ñõh‹4É$U&oå—À 4xC�m²HŒ’*Q�¬IÕ¦-ÑÕ7 Ó CXFÓ�°’Á Ó ôt—д)šä% +)+-)!ÜÊ/�‰Öà{1``C¡qªÒ‚…êšZ +•ºh†¢R)-M õ… ˆx�B.�ä_�‹©lÀ7„< +�UÄ)«â "‘$Ô‚iITL$ðª*Ê8E€…”ûÈõwÀD‰ +Ù€qr€N�Á`±ŠŠŠJ3h�Åb0h°¤@Ž"®¿6fÄ&ÁÉÈ<‰DÊÏX  !''+¨æKˆ%—È6(ÓïÅ ºù’’RRRÒ°df aÐJRr>ÀX_É%bƒ�ÒI|3�fb€ê¿;‹dw!9ä: ó¨ @fBœE†»à޹ހ‘g!»Ž€2WQ×�ÔvË(À£Îàf endstream endobj 101 0 obj <> endobj 102 0 obj <> endobj 143 0 obj [/ICCBased 87 0 R] endobj 119 0 obj <>stream +H‰„WË®c·Üë+Îè\6Ù|m= ² +‚�ñþÂÎ,lãù UÕä‘47ƒ@€Ä_ý¨®n¾ýëÓñöÏOéøéoŸŽÛ×[íýL)é̵–J9GšG™~ÎÔŽ¿~½ýûøëÞþñs:þóífÉí¬^Ç~d ‡çÜÚóðþ²¦örZ)ÖG?l´sZ}”ãý�ÛO¿o?IÇ·/Çß9>ß>/}¬}Ì›B¡j&…Ûþ‡B±¢Ô\�„ÏýåŸ8/3q=ÔÉPóq½=]ÿö g¾;LŸãÛûŸ×5éôjðRi4©�}¶Ãlý ¥~Ê4èÇ4¿çˆ–AÔxÿÞ �½_o‰§ùa Sw —¥é´6�çoû +ÒZ;|f8Ø'ŽnÐËk§qœûãv÷ÔÎÑé˜ß)ôÓs§�8Ôÿ§ûxˆv¼ßÂYk>®]Æip.È83iM¦¿42aëܘMú¼ÃÌÏOjOøÒ!—q~·ü¤u>“…ÊÝq«ó²k´ÿ³³·Âqu;ò™�±{=§^·|+‹·£œ zßý¬É·€ØÑ�%eà –Å&;}ú>0�Á†Uq2eÎeF’#îãl�z—s–%ý¾$;Zª¾8$Ƹ¡Â¡iতµÞ²4ïy@ÊÖ¡kîDÕhcþ×íóð£: fÀ°"Uë¤Ð§ŒÈøïýV±bPÀg=-¬m¶ÇËKrì:Öp@Û§Uîà­º¨�™3Ò‘°¥Û½óú”ZCê ‹fÆ™ê6BIY.¥ V¤†\ÞÛ>ýlD24Ð:µò Âè�ó5:ËÄu³pØÚnDL˜>FÞ@Š ÑîƒßmŒ5¦z9÷%!•ÛuX„' †pP€zK‚~]Ð@ÊãJ¢IŠ…H$¤J²#RYŒŠSYW€z‘FGÂ$¢¦U…+gé<ûhN@®¹ +U)Èû1¶¡e3Ž #áK[,f…ØÆ=5r¢‚h Äœ‚u / „ Å ò AØ]Ú ç„@<Ú†Wµ$hÉ�•Œ�j #1îUF1ÝC:®©¤ !4 ¥ +®up¬‰©TØ]®™À;¤™åÁVèy?<…°Aªˆ0Í’z’¥žÖÚÁ“L–ó§)|ž/jõX¹ÄX8T ”O8Óˆíæ5ÖJì˜i®’Òx"j¯lj“É‘×( Œ«ÑxËCh®‚_Ep2Ë*ÙåP�[ÙcÆÝÒ–p +ø‘Ñä‰Óù­‚Œ¸Ð­ˆY& z☞(‚Î`ÝD0óâ5…93‹ª"4,ñHðÐÇYah¤4ukHu-ZR%i�%±<òæ{ +@•á‰GT,|øÕÕ öòÔk$m€©B“Ík%LªZȪ}…yM#T·àä>4WKuGE­¬…–éžx˜ªŒI1DJmЇäbÓLfv—°?í1ƒ[¶�|lPѹ^7âŽI©ë;É€#,«±‹ý––ˆÈ)jV-‡Y,}E@MÂEa¥)ƒŸÖ"«Ä……12%¸°ÆŒ’iLX€iÕ±�! ß$ôíª!q¦p¾³¢˜Цؤ¯€q¦%ñŽ“gfP$ +;ÊûXa•D¼)�;„9uXÁN¬¾N£ÎèšæX šôXêôU ¨ì¤(Na¦f^Tr'(¤ãˆ¾25sŽ ÃX&îêtek(ûLt%0‚ƒºø‘išg\™ï<´4ÑtB‘•Ê„ ÍÄoÖ‚Š8W°À�@t—r)9°!�J¥É&t×®±H,€ÆÊΚÑmŽSŒ[2$± !X&ÇÊ/ÏkÈE@qôHék»`¯`” @ŠŒ¨9ôŸ�±ÊÇ%v´&•Q»£feÅÁEIs]Ja=Mu�Z=DT­ª—äÑ“ƒš¸šõÔ&RÄ}Æ¢C!/‘ô8ÔQá^˹)A¡+*Ç[㈢§ žšÐ,:ž¢cxçD^5±ª²¢Cbx[�í$5óvªMÅ[kóÒôÕö�Î~Ђ›A¹¤vê#• #¨4ñ€Ó”¾ÎaYO´­sçÿ«Mh£©À­t v"í±è•Ž®^£L2Mq-dË!«VµVÓÎîìF$zˆàŠ]‹âÄŠ8¬…¼­jßÒÀ ~ Žm×äпiŲ‹}ìÜó}&Óý ×±Òü‘â3ï oLã:êú”»iªŸN²Ü<ŒÎ»úÒfv÷J ¹ëÀÌÀÈdéL,’¿f© +M׉ŒJ}Ë%⇮&³¯ŸèÈXà£d¡Á¢•øÉ�7õ²5íòBÁç³—­fÿ(²5‹¦¢–уӘïR¦ÑŽP<»z–¤7'�ñEî°L:ª‘œ#)ÿáW�¿~}šÍ€§ïY}aú·oNpE¬e—eöšæÂ°ÚÏ!âÔYêŽÁï+×k8nyÚÆ“k{¼\JÝø2µ×i5JñÂlí:ÔÏÝ\ëBRènÙ�ïÅ´~ÕÛα$¬nÚ쳫%ÒA=Ú›Îb@^èêŸã!Óë¶rKŒÆiíŠsã@š…PwÑ$z*±qÍ÷] ÞCùQ�ŸæR÷à§Æ3n‹ÙGàñ:>ˆì£=Kt(°ÓvLyÆÒÅë•z‘—êOW^¶Ùw^fU%ŽXö˜åñ Pa'ãái½¿ônqA!bJÑÌõx†¨¬.¤Œ¯†…‡¢§ÂHe·RKØî¿D6úåŒw­¯bw/ñ’*+´Åõ@ÍñþË*w…þ4û¬¢‹ÀÌÃ×$)¾B0ž®H扩20›c¯0~ Ÿ2ÐÓ)“©à¨çtÙÄY"/B «ÊH¥²ˆXàëØïм6á½eÍQ½¬‹%zγ×íÙ0S =qn‘Nžjû„JÓáñ„¡w5L×Gð®œôà]gþ�w¯ÙÿÏ»>ðj¼›½½ò._� MhBL¶°¬´¹„h³Ú5Ç7A[›ÐÒ×°ÇE|,'w{Œ‚K·¨gÅÚÁžhDåUèpÓq•JÓ¶Kµ%E÷ÎFnÍ&=‘¸Qýt20¸„­¶zé°W¼xÑÚÅ÷’ñ²Þ•‹wIÐ&úïð{rc’ç i¿ê¹¶u )üç�Y>ž‚6BšE\‘çÊO:6MéÞ§¬"!TÑuÿ»²¥Îø7ê“k½4ÓÃù\È·‰¼Þu‘5 tðvx.Ñ´0E;ÑZ¹ŽLë™¶îã[FÅ‘šÀ![GiCõ‘Dz‹­×et´Bîžõ\ŒpÃYà®~y2„ö¸æpysíRF¦H€¥§·ÿ²_íÈ•ä8ÐßSèê H€ŸótÌZmÍý�Ef‚¥'uïškLÈ‘ˆG‹Eù!×€qÇ08èÐIƯ1«çaŒÐÊ}Q3N6„IÇ1¶îs,LÞÐ3æåU”PJéÉÚ_"u{röä# �SaªËÇKo²™Û¥bx¶/Ñ’À< 6´ëºœFìòg–h³"À¸C²×‡_\ü¸¼3d3o_¯nBéÝóe¾›Ž” ÍÂú‘²Òýe”„ܯÌÙñ5Ì‹PȵŸ#ãÖ­þÿvâ1yâ”Âû‹�0áF:Ûj/¡Q»($Á— –mÈk®”õ jv’wö3œÅý¨9Ô°¬Ë‰ßÂ,…×Hj²íQ&‘ï߯ Ñæ\ |(á@.´pàø:vðæB¶®NÆ\�üÎÀ«Õ� á�zéÏ6­áE©KP3>]+ +êÈW#FðR‡Cáò.FDL&ɨÊwÉÇN! Q×ÉŽÔ:ñ00ì̱¥OQ Úú‰ruieH )e‚�­­Ý)„…^ÏZ�óD8z/sÑho×î|Ó&,[ÌÆHÅJ2&„°iM;ø½SÊ% Êd>¯'�ÙF}¦BB^rÁ««!ÓtI®EYÂÂï2D*�àq~�VpÐÑðHîšgFê½F?)QÃ%�ñ£Ëç¡ú'£6阣ùÈĤj +Þÿ”´¸¡knP@÷’– w~ªñfVµKm4ÐQB4 8ø˜]`³zñ%­!ÑÀã¦N¿�4z°hR4ŠÍ€�j(Ú!ŒVÝÆfÄíeùMÐ礩3Ö(ê™Þ/ÿÖÆ3´Ã5�|ünh¥Eó¸å2eb}ã!¢Û¯´!Ëõ:£¨�NÂö™SÔ¿‹¸Å?P7ÿ}6„Û|;~•uÑ4�U-ÊvIŠ0€/n§ÆõºŠ�š£&!¦lê±)XÝ^XÛnˆåÂÎYçCijÖòÙE‹Û5gBϧÈÇ�rOï’Úo*œZrxtù#\Qæá]ZJuó~ÅÔ;+Í(æ²5kk´®E%Lâcn9áò Ž s“½ËTÒp榋³1†ÐHâŠSî%cDŽ�Ò’GëT®@Z´Cl)™.ãŠ"†2©þ?q£FàR…„çð… r-Zàëç�¯Î9þ9^U¿W”u„ÞtÙ�ê _úé¼4yœ•mêVbüR´¬hùºöV¥¯p þš|jl þÙ·ÿ Œ“¤»qÐrÔX »îLÿA¸ Ž…7ÍO,Á8ùqäËC�hÌçNI»ãŸR7x JQL› ²�œUã›qqÀçÁ¿÷²FŠÄÜ¿žh°mú {dꈶ…N1]^�tÛ”z‚Ç ^�0fÄÚÙ ,‡ãƒ‡6Ç˵ߩp#] %õšN©ñïjÕzŠ“ ™yN~ë'¹:Ê÷´«œçy —Þ¡®Éøä7ØÇ´AdÌ—Ø)d:©‡ÃF†Þl]øbr³`¤Âñ�«Møüi�´6²¾òÉsÀ™óWI;6ÀMûžÆÌÉÒźk®Ç¼s`�z&‰!h¨?)ý\)ñ{–ÛTåN.ŒNœ@â¹ÿ-² ^¤î· (óYu>bâýÌ•®Æcqµé(íÝx·x!ç ­p¿ã:å5|©6õ Þ÷婇p‡�£S·³„³f€ŒÙH­(‚³P`@'Ç) œM lÆt�Ù€�³�B©´ûh„°Sò»O¢:ú½‚{÷O¶ÈÇ$-¶ñcš1×J‚›êÇBú íy&–Æ^»@]ÊC‰Œ’*u𩚡F},ð÷)6E�Ïœ žÊd|´#bÕËò8mñ íÑy>"�µA§!þðP{•¤ãæ 66êŽî�·§ ïõ­–ç…ʸ•ä +”9è ðöÃ8œ1ßAÈû8u:ΧªéúD–LÑõa5½Õ¥¨Ê^êï7©ã|çÊfŸ ±Ïþu˜ß§i`w¼Æ%Yjw©ûñÔ  Xé‘Xby^I +@’äÚÍ¢û#llÁûkÆb5 -ëå0ú&÷ÎÙ!BñáºöYÜœQjý.EŽà�B´G_ô“dhØøµKÓ.‚¼öÔà™Qp! ìþL ¶SΡQáü‚¸|F8¿²ŠÐJ2;¿þåT�7Bêháò¢0ç qÔ@ðYçÀø x‚üÙ¯ ‰ç|&‘؃Œ¯QÓMÆ3‚Ëȯ°x–|ŽäæK0YüÝa1�=t1`bo¥ºÌ&tkOµ¿6|Bð†÷89Š�ÑyUs¨’ƒÑžyÈÔ †{\ƒƒÌ§¿3ž§t¥åF¡™ê@ï §ª~a.Î5±õÿS„™¡šï˜æ8Z²(²Ä,¹G¦ß>Æ6ïª�[mÏè÷Ïü|äxŸ¼Â/½mBÒ^Rœ«ÐĈ y>‘s<@\¨Á"Í„�Ú~†Õ…°G BT¸Íý%k¾DÊ3ä^&¨×ûA®ó‚E˜sIdèáú‡ë£™�ÒGvæ+†vš²÷ËÆè‰ñçû¥\¼Üqì™Þj«'†Ùó2y”×äéÂxÎ|56y+èëN{‰‡®ñ.ýoè¨Eq2ã1ä½Lp9dêµ \0­ +o“f’I°— fÖ�ÁjŠ�$¶ž‰ ´*ž>‹£9$’ä ¥·V7ŠíbìKîNQ¦JáP—Œ% œ'ÂÑ 8E/6x–ÊD„ön˜�"Éd¯�¦5íŒ"h(Bðv#lÈ’ÒmÔwa*ŒÚäU$”.¥™U ¢ßRpn)Û ‰Ó‰•À®Ìd©Ú10³¤fÏ•5wìw£åÒ¼ñ6ù}Ø,¯l¦l¯<lfb t²qçår“ŧ„¿ù–•O‹ô{/‰‰^˜ «4ŸÃ·¡î8&ZŒYC¦éÆ›ÎÇ;îÛ~·lþ‘ð<„ìÂAGÃ#¹kž©÷e:4À üè³_þžLŒ8«c΂s'ÕpðþŸ Î-F†®9¨ôlUgv!ÑòÎOI‡™U��"é@]*ˆ·Ä‡|D¥¬ ¡é]_Oälmã¦N.6ÂnRè5æ¹À“ +êˆú®ÄgÇ�fam(@jRÀ! cc�v:’žjpñ¯am<ÄC¬A€äãw"õÊZÏG üî‹‹æÄŒñÐh;¼IÊt½Î`zr µ9Ã>ƒí@£à»¨¼ø‡ŽàC?YB��sýÐ[YÕÙß}ÌŸ,�ý̼ZNÿû¾N%Aë½¾Ñë½¾Ñëÿ€^àÓ[¶OÐýå³A.ú4¯¤Ä~v«MŒmÞq½®¢¥h bÊö·’n +JÀßðýšË¸ö ¥Yb;‘]´¸]s&ô|Š|Ü(÷„ObþT88µ¬ÚàMܰ#0D› nÞíö+Í(7jkÖÖh]‹ +ø�îñ1·œp“èMG׹ɦˆ‡�<œ]‹³4H@#:ÎÎ)÷²I�sòSm1h]þv©bËzuÀ»œ8&®QTz‚ÇèL�0fÄÚá–ÍõÆG‹ëÙ´ßÎp¡\ %ÍšN©õ¿y¬ Æ@ÞØ!¾Žî~R)Ù{Ñ»9-g„š|!CL†h­ô./I�˜§|­óUO .e]Ë¡—€?•æîMý¢·¨°?‘Ï"Ój{È�¤ÜRñ¬©Ñpqgr7ñÓOW/¾hâ é•ÛýZV� _,b5÷¿nA­ý(¯çÿ,Ýq¥ +¡Léã¹.CÚ±ìÔM˜Rž|ŒBêõƒf€´õšeAX)nò›˜Ê±ÎvA·¥f7Â¥ôDi; ]΂ÂÒ®?ƒ–âõ½Y˜ÆO‡zY¡e1ZĹ>@u?àZ6ó˜Å”úœ°_q@!0&¿©ç…¿H*ºâ" g ›^¡ lÁ� é=ûA›å¬‰a@Òy¨Ï~xZ:íÀC©ÕÎ}£“ˆ¿Ê8;Ï®n’†¬Š&cIý +J"rÍiuð7©Æ�]S*ÓL #y´“j…›Ü†ª)òÔðô%îL§Š˜y� +e£&Šé",TW²\áFıмYGEÝèL²\RK•‚ñ\Z +ZKBGÒ³®·¶ðÏH�²C:…lÕBÆŒ.Hª uè)û…ÒëVÿ ƒÅŸ±�¸¬ìÀ’oAû4nê¢íèaCk °]ÈWþ¬³Ð³#M�Ïä’p’Hp™=»}1ßó"kUø©ü¿I7ß�òAÛ{ÐòóèWã<÷Ù…É«ßãìÅŸRsö%£(µ”-$q3¥Z8$q(I¬ƒ )_vâG°2s¼4NŽæé˜|QY¸ói•§"â4~ÖèM€Þ/HHŽç¨œuù¼[LÒ¤åm§7©*dð ò7TW<�½%ñ[¿%ñ[ÿ(‰ànµ7þþËøÛv¤%J�¼Ú~’´-fG~Œô×â $s2ÁÏPØ9–A¾€BIšéÔ¡�S<ဌ‰åo§é3ÊEùÞøø“ÑY�èj¯Ò’#õÀG6"‡OxEûI¥Q¨s9ôN¬{ ®.x[ƒRBX +µxí9Z13yÃÁuÝu½¿VŸƒÜ/Ý–’“WP² wê4¶$Mš§ ~iU½»¡�8�¸óãz¡¦Ó•ïð ÞÓk%]Baêfíj¡Vú÷=4:¤z?«ÞªF|,ºI'šŽ+˱4~ÀÀ:éÁ¤òÇųqj Á(¡ŒBÏudHqšˆ¶Ž¹#!*êepÂmiä¾_祗p|ÍŒZD …¾†�$\Ö\ ɹ,(4þ㥿IÛÄtÖö–>oéó–>oéó£ô™A%+®þ&Åÿ).ÐVôÑÞ=æìIX1)ËâX‹P-½ +¢ÁßœÍ2„‘Ô€WÄæëê¶É–÷ª1oNÈÝÃÏ0Ƕ�§Áù*� âqâÎÙW¨Œâ”ó¥ èµÂ©ë˜Jœ¶— �i⨄ü$õ’HÉ!) 㵘{¨Ç…yó€ÝªªS®€9v@1nÈÏ\²Ý”™|njÊ5y 7FœÑhö.½ÙSE,¼Àclp“F(ž-N��“¸Â�oŽÂgÌÀA±‚2„$=~Ƽµ¡=‹ºã¥"WŽUÆà’Ò‡wÒxb|%0õÔBE\b.Phi&�7ßYmÜ—f¦è?4B0ƒþ’Ê™v&ãÏ%AQC±KÉwgü‹SLÔ†és&5λðdé ­[ÜØ[¶Ÿlð†›&©_kY§ÅLàI!ËYïØ¢?òéÚmòY+|ÖI÷ñkÿx�¸²¬…SûgÚ¾J¿Ë$”ÖM†Æ8Ýd¨ÛzÈÐøíK…Ö‡mf—… “ +vIPE©;G½­æ�·x‹™ƒˆCÀqö©¡¨1gã’ œ�‡ å„ߤhô’.þ;XÕ…0ë[о¥è[о¥èOR´–ý5úFÔ@(RÒn¬ h<Úø¥œž©A£ÝF¨×¬žè¶6¾½ˆl{¬³]‹¶KÝV¨8–ÐC±<Ô +Fý&døºT@'>Ê™6BjPÂ*¢D™1?™´�¡‰n2ä“ðR¿¨i0éè°¦ÜjέŸ2kíþtÓ+´�-øQìĺq?Ó¬©�̶ä!b²¼Ÿ•úO�ÁC©ÕÎ}ÁáS`È'e8ÁðÒˆBŒ”_,©?âOµ,ôØî¾Ç‰óÈõ–Z�jŒˆ×��®ùä6ž&¡¥Ì»Ç�É!ëp6ïQœÿDMP&±Ø�à±þ�Aœ—мYGE¡´"±‹bÊ\u(+=DÖ˜ü¬­€M½µ5gF8‚”ÅÐQîd«"stABRŒ@K-.4X·úgXid"`q™š4ßÇ6nê¢ Ù8Põ¨\g¡SC¿Ì£Žu’K:£/Ö‘ÕI +G�ßÊÿª®BFwÅ-¾w¡j ÏrØór¥ý„hðšÉRïK*σÜMµ¬zJ]QÖµz ÒuÑ! øÉÙJ£Ì~+6¼´­ný€kâ ÎzðCh‹/š0g:¡¦£O¼XÚÑUn‘Ï€ë9d/iuÌpdómß6ñmÿ›X}EÛ‡Â&Žn/-ȉ۴4’�ÝS¯)÷ñt)G£p]/#?™ òLªà�•Ü™å!Ö’Be›‚BKÀ· ¥µv1êîηÄvÇPYÓ+ Oää‹Áò‚Ibò–*¾¨Â7k7êÀÂÕÁê�rÕ‡J.zµ¨ˆ‘žJÝ©{‘áŒÂÅ'ò>¤ñÀ*2~QȘž¤Â�ì[óè±î53[ñdNGŠ€Ûº�·MÖÌ;x?l) ‰ dz.fy�Ã=èÞyTÖŒÐõ £2¥e"UOºe;¿é´¸¦‰IÕ’e:�ÀrR¬ÀÎâï€6q5ŒŽО8(ìŠa×�¦š¢h±â�MØ ¾,ŒˆÉñÌRxvæÿ +ú>ÍȰéÜK `“ŠŒÊDÎ÷qZ´N;‰¥Y&Ò€ušÆN™Ñ�!É]7�&ldoã¦- K£I²!=Yg00�®MŒÕÌü ª%ØÊô…ÔckKÕ6òºúü8ö´÷�‡S¿ñ¨½9qúQRbkSÀ5ðÄxˆîƱ[* “~Ί¥0Ä cÍ9k�¸,aE0e5~àûºâë@´oTö ²íèsö¦ÝQzJ¹Y–²oš»¦>I9e¤�ô +èû~Ù:+xŒÏ”Œ2 ÄÞv¼É#êgd2^9\m¦ß9Û¦:¿YÓúñ8òOç°Ç\�«Èy�kÊ”�$ÃvR$3Ǽ}çýH½ +�åÃM€ +I2�ÓÓ`nô…‰È!+2pJòS$„ÏJšS`yÊ1MªKÄ!>'°7ù…±§{Îî™WˆKÚR¥eÒTþJð}Shm÷ã—þÂÁ¬?ì“H3½±¥öcÄŒÀ�Í(f.ÿ&*Hs¿7îúÊ^Ô×°+f¡îò«?©¯íwñµü.¾Ö|_õ.¾ªÄ×b=¨½8‡´‡ì¯¹¤Àd¡f¿¢«M¯˜Nµ2%ÙðØÔ(¦¯mM£Ã}]CSq‰/˃BÙ‚ $ë<�#6®ó2•èªH¶OÙ,ê¬L祿汭ôø¿)Ë›ús”Y]ÕþD¾bK ›ö7ûÕŽ$Kný=Å\`^$ÁÏy6¤�ñäèþ†�™ »¦wä)Ög†hV±HÈÏ·Øòã%~¼Ä�—ø¿{ ‡—è¸(µý¥ã°ñ�OIÉ(w¨"{ÄЂ�ì:9†Cˆ–þ`‡«Ëw½>â�4?½þÓë?½þwôúؑͨ¿½vÔŸ}Uî&%ø÷)Àoh4D +±WÍ"mbJf*öØ’³4›f|FYw8ôPŒ�â„«ãºßÃ_qêG$�RUfÍï#û£g½—†¹>ä’Õ*[ÓÑÔ–®pñA,ÌÚhyüÒBiÌ;,ò™ÐLߢé±ó„°€Hûjˆ–±R´ÔîH7OÀ ©>ÎŒa¾Ã^,Ùy•ÞU?gzÊ|kèA†ðšl¼ÊF…‰åjü7¥ðâC’¬æl5j掋Ïý)Ð¥­;—¹Åk~î§eþq`†UÐ\‹­ô3Î]Þ¨à¤Z´�¼ÞóñÐüBbkC—jÇx6a´—yä2g«f¶V?�›ç›�Æ`1®ÎÙUy1«SÒ­Þ¯ 镤6 ~\SÔ¹ÝàÜý }‚-fl™øÁ5UŒ*Ãd(}��ÀN<�×f¢ã¦ó©J¤À T¤“l7vÖÐpÌÑÒª-ÓKé>¨UÊ�+‰›KA!ejÅBƒ©�É"`p¢DÂ%óÙ=ãø}äY›Z3Q "‹:`Å‚•Öˆwt†Kœh„ÿ~ÜiM`^²FmèƒSlƒ.Æ×Iª•ÆÅ˜o_�›_Æ©] Õª ‘%“-¾YMNŸÏúûK³¯Ø¦ïý�j‰ÓB³FhÄ€O8sí2b骊fëb›ÕÐìjæ©Ëj +§¦)Ê �¤gCw¶§ÞH +/¥Þ‡ê ›ý¥«Ì¸±yûê–±´àĵõÒr»[ "¸|Éž—ä‰s{È!ÇÞªãí±˜»¢¹Ù‘»ºTúƒE&Hi½‰xõžÊq +µ(Ž–„Çq–�3µ�r®¼¬èÄ· ¦–Ð5²%àX/yÅ�¬�ÚÍÍ.âa�tS][è°aŒªrRÀ¡æz^!s\ÏVÆ'±aòÉ=Y’L7»KJw Ø[lI“ ŒG,A>I™3Ö¹DÓ;‚¬�²?º,þÉŽîêÓ#†Ì_i¬”MF¬7ʰƒ&Åê½[ÁCe» 0TØ*û*†H‚ü±!aD-Ô$* +ÅTcA£i€ç„ZPÌ ”Ó ƒæT¹ k®gÂy¬W)F û›ðÜ`#“ ÃT©ÌÑZ¨>Ç J–ÈlÒÜk¼¤ú£Dþ"vôcv~ÌÎ�Ùù;ÌÎ^`^õøÕë›ÙiÖÍÓí,Ɖà)À¸l½#ì Òš×ÞèüIy™CD#x_Ç›laÜ®IÇM¨ÆCÚ`ê­¶t‹‡­•³�“�GîÒGi¡Mkö=Bû¸Èa,ÿûèÙC¢ Mwá°IÄÐïüùÇ¿Þîµø¿ÈX°Y܃½!Y´6‘lƒ�ªŒˆ£”†¥öhN�gI[$ž%Ec¨ÌЋD#Šï …feÏPÄVÙ‰¶MÝÒÓñ¢·\Ũá¹:Ï-UÉ¡Taй#lÆþhÏ¥N4Ê +š‘ö‹ ÑkSÏ”[÷¸tPRQsÄõWYËs‘âL:p¢ž™(:b[V$M'Ñ¡jâf:á¯Òçveá´†™©‚ ‰ê´‡gÜÏSŒfWYùÇàù°X\Ù äð9“äÇ íù#Ò¤âŽ&˜|K^-¾2©™>AS‚3n™Fç{8cJ‡@À™–ƒ½¦@$¯WÜwŸø”A®\vnd8±ÑV¨†*öŒÔ÷E:4@×7üØÅ‰>'_;þ¶bÎ\°¤ä¼ÿø>ÅȰknE¢ƒY:³;#3N½ÌGTu°L2R#;hJ‘&c¥Ì(ÈÛU'ì„–ÔŠEÁÀ²{X +Ÿˆy.4{A8 u‰ÑÌûÁØ¡dp{²N°‡›Iï éÁ}ò¯áY¿CÛâm2ÉæïÔ3j½¦Ôè}ŠfŒ›ðjl»õ¡$Å»>gÀ*C4:Õ*õw'ߥ9ˆ1ÿø¾Jå },Újºí²x½¡ºœG‰jm½¢JÖfD)ÁÉgD¶^ôÌRé-õºù‡žiȺ jý1n‘µÐï|ìk´ØÄRXÔvƒóíé— ÇC�¡LÅ JÒÎN%N +Â%�šDúª‰«HôiV oÕít3é]k´Áó‹)xË�.º»"óÔ\”ы϶ãô±äÞ¨îÈþ.^FyÁ^+þ2.>O ^ôqæP½ù\I¹&ÄÕÏSÛÆAn°2SÄ4ø W¦�ÆÕøo²Kð¡MIhN(­ƒB¥•F·Yw®°‡ùšóšîŽÈU‹a•žDòÑÏ8wy£‚“jÑ`~5Åùxà¸ä;­".Õ®ø rÚÔ޽̼#ç,˜#"øË.o¬‘SÚ|4rNÕ9»*/fE×CðkõFRŒÕñ)ZÄêƒN­Û ÎÝß°Ña™ q™L…™zϵ�_D"â¶�~—B¯,�5³g·S‰ô„LaKäÂŒc|ŠKë{ßbS A]î\I±½‚ŸVŒ)›ù15v4¤|^“¸Ö�˜V‰ŸÈ³6µäjé%F1²µ¼£3\2R&ø‘�×Tó\J0O‚�E�UÀ×éÄ` c_Ì·ÓÊâ[œÚ•ú^u¡#²dTÖpšþëiçdzþѽÎÀŠÂ%+ä!Q¤þó�;½ƒÛ×�¦��Ù>°b“ññ +¥ô�—Î^ÿ}†q*ógHÆŽU£ž�¤Jñ4©wެqð<ñR:xPÊK(`ñÁÙæ®(ÖvÆ�çâc€Rl!tEßÏ!úE1ÄØ£÷]8<è:bkÎ𩏠+ì@\ÂÝͧXãnmEÒïÖvxè9¸¶lTIŠt[@òýe¶;gj;ðZyY7Љ/,O-¡k$D÷)ÑQÒ/Èé6J…fW7qbH©xëß*™~b\‹1Jáý‰zÊ+¤�‰®RÆ'¹jòÉ=UÙ;Ëatš§Èë`Ô·;—­þ¨�{âפtKáC$ù•µS€“Ç¥L2ŒÌ Ö"ÍXŽph +£öˆ‡IPb·BQ£»]UÒ�t9”´†Ê¾JD¸àemÈÀÒØ¶š»j,h":í¬“ú!yn œf؈fñë $©ŸõLºëU¢,Ř¹ÁFe3 S¥2Gk¡ú iDK•iÁ+Ëh”«ÍÍY’IVëÑQ‡]õÓ³­ÍBÛÕSGá¢ÅRí¢"- 64Û%<¶£%–IÃÓ¬,[|F¿5µ+Wîï�›Ö© ;/Ç(ƒíKÄÜðâM½J+™òADbborób3óº1øÆhã½ÂÈ@¶yÁ¦¨³5:ãç²˱9ßJ®�¤â^I”é>£S�˜Y:°â‹=Wæ®Ò‹3„9£k|ô3^MÈ( ¸ãB>Pã•ÀB¢� ωÍpváÊÃpÐ=‹¿Tœ^ö›Q¿õ?Ũ=0¤E¼1ü�áo ÿ_`x Ìó1Ü„ûÉ4/5h¢¦ÓõÄòY2�,À$r¯{ž}ÐÛïØIp {>"kÁاðVöðÛè`a,mwˈÉÓi¶_àÛSEâ1ð#�ËY7LC…Ë,ñ=rIÿ¬z¼¸¯ù�·'Þ¾–±4Dâ¡`Ä¡i¬N:5@ +ß<‹®’s8´&Æá½²ßƾáX¯)Ý_,u*ÁXæÇ¸ÖÅiþläæXtÖÓ�h°_jR RƒRsóaÄœSª&TاäU%×uÕ�öðÁ÷«ÙPpi Cú@ðŽÀÚK'„‰ÚiYÑ´žZL¤laÇÌ÷8·û¼gÕ’ÔJ¶@t¦—ÄÖ½=+�8·–FS¸°Û¸ÉGŠ>pÔ›íÔ@g)ªMÛ}yÔŒK�†TÄëŽï©è«˜¤Áàû¡æÐçe¨^£ å\t¦•ßúK½ñzú9¥)¢sŒ•II3Šž »1- ‚»ñ߬¦Sçf3©�ÈncÀR½à~2$×™K]‹Ïú¥ =G!©Â�êÄh£æ8oy¬‚—jÓhAjü×á�fJŒêC·òÓ6#D›]»•™>ꜵʮ,kFòvÔ¾§ ¯/ÚÖ9»ŒŽYFPíîË'SoWÎÒM�ôõ—ï�‰ÎŸ-FlUÑ‘Z(‰½ ŒŠ\–×Bø»z»15ÖL Ú�}P�ìeÞ¶’ƒäjìÌ¡Ñ1·vW�Œõ­ô§ ál9s%Ûô’QÈдcLÕ™‡ Mp‹�ÊÆ‰û±#·ŽÎÛñû,ˆ³.µÄ‡¼;;rQ¬ØñL]Ã% +V‰Ãí#—[ò€¥ÆáCN‘� œNJYA–XçåÁµ©;È ”z"SFiÝH¿ïr~ÜóïKËž;Š4 Öì¥ïxm×׿Y4ýn㈠©¸ó•/Ëð4 ZTj&¬Ïù &ÔœÝ"ÆÙÇJNÖKîGq/òŠ:'�,¥ÉíCë`MqxÒÌW«�/°•ŽÕŸl¨DÑ^¾vjº©ÉVµkßw†W-?R!Û‡ Å0¤�,·Qc‘‚º£”®6 N|YHиÝ�sM² "‚S>À’çw ¿#H3ò ¿QÑ÷û­~î‡!…CöúW«d¯9£f¬îCö‹ 7nÆ`ò[`Z#͉" ÌŠ /ÀD2SBõoh1Ž“f¥.ŒQUí�øtáHW W&wZSxÖ8V[޹±­vfZÜÎÉÎI&&6Ûy w˜"®cb®³`¹#ÿEUfDU@ã5�Ÿ’¥¬™ê,ª®×ǸŽkÕë匾Æ8 Ûãï8¥�ÔÒ!ÙsÇì—Éû©9÷Äù� +¬÷ÓC#`he�aVaŒƒÁÔ”ºP?¯&ºæÍRœË#3Âùh®ã�k×6DE ÜmŠ—"�2ìSò-sÎM#¿š÷‰…¥eŠ4±be [ üÙ­Vâ„áãÍ�ÞüèÍ�þp~ŒÙÐþ(…g5EŸ9ý©1„_z9hòÕ.0j&žw­Š&UG²-E¶"‚Y AJlÝ h™<6²GsH$‰i¥—V’íRY—Ü�¤L™Â¡œŒ%4o„«@p‹âOx¤Ê€…ò.G’Ä¢ÖüWÕš²=4!úv!lÈ¢¥WÏwaªWB¨MвH0]R³š%ˆz ¹Äl(Ž+�]Édµî˜™b³û¢5׸]«hÍ&ÎÛ?߇ÍÂeÑ”®8lF` /´£pÇÕËAL&¿þÆ)3¾VÓ7KЉ +ž˜é5ÃØùÞ†¼ã˜há#‡ ÓeTz:>7ø»Mü^Wgñ{Àcçu@d'.êŸÄ®qg„¾å(¡ÆñcvõïÁÀ¨gæjçÜ6Üéÿcô}%#ͦ¹�ŽRmŒ.(Zø|'u‘Õ)¢䥂ø8Ò@‘)s€h6ÓK ‰K»rÓÆ^\ »�%ÃjŒs!€G+päù]’OƒG#± 9)à��qeމœü[±¶ŸaÀ!ÖÀ@ðñ;‘zF®Ç§þÖ&��™ÊK€w ìp4‚l:®BôÄ< +jq†uÙ�BÁ»È¼ø‡Šà[þä ~õ?R£ Etíy©çtþþu›ßñä3_!@cúßw¯4*ŸýY·'r¾zçÅÔ 0B¢L‘GïäuŠ�ˆë�êî3L.騅š®¸�!;,¿sÙ³µmRŒa˜ãZÇFüdäæXtÖ<e¯vRŒ'……¥d"yjRUc£OÙVSß‹ Ì/Œ£ Ð>ø~i>Òïrú– 8¢�Ò/¢å_:ig9àO�4Xô’Ž^²Ç1(?îÛ¡W]Âr!P]hfdÛãŠe_0ÌD÷eˆ/>æ�¿Ø$™p`H‡Þ$ÿ„UT5-³8‡5Ò'Ó‹^ÌÓjDy1ç‰4ï'9€“s¸¦ëøèËmÖƒÅ-ÿ¹ZÎü_WË6ý-¿eo†öcÝüðvó»Õõðû˜·ûÃéò‡Ïç¨éóNŒ¼|.+=ü6ºZtì;¼9b9==> +Ú§‰C’]>§‚}øýW±~÷=�Žÿ&e'HÒìo ù¿šè•{Û~Íßš›ÛV”Í`W ¶kãEé´*¥3I@g‚ã*ŸšÅHë÷Ã"�êÕ:d�%El[ü´6¼÷ÄœbI¸Bºƒº•©Dô­ÝjÁ÷±I¿ \Ë­]¦1»Ù |&D‚#î·°h�Â.jÚ`¸’ºƒ©i¸€l¼�Ÿ„¨¯Â(3qg†fÃSò£ÒE©ÔiYÏ<[X¡®Ä…ª,*–ÈF±�Ž}â_çÊQháŽi„–ØZ9ÔG"øüŒ~£8ˆ=ƒº¨¤ ;/Ç(ï(¯†urØ™úªÒåY-@Ó_ ¬Ÿbñ@Û™°Û|“!ÓŽ¦Tô‰@ñ‰Ÿ¢è¨z›+5iÊ%aÉn %×B�áàÑ�î3:5î»0³t`¥Š�+sWé%ñsiWP?ãÅ깬½9ƒÄ+ãóEzmÓ´Ûä\+œëÔ›÷‘Åb÷¶6õå�­ýÌÿukßMsR4{iO^Y¢]@gõ»-ñ•ö'u(J—^0¡ ÂÖˆ‰rÅu&úÏùð\dœÝªÒ„ÈR¥AS§ª=„Ó�eR(ÎI§Ë?kCë`M +sþÕ*DXvܱú“ÝGËäk§¦›zqU `ø®�x „€ZÚ�öä×U™jÌ´ íñ¤ ½1€%ç >ósÉÒ564ý<tÂc¬$4!hY¹ÆJ·±´›�Ÿ*mÂCíô©�KÜ„‘¦AàEʹ"-ØØÞÐgÏ�P—¾hš°ÀhÐx9Î[«à¥Úô¿ìW;re» Ìß*´�QñX�Ê.vâýFwƒGW£÷Êv®d†yyHèÏÚå÷ãY­‚ò>·"n5 Lä +âðj§rdœ�8UšÌAä'FZ—š3ÆY%z¢ +À_»O%6+/:g™¦¬¶þ7÷Oˆ¦ÈŸ9_Ì»¦w‰·Ò¹ŽÌ"Zžß„Öƒ¥á§à5ŒÈ¦‡´ \\¡â ]î¨Ú†9>Ï| +‰*Ÿ +®í™k¼® ‘sµcNõS“rÃ)Þ:¡ç#Æ.–þ~ÞY‡r1Ü´IŒmêÏ ñž•£;t‘jW7¿ÕòQÈîésëƒGtÚÀ×ÉÊ y.¾·ùäá½s*±^u¡+²dTÖPöþ* +ÎÛký}üÞìÝQt“ Úã‹ìÉBç=žcR|þzõ ‚·en�ÏiW[=qo%Ä8ç®Ñz +›�­¢Ô�íþO¥ñ.…7Óvßl€üÇòýß–oÎÜöûóz‘�þ¤RåTâÑêý]¬†û‰@5†8*0Öë-B&Üf½ÕÃ)øx¸Xs—Zì‚göÏ©VËC@pp»¶¨²ãK´æ� ·FɽI.®PÁ£µg'hâ!Á…೤­68×�íÚß­Ñô²Ï¹#ÅNümƒ›8[,Ò‡³&E± „gpj­Ié ÕP;"î!v“Ž;RË ¹{ámÚ홊E—*ÜStÑfâ–Ž`zφéÊ3qn8Ñ•¢ÅSºf¢ôoê®7È>%;Û²ïè"žÁ¦º…VX˜;]ægC�UAËÚÉà: +ë¤-[”©ÙüÕtZV¯w¶ââIÒäåÕJÐÍ˰ž;“'ÇŒÜB2W^ñƒxªJ7¬ê¢qh�fݦ÷¿c~:ËFd;ÀÅäA ¹®Æ/;Ý.d̯Qˆ�’óFó°»±zá… yÉ<¤ SG4ÖP—²k@]²¼FÞ4¦Éº‹Wä:÷Àú$Ç!Beù,í:ž‹ìÍ^Ó)5þœXhÿ œ8ùbû7í-}i‡'mÆrõÁ¨Ó0Pêéβ:ÅR¶/²¯uÜ‹“.î?1$ÙEµ¡j;ÐM¥xT­p½ÅPŸ‘ͪÆ“ +†¤­FØêCèû••=ë¸!]5u4 + ÀP*¶þüýê͘1WûÖÓ4Íá pu)¦Mm"%:ëq¶~×;ÞíHì: +Äexéå@RœáK‡ä’‡}ºñ£žŽ¶P©¤Ö!TKóæe. +,ôè�W¤tMÉ_ñ©|‹b¶$£¡7!¬ïL~¥<–é ½ø¡¤”‹"Œ˜B^ +aä‹öØó·'WË{ À?s§ŸÜçñ'k!¨Úip”­¬À¡\’worí½×—†eÐir1u¤Dh£÷Pn¥*U"4$Æ{Á¨ì‡Ä{†„²¾Ù¦¿Õ' p–  ö’(ЛV˜Lã˜SÔ†¤ƒ»_—=À~¬H%I„>ÒýuÀIlb/Kö"Œ�ºöC””OMk·ý©Š/%òMmZ¬þÀÆlüÀÆlüï°qRéäã@K÷¯°ÑU�™‡þQÅø„]”!zuš’Uí½?«ZÖL�ÉYZ™æÏpkÜN«ºA{Û·¹x‰šŠÚŸ~Öcå†�=›˜[R¼�·y†A¼ˆü1š¥¯sa–œ� ©ƒì`a[׺p!Þ½¶žFDZç†CÛ™K”]WµDÙÌÿíe>XÁ5PÁôß_ßeg¬ÃØkÛoï‚Kò¶�Û65·±ÄGŒ »˜[~d‘çc²•èšV¶©¡‘à=Ñj1xuÔå¦uHCþ48·7ª¹}ŽÝjYF€hÎL( »�”ò0ƒòj;£úLIVí&;œŽ ²Ê¦!„÷Á…ráy—ëC£˜ ¾rç +n7£ìÏ €1o” w< –h•Ûvc³¡~óh[¾ö3ÏÖ„#߆ºcÖ„Å qŒ»ÍrL ¨í‚(ŒÎØÄ +ت­VAúv=‚¦}‚î/éDûGË꨻,>±q¾€£»àˆÊÏ÷lJ¯‹ŠJÌtQ®îø7ú—¢~©É“#›ûÔd.õ¦/”ÔV©¡§Uïõ¯›"B;…Ê“r^v«[}U ·R�ðâ»Î— :×Iý —:Ü®-^*¾DkÞ(÷\¬¢ü*ܻǙ:›œØ°ˆ3»(ǤôÅ Í Ò4Ä~vm�'ìV�JxÙçÜY¤òí˜u«Gˆ†�(c²„6UÅ’@K+C˜+)ÒŽhj�]ú!ƒ’LÆÃecƒ³s2]ÄuEª.�¥.$p„°&&îõSMž|¹À¹áT5l_7m�Û¾ƒ5,ý‡.ÎúY‡‹DwÑ7æN'ú¢fQÕÂÁí4`@"�æzn’©ÙüÕ$â¹t¹x’_hµ©‡Ê#h¬f;w&OŽ™Î¼w4ᎺjƤL²ºñžlæ-ìwü!Ò¬¨Q2ä/€�x�©gã—ÉájëN8 +)>D¸‡TÑd›h'| +”¦Ò¶%á7öÞMOß!B·1MÖ¥w�å¦@=ó;ð#©þSj7*t<`V½¦SjüñÇ?¾áD*ýã/4Åø¢!ü3R—HP@M‰Ïç-¬:"ŸE•Mþ‹² +$ø ·ÖL€oÇÆK@\c€M¢u/éšË¾FNå&(Ë@YÁ]—_›_ƒÚ‹^†ØOÐv¹¥R¥ìuêŸQzœä²&§v Ò¹¸�D?®õ±Fµ¢=ææý ‰(fµUH«ð §É‚SÛójÓ³ Sý¥dyæÿ»dñHD: ‡Ì Úè‹uÜTÕ$Ôrvnð!ï°ï\ö½×o&ˆ¯•ýRÁ¼ÜÎKàUG­½%Fk�ÁÝøßéÅ»GðØ%�ÈÑ«j³\ã,kâþÌ•ž]´ ¥ giÞFÞÀe=7ɇ¼Âq�ò‰(Ö´éºìv?ž9Òñˆ¸Õ¤-h¼„ ìZ+„†„…è‚ïEsÎJBزéȆ ã¬9ZÀ´%÷ªÁ„ª&rIìœ-)³úÜÜ?á¤]¡Ói”Ø´w5oÑôB¸àXx~“S, ?Õô!§§‡4BÜ’킸¨Ú&${¬ˆ¼à¯k#®=hÏœ(²~…ògG@è©�©sq +èj/²bÎڡÞ64姜ϔ¾\…›PÓ}VŽî�ÙS�y}«å™pb=·ûéƒø +žjâ3Ë‚›÷|o#'à[!oy.|,]‘%Sz&XMo•UÙKý}Ó‚( »À1_š�<Û„{dÜf/�@do åÜ’t§yA@ÔòçeS�ݼ†,›¾ïÄ¢˜4–y[ÃxžªØÖu” %õ9:šséz�¥ýè¯òC™GïQ®dº•Ò¸a5À ñâßéqµD…‘oô'Ö$òvtlCf£¤ó3�¥ÑÅ™’þ®ú験j=G)”&‰�‰IqÀÜ,ÿ! ‚EdШ6¹ºQµi‘ wÏeQõÈ!šLK,žGLá�Fëxù +<€H#ŒÍwÒÙÜ�s]kZàïBúì5¸M—ô�·II£{ ª'‰ˆ4 )ØÜ$›¡«¢×ë «y*Ã!¿Iy ÌNÌœ#O×^Æë®bt¨è'"î‡Í2e’Ò—t¶&ä C!û”Èž?×L€ÎŠLscŒªGàÄÁŒõk4ù»]"~”�EêŸK·um.2�?È÷:ø;, fR³ú”º<ÿ!¼Z’¤imàÞ§è Œ�Äã<{õýßae¦¨î;›ÔP…¤|п6<’»æ™‘z¯Q¦CÀØÀ�> ±»ÌØ1gÁ¹“V%xÿOç#Cׄqv�˵dfòÎÏñTågȬ™±L“±RV¤çaõ%p‹N^6nꥅ�úÛ¦díbži" † +EŒÑªûÁ8 z£,ªlÓ¹fmÜëŽõºÎ'âõ6A\ƒÉÇïäƒÕhuH/î‹‹æÄŒñP7h;¼I‚×ëe9�†ÚœaŸ9rÕ�ßÕÐRü‡hÓ +¸½í,†þ%óFYŽ_2.UÜíƒc„};¹À\˜8½D°…+ž Br,“Z­›Xl/:Ç3p-­³©ÜïØÐfäME>®ÙD�“ËûR‰©ø·JsuÌ-Õbð<%I×Þå”x@!£QI1v£×È­¬1ê}­�?só¿>¤š{|ÜÏ&òÐYPªüŠ�üò‡­Ýßaã�¡CäDp×_*"\Ê¢ÇÀÕùqÊÔͦÎ<„ÛÁ½KPÙù‹w]¥ƒe{wµ€÷H›7¡¨‚Eæ­0_È^ØAß…VàU¤y ®L&ƒ¶FXo.ÙŒó-g0— +›JÙYópœÔ–Æ ‚ú±saf\º›À ž{ß©ø­SN¢gRw¶Ùg5–,йFH. +1^rKyNó"/Ó9”3ÆÎÛLÙÞ5&2%ˆ2q�ǹ_,nSEu:;ú!õ4Ï�šÀ±Î“†éšØU Ùc1e0lK$ d–F±4›�Ô>Õ…�`gÝ@·ßs®¦ÄWklª±×~=® ¾sÐv2óª²r8ç ÛëÝÔ¨ +9à$¾ÐDœ‹Ø)ƒlrkÆU(}ˆ¼LЖ ‹‰c¨”ÁX�ºúF�/D•1€þÎÀ£8ÈdwàΊÉ`0Ô§ó§,Ÿ]ÏØ;`|Îf´¿Ô[­a#EƒzìL¦Ïû”]x‡ZˆÝòPÕh¥Œ®: R›qn°$y‘�ž]’fºèrÐaàR¡Øu&3«S~áYˆØAçz%S³(¶¹Qîâƒ��]ޝ—²ÇÌÌŽ‚³9Ûe4˜Ì.gEÒ :'§›”¨�º K®�·íw v.ª( Úʪíùúì›ß`-e×Î<ïd¶¹3_oBC]^yj·ø +ÇBSvþÛõOÉBµ÷£{ƒ.Ô¿.ÅéÆ2�Vk§Hë2P®¿Cê; +ü_¡ïÃ"µ:â¡$:x‡�™u"ÊoóaíäÉ3G{ãѯ۠q”÷ ~™B°¸îc•Þçiˆ-¤«�ô”îÅ®eeËR,‰sÈX´Ž*šˆ9¯FÍ�ù’:fuÿɯfm‰ÃÉ‚ñ8šqTéã�(â$0ôxÞ˜ï /þmü€£Q‡ñ ªÂØIèœI�®X]fe‘t»¶­j•|ý¦·©Eë%ìD2…§%IØxýªÞEb…}û±ZªÃ`°îUm†G•– èT¦?Ôž€ÖU ÃÌla§ _ø|¹W%‰ÍG4ƒ §ÌB%�”õ}Õn8ó¤ÁKŒÃ4áß§©9{lÁ¬8ÀftÕÌU°EÃôø‘á]p`�½Ã!¯Ø+0ž`ÍŒöq‘,¨‡6fœ0ètQS)\C [ùIÑêÎK¤Š^¼�.V9t6­4%>ÙXÝAßd[J…6©u�Ÿ‘ÖˆX×4žú�ÍÅr0fÑmyÕdV±ÜÈXõx©³É“ªT²4ó`*#œ<ÏÞcré‰Vš¢@…Eé½ZåÁ‰Ï§^ +L…¸hQ„+#E52œ¥ÔtŽI\ ÓÄy2ä36_”úá]ÝH§Ì«ËêWeâ&(Ùû™£:ŸHuRêžò.sÑWLÚŽ]�s•À­‹Bžœ9tk}Q­O6„�² cëسnèóò*ÊŽÅ‘6kщ=5ó_­ÙÏßmä‰Rgù6û9{Òõiä<ó;ZbÚ³€’=XÖÝ“±‹�J“Ð ­@`œjøÔ˜ ÉÑ �[Ÿ’4�ÊÚÉ#°, +¤žÁàôÚ-(eJ›Kšô[´Šj¢~§¢ÌµâÕ¼ç¡oŒ�Ö~ÌÑd§‡¸ +6nÑí¬:´ q§ +…¶.ÄS@VV¤Ê��-–PÆp¬MŽeK6x–£~0BöYRÙ¾%˜Me?ÆK½ÆNˆ7x ¢®öö.Éu[#ÕíÿK–)!X’úäS Ù,+(<ÙþŽŒµòs‘ã� †ï×ÓÜg—šaΧqJk’RKJªú)#ØÞzU2çw”õúZUd¢8 Iôjå (U—J]ëJ”¤<ÄW S-ñÑKàt¥­–�%QÅÜØ—à4w(t1ÙK4.ø÷?Ÿ©C�ÀþÉ©}eá$dúü¿YÈÿŸ�Z0:B¨s “@EߨI8yƒ“szȲ;äõ'Ùó‹_·'0»[ÔAÞÜCUX@19'N ƒ`ä1oPYUè 2!8奛˜8õŸ»ð;¢•äW’…äŠja{þ +ªp8VÝÀ’Ú­#å޲ɨÙ-@4Õ•x7«ÏäBo˜kÚƒàÚÙøy»¸ÅrmòØ�wŠKú_Í;?ÈQJ'AùK¥u#Áå †ôGÄüˆ!Róã½lÆ;kÕ$U‚fI‹Z—F‚¿¬MLü>H¾~ î9ñÅßâ r·jQfD^Ts#ã)™h°AU²™`VR-Õ±mpH?E¥qƒ–2�%j�-­¶)nm}iCÄÚ„RU0¥Ë~c sþ£Û-m£Þi[H\¨¿çÀQ�j2JA -žK©ð¹™ÃmþÈùý¡�yoïQfÜ*2Q4D�ÕÏ}ëÆH½áÂ<6ÝI×PŽÛp y¡“Â+T±ù­ ÓéÂßÍE[Â+wa†™g¼W�užd�þÃ~µcW²ÛÀÜ«˜ H‡ ~ÖóŽ}<'Þ`TØ÷JšØÑ$qÑÍ&ñ©*俣‹OK½à©Á1¬-0­1óø¬×è¶\YÔ ˆÒ\'?VÈÒ@Ö]ééòéä§?‘þöïÅÙ  {f«ìæ_@´Û¸õ#‰w»ÊU6Å��Jä|šž…Gl�]òGHAÌ4†TBÄÅ‹^Ú‘ÝD‚6—ðº_1¬ÆäοS_%šaqB¨Fþne’ýªQâc‡F[/X\ruŽ ”|ü“ZN0=Ç–$ÔLwÂÙ—¸n½D*3Tâ9Ö5J2Îës ßa­´bŠR)üy)m½»D*Mÿ,ºq–!™ »ñß²’lß�5�ä%8è=™¦!µ°_^*B¯‰ñŸ¡ï!½ðAúÓ¥f­ë”�Õ8ôzîÜr?YGÿÁ)M¾´UÇzjR (É>h5€�Ð3Féž ž§ˆ¯ UŸbXï8œ1ßAÀ·è:¾DMÈŽ®È’QY p™3EUöVß1Ô Ü˜'Ù,íûFüûÅüX¦I@#¡õïV©�xVK2¾Ï#_­éü2&ƒàYÛƒÂ6ƒ•µ›ÞR€ckÜðÌš09ï˵ÊÀË‚ÀÊT˜ÞN«1�L2#--Éà­aT„àµæÆž¤9*ÿ"X¬¼9-ÔØ9ဌ,öòYàÇ%¥Ì1\ßz:_Œ^»…wg�‹ª¸ÿêƒ'rêúÉôbb‚ÐSÆÑÂÒ� +§2q}2†z¦=ùA¯›’8ÁÃzÝ ®°wj]èqdîX5!?»gKop‡õ#¨#J{÷Ï’æ>—/îzܧh­!e¿&ï‡Í2d“­Áç@31^£k*‡™iŠ‹ø‹oIæWV¾-øpøºÊ^ð„UƒïánlL¬)W²SWéŽ+2–ùº#Þcáw@z¥'~�Ð^8hçì•»NTpÃ7Õ4M (œŽ‡°;ÖâkW4;|j¯Ï`ü#Î-FšC¾�‰NÌ.¸/c~\άêDÃ"¤FÓÛx•²&|¸n‚ÉmP²7„J©f—ªbždcG‘8‹ÕÍÂÚ V’=ô„ÖÆuÎM‰4±ø×ðlh»ýKIÊ }Î0𥠵éaŸ�A\æ½ZŠ(µÄ¨ßÑgãàûúüAŸ?èó}þèc=C”DM�šËúW™ý÷Ÿ/÷Ìœ�ëæD‘Þ½ƒ×ȃ‡Ƚì„xå�¶Q 2é •9¥Èc]ƒ�á1¯a¬w¨·[©kµ¾~^�› cO=¸„�“†SŒ#åÜ�ÿÓ…*x ö´&³Tö=Ÿ •ò~|�ÅÄ×pάú*AsÓt�?“�2Ç]×)«á¦Ú4u¿²s?ž€¢iËú”Å­ú3«$JŽJ£­ŠQÐ K yËfÉbápÆ1&ÍŦíAïvfgùa>Óî�èœ6`þCøŒÝ¦D{ŒûÇ„œÏ×Ô›Û4­N^À'1Æy,¤?4P9Kc¯š€ŽZW‰Œê]ûG(ÇŒÃ`GÐX霧Ødhþi�¯Õl´e4v¡vL—­úX§-žmÉig/6Ø6—³‘‘gjkíä‘$uÀ6 ƒõŠÑ]nͽÆ�L>x _ÜJxC¤ÒD‰É_?ŒXÇáŒùŽÝÅ©F×qŽcª ]‘%£²NØD5ýª ¨ÊÞêï‡R €hî,ØHüyW*yÙ ÂÐôÍØÞf¦/ò*Q³2ó#b ïqF¯mf´uóZ²l’Ë‘x?AY(ó æÎ«*Ȉ¯Ï䯷•ðío<’Ìüf�jg‚0Í‘ýštE½Ÿœ)äi+ÊP)ù5A‰Y=Mÿëÿþº‰� ÝΚÎ4<¡k(ž¡`¡- רJ·=á(£Jýš†ã @•e"°¸]äÍóÅýZ¹çPú( 7 f Ô:„»nGšÍzþ°+o($ y„Û¶fm�¶µ(ƒ÷#^¾5ˆÌg«šs“Írâz×¢—PÑGlvºÆ(@qúTCmÑh.&XR±Um-Œú—Ì:q­F±ÍGeR‰ >’›†pØ`ô] =;Ðg9}ÔÕ'yþã%VÝÝaަ`DBŒ¥‹@ ÌîW=Q@˜D¥ôR´¬�4V…½•pÑ-Äõš|«oˆë³¯Ì2è$œäà ž”(öqoWË®ëñOª2cÜå󊧮 +U–—ãX’! ²Fæó Y¡��ÿ»æ§í”}°@1mjµ}€½ñËdpç_­³†KòÂÒ€ô÷cuª£p¢4¡5ÔmKÆd›H’b‹4‚aÂ\A 6Bétê·Ãõù°|†ö;en¤‹LÇ^Ó)µþ N¤ŒJÕuˆ6¾ ƒU{Y»1m·…dš„ Mt†¦‡Ö ª®ˆGÊd-\Ú~–³5�Ó�iîÞPÔßLäáÍjKªÓÛöúþæTw³Ã7Tƒ(¸<ƒ/ÉC0•ߪÞ|Ð$õ—wêØ¸SF#G +Lø`Óð€ä¾©ÜWXOöZËbßc'.M›¸W§8 Þ—ô/ÂëÛ2k&�Vÿ¿§ò$G6Ã7“|ö·Lv—j™Êïv!wQ±HÀ>q…ŠT<…‰K`Ǽ³÷„BæøB½ãBTÑl3æÜÄ7æ5Ïú& ¹ÓÛ5ñƒ‡4JÕ¬…™€QR}µ™šÝ?w|±ÙkYªG·]r�1x“ù›iƒ×îç§^‚º«ýÏ¢Ú”¶'J·�Ç pèþøRf�¼€‚Z÷â_Y�zH!?̶}, +’�[ h=ʦ±Ÿ‚Çš¶Œã�¹–)ȰÁzøç¼e¯dÇKê´gõ3ŽÙ +˜ vOEb_ê3“010"túðBU¦Ū)£Fxݺ†�½Ø⪠Çÿد–äHvx]`ø?�½o|ÿ…‘™ »Z’½±Ï³‘ˆf Ä'3Q‰³ÍNX¢ w�F•×rª Òc`o^Pà–æé¬)d.sz„F£Gpƒ¼€Á|é’ÈäJŒ5…ƒ•€ òf4=SvUÞY¼ Ï²¤¢6rl5ïå$"6£‡–«*x£ �`b0gDo,5á“9•f¶öÙ³kÅÎTãmPby¬ÛyŠÖljOX܇EÈB�ž<�zFÌX]JÒ:Éa˜Ì£Ë"¼ñ•I-Œk¸gé�&vºe;ß©‡¸æ”TG.™¦c#¯;âÝ&~·Õ)A+éUõ„£•�§†ÏH}ËU¤C  gÅ�mø!„ÁĈ9{Ö¹·CõuÆÿ}Ÿb¤Ù´�s@“ŒÌDÌ÷ÑC8[\ÔfŽ3Òµ‘&c¥Ì(ÈÆvÄMß�Ýl<´¥¬h”26¤&ó\8¸pA›¢ˆ±š¬;DOõ†raŒ5êOÈÇùqDdï/=Ég` ùø�’fªFê¨Ö&;F'ºÛŸF’ kô9W±�†ZÜaŸµvꀢ?}ÿB6‹r]dÇòƒÎñ7]³^–¦‰GÃPcÔ# SŠQ~Jׯ!@*aßåÐ3Y7!u¬Á#j¡ßùØ»µØÄÙÂðz�ó\š¼y8z,퇌’ô½!¡¤§&Ékˆ�Ù$`Jqþ";•zÄzªëéf*(�Q+º¶ôëC ‹¼ôŸ¹×'N4jšÐ�Oòu±Ä%ÂÊã^vÿ”ž01ã�B¼ÛKÜwí�šÐçE{¡¡Swuh¡Ž)‡œ�L ö°+5â}Ô®xûv© +ð^-(ºª¾ µ…èkRØ…¢b^i&C¢©�³‡–Ìw*´DQ­uш~Né^æÃXY”Sl;ø`wÖ/àƒ§ñßdëãCM­“”Û²_(i×ÝKÝ�×úÑÎ5g\˜¦s<WÚY§—×*¸©m#;ý|<ÈI…auÈâQ•I)¼V‰š «•™1ê܆µ¼Ü<¿ †}O ¦¾h{çîrf”ÅûE§WM´�%ÿK\�Ó&ç0šÆ‰ý5¡²ã5áü2^¦˜ PR±­FQé]n!ý½2ÎÒX3�h‹”Èž< âÐx¹³†F×yG¶€ì}‹M†Æ¨r÷ +9%ßB[¯{"Æ×™šÀ @|uúG°n�@í$äYN­™b%ê—–3+XÆjÆè,=O�MUØx‡]ü%î"ëÁ+'<|}3bÎóÝW•>3nmŸ ";º"K&Ç¿ÍjúÈ ¨Êõ÷�wE´ÖŸ©ì;•5tmDäŸÿ?ñyG�’¯ºÃÕbo3`°è&SP„ð Ç‚ïq÷:˜^°c´œt¸“\ÆÉe_0PhHä>†àñµÇ! üA•N¸…U¤Z2y.-Ê'%úbŽÏ™Vã|"¢ˆ„L +Œ_5r.1h0t¼ôauà2¨%:Dê=…Ží·š4Ì$šHÓlÓ}bÚyËpÑEP§9cý _v´Jd`Õò5…ÁQ™B® .’íñÝsÝÇ¿˜;#·ë(tDþÿæ\ºHüünÿ[¸Ý;0$ Ö�+ŒŒ£Œ8ÿüÛkw³´kp&6ÿþ,ßý;C ,G;tëúÒøéxqQ^+'è¤_< >ÚNë÷Ë¢lèæB€X7âäÐ4¸g xy™z1¡Jñ¦^,~Láè耖/’§½nÕˆVšNpŒÂÝs} [¨R%çbóÅcбѣ‹-¦Ø0ª0¹\ƒÈêp@6nÈ×\¥é4ÊÌ:››�»4 ¸ÙU¼‘ô®®î “kSÆn«9-ÀÑâIl,¢ä¿ŽsR"×Ot:gœk8ÄŸ¤iÀ.¾Æ¸µ¡3“º_¤ª$W:Ç,ƒ®%Õap›òÔÝ/°¯HâR»I�Ÿ©N“ïÌ6îˆ-úGY:ó§ˆÞü�ŸËV.E…»1•|vRpV£døœA v–>hxcÏ•µ«òâ΋¹‰?û] ŽQëÂî·¸e¼¾ˆ>]§MîµÂ½NLˆ¿Ï*þ¦:-8mØiÝÿijí³ô‡±èÔëÁ³ÑNžu[/ž�o_š­/’mÏ˱3&)qlè–b—ce%±ŽúXÍ#j:0ða�œuo„ïSMQ9qŽeo¼x–þàÚ¨%]ü®u§ˆï` "”ì³q2À,§eëÔ£v«f_´Úbç¶Nk–t 5�RqH'�Øfàñq +±•tÒD/É*»‰GúÃêõP�ì¥qŽoÖO½Èc«jõ|3¢×?Ž;‘=[×ÙF ÌGyàýà5#» � BÔÏXB¯®]ÈCÆí`è ?‹pC¦±8åÖ±l¦Žª¹ªÄÄ4œŽÓ LãBÄêãr‰ú|)ÒÆ±U`´�Ml86Ÿòu‰3¯€q)Ót¿+ýAÐÐzix[åÿ8f×}¡ã1PN™(fŒŽ B3FjÏN€[¤ŠšÑB ]‹ï�'9Øêvm&êÉý�:Pi/æXþdލçwæ¨Oæ¨bŽ¥Öq�vÃR±õ¹D·�uËôÚ^•!ɂǡRk÷XSëð\WÇi‡9,-—œí î$Ô+ói®»›‘ 4ç�ÚEÎKsæFdgG,Ô5ES},%¶•ûc}Ç–¥¨ì?̬jU�©Bˆç Û�‰ª®Ê«‚g­? Å1 °^µ;0ü•u—)#d¢—j¼3�’K,‹màù}a\Œ­ØÃ€„žZˆ{uÆvp¨3 ¿Äâñ1‰µéœUÇ}âÁÒ²Œ[ÕlÙ¯2U‡}‰je¥Kóÿ%¦# Ó«ž7_Z?ãiÊ_Ç•úƒÝû×ó_í¨¦öK¿˜Ð±9(qñÍÑ¡‰7­¢ç;Ï9U�o®–i¦�ÙÏœïq÷¢ð|äK!�)2Ø·e�1£JðÚkõŇhâˆ�|#:|Ÿƒ žÅíãÅVø:‚2®ki±zæ¬wlÌ£!¾²¤âÐ"d­� +k +ÎÂIµ�eúx,TuŽ5Ë1>-QÝ0Oć%À%½l}¿|”•”þÚ�oNâo“µ«ðw'V¶dËMßçæm�ØÁ×8Ú”øj}ëWò³Q²O±ën +¾ô)˜úfŒz�¼êGß‹kCÃÊ“ÈñѤ¹ÒýÔ�¼¸ø^ÚÈGJ÷„Ò.3U †+›7’2”ìu÷@Ž�o=œp-YRÈøFÏ�hƒ(GÞåS¥J#ÌŠBÜÙ çƒ a[‚£Ö¥8`¯i\ŒÝ5ƒ—V \Z¬ý 2yÕÌ7@+ë³cœ™egö›z_ã¨÷X5úü²¦˜ã˜Û5Ö0úʱª5ìmç�<ÔÀ>£×Lж³0ÎN‘Ð(T¢F[ +ýÙûîö¶ $V­ù4TzI«ò9aÃØÑ؈s-fiA¼7p}^üùn"‘…Y6êæÖR,÷$Õ7cÕ´@©ÞMJ£’ùê¬ÉœÜóÁ=½Äù•¥±û+è7`�„÷ÖxH£.éÉšm=¸§tÀÐÍc´«• àßIÔ—Õ,"^ÿ>¾[-.ÚB$tÇÊËkqNåö›×¾kÊf,›e¯p|jú™m +Ñ2cÞÙ�bDV×䃭�çu”t$—ˆñðâ)6·Ä'8�1E�~œãbv\(¯¿:0F�SQ²Ý0íWñN!áô�:úûUŽÙn}�‚PØÏóC²ÆÒý åRxÝœa„¤�#cÕÀÃRKfļ¶;;™qRÒ†º§f„²u7‘©b³•\¶pžŸa�g)¾Ûà`M«ÈÕ|8‰sØRLÆN�&�¶’“ë~å™+ŸO"­âšfU7MI˜NU÷)/«Öka7gÞRWäŽá$)ľSê#ž ùÌñXîæûì>® + Nì²³¶]õ«X™Ø‰c¸¦urËkw1BL­=–æ'¶•‰yÔ˜Ñ/{µ%¾Œ8î.ǵø D]›ë8™¡ã—’aÞ>Œ)#\a Jzè³XCÇ8zƒæÈGòÔrU’ᆰ=HmG°Ö ‹©—tAm}–W±\¤Öˆ¶�ãeµÔdœ[Ê,¼¸hnoq“–C«£‘¿ +­)áçDϱÉF<é§ÀYä4Œ$«ÓȤÛÈ:ÔgÜ©$Îíž~$ȲÈH§›Œ~¼X­Œ–«R3 ãè%j�ë¡JeœÕ\[I^ªÓèïZS%Œ—v±&¥ ³ŠÕ¾¥�@E½Æ7¨×)ÀÈ·ÿ½txU¤ÃR•×EâŸ%©Ï:à„æèÝ+˜B/é°ß¤CŠf +IŠÊ#eâlM2B’‚¡‘34æäUý* +ÆômøÜþšt”„GÓ[BÆä�tù_\ÈVOÛšÛÀ�”Úª““ç/v€eÐä3`D÷ÑK‰ã4/äÑxéØœ{={ë1×![{樇2F—³»E¬MˆPýuœê¨è|0Ö²ÄôÌ&œÙWM5Eò¯�šÂ‚zgæ•f!£K$GðYÔcµ©'YAqÈ­y_Ž•Ð´ +7ýJت‹=²ŸØWB:(üBàF˜ÁÞŠ8‘g±íв69Ó²e�:¤{ÙòÝ«>…¿¤j¥¯R ­÷K:†|gÊäAÃyâË%¸Ôë–dçЧꥧõ¤­=Ý$ò`ìÛútjKœœ+Šë´_åjí€Ð²HÕ+ì© þóï¯ÉÔ-žÔÌþã½Ø«°žÿ@ëR'¼‹]RÃ�+|ƒÖ÷ÇÃåg§ÿñ³jÊ]-˜Ö|iSYÉ”GA§}µR8Ú(I"ÌŒTŽ0ÖzIG˜R’-%N˜Û­ûDúu¥³W¡Y¬¯Õ€|ïxÒ‘—5Ƀ¢sÃþ+¿÷]*A½FL…óE3N娼%ìŒùfƒAø*$¸[@€„éO–ÈéWm–PÓ·›éª,MüŠâ‡…üiƒqj½ÇUùôî|Z¡éév2UŽU³RÛÅÓv&°Ö]Õܪ9 ã/¢‚Ϥ1¼ŽÚ;*üªžƒªÅcÿô²ªJaî -º·s5ž<–ÞŽ+î€Rßtï†;R»Š;PX‡ÊÅ�©Úºï„1Zö X_)ƒ²V+¥=¨ÿ¤åÚÓ—5-X–+[-Év�g¶p˜tÏ;oA4esÐ]ü/�@cÖIç°Xº¿2Ža“�ý™R1ß‚I—Ùa;RÐ$Dg¡u Fmå"Žžž"‡-÷ëŠ\]Òò[ÝrÕ‘ÛÝêëJ>ž †K@ >ÕϦ6‹Ÿ7Ç|µšú (9ùRLž¬­#ÍS¥$‘ÚGñ?*-:P†ýB{èÜí†ÃåûóoŽTï*€ßëÂD?¨y¦~©‘KèäFQ{[ý·yÒ°ÀœÏ.3?ÂõØ­¦SS{©š¨WêkÄæÌ K3¤{ýE°YÍ�¬YMG8C\ö‘§« x®––‘�Â1gM8ü°ÇTÛ=Ålë&>·Ceê&w˜w¼a‚¼·ô+Ž>B¥¾Ørb}—KÃó|ÜnLw´eÿõ×,Î\ÝÖiË’`d7R´-›3ÖûÑk©ÅÈó'ÏHôqü«¤&>h¹Á"z‚Ӓח寔A§qÃó˜U õ¢>Û³¥9ÜŠ“‡:2ò&pȽcý,ù˜%Rëù®l2ýè*Uåp/UŠP:+e¾=iÃÁÞçÕÄìúª© +Ìý[1œ‹ÖTcQ4¦ÚÃE´Ê¯n3‰•Ofˆ¥cª êqÑ5wsrN‰)=c9/-€‚ú•úðÈ+g~£ÑáBlÐ'½Q°ý‘%ÿ‹,©]ôõêþ@ݨûÿ‚ºÀÞ7jƒû¢Ô±kÊ~Œ³±«þ8 8ª¼œäíФ ÏMa�x ,wùØdó¨c�_ /|ÌT±Ÿ‘ê|ám%$âZv`x-ç/Ýn(XÕcƒð�V‚Ù¬Â}ÝU“míO8Åÿmuj 8#àAèåÅt·!>à½åÇ2¾˜í1ðtýÛù/qfzÖ�¿«ÝÞ®w1W•Ó(7•i/>G^‹õ»YX² +æh_̾ÝÔ¼¢9¥ùâ„Îbè£߼ÑÐ,Žñï:?%}q–A#ûµPÙ˜W.ñŽú:$‹cÍq,uA#3ò4m:–}31Z:)·�åx²�ðc–Óž)÷Õó¥ä¯ÂÁ”ü꼢ƞ5µ®w\ðìEš¾Y“mŠC@é�µ¡Ì¸†ß»)UŒ�˜¯êrq×®…ó*µiB˜ÁU}„Y�}èws¸ómøˆ¹Ç«dø&ʱ±abtjzw²/5äwS8�’ MŒÆM ž×ÀØŸnÎXÛ÷%· §¶WlRFs%h̤êJƒÞwžu´ÑĉĿB�²€Âx&uyÙ"ö-ãДbÓGä²;³ñ,~¢ Td>�nÈe +s9È(êk>vMmŽÍ š>—‡ BF:·{¦MSÉÓ`èEµjQÃI[*O-â µ–î×à”rO�Ä3l^e‰f(˺ +ì< +lq\´™[—c6Fk·ôa ˆ8ÐÒªW.œR©ÌÌ�M½lj ãÒ…àÆûŽ*WÉZ‚KŠX@cUÜúa¾4«H2'ç"´EÝœœ�z'/­'L„l~n•dC~N”‘^Z*�9ß6˜¢£ 6sׄJ<›S2ÿ7£—‘!:•#1ä°SógÑâV$¾ +]Û,8½·‰G:µ8ª¹–\Q5ó×(\ÓaUo™£.î0~¨>~]‚ÃÑyâéýÑØ‹�“l=Rtìäcž„ÓMº}¾k"E…Ub\ý +ѧIÐâÄav}¯Í;±¤†û”_è ‡ °Ë!(W¥K>§¦T3`Fn¯¥R6°Öº\çG¥Ö§dq´&Ù%xi‡"¦õ˜1Yj;´pv:¼µñ2öNø§ÙÕ&åWˆUwÇ¡Ò5á´¡ïòSI‘wœ·½ðý§V仡1¼RïÚ R¥çØÆÆr!Rà£1E&«BùÚ¬¾ç'¹þ'±2%ÝŽMB@]Í”ÎÅÐb郢Æzߌ¸‰­JcLšuiް‰”z#ÞœwÍÛÇN"ß8qw¤ö\>˜§Qª»èLM¶Zº�†|1om¼Öc¨hLJŸB;>:.�óÍ“Y7"VŸ–£34ñ½.Ý”úf9»øf.ã×Yªæ¡”dŽ�Ë•ÀöÎ49¡9{žH‹üé9Vúœzgº bX—Y‰"Íœ=6u#ŠÙþ>¬õ3ÞÔë/æ";X•5ZÎá%=ìr©PZ;ýfZ×êtk¾þ)6\oc�ÒÞ\Ø$wxÉ¡jÈjJCÇ�­ÕíRà­£6B3Òñba”ÐαT9W²bt †}©rSfç*dÊ–Âñï¢bæà4öSLˆo©D«Q\–”DISÌg¸mj©%—©ÁšV�Ô•¸óùûå’I®ÃÐy¯Â(ý?{ªÞÿôRdºüº7ОT‰Vd„D‚8oÀ45Ök¯wÏ©Y·ö:/+C¿&TÿðÑi`Ä>)uóq�9vU” +øLlÏÂP„Ë›øô¹ÄW’3’“lF²Rд�Q�àúÐ1b,yÆ %ðØšg+ñAMH5šSR?ókVC4\šHÌ3Ò^ÅÂÔ[�З“)ÓƒL§®³ˆfâ¦-�g—™G7?ƒ‹ Ay‚ôy�ê ý Þ–Ð.æX‘Ã!åø ¼"[&3$»¹/¡ˆúí±m…—kžGñ5Ö\•üúÄÃ{�$”µ´ÒkÕ=§I¥+�¡·ì¦÷N†„JZ£f�Ÿ´V&*0иV)fÙ¨]¥Ì ™²oQš¥fI˜–€>¼:ØÙ Gå.%ëÀu[%T$ÿê›o,:ÃØŒàÐñPèøÂ ŠÎDª:uœ£&Ï9^jS0j"Pöf{¨põ"ÐõF %I‹C@…Æ,nžfÏ�H·3Äxݨ�9öáUÉêÛò9ý EŒÐoå.…`胉֎p}²,öVÖ¨¤ÂD°«‚án™‘8…ºF%õ{ép¹› ìê;–4‰'æÛµ—¹ Y¼Ø;`s²C=Qœà ] @~ùºŽ�)ÚÌ0O,4À6Q–C—dÅ7ÛÌGO&cáÕ“x ß�ÑL@�>Ûå¤Kô;1 ¿:þ!ïZ7lS㱎O¼®ƒüȳ˜(\I•ÏYÎUƒm¦mLhËGe³3P–â2>TžÊÅú­~�jÛ¸—I~_ñŒŽ]ý¹l¡Àw'1Øö;èȬÕ;nÖ¬Óe¬ Rj¢œýeåy‡­iâñÀAg~ÉK¾¢ç3�%'�3¹YŸÇ*|‘ønqöÒwIjèh¯�ÎhÄ/’�Ÿ™(ãëqg`�ÖLäd5gkÔê ðë½?{ƒƒf“’ƒÊ€ÿWx [–/�|ÂB>˜ëÔÈä(ìL’`ì|F€<  ›H¢ÑY%îÁÚ•¾å-4(M’Úq1ã&�ÿ¿áqhXéÒ6��ïÚöã«|õ�¯þøêú,¯¥Ö‰z½“(vYÕ c·¨fwÏöëÍtãGâé—dC*šª¼³n&¤Úâ"ÒsÑÓž´A5„#Fí_<³á°Å€Ý¶Ä8NuÄ’Ù)jîêë§»Vmë ¸—®Ò +¥?_Œoà$&ÿâÝÄ_ÛM°n�Ÿ°"S?SÝy Éç +šØ48ä$Ôðé<”»`q«Þ™�•ØKoM´ÀÆ;ÛŒ¿z¢Iì¶^I£I ¿0GE'nž‘±•„¾áó~—åi·ãzpßÿ`GÛ ‰ +V +eýnGâé ABßÀ`÷O¤£"ã¿SÅÝÛx[X™o/7~2þp~ɼA¼Œ‰ª]*žóõdfT9Ñ÷±Dö7MØxapLê:&L�Š}â>opÕq÷¤€ç7x£t¦Á3ñçÃöi¾køÁi +<Ø NêØŒc²f>ÏÜ8‘©Î0†" d>Ÿƒ~={2<6PÝsÆs"TbÙ²wŒÛhw}NùDÉÌÎÅÆÆýx0‰r$)]VÄ«ªÖpõ(ÔaX稳[2&kcØv³˜¹¾§ç„¾²M»«�˜�¿O~{µù‰þžøá�Ù%M…éá7÷O½¦Ÿ-�~™Ë¤LTm½Ä˜ôbó©Æa¢ź:—/µÛâBvÆ‘²Ê)#3jºö–U'·�ú>`s@zSzö4;Öû+ñÓzÞ˜pù —+MN!ɨpŽyºuϲXÕÙ‡ÂTÛ£%qÌõäè.ÉžMçñHxº®GÕþ ¾¢RU}¦õMÆ*RF½/U®ÌÖ.:ŸQS|E sXzƒ¦�“£ì ßhjhn +(­QEàåk³Ë›ÍS±xåëÍ“w«¯^Q³•k�Ƚ$Þ+&ŽbïÞmb<+èã:ê�džõçâé`3üäcõë&N¼Œ~Y?ýC^8kÇivö|¼a°æ¼žÃ%´zF™åüÏÓãR«OóãÐI÷îÞìRÙÞt* Dà„ùÎb«ág·²ñ°iuTˆ‡)ó™Þ¬až93{àK¹RTÊo]\Ît¦ æx\3õÁ5ë©r:‡ cž+qË•> WŽ…©ß�ìU7ï@ þÖÁòþþëteÇX)”l +‰6Ü™Lmº9‰²Â/“1Ž–LCƒDè@êG¶ˆù‰)Ôæ‡G–´NwÎØðز*•Uê�¼.“a_&Ÿe)ٚʦê¡ujÅtf°õÉ–¼…xÜ-Þ{ƒéËòñÃ~¯—z({^›Ý:ýPµ'[3Šç¯cà jä.åPsõ´6æcJ‹‡¢�{©å¦“5†lž ¹-!ÅÔ*Y£…XwÜîïSû}3c1�ýjÑ=³‡É±<¤rûƒÝáÉj´}¢ß¯6Oؽغ¶ælã47ÎÜ߀*h)}G†uj‡X¢5ºuõ�ù™‚šS‡vAõ€©Ê� +oÝlýúÑ.¡eêÔˆ³IìÍ.ïLßXm|/Û¶½Z™pFjïÚdò§â¨–ëpŸ¿ñÙMô*“é3&‡�Ð é.ÎŽê]µwò–ÙïLÍ ßÐ:¨“nTÌ5*�ÿу“nÛtÚæÞlÜsñÝüõÞÅßÈ|§Õ’yº­h_È\ãbP˜¿Ç2¢W*ä˜i¯øë«ºn’+ 0KuÙâä½÷ë;‰µ‚$MYs–¾õ�³ôÝF¹…àÇšqwpsð“§4ÔÒsˆ®%BÏ~�ZÑò#†{b_³fˆ_»µ=yÇÖ%t€¤ù¢o@0¯ùû?z9å˰šÍß‚`±×dŽjé„©ä¿Vƒi™�u³“Yq’d´¤¶ÎjÔF*�,°Ó 8E€#_’õüŽ|ûÊÒ¼­öÇ8e +Ç|�,[i‘’™ÁÕ`8M܃´³ã>S Ñ³¶ü=fTþ‡ÔÍ䈙×�q¾¦.ï¶ž[®ÇœºÏ—èè¾ C¯Õ•”7þ5Ì<™?Ï~Ž:�nõÿ÷+GU{f†fŽþ{µÃÏ-7–Ät„Y°¯QSVýYM#uù �í+X]Ë~Éà|@ØÎ�Ça£@=%ÖMr]•ª0…U÷qIíRŽŒ²Q˜og´eõ&×B«õ#ŽïÎÌÛ 'åÌÆa§.èÌP½¿6öœ<ŽÇÐD\Ø¥øí…šù§’ãPFBTês¤ûkÝ×}ê•Õö¬¾ÕؑޜÁŸÿŸÕØ<)¿BxÃËfz„yûËk{nB¨¶©1s÷¯ŸÔk2´yŒHÝô…L=¤^•q;Ü ‚dSñZÃÞ ±Y +°&÷™H8¤�ýXYVj–�‰@Ê�·•0ËÄ"7ÜK¼ÌT¶×:¼[(ûÔNÞšO§¡}FÔS)2ý¾hžè¹Ø~»#X­ÔZ§È›°oveÂÎ+–·àU�HdÉQ¢P™�Aö£*pFÙÙ<¶Ë×BV;Å8Dÿœ¼[sÚ¬¥šû¸kv·Ÿâ2Xw¢üd{J’€-é%³™25˵Êô­*‚¦sòéL@©¤ñëÚ(ÜÞ¥oýø•˜ý*|hØËD-Ý�WÀ:êCA¾šDº—§Ã¿§?¦…-½Vê”õ[únÿë–Þy“2êý8²GöãÈþÃŽ,ò‘,ôÔï�qøçÆ!â£÷¦r|¡ßÎŒØPÆF¼"ãd0Bydpê�õ„cŽš9ðø³\zf€?z‰¼·õ8Hìx„ÝøÅG‹ªg*æ«‚û\¾m|êp<ô¶ì7ë +Ú"ð$ +�);ö†´XVJ&™¥a²’'Ô*Öê9×錱øýâÏMM3„~çp§ ÝQ8 ;ù©š¥BB…ÂzTv, ÜWš©%²WõàÏ8üãàùNH¤ŸÔýÛ©K!{¡=!lÏù„$#:i… ‡élx-”ߥ̌­»xäPÖ› +é (=åÒ:¥±ì+޽8r™O©ŽÊ§5w{öZ‰¬(CE}} Õì»^&2À-`-)›bSOM‡nrü}7ÔY— +©ÙáC®K³�ÊÑ]†t'BÌ_õ¸•Š MëXzá–4…DÄÛ©Àaò^¬·Ç�IêÜ:F]§¾Ð'²eÔÖpþñnö¯÷þû&¸Òâ¬NœLN‚} ;”â¯ßöä°@<ñÎ~X‚,Ï2º–YÑà» Š‰ªË¸ó fvÂPËê§Í–}Þ7CïY>!‹g0Ú¬µ†æ®¹_ÂN'´j3ä^AuÊ _ó;§Yª]UÍK@Çò¸6iÞΧhŽAÆ[¹ˆdü`¾C˜0¸A´�ø0hX»Œ`å˜tÀ¾rbÕÑèúîð;çô×Þž¶õf<$Ø-¬;Üu�Å™ÛÆ­9k�{ܶ%M@*{°e²/óô1ôÃ`ºúñ5j{>ªp !ëÁ¼6Œu# +ãÖÀðnãžÙ®þÌ œ²UÓB7á£sá&¶>$2X4M ¥‰½-¹:lÎV´ì� ®Q'Z|Å„MÙK"7`�NÔ‰+ò&¿{.† +E¹0Z�U¾®vòæØ‘ M�ÌO¼~óüÂKwgJœ ›õ<ÐËUÿ»æ«³mÁ B“ ™âP©âÇh|3çä̯ÓßY¹D§']Ï7B…rm9"“k"{(ÃÅ11B4 +Jˆv¦É{Â:‘’šR»\P˜í3uÞ©0P.gM·ÔúOÆ�Ò�8ñclþ·�MäwdK¿Œ�Û)õšÖæµ}¨e´M†øj|Nf¹“þÛ´t"UWN]Xêêpûd4óäçWœqMº| Ü—qÔ*âÔ¸ÆdsVAñHà4rÅYvQ(�uÞ‰DT ~<@K¡Za¹Ôàå7iU÷&lÞÐX_H¢¡QV¸$KPQ>Q»2¡lÉ µU{6‡áŠñ…ü™Éƒ¶K«íC�rÖû# ‰§¬ñrZq¨iOepÑf5›`+«Î^½œ8ÛIX10hapëÅÖüó6—Μ,êyႊÜ=κlº©¾X–vJ¥.ÞäÞÜ„´p·ÒOØùÄp¦oàà)%�Roù�Òå®iœ¾Åµ~} r´¤�[w '.j‚¬» ãRžö¼ù[��¢Î¤BÂUó‡Ù:AÏPØб&†ºÓVö¥q/¦Ô“¡ ¨jdÔ¾À˜ä�),  er½Ö·º±Cq0Vž6¸>‚¢°©‘�ˆµ©q<BíºqB0—Bô>‘š?>BDÜ�Æè' 3üZuÚ{~£T&y³å‘YF;¿‘ÿ‘bÐ*»MºØ‘ÑÔxe±7Ó†®Äß�š”R�®)Gð÷`®0¡‹!OœêO£}Í›SósOòqÈ2'aªè§7ì­9D?Ø‹&ÿw°SNr$Ñ P'‚â)n°�´ø;ûÕŽ%GŽý9….Ðzü�Ï3oÖÚuöþÆ""À¬ª–Æ\o‰hf1™d >¿z£8БdêurÝa§ãû9—œXp´�y•!s½¥kj«EÈn‰x/•;åÖ�1.�cí8† &w †à|õý� (¯<‰â?õªÂàrÉÛö¶ãïu= ê�_Jj4–ê¾n�ÿ¦ +È ûŒÜkUúÌ—3q±í\‘h¯;Fçó)V oHByÑDå¹´MÙoâRÚבǰ×Nâö�{ýǽþã^ÿ�îµ·¬�wµ¿l}Ø×ÎMR Úe U Þ/+¼„‡ÝŠð¬ËÀ>I-^³�Ó~ŠA9Üz&ÇI_Xxa±g Û±y¿ÿ®Ç>« C©³ó)îs ¦ù£¨ÅñÐÛ°Óa>$�ý,5ª�'×·—!V'ʲ € Té€P~>g‚Öq7@²’ã9=Üs¦‹£L©¢Û~Ã’½':o =¾…޾”#ø=0ëï5ˆÊn�mˆ>¹»!]Ž_Ì?ÍÊ:÷:i'¤ÛâÆBAë„fßlØ>Ê� Di|³e\ᥤ‘6¹ì21iœLó½j´?âû¨m¯b>i¡¦å-Zű±þæ\Ó yv0ô'Ek|žkt68;7CX'ÙÊ,2…í;GG¥ß�B[æPàãŸ]×Ñü­ˆê —µÞ|Ð[Ɇ«ñ?ï• á”àæ�g:6S•Z–7Í‚P‹xæš²~F;ÞŸ� gÈJÑ G0"w\»|*å%.ºöÍLõrûYÚçVÅ¥æ#?S¹)£ 3ÝU“”£Nu8L8g é-•ÉŽ+ÜX°ÆÙP¨ +Ä»”\­>å �]Çærñ›¨ëOqÏþ)§¬UðÆ¢KÖ{§™6p& +RØÖþQºµ(Ãù3/.<Š2ºHcD¥óF2›Oâ�c.äÊû‚=¬de2Q§š®£æZÉ]¨ht:7[­îõ2vñ£S€°?*Û2(˜áïÞhò¸©�¯˜6©lM¹ î³ÎèCV¦«›Ôã£ô”Kåml½Ðe Öx;½¬Yî‹÷m1¹ùèœ: yBÍÐ'2‚5¼žý|·bþã’¾>’!²¿ágIw–Dá$ÿÿþõÌf69Ï,ídNþë�)†çœm®´ö7ÎË£Qm”‚Vº`“"QýÚØ/ˆ@ À¹z—ß/]˜`¬<šåJd˜ +ã®NÓ1*Ÿ™ã:\`Jäæ!·×8¬Ûˆ­K3¹KØ;­6R Ñï|*ý¤Ý÷Àò¦�Üämï(v+ã……ö :xÐ�ª:tG[£�34p»qXí·  Ÿ·‚Ãǥ؄cÒ² ƒÚ*†â\¸·&Pc,ƒ ¿óæ�íÜ›Á¸Ë±Ðj¸Â*õÇÃ=�f«ùp|». EÓ:ùt@IkƺúTìÞde�ŸÂÆ“£ +x_ W(`õ¡°2Š 2¤`D�†ß|òM½f2¢ß^Ný “°¸Ìdo %]ö�qßw S]r²%QGðä?vo«âÏÇMh]úPS‘Sìp.×?ê|TkÞ +>}TLȦ¹ IMY�Óì”�ÉCéJzmÖ•k¿Nk×Ò¸ÂnUÂË^s.Ïs"„|.Q­8Ž‘sÖä‰6©Ü§Ö*š—#’4—õÒgùWÊJºËÕ‹¹¡É“ÇÕ�ÝJØá£*÷”`\Í¤Ž„ÝŒ’Î=¡ >87‚ú0®5Ï8·}1ÜtØqB×õ!‘Å&`ávæ\N˜ò‚há�âv@7™að 9Ä·ü 㜨wùt2cfYÒYc5›ß™Ü9f”2;špß@yÀaCÎï€gc3£mpÿwÌW'l¬j92À/ˆCYš�oÆÁYǙښnT 4†ÎÝÕ ª&Ûܵ“‚gêˆF uyÓF ×e| ÌT~ã1Y)c§À!m0…T ‚¸>Kë�*×EÿÁ^Ó.5þÕåFä¶s#éoqùŸ‘oTôÀFšZÜÊpBÕ¦Ó šâfŠš”ÈÄ£˜!83u>”¡£Sú¶ÝÄœ©MæYM*+õ2ÖÄk_•cÌzl‘têå +8aP¾mÍá} ù§ªË…¤ÑÇ!‹�~!ÑǾùHÿCN :›lƒólñu¾dâÕ_ÌpZ£­&p>èˆòR]´‡‰ñq]'D›3„f~]æ‘*äVU<°sO Ëæ‹Ï[�PtÀé ‚ý½XI|;E>¤¶›,�í”KmRÌŸ€Tò�fhéãØ´ß!è��¨è4+ìüíä¿—uÒiÐßùÂL§¡™dç 6ÞÉ ]ͯ`šÖu[0/U—Òæ¢»¢g=#Š'’kSËöDïø§O›G`wS—Êa7!jDYì%R^Ò}à„?‘RxŒ*ÙYÔÖµVù"Ù*äJ]Ë‹Û dó6@yÝqïšµÑ#`¼w³e¾„¤/g?*kÖµEÜßWÐWàòÇ-ÐX&Êr,ì:E:ˆ•¹äˆÒï‰÷M íöì5Ì W"P1yá²|܆i)˜~Ê'æºDqn¾Sê©wÂüMñææI5ÍBô©XàcŠ\™<ýAÀWù�üÛŽ[±_PLîºxp6b"žŠ,ùi,ø“`À�­¸>š'�€ÂXç÷Ð ÍðÊ›Š'ÝÞÌš>9[±´Û-ž»V9Å’ù3£'Ùå†7j¡oSQÒÉ|{ÒštÒß‹¶Í’MG§ä^t4[ýz×÷�ÐRÄ èt7ò«ã¦ØÎ<Óiœ^Í;$ë$P8#4Û]¢&1L&8¼Mq +ÐT¸%E•Ïúór&;‡ÞÀ躽ÆÄ`UIJN–8c›ZÍqƒÂšïéôi°#ÖöqwçÅÅp;�_FVD¿EÕ�: w$m\AâiQ�ö�Â_Ìz 0xšõ�u¿S‰°Ó.ìc°ê^÷Õ4;‚g7d–,�”°”†™“W¶í›=Ч‹ÇÍ`:ž‡”J¾$º¯Êæ"eŸ.bndË ;Á½”dA«u̺Àè6ì¡¥™q÷þ]\—âx`Bf:¶½iDÓÕœ+Í8‚°ÈX$ý®w®½Ã eêœ%#µ8CHŸ¢e:ì*ôÅUæBZBÇèì g^ò¦ç„ôQŽý•Ø`ç7ÙÁ‹™FªXÕôŬ†î„ÙjßFsŽçèÆ�(wñ˜K%n”u/¿Ðjë—;—of;ß!p^‹å~Ê€1 (ìÐ'µÛÒÊ�ó•yß"ïŽ~#o§æŒŽŸ�Ntu>œÈ +ÝD±h7 ûäå%rcžè[rPL¥®fêtúKŽoÒV¯²ó*t§UNŠiþJáN ’yïz=È0F×—– ÐŒINÐŽÚ 8Øp†ü³¥Ÿd–ßí' tIëp|ÝŽù…6ºçG'‡¥,¤B~3ïräy ò…ñª”pYñËuPó†ÂŠT¥<ôÏ�€ë·ž™0ƒ4’ ‹=cXÑÜx/˜åcŸU𔹻ÈýQÅ}ŽzóQÔâxèm¨fxж‹Ù +AÄ.  ùdKðd—t/6RM†kÉâÒ”1ët­þUŸ‡Ô��+55ý¬Ð´�~“¸;¿È6~‚PöÎõÖõk4IÙ¾àeu°½ª>@aq²nërOEÉ2V +Z�…îÐf³ËëÄ”USêê²p¯ñ)óÀ2žÏÍ! ZDðsÄkRNG“\á‡i‘®ùÄPâ¨q/ {0ÉζÚÑ\7ÑGKí–w¨ñÿØ/ƒ$Éq~¥>Ðe$‚ä{ÖöÖsÙÿf*«çc6—n¡¤”HxŒm7BU™ä1Wrk\MLÒ1¦ —Y´Ø_/ ?Sm9Û ¥:]²Ý›’t¯MÈjnüƒ<'”«x¶~c +¸_t(˜U\Nó eÌPˆ™&88!]õU®Ï€ò\p˜®¹èÚÂO +’»€S˜d¯àžô+ì]ôÉô�¹ôk\ú ælK-ÍOýPÍ'|FSA²kî%4Úe#hÎYs Å�ÐìÔ5ï7êLjþ"ªx£*�M®%~::=œÆÔà){”êkDN„­]Ęï—? Bý@¯7Ðõ-DE)†¼cHvN„ÀÛ¯� ?ÍÕ2CæjN²AC¶$}â ›¹O£.°ÅyÞ@Î�0Õ†¥| +íY†’gn —–��€1Z”¾2³Q�ÐŒö-Üè‡í¹Y3è#º³fÐBYœ�à·I^\•.Ö‹åQ;�ôf~±îM*û¦VçÞ²¢¥€˜ì_:šß,è5ŽLeBÃÂck2C“•q²W ¦ÁœeÖXµñq†ƒô­ç¼¥!˜«%'L†t²¹�Á'%6o ~…|K ²„Ðu‚>n"E}fbP +%N17+§H›é:‘‚M À\˜4£8G�­¶ïŠÁY…}�Æ¢X`îGIÇǽ‘ÝŽC»  ×£ÊQSÇx\­Ëesñ�õ‚¨DRD .Š?„#ó´Ø;˜åu”uÍnØpv9L´ñ?) –>ueæ”Ýÿeã÷–úîõQü€ã\»Ž» µu=¢CH è÷;ê„ �õ%–b9—%=!Is9ç áj³AþbqØ •Ñ`gXH7­Ñð{¡‹,k˜ßИ&‡Z¥š&¥ 4‚ƒ~Î6;9ÒÇXE\OèÍßžj/�ˆYÉ)Õå,¹b¶N×8)KÀ(Ú›õ³7g)Ä>„¿ÓYà½�ƪÄ��ªf§ÜÍÉ'£1Â+#©ÊŸggÞ<ôNF¾ÛK‡¬ÙÏSnÄ6äß�ëë’S^:YHð`ë:†!Nú!Ê4ž6ö‹“Aåá?‚¯úSb�1íBIü¹�¥š“ ×â 0C¾�é3&5×»qg냿8âãéU^òƒà¤Nš¯ëíÂSEAyÝD xÕ·lÜ2½m™8‰÷¦Üœ=«øì©èééÔ€v´»&6îkTVŒ6S#r&ƒU^�+EåB%Ck½÷I4ä…¸ÜÒÝÖ¹É<úne�lÛe=”À’­åþE‹QFŠ^‰‚ÀšýµK_™Ÿ=?â^=ÄÝ.Ýv ….)3ÿ[%Û ~8‡™ùý9¸Ãîà€¥Y‰ ”þž.y¦l×F°¬ð3xoÊÞnÎG?bц!ëVH‡ÃÛ”(Nض}S æO«ÐùµÕ‰­VÝÓ{®ÓùΓÙeJ{¸¤´^|w:@-ÔvkàWÛT€»sêô;±PÕaÉ`Bæ�.¯„›.~ÿ‘È“§„uΞrÆGyZ�¬ÞP¾��×â¶üƽ®‰?¨Í]•ب!®Ç6ïÈŒ4šÖ!'9ldlU“ãÞ”—˜ƈ<šÁa°®éȦ%‚•ÍkbI»yíœ@ô¹¾(>ô¶™OLƒ¸ìñ žŽL^§àä£ ?Ø›·!FzdÓ&ÆcÑŸa!†'–æŒåG> Ñú¢œ×Uè�Ñi\ñÎ ZÃÀõYC+!3[PôŒÈ,0‡ RðŸâ)Eb­Ì’ìÃï¬qÚî@ë(5ýø.íÎ¡Þ î›ÄÅtlòä«€³Â Í „Oóïu/Çwi¥‚Nˆ¼!ò·ƒÿ].e¶wºfÃD®OPc%Lá_i  L‡ÒRšˆ°!ç?ñ²�1­ÿÄŸ,È*öEcÅRbÔ¹+”»îÚÓnÚ—±QÅÅeÂQ¾áš4œ�¹…|eåò›½2bÌ/÷;šãø”�ð)›Äé~bë…t¢~!²á…ÉB±7?½Ù)÷Ýúƒ«9DT¹eLvlåX÷–£§L6wN� p²:'¸~×!LÉ»›¶G¶E0ÎpL¼c£Î•L4ß�vܯ7\z…Ò¸&{YØÛôœ,Ÿ[ýUy|ãp¶á ‹Î¨0œ37±Ð+…ÀûLÏщƒÒåñÉœÅ^*‚ÃÊýˆ±rÍ>›�a\)[4¡™ïŽ j‡z$ƒÙ¾)ªÎ1/Uõùf­ØÅ_ùËIÌêøÉdê ù7·r*ÆÞCû°[‰ê*{£·EìÁžaª†•…ÛjèÅ,AYå›|1ß�δÂAùߪƒz¡Ð·Þ×7yR]AµYšiŠ%˜®’}tÜâœJ§pÃTÐw‰*-໣͹Ìÿ(‘? ›…ž@ý¯×ýÇxÝ=0Û37+óµ·¿O­�Q¹“íú%RÛó*‹.÷½2ç3@ƒñsU�Ëö7¤e=ëƒ#"+pìOh%îš;SÁÏpˆ²ÕªL¶†ÒQ'D«fcñ›È³Nª¬枪k›²‹”º�’û �­ljœsaì˜ó¾>B^FIÊzù¼œòàsŠ�{Ç“A�ô«!¥žx¸7IùÔj: µ3g +Ê�ùaPðMvh¨rN>°EÅ1iÛ:´¼sÀ´{ÁV'3Ä(µ×o†¶ûzc~Ž‹Õ÷2­s¿Ö…y.5ÓzÞ;É´F¼¶p`7™|_ùy$î#£�TœÁ�ú8½�ƒýqê(‰uK;_·Z~”ÒG�©ö4*>|cƒ¹ü‹†Á§ÂÜ#;YžÅáPa…åp«RÓôpR.ú(äi2ÓAB@烦ûŒ³g°ÏæôU'fü{ýÀiwøª�óM:A–7Ÿf¨=ºÅ5¼ãTãá•m¿ëÆw=(A›§½8;êp�üÎ<ì<Üt‰ ÐðŸüÐÂá¬ë)ʨ…"6ue7¾ë š®±Yˆ±SáWë/–ÇÌlæÄ šÉÅØX¶>†åŽMÊ{€ç Jæ°Çœåx¢½Ê, äið?ø=æ'ó¨ëÊœ‚MbË_°3Tƒï³PsàÁü–«ù0Ñ$„¤Ib‡ Eâ´ñÚSm—Å�_\iùÞ•’£;ž…4Èœ·Î€VýUƒúsT›#Eù›X0`™‰·èg¦‰ ‹ïaÛŠ{}µ«cðÑ\ÂÜoŠgŽžjTFb]öÕfo�Ih¢2âmVO5çJ° ‹k ÀºÒt«€È¤B†´Ù÷Ub�€\Î/d� O�Xò %«»vÕÍ’ÉxæV!ÉŠ(!¶?t–l\ü´ªj+<Ñ#Xz’¡Åwñª fþøC¯ùóÚ5k±#ìÒ©AÛ´óWÃj'kQæà3›¡ñ¬s $óê<Í’DcSòä”Ê^*xÑ~ðôCî(ÿû{ßh+r¥&„³×Ærou™ MuasyZ•눦øÖu.å˜æïZÉ?ó—©¥P�üu˜<¾­Hà”kçsÔ�œØ¸!%­ßÅÿÙ/{ì:rç^…6puHð=s^&'oÿÁ ª@6¯­pB%6yÕÝ$Aà«Â¦¡… ÉáÄ_k s˜ <Ú>ÕÏÊ÷‰ôe�$ݶƒ$õ.Oáßm¯£µ>½l.ŠnfÒïMeiô5_\ÊtHLqœz½™tðüËxjòÐ<ÎRø«4§ìÑŸ›¢î\Œ_AE3­ñAúLf5 Qø1²S@IÛgXªþ�ÜVòæ3fô +jå IÝ3?ˆŒÓ¡§9�ùá<Ö1ùÓ'–äÉë¦úÇ&þØÄ›øclânKEu;b«‹-ÕƒX�¦¾4¿¿ "Ð’ 1늴WajÐB CÚ´S�¬óóõŒgë ‘;ªÜu8YÍÌO™I’6[æ{^}Ð0ƒÙV7+Ä|+ÂPX?Âe²E�,ŠÔ™²<…‘AºÅ±�h5LÇðǸEüõÀ@eÀ;¦‚Mžl‹¬`ãœb1Ôºé<’Xý!3?öº¦ç{êb5O­´´ dbÝûóð-qß“×ãZyÛˆµoD7»Ä5dP>ž‚á+ñÔÚtFù€î b?½ÌO/óŸö2 nÀ/º—üûÜ•¶Ñw�g6VÿûDÙüLÒóÐ5ô€ž�>ÃôMò›¿àâë꘿qÁM.x R”îo*r&£È`| „®S¹ AÎ4K1üú�'ªü+F¶Ñ(Á@ÒÒŠk¢*ÿþe¡Î¨ù­ÎЧ­Î¨@©óäÝuF=]ê yÔ$ÔÙ”û[�Ý” ê�:§vÉsj·>«l÷sò"³°ô­¥–±}l/5©»9°>wOZÖŠéË‘Z§VhGÑu»'4G¤Ò8…¯.‹vŠwò�·Ç‰—PR ì„fÈ p?ᥚ&É?ÚeúóöF1�ñbÏÕ(Ë® žþ™¤íè…ÄΡ]ˆÌTo1}ç€>÷+“.…ràç*£Ïoº1Hè æòCF4«ƒY„,Ƽ¹êó°2'éq)¯óã«D-×qyh…(<ôŒŽãñÐyïxèÚæ›‡®ãí¡-n-^PžÞº´ÛD—öæ¢K;6:Òê±Ñön¢Ñ¯<&º°¹Ø.:oí =Úfytk·ƒÆvÂBg®K9 +÷üTZ†?ö2M¸ Ï‚KQ—¯MH|>«SãZ�ÔÊÆ¿¬ •'«žý^ÚR9¤Ccàlõ `ïžó¶†ï¤Eò ‘b2á,«›†»ããDtcé3žijöðu:0| Ë!yr?l˜Ôêq£òÚ£ŽÀ“Òãp¨Éd,>œGë¹J0!‰ú„¬÷S�õç…—0v¾æ×ÒÆYê¥ö vÑ´ölêxˆÝ¿ÞöºNüB$fDâuEèõº×ÓxE±~Ý—ðºo'v k‹ííÝ{çUDZ”qæ�eN„j+…W‡p¡®kò‚1ýB.¼ ]ðǤ$¡�‚'bIƒ„v wÈ—W_¼4Ü“Ÿ¥™¡/ Ï•ÔßÊÖ«c“9Y K¥‹§Ž†05¶ÔÖèÅ’HFõJ(ˆ9¸ì�1IÁuj˜Z?m¦UóSU¼¬jMÀS=×ЖÈðg;V]R„*I<üjZW@˜zê&±W®Ý$ U7 ùó|ØÌô|<@­ÄÒæ­1¯O/9?6¢f�}Š:oxš +7æS£ À]úš nÍ“89ñ�û™ŽÅä,ýT# TÓ¨‰z@5çU±ò€ŠY~PÕíAUkª¬Ü°r³q`å>äÐ +ÞìÁ•ϯü�Ã++±Z»ˆÕí"–°™Å=fùG³pΛYòÃ,�Ëw̺‘õ<�t. ëY eïÍß…¬{‡¯·íƒ%­ßÈzýºÃ4�›Zã[ãæÖ ûëýFbµ‡\ý&×uÁû‡\')âè7¹N*)`7¸Ðz&¹�Ö_“‹_˜~Á°~Y#˜*1¶›H4¨0÷‡b}´‡czesÌÞ9ýcpŒ�Óñ:þMÈå2Y“2zÑ ²:n’Õq£ ³Ã2Àêa?yà KÞ0{CÙ;ÉnŽ!Ç�w“,Í›dÈŠM2„õb¤nÓLÀ šµg´gÙƒ³Ñ. í\ÙD+I÷ÓVgþ±ÝóÔûÿÿüÏ%ùþ}7Ý_HËÕ£ßkxœzªÏ&|ž·Øä™Ÿcì_öA÷v öW¨b'–±Ëë÷Û€³~äª�‚áLÞê•ÙµòÊòÿí“öÀ& õ´I‚P{•Iê¹ +³0Ä�B‹‚^¬'Ö}v—±ÔEyãÃE& )*�Œäª +Zæ¾By:·‹÷p†æ‹ö’Ç3AU½Ùìü»BʬgfXVømO<ÑlÚ7óŒq¼ù ��˜tÚ»—´žÝÞB$ˆuPÅ,‰t†Å|*z�ÝÚõî¨Jäáu¼¤ 9trô¥$¥,�þ{™Ü¨Î_ií_Ô•ð~î)~1„ø�'\‘y–�ùÂï™ì3ÒÒÚ°zÖß¿Œÿ²ÝWÐù6‘ן¤ºØ�:IÜBçàדطHáMè«ú0kPdÎÀ}J`‡ Ï…–ßq–˜*Éw&½@bjí犄èŽb2�1ÄÅÅ�’–9†båÀúÜn:¨é×/Ú)^K¬nK3rŒmPy®KN-Õ-¦ƒ ¹¦õ{mï‡`ÇĨj˜tj¸ä¾¨x«ÌEHqc­ø «æ�…øžñƒ²_ˆp£ø7Ùʤ|öjê`“îÛ£Õ2†òrÕt +�8¬sÍèª}ìäΕHœü¦ÛGGOU)øl d»0¯É:˜E$¡�|î>±7)yÚÈ#£G¼.ƒDÆ>¦aDˆÂSø4,C¯tûx¶½}˜¿DøjĘ÷ž ™0Å ÊS^ò”i*¤ãÌãÌ"×ö´1åvZf1¿Ìb?ª²ûÉ‘32md,¶ Vã9ø±“µ6QUôˆM-iøÇÂ턹”'B5ª6ÿ‚ÊœÐ=—$O¹Û4¿�"2ùú4^•J³™$~\ Â6Ô–oʯ�ÄÔýMÅVµ 3K—Ÿ=ûû†WciPØz"‘Ÿ-•j){2·.ÝAé²¥ Sf ,nody¬T@ƒn6ñÉÊû÷` |�ó¡ÃŒ¢ÚÀ®jD¯3C½Z­*sT•ܨO—§mR˜`»ˆÛœòžñ2Æù››\ÈeîJ»–¾'�‚ +~ÇÌܼ•©F:†|oõh(„¹ê%Éa&Í-9\hñ&$9Xf…a—&ê³ð5Ï)b©?WÃ/fB²Ø/Án‘bªñ…ä×pª öDøbŠLþgªÏŠè§5Þüä¢+Q°�‡¢ß«vVe:P5ò"Œ¥ït¤ž*�ÝÅdà™1PgŠ|ÂL1QC†*ÛO$bcqEw6"ê5ÜB;ô‘º�³°BB × FµÓ»ávÿ�…×�Æ2¯ I“hb8ÌÚ©&…·Àw*´´D°U!Æ”P0hÞ4^ÏðÚ¬R·áåÆÃ…�u•µhª§Hc¸$‚Œ ;>Æ:S8FePt1Ñ/Š�ø:Cü„ÁªuɨØ^Šþu—¢]ûHÛÁÂNÊb‰nì_3£$0ÂŒ3© +=I.X¾ïb,´×/H-ÔÅn±t ¼³ßè,Êû˜ˆRÙi´ÆV8œ0¬|hO–˜ +DŒ y0¼æ’µØA³ý†ÎýÄ>;·mª£*-ôA͇ˆ´«ÅqìLêæðù:GJ +sª,ZgûcWPìÆ$ÁíIÉwPSB³+0{W›%!cùÁ]“×àÚL Èr&† z—*ˆÉª¥�Â$ÂÛ¢�M}y+0:К–Ý+à·”%`ùA‹ ãp2÷a\‹ C—TðHnEñÊ©¼8ÞÓ�¡ÉþÁg§lK…¦0R©�[œ“jQ}–=G�ü¯T˜ÍJ$¥°YûêÇs•Àû¾Â¾n÷yf!PàjÆ õ^J3wÍÊš®™�Hû딼R^ÕcéÊR#}\*^÷—ú™2ìF™°ÔÔ5™4‰Â»_™Å’…¥.Í„dQ…:Ó9£º]gø›|’%¯µ^p ­.Aõ~ E �Ü‚d­CCÍ .LŠ›xÌf¥z)=–O阉S¨€HC¦Ó6BÕþ^†§ n¹î'œñ{×5®ÃK{ÔKPÁ® +.qµ#"•Þ.*{ry-½�àÉ0蜼èú-ŸH—æÓåìÔê"õ­ ¥!7~Ÿ¢ûïšsŽÉŽNÝŸšf‚¢ììÏÒ"]¢°üµŽÆ¦àM>ÛlkzÑ)´Gy†bT˜¼ +Yþ¶î–®¥D] wñ¶‚]o3,Z‰Ó�1õ©šjí–zoÊ£8æËm�â_×)©«�!¨.ºî4híì*~!þ‘§Ø`BD¦‰óI! RoŸ‡Ž6žuÕ±Nâ××¢é@Sß[ôÛ�¬ïU4W1yNDäñ‘ ÑÙ\0Ã!�'<Îd5Áš?[sâìÕ–ON�¢[ûr2¤l ´x™]x‘íd/‘Á¼bйž�M s‰jX×øµ’u/Å£w}kª&Ô™c—дG+üJ6ÖéâÖ¹nKsQq–8â1¡ÉL°Å½®¬Fàv/Œ#ÿÙ4mÙ,“fæ:c6zCwñ=x–®Š¤e4‘²©72­o75CÒ¾®MÉÊÚšâ,S©Ûª“:Q°¨ßßW†Q‡ÃNa鑾&¶ ¹öý&ušs’MKÓÓ5²Îä×[ƒj’´ÁðmDöMþ|n"ª š¹˜Cb'ä¾]k ~%¹‡šÎs}ˆ! ÙX�êU‹‰nÛª¡VúÍ…«ÜeV§8¦:æºÆn+Q=p)Çs~;s:´Ë2«Æ‹¡lþá‚÷dñöÈ4`w +O§ÐUß[®é M’X¢\š˜^ç39X�¥GÂIx‰'d.¦žŒcXr@×ûê°½‹GœCkIV”eRÑ‘%~\1sä¢CwÞ°«�ªx–4óï¿° mïÁ‹ï÷^pó#û*v<ßëŠßøÅEÚçv¢ýÖž˜ß_(sö¡¼�”/ä³h#éX͉@ «(ÛZ’�õ&/÷:qá[¯–8÷ë kÛu"µ`Ûðï/-Éšxõ#埲lÌOZòëf¼?‘‰ñRa�Ò1ÞÅå§ö×¾×÷×ñë…ûÀËOW…ëÉÒð:ús(H¤Þ:‚C«ö„ÿ�úC£þШÿK£fõÔ ߯šáTƒÆÚÄHÁ™¥Ç¹N®Ç!­¥¾”ÞØ|jðLt=1rNÜ¢Ëô-Žúß|t’æ5xž!½ÕÕi‡™R‘¾˜Z“®æI5’.RJFòñM­Ñ¿Š@Ï-Ì:óÓõ"~kˆˆÁjÓ"»øì.�šØ“j­- +B™ìÏkÓš6ØÇÝd’”îkWøùMÜô¼¾g@ZæO¦~XÆc5• ù”›|Ê›¢Øœ¹|fdnu£¸ò[Š5¹4`i·ÜHÑO/‘Ô%¤W[\=).›› ±C#W‡/&ó5r,`6BQÛi=�*ÀicЩnš/l×Z dñ|™g¨X81ÄÆ‡ÐQ¼•Iɼ‘h.=¢'ð]‰F*ØLJ‰à’Ù ®­‹h'YÐ]&~@èŠö^4¾m]ÏŠ_xIÓó8ŠÎÛ”u¸~1¦cná+™UÂç­SqªJS¶Ð¢©á~F�ƒÌ&çàÞØŸf°¡Ø~|+öUæ\4ŠÀ¯‰&˜€Ù³¢kß”OÎ�@TëÊV{ˆ{ÂÛA1Ú>ëÂë¹ý +Bëf¯oaù­Ó¥¤yºbVÆL=¡ +Ó�L¿œ*),ϲ$´ÁY;#Ët¤lÊ/C®IRšõ™B\B™r×̵h¥AÉc—”�ÿ¬H™\ FÕ#‘aÎ{ZOh +Nr­€eÍ�ï€ÁêÝ%¸v™ÉŒƒ�49™ø ¨0Ý~}KƒÞKÞƒÔK‰ 31:ÕGê…@Iˆ ZÂzœƒ´õ�šÿ�‰Îœ2ªÓ‚ÕNw®•éKàlŠ?#¸^Bˆ˜Üu +׊{Wª«ò§j>×1“vQê?( …\ÈœßÚ½·�¥Êg dwH ò}uò@¡ºuž)SxÕ\\/£BÓs†J«i2OhÂÚæ¨Ë]c÷ì7ŒaWu±ß,žqÀúâ6 ;Qš]VŠr˜�ßÉÏXæ\{—‡þ!¼\’¬Im(<÷*¼�ê@ ¬Çá<êý¬ó‰Ì[õw»{tQ\2ô8�µ‹é|)y«E1�.²ö»¶‡¥€I�i Ù(©äßìò¡ô=ô¯óM{éá«À¢Dd’Û�u.ÝÉž¯Ì¼n±/áÛ"^9Î_´’†ì\û‚Vʇĉ¤…Z¡O°¶+êŸ(»Z/Ù†Ø5SÓ«ÄÊã}‰_ì�Ö°¢–xEƒ¾t‚8;ç›A$I6% ]W§†ƒ‚$¶Î:è‡i — ¦.—°Ð]P¿Û…o°`è(�êi>^ +;¯Õ%£ ÷¯¢Þïúi~Ö˜°'’žÐÈÊ,tÚz5y¹yÝ…;"uéT ߦ']kh�g©!´^…½º(qúíÃ6$E‡Qýî÷·_C¤*¥B5¶þ±¬?z.¶¾UiG}®œH¢ÉU•kÈm9s7ªŒˆ§ +D_hxý,”¹Þß8(Ÿª±ù´êÔöÍóÉæÐ='³\¶W%žŸ +f©T G èÞóž¨ï’JÉW æR8ä8}];UQ ¹œ‰ç_µäâÉ +‘…|ï¸r$Ÿ°™ëµ÷@7Êv„|?ql¦c– òàµJ‡Êyi%D7G¨œŸÍŒðÉÄopHW“`‘lðJËÚ%sH«ÓPæä~UeËc*÷‹ƒJJ¨²“i>U» šêÆÙ[A˜1U›¼í N’�ì¥%a9rÎ2è _ynÎ$ Ï®S 4zÉ01–«¼W¢Â'ÚÈ´ qúPMÇTãÌVÕnuîu�lÏÁÇõuðŽò®¨£ß%ß49Žü |DÎÇÖ•ä¸r<ȲµÛ® ù¨5ΫØ$¤ŸusÿKÅ6ú˜fϹúéûÌ\õ� ½àÓ…ò—®ïa×|¯á äYà÷ì@G”·´…o-ÏÉ1‡½kMP9P‰×ÓJJ5—ÚHO9©uí^ ÊšõýhzfIYe# +^êûH›)ž×¬èU3´Ó�&€ßp�a[úÄ,lÄ'ÇöuÁȶQ#Ô©‡žQoå÷¼6ž‚¾ ÛÒÆkg;Zû!%o5Øbjí¥$Xþ¢¢F +ôHÎݘI! ¦J=÷~02Û^ù÷Ó!Çw|ÜYž«Tö=ñ𨽳w¡µ †.y �Ù¸ÿÌo£ßlö‹ì‡ÄÉ\ÀtJõÚwmwÚž(Š;[Yµ ÊdZç}]„+ð…ý쎢|6nŽvfv`2”¤lÇQ꣒””<¯:ZŽ�âÔCÛ‚$¶Î:è‡i‹ñUS×øJÃÑZn`¨8À2ËõÀ®žæãgßÎNˆ*ÐòŽÛÛïúi~֠㉯ a“E[˘NÀ †O"«›= ê‰FG×Z÷h<÷«ÉõÄöÒ¼‚�é·[2@â³Qýž¹™O¿†ŒßЫܷþ±R¹Y•­ïFUFïç „aÃêÕ CF]Fñ—?B;!pßÞu_° 꽋íh=á ­±7î7Òxh9ËÕ <ÜÉRÖ8¬a €¾pY6©é¸>U(ƒv,TÀÁ�s—M²xºÕGîN`ô¬ +°"¥ðTùlį¡.dUÛÕßÈ PEþ­”@%Ýg1jÎ|Ím”¬/D+�²+;~ª€V0ððã_Êi CP•\*ñ*oÙ@áßÿ�›ÆpZú/¶|£ÏóFÎ�v' ®ož2šטÌ®®q¥ÝŽfÔu£(à@޲Þ™J²r€õV¶áh:ïÆ}lÔF…â@D·žšðò}cPÙ£¦k‰!™3'ò[–'E‡]±?‡ä”`^wÊöJqRŠÚì T¶9Úz¡´Æ‚‚½89BªKÑ™à”lCëq]ÈBÁ«„¨!'Äe¥p5–™ô hRMÖm�»ÎNERU”‰HÐe|Ï¿†Ùá«ZsþX'6l M ƒ­Éó�¦lœÀ�‰*�ßšl!·˜p£X'y‰¥Û4‡µŒ›U7[{‚ë`Ïç?Ø|¨ïj`fú‚K4¤Wµ½ŒcâN£ŠmàÎÜ�ßPõ_Z¡j?O�mÞ­6*HÝÿ~ÂQN­ Höðš© ý¼ìÓñ3§È»3Ð@žºÑÀ¿¢èbyƒ~ÜËUi”K' «D Ûï?2Zš Îv½Ú½p¡�ƒsè SДè/0Öm4Ç8TÓ±{×·D :½Z52 ¼€¥.ßpxcé%"‚üì•v( º®Ãà ’Hh’K É èà­À<[ªý¹}sYάÏߨ7ÿz÷†*~¢…%,èŸd�É!�>j¸¯[ºfg8Gƒì[¿kef¿Q²z-5U2f9Ít€£Õ6fÌùµŽÁÉu,v•ÝYIb2{ ih¾Eæ¢av«ÙÞŠÝ7Ф¬ÂAÂì»Ö.I´ŠúÿØ/—\ÉrˆÎ{µ�4ô¡~ë1ð <ñþæ R7ßË.´ÇjRO¬Ô•(~"‚J<çB{FŒf‰÷¶ÁçfJ˜ð£©P4tËrYXÍ�"ºêy>œõ÷Å`Òò2ùU�·´ÃbõP)J/A?„ÊÐYRƒÉZ&ž ãH_Éé*ÆO4�êk�‡•q@:=—�£'­Ð›|q¤ñµå8]5�:³›kƾ5Â(Ñ.(…#A¿to·º%2ûiQü_¦æðz¨Aþ¤H*Ae^ši(K»½+ NúzÌŽ¿dgžøeà–²q¼âî¸Ý³Ï<Á’Å…|g‚• u§œÈã·è¬ftzu¢,˜­¶õmHŒ†– ðtvÁ'eýäè9#SÀ@I;|ˆÛ�D­YT&ºå iªª¹Ú{EP~\ˆbkׇxµˆÇ›P+®u©ZO:ƒ´âª×·†TÜÒU%ÿý”š&ôSGî—6¶ç(�~Ý[à€z¯wã,{ér)á"@å‹¢ŠŽ5ï(ú‹‚hRòÒO«ò‹„*Hª�™õª©1¥lìPŸLzäfsïŒÌ€�\‡öÃz�£—4Á¬ÊKþ +ù|Ž;k×l‰]ªr3ÖÃzˆƒXó m–íÁr›1Ž $ÂñTF; +X5@�ÃÍsäZq׉ª¢�:I`׋–ú®Kî‚§ @ÚFwÝ{¨S,Bx"}µÏO3&]åVÓIXU$ T¡Ùw ]@;=„´X0ª÷|ôŸ6Ö®ßÑ”¥²#:Œ¦$° ¼ü[ûÿE§Õîí1óÀyYàͱz-Úç±\(?�~^(ʾE D›ö�˜QMÆ<Ò�G—EJ4·lo.~ëGîÞ$ùû5¤�K}ÿ¤c¿‘e:"ôk¡„ý‚­1eéĥؑg#jž–Ï{´%»ªñë™a mÚc_vk€ÖäyXa{¥{„Fð Òw¬¼d_X” mD™ƒw>—L°\i÷#0PÞ‹p—Z«(Ò>¿Á— ¼̸£•Úã\Cå¼Ûû7ÆON;ºw yƒ]GI¼iëJ9ÏlýœyÜË! #CíkF»æHü/­LGgKèYõZúªô«�zÈ/OgWEvRÖOêÇ ¢Ì6Ñ^9e%?ÁE1åÞÐÐ+iTsµwèYòaRmlíbò8Äá´ED8Æáx®u¾‘þÅ!à)W�z¤4qKþ¡ ‘Â-ëÈý"8{ŽB]­{ 2¢Þëi�e�g(ŽÞÒi7Z­ùš4î3“÷çWŠJxã•—E(Ó�ˆqºxßîGfòa_„] õÈp%a·V»ö+t(|)A2Á¹Ž¬;déG +¸Ñ-ý ¹6§Šâh㮤°pÁ5˜Š´Óû¬ÿÈ�uÂèÚaÇ>.óìX(Ê=4Míëãa„D6ÍM¦§ó6çü*ÍÍÃà"Ð(aù7ý~Cïõç8¸Äò¦® *\pï$€Â;w|¤ßˆ½|O,ïK¯E´?‚ݸÅÒ¸:ƒ^ÝD„¿™¤xÈÍß·ì~ò¶5{ý5J ˆ©í»1õŒ©AòZhÉåÅ.-îZ‚4GàJ˜O‹gØÒL’ �êEúØ!5ÖœöürbI)/n— ’W¦ñѰè1ÿ} È|íèk1CXSYú‰Uqy©°Z!ËËÝ79<æßKk["^"°©þ�kv1Õ„”/�KžŒÍïmƒÏͤXØ/âr§vŽ­Dq¡Ñ܉Ü.š]Y»h<Ÿ(þ‘Çîàßþ–_¿åW„'Ó'•1Ü¥³¿r5çìA ^Y¶aƒéâ"åÃD[Ñí…ímà +R«ë¹T]ÅŒAש/Ç !¤,"ùIVÁ-/µ¹iàóÝóZ]º¦«ge[tõa@Û~]ÊÞÐ|5øï2Øäp¼C +Aï½�¶Òv®c¢aÖú½šT�}±–Â̈­©ý?¢å�‰¯Ã)QÈPäæ]«™·=¿4“ZU!Sxj dspÖübVM“!º©æ®²%�K— +SDîUa.ºÇᾬñ¥,`b"Â?q4m#ËžÑz‚î%зÿë5Y¥ßHé«§kG¹yÁv´U¿í£¬�Çx{’ý�5‹©ÊùÊé”F�§«�ܶê·Dÿíð[7é`�¤JXÎ6Dñκ֎ÒðZ—k€ƒŸ¤yÁM¢Yo5êw@;9\{çÞuÉ­¬„ŸQîï*îUׇµÐãƒÂ‘ð tì`Hr¶“ýoçãx=¸cÇ+Ç>VðŶ‚ïh]hÌÉ[y1*fÄ-‘R'-Æš”÷ÑæºPÝ�4o¹=ëÔÚ¿Jó¼¥Kõj Š©Ÿ=] …DáêK ÛèËq¦º6 sáÑXƒ±ÿ:Úêô¸a© dã&ªÊëÕYRØ;œ,(²Â>q諭›¼=ÑqóH”àÌ`(�óAR%„#Ä}£@²¶êCë‘åP‡/¤]x’¹^g*\È Ün³{¥¦­#…½CßÔÁ;³„�KŒƒ£B�½³ÂÐ̹…ÍeÔoSÁ›RxB}]d®g�/9¨4 �>I=!®3zO0enPãA…ò¯ç*¿,'¿,Ï-¨è�-¿t§|=žyÝbòÓ$©K�|Isÿž‘`³ÁD™J“ + pš"¥‹„ÙCG°Î§Û®5&o¥b /.O7½]M§À +|ÃhU½à]Q…6�JŒ” +g +Š’‰R…YÄDãØëª×AL…õ zž´¯ŠÚí;áÅp´Â V,r`UÆÒ뻦9Üj3®U$)ºÿ¨Ëõ¬oñ³¯%n•&WÊz&�l?mß‚mÊ« ê‹DE{�òæY*­çBmÎ"ØèíÔaª’e5“ýÒ$tO½i:±6ÙXz’#ÿh›±tîpfÍtª<�ê(¬Yá'k™jþ²úÝ€ã:µÛÚ„]2¹3f3>¤5“kkÇR{hɤ¡YgB ŠÍŽTºVæI¼p.‹"͈MÆ· íd¤JåF“¾‹"Y<Õ((�n€Ñ]×:xK–B¸�¾\ÇOÓ³)¹�å±2$ªtÔQ©-:3înF�žwÿñâµF4²”–£Ó¬cK6 ¼ þ­ý­œò6ÇDræ#‘Ä—µÑÿþ|Ÿ#§r€FÞ@iùÿÃÿ¢ðÜ_dësÙ3NÒ{ù‹=Ðù[%µW•ºÌCa»ª˜?ìQëùâþ²‚üßÕòž±Ûüöz±Ðׯ—‹ˆ¾÷X7ÂñË”~߈;k}v© ýyÆD±½^L7(^®oö¨û|q©Ógx‡‰{Æ«ëÅ�æõò�ög>”×—ÚKR!èÖ‚”؇þjÌ:Á-Êú;!Pë/µ¥ðõ‡…»%Ÿ3Òk8¸FF�9…¬Û@]]˵¨ÑŠ‘ümè�ÖÏR=%©j+þn°Þ™­˜8Ô�âöÕ$¬-jj”­D„…5鉴2²UÍ5ê?¯ÝzKÖ†hêÀ™ftToÖløÈ £Ž«Èƒ8©Y¼­™!Ɔþ+Í�Æw ‰Ôõ<ÁQIÇL˜à¾È»Á´Ôreþ[bÙ&îÉç­´í•*ºM*åŸæ¤’›^e$ÚŠû,ŒÈÜd˜\ÍÀ‚ àÄ÷€L†U7êOa×`»‘íÉ6ƒ«•ÍÐ;§©ž×fÌKÛP¤F.׌äú£AÒaýž]š�tV_P-P·³Ô¸f$ÔÔ .JáY²:‘%²b#¹ve +!HÔ<Í|ÚPQn$P…çò*hŒZ_QXÑ·á/š3�߯€Ñ½¶HïÇŠ°¬Îh ÔM[V¡º î§ì%4?Ú»ðYÛ‡Ò—‘ð/ëqݲ/éJ9/ ƨëh;9€†F¼JH[nwüÜå -j§¼¬¬Rê×þë±]&¿N„¥H„MéᎨ녇ˆÁÚH—¾×+\©»žÚÊ¿˜tðù½}³K£ý›SқNJ9¬rÛ㙺¯–ã´r‘ó¹Í1î5³º�õQ9Þx�ÃÊã†c|\¼á?î;3çbé­ªž&ªQÓ=³\[mã’Ïö%y®ó˜Øâà´(¥BUЪZQ�a ƒ¢0´®¬&ß�… +>fT<ð¦�Z°X½F”Óº Ý5`M~ŒÈðº>Æ]b¤ Ä¨Ñ Kq· !�/n0V÷7P¸Û MÛ9IbéºPQï×; ¬ãwÜ'�ûxyoz-�÷otãæ#R}‚].T-ëîVŸ$ù"7ß²û‹xîCàØÿ¬Òï;ªE„‹Ñ´mqš531hhôHŒxŠ]ÇšME¶llf"MQ9ƒ3À@ðSÎþùFSƒGA{©Ïc[Jsá‹-¹Tü5Õ­3§Ì‚Ð�Í +ƒ×ì6’#-²Üˆ$Í;5âVUÖ4éÄZÂ,Å ±t–·ÔÄhU˜ëdTéáúìÒ*ï3…Z;#´#f›©ÊŠYOºÜfwH¤ ¹ aìèÔCÖ¥Q� îhúN.û™!þïŸ/z�qëò!wÞÝÐÏpîµV ˜Leá|E“˜˜$Ö­Zí­Â{Ý�Û0ÆVaJ{…¡´µáŠúÖ³ºÙp!Б"ÿg¿Ì±$ém ìës�žÇ}9ÏïÎýmÅ`.]#É�ÝN=¢2“�@ †óœòólåxV˜0w:[ô¨4žX®ºé§K +nÄÅ,ÍtC%]Ë~ä*V7®zÖÆ:¾‡]¬sG‹VX<ýÔ5�µC÷Z;1J:Ÿó²bê�}R‰>³P[²}{¾a=Ê<$#¦PjK׀ݓƒ‡VÛÙW™·ü �¥ËUù¨£<Û»¡à5e*\á�iM+¡²ÓªD´›�ñƒh1œÐ³×cžý¤¡bX¡©–ç±r6ƒøÃN!±¯½yÜæéžŸwP¡£¹šâOS Dl‰[F¹¿u¯8ûF]¨étËj•F‰µÍ=a)‘õ~±éÏq[Ýyaze½z;ëiʸÞڂ̳ƒ˜zŸrJ£{Tè3ÍCù¶à²ý‚¿D®<ïWÝþºÍî„çzîdݼ*?â‰^u²*:þ@[_ÿ`§>lO™-Vß¶÷0&õ#…–ÅBØ$Í…§,¾íQëùâúg!Ãïäiɯ3–IÿŸ=^,óüã%U8~Ý×3>Xm¾^ÈnÃÏ´Æo'ˆªçz|ÈÀy×7fˆ/®êŒ#b‡‡ëˆ;P·'”·�O¨_¹€•ôÖ,Òkë‡Î~èì¢Ð¤7UCžÖKã'6B�¹C¶´bϧߖüiê¼Ä—ÖËÀe­¾/˜¢ña· nÅ!Dþ+?)[¢’ÖVù®§vÖÎû¸,Ia¯Z_UÅÉ2ÇãE³ü.¦Îö{:} ½û´Nç%)Ã5Ó�ðBžÆZɰ> +뎂”v®Ÿ&ði/kú"½;0‚PÁA½V‚k…SÙþ8rãZ[‰¯v?)ÍBof‡ÌáÉ9”xg¯a´Í4 +Q{ù¼…ºgx?)Òpk·Z˜„þñ_Ïâ/ÛõöbþBY¾˜¿€ÖóË®ã¡éŸ<_Ì_b†º™ÿeæýcæ¿w8¬{ŸqóòíÅ!îÛËCì÷=nê×?õÕ °‰Æ³ƒšà·æ¢?¨ŸÛ‰J°_Ôÿ²õ¿þ1õß;\�8G<‘º|¸byùxÅú{6>¸¿J53“ü?¥W^Òzüe¾J½Îw­�TÅ3�õ¬Œö1ÅÖ˜y`a•Åö8ZÇ]ë­¿K=­»ÔÛŽR§²v°µG•z¥R–x¸©¶ £2 n×SëQëf§¾<3Ö¨õ|ÖO­c½Š{´öi>µÖlöÑLRÄØõp~o3zÈt½.:Xkó©ö4ßÕ^×Síù)vóÆ]ìu?ÅžëSìm}+öú_‹ýŒ¦rß"ÖUð£ +]ùX¥ý¨‚Uð†Å�ŸM G¤Ù_°øâëútÀµL¶_…,+£™�5ÛÒ¯@™>“Ò¯z\ÛÎ�ÌYi#ûÙÚÎz¿�ö»¤/bjÊm†9_u•ø¾v¾¬_ä49­œØ�%£ë2²tÀT!—@XÄ…ÌÑiÉŒ-.ë6V„̯a(›jï’“ûˆˆôuiNÑCª�¨ªc‚µÀžÎ7O éò^麲š{¯´�¡ ƒÍZ¦EMsR÷v�µÐÜûX +„ÔÄâ½Ýº¿™‚ø4ƒïþm-ìkÑ9D= ®TGÔ€ÓNÚ"”a*4à&·I ˜kVåf0»Â—.ãàÒE‹÷³]Iµõ•ÍÚ/G>FâÔ¾áh×ÔP½9‹h�.×W`« môºŸ¡ÉÔÂÕËŽ¡z,9^ÄrÖŠ „I½ ¤ x±¶zÙ5Y…Ôå´q¤÷â"›v8QK#ϸ‘ Ì7kn��ª,ϳ6€òºŸtW|íÎj®Òâˆ. (9!Péù–KóÍš!Û©„Û¥˜>7«#A(¡ˆJ6g{sâôö“Mæ`“äãÑ`¨+VzºPŸ¦D*™*áø\pW“É2ýgú˜�= :¬Rp¯®¢/§ƒ´h¢Áî¶Ât´»ÑÞ�£GTrYÍì¢%»YŸV[cú½µ�¼:.ƒË�œ/µ_ 7ŒØ¢ç¨ªÑâ°NËAKↂ­ûМ•�9ÜTàrœ¯КL¨¿0R4V¿ÝwJ©n)¬“ãìÂ!®ÅEµsÕâwåX¥=µ „š^FîV¾ý\3ÖÆÆlÇÊÁ=¼••Lò¹!ŽÎœ§õ¤Á怑Bš4Œ$÷éuòL’äþs˦„Ý ‰hýå‡I¬»›.óe¹ÌvÅ“Ú/µ–œ\ºÀ°'ˆ@± Ù­ŽÓý›ôOÀ²¨1[ïAJò^߯z¹ôÂb–ÀÉbéY¼�"X™2¦ßžÆÀ«™³ÖrŸÈÅÃḕ´UªÛ�âXW�ª[¨1-æÂëÊkÃALÅë`ºžá½™MÙVA2Ö[éÌv`Uˆ{6Ë›Ó@Ø)du¹�œ#£×½¾Àïu�~[ˆê+†õLP_¨zŠÏÊtâ*·û‹dDÇÚ\ào°ë¹Üá\mÖSEÖìì—†¢?xPòÄÙX<ÉÊ¿EÜXœ;"3žA9Èã‡ôâ‘’S×Öil×P×áÂÚ¨Ù½v[Cžç’� d{i“çYs¡%˜…Ey°ôHÅPÇtRd+•QŽÖ´àвr£ÿ›ý2In$Ybè¾O¡ Ð,æá<µUÿMß߬‘IRUøÖÜH‰dd î|»×˸júÔ<µÁŒ'«œhRwR:‰…ºI�j­÷s­Ã>ÅÖ$m_vçê@Ùw;Ë�,�°JÇÖ• +Ñb¨ãìË~´ù'/÷nFëömŽN³a/Ù4ð,ð·òÿÍ"î¨×È\5˜E>äÅ!.(A›íí ´X@ÊûDJÉ'd`ˆ‚$×lnåÓwÆe—zƪ Tô´…�cuºBòþwRQFÝÓ”]e*ž{gÁY$Õ�ÔoHøNäÃT‚çCé+FGJOmµ =+:éüwÊ¡�-Æê€d³¬M$c9ü©Ö�vÈQ Ü]ØX><™V!=:ü4ê1*\ç¼aÝånϘ‰ÚÚ§z þµø­CTý°šh¶¶‹ùråj³ÞÌŸtµ_�Ì6Lü#jý`¦)B}‘Ī�@íÚf°DÀrh ¤Ì¦e³¾ø\ùþ¨¤Kü«¤ÓËA dŠ&ëH2V:ó^pHFƒt-79óŒŒCeN@ î(àR,§�él^u�Ãôš)6cöKÞÙ¢ƒ�PˆFT}±éBBGI°\ë‡Y8Éè2²Sý£ÇÉcÖr¥æ¹)£3ƒŒ…òZ­ÚÌ›šôZ]VÅÆ‚Z’ñPÍS]¾ÿ´ŽTuvÓo¹YÍ Ãå²+ÙÏ_c³N#G›ëÓÜýÈn¶Æ�b�f> )ñTÁ7bpEMÜ«|˜.»ž%&$ÝåJF‘¬”Ý=5œçÉ$Q°dLÛ°¬8åDh¡+_ö?ÄèÕÑÞááª0P€ÄìFqž9�‡—þÄcß&±‚Án¸3ùZ™mˆ¸tÍw2÷BB±¥R̾°vÅ:Q|ùȧÐ÷A±bÕíW²ù=Ü Ý°(]+�€JfÃ!®&‰§* $^kT¬Ì�x’Ò6+d ½j[f¦\eÿÆ ¿©AÓ£„>­Ýÿuk׊\tZŸÖîÓÚ}Z»Ok÷iíþ‹­]ÙêÉ"oªˆ ’þE̵‹ÙQ€ê¥ È«Ó`UßíFFÇ“•%–ÚO&Áþ‰ºµûƒdS®fïÝÎr80 +<ù«AE{Šž³Cß¼X__vo„(Ûð¶9Pòb7›êFð‰toó€dµ7±R¢°ô©Ü¡Blý¸‹Sᢵ066Vç-ç[F‡²è̤æ>v�6aÌvP&\ú¾�ñÚ²2éˆ:á—›“ŒŽh¨Þ>eNs˜$l§÷;´ŸmÎU&[´o‡ÚÊÀ‡bü„е¼f¢³{"HzWí¤v�Ùn@—çï&N5¯* €®oNyY™ D4ÂPƒ–]òcÖÙyžñHõBºj4dj4;5h�&^®ÐTª+SU;7¥h?ì-ÓÙI7H~~ØéjØ�ªz�š^W<Ù¦sz1*;«w–cT6«{Mô*=›Íi01Úºœ +O=4BçÜå<ÃVjp@òiøô�eÒ2�¨îÁ"«V<: Ѩ ºÇõ·ì6Æ-j¶#Ö{Ã…¬ì¤¢³5ü¾ sä±îˆ�š—*m +zze‡.M“<ì1â�„~¥VÉ?afwì`½€2/—¥\¦0޲ËH§æfL¡b}2—AÀWvœ«fˆ4.Y ÝËÆG*ÒE$4:Jã+¨ýÉuؾ£Ú”~\û¼n%DM‚XçÙüªQBwd!êO·ÑÛ šD +–á©zR¡» Ø Âñ¦0Î�È�뙊‚?üKiÊ9P…ŒðdËÃèT�|a6´–MçªÄ|F¥…²¤ +™p �É�´h3òX¥`Vï´ˆÛ-’n“ì-E ãžp6ÉÃúŽ­…¼\MþkwÅœ¯$�ãš1ãë™±Ó7(µÎìÓù¯Ó½¼�áù Ÿéu‘×Õß7víÁN°òÀ±lê¯{¦Åìr¢ú™þ™�;mšãç‰m”w¿m»BžTt¼Wš•p_ÿüúßËMÔ÷¨´kI¬U_.":µ0i™Ö/@P·É#ïÃu­'Ä‰Ý 2°|Ý_ñèÙМ/תÆD"�Ñžâš×¿¾Ÿ%ÚªûïϳlåzTh“ЩÏ|ᚨ׮(Ç­=dŠ•À!¾¹Ëc¤;D¶ñr¢‘Ç +3/‘“Á¯¿FÔK¹àŒâ)rbáùcÆ)Ÿ¸±>±VW;&u„y«ˆà %”¦¥=¿¿8_ðÂ�†_p^½+Ç¢PåÙ³’�˜¨µõú²v'�ÉtÐ/è32œ-2P‹Ú¹Iàeû%ÿ¬°g’#Áõ�Ér9X²Dr®®U–é:è×óTqå4A‘k5GÖvô ʃç…$5O¨¨¼6ëØ8¶Ä}�Ô¹nÜ»%Á^ÚϪyíÕ(ÜÉÚ| ’j[ú²fÇ^ˆd$F2!Z0–ªåzf„ž×ë”È8��™Jë©d�(s­"ÿN¤ž{\;Ëw¤ì.ĺ¢IÌÖÑ:¹|­VŽøÏty‡¸ôʨ‹üû‚¹A ß/x%YtY®!’ïêÛf¾—^Ñ` .Lù’²üå.O$¢7N`�ǕðøÖ±÷ë µ +Ï¢¢Ö½ü€sñ^û<öiûç2±VðŠÚ„þ‚Ì�oz™ï ®¸�MV,Õj¢Õ +�aAíA’ʵÙŠ¢4÷Ëþ�~Ý4~Ø2ò‡D/‘àSéwQó‹oàn–dwbzÞTÏ‘Ŷ\(ê‘f`ÅçÄÙº›³téæöKFTú7+±Íèæ¬ç˜ý†:eW§829–™A¾ ‡Ø–¬{®dûhª¡“›ÅUn¨ì…×û¯iŸ,-8º¸�#ûDÎ?|„o2CYuѲ‰Ä:#ßHd¸Ì[à‰ÇÓ)ûÝ•i#7”›2Ù½š?AÙ†‘ âáÙº±ü»¿í¡­o»‡Q”˜ùx«ë«L\œ&öÊ�Й¶³ zÝ/°a‹ó{”"μà­â”�PcÒ4<Ø{[@—~å Tf‹�ŠÃO(ýà dE3˜^2 ºy‚)e:Œc “c˜áû8„{@l¡­Íîï*’`¼ð1åJr9w¸7�h!�äÁF„‘X«þ 09­d<È— +áôPôm%EE[ â‹7%Ÿçˆõ^n0év“»»AI‡¤H‹E§ažÓ6yÛ{Š'ýܘ²x‰Ùh‹0à8P‹ÝsËz NJP|¯î`� ®ý–?ú—í*ÉŽÝbWùè<gžÇ[ÿûoƒ¡¨nÇÙØ‚¤É»æöëßt´‹zžÓ/F:ö0v«òÉmkC+ä—¶Úeo«=AOÿ;¶R>öÃÄÃÁ &²ªRÑa ·ZDm±öŽÌ%Ѝd»Œ.�9Ü3èÞI�·;Òß?z'<9ÜÞ).e )Ý"] ìº<8û¤ž‹¿…õrƒÝ +ÄTý�±ùÛÆBÃí'Wjîž‚Ø!<ò4è%ckйˆùÓÉ£rIí¹ü�þe;Ï\ ˆÅõ§ID#íš&±ËsÀ IS "¹e >zŠÑ^²êJÑSÃí&T[¶†Pï,á¹-�Ø *¾S©±ò«,´ñHc=¤XSc•v'¾§•u H’°²ÚŸ 1äpûUA„.8À©¨ºþM9,Vfñ¤WUÒ…fˆ©{Ùþb_,`Ó©&®Pk�#¬awl¥rR‰i`CóÔ½�±s§#^}?7^S3ŽÎ\E�+üzÈ¿<\:Ì•jzú…z¯±¹‘oªÿ,Ü~¦8ÊÙJOÍ�CZØË–2ïi^ž3�ʰ/8í¢çtþ¬é2˜”I  $Ò<!HÄõFŠºÉ24×:‡8aå5ï0i<‡Ç�&˜…&‡C{§±ê9·Éþ¡Ø6[-ìFhW¥w›¤Á�!]`?íao�|_„&‘¼8Ò©SÙ¬a›äÌ)ÁMâ쨚NUž •àd ³Ÿd¡cŸÙ‚¥Ûä —ŽŸÙ@ý”°Ìíù§J´»ŠÁÕÅ‚ìã�_¿íÙÄÇiþ9—ds{ž�Ь¡ó;Y€ššµÿ íz!„7®3*êyj; +ò�û˜¬rýÁ/T0šû2X­ü÷B¬·È-Õ‰ÍOǸeýsj ·æ� ± K¯iô5£Ôã$Z#ËܬÃnÕ.ú:•è[5raì>𕵨C~¬©rìi¡i¶V™mj Å|€Îi°îÀçÊMÓpe{�†Ú´YiÛ¾äÜK¥ß�6—[»(6½ ke¥+RQ>AÚ¿³ù曯8ÀnLueoyM›ˆ²6°ø„¢„½-pŸÔß!;ÃŒÍÌ~ò:“ù?U·8’!S U³qò§êÒ Ò-Ê3`Í7ªš…й�¶‰>ÒFÇÜ5=ÜáE‹B–äÙo¼úV‡q‡Ø9ˆ *0Y®cµçút÷!‘+ikz$ALjnp_óX=øÉëƳHœhGèåúcŒº ,¾~xÍ5ªlÐP™©˜a%Æ?6¥CÍŽM£þ'+uzðÒ?À–H‚*ˆµ �¼³ìEB[&¶ÊJ‚¢˜Nh:VÖ^O àâà Qt™Ž1 +J4Vo÷.Vc°)²/š0Ú¶¶ÍÂv[RyЭ½^€¦uašNyþÁF*U¾5Ô=U<¶5§ɶ�PÉJ.ÖšÆá–vH´¼È[`NTÀTú¢ƒ…˜2<¤Ùù‰_\°I~¨±~h\¸Nf©¯�s~m-Îh;¹¿f®ñ1}58&ͶòZs«3:4Lí£�Ïú‘ˆ­¡a¦È¨´ánd V«÷ÚÃÔ�ïñm1µßÇ—dYóSXdm;Œ¦f:zž�½îÎðÊš!sb_²ÝüÃ-ãV¬B¡±¯hX½dJ8n‘ÿÑã/„Ë(“ì�9R’v»\¹ 'Kƒoä$Í£¶Ó¢žyÒ²sž:õ�HÆK“!¬íÍü¿þÅ7•gžóyí~oȰ�ô±²ŸQ½WÛÐ"ö—³]Ô™Zlö×¨Ì ±ÙãûB�süŽô¦&�j¬9€{Òã}´Îô´]ùÕþ�¾ž¿L_>�úÁW;ú¢sBìíÇxU”&<�ñG±£zWAD,iu�Cº[Ï6 !¨�¬Z;Ò…úWT[ˆ„~Å@ª1T³ÐÅõU}àžÀJÌ׌ŽùSŽfX#Õ–ÖSqð^«ì¯*¢Tß/Ý&‡Õ€�Í·C–¥ÊÚvÿ®yéŸÇ¾òÀÈ/~÷—±VGÀ¤2%¤5ý«èü›:å+Ë5ªyÈ…>oh–9k} Ç81ZQŸA±Å¢�­Iº§hj7cQò—5·`ÏÑÒ1Zä5c²çL„——øçL‰¿æagÈÝÃW,*ÿ‘dÕÉþëâ*ÔŒ�–ÜÇ*”’¶´b£œ–¹òZ‘›�_› –Òj½7l†ŠüAPgä˜RžÓK¹#Š/­Ôæ%G Ô‘hl«o« Õc«ÆLOâkk‘2ŒCð “ C±}ÛP.‘9]ÆŰ]gyý$*!ù_2É$2UQ¡RˆfZ'y0—‹ÑÛ.¢Þ)[}Ú÷w³Kg�nMº¤Éœ¬r†ºÎ«šlpi;+5/ÐŒ]ÀÁBoVO#Eô6Žè¡“ß9õùškŸ¾¹´xM5#•òZ“Ž, vT#h#‚ÍJ¤ HÀCS¢b‚Yš`V0q2Ì¡e7»´)^$/i;83b^À:‘ޏДI¤G³m÷‘M5X—1—GìÍD�²ÂÝîA×ÊÍÞLðõ–ß ÿ”C#g�fí +wggv€Ã©;’«&3ôÀ*Wª×ï�¥vIû@EÉí1›œ ¹e sÈ � ]ŠvBqÿy?…Ë¥Žó§Ô±œ»è²Tƒ¼±ü¼ûyH:Cµ4½îê~¹æ¯O«×ºt6ÛdŸùõ¼±—XN–‚™Ù]õ¨)¼Q3Þ#v +%õf#'ö/‘ø‹4î貕GRG.ǧ‰.˜óѼ.{æ@‰ªêÌ‹pB5ÐGÙšjÊ U† î†·©öÕvi 8WE>e{ÖôF:�ï½AŸS°„)œû¿uuq“2½Ž]ÎÈÙ2ô-�È•â,ì¦Qç•!@õ ù¯X·2L$sª ãHuêá)?Uìë?þ`°rQ sÆ!KØÔî¤e*\¨ËPœN£AnL#x¦šNFˆ6È„iaeÔ_¥y‘A°/`îñ¿XoŽKR¬Ö¡ù€K0¦<»(Æ£î+='’Y‰Íà!•Üq"Hï +#ýC&ÊØ«>DL;V™š3¤`d\éQ ‡�Ç«[G]炯{ ˨ÑÅâ¡£CÞ&—0Ñ8Qñ†øÎã�Š jO#%}»Ôâ#QݲW›t®PÇò©i*–H“FlëÁ¤û¾b‘Ôe±ÝäA=X›Ë~E®Z–ôq@dðË)¿Üëõy$ÀÌô¦#ö,½«nï•|4ýÞ€5µH‘´PªIƒ~?6—±¿E€3ÑŠ(ñë +_Dx’±¥ zwá™Ç�õ”à-š[X@tÙ�íZæjæºc"-qn5ÿDO@¢ó”'À`~“¹­1*é Ù<>Ò#�§ur;—nBÝÝ"%Q¢€Ÿ¥\Åõ ·H.¥¨ó8e.ˆÁ^ -rœƒÐ+ˆ\·Ô-|Ìmd«­È„²[»"½y|y»*’ �í¡Ð>ey5†ê$�î@°aikÖñRRÌ/‰UוþkœÉ*GB½ÝCùÓ»§ÕêÌwiF]ª ÒÌâ½"…ƒ˜U4s"’câ³{OñóŠ5¶Þ›"�»ÎtEdÕRC:ØA:Þ™!Y‘©ÀN:¦íÏH;j·'ŽU—òvÙÍ}h®ª¡ò+P Qù‹’n¢—RL?#®u’9efè„=‡ÂpÓ6A9èφ¦ÔòYu5_ÔIÒšš)5©éE-Ýe]×)B꩎œXå­e^KMëý—ߊÎZ‘;ã_`ø=0´P+^ÕzÜy ÃOÀ0‡qán ¡z3íR¢›¤  ¢k$RÇG`ú +/0²Ué*7öÍA¥æóTxª¨žÉ‘GóUð¹euzeõÜ n*Á6;ÖTèÓdçÝÊ6uóo쨣H3°Á× 0œ• V7ìnæòª¹Ë–Ž$¥t9›mîþçÕU¤CªªûðjBÉØˆŒ âb•”û;’ŒðD@k¥*ض’í“+Û]]“Çúf¾ +FE§¸—°sB!ƒA�7ÀÙ<ëðÊ ý^½¦7êLxIKõ5žX§SUŽçv·¤¿dìqõAâÙk ÈpvÆ+H0x‡�ŒOô¹v¬&” ·Ð½°Í L0WfCDÓ…aiÀýîþšô)Ì)A݇T³ý3ëkÕ�‡cNM:�9¸þ8ÀU¥Ë«3ÕÀÊŽ +mÀf¢|^´ð_…ãIxó ûj•ê¹`xì'*Ñ{?Æ‚Le!¾Þ}ÝC¿o]v‰ìÆ7ש_{R#ëøª»UœØ> º<.6s·ìu+ AUíâ<GW.÷q«C¯‹ÀÐ~G¶ñÀœ®Ê=ÐÜý 2Ü™ã.W[ð!ª^:‚wÍåí�-’ãÍ·g©Ø]ô1*­Òüliò{*Ú½©]Rõû¹°‰ÊÀÝRôÔ sá+}Õ÷«¬rtÅwõ‚Výˆ÷t߃š~×EÞ0tËx²$A¿ßžz“Hó»£& +¦Úü,hAŠÉ¶GæÓò [í§Fü vñsÿ$ø[ìÚ˜²³¨umOv$,X׬Z©(½†äÝÀ½ÀÿÍÕ¹½Êc ±wiZir}‚ì[¿‚ëüºÚµÒwÇ^¦ÚVÕ £2^&/ÔVkšàLc­~=ü&Ÿ_/êk‡U®xåýá7Ú¥7*ýÖÎ�ˆrØ•3´š«‘r�e}¢' +Ô¯÷é ñÿk8°PËFÆ“T½¾¼ó­�Ìç*£6*TèÃEE•ž‘(°£Ágf}ðrõgYš™8�p%�—œMyY@ï/À  +,UâAZ‹K¢ ‚’кžQ�ë#ÏøÁ¹'꬚Èizo·¢ÂõÄû—3Cò�KŸŠÐÁÕ0ÓÀ²Ü2wœL¸_ÔRÀœÒ_~GÐR¥ÕÁ–I� +–#)Ã¥³õ-9Šgôix$wJlÅk'„&/!e}Ena>h.ÓIö}âGŽ@Û‚`‡ó© +ñv]9XͺƯ8íÁg´Nm�·êb%Y€¢Swº,B5œ¢¤e};_u©Rl½Õñ� XÉ^5"i‘/«»®’*ÜÎÖf$�*^°-â/U?ªñûJ¦Òõפ= `Í ÷Ƹº6W)úË;߯Î�çåyÎ`š‡„> +äWBþzȽ�¥ÿD¡5Äɧ°ØÕ¢¡Û-lþK¾£?‹ø—uɶ‚ê~T|­ŽB«ó3´œR�kiK÷7l¤¿ʈm k_q\ýù\o�òއµüký„$Þñ0@½Ö¯ÞÏxþñ±óøÙ}ý +ã ů¡Â<Tä‚ýÌûŽ*sCBõ­'ªì4W–DwáÓk�w–Á#FXöEtN´ôýj#z±D罯?ñ�JJɸïH&ë äðÜ/AùÝ—®¨4ж�ökâé!˜qÚŒ‚˜%ï:ªÔè+ñ4ÍYŸ¯(þõÇiXÏ–ÇÁ¥Ÿãú¢ +ºùð8Ô…ðzìV7Æ‹'�,Kó&çAÆx¢Ãe± ùhEi›—d)þÝn¦1”Í èFt¸6êc¥6“ᑳ‹£íü4¯•½±®Ò›f¯§ ‹ ùÁõIìâcs7s’Ë=ôÊ´¹�p§—Ó‹·¬å·½X#¿]s;oHãHÖ·ÏÍ–kX+é³n!Ý„©ZÖ‡š2|ØA{F­²„,³ÚýJI|D2V¢O>·óüõqäXJèûJˆq7@¡rÜ:-.7A=�k!,/{óTP죔ð<™D'�q3ðPÈ‘ÜÑ»Ìë•ÓsºaÔhù˜;Œç• +çãÕ|ìî2—²é ƒ9›W•Ä0{ûˆŒ*ÞfÒ}â[µ[°Ï½²úµyÒLÉH÷Y®)êGr·ŠV÷m?ÕTS–ì799�ʂ٠+í™Þ!*+Φ±ÀA÷-Œ?ªƒÞ\Ô�ÄCµÏ@æ÷kõ·SQkƒÚs @CªKz\JƒN°œ@å䨯×TJäèÙ¥j·œ<ä{4>ÅU,«zzSV�›Ÿ’¶Sßʼ­K£Î.+ª'˜ ¯Áøj<(–î5�ÑQC~bªÜb¡¯ÿà=ñ=1¾6£iÕ>TÖ#…±+ ‡dt/|öÉ�_н•8Å �.ŒÁODR +å+ñ© †ÿÏ~•#Ir#A}^Qè1ÜÇ{Za¸ÊþßlýdeW‘”Ù´Uº�H$ˆðƒÞ…WPwÔRæõDs Úª$í¨¶Wm‚¤ÿ¿#qKFÔ¾aË­YS"�¨>ø€-{’Åž£�q§ÂÖ4F:eiœø¤—[ ÆŽÏvüw©R¹Üäb�poØs$Câu!r à˜²ÌsNÒf}B4Â)hd]£–$Éô+³Ð"(Êw6¡8—)y“×¼$ÏIñÜó’ëE‘I6¯>ùǾÉc–nãÐ’­Añ:‚ @‹Ê +�œŽè É‘uaeMU‡^(3Ô¤{žh³¶=Ê ÓÁ¹…êfgÏÃK”ªõ,]?ç1v_/úXg‰g›�¢ÞRóÇÎñÜâ‘}YÆŽ“ˆ 4M®CôÛݱÉ?âð¾8¯EïŒ[Z2ÿ¼�å)o* Tu�‡õ_š$Ó·¡K�¤¤þ¥Iz³Úö¶ÙγØbµ4;Š:qy¦5sn·`æCñ +ÍÜÌ kȬŽfçd�ÁMéi·µ¤9cÂM84/#ä@ö³½.QUåA“pÝb×õfñnIÐÕ¢Ý6Õ�TÑ<K["¿$"CÏÙ®Ò¶w–|)¹Ë–åWÏÞ¬›§œsdc Š©´Id„®imÊ™ì"bÉ +Æ~Ž[Ó´ˆÐåÊGRY4#M©µ¡®lšy|Ì>¹½l9ØšO±­?«N¸¬ ‰£ Ë^Íj^!±Àʳ˜øâ +‘'e¼*�Í1Og�·;»Úm›®«õeõ^Á!ÍÙiW@ú aá°*ã}̇wLN£k“$ Ì›2z–ºZ,«)çžjÃz@£<ÜÞlX‘›™¥ÞÖ=êk ”›SH¹?ô£à Jueb y»}’´„’w-v'²¢ð$ݨ¼È3f#ç,ÚÒ�Êp”Å+ÍXÁ,4ã²ÞøQÅŹ®“ÿ­Ë:Wó󎪮¶~ gŠ3 gµW¥Üa eµ? €F+¢O€Ü j +(v±åmÌ‹` +W¨¢‡u{ ½mgD­¶V³¨êÇCŧ‘¶¿<ÎR�Xy×h"ëþÏ Êcj(½›„Ä,ZÒƒd›�,„ÞL’ÊÀÝ"íng»PÌ„¿ÛûŒ³íÅmáþ¶È\¤ùdmºTiøu‘`)ÉŒ'ƒŒPôÿí ÜVÿj~wTOåt+hÙ<Œ©ykJµ<[ïk#¾¡|AV*š(_R¹K! šDÛlY|"aøëG=j†Æõ�JD¿¹—.[Ãï-{S‡(©ÚŸ“iìê-Ì*ç!·ò[v×rÂ_o»‡ÖÉÚ=˜‘¶;G•�MR]r:U£ ÑÌBÑ~š‰ŸtÁUÆøà󤢫»‡'#, +h¨hï�ÆpÁÁ5¦°­%ô|Hƒ‰Lø×>ÍÅ$S5í¶O2%K€U‚qæäö:é—OF.a]€%Í_,9Y’ @h2°¾ý.Ç#X+Œr�¶cùa1KTL'pRR�ð·i~PA•E¥>½EIz’uåIýÖ�Š™KÉâ™ÌoÆ~†Z‡.jJâ¹]›™™cfésÊ·rŽƒÄ&&{*"¦5ó +r,d„]¸Q™Öb³Å»_j³w ›°ŽœXÁMä5±†Hݺ÷¿Pg·Ô++“Æò—¾�Y}JÜÉ*í™ψM<ª¿ý‡ÝaRÆš_Vµ^³‹tý-4ZÑŠpj qÕâòÄ0}õ ‡hãŠq+ë>2îq3U^óq9ã7ùŠçü!ˆzÆýçmçöe÷0wgLjÃ&‚@.´Ÿ¾ŸQÖ³F¿ªÚ8ÊÚiÌLÅPõšç�E�£15í Ñ&Š&#ó¥¡) XúŽhµ¢‘«¸•µ‚‚w#\›”)*«N[/�“Ê!û!Ñ^훲£U ³�Ù–5Z³^ÕÍ×ÛxáİKàc ’n¦Šà—àöã,ùïyøtñE¸Œ�•~™2=…Õ8Q8qÓåч™»� ;¶!JQ?xŒ*ŸÖNŽ’LÙ†;UÅŠTml{DÒÙ»O«j¢/5³$Ž™¹'ç¶J½4{Ÿ‡Õ߇԰aè#kÔ/™µµ{Ý®nÇ1¯ò5›Ä?~q-RݰqÄ}I]쬧ź¡à>�ª9BøŽá\o«Š®{™ÒâyèZL‡h+Îì4ì È‡”ã ÎM_a֌ڭιp³,Aöf|}mÛÒ×% “ÞŸ¢ßu6s4’ Rð¸Ã6¥øˆÂ’x5ÝzZ4Ib žÞ1VâÛ‰²’"qªIËvé¬&1ø`yÛÜ� s! g ¦*j�Åw:`Aƒ<‹{LBšü)âÏ’âî«�zŒO!:¢Š$0Ù�®­‰3XÇí¢µ y¦4· ‰Iõ9Cøqß�—Ï\â<¼.Ô…ȉ5c³IþS=‘V åO¥ÝËð�e}Z•¼ê› ÝÀh;e?¥8iªÊwÜg®æ:¥®)ÉåÉŒtW© å­ÒéjàP–ô35v…¤¤Fî][�žÁ£�qgok£!ýÜ…¹Ÿôr‹�KƒŸ*T òì‚…`Ë]rÏû§M +=ãB´q(�2Ï93óhF=†Œ‡±Œ7éÔ¿Ê~‹ÀðÂÉYméAM†¨)]Ó¦í÷Œû[¶�ûáÛó�¤{Ìöj&@Š·>¼·‰Àø–JæâÑ^<2ù#,/’3�l�ªMW7°xôrˆ è¥) Uª“¯4Ýn¡Eîìy‰®³•zŒ½Ìo±ºõ±.¿Ô#VQk[c�{ÇIñpçÉVÖG“(ƒ +Ê?D&P�óJöã_fÜú„ùçuQ¬q²|‘©ÌOä~é‘M[ˆ‘±©òÙ$¨³v) y²z4Rý“ °ûmþk¼Xõ’Ïų.©¶$¾†œœ% 5ìÃX«[+Äkå$¨éÌ`W›l É4ªêCTÝ7- KÞH +Jðòn +©üÚOÏÓÙ[…€5ãR i§ŒÍã ’€ºŸÀz…ÒtZeTá •?à ¢o!$'‘£e7­O·zw«ò·Tö‡)ñ¸ÿö™ÜYêF²ï$–qÆdàYŽð&ß(”n¨YCQ5D/¢?^¥ s­-DÅ¡;p‰MºQÅ*�ˬ|!•ä°*î¼Ï¿kA á¬ACmA\µÁKÅÁ½ž¨ˆ\bQ<{ ÒŸ}*C<ŒïL Àf¶›þüßÍþÜlíèE’†*��ø�­À½˜æwØéD�­o‘Ó•Daßa§K¤ö vº¡ˆþÁuJ9€½BVSC Â㿟ÿ¹Ë劯dh¯²1·åÛ è&áB6a�†¿•⮼ýRºðòõdà�Öž+Dœ$º<>�âÕ—5ŸKÇÇãé¼÷ÿx£áóJ¿²fäjÀ÷|ãCÞ'Ó)bPÀ²äÆÎt‡~Tܹ„_µ[8qüRtÆ4øàL½ú1rœáŒ>|}òòÞÛÂ/_>;òIÒ•$n‚\ Gk�•7”ÅxÆ·=Ç2ìå^¬@cIÅ}…/óÞzùÒËFž›¼ê á_6Qz¯¯œägÁ›/ÎrÇÉfvà¢ÔÝ�¢´ÃÆ}øò¥Kâ=®g,ÓxɉC=ôNÿlĪÜñ€²¦™Ëÿc¿Ì•+ÍŠ ìë)ôWœ}q‰à 0_ÁІb æý#ø2ë_®ÔÐ8€A´£«ªÿ,µdå©Úo¨,F®c$ì¦Þøþø®MžÏûаœ³J“g 5°}rhyü(ÙmÚÔx~óÚG)gf­˜i°¦Hà34u‚^Z•GQWÏ/´4—�ž›M¦Ó¢?f§ñV°•\ròÔSU54AžB¾ h­E÷™œç"«h•dz¯ô¡\ÉTªAª«Wó͈€>:ó"ãÒƒ n—8Tö‡§|[zj>n�:hL +ÍŒ¶¦QÍxø ³š/ŠLSú›qó¢@¬¾¬)k90u¯§@iÔ–å…v 4ÕG÷¦Ý½XF£ªBWgŸ¬ÍCŠÑ•F) ‘U%¾-÷Ô,—Á£Ðå(k”Ъ|AÎ9Jªù-ËoÕm¶ÈØx‰CÑÃÁ!c€âÊ;žQ»òï¶g[䬹­( ÙH*á}–oðH;¼�y”ôï´¬†\×Xe¹›”ÖˆWí Ù~D°” =v$EZ”e÷á¬;@Ì¨Ö ¯ \í�® †qH䉜kXE—X‘”v䚊s²í👣ùz{¬è:‹8Ù(Ò¯ˆîøQ¹Dîˆ�à�¢oax­jÉå”à„ebxŠ ·Ê/V¬HpRôîlŽb‡»ùMЦd9e¹¨ØÝ‘ôâå¿ÉL™7Z ̶”ÝÚ,;™4-ÊGPSB :�U¿ÊõÞÓ…«:YÀ>P'E‚K½£«ŒoBIÏãÌ#ñJ¯�6!3–L›Ëï–Þc/1˜ãã’JyLæØyqÑc[íß/k/jzrà 8v=ÑÄÀØv¯yÌD9ÅŠªtòÄ›°njš ãw…�µ]²YïvìŒm¸ÖDDÊMÈ<~󡟬\ñ}¬¸6Ÿ±Â¥6åÈp³À�¬t"ª6µ&JûN4ru®Ò›Š'¦ruáEéõ‚ ™›Bñ�)ÄlŽ4ÞHÅêù#ríÆ*rq½_`F“ZÀ×ϯFµ+vÍ–»š#UÃrõws«P´6ÕaE½ìÙ�§&æŠ*Õ×~SCip!d™m\Í L¹/5Êyï¨H¸#HF%Á ;s0ÈÐCJ±…„›ƒÐtk–BÎ.�ƒÅ]ý™ç¨ˆšãIÕM}BÿÅÌ»´�åì_b0k +ˆÞƒÙ 2w­< I䋜w´­=ÞèžãiÑ“£ÐÒßž�ÔÐkïΪƳÐhB™Î�£;úGqOS)dyU‰_� ·b¸4�³È T¼±æ¾F-—ãÍí!«uÄ“&ŸÑ#ÌkEg!§Þ,»K¡|V|ÞÍÙB1Ä” ”­õ%dSå) Ëæg=ïs;òˆÊAä¤6C¿¢!ô¦1ä:N¹4346“ÛmØW¸›Ðb¶>Çk+M ÊóV¹®cÇá¯Ü0ÓFê •¹MS(ÈÙ¡8ƒhŠÇâIã;d0=†þãY +QH J?ž›¢âm+8´*áÇu§ü~t*>Ôx‹Áœˆ;ŽãNÉ·½¿„h[>á°39}øäó÷}¯ú¢Í�êPþïÁÊü¥æG¥ Å‚xß/ϲ½¸¿º!>7š6Íý»Ù¡=Íã³Cžê§Ùá» ›^ç!wÅÃtD×�Ñ65® h¹všˆIm[wùn)«:» ¾[WÍŒýiõs¢tÌ£]ѧ•yµÏGcÝîöYtÅ%ÆšjìEÀ3o»óíGÓÊæM€Á>9t>íÇà2‚˜ÏÁTº=.ÊQÇ×àrvÓçà²}àÕ�CŠ;•çÁårç\.Å1¸„œ¿r+OY­—½ô®3;'xzˆG¿U{Šò�‰å|—lÿUŽ_5Oš˜+BÓöAÙ)Ôƒ‡×½1á•^ÀM$Ãí:ó³‚6íK’BXñAĈ*Ø+¹À¬édX«ß©>nÕåŸú¨¿¼þF4Òëß^º¼U¦š�!2ôôïãiÅ^”p‡¢Çöÿ”(¥çùõ�¿¼þáÏßÒëïß^ÿôËkD›s>…ûÒ=›>4*Ýž (ùÉuMFûÖ…ŽyÃÖŠnZ;p[ÒÿDër ¹IšËç|Õ}|Ò�é}Ò @Cg°çí6Q‹½ÝÛùE÷¿ ¾®\�çÅð§ØÓûM!šŸbJ¦¼Š–7À'G_ýòU£Xæ[>2‡ÜNLÓn¶sõ"Vû2}yª±º‚)æÞú®þô�ÑmxyÎÄ(–w¥os»5/JÊaM¥' Ùžˆør”4µùÍ'eŸ*EŠ�ÛYÐMM@8þÃ4×Ù)ó·vo›IÑÌ +qZ[§.g[r´AOõ�É•Ä!õôÁdŒP?ŠNQ㎭ij»XÀ.WÒ£àJVÎrhn#¬3îàRÍ„’#9œ^ �f5(bµšhŒÇÜ1¼âsAR!M Å€%)Æ�0®"Ñ™dD�vWýžÿÄ£å2Û´X•=и«/I+;kÄ©ÙÆU[d÷ð •óô3ñ( Š‹4åîM'S#ŸSQjv’sf‹hN_ª¾ºV¦Wî7ÕžŸä¥—†Xï8ºæ%ˆ+GJä6lp¬x9³VÍä©\�2ÁªióûB–ÓëKqkbdö•ƒ((§K¡4ðt³tD‰ˆÜÌ zK¢º¯ªùƒàˆâÝ}ÐI|â]ém×!6üõé1æ è•-5=‘1àR¨¦óøâ·2˜ EÌq1ò~-£z–,Ãà ÝFŠïñ]û;„ê· JAT'P¥öJ6ép�ÞÅ+I‘rÊyƒŠÊª×È̤^/1bhŽ +ÅzSDzx‡«»‚fŽNâÒ%�»6fFÈÖk›Ò):©Wq+^u ¬Ê®;í⯨ +v,¥&ÄïÂäÚ¦”вu¸™Úë–ÆêŠØ>*V¢ÛZyúÎú‘}Úè͹ÛFôi‰@Ô„G€ØM4ì »^ÞÕhÝjã Â±? “}PaÈD òs[ˆ¥ˆ`¥eê¬Î„¥R}$/²2+8oÀ§ºëÓ…€tŽKfq +iÀÇ-Ò¢TW[Õ}Õ2¬rÜ+J:„ ±÷—K¤�!æÓTΣAT¢I•¤PìTJ<%<Š¿C*d­„‹"šÕÂØŧhB�ÛBQŽ7^hèI’Ô"�Jg-7oªqÀÇpnUèÝŠ¢W’—U¾h¾¸=È!¥~¾Xj�Ñ×µ.{Ïžçè’•›zØ¢W½éÔRöbÆæ8ŠwЉ“ÒÞSƵÌ%*qâ¨ìS‚ÊÆ±Vbwýz'¥1M@:¸R”´ƒÕt§Çôt—KŽ$¹D÷}о@6ø�`œg `=ZH÷dÏŒŒêiI›ªôÌÒét·Ïc`ûêÖ‚j|SU@¨¼é…Ù-3æl®ÊP¿ê zIÅ@´…Â<Ï4¥Ý ˜ÀCCÀ‹ÕVùqƒkͦ1X­Ó±3ÉÃbç +WjÒùúAÅþÂbÐB˜¢¾7»©qÝ £#”àDi�‹åK§£ž4ö07 ¨éËU,%]ÕÀ a‘‘O`FL§û7 ÜÐ籂ÓÓ­çÄ¢8Ýz$TQ•UÊgœ ÌjÑ™°v«IRߤ^©tü¹ªa¸äJkG—¨t€ܧ"Íܶ“ŸZ1ÓÀeO‡âŠý‰gá^©?>ðºÑ„õ[‹BE¿°LcH¾?Í=ûÅT�hùžFÕjªºíé]½ÑÉT$äCsºNÂ^•±«yšñùê€ Ô¢;�P`F· ¼7ÿ“…9v£¼Ÿ¤åã™óDÝ(¿ß04>g9foõˆ&öb +ÔjÉ¢>N- jz.w”3ž­ ‘ΦU‹Ë›$˜: È)Ϋ8_Á¹qhÇŸ4â~çÍþ.¸ñaïFWIÖìDÔ:é�‘¾�þÇG›çhŸßOnÔÃb¤0Ÿ_köù{9?¿ú¼–øüv=gÓÜÝNh †äz.ü$ì™3ºGöùË—¥8i¬]·c—T¿[/õ‰ÔýëĆäÇf7Hþß_\&T<Û‚L€ÞUí‰öà9¡mýtßk¿BÝÃUÆ| ù%ЄžÀ»Ô¯ß5Ô-a«IZyµ!<· Þ’bÔ/´mbºOK5Þ´\hÀµf·ÆíÚšg;â÷.œæ†¥Žzçîn»–D[+ñðþ"ŠŒw¯Ç³ae¥…µJüN¨KÛÂÎYMPò˜"�}Ž@°¨Z›îŠ€ 'У‹@+…ÔY0ùå#nûÛ ŸýR +ö íT{G7w±Ã\“X!w¨E©3ÌýÊ/M�:7¯í{„8m!ãµüä‰ÓX?¿ýi4,VzFÅÓˆƒ¾ÿû�þ $Ǻ^’î ¿Žûâä‡j-{+];P{s{J”ªÇûfÍ(Þ·GýÒƒººóñ¶ùruu„Çú�w¬aÚYpk�»U†ŠKr¸2!M9þØFa‡(Öy^ �½ë!�úÙŒ|ÖN#ŸO†‰H=/äDYë6Û¤Ù¿üB=šØY)²LïïÅ.Z®ChþºÖßjÍéh›fûs¡ï%†o�M‰/ÔÐó«:¦ªÆ°PyøÇØwãllšø%7¯ý´zæY芎:»( )$­œÑ¦�5ÿú–w¨÷»±$“|ø;KÛ¬¦Zi°„]•Ã-|î)YZ{غÌ$ÂVõ+sÙiØÒ<½W³Ñ»-”ð ¦&¥C9£¨‡.æD˜�ÅP¼_(�Çgå€WÇöxÕYzo×"9Q|öD¯â°ØÚêîÚ&3Z¾ø ™å&à 3ݵzä«ÕϺc#¡$ëîj,ì½ûx¶³lâ™ÛŸ”ÕûYí7ã¶®€Ì‚ÕÃäÑ[èM÷0#³«ð»–„*ó²£öÀk©ø3Ô{›6}”Rg R-T/ëfûMë5œ_~ +*™Â)ª³”Eªpylžpœ�뺻…¼¨u»ª‡æS”ëÝÞS8VuÆ|z»¼ŸŒ€ý*–ºh�ÕLRý¾³]èoì(¡á i¡¦Äl¶.#ŽO»Å޼�BxÐ]Å Iƒ¸þeä*G ¯t;’c8‰Ÿ–Fºè 7>�ù~³öìQ@7õè{‡bù˨„@ïv[ì>î( ©~­uûX„úµ©ylÅgp¥õ-];­™®ÐtŽ�Ýý²!¹)‹r¸Ÿ3Ôï°ÛêàBôè£]) æ•ëcáñý_ÿÐS¿Ý%åÔpá<Ý$ÃZ�¸¿GbÎËÓ&ÎÅdøºoëZ-4öìÍ0bª-OŠ6ÑðõêîÇúJëõëïPk¬ÛÌÖy8ÞDhŸ{k¥§úxÓº«d¼P…’Ö­Ü×Ö•fpq +0+b�BN{LpNå¹¢·‡/‡}/®X [û»>JÉyžíj”厅ƒF\µüƒ�i%Qð{¦Éƒy Kàš™;Q€‹gOŒúš¦!N°DT’O"ë!1bÙ¿4Ý&¶6·‰z§$¢œ.]�@-h�F±Ñ_”jÛÏ^5"¼S\óx× Åïã\©+wq·Ì뢮×Þo×e%ÂK͵{³Ó"5Ôìóæk ±ÏÝ­ÒÊ8m¦hŽ6�õ{½r=mÌv!‚�Ón"ÈÛŠ©‘™>Ÿ›3ÐE¾Šõ]¨Šó%lrÍŸ\½0qã>?q�©ñkÆÉu–´ç|¢ßÙO�4ƉLPÉ;ÅŠ¨î-g_lcr,aö¼Æ>1ž÷Žy¡ +oÈÏzÕæ+6 IíÄŸôä~ç±þ.V°AvS{Ôõ&¢ù›ß,Q*¯`RâÄ9Ztôú:¹pÕS˜¨¦yŠö†_(š/Rñór.ã¬}.êl�[ÜIå~wÆçêÏqÜû¤i—]†ÓI»Fi²]¾ã˜TÆKä×›™ü¯ÒJêç7Cûóß±âYöll.Á\‘×FúÛ>[3·Íõ ÍõR³É´¿¡Gñ‹¸?”ÓIϬÛçU‡œ²˜› Ñؘ;tLo~!Dù†HQE@F ¨eà�v$*uð-øL’Hm$êó[0ñìþ"²Ì¯c7€î•Ýt¬ÏÓ5¾A%1w†§�ñˆ:N û*+NÏɬØÄGf›0£ƒ×GÜdx\ư¾³i§Ò;Òðž�¹šŽH�ûÚ:ƒ¸<¹_Ë×΀³¶šjBì?•|™A âÝF?¿ýù;uû¼Ê�Vx/~ÐÛ—í“UM‰›nöft =6Ô• ÅíöP²W;Ám›’tFmÜö]¼e¹ò.¹u†ç‚ý*$c+C�u'›ýá�mvØC½y%Ìõ®‡Ü™g³ä“4òùd˜ÿI>¯äTYí8¥É üO’µ4·²¹¹!šýTVjɃ<@jøÔ–ô½oÏ·ì“'ûÿÙC×wÝzîÂTU,î{{zkY¡X)ßñ'5­l­¸~·Õâv5VIÝvC)`®Ç8¥�v§·ÚW(y¼vTì»ÈYÈ ü©¤>íÄéõñá{D¡RœËée1JI›!ðN�¶†ÌŸi«l»£7«ÿ|ã1É 13ºë¡¢ãúã/ÛÎCº'°ü®â'Äæ§ ÓDÃÕhw~íœ;æ7»ÓnWÖàw‰oD°:ò±ƒbX:¢Ý°åÄÔ×F-ì…âk´àO€%ÑtfT‡-–-~v­Ž §Â•ËQ9búò�YUàÆ‹¹ì×ôÏ'«èÇsl»M¤•u�)\‡W�~ÄŒâ'ª¯Òu +ЋBRÇ–_kžµ ê±’—˜xH‰É½â@òãÈýßù©¾Þ—†r…Ÿ%ŽuõMᮢþrS ÍÛ/Ýz™aÑzq›¶xÞuÜ�£ÿ°_íJ’ä6П¯èèÁ7]Eè dèü �Ö˜;C÷ÿÊL€ìêÙÕy{Ö3]`±HH$’Õ/@S†ß†Ô“r ´=ÒÚ=¥Âž‘½6«»ïXF[VêšË‚mIzwÝ�†§Hg‹ônd‘ú� [^týÜ J¨CÄÚn^{Qô=|OJž:æˆêÝSŸåŒNáíw·TåÛòÚ¿*– „{$Üx¿6s?½„á§Ï~–tŸJUÀHÂ9©�ΙJíðÆh +Þ&y´ùf["¢ã}Ìý§³:üÇ|p eV÷�E‡GÝô¶ùÕ|®äb­pnw‘àé‚U”JV?Üó’ØÁns²Ž< ;€€eeCá�í€!øÅѼÁ7Šjƒbœ[æ ?j6X-Pëç2Ñ™¦(ºæ_C‘—D«Ä6Á¿¢Uo‘%2«K ÏQˆ>Å»T¥”•½ù¹P=´ªbxŠ6ošA °ì°F/ºONp)-�p®Þ†÷À/�%nÉž¡äVÇGéÞfœ ËÐ`ñ²Pf¸{±‡zfWc†Mg`i%€U†ÚÀŠæ‹~Æ UU-ù’”öº&kÆÔmšviÊE5­Ûä 6}”¹Öò¬ÊHÍ +dõ�é¯ +Rì¢#&šÛò¼Šhù#K�%&º1åIæ¸KÓÇÓwÑÉŠŠþÙá÷—uBËOÊ¢w¾à9§/¹7vÝ)þX, +7£¬g˜÷Ù@Þ&Ç6–/ÓÝ·m/•¨¯B`ë2£-ÂzÂü€Àc8Üê!¾H<'‡™,mþáÏî•>o/çrñg”}·Ûï¿ÿP¶ÅvyjMoœÜ# ýeë. ¸æ­»ß5žº ø­!»ðØË‘]n=e—ÛOÙ•GÈÁ�] €ºŽìÊ!jœŽ)DËEv™ÓfÈ.(�Ù�ì25ÿ§ì²æšÅe—yGÙË¥AÈ. uÙeÕwqÙ¡1ÇEvÁîýÈ.XµoÙ#·‹ì‚*™õÈ.j”zd—ñjð”]ž�“yË +Ù…v¹òEvÁníÈ.Xù¨®ÑEu$×[‡âÚm'×RèCo-UhÈ­UjkjAi­©Â©5£"CiMˆ ­!Á:k0O™5Ä0®²†ŠØEÖiíæÊV÷¶+�µ%›^û]^5µ2WW5°èâ*ÈÊyBK¹´ª¡U\\• «ƒâÍÍ¥U\BYÉkV‰œõãëWÂn9i(õT®×¯¤Ô™Jð �ígp[-Ñ×ÑU™uBBµŠyDš,0 +z�Ï Û'“åŸÒcÇì~_É4¸e‘ cÑè3uuXÌS‘“t¦ÊÀR”رÜfñ²Iò9{sENP:Þ +ý–ByPtó­S9èC¹ìs%B¦î?‹ Ë!ø Žæw¡E0P·˜ÞÑ‹ìÒ|24Ô;A @joµ-¨™Bbdi# �æäï*YE²ð�QWÔ8ú8õœ«±¥ž1CšÉh»À‡Ì*Wø˜£Ö' ¿¢‚±%þ//¿.ýÛ{’ °^;À´y–gã¹ø�âôÚQÁàËŪaçP¯G!4¶3—’B�+çBRi"±^mCíNzÐ/\™ŸzÊ$“¶I’S%+„ãI�ÀE ]¼ écL«·*êôÆöSØg0_wW]bpn—Il'&Ó䕳)dE tÆ3÷K$þ—"l’íDì'[³nIB¯¤>¹7¿âë4uÇ0¾kµLød«åµ(Q[žšGaèîc¾á¤·t>R{� Ǽ“ +;Ñâ1iÀÿÙÀƒtwnâɤüšß/Béž7;¬wÉÄÿCaÀ@Öq@6vU ,cáñ®ô{èq(ÞË£YÛß³ÿ„+Qé=³i0$®¤rlâ.œdº°õŽ—Gsu’¼)&V?x¬x/.¼ d‘C7§»B:ÇÌÆ_É’é}2�#\¦ É¢34M1‰†-�æÛwç¡äšt§PIµ¿ž˜_ŽÈÊÔ H“Î(~i¬$v + •µ�9ƒòò4üÞ4ÄÊ@�Ô +Á^$W‡Hx¥|Ž3nÏÓH¨ÍËD{…Û em5_r„S½­ÉûæŒÜœa F£�‘5T8�·F”ÿ6ýìXéÓÀÇs| Xú@EùwcIw,ÁèR²Bï!*k‚Ô¡¶ÀŽJÕ笱À™‰#¬¦ITáü‡\ƒúúiÉ(¡ï†>žCûtÈï¿n¨säî?o�U:Ë„³ºåà^ï—k¢\[Í E·ViP®ÿöö÷_nûç·tûãÛí¿Ü<Ò–Èí¹]B}†®oŸç"Fìrpôй.Áú<ÂEx³0áܳ9E +�¥qñ,YÓ2Ÿ†>®C;¹Ï¡À°-úË>Ü�ç ø= _‡þʨ;koÒVÔÑÈY¤j…c`fŸ³ºÐüô›¯áÓÐÇÛëg#Öù´ðëæï—Sc¨÷\Êônp¿Ø^A)ÍÄ‚”�ÃjýOÎøêÛo>´šM´|Á¨õ©Þ’Ý7u›ÝlüŒ¯C:ã峡9 çü£Xýœ3z»ÚÝJgÄPJ 7ÔI¢o z‘õŽ�¶Zò�à ¯C>4úËgß-üºùÏ9ãûIØùbÞŸã/ì~a÷ »_ØýÂî_‹]ÜHmât»ëñ¿ÿÖFÆ«êíöÇûï×»+rÿÈ£õ[ÇÃ(—«ë=?†›n°Øó†û+ψû+Њ—�C¸sâúªË(~0Þuªó‡ñ�«á0+K1€]· ø>V®{62€ õÇ€ÊÚ›`ÿÚöþÛ+¿µò´ðnÂ_ÿ2L,`ƒF¾-¬…òÒ^ðßÃ'„ذ†³sòÊÅxTä§>FÕÄ…Ûv£Ö…Š/!C``lÑ·9˜X@s�yŒvƒ^®�˜�ÙìXFÕhœüU¯XT@MƒfÁèݪ4¦f$šc-¾Ï;ÃëÚ5Ý A.-½ÈöÃêsäã�À #€þÌOêô=!äS‰`Öp¼QµâÁãL%y§ f¸S%â ®=× ÿKÓg#1œÆ€ NsqÕ©tÓN„3àS´'5!‘ -Œ”!Ô÷ÌU g€¯iðsr²4‘YâGQά5± ‚Ø4©B +¦@r°zÉ4fÃF¬¥]€´Ç Š@�X4°«Á¡…˜4�ÐwBž ¹ðóÃb-§ó„F)ÄÊeÔ!³0y@ã*Ú#MSÒ¦*g©žÜ8€eVðPW¸gÜ(=G‹ +Ê%’—•‰\L9HJ ›yF¾)|ƒÈÕ<4sMß©4»Ø¤g¡^¾t±I„3EÌãjp°¬é†b¨›žÉ ŽÆ[n÷Û$@¦²«Mq¬'M[vD�)� ‘�ÓuR:y†% +fD@x�bOö�€d‘Ï2œš_½‰ÑXÂ~¸c(²%´#•áÒÈÒíM¢Q¥*ÕàP7ðQòºTÆœMYèW¼Á^B2(ÓL`‹3Eh‹( +ðÀðŠEb«›ú±‚{Ϻ1øJ�ŽÁÈsHë€peN:—¥éÏ(&ZSÐ÷“P‚ÆU/ŒNÙ€N +­ü|éì¨ãÆc¹�ȾÜEÚb Ü(+<òDˆîtý†�ƒFûÆW"ÁÔtã9PU·€*È2RyÆ L¬Òœk—˜äÑ‚Ð+•?Ì­h¹²µ­J�:‚©Iš©m'jEDC*;u\†+ò"š…µ™¤~tὨë)EÉD$Ó8$_s�8Ø®ÅT�hùr£âkЩ¨öÔ®Úèžä£âDž:2ÒØÑi呆ä¹-�ЖLF}“¸¡-‰Áè>%AÐxSr¡®1»Õ^ÐÖ4ÛÖ¾«ð6A†:ê�µ[ò,ŽR+ñá\°"ã»q4RVø06 _>Õ¥Laç]EPp˜ �ayN� Qµ“î +€‹F [­äœgÀäÛF,Ù¹ Ý=pY�v³��›µÈÐeB@Vp ñQæ‹3ÌúÂ-M�:+�í»u8Û¶këÉ»±¾üóŽCŸ„ÜUâ‹iÙòP¨/1u±L8“…fîI��è·–f:ð jtÿ\2YJCœõH(ð‰•v?˜"CsÂÝ*§‡ÕÐ!è¾)åþñ+A†”¦ó¾bÞz¾G­Óïf<ÏÎcøï{BG<º_ð�ü­{YoãM p³8¡–#®8ž-m qk—¡žçŠxŠM›o”ô=K×"ô‘üVD8�zÓªKA17;‰E‘Ü(¬®•šÍO”afíÔå¨ÉfÒ²\£ý�1ýÄ ™³­C¡ü!®Õ×n‹¸0Mл+Ò8TÐÖ ×Q\á¬öžíÓMP~31埒\ C"u³Êbj ¼Ùôx¶Ž� ³;‘˜£ˆ¢[tI ˜‹û“L£`¡‰²ªøµ>gip9'»Ì8ný�“cü”À×âqVžåe§-¶�™e*Š ™(¦k‡FŽï'NHy-œõ`Ñ+–Ll†¿žÓ>Ðôq�\ ßú€‰ÀaÇû™×*ÖÓD–sUÖšÖ´}°Ëç| í‰…zï‹ÝÜújƒð@�ÓüŠþ¯¹¾ðäöïa¡½–iž•bÊ/ªc¥²BÌr"älò Q9ïB#îªl)w0±VO_`¡Íþ´ *·ØÅÙS«0Ò²y�õÝŒˆ¡aÞ½º¨·×g3c¥ ·¯Øw¡-«Ÿ8ôˆ'Õ+§Á¢y¶ kˆkx^¨X§‘³K•¼â�Ýœ|2¶ÐFÓLq‰Ú·îq>Ç ì0Èp$)©F� ‘B•Ùò>T�ã�Rˆ«$Q,¨Áç'ÎEzŒwš°€ºæ±˜G“Õbôo~m6˜òÁj²%Š�À>Ž«ø 3GÏjj!å0µ³<$d{´e§¶'­¹5»ŒßàE -„m2í”cÞª#Ó/¼BC3�8­ åÙTàXaßÀ,·äÜé˜ÈO|¬@kEå¸;¿…¸Ðï!–JÁølÿ|†ª…… RŽ&e¨ùbgcÊK ÅÂgÒûZùF þâÊ þOº` 1í‘AäYY8XÑ1±»Ž‡Þgº»Ãá�¾šm¹Ò|Ÿ>Þ®ŽûÎ7ò¾¼†�öȺ¢ÑÚ2Lù±\HÀ@6ráµCv«Ò„Í'Dÿ›–²&�Ç{áÈÒݯq": žÛÝø×=Ð]øþ�ºÁ2FŸ;òs7ÒnTó u–ï òœþȽÃwþKöBÇãhäzÔ¥ñ‡9ŠJ�);ÛÈaA¡Žçäh}ƒ¼b÷ÀaÞH(’訸@�+7þþq`’Æ}š$î‡âç‡{“aêðþ÷T6 …¶gw¿™!><@Ð�¢U˜¨#ˆ„žáðí­¨ÌÒ¬4ÐytX#}Zˆ‹~€¤´‡Xʃ’ð R’ºó^Rx²‚[È}#lZE¾ @FLl¥”†�XD/ÝO÷ZX˜*‘Ï”  ¢­Ö‰µ\%VÇ{å[J«Ë¤l+ëƒÖ8b£[…Ø4kL‹¡ÆãN]²$hB®.Ï_ô¦eŸ'Ò‚|m¦³vsÎcl•›qÙœžó_AqÙÅZ™8ŒS€×Ô—œ*œµ,Ëà@JÙãÌ  ½¨fuX¤7µJ�&8êz™Ý¶D{d]óIC²¶²Î) ¯�žÑéÆAqâMÉTz'²jáû#:€Ûòü%•¨QȌˢÔ@Ø©ÑÑ�2.CÆŒECš†Ž(›Áâæj³)XÕâð¸FH•lˆgT¼f9LB#³·´'í:ŸÎ_(zš½ÑÙÞ©Ïúß&}V¶�­Ú�Œgª¤–P×àb" l¸"r¹Óõ“ð+7«D&6È^#-Lǵ@tºíZýbI•vÆ‘”µŽçˆ¢¨�U\+§û™zãZm„Ù­�B7ûš=Ypz|ý÷?xìô Hꢪ=˜¶ÓzMô¨™�¹³‚U�ˆãhÓÄ`ÀÕ•VÇØ‡IïB·8oIF +Y!†³ÈÅ4ÀXZ>Ô¶±wX"Öß T帺2 ãú„Ρ Ê ›ºÿöc©ÙÑÌø´¸„¾Uö¯­f¥wÐÞ8U–mi¿³�¶š‡§FxhŒß¿D*ZUœt¦îÜòVDƒultéëŠE "©4‹ذä Ë¢çw<Õö‡Ì_©<ÿGv¹cI CA4gl ÏÑDzå˜CÈ*H`ÿ)u«$O3DÓ¯Çm=½O}Ú[& ‘•Ð8ƒŒ²—XHÃs3âOŠHó˜Ü ­ZAî9×OTKðGÅB`©9½Eîiýº_Ù»i©�úœ ;õ»¿¨!½Î'ÖÃ%Ñ)8>ÒZÝljø¨é±ª9z^A0ìç—',…š_Frq†ªÂwÃQ¡È›n'|'jêZË !œV–�j–Y š°8ži©¤št¤�4§E\U@Ç¡Ý�ÂóŒþÔZ Ñ I1+„Ê7˃š¨ŒMXmzóûœO¾[Sèr7 +U-X¹ÀêÈ¥¨& ¼Ÿëî4§V;¸GÇy,VTá­g³w$(;׳„Ãûë_j5.Ðöz·ªe¸ƒKoÓ±Z7'LãNU¡òfx4ÄNCGsUðmú³¤b¨²‹Á¼÷0£]Ö½ÛÆN×bµÕÃ}Dtpαà ïAët-ÆÊÃbç +WjÒùZCË"‹A a +Ž#jrzŽŽnP‚¥uœ¼¾t&êÎ`ŸsŠ&‘¹œÅâ°u8³¡+²ò ̈™tÿO wè³­D�` t5zˆâ°•‚¢*«”÷±ƒ0«EgÂÚ­&I}A�f¥2ñGÈUC“+£Y¢Ò>pŸŠ`4óØþÕŠ™.‹%5Åi'F:oŽïó…ç…$¬×±´è'iÝXõŠxc˜ê -_3§ñ­xj±8èL׎zUE¹ÏÚ Ïg[`µt0�]"ðZôO¦ØY ò~ZÌ™�{Íuƒüú…‘ñÞ¯cõf�dâ,–@“–,êíÔ’ –çô@9s€á^ŠálVå²b¡:H0uh±Ž)Σ7¹¹`hůÌaÛvÓŠýyႇuC%U³Ñä „wrDqh÷Vú/_m쫽>ßÜ ‡ÃHa^ï5{ý[Î×[¡÷ÏÒ�×§öìCÓ»•ÐÒ Éu7|_ij°îèY÷/ú“âd°Vݶ[Rý. ¼Ä'B÷ÏŽ�È7>rùÿ_œæS,Û„K@Þ Që‰õØ9`m.}w÷µŸaÐ[jÿ?ü™Ð x•úñítKØjÒ�UiÍMc„�¤õƒÃƒl‹îà +Dƒ7¬h­Õ­ñ:B¶æÕŽö½ +·9Aa‰£ÞéÝe)•hI%^_D�ñÛóönXXéÅ:!~%Ä¥Maç®æ'9LñÇyŽ>°¦š‹íŠp #Ð#‹+û„ÔY)}؈˶d» %¢lAÚ®öŠÀmz±Â´I¤�ê¥Ô‹¦¿rKëNçu|�g,d»¦ŸÜqë÷—_ÿ�á¡ÑÒâUšüœðÂÄe™öPê/�zÑ&eD±<ÌaÇú]—wúÔƒêÑþxÙd¹ „Êõ¶Nà7Ö*m¿pi ï §U¶‡n8 Ü— ¥ì?—!X!Êt쟄¶ž÷!uú>Œ|æJ#Ÿw†‰H=?È�ò®}Ù“:äüòF1ß|ûª?D'h} endstream endobj 120 0 obj <> endobj 194 0 obj [/ICCBased 87 0 R] endobj 98 0 obj <>stream +H‰lWIŽÉ¼×+ò• w�õ* +˜Ó@tÐ +ZÍFü? 3óȬæpÐ@uZ.¾š[|ùÛ×ã˯_Ëñ—¿~=_¾þ£¯ï‡éïøþúíñåÜúÏ÷G9ë¬G-~Ž6�åíì­cÚ¹ú8þ÷¯Ç¿ñJ™~ð·ówÍ\¡œxÁΨ±?Ã*¦ÕôÕï�r˜ÍvX/ëxêþyðK.RN[\б¬ü¶üÙ1j;g–·:ÏYç:^ß|öíñìc”ð‘ WXwàråý³Öù†v¼op¶æÇýÕ¾äÇk¿°®µÀ•í·MKØ^7Ÿý½àæßñ¾uîúþý£7=.o\/ÝÞÞÀî8K\ÝŽg;½cÇÓ–�Ý*öp<Ç£¡„Ä逿ÇQϹâ¯G?ò´á8gkÅÛ1Ïa�+ò±Î6*÷jxÃhQ¥Áøl„¬,.¹±Ÿ-Ö±Î^›v+®vt˜†·`Ú†µvÜÈö<­¢ÎÃóúõ€åëBé¾Àr¶«^E�n! xk†ï@ÃvcP`SÛÙ½Ó•/á‚ÿ„�¾Žv–>ùaœ=¸Á|:ª�Æ—“¨x–—ò‹õ]l4oÕŒE¿‚¼Áë1ï8¿b` +#§!Éã,Á�­�†ÐÁGu•<âÈ…`ÿ˜Úzc|ßë¡ïF¦ghQØ…ì·ÆÜqGd÷‰vF³V¼ +kÊ[ź g =F»²Âd96Ã:�˰µ%º¬R*ÈBè¶T/,6äqÒºƒWÛ9Ð:°¶ÖãJ‹¡üø1IÙŸÚ`6$|± :�`Â?µ¢0PïºFitrJ´{+Ø»6OoêV¤¯ 7gYMÔá, +,Ú�ÔCÄŽº†Ûä�sÎ?»±¿Ð ú{ÝP:"wc‘5µ¨±ĨLÝ0«"F]–“fn˜.êuݨèDîµa Š*àɰ£a¦ÚÔ˜‹P#+üªr$·«J–ê1ŽÛ+¡×Û)Fûü÷§Œ Ä’=h 7–Â;#åðêbùƃŒ?ÕXèÛÅV ²ê2’DGSçÞyͦ§±‰‚,Á÷ÙSQÂJƒ.5r"÷€'$@n¾/õœ=~Ý?åË\†×¹L¨Jž¹6no›ž—QvG©‘㽉BÓm´®[¨Â\w†3d4¡Ä&$$<ÿBùvA«â…�Ox¢›â‰Ö#ò¹„šHÿUL˜yÃÉ©C¥RÌHð�áAÚäy•ùO7òÜA²¤Þ7 +Ò÷¾Absï.J´mJ¦ˆ€}pö¹å:Ú'”̸1(t �QÁ‰¬4ɆJ@ºÂ&¡f¢?ÚÐDqsÉ„É4´„’+û½n¿Îùñs…ÏÂä¡Pá 8·O£Œ±8Õ'.Z�Ãä5ŠÃ]µB„V”Öé¨=4éXšZh9µØ°hæ*•€Ù‚…¢KI G[ùôlÂ. +¦¶ ŽÖŒä3eVq+‰Ûª„6ðlð„,^Qz‘ýQÖ.RD‡Y] ÷ΡɒuÓ…ÍFáû1ÙûB¤Á™”%<À³’ £ìVvÏâ.î;G9g|ÈzÓ¸Aï¬~Eä‚ ]ŸãÆvîÕ,ŽŒ•ðCJ“Ù òŸyÖ >áü¸¬HªÚyÝP*`½19” ‹�©©àcS ÉcÜ +Nö•“sò9&ˆ�•Íhmׇ¸|c0±MÍÌŒÏ +1:ô¥d‡� bÏ6Ó?DºõͳÀ„ØS–0�Fű]H%ÌBys{‘&(28…ñ¨#ˆŠ4û/�äM��`Mˆg«™jƒYí«¥ðÈY( +'g»å%½¦ˆ/Ø0Ü�m¡�ªi'w¶²Dj¶RBˆ :^•ÇÔ•yS*£^ @ab8!x%ã•c»�’ŠBÙ  ‹xöƒºˆ-óÎ×?(dÇ8:¤c<{ä6 ¤…=5o#\ò8¦ F%;‡L­’µžR nÙÛ¦2Þu (ŒÑÆ|„OUŠV„$œê£Lî*%ŠÊy5J«R–ÍS¾u£d'o^�±�ûÏmcåêµMÉ:¦[æR¥El;¤¼Ù#¾.üAœCÄ‹ü™‹ËXþ £ÿ‚u†ÛakïÙ<±Cx¤eÐJÆÔáåBÌŸ<߸îyšüÐÁT‡ÓÉŽ°L�¸ðŒñƒ:D'Mßê°Jüb¦(ì"éd ªh²ü‡ðÈÓ•÷=õÔq3ǪGöFäH¬•uÜg"á»ßˆÕÄmkꦙÕu ’yâ{ŠØŒ I"ÖÓ}ëãBˆ3_DôŒG7ÕUÕ¿.mÅâ,yÆsUu¡Š®‰`•äÀÓ‰eÎV7^ê´dN4ù5ù�kBm”I%ö²9dAÅG Zu[³)ËaÁ)y-ìIé]‚#Ö©/‹H`{iX„Ä»2ç—üÆwÒ�Ç ç÷úýAÂm¦®• ½†å(ìtëÜÅäÔbñÏzxYef¼h>¾_Ó3Ï©–YЭ¹€w ¶C]�sµm¥éþ¶>m¿¦NŸ°©ôÉÁ—ˆ’­ô¯@Hò)4 + �ØT„8œ±äYæ�0Ž­jÙ<Aˆk­4QÚ¤õ[›ÅX|b9.T:O !·I?Òåž騂ÀÖ1€JÙ å8©¢Šƒ¿µ*jRªõ—~Æj@ðF\ØBÒÅÊÐ2±UºF¨o�HäØÀjEŠQœ?n 4ˆUfžI!Õ-é8åå,K<ªWÐ…zo(ójÒÇrŒÓF/ê˜3Ù³­è´E1@:ÔeÆ¢²Z¦Ýdê/ð¢å’!Ùó>hÊŽM`Á¤�æïr�6¾TG¯_ ª^v”­©F¡œ� 3)Þ×TóêºE5…¼Ÿ&‹ÝY%[¯%ßH÷¢½ê€†oÞèÖÕÄM´ôAôTqTÖÈÖ¬w­¹üA›•ÝÌ +j…ÕGo º×­ ãÈœªh]zùÎ`Ÿ?˃ ì™dʃBö.P¾“¢©ð[]â XÇ ŒF…ÜŠnX«…\ñA(¤˜—ˆQ Q‚Eè’êY¼\@À$xÍŸmí†9.L±`q CÎèÓîëóë¶^ÓgJQ,vè�QÚcÙí•�RQ¶=³ê º:Ž\%\Uú'¯CyMEá(ˆµ·<åµm|^/L£�Uªü\ •JYŒ�Jª†—–Ú›ð�÷¬Im‘_‡×#l^�,\R<‘‚=V8à5ë™ ¶Å|L §&0^"¢‰NÙp`³14!žŸ¼.ÚÁÕSi"%ð cfW´�ÆÌ³§c27°ŽBÙdÃ=©µ8èo…À‘äübfYTë¯IhnAa0 U£Éô6ú¯›+âÄ5nA¤‰ŠžTÑ6©Gl¹ù± Il6%ûQ¥šW˜A{®™¤×ÂÿÖŶšNËx +¦æeê»ü"9Ù2ôkÓÖØ@.E;Ì×zïY°]�š>–ä­­�8·…K¨„­�‹¦ÑÓ|ÕvX8—NtͯRóVŽíXrÓB“(¿_aÝZ�Bê�•ƒë~ºÇN¤&+%$Ò`ý‹õÞÌIöÚ–ºS_9{@ý‰ÚÁTÁ€÷‡ÔmÅö’g”´i~O³‰'¯…†’Äë�kj áºE%äâRl&+¿� {ß`²¢·réÐÚ*¿™½:¢Añÿòoyê_ò4ÿqžæ[žÚ×<½¥‰âû-Mç§4�/iÚç_“&Düõùç[Æ ‹nëÄ0Ž¡7adöÐëš5‹ cù|Yÿ#ää ùkÈó¢´v¿¬ÑòÙͱh¼›EÜιŽ[+ç‹kr^Úü]¤°¿Ûäù÷ý_6„Ìxß�B˜ïv½öƒG×»  óš¨øÅ„#ÅÇP¨ä²ïáXè>㼬Ð3JÇ�ߺV覹0ø2BSYîóÍÒ}6·ý܈Qeð-¹ÖOy=ΑW˜w†OUÇž ŒÛœCóAåïµ º^È— µÂÀß·G&ÜoŽ;¶8(Ðc½6eÅÑ#27¢YzoŽE]3¥\á³)‘)½�B–~Š”iõÐ7á:84$s¿‘rÀfzËxßâÅo"D­ßÛT„˜ÓW€ŠÐ·x”¤è+-§H/�œ8+Ÿd1)¬J'+šÔ‰)SËà3J(yJªÛòºƒ†Éxéõd¿@«hßj<óÚê\ï;µÇvúVТ¸Äõ¡S”^¦—R¨UKöW§‹‡7¡³V«Saœ`³¦jVÿƒÿ÷Ð.[»ê  ·«qö°ÔyŸt=™&fð‹½ó÷ÕýŪwönRë³9'Q›\¿êê­Ò +Ë”r«aTžå9Ê�4JeM:C=S×»Eåˆêm‰dáb¾fãµ¶Ú+¸éLÎZTÕ¨iœ65yR uôÏPä +Ðu—�BM2K^ €TI%îÁ Oµ©)HsPõ &‘ÛT-�i”Dwf¸îÀ2n5ãZ"½ò^~«¥¢2èÐÿ áï ¡Resjè qõ 6Œnh8K¨¾ŒOäD-Å Õ°W$&ˆI¢¿ž®óI|¢ŸSNÉQÄ~¦WšP@CO;Z‘Ù¨âf +tvä±á§GÍs’We,“d¤¢æ<ß—½ÖLÃpí1Ø�¨Ô´ˆn¢í*D!€ª}º¾¥éÒÉÞÂÜL×m†€ë ‡®a7YÚÔyŒ@ŸÚÖ—´Æìg–óZw ¸´¤!…¯¡6  +qÔg8Ýó§hºIÎx ;zqŽÌ& d¶_ئ¯Ý'”®|Ž/2ªV꫆ù(mzǺì7¿ †ˆiX,ZWàuWÀHwtúc$"¼Ìæ p*ó•ÙŠbßöiÞYÇXèYÄ!fˆ_?+Ñ_-6º0¨è#Ôì%ûM0zVx犯±O»äŽªMè~%óÒ �„bV"fãEKx&Ö£òÆ790ƒhž´7îZcePý!9îƒÒ°åöǺÝáŸw™µÎ> â‹;ΣŒòç–©bŸ¬ìfAGÚf—«ü�ÞåFß4bªé£¹Wõ¾CeM©áųîfcüéÙÌÌE(8ìl®«1`2qÇÑã[lŠ9ü!û÷‡ +P+Ý{m½b%7 Þ…¿¤K)Qªß-"îÒÍI6$¨ +xsD+¬wL˜ðª!dLF©n§ûܵÐUÛl2_�VÛd@æüó?¹]鵉ì *“b¤ê÷ÓRy°YŒn+rq¶,ºHì@í¤}LD±PÈ~ûÒ�¿Ðaà ßû�ÿŽ;ÕbÍq°�ŸQfhRÍ‚‰ÿÓ]-Éqì8pÿN¡ ÈAàï<ÞxaÏfîñ�™`wIžÙHD“UE‚@~¨ûŒ$\Šp’¯OU¨UÏ�ú”î\Á*=‡’åèçæfòü}MVzgnU:¸ô“3¨>bóîO1ÙD]›¡Å vâ4ë—ìéããѶ¹ª‰áó3—ìn‡MÒ9·çª�€¸+H>ññ ÌŠºÙ{Îe¸è£\EPƒÇ¹WÖ¿ãq�í+H‰›[|¡½ÓŽÍŒ{#…W—� ÷rS.l³"P¢S˜�J}ðåhÕ6�è@�ðìçZîÃ%HøL%±À'¯ŠM‘$E ¬t<¾sÇönäAâD #æ¸tÖŽ. ™ªb^ŸJŠ6;1„4ÓIµ've^¯²’5»ùË +kÚf�9Á†ÐÚÁ–™šæ.| æ`ÁÀ‡ âFP„ +]°Ï)ä2ŠÑ�ý©¡ùANtP|…bðlbBÚæùP +�ñR�)˜&µ£×Mö 3J¿šó­¸ÞFG‡lôUŒ!ºŽ,ƒ¤ñb6‡,‡0µ#ŒòMÆÚ­ä™ +«ta>tóÅêm©6&žõ<ɉì}KbZ[8:(óCô¢CÉã‰e¡F‰ƒ«á;K�ŠvT&e0äS%}¨ËÇyMBHès§(¯6Rí¹§iËRz‡ê¾Ié…ìëÚ[÷½J�Vq²´ÍJN¶ï)ý¶äé(i +#n +PÒ‘0Zd43KÚŸ ye±«6³9‚)nÕ€zk‹­-Ê<jæ¦À¾ :&D¾Aâ^áâËkļ�;ÁßYÍòñߟÿùB7Éb–Š†ëƒŸyÑM~6Iz g=–X‚}ûŸ[M +÷ÎÌ�x»o¨˜z½ÆœBGêÑoï|¿º>^?´ûœà‡ì8Ç_[ tdäÑÛx(�Õ¥4 ŠïSJç7kïý2ÒÕäê?tÉ–>Æ÷ò¬¯>ž¡šK­LaÚ@<~Nj%î#âç}ïçz‰–wœz<×'ÎgB¨×ú™ÈûŒÇ�ÇÎógµô+ìC驲Ò0ÈSH74Î#ìœ Óˆ¯Ý¨s¯wiöÕ#B½Vjw\y¢u©¤½¾IXÝúåvé4>K^!%çÁ€á¤{M~�ÚÿúØ­Â�Œþ½”²iðIrÈ«2•­¤ð\©Rï³sÖ˺ùxEùϯ 9³vý£r{¼Æ¬—¸Ú +qq7xìó£S®ŒOn<Ó&ǦªÑ„“Ôr�éà©óR0M– ï…'6•N0p�:Y7 e–\ÛG”.{Ö-síM *A|ÓÈóY9´ LÎ'Ń™Å✃0˜j¦ Õ↫|xÑw~ʨeõqFÂJÝÆX§“sLª³ +¤œð€#�lµ|™‹7QÑø’ans vGÖ¹„'˜"h�Ô¯´~å$?i K‰þx^³Üñ½qÍÛ! +1D–��³Ûát2èûú†Í®ñùL÷ÔXC )OûáEtÐ+›0ˆµ¼~¡ÓŽbΡ9lîȯθAÜw"×Ééà>¢d Þ4J¦ag®+ö[ÿöˆ€/Qû,Æ_2}�UbÚÓÈ–à@½vS¤•Ó¤š�Aéü(òFÝâÆeõJ½t•Tü)¥W€%-´'·5ÊNdmåÙ0@àÆAƒù‡Ud* VÔC—õp£%s +ÁUòÄž ŒÒBû°8ØÍÎ"�†¼è<ù˜ç5>Z$4Ú./i¹™ð0~‹™œÒøì_zµ¾Ù½ƒ5(›�æ…/ȯ [G g©ª¥¼‡áàø`,—AÙ ­°S\ñÎì¨vùR¢Œ’ıIÍYÝQJY…O%Gí¨–x¶ËÏo8o-O¥çaPŸ_q~� ¨Å1ì .ÂO¯’긥j’ ÍÝ$/ ,ç$n*ö£üù¦M•™8tqm$3ï4ÍÁa›tòiÚÁ'×2DÀ<æ?s¹ò›zÝF0O}v䯛‹=ä…nÔ ö–›®tPÅîŒT +9‘¼i0i:*XÔßp�á"J¢À³¦(ÎøŸö!*0¦¼ ™²J7'¼M^&zu'üLr>6�(´Ñ7`åƒûoú'7¥1J80”8Îɧ”9ŸÍK0¦CÖ3pæF,eFf‡VÆã‹×jÍbËÒT÷wv†qÖÅ›©�*¸÷à¥x50‚jõû”øk]8ƒüGçhÙL±kÆöêê{ô)+g$\žˆ…8Aÿ!¯«ÎmúGBG�òj$|e\zùÇu€ó¤YqS�èÊ ¼à[ŸtzÌlÞHà7°ý£OFH9Þ.3j²[ò¼#Ú”ïoIH÷x«_ºgx‚Ä�ì�»¦”�ŒžKp`Wœ²šðiH¸˜p‘[®6èš;*àS✉\jà2ƒ�â +�Á û–××·* JZ7Bu³ï­ÑHöò˜ÆuK˜vjê´-96º¶«þ±{’NWÇc⺈v\†ÎAzŒ$£r™Ôz„.¬0›b]"u“ƒT?ð¨R‹¼·%ÒA¡à*gÒ|”'R¤ÞpŽ-- hœ1%„¹*ô††*³wEáÁE,kÒ“áxã|´cü5j!ߢÝPöYgc®³ØŠ~‘œÚ¤ŒDÇCvêù„ìQ56³žC)„XŒ3Uo–Ä;31“ׇ]&)!3u6Ú ÃAјÛÎÚ£jT»B &ïíÜ;aè Y¨,E�ôB ¤!„™öÀïd(h#ÈuÞ'~õ-áËõýTa»\aÂIW«CI;”îØÔS …\…YÀ !5‰c²R¿èóêeÜr¸ËC¤ä�r¬ÀÞÁ¦.·µŒuŸÌËòÓ�ØtêÈ|ùñj%y�ŸÅ=PÌPU|º‘Q¸à +¯ÝÙÏDêƒ<±Ô1ÔÕèyÁ1´M¹¾Ãl0èò¯è0ký·|ƒò›ô*}f~s«Ôͩ҄+“ªÈ8qt�G¦€( ÆÍnÓfmyй¸n/Š˜w~íÇ¿ß21žº ˆßaóÞˆ�²ÁYA€¿é+ò-‡¿þñ+m�è?À y£ßØË ¤ï©ç¶L«Â,,ïÅ0|þ;‹:µeâÊoš ¼™þúk÷>£K×�‡te§‹¯%v3AM¢C5ÑHŸÂQø†".¡}q{“zЊÏÑõ`MŽ«f œW}à‹¨^-ZfyXìøèÈ«#”°?«ËSÂjXÃN�¢fʧÀ‡Óa™/ ÎO*2úü•S9ÊŒÃÐþ�^e¹,¢Þ…™àÌ ÌÌnåhSB�eB;:´BÐÙêþ�áÍu_riýCÚðØn ¬´Qáoqþ„žœWï�I�¨Q]¢²T%m<Ô03Ïpˆ•¨Ÿ…÷ÜÐd÷À]- +>õlš‘:¥&ˆ8;�ƒUŠÚ È^OŒŽkèõ.¡ÝGM6 p¤�ݩͨÆê e—ÀSÉm¨¤ÆÜû‚m‚-µý6ûÒ¾«³]�?�¾*=ó¡—§ëÛd³z˜5ûZm”ú�P¨{‚¥Vj+êÉéý9äçÍìçú¼”ùŒCÄùZŸ4ŸqbF{®ŸDªw<~ªÁRø8œ!¶,·ÉÃS r§×j–u”Ùëý[ŽÏËŠrê"ŒMeš†çNÏ"†l¡-/µC<$&GQ'S‡�æ`#èn0¥ÑD“—™1wØGÅâ`ƒôÊ¡Ìn‘Ï•ÙzáôDbϾ¡L>�ª†Í&e¯JÑ69 /žº/bÄ�’èPLÏWöA¥[ ŽXÉvÎħNÓ©cpf¦Øm:R#~²šå¸(LM‰>fH£Í†ÇÄt¾.á'yR<›Hõ(m†œbäâ“fRâØ¼ü2ét*÷( ®y}¸–ѪðÃØô›²5ªœ&»kâ:¸$²‡)S©mº\ÏëáÞãêÊ…J²ÃêZIj뵑�zKzv$ãøì¬þ_AÈÓp áâ(ÎÖ5aÁÁª‰çäæ²�÷F»ËñyýŸ ¤ø7 -ó3¨ç®ü)¬ G:¦;6y²Ú®Vâžá 2JñØÃôjª½ŠÍgUÀY}rH•¿ƒ6œBa³[ލâç�€ÉÖ†”E y–É�~ “”ôëQIÄÙ²’s]Ga÷˜/ÅäXŠT$7 +wY¨Ôàÿˆ t  ÷kRչǓ¨/ýÏp[²èN£ORšñÀð‡RHºP›šwŽñܼ‘ky'üäËlÑ%ûÀŒrZÿhw¦¾ØO®Oæ]a}<ò ðu†ƒXÖ­Ý•ueÚ‡)Ѩ~FV!QÒÒcêMÏ£y!±=¢L¢2 7U© ï«9øye&iÍÅ�$¦,ë¤àu×Q̤™�)g&DÍ�¼}×[9Gâ+žb«Ä]51Ì©-8gîq„¤�Íäý»†)Ì`uQíÍJÉÞÕJc ±DµŽò¡‹]°}Á·C•О—q[1šsEÄ ˆÌwW©;'8¤´›Ã®"—9A�„8…Î.*•4ioD}°~Óœ¢-aËd¤4ûùȲM�Ùêõ™õBØj30@6j,§áuÁ’0»,ÃËt7Eñ´K5� ‰hÝᦠá$±e»£¸¹?¯—ìõÊ8±nös:.ùw!ŽR|À§«$ÙŠ1ÕõÝϾʭ¢U9ñ{A*SjY•iÔ�˜Ås¦x)B^çjÌ“‡ ŽYäáÙfâŇD<Ù«._Th%½©Ÿæº ÈÔ?�w;5Ùçñn†~¢Üh†ÿ비hÄ"œÌûzûÇ™[”\Ã˘Ї÷WP�B²PŠDª J ÒÀ4ÿÛn“=Ûâ8VÔ,Æ¿ï0í væßš¢âôŸ>ì}l=ŸaýîP +ø=æ|ýñ‘Þ�)’þí#ëÃ#ÓÓ#ûþȾ=ìùðÈúâ‘qãßÃÃ@jѨÑÌ¿Eô¾ÝÃ~SôPSo#1 MÏÀnµƒ:ƒ6 Øû×ßÞþºááxÕ�oµƒø�"ø"·¹œ|§” jÚ;h!'d7Üò»¶/ßÿ¶¯?mßý°­sQg‘‚“q*ú:Ø®œ ™õÁ©)±ÐO§úÀÜ'Ÿ(eÓH#ÇÆ»cáÒ˜(2«Ï»£¾üñû¸ýøßùó—?ü=l¿ÿçôBm’ +Pfàó qŽ8ÏÌûP ¾¥O—�>„Heð8ò~ŒÄÁ‡J9ehÔD 2OŠÀ *Ôý6kàöö4Ä}FGPëy(Rê€-ï;Å}�ÂÝÏÚæ}°õãÐû1t¼cY�_Gî™×Y··§!¢çˆL�jL�?ÙÓG(HÒ8€Õ-Çfß&îñ÷d�xPzº!ÀqO¸†�z¯!¼MÅ£§Çz wŒ²ëièýr·æ»!E°ÎòxabÝg ÜÞž†°¸6dj¹Bý§P��,Õk·vœµÌû`ëÇ¡÷cèô�}h½�µ{hÝg ÜÞž†BŸ:„c. K¢f�%~|^ÎKà8ìg¥ +_õt–zöKðóÛò!y>èKóc÷f9Q�wš ³KoBWäî¨xeÞD´v+AáD�õšöïû€íZ£k'/4†yʲoþ$}³æk`³öšæ<áö6íùï}Ù~Õ¹U8õ�ÝGéä#›>úh.¿˜+/æê‹¹öb®¿˜/æbx5_M¦W“v“†‡¾Õ; +=¨�€Í«[¨™Îè¥ÚÑ©ûÖ�ˆÊlÐa.nјêÓ“õÒµ×DR¡8bhÖAP�%ÖZŽhä+)€ïÛZ ð½ ¿U¯üò§s³ûÅêfŠ™\û6ðŠÞp…£p¾Œ(÷@ë ÞbØ(�Þ}¦ª¿é³]+0d\»�§Ã(W&õl$òª'Á¶Žv2É+*×Vyô:ÒÚ% OýûQY ®Q!œŽl¦ýÄê°£²'|ÔVø/´Æ¬ÿ’E±.Ü*Ó6¸íB:SiôZXµë'½v_‹4ØtõAaƤŸT£3½íYûâµ¥I½D­µÈˆ_Ù —eWµëìYK#˜•d�.4ÀÕ`¡[úÀÓh7Óiæh¬[êûÆ×—˜÷4\~wt ¸�¹—ái.Ä»›v(ÀDx*j \ØÝ¦Ö’À;¶Ê�FFf«A¦ë-eh™ÑEÉ»"ø¯^�L^äÛM‹MïJ§à¼ÀïÐ: ÒJ^¯›b«¸g«;²QVÜ¢^U– +Ý2yJ�Qà=IH8ºü�»ìJ×&$Ž–ŠÇ#óèE€u—¿Q¢¸ýH Ê ï$®¹È“©Í¥…™>î³(sþ+ùlE«¾Vvº–ªY$± +Þà)ÛÙjð£â‰;”}ÈAÅ/_˜|ðOÉ3ë^²î®fPK–a¥Kß6Ï�>½”îF² +V±1WŠÒû¬ì9>:—„¬xŽt¹EB¢mä (?]ëʈ%¹‘ž™zàe +"ëy‡ëw]¿šVÕ®t�SMºêjÕ£U5@7±«qŽøB¿hÃÜTJÌB.LÝCÑB÷ª°¬ð%u(®-û#¬(%¢ÑIƒ›AƒE‰\‘ßðj7äUPZfÖèJ¹#oO850Û¢p +ˆgw8•ëd„sÈjrKHrU?ðËó^åBöO,ª^áUÕ4´2M¸Êä.ˆn•óЧQ.ú]õ#ÄEèYy¾2›œAðm \BuK?«”’:B¾ÆXO6ʇÄEØ.�ïBõÝaï,EY¥dp@ÅþÜæ™VÅ\à‹œçm¼x÷_[™)ª{<íý‹ðlfPE’òGÓÎAfKó~ á6¡â£Q¬ùc�ž[¥~`²Nþ›nÝ1é↯5Ñý{¼˜{±k‹l›?Q£ZÉ&ê®ÐŽ0Ô—3q!·`‚•lŸd6SFÙÄÉDä°R%‰![Cô¨¦~·„Çvälf-å¸b4¼ Ž…>âú…ÕaB›”7‡�£jó4›³ ûn ßa¡Ã»á v ®§†ÈñÁZÓ6×BaŽ9aÎæ :Q~Êl�b¨üŽÉ{%ðŸ/ärÁ9âaÛâØÌUe| +ÜHËKË/ÌŠü͘>ˆÜ3Ä�¶aUp¨ð:ÛŒU>óŽá\kÍIˆ#,ÙÆ“�£nE¬ Ê}S�·»^cpÍÇÚƒÆ]¡þH=ú]EM[�Nâg#Ì€‡³[Ø»3¸�(Ìq†Â‘à¯U bà0„vúûÒ:!Àx~b•„$àpÙ¡®<Ò$)ÌònUã=UÅ G\)¥y¬–œC¥GÈÃi!ûÖ+XûNdHrÆy±Ç.úŽêéÝj“¤ÂÆ>i불6¨ñ_’à™ØÑ¥ì¯”ý•²¿Rö+ewÊËW~Š)´ÀÞW kV.D8¶œzô$7¶ÆFbS )œ&³ðŠF¿b�Ò¦uLõuÌy‹pº;5¿ìþRg�Œü€Ü“÷b�›;ïí»*X—båyæ·­]škÇ9*l´¢£ÍÜ‚�ÏÞ^�ä7æ‰OÈÜÓ‡êc T„’N$oÒÛ4YƒT‚{|±�ÉFÁ‹Ý{îRð†A \W/À� ¢ÂM@;�Ý•ú;Ý�7èYK¨¤„÷…—¼è‹¥ÉtØá3›[ìÁ÷Z¿65ÕØc’ò2ôøZ¨~í‹Zu>ÌÉ)Úa(‚X‡Ew(h÷ØBzžz–Qº_Çô6ì’�´y‘P´b$a/‘È+Å%žw¢ØÜ\m�EÛÃ}Q›@’I6¸€)ñj&hª|‰6Öa±7ej~¼‚KD%!lb"+ppOù“ÄÀ$ jpÜ( õ4±R™åm*(qù”öâ¡Ù¿QÛïDúR5¼Ê"ZÉ�ž °�ýt-(BbÇ¡Aj¡¢e.ÇÕŸN†4·¼Å�àŒ�_Å<Ù«ª¤¬Zx1—.èa¬S½>’ñ42›bcJYJ¯ÂÙFctøÌE"F™}‘ï*ŒÍâ‘Æoû©°nýUapMWæôC"Ùüá2¤Z˜f‹®%M×{�çJÖ"4:³Ö¡�.tõJrà‰³ÈH-:¡…2%Ž&©úv°Î^G#ðû)ç +õc”6H``ÔÊ ”)[�ÞDàa ã1ä o[›º-ëXÀâH‚c…)×äx mñ—”„}zãÊö´ +™U�¬¹ŠgØw §pý $¿*L z–*&1ª1€âZ™"/Ì�'$‰Ý"Ñ7¥Õ01^ŽmÕ<›—¥Mˆ2Qž«È^x¢D�$�ò9dV^‡HÃñú*“’´ ¥Î‘nÝd™"X:<ŽÇħüNç9¦Kd-ð8ÖÊÃ,¢v~"3•]�ï´ìP§ÉæáW:‰U¦1 ÅwE�f&ßP[–Ýq+`±Ì2éÜÉä|�[¢Iüh8q2(((kÔŸ\M1ÉꌖæÑOT¦—/×ÛŠ'žÝM×`¬ª Hý`}|Ý‚è„ x•·²Šg³¦ÐÉ*÷Có²9¬–:›UHGà¾!QDÉãmñB§MÖô!\£ˆ�¢8ž 2”ª0ëP`~ 'e‰È ’�$¹…²þ(ƒÿFø“ïÿ„ð,ñr(ñ&uÎ K¬uÖ‡E Sö¨jæ <ŽsiÎSˆíþý +—îì8ÿ +“ú`mG k)h·ñYÞh”‹È…kØó†w¶Ô¤FÏÝ rÓ`j�:»±Õ óùAy�K²4UËŠ9µƒD@ �¹RÎ(P@ ¶Cl÷¯+Dî—7çK»ÿ#ZW>¦t2Óו‘ÜÕ^ûî>ùà ­ºä úè�×aeZªD,R|2‰·¥3@øÅñ’ 4"3ƒC0.ÂuÓ¤¡\Æa‰€uo•e#$°\²xwÁ7+pjûŠPŠ×Q޶w‹£è¡ò”›·ü„0q·ÂÉçP8ql븱§àž×O1I/žãç¡ÚyØNaVôéöwRoNÿèȬírd’ÃÀÚrº¸I)aqvÓ$‹$X\)ÐÔsÍ[�ª÷æ¿)ÉJ?! ,í߯›ë‹Ö jýFåd^áªX8�düÎ÷ZP̆6›ñ(³4•À%û¦OíšÍ*¦Ô·KF%hÙ\BÐÎyI_T× 5Û«¤„=†.¾9=Ég9½É¯mÚŠ6h£÷j¾µRÂÈö5@m ®Ð—:ë`ËWœóÆ’1¨†1€q nŠÖYXH|¨ ]ÊB¨îGÓ0ñM’3¥Rin–z�>eöþÀºâ„ÕÎB’¦Ä&A7ÃyêvÀJc1è¬ÔÁŠ‚§%Ç åb½ÆsÌšÆD�±À‘¸Ä5b¨§ j¹¹¹Ü�ebÚdq ûå“Má +]…ÞŠÊú8Ó‰úäçˆÔö�q¥J‡ŒG@Ù¿†—÷äÅ#•)).ˆ�fNí‘ÁŠbÉè²L 2|%d®èÍë6ÁSŠLþb‘-Ø�ŒÂûEíËØ†-!«%‚¹V å�μÏö”CËFø#ƒ€¨‰A<<':Rs§úsk�Bª[r4²«­we;4uvùL=�Áò]ó=‚þÐÜBV¿mÖ6$'¿BÜ\¾k B¢¦ ’þòYÿBýqÖmQ2 ‚š¶‡Ýp¨PK¡o_7G�_¿Öl¾Y³ùüT͉ÝôšÈ(‹-½%Ü)ŽÈÐ&ñ¤êl4±Ü)™WÁ(Šáø$Ÿ¸"9’(ºüS›Ö/#ˆlßüÀp¬#�E'T.SàêÕÎ]‘­C3«&NGïv=[è'ÎïšEU<%Ô Bø8_¯eÏ—žë +®…qèŠaè.�¿4¦˜Ê`BŠÜ¥¡Øl™©ËªçðŸ×)‰^5•R¾Ã=TK~ƇöZ° Б/CÏó,R£NuQ­— Ï/�=Ú£¢ÐÜ.ìå{à‡³;~ÃÜi/æN}�,vãÖ.‘-½F¨Ð'®+F�š@¾`]Û¤É�%‚êO (�°†ìi×q~Ë’h…}ÆÈêí÷úRgrëKa“v{žÉGã-ØÓœïþÁNS°vTf%Ùõ±IZ +M%Ï —)Æä�¤lEþŠ9:­%Â5SÛŸ…1"ÁÖkÀ=¢ÜY›aR DÃ?׺ö7:ãÈ/ƒªRL³¤ÑIJN#å ÂÇÕ IOafr®ù^óâ'=©µE5àVÒ¹k‚ M+9h ¨í·”æY¬�Ïr™»ê¸�ØùN�!ÐØDT¤ú›™Ž™Ðeîþ¦:c/f!Î�oAÔ‚¨D×êjØ·l²¤nøl”¿ã€#ò´#°�¿ñ6NÅEé(#‹%l=®˜}‹ä¤" +cb]ã%v¸?ýðʾ/æÙ¥!vëÒ;ów¡GÌšö¥B„ÆgÛ�³¯™ïÛ¬lòN#Jñ°øX'°al¸:rËÎïò4Ü‘‡€‰�`¾ÙúÜE«oóÆšZÐê÷‹ cK7fóZý­Ü½5€ÙüY¹GTÊ­±i[8)9î—5Í®BS:ÏF߯rŸ+òüBþµ7ÿsµö&aV +°û‡h›r ¦ú®JñÞe_ìvcÊšÆßµÅ¦_zÙ\÷UW§d^�”õáÕL,¹ž´Eiiþ8çò6%|O¸�Gø×oŽ 1“#8Ÿ¶)?@iÜϬ̖¿JS¥nÈš1Dñ6eŒ´wˆ¹c邸Á†r/ŽÚT7/Ž"[Ô¢5e1.¥—ÂH:/:­u–ßË�� ÉÖèO7{Œ¡SCóÙ;ïÿ/–K{BRÊ÷oòÔ'ÆNíì(xßâ…ªÅ|�½{]vͳ.°‰­3•ÐVwÝÎ7ow ­,›l¥ž�I‘ôSâ„lòÓª$2XN…ÈÛ‘¾ï.ƒÛdÊà¨ò6[Å�G)s¥¢„$ÂdÛ‹¹töLÒê4ažCõ žžØ$Oi˜ü‹›l!›ù¬]…Ð{‰¦�AN¯$£½Ç‡yo—’;¡Šjš_ !“ÎDÎàY×|n½€‰ªÆ/ÑÌI°*§fªöÒ¥nò#�õÅöE¬}W6¢®]]jÀݶé)ÔÍ)ÖÈW�5½ ѹ‰<\ªßï‡ÙÀn›tí�„$L"L,90oÞ5>½ ÁU&þ¼È-¨Ý@T”Í�‘¦¦³ÐÑH÷#HêÎFp9À˜Ü€þ,þ–ò�:wF¯œ¼þJ9Z¦#±næHˆ3Iè“rÊÖ{…8¹˜+�ÃAfòìÙÛ²�µ›¿´£V6}ň* ×™üü´’¬báf0Vå±ìëÉL +eîXôÓofíÛT&§ÌæÙešùÇ�éj—ÕbÓ>VŽäeã’!®ô½Ä¿¸p)%å}óG£‚Q¢|äprF +Õº™H´“�bõÎçÒq¾òÎ]€ R’¡Þ`Ò’tœ"å3­b Ó +Rô�Çd;ƨ&@Él¢½Nö@O€°®üÛO�a¬Vg¬ñ‡É{aÆ[ õ]mÛ‡]VB{ŒMç‹Ã˜B“8üÍö›¶¸ Ö\™mM­èÅ•O,Cárž›¤ÝµŸã]WMô¬s´=1^ߌ;/l™ß(‘2’½qDglO÷bväÅ”žøib˜�âöãWõ´å7-nÖ8«þKÂ�ÍClôêC‹^WÍgñw& +_�݃ï9jF–Š]º†jŸä…þ§íxlŽÒ0ÚŽ÷¸®¦V‰ëPq|á{hÓ––\R.Fä¢qÛ ã£´ ³Z$€Èg�ÝrÛ¸3Ác»qhcw7·éާ³ Z ?m•}X–&›ë°-º¡ZC%Á"÷`zU�Ë!�m§½�}¾Æ?{ض+nµ—mqÌ!Có \=��Öºkµk»XÆ‚À7N¢­²k\uaË ’ˆSly^€Y>–ši!HÛNÝ&þõ,ÓåŸ?¦¯³-÷Ϻœo“ÀæØèø¸ájЂæAÿÀÆwvŸ"e*æ³dͲ$4 Ç¥3öм~P^û†®ÂhpäPŒi2r0Q茋ôºŠÓ´AÖP#åŽÂ ¡üñÕ÷�¯Ÿ-ö¶qóÆ_ÿüøÛCP—�ÿÈ Œ‹™…?_¦Â’Pƒ ¦S*¦”®ÊWlþüÓãOýåzüó—Ç_~zÅ»ZìaÏ;%®<£úÅ‹/|†^ˆõkxøÃ«ï±Ï…g¯Ï²eÓÛÆ_ÿox(¬$¤CÀÓ�¿ýǼ TûDgµÿÓ²“ØRg�ž£œêéËõï�±D]1;èßàöO�Q£ôjH9à �Dzð’)¡Ð”déV^v¢�Zõ^ƒÛ¬/K×£©ê ¡ú‹îõ¬jL„ƒÇ‰[Œ,ÌCÐã)þÖ³.ke;M MßkÅòLÔª9#ŽÝÖ}«m¿íZq[Ž3ee¢ýÔ|À¼Vvi~ëáh o“ëb:zƒÔ¼E�N»uOYIÞ™[„:‘Àg.ä+ÅZ}”]^ËÊÓ–¯ FÜmÅô&»ØdFÈâDý]ßUr8.«Dê�·ö�Ô @¥‡GN/£ˆ ‡¬ãŠ|`LÝÿd1~*ek…5SókÙ¸MBùý'«:^²F`TÛmÄÂ"ĉÖV‰}³«I6ÓiÊá`ƒèU 1déèØW] Ûf°‘uU[¥FþãËkÞŒY°â‚Õã׊ÌÕ]°3"¤|fà6œ +jÕé¼xìÔ‰Àe„« 0æ”gäÌ'€wå(åB—wKü�ÚÉöxºìdrÄîz—[`¶ë2¶ßKH£’i¬TùkÓuŽÇ:E©J¯àœ’m)®åÜ–=¹‹}@‘'¼î¦¼áyzx²ga¹v¿+*ú9;G™?{»a|ž«BxÝ5JSw�õ¯RíQS»°ÅÆ5VëB}1’½ø` }_\Ñ£¦ƒFŽe~¹¯¿ƒôb;>­É11 +º÷“•#B-ŠišdQx²ÂˆXzÞÁ¼Ê�/5×ÒòÕ?Ý™¨€;í#ÜBY_à2P÷J +öOD¾½¡o$3¤LB8Rp�v“q±ȆO¾‡‰f9°-Hˆss£ÉÑýtFfSa­ê|Fi%g›¢¢ }ÕÎ$e놋Ë«8ÊwñÓñ_Ô€ xц¬œÞH¥Í ÉïαX[À¶tªe§è[«Ð^‰Ð´ÌšàÖ^Æ—[^Ôå ÐFiDð¶U]oŽN�{–nHÖq@„µ/;ú`3šÕaŠ»dU˜–Qý<}Ÿ—9ü]°^N¨,z£,:GÝ=Ìeͧ–¯ D{··+æÝìÎÂ6‰”uÅPp Ê*u—ï±›/”�‡êއåHí€eç�;ïOg8˜÷ÒhÀåq8gK0Øâ¦BMæ„�‡aîZÛ|NSµJŽ�ÂX4¸ò~Üvs˜°²Þ”MpVQ¿œ…¹ÎF)¡Ç¦è7•@B6Qayø†, ¶Mlâ7 ."€sÅ{‰KŽ´×z‹�Æ/ÄYŠa„â¬JM·8ݪÜó28šxë†c…8¡�‹Âœ\]Ôz]t_y +Âe3Ž9zžËbi?Y¡¹.ö •O§‡Èd¬u¹Ð§9òrG Šï¬Î‘BSôaÙ\G9$]�/ĺ ÕcbH[`�e�ÔÐê\èæ�ƒBS�þÛ`êBܺ�jÜñ¶X_o@mt·«Z´fëkSԌՋ§D:K¡h«Ûº¢­(Øoɹ^Õn-�¨òEU¤ D{(£éD Ü%™q(³]ì7 ñµK)޶¥;»wîC¶‚£èþö³V½X°Ñ—>Vi$`Ò<,¨³ñár‚[P’àS! '6›‹•yñ<‰c‚òªAeJ+E>-ã]` šÈ–ª¿¬~¨à\æb…G†¨¾ÿ‘D%†§ò2@­Ý¶¾¹”ÄÕ i´oÄÜŒÊË–Y:÷QÑ=¹6Ve¢ØÝµ¡Ê[-EmŒr4!’QX6qEÞehÎm‹m@Ð,kF (GԶ霢öï‰RoÞ¹ÍÐËhÛûžM‘j¬=÷™+ÁÜÍ4¬3o*´ã†GÝTJ¼—ì| aÄA!±sΘØzŒ¢’¼¤·†Œí™—,NÏiI2åeK¬(Ù&Hˆ'§ƒm†OÙ¢!ÒSSò/ ¸î ß²·9~¹qp›0;Oˆï|kAnˆæíY ;SËÕÚÝ*£œ�UœÅXŒÝƒŒ@Öc¹²ïÈV)fAú¨NÐõÛˆñˆF›ŽìY¾$#]HÅÝØÉi‹è4Ô„hÔå�Ìpî_5Šb*xÀè2o,u÷ý7 -ÿT|YÇ*´ÌS!PD)-î"#¹V˜Õ¶ÙЉŠKÞd7:Z¢@Ð<ƒÂ�_è¡NéFo�fÉï$Þ]7® +ý[§¹t¥=.Ô¨UÓM#ˆÀ—½ÄpËq ë¡BD 3»@ŠâÕõÅûJ0ˆA1´°¼ÌxZØ\Ë4uÀJ·7"²˜öX‡Ž=ÿê/áÌ{[¨ÌhßgR"4¿¸Ž*9²ïªÚÊ‹B +? ï^¶\T‹JGøžén¤#¢nU(Çꣷ…«äô¶!kÁjó Ao¸dŸ&”PÈû" È?žkZ‹¤Û  ÚÚ.½}G¶¼Ñ"@ϯÑ{þÜçרß_GbÎî'mçðÈé¹Y¤û\ü`a»89@;[;V»Æ3`ÈMíL$®õ×c›Åu�qÁþ¿!æ xÎkQµU=xا—°̘1 ,'ÚºšÆÀÜfyuº÷i¸Ût»‰Šß¿kë¹»O +ݱ>_R)¨=(×팖{­WÛ/V§»�DK`RQÉ[ÊÊ¡Ñ]¹‘$WtÏSðÙoN¢4š5 Íý=ó#ªHIèEóge†ùæÊ’¤üPm@+VÁ¤UroÄ/Z/)¶;¶YóFVU|Õ±¤›¾+øÞ²V]X–zÝ5¤fÙ)º‹yI†‰>2íªÄ—)/IÐ0ˆä§œŸü„;·ù^†Ã”$C’Å5h¹•yÒ!žÅˆÐuBPÖ)"œRÒl¹Â0V ’ÊÅÇþ¼DtF¥c�®t½õõñ§Š3*¹š(þù÷ï¿Þpt4ÑÀ8L€0|`ô¡Påk¸Š�TžnM¬Àɯlmi1'R%u ;àä0Ä çÖŸIúô³dñ… +/qÖ| º·ÅÓÄäëÙN„/ø‹)κˡ!)8¼×V’âÎùôþÆ×òrqaoäTèé��pJüû‘àÖ;}'ô†¨ ¨ÝWuAºšËz‘ŠT\?<8GÀ™¢etÙQG U«òžMñ …Ò‰~›˜VæYjYqž�è{âœÌw»–ð_þ2B,\¸¥è(,cC©¤ƒ¹MäÄ­QrÝ!Ç8h#¤%Œ•ÆPäÏaÅÐU”²ˆ5Žjl>Œ±, +�Ç+è¡Ì©E˜­é)ï Ö(žšßN4-l¡-BܵH~N ™hÐGqjµM&9Ol†¸�ôl³õ”ãÄí„[‚—îjz HdbádH +Ídi*~.k숻ÒĈ(`¢?nM‚“U ÒeWCîH·àõètÖOVwêºÂ +œøb-†Ì Öâ˜BZ†´†®æ¯¨ü�ð±µzêµE˺ ªq�Òà«é&8Ž0„˜9ÔŽÒ @»–ºÜ޲¾íæ/ĤZå@ˆ¹˜�øK|«¹ˆT¥´ƒ‚a3)Åúó‚éX0³¼±~—?"õî–�òŠ¡‘¶¶£%€T¿,qêòxìp ©*2+%ê*tÉ :D+ã7¶c^b«á€b �"$|ÿ›:…‹9]FgœS‚‘ššº«3Ó v7Ë¿,KÑ•™?¯üà#¹"VðHXÜ)]¥„.'!�UUk)ÙÂwÚËcŠÿœõË^ýøŠ +^ÛÒ­Z§•ì6ŸWÆçY®BÁ #ƒ©ÛZ•ÚšÖ!¢ô8Ÿ¨ªŠ~™ñ0±³>·Ø�ëÎ" ‘%Ä¢]"—®‹§"Íæ#z¶™—HØf„×È–à�>[Ê4mQˆob¯ªÉc%á•!oš0ÉÄLjäÛª;¸ :šE†t”i½C¢a‚1/h5>æ, }2C —5±!ùü#Éî|A ÖIù“ñÊ�ïíòs4’óÓgOm  ø@ÐíÒ21ó+šh4~ói¦ôS`ÁÔ%ÉIõøJáP¹³9"S«5¨c{DŸ?`h맪Ã*·lA¤zâ±<¤tŸ…¢_³"•ï°W9!.k‘ 9v¨]›²Å6Ë™¿�^ºû�h6î�iqfà�iÒäG-ÌLKÔR2¿Jž6úæ�U_”)Ì(’!dG“RïâøÀ}˜ „²„.ôD<¼Ø5ˤt6+¹^Qz¾ÑA�O¤C¿êKbæ]–P¦n�=9"I–ŠÇÁQŒÄY1[eo™Þƒà=jˆEPÔD9|÷Bvc9œ°Uåà(WWŠ^%J¬Â¥#&X£­â›Çrþ.»¡K8Èqv�~<Ç”É÷4ÂV\ñ¨í›¢e²)ìÞoÙ{~&÷ùžûûµ sV?e;›»¦çd.÷9øé…¸–ûäÜX é8½¹rÛE�½ª7Ð@|vtjÄBqœ&Îèÿ߀€¹¼î©mààm“‡‡D"cù´=Ù*´T5‰�®Mòê°÷!ÜE7žøøK¯`ŸlÝD`}^%hÃ�+:#å¦ý¢ý*mtbJ OÁÈKÈâB”%Iù¡ÚØ�0#FIÒñ‹Æ BŠíŽmÖ¼‘U_u,é¦ïŠˆ U–¥Zw ©ÙpfJîb^’E¢†�L³*ñeÊK´ "ù)ß'7áÎí@¾—Ý0%ÉŽdq šC^ežtGDˆg1"t�”uŠŸ”4[®0lÕ‚¤rñ±?/�Qé¤+Go}}ü)À€âŒ€ŠA®&Šþýû¯7 D4Èr�3‡O/Ž>Tª|w1’ÊÒ Ã‰%8 Hƒ½­-æ$Dª¦dœ†¸Âààú3iŸ~– Å"ÂÐDá%›�Aó¶xšøƒ„=Û‰ð1EZw9t$‡÷ÚÊRÃÁ9¢#ŸÞßøZ^..ì�œ + ½Ñ“ÿþ‘á +É= +h²ý6DÕ+à×Â%¾ôgf¥Qó¹–WPÜ• ¡>p�ø,ÑTÀÝ—Åñu(ô?˜SçA�MdKMvN“È)׎Ӕï1¶a,AíïQ«†ÄQ]}é4¤¬Êã0á$e�J ò +Xx_÷å’!t5ª¼Ñ¤¸*‡”˜†MíÎ&‚™Äx÷*H„Kk82¢Î7á~J¢-Eº6Çj‘ЇVÏ©ôwœµ…1˜/ñª£ %O4~ ÑXÄ@b€&/ö�sÎ4T±IQ»@ÐÀÂeNsÆ5v Œ*5q´.Ô~‹Yaâ À}@R6f/áÄ´¸À@`ÃÀâ ÆyÄ ¿rq¾77™›ÿ“ƒØ`›XÊLŠX=ÈåW�{§ùŒÅõ·Tm–"õÔ<Et׌8¶Œïî�¾ŸØ°ÞÀ¿ŸˆŒö‚˜(FäIð¿ø‹vMX”¬³X=”†#Þ¥ü¦óáüOÙÔ±× É¥–ÏçÁë1Lìo¤„ÔHäÁŒ ½E¸È-Ê´:¿×r@­ R—·B LC¿7jä*·þñ o¹½ VÁ8�-,X©¯–è8 +µA=…ÕÙ½Ÿjþ4‘PÑcqæèo¡Ž®_4Ðñg°S!0·ª†þÁ+ r&aj&šnÛ‹Y˜¿¹,²RZêÖŠÞ~HŸWßœ'LæÔX(™ûÿ=é±JÄÄDÅÈ'ã\¾-ŠD{tßž4j�·8QvÞ%ªÜA¬qžÔX"Qu"æV‹Ä.Ú\øŸµ]iÛà5ŠT`ñ5LEç��z¬‹¸Ælêª- êÄFhh/lbšhÂÆ ŸDT-øÐ�†’-úñàëÛƒRµdG×ÏEx'š£%h¹�&ÆäÜbÕ¬Dþþøù„¢÷Ÿ˜t4Ü?M¤+­b�ö¼Åña£ž¸ÓçÌmý‡ýrYŽä6¢è^_Ñ?Ð�xoá/ðF{Æ„´èÙŒÿ?Â÷fâUÅn’3Ú‰+v&«P@"÷0aûýòë?ÿt—ýyùÇ ¡¢:6�‰^{î8­ õ31¢! B´lñ;9pX×—fÄ‘'*ÿÇ… ‹xÙzeY{òܦg?86Ù1Ð ¶—fDÏçx>GË·”·`©i/¡ÊP+d­”ü(VÏ\ó®hZ«V{×Ýñ"‚ŸÙö3ãE¥]I�8àU~û¢ŸºOc<†‡^}9ûI2A�…>ê:þö_É»IÔš†Ëxëõ/â3?ý‹£q3�0±â ½L,¨âeÅÖvKîþ¸˜CH3ªÝ×Wþ;€ëqüXBû?'\ù¤ÛOºý‹Ó­ÿKÓ­üÝʇÓ-Û1¤þgtÛþ§tÛÞO·þ!Þ–ÞÆûx+ï¤[_±ýüÛt?„në‰ný'ÞŽy™Ì1»�e`ÉcÈá¡D¥.ä Ì1< :èIqA‡‡¶N~B‡8Ü´ö«“ãvp„:D3~A‡DÈôº Ýq¨ð“ç‡W8?rIÒo ÇØüDŽqÚ�#ƒ0VÏž3ê:æ¥t ÐkÓFqö,èXèÐ1b6 cÄô|’ïF\�Vq9Vy qÿnùönhû̸ˆØbîKð#˜›¾sïñ{1÷=_uñp׌¹MC ØS©19�'¬ë„‘Ûîg0£m†ïƒÍ1W1'òŸb…�¹Á¹ñîùmCȹá‹È€‚š˶ƒ•`Å�/˨i)*ÞU ÐMU~žQ/O¡Ù¥ÜáV­ZMS5æ'¤e1rÈ 5˜@ÆR¿qu¨Ïn„r÷¤ÉF~…úÄj ú^Te)l”(B6ã¶ù:ö�ˆƒ´ªÊ؉y#�;¡hçC gàÀ°PÀÅÛ³´=¨ VŠG‡@B?ñ¶zôç‚Hâ< Ú¤BýˆrˆQ + P•�BB’ªíêÓÖˆ`ÃÙÁæù©‚ñï GÁŠ”O„.´f˜áÆ!ð1ìÞiãÀº�㈔ÅðÞ'úÛ×ajÞéúý”yÉ�vkžØ•ˆ^#WÔ h\ +QÍ‚þ«QOJV XÒ¯„â�$0oL!éÅ.”0ë ³vÙ$¶Î‘ ‹}YÓßÎp‹e�Y0®.<ÌäµSØC–•ÝÐL�¿™¿Ïöœh^ÇñšŒœŸ#FÁY{`·HÏDè¶Þ…î@…B·tõ±�ïý×ê¼_âmæ�Úí3ªYÜSãŠEÒ3‡�- žh䊀¯ö,÷f™w8GÍÔJ¨àˆ6pÀY„}ûŠRÌZôì öÍëÊœáÑ`jèé!&Þ÷ärÙm¶<³«ÚAÊaUQ…u;xôÏ0=25lKàì6\7O¨¡/‘10ȯ^30ãJ£ÖmÕk�йhX®Ø.°:4’¨RডÕð7ÍrGeºq¥¥_uBc¤Ãë[‚Qɨ² µBî¹Ð‘–3±1y!LR=íì�b!r !ŸÑ:ÉH"¼%™(K}³iŒ.´ÑAqÅ™rrÝà‚4æébžÁÁªi*_Ù¼s8’ÔA;g^ò ×í슶2 -_Péä¤/j�…�³¤%V�Çú¿“ëˆ6MK �×6{¼é"ô¿pƨÎðP;#Û‘Jh¤ã (:tÈ2î‚ÓŽ½"C‹ÝzrñسE¹mÜCBkØ®‰ý«”~•UW9¹n˵"�…™ºuÅmƒ 6ã{:Òó9t.Ä�›=ÞsäU ]È8ÿÃÈ}¦â¿ÜŽøÊ¦®ñÜì;ñüLÅ� š%±×gìêª?¿}Ñ/9]ú®r€hz)8\E&­…aNnæ.ÆŽbÓpé޽úA×~þGmfAž¸t˜á°l';© a½,TènI½'Ð~uˆë3$Âáˆ~Ñ 7nÐK8œ† iZ—Ó¾0*“êšw2ïNt; à�΄ep§[væm+ªæÏ—eÔ´Œ�• nú«òûÆ“yQ`¦ÅÔRÞã!³ñ ²û ÛQ² öXubO†¨—ÁD”ˆyðõc‰ §(/Q–�¶¨‡PêŠb„Úˆ€+¨EƒÚLÈ¿Aôä5ÄÖÐmÝîxHµ<ÉÑâì÷à8 »îè�Îq®Î%:W’bKãv7[‚ g¤QŽjÄ£:™€2ŒÆGÄ'²hhå ºdaYîœöu˜švº~?†".ëÌŽ8Ì¥\‡ÃD3Òä‡Õ¢^רŽQG‹|RÚR×BÖóe])½`Ü)%%Fиï«×‚žÉpÅÃø–fŠQ/“ÇO¡—�C0˜53ù<`6÷¼ì†æêüÍ ~^Лb¯ÉÈúi%¾‚®d±Ý‚=s¡Ûzº$¯+a\µ´—ȸpŒ�+¦ÄÎvÇL5B*÷ì¸b‘€¢êÉc^�á=×®ˆPÀGz"·Æ§Qàe%¶ª;y³#n‡Ña®t莲ýåθ}én¡( e»m”Û_4c.kfÿhmìè°_ëlž=íŋš»—rg®ŒÖ80ðjWÇZàÅ�BršÄëqK9OS ­õ@«*.óâŽ³Ý +Û Ò¹�sØ„°¼]bP,òhóä,žŠUm¼Û¤S‘àòéðšm‚ ¿Ç*×éíÑ'Á‡|RÉÃnŒŠg†(×*ñJ’ÞsiùçÁQô%Oæ�(Êñ›cöÎ Kž€ÆñC­ÑöÙ‰è%´í+Ê0k½³üv®´™ z¤Ý‡ž\.»KÞà!å°*B�y;xïê_�4 —�v£�ÖÍjèKd-£¨÷Š Ž-hÍV½õ¨qc·rŶ�Õ˜Bµ5½ç˜x߸gV:Š24¥]K ïUÒ�š¾2ºœà�‡¸J¢n|j.ØÔ÷ˆ�‰ë•ÖlW…ܧúŽu^CZZ6¢p4KëFÜcMm—Èg”lrèEQ–²NèÆSz'6kîÅg×í슶2es›š86ÄÅ?4ó8ÔÆgב96Ü] göx³@-¿‹9"Kɾ1GDE{D`QAÁû™˜�}ä8ypè˜q·u#¿˜‘&5n÷Äæ•ýÎg×m¹6戦èVübǼßÓ‘žÏ¡3Ü]¡3»¿çrE-t!ãü#÷™‹o@ÜË€~æâÇ„í’Ðë³â~û¢_rºô]Ý #î.�Š<äÑtäÑ´óhz…Gßø¢kðÅ€Y�*.Æø-ÛÉŽj‡pY–«Kê=å�Ë¡Uí�2ápH¿iØ7ìum3lPÓº6Æó‰žwBï0'2%ÄÐ%L`%MWš`{a)EêIسjš2j8Pg^°bÎu½Žý¶µîtôoc�³ë¶\ÜVâ¿ÆÂït~»ÛÛnº‡›±#ÌWúך§0pÞ*sÔ0#S©á¬áà‚âØ¨áÀÚ%‡õ6Ê�\·³Ë› EœÓl^ÁAÑöi ÍKÐ[Zò{÷:»xÊ”-gû’¾�¼Ú×8ÔEÛ9‡‹]ñbM¬ÅyøÀ�°��Øv°¾i ia5g÷ˆ~¥‘·� È�q!E0ãÂ>VήÛrm-WXIe?jA’xf0NgâÒ¡qLþ¨h íjs–v D7’íèÑ#å.+M#ƒ/6:¸çm+±4uTÄòù—.®ƒ‘‘ZPWÉz$%â}ÍÃÈh žÀK•XÖsÿèÒÐħÌlB£e8„¯P� ×¶ÜðhŸ8všQß\ÿf½Êu$»a`>_¡؆î#^l诬áàMbÿ?°UÔE©½€G=ªé¦xÉÒsBYæî.DæÃ£™°Îk€ÃÕé‚NhÙéÏÓâò e~žÈ~lЏL+èpñ;YøÇT€5MŒ"ÄêÍÍ”Õ7i¸ì…<³•T` šùP@Ϙì‚(@‘uñ=”'Rx¿‘­W+C�2 0bQì¸ ±Sñ{M*L‘†wߦ]ã" [/Hæ}QÊ&9‡šma´�ç¼G‡pp³Sº�z:ä™r¶*‚£'7 öÆ = +šlÈí­ +ÏJ èY¨ˆ±êÅM6äÞ¡4¸¹mRì½è¢õu½K¡¹ñÖPç¹™ ôçVDî1u—¾s§4FÆ_̨߭°r"…ÛŠš‘Az&“}|ùÞ´}_N@­Ð 1¡ÐÂêfý,FÉ^†'0î¦6>‘G!¨fcN³­0j¿½™€òfB°3ƒX?[�OÃW&h¯®â�i Ô�wX€.È mƒW�úÚùE«Üi$KtÁ:ƒ¹FÈøº¡ç‚úŒ‰ukÕÔÐgj“ÑT÷è/ž’¯Š•G uŸSî)i� žãÇ7l WÊE2"*ütI9!Ùçlî !0L#rR§®÷{+éÀ4ó±€™1¡p‘¬–Ý‘yN¤Ž5Ì�\z ­Øe±=¥È2¤1™ðf<¸qAò’€Åª( ´m(›tYÂÀÒ\½!ÚA +¨½(‘'é6�<ëÐ'�Fƒñ@žŽpçJ»ñòÈ�fÃnÈ ¬•q"ÏFVít°Ûµ]%õWCPQbA¥ËˆåZo¨“¬ÌŬpÉÜ,Ñk<$¤¯âÝÑ·ø>ÎUÔ²�„Cù·KÜr¢P*àëßäÏ¿Ê=V,›>q¥qrpS»¡Q½ú’¯~}|³R‹Ðø'ì�É"ÝåO±_ÂqÄ +XÛCùüø“~ýçqÍÿ~ã!­­º™Æ ¥î Ïs”sfŸl=N"ºÿ’üñÝàã—à¶â endstream endobj 99 0 obj <> endobj 106 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1257.315 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1256.3150635 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 107 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1282.188 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1281.1881104 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 108 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1420.603 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1419.6031494 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 109 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1445.543 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1444.5426025 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 111 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 623.729 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 624.2293091 cm +BX /Sh0 sh EX Q +Q + endstream endobj 112 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 649.184 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 649.6836548 cm +BX /Sh0 sh EX Q +Q + endstream endobj 113 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 949.839 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 950.3394165 cm +BX /Sh0 sh EX Q +Q + endstream endobj 114 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 975.312 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 975.8118286 cm +BX /Sh0 sh EX Q +Q + endstream endobj 115 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 817.51 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 818.0100708 cm +BX /Sh0 sh EX Q +Q + endstream endobj 116 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1093.96 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1092.9595947 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 117 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1118.899 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1117.8990479 793.3046265 cm +BX /Sh0 sh EX Q +Q + endstream endobj 206 0 obj <> endobj 205 0 obj <> endobj 204 0 obj <> endobj 203 0 obj <> endobj 202 0 obj <> endobj 201 0 obj <> endobj 200 0 obj <> endobj 199 0 obj <> endobj 198 0 obj <> endobj 197 0 obj <> endobj 196 0 obj <> endobj 195 0 obj [/ICCBased 87 0 R] endobj 45 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 46 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 47 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 48 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 55 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 251 0 obj <>stream +H‰lWÉŽ$» ¼×WäTŽHmÔÕcÀ'Ã0|ð¼z <ÏÿŽ*³z^ Tgä"Q\‚Áoù~|ûó÷rüá�ß�Ç·ï+Çëçaú;~¾þóøö'Üú×ÏG9[´£?g�cy?GoÇ ;טÇÿñø'^)áWä +åÄ vÖV÷gXÅ´š¾úíQ³è‡�²Ž§.ñàï¿ä"å´ÅËjÁß`[ÁŸ³õ3ªaykqF[v¼~<øìÇã9fÀ”ð‘`4Xwàråý³µxC|úxƒ³w?î¯ö%Ÿ8^+øý€u½W\Ù~Û´„íuóiÑß Çü+Þ·Á]ß¿¿?ͨg8NlÖqô2>�v׳ôÉÕíxöÓv<½Â²sXÃŽçx4�zú ùõhg¬z�×cœqÚpž�UŠ÷#Î gbŹðÞ:ûÜ«wDGÑŠJÿl„¨,.¹±Ÿ½®c�£ UéÊ×<LÃ[0m9vlmàÖD¸ã´†|8,Ïëצ¯ å™ðÅêyÚ¡dx=äž Á[Q}{ƽB›Ò@ØÎá:ËÀ1qxÿ }ý,#øa=GåðéH7Z_¼q­>ã`‚)ÂX°ó��ö­–Þ—›7x=âö á«jøªÐ—õ4[8V©ÜÙúið qä쥹,/±y m+„/G;ôÅÌÐL-‹ùÞ7î…È>¿AG¶†WaGGÊ`“ºnĤ™ØúÂE)ñ”Íp× ®Ãº†‡xZ%UA à>Ç!˜,Ì4Ä0h�æ".&êæ¶v\!1ä‚¿(KãS DG°'+zÐ +ûS À Éþ¡k¤Å 1shMVeáZœÞUªÈõ!Ü�)¤ œÉUç�T@ÄŽ¤¶.Ò8dôõÆþB7xÞë†âa¹ UêK°†¼'•´Æè­' ™N’¹ažQ¯ëFCúq³ +ܨì�©„p¬MÇ3Ue,ÿ+ÅÞ¡`E5$–š<rÎÆ&8K׆تúu­7xõ¼n—ÂTÐûX)”ѹ6™rwÁî]¾zö¼,³ÛW�<ï}è+u¸Ù›VìU‰æòauú�&”º) Q¯âžJùqAk"†�O8’:k4"�)Ôųøï&ÓI«*Sü7ZþF¤ùÄ íó¼òýË�ü7À’L­÷�‚(¾o�‹”¡Ø~ˆÅ;´nš|PVöÉศ¥)Þ(ÙqcÐèšj¦‚�¸t‰5(6©j^&¤ Ìeô­%U4íLû½î&~8›È×L�Âø1S­ƒëÜ>5`PÇbo¶]”;Êjûéá®l!BIJñŒÂV3çRë +ä eëŠÉÔîMZm ªò®!aè ý†<'r‹a€-“Oê¤'Ÿ)¦Zú Û6Ñìý < =!ÓW¥Pd-kç)¼>EH‚ü㡤ÝL9ý‘D‹mYMÆ’w†ÝˆtÉ\Â|Û´D± acù,nBjTˆL ǧŒ7Z8׸rAznĺ1Žmù´æ“ñbf"�30z•3µIÉáðS¤¾1(ÙBÝ3û¤8.ž"÷™nT[Á¹Gr|›p7€ u÷[Â<5R¦ˆñ�sX2 +EÎíîE¦(bI°7¦’Cº&�Æiu#XƒU‡Òý…ÜÛT^0Z:�´…¬@T;†«WˆýˆL[²2ÄÏÍÔŒ»ò°—•ÜÍ$Œ`/"M¶�¼)ÅÑ.PÁbb9!œKæ+Ì.‚+)¹.mXà1®oY5_p¾þAE;é{xÇ8„ä6अ=«¤puéd¥²Ü¨hcÊÔ&yë) ÚÖ¿=ó.¿/j-tÔΈTr5Þ׊P†Ò].•8Pì—qW„÷&�ÙkÖÏ0Êw²çU Ð>U�åèpUOÉdæÉPFÔŒT2ÐëᬔzÁÁ’W„ŘC%ÐÙ÷Q^Ì5Ü®¶öV’™È— êͶ�r‚;BsÌ…A�}c$/{,7DÆþRƿ׊á¤Hd(èŽá¸ñ‹VD5…o­Ø¤…ÑXZ¶OëDWûjr&K ›íÌAën§ªº¨B^w}˜`kÌä䥑!Îî7bøîÒÄ}Kì®Æ54[É<‘>%mú�T IëéeC¨6BWŒ|UÞ3Nqʬ¦C:‹éYrÜsåu¡$J„õ$–É%"Ç.5’)²‘]Ó+(_¥�5 U× Ìž±•ñlqßxÍ9:³‹@§åë&s3jOÆD<¤;HSoû~[7àX5¢ë¹ü)¥«¹LhÄžØ,µí5§zÎ*Eg,=eB: hlÚ8—Õ6Mr“=Sí�rŽ©9Ù¼¼tj²à%{h¯jR—¦A Ö•õÍòå ɱ’:¡hâC‘Ç–Ymr©1)PV·híDáŠr$cƒMM‚• =¥>�Þl!exaÑÈ:Ôæ²Ì‚(‡†,Wƒ›ï¡‘ƒÇ´Ú Þ@KƒÍZ®AFʉ¦ó·ÒD ~‡IT,È¿\ý»M»SŒYÙú __¥Z]|(ÕÚä§ë]ûU3mAÐÀ� Œ�¦jÛÔB&§]ºîµK%Ñ=gÉv—3ÙA=+—† �fYÈS� +úÇÙ)I1žb‰@ñšödTsH Í>œ«/Oý8ö5ÝÔR(¸:ï\W’'÷°æ-s*ŠJ‰MéC)&AVÕÇY)l•ÌDÉ&Fhd{žjCð(wöÔÚ…ÓÎ7Ð1}]�RÒ¥¬©½TM\TGê––e]VÃ~#”Ù˜YÜE¾iµgÛ¤t(E •O�…)æYzC¬å×Tí1XaÔPyM£e‰ú%”+Y±N�0ÖnÅMÒ†hA F[ûzóÿ¤’ ¶±�€•¬v§�äjÓü*¡@\È%ŸPº•o0o%rž»$Ð+&Â>³mò€¨ŠG UM„éà%4ƒÁñ£Ïz_¯–uH”£H¨IƒÝ×hÖXÙD80%L\Óü™ê¾ž™‚9¾PÏbýÅkîâE`œn™ÏÐýL�ÚUððJ`0YG+dbž¨š¢Èv“Ú'R‚¢ +ø%“�Ì# …4­KZ‚¤zpÞªdVpƒ-é¼�ÜK¥“p*MÈuôâbT/©çØ_›Sëqܱ”�+Ãu-H)UÇ…¥YËø¤²eäl{!lB©@àù¥êÉ®¬ý¨à9>&¬j�§� .©-Ê`œí�o2A¨E&¸ø;!&£Âôˆà5C™<“2QuSi­·ÐpÊ·ÈdHFEÑ›"ù�2Ñ;%'\ºTî$ H¯ 8xÄ4bVz»TYnƒ•ÈÉDímnuf8éŠæûe›y%”|ʳwž¶¸$¬©z\Lÿc¿ÌräÈ‘ z•¾€ +ÜœËyô3êù™ûãöŒ‘™¥ÖZ3‚ôÅÜ ÓVÐÚÖCåÖqñ´é2ºREðòqÈÀ(#”¯}áV•ôäfö}Å?È 2v³ ?—Xº}êOû4U¿^ÁëÖbô\öoÍr£’Á¼n# ^ãb�ÎÐ|:‡ý¢½¡:HÍÕüFЋt_owic…ò!joÖk´ökòýëX]tÚð>Ó�çP•ºPùÀdõ=ïðÔÑmR��5…LGHAZn:d»DþÙÝ?0F™_o,sWMæl«Bm[,bRú(jHg]Õ.[uUjAD\¸°‡)é¤kâOð~iæÌs>ÿàþp•šu,²³Þ£X~&m�i]»Tš­X쯨Ì-a“ƯÚÒ¦‡¤ÿòè« b|€Î èdûŽ _!-ëär~£Ÿ¯ ¿/,]>ÿ£Â§¬nQwŽ”ie|wX…,åy�þÙ?j¦1¨éc]j ÌGÕJÝ<Û í,Ýa ŽêãAÒŸþÑV%¿°Wiï|«H¿�Õ}ãq�F°E€Ñ1k¢fÂÓ1Îk’f Wý­7uVƒéøÅ´P£¨£Õ ½"WjÐÊ8pL_/a(—�]‘¢¦daþ­hK“¥!q6² jº •Î7u-Fš¹z2·ÖÒÉYG�XžÇÎ`[ÿQ�<ý®ÑÔ}_”‚›RÆfš·­%Qj=¯¯ÏwýJÔ…â}†cØÊe“OWæ®vÓ¹æ¾R¹$gö&çcèêcZð“ËP‹'Ü\9Åë©®{z$q~”6�ëã¾DRa ö9 +v6œB+°[ŒÈàNkܵ¾}ƺH……AAÆô.&Ì©C�ìõå i 7®eãeåL91=š«�Iûr\)XõȲµ¶7ânuÔ×Ä÷*n1b5�ëüIoƒ.îÌ¥¢OŠƒÆØ8¼­$‘g€«²;d2éBÐ]”©µ×S&’9©èªMù‚£[~ްŸ¿Ëƒ�ä£úGɯOy�å;%šŠ¾5š* N×pfJ%Õ43Šè9a乯ˆ!ÐY‚æ�+›Ayëä‹0I:æï˜Ý ãá)lS–gëî—žE�áÚÒÕ»ˆ,R"z­”gñd9"¾OÕz„&î®×v…R™ä«óÛ}½U”ÉñïÚ8Ø>TQ{yˆ4)q¬|Õòv0kà2ºªXêù.Ú×5RC¿B·– Ñ9YùÙüÞã,õÁ€µÎ_£'�~¸Ú6šA¬³dŠÆ±C…BNºÌá? Æ­Y7 üBë"Féž/œwY(ª‚Ö’œsYzòW*EƒJi­”ÑÙhÕz éWQLOÁj-ŠRÍó¯o7é$Oä¿¿þ÷ó¿…}¶Ò˜å1¸öýHúTšAžU+<ïæýGÄŒZù£ì„Æo¤RY”/KHïn¾ÏÄ�ܦ¶¶¤…”E*\¾û»IHãK}îÏâ�Ÿ8ãŸû3nó¬Þ{6ÔúÄñõqr¤Þ7˜)~�”Ü]ŽŽç‰óF•gÒpŽ¡¾õ ÊIïά•7¨øÖ»Ï'» òÙ»íw¾ª%É¢dþ²z“Åõy=ΑWëkí>8tˆ·òGj›^‰GÓßD¦¶(R +5aÐß³vn$g\_çddYWõQŸcIФRkÔÒ™s}"ô�êÈ�UÜÚ�k©×ò�÷òG¹Y›‚‘²á_^ø#/4¹�”8}¤fhc}#†æ¹U�Ó%:0H:@C�­z �Rǰ÷|Á�,UºÊ�ssÑ ü¼·ÂMeõWÍ©à ò/Šjxgõ³œ;OËñ^]žu>­ôd÷øÍ‹½€1‹ô"ãºA†QÉ¥ì[Í£¼êÙáH["!Ô(ºÿ¹Gué’ªj¹ÝÿRÉXhŒãˆbƒïõ° ¹'µV: "ë mkפÌ6ê^Sì{ãU°'ºÅ9ÀÎ Å ê¼ÏÞ»¿¡ ÚïÕkúáB§‰/i©>ǃu;Uåx²»á~pb¹H &ÌY“A†£3^à’Áv"Hr�XM(ýõµO÷Æ šàY 1�¤�¼`íOá™Ô}I5Ô·¾fÓ5?S“Tů?¾oVIñêHýŸý2I’䯡è^§È ¤Œópm´¨îMß߬ñ߇GDUéÚdát: h`eßR`3Q¾Ë“p€eë`›ÏXØW«DÏÃc?QŽÜû1d* ñõîëú}ë²Kd7¶¸¹NýÚ“™_oVu·ˆÛT—Ç»v,‚³=ŽTÕ.>À´qtår·:ôº íwdë"”BžÑÍÝ¿ Ã�9îbpµ¢ê¥#Xk®´[#ÇÊ·g©Ø]ô-*­Òünirx*Ú½©]Rq~6Q¸[ê�žšác.œ¤¯ú>c`•YŽ®ø—¥{Ä{ŦäÔ4¸.ò†‰[Æ“% ÒøýöÔCšß5Q0t«lÏ& k3ïÈpZd«ýÔˆ¿‘`�t ÿ’à?’à@pM<á¬ã¾Ó#eÁ´¸gKEê54ÇèFîlîÎèYK‰½kÓRsU¨5� hßú`ç×½¯•Æ;®ðº¨0·Ê®€•ñ2{!·ZÓÎ<Öê×Cp‚ñùõâ¾v˜å’Wâ‚¢]š£gí܈8‡]™â0s`«É-×™Ö'‚2±@ {Ÿ’x çƒêYãÈx’ªåË;ßÚÉ|®"Aê¡£B‰>dËÊHØá3³>X\ Z–žL¬@Ø’LÎ&„¼L ùhP…–ªñ`­Å%ÑÁIˆ]?Q“ë#Ïøº'ê̑̚' sЇ‘e93$ÿ¸ö©\3�,Ë=sÇÉ„{¡– +æ”þ2<–r(­¸LêT¸I.�­oÉ‚P<ƒ OÛÀ£ ÉS`+^Ë@)$4{ *ë+róA“™N²ï?Šppú;œOEPˆ·ëÊÁj6^f`´ŸÑBµuVÕÅJ³€E§î´Y„j6HEIË&úv¾ +òR¥Øz3¬c"�±’½jHÒ$_Vw]%W¸�-ÎH:U¼ ?ZÄ_ª~Uâ#ö•T¥ë¯É{VÀz2ÜãêNØ\¥ðP­3SÈ•xâ\�ºMý¶éÌGÒ +þÔÓ•¹‰ldz¬·»¥ÜE¼—‘¨m²>Ç·¼SbfIRέY.KrÔ¤‹¶íÖPØ=_O2G›�2-“p¦e[Úƒ‡�Œ“Þí8B±ÊT@…È@ªnÏ ÊÄŠ`9ÒŠ=™au/z`‚µÎ1¿r€M>‘ÅìZ؉þ®l�¯ÿýõߟX%ȪE~FÑÍ�Ò SUƒhÅùu`¤¾{€ùúùli+ØçÉRÕ�÷ +#Çsü<ÊWYó½t~<(Ï{S²ê¿lo!rƒ.ïY|¨‰]­&bÝjæ…÷ŽþbZv¼Ô¥Õ +Rwøe�ð5;Š«ÎÏÐJ}­©--ßH€‘<ü^È!¶�˜}ÅqÝçs¾…É;ð¯ùbxÇàôš¿l?ãùçÇÎãg÷ò+Œƒ/CUy8 ¥Èû™÷Už ¡9Ô·ž¨²ÓœYÑ „I¯yÞY�aÚo2èœhãøBø±èÓŸîñ�úIÙ¸ïHÖê ¸ð³_‚òOŸºâÏàÒY­ è½N;PP²¤Ê]Çà”Â|%†¦#ëóÅ¿þØ ‹ØòØ6¢4q\_TA7‡J ®×žaYã¶xóȧ4or¤‹tø+&4}(=ó’)Åj¿ûÀÍÔ…šÝ(¿F}¬Ôcr¹"oãtq´�Ÿæ¹ò4ÖRZiÆñzZ¯š_\Ÿd.6_óL`¹‡ž@™6î4pZxËO~Û€E0òÛeðlç iÉúö¹Ãl-ë#½`¦-£›$UËúPS†;hϨU¦p€e2öAû#�_)‰�HºJè ¶çvž¿>.ƒKý|_‰/îè!TŽA§Åea"¨ç±*„ååi¾Ã›'%<œEOr“.‰¸x(ä�0îhÜæõÌégºahù˜/ŒgI…ó1h>vw™KÍtÐÁ<ÍR%1ÌÅÞ>"£Š·™ŸøVílno� E{^ö Iši¹> b5…üH¾VÑê¾m⣚ +Ê2ý&'PY$!EÃeÏô QYq6�ºo1_üQôæÂ $ª½Ò¾_+¾�*ZÔžò\rãRtr§D¤z¥þ+'Gixx=§R"Gï.U»%ä!ߣñ)®bYÉÓ»±zèÜü”ôœúV†m]uæpYE=Á\ø ÆWãA±tϑЌŽòSå}ý¿‰×‰qðµõ B«ö¡²)†]ñÈ6d¢{á³OþúÜ[‰SÜh’>HПè¾E{‰O,¿¢+è7k©êz²9–¬TA/ÒöÔf�ôÑï7w0Ÿö +‡fiŒê í±$ö\ãO©j¦)БùHãŽOz¹£`ÝüìŒ_•ª=ÄMÕ‰ö{Îd XOD®�xDÙösN±fCt„hT]G-!Ãø�A4ò]�GQœ‡BJÝäŽk>HrQ¼ö|pºQä�$WW_üÏ^Éc•îÐÐ28Z#Þ‚áp6‡+ˆMÈÆâ†²¦#—GôÏÉÁ®¨²v�CŸ(³¨I÷¼ÐæD8î~Pfù›ž[è©nnõ¼xIò´? †–ßû1ußl|lªÄ« @£·hþÜy<·xT_¶uó¤"ÍÀi@¿Ó[üŸ×�óÚàxgÜÒRù×uˆè,OuSPåÖÿ¥Iª¼Zd;Ð&NeþÙ$sX]ûÙj·Ùl«$Ù¹£ÕèÄmäÙÖÌu|»>OhæVöDX ƒº†Ý’5†6ÅÓi;)C¦„›þâкŒ”ÕÏîy‰ªŽï,àºÅ®ëÍ âÝŠ »E»­©TÑ~"•6"¿!ìÕNÒVw·ú0Rq—˯Y½Y7O{ÎQMŒ-)¦Ë‰&ÓÆÆ™Ü±T‚ußã1˜–QܘD9ù(”Å01ʈZreÛÌãcέíUËÁ1|ŠkýÙ9á±r$®±,{™5¼BQ�µw1éÅ +‰'1^]ÀæX§³ÀÉÛÝ“v»¦ën}Ù½×à�áìŒW úMaá°“ñ¹ö—w,N“kC’&æmŒÏʤÅ*M¹ï¦ ûíËí­†…Ü8dE½XϬ¯¥<œBÉýÁ||‹@R�L¬hÞißI +´ %¤�–¦át"{"Ñ�*Ák€|ÆjäZA k ½QŽ*¼2ŒÊÂ0>DÖ‡~‡š$†$ιNýÚ�u.óëͪî¶~$1Ü%ÏÐ9»½ªäŽTÕþe4Z }ÒÔaP#�Ø�-�lc]„RxRý =¬Û[êm;#Ñh·µÚ�ª__#¶<®¨ÆXùöl"ëþ¿’r$�¥¡x·€Ä*ZÑ2+[� B_%‰2p· ¢Ýíj‰™ôw÷>ãj{ñŠ.¸-2�h¾X›*-þ»È[G’O–¡ñûõ^«šß5K{º5èØ<¬Í¼³Q-ïÖû¹CùYé‘d¡|]ëS +©`tÐm«eã%†ÿÑ5#ãúŸ?HF?´— ��å÷޽©Ã(©>ß“eìúGX)ç…[ù�݉ky¿Û}h�@†�Û�/ŸÕn5IMätéFA¡™…† ¢üiþ~Ê!$Wã“Ï E×oK/FØ( EÑ<¼¿†Âõ­±Áòìåái-òÚT·xWEVðwW[G¹>Ó‰jX‘%n¢¨m¤¼, ¾­%x¾Ð`�‰þÚ§¹˜@0ªé6µ}Á”«%ãì­'êuѯž¬ÚÒº– ±ä°$7a``}ûǬ5EµoÛ±úe1+T,Oऔ™áÓü’‚\”E—>ýˆ +zRuå)ó3ì+*f Rų•ßûY´Ž\ÔFâ¹]€¬Ì)3‚tÄœ†øVÍqPÔÄboÙMŸUWPs!#ÜšàFWZ›Í–î¾ú?ûÕ²#ÉmïóõSËä›WC¶aÀ7°î C:ŒlÀûÿ€""ɪšîQ2ö 1Œv˜,6ùˆŒ¤ìÚ�Ý„yäŽÜL¿æ[·âþ+ì¬â–ÌØ”Áã¥/uÛLuJÜ1¥v›ž©§Å"®ÉÏþÙÕa�DzÿXÙz¬ŽâõÓÑŠR„Kã$Wy�@ Ñ—r¨m6¢Ò¯ë�zµ³·Êc=‚S¯v–®8×WAÔi—ýrs×eWÓŠ{Çq³|¡û”qZ¦o™zU>tà–é¦se(Ny�Žu~³iØ,L-{@´†UÆ"-pyÍ»"Z*ÑØ«x•Þg "ÜÕ©ÚÄL‘Y©ù³õä tK~ˆ´'×M&ÃÑ*M±2+3wçhÙùª"Ÿ.㱈Í"‚�=ØÄ™¤ß¹EEo_Ê’ÓmõÓÎBeLZ©ámõ‘&Ñ™�hQâÑÍÓ£TïÜ‘�°àjéêDä>F–7çNn‰$vÞ¸&g¤*c—Gä!…Õ1JsVMô%gÅñÎ\‚û6‰½d×>›³¿W±a„C»FzG�YQC·Wt·ÐXäl"ÿøˆËÓÕ‡]ºØÅ0}�Î"âWµ:‰o­îëᬢ(.M\ܪÂâíeÅ•…‚‚ys\ÆŠôašV¤âìœg§%ð^›§÷á�­ëtÃà +¿oj¿aæY«ôQ ž�‚Ç1a–‹)Œ�¡)ΧÕ&ÙȧÇËñyY&§N’ØT¤qxêô,2¸1½]ܰAZ$ ›SRk�ÄPïtƒ �æ½ÆD¤Ù?ÕøMTÜëj„2Ç+Ý"‹$ÐÙ…ª-«g0�óÑrT2ì31{¹°1)?Û$~¼wfðéK¼‡áB^H +0g\l²ÿ)ŸØVÀåW¦]Óð¡Ëtª’CJ+rà 5b§ä§§!4eù˜ñ´ä½ŽI©0©<‰‘â™Dz‡ôVêðd–Ô3iÞ +N ™½·Uº ‚k^ãÂÚÖ2ZUü¹sŽôí: O ɤ+XÆ�ºä�Çî"…š±ÃÛ| Hlë�F?N4#ƒG„øƃíÔÿÊûy/\lâh]Rpˆjâ5¹¹¼ã�¿î2pl=ÿ#)>fyeƒ@ŠQ¯~·Ãñ-Dãæ³¼ødö�)y᜶hkƒ‘ôhªºŠÍg-€X_jR¹:xHÃ% +i¶Èa¾.Puæ˜Ö†€‘Å—y³[‡é¥Ùz¤ÂÒjTѹ­c�{Ì—âãXÊ“¥¬CƒZ”ÿ!Ð�2ܯì~üŸw~Bÿ3Dç8&%*íDKš:v6»vläY>‡|YZ)}`F¹¬¿·;³^”'×sJ¬°÷ä"ø:£i±ž[{G+s>LAVÕÄT]Cý¶« 4ù;�î5Äžˆ1%@oªÏ$�¯ÿ¼†2ãÏF•�"$¤$àÖC41�œPæ[J2xÓªŽqs*Ëo=ºCéÍÚv ÔÄ)§�à·äîF<šÜ×Õm`u±íÍ2ÉÞÈJc±>µŽb¡‹P°cÁ±C‹xž—q[šßЍZùªRrNiÈa7ÇZE-kœ+AM¡‹ÊdIš£¡0DöQ<Ò’°ìAFœ}yd™d~y÷uz{f©°Ú +(#å”cs]ˆ$ .Ëð +=Lq:íR“p†L‚x€€èCÉEìÑn™­¿®—â¥Ê(±ìW5¸ÄÇ…ø7Ö2àNW5²û6‚a¬kÜÐ |•[ø%9ž‹ë@­ª²’Ct'Zñ˜©UŠ0×¹…ZñäboTE1ËgŠ3_H%Y�E¯¼Û“4ø-ƒè¥‚z_‚¹ÁKÉÁ».+ª¹ÌMñíÎ5àOLëè³ñÿböBÌB ‡†²20ÿŽ3°’Ê”OqÕêŸÃ«]rës\hùIru4ŠÇßïUÉ pYPLÉ +lؾÞþyåÌ êÌ iúþ|–””�"ƒàNÕ@ÚH†çßtØdF0ôµcEÅ/r>w˜vóòñú4z·÷¹õ<|N„õ»Sà÷xUÚ¯HñÝ#½ÿRüüÇGÖ»GƇGöÿþ‘}»Ûóî‘õÉ#mã¿»‡á-hÅÐ}ß"zßîa¿)z¨§—™…IÏèݶÚÁ‹ÁðPk€nýû/ßðp¼êÇ—ÚÁéG–}›×ë„ï#K¹!Ǩ²üÃÛ—ï +Ûן¶?þ°­sQcÆ!ç©­TVÎKùàÔÉÞ.§úÄÜÇ~%jqØy¬½;^ S±Jå á»£¾üù{Û~üŠñßþúåO?‡í»M?!ÔI:¢ d="ΆsñÌ|LYð5øz̸èñ9� X¦šx˜z;§¬@Í¡V®Sò3Rb̳ ¨‘©G×}ÖÄíåaŠûŒŽ°Öë”QÉ@v;Y„|@égó>Øú~ê휺<ä˜Zï_g�š÷Y·—‡)èĈŒŒjK±¿ØÓI±1Omª[6hÆoz»„>&H8(9ÝPäÚ"®‘@°×^ަ€úÑÓ­^&èžD]õ0õvN¹_Ó»)…)°Îò€áúϚ¸½kâöò0uú©Ûr‰2;¶”«ü¾^—ÀqØΊ¾êq)v½ácúmù=Î`Å@<Æ8¼yU± îL.¿^{À"wGÅ+óFŽe‡¡cLx½>ûŸ·cض éÚÉK `ž²ì›?Ic£ð|MÌcÖ^Óœ'Ü^¦=ÿ¼-Û¯:· +—Öqø(^|”¦�>ú–Ÿ|+O¾Õ'ßÚ“oýÉ·ñä›…gíÙÇøìã3ߨ3çØ3ïX½ÀTCïDGìøÔ À‘Gª[(EQÓX;8@ßz"P3É€ŸøfÛ@�›]*ðµÐYº"WQsZê ¨óbµV`.(B²Jráû¶f`;wÂoÕ…¿üåÚFµèÀeBV‚Ý-Ëö‚N�Wô†cÏ2ÃùâF"òݱƒÎó�¯¨ÈÞýKUßÔ°í{÷ùxeg­ÌþCy 2 Ù·¶t1ÉX*×Vytqí’Ó>¾×+€ Â2ŒMº]ø"vL…zƒÚ +ÿ„ÖøgàÙø“‰ÏáV™v‚Û^I”*­‚«vý¤×îk‘›®>(wÀÅô“šhY¦÷÷.FÂ×–&MdZ›ŒßÙb—•vÑ€Ó¬YK œmŠ%F,V&ò +`€´[ÒiÉ…ÕX·ÔøÆ×ËÇôqŽ;šÜÀÜËð4âÝM;”+{Î�Î%!+^�3]îD‘PBì�tâ'¢îŒX”™á™©º§ ²þ�w¸~×õkÒªÚ•®£óS“bÛSM§Ñªúª›Ø5ññ…~ц¹©”˜…\»‡rˆîUa¥Â—Ô¡¸¶ì�HE)a‰N$Ì,JäŠü†'P"¯‚Ò2³FWÊ�éx{À©�¯Õ„SD¼+Låú ûU�&KŠý9E_ ÷œgœ5æþö*"DVõt`�çt£J’$ÅOi Îbo¥oj¿àKeÏn�©¹ÜÙL‡3­ÐjBer�w·TEsñ=×'¨pp±¼xG1I—`ñàOn‚m‹kf' aþ§w‹³{ ‡íÄøMPÂÓbY,*Ö‚ð4?¡ã† +m©La× FyÎâK„ÎCAœrŒ¬¬6+úD'1>ó›ë€Ö¹L¾ŸïeŸ™Ý ÷šµ•pƒ䙤ä<¬ï‰&ëhNLkšvŽø1;šÿ󉶉‡ŸiŸöè»6?Y'ý‚L·î˜lqÃךhþm/â^lÚâÚæOÔ(V²‡º+ôƒ#˜Úr&,ä†P%»' €½”QöpÑ7¬Ô^ÀABÈÖm¦©ßG¢c;r†ëÏq+Àhx yÄ1ä «º„æ+oGÕæi6g ì»-||…ïO°kP­aœ"Çkͱ¹Šxå˜ælʼnò³Pf©ˆ0Ž"¨üÎ�£KÜ?_È)Ô‚sÄöÅ1 ™«Êø4¨‘ü•—–_>˜ùÛ`ú IpÏÐjÄÙ†UA¡‚kC5{çZkN"Qilj“dÂÆ>i불6¨ñß’àPDý�’ý£dÿ(Ù?JöÿVÉî”?àÖßb +-°÷Õèš• ŽGN=z’‡‘ØTB +§Ée_‘õ+ö(mZÇT_WÁœ·§»SóËî/uÉXÁ/È= úÀrsçý'àrô*O3DhìR\;îÈQ_ÖŠŒ63ó„(ñlȃ}Ðö[D¢™yÌfOUnŸ){‚àrç�bægŽ`µQÊ^<áÿ*5 ;çgÁnVˆå§xöØgæP&šÎœÙ�ø²ÚvãŽÁn7Ê~}êÓ!RnÀ?¤ÐûMy(÷&‡âÒþÄŠ-ajmpѱPb à2< â;Æ$ 5aÈ!f[S¶sBžî&$âš žÎdY�¤‡¨±òL—s~K�rk‹ï÷aþFwñNwÂbQûbŸïÁ…»dOÉq ¶=;{5RŸ-Ì#Ÿ�3´¤µÇ¤#�8Þ¤¶i±ŒD‚{|qÝ�%Œ—qï¹KÀp]½à6‚z +7åt^dLêïdgoÀ³–0I )æ /qÑK“é‡ÏÆÜâ¾×ú5©©Å‹”—¡Ç×@õk^Ôªó `MN‘CÑÃ:,ºC9»m çyêY6Õt¿ŽéÍÆ¥)ó¢ hÅG(Â^‘WŠK<ï D©¹¹Ú²EÓÃ}Q™@�I6x€)é::,ÐT?øi¬Ãbo¤+ŠÔ¼½‚KC% ÆÄDV qOù“¤À$8n”tzšhˆØ¡Ìò*(1Ù„öb¡ÙÐPÛï4òR5¼Ê/ZÉœž|ºÏøíYP„ÄŽC{ÔBEË\ÚUŸN~ŠVy‹Á4;¿Šy2WUHYµðb.]ÐÃX§zÝ’ï4"›RcJÿJ¯ÂÙƒ¶èð™‹DEÔE¾[¨`›Å#…ßöSa}ôW…Á3]‘Ó‰dó‡Ë�jaZ-z–9é{¯±q®D-"£Í™í°Î ô «W’OœE~@jÑ -)q4IÕ·ƒu~ð:ú�ßOùVhŸAaƒÆA¥œ@™Â±èMN ¶06“/x{´©Û Œ8àXaÊ39^B[ü-1¾ +½qeû J…Ì€*HÖ\Å3‚ Ì;�S¸þ_&™ž¥†IŒj  ·V¦È sã Ib·Hô…°b¼�UóÆD¸¤'%g‚@”‰ò\EæÂ%‚$ ”Ï!ó°òŠ8DŽ×ïа˜|�¤!uŽTë¦ËÁÐáAplŸò#8�ç˜,‘u”MðU/¢v~"3•]�ï´TƒN ’Íït ªLcŠïŠ­L¾¡¶ ,»ãVÀb™eÒ¹“Éù·*&D“øÑpâdPPPÖ¨?¹šb’/Ô%-­£Ÿ¨L/)^ž¦O< +ª›ža°"¨. ôƒõñu ¢6àTrÜÊ(žÍšB'«Ü­Ëæ°ZêlV!ý€ø†DA%�·Å �c²¦áE<(*�ãÙ ¦TÅÀócŸ±ñ×÷xÆã”aÔ‰ö@ïÜÃäZL—G9n°Ë'· hd¾Ë_rJ>ëP`~ 'e‰È ’�$¹…²þ(ƒ#üÉ÷òV? ì-y£Q."®aÏÞÙR“=w»‹b2ÈAPLƒ©5êìÆV3†Ï·Ê è\’¥©ZL(æÔ�täJ9£@%رÝW¼\¬M¸_ÎÐΗvÿ-ZW>¦t2Óד‘ÜÕ^ûî>ùà ­:å hþFëp2­üT>ˆ˜„Û’àû¢x©0�™Á!ßZÝÅ’P.ß°Ä¿º6� ÊrÒW.U¼»Ð›8µ‰}5(µ«•�…ÑyÅBQ´PYÊÍK~Bx¸[à¤sˆ‚0¶uÜØShÏÛ§–¤ŠMˆðóPí<ä£0+útù;™÷³m—“ЖÍÅ=J‹ð°—&M$µâJ€¦žëÜ¢¸T¸7ÿMéUš ` ÿfoN¬/ú2Hõ•�y…”°°I÷�ïµ ’ m6c+§4•¾%ï¦Ozµ1«”Â(n—\JЯ¹Tà8ç¥{Q[F_¶Wéˆñ¸¹øaó¤�eó&¿¶é)šÑÿEïÕ-|k¥þƒ�çkÀÙ0®Ð—Úê`ËW™óÆ’.(l0€k n*ÖY@Hp¨ ]¾B¨ÖGË0ñPLÒ2%Qél–:�&eöþ`ºèáªjg!IPb“àsžºP’-�uj¬(Zœ)ë5ž6kAºAâ¤È@=ePËÍÍåüÓ&¯ˆKØ/ã˜T + PÐ*èVT¾Ç™NÔ'—8GŒ¶M®•5ÿ2/ãÉ‹G*3RR\!ÁœÂ#ƒE‘Ñå—ÀbøJÈ,Ñ›Ñm§T˜„üÅ"[˜;…÷‹Ú×`n´„|–Øåú,”7:ó>ÛSö,á[î'Pƒux"ØMt¤æNõçÖ:U:T)lIk,dW ŽÞ•íÐÔÙe2õtËwÍ÷âCsĬþ±YÛЛü +Qsù®-‰š6HîË;dý óí¬�E½H0 +>xvá<-y¾}Ý5~ýú²ùæËæósPR4'rÓh"£,´ô–j§2"=)'Ug£ƒ= Ni¼ +~y@ ÷�Ú‰›!’#‰"ËïÚœ�~ù@46ñÍÜÆ:Y4qBEà2Õ®^íÜUÙ:t²I#U'ŽÞíz¶ÐOœ;Þ5‹’xJ¥ ¨àã|¬–=_b®wÈsXRÄ¡(†¡Q¸dd³dSL5à@ŠÚ% Øl™©ö`,dÅû@�G’ÊüOÉeãErŸÿŸ\þ—’Ë>ÙÕ\þÀg°‰ð9B€®×ãÃuðB²‘!|–UÏá/>¯S½j*¥|‡{6¨–üŒíµ``À_†žçY¤F�ê¢Z/ž-"^z´G¡üXa/ß?,˜ÝñæN{1wŠÐè{Ü`±·v‰lé5B…>q]1zÔòƒèÚ&M~,Tb@逄 0dO»Žó[–@+ì3FVo¿×—:“[_ +»˜ó°ÐØóL>šoÁžæ|÷vš‚µ£‚0+È®�MÒRh*yn¸L1> $e£(ò/PÌÑi-¡標Úþ,Œ ¶^6è•àÎÚŒ’b þ¹е¿ÑGxT•bš%�&Î�u)g¶86¨^Hz +s0“sÍ÷šG?éI­-ª·z�Î]óL8hZÉAC`@m¿¥4Ïb…|–ËÜUÇ…ìÀÎwê €Æ&¢"ÕßÌt”È„.s÷7Õ{0 q†x| : Dõ ºVWþe³�%uÃg£üá'9ÂRŒ Ùßp û¦Ú¢rT‘Å +¶W˾re1¡®ñ;Üž~xeß—òì›ué•ù»Ð#f ûRBÓ³í¦Ù×Ë÷íUöx§¥vX|¬“ +Ø/6\ ¹åæwyš?æÈ†C¾ÄG0Þl}î¢Ó·ySÍK -èôû¥†±%³y­þîÞòž6çÏÂ=²žnMMÛ¢I©q¿¨iö`zÒy6ú~…û\�Ç4ಯ½ùŸ«³�( £R|Ý?4Û[0ÔwU‚÷.ûb³CÖ4þ®-öüÒËæº—¦º +8¥òzô ª¯fB^Éõ”ž-*{HòÇ9ï„·©à{Ê¿m<º¿~3M™ Áù´MõIã~fåµüÕÜ„4Ýâ·ælÊ9˜hï sÇÒ Äðƒ è Õ^µ)n^E´¨EkŠb\J.E‘4^tZë,¿—!­ÑŸnöøB§„æ³wÞÿo,—ö„ ”ïßÔ©O.Œ�ÚÙQ°¾Å U‹ù{÷ºìzg'[`[g(¡«îº�oÞî@YY6¹J';?“é§´ Ñà§U)d°œÊ&P·#yß]þ¶‰”ÁQ?Äm ¶,Š�RæJE I„ɵsé†m™”ÕéÁ<‡êA¡?EUÓ˜VYݶ‹�tÃ%¦ƒÉ’«|Š5ð¬‚×NSn¸€þº†iÓÙý„ØZ©£l=gÑmzª6¢À·—ë›óˆê±µ€MSŸT*ŒÅóVM*ÀHÝ2ín×…gñp»’Zþ­û»X[2_ËÙäFut<�:^M‚;U¶x+dÐ7™*˜ö÷»Ú"_%´¹èöÜ4ïjªcKV{¨X~k -Bõ—ZoÊ[)C‡eœ„4N`§MÉÑ„æ!63,Jûª+8l½çtóÓ¹ýk‡Òc™.Pé›N�×Ñ9…æ»\õº’ë„r5@7â<øñvq +Þ¬›V´Õ^À5¿E@xgtð]�9w…@^ 9ÏÕ’ï£.Ì„eu'xV&‡E"Q’=:æe�•¿Ƚû1Ùgõ¬-0ã¹d-ü¨}F0µù–¡Xã2”$6sH¼)ø\Py2Ü–äycmf¶¾Ç›ÙâTÕ<» »ïÚ¡òû¤“­Ì¦‰=�ÁÓæ^S�òƒ«3:·e2œùà'vR +9™Ëvð?¸ÊÖjÕ˜cî:[Ô˜Ò¨R%<Äù ~ ß‚RpØÇ‡1Ǻ^Š©þrÔ¨wÞmOL'¯TSP<Õ ÐGú�f6>˜ ŒƒÖÄÆÄ�‚šxóØ ¤×@d?gý�uù‘¿gæ�öUm +¯ÀI·«ÃsÍŽz´PŠÊ8·#‚©`ß ÃïY2…ÉïŠ}·&ÿB‰¥�3½ïn$žƒíqap¤ô¡dú>–F‰ vGiÏB1èâþy·'áJûlx�L°üþ[P6øDøh¾“ã ¶Y+ð¸BEâ@¶p‚ápTiÚ(«Æ™ 0ÿ"Ú[ƒ¯£‹Ð!6›ƒŸÑÕÂßOI~0›4Ž/ÚmÐN³_v/i=·Á¿Ôʢġ6mL¢Ùó͵[�ÝA¯ÂFnÜÁw5ð£y.†¿e¼N²— Êx2‹ÃÌ@+}°î@/�xËãR; ±IãÁŠ3ß*ä 83¯_ŸN Ù‰â Îã1ëºáXÎ]†ˆ€²hI vÊ�"u'£©ð¦ˆ5§¿ëļ+{&/¦gþÃ~µëH’ã@¿¿¢~ ú$QÊ]à¾àŒ¿±¸1jÎØý`#‚RfVÍ6°ÆÝYm4:©J)E2 ¢»´ ðéJ§ª©ŽÏ¡ù(\øÛ6ü9d�N©72ÑÒ:‡/oúD¡Ü�#f7*°ª&�¡¯dõ^¢,ž”îËBDšÔd”¥†NM0CÒu“ª÷ã9-0ÑBßiYS¨© Í~ä +'5©{œߢþawâl=Ù€óU�Q Ð? Œ³$1cp™>„�ÛDmXãæ,.�·Ó…©&$`§¦5Í(s•éÛtzqØž`‘2~S@«Uašå×Alš{Uµ”HÕ0þNÁQÔÙ¦ìx6y¸­ì|w4Óø¨³”®>]Ιª¼êÚÙ¸¯¨'¸º"Na”êrŠ]��Ul_Ô cBMÒ©1l^g¼¤ î_>vûãã?Þ‡ð”�8v ÞT OC€&8•”FÓ¦ÊkòÖwךë5-½Ȩ–öã-;üc• “Kq¼²ÉÍ!¾¿×ñ¥ý6Î>OymZ¼ÈJÅu2ErütùCú!Ï$ªü¼ûŸ¨¡êj4qÊn¼'WÙð�ø‚…[éå°3+C ,±Æ³žVâhH�¯LÔw\ì^�sÕ=:ý¢ú ´!^nw¤ϸ­š”îü àß”¾i”›·õÝe×Zöã°k¥«´á:Sa¸ïèõÔ^†¸sZò÷ž†sÞ—¦â7˜›K¨ÇpZÌ¥k˜à�ì¥E´sH}c†iåx»²¬‰ÍH¸´t‡ÂaŠVH1Ø&SãeS‚)Õ”(‰ú‰ðè]v+¹ÁüDÖÃ)å˜ÊF‰ù!¼�U»þÁÒl v�ᢔcnZ†­‰®‹t˜�hcÈ`�ègÔ›²)…‰³°åLI*ËâÜ¢‚‚­é¶„‹àc¶Éš ŸŽs¡ºl X¨õ*Ëj@ v–x—ZL¸ef\°JMÍH^]5ë¡*UŽˆ(,U§2#M×Y L…Kí;Á‹8‹´òÓa¯ÊïRÞC�Rä5²W—jׄ–õŒ %šf1•\Ú®¼Sh0“’™¬,*¦°¹Ê‰hs×&*¾"üå,ݖו£°Û”;GÙN|‘,ºÞE +tˆÏ.A$çÂR?¶¥}™'G½ß;ç¡e|ìËmf8o%ŠÛÆûgÉö¨­UàÝ…Ö>ŒSäÁ ƒ íd�Å„²-1Íqÿ·ð ›ìتñÔ ]çÁ*¢%å¢XþþFS"†&Ç–•2tUÔÔ'ª~:’;8X©ec‡1„õ™Á–�7žî… ˆ}'G²„Í(Žœ€ó`$n rÃ+ÝD”3Û�éÓˆ»0¥(+¾ÚçÊŽŠ÷(²¬”³¼X�ºn§D’MNëÂŒ +�–)Ò tjó|°D/›QÈ °ÖoÁ/̓3G¤½+Ñ @úØ ¤NåvŽ>9Bˆ��áQIÌ è!5ÜbF}Ã�:¶ŠhÑtlE×$›7ŧÆ=­Sÿßk@ÙqÂwO;Úb¦ÑoL=‰¼e“ȆQõ*þ4‡öEkRNa± Àb©«£©¸¹Õ¢IÔL`ýjw)^-«ùíW…*V¤ëç[HÈ5 Ëêªãm7Ý©(U-�–‚µbV” +^{mvjt‡QŽú^l@‡-Ølò®€tîá®osíXæÝÅܨ=ÆdŸ µ©#•ÆqbÛÀO½­CˆÚã ËúXß_æƒÂ±ok¹:#ãø�7Yúô#žãNÚ»îzñê'õ–šô'¶‡Ú«ôÌJÙjqQÚY„±Ç{´þãÍ‘kK¾࿯tí¢tçgR÷Tºåªtú’ÜŠ-OŽ…L!Òħ@{Sœ$Žz¨�¾ÚÒ–$(q¢B%3†ØzI3všq‘‚”ó*ÕÅÉj£E,‘½ÏE5Ò™QõO·_�0äu­,yíñá�×…³ÓU^/m¸åµ‡ŒËyþ"¯÷Ý—¼Þf=­t»Æ÷Ë ÜÔûtÎ �ýÌöâ6ÏÈçùº¾r +y]z\—ྭ%ˆ Ê%�L¡$€Kú/ t5x4j<"y¶5ôý´ÄsPLE–'2ÒxNC¤Ç©n4a“ƒ÷×9/K�si»JÍñë £’öï7|¤ûœœC+Ñã×Çûå Dºy–â,–I +Á‡¨º~¼ýòíö�}O·?¾ßþùí¶#.iðáùµt½!{t¾:FBªW×AWE gÄ^–x΄à+ÐÀ˜›…W¶·z xM…-_—×¥#ÏÇÒ�‰ÜÚ@eA¯ø²ô�<¨Ì(Gû_‘‡³Æ0#Üu…¹v¾C¹h›wû¦]ùð²¤t]¶Mm»¬t½|üãâ¶TgJ>¦Êô~±W5µViD|˜YÇŸ:Ľy[NB9‹„ÂSÕ‡…Bý�/eD6ÈÙªšç¥GœSüi>Ÿ~þøÿÌÉ/öú”½þ«qþâªO¹ê Ï_xþÂó_ÆÊ8;BÑ•7ÿ-¾tg³ }ZÆm44îÑæÓ|Ñ*.ñ>©ß1¨dŽɨÈõIÐȈŸÊÜ?aS/kSh]ˆêŠÐ8BÞp,D|Ÿ•Æ +ì*íÌ™¨ vlu“JáÎóWdéܨ +½ú:Ëq’ož¦>Ë“S=s*Qç„8CC@Ö"æ[ýGÊs‘´ç@€  `Räl‰¹§ã—;¢63”Ê9P+·dgÂÕ5 +‹(ÇB—'ËÆU1j¢iLºædœÝ|”˜\zyŸÈ¦•‰‰ìÞqSÄ“WeNG‚{ú0b4y1¬ŒL—0lÒÌPFx]dÛû¦Û~l»ùz.oƒFå0!÷†àñ4c4=”X@ÀÒ¢°‘"Âôîøð=Ó9c,ÅÈdVt²Ë=üwÚÀt™Šoá¨UñÅ‘×4 àkE®sº,açê²ÓÊ�»fJŽ�@±Â sz+:,תrZF“mM·þ,¹üs~ø³TdqRH-&ïfÌ­œH=PmAI#bC`gáÜ7d·.?°bº?u)Þ JìÈ<v–Ugj¡®½je H4²ö"»yÖìÚZØæM;@“#·â èD` Œ0“ÆZ ¯Ç½V +ƒ »—�…&DÍJÓÍÞ‰\…B`o£È. .j8‹ÿ½l„TX1†vê¦ÄM=Ay�Úów~YT¥�UˆD>Ì®,3§îºJ�§`¡3œ=¢É†J £ º¬"LÂT¤VJôѣɜNå `�^%«!ˆ%°-)ëì/,_ÖÌd­,Nãt”ä'g Ñ :¾9SLGÓ¿°Z×PÕ¢Úy¡ LÓ)Ðo�±zE#k!Xäq.,~¹s(ÄïÜÑbÕ›Âü8.}ðÔÅ�Åðcíºp†£N|ž,Ú%@ÉA4gÖ/,…æXÝOÛ÷cl mgnÞ<å7y9´š$Þu¢ƒÍ¨sG�zgì-ÀÙV»ëñ \›ôR‰R¶å…PYMvâÎ?Ù¯–Kn¸§È tYÔ_[>€á…{_¸Ùf|À$•©TÙ³óèzï%%þ‚ÁÌ:Ó Sñ})H\¶™H˜ÐÞ”¿_ +Ò¡OA'0æÉÐ#„ó�À#¤- •³Në’{Žä<K0šj Pz‘yd�E}ÁZ®ˆØÔó÷L©€# �‘ƒ‡»= #Z¨ÊÅ_¸�¢�Ot€— ÁÎ lt<'Î ÚV·A‚©L.b¡Ó=Î >+‡#ol‰IL H5ÍÄiÃ<$zªœÛ9ÓÇœ2â|ÆQC 2Å|×YÇC¶Œ]y"!™M¶Å ®ð3çóûu­‰œ¯`½ëÏÐ’,7çO~ÞûËžýF§?ú…ÍÎåÍÃûb�ªl™†:Ϭ¾[ ‹5±áÌèÆÑù>Ð4uLÚ6ÙȭЃdB…Ò­k;ƒiZ•3—Žc*vS��mÀoÆÐy”§Æ%‘bzrŽ»¶V„�§º*KÒ%/Ám‚²qì¢î|ûÛ-w¬<êáМõ¾Ð@ÜŽ1±ì3˜‡½¯ûÌÔÛ×>Óìb¦×A„ë–p»1÷™ ð}ÆžÃÑ4–wv¸„‚Ï—êiaw‚•t[˜ÈD�éBên˳úÍEpCÎá†×y—8ØHÒÍ b +òÑ:‰E…VŠð +¹ÔÑþþÚ‘ó•1&¦µ�†–â�öC5A�–Ych¥á”·#ç…L都~=~G$ÂñÛ í=rˆä_²qC-ÖåÓ—åû@è.Á™ÖX ˜9”™ß_?~=~øå[8þøvüôõð8c<%”Àç‰,w+,·vûÃQâí/†£@I-1ÚØ{aÒjXi¢›¶bØJ˫֣žÀyW2oÄ +l¥ògº¯QBéz†Ñ ùŸ™³“á€&ˆØ¥dŽËÊ€ÿ 2†4Ÿ¹CµI¿Î¾ ;´,ï�ÿV›h”ýÔ÷ÅW“ÇH*"ÉÆû²Þ%e0_PH­ÖŽý�sFÙÎØ•ÎqYîÓp!í!ŠÇBN¯Ê–ì�žø½U œÛöÞÉù~‡6%.6Ÿ§þSÎ}ÒÐ?ØOÞù,×Ïrý,×Ïrý,×ÿ“rÅz%ðN*÷9ýøŸÙI×ö%â+$‡0¬5åÇ›¹¿¢4ñGÊe¥þß’nZć�Ÿ'û¹­F‚è—i†1á.(X�B?)ª­·�ˆ—PçoÜc_Ž£®Ÿóf—�{ß’ˆ¥®GXàâŠ7¾âéé‚Ú÷- Ã%6/þ¦®gîÐyC¡Úzz@�s-Ò´Ÿ%¹¿¥¦€Ýgï¯팎 ¦¢6ÏãþüÎÊ)×Yà÷�é:ohq䂦ÿó¬;B~Ÿ ¼¿>@,O‰�Fi9 +íQ‘ötAêJtÿÊÎK2Ôð + ÁÞ_ s…À{Ñ\Až†ÆU]Ið\PA Jšàå[õlÐ +þH¨*¾ÖP^Lú©ÌU0zÞìl�…$£Rûm\ =üNV¢ˆ ç³• »W=K^%Oè\¡+$4#öª5Ö1 ¸áÎMoí `jŽÝÞBcó”+(ÜÕPgwØ6ï×(�²[Ö¦'Ä[K#]ò’`™�5HÀ�Ù¢Ýß: [)*×ìU[Š@knç ©�ö†æ{E_Äk”è@gy@w¿ž�Ú™a%Ý&kªR ÐüÇ�’òbb÷Ù Ó ®vš§g`bdbr@“Ì›OâyBjñÕ:lªúbç¿©U�€.nç �U ¿¾y!X;Ù€2ïó„Nã<¶¡jᨸ«ý¦M ºá>ír1(Î×ì>ø":m1 &·ó„NƒŠú…¯²º‘U½ÈÕ���<Î;¤vŠñòßlV7ì_ÌQ#œfù1�&´ $iAó¾BUÒüF™9­˜PÙCõTFWèWh¦�‘${)0†åšÑ6h'ðþú� û–ul§†‡û<�QdŸåšs²\Ž\€;»Ì¨Åÿ º£D¨ \ŠsüEDÙ@ô�ܧHzB§Ašd&©øk-Øoò4<’ý":»n�ÚAѹ³O@i @²qLºŽkíÐiЈKñqÎ[™{yroU½C§Aq,Í@ÀªÑÛ…@vÙ©�j%C–múZ5úàêII”ç'tZuDM”]èØ3ØØOݤ€8ãó„NÓ¹Úx$&µ“Q&ŘJé›B¤§É”§6Y!ÚɈK7ȆhN6öXýälµ°ý�eŸ6$ôÇÁvãsúl�Úé>ø«º +„Zí6y‡ÞL”Þ*D;…«•A¢C€MÞ¨\åUv’ªÛyBj§ú@ï¯Ò-�P8Q ͯ'A‰ï7äêNT`a h8è6-œ;íT±ÃF—M�:7È) Fãiè»®W Ã€)`]8ãÜ7Íô:7¨\�iÀäU@Ù€"S0–2‘ê¦WÈít5m´QÿD«€°O©Z§÷OÈestm›²¿¦ ÜÄEFͶk€5}oÛ¡sƒÚ1º-Á-©äkAÃaš=0‰bƒ¦²�¦ÈÇ´S“Kô1�l@·�Z7„eÜøjñ€\o_ƒ T¡õÊÑfôöGï¯_�ß_ÿ~…ã·E$fa’züû²< WÚÌÿ™eª;HäœÊñþýõã×ã‡_¾ÉñǷ㧯ÇϯŸaID/×z ö`åÔ dsl‹ŽHÀ RèÇ(Ár¡kˆ:o¨ÂÕË +Ìq¶à<©pœÖv\—™Àûë39:ŽW¬•Ð^—¥Œö¹]GÍçyXÞ¡ó†7.hz?�šá™·ñç÷׎˜º 0F¿¸Ždœ²“s½ Eeæ„ô°0Æ1Ó¸ÜÏ{H6 ¶CçUÎ:‡0ò1B:x1'ZŽà/xÝyYV`Bá69ZçìT?6„B.¢9F>›MÊᢱ� ˜Põ¸ül})ÎÝi…4$äeÚF8P  ^ˆt6XT'E¯ÜD¬\„ÝÊCënƒÎºã1¡El4åŽ2‚1v‡�e·A>âjþ ävL• 玤/ÆÓ±Íñ%>•ü Nøn»eaCñ‹­\ÙªÜy˜>,buõhéðTÓµAÌMH!ê¹#<0±{?š€@k'@=‚û‰-jç iÞm¥hÂõŒ» +AX1˜ºÉ`Ràpþ²˜� ¢+ +Ø1á*ë‡,W†£ñ‚ÐG”-V•Ÿjç ѲÕ4‘ð5(²d£Ò¦ŒMHMÀý%íl팱ŒpPµr:'(‰Š‹µTL%tR� ÊH;D;Á +�Å9Ÿ�íª–y:ªƒŽâ攺´³A´ÃÑ‹*!Ôt/‚ÀpVç O #$@ÖæP;OHí =9+Ô3_ƒê¡ƒMãļSN^ë†ï¨D;è!ŠÁ–QÅ � +PÄ=Su‚fw^½0jÆ:g‡h†ºž�Bú„_Ó碫&¨°6þ€!q3OHÍ€²Ð �ÂP7$u¬ˆ‚ïpktP7.nU»o¤1¹xAþ¤½\r]9Ž :ç*¸^wý«§¼Ák~![>–ö8Ndu³IÙ€'†=fÞê¬Ê_d¤§‡J-ѢݤS +%-ó1DÆtMÐmU³x 3*ì$ø�L‹Ù)¬|¦< Ù¡�33(3ËQ7æXŸª…ùE53T2Ù£+C¶”ó>4 …ªsC!j¿Ì¼ilE¸NHa4СªÖ˜SG»s‹å‘$À ÷T*ì¨ðÙ߆ŠjÂC*LEvÅ£1wΖ!¢¿©Ó.èP]&P—sô7•Ê«€iU½*îD{[aÏÂùžÉx;Â~UéS&ºPJuE ˆ�B±ÀÑc®ŠïÛTÏ êž*¦0¤¶=îóXê(Sç3�arúq*–¯—±tqÿP]‚´AÏ¿W¤o£ÛEöݦiE‹½†á«Â6Æ×6¦ó³s*ù3¸G{Ê´øT� +„ü6ò¦yâd2§9³ž4„»?ØM„QR(25]«çSe;Ú’R]bΔKYŠÏih—ZþÐ`E�ÕÔˆg0¯'cãhMQ9ùÖYŸ*Û™&ÙJÞq‚š™Ñ¡;­¯ñ¬Q0­È»ƒó©ÂNŽŸtºÊ†ÏÑ$È u�Ãi˜ÞOlç]… ÄÒ‚L(—êRe6 h-a˜áÅÆ’yWaGh\S ðôg�\OÃt­Ä§ÅžtA÷Ov„€™¡y …$Œ‰´ÆëÉîç´ùTaG‹ç.«¯æPñOUo¡I5I{‚f|ªèHa†wˆ/ì^Z7¹èfZ¤^¦œ40ª°£‚ª}š¬ˆ½ë³D½ë=Bj9çÓšo·Xä>T˜ÉAü‡&›Ô.ëG×Ëw€'+�ÊBWÓ¦Lî]ó|ׄ¬vÕÇ}ôF R(fج\Ï«§‡ªç»*͵P2u“�Á%�+”D8 °ê¢ ©nÐf˜~WÙNYúèî[É͉F±&þDÁØl¦¦e ·?T6#?+V·ƒd(*vº˜mï¡‚œ®¶/kQøP=ßUyŽƒtox*tØ (òlc°[QêûÙ—éwÕ²ÓênU9>kø®ÎŸé~°{ÄÒÊaå¢ym—¹r,W•XïÎ;&T¢”Ø<�G(>æÎ÷ío÷ÞþuÛîÿ¸A+ºˆ—Ô›þ{\dͦ +:ÝmÊ�@«ß?nþùþ§¿þšî¿ÿzÿËÏ÷Ÿn?ÙœzSŸuQ‡‡þöKÜtO6Ž×,­„ +KƒJ#EÆøÛ�ÛƒWßíðÈÌni”ˇÂQÐðð×üÿõA˜ÿ¾ý�w\.ƒ7¼/áz™‹rgKÁÜMÍÛ1©ÿë +ØXzÏqüu>Ë¡-‚<¡â%Ö«¤®ÄEu!8§¾V q&»¡Ž(Aˆ5í]eqùl÷gîÍ�˯‰ÍÓž»‹\9¯/QaIB®œ ´ƒÝR{Sºdu{ËêŠb>‚h»8$�ÕüÞè(ØàPL²»î�B+] ?Tϰ³áÙë³ì÷bøýòÿ‡‡ÿKÝ +ñµmrê?–R¾”Ò«¤ýUJåZJ0 Á µ¬ÐÒÚ[_€áŽNc"ßÅ´Gj;29ôTÂqœ"?íü¡,¨ˆ`g‘ŸÄT~{þ ½’[Í}%„ƒÁë lsë »%gv=6¤;Jyÿ(ÌRI°XΆ,bµ�ûñ4Áë)Ö—¤ç©†wý[ùç[<ÒŒ%üœ¸¥—iD? th]Ôo=–Ó� "|ÿ§0#®]Òùª%?OYC©ø]…�%9íGÑ?ÄDa‘TGá¨/•¨ç":zƒÔ\¢�yrùòxxˆ„äa{ƒ³-B ‡•TÈ/Rг0cG5ÔpZòDË»¥gU^&êÿ»«s„ã’J¤NgŠ} u R9½­Ypá�u\‘“äwÿ#IxóHÌ‘ð/ùl³:»MBù«>¡‘ªã•™ô> ¿°Üö(±�1”ªX*a7»›$o<7‡ƒ  Wƒ~ÕÝR »,™–kõ_·j©ÔÈ|™ãìÆÃ]ȃRñõΉàÌÕÕ°3"¤|fÊm8ô†;Óyœëô‰Àe¸ŒjÌ)×o;´:G)WuÙZâÿÑ;ÙQžn;†ô<§Þæ˜íºwûñ5öHãðü‹4Vº‰ü™~ýz£ŽÇ~4¥:"•Ï–m)ží,Þ�'g³#ò„×ÝP€7üV“°pùœ%÷îó�¢£liG›?`O} ßÇÓ@x½5ZSo�ó¯VíÑS«±…Æ5NëAâ|"I/<`a,/¬èÑÓ#‡d|9Ÿ¿‚ôb9>­É1qtÛ“”#B-ši$Ñx’BˆXîy�ÜÊ™/ ÷Òî+ªÿtfvÀδ‹ñ®º!„’ÞÊErªG))Ø«x"òíR}#!%BIÆY“°qž’ ŸüÍîÀ¶!îUÌ]MŽî·32£™ +gÕç3Z+9Û4mè§ŠïÍ28Ö].no¤â(ŸÍÏÄA„à’rº€J›“#2Þ�c¡¶(ÐÒ©–œbníÕÕì•�zaLÝg7×—[^ÔÝAa8Œ(¤sÀfµB¼9:5ÞYºK²Fk+«F‹‹s°¹š5aЧ`Å–k¡ú÷ô{^âðwÀº9¡’˜�’˜uÍ0·5ŸP^+]‹²÷xÛâ`^Ãî8˜B&‘ìwñ\£%•ºÚ÷�›”�‡ê‰‡äH­€eç�7¯Og8˜×ÑÀå~`Ζ@°�—ªj´ÂþpÅõC\½:–ø˜†ê4m(„�Á–Š+�züó”U;õ¾ŒP°ÚñÖ Kú^÷/ñyæõC.ZÛˆŸaþûfÉW?ãw¼Éß®·^¼ +¦ÆG”måTÍ~ÿýûÊ?kÓ¥]oìt¯øÃ‹¿1(*ȯê§é6Ï"Muw‘pd®Ñ7iŠ­q^åzQ®1€Ç4{ÒöÅ,.‚!ê2³§Üd¦ ãu ÙÖ#Ž—ÏÝ€{ìý¸Å—K”è�JJ7•�ÕÍê!¢N +c½˜7�w¨x»gj�H#ŽŠç¦Ü1˜ç†¢Qùœ9¿›Üú‰Î —»z>gÿ¯‹›ðÙC¡w¨£¡i»ÇCÒ ¥ÛVãôTJ1EAÏÂ2XÜ °o=�œ¨Ÿˆrñ= l13Ƀ4ŽêÒI=FúBB㣮àœò¶EÓE±~)>ò~œrs˜�²´ÃÅÎ*꛳$×Ù(%øØü¦Õ‘¥oyøY<€Ú6° ß(u˜+ÜÛH\rt€½Ö[,4V³6Ã'„Y•žnq»Y¹÷hp ñÖ]Žà66sòtAë¶1}å).™uÌ1Ðï¹›,­_fhî‹¥PûtfˆDÖZ· sš+7O4Dñ›59Rpê?,‹€ë*‡¤kðYWIõØÒ"؃Êr‘Ôàê<”ÒÍAUM=æo© q뾪ñÆS>Šõ¥¡jcºmÕ¤5›_¢øàÚÑU½qJ¤³š¶z¬+Ú�*ûE9w–W�[Ó#º|§+ Ò*H{0£éD©¸*E–6[Í~‚@_Û‘ÂHÕ¶xg·å>$+8Šîo¿èÔ p×Çj#­ûu7>lNp HRùTÀÂ‰ÍÆ"�Ú¼xŸÄ1•ò^Ê”Vš|𯻠¨�zÀD6�PÿeÍCg‹03<2D÷¥øJTby*/ÁÔÙ%ë›MI�\Í F»â ™›ÑyÙ4K÷n#:º'÷Æžƒ™(vgo¨óö–¢7F :B5A’«°*lмÚÐ,œ×ËA3­QA9¢¶Dç4*jý=ÑêÍ–Û ¾ ·=ßáݪÁZ{Ÿ±’š;‘†Scæ…vÜåQï%;_HqP•X9gll=VQQ^Ò[ƒ †yö%“Óã¶$šò’EöhÙ¦’NxÛTŠ·æyn¶¬bšÿ¦»JrìÈuà¾NQxÍÃy¼ñ¢ü7} c ôÒõÑ0P~ÌA)‘Á „rë£|ÏAˆŒ0³OËç¥~5 t¢i?!¤É„)\ÂÖ™ÐØ'щ8%Zˆ:Ü›m¹û<à)£èÈÌŸ¤RËÛ°©’ý <¦Ÿ&±›.TªÒéio¬¥dKás‘ipyZκ³ רðµ<6?¿Õ8¸›l˜Ï¨Íw¹$Ö7oÍC•ÚbëP«4�OTUE?ÌxXŒˆ¬Ï­~Èug‘‹ÈžÙGñl¿O�Gl´ùØž­Mr¤³UŒÆÎšvg§ÓM@FEï,…Sÿj&ÅBò£$ÝØèFl¿�СÐÁe€hfÒV¦[  ¾j¼L. } cGkCòùÔít›ð™“(ã 'âÜ9±Œ,ºàÄÔÆF ·ôõ�~4Ü¥e‚ó+55Ò¸çÝL9¨Ð‚©Ê$³Ùë*­Cå—Õ“#rsµ uÌW_±ÿ�¡­[U›Un A¤–ó” +$¥{/²¸ÂY-Â^%䔸¬E¢Ñ¡Õ¡çI„hÜx‡=Àî”ÝèÑi6Î�¡;s`Ç E~tš4ù’¡ ï‘覈Z4Ý<-Úl‚Âmå�U_4*Ì(’!eHéx±}è> +ÌÄAÑ^ ÞR<<ØÅe6u‚•Ý^ˆ(PÚ8ñD:tWoR3ï²”2¡=¾Iаùy;`íHìÜ*›Dò9(Þ£†]D‹š(‡Ï^ØÝX§ݪ’8ÊÕ5£×‹R«pèˆ)Ö€U¼ó²¡¿ †‚Ä×€96BéæÙ¦¼H¾§  Q¶âˆÇoß P-G4'èõwö^?“ûú;÷÷mæ¬~Êv>îšž�¹Ügã q,ãäœXŠtlE® »Hã°*Å í "Žõω¥âØ?Æ8«ÿÿ_€r@4çu³¶¡o�y¸H¡2–O([…–¯fcàÜ&{uº÷i¸ªÝ˜ñqK¯è>Ù¾‰Âúz[H”  K®Ú[nÚï¶_åN£�¸%pRåeeq Ú’¤üÐmìN™‘£%é�úÅÑ FŠpÇgÖ¼‘]u,ë¦÷о·¬U–¥_w éÙ°gšî⾤�‰Þ2ÇU™/·¼$sÀ�AM~jòÓµ\“uaå¸ÚTxÇÛÖǤ ÖR~”½°Ðbˆ$FéðT»¢j GV8<°57ÔA¥fWGà–Ô%ʼnA^ôš|wLm-ÌÏÃzjÀi �T:�ú÷1Í�™� <œ÷ºÌókŽËê‰èAùÝRph`O³ŒJ˜Ï¼ŠP$þ¾¡¹ýÚMÉ3ã_ t‰ß¿ÎÖŽ4¼÷jŠb¯züÍØ5•Ñ 7T­÷ù_¼Ê°‘¦}T#¶tå„–š÷ "mqB™îbúôö,ÉÞ–qJ®\.ÐR#3Îv›£áhÚ‘ü£n{úÃ]Ú€M3¿·ÄˆÉm¡›±F²* È .ëâiW5 †¨×·Ù�&~²°{0*ކ£æ,fA“įZ£ªuùßRV–¿Fq–=2TäñÖåq¶iz +1ßYUu%ç¹nù’g<аŠz±²W²˜ ª¥™S@§*Ϊ|A™AÀB4ª¢)ɸÊmJ(:ˆX9�‚éƒPwÁt•Û2λM¼cǘFTwwP†·×„,q�o·ˆ¸—&|üúxÆ› ëFYÛÒ$D"¶¤ÎIQÑ´F,1-ŠIAÄcô,5FD'Ò1ÆÄ£'‹úT곊ˆÔ3{Ê]Hç˃Œxu7 +¦(b‚º�M3dzL9Iì»:Æð‚ƒ¼äž>ñЦ‘ÌÏ'¿«-O¥š NEñnWÎyŽí»MÑŽg‹S`GAm§¯©:ÑáprL/"@ <ØîG˜#“'&ÚöÛqeµz¯F¸Sgü©ˆ~Ý­Ä…o9Ïm!ÐËø·?B‡‹H[øöoïN/Ÿ}?Ïhû‡]ãßO'{œ`Æ�ºN0‰ŒÔ¾d–ôã»8a\ã$›Àa¼Ïö6^ÍP ãåè/‡×xU6ó‡÷¢R´ë½ s£ïUhüÞ‹Æd^ïU²æ‹Fe<ÌW6©Â|¡™I#l¾à=Æ~˜/Ä2nˆÑ0_ùz$›/Äu_ó•­ßÇ|e‰õÃ|eë�Í}Êõ^¹8Â{!nãí½¦rìÓ¼žö‹~~^ûEŒÌk¿€ '"ì—0ò¶_Çu_lfÂ}!&Ã}¡ÖêúᾆU³ûBL% ÷…Héq/Ìéa½¶zK8/÷›0^§5…ïZÂÚ±]S×ìºT kº†(oÏ5â +…¶G©BŸdøl¸ÜDí·:ÓtíVÓ®Âm5%Ý~KõxÛ-ýµÛÊL÷{Ž|Œ(ꤵ¡nnš�Ï�lû[¨Snœ¥sŽIÇîšsûd‹#�2IÛe²ë™>𻇆/jî!ž_½D/Ö™QØS‹‚�Œ#*jŽMþºÿ+{?;µG™© J‰f¾h[ȆÉßÙ�…ʼnL\2ÅÛÍ”âô¢í¢1¢}²=¶»E°�‘f¤+È>?8Iï¢ÞÉ5DÀ†Y˜ +,�i¡Q*Ç(Ðí%ßC÷p'£lSC”nË.ÓPDaa‘X´w]ŒGÍ +M®|tD‡üèÊé4Š‚j»W¥ãÙÔÏÔrü�Ö ¬ž‚P”ê0X`jž-ŒŒ;%ÊLߟ ®g³,[¶1INœ­…ê‹×ÜBe¼à' ’ ~kÆü;É . )«Âb/Om2‹0f)”Ó§¥å´Y�íèayN ž/îwÕ8Á»MÅÌŸ€ÉÃHªT‚ƒ R6ø Ô(qÞ¤„ÅuàÒ–5Q/rÈÅ ä4!d,q;I³¥nºÏ#Wfg’è‰goª³÷jþ´ð0úÙha@F}2†•±�–G•v°õWÛ{ÉvH�'Ó·œ¿2þCn�Épf8Ê2ØÒî×bP#=éE±.¼…šN»Îu µzü¿umÆìÀå/Y£Ñ«ª+ˆ"ƒÉmWküñzÙˆ,,«h„Éé4^T9Þ!Ð[}SFÙý[r_Å^Ž©à¶å,YÉ•é²Êf�æ÷Ïó;T@¤UÙ.Ÿ 4 ˜Á}æÔF‹Õ;œ:\ºÕ¡R¯�á(»‘}6ú…�j¤/µ«ÐïSðªü¾€ã@þ#N`×b=ompš�š 8T¤(ÊŸ�²»ž;WÊÚ:K�î äâÆ<6·ñãÂ÷ãÆä•MY�J%ˆª }@12GÏA©ÿ—ýrG’æ¸�°?§˜ ̰Þ—< þþ†BkŒdˆ÷�З@uwí�’G…Œµv�é®.‰D"qu®ŠèM¶¼{^·LºT•Èú7Ñ$Yl/Ç¡5lø¢i¸Vs¿{^§çˆíEU»Ó{”ìï·&‚)Á Ú\:@lÛ�í÷´ù’¨ahýHsø¨þùÇý§_?Ãý÷Ïû/?î+Ëèà¬itfùðlw«ÂZ¿âÑ6UÓ/›%ŸÚsôæá Ö¸ÆÒZ ¡iTËz-'b½.¶ ½{^›gót¬òçxs=CÉÐળ«oïžÿY’¥—DFMƒ«+ÉÚ.›<$O¶ QIWWöƒh/ž½½{T–í]j?Óì¯_ýØbÕBWE-N‰�ݱº¤Šç'Ê�”•ôc3–ž‹¤-¶,mC튪B6šM*Í.ºw“d¶ØÞ<¯›¿³½ yב_?ú…öÍ@EV¿çªßPý†ê7T¿¡úÿ U–©Ht¨Œ©}�ÿõ7ÿйkÅBŠjd!Œ�¥©¶¸-[|ÉÔ6X>‹ j.@왊N|õÇM{j;~â�‘ŽwlJá©Së3 þhäø­Ï9Ô!ÏɆF¥©<Ñ¥Ú¥ª–Éë7µÖùÖTµ¶?Þ–ÇXãxöRh�H–KܶG®UùЃý5­Œ1(&ã»Zcuìƒã{·u6±­’m•–ÂÌQ[f + m–žâ/êÎÐrxb³¦ÑæHSæÝ¡õõ´U {5ÜÙ_£°ñ©·Œçdßô}W»§>öÌdìQ]ÖÚ¡ ‹eá1é–nŽ À ʳ`G@"Û/rØ×]Ïëò”I?õå :µP•DnrÚJŸÔ§ÈW²÷‘NEñæh¹!YnR*[®€F—_ÝÓ-ËÓd¿ÎSùד˜[�&¡£™ìÞ8êˆV�A’d'ûRÁÏß$6öj±tØô<6L¦ãqÇjféÑŠ[mì`5x­ylZ¡FáxŒîE—ŸÎlÍ»›ÑóIrJ²Úw%9èf&e5Óª<„ØrlmÍ 0Ä´˜]�ˆC4†¦ vëÏ›z7.4¨³a�ªÑ1/Ú …sÛh¥-„_Ä3<õª2¿3²fWnü˜8ˆlÓ²�@^§½˜å1|å\ŒóèÐI9Í�ó¾'Cm!,f „õÖÆŒ°.PüÒ)ëÎ?Bj'ȹóS1*Ú“Àüš'¿öâ¾+°#»šƒ‚à×Ad—$ Šeª×bv-V9<5-RWc§â¥ Фƒz;k<ž±Š=Dކ$þÀιìè Z]]|À;Ö|¡‹ +TAü‚ždÔµð9Öx=à;ÂE'¾ñäè Š¿šÛIþޱ[Ò ÃûG�ž�G¶‚$;³£j+´ë/ðƒ¸ÅVGÂ)Í;>ˆA:‰P㊆A§¯’â‘þz  RuÎIz'©Öw'+uБçÅ[ØÅHyñvH_˜�æ@Ç:¹ê—–M劎»Þ`U Û/* �æƒqª·úIJ2ôé-°XäU)ð $!ò¨ iq3+êV‚¨M?¸4[ä•[(‰%x¤´x¬Ê’F•áÀ +Hè†þÍ1]ŠfŽ’ü…<ÝnªvÒ屇VįԘ&¯z3g½ »­™­2c'‘ÝcBUqýCÊZ”]¤z‹Ù=úÙ¢€„SYgU�?1<·è�d×…Å»ÛÃä‹nn¯ ½–¹®ëç¡|�Ý5t”z¾ßÿøçŸÊéh[®ZìܬocTÍ‚õ[‰§N¥w¦:aéT¥•¶éT:%¦K¦bÚp;dê²7™º<›L…$¢­d§LU¥qÉT1°†Ò!S™$Å5Û!SM«ÍK¦mÍí’©ÒnN‡LE»Eãn—©QKX¿d*3;9G:�©¥SQf}ÌK§b×V/��-c U)·>.¡Š�–r^J•¤�¥OlÈI¹…|IÕ¨MmîRO�å’ªØÉ¾µ¤ªÄ\n»TÅÓj½¤j\›Þ’ª˜9¤]ªH>¤*_žñRª�t»P%½¦K—Ne„ÔyÉTGÓ¦RA®}וÕ,[RŠy“¨ªT¼*RsæK vë›@…Út�¥O5â)O vÓ¦K—¹4%Ì/ˆH9igI^ïŃÁ\EIíÚü€õ¸LN‹qëïuÌÑ̰.€ÑhY‹¢CÎfVº³t«Ž 0¥94»1ƒ›¯dÍöV-9Fûrhp%M�á€\hgY;¦$Orx(Ú)ÉJok…$fuòZµaª‘“áÍwÈä²] +…„H‘ÙU�ïõxö‡]&&¡Àh³œ±"mPe +)zÚÓ- ™ë)�´B¨k½.J\ši+0Dî´tÑžÄì×R…é*9yÅLûž$ôJ3›n…p¢Í=IçI_©n!3“z‰ò±¶$ö ÊçpˆÃôÚ"€ )EŽ×Z)„·å£gÉO,ž�ºÄ™Â�h†·0Ss] 0ƒÉ»ˆ�3É' ]( ×ðN œ4=&ÌÏ®¦FQ%`–í¹Ó8‚#QˬVq[ N›¥°Œƒœ¼%+w€!ªõ©„i6Ɔž;F,ž�Ã̆w¨ÉB€¢l)æ�‘¦½›eF´%†DPn0mU’„°(£ +ó@ºúƒª“Uá!}JFháll!eý¹ešÐÀTûW¯¥t|ÛâØî¯…¤ŸR±OKOñ*Ãü"!!ÝÁöÂwY�ê' –E¦i œt¤Lç4�0Ÿ +f:%ë ïæí×xß^$‚?gÁ¦’n„{k›˜QÖ8Äe +FÚ :Óôš¡~g\­Ÿx©æõÒáÝ®Öä²Qí¶ñ®D1 “äE¿NÓꥭáivXbøb »õ“™Ò¢Û²+pMôl»ŒÔŸ�kï”Ñl°¾Nd%�Æ9¨»{¸ûHÌç{8§Lbƒª¹¹‡c,kPªÉ&k,È_\›Ö +%¤Š‘PñÕFdç’TÉ”¤Ù’ma› �÷Z§Ž!rcº±mŽjòdÙ�¶Tþ®Õ-¥ÛXÔjCˆ çÓƒ�LmÁUÜi·¿Øð®×æ­Õx¸@.:˜ ËKAíáÁpßœZá¢ýæÒ9M}Hè“ÙŸuÃÖŒ3âÏž“›,v¿á›ëu¹Ž@_Ôú·;-Jÿ~«R1¥€d`Ïš‚Û¿�í ÒHÎfz�V„ :úhüüãþÓ¯Ÿáþûçý—÷#íô¼”ÖžöåÚoÈ¿-µ+®Ü>ŸSü¸§ë«‡CjÔmždèË,Ö³2„~ ºz©²Àõ×ks]5¾\ÿf¿Ü‘ä8b êï)ö=Qÿê²2uŠ 1dP4¤ûGèe¢ºwHJž¨�±Ö ªëƒO"2ºnOÐéi/ïÝüÍÒëuú*ÕÊ©s=¼Ž¿„Å)Sjø¸ osQ_¾£éNþzI¡z>æjý|q×=ß<þödöIÉ\c Úåçñ$ïD:SƒýK¢3 GRþG#ƒà/~·‘,µ¤†ƒn}YÐ åXóB׿Îéo–>Ç’š¿§c\ü|í×Oÿ0?HëïÓç_uòEýxùÈ@þò�ÿ@fÂË dyxèÕß?~õKY£ßëëŸo_žfÁF3:G§§[“a¬¯÷Qð¨L–š¶¶Áè—'Wž˜A‹¬1Ä1䞸™ù°á�p}M�é‹U<3iA¢“«ü ùq¥®Y×n®Ze^Wñ“éýJ`K(qi“ vtß÷ûKœÜ"L�åQÖ©Ò=v<ˆ"ÃSi΀C¸ÁªÆ‰³*¬�BŸ>‰÷ß^˜p¡2•ðMbA�8´´_íV±‚䊱xÚ¨ù¡0ƒÇ“ÀDÛ¼÷Z@�Ñô=K º¥Œíà,¥»S+^8·á¨*q�Ã!‘iW‘Æ#;(MÂ\+Ÿ_C´±‚ïÚ°V}ʽÄrRDì›qÅxh9 +OhqÃ]‡Ÿ2(ö?üƒõó–»Ý$©°:íP]bľaEáÀs9¢Q…�2`6Äh(ŠŸÈÊù¥WQº+‹ÒKkÔ”I&Ü�QðtRಽsT"?4žà/4âµÔô‡�f  ¿ÞÊ£ÙÔYòQ«œ7›æ5†Ôe‹ToÀ!i†ÂR!$„ø‚µtÿÃ�;/öé3rµ˜•FJ—TãÉ´:Ü:çÇ2–£–jÑQDrÉx¬.5ä-QÃQÅŸ-B(d$ÍίRTÐu¡É±åÑ"÷ÉoÃOuéxËXßW„ÚîIV)j<¡{°ÁØá)Q/¨ÎZ•´ML€­-²«”j{yt�y��³!“ß<#'mxð3‹Â‰ó(À]³Gi¶“ý&�·—Oð`O“gÄÍ`ªûâA]ðàZňŸžH°Wᄳ¼ ¶wäeY�Þ„xš¨Âa-f" C’ éÕfäՂȪR¯ +Úyšÿ7I(A›²O פpr] +­â£ÜËñ[0®2BÞ»�½[æLj*E¸ªÛ÷ o“¦aò®œòï¦ù<²3c3‚ã¼3ƒ¼[=GfLñ�ò,Ya°á5˜¢ì$L¦6´­–�.×ø)áµ-:¢�§ý=+Ñ»oî§éð¬óI¡§–lRÍfJ!îæíšgÙDhÃ Ž¶‰°úæ!ÈÊ×zPn”�à°ožõ T|¸0+¼MýÈu=H˜âºû5jsy—œ Û�,‘‹¥”„åi„—vš&—Õ¹6uiã�2ßÇ|ºZ��“´_¢èþoFŠ.�ÖZH‘Îè)t"'¸JQ™„²«¼°‚^l²ügâ…hõ¹‘¯® +‘t]±[iݼPÅE¸³:ªã<íló;hRËái9ûË:û­ðÝTÈl=¿\6¤M˜Ï§ +ç•»C! F0C”nÁÃLÇõÎÖáBé|IÕQŒÍ’GP‘�õº\ uï,î!²›WQ^@ý®,B+•Ù|5=ËJªß,af”uÅ´‡wÜnC¢Nïl~sõj‘'ÎŒ’yc uÌá …O’Šoƒ2¶htè-�6µÌ¨2£ßQ¡‘ƒÉõ²ê‰1÷‰,ÆÚ… çë©ëv÷d�ÚÚr|Ó°¨»¡&ðb\˜Z(éB`¨PnO_³sþÜ—Íet m¦û§ÍÓ²q¹Ô�àU5U/»"o)Jkô !ëè±õß4´ü©ZYûVĵôG´'PJ]Ôn;WØØ·Ø«‰\—}É.sBh�Qǃ·³œõE5 zSÕ¢§B³°;k‚â–§J“¦té<’z)¡–’›g�•M0ܲõSmŠ<Š3Ìì€Tý.êÃûXˆ°ìN/3žFç²JºÀªZoD”žoéb�Kž¸Ã_}Rœy_+*3Ú÷›J¿P‡ R3²u%·ÊR"…"ïQw³H‰š„#l/ªn +G¸¥&O·á«»½;QqFoYd ¬ö™#ÚùûÂÍ û5P¢DÞŠAþx©éN$ßVˆÐD[Ûī۾= ¶Lj>ÂAÇ×Þ;¾uîñµïïÓ˜ëö+l×ãÓK³÷¥ø……mVà䲨Úµ}°Ûn¼Æ«*r£œAⳃÔ-›ÅÑŸ!.Øÿû˜ð”×#k5xÅ�Ç¢XDÌX^cO�Üó½�Q’<Žd×ÀáYe^îÞ’(^ÁØbÄ ¡œW™“’s+"ÌXuÒREðy_FldTÍ î+CÞØúüò› EG¨b¨V‹Å_ÿ|ûòÄ££Qˆ†ª\WÎqôæÑC�ªöaK0©Gºt-¸ +,LÃÛÑ[Ì)ŠtLCð8Þ‘ˆ C‰ÇÜûôëÊݱ¸`8£Ø¤d 54¼�ÒfÿQÁží’8!!NL­û:©Ž#ÞZöÒV#„KÅ�Bû8fÅuÛàx(\aÒSyúù—Ÿ^ùùkËE · endstream endobj 252 0 obj <> endobj 253 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1289.063 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1288.0631104 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 254 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1444.599 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1443.5992432 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 255 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1478.447 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1477.4468994 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 256 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 711.008 m +1093.816 711.008 1061.304 678.496 1061.304 638.534 c +1061.304 598.572 1093.816 566.06 1133.779 566.06 c +1173.741 566.06 1206.253 598.572 1206.253 638.534 c +1206.253 678.496 1173.741 711.008 1133.779 711.008 c +1133.779 565.06 m +1093.265 565.06 1060.304 598.02 1060.304 638.534 c +1060.304 679.048 1093.265 712.008 1133.779 712.008 c +1174.293 712.008 1207.253 679.048 1207.253 638.534 c +1207.253 598.02 1174.293 565.06 1133.779 565.06 c +W n +q +0 g +/GS0 gs +146.9482422 0 0 -146.9482422 1060.3043213 638.5340576 cm +BX /Sh0 sh EX Q +Q + endstream endobj 257 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 711.008 m +1365.009 711.008 1332.498 678.496 1332.498 638.534 c +1332.498 598.572 1365.009 566.06 1404.972 566.06 c +1444.935 566.06 1477.447 598.572 1477.447 638.534 c +1477.447 678.496 1444.935 711.008 1404.972 711.008 c +1404.972 565.06 m +1364.459 565.06 1331.498 598.02 1331.498 638.534 c +1331.498 679.048 1364.459 712.008 1404.972 712.008 c +1445.486 712.008 1478.447 679.048 1478.447 638.534 c +1478.447 598.02 1445.486 565.06 1404.972 565.06 c +W n +q +0 g +/GS0 gs +146.9492188 0 0 -146.9492188 1331.4976807 638.5340576 cm +BX /Sh0 sh EX Q +Q + endstream endobj 258 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 982.776 m +1093.816 982.776 1061.304 950.264 1061.304 910.302 c +1061.304 870.339 1093.816 837.827 1133.779 837.827 c +1173.741 837.827 1206.253 870.339 1206.253 910.302 c +1206.253 950.264 1173.741 982.776 1133.779 982.776 c +1133.779 836.827 m +1093.265 836.827 1060.304 869.788 1060.304 910.302 c +1060.304 950.815 1093.265 983.776 1133.779 983.776 c +1174.293 983.776 1207.253 950.815 1207.253 910.302 c +1207.253 869.788 1174.293 836.827 1133.779 836.827 c +W n +q +0 g +/GS0 gs +146.9482422 0 0 -146.9482422 1060.3043213 910.3016357 cm +BX /Sh0 sh EX Q +Q + endstream endobj 259 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 982.776 m +1365.009 982.776 1332.498 950.264 1332.498 910.302 c +1332.498 870.339 1365.009 837.827 1404.972 837.827 c +1444.935 837.827 1477.447 870.339 1477.447 910.302 c +1477.447 950.264 1444.935 982.776 1404.972 982.776 c +1404.972 836.827 m +1364.459 836.827 1331.498 869.788 1331.498 910.302 c +1331.498 950.815 1364.459 983.776 1404.972 983.776 c +1445.486 983.776 1478.447 950.815 1478.447 910.302 c +1478.447 869.788 1445.486 836.827 1404.972 836.827 c +W n +q +0 g +/GS0 gs +146.9492188 0 0 -146.9492188 1331.4976807 910.3016357 cm +BX /Sh0 sh EX Q +Q + endstream endobj 260 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 983.06 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 983.5603027 cm +BX /Sh0 sh EX Q +Q + endstream endobj 261 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 618.106 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 618.6062012 cm +BX /Sh0 sh EX Q +Q + endstream endobj 262 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 934.687 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 935.1867676 cm +BX /Sh0 sh EX Q +Q + endstream endobj 263 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 565.467 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2643433 565.9667969 cm +BX /Sh0 sh EX Q +Q + endstream endobj 264 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1060.808 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1059.8082275 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 265 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1093.605 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1092.6051025 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 266 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1249.14 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1248.1402588 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 281 0 obj <> endobj 280 0 obj <> endobj 279 0 obj <> endobj 278 0 obj <> endobj 277 0 obj <> endobj 276 0 obj <> endobj 275 0 obj <> endobj 274 0 obj <> endobj 273 0 obj <> endobj 272 0 obj <> endobj 271 0 obj <> endobj 270 0 obj <> endobj 269 0 obj <> endobj 268 0 obj <> endobj 267 0 obj [/ICCBased 87 0 R] endobj 243 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwnΫZ€N‚0˜Ã< ¡åP%`ÔÿdfÎÈÌž� 髹ñÛ?¾ßþþ½ùë÷ãöíû¯åxü8LÇ�Çoßþ†[ÿþq+g‹v´âçìq,ïçèõ˜açóøß?oÿÂ+%üàïàïŠ\¡œxÁÎÚêþ «˜VÓW¿ßÊaý°QÖq×%üvðK.RN[\б¬ü¶üÙ1[?£Z`�g4¼ñø¼ñÙçí>fÀ”ð‘`4~‡Ë•÷ÏÖæ Úñ¸½ÀÙáÝó+?ž«9^+øý€u½;®l¿mZÂöºù´èï7Áû6¸ëë÷�ÞŒJo°’u¸^úzy»ëY:×…=÷~úÀΧÓÈsXÃŽçx4•�zú ùõhg¬z�ÇmœyÚpžÑAñ~Ä9mpʼn­oëì³s¯Þ‘YD+*ã³²²¸äÆ~öºŽuŽÂMY XÉ0 oÁ´7ÞšHwœÖPç‚åyý¸Áôu¡ô _¬žÞÃã¦0Ð/DoEõioŒ +#l*a;‡ú2à&|@ôï°Ð×ÑÏ2‚ÖsTn0ïŽr£õÅ×ê“¶FS†±`§“�ö­–ÑW˜7xÜâ©Á”žH,Š‹¡¬'ª^•Ê�­ŸVíp”BµÉu`ÿÚyc|?Ú¡ïfægjQ˜…ôwÖÍ�"½w$q0šªuÓQ7ت®'båL&scôks!æÎu×as#LtYÕS�ÄÐm©bXnHdÐ úƒWû9ùjÅæÇ•CAøñs–²?Þ!:2ÎX‚`Kì­†‰ŠÿÐ5jc�̦Кì®ÚéAœÞÕ¯(ø!Ü�udŠêÞ¢Âêx"u±£²­‹9Î#}½±¿Ð ú{ÝP>r÷Î*C«ú¬¡¨ H%÷7F«!HC¦+ìLõºn4Ô 7Û°"Œ*á`ÜÑ2X›�7•{YñW�#½Cu²°Ш¤½í–ÐãåÃ�}þó%%”CfBÀQ¼où(çD*ž¾Dó�w&Þ=C�…¾] q®|¼Œ—M�;ç5›ž¦&ª¨¢¥ØSmqzĤG],ƒMàH׆تúu­7xu¿n—¢’ãûX)˜‡½6™êsî‚Ý»õ2ì~YfÏ@u2½g «fÜì +Yôª*sò/vsÍ<ÆîÉJÈyU + +Xåó‚ÖÄ o8àÞê¬'¤ÏˆÕ<†=FjAŸ^º1¯§fk£®=v¡'ï°ß-Ë*ŠVç0úP•™„˜fvë5g*«±™$YUí¤|¤Ž®dZw)nŽhŠñò3GAŽH]Ijj®Ý $¢:R¯ÔHi².‡5¨_­6f6wQlZí9.�®h�ò +1E<Ûo¼‹§(Ž¡¾lu_“âœL>á\‚mSÆÚ#¸KѰ -hÁhk_ïdþIÝ¡Ú +‡™*üe¯ºÛ*•’Q»¾�ëH„î­ÔN“©vò w)Úx!l4û&Ì~8(…P—ÑFØrÂ$,Ø>ëózµìE¢¬¥Ð!’$18x�v�•„ï�è#Z4 ¨Iê™È(5©X¬¾xÍ=\Z¨«ÐTÎÐýLeÚÕð00X«#Ï($cúSMIlƒ!/í „äÀ† ©‚¾ÈÒ#÷Ì�"¢�’uéIЊyGR`7ØRü \8¾!"Š~"Û1†kˆS½¤Œ3� GÿÒ!ÇRý-M²ç‚”Pu^XR‘­ŒO*§Fi/„M¨Èô¿A +Q7Md¿.Õí#.X5©H;A]zBíK·9¯0ù&ÁcÕŸ˜d'Äi¨°4"(™È,Œ‡j¤œÚB'R¾UŒ!\‹Rò`õ¢ºl9¸œ×H#CäGÒ�‚‚Ö8ò]EˆÁæ‘„Ñ1£FηQ¸CÔyìéƒ~m~´mVÂ$TúßÙHÅ%^MÝãb²Ða­ht§*»’KΛÊ.%‘ˆy’9L`NTÀœöEŽýŸí2ɱI‚è¾OQH!æá<ÚÔ"Õ›¾?ÐöÌ#øYRA€’ö$#|03ÏæVIq·nŸWüÁ}ãVm=u`díc=c<;"+Mçus2©­Cÿe“ºÊmÌš2Õ–F�çÚÓk¤´{¤ZÛ@im[Çf÷H“ìVj�v$³–{#U·ù‰ŸMÖ±^o²o=¯ÒGæ +›QÝMۣϳ±¯»3=€²$)aNVt¿õpÙ½¥¢ìá/yúz:9aèBÔä¿.”ÕHöÁ –Ze?ÔMf:‘‰Z„c;DžÚÜ3öñíLU»|Lxz>”¿ÃãŒû!žøF|ÆÞï¢×ïvmý˜Y{Ð\b¯áE“éßöv"5%…㟳¿P'`à �ï c¨ã=–dùš£�²‡öÐ-Ék{ Ûæüzÿ�~> ü90æ|ÿQéó.•ÞdØ ÞSVr¢´ûõMÕšK"ãÍtŠÙ<�tK_^¾·à`¡\_Õº/ÄŒÆS‹jLñFBéÖp�„•k³Ä‘Û!Æ, ´ƒBmkzȤ3$Ueœù­:¬˜+ÝúÓ?ôà‡ÜKz›ÕÙ¾¥Ø†Gløÿæ±éÇã¿Î�•a=÷‹h»'äTI +Ìæ?EÝ£?çì&f[G·ÏIaöºGš=ç EŒV3ú5J¤¶˜ü²9`|tÓ»éÕŸ!»I{nŠ–�Qó¹&&kŒƒ´xš�ö°>ð¶˜yºM¾¬ÅDü·U« :°™­V sÚm@fBMêô+ŠšÆ<×ÖŽ³A�^yÛµ`¹öº~(Ù"d¤Æ¦é(ô±SÛ&ú‹›Z\2 ©ŽLdË�[ì©gÕDZ%qmwmZÉ;dî�l9ôZ®ršÎ1S$CÃŽÚÏõ“¨Q+%I$U]QëÙ¥�k;ôA.'Ñ[QD­¡\m„ùoÁ/�.\x!Ê3`�QêÚc}5á´Å¦uÇté¡?vÓ…W–I’ ®oDƒáþâšoï6ŠÒâ=ƒL¹öø †ƒÇä¶kDmXT"Fà�H¨1fzŒ™™Äi,“˪aÔ†™^Ø–w±fÎãêÄ.÷âbZ†J·G\x²ékö涉­U«¬ôk‹y7´›Þ<àçGâÄ0Å£LŽ <5Ô+Gw6²#œ#uÛ‚Uí‡XlL½üþ�³S;­~"‚ää¶< «Í ܲŒSpÈÎ>ÿÚž¼íÍþûsWF%çQ”ì _-× ?̸ßâ~¶xfךЈï΋Ëyz'³z)Ó‡ Ù^�>‹åç‡5Ír6df5×£GMñF9ñîy©Doz +Ä|æ"ˆ¿S¤ùN/Ëy„˜º">ÕtAÎ{�ïÒó²NTqg^¤º�>8§åÁÆ¡Òey”7Ç6ݾÞ.æ€Ñ*Ÿ»´g9!�φ÷½?@øc¦ÎþÅoÍ]\­L_;|ŽÎH�,{ú‹¦HäJøvõ´óuB êëv`yÞÊ"Ã�·U§lNùV±Ÿ¿;„%òi…CHôÅÛ!¨|¾)ñ­f€> ìŠK®dRTS‚Qz6s@†ÇÇ8Ð*Ád:ÚH§_ÈÈ$ØæïØ«ûå) +¶{Jà„•ã›ebàý:ÆSùLÆ"~Ê&;>(䵯ª€n'8æV¿èd^_ž6,b�®%)÷Ç+ËG�û‚Ÿ÷¡¤6žÅÖ|_š  +Õ裶+›øRaÇ€ ܲ7°¤Öeý+–ñ²Íγ"íé1Pí ƒ¥ÖsMA�”"!¥q5Lª•«µX+kïž×¡â:yWOQ¨œèd6›+¯ÁH7"1¡çeDÒª8ÞátÒqOnôW%0—¬?à© �|ò Z½PB†JЉ ôðuêê #/Ü‚8P%=pÒ±‰ý[z¹x +òR’Í›ÕÉ~œé¤.f¾×$‰ŒÒÿµZo=¡¦öL¸`±yþ._Ä�…ýg×Ì“øEM»EüÝ´ +Çt§¢ÇÊŽçÙ6`¶µÕM<ÐP(†À¬—Þ|m+¹ÆA +«g]1/¢RMWg‚—ËÀsµ_;alLá3)ÛÊF‰W«¿´µy¨=ù6;º•¨¬fÙâ´¸†CTY˜[1Ä#YÁ‡[Ù¾^êÕ1ý‰ý‡¿ÿˆtôݯ c2i&“Ϋj2Á}‡±¢–Â�ºi›]¬›†1ì´® aìÎS¶E0“^h•…Õgõ)›[Ì�6é†ãZOÛ­Û£[‹ÆªQéybO‘Ó¯ˆ• tµíf¤Z%¬Dëû˜æ‹ÌÔkûÝœvÔ/Us~¡á*úà:ânq~ò2¹!@ ‡ºˆäaz‚ÝCÛž¦Õ¿kì^i&«ým-UlpÕu_Ù‚y^°DeêS|[pS5ýÅ(‘ö…ÑŸ4Í.Сþô\.²kñ³ïªo«‡ª¡”ˆáÚöGzŒmLUïÖð˜ÔªíàEð8°ºÒ“¢MèÌ`­(,{úp@ÎÙÊÃVt'è}.ï½·~@ŒkÏ-%NZæÂ= °½ÂNKRk¸ÂâOM�Q\KKÌï9§ +=eµ Ý:³+,D NH-‡F§a{º"-)º7ú½'ÖxjL�‘Cù§˜™vÛöp®ÚÝpÔ“+|ß1Ž)G.» +sÆ +»�ëcÒï™Á+Öðü�é6:Ît­d ­ã39pëõ‚¨/fÜ“íér›XÜP�îØÇŒ+%ð`§-XÎZñé=øÊ*hË9BsÍç®ÂÕÜV{Ù7¥BÿþúßÏÿ¾zd/V<ßðÌ¢¢§Ex)«¾‰ku»wÅÕ³Ãø ¿±¸8J¹›_èPñ3Âñpú{‰ÕÊsË&“©u/-¢×~áE=lÕønQÕ½1ƒå{½2>ÞX¥ÕßëåÆ7Ñÿ{=BüÆýÇkç˜�ò¨ƒ¤xÍÏeÓŽ ï…¸(ûžDvG ùÖEÙ;=+Åz Ú¯ÏºØÙÙŸ=Ë~§¾œTÜI>±6…|¦þ�¼îÈQ\IzÖ _¥ôMŒzˆþ¨Ù®«¸%Ì×øÀmj‡¡˜EvòJ¨‚Búë$CFî°Ë0ÊAzm2ˆÕM¥+:´�̉{¦Ïo¥[¡.ssg‡3T`Z¨€´ž´X/ªŸŠ4ââ_$K�©VRJË+@ªÃͺ/,žIتw¦sœ§šSÌá=J éHH ŒïðôS㨌ËÇnâFî¬ô‹XÍë^Q_7®×!¸"ÚцW¤ofP¦é�Ý´˜M/°Û.ÐR\ò¶‹Ñ¡„cP™d^�¹Ci•S`Ûä‹aÿùŸ‹Vñ�‚ ú?ûÕrdÉ�]iZAàÏ]ö²ºÈÿˆEf‚õªg´èÒ]xd±HÈj2WÏoD ÖÂHp +z‚ ø}ÅIð�½�ææ Ø'Ry„.–èˆHžH?pÖ$ f»�r“…©�ÉAñ÷ƒÖéëArgûT3šjú†Nâ ÖùÃÈ!p¦„ÈͬíNÚá%gGØ(d™;­û¯Ê9 +¸`¥ÉD“ï†á +¬IÄ»ár œAXñE›™µÁ’:Ó(â݃9 sÁ—`.3ýJl3JjÙΊ¿$ðꀎl$ý ÿ"zz¨¹+Ó8âDŒBœ%½ªÍôCþ�K˳SÛ,낊Å+Xv œá! @µâœ“ûæA3õ³N5‚£cléEŠ‘S_!åS«šá9°×¢WvÒWµ$îÓ†¥TIÇÐâ7 §Z7Ê‘¾;‘* + šÚvuQ»aŒWº7¤O¦ývaÀ=J‘ �…ï‡èg!؉EÍqˆ;À[äå|žC²¢qJœ5¶ÔȆ/Îóá’öh�:æH̪Œ5úYœâ†Îng‹0CÆD³B+´`> ‡倚ì+®bœ…÷‚ÁB g©‹R“Qêa¯N¿¤¼ A3+tf|ÌU„N„K±zeïXÄ +IâÂáãgú³ÅFƒÇ� ×!Ño$€q¥¹ïºÆÐ§AÕÃj#ºË eÆé†ˆ ÿ–ž†àÙÅTž•—NÓçEã>Í ‚¡<7”¥¡Hý�ðÆ4äç]÷M»´pÛíÐäfñàBñ³o‘$_°Suí’u ÿ„ìV§èi3A—�Éë.$s¯®yü‰Šb¿“f'ÛU¢zW�$rŒ]Ð÷vV™Nu»üÁê¬{È +®5¦¶¿õ,Õ ƒëÕF(w•ý¢:…Péz·¥"I¬…ØàÎÁ5”%†ß÷!© Ô/&¾ëB�üX>ï2-çWNSt@|vˆY¾i†:»~³Øò¿ê¼;¹N�2¡E:?^­¢þWS�Š«a³‡HPPœ‡‹Èý~ºïg/þF†ž+LPô¿døÏdÐ^ò‰ÃPr7?�½ÛP­Ô FÑ×)>Â%'I`ñòTƒÀõû"ÞqÞ÷~Ï—NùÄ!Iÿ̤ˆO¦gþLÀ}Çã�×ÎóguóæAš–aYé1HOH74Î+4ŽfåSñ¹'4îöNÎÎzE@§ÏTmðFW–hæoâhoànRÐ@Çö÷ Ó^|—ªBZÎ'‚ëú"rhì— ýÓ§ølدŔmƒ—ÈŽCî”Él%çP•dŸÆQ/·æã‰òŸ—½cœt-£qhx‘YœÛèô0¸‚ŽCpê9¿:åÄ¸ÐÆï]»›zF>„Ï»ëüƒÈy´K“HNà‘»¨Œ'¸0�|›µ2K§í#2—'kŠVwíMÜ~Ênq¥‘ìeË2èzq¹—¨[[üÍ1H‚¬ïŸ¹;0\eî’P¿ö.D1K¶àèª[Â3&êè|&Óõ + š_p$’í–«y—ôv†Ö1¶¹;÷±71+1EÐ:¬÷’ÕOZàñ3Hk:–rýõ¾&ÚðÅaÍ "1$•3pf'Û×È0lý:žïtM�u´�õ4^t±’q±žW2ãA:ð(Äî`+Aj�Ä]á¸N'÷¥c°Ò(‘†­¹®Ùoô¹%ñ2¢6Z¼¿4×d D¸§‘4A…ZvC=r£IÍÔò£QG•Ê�âpÔn“6Ì$.Y +iøS:¯0ËC`ÐB¨oe&²¼Zð(�+æ’ +h³zrH^‘¬‡;™¤à.y�-bµ„Né¡}X”¨Î:�†Î0ž}Ìó<M(í o1·rqX°ÌzHÍ3�S2Ÿ� ¤É—7ûx°e5ÐÆð¹ ú–ÓðüXՖᲪ]&Ôwë«__™D¾1p”Bß4«ò‡fŽŽ|æÕ:Qˆô:qtIèÓ4! �—�é\ùU-¸ÌSùëfñby­…ƒÝå¶+!Ôµ;#–’Eûz Nõzg¸òðJO‡z�ÿi%¢‚ά›`*ëusÀ›…À �! NaÍÔG<7á%‚ŽÉä[P²qWLÙ¿ÖÅ6X‚!ÊmdOÅ® vb� ¨†M»NæQOQðô$²½êà¦døQ]­Äv*¥\€ûêX\U#Ôò¯&ø¥WŒŽ3A&’zã»YFH!tncO‚–äÀ¢—B¢%BMð—ĵùyE«�«“}Œù—M‰,ŸP©kÀ¾8:äváÞ�r1ãÒu”\0�äKw9mj#⃡âV�ôt7Nõ- ×Ë* rZ7B…³ý{£¿4“õ4Î[‚°US»mI´aÚ¯z¨ß£ÍÏIé`W NC÷ ?�D£Š™Ô„K„T˜� /åºÉI*¡Ó®‚äÕ-ñÒ�†\xË$#tŽ#Ñê<ã–¾´Á4cJ]JJ…iޱþ),¼¼J`RÚ5±bœQ*¨®y ¶Þ9KMG!ê”´`«PŽâ ‰FÚC±3ñc.Þ�ä ¼ÅkaࢠáXì7cƒ®³Ø’q!4Û$ �%×1�J?á{ü�újÙ�$7‚w}Eÿ€4L¾y5ü¸ø¶¼÷†±:hÖ€çÿGD&«J-í|° @Íd±Šd>"#"Ó:Þ{kî|x¼ºŸ.à ­—+:¸xsµ/;A–¨^·ì^/È@‘I¯[’ã.ÀÜcÖµ™ðh9°.DÏ-S¯©ôCu¸€ã+癚&ÊD&¯°rºLßÛß° ^\4"°Ž÷ÈjâÕ=^§xC÷Ê¢; ˆ_„£F‚o">Ùe‚ÓbÛ Ì`Lg›¡'Îò³hZáÉ‹K±‘•ÿ�ÞÓÇZ� Ì0pIÁ\]%JÊuÂ=ú©4Y˜ÞNg–õÐáÉœLu-Ð^C¨i¢.%pA¤ÆEÔ'Dá’?dX(’Ã\rœ-aX™lÉ©ì4ßvzÆçÒÉÞbºèPÖƒå±\.ÄB½¾ZÊ»~QNs87Z7•dvâû²ü€ÿ¾)8ñŸ8|Â?3‡we7|“äÀ Ã×§²¹ïw¢QßÖ�Ò„îìYzqº¦ ÉUÚ¹œ‚°\Lu œ7)$Dg›¯Ž&dìÂäzw¿¶¯¼ÌûWûNÙÛC"Rï†ÄÄÀ: 15iæÙóÆáÐ{x뢈%Ú{rÔÍb „ÔXGnÇ`á7†~T1¡œ¼t$°n<Œ–3þ5Ì'¥¢CÀrh¢,¬'IΩBËÓ3}8ÍÐó.‚&IÃÿ.í<�hj0+H6âW®5¾Å'UOzå“n9Ä€¥úŽÙ1oJa¡ªT¯'@“FÆeZŒ’œÝœë$Ó6Ü)©…ùæý¿“^våE!iºXId“™åI’ÚÕDBwÜa 0™>ƒ6¨«z(»†øŸ×v@Óuîšú"¢Ç¡¤.׸‘ÈæÙÔ©-¸¦c`Ê“h×›ÚI¡�ó�6cð—Ãy)ÕåA‚‰äžî„c“:…¤aË¿EÝzeeîƒçót×Ú% xõ±M:tÈ5ý´XȽøÞß]M&y¬úËJ×cu뿘ŽXÌ.ÍÁºjD�ˆ uX6z¨…6¢2¯ë�~µ«·Îc=‚Ó¯6à"]×wÁÔi·—ËÉ]¹]MkîÅVu +øBçië´LÏ*u­|èÁ-ÓIce0†�<(Ç:?Y•©e0m`‹T(4ßcZi�ilZ<Êtº'hCJDûLzXËðkëå¤tH9´nØ'«Ùúº9ù +:ä+ëtÞV�É*øÚç°V‰�ÊF%WÿÛTÔó‰°zÞ„€Ócw×É7¡DÔw³ﻥ £Ì¤D³Ëž%MPC(lÜxµx5¥¥Ò縨Gr™[iò Ûγ39‹3UU³K(R“Æ"Y®CHkL|Z¬Ç{tKîâB¦’«ë£›“Âg±d¿„C »GyGœYX §ïdÉmüyœ¤~u5:IÅÁa·©`I@N¼)ʛٮâYƒ8w÷õÒÓÕ—!Žn]a!<ßU^\Ú¤XC?Ò:aá>l*"¾ÙœºóëÕY +\8â3ØòÅaL.‚ð�¡^œâf£ÓQ=)á² r-—“UÄqD¶çÄø4çÚê™}Õhø>–÷ë¶Ly"ÖâĤZž@³Š"Þ˜èYâ‡íÒ2ÑÙäÇ¢>!ý¡NêÓ­4{ÁÂ8»©h€‰¥ר©Çx§£[du=0üžq�ªÂt®GRå�›¶\½l؃”§#¨ O^™ÿàF„¾©’dWJפì‡J,1äîιkB~h;“²†g¨_D‡ < ¢)«ZÎ3!FJøQµró`0A�¼gåÏ·÷”"é£ÔYòŒÊ9('%O‰“Á7©²!+«œ:P`îq{©±ŒV¯nâ�M•÷¤y#r„[eòˆÐ­:“ÞçápìõRó–Ödù�ÀLò°}[£;ÞHÔàá3�ñb›õ_E¡†áxÃÅ&ò6õ $Ǭ!ÂS‡‹@q­ ¯fñÕ¼ûû˜¥V9Lj€@-F?DÖ€á€Çàã©»�©ˆW«ðÏØ|vÀ(º5•_ߺ®ˆIuð¨!d•·µ§;%Zç2_—(Mk.ûƒ•M¤¹Ó\›5R/ÊJ?%Åî_ÙI¯PÆe犛âáÚêTl׿"»…!à‘�”á~ͪ;÷8yK•ÿ¢K÷11û,Õi'”?”ÊBÊ%$;yµríäHµz0y³Òƒ;•Oì*=v®´§´‡¸Píí­¿Ò1z$%ÁßÕ†*¿ÊÎÔO!ר„ ¸IßÒkYµ$§×5½–Ø)‹s +TèP�jÌ^+ÔóZªL‚ɰ$J1•Ñ$!b:E*$æ]).¾Y<»ÈÝ©.ŸÍœ�·•¹»YCÎзÒà³ân·…q�õ÷”+Áû™±\ª7·6XH¬S­£˜P8å&K‚„_·qß�ŠgM¤kŠœuI=ç:丷¥¥ØeÂNò'¡N£³›ÊeQ¦±2 è™â-�ËV’d8ßBéU™d†õÅ×éî•%Cà€õ–Óò¾‘I¨Ý¶á•z˜"{úJ/b’¤ÜÀt_‚J.bßv˼xýv³5/YFq‰…?K,Á%>nÄÁµ—�è¦'Ôà>}�Ú|™›x•¯dŽ r ¥¨e]fYbÏÄ‚¦�BÎÀ±îSÿ�/— "öê*®†Ø3×#ËØ¨óPÚŠ^ö¤®'½Ç¼ÿ^5ÜGiXZe¯ïÀC\šX¦!"o+«×ì¯âᣕ>Ýl!Ò(·/‚T+“Á×9?íê’?-kÖåOuÙÖOëõ‰9- fxK1Iê¬ÕßFÖsyV­_Ìd§ØL*ˆS{z²œZ•=äj£cÌëzàG¿ÚUŠò\ߘWÑO×õ]Mõ´‘¦—k‹W]M;‚ICê[w†IJ;LÓSJWs?zÓtÚ½8‰¦mË„{©p[¦í÷Ênà¯lž�ù?'äv}ùÄf¶‡„¼ÚLÀ‡||—Ž}gcÿì¨�T§‰£€Óü^�”f_ëàùEru êÌÿߣ&áz¯Hfã¿ý¸ÿzåÔ` ø§^Éç¨;¡T¨�¢¿…įÄo>l& ˜ÍsE¯"úÇÂN"d>Þ�âÕwßÌÛ$9ðÍc"í÷N�€÷q/§ÐItùáŽÞ�Á¾ð%íÆ¿‡‹�Ç¢wáÂ_øb(§§•™„EמÞú]ë­úõ¯<ýý†‹ãV¿<õ ª¿R²êŸy¾Nø—r†Ž D`¤š�êýáçÛ·Ÿ^ÓíÇëíO?ßö¾(1c}`gìŠ>#KÀV>Ù5g³uÝÕ'â;–ðVNT°y±+ÛÚ»má2}ÕðÝVßþò“Ý~ù�ñßþúíÏßÓí�ÿ ?YÊEòZ >#Ά}qÍzLYJð5h|®8éœ@¬’À˜z;§¬Aä¥ùnªB˜f*�ØËQ<γ'îO¦ø�5Ö~�2 +ðããK–!*�ÉÇ^ÇDœŸ~œz;§.9¦öý÷^§‡â<{âþôaŠøyF1"+ë%{ì/v8 ªyj«’¤äÿ$ôv }.Pvx:a� }Æ1 +°{Oáæè ¨]‚유{Šâó8õvN¹_ë»)…)°÷ò€áwŸgOÜŸ>Lá;`ÖP§íÝ §~~©äþ2Ë8÷:&â<øôãÔÛ9u¹È1µï¿÷:<´Ï³'îO¦BŸ'ÔbmËTŸ¥ Vù9|¾.�ãð8+wÜlæ—UòL©üýwù�=Î`ÍÀ;k½yéÏî,.ÞçÀ"wWÇ-ëMë°2ôŒ ¯÷cÿy;&€m/ Hº¿%pÛ»lûîWÒ˜Å(<ß±ÍþV˜±Ãý)ìøyÛ¶5>•.­ãðQ¾ø¨„�>{VçٿٯbÉV–ï)ú¿06øÿ“lðï¯$ó^UO×V¼Á$3¸¡x`dIösñan}˜ÛæòÃ\oŸ&û§ÉñiòSnú§äôOÙéñBS Ú EÜüÑ$P°È‰òÜ ¥(g:bÃì¯m$j‚ ü‰¹þ•xäÓ¾V üµÜl»«¨¹Þ–mØ Ô¹÷ˆçÂ"Xš‹Úw­Ó\{~+þ÷߯2ú?‹®‰[°ßŒVŸ$vØíÄ-öÂgŸe†ïËÉÇ'ÔqÃÍ/†¨È½k&¤›®G cùØ­×Ìx ýÁz9ÄA¥*ÆÃöÝ^Bº–àÚPV9žûL‘õýÞ¶€6P€PÐìkòyäÍÙ¶`Ëù_[‹ÿ¥'ÿÖåëp²ÉØ�¾¿h˜‚‘ã]ÅÖOvìZ 8|éøÉ®žL? cÔ'_á±§ø7ö¥Ö¨k-û@üfwdÙ�gê¥:¬›Z&Z^4ÁhösAÆËô1«ö*¯Cjü‹—÷>ïÈ9Çš„,‚9!Å=li€�mU×Ö¸nWÐL’Â.ªÁ£¦�®�wÝDšŒ$nÝrsÙœºòˆ¼d§v;Ñpb_àñ{¿¶6ƒ¹MÇÛ¦—ë!o»â¦M¶š€1PGk$ôÒꞘrDŽôUNUå{nÅÁÜGKÕ)}L#´`k-JGa"MOÄaöÆR\¹ë¬uB –¿r‚zç>×KÔí¬U<šõ¡\5è7¿R¯{¤ ?òBn +J;•#íË L)òy`7ØCÛ•n”V*0G?V¹¥gQïF7üPSð ïÔ˜OÀ"¿frsU›œ7 ‚›ÔÇæ×äÚ½ë£ðx¾ÛP*‰òIü ½%‹ðö®ªH¢G¨Í͹¥þíaaπƅ«^Ì@&CLÃähǹêµvjáØõ.8òЈrç]"õº<¸ðëë›D… ,n fm%¥±Gº*y {"ï—¿~ðUb/N¾ +æñ•¯f“Cú±¢®¥ÌMw;áqèp)ùAT•Sá)ÖME8Å>§:YC1��x‰QG]Ta‡ñ·(þ³ÝRC”³¸×ŬøÄЗVÁÍ ¯làhV•‚7YËhW5æËx›'z' ¶Ø~ªyÛà÷ø +nŒ+ÀYÁÙ >|™zx%¨ ÷ðŠ_«”ËZ-£—mú³ë|Ä Ê�QàE*?Î8Ú^ï ©0嘯òÏ­wüÜ”4°ÇSËY�ìëJ{[<Ã&ƒRêQa$o1 +ilkpŒ"hêô`Wt3diòí†lŠºúÙ³ž¨<׌�,9æËñµ1ÖÓ‚�¿÷$B–ör½<1C¿¢E;ùyb7ÚZÄ ðཻ*½g&RMåÃU`œÜjZíE$ƒô¢ØY7‡è@o䄚/ýyÅÂgøz¼þå³Ò:„Fºjs�IÓÚd‰C±Sߥ¦N~7¹jáo¦¤Aažiàĸ�»6ÏCݨ4}&ïK—ÄUsŠè&ÙÞ6gzp_#tKg)œû~käÖ_ +Ï[Òùúª"�Kµïe~qT‚wšÈ†ºŒ’óÌÅ/Ú:Ì +‹L–ÆYtÅ [¬£pÆ¡‡ +Õ§1àx‹–S)JàõP¦Q%¥Ž¬’�ñÝ!ƒÅ<ˆ�ÕcR[ gyOÖx±Ìp!O y[š@¾ÇEG¢ Ë’Ož±—Ž�0)æÙ±Ï%Ñ”ùòÒ\>-Xã_o!è‘ÞÒÀcûÇØþ1¶Œíÿ•±ÝðBÖúgÅjØûò"«âØI´lXš5ƒ£ù¸†„óqU¼^â�^Îï¸ÌÖ¹4üò2ù͹ï¥]ºy[5úÇü Þt©'ï߉׊ºäñX™ß"–øq_{]£ pF;GÚz›;ôI�Êä9Èlû%ý^‰k¶qG´èã½tO +*#] Áôò +YKÇýÙmÜáþuÌål¬h·@2ð-]DµvÇx:"¥–ëÑÆ·ø’·CG¦-¼" øù©w·€ï ‡ãû©}D|«†%ªgl+émv84K—�š˜”ÐMJè +V^ ÏÔ_[©\ +ê&jõÜ8C1P�Qz(êC$ëyÀUÞd¥xé-¥8}uMqëŒÓÅÑë²R½:·xѽõª{EÉ%ñ®Jß7¦–Ì=«‚Õ!a{R¢7‰àp®ç:N4u¾�çn^¤"s¥Kâ&]¼AƒF‹ÿJâKö¬úÃU†º"“%’/hjbÈì'óåG×R?Ùå'Éè’=²Rÿ&{ã•{Ü‹—l½hàŠ<ãÂf4i�¥fmî’ý²õ«k…/{öLÈHÍß=U¿›™ªØùŒØ©äÑ …%žÒùÔ¥öØEùºý<½ë¨óU�lžzj²Éãô D†„ÁË6RÊlʺuªÄ¬Ê�z\~°5IÍŒB¿=ƒK“ާ OÆ¡3áOefÕ‚…LBJ^³•&‰é�…ôYØ*ê“Y¡¼=5iöo¢Ôö«(QÊ0¾¡æ‡(9”4pš�ö³“!$E$ª¢UÖ‹ŽË”†©›‰Q`�£—ÔùÊ‹n"V5]%|µå~y�Ò=n/xžÒ‹Oí]Ÿîr³Œ!{HšƒƒŸ]Ž45¥)&ëD¿�ß’[*ãß¶€Æ uë5d:ÙJ�¿§°6DÎ}”\à/ºZ™9ÕRö~ÆCkËî2ê~f“ÿ†MÍ©«ªk@‚z�«Ë”–g-j� Û«Ìž&Ús÷2mà�Ó»!/Yhð&ìd;8„\™s¡ç,ê¥2äQ²|<ƒ2c'%�šƒ£[5ô_ŽŠÃ‰87¸©¤n�‹a³Æ(ùÃØü¬³ÉÐË_–¹Y¢#$*°K5´ ÓêG9Ô38ޝ!_!ãü�®–‹“oä´U©‡’· éÛÑ]a¼iHcÛ=¶<-‰¢¾U¾Î+äÔ^z®X…�Ðå,—„Foüõ�e]Á$Ís'Ú§Ü(©Ö�´š‹#—åö*†‘ÔrAi<@¢ 0ß\!ÎZåm’p¶¡/òERÂl%\³õ±–”bŽ\ç¶Yæg‰TwÛœ–îz‡QËv—sl—ä³þdÊ^Y³L?U; ;x­~+ÿN÷ÍçýÑF¶˜"ÚÑ;6Ë»•»úc‚ÆÒ¢!AFb–¥3ЭçâU”¥ÆQ-ù ¹2a…•ZW c„³É¬n¿«Ê6ï²a#œ¦oŠ~A¦-ÇÎu¯ø4u€S�Ž«=à†W“D'æN †¸%缌öê k[÷6OÄ‹ÙO­ìç|Û&™‚óyf51üÖäqN=ð�™ãlʶ|�K×0¦·ÁEŸ…�ÄMnõDRk-©¿–6—>ÛNÀâ•ÖRäó,±Œ·ÖZ.ÛÎ%o±mÛWe®¹](¬œµÀÝëúN{ÑwŠÚ胭íËs¬lˆvé<¢aPq{Ôr‹8ÛðèTžUõ'””€QxþC^uê: wWcœM»ßñ¥ÆdåÅ^KT:{žáÿ–ŸAqÆû'PM1ÜìN&(€Ú5µI„‚1|—JNÆœÏú ?–�‹—ÿ€nŽ>¯5¤ +½¨g’×geŒO0ûš³A®˜‡ ø£vŽWÒìªó2F•—jæâNH° õm¡Fz�q/�ލ¬‡|ãœpnm1þd¦Dot& ÙÝ5‹M�ö•04Ö +ÆF®ÆÜ2ø»<Í¿$®z¡+&0[–o +š›7ûÐU�Eóß/Hà'3›×êoï­Øìwy¦Òñ£wl–wKœ»8 +Ã0/j¡1�Ÿ.��n=WòCênqTK~ÃÕÞGà´W¿ðÝ¥ÚÊgJ6î»*|—=Øñ� U&6~h³¹î¥±S8¥ú\íA•^M‚<“ëIG�A¥_“·ŽsÞ1!‰SÑ·îm6ˆ¡Q“A8߶ǦàÐ9¬¬—ßš<ΩgC!`Þ|‚M�]…N 2+–†a”ø¡ 8…€Cdµ)r^dç]4JC-!›£À’>̶ë<~/{Bv$nS ÌŸè”Ò|÷Îçÿ ËPÍ!DHQ¹ÿFê“ c@B@�oÔYÌ÷Ú»×m×K;QElƒi….»ëq¾ù¸-ž›,¦“§¿I¥V\R Ö²”2ŒLH-ߪçî2»MÈ\œôCt—Y±ð8Ê\*s-I„ÉÅS$ßÂ$®NKæG‚‚3?ܱIž`�_ÅNx„ðÍ�,·_}жDV ‘׬Áª�&£½Ç§•o—š»f¯sµ5Åð*þ$عƒŸºtk&ÈD7Õ¦@?�fp˜é¸C·ºÉ”:ÿó`ÿ"ñ¾+÷^Q[:Ÿ´ÙÜÔ'¼…Š?×®-tÙ§6H’Î*r¤ûýþ0D¦t‡þnJFImä?EÇ5yJ|ÔØ/,‘à‚¿)Ñò c­¡µ:Qþëæ¾‹¤ md˜ œ,BW úÎb�ÍH–äw^AGçt$ÙÍ4!qb¯~WÎZÄs½ºÕ�¯¯Yܲp9‚ãž­[�Ûx€ó�Ê +y�×$‘-î P ý~–5ÈÁAKIl�[«Ä>W!Ñ +‘:1»ißæ2Yf6Ñ.÷Ì?îL]»â!*÷±r$2KV)âNß!.Æ�¡öoùàüÖ¨9JÆ_9 œ¢‘’7+I³ˆh½óÅô^„²|t/­Øx8Q[˜4']§\@ïjmFÁìó”ãuì"©pl6Ñf'pŒ·Ex¶7´ßºÃX£îôíÚ*œ‹© �0m›Ð"` ”�½3•Æ¿´=®y36WAwS5zaf̺�Ô™]‘¿±Ÿë]wM4.™-?Ïî֯ƣEƒ‘éµ))ÙàÍ&EDؘ‚}ÖÌ#én +¦8Ÿ‚@ áú`Ë_<�<æ<ø?Rñ¬5/QëèC‹^w[3zQð›&0�ÎÂo:jÉÜOõjÔÑ&ˆ}) ýC÷ꘪaô?\ï1ʃÀÙ:éàˆ*�~^ ÂZ_WÝ…�Z5–Ê>J­0¹E'€ŠÜÀXç²z"øÅ…ù•?Ty³\gáz*‡@Þ@SE{¶ðãpŽ»áØ†Ž‹¬ÄCO\`;ýëEkÔ{•€€O+îB´é¡í^\sÖüNŸ×ŽÇ†w‘sÖ.ÀA χãfQ&Ž»À‰�RôªÍ—qøs_|íÁLØR©÷�/·‰=�êBÑ bg{úï2�»IŠ[ÒéµÑû{á�Ñ Í©Ó…ï6uÂé\N'Êëì–<Žª®W¨2Á>¯7ѤDåF÷`çIÏàËêŠFï|ô£ñ©çí|è¹�WÏ;üÑs°Å£çðßGÏ!Ï�ž#«útôb“jçXž�4›íý¬�¡–ËÁÑB•¸½YJm^JÝ%Õ.©ÆÙÏ…ï83U>08)íP„Q l^zñO-<‡q”‰æ5|ý›ý*G®d¹�>Oñ.@ªöÅý:� }Ÿ¡Ð¤ ýûG(ôBr’!Éc†ÕÝU dŽÓ‚ËB§p~ª¸Hþ ûfn­Š(Iô®�¨«nÕ;§¹šú[òÂÔr§yˆZµ�­ò�Åkm^ µC«”h¿Uœ \H=9™~±õûÝ®Œlkè]å™Â«ÄÌ(ý$g,8?õ¡¸ Ë� +Ѷ†ñæS›Üe_à}£Ð²wX"-LŸ°ÅÇèòV-@_}­¢ùtò ´®ìè¿·-JÉÃCÁa­´Ë˜Ë?ÌžÄÔ³TP•1U&y™¨w§- ^ŠÚôHÙ€öûe®Íù)d”ƒ�·bTí<=y·ºV;rÍ~ÄìOc¯{Òn‘Tå±OÍ꬀rdyº™²Q·¦é=¸Ì0”šçõÌ›ï¢ðÏ5,+Wà-i—5õ'ûa[  UâUÙ`ë†@ÉâùÆ™B€¦'†,Zô– EÒÐø�M𢭀f_!…ötXÓ$€™¡@Œ¶‡z�qÒR©XânÿÖk…ý„–ù¿];µ§pGÕ¤Ÿ·¨,ÍFÛÆOÒsm- •œd+Œ%ÉFrž,ˆHZ Ð�w{qýpâl냜+«ÞäÜØ¡O]ÓÍg¬ MÕOyWJªe9W†Ó,Ušû6ãVGjšrÔ]E‘élU^_©ìRck臋t[½Y©W¿;Ì {¶æ æ¿´ou&ÛAúóPoÜBÊ–÷œuòèšF˜e)ÚmuÎÆ^Ç 6ÐÀAeÿNIe}Ól¹ÞÅœÇ-„$Xçïѹ×Pk<¤Z5tYç4Jþ ¨¬-Üì§´¼C†¤GÀ•¼<©ˆyŽæ=*ë[ÈbOÔPwk•Ö)FÇ�X@XÉ¥éáÀàSå#@XÚQTeJÕdw&±¥VåÏÞŒQ=˜a5«²¯¢ú¥N×”XÙQS«/c‡}UH#äÑ@×<Ö·Âu«þ_—ZÕ‰}ˆ7º°rŽßŒb{²¨T)D8Ý›øcmïtÌC›OFÑEÙ~§ø¾ýÜ~‰8a‡Ó<Ùü|W£‰ë{y< IÒ'ój°$Õ0,úŽ0´‡mÊX V†�_s¨(Zì¿US‹�\Ü¡MEuð£¾#ª¼"¤þ`:²f°³AžrðíœI[JUÞó kc\Æ4}°Ùá…ŸeÒ¸šLõ Ÿôcpï".8†‰ IT.ºG'C«=Þ«�f_1)X¦FS!#Û1˜(Ä“°JgÙÕ{»d×ý�]€ ^ÞÌ +rˆ”±��¼=¤³¶D‰µÉ _âü†"E×ä|3,}PŽ­®# +™ïžþ&-êÅ$0uJÖ &ÈF¨$Š¡"ÒE+]–¢ë@Ê�sݤé}ÿNA$haþô,ÉF&ZÕžö8s…�º˜¾ºGc┢NðìA6à|Ó@B”�'ŒQ£*Dlƒw¯)|<@d¥¢v~œ“ë í%L õ@âuK¹I¯ì¨(öðªÝ‹úF=-¶ßÐV› Íêë�®R„¤pU@â[³òù.즜“œUõü]·÷²•—Ê·WIIí¥t�il 9W7÷jºv®ü®l«F³4©…Oœ üÙÔî‹¢Å*Ø|XwÞå^R“Øl’Hxüñú�[ßÿš¨x^r"Ü!w1À�§*j[©¨MËÙe×b]sKoûüŒÚ`q‘]½?å÷X$Á&ææ ©&{Éc)®øâx€£Ž×Ñsoû|[}‘¥Šæ&Îöáöó`€È3 ù'ñäíŸqùçtó,OÒ%•ÝîÁEŽýJ€Áµü²2kC#,±ÊO³]V¢J$̉X~úW{n¦)ïú /9#ÑÈqˆ™Ç3ò�߸±ÉÑza�ì=ÞÜb:�ÔóG‡uÞ,ì·Ón�îÒ†ÿäNÅì#Ÿ4¬.µkˆÂaw—{9H‚js'Êü J*l8$± +Ò3µ#gBéz6ó¯Ì4­ìwñQV”¥à*û.-]Å5du¿ œÉ”¼Cªñÿ5e²è<̪Á_8²ä†´%–‡�R¢É/`C��R®C`Ië¢Én{h"Ûµ [¯’ô—ó˜cÌ`ñJ|™äS ÂY}Y¶çÌÄ˪޸¨² +›2_.v²¿ˆþd“';ƒ -ˆäÂLM¦$HòA]ÃûU ,†0ƒ±}K\vÑP[ðrœ�ÖBèMedðlÕªò#'º´$– ÂM©/ìU¯Ä¿*) EÔ"Λ�æ,¶T^Ê-ëœ*D26I´,ãpç…xeNÅ8–sJ'Us_ª."{î³VÑÚ �ŽRîÙ×v™÷-�®.0©£KÀý¡&A·ø{‰ eùhSEývX.õ癹·ëÿyP)…ñzÜîè×u]¯¸­ß¿êw¸Ê¢ÚÇ$Ø `lò®[›˜qW®ôè/‡éÖsz¡³£ÊöÇ-+0ÂÄÐŽ°ŠêlvØR[€%1°œb˜©¨ M*šHŒ +lë�¦GWŽ'E׉€Y1�°>Bgr”_ÈBÔJ+Ì~ƒäÌj¡0Í™Ý'8®ù.À`$Û»$ °çsw“âùÈ€à¥P¿*?ËUÆ’èË5—•{V T7dO²Ùç†À£Ú§Uð³3Œªåè£M†=VÉ÷–Ó—ûètþ‡%»"�ìÛ©h7ìì·yã.¯Ù™5b²{of[âËÖoèéð£mÅ…dWSÃ`Û»†‰Êß æ«Ö!Œ6£ºN†ïÞlˆoÌ¡ªaÅVV7Q£é÷ê>æ´§>t[RbaqŠ6² -° ó*v~[9 +Z&@Yšƒú€|<¦b¼˜mÏé}’?Q›n&ÌÚ¢¨»ëNEéhšŒ´¯[Q:xíøtÙɯzV×ÇÑèoukÛ¼+Ðü.ä�ÃŒò�a>/õrÔ 7²�ä i“Ù¬T‡ ¹´±;á² ë5®æ©å8¬)üÆ.6|Äë“,ŸÿfÃ7Óçqã›o_^šJ‰üt!‰˜?^Vâ0TK/Ö’CÐó4y138žÎ×77šüŸóázñáö ®.w>üå 4�¹¢XKbå™%ÒW’65X`¾+PCu%*2Ô)Q’A*•–�K5¸.Ûwð6Ÿqc±bûÎ5ÞÙ>È_ÙêPèIüžy#¡™$ì~ÿŽ&áhlìíÁ—O6 /”XwÜ18ø2Wô媺þEÁ�»?ÌvYéq�>îÿé !pvJD7»–°âPØÚó}A¾ò_–ÞîKp_#K G�Kh6…4¡°JpVBךܵž’¼{HÃ/KÜõ4Qiy##�ût +hÈ tgበÓWü´ôv-®’‡üõEˆ¤ýý ‡€NlªÕFø¬Œ÷ŸÏ·7Iðê]ʈ̛�‘н?ýöûãOù‘üxüù÷Çy4”>û‡ÈÇÒý†×ùî»R7×ѵÓ{Ä>-qŸ 8#Ѐ˜›;SÁAW�K:>}Yz»/�y>—NxlŒãÞoÚ(ü¢xÅOKÿ×È£—Uj� DäÁÍjçÂÝšÃÜH!ëÙy£ñÚ‡OKJ×í³­Ïn+]Ÿ½¹-šÒ“OATmÕÔÑ�‘D°’Zë˜û{'ݹ�Æ-'A‡ïK"ZT$ªääXX^p7ÈYTÍÇ¥7ïƒ`ß?CÂ÷‡�?þ?sòW÷ú¶{ýWãü«W}Û«~áùžáù§q3ΜR úùÏ¿ù¤“8ךÁOËzÌŽÁ=¡ï£C£@C�ÀC©dú’D“ñg?�É8<å�Gøh”øÈ\œº!ZK!‰P+pý_ìW;’,Ç ô÷s�Õÿã*B'�!ú ÑhÊ�î¡Ìª»ºI� +ëìr¦ÑU@"`­á|]4;s$Oˆfrd¥`œ׷ÈÒõ *tsúÜf2ƒá¤¿F™0§Ü.ÕpÜ`hÍEáD-1f�ÿ=riAÎcÒlÏ…;C²¨¡jÀ_"l“¿,…›v š¸.šÉס]d }°{´ó8+VC­4›I×bƒ”³�ãXZ]ZzÏÄ• kÞ×pR»×Úx=åç¹€t8ü„¤ÔÄ_DŒFø½dÙë¤Ë>–]‡N`õ't¤Ò4‡ù¬ˆ½eFƒ·¯\ˆ&’4 Üka§z…§ZÐ +/1|euåx p ó|œNSáM�6^Ø£¯“ƒ{,�B:s½LUvd‚`^ C©àÚÈ éÃí-É7TŽgCJS¯²¹øò dG¾û{4-9$™¹w±"•¬ËÍ` †å¿ä.þmˆüÇ“‰k_—]-PÉ6ÉÌ©? ØL¦gÙQ·(J7‹Ùz!Ý×U&RŵµV3ó¨ú=$²7[RÉŒˆ|:C+¢ÌÀ„Â&¿ÄЮ7ãr]D)Š«ÛìHª!CS +ûIÎ*®( æ�TëY¶rŽòb,þ·´ÈI:É ìÀŒ geðiZ ”š¢Œ7ƒ�NÖj—èÓT ‚jc(�¤Ìkª2k)ß,”ì¥pE-u™Á"DŠV¥¿’?–‘P ƒ,(ÆÒ’NãkM#¹8TJ Ó;ªe©Ì”O)€Ò4”¢’ïR�×[¹¤ÛK›m´,î3’£€›Ìi*UbÀc ç!«È¡qÃ�ã\V>¹Œ!.7Ÿh­ eëæ×yèSž¶{¸0àþÔ&õ1/m�ÚV#véÏ Ø¥ÈÅ =±ð�%^똧¸�€+ßv·d¿],L}ÖV£ø°Ü`3•0«›£Ê �4<ÄÌäð•d3Å´›ÛÝôH`a­œct(Œ$ìÁ²R{ß9 °…�@È_î㤢oÄ=©$�xqsŒ¾¨ »æ¶s{²,‡Èèz"V ©™ÍKÆàw�,©V³q�ÊΦG ˜Æ0v°1±C¶ŽÚ£d³¿T“îž“ì@ a+Vìl}­5«·¸fïÀ©),…%yZ½ÕÀ&ШjôH’é� @äÀàŠ´룡ªÛB:Ùg‘ Y�4ªè"S¯ÜÎóô¡^iŒluèš³Ó¬²«å%5É9Ìw‰¡a‰%™3XÅÕ­Õ‡õóM! ¬ÂT±ñ?u·r>�úßJôN¤J ð‰7àiÔ”ië褜bè›™‡Ý,ãD88ð~ÓŽ3uZ$.××)KŒˆ¤ +�†kOΚS•ñŒÛ.“‚�ó@ &‹bÙ‘áµÞæéP,g'„A<óË++c²UÚk—ùul!ÇG°âu#$ËÇý¹å/üú0Û�t¸é'6?çun÷ÿaF¨ZÆr€‘ú]æØfàhjM¹² Ôzžý� ++_ß*bç“uúxÿxëïçjp_~Ø'®Uc_B~û…™ýa¼†$º_ï³A:�=œhMÜj4±ãŒÂ©µkƒ´šÆ„jiéÃf¿Á*àsªÆÇ[4N®$ç4Í)cÖ9M#ÃFô=0$H†Ù‚ü{K × +ךý&«Åûþ‚YvÎsaœÛú‚F8æ¾¾¬ùú\_º�ÌŽ Ü—‚ëk}9__̯®(^iáÒ )GPê™l|³êw Icê6#RµÛfëâ\üÈq!ÜèT˜iZ5 ¼�›@Bs�xo”T Jˆs Ò¶’ËOäøÈˆ3ÓûÐl–¹3 =öŽÖêäê(¡éb÷DŽY·ãõ�׿‰ðúçÊz–�¶ +q Ûöésû>h9 G8É€vÓEƒ¿þôúËß ¯ÿüòúÛO/�3:S®8/d;[%ßúu¶‡š®û¢/Fd`‹Ñ�¨VD©*®ô18TUÅ=cÄ =-/�œ»ÛDzÏL.Ûr�¶Ž‘çb . ö䫚?žÈÿ,¾l˜Œ&�”ãË fõ†›#"Œ&·©NíF{3Å—à~<fd{†š·ûÄhð|ë×vW‰ñ-âÈšûÜ+�V©Î÷†¾Ñ~÷r’é¼Tš—ãr†õ¦ã@‰ËœA€Îî­4Fæ÷F\î�°‚’|>CŸÐôËçý­Öå¾èO +ì·ä|3õ›©ßLýfê7Sÿ_™Š]*â^±qmÓÇÿlo:W­˜0mLW‘m¹ß–ÔÂÓ >â�ñm{/þ¦wæPG¼8Ž_gûµ-Aa¯/n�Î"÷>,Ia¼'Wï™^ �àïžçó ¼jý|¾v?×jab?… ®§xâWB|ýE̺ï pUÝüσkÞÐqAƒiùa|뉞ü]±Œwîì< øúø¢Ÿ9˜Ëâ,^ææ)c§e{× øyàú ´]ä„Öý×»®ùyðõñDvÆÔé”Α£`Ñž yÏ'¤«$@ׯì}™¿)˜~w Æét•tì/¹k,2t�ª›Mž2nN +APøQr %€D¾›'à1ƒ¡ ”A+>ÖÁ/fåÔyæuUhÆE!?ÈBRÀÔq9QCÁÏd¤ˆ:@‚0‡TŒ6• àͲ³ä;t†ä„V$SƵÇ:•i¸òA׈~@˜VÒoA×í¡°ù–3(ÜÍÆ¶Çí÷(A¬{) + ž:vj¥‚‹%´ÀéƒÂ?Þƒ……-Ì5?wˆçáÇbP³¬áöH:Ƈ8 ¨~û¤ìGh8ï…mL~@‡ÄóàTAP½ùrüËÏ: Reã¿ yÕ€²†ž@ Æ¢$?èD_|ì1´òÔ­Êtgã’ŸþFñ‚? [[7 &Æ0`¸ò= ùYa…Þ*_¨ Z ¨C(åd!CTewè0hÈO÷ôLtŒb@Ê(É<ùž;$?ˆ¯CÕCìhM#gÀ0AyB‡AMá`Ç—X`°ˆX9˜Å€:ÝÏ:Ló¢ûiކ³ÐÐÜñX~î�ü .:–¯É³ZÁ•RL˜MrXL§0ï�üLK3ÒÅ= ®eHQ®Œj½ãY5G¤§ð±èõŽÂU‚´Gö»I%s?wÈ€©+Ê*{Ì΃/ @EZöp‡ƒj7¹ E¯/vA¥9Ð’ýbL?Ï’Ÿjºƒüwk€Íó‹r5¤ÈnVòÞ�´5¤Øƒò¾C ,é~"µö†U<ô‰wo�Ê +ý­’9€B,Nưž=Úë½n=ú›úÖ½mçãzŸzÕg;æê,çENÀ/»õ¨íþ'tE‰Ðå´Ú_2 Jí$oÈc Iwè0¨4ORõÇz0 $¦RTÏ^÷€ä¤Ócž}’%ÙüdÿÅÉ¢'t4�X"û¼æ©EO6ããÎê't”æV Œ�^.ƽʞ�ü4£ UÖ2ÖLþøtФdêŠó:ŒÉ‹Y¯GS�¦ Ööó°Ñ@Zñ¹C‡Í¹m�PRéšTRôÙ¤W—I�Ï¢Ÿ‚¸ ƒ¬‰–lm€ñ§#Ô¦öè0¨ÜšS×ÕF°W¦tï>H~ üL!»¡*±‚«Ãºó4À‹‰#‚—Ê¢ŸÊÕÊ ¨&à¿´—KŽ$ÇD÷uм@ ãÿÙà\pö‰³¨! ñþ€ž¹G~*IÚLwXgzF„»›™»ò&Sp³WeÙ�ÜVœOÈâ´%HqõWn?p8É +œæ·/a�âRù´Ü]4ƒ… ØuØ4�.CûiÑ?Þ‘.W�;ô¾Ae…F‚û»a[0ñ|Ì›úzß z@æI :¯z#\™Lcζ»M7©+ôZqÌbõäÒ&ÿãâîZ÷ÓBË6§e“lcà—ÉhÅÕÖ\sÛzß ~@æ8»;Wšžhyöà‚´Å Ú�½IÒü2÷8-;àÚ²{ÿ&ãwƹ@× á"7k´ø€–ß>„ ª°z•´¥Å/W9z=~Ûþxüë¶ß2‘haŽm ü{^ÖQ#mÑÿʲÜÝȹ亽~<~þ¶ýôë÷¸ýù}ûåÛöõñ•p$‘^nu›êÁ&Õ bów$v�ÃØf žûÐ[ˆºˆ;ô>¡ÆQgªW¨¢ãJúþ¥*9m};6³¯Ç_  9&ÇWÖÊý„b¡=géǧöõ¾"ß¡÷ ]Žq@ûé÷Oí׳ïf­_�;âîBƘ~�ŽÔ=3³à_Ûéc)šÍÜ!ûX˜sCi`�yƒA¤¸»Cï Ô$vÅ!4ŸÖcÉ +� °Ô¶¡Ýª3•ÛãÖ‡ÄÓrCääÝ�/ïê¶X·åûÖ«|Cߎƒvi÷õzü² ƒ�˜=6÷A9À?• ‰Ï¦ÊCö¤Ú–»´EõèX–Ãò¾ çmìÐq‰1V=}Ü2w�;¯]ewƒ–ĵò7Èy.sVR´ó:°¾ÈÓya·s_®§‰á„>[je£ø}âüÒ4òd]{ÄÁ¶¶u<úQï�²¥sfH9{ ½$+BŸm�awÑG ó YÒ‹ U�Î4PQ…‘‚Ó1ƒN𒞬ç)¶Jöµ'ô­i?â¸: ˜} +@€“73ŸçRrƒEÂéëØ‘ÂV»l6] À`öσF#wHa*¦Ò•eµ8؈¦ÌÕ½P†�3íìS¼¥87Hq¤¿AáUŸ§­IŠö£sšÊqN6.Ÿ«87Hq¤»”ˆ nC>e€Òe}2\D�Óà-zƒ,Ù)Å as–g*]vOJ»¼4Ó ³ÆPo�âÐAr‚½PºsŸ\O‘åT ¼Q¢d¼mî�ÂÈÔëzD ³ë5\_·u5‹ÇëUW²Â|Bºj‚¬%�ª0FþÆ®iŸáDÜ›µÞ,;Ÿ€ G5ÏÞ!ùMR–´Ì¡ºÄè)Ó¢Ü Å‰²DÆÔq©z�,t⨅“ä'kïÞÄ4¾›´è>S1�‚I¦ZIëÅD­)M®šf%¥ÑÃ|BJ×�ÊÍÈ”c žéšó¤YÅTòƒÓEê)u?É}§¦†�×¢J�½@"UŒÅµY/ŸÙn�â¨Ó q erq‰zil|Šq™$�Ž�ÅMÛ'òþD|tÐx½MÑ|U™®LQ‹>#WWŽCÞ ÷'Çš¥�‚ùŠ$ ¢ÀFH(¥M^ ý YSÆÖ›µ-ëêÌG†K0@BY͇f/ˆ;da8'­Ühû1•=Õe•£ÅƶæÄc¬¡à½?¡4úî°ƒN +5™©‹g%åÑ�"u éG[¡?¡§–iPŽÉ_Ó°!Ó=VÔPKµìëqGN»‘”}J¸B˜\m짨bÒ˜idd$ô)9¯ÇoÛ�=ÂöûCF¢a´€ÿž—5²#@þMžŒ ÁXE,ðúñøùÛöÓ¯ßãöç÷í—oÛ×ÇW GkòZó<í×ÿÿ´E ®SkBÕuð3•à�‡þôãñÔ¦·' �¼ž$Ú@�}rY�v~þ¥è+Ç;ö�×ãŸÚÉåsrʺvÏïýò9‰¼i*ÑûâJ +GùŸO¨€…ç…ótò§ÏïèÌ(˜Ä!ë�}–Šô%oò3‹å]“ä÷ùi ù¼Oþ 2ûpymÚk—ÀV›·�_‹±c¦�¸)Ëë¹äR"ä•¢,l× É˜/Y Y½ß¡�°áµYÔ;$í @›€á€}€ ®˜~Þ¡·Ç óãµdÓì%ðçÇÿ'ü_êÒg¸”SùÛJJg%åÿRI嬤|­$¹ +X�œºZõðõ°ó©âF'Ò¦©wl†Œ³÷?¨Öã(Ï%Î_ú Êñ‡„ñ1¹¾n¾«·ú¬©µà'u�&ŒÁ¨­Lë<¸ i¶ãa¸!n9ý3KNYIÖìa°U6²>ñiðë±,çŠýQÄ“ŸE?^xdÑ:k¢ßåÛŒP¹gUmO&D~gÇÃ>7Œp QID†­Äþéµ:v¶Öïc�2eÛ[–j±F麾ÊOÝ ·Ï™sšwL¿”¡] °{DOÊõ6ð +h2ñÄ�¤n»ž­~é²²¬²­Uôgå�í–Ë[Ù&’ì�VÕŸ¥ÌlõG¨‘ÿ'ONK–Ï2;{Œv­F¹?”%ºV[x ©tN1TÍ~°‚yžQŠâ'Œöl58u;¸2«¿òŠ +©Ø�±êÉËj`u–e�ž6RÚªd[eœ¬±XkrÑÒYEù4뫺"kÄ4@Õ£e(¶ÌÅ ÁßMëé Ý[]w�í’Í-,�eõïð{"­I¥×-#¦@Öª–Ÿ®9Dµéàò6¶P¹YêùÝNµ:)Z±êž7_ÏbñÊΚ�´Öw–¦ 5­î@ÓÄ:ÎÕ«rÚM=§*â`Ýl®ìûC•ÝçÑ«p€ V:Z¹Fß¶·9n\':Y ‹IKpüf$¡céwGƒ˜�Ñ—ÖÔï}å­þÔø¶÷ÿS¾ª­ÅkßÝÎçv½_Ù­?öoó.[ÝOšá±OšÐ(™OiÞé‹_ö¥SÏq‚uu~†–mí/—hc5Ñ,"«d}†~Yƒ £V=ÛÊRÌÒ¯t¦õlÈGâÐk°i)ö§3Ç].á¨ñª#]$«ÏÒˆå¬,n}•ÒXËz)É�BYê6YOÀ,ö,Åà•ì§ Vâ!Õ¹L·“”¾O¬¼ìª_–Ÿá]¦–l°Àðž‹–{u›ÔvŒYžÕÖâ¹fÅc½¯U¶ ?˜AÎàä ‡“SX¥x¥œ:œG»ç¿I+ÅŠ:dõ¢�{–‘ÐnjÇÕN-f6‰‰Î½Q´¤‡ƒÕœÎ9Ê´{‘‚t¯«nb0ýtLY_킊o57«ÑâUÍWŒH®kk Õ7:”M¬DeLwÑÅ~—lëÕcÝíE¿Å,±¬¤¢¬Ìî”%vÖìz7K +«7ÂدrDz#è×)x�¢Þ¾¸t¿ ¨ ¶ ÍýÅ’JcŽ £Ð@5ó‘ïÿ\"##5u¡Jjk*Ƴí9ýœä+¢éf`¬-šú°»|**GÓd¤¥|EÚŠÊA·ãêr�%~êY]30ÞjjÛôèÁfúSȇí;Ãü\âò¼ô (ÞÐ+m²š•2õ°�!7ƒžCìb-Œ—„õ.„ùúŽÃšÂo<ņ_ñõ!ËïÙ°gºßb{×wXm™BÀïsæKà%�7‰SM3P¡x¼çZ‰{Lú›*Ucƒµ¨,še??(Z¨2Ñ¥h®MŠ›” LŸ”Ëq,¿ý[|¼žñ¾/uãÛ‚Ù^úþ.N™ÚÀƒD¯Ð4§X-¡ý†³ +èK;eƒ¬Ìh³^£;:µõÌÒ¥�DqšƒsÞ|«dš·yéÒ.ú’,Eª7p•~ëÖˆï=æcÛ&�!>Ò$¨•ñ›Ã:ü +óu˜ž;Â>™ˆ:'» ‰G§‡!þ0xkL±®†„]ßE<í¼[(áh#ñ_‘ÀCïsVU+)ò„B©-9ÃÚyh‘GkRDdœ-H¬¦ N4Ác‹º4¦U°4•UquËҭʨž$Ï­š²°[óÂGŠ+Н; ÅË *Ç%+j⥻°r6/+ ¾KöôXÖS›9û»¬j ƒ‡œ¦„.“ Â×|ïâ Xu†Î�¶Yƒ,š¢EskJú–ìÉ¢JY²¢h8Ãd c—k²N\Ù¦W4“÷ZÛK‡ +%é*=½Õ Ómb˜Z�£:Qµaiá gX:XøvÏìEUÏ™gUíÔ4ˆ©õqz+­E±ž ×mÛX€ÊÁ” PkñQ’´>zä:ÇÙ×ÓÊûhúÝŸÁDßÞV÷.b@SôV˜jä×iº¿?wcöÜôŸ ýŸ¿ßv¸œu—ÂYýüjÚ5•Òèp[�îçk|xrÃæ�ðèä”Ã6Ý\Dâ"inþ�É¢Àê¶VW$8Ð:HÔñ×Þÿ¨ø›¬akŠ"·[ J·§ßÜEp› >« ;M×õ¨ëÄÒ:ú 4°Ë:µ«°`ƒÕëŠÛ- RØnï»°Š­aËJ‰%:IB|­yªšQ‚-0eÍæå×±�pc±Æç:{9ïPüUµFYU¥­–Oˊ墅UV°ÆÊ~”V½Ñ ÇÐ.­_•1P!sh°•ꎽ²ºY¸±H +‰ÇJ��ÁüQ¨¹wÌ}*)göç±ATu�/©v¯Yгáxu*ù4“Å«áÍ–í¥îÐzHè´íÉÄmQ’lS?\º£ŠyéK«E´xvŠuÌ�z;PCõ© Âf…`q€BŸ°4k,%è•‹"‡[§ÈbTÝäÆ šãÇÌ<ûÙß*˜á'éö>DÅþñq0äÕ ¦é@òeù<•óîÅÖq¹+ùŒÄ#ÜKÅ$>é€èT€TõSˆ®lF×—0alJc4ù¾¬ë\˜„BÛ¾ê¨W}?‰ áø=‡ùuøqHÈ®ÓÜ‚¢ŸäÏ~Íׇ,ùðòg{§Û‡Û·-á5þ=~ýúçÓ…ê"rOMë‹^¹]ú¡ÂñrÊ0 wo: “É!H'Ö;”X˜§ ûÔbUÓý&ÇHíTc ½Q5šõ¦Æ$Uö)ÇJ–¡Ç(^ÆM�eor‡ ÀeX�A� Š ­žŠ Vì®Ò˜§p² ƒ]÷%Ȳ)=Y}_‚,›ÿ,ÈróîŠ,+Ý—"ƒÝÆ©È`QY”1Ùë¦É¨òç)É•yJ2@ÙI IkœŠ F» 2ØiŸ‚ — ° ƒU÷M�ÁVÀd°” ²œnjlkÒ„᱃C‹qTݤØâBˆMY‡Mï¦!Æ»ß2lÄÙ·?ï ¸h‡óPµƒ~½+0À’ ²óŽj ¦j\L­À2Óí½î}…DI' +žÉŸϽ·[.rü%Ôqß²/ؘÝUgì[Þq’2ÉŒ×c)i'ÚÊž·þóÕh·ú@o¬cuá”-^d†¬¢yÙ¤»k0A¥àðö†3eTM`˜ÈlµTäåçìQ‹Ú""7¯×˜€à$áëÕÙÐJTÕ¶—™b +@«PŸtèqöŸ8ÙâEÔÊcš¦ŒáQˆø‘ʧr.+ÔÁC9ÆkÑ¦Ö „V¶ÔJ·”—’(êc¢a±»¨ù$ØY¶Bí›%ç@¢hæq0$Lê�¢£ZV‘zvûg;þNŸŽÆ¢0ïÑL¨z6? +Pô¤© ¿háØÛ²ÄÚ¶¨¥¤Ñ9i8aq³ûÔä +Àƒ 'bƒ¯Û‡’+I, 5èX­}¬úòVG‘¼ˆgf‘Œ91ը僄H)t¢�®z�—š*š‰@£“Ñ� ªè‚K ’6ø ýQŽ€“r_�Ö²‰Ô‘ƒ9C‚HÛCvÑÝIÚ<¥}ÓyÙr›&’‚ºíêyÎb­F€þIï“rd`ü¢Jˆls'8¨€¡ŠE(ª•¿Üä]ÄÉôWÎŽ¯Œü;̃Tr¦eHÍ2À¸×ëb‹cŸr˜d7_&‚Áj9R¸Îo´ôê÷¿Ïq%T³ÔßpÕ_UiÑ0R�ô¼šñ=AF&ܧ)f¹Ðà†Éå ½ÌKKÈí'ÑaÆ�Ý/}AÙQË¥/†v RI†éaªÍŠãÇ{$Gl`tÒª$¡{$áÃhÜq-p;{E´sSÑ@º‡  gÏÐEŒ7²%�< ¾FêR;ø¢à'6ïy€€Æùƒ„ÞZ,æYÄóQSUR¢ p¿ì®l'eq¥@ `žAµ{Ø œn¼¼nT“'›´‚²'FDj;à­™;)ÀYñË‚˜2TpÑ~ð~òú¨Èë’±nh“JJGsåÅõl¶Hsð¿rú¾Ÿ¼Î“#¶êú·ZEûÇÇ Å§RÀ Ze€Áqûôyû¾&nB‰Ì°¸�(åLüù—ÇŸþú#=~ýñøË/�È2d1ÕÛ•åãäæ['Úæ׫^®xÕô¸çèíÏÀz�AËÊkHËêJ{oívY+÷[ûuÚQÇ0£îu¶õBJ…çƒþ°ñ¸·“ÿYv)˜D_œX“Ùåš9x‚ÀAÃU›"³Í†œA°'¿Ò÷·Öãv‡+àý™tòí­_·X¹Ûµ‚j6óàçýÀí1:2•7DR†¶ü½ØÄÍ5+¶Jöå =s51OÛH¥ìF¿U³b{;yéd�û�,Ì]Ïüí[ÿ Ø¾¹ç�Èê7×|cô£ßýÆè7Fÿo0Š�)#*ŠÍ}ÿõw¿è\©rCnºR1±õ~ß©ð¦Æí’QaßDα„Öp=Kã#Ÿ[;wÑq|‡[\£â–öž’ž”�Ï­‡>�Øt;.$í¹±ÐB‘í Ê•©sc¼¾Cˆ×-6Ýí�ïënîy=gƒ'%#Í ÊêŒ^u”ûj]\ sÂüYšZUûઘ°2je-ØJKÑò¨VÜ€’ý,óÙvÕÖŠnÂÿPrÊq’‡Ú…û!Ú±Þ¸¦®Ãf…p•…Æžš‹–^”¼­çN#öZn˜|Ù¨…Éè +×Ûœ`B,6eás£O¦6÷׌(€ÎO¨KhÐÇáÈa_¾'¯ë¤Ï}ÆIbmŠR�›:¤Ã?0¾ñT ¸ðmÕ Ä§BÝÖ¬Ü,¹ °”{®€ŒÉ›lž©,oi|>{m柿„‰Z7\,G—�çñ÷ðaeUc±n°K*²;¡WÈÃKv%ž?x’6ßã ðEî2ÛÌ*o[KvR�¼A$ :Õà›mf6€�5—bã9n;{t�Ôe,¥”e'al…�è‹Ê•‰¡¦“Fo‰Övúh·!3m%‰ Eº6 Øvîp°'/ÂÎÙö(Y7ç˜:ù7ûe¯$ÉRCaž¢^ ›üÿqoO€Áõ'€5 îûGð)³ªzwÁâ‚3±Æ¬ÔUY)éèèå `\ü„P³Abª˜É!õihm}šG‹™ì’Ü®©›×ï%4{üº#.Ô�äÒG3;ŽéS¥%³ƒ>Íw”6JØîN½¢qZ­¡vkÉJKòW•ŸffA„äjõ6Q«“q4x3ÙãÅ–Eú}v7á}=N~Š×¿4IC73)±™¶Ð¯ðbwà±§UCÃ*´ÎCˆFÔT®ýíC D pOÕô˜yÐȹå‹\ÚÂùE?ce_•æ3k +u:‡?£€ÀG0@-ÛyäuÚ‹`÷ÌE<�«”Óü…šÛšS}>GôvA…Xÿ¨Õ'âQ9R³˪,Õ*Ù9v=Ï"ëW¦¼Q`£¿ƒ(¤“„Üœ†á¦¯râ‘úz #Ò¢¥$˜wj¨=i© ‘Ë&.ìb™]ĆÒõÑYñ‰]õK˦qÅÇݱU�JéçÅ$¢ºgQ y­¥ÅðçÜq¢7”BÖ…•9­QÏØŠº”ЙlÎålqWî ö/Á㤽‹U–8ªÌý쌩.Çl¦Àƒr\V›cgâ•Ý„ì¤Oc�a�€òí:[Ó·ñ-ì¬j]nÍmM@ìár÷˜V•ÇÚNºZL\¦µˆìý Ne�¡DbxrÑÉ´$Þ³k“0òTµ§¤vû[„ ýÞÚÙÍî¢árH3¼Ü¡†.ÚUü ^—~…¤±ŠÝJÛô%)¼î—м �´¹Œ”…Ø�£5œø,ÈPÖß ý‘ù±Î39ÔíxLWɇø6£ÉsnK�žZì€íidWY]ŠHƒ²¿¾¸íÏóRÛóúX-¾lò¢_×yËZßûüp{]èµÌu]?g‡ò»‹è(ù|¿}þã§z:Ú‚;nz:XÓjð¿ôºMãt U:g +¬K¨Ò'«TK¨Ò(ªðÖ©˜6·N]öM§.ÏM§ÂѲS§Š§Ò¸tª¸×”ßÒ©Œ�âŠmëT)µxÉT‚­¹]2U­–»LE¸ÅÐN™µ…õK¦2¬“3ÄÖ©x¬Ö[§"ËúR1¦S±k«w�÷ž±„ª„[—PÅNK;/¥JÖFl—R•p ùRª¨€9ç]©â©k¨š2ÅNö­¥T¥är»+U<­ÖK©Æµê-¥Š™Cº+Õ å­Tù²Ým U8:�»N%ÁšU[¦Nkù-RM7� +rK»$* ÍåR¨pRÌ7�ºŠµä):sæK�vë7u +±•rŠSM†xjS‚½ Ó%É–.%Îð,åç¯Çí=Žû9 6Õ|À†½µ›šQÒš®¬¦Ãè]‰ÉZn\ÓÓ8czô�Q°~ã-ZØßú¼«^¡Ý›àF¼ÒÄ Nš;Mª—ælêvX2‚{W§C䨢¦d—L@Qš¤Ò’2�g³Ïkï“íЊv +©ls+8=‰hÃá3 Y0ß¾géA�'2¨õ}Ž€áØI5Ùh�ÅfŸ/‰Ú_‡Ý°*F8¨ø ®Šs©ªdZÒìì�¾$_ÛûÔž"g0¦ÛÍQMŸ,;ЕÊßU"¢úˆEé6µÚD,Êp>=ØÉäT¥‰u³-~NûÁõº¹ÄjÐóru²ôK +ŽfkN +ê.1;߀\âÔg'¿{tJSødòS=ÍC»ñÆiƒv?å;×ërí0_TúÏ JÿöQ¥aJÀÈÖ¿žµÆÜþû¸=AÉØd¸ˆ¤'”cR�Œ_~=þð§oáøíÛñÇ_��t¾Ä÷¤/×ý†ü·¥vÅ5ƒÛgàsŠoÉzspD�š�Í sxS\%c£¹z™²€õƒëus]õ½\ŽŠªÛ 654çäåÐÉß¹þ·9GUk’Ë{ÕsNºDr]¡$Ïp�Òé0fËEÑ›¡=Çï.êþÚÔÝîW�óÝÇ?oa¦%ê§!™Õ›�›½šh„¢Í5 +f€æ¿ò�Ü»‰«¨Ò¡d“ú×們u!ªgŽ^›ù�ëå®Éˆ¹½ÆÁ÷cß?ý»…øEX?kžÿjŠ¿èé÷Îðˆ¿@üâ/�øÿ b6ºÈ›m¹úï?ÿâ_:¾RItší ˆga^ûÖ{A¯"Š8‡’h½ÓƒG~Öl»]”šìG}މˆM ùUŽIlÌ�¤äg+ÑöÀþÔ]ÈYHÑÖA‰ªDÊ´¨n“—ÇÚeçJÝõ³^ÎG Ï4³ž&¥�þ8Ÿ&óHêÈcv/ž«‰‹f»u¡y w{œ ÇÖþ¤Õ�Gã´xÔñl�0h껬Ï�L Ò6)´Î%†úôäQÙ>‡Õ6?ghR¾&%þ9d¿´#q•yз “g“êÇ +@”©+ U`£N‰kÖ£€ð&0&9ô#£IYr±&ÏäGœYkÕ5“¤e!Ti6?:Hk+Öá °ÞmÚ²«D;íîY5éWíV�N>?ús »e¢�ÙmHUØWT›l¥$6ÒClQtĆaF E™.—¥*Ò�óüµ”l/7€Tãsjªöl7QŸÌÂÇ ©’nq>&AN]µŽiå9vˆRæèQAf3¦%$×´žÅ¦�s_§�ž9ûÓ¥‘wÔ§¢kSJ¸E£;Tyv&n˜µz9ötÿ¦¹Áöaí�}ç ;E}…ÕeFA°o-\±ž¿ï´ß¡•g÷ëYßoÏ +ÖªÝR�1ø£M7i¶¡‘™Q�Ô˜TDÚ+ Ï¢ÎAvðÌÊSÈÀŠ~zãòS©;}dø¢pÜmØjÉ…§–Yp0¡'eCŒÑÁ=7�¤-Ù Ó=„U +<ìßçÇ_a°Œjzi†û‰û/¶Ë#G’䈢{ž¢.� Wæâ<ƒáª† òþÿûæQ™=$zQm.L|±„5J °ìŸH¦üÿê´àÚÚ5Äžo$Ó&€S<ëßþ�Ö¾,» ÙU?MoR˜GM¥‹ÀÓšŽiTYª™›/5¤Q/q!8V¹;ðÇ7‚ WÈx¥2J,ì»ç©P«ñzuµ-ó¯ãº!;@Ð9ȆZ`ÄÕ†;#5‘‰-_å¡®Z8a§i¹£žëH]Å2üÚ‘-¨”lÐT­†`÷­RYõš +>ØPùvs¿y+ Ê£²¡ÎxPS¨§¾x�P�ëmœõêD¬©ØP®*ÛœûÚÁ„¡<’Ï–8šO-]Fˆ¯&áp±xëW¡¸‹!O(Ñuù€¨ÖÐ ð@*Nõ)zÖý\CPø,×ÿüÚjÝ`Áò*§pú†ä¨†ŸçúlðºÖÛ‡Ÿ‡ñó%üˆÈó�E義O_BüÁATñ-Š’ª7ÒEŽS£“7¨J°®`ÏíºhjZVyǹ”º}ùVÂêÆb:(¸½vëäßÑœµ$[ÔPüÄÙ­óã +:J_²|U›·€ È›.Éë{fñJ�^zIš1UÇí¦æü"ßÐU©�â𵄨˳6O†’sWMì’5A’‘9úÛ÷fÖî¸Ï[œmTžnMR§D¸åïŠÖÊÆ“ZS¬¾˜I«z I†Î½–Ö¦>zÐyQ:2Ô–€ÒóH{~ñyÑ Iû|ª„ú-¹ ¦hHYY¬´ÀUAfën�“¼pòm4ŽzJéé{zþ—Ro¼Ë1ëx‡™Öýþ�÷HÍ쳚VÖY <@ö‰�ˆš:ûj?pTºZ&@:GÒ¨÷ù¡«£€äÐîÂ(!VJæŸÍ½TÜ€p4ÿIY¢q„ðlVƒþ±` Ÿ +ž¦g÷œ«n¨¤Ámß|ÖLg¬¢æÔ" +¤Ï¿.|Y2’u•GòœÚë#ñ—³B¼¨Y¢(ݹ@]m^ƒNY{XSYŒ(œléª+�€T„8˜*÷�‡¶QÌŠhø^_ 9ºÏ]IU‚Ö _y# �jþe8mºÒ±ES ��¼Ý ò¥\ Ï ŒaC„=1‰ahC„©E ´St¬ÍÁ‡OëöÎåûd?‰ªþß[]??¼jJGcú±ælï—- O Í„” ’.wx°†ç®!#•�QÔ¨Ö©O$в©{âír>°è6ºÌ[¯íù5Rí˜)#Ëjg—á™k°£Ð~GK†BÑkºK`PÓ\©ðÖpœÌÇu‘ÔôYu3Žsèsee;ÄrèGåVï˜Ó-Á(6-Á6�[ÖZ÷q»@ó_,Dz?šápyæDðŒ*x"A´{ûcâ¾b-1€©©®‰ôŠf/P +#M‡Êdº\ ¨G³Ü€ÛMꆪ!ê&¿‚ú…K?+ªàUŒr·S—‘<'A¨„é +š—”ªvQ<…Vß®¥šXkÕ2ÝP£Ø¬ÔK lÉx .KÙÔ¢jäŒ*94Õ /¦•\Iê½[í.ŽË.RS4Í +OaÍ ×öÖd+Eh[½öm :@tk“Øî1 +x- +=Ä2‹µ–Œ¤ÃV4$1*Ŧ¢Ð5Ѥz“²:ÙCYirݺ؎Ýè§ò7¶ÅÙসÏñ~PcΚ½qÚ;xJ#S’ÖÀ%”ž²šÅJ¼†y¶Ø=%’¶GËn3²q»3¦öJ!|´`D²¥ò™À¥ÑÚû!r‹,/IÉGÏ>7­oi³ùuO!T©êŒòü:1»d(rrÜO4ÊðÓ³^æþî¥c<‡øý€�¸Ÿßbà@B_·=>{§&ëk®T�õÈ´íS¶CWN�u 膪;�Ó.¥î¦ôènÍk…ÅE± źóF–ºMò<jã{E y'«¶¸‚©õú@³æ:DY:MÕ�šy”'†oÛ Áž:˜.*Ø$]½ÇùQ“"–ZSÈ�m™c§†²Fnïuƒ?ÐíýçY·a„¶¶ G … Í¡,µ£ºœ +[%œd*”†b=)r$4i¢ÿ¶;q79ê‡ÎPTsõ©”ŸPÝ5Gî/¤²Éfs7[GÛV«€K}�VWÚš¡ŠsÐ!j(cÙ™¿!VC�¦ßŸ¾ì–d„5Jà¿ÿÔK®gb +Ô‚šN5dý2í?['�ú· ƒµí°£m=õ#-Ãzåð¢9.9*UTî+Õ0YÔ¹K\j Ée׊6TñÃ2\i…Œ +¡ˆçé±Âƒæ1×ýØÁ< øG´˜ð´DXƒb=ò<ÔU 'DÀYæë9®TµÂx â³•’Ý“èÂì¶…g�G¥èî»�ÑßëJ }Ít@ðë²BÈšY{[@ÖDšãtUØæÜW ¢ŽµœÏ–0šOÁ,]F€ß¶x«––€»¤T5àaj›tõ6†þ$ÅȲý\"(X+½ÅÆë�˶ÅÒ&CrÔ�ÂÏs}6x]ëÙ¨ Žª³æ ÎC�ûfc¨ØIIÞÁŠs/Se9N�NÞ`V!ŒÑÚs».é’Xk#l̨ۗo%\¡n(¦ƒ‚ÛkëþâÛÚõB�?qvkÄüxCŠ›ŽÒ—l]YéMóyÓ"i}Ï,^Á héUÑêê_´›™ó‹|CW¥ŠÃ×*¿®öŸ'CäxЉ]²&ƒ%±�#'—t�§öt óg”§[“ÔáÓÙz Ekeã!Õ_ý1“Ò¼¤:÷’±¹ÑƒnõÜÙš°vcÒóH{~ñy¹‚z=úm]¿$ í¨½ÁÊØ—ÔœxZç$-œ|‰ƒÐ&ìéù_Õ*´–ƒXç 3­ûýƒUw1ç¸Ï–Í ô°²ÎvVºn‰ÄÀ DM�ý�´0zÔžQ9�ùù!kJy€¼€Ù]…å±2ÜqMÒó,ŒoÑü'c‰mD³Y�ùÇz1|*hšžÝOp®h¸¡’µÙÔ4³«¨9µˆ‚VÙ*LŽçQ%#Q÷WyF˜bõ‘è qOt›Ô4„4�ôáz±FOy¯™–TÖ" +'[ºê +bbKö¶±Hç¨ä"m³"Rº×(ŽîsWR• 5ÃWžÆC§šNÛWºN;ÜÝÍÝnЪŽ\¦ø„1ÌZˆ°'&1 íaˆ0µ„vj޵›ý˜a¿¬·Iø›‹û |ou½]^MåhL¿#ÖzúÔrB'å ¤™�Ò!CÒåVZʆVŒ>FP£Z¦>Öi¸ñv9Xô]æ­×ö|€)vÌh‘e±³€ËðL�%ØQh?€£%C!hŠ%Ý%0¨i®ë:‡ãd>®‹¢¦Íª›qäÇ?”•íÇ¡•[¼ãaL·£Ø´fÛ4šYkÝwÄÙ.—œˆa ˆ^%@ò/޳F,9Ûî/ñªº3Ä +z&c;îêú$ +˜ÿb7øhò §^^s=Ë\ml?je¸Û½>3fNPƒˆô*Ë&¾�S0‰Ð 8™LM·ÆA¡F¬'°d¡·›*Kz(w¿’ôÃK÷i¸¢jnÊ +"¯“Ȩì–+iÐLQªìB=a«›{ ˆY«–i@�â¬RS@ä¯qñ¢¸heHµì �LµØWcG®@¡$|ÏV‡‹ÓmGÔ¨¦Uò„k²^[WYC­¨dmyrwl +àêf“}cj`&aHË@6k-‰ÃVç39b¹g: ¯)OÊ“j«/{p+M~œ·.NcYÝ;ŸµÎoà>Ç?ÌYg{”gttØäчjBÙáÙԺ÷!þËHi1ýqÄ)Š“.ç^p¯±ÓxðÌÚ A*Ži%²ZÛöóõý¤SL Æ%Õ]^½<é”ݬ’Ä۰·§`ÒvyÙeEf—‘1Ù–’ñ¡h»F$ ßA.MÐ^—�ÛdyIµ|ôÀ¹e}áÍæ–§€U*È(×?’«K”ˆÌ‘?a”¥O×zq÷¹Ǹñz@}qäTWÞXŠ'[—¦Çî‘îpj·Ü¡�S×P¸¤óÀXu㯘áAhé/Qìãó}ãϯà±i‡ endstream endobj 244 0 obj <> endobj 245 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1289.064 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1288.0637207 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 246 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1444.599 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1443.5993652 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 247 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1478.447 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1477.4465332 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 232 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 711.008 m +1093.816 711.008 1061.304 678.496 1061.304 638.534 c +1061.304 598.571 1093.816 566.06 1133.779 566.06 c +1173.741 566.06 1206.253 598.571 1206.253 638.534 c +1206.253 678.496 1173.741 711.008 1133.779 711.008 c +1133.779 565.06 m +1093.265 565.06 1060.304 598.021 1060.304 638.534 c +1060.304 679.048 1093.265 712.008 1133.779 712.008 c +1174.293 712.008 1207.253 679.048 1207.253 638.534 c +1207.253 598.021 1174.293 565.06 1133.779 565.06 c +W n +q +0 g +/GS0 gs +146.9487305 0 0 -146.9487305 1060.3044434 638.5336914 cm +BX /Sh0 sh EX Q +Q + endstream endobj 233 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 711.008 m +1365.01 711.008 1332.498 678.496 1332.498 638.534 c +1332.498 598.571 1365.01 566.06 1404.972 566.06 c +1444.935 566.06 1477.447 598.571 1477.447 638.534 c +1477.447 678.496 1444.935 711.008 1404.972 711.008 c +1404.972 565.06 m +1364.459 565.06 1331.498 598.021 1331.498 638.534 c +1331.498 679.048 1364.459 712.008 1404.972 712.008 c +1445.486 712.008 1478.447 679.048 1478.447 638.534 c +1478.447 598.021 1445.486 565.06 1404.972 565.06 c +W n +q +0 g +/GS0 gs +146.9482422 0 0 -146.9482422 1331.498291 638.5336914 cm +BX /Sh0 sh EX Q +Q + endstream endobj 234 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 982.776 m +1093.816 982.776 1061.304 950.265 1061.304 910.302 c +1061.304 870.339 1093.816 837.827 1133.779 837.827 c +1173.741 837.827 1206.253 870.339 1206.253 910.302 c +1206.253 950.265 1173.741 982.776 1133.779 982.776 c +1133.779 836.827 m +1093.265 836.827 1060.304 869.788 1060.304 910.302 c +1060.304 950.815 1093.265 983.776 1133.779 983.776 c +1174.293 983.776 1207.253 950.815 1207.253 910.302 c +1207.253 869.788 1174.293 836.827 1133.779 836.827 c +W n +q +0 g +/GS0 gs +146.9487305 0 0 -146.9487305 1060.3044434 910.3017578 cm +BX /Sh0 sh EX Q +Q + endstream endobj 235 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 982.776 m +1365.01 982.776 1332.498 950.265 1332.498 910.302 c +1332.498 870.339 1365.01 837.827 1404.972 837.827 c +1444.935 837.827 1477.447 870.339 1477.447 910.302 c +1477.447 950.265 1444.935 982.776 1404.972 982.776 c +1404.972 836.827 m +1364.459 836.827 1331.498 869.788 1331.498 910.302 c +1331.498 950.815 1364.459 983.776 1404.972 983.776 c +1445.486 983.776 1478.447 950.815 1478.447 910.302 c +1478.447 869.788 1445.486 836.827 1404.972 836.827 c +W n +q +0 g +/GS0 gs +146.9482422 0 0 -146.9482422 1331.498291 910.3017578 cm +BX /Sh0 sh EX Q +Q + endstream endobj 236 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 983.061 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 983.5605469 cm +BX /Sh0 sh EX Q +Q + endstream endobj 237 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 618.106 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 618.6064453 cm +BX /Sh0 sh EX Q +Q + endstream endobj 238 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 934.687 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 935.1865234 cm +BX /Sh0 sh EX Q +Q + endstream endobj 239 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 565.467 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 565.9667969 cm +BX /Sh0 sh EX Q +Q + endstream endobj 248 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1060.808 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1059.8078613 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 249 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1093.605 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1092.6047363 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 250 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1249.14 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1248.1403809 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 296 0 obj <> endobj 295 0 obj <> endobj 294 0 obj <> endobj 293 0 obj <> endobj 292 0 obj <> endobj 291 0 obj <> endobj 290 0 obj <> endobj 289 0 obj <> endobj 288 0 obj <> endobj 287 0 obj <> endobj 286 0 obj <> endobj 285 0 obj <> endobj 284 0 obj <> endobj 283 0 obj <> endobj 282 0 obj [/ICCBased 87 0 R] endobj 227 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwnΫZ€N‚0˜Ã< ¡åP%`ÔÿdfÎÈÌž� 髹ñÛ?¾ßþþ½ùë÷ãöíû¯åxü8LÇ�Çoßþ†[ÿþq+g‹v´âçìq,ïçèõ˜açóøß?oÿÂ+%üàïàïŠ\¡œxÁÎÚêþ «˜VÓW¿ßÊaý°QÖq×%üvðK.RN[\б¬ü¶üÙ1[?£Z`�g4¼ñø¼ñÙçí>fÀ”ð‘`4~‡Ë•÷ÏÖæ Úñ¸½ÀÙáÝó+?ž«9^+øý€u½;®l¿mZÂöºù´èï7Áû6¸ëë÷�ÞŒJo°’u¸^úzy»ëY:×…=÷~úÀΧÓÈsXÃŽçx4•�zú ùõhg¬z�ÇmœyÚpžÑAñ~Ä9mpʼn­oëì³s¯Þ‘YD+*ã³²²¸äÆ~öºŽuŽÂMY XÉ0 oÁ´7ÞšHwœÖPç‚åyý¸Áôu¡ô _¬žÞÃã¦0Ð/DoEõioŒ +#l*a;‡ú2à&|@ôï°Ð×ÑÏ2‚ÖsTn0ïŽr£õÅ×ê“¶FS†±`§“�ö­–ÑW˜7xÜâ©Á”žH,Š‹¡¬'ª^•Ê�­ŸVíp”BµÉu`ÿÚyc|?Ú¡ïfægjQ˜…ôwÖÍ�"½w$q0šªuÓQ7ت®'båL&scôks!æÎu×as#LtYÕS�ÄÐm©bXnHdÐ úƒWû9ùjÅæÇ•CAøñs–²?Þ!:2ÎX‚`Kì­†‰ŠÿÐ5jc�̦Кì®ÚéAœÞÕ¯(ø!Ü�udŠêÞ¢Âêx"u±£²­‹9Î#}½±¿Ð ú{ÝP>r÷Î*C«ú¬¡¨ H%÷7F«!HC¦+ìLõºn4Ô 7Û°"Œ*á`ÜÑ2X›�7•{YñW�#½Cu²°Ш¤½í–ÐãåÃ�}þó%%”CfBÀQ¼où(çD*ž¾Dó�w&Þ=C�…¾] q®|¼Œ—M�;ç5›ž¦&ª¨¢¥ØSmqzĤG],ƒMàH׆تúu­7xu¿n—¢’ãûX)˜‡½6™êsî‚Ý»õ2ì~YfÏ@u2½g «fÜì +Yôª*sò/vsÍ<ÆîÉJÈyU + +Xåó‚ÖÄ o8àÞê¬'¤ÏˆÕ<†=FjAŸ^º1¯§fk£®=v¡'ï°ß-Ë*ŠVç0úP•™„˜fvë5g*«±™$YUí¤|¤Ž®dZw)nŽhŠñò3GAŽH]Ijj®Ý $¢:R¯ÔHi².‡5¨_­6f6wQlZí9.�®h�ò +1E<Ûo¼‹§(Ž¡¾lu_“âœL>á\‚mSÆÚ#¸KѰ -hÁhk_ïdþIÝ¡Ú +‡™*üe¯ºÛ*•’Q»¾�ëH„î­ÔN“©vò w)Úx!l4û&Ì~8(…P—ÑFØrÂ$,Ø>ëózµìE¢¬¥Ð!’$18x�v�•„ï�è#Z4 ¨Iê™È(5©X¬¾xÍ=\Z¨«ÐTÎÐýLeÚÕð00X«#Ï($cúSMIlƒ!/í „äÀ† ©‚¾ÈÒ#÷Ì�"¢�’uéIЊyGR`7ØRü \8¾!"Š~"Û1†kˆS½¤Œ3� GÿÒ!ÇRý-M²ç‚”Pu^XR‘­ŒO*§Fi/„M¨Èô¿A +Q7Md¿.Õí#.X5©H;A]zBíK·9¯0ù&ÁcÕŸ˜d'Äi¨°4"(™È,Œ‡j¤œÚB'R¾UŒ!\‹Rò`õ¢ºl9¸œ×H#CäGÒ�‚‚Ö8ò]EˆÁæ‘„Ñ1£FηQ¸CÔyìéƒ~m~´mVÂ$TúßÙHÅ%^MÝãb²Ða­ht§*»’KΛÊ.%‘ˆy’9L`NTÀœöEŽýŸí2I²äÈaè¾O¡ ¤Ìçá<µÑ¢ª7}³Æ?C%m2?<Â’XÍ­’âiÝÎOüƒ æÅ­ÚzêÀÈÚ·õŒö,EVšÎçö¦S;IÿíºÎcÌš"5i–Vß9v÷!�n©Îõ PÚ¸Ö±=ÝÒ»•>£¹„ÝÛ3Ž–jÚüÄÏ&똯/Ù·æ§´È>a3º«éºõùlìëÙ™^@Ù”0''ªßzxìÞJQuóW¼­^2&4]H€Šü×e5ʆ}cKͲš&3�ÈD-±� " OmîY7};]Õmß&¼ÝÊßáqÖ¿ýoüD|Ö½ï¢ÖŸìÚfšY{ÐÚb¯áE‹éßöv#5­„ãß{¾PYyaà �ŸŒ¦ŽïX’åkRd7ìaZ’Ïõh.0¶Ãñõþýø0ð÷�1çKø™¾Üë’éC†�êÝeJû±ÿWQTc8%*ÞL§ØÃÈ´ôÕãgÖ%´ÀW½ßbFã­C6–ø"WéÒp¯‚•»Å‘G‚c¦ºA¡¶53dÒ…’ª4®üÖÖÌ•.ýífðC�-µÍìjßÒl Ã#üÿpÛôçÇ!~å�a½÷‹ÛvMÈ©˜ÍÿšªGÿ–O9M̶Ž.Ÿ-’ÂìM·4wïŠ;N¬bôgHm±øc{Áøè¦w37ª¿Cv‹öF¯9æNÎZ‰4y›�î²>ðµèy¦M¾¬ÅFü¯U«-*p˜­Îs:m@vAMúöŠE-kçØÚ‘›˜�¯-QK˵çÍðCÅ¡"56M©Ði§® L ô7uÒ )�LdÇ•Ûì©>Îj®´%1¶»6-ƒä*O¶œ z-W¹Mç�-’¡`WŸ9þ*! +`¥$ˆ„jêÖfu*ÔÄ}ËÍí�H¢1P®±Âü�à—A• 7¼e6XÙJ=öX«œ¶Ø´ßè.Ý4àÇ@wá™-Z’b‚›×1`xš¿³ö;Q¤cô 2eìöA�É…]çˆÊpÈDŒ@�H%T³ÝÆìJàš4–Îåô0jËÌ/\Ë»X³ÖõòÄ.÷ÁÍ´ •^·¸2ðDÓ6ìÍmGªVZé×ýnh7µ™àǷĈa‰Wéixz¨W�êDG¸F讫Û}`³1õôç‡ZÚmõwÔeØm^à–c\‚CnõùÏuçåÛNhö¿ßOetQr^EɲùÂh9ùaÇóϫų:ׄV¬»GLnùö-fõÖ¶A±½ uÓó‡³Ír6Dæ ç£[MñFËûžõ¤T¢7³¢? ó ˆ’¤õé^Žã…ÑuÅýtÓ1Ÿ=Ö¥æe¨æÊ|�NèúƵ76¾Ê%]–@yklÓåëíbh­j>¥<[:„@>Þ÷ùÂ_˰Ԡpö/~®âneúºástFräØÓ?h‹D gbww;_yʾiV÷“A$k9¡ëµê´Ë)ß*öãw‡pD>«œp…ºx;¥ïÂ7Ööè³Àí¸äN$E5-eV3d˜>Æ­,&¡tÐF:µøBF$Á6Çž-8ž"a§»–àZ9¾Y&Þ¯4žŠgñeîOÑdljâ@žk¬ ˜vR�£oõ‡�IäµÊr·aƒt-IuÆ5p¼v|Ô}ðã9F(©�g³5¿�­ +…j´¨íÊå~ɰ4àËwì ,©ýXÿše¼]³óîH{ù¨‘Í`ë=Ç$ô*5±(­GäZµ[Q›µ²Ïé>ñd ãâŒ>I‘P1ÑÉÔlg$^ƒ–nE`BÏÛŠ uq¼+Âá¤â>± 0^™@_rþ3/tòÈ'ýY@×2Ô‚Nl —ϨSwoyIð$DB¥ôÂIÄ&μléåá-ÈKA6ovûãL7y±ë£¡1&HD4�þön½u‡ZÆ'a‹ÍËòº¬ˆ; /ú÷ª­(µøEE{u+ºñwÑê:¶+=VtÜÏö°{ÌÈ­iâ�†B1vèÍc[ɳéZݳèÒu§ëETÊéîHð±`x®ÏÄNhKøÌCÈ®âƒQâÓª/m­GºDO¾ÍŽî2k˜C®8-Æpˆ2+}+†ãVÆ(ør)Û×K½&¦¿°ÿð÷ß"u÷ë�Ñ™ “ɤ €Uµ ™àyÃX‘KáN]´Ã.ÖEC–Àíç�0öä-Û"˜I´ŒÊÂjY-es‹¹Ñ&]pŒõ¶ÝJÚ=:V�L¯{Šœ~Å]Ù€AW×nFªÕÂJŒyÓ4?ÈL}Öë,Û‚],åÕúöD7P]‚P Q­v|÷Ø ÑtRM#õjñ.�Çø#9Êý}á¿'s3£¢@ýB>ó�ÌÕ¾ó§×6J]OÄÚÜqW޵ty�.b‘Bk»R–¯ +E¬² óØ ¸OúØSóë$ ’|8!ö…1YÕ½º>¸l~»S\°5ªÿz]7R–t7'ˆ ÒË”5œ°ËˆÂ-;Óh É;'’+; øÓ›vïcŸýÝÜvÔ/¼LQh1ˆ:Uk}¡å,úÆ}ÅÓæøÔcrC€@¾~è"‚‡é v+4mw›Vÿú­°i«U*ÕlL¿ë1)NmKWÄ^U¦¡«Ĺ«K´Ù–KÂøÔp³ÖZ85Æ®„þ ìÒBZu—ÇߞΊ©íàêêBZõz+‡Jç6= ¤Ïú�♇h)J RàáŠb£[Ù¦¼æV/Æ{›+ɰéH¸T{ªå·èO>5Cô�ºã‚j8éþ¢8.1Ñ-«U˜FÕ·jÅÆÕ†ê7¬é÷�a(“öY.zÂ/m¤µMª<Ã" +õa�½‘´@ánÁš$Z¡?PÑÜC˜9vìF86RŽÁ‹VõØÛÂ*‡Ê˜©~÷ÏaŒ93ÆÛ¡8¯ÿÍ�á0—­-iC'Ö1"»í„ w7+ަ—ú +ñCs‡ïø„Œ@ãºÒ²í–ÍZ¸ëÍÀ´O°¹cµPC £úµ¥Þwƒ!·tšÞlŽ^Ñ i¬8¼?þøß�ÿ¾Šé¤X‚00×å%’ôœÌú‰\wóÂT-¹ÉXßè/¼0ÖSøõoŒwبÅ–ç™­­Öù†Å]'abj›ó~Už;Öm’£7¦}ÏW8Ö+Úó=_–b½±²®¼ç£Øo<ÿ|í—Òþu�Ÿ¹ë3gÆ]x?HɃªŸ© +nÜ!k=¨z§9û±OÿÌ‹�%¨^6§ýΑµ@b‡.ŽÜû·¸ÞˆQŒ¤Q'¯¯Ã3ãÚ¢nj�dküÞLìäa¡X¸j_Cs1R¤ÜÜ2pR2ãþéôû‚¨]m×):6[ïáä•:lxkáÙŠº¹�g'dh_žÜ°�º˜r1MßÓÂÒýVVm„rWÙ/ªS•¡g[*’ÄZˆ î\CYÒñû>$‚ú¥‹ï†$?f´NŸ¢ï +®\¦è€øú!fÙâÊ�,6˜(Œ‘ë)Zdð÷c%<Ð*ê5¨¸6{ˆäÐèaGò×_Ý÷µ¿‘¡9Ì–ÿO†¿#C‡ö’OŒŽ’»ùiì݆j¥é}ƒâÃMrp’/O5\¿ãyü­:%:—£F¥†PŠv$RcáwÂ;_ôžh*ñ ÖôÉ"ƒàDå•wçxŠÃ&jz ´qNl6úÇ¥9€y|< 86W©ì‘ùKsÀµÃé�=WmÌÃ]‰èhñˆ°bmê:ãM ¢Gù + +ósÛ¨³Ûï8.f s…&~‹´Wα—¸×QPui©‘i/)åÂ6+%yTæš“]Ú¦7±Ûô* › •y<å>\r€ï™+ŠaÔzØäM±’ž¨~53iIfÜñE¼W…|ÆÄý˜Öö.Œ™ª`Þ¨žŠàD�Â5#Çß•x½j”žÙ͘i›%fÄ¢jFgj\%´ð-Ø‘3°�CÜŠJ!â9šEQ`³?‘š™³á$ÐmНDt� L4ÛaE�ñR})¸òS¯qºìAg\œÆ·âz½²ÑWY/†h: ’VÍô©|5�*GèdTr›ˆÖJ” ›°H·e¡kgn_K«1ë,æI.d¯”AízU¢C2÷KÊ×Ëéªõœ·¢q±˜qY )¶•D¹JóªÝ"ÕOYÑšê@¾°Ú³6Qm¹§$¸IÚêùæC.ê&BQêIr*g*é1$Ÿ»ö”`[òp”ƒt�î7�ö/©Hèì’ð!p‘ÈÛ„Æ«ë €M%™=¦Øì²­¶¶¨ë˜ó™›ßâf0!º•ìÛòVÞ!F\Û¸ü�Õ#ÿüüû Ã$q�Do¸:”õC1ùÙ¤](€žeœ€ôiƒ2FÿÇç–¢IÒÞÓ%×î*¦>¯ñ�ªG¿¼sÜw¬�×í>'TÅ!;Îñí`kš7¹óìî_´ÅêÒƒê�à³ò^ÑŸDº˜\ýW]‚„U�ððµ<Ë«Ç{(I…ÞÆÒQ.Ð d ?'Õ÷áþç}ï÷õÒ)¯Ø%éŸõAŠxÅ.`zÖÏÜ÷8~¼í<V7?a¤é5,+ �ô„dpCqÞÂÎÙ¬ÜÓ•G|î ;w{gg½E@§×RmðFW–hå7q´7p7)(бã]=Ò^|–ªBZÎ+‚ëú rhî— ý×§ø,ú¯Å”mƒ‡ÈŽ!wÊd¶’¿s ¨J²ÏÎY+·fñDùÏÊÞ1Î +º–ŽQÚ^dÖ×6:=L.§ãœçW§œ_´ñûÐ.cSÏhÂBø¼‡NÐ�9�viòÉ <ò•Qã8¦“o³Vfé´}DæòdMѦ½‰ÛOÙ-¾)ò€£lYCÎ"÷uk‹¿9I�õÝü ×b†«Ì]êg¢Â>¢Ã…ÈgIÀæœ]uKc¡ŽÎ1™nTÑ|À�H¶[¾Í†¤·1ìs›{èçG³òS­ÃÚ(Yý¤o1ƒ´¦±”ë�÷a¢;¾x ¬yAÄ"†¤rÆ ÁâdÐ÷52 Û¸Žç3]Sc-d=�‡ÝA¬d<„D¬ç•Ìx¹E ¡Iì¶ ö¸�ß—"Œkátr /ƒ7E‰4lÍtÍv›`È-‰—ðÚhñþÒÚ.!Â=�¤ *Ôk7Ô#7šÔL-�:ªT¾‡£v›´a q©—°’†?¥ó +³Ìå‚B}+3‘åÕœc ®l˜XH* ÍRÉ!yE²ftd’‚»ä5¶ˆ·% JwíÃú D5Ö ä0tFçÙcžg|´H ´'¼ÅÜÊÅaÁ2ë.5ÏtNÉ|62�&Þìã`)Êj �á ò…è[.Ãx–ƺQ*<¸Ž-Œ³pL®·‚îzç-|¨v™SÚ¢ŒgÇ'èÛŒuî%™ÕrŸçiŽ÷Æùù ê�f]óÄ×Ùã è/ðb�^ÒY² ÷a§Wmu\VµË„únƒ¢`�ë+“È7&ŽRh›fUžâÐÌÁ‘ϼZ#*À‘^'Ž® }v-Dä%d:W~U/Üæ©GþºY¼ØE^ëFá`w¹íJuíΈ%�‰dѱžÃ‚Sí…Þ®<¼Ò“Á¡^ãZ ¯`0ë]0•õº9aMž}»‹&%v��´ÑC;Kä šþÉWiŒbv ›và©QÔ²2˜"Ǽ� ¥KüÀ¡¡ê™›AT_¼Ipm\Ö§�´3„Á)¬™ú¨‚ç&¬DÐé²ù”¬ß7¦ì_ëb,A„rÙS¾kƒƒX €ƒèSÆn��yTÀ“ü8=‰l¯:¸é>ª«•ØA ”KƒâpàÀ ŽÅU5B-oðj‚_z¥Óq&Èx²À˜_R¸ÒAç6ö$hIÌG)$Z"Ô/pI\w;oÑjç*ÆdŸÎü�˦Ä^ŸP©kÀ¾8r»poH¹˜qé:J.tÍäKwmj#⃡üV�ôôè\j[Я—U@å´n„ +gû�FÙ»¬gçº%h[5µÛ–D‹®ýª‡Æ=J§Ùã9)ý àŠà2tò3H4ª˜IýW�›DH…Ù(ÐðR®›œ¤:í*H^Ý/…4äÂS]¢Ñ]ç8­Æ3néË~ ˜¦O©KI)×Kšan¼ + /‚˜”v G¬g” +ªk^ÁÖ;g©é(D�’låÊ‘?A#ÑH{(6&>æâ IÎÀëQ¼.Úε`¿õ©¯’ÝHr+x×WÔHÍ}¹žñÅ·1์éƒÚÜÿ823UÕcÀ¨ø˜Ì$ù–x*Ð>»J²la› &ôRö5£˜>à»®Lkxì­Úù4ðx6Ÿ.Á ­—+¸xµÚƒ—€� KT¯Žk²×32PdÒuKrܘ{̺ŽQx4 ¬ѳÕkŠ¡ƒ~(† 8¾pž©E™ÈäVNçá½ýFœ+Á³E#‹aëIM¼Øãeˆ74WÝI@4|Ž* ~ñI– ¦Åqƒ0ƒ1HœãXZ�pb–ŸDÓðgž<[Šõ¤üoôž>VÛºÀX.)˜+3¯’²N¸¯>D*M¦·ƒÀ™eÝux2§¨ºhÏ.ÔŒ¢.yá‚H�EÔg‰Â)ȈK‘æ”ãâ†åÁFLeGô¶ÃŸr#{3Ä4Ñ¡¤Ó±œ b¡®¯Ò®_”Óèæ¦]높,ž…ø±,Ÿð?Á7' þ‡Oøgæð®ì†ï’Ø!`øõ%o®CÁû�hÔ¶õΣT¡;{–^Ö´ËFråz.§ Ì3 +‰šλ¢³Í¯OÇŠìÂäzw¿¶¯4£ûWûÉí!©wCbb`�˜4óê¼1º‡×&Š˜W{FÝ$Ö@H]ëÈíŒÅFø�.„ïELhNš :X7î‘–ÿìÑ‚“RÑÃ%`9Œ¢,¬'IΡBKÙÞM3ô¼‰ IÒð¿¥�ÓI€¦3€d“Ñ!~¥RÖ·ø¤èI+|ÒbZbÀR¼c2æ ),ÔB‘êuTi$a\¢Å(IÀÅ›¹.A2lÃN u™ïîÿ�ô²)/2IÓÅ +"›Ì,'I¨W Ýp‡)Àdút:8â@MÕCÙÕÅÿ\ÛEM×Ù5åMD�CI]®±ÈæÙÔ©-¸¦FÆ *OòB»VÕN2}œº´ƒ? ç9Ë ‚Éžî,Çu +IÚ~�ºµÂ&ÊÜÏç鮵Kpõ±M:äšvZ,ä–½÷7«É �¿¬t=V'±þ‹iÄböpiZ¬«¬è‘¡óFµ�ÃFTÆu=Ò®vqë<Ö#8íj.Âu}L�v}»œÜÊíjÆjï×°¨SÀ:O�§õ¬P×ʇ¶¢NºVã2�ùXç“-#®ÊÔ²'LëXÅ" +��˜–ëÂ46-e˜î ÚÄßÕ>ƒ–Ü}m½`PJ‡�–Ö »l²š¢¡¯E“¯E‡¼² ó¶b&«àkŸÃšy}T6*¹ø;lgPVÏ'ZÀjiN÷Ý]ß„QßMÞwKéF‰I‰f%–Ý�%UPC(¬Üxfµx5¥©Òç8«Gr™­0ø„mçÕÅLÎb¦ªj¶„"5©,’iBZŧÅzÜ£k°‹3™J*ÖG7“ÂW±d_ÂÈî‘?gÖÄ雃¬ ÙfpÀï`‘ÇIàPWV')88ì:, È�7EyÛUG<Ë"Î;žz:«âÒÅÑcSXÏw•—V©–F×�´Î²Žp6߬¦îüz1K� û:ÂXlyˆâˆ0‹ | «‡u³Þ訔pIP9§ådqì+ÛS`|ª¹¶zf›e5|�åý²­¨<kq1©¦hQÄ=Iü°]ÆDtŽòcVŸ�þP'µÁ´F+M.¸Lg7 ˆbéÙ5´5Þéh‹¬®­ ¿'\£¨ƒ0�ËÑ€T9ä¦5— {�ò´/*È“&A„p#BßPI²+t%�5)û¡K ¹»sîš�OmgPÖð …â‹èp�§N4eUËyQˆº~®¨Æ|s0˜ &ïIùÓÅí�R$}”:SžQ9/ÊIÉ“×Éà›PØ�•U¦˜{\ßÊZF«‰WWqǦÊ{Ò¼¾r„[%òˆ¥[)t½ÏÃáØó­¤-,¬Á:ò�ÀLR�û¶‘î\ðF¢¿ŸqŒ'Û¬…² ã G‘·¡9³ºOé�<6â(ZA^Í(â«sñZìï1K­pÔ�ZŒþY†�ÀÇC]ìv¤V¼j�úæ³FÖ­©üÚÖuYLª�Gu!«¼­=mì@äÕ:gôº@iZRÞ¨l"ͽ˜æÚ¬’zQVúx”»%“^¡Œeç\7ÅùթØnüŠìf†€?D:P†ýšTwö8yK‘ÿ¢K÷‰böIª3žPþP*)�Dìä%æk'Gª•ƒypț嶸Sþ�]¤ÇÎõ�ö�ö*íÙÞú+£Gâ‘ü]bWe#â×ÊnLý°ä•ÐdWé[z-©–äô2‡k‰�2›S B»êTcöZ¡žk©0 Ö‘(9ªŒ y;DÓi¥B`ÞålñÈâÙE|6R2oÉ*s»YCÎжÒà³l·Ç‰qå·°(,V‚ûYd¹7·ÚYH¬S­£˜P˜�r“)ABˆ/Û¸ï@­gU¤kˆœ5I=srÜÛT‡Rìa'ùƒP§ÒÙUå2�(ÃGì‡ Èz¦xK㲕æ[(½"“̰¼y�î^X2®¾âp£Þ2-o™„Úu®ÔÃÙÓWZ“$ÅàÐ} +*¹ˆ}ÛVtñúv£V—,£8ÅÂ_%–à�+qpîeÀ$zÔjpŸ¶Ç½Ì&^å+‰ã©.¥¨eMfžbÏÄ‚ª�–œ�c휨þ_N "öê"®†Ø3×W–±Q§®´½lA]Oz�5xÿwÕá>JÃ\ ›xýâÒÄ2åy[I½f­ðÃÍ&"�rû$HU°2Døº çø<.IŽOËšµü)–mí´¾¾0§%Á"ÞRL‚:kñÛHÀr.Oªõ‹â)6ƒ +âÔžN–S«²‡\mtŒq]ühW»HQžë+ój#úẾ©©ž6Òôrmñª«�`R„®!õ­�¡±ì3ê)¥k´Ý×uÚ½8ˆ¦m+ +7öRp[QÛï•O®à¯lNÈôŸr»>ÿÀfÖ‡„¼ÚLÀ‡|ü�ŽmgcûÑQ©NûGí§ñ9¼:(Í>‡WÀó“äêìÔ™ÿ¿G Âô^‘ÌÆû~ÿû•Sg8€5àŸz%Ÿ î„R¡ŒøÍ$~yý¦Ã&aŠÅq®hEDÿøÂ²ƒ™ÇûÑzõÃ7Ó6I¼ùšû½S à}ÜË:ˆ.?ÜÑÝ\á_2Þø÷p1ðXô.\ø_ åô2“0ëÀÓ[ Ë`} 5A¿þù·—¿ÞpqÜê·—6@õg±ø3¯× )%è˜>Az()‰Îüá×Û—_¾†Û÷¯·Ÿ~½í}Qb‘õ��±+ZøXY¶òƒ]SŠq^wõÄúN x+*Ø4Ù•�mã‡má2–(úªá‡­¾üé—xûí;Æùó—Ÿ¿…Ûÿ±üCÊ’Ðbàð qŽØ×,ÇT ¾�O‡"�B,$ðOSïçT¬ya|˜*¦‰ÊcíQ<γ'î/OSüÎk»NE +ðããK1AT “�½Ž‰u|úqêýœº\ä˜Ú÷ß{�ZçÙ÷—§)âçĈ¬¬åäØ_ìå$¨äiœ…¼0öü¿ }¼„>e(;<�° †>áؽ§psôÔ�®AvNÐ=Yñyœz?§ì×òaJá@ +ì½0<ØçÙ÷—§)|Ìê´~˜¤ÐÎ/åÔÞFîç^ÇÄ:>ý8õ~N].rLíûï½íóì‰ûËÓÔCèÓ€Z,5!`‰ê3çÎ*?‡¯×%p¾g¥_�ô6s!äßC ÿ.’óál±FðŽÉš°7Ó…€t¸3[†½Ž.€EîΆ[–)V:¬=Õ +öcþˆ{¬ `Û[Mdþ’K `í²í»¯¤1‹Qx¾'´Í¿Ø¯vÇr–Ï)úã‘D‰�°çèdƒ¾<¨÷ìêò:Þ “*ÑÒÓ‡ApÜ{óœõó¯cŸËüºìºêÙª½”ŽÛGãÅGv|ônn~˜[æüÃ\|˜ÛæòÃ\oŸ&û§Éñiò“oú'çôOÞéþBS�Ú‰Š¸7ø£©@A"'Òs7¤¢”éð °l#Q3—ÁŸ˜ë?A>íkåÀßÑ f;صC.Û£·° Ø"ÏWwwp.$‚u§¸¨}#:DsímøVUøŸÿ¼–Ñÿ™tMÜB€ý&´ú$±Cn'^±Ç>Ó çKIÇ'ªã†ššÈȽkÆU75Œ‡ÃcùØ­×Ìx5׃ùrj;¥ªÛw{1©Zœk]^}äxî3EÖ—õ{ÛÚ@¢‚fg±Æ%ŸÏ�ßÛ <ÿµþË•ü7¬K×áf“¶Á}S09­…¸Âò­O¶ïZ 8üÐõ“]4™>q£Õ'£ðØSz/^¡Ö¨k-û@üs³Û²‡äÀÓtõRÒM-%/š§5û¹„ í0fÕ^åuI�òñ«Ï{åœã�š/‚>!Å=,´@ȶªkk\·Ëh&]«Á£0¦�®�w½D5NÜzåæ²9õäáyðNív¬±ˆò7ÎkìýZls›®·M‘ë.m~Ó&[MÀ¨£4z)u�̓¬÷•Oƒ’ªü=·l§o€£¥ê€>ºµ`k-RW¡#M!bŠÐ{#ä�%_Ž8k¡É_>A¾óßšñbu;ke�ÇrÍ®!_5V&œRÑeѨ;¬Bn +J;å#íË L.ZóÀn°‡¶ËÝH¬”a Iüˆº,|› Rk»Q ?Ô<È;5f˜ä×Ln®j“óDp“ +¼k>&×î]‡Bã=·!W哸 Š%“ðöžàÊH¢G¨Í͹Pÿö0·§A㨈Èdˆièí8£¢µS Ç®¸àÊC Êßâ©èòâÂï0˜ß$ +/\Ð`r1±å”Æè*çM8쉼\þüÆW‰iDœ|åôã+_M?"‡ôcE]!ÏMo;VJ×HOmKcÒ´6 qH#vê\ÖÔÉs“«¿™"H�B?SÀ‰qwm+u#Óô™|/UWÍ)¢›d{ÛœéÎ}�Э:˹ïX÷ëÅ`áy @*ß•$P©ö•£l]•à�&²a]FʈyfðD‹Ã<.³È$4΢+Øb™Ó=”¹FÑ=C¾¶ø!Ö•¢>iê•RêÈÊ ÙãŽ2X–σI=:µUá,íÉ/–KÈÓB¾–"p=�µÇEG¢ Ë*Ÿ¼c¯:6ÜT1ÏŽ}†Š¦ÄתšËÐò‚5þù&N�ô–þÛ?Âö�°ý#lÿ¯„톲Öß(+fÃÞ—qH•…�Dˆ¥Y3¸Ú×�p>ªŠïA$žÖè¥üŽÊl�K}]Z&_¬9÷½´«nÞR�úñߨ7 €Ô‹›÷¯ÄkE]ÒxÌÌ/Sü¨¯×È œÑΕ¶bs›k²Feòd¶ýb�~¯Ä3Û¸-Jôñ¾tO:dF6ª‚é% +YKÇýÙmÜæÿ:â2ÀëÚ-� œ¥‡(×n¡#Rj¹‚6¾ØWyÛ>teÊÂËŠŸG½{t8ß÷ÚGÄ·jX¼:qƶ*½Í‡fÕåSML•p™*á’y55ÕØX\£®t<{²lÍW“RŒü|´K+ÀŒQ­�DI�`Dó*�-‰Ñ(íÚ[Á2žÆºÙO& ¨x,UˆÄ¦[²‰?Ècjm$®¯&­µÙ/»4Ëq†n¥6Pý‰Ô¥=Möÿ ì[éÊ +’—³¯Ë–%8�r±ëQpôî/¿d„…i�ÊÙîó‡µ#Ú´JXùRº|04ŸwA¨¢|¸QRÍ�´šÅŽËr½6ct‘Ô‚Òx€D3@a¾¹BœµÊÛ$álñDÈI ³J¸f룖”bކÎms›Ÿ©î¶9-}èF-Û.çØC’Ïý'SzmÈšeúùUí<€ì0ªúmûwºo>ï׈ֳÅÑŽÞ±¹½[¹Ë4n-d$fY:Ýz.^EYjí%ÿbˆ\™0„ÂÊÍÈál2«�ÛoUÙæ-=³á4}Sô 2m9vÖ^ñiê§«Ýàú¨& 'æN †¸%ì缌ör†µ­{›õ'âÅ�ì'ŠVö|Û&™‚óyf51ü«Éãœz6à3Ç'Ø”?,ù2:w,]ØÞ: Ÿ…�ÄMn%ˆ¤Ö*©¿JŒ?›K‡m'`•*ë÷ÞpÉŸ b@ oµ¼|®]KpÙ¡HÌ]äH÷ý~˜å&À1¨ôAð«L× q1}¯ÉS⣺â±Ã†Õ5Žj¼?ñ¢1†)s‚WÙ ë-€/J‚PŠ¢ +¨fOÀAÅ{·úKЃXÜ#)®‡zŽ“”k~W~ôn×�jp 8áa<;&æê\h\y&à4Õ¦¾Èùa¬�Y7Ž…Td11~#ös½ë.2]¸ (>‹O¯ J•^kÀõ£#Úë0lY ƒÃ˜W‘ž|ЮwG")›N…Ž´žéÈ;YöF)xÛ¥Âû�Rº[yƒ5@Ù‰ <ßt®±SHVxW/ö6D¦Õ¤3c#Äï\#Heröšt!òë 3øeÄ,„‡®¯;¿U�Û‡ÙíÕ�ùŽ]þÛȱ5ùC‹…²Å1ŠÛu®çP¬]ÈAåçÈ=Ùg‡–á†cë:g@9�?²ì²øÆ@qá û-ÔÊVcÁ‘s,©’íE\S…NMYdPñãÃÜ´scí²0ì"ñè�-J¦™ÀbrÌÉ;ø2®ÿ싯=˜ [Úê} ¼ Q$Ñeþ·H³±�ÜýÿGšÿµH³OöqEš¿˜À"¦^Kܾ%Pýɰ ¾”þž —ƒOѳ˜:Î�'ƒÿJóÇÞðľ}ÉȪ�lÑ4mL�µù? B£&ƒ|ÛCç³²^þÕäqN= +óæljì*tj�¹ciF‰ï +ŠSØEV›"7Ьâ¼E£4T Ùì–ôa¶�óøGÙ²#q›j`öø„SJóÝ;Ÿÿ/”¡=‡!EåúaÈ' c@B@�oÔYÌ÷zø¨Û®—:Q›Ø:Ó +]v×ãÆæãN´xn²'O?~“J ¬¸¤&¬²”2 F&¤–oíçv™Ý&d.Nú!€ºË¬¸ñ8Ê,•¹–$ÂäâÅÉ·0‰ë %ó'AÁ™îØ$O°Î¯b'hY"+�ÈkÖ`ÕG“ÑÞýÓÊ÷�šÍž³Úšbx? öDîà¯Cºµdõ?¢›jS ŽN3ØÍtÜ¡[‡É”œÿÁþEâ}+ë÷^Q[:Ÿ´ÙÜÔ'¼…Š?×®%¸ìS $Iç.r¤û~?Ì:‘)Ý¡¿›’…QRùOÑqMžÕ÷ F$¸°0Þ‚�h yбVƒÐZQþëæ¾è‹¤ md˜ œÜ«¿}çf÷ÍH–äw^AGç8’ìfš�� b¯¾+g-â¹^n5äëk·,\öà¸gëVç6àü£m…¼Îk’Èw¨„ãþ–{�ƒƒ–’Ø·V‰):|2®B¢…H�˜Ý´os™,3›h—{æ?îL]»â!vî£Hd–¬&RÄ�c‡¸7†Ú¿åƒó¯zÍQ2þÊYàõ”¬¸YIB˜{�ˆæÎÓ{ÊòÑ^Z±ñ8p¢–0iNºN¹"€ÞjmFÁìó”ãµv�Ô +86›h³“�8ÆÛ�"<Û›ÚoÝaX£îôíÚ*œ‹© N˜¶‹Mh°¶�½3•Æÿh�¸æÍüÙ†Òº›ªá…™1ëFt’3»"~c?×»îšh\2[þžÝ­¯Æ£›#ÓkSR²?4À›MŠ&$ˆ°1û8¬™GâÃLq>�@Âõ'4À–_<�<æ<ø?RñÜk^b¯Ã» +¯»­½(ø—&0g ᛎZ2×S½u´ b_ +HÿнSÕ�þ‡ëÝ{y8['±C�oÂ+AXë못°QUãöAÙ{©&·èP‘ èëâ\îž~±°q廼¹]gáz*‡@Þ@SE{¶ð�q8Çn8¶®£A‘;ñÐË.lÇ¿^´Æ~¯ðiÅ]ˆ6=´½À‹kΣÀš¿Àéózà1Ƈá]䜵 p°‹„çÃq³(Ç]àÄF)ú»Í—qøg_|íÁLØÒVï_nÿyTŠþc�í9~—é\MRÜ’N¯�Þß ŒYhƒ:íØx·©Nçt¢¼ÎnÉ#á¨êz…v&ØGàõF š”¨\èîì<é|Y]Ñè��žc4>õ¼�=·þê¹SÀ=[øM“¦Â†S•’¶š0è±ÿ £Í¡b¬1Dñ,€�ñoZpYè4Î/ÉŸaßÌ­U%‰ÞµuÕ­zç4WS+cx@Ö#L-wš‡¨U Ù*ÿX¼ÖæµP;T±J‰ö[Å *Á…Ô““é[¿ßíºÁȶ†ÞUž)¼JÌŒÒïäŒç_=B(nÃ2¤B´­a¼ùÔ&wÙxß(´ì–H Ó'l±Ã1º¼U ÐW_«h>ÝùZWvt‹ßÛ¥äá¡à°VÚØË?ÌžÄÔ³TP•1U&y™¨w§- ^ŠÚô!�²38íŸsm·H!  >ÞŠQµóôäÝêZíäšýˆÙŸÆ^÷¤Ý"©ÊcŸšÕYåÈòt3e¢nMÓ5zp™a(…5ÏÇoÞ|…®aY¹oI»¬©?Ù?¶uX­¯Ê[7JÏ7Î4=1d¡Ð¢·Õ(’†ÆïlÒm4û +y(´°§Ãš&Ì b4°=ô£'-•Š%îö³^+ì'´ÌøÅèÚ]{ +gqT�Aúy‹ÊÁÒl´müÔ!=×ÖÒPÉIæ°ÂX’l$çÉ‚ˆ¤Å y·‡×ïNœm½“seÕ‹œ;ô©kºùŒ¤©úWÞ•’jYΕá4K•æ¾Í¸Õ‘š¦uWQdº[•—ÅW@*»ÔØúÃá"ÝV/VêÕïsÞ­ù‚ù/í[�ÉvHê�[HÙòž³.@]ÓÓ ,E»­ÎÙØë8°` Töï”TÖÍ–ëUÌy\ÐbAH‚u>�ν†Zã‘jÕ|Ðe�Ó¼½+ùOl ²¶p³_Òò’nWòò¤"æ9š÷¨¬o!‹=QCÝ­UZs¤Cbe`$—¦‡ƒOM”O€°´£¨Ê”ªÉîLbK­ÊŸ½£:z0ÃjVe_EõK�®)±²SS«/c‡}UH#äÑ@×<ë[a‡ºÕÿ¯Ë ­êÄ>Ä€]X9dz£Øž,*U +N÷&þXÇ;óÐæ/£è¢l¿S|ߌ~n¿Dœ°Ãižl~¾«ÑÄõ½<ž†$ é“áY5X’ê +}GÚÍ€6e¬+ÃÀ¯9T-öߪ©Å@.îЦ¢:øQßU^R0Y3ØÙ O9|;gÒ–R•÷<ÈÁÚcš>Øìð¿eÒ¸šLõ égpï".8†‰ IT.ºG'C«=Þ«�f_1)X¦FS!#Û1˜(Ä“°JgÙÕ{{È®=ú‘]€ ^ÞÌ +rˆ”±��¼=¤³¶D‰µÉ _âü†"E×ä|3,}PŽ­®# +™ïžþ&-êÅ$0uJÖ &ÈF¨$Š¡"ÒE+]–¢ë€.”!çºIÓû~NA$haþô,ÉF&ZÕžö¸ç +;u1}u9ŽÆ&Ä)E�àÙƒlÀù¦�„(O£&FUˆØï^Sø¸@d¥¢v~œ“ë í%L õ@âuK¹I¯ì¨(öðªÝ‹úF=Š aÛo +h«M�fõõN W)BR¸* ñ­Yùû.즜“œUõþ\·÷²•—Ê·WIIí¥t�il 9W7÷jºv®ü®l«F³4©…Oœ |lj÷EÑb• lÞ¬;¯r/)�Il6I$ÜþxýÇ¥ïƒMTå÷X$Á&ææ ©&{Ém)®øâü€£Îëè¹—}>Ž­Œ¾ÈRE sg{wûy òÌFC>ÇIrB¢7�á1·gdϸ¯©Ñza‡ì„<ÞÜâ9�ÄóG‡u¿YØow»5:KÞ“9sK |’°ºÔ¬! ‡½]îäX ªÍQœ(òk0(¨°á�À*HÎÔŽœ¥;äÙ¼¿2Ï´²ßÅGYA–~«ìº´t ”Ö�Õý.P&Sâ‰Æÿ[Ä”¹¢ó0«SÈ�%7¤,±<ì”ÒLvÃbúé ¼�núKJ-vÛCÓØ®eØ’w�€¤¿œ@c‹WâˤžZÊê˲Å8g&^VõÆEuUØ’ùr±“ýEä'›:áðØÄ`hAfj2%@’êݯe1‚Œí[ⲋ†Ø¢|—ã„´Bo*#ƒg«R•ñ¯ÁRaB–À²A¸)õ…�ê•øW!e¡ˆJD†zsÛ +/Õ–uJž ÙšäY–qœy!Z™Q±�åŒÂI•Ü—j‹¸žû*Ê¿ ¢è”qϾ³K¼o¹so“0ú\jt‰ÏKÔ(Ë?›*è·c¹ÌŸgæÖ®ýçA�Æë¹Ûé�˺VqY¿ÿ¨Ýá +‹JKp`€±É¸.-br¸=úÇp•Go9¦ÛÎ݃œ}U¶?nYq†v„U¥îâZj °$Ö‹ ÇS”†&•L$ ƒE¥µuDÓO�üNŠ­{ög9ba½‡Íä?˜BÄDBÌ~�âÌj�0É™Ý8¤ù.p`Û³¤ü³ÿßqwsâ鈾€¥0¿*7ËÕÅR¨þåZËÊ;«Œ…©ûr&ÙìoCÀQÍÓª +ö½#Œªå補æÂ^«äk«éËýs:÷ƒ#’Ý�Nv‚mTdvö\Û¼q—×ìÈ-Ù=7³ñe«6ôrøÑ¶âÂÉ1�©©!°í]Ãeoï +PóUë>›]'ÁÂw/¶Š Ä6æOÕ�b «›‡Ñô¼º�¹ÛS:Š-)±°8=¹ÏÐ…wÕ9¿­-ž,Í?}@Ó0^̶çô>ÉŸ¨=7ÃfmQÐÇîºSQ:š&"-Å+ÂV”^;>]v²Ä«žÑõvºý­nj›wzÀ} +yã˜Qº3Ì祎 +äF6�¼¡#m2›•ãØÀ�‹Aû».û�°^ã +a¾‘PŽcMá7v±á#^Ÿdùü7¾™>�_|ûDëÒÄ0Jd¥ HÄü�×e%“@µôb9=Ï‘3‚ó áüøæBŽÿs\,¸}Á‚냗+ þtÐÈWQ¬%±òÏAf‡ÉÜM½�ïŠÓPY‰� µITd7飺2ïq¡¿eã¶Æ±3ö…!f©‹ CÔPgó ke£C™'ðk¶�tfR¯ëíc,šx£­±¯ó^>ÙÄ»PVå+óÊÌ{™"úv•-?_¨÷¹}Pïc¶‡•n×èÃ'F ‘‹°S�U¸Ûc , …­=_ä-qýiéíº„h|c ´¨q ͦ�"V ÎJèZ“[£Ö3@’wAøi‰û ž&*-oä¤sŸŽHyáÝYxâF@ìóaéí±t\%ùë :iûû•ØÔ¨�Zÿ®�Ï—7Iðé]ʈ̛�‘„ý|úí÷ÛŸþò#Ýþøqûóï·y4”>û»ÈÇÒõ†×ùê»R×ѵÓkÄ>,qŸ þ7#ИC‚lîL]=ÁøôiéíºtÏó}é��qÜû@…A¯øaéÿyô²J@-0�ˆ<˜Yí\B¸[s˜Ûàéc½wÞh¼öáÃ’Òuùlë³ËÆJׇÃ_/n‹ƒ¦´ÄáS�TÛ§š:º1’VRksí¤;÷iÜrthñ¾¤¡EE�J>Ž…åwƒ,�¹°?,½yûú¾ßmüþðÿ™“ßÝëËîõ_�ów¯ú²W}ãùÏßxþeœÁ�3焨ÿù7Ÿt§ÎµfðÓ²n³cpO¨Ä«ÀèÐ(ФðP*‡þ‹ýjG’åÆ�~Ÿ¢/нüt¡ÈÐó'6$£ž éþÊ@«FZOŠ5Æ™f7AH$Ìì‹ñ1ž‚ö¿ø +ƒ�…M-ù&ëuÑUxKÔåßhã¦<“좽3›òß¡+GT +fPì<¿E”Î�š¡›Ñû4“A4'ý)dBŸryTÃ;ðÑ1‰u ˆ1ëÐ#ÇÄ<&íí9`jHµë‡ð—pÛà/Ká(„!¨&Ž‹¶Žä«è,2†¾˜>ÚúîŠÑP‡šŠÙ¤ëhƒ�³œãZ:¼´ô‰C)œ×pS8ÃÇÚø<�<Î{é0ø‚¤ÔÄ_D´Fø½_d®çMçú˜ë*þ«_Бʉ šÃˆ¼*¼Gk™Þàë+'"º‰$M +εX§zº§šÓ +!>2�ºjXà8ºY„ûÁé4Ô½©q�{ô�R8Ç)¤3ÌTu ¬ˆ‰h(88rBúp|Kj*Ç»!¤©W]sðåDGm÷·pÒÿrHºÎ½+-RÉúºlr@Œ%w%Pб"°3qî뺮æ©d³df[Š� ôl&Õ³®£>£h¼Y4×Ré>±Ò3X"Vœ\kµe–ª¿‡Föfc*‰€‘»3Ä"ê2�X“ˆJÑ®CnÆãº2¥¨›˜Þ¶æœË •ØI«ŽEn0ˆäZϺ֠#E)‹Ï–&;É' ™nÁ:0$Ú@¼L 4¦&)ò¦3ÁÁdíªú\j‚k"O½²�aÐÈùf®d1­€+’©ë2˜‡ÈѪñ¯$�BY¨ƒ4(FÓ–ã“U#¹:Tj ÃÍ´e®Œ”—@jrQƒïZ� +×[9µãKmWÔ,4ªG/Ãd +²D‡Ç@ÒCWCã†¦Ç ¸®¼8�Á®7/ÔÖ„¼õåǺôÒ§í® x‡ïÚ´B� ãÈm55b™~ À®E®N(Š…¦zÍk.u[€Kßö¶éd], }Ö±Fý£‰š5”XV_JU#@’¸‹É!°•tÍsÝ|ÝMÀ�&ÖŒ9z‡BOb-L+­ï;GÖñË]µà}#î¢�$ñä&eø¤.Ö5·�Ûƒi)Jþ@ÓÞ°\H½è²yj˜Ûàü® ’ðìẙ)Ý]c5TÓ¢ª#s�g"|šL]DZó‚—ÓWQš¢ÅÕu�¿G4ÉAÛù’Äžb% ¹Å¥Z‚£×4,3‰sŠR#K¦LçvðY²jµV1ë(í¬z”€a cy +ºÖ€#÷(Ù,0Õ¤»�ç¤K]ØŠ%;k_«FÍê5®Ù¸5…¥�£$/\«g"XU�I2ݰð\¶b…4T-·�NZDCW�4ª¨"C�Ü6ô´¡^iôÖ•ü¬ž±uU×Õâ‹”ä¼D×0Å’.G°Œ«1Z­sãM! ¬b©ÉÆOêneƒõ³•èRU ð_ÀÛhUæZß�JÊ6†¶y¬[®S‰Ø9ð}î3ô¶\®Ï%Kôˆ.H + çžœµQý®TÆ_»` OžÖ Ü1˜sé^«mŽ�Åb¶ tâ™W˜V™ƒ¥ÒŽ�Ë�u±‰�`Éëkô�L·ç+?ðãak¿ÒáK¿±ÙYϹ¼ÿS WµŒé=õ» ÙšàhjM¹² Ôz¬zH…UŸßªÇÖÎ:¼¿¿�ú¿Š5\§†OÅ9kìSÈ_˜Yä)*Ñý<Ï:éö°¥5q«ÑÄŽ= +»ä®uþÑr-ªi¤¥‹õ~Â,àch5*ô�u¶(œœIV;Í6mÖj§aFÔ=0$¨ ³%ðßM-¸\+œkö—Ìï šÙ1ÖÃ8¶ù…PÆ>¿Ì{Í/ÝnfׄîSÁùŠ9¿,Àç[‡gW/žaáÔ )‡SêŠF¾QõwI2ô5©Úm[ëÃ9ùÝ�ãD8Òib¦aÙ 8�£@Bq�8· %Y‚bß‚0‚­äò9cdzíÍ2‡”ÇÞñÂZ�\)4\ìîȱ�ù:vQ??ƒ'Âó—Òz”�¦ +q Ûößkû>h9Ü C¸É€rÓ•?|{þç§_Ãó�_Ÿ?~{ºŸQ™28púy"ÛÝ*ùÖÏ÷°<Ôt¾u1"›�nl@µ"RUýJ¦ªªß3Z ®‡Å¥‘s×õ1×+’sm±GYGËs²{ò™Í�;ò¯ù—“¾C'�r¢Y#Á¬Þðrx„Þä4Õ©Ý(o¦¸r +îãŽ0"ÛjÞn­ÁýÔ�í­Öã[ø‘9÷ÚK�Vá©N÷†ºÑþöq*Óyª4Çá ãMÇ…—Ù1‚�Õ=ZjHæ÷F<î†0‚yí¡Mhúiózê?õ¸/ú‡û%9_LýbêS¿˜úÅÔÿW¦b–ŠxWlÛôßßÿk'­Q+&t[ÝU¤C[î—!µpFEw‚qb|ÛÜ‹¿é�ÙÔ/Žã×Ù~mCP„Ûë“S瀱ȹCR�'üÄæê=Ò3aþî™~^_à¨ùóñÜ휣UÄó)Lp<ÅŽï„xü Eôºï pTÝ|fá˜÷ :N(¢1í’/Ú·žhÉÏŠEÞ¹+`÷™ÀÇãD;CËb/^Æf)c¦”²�µ¿Lߡㄶ‡,h¾žuzÈï3��Ç'ˆìŒ©Ó(�#FÁ¼=➤OI€Î_Ùy™¿)è~wÆíô)7èØ!(^rÓdhY7šZÊx9)A@âG•K($òÝ<7ˆº‚P­¸­ƒ_ŒÒ©óÎó©ÐŒwt;7È\RÀT9�+‘CÁïd¤ˆz�a©m*À—egÉ:vh¹dAÓ“)cŽÚ}�J„4œñ éD; L+鯠óu€�Øü·Ô,jø‡†…5’†ñOª¿þiô#4œïÂ4¦v@‡Äûà3jBP½y8>ôs…ƒ4³ñiίP&@×hÁ”æ©T"Š/¾ +¶ %Á�<ô‚–ePóÌÎR;ý�ä{*t,mÝ€š1@\ùn�Ú™n…Þj¼�AµPEPÊÉB†h–]¡Ã Q;ÝÃ3P1Š); AæÍ§ð\!µÿ:Tm|ç@k +Ðsˆ Ê: jêV| 4ÑK'£P‡Û¹B‡i^t;ÍÜÑpWúš–iç +©¸ÁEÇâ5xWK¸RŠ ³I“i ó©�aaF˜¢ò@Ï(×2¤(W¤Zí¸A‡A–Íá)Ü=ß‘¸Zƒ í‘õnPÉÜÎò`ꊴJŶÙ}ðErÙÑ€–½\¡Ã ÚMnBÑmÅ 4Z²_Èðû\!µSMwÿn°¹a~Q΂YÍJÞ Ò„¶‚{иïPKºßHK{C…*îúÄ·7¶Feº~‡fÉ@!§}XW�ö|¯[�¾BǦ¾u/Û¹cqž§5Šê³]sV–õ�øc·µ½A§—I0(§Yþ’QÕ@ò‚,³IºB‡A¥y�ªoëÁu1�¡!ª«ÖÝ µÒé6�>•%ÙÊqö_,ݡàáÄRò±Îk?5éÉbbÜY}‡ƒÒØ’�€±ÑÓ…€\³ì©�f”¡ÊZÄšÉ?ïN”l@�~¾B‡±#ù¶˜õxõhÊ`e?‹µÒôÏ:¬Ïm³…R•. I5 EïMzu™tÿÜ Ú)ð‹dE´d+ûŒ?¥¡6µ¿A‡AåR$˜ºþI{¹äHr#AtŸ§ˆ d+ø'·t€†ê}bFµÈ Ñý=sg|KÌfÐ@WÑ*ƒ¤»›™o2Â\ãU}n�Å�ø•B©¡ub¡V»«óp`6“,Âl•¤8E£•CÁDÀ•7š‚›½ÊÓ†¤:ã\!‹S§ …Ù_¥»ýÀáD+pšß¾„= +SåoÐtwÁ ‚b×`Ó^8wí§ÿxCº\5îÐûåMXÝßuÛ"€‰ÀêÀeÞôÐWè}ƒÊ™'�è¼êŒ d2�9ëæ6ݤÎÐghÆ1‹Õ¢K›üï:�&6׺�þ +MÛ'”L²Œ�[˜&£fWCXsÎmwè}ƒÚ™ãlî\¨x¢åÙW¤�(nÐæìM’Æ·±Å©É×–ÍûW¿#Î :O'¹™£Åš~{.¨ÂêUÒ'¿œåèõømùãñçc]~ÈD¢…)Ôeåßó´i³þW–åîzJ9•åõùøùÇòÓ¯aùëcùåÇòýñ�p$‘^®eêÁ*Õ[Åæ=lHXÙAZû2Êê¹ß�z[ƒ.⽨rÔË*踒¾}©HNk[öÍlÀëñ" ’cr|†`­Ô(dÚsä¶j[o»!òzÐé;´�~ûÔv=Ûnæúõ¸#î.dŒé×ÁqàHÝ33 þµî�>ƒÙÌ ²�­c,( ¬3 3ˆd÷`wè}‚ªÄ.;„æÓ:bÌI¡#ëÒµ[•`¢r[XZ—xÚAnˆœ\¤;ðåMÝÊ2]c[Z‘ohË~Ð&íã¾^�/�]ˆ„Äl±¹Êþ)lH|6T²'Ŷܤ-ª— @Çâ6^�/Ðû÷±Aû5†ÀLSŽ{æ6°cÇÅ«ðnйšÿ9NfÞJšv\æ�:®ìvòÓU10¬ðéÓ¥†Q&1Êßg®Î/UCOÒÅ…¸¸èÞOòÓ<ÙçåIv*»ïí +QU©ê@´(¤PQŸQæ}ÓÜ5*Ïe»î²e­`%`&ŠÛ3-p:Þ¦¥ðz|�Þ'žÝ! ‘¨ýÛ¾gJÓ� }“›~ì§Ø�yÒ“�¿AózVÙ1%×F¢â·ª½1 +ÃO­gÊ0<×7Ä‚´okë–’‘ÌDq˜¦�0˜t‹*¾¤Ì`�Þ=Êyë„ÁLÌžè€èVX¨i‘ êÊs8×˲0LE¡e¤+éTˆø7œ9×ïRÚ©´SÙKŸ»„bë T“S¶s;Ý!‹ÓÍV7™ðj:¯IÎÛr¨ß‘ccqØíÜ!ʼnþ«Ú›¢ÑkðEo@þQ"Žv£H©ø¹n�â �Iœª!vèšÑ²•J‡• Àêí.Lq�+¤8pN¼Ý^+«÷·þ�u?%ÛGO„~‡Ú‹): ½µB¡ydØ»¾Ü!…aÒRI]./õ攟4u*{”d S±-ÆP'R1º76 ®ÙÕ0ªe‚€êrõ¤ñðRj)Cý2&8u^ *uö‰1 ×f½¼úÔvƒG�ž‰ƒ`h,“‹‹ÔKeãCŒÉ$ ¨tlÈnÚ®ÈûŠøð !nåõ:DóEad¸2EÍúŒ\]ÞyƒÞW(ô9?JEòßID�)Œ5: ”Vy�Ò=ô²8¦ŒµUk[ÖÅ™� çÕ e1š¼ î�…áœd¾Òö}({ªË"G‹�­ÕˆƘcÁ z_¡ØÛæ°W�jXeÄ&ž•”²Ô�¦ïu†¾B3NÉࢿ¦qC¦»Ï0¨¡–jÙ×ãŽvÿ$)Û”p†0¹ÚØ.NAŤAÓÈÈHè*9¯ÇoË�?ëòûCF¢b´€Wþ=Okd F€ü«<‚±²XàõùøùÇòÓ¯aùëcùåÇòýñÝÂÑš¼Vñ,Oûõ?ÿò/-Á‚ëÔšQuü\W•àçCú|<µéåIB¯G‰6P¥GŸÜG¤�ÉúÊþŽ}àõø·vrúœœ²î„Ýó{;}ŽA"-šJô¾¸’ÂQ@þç*`áiâ<ýéã;:3ZMB—õN>Kú’7ù™Är‘®‰òûü´„\oÁ“ƒÌ>œ^öÚ)°ÕæíãçÄbì˜jnÊòz,¹”yÅ Û4H2&…SV×KVïwh'¬¸Fmõ^£v �M@wÀ¾À—M?ïÐÛã¬ãòZ´iöøúñÿÇ ÿ—º…ô.åTþ±’âQIé¿TR>*)�+I®V@'‡®V=¼@=ì|¨¸Ñ‰¸hê틆!ãìíª„ù8ÊsŠó¥Š<ˆ“ëóæ›z !¡ÏªZ ~R×iÂèüµYãAݬ£F;ž…Â"�Ã?“Ô”•ü«žõ5¦ÊÖ'. vÝ—ùX±;Jxð3ëÇ ‡,Beí:ô»\›‘÷,ê åÉ|Èïì·ë�g7NÀ¥ è¶kø§çjßÙ\¿÷5º”loIšÅ�kú*?u3Ü=_dÊ©~Ú>ìÃb+»EÔ$Ÿ/Ç¡€&O¼Hl±éÙâW.#Ë*)ÍZVîØ.Y°Üa·•m"Ê iUüYŠÌ–A„ùðä°\éð,“§pU¹h×Ja�7ðCYšK±…�Ò¯ÃpŠ®*¨öƒ¼ó Ò?a°g‹Á±ÙÁ•Yý•WTFÙîŒU‹XFë²$ô´�ÒV9Ù*yàhmÅZs‹–vÈ"§U¿©0X•Y¦ª-×lË”½üÝ8Ÿ^µ{+릢±]²Ù®…%0Ïîí~O¤5ªôšeÄôÇÕòÓô`U«(!:¸œ�-Tn–z~·SÍF +VE¬š-š~ÍžÃìu�4i­¯L\™4Ô°ºMó0ßT­Êh3=ôŒª„WëdsdÕu[£ÒþòVqoã|ÏÞâqg'€&™üÀÑ«ÑƒŽ¤ßi�`v>_ZC¿·•·ùSƒÛÖûO9ª:¯moK›õ^e³þüÑ»Õ;lv: �ýiv„Ä8�(BCd:ø£z—OnÙ–N;û æÅùj²µ¿œƒÝ‹ÕCµˆ¬¢ßRñæêF ¬Z²•/ü>GœO®iOºb­5ìÙþtä·ÉìÙÇ Ï +Ò5²º– @È[Mq㳈¬ÚX–S)¶`ÔÉR7ÉÊøF±g©¯`?Ùjùÿ¨¾eµ�œôunß +Ë®ùe¹éÞ]jÅJ÷wïµ`yW—©1m¿XäQl-~«V8ÖóZ%»ì�ä¾�]8¸„U gª)Ýù³yî«Rl¨C/Ñh¶g]׆v\ìÔbd“–àœDGzxµZƒË9Gv/RŽæ5ÕL†ŸŽ#‰Û‹]Pö­¦jõ™½¢Û²ÈymÍ ÚF’‰ÔßìW9Ž$ÉÔûõ�.Æ}¨ø +\½Ap„ +Üÿ´ÃóØ"W\‚Bc€ž²¨ŠÌwsssJfº,Ðô™Íš[O<µÑQlI‰b÷’ÉiÑäTçÜ[Ù0öu�úŸ6TluÃøa6žÓÏIÞ"yn¦%`mQÐî:SQ:š:"‘âa+J�[—/Yâ§îÑõq¨ï[-j›g{0�þóÆ£tgÀÏ% ÏK2@ò†^iÈlVšÓƒC.=‡ÜÅ0/ ôGøú€ŽMñ7žbàW|}ùý/ŸLÛãÄ·»½»º +®¶Lû â÷9óeë’È›¤§xO<Þý ¥Ä»=ú›ÞT ƒ¶´(-êa??hVè-Q¥(®'Š�´ + Ÿ˱¬sû·øx=ã?ξ@Ô�o zz¨û»%ehƒ2K´¹v>Óšb—„ò6ZŒ*¨/Ï”M²F2£Ìz�êètÔ3Ë�6 +Å û»ÎV©4 ÇååG»äKv¡Þ4¾U¾ ªW˜#¾ò˜g‹mL9Ãý(“�V2Äotœ+àë€î9â>•ˆþ&»ÉG‡‡!ý0ykt°®‚ŠªïžáRÞ-p”‘ô¯ÈØ¡öÙ§ªuBW©¶-9štˆ¨£5éFTœ­3PX-Aìg¢Ç–t©ÿL»_y)»áêk,[¶*PÝ%(:¸D<·ªÃ·æ1�9ìSt¿î Ï$X¨l–̨…—ÇÊÙº¬0Ðð.á馬§6-²ïw¡ê#Àþÿ8M\‚¯ÞÞ¥@u†¿�ÆÌA–L‘Á¿š‚¾ey²¤RD–¥(j΀ÌüërNÖÉ+cžŠ0y Ú6”(YVùè­Z˜.ÓÔ®Ù‰¬  O6ÃÆÁ†·»g/ºyö<»i‡¦Ù6L �ÓýXa-ºóÉëºl�Â9X²Aj <ªOŠv¢ÂGíB\ç8ëzÚqE¿û3�ìÛÛ®ÞIL"hŠÚ +¨B~�Ðõý¹£ç¢ÿ\¨—øüuœíP‡ë°®RV?¿ŠvM…4*ÂÖ£úù/žÚ°‡Œƒu#NtjÊ�-7× "pqyNqý!Ȥu£Õu,h $ëøkÏ}4ûMhMIäv Dêöô›»äÇf€Ï,§éü#u�¼@XG¿‘¸¬“Q»Š«A6 ^ïTÜ.•¶v{Î*FÃÈN�%;)B|­uªZ‘‚-2eõæåױްc…©Æç:k9ïpüUµGYU©­¶OËŽå’…Ut­P�•ý(+ +P½É ÛØ.§_1H!cj°”ꎩ¶ºÙ¸1I +…ÇN�…ÁøÑ¨¹vAÌ}:)gÖû¹AVu·§>^³gÁqëTð “Í«á ˇv�Vwh2$uÚvgâ (K¶é.ß�VŸô¥±Š&Zº œbs¡ÞTP}*‚ÀÌ(ü9Y¤¦Xc(A­ìÙ4X:Eˆ·ê7vÐ?fäYÏþV—~â�oïCRì C§ä4�¼YgžŠy÷Ðtlî +>oâî¡b’ ‡žt@r©Aª.õSŒ¯ £êK@€MkŒ"ßÊ1Î$ÚöV/À½²éûI$½Çï9à×qŽcAFv�p‹Š~’?û5_B:ÃËŸ}:í>Ž}»¡Í N��_¿þùß|aƇºÈÜÓÓzÄâ©\.ýpa x9m�½7†…Éà‡¥óN,àiÅŸ^¬ª»ßì…£�n ²7êáÆ Ó£Þܘ¬Ê>íXÉ:@ø1š—qócÙ“ÜaÈÐà$6d0$× +G†…VOG³«<æiœlÈ€ë¾ Y¶¤‡!Ë’ïË�eëŸ Ynž}‘e…ûrdÀmœŽ ˆ>ȦŒÁ^7OF—?OKFªÌÓ’�ŽDX² aX2 q:2€v7dÀiŸ† — °!ªûfÈ€ua2 ÅÆ†,§›Ûê4áÅ x¬àðblU7+¶Ä¸0bSKöaÓ³iذáê· ±DõíÏ»/ÚaÁÜTíÀà_ï ´$©ìÀ<£Úƒ)—Ó_;°Ìp{®{!‘Ò‰„gêçÆsïå–‹þëØ„o Y‚ ,Ìî¬ó +¬#Ï8I‘dÄë1”4·MeÏ[ýyk”[} 6Ö1º°Ë2C¨¨_6ùîJPiؼ=áL�ª ˆÈV[E¶P~ÎnµÈ-näâõxÈ�APq}½-^‰®ZÜö0Sì!!(ú“.€gýù‡“%^ÔL �F€ii˜í÷G`hŸÊ9¬ÐůE™Ú'ð"DÙVd(ÝV^N¢¨ŽÉ†Åê¢ç“agÚ +½o–�ƒˆ¢˜Ç¡°€ôE= + ÚV‰zvùg +;þN ŸŽÂ¢1ïQLÈz¶>‚ +pô”©¿(á˜Û²Ìʶ¨¤äÑÙiØa±³™ûôäâ +ȃK�Nä_·'(É,‹5¨X�}ÌúòTG“¼ÈgF‘Š9}cºQÛ‘Vè2’�®|P—š2šÉ@³“·¡Tɇmðê£NŠY|vÚË&JGå8€ ‘¦‡ì¤%'iò”÷MçDËeš( +ª¶«æÙ‹5�^ø &½w^Ø‘�ö‹,áf›3Á!¼ªT„f ÚùKÀ­AžELåèxËÈ¿£<%{Z†Õ,Š{½.¦8Ö)›Ivñe2ª–#„ëüFC¯~ÿû'S‚F5Ký�ÆÑýU¥#×É“W+þá'¨È¤û´Ä,'Ú09|¢ —ui©Y‚±ý:ô¸±ûå/h;j¹üÅÐ,A)É8FzXj³îñãý&2G,`TÒª¡ûM`‡Ù28#‚âpììч›º ¬{ +jö ßQ¤x#ÛÒèd¡×]jç5®[ð‹÷\À…Æùƒ„ÚZLæ™Ü磦ª DBpü²»¢}¬”Å‘…ò ºÝóâ<ÆÛÂë¶@§1¹²)+H{â�(ÍP¼5s&9+~Yp§ \4¼¯¼>*âżdŒ…Þ¤RÒQ\yq<ÛÁ-ÊÎ_Ù}ßW^çÊq·òú·JIûÇǠħR  eÀÁqûôyû¾&NB¸•aq)pÊ™$øó/�?ýõGzüúãñ—_eØbº·+ÊÇÊíl�l›×}8^õrÝwÐM�{ŒÞV𠌲¬¸v‘´¬®°÷fÒn§e0s¿Å¯GFÞëmëŔГ4úãqo+ÿ³èÒ0I¾Ø±&£Ë1sp‡ WMŠŒ6 r†Àžúʳ¿­0·=ïÏä!ßÞúu»+g»V�Ífü¼/¸þëï~Ñ9R冨t…bb4êð8×L…75N—¼æMÄChm ׳4>ò¹5CqÇwØÅ1*viî)éIÛùLðz¨˜=P·có@О-ihO¸PŽL�ãõ®xíbÑÝø>îæž×s6œ¤d„¹ÁY�7©:Òý‰ µ.ކ9á?þ,M�ª}pTL5²L¥¥hxT +vÀÉ~–ùl»jjE5á89åXÉCåÂùåXï S×�™!le¢1§æ¢¡)oë¹Óˆ¹–&_öky»Âñ6'@˜Å¦(|nÔÉÔÂæüšq °óîôqäÀ×Y�•×µÒÀç>c%1· I)ˆMò០ßx*\ø¶êâSánkVl–Ž ²”{¬ÀŒÉ�,ž©(oy|>{mÆŸ¿D®6’£ ãyü=ΰ²²±˜7à’Šp'õ +ux cÂÐlÝ|TŒ/À¹ ¶™•Þ¶–pRÁ¼A&àvÊ;È7ã¶™ÑCÖ\º×±ÜÙ£k¥.s)¥,œÄ±·/JW&‡šVOKF0¿Àì#nC0ý›ýrG’$¹�¨Þ§¨ d1þ•f<®ÞFãE +Üû›ñ9‘™53»—TZê*ã8Ži�ÅPÂ5``[5Ãaw-ÄŽÑí–¢­à�­›å `\|‡P³Ab*™É!õihm}šGƒ™ì’Ü®©›×ï%4[~Ýc1Ô�äÒG3;ŽéS¥EßaÍ9 +)l w'ŠžÑ8-×P»•d¥$ù«ÌO3³ Brµ|ë¨Çªd žÇLöy±a‘zŸÝMx_ŸŸâùïMÂÐÍL +l¦,ô+¼ØxÌiÕÐ0„ +�sÅÁ¢5™°kûPÇQÜSÕ=æErnù"—¶p~ÑÏXÑW¦ùCÏšB�öáÏh ð PËvy�ö"˜cø”¹ˆçè°J9ÍÏóÂ'QÝÞ°‚7¬U7Ê •uߦ™Nb7 e”W*OÑ£Þ{™ßóä¹m/¼^¶ãëo“üQ¬Bñ5!º�Dz„ª ájÅr‡§¦EîŠ>¶½„dAEâA…‹�ƒUžbù_é‹<`<ýÅDÝáAºº*yã;Ö|Á‹ T�üžÚбºìÆï°>wÃ7޽‚ŽÂÍmõ©>Ÿ#z¹ B¬~Tê‹ñ(©Y�ee–l•컾瑋Õ+“Þ(°QßAÒ BnNÃpÓW:ñH}Ȉ´h))i�€jOZê@C䲉 »Xd±a‡ôF}”FÖûÄ®ú¥eÓ¸âãîØªF¥ÔóâQÝ3Œ(�¼VÒb„aØó.œø +EÀ›�Ua¥O«ÕÓ¶¢.%t&ës9Û»+wPù gåL± +Pe‰£JoÐÏΘZp9f3%ã²Ê;ó^ÙM¸ÁN:{ +”o×Þê¾�³°³²Qt¹Õ·Õ±‡SÈÝcZU+;éj1q™V"²Õ–Ëê +Nem¡Dž.ìQ—[$A2i‡÷ì!æE%UÕ)þ¨ÝþAC‡Wvv³»f¸’ /wD¿M ¾By×å†_!©«b·Ò6{ Cz]÷KEá]ï—LÚTFÄBìNÑêM pŒõO¤},‡ÓLu;Žé#yßf4un½m °S‹m°=�à*ªkCñhPð׉Ûþû)ïow ¥ž�_?ÿõS9m¾79¬fcTÊ‚›ºéÒ©ÎV—N¥LVª–N¥N”á-S1­;n™ºì›L]ž›L… ¢Íc§LM¥qÉTQ¯ ¿%Sé ÅÛ–©jñR©<¶æv©Té6'ˆ­RÑm1´S¥F aýR©ôêä±e*Ëõ–©¨²¾DŒÉTìÚê]¦Æ=f,�*ÝÖÇ¥S±Ó’ÎK¨µÛ%T¥ÛB¾„*"`Îyªxêê©&L±“�µ„ª„\nw¡Š§Õz Õ¸&½%T1sHw¡º¡¼…*'ÛÝ–N…¢Ó¸ËT¬VµUê´’ßÕÑt“¨ ·´K¡Ò\.� +'9-}ªdÅKž¢3g¾Ôiçeý¦Na¶RNqªÎOmÊkoÂtI²¥Kyhž§,U6ãM•BÁbÁ%JiñºðÒ¤”Ž«Ž%I³¿z)RòÞò%H‰ÿ]Žš®ÛjÔç Õ§õ­’ �µJüÀ„PB}+d⋵%pF|ót¯¦å±VŸ½v‡ÍM´Àä)É¢L�`·N¾K˜p÷Ód·x+ðµË®fxÀ¨c®IQr!ûàX9³tKŽ ¾$8’®ûë’ꑚ*aCÍ8ÑðŒC}+­’�J5°$Ww}(™Ë)�4@T×OIWÏeDM�õ‰Â>sQ—pÄì霩0ý¡Ésf‚ا$ÁWz9¹ˆƒbæÙõtâ/Å�]KšI�'¢A¸Ä6—èZ€?Í'š@¥@-i�•*b¼-ïªmDYT±¨fN!Ø…´¨êÀLÍ•7”@ƒ"ô"6…GØBª‰Ò °–Èkx-Šb�R²âK dH⢩ÐL`-Û‡§ici†yD¤ûôÆ™„¸›H´š¬XÓ°{8e…Û@é¼§x8¶™Mï@Æ ]ÅG)ÌÜÍ5xdº´=”8�·= èñ”(£‚ædºØ>Tš8¥Ú *…Ê*Ÿ`<ïÒÒ>\¦‰ LU¸Ž±O/É;M“ûv_&‰Îâb¿pGVÆx#!=Úhü ,ýDA×dŒi’'!)ÓIMØ£ ª…ЊÄ9Ñ;ž…üüõq[Çv?gÁ¦|ƒذ·v“3 +ZÓ•Ut½+0YÃ�kz +gL}§¬ßXE ûªßá]Õ +åÞbÉoÄ+Q â$z‘°Ó¤ziΦn‡¥#†Í*â7ôØ¢¦d—LAQš¦Ò�2�g³7ìV6Óf×XõTRÙúVpzц‡÷€d�ùöýs– y"ƒZßûŽÝ‘T“µÖX¬÷ù�¨ùuØ «ÞÄUq.Y•LLš-åêÕB`ï5Oí.r>Ƥc»9ª ”eªRñ»RÄ«>bQ¸�D-7<‚á|z°“é-¨JëfÛûÙí×ëæ«AÏËÕEÈpL)8šÍ9)¨ºÄhÌ|r‰SœíüîÑ.MEÈÃ'�ŸìáhîâØ�7vİû.ß¹^—k?óE¦ÿö @Éâ?>ª4LéÙü׳æ˜Û¿Çí ‚HÄ&ÍE$=¡Ä“j `üù—ÇŸþú-<~ýöøË/�t +¾Ä÷ /×ý†üÛR»Þ5ƒÛçÃç;Þ‚õæ`‹Õ;›æ2ð¦¸RÆFsõ4eë×ëæºò{¹U;¶ljhÎÉË¡�¿sýocŽªÖ—uÕcN¸Dr]OIá¥Saô–‹¢7C{Œß]JÔ}ÙÔÝîWíóÝ៷gº%ê§!™U›ÇÍ^E4BÑè3Àó·ùFî݉«(Ó¡õÈ&õ¯Ë#«BdϽ6{äw®—»&-æ¶Œ�ïÛ¾ý‡=ñ‹°~V<ÿÕÑÓá/�ø Ä_ þñÿÄLt‘,6›rõï¿ÿî'�_©/�#jóYKŸ×¼w$fW�TÌwµúºþ4¥�s‘š:4–2ôåçÔ)S¿s?þãv �c©®acê2_˜MÉ·‰8¢½ò°1²3Çåе} ÈÝGÉqôà*8»Ý[Cô©w±sOº¯d)ß&î­©´+ûBƒ!ãâÐʘèó¥_—�´&¾ŠVëGšÏ<�–ew[ŸùÙ(Âm‡Ùmiï‘»WM°¤¿ê¾ÓêVç$r‰©}[2û²qK~è¯ù¬¢ÄµW(¢n;‰Ï‘ëÁgyN„ꑵ€”çgÑ[2ÛA)E»GÖ>‚©aÿŒvkWÀqP? xÏβ£Äg4³%²0][:QI(\EwëÏ<8ºTc rÓ¦Yµæ‡*°ž–‡³ÅÓA–ƒžÍ^£yDjÚI%f¸IiÙn2g²6e=Ïç, +P¤<õîna`O×\bO× +5¢VRSñO†›ÎÕŠ­ µSYce�–½dgÌœo61~Æö�µ4ç %iWÛ£×)+~¨!P5Ú ²¡y¤n/-l2 Ö‡eÂðД�“q°’íîäO¼ ø—âÙ$fÜ*ìTU#‹›D0—½„ i`׆ÖjÒ>�»-SˆMº}Ò=µ#oÈ £<õ¨ÊÑþlÐ*û©ŒR¦ÊjÜ…_•d> NïŠëiënÅ~¶GƒБTü$0á”|çÑäà„¦Ÿ»r!ÂVSú×厛Ùná\«Ð4àó�Œ ‡^Å…é&öþ×WÝüõÀ£–É~VU³¹} ý_BÎÿê �YêûVÚ§j¤wÆ}1üÔûÏ7̃:P¶ùÐKÿÂ̶ع×wd©f4|—uì´žUv!=7u�øQë:Øk^ÃótŽiç¬ë\ÅÍáo É;Ú’pÙK1o�§JK$ è^õ¾€Uí ;}bÊäI£i%X T�ú0EÌ‘=QÔU zš¦šcÛ£~ø¹>Ã¥.ë4£ÖðŽæàq[É軹ÉWwQ¶¾fø¹Õ�?ñ–ZDg5PD&çû4šË{®ùëM¾@RôX52nàgË{uÅ´1zµƒMC&³T&ªEJæ2¡vͽ¬jT˜àü¡.WßlUC\Q-‡ŽÁ~J*7¨¡·ƒj*OER,`Õé4‰îQB`â£k:(ð0‚Ÿ4ôeÚÃ/ªšÏì tË‚ vÖGí»‘%Ì BP[ŒH!P‡ŸÖ×.tEepB¹P\Óø6 ©’Q�ƒÓyšÿÀÿ¡Î>/(¥E!̾iÃ[ËVcŸíC¾ 5‰*qAÃx\# ùÃÍm\ÔøY%Ã}œ@ÅÕ| QÏrrò)ìM ¬ñ§m%;wu’r:ŸõÂûoX¾ÔÆGO¬GÒø0qËåéB¾*ƒÊUõ ¨O¯·„â°1G�5mùž=f[ÿ¸9Çðø:¿EVy'Y3OÖ,÷+¥9^@Z° +ÆbÈ¿.$'‡]Âo½TBøñM4„›÷Ä=ñåÍy> I®¨òÐü©/þ¾‘§ýùFsUqh —×0Óü€ÝÎx¹PªÆŠþ�”SÞ¬èßn j긦OóÕùwhKÍÈñ§l·Èõ ïhåPšLo'`d{÷J0®V[n#k?álõ^áÇêéåè¦æÕXôÕ(ë_J-íTÚd5Sð%$f®3&ßAd‹ Ô¥TN )˜qÍX¬R‹�êŽìšHqN{¥Yú5tKFC ¤~”Þ~ÎHvZT†%$M%Bò�ù¡ÐQŠ_Mæç5u}•KŸo)»Ûøµ‡¸‘^fŒ­}X/4È�§ïÿûëû6ú ßLK«Ã¡¡¾o£ õ+ÄAÚf?-uêäÔ+!«LÊM@)DØÚzYù_ —!Ï›�j1B#Òy,^¼§åüTD…%ÆÉ©7kyù (£ÇxQ/ZD—»Ü¤ ªµ$Ä.pm&:õœ�½ 8»^Þ+÷Ãj6Íf!“G~ÝÇcã>†ãúñËI"¨7‚Á%ÝÞÈIËsÓò3e¿3ú#ßTâ +ÅŸE¢~-ë¬zÁ‡‘Sú÷«-ÆÔûå9 žY?Úbt’Å–´-éPöaZ<Ç,éXÝ7ýÞ2\uòOy= È¼—ù)sCº!ÞÙS¶©Öè± ²Í±ˆ=Ëš{wb=Ü�h«óµ¯üýöq¹¸„qly›-ÀÛD¿€ +¹Âº…523PÅRÝD�–´ˆäà~Ù3hXG×¢ú1ÁöEeøHbÝõ·ÒÁ…àƒ=t \m’{Üç[âh×+Ð#øè8W~HðNc»fúà·±Û¸N°wÇZ›Ð)\ ™6Ý�‚¶Uc…ÕY¡“]‹õð‡Ð¡X&‰.€ÿ¡üé®lYS³!‰ÝæËŠt +`ï/TåBغkã,tˆ^Õ=#O,“þ7×ð1ËÚ‹Ï}9 L3Ss"tN@:5HÃè¨ü7÷ Ô´´-³|þK&B~=½³•ãoÜß°»ì÷× "ué>!"ê—øªAwÇì BVÈ:¤øJR]ºä¸­¯„ƒLÉ/½‘Ô$ÃB»Œ¨&»�?04 SÔÙ<–7Æ×…®i÷=ùB· i™3ä±P‰µÕú'¥SˆÔ«ª4öÇL'Y?,RÊ,ú—‘ì/õòÄ–6¾ ÿ¹„Þ˜¬G+å…ZØú�®b»xøój!Š›ðŒ1«_CEëØ*™·¦Ë·Á̰þ±þþþßë«oÂå ”Õ¥­f•oT¨l¸>^BØ@L,£ :çñ:2-Æu±£_ÔøŒ}W“Ä Àµ}!F±+c²9Öv{Y¡”¼eÚ–Oê h�„#Ý�´?'R¶I™S­¨GŽå¢+ò@XÝNˆ ´‡lp‰M`#pRs`¶ˆÕrF¾¦• W½¥§f™T%-æåž?+Ö°Æ<{¦jb¹aÈ«G­¢æf†¥!Ù§¦Àö/ÆŸü¸ª‹Õs{…òlì°Êm¿â€fö%�&µNN¬ Ú°Ø*�+„„Û?ºé\Yª ße;­g•@HÏM]WÑ„C×Á^óž§#pL;g]ç*nkHÞÑþ�fJÀe/Åd¼Až*,E�4 {ÕûH„cvúĔɓ F#ÒJ°€ú’q¦ˆ9²'ŠºªAOÓTsbl;‹‹º¥±° —º¬ÓŒZÃ;…•†¶’Ñws“¯î¢l}Ìðs«;6â3,µˆÎj¨ ˆLÎ÷i4—÷\Ã× )z¬7ð³å½ºbÚÖZšõ½®(KÕt¼ËRùe‰V[.�àü¡.WßlUC\Q-‡ŽÁ~¬X¸¬ÛA5T’b+C\è4‰îÕL|tMž”Si$>èË´‡_T5ŸÙ/ä¦#,�ú¨}�&šw)µÅÈQÀ�uøi}­á*±äõê„r' ¸¦ñmRw�ƒÓyšÿÀÏî6û¼ ”…0û¦ o-[M{ajòm¨IT¹ˆ ÎÀãòÉnnã¢ÆÏê(îã:(®æàˆz–““OaoZ`�ç8m+Ù¹«“Ø.ŸõÂûoX¾ÔƧ!¸áõýM¿ÊÓ…|UYÂ<êÅ›’š°1;ر¦M£v³àk_SêëqrNÙhs�ß"«¼“¬�'k–ûƒ•Ò¯? -”–<“«ÐëBrrT¨xë¥Â�o¢!ܼ¿ˆ îÙˆ/oŽÈóÑHHúsEu�‡æO}ñ÷�<íÏ7š«ºˆ£³{¬—dÈÓ_Û裘'‚IkŒJ3,£^g?¦•m¶ÓR NNݱ²É¤:Ñ”B€­­—•ÿÅlùr¼§3!0¢/áœÇÚÅkZŽOESXaqœZ³–—ê€2zLå¢#t¹ËMº ZJÂëÂÖfžSPÏØ Þ€²ë¥½rP-,fÓlÖ1yä×}<6îcø1®¿œ$‚z#ø\²í�œ´<7-?Sö;£?òM%®NüY$êײ~Aª{è�þëïúïÿèûѽ endstream endobj 228 0 obj <> endobj 229 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1289.064 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1288.0637207 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 230 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1444.599 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1443.5993652 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 231 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1478.447 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1477.4465332 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 240 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1060.808 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1059.8078613 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 241 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1093.605 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1092.6047363 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 242 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1249.14 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1248.1403809 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 303 0 obj <> endobj 302 0 obj <> endobj 301 0 obj <> endobj 300 0 obj <> endobj 299 0 obj <> endobj 298 0 obj <> endobj 297 0 obj [/ICCBased 87 0 R] endobj 211 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwnΫZ€N‚ è $´ªŒúÿ€ÌÌ‘ÕSBYa±�¾š¿ýåûñíÏßËñ‡?~?ß¾ÿ­¯Ÿ‡éïøùúÏãÛŸpë_?ålÑŽVüœ=Žåý½3ì\cÿýÇãŸx¥„üü]‘+”sÌÃÎÚÚþ «V«ùÕo�r˜E?l”u-ú{ÁÍ¿â}Üõýû{oF¥7XÉ:\/½¿½�Ýõ,�ëžg?}`çÓiä9¬aÇs<šHÈ<ê逿ף�±ê^�qväiÃyFÅûç´ÁçÂ{ëì³s¯KLÑŠÊøl„¬,.¹±Ÿ½®c�£pSVDòLÃ[0mÁMć·&Ò§5Ôù`y^¿0}](}«§·CÅðz( ô Á[Q}Gƣ›Ê@ØÎჾ ¸ ý',ôuô³Œà‡õ•LÀ§£Üh}ñƵú¤­Ñ”a,Øéd§}«e4Ææ ^�¸#5˜Ò‰Eq1”õD•ëR¹±õÓJ£ŽB¨Öb ¹nì_C;oŒïG;ôÝÌüL- +³�þÞ™‘ÄÁhªÖaLGÝ`«ºnÄÊ™LæÆè׿B Ì“ë,®ÃæF˜è²ª§ ˆ¡ÛRŰÜ�È Aô¯ösòÕŠÍ�+/†‚ðã×,e|j„èÈ8c N€ë—>@& +þC×(�Ar0›Bk²¹j§qzW»¢Þ‡pw–‘)(8‹«ãFj"bGa[qœBúzc¡t÷º¡täî�E†Nõ%XCAAŒJîo VCŒ†LWÔ/˜>êuÝh(An¶aEUÁÁ°£c°6ãnª¶²Â¯2Gv‡Êda  QÉzÛ-¡×Û+Eûãñï/™`ns|NH9'R‰øô%šï¼ƒWì 5úv5ºòñ2^4un�×lzÚš¨¢Š–>`OµÅé“.u± 6�']b«ê×µÞàÕóº]ŠJŽïc¥`"öRØdªÏ¹ vïŠÔÛ°çe™Ý‘êdzÏ V͸Ù³èUeæä_ìæš3xŒÝ“•�ôª°Ê� Z7||ÂÿðVgA!FäB]T‹ÿîÂ1�Ìʓ̀–¿™>1HAû<¯rÿr#¿À åZŸo¤ñ}ƒ\Ôzn?D�æikŸ¦ ”•�}rt»ˆU;û'”¹1˜tMÍSÁ@bºôƒF{›TQމigF×’ �¦šMù•ý‰^·ƒ‰ßçùZèQ˜?„¥¦£Ew©ƒ9Ç{pò¢#8T`@^£>ÜU.DèH‰žf@¯Î¥éÅ"´œ^ÌzºI.8Gଊ®itÈÑ~Cú‰"ÅÐ2U™i…:ɧ¥:CœTïÔ,õªÎž}ž�õ+j/²¿–µëÑJÉËüx쪦 š‘&Òªì ìWÄx$ñ ‘#™Kx‚o›–(–9ll �R£rdš7>e½�UT;"dè†LO ¿-¿í¯¿X/Nai"ò¸ËôU-ìY(øDcÓ Y}^!I(9°Äû9š‘T‹¯)¯àeW¨ÉhÜ nŽ•34ø³ÈÚ&%oç§H}cP2£ ®ç¤Æ†UÔ>¦(Æ}fÇФ#9¾�M¹À„ºÇ-az�š)âõŽåááê�’¥LÇÌ¥P©c Ø%ÃÙ'¾.ü!¬—+—± †ê¿w¿‡PwT[{§šÝS;„Gª½„`„2bþäùƨ\’ûÞþ—þ½N AÒöÔÄóW¡ˆV +ßB±Ic¬(l"If ¦P²þ§ðÌ“–Ï=øÔrQ…¼îæj�E<"G$Ï�×ýF¬}—ŽNÜ·ºîšZCg+Y'ƧœÍP�&!ge_RâF‰‘¯ +"xÆSœÊªéß�Êbm–<ºP1yÏ”À°‹%œ„ªc—©9È9Å®Ó+§'§1E¬éPuÝÀÙ3¶*ž-îÏ¡ƒŽ|v‘ç´|ݤan6íÉ–j{j¿®a\ßoªsxç3ÅQêVSq™Ðˆ}R³Ô³¥ŒË›g6�JOm°ê…nïrYmÒ$29(5ò("�š‡!iGq½"ÅÉIÒH¶[Ôë}½Zö"QÖRèI’œ¼F»ÆÊ ÂwHtŒ-P¥õÌ +d”šd,V_¼æ.1ÔUh*gŠ~¦4íjx�¬Õ‘‡’1ý©¦$¶Á�—ö „ôÀ† ©‚¾ÈÒ#÷ÌT�"¢�”u JЊyGR`7ØRü +.ßE?‘íÃ5Ä©^RÇH �£é”c)ÿ–&Ù½ 5T�–Vd+ã“Ê©‘gÚ aªrýoÐBN“Ù¯Kuûˆ VMFJÒNP—žPüÒmÎ+L¾ÉDðÜAù'&ÙÀÅß q*,�*B&2 #Õ¡š)§¶Ð‘”oc×b€”*<�eð09ãÿýo|£>cï÷Ñì÷Û¶~ܬMh.1×0£Éüo;Ñš’ÂòÏÙ_(�³aàà�ï #Öñk²ŒÍAÙi€9tkòÚžégÛ|¾ž ŸÏŒ;•úpÚ¥Ô›[ª¿Ç¬äƒÒ|ÔHtUk.‰œ§5›#H·öåå{ Ö&” ¬Z÷…¸ÑxkQ�)¾ÈVº5\Ä#áåÚ,±äv@¨1�ÚÁ¡ö5=tÒ�šª2ÎüV VL–îýézDî%½ÍÓÙÆ¥Ø†Il€æÜôÏc¿Î‚uÂzï»íž�UåP 6ÿ+êý^e73Û;º}¦X +·×�iöœ/{|°šÑŸÑAjŠÉ›ÊG8=›>‘ýº›4ç¦Ýò2j>×ìÉã =<Í@{X øZ„žn—/o1QÿmÙ*ƒlf«ÕÂ�v;�™�“:=bERÓ˜çÚâq&#(Ð+_¢–¬×~®‡!Jö­±k:}üÔ¶ƒ „c§—D!Õ‘‰l¹s‹MÕc­ú8¾$®m¯MË ™‡Ì[VÁ�‡­œ¦sœÆÉа£ösýÔ�(€¥’C䨺v­g—B®AìÐg9Ù½EÔÒÕF¸ÿüÒèrÁåÄ Qž„u²ÔõÇ5aµÅ¦uG¼tjÀ�]@¼ð“%2I2Áõm‚h0<é/®{·yP”×èdʵóƒ“ Û®µ`Q‰8�X4"u rÌtŽ™™ƒ+’b¢ËªáÔ†™^ØÖw±fÎãêÄ6÷âbZ†J·3nÕ·ušn°fsnŸØjPµÊJ¿¶¼¡Ýôæ??"? †)^%:’xj¨WŽîlœŽpŽ£Û¬jCôÀbgêÇï9ûh§ÕOD�|¸-Ãj÷·,㲳׿¶£—wû@³ÿþÜ•ÓEÉy%;é §åä‡÷[ÜÏÏìZ1îlñp9oïdV/ez4Û ÒgñøùaM³œM'³šëÑYS¼QÎ~÷¼ŽT¢7=" „ƒ¹âïi¾ñeù¡0bWìO5]pæ½Æ¸ô¼ì�ª¸3/Ò +Ý@œÓr²ñV鲼ʛcšn_Os@¶Êç.íYŽCäµa~ïþ†)…3ñ[sW+Óן£5R#˦þ¢)¹>…]w¾Î¨úºXž·2‚HÆpAçmÕ)›U¾UìçŸa‰|FZáÒÒo‡ òø¦ÄXÍþ}Ø—\9IQM FéÙÌã�V &“ÐqÐFZµøBF$Á4ÿÄ~Z°_ž¢`»cC°­,ß,‰÷ëO�gòf,öO§ÉŒŠùYcU@·“ +ÁÕB:'¯Q†ã†E Òµ$åÛÀòÊòRç¾àç]F(©�g±5ßׇæ…B5Ôve³¿TØ1à÷ì ,©uYÿŠe¼l³ó¬H{z T;i°Ôz®)è‘òAˆEi\ “jåjE-ÖÊÚ»ƒâ:*®“Ÿàê)Šu&Z™ÒfsEâ5Èt#&ô¼Œ8´*ŽwGø8é¸çlôW%�KÖ_ðÔ…V¾y­Þ´ !C%èÄzx�Zuõ„‘—nA¨’8逨Ä~6[z¹x òÒ!›7«ûq¦“º˜ùjh\sHœh ý­Õz눚ÚS0á‚Åæix\FÄ�…ý½kór‰«g·6… õêYíÆt£"Ç:ÇÙ.`¶¥ÕÍ;°P†À¬—Ý|m'¹ÆAÚUGí¹¶t¼xJ%]}|,Hš«ý‚˜ ©1…Í\œØÖñà“ø´ÚKS«q Uš'ÛfC·…ÕL![”×Pˆ ++±¿±3×øp'ÛÖK¼:ž?1ÿ°÷�޶ûua“f.é„HU³�î;|¥æÔ=ÛlbÝ3¤°¼Ðº.„°;oÙqjú UTVÃj({[¼�&é~ãZo۬ף[‹¾ªQèyâNQÓ¯Ø+û/ØjÛÌH´J8‰Ö÷ñÌ™¨×x°Ö2­×ÉJž-OáN´ÙrªÙ†o/!2'ÍÔŽ\ Þ%x´ÇÉ(Ðíï ÿ³–‹¾7Që†{ò»˜³mç·W&B�Wœµ©c�s­¡��i#%4Ä×9ènZ³h_önÅulä)€w‰qà$ùð�¸®©ªêÑõÁaï[]â‚¥ÐüÛã:Gù2­ �ÍäªYZž7\Hi@qú sƒW²á†ýu�Ú¹V縇/‚¦Îˆ†ôEþ*~,ußBÊdRã¥V–…$²�L¨2ŽŽ™9sfÜK;J~Å3U`Ï=Ä–a­2=tïÓ&}ßìvQ¥qP«>¨Û>ØCs£>©bÓ^BM+yû×Ù™$iÊR�Løìê«’lVÄX„‹²ï©Íwìa”e ì™ž'a�Èô×繘ÙÙÞÇþÔ¾œT]IA¡Jüæüã\wœQ\‰P×Ù¾êæÙæË ÕÕlÛý?ö«$9’Þý +}@$nïñÅÛÿ?ÂÈL°»¤ÿÀ©ÐdIÈÅ𻑰az©fŒ­xg¶9Ê?ÔmœänT%#à.r¡ýÝ%щ±‹bzÃØ Wo`lK_,‚Æ‘7ÈÌ„t +ï…ŠAM©ZM=ü"C)cZ¸1Cc%Ù¾3”…x0�8E(=m“صºÑ×V5K}G:Û•–°>s±ªá ±yì˜À�±êØ “ Êy‹ý¼¦¸—½]’Á²ûsÃ%^VGÔÈó »d"*¤©GZ-ã#š OJ=ýD�‘` ;¾ÙÑÆ(*«ÒÂ_ /•ZEÛ8bPÀ¨Æüv®UøF‚#—�’X1¿3Ï¿A–ZÁÍ!Ô´æ8dgãÖÝu×™@ÆÔn ¤� û……Ô�0¾h[Ï:.Ë× Êºªù†~^”¹?ì ùíòN#‹Ú){ÓÄO#sÈL�[ê1aqrŽ‚[©Á2ÑsFÇd“r’3IðL9Õ¡4 Óµt&‘Þ=˜"ä‰ %–`_ym”žLë�Ük?ÞnHFæêlø/l°Ôh�7ÐJã 4ä·šÚMNE{1©ó�dËõó¦!zA™¤Ç#X¥ë+<’%Ð'ÏÄsfêgjG‡hõ2‚ū٣>Û5Z¡x•ÁIRýà<â<í×iZHÃPÂ7 z[7¸ÉG—éjZî'×êÓ]oÂÏ�“0Ü“$õ¡c¢²ýô �0-–$Q0‹´œ÷3µþ+2ÈIÂkg@…(l³N­XN©ßc�+_pB:Å9CÞ §:€Ð}!GªY¡/´` ¾ú /.z"`&ÛÊ¡Æãt(˸÷»Êœ­&ò`â¹×D‘Pvâ ¼C× Œ¹ŠxЉb©½LéXÄ +޵ aõ³ +üÙa#A�cÈ�ë”h7âÿˆªð¸3�¡Mƒr‡ÕFp_ãºQ˜�>(ƒ�€éØh3bgA}V^:r@˜ë�ûL©Û¡~�ÖtV¤îz¼Î4äò*3 ,\wËüæ³zp£øÙ‹!ùBß§*Û%èÀú Ù­ŽaùñÌ…Ô|ìCkɦ_Èæ–Âé‘εÔð¤Yu³ þD53î¢39Té¨GaÀÄÅeo¡)æÐB:ß �OÜÿÖ³ôr')©‘zy9‰iÓ»�ü‚Â]Ü9¸†z$«¶ƒ¬‚JPÇtñ� BÆD–lëºÏ}&¸rš¢â뇠åˆ;"°Úò¿*Ýœ\'P™Ð"Æß�—ð@³ÔV âjYÙO¤a.ÎÃE4é„ê·/Ýøz~žô6ü/6 ˆ/YÄ´¯þNDgåM£^:UŸQ~„KNòÀâí©5KÏóÄ£<¥:W°HÏ¡ B5ú9Bù…b<_“…ÞÙ[…êûäŠ�м;Ÿ§ˆl¢¬ÍÐáÄ:Qšõ�Ëu@ôññ¢AÛœÕDð¹Ìå:`Ûa�tŽí¹j# î +‚Ot<ˆ²bn¶žsš-ú(OTàqîͰãïó¸¸�î¢ÄÍ-Vhï´c3ãÞHÁÕ%§F¾½Ô”Û¬Œè”å£Rü8:µM'x@£;ûÁù–ûp +q>“EAl�þ÷É«bO$GQk �uîóE½yÐ~8È9.™µ£ g¦Š˜—§�"€ ¢N Ít2í‰]™×§¬TÍnþ2B€š¶YcN¬!²v�e¦&¹ kÁš‹#ø�=ÜŠO! â9œF�³¿"õ3¿á$ÅW'�À&¢mž¥Ð/˜‚i;úLÐ"`:£ä«9¿ŠëmôsÈF_e¿¢ëH2H/fSoÈpQ;‚(ß$¬MýÐJ� ¡0KæC7_ô¡Þ–hcâYÏ“”È~ÑZÒÒÚÂÑA™ª JOL 5J\ wØY‚´£2){© ß*å«@]>Îk° ùÍb¼ÚHµçž¦-KèŠû&¡2¯koÝ÷*ZÅÉÒ6+5}ؾ§äÛ’££:¤%Œ¸�œ@)GÂhqÑÌ,I‚äUyÐîÚÌæ¦¨Læ­-¶¶¨òx¨™›ù2è÷J‰zy„‹/O¬ñ6îg5ËÇ?¿ÿý…m’Ä,!%® xÑM.› 9гžSìzb öýíni4 Ü;2CÚí~¡bÊõz¾Cõê·o¾?]‹×í¾'xÅ!;ÎñÓÁÖFoòèA =…ÆêÁ÷)¡ó'kïýd¤©ÉÙeÐ¥NXúx0¾§g}õñ ¥¯Ðä˜jå £ÐÚñsR*qÏ8ï{?çK³¼ãÔÏã9?p>ãB½æÏDÞg<~Yçž`Š uR¿Òú•“\Ò*>–ýñ¼f¹c½qÍÛ! +1D–��³Ûat2èûچͮïùLóÔXC )OûáEtÐ+›0ˆµ¼~¡ÓŽbΡ1læȯθAÜo"×Èéà>¢d ¾4J¦ag®+ö[ÿöˆ€/Qû,Æ_ò|�UbÚÓÈ–à@}vS¤•Ó¤š�Aéü(òFÝâÆåôJ½t•Tü)¥W€%-´'·5ÊNdmåÙð €À�ƒó«ÈT¬¨‡.ëáFKæ‚«ä56ˆ='¥;„öaq°›�E9 yÑyò1Ïëùh’ÐhC¸L¼¤åfÂø39¥ñÙ¿ôj}³{kP6Í _�« [G=ÎRU7JyÃÁçƒç`Á¸œÊm…�âŠwfÿC%°Ë—Òe”¼ ŽMz4lÎêŽRÊ*|*9jGµÄ³]~ÿ†óÖò$™Dƒø´/0¿Àƒ…S�Ún÷à§WEu\RõÈ„änR—ìVsò6ûQú|Ó¥ÊKš8b6r™WšÞ€)Åx1Ý`='}×4D€<¦?S¹rM}n#˜§–ùëfÁbyŸ傽å¦+±;#UB$m<šŽ +õ7Zg¸’¨ï,)j3þ§{ˆ +Œï¦,ÒÍo“w‰V݉>“”�M'm´ Hùàú›þÉLéx”6ÎÉ·”9øžÍK0¦??.L3œ¹ÊÁ˜‘Ù¡“1¢øâ5‚Y³Ö²2Õü€��aœuáfjQ÷¼Ï¡æK­~?˜ +­‹fPÿhí"{)víÏØýCy�>åäŒ|Ë“�¢'h?duÕ¸MÿÈçã(P^�|¯ŒKn"ÿ¸Pž$+nª\y�W|k“N‹™À‰ûÈú£MFH ùÝ.+j2[aÅ·4?¨^ß’ŒîñV¿dÏðiÉsMéÙ<—ÜÀ¦8:d4áÒ�oñà"³\eÐ5vT¿§¤9ó¸Ô¿e¥ƒö-§7®kU@�´n„âfÛ[£�ìå0�ó– ÜÔÔh[bltmWíc÷$�žŽÇÄm;Ü08 �ƒôØ¿ìWÉndǼó+ú8ª}¹^.¾É€u' Í�’ëÿÇ’ÕýHŽ ÖÁŒ†•õªkÉ%2B-ÆÙ2ÄôÂhuka˜ˆ©º)êRrúP¡š+*nÓ]È% Ÿ™ñ‰œ˜�ÖÄw,3I"ãhÃ4X«šwHL²òH(þp +ŠØ3¥Èø¼°ù>Ó�ˆð쪸m®XM7«ïŠfÒìŸv7ØŠƒdجòyóæ³½Q͉¡ðM‰ ×oW™eÕåÜS•Xp°£&3…¢6§Gf±y v�Èçf’þO}ç[�Aê.O tõn='1ÁŠxÑT8좌¸6rOœÑÕJl”Ã=ãa±˜GõÙ?Y7&y­ùÇÊÙûê"ª1 [”'\Z‚nµˆ 1b°Q¹ÛˆÌº®GPÆÕnîœ÷õиÚ�t]?U»¹ÜÜZíjænïcØÔ+à ݧõ­QÇʇ–%*˜7�•Ià¡Þ×ùfaä¨N-û€l«XµÃå múŠlµ²±mñ*ËDOWF9QUdV�~¶`dNʇt‰˜|µ–Ê2 Z5ôKÔg[ælÍ V¡¯—ñ>DŠfëÇìf�¯±¸Å�J0 ïžâÓϤ<™Vš©áËi(SB¨0ѫĬ§ó£wñ–Øq Ö[SKÚ³Çi>M¥l% §ºõê>ªøŠª +Ù’éÙ•Œ`õi–M &‡¶'îÛ�*2Ó,ˆnþþ,vìGÙ<êÂÌ’Úº½Â«èØfXx°Há$ð@×ÂÕ ‡Ý—x†ãRC ³@<àª9‚�a_oÓ‹®¸Lqó<·EÔW¢|ô­FžE$�q"}7³VÔn¶n‚Ÿ}ý1ãô yIM‰'&kü~ª §È3vr6'¤ðq›"Î&Ï â%¹ºùµšåØ=z½Çr|;V–Scœ*Ó²�;«‰²…Îväñ�˜œÅ�ª:„DÁ²Á”F-.³ÊÜaÈ› Ò•µS�ñIE[$t=Z/œ^ÈìÙ7”É�Æ£ªa³)ÍCC):ƒòâ�ñ§;ñ"F ©!�€Å´q¾²*¥ØZpÄI¶k&~è4‹Bî�¬`Áå7ˆ4  ,gy. ÒT¦ïˆi®Ññ˜™fì’~(ÝéD²Gq³å•J6D“"§ÆÅà˜ÔH¨×V½g!ñhgÜYáZFkÀû¦ßôÛÄ¡JjÒ»)2¡ƒ{!}¡Ju³ä{^÷Þ_¬]¨%¬E¤õ“ÀHÊ<¯ÍìÔÁ,é ØS˜Œk`¼ÙZýWQhai¸8‹´-}¨Éh5EtÚ´ðã½Çe�¸oŽ¢ÿKºÇ¬´ÆaRÓ^1ú!­& Có›§´v©—ÄDJ)";aT½šzo`ó(ë<àOÆTù;9°éŠírgU?ð(õlD9 šgUùÑ—¨“¾µDŽžULv ï/ÅÇ}4©Xnð²PªÉ t  ûµ¨ììñ"îKÿ3—&¾“Eé‹´f~€ø»ZÙHº„,b÷n9_»7r­ÝÙ‡|Y=|©~Ãì~YÿÞ^L}ÑŸ6>˜!»Ò¼'5Á×-O•õœoÊz0íSˆ4ÊŸÝTHµô˜”ÃÛž.$öG”IV¬©*­üQ�~®£ÆX YE’TeÙ"w!ÅLŠ,HL¹Z©-‘¸ßôÌU,Ìz=%nY4E1C\ð[µÇ󯏭v�Ê Ö7ÐÞ¬”æ¶Ö'kˆ%ªuÔKô‚ý ¾Ý©ÄövŒ—£øÖÅÜÉ|÷�¼3Ã!§½w¹BÈIÂü$ÄétvW©l É4¼öAû«¾)ÚR¶l"IF)ÑÐw“]Õ™½P¯o¬ÂÖŒÀÙ(²ÌÃÇ�%av?†ËônŠãi—Q6d<`.ÃMßÂI.b϶•³È¹Ÿ·zs½2Ž[´› �Ž+w‚àîÝË>K%É^<‰ˆeœñ<{•­®U­p@Pz¨C-2«�z³xN¨—.ä5ÙPg"‚86IÕS=²,3ý§ÒVœr$µÉ»%™bô�bÌp•`í�í;¿Á 2e†Ê)Âû«¨ÍD…ãÛ;#}ó¨�(£Ø>D5¬Ky„ÆÍÿ•ÆÍÿ¹‘›ßªÜüëen~£só¯ºù[Ñíà«Hüß.Ç»D¼Ú̼ü./ö)ÌS¢ƒüf|šëN@Óú<Þ]TeŸÇ» ú‰rw£þ¯çnN ‹qPÿÛ//?_Éu…”€£%�#íÇ#¨@!Y(E2Õ% i`ùð—ì Ж×ãËhbü÷ÂNbgŸOñÓw{>¶ŽÃc"�ß=”~�w™Oã½{½£»3˜Ã'~d¾ñß»‡á-ègxð'~Jêi&aÕ3€¯·±@�Á'lƒŒýãoO½ááxÕ�Oc�øï”ró6Ï× ïT +TÍÜ 3µý·üî‡ÛwßM·_¾ÞþðÃ휋2ˬœŒSÑÖWd dÖ7N-%ç}=Õ±ONà=%QÊ–]v~›ß /�Åd‘Y ßõÝŸ¾Ï·Áø/þî�?¥Ûïÿ~Ê©TI(3ðù‚8gœ‹g¶ûTN ¾¥/ —é}L ¹Qp|˜z}LåÉ—ö›©•Z¨B⬠РF½ßçL¼<}˜â>{!¬ã:•)vÀ—ï;å…�L¾ŸuŸˆû`ë÷S¯�©ËCîSçý笇‡â>gâåéÃñóĈ\�‚L±¿Øá$häiÞ@ëÙ2tåoú| }©Py{º!ð¡/¸FvŸ)¼mõ£§ƒâ?&èžJåõaêõ1e¿Ö7S +žyÎrÀðáÜçL¼<}˜Â>`ÛPªýÍ  ¤ñØ©–ñeÕù8ë>÷ÁÖï§^S—‡Ü§ÎûÏYw�ûœ‰—§SïB_´cë+Ô¢µNVùcø|]Ça8« Ì­sûÃ\~˜ëíÓdÿ49>M~òMÿäœþÉ;=n0µÀ�`Ľ�M™œ�ÝPŠ›’vĆØ�mj&ðsý‘òik«þZí¹£]‘«¨¹Þ–mÈ Ô¹÷ˆæB"XŠ‹Úw­ž~ö6|+þ÷ßwýŸE-Ó¦ìB«O{€éñнðÅ»Ìp¾´‘´|‚·=LTäÞ5âM ×3à±ÄU³fÆÝô'ë$qOjaþ·YÛw»™T-Áµ!¯>s¼÷™ëËúgëØ@rA'Y¯y{üæl]0ˆåü×Ð;à_¢­À¿a’u¸Ø¤iðÅ_ÔKZã rXíö#·j-²á¡Û'H2}F«Oá¹ |¯/5G]K٠⟠êXöl»–3æÖ>PnꚈÈè‚Ö„kuè@ÚÈž‡¦kgÖ5÷eýâû½ÏÛlϲ¨^±{§Á+àñKûðx«kØcÏ2š‰¡CxÓ m‡»aL²²^/ré8SOÁîpÏÔ›ÇÛ€“z­;&yÔ¥74ŽÛÚ4æºÞ6ů³õ›+^ØÉž3p‰xªB¾Ëä)ÃáBµ©èka¬ôrúܲƒþÈ-�S¡L:t°vT+D4œEƒEB×�¥×»9VÔRgr™R˜!íò—Ïu³J¿\öxzh-òXIgðS62ÃG®L$CbÑNùÇëe΄{ÜNê v‘£Rdc?®Ôvæ(ãçZ«dç ³›RÞ¨‡¡[ØEyjL÷³Ì¯™Ü\Õ&±ÆTÚŠe°¡x.ŠÔI +¦|ò«!O2Ó™`L¦¡@² ùÖb¤ÖÅVÊò0ÄFÜÓ D^Æ +ñl™Ø× '¥wé6Ø^Eeçä±+.zXfΗD*´kÖ#Ì•ÝèÁô¨¤ A"]g<�="R« ;&ÜõʺwFþú†V‰ÙÕ…VÀ¾þ­f‰Cô±®%¯´!Oí Å5 { BRT�‡ê)µrìZ8‰:pÈu^™4]ßEá¼ÈïÁ„*™ÂK¬þB"ÜB5I7«œ!ì=n6JˆòH0/¼ßø—™íE4Ìðªê¬M)Ës+Õ¼r•íÕ©\ŒM<0ŠU�oóX?‘Eì�Lß¹�°�mð=¾³ïeà®È-@Þb£@”À�N6 +`Š¿,Ö(JÔOUjÓÏ®ÿ8˜ ÀÈ!kývËÀåê( Þ0¹y¯,7‹:^ö{W¢Ào2w•îáÞ/«IÀ Žú*3’�U›¼+.ar:y D°‹1:*y +/É3ö v�É>c–9çš1 %Æ�¡›ÈaŒÛAŽÆï�âÑx3]˜4”+jlEc°œ«rk•©œ�'º’ gxqrïàä�qr¯i[{1—M¬§À(p“AÇû$g¶ùÒïËŠ«pŽU£ÈKõéµÍ5&Lk—ÅlÎÆü©“ɧ“''C°€2&}C‰BW÷“Æô Ø4¢Œ2Bħ\¤=¯sÒ sx|¨"ô�C�=öl8×ßc‡[~Ì? +__U%¸a~)ó ¤0Ú„6ddÔŒ*x.]gè ™’=8^¿;¿=*¬LJ©ßoÓ‡ÕRŽ·Ùr‰ÊQ ÀסPcv½I-Ù±x(”Ⱦ̘')$÷èÖVÌYòî�é‘Ý„~|1… ¿ ß×B™U¦[ö-có§w;×)6Kóqʤ.Xã_?Ä!ÛÑÿHÛ?Òö�´ý#mÿÏ¥í†2xû»¶bì}I‘;U0M“pÑ .æã.@Ô%«ø„áfŽ~©?éœÖ¹8f^z&ï&éñZŒÓ#nz�2ò²¾ÁoÂ;†$ÊŽûS2}�_ÙÑGzÕüb±Ä�ÛëÓjH2=¡—é“L•É[ÜöÍ’xª•xl/‹j}üÌá“lgñ(¾Ä" e©ã¸;»Ž—ùŸ…¹ ë‘¶[‰2¤ZY�sßlæžå +Ýøb_·£šTwYÈã÷Q?½òƒ¢ÿ�ÿ˜ó­—¨Ž ØÌTkôOAhñƒJ)¦v“ªp+ûaŸ)’lS옽ê²È°¢½ªI¢ÌÅŠ‚¨1³ž/ÃÄp¯d¯¢Ê–bœ^ÍΞÂ×^7ð]üçºÈˆ/ô·¾Ò_A󙮪§Œmr11|.U3‘õ&..õ)Ð8EO¤#l ›¾,‰˜²·"I5`CÔB¾Ù¯|ʾEXc—¿{É„vlæ AÁ¯ZK`ò ±ù»è�Õïô7n8ä^Uq9\¸âhŽîJQEÅRsVúÃCßµ~µ°hïî Þ¨ùWwÕ_�Mí|[ìZòP‘Ìb ¯÷¥”(Ä�§‘e'B(•Vö¢Ÿ’í1­vÑs²ù(Ï2ZwZ:¦ã‡«#Òͪ!^±afiZ¶0*{‹Fرšøfʵ¶úÛ¸ˆéè +›ÜD™Èþ„ôc¥¦’eH�Ó«ÂëlEMq)h¥zµv£ØH Êz3Óì_¨©í;5‘Ð*%îÙò�š\Èå�ö½¡q$©Þ©-%Xsô£�ä֣žÚ�Y-Ý:•ëbUçu„;åLµCöÓîÊÏ£{®T ¨¿'ý#d¬6²Ëe¥iL-S* Q„R )8ºäu¥ØVò”úo»rŒÚÇz éL6Tç÷ì)VIýP„¹N!«S;ƒn„¯ëýŒ‡Ö–Ö¥5ÔÍ–J4„T¥wagBYžd¸Õ%Ësl¥• +WúíUiÎÏYåD +þžG5S™Ô#¸8Vº ç¡'Û�¾I#$Ëœã1ª[0~líxÕ:¿g^H–s‡¹Ä&Á�X¿JXØã 9=¶T/Êf(Ôéj SÜ ŸÄøõ6J�h4T]U jZH æˆP(ÄÅKEu  ±5¬èc6ƒõ”I³zÀ7K@„06™å;`ÄÂôÒcØ/Õ˜aȸf¨l¹>UíÔV©PIÛ„bÄv�Kã1yZda@v½dN1þB"9iýQ½� ¼q^õMƒF I”�Néâ¦Y�•)±�ÕÔãà‹*ÌÅm÷+x‰±ë&SëkÜN6ÑšB�F šz6 +ñ +9–k˜wM¼†Ž2öA(Ä7Ë·TG°¸(�PTâê#L‘퉻1?WBôbPç·½$ÎÜÊ)re{ª£Ùö*–ÜÊB£ Ä·G5àr%8UÖTJ§Ðš9lÒ—„qÔÇÕmçÙÛa¼ù7ªCÑØ²ö*« ì—ó9µ—bë„Þfªñ©[³éb¾&ª;ÐIó¼‰ìÏá”4'Â)ŽÜ…±ñÿÄ÷Ägˆúø® ?�¼•N'lô’m]¤cëh¥†‰Ôæ8޼Œ.9¥…eòº¿ß¦W×;;ßïk”Q-E eêQÓaãf<ºNC��ϰÃÃõ4¥×qÝ}KÂÚÖ5ê*ÅvVXÌ›EõEl>’¥šÕ1 +Äâ(‡ÓÀtaÜQÑvB ¯#d�·á~l™Ö¬0Lt2¥�ÈêÐÂÒÒ5‡¼Ô¢‰Û‰Ôq UÝ5óC¨Sö´ì‚éNëlkÚé­Wbø%ÄÜ™ñ_öË-Ën\‡¡SÉ*KO’šS÷ü/PöéTõúþ¤¬[–%؀ߗŋ"`hf¿±üvÔf¬)„²%u¡Ÿ3¿¢¬H!¾2¡qt©7wû,­".‰’`‡)áönc‰(š¨òep›Ÿ!pèÖ8í|)_tðtÖ +—ﱤ÷Ü¢$Y^FÃG—M"À iÞn«F?m�âLg3OLéìhÏõí¡È5ÖºFÉ¥¡AEÂþ¦³sÉÊËMUƒü³D¬ÌJ•âÿ6>rYßLiÖâUšy‡ÃÙïHiø�Ï5'Ëúª$×F¦©óÛJrzõdr›×Ø}o·ÂŠ3»Ù^b¿ó’/ªk0ŸÅ.’˜¹Îÿ}"èúߤ£6˜½÷j>¹éc[oÀ¥ÎзÌñ`ٗϹkéÔ®19[ä6�I/(e«ô�Qƒv]kás'¨òðÁM"šUÆ›­~ÛôÐÞm—K|�­<‹IT‰EÒs†ñ£#X¾&*èèHD™C²ã¹^cÕm<�åe”ØCèDQå Ê6ƒÓ#´î}ƒ#¶!Þ™žŠ(P+ רò�ñFT)§8GÈC–m –ǀ쿇ÝʽÇYæ�¬ ]çlü ÛlHÓ½K]z'a¢OuU��…ljÄÙ»ŽÛtëê +›ƒÕ³œ�ìå£>wÝ+k¶ÆúŸÁên¡—P;·y­@ŽÐ´>z`î @Ò?îwav˜ÛÜÉ}H>l‡CFõŠq¶ï 5¾¡KìÙëÇ´ÞœtÑŒÎÈy¶pâç(€'&Ѫ) +c«@Ãì�‰Š÷jðMÒ�H?�—CIÇ9Ê7¿*=Žy�l•ÚªK8qøª¢ô™`€ÍWGwÕD63­ïºq±÷º~Ûè(Pì½&ák0±:<0ÁÃÇøì-Ûþ¾´ƒÓ]h‡Q ä4 W»Ç@n‹úI¤L^,Ŷ̳ÊoÊT4&)öIQ#§yS”�ù¤(= ¡q>ª°c<¼vg\ +"^6%ZÞ‘•Œ +³ÙE ¿p ÷‘¾dÏ5‰�ç·A]©¾Å€ðOûUM+$à qãа³ª0ç�rHt¾z>V½koŒ×ˆªjì/6¶mìµ–?ÝÇ ½ŽœrX£ãÀ¦Ne0–œ]t !ðùKäøR5³—+2z ‘×h²²ý°L'ò(?Ü_ à SŠ(']b»˜ÄË©Æó�‹»—23vùfs�Û NÁ˜]øÚƒ^è¦VŽnãuö¿™ÀBòÿdþSA&Nq™o( DJ›‰Ö]Â4?Ì ’›L¡´ {Ïù¢´Ÿ^pZm¹¨à‡{6M7Mæe%šÆ“G�¿@½Ï3H•:…Ç5ö®‰N�M<@«^V» .%s!xð¡Ú°?˜w÷OæÝⵎFã>‹ä¸Ã.ÌuÔý8Œ�Þ,n·jE®ÓXÌ ³§þ8­ÖÆ *OXSVuÝYôßy÷["ÂLç¿T¡<)c_Ö¹;Õö<€bÆ*XÛlôñAR[ävt.ÌO ³ëi›ìdêNþ6©jÛñ�«ú¼Lù¨æè÷C< Ñ–ÅÌöŠõ޲E(3cV³M:ÆÖ÷fLaà\GÈ£ÊK3“s1Ç%Ù꣥§ö§Å]6ЍÞÍ×ç.©Ë¡¸ûM‹jìÿոߓÀ¾T=FC é,Œ�òþÜäºæÖ.LÂJÌ�d™›áp5y8Aÿ©£˜6�0ã�{� ¾…T£„Èë,‰Ex·ªRÖ6Üœ›LÒTI|VË7ÿ8 Šü*‰a/ÿÁoØ7ï>År2Í6ì*Û—ÈN’¢„&þí¼¥îÏ8¼sÄå¾~ñˆ%ëZ3Ÿ3½b\¹ÂÔCÑ•r)A×Ûã–,K}ЖRIº}Œ“˜©ú\ªÉ�»ß!öíš%uIˆ:/«•Ëw:Û7êüª¦‡ÆÒùʘ¡sÙmÕ軎�ÖÀiö³ŽÏ¾ëÆEuîúmý<×áºk£t›|¥èé›1³cÇž—¦ dqákHaU^w‰T–>2”Mq6Å� BûíªþžßäÜý<â<ôjï‘Óè;ícÖhÔ²"ç£n´ê¿Õ#O‹•êS§Ÿ0† ­ÄÊ Þ\å&ŸÈ�€Ù² gw�€²,Ç5Rfêiɺ¨‘ƒÆ�Û,béTÎÕ˜0ñ|õ|`.7Ž{c¼î7"ö °3 öb%4C…v¯þíy:Y^‡•1:lêT0È=ØÅ�ΣIÎøõ‚5]µ7Ew§äZ°³Üí¤b¬Öž_`ñy½h³qó. Ç¢Ð[Ht>ìÅîåÝ¸ëø¦üCf±Xõ¼�ޝ¥xv“ØÇ�Q7Úõʺ8ôGÿ VæùY¡s5ÉoTh }ÎËÔ ­M+ÁÆ�>uÀyh© A“ÉC[4ò{}š³ˆ:ƒHh¦r¡mžá.²ª¢Ñ5GW|êx;:Þç«ãƒÂýè8–òè8œ÷Ñq¨ò£ãˆ©ë +9�RZ��Ùó ¤Ôè¥w„•2žGÆádSySRÊ?è¾J },)ô’BÓm Ϭ&@g£´ öbƒò?x)º¤òb€NëÙçÿدr;–#èÏ)ÞfTûâ~@'�¡ï‚h eèßP,Yýz†¤ C’Eƒœ—ÕÝU•[d~«À™¶‹¼edÚ�õVk�¼–P¹»[’Ǩû€B¤UÁ™¢WFó\¼D�µN3*wuÖ6^“ óOm^œÞ•V)Ñ\Å\ª³ q¯z*¸w +9¯k€êÄLˆhRmÅTï+„¡BGP‡5M˜éÄ€°=ô4fÙ¬R"Ë„^Ä–Þ-Ä6Ûæú�ØßÚ¥>UqqdÕÊz6*çL³Ñvpþ!9×ÖÔtÉIæ°ÈXRläçÉ’¨A¼ÄG¯ˆèp¢lë®æÊªO57vˆSwkóþÅ�Šéª²¬æJsª¥H³Ù´Go…rT‹Ó%»Z•‹E”‡éìRl‹w­R5’mw‹(¢wGÐ?=ŒžxF“ í0þ<�Û$q+½ŽSë��®²Æ•¢íVg£ö:Om$¡†‹¡²­RÒÎ7ÑF•ðTs$ŶØÒ`�4`tn6êºIµ*ÞíMrû¡õ¿#ž4”íIyGµ§GÔ,YyyÄÄKjãreŸ×‘��C$Dٖا.†´šÁêG.M‰žI¿Æ:ÂÊ>|yJÒ¸ ³p§UAõÞ +Ç8±š[ÙU1ýâÛTSÆYVzF¤\Žì-äR.‡:óÅt¯ð�º zUGö¡6ktaå¿­EúdQ©RˆPr4‘ÅÚ˜¨ž[Ìn>bÑ›L`fñÇD|žÑ¼)U)é�ÍÏwu9q}Ç’,I]̪«œ/I‚°ª"øšÌmâX]¬Œ?®)¢J®š] äâm +»?ê{ÅÝ”ƒ3›Ÿ‹•¬™MÒéJ—3ÙK©Ê{¤bm̧1�P¢Ùá…‡v&›«fzä vg€ï"J8†ù ¹”€œS¿k?®4š=$5ËÔ„*äeœºŠ3Ä“x:¹\è®ÞÛMwíÑ/Ý…¢™â …[±36#Jd(G”Z[ÂŽ¿ÍÇ6«ã$‡'(E*¯9HþfÖ^ƒŠluÁZH�÷ &¸¨“dÉÔ)¹�(:ÿV¥ŒbÒÅ/ݘ£ëªžG6“u“¦÷ý;E5Ñ]îB%J^òeÔ踒…�ºþT¾ÔÇÒ�¢^hÛ±íð½QÝ!Ì(( S}°ª*bꈽ¬�Ç)ˆ¬\ÔÎo³°¾î¥šêÂ@ì–€“lÙÙͲ—ª°2„YòÆ¢Ù ìwE³Õ¦’fóõή҅£©YJÑ[³ò9ÉGÑ�ä¬j×ojH½%‹8ƒß½JPj/åj�v¿°Å«tŸ4Ý:W‚tÑ`XB)ì µð‰“�?›à>T"k.‰¶Z}ÞE_RöÎÓ„³|ùÇ öAÃ&I(®2m2…’€O£lÄ ¥ål4ün±®±¥·}~Fg°¹P\ß^ò‚wlD`si¾±U%�õ¦ˆ\ë8è¼ ¨}îòyde`"ûAËdgÔ÷»ÏÑe¢ ‰þL^ýG„N¡Ä›I�õZ u®rèW,ÜJ/ÛÎl +M¯Äö¾Ìö´u"+ ±Z•˯¸Úk«”YßôsÑ3RòÖ þ"0paͨõFxìØ�¶HN'õ|ÄÉa] ûý²[£³´ë›˜iaÀ_1ëIÀ*"OrU8ì¬é.¶eŠ*ÁùÙ"6©©°áÐ"¬/q�0ßÉ5DZ¦JY{øgìÿåE¦÷oßJÇmo~}GùÒÄx¢†Ì )H˜[OÊ—•¹˜ƒo–c\såÍtï<ÐÿñAÎ7ÎüŸ“ãú$Çí'ä¸>Éq¹“ãïZ¨2Y´lIüüdÒ˜Ìê²(ù®( µ–Yɰ«5¸BM" ¤C¤a\ßÂv †`‡CóÆÉ!v¾ÓGÏyˆ&mp$•ßϹ8šY£wΤ4-JBÐòå³MË ×�–� VN:·¯ûWáÿ“–_×^~Ùíf¦Ç=ðá%'ÀÕ@ø|É•„Ÿ£?—°öPˆõÕç‚ý¥€ù¼ô~_Bj,�+5.rŠvÂëÀÁ’€]“ höŒRÉ›Mà­?-qôÔD¯å�¬°FSG°P5z¤�ªâÆAìóiéý¹t\%-ùë"‰ûû ko +ØÆ"Zÿî?_oo ’ Ú»”…™™·å]ÕüÛï�?ýåkzüñõñçß'ò€”>û‡ÈÇÒý†œÞùîq©�›ë@-Æô±OKÜgƒÎ4ÊLE›;SÁ¡×N�”R¥Ÿ—ÞïKWž¯¥«<6&sï·Úhÿ[EñŠŸ–þ¯‘¢UÔ+ˆÈƒ¨ÕÎ%„»E˜Ûà e½Ð÷€¯|ø´¤tÝ>Ûúì¶qׯÿrs[´4¥…iÇ6}½Ù§›:0IC©µ<ø©“ÆïßrÔhñ¾d¥ê>,Rt,¬mD4È*²èš�KïÞÁ¾†„ï<üæä/ôú)zýWãü «~ŠU¿êùW=ÿªçÆì8sNˆ¸êç?ÿæ“.ò\kA-ë1;÷ìëƒÌè —xÛ¤,‡B l +þA¤ñ¨ü‹ýjG’å¸�þžb.°£ú\Eè2Dƒ!MÒý#”™@uW÷#éQ!c��­œitH$€¹¾ÂC-ùC6ëb®.˜•‡Bþëù†�®#ƒœ±‹Æg.­ ±Ã\ެ”Ädnß"K׃ªÐÍès§É †“þdj³Ýœjð°sb:ï=jˆ±hèúDÎcÒxÏ¥kC¨¥j¹�9´S +"¬B5iïÒ9’¯CÛȈ=ç°~´ó¸+D­5ËIÓrƒ”³�÷dëKKï ÓØXfÆÍnŠ `ãjÛÜÓ{£É{é0ø I©‰¿ˆ�¸ãØEÖyÝt��u†„ýœÀìOhI�œøñ„õ¶"‚ ígfDðYPgƃL¦&!Á‚’j±n~ÕBWèÊðÝ –é!ñ9hÌNSAN�g¼²Gß-wZ ôŸ«fª:Æ2tôYCë%÷Gn£@È!®qI¦!u¼òšzÕ9W] +$ÌZôú{´¨50‡¤sîCÜH%˽i+,WÓa—ÜÅ¢ÐÌá9ñdâö×ufmð Û)3gSÖèÀÐæj—Å9Ê�¢¤3½˜°GÒ«6028×µÂBtÎCé��ÊÞl_Å1+Ò@†hØ1�'8“�_¢j×¾›áßcŠ"Å2ï:GÅ„ìv©¬Y]5Bn’s=ëœ*9=­ø4¿ÉRr +H–¨ _-+o“17QPZ­üÆ›¡FUl]êÏc!Á@·1”Ò1(*­h 'j_O#µä1jªë+ @(U àe8§ ²ªy� ªÆ”�ªÓØÀ«D5  Júô +fÉÌ”OY€ê4”¥(à²�f×[¹d› ej´¯®ÂEÁóB”¦SP(Þ:† ‘D5rœ€ Éq.1Ÿ\Ìê\Òó‰6«þdǯóÒ§Tm~¸HÀj“��2™—Î@y« ;ö猺ß&Tè�…,![×<…î\7ßV�Ý;•<Š�=]ñQ¹bI­¯êgî¥|3Ø5<ÆLå0–t.~n~îI… 3Ñ•tÌ…¡Äy�Kêõ;I¨Ø‹�DÓ ãR`>9$±~�£˜kD�Å`œkn;ŧW'j t^±’�ŒáؼBL0‘€®ºQøêéš©âCùšR·(éaÉù»5à—c)$ª›O8Ÿ‡é‚Ý ×pmiìž!ŸÑ¤‡ä‰#Æ.N@r‹—| ¼‹)Xò†syÀΈZIeÚê`õÈÒmµ5 (óÓê¡Mã;E¹1»CgeHùf¯©V l'?Ø�Ÿ(Vòl„ * Z½á5]ªáÚT˜B¦²9#¸z'j‚–å�É4=°ƒägEâŠuÕP­ÿVF½F+{öc�ñ³¢§L½tC8ãÓÄ„ÚD�çJšÖŒØØ9ͪsµ£´&㎙/18,µ¤ã Vy5Fký6,aÎ)Qß§f¿Kô·rd7¼•ä¿?‘ZtI”%¿2‘Cߘh«l4MšáÜr]‚T¦�Î6ʳ„¼û§«Ò\yÑr¸ ez*á*,?»n`r^ÎÐ ð21Õ³ü]CȇbI;!Ìæ9¹ˆÑ*‹ƒNÚ[ýôu^Ë�ãÉ&툉’Õã¶üä/ûú°³_çð£ßÖÌœ®Ü|ÿa&F˜Z†d`Â~—Éé蜉¹Ãp&€9–©kØ›ò¶H‘µ‘íü²r&8¬Ó§ýÇ[ÿx½87…ûñÃzqmûNòÛ/Ìlã5L¤·Ñßë”U3�,±�dU8Ü rm`,mV¶ -›g ~1§:RáÈbÓ3šg›ÛtÍ©;§kºFŠ%Œè}¸F� SÿƒØû{K .× +ÔíæÉjó¾Ï`¬åu|ŸaœÛ:ƒ^8ƾάIû\gºÝÌ®  ZU}�9½XëÌ ø:cçðêZ®¼p …�+(–%ÄHÑ^4ÞÐQjvßÎrœ‹à9.„Þà]Ò´rx—‚„ÞñÞ>¨ jˆ³ ÒºRŽŸÈñ‘1f¦÷¡ù,s}@ÝAÝ5Ò»:jq+dç9NdyÇIê¯!áõÏÔõ,!Qu)Â,lÛŸÛ÷9@ÇnÂH4�4øëO¯¿üý—ðúÏ/¯¿ýôò8£/epàŠóB¶»Uò­_þ°5Ôtù‹®ѹ¶=Ø€jEÔªâJƒsUUÜ3F ž§åEö㱎g×Ù2�–Ž�çâ +Üwòy†¹ò?‹.[%#‡) a�BtÙ!4½Áoă±äJÕ)Ýèl&¸Ãõ–ãáa>¶gþÝd¡fß_úµ¹j31¾EYpŸ;`ÕÑ*ÕàÞÐ5Úïú&‘ήÑ�¾qAC3ê¸�j‡ã"²ßÙ×!7¬‹‘ù½±¾=ÖAPŽÏghŠ~Ù¼¿õÏrî[~þ¤À~ëÍ7O¿yúÍÓož~óôÿ�§X¡"¼Š�Ûšþý÷Ïö¦sÊ sVÀâΖóm9å"ƒ råÄã›ó£þ¦wÖ.¼8Ž_gûµí>A¯/,›¶"·=¬Fa¼&NUï™^ Ï€ÝïÎ=ëÄñ¢õëùÚ¬\ëTLØÙF‚®¤xàWB|÷EL¸ï p=-€Ï<ôÊ't\PÄ8ÚG¾A˜Úz¢iW,ã�;Mû}ðõñD;s0‘;Ä ¼ÌÍRÆÉýñ|× ø}`ú ´9rBËÿõ®+B~Ÿ|}ü‘š1u¥ñ)qa´gCÒó É•èú•½/ó7CoÞä—À×ÇбC»ä¦±¾Ð4Jn6™Îðœ‚�RB ŽïÖÝ•;Ä †‚P«�z1#¨¥Î;/W!¨u³ó€,$D—qüN],‰º@‚&‡E›ÊгlÆбCgHNhE2elO{¬S‰Ð…+4ý€h„i%ýtyUÍ·œAáJ6ö°=¼ß£�îÅ8ˆ·Ž�B©hcõìpû `¼ »'˜kvîïËAͲ†hx°=À?qPÝû¤ìÇwlô K˜tH¼>£ +‚ÒÍ—ã3»Ï: ReãÓ‚?�¼j€ù€¡'ÐÖ}î�ì  QyñU°ÇÐÈv«2Ýãü€d§¿Q|€ª§‡]­P“c0†Û¹C²³ÂJ¹õ¢ªÕ€:$ ”“eFóë Ùéžž‰vQ HÙ%™7_Âs‡dñu¨Úcˆ�­ `ä Ñíܡà¦p°Ùë1ÌÑ+'³P×}îÐašÝN³p4ÜÕ€¾€æ†Ç²s‡dapѱ|M»+�R\˜MrXL§0ï�ìLK3ÒÅ= ®eHQ®Œê‚{‡ƒ¬š£¥'‡èõŽÂM’[ûÝ4%ûúøò`êšTºì>ø"¹l‡h@ËnçÕnrŠ+æ €Ò²-Ù/<ÎOHvªéòß­67ì_¬VÙÍJÙÒ‚¶†{PÞw¨�%Ýo¤ÖÞÐ¡Š‡>Ñ÷ôKý­’9€B,Nưž=Úë½n=ú›úÖ½mçŽÃõ>õ(ªÏvÍÕYNGNÀ�ÝzÔæÿ ]Q"4‚A9­ö— 0zHÞ�‡«Ù: *Í“Tý± (ËðTŠêÙë�ì€tz̳O@²À/˜ý'‹žÐaÐtb‰|ì󥿋žlÆ!Æ�ÕOè0(Í­½\Œ{•=!ÙiFª¬ÍžÍä€O§HJ6 ®8ß¡ÃØ‘ü±(u0£)ƒµý¡={ª×§¦=OÏ;ô¹¡å4o??5Ã3O3ì÷kGL]P£_;®Údœ#²“R¹ ~,xÉÌ éc®÷“¸í†=$™ÔÝ¡Ïκaä£sx1E;€¿B9Ë +Œ(Üê�Ú8;u� ¡� ]d^Ùl>C4Ö’ª×=+G_ swZ!Ń‚¼Lߪô“q ÒYguP�d¹r´°\<^+uÕÝ}èŽÇ„f½ÇF“ï(#cwØYv4F\IƒÜ“²báÜñ€ôÅxº#¶]|‰O!ÿ‚~ØnÉU{ŠßÛÊÕðxáÎÃôaè+G…HÇM•® b¾xш¢žÂ‡¯ZêœÏÛò!?OHyOUÕs=cÞQžµœ2H“/ñÉl~6ˆ~ ¬(`kÀ„+ôC–Ë]@¯< ôQt\$?åç Ѳ‘‚Èó5(’„³V*mšÀA8>žSBwˆ^2†‹—š•³9BGF0fCôqΊcb‰‘Ÿ ¢`AM= X›$Î$žGc×Ĺ¹¾ÑÏÑ/¢K¨j+‚Àhdž +2B +$µ†ü¼¤—œ¹rî1 ÆmåZRh#0ɯ¥³CrƒýÈ—»â<'L\jJ;@^ +yCè]•ëRýœÔ�c¶æ'îX×®Ú!ùiz¿RŒ“º0ûÑØ/ÄxösåžÜKº¸ÍÑ 6ÎÎqÉàâ¥V�û#·Ofü˜ÜF;ÄvD†`:¡kYuÉFc`ßPý 5›Ÿ%ïý œ4 EJB_`±ã<`¸ÃÝ“Íi¾ël�Û ºa·#”³ƒ%HIP2'ï(Ð3 t¬O +͆|žÈ¸%ô‚Ãë¥{U) + ˆ½&~† +/]wÜ Ïò-ÄyH( ä‰r„ŽQ.À¬ê‚ÜÌõ’ŸDb)µ¨oagc?$C’Gf–(�ΤëÉ î n(èûF"#�2å-4m)€9€2¢¥aƒ>O(ÜrÛñ¦`G>&*¹Ö†º€Ä �¾oÅ›ë'4üäÔÅùW*ðæ�©ëi²k߯¹µÿ2VæÊ°BлÕ~ (ÏbâÎ)>"°��÷ë·ã�׿^îøýEIQ º;ü;£ÉQ~âF¤n,—ÿãõó·ã§_¿ûãÏïÇ/ߎ¯¯¯r‡îÄkêåÔ¯ÿþ‡}éðrÎ[s]e8ðÓ9ÌWøâŸ~¼Nú8ûá œÛ@�ÊшDxîûú¼àÍýûõOžcù53#‚³ã÷¸| E<¸žÐ*Í[èÿã,_âqàx:ØÓ÷wxc\ÇYˆEx²µÊ£+ñ&~FÒ\@Ï*üô [ l={BËk]¯-ŽÕÜÛÇ×´Bàa¿íÐUÊêm"(Ì<³Ê�û’_rê9Ýc¨¨GÃÛž 77Í}V¹d7Ü �ùqýñZÐb»8~~üÿqÃÿ¥jÁøØ2)Tþ¶’Â]Iñ¿TRº+)®•DYN`%#²l༃ƒwBá€bÀ¤ÀV$!2qÖÁxSçöò—&È@Я²ÇkO]�^ÙY^]¦–Š”c'׌†d5uXv° 郎Æ ¸ú9HaQ¿òa³¡©)ÿ„D³^fº-�ÜñKÒÏ742)#–áà¯�Ãá0ßÎÌþÁO,Š0p`¾q61äXàû7¤ ûò°®ƒ ûsÙIQG‹W°ã}Fü`\øÀË¢�ì²ú*Lße&F—GzÌ£™�ÇŽ|‡O#5U.«žÎrS±'W­ ÓÛÓÔÆŠ2aªÃ&ËΨ†hæàõ4ªL¶çÃ`Füß1]•.ÞVÌö¨cÅðìJ£§6°›1¼ÈvÎ2UF,Þ wi¬…¢°@=§ç@±{Ê3ìlÏêþÌ/ÿ\4�O®±AfU"<¥†ì¬?Gãü¢€S`EYÑ›ï æàpXºhí£a¿¤.3›kSÒ_]’“·‚°wƒ=쾫cÅ£Û)qØ&KU�F7‹T‚U™aϨ_•¦ªó6 Ó¢»SßÈbå© +B�\{³ÔU(T�±5.NlÏß�\¬ÝFÛƒ«“=­CABBÝ|Áu2.dR¬é�h¦%ºî0¢g—(QvNÖ9V…+ +Í`Áʼ¤‚ÇXÂd[¬2,®=ŒG]¼’‡)£.ëã3I¼])®*€,eÄXÂzTlŸfe!꣖,ùQŽÕ‹J0š°DðÃñ V±1IÕQDF]!ÎÆTü4â¯úRœßÊN³.‹lˆhÖt^©/Í:´[÷$–%ÑLoL¢C0à79P ÜÜAý° ÌàÞÉ͵Z¥ôÈ{f+ òª2ÛW#á¤j!7F/*e“t#ðªàÌN5ƒ%,u…‡¥ZmUr�¥#’ï³âÄöã«”E|Õj‹ÜÈ®’É�xïWÔª�ûòž†�9ôø`ÿp,LI_fš*)2l¦“Ç hÊ¡KU[5qæ¼aS´†>¾Â©o�Í–TaDú$InZ¨ŸŸßVj fÁî†�2¦ìWKåõjö––£¡¿!a7Ã9Øí}ô¬S•¥I-)i‘»¢²´vq¦I¯QB²·„××á ^ºf“Ýæ&Œª¿ÅqÂèæá{‘Úiª¸’ƒM-!÷+bUy…ŸëðÔ^± +‘Œ)1¶ˆè;áϸqœh +ÊZÃÆúß_ +µù�ÿö©ôqœöq/;>þ8ù + +�ò‚ +^ÿ~?MlëØu¥s³³ýÛRUe-Áv„x �ðê-°Ì +¹\$¤Wš€ž 2‡ÿƒ$Lë&P:Õ*08¤ÛÇ2û¼�émæYŠÆcÞ‘E{âœÌn9Q¸Þï/!@Bi+€,ìD.‰ q˜/‘^ ÊXsVZº +©ÝréÌ#ò™P<*ùzÑÛ`dÂ_øþ–KÖkÄ ýÔ(EÓÃçЂèÝóç€ÑæmIHF ekDÒWiYŠ,˜|òÉÇž`8º@v)¨¿›yä¥úõ„†»jV"W*òü4¥6AG5¦eaX¦X[ð=Ô-Ùar«tý…üàöóŠéf¶¢‚§ÓØÀ"¼,²žL÷2ʪF­vq }›«Ñ@'œÙce:•¬@¿@l‹çºxŽjB" &.+;dÁ>ºç"=}% \NädWwï.k¯1Š.ÚBß‡àØ‚fZbgʺ�iS¢:ã¦D8bÎtÊþ^[Î*þ’�S_Ä´Ï ° Ìl#¶K2Íõ$i ªˆj"  4”5ì;¶Ò˜0 ˆ ©á©#‡5Ÿ1ìÚìô·G1� +•†¥¹“²+ó6´Uç¯ø€õ~’�+á±iè’-Çn„n>Æ^£ŠrªëYÑdP‹åY¥�p€û0¨Øu õ¶<Ô�̶�z}{§¥JÝ•9hê³èö‹Ì|=�#A’7LêÐÊ$’Düó^ºY°S 7ò?4«ì �;Iõíf$ §‘+Z“Û&;èòª¡”×’w3“aUöø²ëWýÐ[´‰!ÉGHNrž«, KDÂÌUíJ»T=wÕ;PñnÄø&¡*4^˦i#ßôzšsàCeÁ°qšnܑջحô4¯æ@ëm¹;¡Ù T@�框 9Y”èC¹už¶*&ºzxBÅý¡jZâÛŠQåªݵLu��sh´¥ÈÓvÅÀ(’ æ‚j–PÆëš %A‚G .´]Õã 6dyA Q…¥®-3¡¦X8bë\î×òœ®æs· ·rÇ0Û=Û +…†T”8u º¬4à´Ä”[›ò;Á^|1ÂŒq¨Ù +Öp€Ò©Oû +¾k²c@ +³I�Gt4ÎÙŒ£”è!˜b$hбãâËRe r�ëΟ¸\ËŸa\ÅûÑpœ~{¸žlR¶Î2¬Èík)ÛâøL 7¢>�þ¿ìÕ¯ÛX˜•¨‰ï}†�’�ó…¢'Ï—KA “ƒå[SÍWv +èû¯,ÆŽ¨ªŒ~™ñ0ñSŒ2[šÈ•I¬8yöÐH-Ÿ@Ÿ Ð‡ù8râ¤I+ö‹¡í¬jw~ØÙÐØ…¸=9NÖÜ é#�8ÀÑîw¶´R�XýQ�©Ã¡ðÁe€i¦4G‘éé(73ŒŽØtBÜ­Lºh¼«Õ ÙçhÞNà «9é�2P áFM'@–‘F—œ¨Ú`¯©ãFš»´LtýŠÅßËùɇ™òPAS÷“O•NLÔJó€ÿ!JêÉìZ$”Ž­îšÃÄ¡ˆÖ�¿PìO)G­Ù¸74æ5NÜ8ƒÞZ“&?2tá>ýAÙÍÓL Ã¦ÂJ5!7çE«BsÒôH\Mϋ㣢¨/Eˆ££¤“¾EyxUl„I¡ ¶ÜÓ)‚iOtXàÄÙЯü�”y-J&ÔcG¶ÕχA÷ÐŽÄIÑYe³‰| r÷¨a¡PÅðÍ Å�ÅpR*©Šµc¦.3zyQR®| ±Ñß¼m诃?b7`„M!~ôã9¦¬H¾nA:#iÅßfà­üä“ ;©y’w…ÞNýõµëòþ£hgsWôœÌÅ>?Hˆk%çÆ‚O¤ã +reÐEÏ€UIlP3P8ªß'‡ãüãLþÿÚhÎëîÙ Þóð�2åÚ< lZ¾š²À¹Mþêˆ÷ÑÛ¥6î÷øK¯™ç*V}ß%hÃ|+5£â¦}«¾Y0ÄÄ‚ÀI /'‹ Ñ•$å‡fc“Wºü « S<䣪Z+¯yE6U|Õ±œ›¾+bw9ÁBÝï5]CZ6Ì#4Ý%T‰iÓS™ãª¼—/Ép` ÍS¦æ #·ã +÷Àa=Ò@"�º¡qšVæIwDäw#B× AY§ˆ˜”’zËÆ`µà¨\|ìω0��ÃÕ&[é8°õóõKt ú7ƒ*•šþú÷ûHÞäêƒDßö©‰W1�j¦}9pŠ«´bÙXàŽÓÕß[¥ÔLéý`ÓúÙž~Ö ¯"©P7á%6šÏÀÑmñÄñÇ·§‰ˆðaÅ»–[Ê_ìåãÄ1œúŸÝßøN^.në�œ =„ :¹(óiÑ©'tÜ™®•M‹åQÈ%ëN5Í{a‚äÑÊ„ ÐG6 (ĤÏ“°®·½=€»8T-PįÓerª%ër Ä—D~Ám³f¡xŒ2žwÇë¹ÈŸR[óƒŸ 9r<�Î‰Ž­†šJÙ§,uØói³§MÙ©¬7º‘½ ÜϤ7à=&•"X)fy³Æ tH¾C¸˜Q’é¢M ›™<ù¯/"îéá!ßÈö–Ûæ¿y 8y„ ò™áx¶ãiî%ÅNd<¿bïˆÎÉ"ü9!hÀêAïZMË)¨#AäEÐ +…´+b:Q?H¾:é5òЕ›Æ#û]¤Z‘YF"9€4f±dÃ6ºLe³+Vš“�Hv7éNõêK0$©Œ$2=ÑjrE+ÑÑ‘8§ÂÚwp8˜¦~ïϦÕウÏñ‰¥!•Ës­¿oïê�pë’}ä Y­ŠÕ<=² +µ{VâÌòb"œ×–Ì.¨iÕvF\ ¼í 8 �á—“Ç2f¼Vå�Ö (ªóL·Ž¥sͪˆPF¤4I+|Cu<˜d"ÆÒÄJ@©–ë².t9æ©d¨‡JÁhk71ƒé”»R ‰@÷‹Á:<Ö®S9´JV<ä¶y¼â:�A©ìˆ 4LÖ’¹iʱªú‰±­9±ÒQ•´È{·n§”¸ø¯/‚›g‹VEÿÃ|¯«�Çüh€s�ODØýì€{‚šfTÅ$”¦h±ÝÐ?W�þÞÔÆèÿ÷BßÄßßçp‡(îÓº]qX½~wïšÊj´:H® p?¼Hb#SûHépË ƒvî;Dæâ4MÆôým9X•mûB +–·BÌ>dæ˜G :Û‰T+!§�©› J·§7î" œš¾ËŒì�¡»q� ¤Up;°A\Ö ª]…×¢^ŸpÜn€5q×BEaTæV86§2 ¡d#nlªÁ“¨Âž²R±¼!»‰Sm0Rw¼×ÕÑ9ìHÓkxÀ�VUyÙþ|¹|d /vXÔ²‹_3ÄÔvütª yš&¤|=ãMøuã­mQ""…ª³.[¡ÁÛ—ºÊÅÄôå«ô¬›"¤Cé˜lâÝ&ï4•@ÏWñ³þé¤Ò‘¢QÞCà1ªß…YËÍhý& TBûî:–E2Ã$êò£î]ÀŸDØ“uü5a}î[„ý– ÝÖ +ý)þ·¿‚·OÿÛÿö›éð¾ò-:W†¸1þ}Õ·[$¢Q(®/—¾õ©+(&o6‰K2î—&ž£•C”Á1˜ôPetb½C–…yé²°/aV4äoÚŒÌQÖ%ÎÀ}=_â dÝó]œI´¬K�eÓBžQÆ´»<³å²(ô�XÃõ´I÷ÀB Á!…ásáÍ.åú vYGŸQÈŒ£Ï`–q×g\ǥό„·.�f%à vmG Á¤,r�ƤϛD“ú_—F#lƥѓÈGh´Àch4Xý’h0ê]¡ÁNëRh(½d�+4X!ý\¡ÁVÔ®Ð`)C®Ð,ÝäÙÒÔ q£(ÄÙ|�ɬG™ ¹\˜©F—.ëÞÿ®Ëz¸¦×]”uk2/MH²&޼$Êdº$«®FÅË^‘£Éô¿K2cÆÏÒyß.Q×ܹ”Ûî½û,ëêo¡�cýæ0‘_8اÍ+Ï Ø?nùò“”Kæ¼ìe¥:è}cÛϖ䇣ùÊ]2S¬5•VËnuY9ûIéñÔP¨8͉¾*µXT\þ23ÃÅ%$G*ÿ6Ÿ½¨1ââ)¿5´lNDpO7';†84õ¶`^Ĩ™úÑ×ô UK“�¦g?ú/[>k¼Ò@=a 2ÈbÈê.g‘ô;uUŽMßXäÆ Êí! -s\äæ:_ò"SÝ8/L +, +B©yV0S›¤øÍÝgPB­4«S$³äYÀÓvçãÿáä„ç§Ýfí-Z  ™@î“»RÀz £c¯3itqV‡IÁ ƒÃg«÷%»#`B$„5_¹ôhÑ­$1-¡‡U%Ö„Óô7dô$À™LRéð¸©V©-˜’¾V÷MƒÀi^ÒUUy�ˆt¸2*’D‹póAú:ÿBäxRòâ €Õån"£XÊ6ôZ­æåK¼PÒ†*yœ®È™÷n"U$•í0¶V(` ÿU_Ç3ôJÇŒF¹Úó\ÁXÅ- Å÷1»S“6O¨ÓçD·ŸÐrÉ�gP¢¹ƒ·ÏÛbÙcÛrÊøP5B9¿J$pnbŽô㟳žT Æ×°õëQ©?Ä& Ûsñ)°ÕYš Î7ÓÀý�=I€übù�¬’!¢> ¾¾ÚQ%%õѵi�U ×H'_S¿}�Dê‰}ŒvšeýÈßÀäè•Î-×â€k›o‘~¹¡h ëç >éu„"É"¿Næ&{©ÝœÁ‘ºT¯0Nü‹|9P¿~�Ð\“•¼ê‚x>J*JŠ$ãúy5e{{òä¾�@A@�RxÛ œ×øâxß>áYä”ú@ÌXV /5.­�ÜŸqs4$rÖòðÕóþ(HËbØäJ!·£±lr ‡¹×ÇïðŒ/ž÷åÙ¡½QÖ¿?Ðu¨Ù??:©>å öОöÛ_ÏÛ÷%qMBDd…ÉU%CI1ð˯�¿üí·ôøã·Ç_}D’¡™©éN’·çv·F°�w¯–O¼�R»ßsôŃg`{0(Nåµ £y6e½UÇìòªPíüh¿/;Êf”½L ¶ ܼcèo�ûâùŸe— +JÔÅ©5™]î �2,Z#™möãnÝÔJ²üêa=ng¸ÞŸÉK~yëç-Vî}5£šÕiðywxwô†LÙ‚v@ÊjþilâåMËŠ­˜ä¦u°9cI­á6R)»òÞ�BZ±}ñ¼åYý~Æ„¹óÌßú'ÅöM=BR¿©æ¢ßý†è7D¿!úQìK†¨ &w9üùïø‹®uÊ*rÓ”Š�µ¨õû>…7Un–Œ +«&rŽõ³T€ë•+ùBa>?¸…öýÍ|ÒʓӋ’ó• +uvÈ$·×BEÍeö€Er}A�r[j\ÏwˆðœZõqà×MךÍר¸I6d¹b�»­ÞóÄrŠ“Ø +-áƒ?KC[jëܶE­y iÎÚ;Yp*í™Ç«®¢…Í„O¨8ád{LòZ«!º±ÜÜPç¶Y e�±¢ZÖ¾‹Š×ùZ©ÅJËå’/{´0]æfkøÅB±* Ï…6r,< �ÂDõ ,¡?û"Û>wÝž÷ñTÀ¹�ð$Ö¶¢(xHé’àÏ +„/¤ +øÍÆ»±}<¶Å”š™²RƒÕâ–*cÐÏÖJò’¼ç³'Ÿ™ùK˜MufÇí”—àÓT�™º~‘õª +?O�…½ZØ.tg_ãð…5™u˜Ê[ç”�¼î`óðÔ:ßXY¶1@ÈSÁ�E‚!vVoò”éXJÉd'al†�ð= +#†ª<µòâd}açÑd×.3­¦ØÇˆäk1Àmãþ[…†mævÏ~)ÄÙ‡<`Qü0®þ„Ô‹ÕÌ©O¡µ�%—2Ú5»Ýr—mñ}M]'€_w�ÔÍì2f—msyÇ4Giµ*;ñÕxÓ†v¢d ‹C¦-]Ì®–lhI|²òKfa +‘ÒTÏéè‹N†ƒOmÚiUÞ©j]£ Ö篑žêå‚&²0dfæµ +ø-Xq¡+Z&AÁM®:’‰¦QˆUÔÂl` <�@=�³cî@—^·ôÀùaŸÉg¡ñ�‰EÊxò9ø˜]ø<’ð¶ÓÈû²ƒ_ž“ fß¼ó •z™Ÿ×…/žºÅü€âÔ�10È{o³Ì@]7 ¡—žQ²‡¦0�é»xÌïyÑܶƒOd;¿[æÛ�«TýL2·ó,JÕhEvs`ÃÓrp;;¶"A1Á“Ò�} [µ†]Uý(ö æßñ&Ñ(Ö élôÀ¶V¸�ÿ–ë}ðdÑWÀsÆ„ ðN͸¶á(æàOÕŸºÛ™þ±^Ó¼W @Ô<Ñç$D#Š‘�/©bX«ª @¼þûîm¥fåÁ(„š;‘?’Pº³Áw�(&<OHˆœ” ò�t +³' ƒÌ²Y vUfƒÕ`§üï¡1JöIRøM/Ò·$ãáÈjâQts�ÑÜ39I`›š|0…<ŸÞŽž`|©†4ç<†–‰g€Í¬)W¤�Ÿ w` ++G8¡¹+áTC5 ~ítÉDZºdðÀ×hrØñÒî¬ìÌWÞSy€ê|6g¯Ø-é6ÏÊËÅÐf•aÏ¡wÏTãÀ£¦£¦&]WÊÝ"{˜?C“¢‚€s‰gpý gØT[*¹Y÷ƒ�âAú…žÆæ$}0íø¬ÍOV6g%%ècx`Ç1“ß¶såžâTÀÂórӘɘ°{훼"†7üR6=Á·i”æÊT8žVõ€íéÈ.³$�&Áxã¶?¯KmÏû#z²p`’nÆ +âJæÍXÑ×!¥"K»T’f =ü×Ë‹£,„¨ñ±?SZgL]T&,1G¾¦*Ìð3GΤ‰Cy +¾R̮ŊYf_Ü£AEš[PÀ”<“$?ƒ‰N‚%º‰¨$É�ñàO�™æ€çá–¬z\EÌj/»j;ÁW,®wˆ:st�w`J…IC ô(/öãP¢Á§^˜[S[ìç*F‘,HR8�U€!�‹°N@-&•Ëô¤C–aÁÍb„ŒæRBLW(9вQapbs¥ŠŒ³iŽ)F’Ë,F<|<†Æ7S§e3�›Þ‡ð*´j»J$H˜žA;TÃh ™VcS$JiÐO’ã\¡ê9Ìô¡/ýÝ2-80UáqË3àµO [;b›t:›ÅVÒU�ŽËùE=‚B~ tÒù�¼ =“i¦K?nBRf°šGê 9„BÏbÅì:æ×¯éqÛ‰ ¿O„]"âèý&jµ®7«ì0$'9ϧJÙ«�†÷ƒn¿°…Ž-ÿ�wU+;mi~à]éb'Ý‹Š�–ëµ™†ÍîÓ�y´àÂqñR^œâ‰ „WO/g$£aG™ìMiç–RÅmkMTbÙã Û—_>{³$!°4"þÁs¬qÔ²[k’È©kN\3l’˜ªf C€˜*Í%«²å¤mI·ãÖ@ îtÞZÆËKÇ~[hÖ'Ë>(I…ï• œzKUÁ6ƒ*3RU€Ëµ‚�-· *žt·í>§}·ôí¶$Nk{eˆŒ%ß«Š/šsò¡Ê�1ô�Kšá’Oþ´¤sºJÏ'�¿è�½ÇÂ)ŠÝp㼓Žxà§¥o¯¥íç72ý×ÕIÿþÖ$aê8�‘'ÀQ4ÉÜþ}Þ¾ Š„lÒZÄÑBd*P}Œ~|üé/¿�ß~yüùÇÇŽ:Õ^ÓǨ¯¥û ù·çþòka_ŽÏ)0ÜÃõq…CZRïìd˜ËðÍi¥áÏ-2¥Ú|ûnéÛmé•â×R£éÄ~CN;zPòZÐÉŸ–þ·QGT�ì4´¯EÔ‰—°8N“Šc\i÷´-÷ËÍÐ/‚~ûnI©ºo›zÛýà¦s>]þÓÍí“n9ûì(•çóf¯::�ªñõ@Ì~˜ÿÞÉ�Ôn'YªÄ< „N’“]ú_�H`Í M¿°0< |·ô-–&­ì¶�ƒïÇ~¼úsñ‹³~·zþ«1þb¨?>Æ_8þÂñŽ¿pü…ãÿ3Ü%f±Ô5¨ùßþÍ7%M}�Ço?ýã6V”èèU bLX×ø, •š´žÌj�áïx?9òÄ ,^tpŒ·'Ïd4¬„Dã[›]{ü‡È ôç“ì$ »¶·I(uÌÜ_sÔÌcÅE¶ë" Œm=b¿,¦@üh>ï׷عLpm½çyj~´ÀŽ yH$À!ÜàUe‡\ÉÄ‘ÞßkH†Û£§‡*•ô rA’Ø’ô½†ÙõÄ’ ÎIX£¤w¥‰¼ß ¦Ùêo÷ïèU¿'YT³•ðœG�¯�š½pNN#PEæ‡]æ8+¡¢Œ{rRp:·kåÛÛsAô™‰]í~U +/ù‡›”åÿFÑ-‚Ÿ™+ôy;ض®:®ÿˆÞ�Ën„iÚʬŽÀ‡±odXYx¹Ù(Äñ™;̆Y YùY¹¾t6�nªÆ¬²Ä‹ÒÞË‘(&Â�ãÐô¡Ä%GçYÈ|×lB|¼PÉ×$Ù8w_(}0L.|{ÍïÕžðœI.žµ°ßp¬§vƒª£É=½‡Cž +áØ !bÀÿ'X;®ÿˆãª‹µ@ùôTl&•‘ÊEuå1�:|f?r$gžeª=³èC‰èï³éŠ–¨áYÄŸ5R˜O§€ÓÁ/³y=’ðšœ[.Í +ŸâÖ}UÓ/{ƒõµ’WÆcÒs-qEB; î÷‚ù,Y!œÉTÜçb‡¹µSzSðL*ó©²T”>ø3²òIô”)Ð]ƒê:[Õ~±ÀOo?C„í\#r.jº:XxÔÔZĈ?ßH°áäPÛÄ=ù"An®"¥·!ž*ª¨*£l&:¹�^ì@ž5ˆL§âªô© Ð6K¨B« RtDl޳0@7fU¯ª5WÒyŽß.›=GU3"VÍÁŸ„›ÚgvååSAââcDÝöäÚ˜â£"@Ž«6¨¼ÙRÔÆ©ò@Ù(¬„®È« “¯-¶…�æ� å°L§4¯½çj¥5ŸÜNâYÆí‚O�+AÚ ¹Ã!È-¦9 2¹TèdtÔE…Å'w•‡b­ F9�Xµµ3ˆ°U˜¢Í)wëx°0Æý6ºóíö +ëDÉ6@O¤lë8æaˆ“—zš(§/Õ¾0yéÃe‚e~SE¥Óýª‡Aê\¦m›…}t€j¤èˆ­FDAóÎ8:Jç]!¶:Íî°gtªÀ )“ËŠŸ©ªÕÏ•‚u_ˆ¢@wÅ×=ò©Uéœ+Qûy:Ú¦xàt–¾òSSò/ól׋CW)©%>§;‡ž“çc%ª@{é)TAnˆî-|¨}“*‡sœrÙ„½¬â4ÆÇ²{�‘¶Îù˜n‰:Y¼ÊË“„[)wà@Ý™¤Ó>¢D~¼ÃÏhíÊj‹øXr§¨B¼ŹƒÕ(‹“ð HTÔ1»Ts„‚Dó“¥\Ea:L+¤ÐÐzŠ5O#ÝŠ0#=«â¥,º¨ò5šÑ×?¯%ïÉ7’@Hs‚Sñ¨YTS „1R.TMØkø9À(ÓrO³ªþ\‡?–ýS}·ÏEë ª¤Û…=‡>ØQôl¡Zxã¨<]ÍÛ—'»Š,º•Ù\R�Wa”ð+»Ös¤{–±^ÄŠ¸B턟ØiÎ�Ö­3å 6Û‰D˜ÁÀ3Lyûr]˜½œNÒp02ô×¹{ŽÏäårZoä{PåÀL�ç}Âç'ÀôøËé endstream endobj 212 0 obj <> endobj 213 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1289.064 401.884 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1288.0637207 793.3043213 cm +BX /Sh0 sh EX Q +Q + endstream endobj 214 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1444.599 401.884 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1443.5993652 793.3043213 cm +BX /Sh0 sh EX Q +Q + endstream endobj 215 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1478.447 401.884 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1477.4465332 793.3043213 cm +BX /Sh0 sh EX Q +Q + endstream endobj 216 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 711.008 m +1093.816 711.008 1061.304 678.497 1061.304 638.534 c +1061.304 598.572 1093.816 566.06 1133.779 566.06 c +1173.741 566.06 1206.253 598.572 1206.253 638.534 c +1206.253 678.497 1173.741 711.008 1133.779 711.008 c +1133.779 565.06 m +1093.265 565.06 1060.304 598.02 1060.304 638.534 c +1060.304 679.047 1093.265 712.008 1133.779 712.008 c +1174.293 712.008 1207.253 679.047 1207.253 638.534 c +1207.253 598.02 1174.293 565.06 1133.779 565.06 c +W n +q +0 g +/GS0 gs +146.9487305 0 0 -146.9487305 1060.3044434 638.5343018 cm +BX /Sh0 sh EX Q +Q + endstream endobj 217 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 711.008 m +1365.01 711.008 1332.498 678.497 1332.498 638.534 c +1332.498 598.572 1365.01 566.06 1404.972 566.06 c +1444.935 566.06 1477.447 598.572 1477.447 638.534 c +1477.447 678.497 1444.935 711.008 1404.972 711.008 c +1404.972 565.06 m +1364.459 565.06 1331.498 598.02 1331.498 638.534 c +1331.498 679.047 1364.459 712.008 1404.972 712.008 c +1445.486 712.008 1478.447 679.047 1478.447 638.534 c +1478.447 598.02 1445.486 565.06 1404.972 565.06 c +W n +q +0 g +/GS0 gs +146.9482422 0 0 -146.9482422 1331.498291 638.5343018 cm +BX /Sh0 sh EX Q +Q + endstream endobj 218 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1133.779 982.776 m +1093.816 982.776 1061.304 950.264 1061.304 910.301 c +1061.304 870.339 1093.816 837.828 1133.779 837.828 c +1173.741 837.828 1206.253 870.339 1206.253 910.301 c +1206.253 950.264 1173.741 982.776 1133.779 982.776 c +1133.779 836.828 m +1093.265 836.828 1060.304 869.788 1060.304 910.301 c +1060.304 950.815 1093.265 983.776 1133.779 983.776 c +1174.293 983.776 1207.253 950.815 1207.253 910.301 c +1207.253 869.788 1174.293 836.828 1133.779 836.828 c +W n +q +0 g +/GS0 gs +146.9487305 0 0 -146.9487305 1060.3044434 910.3018799 cm +BX /Sh0 sh EX Q +Q + endstream endobj 219 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1404.972 982.776 m +1365.01 982.776 1332.498 950.264 1332.498 910.301 c +1332.498 870.339 1365.01 837.828 1404.972 837.828 c +1444.935 837.828 1477.447 870.339 1477.447 910.301 c +1477.447 950.264 1444.935 982.776 1404.972 982.776 c +1404.972 836.828 m +1364.459 836.828 1331.498 869.788 1331.498 910.301 c +1331.498 950.815 1364.459 983.776 1404.972 983.776 c +1445.486 983.776 1478.447 950.815 1478.447 910.301 c +1478.447 869.788 1445.486 836.828 1404.972 836.828 c +W n +q +0 g +/GS0 gs +146.9482422 0 0 -146.9482422 1331.498291 910.3018799 cm +BX /Sh0 sh EX Q +Q + endstream endobj 220 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 983.06 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 983.5601807 cm +BX /Sh0 sh EX Q +Q + endstream endobj 221 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 618.106 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 618.6060791 cm +BX /Sh0 sh EX Q +Q + endstream endobj 222 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 934.687 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 935.1871338 cm +BX /Sh0 sh EX Q +Q + endstream endobj 223 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 565.466 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 565.9664307 cm +BX /Sh0 sh EX Q +Q + endstream endobj 224 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1060.808 401.884 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1059.8078613 793.3043213 cm +BX /Sh0 sh EX Q +Q + endstream endobj 225 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1093.605 401.884 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1092.6047363 793.3043213 cm +BX /Sh0 sh EX Q +Q + endstream endobj 226 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1249.14 401.884 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1248.1403809 793.3043213 cm +BX /Sh0 sh EX Q +Q + endstream endobj 318 0 obj <> endobj 317 0 obj <> endobj 316 0 obj <> endobj 315 0 obj <> endobj 314 0 obj <> endobj 313 0 obj <> endobj 312 0 obj <> endobj 311 0 obj <> endobj 310 0 obj <> endobj 309 0 obj <> endobj 308 0 obj <> endobj 307 0 obj <> endobj 306 0 obj <> endobj 305 0 obj <> endobj 304 0 obj [/ICCBased 87 0 R] endobj 207 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwnΫZ€N‚ è $´ªŒúÿ€ÌÌ‘ÕSBYa±�¾š¿ýåûñíÏßËñ‡?~?ß¾ÿ­¯Ÿ‡éïøùúÏãÛŸpë_?ålÑŽVüœ=Žåý½3ì\cÿýÇãŸx¥à¿1ðë%r…râ®�µÕýV1­¦¯~{”Ã,úa£¬ã©K<øûÁ/Ë +,eK bY-øl+ø³c¶~F5,o-ÎhxãõãÁg?Ï1¦,€�£9.WÞ?[›ohÇëñg‡w÷W~Ü«9^+øý€u|Ç*]™–°½n>-ú{ÁÍ¿â}Üõýû{oF½¼ép½´õöv׳t®ÛìxöÓv>�FžÃöp<Ç£©„ÔÓ'ͯG;cÕ ¼ãìáœgôAP¼qN\qbëÇ:ûìÜ«wd‡uZQŸ��•Å%7ö³×u¬snÊÁŠHÞ€ix ¦-¸‰øðÖDºã´†z8,Ïëצ¯ ¥Oøbõôv¨^…�~!"x+ªïHÃxcTaSÛ9|З7á¢ÿ„…¾ŽŽª ~XÏQ¹Á|:Ê�Öo\«OÚMÆ‚�NvÚ·ZFc\aÞàõˆ;R€†¯PÿpŽÔU¯JåÆÖO+�v8J¡Z‹�äº ° í¼1¾íÐw3ó3µ(ÌBú{gò¸!ÒûD£©Z‡1uƒ­êº+g2™•üS†#\gq�|÷I—U=‰@ Ý–*†å†D ¢?xµŸ“¯Vl~\y1„¿f)ûãS#DGƱ¼�hEû¥†‰ŠÿÐ5jc�̦Кì®ÚéAœÞÕ¯(ø!Ü�udŠêÞ¢Â긑ºˆØQÙÖÅg€‘¾ÞØ_èý½n(¹{g•¡U} ÖPT¤’û£Õ¤!Óö ¦�z]7j�›mXF•p0îh¬ÍÀ›Êƒ½¬ø«Î‘Þ¡:YXhTÒÞvKèõö +á^Øçß_R2A9pÜ„�#ØŸ2RΉd"@}‰è;ïL¤ï µ:w5Dºòñ2^´uî�×l{›¨¢Ž–>`WµÅù“>uñ 6�+]b«ê×µÞàÕóº]ŠŠŽïc¥`&öRØdªÓ¹ vï +ÕÛ°çe™Ý¡êäzÏ(VM¹Ù´èUuæd`ìæŒm(uó²^•„^ùqAkb‡�O8àÞê¬($Јò}!p„ôà…m«uζœbAzæQ!ÛÔÄÚæ:¤ª<'»ìdL‘§�1“·ÖlkóÐJ­Y�¥[¥ §ÜßÙ@ýËq0"A®±ÝT Y],ÈÖoøú*Ñ*X1Ä: ýÂ9ww=UzyCï7ª20'–ÅÖ@¦°]z¶Ku=ç;�d„ìdò‚IûÂ_8ÅPjÙ¨!“ÈjhæÄ~“ìâ)’ØþT�¡À>Õ<†N=FjAŸ^Â1¯§fk£®=v¡'ï°ß-Ë*ŠVç4úP•™”˜†vë5‡*«±™4YUí¤~¤�®¤ZwInΈŠqù™³ g´®45E×nQ)Xj¤6Y—ÚÔo„V3›»(6­öœ—N W4Iù…˜*ží7ÞŒÅã$ÇP_¶º¯ÉaQN&Ÿp0Á¶)cíÜ%iØ„´`´µ¯w2ÿOÝ¡Ú +So† +¬”³wÝm™JÍ(å€]ßÈu&B÷VŠ'ªÉ”;y’»¤m¼6š}†åýÕB]Fa;È “`°`û¬÷õjÙ‹DYK¡S$Ibpòí+'ß!!Ð1F´h@Q”"Ô3+�Qj’±X}ñš{¸ÄPW¡©œ!(ú™Ò´«áa4:`°VGRHÆô§š’ØC^Ú'Ò‚¤ +ú"K�Ü3SAŠˆBRÖ%(ASL(æzV½Á–â7Ppáø†ˆ(ú‰lÇ®!Nõ’:Ž'>@Žþ¥SŽ¥ü[šd÷‚ÔPu^XZ‘­ŒO*§Fži/„M¨Èô¿A Q8Md¿.Õí#.X5)I;A]zBñK·9¯0ù&Ás埘d'Äq¨°4"¨™È,ŒT‡j¤œÚBGR¾UŒ!\‹Rò`õ¢¼l9¸œ×H#CäGÒ�‚‚Ö8ò]EˆÁæ‘„Ñ9£FηQ¸CÔyìéƒ~m~´mVÂ$TúßÙHÅ¥^MÝãb²Ði­ht§*»’KΛÊ#.%‘ˆy’9Öÿد’\»q$x•¾À7˜œyoja÷¦ït IéÙ®ºAÁ€¿â‰’È""±æDLµ/:Xˆ[!ÅCº�¯øƒ Æ¡]•÷Ä�c}ZOÏg)²Ðt¾n-Žj;鿦®ñ6Í258-ͶòZã«S:4Sí£HiýHÇÖÐLSäVÚp;2«Õ{í™jÈüøg‘µ×ãMò­ù*|dmÛŒ¦n:š}ž�}Ý�á*›!“bs²ÝýÒÃ-÷V,D¡é¯høzÉœpꢠÉ^«Q&mØ‹9Yb•üЙáD"jŽì¤‰ÔžZÜ3OúvŽU§¾ˆL`¼4 ÂßÑãÌ¿ûÁOü øÌs>p¯ßäÚFšYyШޫ½hýËÞ.JM-vük�TfŒØôñãBOu|�$¾&5�‚¬a€{’ä}´4¶]ùÕþ�¾?4~Ls>�ÿ¨ô©a—œÕaØJûuÊ*Jö#ÿ�>bSõ®’¶N±º&�!é‹­{›Œ Ô ÈW­� iFýÔf5¿‘¡Tk¨ˆg¡•ë«úÈ=�ŘˌŽ)T¶fX&Õ˜–T”qð·VÙaU\©Ö_úa˜bTö6W‡|K•-´Gìôÿ]cÓ·Ç!~å�‘a<÷“ÑVOÀ©2)d6ý©èü™:å1Ë:ª}HŠfoh¤9k} Ç81šQ¯A"±Å¢—­IƧnj7cQõ—e·`ÏÑÒ1Zä5c²çL„ÅK t¦ô�oóÌ3dòa-ÅÿHµêdv±Õî6§C„† fdé‹�ŠZæÊkiGn`4¾m‚ZH®µnØY„ ÔÈ4¥B§�:20FÔ_º©ÍKNB¨#ÙVçVyªÇY�™¶Ä×r×¢e"x‡à&N†z ·«\¢s�’aÃÎ6òúITB*€”’Idª¢6B¥ÍÄNú`.£·]D½S¹ú´ùïæ—Î.ÜxI”9`å(uí1¾Zè´Á¦íxºÔÐ@?v§ ­¬IŠnD'Ãsøó5¿}úJäÒâ5õŒdÊk�h8ò\ØQ� �6+‘F M‘Jˆ1fiŒYÁÄU(1'—ÝlÔ¦˜‘¼p$ï`͈yëD.÷â*Z&•�¸ ïF6Õ`]Þ\6±7S5Ê +¿vÏ»Önöf‚ï¯øŠañ£œ9ð4«W¸;;³NÝ‘`5ù¡VS-¿?D(µKê"(Jn�)Ød^È-[¸˜CNèüûhòR´ŠýÏ{F—JÎG©d9|Ñh©ùÃòýîû!ñ ÕÐôwW÷âšOŸ"V¯uél¶È>óòüa/±œL3³»êQ£&x£f¼Gì”JêÍ(FœOì`."ñiÜée+�¤0N]ŽO]0ç£ù»ìyØ%ªª3/ Õ@/޲5Ø(”º /@å oSí«íÒp´Š¼Ëö¬éŒt6zßû NÁ¦pîüÖÕÅMÊôuìspFÖÈ–§¿h�D®„ga7M;_Tß�‹u+ÃD2§ +:ŽT§žòSžÿî6ȇ¼(‡P`�q(ßIßTø­.@}8�.¹1“ šjF!æ ¦�Q Q‚E$”Z§_ÀÀ$¸Íß±VŽËS,Ø¡)�Ÿ`Xy|±ŒÞ¯4žÈgQ06ã‡lrlj| ­F 9)cÏ­zE`0óøÊÔ´!#éJ’b8 <^Ý:ê:|¿Ç°’ÊxVYós}hTR(©•]9Œ/+, ø”ÀmyIjÛÒ¿*¯Gì¼¥½<ªç0X[Ëkô,‘ˆ ‘(Í«aP­hRÔ*­lchNÜ9Bùºh¯ž¢Hˆœàd6»*’^ƒ#Ýtb¬çu:i ¯ŽP:ÙqOníúG%p.ÙÀ¬ œüé½Ý –¡j:‘�ž:#NÝ´aÊK‚[ QÒ“NÚ�6qd°¡—›O‘¼�dñfS²gºX+®†úšIbF�ðkÒ[M¨¥?c 6/SßåéÎìEíÚFÆ¥g�~•_&XÚ�¥N…cv4϶£¾Y}¸¶†"K¢bt‚ÕDo-¯e%÷H„°jfAÐÓ¹_¢BM7e‚/3Ë�çÚ¸ÀÇÆbŸ¹™²ƒüÐ(ñÕ”yì­9 ªã&K· K«‹DHÍ×$”–Wº»¼îƒ„¾#�='NÜ¿ýý+Òz2é"“Á)€¬ŠMÀ�ccÅZ²;UÓ¹X5 ÍY´­ ÉØƒOÉ•¢JFaañY|Jæ–æ›TÃñOË­¤íÁ­ÍÆj®îX´§ezpÜîòÅ!óÈÍ@µª­D'MóEbê=Œ³, v‘”Ó-@ ìO‚P¥�™ÖP�-+G-?z +Öô°¶:2B° +ì÷ψÿ^ÍžCÓ1PþÜÙSÍLóy²-Ñ%³Î2’õ fÈckþŒA>œ–ÌÖïõõÑ —‚&Uû.G¼k!wñŠh¤eGËFO/ªtì¹hYèõ½?U4|zwõÊHßÇâÇr”.ÏE ð …ýœ�9H¼ýt#÷¹¿YD}E‡®x‰ÅøÕjGÁ“°\â" ÔðϺËyAk[“h-�j\ºŽPÔ4á¨M5Ñm +{Å#¡ª@*�âY•F …H;Ö{Ÿ6Ù0”\ÎSx¬}ä4S1ŵc�%âN½TsÀ4©/}üˆâ)´fux)‡”¯Û#f@³5ÿÈ5&“Ùß»6ý@"@¸POÍ&9'Z@�Ü7�бx§¥ÑÛë½Ç>ØU½4Ûò„rƒë2oç)껩DæI;c!ŸD齡©ÎCŽÁJÝ-P¼¡°É‘›3DƒlÈ•¨½‡,CÏk-Ò í­Ž��DLžà ‹z2ôzÛhdì>D ¡­↬§5à,®ñô^¥‘Ñ–‘áÂQâHœo{FŽvæ¸Ë%mHOÄPõËÅ4grØ×í±èkÉnŒpŒu—\À°?4o«éËãa/õ]›¼WBm·Ñi`‰æÖ„»5P3wy�¼75~h¨å÷ë2DE6¥˜˜<ú”xÁqÂÐfßPu«󦄆ì"ƒXéKUú%I]t‡4Å£Á`åYuæéð~n«o +8ÇSÍsü +ÏÐ7{f_#îe˜½»Li¹Ö–ÖcòÿÓ¤®Sv¤ ÚŽ3¡™Í£äë�IüûÏÿ¾ÿ÷C^Φ†ÁrtIéxÕE}Œ«lì¦æ¯ìù|Ñ_t‘4mHôO\GÕ3Á +çEùæ©×««kï…EóZéCK+ÜõÙ žgš¿‹ØõOÌÃ~®G@æ'FàÆçz”ÚüÄìŽÏõÓõóàñícçšN�8Hñk8|æ%óªXh?ã¼(t�c§cÈo]Úi®DÞ^b‡\ç�%}6—ýõ›kˆÂv�íˆøü-­Ç)òÕ'8É�…yÄÝ‹N¬…lMåïUÞ˜¼]XýŒ´¢ÀßQ:E+ËAqt/…l +Å?SÝaÍ› +"¶WJHá=ù�P3¾Uåðαì#.Ý.R + ö$hzÊ7då}ñ7ñ�Á7ê¿úÇ�®ôéßýC€*y™Co§“¤ÉD…+z{òðf¨ÒÔþºrU.�ö”»3Q¦³2Xá• �¸sÙõ„EgÚ-µ™§]w‡­Y§'­I]u)3{ä[Ã7�§ˆ“ä+¸Ì¤ÑOzK3£7lC'².À½u–™Ü+Uö\ dÅiìMüÁ{J)ç´°Íä~«çØ{Ž2ÃçìG60úÔ².-9LÀc¼×Á’aÙ-iWèÐG>oÊÚByÅ=æXÔUE ì>…\<ÊSì&ÀAnÚtçYûÿÙ.“$YnˆîûÿUÆy8�6ZH½éû›5ž;"3õU›*"Ɉ AÀ¿¡@Ém¨~г +%¨¯8\ÆrkRUyÁ26!Vîvõ¡Äk¯AÁÃÙ¯ v·¼2îŒÏ¨ï˜N„­%#¬"ç¡X¯Ç÷š.ˆ�_ÔÛ´ê‹�T_)š#A݇¤ß$UæÈ +¯˜Ìæ9útˆUm …³Óe¬žÓ|I +T ÅFKc8[U&±Vab˜XUJvHlÏgŒªŽäjD’{eäþ�1DâóÝ÷=ø}7 §Ã£x¸P~îGŸöõf]w“~ˆ/4YÉS´.q<,ø�º”zG¯íæu’¿T”ú�Ô¶¥ví•MÜ‘½ÌU�DÍ© š!`qoMË:"ݬ©î×/•ŸFÚþñØš*Þ|{¶åî²ßÒ.­!*õl 'X¯ÚÚy€p½|¤>¹‚û¥IÚf‰�Åøø²• +W-stñõîÇv]9x b‹ÿ®óÖIÓ2¤,|UÓï×WxåvÜÿnªYúÓ°ÑCÇš|m­ã"b¿ïîûg/þñ;Öw€”Ê }õ�õíëg`}QÎ"8H(*0 Uæj7&/æZI0g+Mv@ö”9á@œ�‡Òû�®ÌÛƒD">а¸yò¦–®^Ö§*혞kÇ5ô%„›ì—ýI4ûHw +kÆ^Š|î,K>ëWŠÖú´ t¢€[”‡ϸë+ºE«S·b �Ê™4—é€Ò£»z§v—:Ðe¹¼é6eâŒ*—z\·A:l4#%ÂŽª¬Æë¦n™kyÆî˜–QŠï.,6,a>"›q�ËÄ:q�-‡@«(0{5Ô†3UOþ\¥RBÅh|°�¥”- ©ÑCuá�ï¢j‘!�JÀh|¯–”\µBHýKú%‚«šª9$-gf 4Vƒ[l�áRÿ7È�O J¤@•M6ôª‡éÛ2‰6}ßt\qA�‡S«A+›ƒCznŒ×P]í`óÅÎ/KEN²‹Wê‡ +�I4ô³¬ˆ ÄK…p¶Ð± 'Úñõš¶…|S8¾η.Hn§MÄ(ö!‘áPw�‘eÙ Þl/ÿ*BzÒÍ‚Š �BÅ­‰·›<¤:וÙÔôUØ€^)úåËèlâV¹A|¿Ý +ø—/ ÌýÅPl…º¥�’:‡—µ»^@�ì$*«ZÃÒqÇ`ÀoÄ*-hÅÙ­QZ»îí]S;ز¶4®Ww2Oâ„¢#¿ 4ÀëÒ$tº½ïbfhf�¦º�€ü¾…ŽH6i a.eHqÈК€@Yn‰nHèÂë7"H·Á2œ›23üË[ݸ$0¢ ögT zbIµÕyÂN}ï#aÈlÒ\c?Ktxo: ˜I‡°ŒÌ‘º`?Ãþ-|}‚q"š#Ñ‹5³rµ˜k-+ÖYwP»‰MURwU7AÊ âÑCC$Ÿ‰-5Ií_@eH¯•lìç×ÿþøïgcŒ°aR€¥àû»1¢#j˜H(¼¹£¯Þ\öúß^q\Ç,֤ϊ5¬·ž7d,��ãg*ýÇ;ÛÒ|þxþPžçÞ‡¬œã_ÛA +e`1®HÁWÇËÀ“o”$¸Ö;úó?¤r]ã©ÇÕÈðÓjÓ×òhÝ„‡ ­‰h–¶´q#É ½÷µ$o´šçC¥Ÿë£×g<¬É_ë§ ôi—ÏõKá„»§}…q�â×HN{8¤CI†64ïGX5;„¤Ê#Ÿ{…U»}³XFQÿý½Ô|¢š�ä•þŽéçĺè]0}“ü÷ /è¯ø¤›ÒGïÄE fW4%/oç6¤õ7ªüB±K]uµî€ŒìƆô¤ß±C5Õ� Pb;`aÙ~Ä­ts@F0V�¢Øc]Ý¢õv”ƒV›�„YPîuçW{J¹!íb«tÁVbV—¹S +E;hã éýГ+m#�µþ�º±;°¬�˜«n�"5×oZ£]»éŽ[“ª)M@º¥ð]õ0Zœ"í'…1-}»ðr••¡.ËÈW ¯ ¦D™.Y×)¢ýÂC°n~˜ÔŸ¨EÍÕŒ¸U•Û–æ6F¨,”B&(çý:,%›þ“DP†W"n?f ¼B çÈŸ˜Cbíh¢—%•°%p†Ä�E)ÞGR2.J X~Ü|4iÄ Ï¿)ÁÖkëw†€ºåËRÔWrÖñË^”â1¨ß>_Q•N×ZÅMégQR°9A*Œê®¬�üLýùV˸9®ßͬëE‡ß›w92¦x¢O'L'¨[®óUtxr £Úî*•@éPé¯%DrbúdÂnµLq´í{›×‚­/(7é°µü¥"=O�¡@ãù(•��ä'/,‘®«]U•£ë¬jâú.‘èÐ4Z-Fë *uEd«'z÷½²µ¨¯…;ûi�Q¬ÊµÊ¬P'€š–d®ƒÕý]™_ñÚ%Õ„ô;wQÓO/9Šœ˜0…]‰ÅpNªÇ»N’á1ã*}ŽHm�©Þv`A•”‰7’ôní¾ó‘™Õ,ÈC8ÕùÌqÖ:÷]…•l J€hE[m‹ýNÄ(¼5¶¼àtâ}ofÙ�Ýç;U¢i|CäØÓ5}ÂuµTgÉÇpf±=:£îwÈOÞŒ~´g¥ÆMŽŽL­Xe½ ;žÀ�Öçº) jz¶E1Àv¢˜eÁ1òI ZI³ѲÈ"¤–u$e‹*�‚8RëBÆâ +ôâ O‚‰´± ¦Š`†Œ„‡À3Ù™Uª×òêÁP>2J]P´‘z:‰pÌ¢QËPðy×!k&Ë”å;§6qJ'�¹üYêå6ƒ_ͬ_2Y„ЉàÊŠ!Vú\ü¥ê—^³ð¤„�C!ˆU‘C}3ÅÕ„;Ô‰¬fo,*ú>n¾8•”é¦ÔTorl=íÀs¼ñPÉiU(ÞW“°Ëã1JàR�H 2÷;,ÄÅ1¥INƒi6쑊œä rê’Q÷â@fŽ™!zŽýXnÝËØ|Àúâw¾ÓŒW`ÂE€§ ±7Ât*¦CÄä¹ý¼ŠOõe>fˆ�bÎ��´¿»“¦É•ÐÀ°ÍÓÉ£½ƒØß?`:Xþê€ó??à<0?°ó€ü÷t°š@\Òþ7÷ýößÞœu(™Ç¸b³QáÀ @C¯Ë?ÿæMø²2Ä8^½ôY]¤2Ðxí¯ä ÉøùŧÈÙliõëã@Ìc _e|m5/r*Òù»Ÿ.Ÿ~ü%]¾ürùýO—?kYƒzÃè“®z<-õé�?Úåç/xþËŸ>ýá×tùá/þ!î +âtž[‘ˆüC†CBIì!ƒþ‡L„†­ØT¶‡dÑ*%æWCŸïCÖ†dïãP…è¦ÓÜkZ¾.ŠïØÏx}ùjˆó,(o@ÊÃrÍ=î3Y¦‡š÷µŽ�ئ~ú|z8È1´Ï¿×ºg(ö³^_¾"úÝowDMÕ‹KíëCIʃ…e«RÕ0¿ËÕ›_ý7ÑÉ =á à <—öhtm•ëèëDÒ``°ýÕ�ûõBŽÌG”Mþ=·æ‘G  ¼a6H>“gM«ìøÕO©gÞ‡zph™|Ìa¬óãqlæóŽ}«1ÕÉí¼•¶ìi´ô!›Ô™@Ìsê052¶úÿgêî<ÐáÙ2ÌXp¨•Ív¤�¾vò䨸”maO]:*Ëátœ‰DmÂéXªÎ�ø¨Éë4ÌRä09Œ~;à¨(c€Ùùl ï¶ûZãFÊŠ�ìíù±Äp»Ø¸!f¨¸dÈäÀï`|Eì*GÆš.*ãÒjAöTâì­¡Gaz›RzÂ9«N§;í� ؈êŠÓcDöêÞ�ÏRk"ÀZ³3µèµË¹£Â­ÓmøDQ#àË2>h]!t±r““…Phw…Õ, î'kÚ`£ší=§J­§Ù½DñÌÜ®Ñ`ß‹ _)oÒPn_~¦�>ýÈSsÕùhänå•?¢ò?»]¹Ÿ"?üåölôžÒú„’óܳÎy¯÷*ðÏíaCúMÞ&êjßg{ÑçQ?yówí È»÷'^ï·Í÷\ ô{ì7 >·ÊÜÜØ©s_ãMªûRÉ·ûˆ¯ë’"Ôª�c:ˆ$C¾»|¨ŽûP6ÿ8Vö~m¥Z©¤ÄI'Øê3j‡01—oÃA>–DØ^M–z/ŸFþ¶Ý�úƒÏÏ—–Lœ†Î_p/÷?^Ãqá0ÛÝ%iŸý,£Þ�ùLë=ɋރ^œkd].˜-ßË�ÛTx—ãùm«jHb}f£ Êùæ– Ⱦˆb~—öù±Žó–W#¾,}0†ubt DÞàЕRénì]}v#^ö)©ó1œAÈ…Gj`ïòÛãöG�µ)/•¿Êò·óŠJk”¬Å=z¡Æ‰”'\:ªO÷1!þõ5—8‘ªâ³dMñÍíÎVŸq«YÝÔ’f¾ÇüvÜçÚ¤ã�Tú%³ßG_G'ìÈûo—�²£üåÿc+]¡Öâb«¹¬~÷¹ò¶œ+bLA4äh´bFËm¼3Ýýºzä8ŠÊ{2i1hPIº±A-¬ºyfÔÆ"ç¦q�YÕ¦Ö• ]­æ~ ^$Õj–ÔõãD_=ÌGé£/…+Y×±¶ÝxÀsÂý³b¡452 WáãO–äïR^�|b-?­F©‘C*,òwš>Rd¡Þ‹q‰J]ÓBŠ2Bp<�“ ï::mÞ.3ñ̓$_¨Ìàã-z3®) �´HëêEí„°úÅãâÑÎ]0³Ã$ky.ì˜,Øy~/ v»H"€GvØ3;lr¼Þn9Ø�µm8àÈâ‡S¶®°hMj¤®—W³Âä!Ü�1;NOx¤õidô침[aû xØáÜéBÁ?îŠåp�x*áM½ZÒgŦÝßÖ·hDár&}-•í=$fŒÁˆH|`6\ ÞÙ ‡”³pÃBn¿²²šÊgò¼ Ýw€˜OáF@‡r¿Ž�ª?…ªðžûVæ”öM¹¶Äß¾JœçZ¯¦ÿ�ÚJ¹j½#è¼\Ûµ«7?p\¡}¤w'� ÕÅŠ‘}„jR¶“m{`cy¬÷8Ç#Åz}ßc=!ñ;ˆö€n×U»egÆsõ° –ÇáPVþ†éÐW'3PÝ�tç5-"íh¹¾•¬Ïº®f âçZÍoX2×ßLQl’2ÿ#õqX?S_‰¯¯œ¯ÇùÅæ|ªaÁ2Èý_ÍÚú»Y+ý³æÄS\:§Œ¸š:]¡ßJúbXáÿŸ3Ô^ÔÅ5pþðÖ>žû‚4BC½Ñdž +Ÿ‚FB»¨¯¸jïô®Û)=ž{ަLÂDÝÝ)Øâʼә¨�÷œu°ÚUc¨^£[ê;�Ω—k÷08$Õb¨W€+îa–�©=ÞN)·¾ê{4Õ�Z'�w¾³—çºà|ØmæhË¥ŠåhïôÎòóŒü̶ª¨zgñ„¢Ò>›‹]ZxÀHLÖ Ì »gïÏìg Ôí‹¡ü—`¦„,î«g¶¨Þæ3àìÌžóNì�ô¸³»�b ¬xÖ]\�nèéƒLÖ@ë>**}~ÑfGà³ùõ:/‰ç?¶.Þc´€S,ªÚÍ+©]k\N �w:©�pêù]-GŸÈµ]p>'³ñJE+¡9Àw¶þ}EÐ{¶B'êž1´À¢OM2Ad\\å^TÄ48Û¿Sªä°O1íÔ¯0/Ó5€p"Iv~‡†ð=ÆTF%å¼PQ+\„ÿ·¿(¸ü\Û~ÁÓ•M‚ݹDo—ŒØ1?m U#‘ (´;„ó<ÑÿÀ¢'•®¸õŒê_Ø�/ƒ&ñbúÈAIòq·mî¶ê`tÇ" :Ô^Ôðp Õ«gU«ynJzålyâ@Àj  » Ga¢Â +,Çb`ûb¸¨Ã’ÝðÑ! Ü’Š»ÖŠ‘â*„ÿ±]&9’äFÝ×)êÑàìäy h‘ÒBº? ÿ¾#²« T†¹;'£ÙaÄð ñÃg­cßXSøãDãÿ”¥ŠØ“cŘX�Påêâ*ı1¾Í3Øå—åðöˆfaU;ˆ¾ +qi;Šm,j/α⢥6å”5TŸ h\Ý |¼¤âƱ4o\YÃþUïA1Ü"Z/®=‘í£&#Îèi? —c<qsã(nÓñU mxqžx€Ú²z…að½,5YÅ$ô7áÄË�Ýšå5±o[1wÙí =@9žžrûкåXa››Êdy $:Ž®Y´hóDÜÉ‚b·˜DÊV3)æ�¡Ä1®Á_èݱ٧³ŽûŒSˆ/'ô$Xr_*†AjºŠ*Æ%AÍqÙú…‡áÁñ”#øK07=—Dx‹;ˆ ¯ºCtÓ˜ÁUGGÝàiãî¨U?Àñ)Tw8Ú3"ß z1NPTKìxfVʱÆSl?X (â0D­ü•ý[�¡¬‰[õm;^F4ާš¤OÙpÄ}{†á4Îæ-ŒÐUU2q¯'sxNq®è=ƒ8–ÜÒyÆfíï€ä>xÓƒ!) û&u"X\ïÇf©ì¼Ö 'B¥þµãö ãÄ[…W=¾÷�ÿQ­ÌùÑR*Çö\‹Æƒ´GÒ„©¾òÁg +×GTj±~Ó”•ž> ¿–åmhTªFɽ6KÑ"—>CSGc§B¦‚ÚJEÍKÌùúú!ì8Šà +køÂTèÂ=¼Âú|>àÜ®%ÀÔV#`Þ>¢â¿‚-Âb¤÷L²]YéO@óp´žQPN>ÂØ,£rÚ�Yì8L‘H +ä6±w°Œê�„×êîõôaýÖ‰²_ûN¹6‡ª´f;–ίùEØD8ÂU•žQ3�·£úóÃaíj¥]®²=ëÕêŠ SÛ™Ñî5nt€‚êßáªD¦©ý [Kç�õøøŒ®üŸ¦1ýµh‹o>ƒŠ0Ìk:°¶Q1¿ü¡ÖFÈæ|.¡P‚btƶ ùÛ¯´éÉ@Wž'È(ì'ëæƒr‡ýö ÇÊVâf¹(±oA3ѱ*M‹GɃþ�¿€Ð¸×ÏÚ¦¬÷ø Ëu•-å79ÐãÆ{|†.Õ¨D\rÔw/È¿_=àS 4Õ…@­ÕîûH¯�l„‚ÅTuŒ¡·u b¹”Tò£ÚÂ!èë0$ lú÷ä÷×ÉS戯4d@qí3û°FÊ¥›}WÉ3£ƒhûß?bh†ËKj5”µdoE^>fîVź-ªMSî_û㢆©¶ŠàĉQ�æ£Î‹Ò©2©Ó§ßöaÂ)¨@'YKjÑ'Û¢ñF¨¯5ããx€¸j~? !Ýõ3!Ïàd|ma(^Ðwõç�õ‘PW�ȱfž–SQÉÇpO¾ü¤ZK¨A¢�òEùx gð²Á50'x—Ùq BÌ•Êû—¶f°»±9¡¨ 2ZлšdphÌBõ"Ï ©¢œ®bu=€wòí3èùv©Ã½CGЛµ“/tAu[ ™\´5Ñ×ðB¢6_œt~I*ö9'ô^uOí²Øo¥þ, �ÉñÕŽÃþ¦/¤C8¨Œ¢^Ë•X@}qÌ� èHÓIjòM«bœïj—Å5Ï"ÙÚ)ÍË’qi*2ÀZ{ª'®³ƒ:Á¬quÝw¡“§ÝRM¯nΤHÉl3Gª>Ø1HÆ)©Ûý’+g¿$^©8—Ý"Íx›Z=”˜¹¦æFÅ(�ÉÓZ\ÅJ�/“HœìôÖ›êw\W9í�te ‚ah#GTÞí s¶|tÊù<Á¥ç6÷»éÓfL]H÷˜vKáOÍ¥‰ÿû—¾ú€ÝÔ�È +)ŽH Ÿ÷;ecP,¾¤ÉHD§íw�ꉊÙV:ÿýñT#W-3ÁñaV-ޏ Ázóy’…{†³ü�s]Œ”t(‘N‘¯c—bíñ#þ:HªðÖd Rî–�Ö†\Ñ£5ßã ©ö¸šð�î‡íB*Ö&ÇZ&´ȪNÒЙÑxí1<#â­rùsUêCIzKO¡o´gŸÆ{©Š±¸ÿµ­oûxÙúLo“Œª’݋۾ ¿Y¨‹š ‡Ø`Ò™9&¤�«þPJÈõ²R¸ù½nÆtü†Læø£¯ÏZZ~¶ŒÂ(¹=…,RÈhG®µÐÖÊ: À°©¬€’ØÁYã[Ôè‹bºҼì¼p´´Î)™žýƒê†PëôÈ¡ªä¨›jÖÎTЖ{]A5buÝO Ÿ«³ö7“ÓóWl®À€ÕH»” ©Ð™{‰š"ì¾w4±µ©:C¿ÍêtŸeœÛ+¯Ç˜#„/+wë¯,p¢ìäñqù|á'5guU«Â1®)@°)tŸr_ÃS”à6:\'ˆ‡bº¼QË+¹±ì ©KClO‘™•&‚ñd ŠêF[•š�ËÙª8ÝÂ9'íÎ�Fë17ÕíƒSgÉTn… ‘ia®R`�F W$¾Ìq‡caTF ½¢>"ˆ�X×ø¥ÎZwW“+&€Pa­$AUB£/ßÐÕâÉ6Åfñö¤á¹•Ýåõ9Ž&m�c5ÚºÏ#0ó=ÚùnÚïJŒú:ie>˜@=sXÂy!M`›øjÎßEb¾ž”€’Høð°m³8;qD˜ÑWÈ?6AuÉ= +7Qu-ä±ö÷æ3µE!¨\Ì·:/®¬°Þï,ÁÜz5·„úN)UÄ®ÎûÕªé*Ŭ‰ØÜ£l•Ý)i�T÷àľhï1B£ K,#Vi §‹Ö{ìËtEšD•°­kLåf§úœwt{ýÆh?f Á±ÝYUdcî�ì�ú;…Þ`â™* Œ-ª‡šKÊ{¯ÎuœI]öÌã*xL‘ $sǤ’ž·¶|KKcQ}ËÛ¨Äó +�þž0q"W£®Ô(¹AÌXä‘«ÝíV½Ô{´×¯ç~9-ã¦åŠ£ÌÙ;üÀg>ˆŒßÑq¯_®ê®íkÌmÅíæŽïÅßã¸&ò¤®•Ì­¢LQXfïz$hÓd*ÜÈœˆµ, øõؾÿ“Û´¥º§tj@I +€|ÐË=ŒS}µÁ'U=_­S^)ÔÞzuÛ/çó^ó®Ð–{ð´òVƒd½ÚTMœ,Zžàñš–+ +Š˜¯ö!´QBèébÿ€Ž[BúUºC¤h •·KóF¡’â[Ç¡Ã<4,IÙ!K >T÷|R?aÛ,£‚ª¤qzHˆMÏ ¦VŠãGE‹êïÁðMŒcS0C +ߦA�NK1\m×oDºßv$.#Cn©ƒê÷{È{Ó‚6Ò› 6®]¦i ¦³$:ªê~8Ž’úúñ/#"õ×:F +E?ÿ÷ç¾�䲉=–:µS0$_o{ËîŒw…˜¢Sù±âkyÇÝÛáì§Þ@ÿŸ'ó¢P•S¬KUSÄ”)?Ü4,'“»ô.ð^ú¶ÜÚŒjÈyî� ³÷|ˆ ç.Æ~vn#~ßF›�!qª˜í8r*bå·ÜÓE9­bF˦ë¿qO±ÒR/JKtw÷›¼f#+âTgX­G�Ãñ §ÔV×Û ó:Éo»tÚ·‰AàUt††øúÍFVõ‘h¡÷·mª‰z@ò¨)a v¨ÑLù@Ý%„ýz?PK¶öf±•VB»‹¶‹ËZªk™Œá†Ï&Alä1=[ìß~©Ýw’ëÑ!Îß7�Ãmàf±+Ýp¢[m"i4½K8S‚Œ”ªËe¹J¨ÑBé!Ï +WœÖ}âÁŽ;,O ß¡ž[`Ë'adôX=ÀtÞÀ¢’vÅ@1uJå'™€_b<—àÍ– fGð`ÍÖÖÂy–K´ù8Ž(N €ûÖkœ®ÝxÆa`UÂ}‘³ÌXxôßKŒ\j�ØÂˆÆø¶<…ñSñÊs‚”ûÛ1ùfDOËZCg´<ñ¾Ë亖‰¡®ÈÕIΤOíÿºp¦¤?Toô&gF ðN)(÷«öKÿãÞÌ"c„OÉ ÖšU pgÜy�ŠfÏ.6õƒÛ³‹C* +÷rqŒo…´¶÷ÿxn©_‘0ETx¤Ö”⬒‘¤Aå¹rÕhzkB£Ý<²=£ÅÂWäP²`ó+ÅWæk¹ZÿSÓÒ !á†ES%…WÍǵX¾ÛBõîå> +ÁÜÐ×ÙCV@¾r;‚ýÉû)Æën)ÎOZ¯-<ýv÷•EZÅ÷,ìkUÃ9©þ©r¸}½ +®»ÉA”ÁˆTËñ©ZdD#Ó3bòø�‡ÈŒ«f ½DÍ¢‹Çnâ€úÏ +÷«@Nr›–•§eÄÈ’ÇÊw»X�\¬Ôk­Ž¼gqn=V F[~v±YMd¶ÇKtx£¸¥7zܤ%–™AØw.¼Šé¿+0æþ?àµ"†ØLG˜t{IZ¨…Òã"ª·ËaJR¯k³O¾·Ä‡ZЧö�`D¸»ÂÃÏ+Uæþù3]}�}•¬Æ§fµ³2ûŒ'ÙH`áî#ϤRÇ-æ{íãŽØÔ´n@892]0»r°Ô¯le€ßü4õBÕ=ÎN4ëgß7Eæ«Õ²üRË賋4ÍK ++6+ ÷�{ÏÇ锌ïî‘ï“TÚ=ã‘é-K{ÐÞ†b¡›|…ëÊ '+ De(ãia�-ì=Ž7vD)O»#�R•ã1¥jÂË ÞH8”ªÃÆ©¥ïŒà”‚Ž:j7O3Šõ„I)Vf”›ë;õ ì)O(e`´º1‘žNZvÖ8'=*s‘ËX—蜨´xj¡f€÷ÅýâsqHS-šҖfÁQ�ï&)âÐî6g:ô»Çu÷ÔwÈv·~Œžï ¾ôìÈžˆ ÈxÞ“Mª¡ôt òPéD˸Y Y?ãØÏm‘Ç5n™ S"Àf�Ç5öŽXYÓJf`2Ãðk +×à[BËN‰ØPRJl¨‘l†/Vc¯Øln©³}«Ñv¥Áœ\½ ˜ÅbxÄVû¾òsþC/ÿ_Ê‹�(¹Nu=h͇ êÄܶƒ¬F3ÁM‚7 Np¤÷¨ñ›+°ÇpàŸ¦Zf ;ÞƒëUjf/ázž)�Pf¶‡V2·>w/“ ‡î‘RºÿØT­Ñ�žâw*á9•�3ü™Ò d‘RR)ÚWl*ºJ0PïT§>m>—k|ªŸ®#¸½<¤K¼�`‘)‚s^oçÐP½ÝL«¬½¹ÀI²¦â†]u}’®Ž)ŠG·"î.·¼b¼à;ïŒ`Uy¡@Il�P© ûZOÎIñ®Ì Eâ–Ý¢#,é‘QÃØ%å•úÒ' oyÜ¢DJôf¿¸î”+kÅF†ô+Ü_P7—Dmpù?²: X"Eþ¯–éËJ}G¾â^-Ê—×ß|ÍW2”I¥GÿæÊ꯮¬}üéÊôL4¥tìˆf*y &=“œßX#¶òŒ°x{”‡—î8ŸéòâÇïð­ò~«œÇjǰðµæJixŒ0Øýþˆn•¥'ï®Üˆ(t®oS Œ:ƒ­' ƒÏ)oï­î©žï[Q#è¤v¡‰cüÔ�Õ\zÕbv +T@Q/¿&Ÿ“în0|˜|´Û}(kŠEêíÞÓQüûz¬‹šr¦¸îßÞíáóq¸ â Uåê=wÑuQôöÛ½tÊs·Ž�€_¨Dl_³?ZH ÙK·©±x†�¯-¤IÞŒo{æû:|ï£]XØÛxO*‹ëÕǾ³£Qê?óîÊqüÁ~{×Îäçùþè +Âå'“2íÀ�OÃ,4„%»R±E§›žZòö©o÷ú¸aŸ|WáÔ -ªaÍÞ½«m¢ÔÞP{.L~êíΉÙàW÷¢ÔAû;Âç|ôwkŠŒNwXÅ݉C¾Ïå›P�WFÛjÑÀpï�çíåˆÚ÷G^°4rØQ©«p§£Ý¡yÄ%�m5ÞŠ&<Md”¹>â~βÔS¥ë²§<Çᥤ'HŸ¦ë]U $g´¥�òFTŹ´’þTÇqÎI•O=×¾ª»vt´šs]¸² ÍIhYÊ‚Ô-aÞ³~uV­ø¡²AÍ#•qjÕaNú ++tV/ª|í|%}»d¥Pk·of²°;”h� × à#(‘Î)áê--ªÐFÙ XžmÊŸN +ÿ%ëvdÔÞ.Pì”à�ÊBÍ×µ§½žê6‚qCÿEˆ'ØÃY¸½7ºòÆÌ:1{˜Ö¤áúrµä—ÄÄî¨ËÝÍ Bø£Ý�ýŠš¼¬ A¼mŠ@P§J)¹ºÑ¯ÉM��””æðšÕá{âà¶n]âVè8�…[«Ÿ[”=˜©Rì…†ˆ©Ÿ¾d¾2ûç:N…<œ/„[9v˜ê+L}‘ª‡Öv0 á×6Éê5’¿ hÌ„¦**oÕ�ªw¿bYÖ´y&p×4‰i'Ä�d…½Ë¼Ê®Mß�Eb WÎ…ÐäÂáÌãz*:f!홵ymàLoqÛm ².¤üòzÀqa$”Šr’TÍ*ŽÔò¤º-îF»®Ç’„˜R°+‚[Ù†OPhx“ B2`§²=)sùø‚ãqjLbÑKsw“BÑAÖ|ã˜:wrn(‚Wü�ÔôàMñbÝ2RÄ�û{j+€«]Зvdv¿åëDÄÿv&’cWû¿ÊHhïoå$±7Snƒfç|ÿûn¯³Ü•‡8Êõ%µŒŽ¼T¶økħ3òÕ¦¿);ÉÇöì�èÚ=|Ë^5%€®,FÇSQ"šÅt®/Õâȉ+ºW Ò•äRòîÉ>�™½Ø&*µ?"ŽãTñ}�ö ªg°\<„ÞƒŽÃ@¬;â?TGq­ñ&íªU;…D×债E‘O½•;$~+Ö ¯$‚i6qø(…÷Ó^—…_{™\±{Ã�áÝæëÝÊõbÕ°<þ†§À§•×fÁÈaHŽ›T Ÿ~­¦þïwa®9)ð wÇ_ím#‘X´Ê› *ÝOE¯¨Üÿê±@Ïüó7‘Õö�/í±ä¾Ã/²8¿ÿëÃ5<ŒûmÂïy³ðÅÏõ·Sôª§Ø�SÓÆÏCŒˆ)ED³Z”ƨüòô3Iû~!C8÷áó:7ýÏâ$=î{ü…6·¬|ñsGýízLTP¥½¤}ê/�¿D=äýH6¦á³×wÝW'_HÈfih®>˜Cö§¼<Ãoô�Àh,'ÊZ°BñV»½Ä_·j#… *Ò{…`ÿ±Ó–ŠF¥È¾6LR%ªWœ!¤`b¹ùTÆÝÎâ³R³N(qGD;¶ …ù°;ñ –ìk—dLÄ�å˜¿ÛØï{.Ûõ×Ýöѵ£Çok%®ü9¦¿I ©ÞxI�ñ­…ÿVÔãw`5eíra÷îu½-dº/�ü-ë:�z½‚tY*Riv«n1]‹È»š¨„w'Ò Ú!glÄÔBiçþFȼz„´›c}[ÿ$úŸ‘U}áŠ%¨ˆú^#[xMÙ²ùsËÈizÏ”íÞÎÚÙT¢�½ÔÛ`O¹#Âù]ÁV3úå͡Ⱥ -Uª¯ sï{È™B¯ )=3©ÂïÔs&¨²ãõfqÍøÕR{¦_ä±àZëîËïV±·9¢uµp¯wç.ØèÑ,ê%ÆgfŠË„÷/åe“#ÇŽÄà½Oá t#õ/�g6³ð»ÿvø‘ªê¶ÇÀ``À]Ì””’"‚A®Üê!äÂóÜö;oIXÙò„� »I!*�¦óì¸ füq*�ˆ,CV¬P“ð虑©؟í OYUÅù^¸Aa¿¯û=ó¼g:¾I ÇÃØnhn§Õ“YòE´xŸkRu_³*¼úU5cg�e¢�cLx§ùª�¬¸×|w‘ápºE6´[ÂíÂR>Üóñ¬ ñVŸ4Iª§'×,Üž›/w†ŠpÞ'Ûvɧb#°'øR€!¹ 'Ó{jîÛÆ¥[÷‚k½3æÊã�&æ»ßàâZ·1žê‹j*êšÄ$]À}ït¦QŒÏíT5�G‚²]±ç-¼ï +6ŸM&Ãß(3TÅ#kp>Á™ù Ë'¸wZ#”ÆxQ)É·þ^áócl–ñ(wÆrjÒ²™A‘ãZ Ç}Ýf&(/Fª«ûز+3ì±:ŽcS“ždü„g:AÍŠóTã1Ö»Z3þÜonز£ü¦Ëó!úÂV˜Â5ÌÔ9NMAûhÊྃ1V.ð\lGÅ—[òÝ#Ö ¨Á§„"vw¸;_Ï _¥p™3³Ó +0wfô'O\£¤ñÖ'3&º ¼ö�±GxÆL&?âƒ÷H ÁÚƒWÍÁCH<ØïÚ¤u[ƒk�|žu' 罞Ì,éü"—�f�W�ï2~y #ä ¾�à +îòEt™àæË“qG˜ „³#äEà¾Γ��à™=t‹§™Ðz©§g½¸´xDi?ËÅ×oÍ]ï Q?YÎá•ûÎÀ'¯ug´œáp‚ ¤šrɽ]¼÷�Ðiùð·C=ÌSÀ ˆ××ú:Ÿ„_WÎ9zF´z±#¼^Ÿ˜%#†oR¸gÄÌž¦C §œ×„•§|“¥àó ®w¬óD½ùw¹ºn€­×þoñ©¶®|Óo ·ÇR +øt›´búCŠ×몪ñ:qU+¨ÛÞav ŸëÕïvïçI°Û½à'±†œïèödí¶G|_^·vâ ‡a=;ÃïǞǖÑkQ~öª7/ØC˜´ŠæŽùYòºYˆEÖ&–ëîD–áPh4*'¥ÖJ§q_š÷z`MÛ|ÊêËì-/{øm¦lè´\†bK´Çç£S�4XìYÕ�h`} ,±‡ëj\P&T+Ož<–8ç°†X…WÖ›�Z ƒ´~±ÎØQxë.z˜¹kÖíÞý/c»(^ød,U è9šñµÕªf/9F‚Š€9áà§6h¾¾N+¬a�N ¤�n©2ýU‰\�{,óD4²}¬›kt”…$”È +ƒ¸@~# «cµU‰"# ¡’�ÛâH˜zÒ¾E_#`èð¨ìs‡ve²ô~Jˆ^�ý +*Ê ©¥žeÅVºäfe"0€`´ÊÈ=MB[•­|—J"èBSU×£ô…¨ÕeÆêÑ-[�]…×ÓÇ…”|ýó^Õ°êiÀ{XæJA°B0‹@q°6õËØMldoÍ•»™v†›cwŒ2ZÊ­‡˜‚æÑLãŽm*�W(T”9´,.AÁÐ7ÇûºªÝƒX  +Á„¶ØÞè|OöPìtz2t'óÅÃ4ØýØ隺C¶dð~Ò°õÍuLÓ»úXÛX�=BXœ~GmÐô3§"´û9„l)üÎ×± KA÷"¤$#—²‰o,¿ëÓ¿) ¡ê]àŒœ®Áé]Ãä½ÒšZñ•ã|Y +ãâmõÛî¿+ºs%×Tµ6tHY¡©QÛ¿šÂ°àŒÃ›lßÊÇTp:o ÞHˆmoË+Æê×cÌÐeƒ±Ã4“xBC‚ˆ^ÕôCgS` +0‰|Eb +—Á¢­3,¬Ü:ÑÌl®ß±ªi eŒÇv³êNîLŠ•-Œ�péŒ�ÐÛlN¡fЧÁ̲*&Ôªkâû~Â\½±Êr¨oh!±&RŠƒ¹qÏâ)tõV±;ÆËNË37Ý}Bî|äz°¡ø æŠilû�킪2CqrnÕ¦üªš—:—r�¤-Œb2?îxŒ¥Ûw÷"Ä-"í[ê°Ok*i‡g¿•Ea×_BC +¯ö·“Ѓë¤”®.¹^ª¥R,ó%j*ù³¿t²ÚYëÛv'Ñl;/?õÐûó&ó~[î½h>øÜßmÿþ´?U´¶¦¢YåƒzQê¿Ïò�ú$/œpÏã,©­�{ËÏã ¡•7ú¬gêÎm+[£Óx¿ÐÎZe†:\*5Ë¡ƒ)7‚}ñô·~½ êpP¿Í¼%–iÈGº¾Æ]¨ÕÓòT.‡2@>÷.ÎýĶfùçÇú ‹èÔÊ8È}ðÑNN ¦2�¿0'ráÝ5z І VOn¸àXpTT§,'jsð†f=MÅqþ×µ_òz`[ïM2f¾Á¼÷þï?Ó²”´îV–N\0¿¥å}�¢Ðm­á‹¡ ž~Þ—.d²Æ@k|g™êÊy£i³Bç .Úµøã×�‡IXiBðç$ N5Ú¥Ûæra¼ìô¯OòŽ~E_¾‹›€yÖÏ7½´[�Ïå÷l`x±¾žd‹¿¾4éÒa&{¤\·Y©èéØÃÅv «Ù2Ú¹4ï\�8P>©üð©0¶ã�^g|½ŒàÐb=Iõ~ ³÷QþÊJ-+På�Øšû�aDž�;×ùXXàéBÚÖi�G‹»¨lßå !…1†â{,üX�yµ-S¡ê†ž0âçYA³û™‘Õ#U{O(Xæ—«.ü¸#Ö]q0��ô@DŒíݺâɨ ;&¡±ðwkeb· Ôê'¸=Å,ÐïèŠÙúÛåŽeÉ�ÄP_«¨ ¼>üÖ3ŽŒÖþÝÁX¥6äT½Èd2™dp"¨ ?+¯‰&jküi*Á…ÿï“è„A >PÙ“¬´YÅ|M…( + +£+DÝôŒÈfl*s¬Š!ò®å¦ �ý,ØEvâ¬KÍ:J‰ïÞÃ3=@G2cãÕyBˆª(Ü·9\V �÷øÔ ÉÒ’ûCÇ¡ðÒæ*l–¡Š|fö–êÜ;³+Ó¾€.åxíÓMœ/hŸ)7o°²B§ +½­Dä1lGž“9Ò£Œ= Dn*:|aëÐNG5o(²ï¢˜úB[Ü5ÞŽQÂuŸfò´ô¥&Na]HÊéBƒ´”cæýCÔ£œÊ1c�ÂúmRø(>-%ò~fJÀÞ�äÕ”À½Ï ö—?êYƒ;ÆFÓc,×ÏëóGœ¥K Hå™û�ÖH§0Ÿ'•�ò¾=÷ +y]I]ìý=<[ûS tAƒV<‡›ÇN¾¾íÏ=j¥þ2Ûšž(‘âÕ3½­LCÆÞJöOæzî£{Èàx¡DÁ¹ãÄå[B_<<:ÇøVÔ÷Œ¸zéó©³_Î8«sùeS¦è„”‹ùåºzõ’g-!4X±� _ÏV`h “Ãw³'m¸B«�<씬ížxÚpn,žØÑJè|œ~Ûˆ`;‰ûÚ˜íM4t.ê {EÓö…9ÜšwG¸„ŸK‹JÁ%€ÛgW+ZÏ�¤L�{x,G9ÒgظŽb̵C�«Þ[Õ¹)öcU>_ÔSÞ²7Që™õŒ=31æ /Å×õùÍÍ€‰C¡w·'ê÷¥x³¯}ž¸ÓJ$Ò9˸ír±ã¬�ÓVÇQ¢e¢ktÝyîÚ%Aú˜Ž,ÚSaT„“®‰\#¸€°3IæiÓq#ÜÝ9B•}y²÷püÅš‘�z–Ћ³�>'ó®y=vՌ݆~,ÎÑâÉùÞyJæ-+ÚÞ'\ø‘¦kš_ǧ/dÿÀhUK·Øä÷鬦s¸´zÅkc‰æí¢IŠg…RkSD‹@(ØîbHÒ:^|ÉR›R°ˆ,䊺«¹Žq{X�Px¥ ¡²—n´&�5íé<æÛÆRt`µÓ„tê·»÷'•í<P‚Õä—aA÷ÎöàÂ6†²žú¾´–JðPšŽ•öh:ˆpâ‚dèc——$”çnt·ÔgÖŒži`èÆþᕺkl`ÝhPQj›€žJDÍe‘ÚÙ3_{mÍÖ íÁQY —Ç…–¼åÞ±¸'�:�òz‰:²þÚ‚ýƒ¼Ö@ׯaGƒÑ½Z/ëW×ñ°¾ÌÀÆ•˜’ +K ÌX!Pªµ +X)ÖiGœPÖr3ã=ßÛ’÷£*tIãݤï[+ôÖÜÚj1@¸òë“,´ +�Ÿ +0÷H‹À�׫%Ú7€ kƒ³Ý[õ'7]óûèédœ–8ÿwü ©AsjtÓêïüãÂ7½´ou©Ñá3~ªõ›ÛŠ}ïwâà\{—»t̉üí�yñYý¾�ƒÍ;Yáô¯�"W|m:ð¸@ç§ÅBãÇÁ|(®õ¢ßÛ ®�W ñÃM%í¶á�{$î²ç!U¹y妛:8h«¹;õ[0{·,\d¦óý1¶Þ¹ÜåA؇ Ó—QGËŒãÏDEüÖ´fSµ%;`]½ë–ó¦óRÐê“þÊÙ\Û¾ŒîVu‚Ó›,8»¥­‡Œ ;@yS3®Ð€è´Ö‡�ËüPÉ|ª0!wž£¥©A0I»ŒO›]˜¾î8æ'¤=¨³„ô¹D”NÉmø–l“Výð,ÕvmWù‰ÅìD�¤ñ Šd9Å»ÏÔ$¬Íê~w8XA™ìQ…J¯?îâ;û¸ŠÌå(6_V°û5Ð z ¨5à‹�%ËM ›¢Õ,§ÀuèÚ%èÖ›Ñbš¸Œ=ézò>šа˜aŽWHN7†‚z�3ã ,nuV"ô™dÚñI§87ð >ÍBüaˆ8O­´YÎ�O³ôé�­|†k é&¨® ÏÑÅmÝ” bÂî§@ +—'1òT›ß×­Š¢y««ô'ýT ´œÕ—T9Î +�ïÜ›¬^ÉU‘jõCŽYKÖÈÀY©²mÖèves䇪ܾ2®‹X%ËFr«Ó³�ö:[R•&R‰†Q•_\Vú4g¸é° “׿ïq)ocêœ.Ý}‰º©£[`Ñv£ û’žén?¤CëF γ ßÔÝP�Y-ª¨˜í”Åb®µmKÓÀƒ«ÀØñiwÛ– $¯WZ�1ñƽø=UX2II³ÆÎî›Û%Ùøà·Äåø|PaB·•…×­«XóY¸¹Ñw�ÆÏÕí½5¯.”»÷u28á–õ?]ÓqVÖêýFà»}H3oÛ_Æâ}Ç>T^”W8”f¸¯é”q~×µ¥`/šsÎòm+(]Vxl�{òâìŽ��ÃÄ�§ÊoÓÚoù�ä.“Tð,ºNð%ö=Ø#:77[ÁA<_ÑA€ÞY6ZÙ^ESªO-¬=ZB«àsÈhŒºÓ²½Ø{^óYôÿ³].¹µôF ž{ÞÀô~,#k�‘=Èþ'ùÈ’úØþƒ \Vw«Õ¥*)S°mÏñ ëœisbÖÁÏ�¸¦ž¶’J¢}ð)ÕmesÖfÑz³ÛPÕIžËÏR q],X–U† Åk–çYqÂÖHJÓ/ÚèÏ*ëæ…(‘ªÿ› +!œL­>À,C/Iä¬ÏS@Uÿ¹•”¼,hEº-¿„¤54´¦‘¾¥é‘¸•Á²¦ø(þ‹Bû^‹g*¯ê»ÏôzðñK¿RáÃTu*T”¾èF_¼Õ ‡¦ÿ m&[Ð}82Cªy%ÕpuE¡|4¿¦‹wÊ�Tך´Ýɘªµ$±Þ¬€{øD½Úæ»Öò�ÂçFu€”Óp*�”ÃÅW¤™ä[†ÀhfÙ`¯ä•ª�ÁNþäâ;¶æŠk±‹Û –d¾oNÝGãmÕ·Û³Î~ôÙ—à¶J�!ÙÙ)Ê6•E»å¦ûŠú¤±¯šÜº±vK—ûóÑ:<~tQè"�±Ñ\­/ +¢šúr§HE¥e˜IõGqýûã?ÿúøï'2ŠôAéšÌ¢z*7M³ï]ûþx ›Æä7mº&¡p‘ÿZø<‘é™{|áÂ6˜ž_N?¯œîs¼ ߀ß{w£Loé^„�2–`›x1b;Û6ê�ß>æ6‡~žG|*÷BH‹Oß´îM½7wñ–xêîá½½d¼&×…%ñ;ežŒWÓ"sB“ ”H<(þ°ýƒuÞÙROé£JÊ>¯ø%�ñóÊïÇþ,úë�wO®OZÁE‘K~Z,­'×ùÏ^o€´!Ïã7Õý¾éïÞñ{ïÍý³¶+·Î&vÒ¼Q¯<™N¡ûBcn7^²‚MÕ*Ô#ˆÃ¦P‹õü¢/I$?t_‘Zþ¨ô~nQ[7Íeo[üDK òw«p8•^¬:yd &™€¯.¥Ñ]R2n¯!5N¡ÈºvÃaƺþÊ£|==ÈÑjØ›Ðû\'?­:Ÿ"Xò)aÞ@ÙÜù9ézÖÑè`«ßú¬Ô¿d�‹ˆöÞu®ÛÊíµ‡ýÑÐÏ|=ju>›-õ“�Ö,kÞ�¼!©æ k  KPOº�f|a±§ã™‹f¹£WãõSj¶eû ýA3M�öíI+ë¶,.†½ ëÅe´�Ê"Q†”ÛÍ ŸßQrõ÷ ÈÛþmsÆãì¤di�Éqþ$Vcò•l?—U!âÁ>?Ïu/Ú±F—•>Îëº+^CóÁú›Âá�HOþ&̾`ò(UY•#G©U Ãõ@^T¬Wo€7lŠ¥mKTr #›u j&6žÉnæN;¸…ôªg¬Ÿ|¿g«_ïˆÔ¸š�Nxu»Rm©Qü^ÔQ·âH§'QÎÖê­c $͆�2´m›çc$ô÷ƒžo½HŠ]ŸÎø|Y16 GÕÖ«Qje…„ÎM]ÊÆºËj’Á—¦¯&,ÛOÛ\æü‘vQ�! ¶Ìn~„*ŽV¿>Â>9�h!ª±V×/e»sÀµ–mìì'0ØT©ÓÔÇp*¦)y¨\ìg—+�ÊÛ´Ô�f´©˜ֲ޲ƒ«ÇD3)0iªff¨*ë´N ˜ÜþÃÞ€€„­&Ð(V.Ûþ€K·q–<ö�U—Ú"®º£ße­‚¸„¸h"s­‚%yÉXÓæ$«¶eó’'xó!Bë‰ï7Ëy"«lØ`\§&× #¦bq$KÞ3IŠqs¾‹X´ÎyG™U±9v œ£¶´DÓ¦XßPäSsàJ®Ë°P7Nh”¢o,v5¶TÓŠŽˆŒn•Mó‰|áQW{UæÏŽ-i ny)íĸ¡?䦔׽-èy`Ûù)ÐYÊž©fÔhS-�؇…¶™eDÀÓ¨©A¦b)`ïñÀ˜~\‰3ìñ¸$lÆb2x{™jÚí6Ìd¢¡…µ×i©Àã²#Õ�©½.¢`‡Å»æz6¬MŸ¦¡Û¶ç”²Ø5£§¡*·‹^t{·»¢~åß"ÐäêÔóհОÏíLt{3*°.&•8:S¢vjg  Áæ»ÙúŒËÒŽŒÐ4cµ$'¦Î×Ö8=«{½âÀäå3æ· £�qgXÝqvurž +”"^!°4LwPžbøS«=ŸN-ÈQ¬å€Æ.¾o{ßųo‰cŠa³/\25�³˜}q_�@A²/ö+’ØÅödÉáéÅPJ¿ö«W†¾=Rõ�³,óS�Y6ñÚaèÉ¿M·<>!ÇãØUq�Nþ(Ú:Ša+šûÉæT¸¦0¼¯ÆE J_%Í%p^Íx츞K°T w&‹ÉÚê} ñÕfnPBq¤aÄgê^EúÒGŠóúì©e¼Ý“v{ +i‚¥[Ãå-¨Sˆ¡Ú;®–¢¢‘+ZêZnèîÁ$8ãý2â~8y9 vÌ"6uXµ›¥ŽVàf‹*a—š^@+RÒ½Iþp©õ´šX]X¤.öå¬Zu$ó®LwI!“�Lûä×ÓpÞh‘‘â:Ô<5ÿ´f3k¾±Æ Êþ‰`®¤W³ø·…îØ07¦Z-½g6–uÅü=/ómv¯’MQWaÖã†h;‘§Ü+}+�÷ LOp\`žú�ú矧Ã\ŽHjF~З‘Lf)þþ©žúS8h‰ñ™lMsEMh BøÔûTf’˜Å‰ì‘¦ƒIÜJ¿"_ïÈIîψT8«Òª_%ÀV» 'ôH‡1g(6J`õ 䬽S$½Ÿ—í}hz˜§´cvN™õ+l2…¸Õ8ÙïÐÄí1AúT©RVnyJ¹¹Ô׊vȉø-¹yºÃ®¨÷îHÚž +z‚ré15 +Ý|æ´mi9Ô}»5•˜©êÙ�t&ªÚ/÷`ÍŠXbía†h–hË}˜UŠ-–¨8+ˆtAe°@kÉ-›»Ê:�bjÊž²ˆ#ò¯!iFåiœe;g¶åµ÷ˆÐÈ¡0’]¡fJ›a["é6�&‘…¬W:Oh$PžÃlîÈÚR ´ôµV,Û46úÁYfN]W r"­%T›:O£)RÄ%BÝ~×”[e°­5�šŠ¡º\ÛG_i~LIÍÙ4ÂT?Ô#ÈXlªÃVµxÔæX•^KÊÇ„M+IŬQ½úÕ|EFd¦s¿+D¦C4’¤@íó¨J*p,ö°×¼B;(ÑŽ4Ò‚¶HW‡ª…NÜó¬€ÕÕi³’MäFZ¦e«AA§æÐ•�MjW]°V¨ãDZ;ª&vIÿìýÙutëêoe¹µâDÐ[(KÜØ£ß{¨³“ÔÚ<ê-Ê1².>®Çd˜ñ~%I Š/‰Œz#l»]"w² +Îñ +ðÑ—­�%7 @ÍÎ8ßížÄçåè�Ú¶¯åÝ}„kaV™˜pðÉ“Ô=ÞZìä²#ÒX«êÏÁr80ú¬3\U3Û"â×>‘ÁIƒ³¬v€®kºÆ-âÑÍ.B/öùÞÑÙ%´Ø-òeí ‹Šð8ÉL�3Ñ£ÈÀƒþ•• /(5«ø\[ºEP}š²M"2ºœ—Ú‹€¥™…eMþ€m¦¶‹u’xe™­™V]×àIMŠf›?rAEA¤hä‘mæ¤`¼'ˆ•N�‘ ´­Jt†ÿãºLr%×­-ÚÏQÜ „ÁšÔ0<†|¸‘nüùw¼Ö¦"ìNæ= I$O±‹Ðm‰`š·ç.¸#yoobÜJtsÆœåÆ,œ4H9²ðpw.Xòù@ß·}ÃEû®wAqþ›…y÷«qžäÉàJZ²zÞ° /;ß6bAk5rÃOø�>Sáïî8Á/@ºàYi„ 4ñÃÐ'5Ï‹!?Wõ' +ØgÏ�e¤öŽ6áBXµ+Ì OŽÂZyº¬@5훦Kœt974ÙT��Ï»0®ÜeæÚ]PÏ‘�ý¾à¶•¾zÃ÷�ñ†‚¡o÷›ˆZ_ "ìÒ7Ô\o8ËŒB{®ä¢íz­ó¾ Û£¶c½¡²ŽÇ Ï>WáÍùj´²® »×e辂�Ä—ïé¿Rª\[j5¦ï—ó.ô¼Pn!±YÅÏ•›k¨¨ÜýK­wA-š÷o~5·õ§¼’›¿õâ_¿þï×?ýÿO�LeXq(çhïB± :Z•ßü÷#ìÜ�¿Iܲ¨bÔr`Æ�ЭÈÉH"’S;êí?MŸ{q~kl€^®{`¡Ó?]ëw.^/#é4­^¸£‚?iñ?>L0L+óN D…,‘ŒEäÛ;…ûíÂd¶\xøìT«¹7éߣëñý¥UŠª�”y«aˆ˜îç&"7&õIßûMaW½rD—Ž­gäÉŽCþ +’8I< «ÓÕrª–·£1½FvÛü]—yõÒãMÀ²º£3ªj¬%áð½‚S:X—h—J"�IãiÉø lº&åy÷ +UÓ2ÿþnögå÷­4xM·ëæñì¯XbhÃs¬ìòJ†º„VÖøŠ +Aïw¿pÐ_gG‡%Þ7Gû…%…KÏ7Ö‹ƒÊ!DÜú+ô,ÂÑy>¯ ʺÒ^Wã‰X©AääŸ{œ+/“ç+7×Ù¯x|®@_cc"ù5œô�©>÷ê¶Ú{¯Ä=�ë vƒ`ü“y»ÚlN]…]êªÐð,pDÀG{ö«™–èfr§ÍJ1±]ý±cZøãšš5ZŸçöëùéûN�·U„¤Xç]” £,Èz“Ûø¼jY8ÒòÌóŠmÖ©Ñ'Ø©!1#|ÿ!ks‹=ŸÞç«Ñ ¹WýmþЧ=Qzø[ËüÑ DŒ¥‡W+Ì?Ù5·ßˆ4aŸÿŠÿú×ÿ‚_1÷ÊZ€Ûx”ú_ðû”Ûü·dhþˆù#;Úœ’Îæ¿ùä¡ +òßU†]Ô4>÷ +Æy)¯4K£ª¢Iuß4žÑu¨˜’1ÑÛªŠÜ€ÀÂ\1�ÀêPw©ípSÕQ5vã[¬ù]iÝ1`ƒ^#—R¾(þêÈ•º•b ùƒHëÓÂÚYé¿?á÷üFïï-™˜4¢áITí}ÜÆ,åß7×I€=].óú #’JŽwÚTÓÀÉ.‹ÿN<`&—WIÖf€[º×Çéû�)¯î@ ásò*3Õ� k4Ñ’òA‚á/»Î¼9CÊ3Ò¾{PnwÚ¬Ñ1OD™jEË!9]‚±¢KE_ÃrRà¶®5(^êz÷ìý¥äˆªÕ#›#À�•6,,$M×pÅñ¾¡>³ªI“)v±ëõJÜ>5 2¬J)©±ê¶HÒ#5Q›^ƒÀ�0\éþƒ—†ÿ·Tª=Ê�m8Ƶ,hD�g†‡›dÍ�Tˆ�OcÎŽ¨2#°y|ž‡ªŠT6IzšÌ¸¯o8àò}ù.ÄáN¡­Ñ«§¹Âµ©?ƒÍri(§ž’!0>µÆ�Ü*ËæÊÆw¡ëM#ØFv™‰”h¡‹9Y÷{^°®µÊ‚¶ øÎ„ÍŠ1”ô,¡’ǃ½A(r\q…( ,•­¹VÙÄÇ�6'Б–㩉#Mؼ”ïy¼dâ¨N|áÃÀhÙžšÐþŽç#*Æ«·m/ßgÌ­é”f(‹iCg ⯨�¬SÌÂ% ËÉÛ +hž)­†Ž$w±Q“Z£Çeói\Þ’ŽJ=´¡4ÞoÔS–òö�„—j–¾9â4=WíÈ-«©šga‘-p~�¼: ›Gq6ŒºxLBì‰ý¡›†Ý˜OÙ¶ETs�<ë|GAˆz +ÂÜiR>…x/¤Ä™1§íÛN´Bu4ÕóäY {+íòc§ÚÒŸ£1C©�{å×BŒ {`æ!ÙŠ[ûa¤¢QÎ2ñ¾Æ³§­µgäƒÖU‚iÞ m¨u<ù­½åÍ}©Œf¯& *‹"9ÎN­û8§6V�è\ÜÑüS2JÍDlÅ}�¯áÙk�íÃ"‡&©…j&ð7ýÄ»îè)Áéw�e°Épº0tfû*žX’ýÐ8-¿X.ô¢‰Ý./hD[E#©7¨‰'»�K„F°ê!Ñ/2ÑÕ>±_`ºV…%ÆøyQM,•H­l ˆ×“hÙ€>‹0QYJ�@X„¹:º_†T¦�;ÞŠö©úh^ŸÉ¯MO²ˆÌêŽ'ª +eŸÔ½&œíÄ–h–4T§m‰z¶¢(Íj‹KP Mp³jÄ!w&ꉉ¬-#¤·Pd5壗Ø*ƒêH.cUxUsŒŸ@GõzGتœÀz!In·lüìË€3Ÿ–žH¡&~ñ‰N¯%UtJºOÀtçÎ0“’ñ³C_älû·-t(!£ÃY2¶ñUâ»S»3*;rŽ'(ãýø¯âœ|zÿ*]±ˆÌ”Ûòþ¨˜õ¹‚MFkÌX\ú†»*4ŸãR +ùžGééQÓ#óZ/Êá“oúëf \g&®¶ø×®qdhdžXNªÃ¯gN!Ýã7ì¢ð<…Œ¤"‘œT¯¨ò¼ÍÌ'i¦ aÒ"É)�ŒÙê;m¹±°à;`³_ +3§÷~³"kZí¯_u¬|Çy+±K|‡âïæ‚Ò-'T:ûŽVŽoÆŒ•@B ïó÷ðÍÝ#þJ¾2Çýú£cÇU­ÿ†%)—*ü]Á|U,„D4øÑˆ›Ž'ÝðpŸ°7NŒÆ+¹Ç××þ�¯ú¼þ2$©¨Ï ‹vNîÓEñMŠ5‚W¶äŸ' ïiMžäté�x>Î („‚>zÊx¥!ÒúivÔ|´eÑt#&ð#OÛ‹e�ûàH8Nl­J�¿K·}[hüøð“8D`LÅœ–ÊãÞɃò·2Ö>ø¸‹\æÎ�sðYñ™àB–P3t�ú™�µ'àûÊL˯«áäLtØ”ÐFaùð‡+ŠdJ±a4{°B©É›ã:š�Ž‹LWÒH'Qzφ;×cö¨•€ýRR1>-z]ÙS’Áª¯Ó{DO_·-7Z$¨k+Ìëq`OÑ^pNëe!M‚HEú7ªƒ0QôÑì¡Îzå… ¡Y=E'v‰îdþVDÈ)Éô +üiºøÖÏUõlvb{d­Èj’Úã½äö£% +ï¹÷ Dµ±÷eÒƒ4©ÂÖ‘‘u½Þ«„Ÿ¯Kñð 5±IfSB nB/ùS“u%ÀÞãî¡ÑÛU+ÂâDÊT´5ªíÈ5Ð2EÃÓnª=¶"M%½Flo¿P¼fÊK4dÐ :]гbkGšbPÍyf¾¤CD�ETZ¢Škl,qc×}9Œh¨sû8/³I“#¿×)ê9ÄÇÐôÔ#æþ ûÌ#3««‘¢¡+-þX}17·„–s^ª8†çö´6>âæM V\I§º·ÙY¨ºAC�7mrJ} å +…E>!GäÅV4D·‚Áhš°LLxŠ9Rx»Ú©µ¨¢ðv£�ˆ +Ü!(%ÖY‰¹)=®:Ú‡¾Ýi„ûMwJ”"‡&®§7ÒIÕ³÷šî�îâhÙX î‰ÆtOXðç§…íqW¦¹A=¥a㜸õFn‘üu´áþaÀÝ'MÙR8�[×Fj¼ä! �iõÒ00ÑÞþ¸{öª +„îÓbBçÓòZðÊVÓú¼X¾¢ü‰õã*ZaT÷qVh`NËHÉ—›AG+B%[Ñoä üMói¸­úë”Cd< „B½®ba<ð ÊÖ›Á¯š¾ æàû.©uf£íÆ=�¶×!ÇŸ‚ç=Òäç9¢7Šúª­Öä*•~óF£ÖÓ'4vÃÄzGôÖÒæ—,ŒØT"} «‘Ý!™L¬[~*�äVrLl +gòDn*žAØ\Á4ùtË|È•öïP.M>ž½Lî½Z¥ŠG”ÕD5 +‹ª7â¼Ì?Sð±¯;íŽÂNÙìu +n˜²Ú.Sˆ¯¼gƒRõF$¹l˜3LNY¸˜NH¸~uwL€ÛöGzZEÂI”ÏÍTucû°ói®ŒXRl¨¶ºó‚çÜ*É:ÌžŠðp·D‡„ùåâXÕp9U=ç�¾% 50éוMŸd¦ÍöÛrPY_A4m ØrqÐçL¤ ¿·^A)¬FaÙ-aÀбèpظªUÖ–µ ‰‰˜C«º6ß­»{ùá©Ç +•©“%š«Èx¯¸Q�‚B.z‰î÷@ö¥˜nNÔ·Ø�U0�÷9o8À{mî<4×]¼�œÖLJ.™5»¥ 1éè¤k ·QÀÃou¼ºˆï}Æ��~üãã¯ÏúYôRQ˜ž!²:Ê¥ƒÞüçßþüð½è‘´Z6ç”V¬Å^øþEÌÞ‘�iâó¹öAPˆ–×/Ýù×O^y^+Ÿðµõsàžýºÿ¤b1on¤wØ©¿‡óy­mNyá÷ÅŸ#uº¹{nQmŸâDÖÀà÷¼7¹Sç÷›>îawáë2_®ú›ú¡V©xåì)òùÛ R¡eÚ ì¨´T„f¼ñýûãã5"&>’jϵÉÒ¹¼~ÁÑ¿|ú¶ò·­¿�ýºÔË ;÷!nÄÁDíyŒ»tvˇ~_û9nFž¼}ðøuæo;};êÛMÞ·LTR·ÓøŠö>?ÿþñ¯¯>‘\Ñf¨|äÈ/>)™Ô®A„:õù9òÓÜ¡rˆ|_°ZóØ '£};¾â–¦Ÿ~Ý)Éî®oë®á:¯§K‚œkïoá3éGªÊOEH‰s¾Þ´›Ð¸^i¹é%AiNk6} ÉÏ×ÀpÑ#ýšJŠîÖ¶S ë˜¬Ðd‘¢º-\°¹ž¿/Šè´˜Ú¹þ³©kÞ¯@Xœñ[ûؘĮ¢�zò�Ôi‰â.ÚòÀ.xD0goÕf]6j$´Ú— $ž<éÇ~s‡âü)Óž@ÛÅ�9ÐìRdätNœ�Ä^a]‚7ÆØ«”�#§¦ýfîÙ¼bº|»2òÐòœ±ýîq7hçï{Doy)š»\ ²ìë#’Œ¯uh$À‡Ü¥åôþ».Þ‰£$Æg¬@¥ç‘� Ø¹ã\Û8îWñ +šzï°úpѯ ª02 4UΖë7I,<ò|ÚàÞûÞË~k¨í´-oL¨ ï{üi^ B¾î6î÷¦jáuü�âN•(eå6îÍo5`>¼ÎçüãPÒ…ÈÜ�;¶žeqŽÜ/G1ÂôE�¶P�†f¹ý~÷Íë¾éØ8’€t˜†'q¿¾™éf$eÍ#'q ŒÂ¯Æ•’_ŒÝ1‚zd„¾œÅÿ.SV?¹#F–�JÂÉŸ‡Çõ·3˪¸&‰d�ªŒ-»Žšzd@tìlYsæ®h–ˆ Oˆš ‹R¼åÂKë-ç/_Ix§„Yµ·vqkwÅÚO¡Á +1ß=» Αžf;I••–�I¸€‡µ�â]‡j³ýPsö…ú�ÙŽ»Ãä¹êX›Ï¨ö +”Å3÷ 2×3�’ny›1œÆq’]Q-�ÁuçŒCñ픘žxÖ»"ÝÜÜ8Z\:´$›átèÊ%+(.f¦×ð»¥cW.˜¯Š0µÈØ]#9�Ô£å�ë4ãé“éúÔ¹C@—4%v¯¼oÆä$ëMÉNÇ&�ÄŽ›¶=�¦n¹êò·SÝ—= ÀxA.þú�ñW0ÐäUÃÀNÇÖOîÙ 'Qq²�ÕÓÞàÆÚ=N~Õƒ„N¢ºYII˹u±oœ¼\U6”?î!µºIŒç¶2¾þ#JÝš"óh’¢Jè8FÀK°!˜OZC L„Bµ\(õ?¸‚…Oh믴W¿¨pÈJN^ƒ¹kç¾38ÔR ¤ý«õpÎ�•¯®„ ÂÊh¹ïðý¨�9—¾Løä\A<0òi¤ôó®M%_¢Œ$‰Zᯠ+Ðzž_6Øô’„tÕ�8Ó_åÉíuÉM¦NÊYËç–rJˆl’Jß +ƒ0!¿Q‡ÍÞ +¥£Iz¨æÄ°F&©…tqqØL0õ|Ôö¹S‡BY2�ÞRˆv…6,QUdH4�ÜV”Õøê�$}=wôÆÌXf¢Pvëh‰%Ü.´…ËŠ_ˆlM¶Ì¹Qù*ðÒ#˹PL¾]c)Õô# qLë] $H\‚Q¨öW�ÃÌ !ÐolKÀÌ›*ñÅpúÓÞáæ>RO ?¡…Ôµ3Ê!,³)Ì-?¾¡¡Úg´@ŸHy�� �áyÿú¥ŒHfRNè�룊¾ÓyÐЩuõå€u"M‘d.õ:ûeÝ~®4áJbÐdZΜú·ýo]ŒÒoÛ³ŠñEÑÛ͉ˆFšo�ßY�@©�|# ŽBc'uA-wK±Âxk,1XQÿúó “î[ÔSxU_F9†V%~i‚-ÿ:ŠÎÅ Áí +?R�bJ#í$ŒmߊòeÊ 5�; ÂBÝB¨1 >Á#?ážÚ » –Át7M8�µÜµBɶD–œ@Ü×ÏwÄ}XAˆM¤¤ÜZ™"R—OCJ&ÎLãtÊýÒ¨6u‡†ûS©v):t�«uß`ÑW›—Œ+¬ Žæ,me öºÞï<ù*áJBSœ�ÕV4ËÖ˜êwC�„P»",ã.ãLj+@ÅKdø +ºŒžg5)W_Æ�='»0áK¾[cº5¤‹DQÜù$¯¡abíd¹zÉͲJ(¾þpŸ­ãg³&û�oL‹ÑÓ²U5Ên�€ã¥ºÈ¸ê]t–Ïp0ŽË§›í@ˆÂ‰ZöŠïsŠy™‘-Z”u,îd0[¸àä\ E":#ÝB£ùŒ[>q4ëîèá5vê–î·ÑU ô#Ü�{ö4±S�Û�G8óQò(<º�RõÐI™AÚÑ¿(J0hã#*³y¬bTi­ª‚z..qg2])¶ƒ£R>ÕÚhÝ"OÌt‰ ¦‰F�8!…3{ܲ |f@ž¡æ‹ºzP>IòÐ ê‘—¿Kþ^ÅEþ 7;9QYý|Ó+¥_öt-ëõÙŠAïĹÈa}ÄúÊ}š›ˆDd,¦V€WÝC}ÝW"x(Œ^ † Ž�Ï€ßfG;!:¼álÃCù¼—a_‡L¹GkCë!}àÛ¸+w‹jÚ7 ^CKxÜR¶á+¦Þ­wÏÊR«j£<1VÜóÌ�Ë;ìJ×.«Ui %§æ„ô—T½L8KŒ¹e?qƒ~þóלּØöü[VnÛ¬M“Å1^ã:ÙºßJl +­ž¬¼+ëdKöø²™ý(Të†T ÂIÆ—kÒ©kò�¦‡ªÊnõÖÞ¨¶Ê¸¨¦§"ô“©Û¢J;ñ’R±'Ÿg“2™R5*(–^SUL!€Û—ÒÛD>Q9.e‹´‹ÞEo·êŸ@EŸQË9¦e +¶•““r]×ü(á—â¯Õ…²•ÆZ„ôõ2µ¢3)‰š’vJ5ÈìŽý¨“¿¡øšÀ´ÿYè�ý‰â¸#Ñ‹½ÂÔ]û™`lƒ�ôö}£„΃8.¾T¦©¼†‘•ÛñÐ߸‹�óm”åï<a ¡š*C UC zŸ#+ŠX‰>v±Ê@ÕNÉ5·ÿ¢Z–»�Á¶¦D+èÙÚžéV°G>—}åøÍ�X¬sòº � šíFm4ugw·”ü®š©í4qBÃPAü° m_Bhæ@;4·Rpì°‘è�#W»õ‰¯zòVOn<ÕwÁÍ×p$œÖ´ra)ÎÉu†š‘ÆŠÓ±¹¼.òyÈêI=("õÙg"ªžq–»ÖÌZe;ò€®ÁÅéœÚ?¿”Ö¯Õ±pU{‰å rçW–“E!vÔêš³Cb_¼Tì +eG‰šÕ×mꎢe&»qÛh™ÖŠ%ØÜÒ%íšÏˆ[ñD×Å®í‰Èh)n3ž)ní8D£&!椭šdšøú ‰Ïa79-/‡nÿÒöó¶IÑ.P•šï’Ìwo +«0O&Bt3ˆiƒµ#E£7zª„˜!-,HêûHì·£1ï�R+Ÿ}GŽÌÐvsœ×#D¸/Õ£’PkÒÄÕ…\N¨|ë3¨Î“‚z(²$¨ÅïÚ½É&ð# ß{q²R§±õÞúæuãmúÓåy«­�¿fEÓ:âY¤gp£JꌭyVO=?�¶¿Í±d€´m\9[ʔƢ㶤&~I„¾£ù u¼Ž6¸¨l6ªTÓëÆé# ŸÊocûVÇè|D³ºøGÜè­+òm–Æ–`O ̨¤‘¯¦S™@^ +à9ŸÙAí2£jL?åYçÎ·Ü )–ǘ¥E©²p•’atK ‹¯wÐ{tX5c„®ütéå£N�—þ Éýä ø?Ùe“(kkáyVq— ""ëÉ4Ùÿ4Tv÷Í7:ÍÑ÷¡xJŽá§¬xü{lvI6y*„Š9Òµ*Ëv`³Ê¬�8K‚EÈY5²Ÿ•u¦2q³ æQÚÕ€Ì6÷ÞÐŒ=)’é†.Ô°ƒµ‚áø�p>ÿþ×7&°5™“3ÍÝeÕLw“I) +Y[É›âpbd{—Ùô$ên.nã…+-fÊ¢ÍÅêM8£b’l(f„‘Ò…~‰¤.Ú\=m ifËI˜ü—KMo ÷™?p@{“ŸAfKð?ؘ7™G�6!Ó@&­659i!  �͸u‡LоÅyt{Q ç^Ä__ª!Ïý<³®??ÁŒ—„¼í\¬† +U˜H%ÙŒÏT5nNL>ÐA ì0Ò±if +⦈ûvs%öl°1ZŽ™â^êó@'Ïó~³Ó,:Òd"²s€É5Aãƒ8vzðc%ªn*�œ/qNo{+Ãø\þNÌ5ñ¥!­á¥gTôŸŠ†ÑÔsÿF+:½ñÔ±ñT¨Í ¶¯Ò&§>â=3÷â¾¹9ŽÖÆë­IØ|Wªý àñ†I-¹k&:øù ŠÁ6EgÃ&,é†^b¤=ß…Ü¥ŒW0é±Y䓾†t]…6d×’d Îåajmû#¿ˆÚµ)ÍÛ!KŸ*)—;EE·ÖÊ@•h­îŸTk¤ÑU¤3åSH,'u]›>nç~ÈØOÊ|ò‰lšO4Bß8o”vm}½Ú~ήë5èyøGTQ] b!&Ô‡RA’f/¸ÅËT)Íè)riªN|à†”ʱ(K…ÜKøÐcõñžöŠnæáF– ëë°Ò;À¤_jn�ÆEÎ8ÀXߥà!#»9ØWÐ�ÉCáhÀU\ MXøÌŠ2¼}NM Œg$Ã9œn61&·èXýÆÜ_Cðf1�­|ì�WD¹|Œ,Ä @ $®óøIÆ”jªÂü¥|mv®|Ák¡O¸ÙïŸÐ›³êOñi¦É¹¬b]02h7^wh’>¡U-†^wÓñç¬R¼UÙ2¯õÂ5´—¬ë¬Øy~¿fåósÏú¶³Cw½b‰&ï= �¿–lM”³È+/g3(æÂ}0‹j‹oàîÚ¨ À.&�kD\–/4F"¿Pat/2¶“^¬� ÔÏz+ÿ´_>&æ¿Ñ~Ù© üÚ/s—ý:!m ªN:²¬•fIl­Ïåû¸à¹ñ,‚Dáêû�%1¤2”¨t«Ê|$š×Üks~h£#øªWu �4ÎÜ”|!Q +a<³FŽãÓ8oK¥Þ[ò7ÓësV¦ØC“�N¬dï(½¼ƒs2�)ð� +†Iä¹#h·¦¨9i\ÁBÜÕžà\îÞühè\03’­VvÇ>“¬�úk­.ÅhÙO÷…rÝÒ¾©^ß÷ãANÎíB*h¶ïØ—ñþ„¶ÒªóI²çmr›—Ó§1Ô6syÚÝ:“¹¢÷ºþR«G¬ÖèÛÑ´Ó+drѸ Ú†XÒt¼>Œ§«v婈g0«G7�?õ–¦Eø Ï‘w‚´Ê³`"Ú$Ý\l-™ÝØ”nH#%‹�4<ýÿ$^�ílð/iÎNôˆž™Á¡-æE.͇ú„€&;~­=v�ËŠÍ‹¥�ãµcß Ž &tXfxÎq¦òò†;tP÷~( G2H8+Yƒì;ò‘ÖĤgL?* ;5‹5š{“ °æ?E÷S’ÿ?¦|À?•üC¬ +ü/± Q¬|Ni`üi‘lŠà‘±©‰”ZµŠ™ZIy\¦î°”vÍ­JâëÙÛ/«kÝ–µÓ`¥Î\Ÿ¨rÌ'?Œ]Ÿ{X³­œSéÝDŽcÐ4§‘2µX}ä½/ÒäïnjîÍ>@Ìœ<¾u¤¶νù2idù#÷H8úEi3rIv� +~~? „ÌϵT™#^ýVŽIbÇPâ(ú»Ô>KrÚ½ˆ‡�£ÕJ+åP·Î›—¯äV¹³lÌÏ›¨ˆÖË$Ž»â1?y>BÝyȧ µXŽKÍ’¡ûjM]¹%*íŠ�e TÑi†¹¼OسyÉ׿N5=AÐäkw+OJîq"\ÚzqðñæBGþÙª8¤k1ŽðGxkæjͦEºœ„Ô�$qNÿ>/ê>¹ŸÕ.�º²GËàÞ=Z!œû~‚,î×zKD²pox=b¡£Ý‚ +ˆð“á7tV±. Žøf½Q¡læ9LyÊŠ,\ùWUMcö�¬z¯Žmí?¿eÅãÿÁdŽÄ-4D×­Êó�I+²ÕGœÐÍÂñIÿ¶�ý¬|Ä›ôõé7gÏ.Å¡½Q Èlsï ¦Á½ÉtC@ƒµrÃ~"œOmýÄ=0óÚ³"4”]V=o2É#);wm%�{cÒìÄéW8ƒÙôäp•eÚÆ W2ZÌ4”E7š‹Õ›CZ¯ü‘Þ¼&Ü|…NR— m®‚ð¡ƒÃäô\÷2�¦ùη®Y“ù�±µW¼–“öfÖö™ýÅkϱ„¨bƒ65î�ÒÂ%âÈn¶-j }‹óè¶°#\@šþúR yîç™uýù f¼$•ƒ5u5™Lѹ÷O[‰ˆŒ@ƒÙU“à({øXéØ‚Ú¢ nЏjÚäJ³ë‡7rPàxtò<ï7;Í¢#M¦R`"o<65>2ÈÀNPÀJTÝ€ ОqE(¾ Ç•áÕD °nbQ /=#á+¯ŽµA·õÜ¿q î�§Ž�§nù°ý¡˜Á·j!¬`ðE{fîÅ}s ­6^oM"Àæ»Ría†ô+©%p4`3ÒÁÏoÝ�j™ºDº¡—€�k{‹Ü徯`*‘›E>RL*¯Bÿµ$ƒsy˜ZiôE'2iÌàsƒ…­o`•À‰Šnòë¼µº¿ Îi´´në#@•ݯJ]'Ðq>nç~ÈØO»:>‘Mó‰Žß˜D8Ù_®®msX�þìÛäÊ%èŽ`ã›èbÊx€çÈ™Rœ<ÌÃ�,Ö×a¥w€I¯bë�‹œ3p€±.¾/JÁCþ`s°¯À%çòhÀU\ o·gˆ2Púûp>a<#ÎátÛÞr>Ö(]^عs Á@øt 8'„Û©÷ù…ð½ÅàW=5…XkP[öY:B×ÙÉf²ÎÖ‘Ë\¬�Ü�,èdÄÎÂH�r’_ÒDhp»Å1B¶ÍÔj¦Úds ë":GÃÂè§ät="à›�ÛÝ¡Õ+дO$-�ñYj¡¯À(·)ºžºÁ ÎtJ1Në®ÞŠÚ¨l :åKDw×F ”†°-×þq%ÒB³q“%ÙG²JW¾Õujƒ +/w%Çèò&§ÿ~£[ß÷9ÀéÑ3 Ë‰]!ð<™”¸ýNº¾NQúæñtÊ¡˜>¥�KÝ=‡ðøˆI§‚9XÑ�|ÜŒïšnž‹°:=€Um26—{¦Ö6ƒuö›Î"ÿ#öÑù/q›G~j¸€Ê{¾7~L%ƒ@Tªc�M±Ý· Ó/Áåü�ý*ɲãÆ�{�¢.`?HžG/Ô÷ß6"Ìʲt×Ó¢J~&‰!Aê¾.“[Ýüå.Þ>Á—[6wÝ5gëè™ËF[Š�1~l ЬDÑ(!­O‘å»@>&éG�p½ÓTsì~ÁÖIßA6å3¡s 0i»mB&Nr"i¨ážl�²šŠ„ñ{>o‹eœÇiÒ7vi²©·1ýL~gö âz÷+M�ÙÝR¼sˆ ¶ô9o9Fésw*¿ü¢ î}Gí +iÆÙ¥’ÙÄá>¢Jšø3�åWy>ÞÞ¥ +\æ +gT‹Ê4Ä‚ÛIð3n[>?�Z—ZΤORŠ=»I ­þ¿“*óG~Haô^DEt?ÞÌ„•g¦{[ïqÿ� @)_d3æU³±>Ù Ï”œM‚¶vºŸ�88[½uæâ³ž†3hƒgœ\Eõ„Fù÷„tª}¸©¯G[uÚ4¡~¡ºŠ¿ƒy…3S¼t\l]�=gog Z†�TäþúQ@¹8sݧžmùì °wŸGl[{· 8;¤A¾6/GIO/fƒ­;Z°rë3pw-TßHD‰»æš�äO ²Ä$M™©�÷ oÆ}óëÇ?¿•>€‚*½ÁŽ>¥Ï"æÐç\ÄfÖ"…Q¢íÈŽ2±N‘#×­ˆÎ3š² +95Æv¿Ï±Š3òêœÈ{kÖó €!­š9ŠÂHþýáËH¡|Vòb^ú¬è"t7cã{'¾CúQR•€h8Û¡±=lSÇË@¶j¬ÌuÎnÕ|¼#¨¼”�½b6tä*i›ãCloyÙÒ©O�æ$Ýy¸Ào¬Ø^l¸Fá‰KÀ²òñB}Ɔ8Ïê/´›jF^ºÊoeŸ [HÅ·þûÖßúï[ÿ}ë¿ÿ²þ›'Q#ï6=Ïú… 2yMÊÇs�›• 2üªD«º¿±7úP»Cû Á.WŽÂz›ýÒ9Õ%gÀ¤‰BŸðÐÒÅ™aûÞ]Ìs¡‡ Þa¸Õ»QÞã"%ß>™ûžf�Öe‚MßAä'F\¦*fÝX*Ð,Al<7Ê1Û©g¡°Uô;›ãšñ‘온pæ—äOõ +&Mû%‚Â,y’RO�+ -ÉC»½C7Ôs‚’XüQMj¥ÚèFHÿø£Ž0?Ðê+?¾�ÃÊ9$,@¤„ Lß»ôù;¢™zÇ9rzþÔ£…¦í,ÒQ¯ 0\™>EôÕ· -ýÓI"Q 3w|ƒ6ýËIó õ{×Eµâ¬ûâoÿxÎЛԈØ}8¡(F‰y¸Ã–r“ølšS߬߸j:\·†É–ì>ž(SØŠ-+öbKI +Jë$ºv7]œ$ô=F63ÉS_!âµÈŽÏÛvÈmGò ÅOHˆÍÁ°措1‘�6.$»WaÙ®ƒžÎ¥è†œèWxéJêºóˆ´�‡ØÏ³r¤¨Qÿ¡e¸½àçÂgƒEèøè$šHÆŠÑRfä Yoþ,²HÅÐÆÈ㎠¢K@cP±ÌÖŸj`Ç¡]ú”ª´Î4b¾cÜVÊ;ªç•—/é[ÈÏ•©¤t‚üZäè'˜³*ìÜ1‚)?dq`ò¯®ê“ÙÓôw–mØÇ»­Ê?æ†IvI„ÿ»R¡b”¸é­4 '£9ªÄ–ìäîSn#µÐd*û”b ÅKk̲͵{ ÛÔÚÃtRé´Æ^Ùk¾"Ôçç�ÏØ��Í›¤î±j«Âû0ÉMúzSò¸vá$™½˜W43›aeÍ”M¹ªÃh¬+ÛµQ/Q/Çq”?P1\Æî·Ñ%ã\0dr'C8zKs°\û¶`L8œ:uš…s^Tk­ÃYÁ·£ÌÓ¼þFâÊ‘Œ6S9‹.,� {jØlñdKwq–ÎÁpy×AüÎ¥2öóÍü}¼‚¾nt­ëYÁ=Šh�D’±|tu£If/ž -´}¥Îw‡™ƒ€hq—ï|³¬œéÊáÌOtÊ48“Üã>sÒè5߃™�¡8ƒ7¹Íu0¢‘S>(†òWÙ7™FòËÚ“ÎÅ ßßMºŸ³Ãg 1žþHòÒ7¨YåÞ$Z Zòâ3«"ì�¯Â½¢M#â«c+=�b Zœiƒëº|Æ0oôò* \x±t�!?¸7ÞM©ƒ×³Tì�Â`͆pC‡€H+íŠÜÛ·a2‘Æ&ï´ÔOÙhmpႌF^nS£MÉÑ0zIbÆ4`—ØßÀ5våä⾃y#²Ì’4z5vácô£iá­Ž~'¡ãüœ» ÈØƒRi¿È¡y¢eeû*>�Û.§6o¯±ï½úz4:=þ�7äàO© t, cJê4¤‚ÊœÃs¾×ÍT"M+áf¸q’˜D%MZLø*©#àÃŒAšŸ+Jì¥NØUÌàB¶ û+Øé€éÕl ñ#'Ò‘Á±fpöâ†è°ê¢Æ–JFi «øf‰a7xn'ð¡õ-ÈO g$ÃINû”b<|iR—;¿siî þü·_¡ìt‚zÙ�ȶ�Ã�ö‘SŸ¼D›Ìt²E$ynÒ­pÅ3šBˆì¤ì˜Ïs¬(A0>¼Œd¤.r<¯˜˜‚:jÕÌÚL°KÉÅ^×ëŠÝ„5}²Ç›è’¼¹Qôد¥\ž\ @»²¹¢¼Û3F CJ px cÅèÅš«Q¯É¯Q8&€ÝSò™ýâÝž7]"Z­ʇõË\ÜÁ)±¢KA7j9mJ­4 +è˜Ü.ù +„Æá]‚«ÊÜ¢ƒ23ÆKƒ°+èEòoIǺIÎß� _ÎtÏ¢A—€F²ä�Ʋ0‘xWS^)Ƈœ‚â˜K£S +P’þÅî§N�Ž_ZjFãp¤=ú. Ò7eTù©iÌ%¤*2àLæXµÖ�.æèmÈt”‡«¨Ï('&íﲕ.÷ÑdЦÊë½^wõî9�ïÈëôŽþkj<ªè1÷ÿÙ/cì¸aˆ^%'È#  ë¼”¹‰ï_3CJŠ×é]lãveR"€Á7òJ·‘猙–ª*‘¹µ‚oÑÉ Ðzj0·FIøù~Ñ'”ÎÎ.7â‹% !=¢¡›HZã9¢È/�Ó™¨}L>¾‹Å}²b×ÄOÑisÌíÂEã¡d™a<ÊÉ{(Q¤Ù¤¤ÕÛ:Ðk7»âtXÕpHk¸JA_‚J ñ�•D\ü6E÷(Éϼ5Š$Z•ntý£UÝ·®BzL²<—²±îÖ° ú̹‰�TjC…Úm³NÀÏ`�Ç]ûyôXš"Ÿ'¿¡é_G${¤“wÝA>kBxj^ ™íE }1cª‚—#«7®¥Qš]ÍÏÜ"E7Õb£ÿ±YøÝ¾šg{öw?®¡qÂ{MÀlç„eV¬�FÅïc˜ÕúÂK´Øu æ“¶då$`GB`N¤Žä�á †’©K4FÎþÞ\‚�ë¼.2WN’b%.4æØ–)¯CVm.lŽÊ­$uø +âñÀ~\hój¤âE>« úîà³¶°V7¹/²Që˜f­“¬\bQ~{T�ÉÜáUò/’*;‰+¾k¼†>sÚÔUP;Úôcã…»"¿3æl‚c®S¦öLj”Òl8§TεV™·‰_ªc]#UOévõy¥ºþ|”AåÄùºüÊà_Y4á8Æ/òY~¼r;ooq™Çˆ„·7Ppyƒvßú p4©=’>&‚< ¥§&àý*ŒjÅ·;‚Üroóõ* ’«GS³SœÐçRš¦úã�xc0ฃ1Û‘$Ê�БOY'ƒæ¨ Z÷‚µg&Ék´ÍæzÀí/yh�Ýõ¦Ú7Õ¾©öMµßšj £7ÿé¬ÐsAï€?�ú‰‰Ë|´ÑÎeäœ;L…ÊD<ÂVúsJÅÍ�— 3ëâÏ͹»ûÖÀ�'’øþþóëG~ü`<; endstream endobj 208 0 obj <> endobj 209 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1197.2163086 112.0078735 cm +/Im0 Do +Q + endstream endobj 210 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1403.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 323 0 obj <> endobj 325 0 obj <>stream +H‰ìÎ nÂPÁõý/) +øß¿¤®T•î3½-¨rÇòÖÕå܈Յ۸ª�m�®�o�›µ¼Žk]­£YãkwÖúÚ™5¿6gÝ­icÖ�úõM±îÒŸÔ×rÖýù—úšÏº7OR_¯³îË‹Ô×ó¬{2“ëŽ,£ÒcÝ�Æ(c”1ÊeŒ2FÅÆ¦Ô—1ÌeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQƨJ�¥ÆÊdŒ2F£ŒQá±ÀYj¬ŒA•:K�U~,l–« +�¥ÆªBg©±šë=,b!³å+#¶òŠ˜­¾f±öÙÖ«{¶ýj�íµ:g¯¶Úñ«ev¦ÕP;Û\#­�7Ür»¶º9÷Vê³ÍW4ó#À²Q‡ endstream endobj 326 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4777/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwXSwp}«lHI˜I2ÂF (ŠìŠ(ȈŠReÜ"ÈpS,å¡Å¢"Ô� +W�ðhq AEe[‘Qöaµïï&‘Z”?î÷ÿ{žÏsιçÞY³àL]fóœD™ +%ôðÿ¦.ÄqPß�Ì™Š@…¹¸Ï‚LsçÎåããŸìðññ�Âs†lÿ’P|ü‚‚BBBÂPDx»¨'(( ÀÏǵ}+mˆT‚BÂ"¢bb‰Ÿœ€JBL¹6ˆöM. ¨DDHqI) +�Æ`¤'' �BIIJ b" ýsÓ vqX¢qIFZVN^‹Ãá9Qœx¸p8,VA^Vƒ’’@Љ òó}CÓ8íâã‡XRy,^IEUM]Cƒ@МŒ u5ÕyÊŠ89i”¤8  p›öÏ.!„JZ«4O� ­«o`hdlLäÄd¢á>olld8__OGKCU¯ ƒ–DŠ sš6ŽŒ3FÐ.1q)ŒNE]Kw¾ñS³%–VÖÖ6œØN,ܧ­­­¬,Í—,^hb¨¯­1O+‹–@@MO6äíBËâ”Õµ ˆ¦K¬¾·[î°ÒÉÙÅÕÕ•Äk@ g'ÇöKm,/0ÔÓTU”—–W6ìBJI+(©i˜˜Y-]áDrs_ïáåíM&û°ã;±pö!“½½<7ü°vµ‹£½­…©‘A'‹Gö‹ë’Áªôˆf6öN«Ý=}6oóóßÌIÈÄÂ}:8(pWÀÎ[7zoXëê°Ôb¡¡¶š¢ZbHö•†±](Yœª¶¡©Õ2g7ßmþÁ{üx(ü0%""âωˆ P + Ý¿;Ðo³·;ÉÁÖŒ¨«®$�áÈÆj{�|l^MÇØÌÖq�Ç&¿àýa”È_~=~2öT\\ü$$.îT쉘訣á¡{¶’×¹,³\ OP–=âŸ;Ö0Ù.a¤péÍí\Ü}ýBB)Q1§NŸ»xùJÒU*H2o�J\MJ¼œpálüÉ裇ölñX½ÂÚÔ€ $�k˜ a�KLR§¦kbaOòØx€òK완Äk7o§¤¦¥Óh¼‡F£¥§Ý½óû êåóñ1‘a»w�ÝmL 4åPÈ1‡É^0!Q i¬ªÑÂ~•×ö�CQ'Ï^¹v;5ã��³²³éôÞC§Ó³Ÿ<~˜y�–r3éB\4eŸ¿ïZGë…zêxIî0¿lX0´¼Š–±9píØ{øØo—®ÝÉÈÌÊyþâU~Aa!ƒÁ(â- £° ?ïeîÓìG÷So&ž=~ô`€ïZ+�yX {˜£ZÆi˜˜”¬"a¾™ÉsÇ^JÌÙ¤ßi²só +_¿-.)++/¯à=åååe¥%ïÞ¼|úø^JòÅØÈƒþ>k–›i*ˡ£ZÆm˜8«ª·ÐÖyö=”ãç©)÷Ÿä¼..«üPU]]S RÇ[ µ5Õ«ÞW”¾e¼Ìy�v#!6ò€Ÿié"uœ´Ä-ã4 !%§¬elé°nsHx̹äÔÌœ¼×%U5uõ �MÍ -¼*ÒÔÔØðgíÇ÷eo ž?¢ÝH8ydï¶õNÖ&Ú*ò e£¶ ‚ €†áÔôÛ­"„EŸ¡¦>xZ𮼪¶¾©¥µ­½£££s2ê´··µ47ÔUW–0rÓ®Ÿ� Úèf¿d¾~¨eŸORHLRVI‹hµrýöý‘ñ‰)™O Š+kê›ZÛ;»º™Lf;¬‰‡S ‡Éìîêêhkn¨ýPZ”û(�zæçÐ�žÎ6 ´Uä¤À‹9r–ìI +#Ñ +ªú‹ìVû…O¸u�ž_ü¾¶¡¥½«hz{{ûØéŸx8ú@)V³«£µ©®ª”ñ,óÎåØˆÝ›ÜìÍ Ô°äçëÏ�¤4ž`dá¸~û�¨ÓÉéY¯ÞVÖ6¶vV/ÄàdpâáV`{YÌ®¶¦ºÅùÙ×ÏE‡úy8Yk*Ê€Y~落¤œ²Î[90üĥۙϋʫZ;™¬^5\ý¯‰g$±¿�Õdµ•o^Ô·vöôפ²†lƒƒý}=]­ UÅyY©‰±” 2ÉÖDK ,Ù(˜ ¨¤¬²öÂïWmÜ}$žJË.(­n„ÆvM.‹Cèïe¶7Õ”Ò3’OGîÙ´ÆÎTGEN\²0h÷¥äTt-sÛ²/êìõ{OÁ$›;˜½ýÐ'ßÅ–õ÷öt¶ÔU¾~vÿ湟÷o]g¿XoØþ'–s^QòªúfËÝ·Œ>+3÷Íû?[:{Ø › +»e}¬®Öúo_<¸}ñXèŽÀö«* B£`à¥T30wXï÷㯠w¾|WUßÖÅš:ØßÐ,YÝm`É^=J¹¶sƒ£ù|5,€ñ�„�k�ƪZ¬ôð?tüòÝÇy%ÛºYÐêO�‹3Kf{cuI^ÖÝ+'~ +ðt²4Ô÷b |�pF–Nžà¥LÍʇvZ±©jÖÑT]Zð$-16|——³•‘|”FÃÀ3²röÚu86)íIAYMSǔ YB°š²‚ìô¤S”@o+c˜0<Á:c”SWÓ³ Ù°¾©›$Ö×ÓÑ\[^H§]�‡ÌÅÚ\Ø/`â9ˆw•F/,×¢gz` :�Lvµ&ðÒâ_À¤ñšDWrpD•FgXç4À:¹°øˆ`W¢æ×a>ÁñÓ «`ädPã� ÃD†¡ÿW~‘aø"eä0*¦ Öò FFúk™X]EQNFò·Á’3rŠ*êfLq4Œ5•gŒ}aY£aŠcÃLþc˜ÉL„…ø‚?ůÂlI¾!0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã`0’OðL„ÿCX°Éæ+0ühXOßÀà´Âˆ368Ð×3†FÍÈaTÔÎ,˜ë'XóôÀj+9Ô1a³ ˜ð0,"žJ£3ʧ Öü æúU�híJþ?»uåÚÇüíê¥ËÌXfÆ:c3„ÁL²–’,#¥’dœœ‘†S'% +i;m¶zë¨lÕ©œZ%K%RÙ*[ É cít½÷óÌH¨Ók†þz¿ÿÿîës}÷sÏ„Æ$òaœk¨*Î=—ó&Áþ5 +ÃàU(t[3$:1#·¸òÁ8|XbL(ÓÍvå«0"…nÃðaE'¤çUÔ·vrú¬²87#1:„ɰ¥STð˜ 0‘L³q]·yw|ZvaE] ›Î¾ÑÓq¾¡–2€‰~›)Š””QÔЛg¿Âokìñó׋+ÁgÉž¾]Â…�»Þ×§o]éoØÕßÛÝÑÚ6y9ùÐÎ@/g+c2/%ñŒ÷Y‚Û¯¡oºÐÝ7$*.åJޣꗭݽ@6 Ñx¶) Ììç²ß·5Ö”æœKÚûÛpŨZÊ8´ø,‘™3Fa3E�à’©êЭ�½wËìͨ$¸ord—HIP‰jfïæ½1,6îôŸÙy÷ËžÖ4¼nn}û®½£³³ó=H—À�¦Á!ímoZš^Õ=«()¸‘™vü`k½‡£%M~(ÇÂF+SÓ1žï°œ´=6.ù|Ö­‚‡åUÏk^565·´¶¾�òVÀÀí­-ÍM¯_Ö×TW”çå\J9~02ôçÕζsõµ Â�c79Rxý•5gϱvôðÝ´}ÏÑ“é—sn<(}RUý¼¦¶®¾¾¡¡á¥ãõõuµ/ž=­(+)¾{ãêùÓ "B7¬q]`FÕV‘—AM(Œ_™J,Ó`®ÍRß mч’ΜË̾y·ð~IiYù“ŠÊÊ*�§𭬬xRþøÑƒ¢{w®_ý3õ䱽ᬟ×0ìÍ�(jŠXŒb|aüÊ`™ +ªÚTSÛ¥+|¶Dì=zâLÆÅ+Ù7nååß+,,*..¾/DÀxQaÁ½»wnæfe^H=0*,x½§«½MWC'~¿ÿ=¾0¸2x™XE52ÕÔf‰ûÚ ›Ãvï;’têlú…K™W²®eçäææ^"`<'ûZÖ•ËÏ¥ž>÷{Lxhs¥óBàÒ$ÈIó9Æ[¦¤NI�l0×j1c53€¹çàÑ„§’Ϧ¤¥gdœ9/` ÙŒŒôÔ”3œLŠ;¼/*|K�Ÿ—»£�™1ä’A‹#¾Vo™<™¢ª¶>ÝbÁR÷5¾¿oÙ½÷À¡#Çââ“„JbbB|ÜÑÿï��Ú¹-$ÐÏÛÃe‘•©¡ŽÆ®‰0x™|™ŠÖl#S+{'÷Õëü‚C·†…GDîŽŠŽŽ‰Ù#Dbb¢££vGîܱm +Ðß×ËÃÕÁÖœ®OVW. ä·\ð2y2¬Ó€ *èDgM]Ài"«&˱ñq@7µ�Îä©&ÏúlƒpÓ�‚«¾ÄMC„BM-sŠ)ÿϸüW€Ф”@ endstream endobj 324 0 obj <> endobj 327 0 obj <> endobj 328 0 obj [0.0 0.0 0.0] endobj 329 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1403.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 330 0 obj <> endobj 331 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4777/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwXSwp}«lHI˜I2ÂF (ŠìŠ(ȈŠReÜ"ÈpS,å¡Å¢"Ô� +W�ðhq AEe[‘Qöaµïï&‘Z”?î÷ÿ{žÏsιçÞY³àL]fóœD™ +%ôðÿ¦.ÄqPß�Ì™Š@…¹¸Ï‚LsçÎåããŸìðññ�Âs†lÿ’P|ü‚‚BBBÂPDx»¨'(( ÀÏǵ}+mˆT‚BÂ"¢bb‰Ÿœ€JBL¹6ˆöM. ¨DDHqI) +�Æ`¤'' �BIIJ b" ýsÓ vqX¢qIFZVN^‹Ãá9Qœx¸p8,VA^Vƒ’’@Љ òó}CÓ8íâã‡XRy,^IEUM]Cƒ@МŒ u5ÕyÊŠ89i”¤8  p›öÏ.!„JZ«4O� ­«o`hdlLäÄd¢á>olld8__OGKCU¯ ƒ–DŠ sš6ŽŒ3FÐ.1q)ŒNE]Kw¾ñS³%–VÖÖ6œØN,ܧ­­­¬,Í—,^hb¨¯­1O+‹–@@MO6äíBËâ”Õµ ˆ¦K¬¾·[î°ÒÉÙÅÕÕ•Äk@ g'ÇöKm,/0ÔÓTU”—–W6ìBJI+(©i˜˜Y-]áDrs_ïáåíM&û°ã;±pö!“½½<7ü°vµ‹£½­…©‘A'‹Gö‹ë’Áªôˆf6öN«Ý=}6oóóßÌIÈÄÂ}:8(pWÀÎ[7zoXëê°Ôb¡¡¶š¢ZbHö•†±](Yœª¶¡©Õ2g7ßmþÁ{üx(ü0%""âωˆ P + Ý¿;Ðo³·;ÉÁÖŒ¨«®$�áÈÆj{�|l^MÇØÌÖq�Ç&¿àýa”È_~=~2öT\\ü$$.îT쉘訣á¡{¶’×¹,³\ OP–=âŸ;Ö0Ù.a¤péÍí\Ü}ýBB)Q1§NŸ»xùJÒU*H2o�J\MJ¼œpálüÉ裇ölñX½ÂÚÔ€ $�k˜ a�KLR§¦kbaOòØx€òK완Äk7o§¤¦¥Óh¼‡F£¥§Ý½óû êåóñ1‘a»w�ÝmL 4åPÈ1‡É^0!Q i¬ªÑÂ~•×ö�CQ'Ï^¹v;5ã��³²³éôÞC§Ó³Ÿ<~˜y�–r3éB\4eŸ¿ïZGë…zêxIî0¿lX0´¼Š–±9píØ{øØo—®ÝÉÈÌÊyþâU~Aa!ƒÁ(â- £° ?ïeîÓìG÷So&ž=~ô`€ïZ+�yX {˜£ZÆi˜˜”¬"a¾™ÉsÇ^JÌÙ¤ßi²só +_¿-.)++/¯à=åååe¥%ïÞ¼|úø^JòÅØÈƒþ>k–›i*ˡ£ZÆm˜8«ª·ÐÖyö=”ãç©)÷Ÿä¼..«üPU]]S RÇ[ µ5Õ«ÞW”¾e¼Ìy�v#!6ò€Ÿié"uœ´Ä-ã4 !%§¬elé°nsHx̹äÔÌœ¼×%U5uõ �MÍ -¼*ÒÔÔØðgíÇ÷eo ž?¢ÝH8ydï¶õNÖ&Ú*ò e£¶ ‚ €†áÔôÛ­"„EŸ¡¦>xZ𮼪¶¾©¥µ­½£££s2ê´··µ47ÔUW–0rÓ®Ÿ� Úèf¿d¾~¨eŸORHLRVI‹hµrýöý‘ñ‰)™O Š+kê›ZÛ;»º™Lf;¬‰‡S ‡Éìîêêhkn¨ýPZ”û(�zæçÐ�žÎ6 ´Uä¤À‹9r–ìI +#Ñ +ªú‹ìVû…O¸u�ž_ü¾¶¡¥½«hz{{ûØéŸx8ú@)V³«£µ©®ª”ñ,óÎåØˆÝ›ÜìÍ Ô°äçëÏ�¤4ž`dá¸~û�¨ÓÉéY¯ÞVÖ6¶vV/ÄàdpâáV`{YÌ®¶¦ºÅùÙ×ÏE‡úy8Yk*Ê€Y~落¤œ²Î[90üĥۙϋʫZ;™¬^5\ý¯‰g$±¿�Õdµ•o^Ô·vöôפ²†lƒƒý}=]­ UÅyY©‰±” 2ÉÖDK ,Ù(˜ ¨¤¬²öÂïWmÜ}$žJË.(­n„ÆvM.‹Cèïe¶7Õ”Ò3’OGîÙ´ÆÎTGEN\²0h÷¥äTt-sÛ²/êìõ{OÁ$›;˜½ýÐ'ßÅ–õ÷öt¶ÔU¾~vÿ湟÷o]g¿XoØþ'–s^QòªúfËÝ·Œ>+3÷Íû?[:{Ø › +»e}¬®Öúo_<¸}ñXèŽÀö«* B£`à¥T30wXï÷㯠w¾|WUßÖÅš:ØßÐ,YÝm`É^=J¹¶sƒ£ù|5,€ñ�„�k�ƪZ¬ôð?tüòÝÇy%ÛºYÐêO�‹3Kf{cuI^ÖÝ+'~ +ðt²4Ô÷b |�pF–Nžà¥LÍʇvZ±©jÖÑT]Zð$-16|——³•‘|”FÃÀ3²röÚu86)íIAYMSǔ YB°š²‚ìô¤S”@o+c˜0<Á:c”SWÓ³ Ù°¾©›$Ö×ÓÑ\[^H§]�‡ÌÅÚ\Ø/`â9ˆw•F/,×¢gz` :�Lvµ&ðÒâ_À¤ñšDWrpD•FgXç4À:¹°øˆ`W¢æ×a>ÁñÓ «`ädPã� ÃD†¡ÿW~‘aø"eä0*¦ Öò FFúk™X]EQNFò·Á’3rŠ*êfLq4Œ5•gŒ}aY£aŠcÃLþc˜ÉL„…ø‚?ůÂlI¾!0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã`0’OðL„ÿCX°Éæ+0ühXOßÀà´Âˆ368Ð×3†FÍÈaTÔÎ,˜ë'XóôÀj+9Ô1a³ ˜ð0,"žJ£3ʧ Öü æúU�híJþ?»uåÚÇüíê¥ËÌXfÆ:c3„ÁL²–’,#¥’dœœ‘†S'% +i;m¶zë¨lÕ©œZ%K%RÙ*[ É cít½÷óÌH¨Ók†þz¿ÿÿîës}÷sÏ„Æ$òaœk¨*Î=—ó&Áþ5 +ÃàU(t[3$:1#·¸òÁ8|XbL(ÓÍvå«0"…nÃðaE'¤çUÔ·vrú¬²87#1:„ɰ¥STð˜ 0‘L³q]·yw|ZvaE] ›Î¾ÑÓq¾¡–2€‰~›)Š””QÔЛg¿Âokìñó׋+ÁgÉž¾]Â…�»Þ×§o]éoØÕßÛÝÑÚ6y9ùÐÎ@/g+c2/%ñŒ÷Y‚Û¯¡oºÐÝ7$*.åJޣꗭݽ@6 Ñx¶) Ììç²ß·5Ö”æœKÚûÛpŨZÊ8´ø,‘™3Fa3E�à’©êЭ�½wËìͨ$¸ord—HIP‰jfïæ½1,6îôŸÙy÷ËžÖ4¼nn}û®½£³³ó=H—À�¦Á!ímoZš^Õ=«()¸‘™vü`k½‡£%M~(ÇÂF+SÓ1žï°œ´=6.ù|Ö­‚‡åUÏk^565·´¶¾�òVÀÀí­-ÍM¯_Ö×TW”çå\J9~02ôçÕζsõµ Â�c79Rxý•5gϱvôðÝ´}ÏÑ“é—sn<(}RUý¼¦¶®¾¾¡¡á¥ãõõuµ/ž=­(+)¾{ãêùÓ "B7¬q]`FÕV‘—AM(Œ_™J,Ó`®ÍRß mч’ΜË̾y·ð~IiYù“ŠÊÊ*�§𭬬xRþøÑƒ¢{w®_ý3õ䱽ᬟ×0ìÍ�(jŠXŒb|aüÊ`™ +ªÚTSÛ¥+|¶Dì=zâLÆÅ+Ù7nååß+,,*..¾/DÀxQaÁ½»wnæfe^H=0*,x½§«½MWC'~¿ÿ=¾0¸2x™XE52ÕÔf‰ûÚ ›Ãvï;’têlú…K™W²®eçäææ^"`<'ûZÖ•ËÏ¥ž>÷{Lxhs¥óBàÒ$ÈIó9Æ[¦¤NI�l0×j1c53€¹çàÑ„§’Ϧ¤¥gdœ9/` ÙŒŒôÔ”3œLŠ;¼/*|K�Ÿ—»£�™1ä’A‹#¾Vo™<™¢ª¶>ÝbÁR÷5¾¿oÙ½÷À¡#Çââ“„JbbB|ÜÑÿï��Ú¹-$ÐÏÛÃe‘•©¡ŽÆ®‰0x™|™ŠÖl#S+{'÷Õëü‚C·†…GDîŽŠŽŽ‰Ù#Dbb¢££vGîܱm +Ðß×ËÃÕÁÖœ®OVW. ä·\ð2y2¬Ó€ *èDgM]Ài"«&˱ñq@7µ�Îä©&ÏúlƒpÓ�‚«¾ÄMC„BM-sŠ)ÿϸüW€Ф”@ endstream endobj 320 0 obj <> endobj 322 0 obj <>stream +H‰ìÎQ‚@Ááþ—6~a�FÙy&]'¨*ÝfùZÒ冿­©Ë·« ·y-T›Û:]›ß:WëyϺ^³¾Ö~­÷5žu¿†³îÖ(Ö½zJ}mͺG/ëþ¼ÅÆ–ÔWnlI}ãR_ƸôXwcÍfŒ2F£ŒQƨԗ1ÎeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(c”1ÊeŒ2F£ŒQÆ(cPEÇgÆ(c”1ÊeŒ2U…ÎŒQ©±ªÐ™1¨*t–« +�¥ÆªBg©±ÏWÊlý +™mÅf›¯€Øö«6zuÏÆ¯ÞÚî«qvðêš¶šj§^ókg[“k¤5¯FWsn×V7ç¾Jý¶ùãŠ>=3Q‹ endstream endobj 332 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4764/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwT“÷p½WI „‘0D�=d£h‘•ªD$8q2´\"£ª¨@híÅ�=TH¨ë"Ô"+¨{EöÔÛû{“È*jBí9ï÷ÿ÷9ŸóŒ_2g�eî´ó5YÀä~üÁej6>êŸ ó¨0÷¥,®jÞüùó…„„„g:BB 0¤û2—ÅU ‹ˆˆŠ"$Ôôíê‰ŠŠˆݼ/ ñX<•(%&&ŽF£%$$03P �C!¢�íOÓø, B QâhŒ¤”´Œ ‹ÃÉÎLp8,VFFZ +#�CÛÚŸp�! + ‹"Pâ’ÒXœœ‚¢¯¬¬Â‹êÔï ¬ŒWRT�—ÅÉHaÐbH>í32hŒP»D(4F+« ¤LX NÔÐÔ"‘HÚ3IKKSƒ¨FPÁ+Êá¤%!š°Wö ÏÚ…ÇHãä•TÕˆZ:ºú†FÆ&¦¦f¼˜O5üïMMMŒ ô’4Õ xYI4 +!"ôéqò]"1 )œ<ž@$é›/²²¶±³·wppäÅijáíà`ogk½d±…©‘ž¶†š²N#Žãü” r�1"Å12rx‚†Ž¾‰…•­ã².®îžžd2™2Ý€žîn+¿qv²·^lf¸Ps�²<4MT˜+û„KX‰–Ä*¨µ L-m�V¸‘½Vûøú­ó§RxY?µð>¦Rýý×­]㽊âî²Ì~‰¹áB ‚¢¬_6yËxsE¡¥d•šz&–vή”Õ¾Ô�[¶íØÊÏî©…ÿuHHpÐÎí�›ü¼½ÜW8.1Ó'©áå¤%>.ãï¸ðj$ ›e®^k¨›·ïÙ{ <âpTTttÌ´yøÐÁ}a¡;ׯ]å±Ü~±‘Žº2O6ù«1Æ¥®cdéàBñ Øv0òûã'âNÇ'$&Òf ‰‰ ñgN�Œ=¾7tûƵ^®NKLt‰*ò�ŒûjL¾`qIÈelåä¶Ê?0xoÄ‘g’Î&_H¹”šF¹<½@%ÒRS.žûùÇ„¸cQûwo ðöp¶6Õ%‚ž¡ÁmÎûcËx &†Á*©é/Yêá½agXÄÑS´äzzÆõ›·² FöôÃ`dÝʼqí—+—Îÿt&6j_Ð&_òr3]"^VJ1Éš�†�A¢$d$#«¥k6ï�‰K:O¿z“qç^΃¼|&“Y0ý0™ùù¹îßÍμvåâÙÓGÃCý(ËmLª)á0b“ “?H)9MK'�5›CÂ�Å'§edÝÉÉôÛ“â’Ò2Hùô*”••–>.Ƚ—}ýÊyÚ‡¿ÛêGq^b¬MP�ÜØ2nÃDQž¨gáàæ½)äP,íBzæÝÜGOJËŸ¿¨¬ªf³Ù5Ó›]]]ùâùÓ²âÇù÷—~:ù]àZÏ¥–†š*²’`˜ZÆkZZž mbã²jCpxlRJFvÎÃâòŠªšWojëê 4N/P‰úºº7¯_V¿xZò8÷Î�´³'#÷löqs°ÐUWÂJ ¸-›�¦a`¹Œâ¿sÿ1ZʵÛy…¬ +ö뺆¦–Ö¶¶vÎtikmin¬SSY^ļw“~öÄ¡� «¾±1&©Ê�ý˜ÜI"ÄAÃtLí\}Ãbâ/dÜÎ/zZõº¾©µ�ÓÑÙÙÕÕÕ=u:;ÞrÚšÞ°Ÿ—<¼w#5éø�ëÈKëAË�ã[Æ�$R«DÔ·tö +ŽˆKNÏÎ+zÆ®mjåttõôôöõõó20õð +ôõõõötw¾mk®{YQRp÷ÚÅ„˜°-Þ+mM@Ë$¡ÃœAIʪ’Ll]×lÝ{4)-3§ð)»®¹½£»·¯`pppˆ—ᩇW”ÆÞžNNKýËŠâü_Ó“O +¢R–.ÒSW‡ Þ²ÑYroR\ZAM׉B Ž8u>ãîCVUm3§³§o`�«yÇËû©‡_"Z×Û–úšg…9™i´#ÿÞâíbc¤¥ŒÃŒ[ÿ¹s¡I¢Á$ ¬V¬Þv„FÏÊ-®xÝÔÞÙÓXc9ÿ›zƇ‡z»8͵լ‡w®ž‹;´k�§ƒ™A^jÜ,?ܤ²–±­›ïöƒ'’¯ÞyTήoí€\kœÉ…€¬½ñUEуÌÔĘ=¿u¶³”æÝåX˜˜¤AÇÜ‘L Ž<“r3ç h§»¸x¬ßg,<Ú»áÁþžŽÖ:вÛé?Çîßê³ÒÆHîrÌ’øý–RX »h™×Æ=ß'Ñù¥Uu­½À5³¬�õusš^=/üïõ §À,=ìMI*²ã–Œ¿ûŠêú`Ŷì=~6L²¦¡½«op‚Í,‹G=Ãìh©­,É»•–@q²XHÆ-£D4´vñÙvàDrƽߞ¿jâôô ÆÅ•A-ëj«g³ +~½òãѰMß:/ÖSS€¶, üPÊà5Œl\}w„Ç]¸žóäÅ›–Žž5Œ'êïæ4¾|öøî/ÿ‰Ýø¯VúÐö�9K ‹×4¶s÷Ûq:åæƒâÊÚÖÎÞÁaA¹¸-èyÛüº¢ðþµs'lóq±6$*É ãaàIYËÄÞc]ÐáøK·òJªêÚ:ûûš%wÉ^åÜÛ¿Ã×:KžÃ)“Lí=ýƒ£R³òK«ëÛº¸0¹¸³ìël­«,ÉÍL9±ËÏÝÎX ��¦B2uð¤†D%¦1˜elp”ÜÝ,¬«­®ª4ïÖ¥øÈ ð^˜€%ð��‡adUHfdjht"�Ád Í’{–ÕeùY© QÁþžÐC6)LÛÌ‘Mãúêïjo`—1i‰Q!TO†…A…Q#°=»€U3{0“A/,•ì`=ý“Ã(£0ÎlÀºù0xúÉŽfÚŸ†]Î.(¯iœ-X « ›N‹�¡„?üíÿKaœQåc0Õ‰°¾¯#°Æšò‚ìËŸ�™µ0'Êúݳ/ìÀD˜ê× 3ÿa»×Sœ` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †ý`¡Ç¿!Ì‘úÂÌ>3›UØûwCýa*“ÁT&Âú‡Þ½8¬¡†U�Mÿú`í£0ògaôìVMÃlÁØ,&ƒN‹�!!Øœ‰0ò(¬}6a‰Ñ¡Ô?Àæ@0ä,šFg0YìÙ�uX“‘–õvë<êµ�øu® +ƒY˜Íf¬3fìËLÙI–!½*„6å(KzS'G–Ö£$mZQo%G8'•„Ž[‹h”,eKŒ=§®÷ùýfä «sÌðßùþ?×çºïûy~¿ˆ@Ž-›©DüŒ¹ÐÖ#p[BšÆ›{د»�[[V�•À‡a¦Â0D%&Û–Ÿ–UX^;ç0è…a5¥ù™)qaþî6,õk0*“mà �OÍ,(«á¶uó†FÇæÖ×Õú²úÞ� ÇbC׸Ya:Œ@e°lÜýÃbS.æ—V¿líîƒas%“ìíji¨*É;4f«Ÿ«•‘…€–œ “D(FÖnkB÷$_È+©jhéêœCØghÅFz;š_<.Î={$:Äg™¥]�–›ÃS膖.¾[~J:—{·²¾¹³w`dìϹ’}<üíMÏÞ¾v:ñÇàUK-ôi +xÔd˜€)Ò ;¯þa÷ጜ;�êšÚ{àíŸpÁ»þ§ÜüßɃQAÿYb¦«FÆ¡“aNA]ÏÜÉ{ÓÎC'¯U</,¼ýs#ãOrÚýš2ððïݾ~ù÷¦ÚªòX$bÁ¼ Ø<1KVÕ1uðÚ°}_ú%ð^p[Á’�À-›uÙgÈ56:Üÿ¡ã͋ʻyàRBÏÿ¯Gbl�R–¤¢elçw lå‹7í=ý e~šmÚgÈÅoX7˜dÅ­k‡w‡øºXÁÏØT˜´ ‘Ê0²rõ ‰>œqíVÅÓÆ¶®^°eÙlÙ> XÀ5Äëéhn¨.-ÈNß¿#ÈÛÉ\Ÿ]Jñùó¾‡}7o�¸š H×·pòÚ±?=» ´ªþMû{ÞàÈèDãÛf%Ÿ Öpõèlm|úàöõsɱá�žö&:ªdì_wÿËö“ÕtLì=Ãc�žÍ¹Uñ„ÛÒÑÃýh�M¡9‚ÕØÇQàêízûº®ò^Á¥‡vû¸X±˜J“Wl|–²rÊL–•‹Oð΃dzóK?ÕÚÙÓ704< +Ù œOBEP �óq°yºÞ6Õ×Ü/ºv69.b�—£˜$ôAš +ƒ>JŠ4=3G¯u{’2®þ^VU÷ªµã}/o`phxdèø*‚bpÌÈÈðÐ@_OçÛ¦†ÚŠ;¿fþr`g°¯«ÍB-y,ÿy�€ÁO, +'¯¢Å¶qõÙ¼c_êùëEåUu�Íï:ß÷öõÜÐÐ0œ¡Â¯‡ ôóz{ºÛ[_××>(οtòpLØZ/Gs}:•8e’÷’B×7sð ØºûPzfnQyå³—M­ï:»ßèíëãñxý"Ñ××û¡§»³½í ·®º¢8ÿòé£q‘A«\¬ÙZªd¸“Óaàs‰#«h²¬œ½×‡Ç$ϼ~³ôam÷usÛ»öήîîî÷ =Bª‡tuv¼kkij|ñäqùí—3’vûqìéÑ) aˆI“̵Œ¦kbëº:(rOâñ × +‹ï?®}^Ï}ÝÔÜÒÚÖöÊ;!·µµ¶4¿yÝØP÷¤²¢äæ¯Ù§“÷î ñ_¾Äˆ©"�CMmØxËPX’ÃÀì{Žï¦È=?§�½œwónùêÚguõ /¹ÜÆÆÆW"”s¹/êëž=©~ôǽ[ùW/žHJˆ + ðZjÅÖVS$Lo˜ eÒ>!a¯IHˆ��‹�ùi÷Îÿn Þà¿j¹‹ƒ•©¡MI»¾6ȉ5=ÔéÚ†&‹íœÜ–¯ô \²54,> endobj 333 0 obj <> endobj 334 0 obj [0.0 0.0 0.0] endobj 335 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1197.2163086 112.0078735 cm +/Im0 Do +Q + endstream endobj 336 0 obj <> endobj 337 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4764/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwT“÷p½WI „‘0D�=d£h‘•ªD$8q2´\"£ª¨@híÅ�=TH¨ë"Ô"+¨{EöÔÛû{“È*jBí9ï÷ÿ÷9ŸóŒ_2g�eî´ó5YÀä~üÁej6>êŸ ó¨0÷¥,®jÞüùó…„„„g:BB 0¤û2—ÅU ‹ˆˆŠ"$Ôôíê‰ŠŠˆݼ/ ñX<•(%&&ŽF£%$$03P �C!¢�íOÓø, B QâhŒ¤”´Œ ‹ÃÉÎLp8,VFFZ +#�CÛÚŸp�! + ‹"Pâ’ÒXœœ‚¢¯¬¬Â‹êÔï ¬ŒWRT�—ÅÉHaÐbH>í32hŒP»D(4F+« ¤LX NÔÐÔ"‘HÚ3IKKSƒ¨FPÁ+Êá¤%!š°Wö ÏÚ…ÇHãä•TÕˆZ:ºú†FÆ&¦¦f¼˜O5üïMMMŒ ô’4Õ xYI4 +!"ôéqò]"1 )œ<ž@$é›/²²¶±³·wppäÅijáíà`ogk½d±…©‘ž¶†š²N#Žãü” r�1"Å12rx‚†Ž¾‰…•­ã².®îžžd2™2Ý€žîn+¿qv²·^lf¸Ps�²<4MT˜+û„KX‰–Ä*¨µ L-m�V¸‘½Vûøú­ó§RxY?µð>¦Rýý×­]㽊âî²Ì~‰¹áB ‚¢¬_6yËxsE¡¥d•šz&–vή”Õ¾Ô�[¶íØÊÏî©…ÿuHHpÐÎí�›ü¼½ÜW8.1Ó'©áå¤%>.ãï¸ðj$ ›e®^k¨›·ïÙ{ <âpTTttÌ´yøÐÁ}a¡;ׯ]å±Ü~±‘Žº2O6ù«1Æ¥®cdéàBñ Øv0òûã'âNÇ'$&Òf ‰‰ ñgN�Œ=¾7tûƵ^®NKLt‰*ò�ŒûjL¾`qIÈelåä¶Ê?0xoÄ‘g’Î&_H¹”šF¹<½@%ÒRS.žûùÇ„¸cQûwo ðöp¶6Õ%‚ž¡ÁmÎûcËx &†Á*©é/Yêá½agXÄÑS´äzzÆõ›·² FöôÃ`dÝʼqí—+—Îÿt&6j_Ð&_òr3]"^VJ1Éš�†�A¢$d$#«¥k6ï�‰K:O¿z“qç^΃¼|&“Y0ý0™ùù¹îßÍμvåâÙÓGÃCý(ËmLª)á0b“ “?H)9MK'�5›CÂ�Å'§edÝÉÉôÛ“â’Ò2Hùô*”••–>.Ƚ—}ýÊyÚ‡¿ÛêGq^b¬MP�ÜØ2nÃDQž¨gáàæ½)äP,íBzæÝÜGOJËŸ¿¨¬ªf³Ù5Ó›]]]ùâùÓ²âÇù÷—~:ù]àZÏ¥–†š*²’`˜ZÆkZZž mbã²jCpxlRJFvÎÃâòŠªšWojëê 4N/P‰úºº7¯_V¿xZò8÷Î�´³'#÷löqs°ÐUWÂJ ¸-›�¦a`¹Œâ¿sÿ1ZʵÛy…¬ +ö뺆¦–Ö¶¶vÎtikmin¬SSY^ļw“~öÄ¡� «¾±1&©Ê�ý˜ÜI"ÄAÃtLí\}Ãbâ/dÜÎ/zZõº¾©µ�ÓÑÙÙÕÕÕ=u:;ÞrÚšÞ°Ÿ—<¼w#5éø�ëÈKëAË�ã[Æ�$R«DÔ·tö +ŽˆKNÏÎ+zÆ®mjåttõôôöõõó20õð +ôõõõötw¾mk®{YQRp÷ÚÅ„˜°-Þ+mM@Ë$¡ÃœAIʪ’Ll]×lÝ{4)-3§ð)»®¹½£»·¯`pppˆ—ᩇW”ÆÞžNNKýËŠâü_Ó“O +¢R–.ÒSW‡ Þ²ÑYroR\ZAM׉B Ž8u>ãîCVUm3§³§o`�«yÇËû©‡_"Z×Û–úšg…9™i´#ÿÞâíbc¤¥ŒÃŒ[ÿ¹s¡I¢Á$ ¬V¬Þv„FÏÊ-®xÝÔÞÙÓXc9ÿ›zƇ‡z»8͵լ‡w®ž‹;´k�§ƒ™A^jÜ,?ܤ²–±­›ïöƒ'’¯ÞyTήoí€\kœÉ…€¬½ñUEуÌÔĘ=¿u¶³”æÝåX˜˜¤AÇÜ‘L Ž<“r3ç h§»¸x¬ßg,<Ú»áÁþžŽÖ:вÛé?Çîßê³ÒÆHîrÌ’øý–RX »h™×Æ=ß'Ñù¥Uu­½À5³¬�õusš^=/üïõ §À,=ìMI*²ã–Œ¿ûŠêú`Ŷì=~6L²¦¡½«op‚Í,‹G=Ãìh©­,É»•–@q²XHÆ-£D4´vñÙvàDrƽߞ¿jâôô ÆÅ•A-ëj«g³ +~½òãѰMß:/ÖSS€¶, üPÊà5Œl\}w„Ç]¸žóäÅ›–Žž5Œ'êïæ4¾|öøî/ÿ‰Ýø¯VúÐö�9K ‹×4¶s÷Ûq:åæƒâÊÚÖÎÞÁaA¹¸-èyÛüº¢ðþµs'lóq±6$*É ãaàIYËÄÞc]ÐáøK·òJªêÚ:ûûš%wÉ^åÜÛ¿Ã×:KžÃ)“Lí=ýƒ£R³òK«ëÛº¸0¹¸³ìël­«,ÉÍL9±ËÏÝÎX ��¦B2uð¤†D%¦1˜elp”ÜÝ,¬«­®ª4ïÖ¥øÈ ð^˜€%ð��‡adUHfdjht"�Ád Í’{–ÕeùY© QÁþžÐC6)LÛÌ‘Mãúêïjo`—1i‰Q!TO†…A…Q#°=»€U3{0“A/,•ì`=ý“Ã(£0ÎlÀºù0xúÉŽfÚŸ†]Î.(¯iœ-X « ›N‹�¡„?üíÿKaœQåc0Õ‰°¾¯#°Æšò‚ìËŸ�™µ0'Êúݳ/ìÀD˜ê× 3ÿa»×Sœ` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †Á0Ã` ƒa0 †ý`¡Ç¿!Ì‘úÂÌ>3›UØûwCýa*“ÁT&Âú‡Þ½8¬¡†U�Mÿú`í£0ògaôìVMÃlÁØ,&ƒN‹�!!Øœ‰0ò(¬}6a‰Ñ¡Ô?Àæ@0ä,šFg0YìÙ�uX“‘–õvë<êµ�øu® +ƒY˜Íf¬3fìËLÙI–!½*„6å(KzS'G–Ö£$mZQo%G8'•„Ž[‹h”,eKŒ=§®÷ùýfä «sÌðßùþ?×çºïûy~¿ˆ@Ž-›©DüŒ¹ÐÖ#p[BšÆ›{د»�[[V�•À‡a¦Â0D%&Û–Ÿ–UX^;ç0è…a5¥ù™)qaþî6,õk0*“mà �OÍ,(«á¶uó†FÇæÖ×Õú²úÞ� ÇbC׸Ya:Œ@e°lÜýÃbS.æ—V¿líîƒas%“ìíji¨*É;4f«Ÿ«•‘…€–œ “D(FÖnkB÷$_È+©jhéêœCØghÅFz;š_<.Î={$:Äg™¥]�–›ÃS膖.¾[~J:—{·²¾¹³w`dìϹ’}<üíMÏÞ¾v:ñÇàUK-ôi +xÔd˜€)Ò ;¯þa÷ጜ;�êšÚ{àíŸpÁ»þ§ÜüßɃQAÿYb¦«FÆ¡“aNA]ÏÜÉ{ÓÎC'¯U</,¼ýs#ãOrÚýš2ððïݾ~ù÷¦ÚªòX$bÁ¼ Ø<1KVÕ1uðÚ°}_ú%ð^p[Á’�À-›uÙgÈ56:Üÿ¡ã͋ʻyàRBÏÿ¯Gbl�R–¤¢elçw lå‹7í=ý e~šmÚgÈÅoX7˜dÅ­k‡w‡øºXÁÏØT˜´ ‘Ê0²rõ ‰>œqíVÅÓÆ¶®^°eÙlÙ> XÀ5Äëéhn¨.-ÈNß¿#ÈÛÉ\Ÿ]Jñùó¾‡}7o�¸š H×·pòÚ±?=» ´ªþMû{ÞàÈèDãÛf%Ÿ Öpõèlm|úàöõsɱá�žö&:ªdì_wÿËö“ÕtLì=Ãc�žÍ¹Uñ„ÛÒÑÃýh�M¡9‚ÕØÇQàêízûº®ò^Á¥‡vû¸X±˜J“Wl|–²rÊL–•‹Oð΃dzóK?ÕÚÙÓ704< +Ù œOBEP �óq°yºÞ6Õ×Ü/ºv69.b�—£˜$ôAš +ƒ>JŠ4=3G¯u{’2®þ^VU÷ªµã}/o`phxdèø*‚bpÌÈÈðÐ@_OçÛ¦†ÚŠ;¿fþr`g°¯«ÍB-y,ÿy�€ÁO, +'¯¢Å¶qõÙ¼c_êùëEåUu�Íï:ß÷öõÜÐÐ0œ¡Â¯‡ ôóz{ºÛ[_××>(οtòpLØZ/Gs}:•8e’÷’B×7sð ØºûPzfnQyå³—M­ï:»ßèíëãñxý"Ñ××û¡§»³½í ·®º¢8ÿòé£q‘A«\¬ÙZªd¸“Óaàs‰#«h²¬œ½×‡Ç$ϼ~³ôam÷usÛ»öήîîî÷ =Bª‡tuv¼kkij|ñäqùí—3’vûqìéÑ) aˆI“̵Œ¦kbëº:(rOâñ × +‹ï?®}^Ï}ÝÔÜÒÚÖöÊ;!·µµ¶4¿yÝØP÷¤²¢äæ¯Ù§“÷î ñ_¾Äˆ©"�CMmØxËPX’ÃÀì{Žï¦È=?§�½œwónùêÚguõ /¹ÜÆÆÆW"”s¹/êëž=©~ôǽ[ùW/žHJˆ + ðZjÅÖVS$Lo˜ eÒ>!a¯IHˆ��‹�ùi÷Îÿn Þà¿j¹‹ƒ•©¡MI»¾6ȉ5=ÔéÚ†&‹íœÜ–¯ô \²54,>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 41 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 42 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 43 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1609.0 1185.0]/Type/Page>> endobj 44 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1611.0 1184.0]/Type/Page>> endobj 385 0 obj <>stream +H‰„WÉŽd7¼×W¼¨×”DmW·s >Œï{|° ØýÿÀD©Ì*7ŒA™bjã RŸþýùúô¯Ïv}÷ýçëåÓçìzûz•ËîÚ6¾›—ëúúöû˧bê¿__úœ·Yå‚Þ¯b­ÝËöÕ¶ßÛÆõçO/?¿ü¡U¥_sí»µËz)ZæË¹ì?×ïXˆ3_Îlëµ_†Ïë‡â,k<~¯q÷Ùª×z½ýöòÝ�×§~±ëë/×?~¼¾¼|yÁ]Wjl·wÒ†ãŒqÏ=®RVÓßÒÓn+l Úc+6¦òÔuùü«òíØh<ͯ20õªaZewôÝó[ÇþA·âS.ßõ†mØkzy4†s¿½¼º�{M:âW +óöºèõÿí¾žb¹Þ^žÂÝ{½»4ŒÓà.\Pq¦aMèäê¢#Jž³¦ÏÌüòNíM8ƒ^qþ,õ�Öõ¶*kôŠ[�—=Fç¿rÏÑ8î@V½ëš×k¿·7\WïUÅæãj·AïW¿»ù;’R¶`Yl*·o?Ú½lX—!¶{§&G¼®‘‡ÞíÞ-¥_S*7bLÕχÄwôI €˜©µ>ª4Ÿðw¹k™ÐµNæÇ cþ×Úç7àGu fÀ°&Uû¦0·Œ¨øïí¥cÅ¢¸V½ú]ÂÚQÎ8ý�’cו[�…ãœÖ¹ƒ·ê¢qWÎHD¢¤n¯“ÿÓ§ÔÒdX4³nëÇPͪ\J@ìÎÔ�kÂ{ǧ߀;v4ÐÚÆ;Ð Œ8ÏÑ Ê©‡S¡�…ˆ1Œécä ¤z!Ú}ñ{¬•cªWëL !`ŽÝ:¬Á“Ã8(@}1A¿'4�ò¸’�„‡I±‰CªBÚ╲§²®Í& + “ˆšÑ®Z¥óžG 9 yÌu¨JAÞ�qYZ¶ã2¾´¥aÖˆmÜÓ#':ˆJì-ØQú²AØP Âê3@8]Ú ~“†(�åÀŒ«† ZŽd€V&ã ÈHŒg—QL÷„ŽÇ”éBCB¯@p­ƒc‹˜JU„I0åš ¼CÚU��÷ÃS¤ŽÓœ%iš,u˵‹'YΟ¡ðy}PkÆÊc!O³È'œYˆíá=’Ö¢¹&HJà‰t¨½²ilz¤F^7RåTœK6Ʊ]ðëb#“ÉàP�G;cƽؑp +ø‘Ñä)Ûy.£Ç¨Ó­ˆY% ¦qLO4ÁgÔà�š¼¦0Wf‘CU„f1Yl÷€>©_F€Fšjâ’C]‹Rê$­µÃ¡$–gÞü•Påp¨qPÀ Ÿ…~u•|Ä^žZa�¤ ° UhrñF c] m3ù3Ì»Ð4BUq NžKs½UQwQ$1Z.¤›Š°Mð©2šbˆ”:ÉÅ,E3•ÙÝÂ~;c·Á|lPÑ^µ?nÄ›ÒÔ·É€#,«±‹ý–aDä5«–Ã,–¾& ÚLtàúÅŒ·\T:qQ˜²%¸°ÆŒ’iLX€i Õ±�! ß$Ìãª%q[8ßYQаl±ÉÌ€qf˜xÇÉ3;(…å}eX%oJà aoÖ°kæiÔÃЫÁ�©ÎÌAe7Eq +3µB𦒻A!GÌÌÔÊ9& ciÜ5éʺr({ +EL%0‚ƒ¦ø‘ij‹3®ÌwÚ‡h:¡H¦2!C+ñ[µ #ŽÁ,ð+=å�DJ¤€ÒirºûÔX$@ceç Í€6Çã†,IlB–ͱòËkßÔ §@�´™Û{£¨šP,`DÍ¡ÿ~ŽU>RPáDkÒ‰µ;jV2.JÚy)i„õÔ8šµz‰¨FWn.É£& q5ë¨M¤ˆû +ˆ…¼DÒãPG…{‹X΋tº¢r¼-®(zŠÁ⩦€VÑñÀ''jÖÄ®jÈjÔˆ~ Uˆám5¶›Ô¼\ü-BïgXHÛ³í!�ýM ^ +”3µSßR)¼°‚J�ÜEé붬x¢¥h�'ÿÏ6a¬¡—éìDÚcÑm*S½FÛdšæZÈ–CVeµVÓÎîì!¬Hô=À»’âÄŽ8äBÞÖµ/õð‚¨ã859ôZ‘v!Ûæ1˜Ï“°˜ž˜wฯÌòg†ïz|0‹ûR¤û»ÔµõL]úDØo‡Ñ«bÐìˆIL{dñ˜…f‘ë$Åઽ½æ¦šóÕ‰ÂÃyG,Q⸫êÍ�'‚©ñ6,wõPª*èE�–©u¨ÇÓEåQí´Éòâat=Å—6³¹WFÈ]ƒË +ˆ°†Y‡Ô¿À²õ-³t ƒÒ?ˆí!⇞&¯çOôc,ïQª°P¢ü´ø©�/êd»�âB±ç£—�æüVdc-EoDFc¶KEô´#¯®ŽÅôâ¤/~‘7J%õHÍeʾEôõëÏŸÞÍV ÓϬ¾0ýógn0ÛL«ì±Jù˜ä‚°šÏ%ÚÔYê�Áî\á¸ôtYï\;ãÝÒú�WQsmÙ&ÅûrŒÇ¡~ŸÖZ’@OÃî|-Zþª³Ý+%¬ÚìjÐð²ãA3š›ÉR@V˜êžã3ûŽr)FÛ”»âÜ8�æFÔ]tižJ˜Fëýª| ï¡x‡¨¾Os6Ã=øéñˆ;âFòxº®oDö‚�5ÞKt(°3;EiÆÂÅë•y‘–êN3-Çž'-«jG,zLòx¨¬“o‰pË×—^-.ȃ"ÄK­ÜŒGˆÀîBÊjñfH<4=–µÓH¥pÜÿÙæ·;^µž¥îµÅ;ªeh›ëyZãõWUìýYTê«úoˆ.þ*¾&Gñ ‚ñvE²FHŠŠ!s(öÆo¸§-4ÃôŸUõ>]o¶ˆÆ!ÐÕed£²ˆ÷Xàóê:¯Ðš› +á�e¯Q»ÊKÌxÊÖ½"OTåV˧¦V’yùnPtäwªy„hÉRDÂíà,ææSÜFV,ü(©®ÉÊÁz¶GH¹Ðžƒsª¦?0û1ÖÛˆC§’c%a3åj’É0Nµô¹p^½φ™ZèÆ¹$�ºÕô •E‡Ç†ÞÕT0Ý\Á»rÒ“w� ø·¼û˜ýÿ¼ë o†´[}|¤]>™P„�aX;…è±ÆcŽ‚‘›ÐÒÖ0ÇÅ{¬&¯å9 +*=¢Þ¹ƒ Ñ9ˆ ªYçp³1+¥‹hÇCµ”¢ug—³¦÷7ª™¶"ü•°ÏVc¸õާ/:Ãò {I xËGeÒ.ù¹ˆý'¼Ç†¼0Çk°4qßõV;:†þóç,_NÁ!í&ª¨;ÓÃMÇÚ–îsËÚ%BÍûß”,}Ç¿Qž\ë¥áÚÎçB>Läõ©‹Ê�@§pÂó‹Ztc´Ç‘–o´¼�ÕFj‡U£e ÕG^\i¯‡ÑÑ E¸gÕ[1 g�ºæÃ“!D°×c—×.%¤þWTž9TjXpLc¾n˜ C' +ñl#Sž¯"fr�ꇢìh[[áÎ ˜òÐc,ç¥&Uãù?ö«»²Üæ^…6 > ð³ž>㨣Ù`Txõ¤n;t0G‰D<ðò PÅÜ_êéöÄì ÆGª?O��—Òd)·Ûˆ¡×F¼XKôò,HÐLënP±Kï8åééô‰Ö š‡O� °Ay²ÝåÚ!zêlÅ™£B™<Ï$ã{“ˆÝøðàbie Î6¬IõÂ25jœÙ‹ŠÍ²â¾^¿¨øñvgH2fؾ>ÝÏ»çËp7)ãÉ·~µØ2Ñýe”í¸_’³ã«™!“s?[Æ¥[ýÿíÄ T&wÚI„÷§+Õ(}t¶Õ^L#s‘Éö^$X¢!Ÿ¹>PÔC((ïd×ÙÏpVç7¼ƒU'Ð|53^-qɶG)Dî¿_Dð¹0ø�À¡·P¿¡Å@Ô±€7'š uuöËõ�ï4¼*Ý9‘ÞÈ–þ¬Ñ6Jž„D˜ñI£!¡ŽTÅ1B%p8$.ß!É‚5I$#'ßE;1„(Df\';âê„ÃÀ°3„–>ÕiŽÉÀÅ”A4Ä“‰=¶¶V'QrxkÎá轤E£¶]»s§MT:¶�‘|•dLÐ`Óœvð{'‘K<$É8|>Oâ²�º\! %964@•�U¬Áœ],P·ÒèGÔÁ³Š_¢}:{N޳ ÓèŽý΢¥þ91y?,6P‹ãÆÉˆ`Õ^OÐy+aej­‚ ð³Üeå×*™ß8L¢½à «0¿ÃÝP€ŸàÓÕ�aº†×")D¿Âï6ˆ$ÁãüBWÁAGÃ'¹jž¡÷ý$A qÆ�.•‡ìŸ ŒÊ¤ÃGé‘�IÒ|ÿÇ(fqM—o´€îE,ÞüTáÍÌjÙhèF ÑLàà#u�ÍNèÅMZC �%ÆE�j!»èÁRè’ê¢X x¦†D¡ÂhÕû`hŒx½L¿‰î9)éŒ9Š|¦ò‹Å¿†¹ñ íp ¿JiQ:®ÁC¹$™š¾ñÑ�e‡­EÈrmg¤ôÑÉBèa�99�ñ^Ä-þ¹ù/è³ÁÛâí¨ÝWôAȬVËv1r0€/^§Æµ]YÍQ‘S6騬n/¬m×Ätaç¬ó!5åµþÕ¸—2’¥Îýë±Ë6À²¦ÑŒCѶÐ)¦K*°Ý6…žà1ƒÏ„†G3bíì–ÃñÁG›ãåZ.4%ÕšN©ñïlÕz’“�›Ÿsò®ŸÈß(ÙÓ.sžçÅ\ÚCU“öÉ;؇Û@2æ‹í¤ +�­‡ÃƽYº\uñŤ*fÁH™ã g›ð øÓþ@im ôŸäÑm"ƒþÊiǺiáÓ:IºX×`Òõ˜×‡6Pßdg"PÔE?€K<Æž¥6•º“£(y®Æ‹í©ü-ˆÊ|D&`�O†Zñ~|E¬ñY\r:Š|7>.6¤Ü +Gñ;®S>VÃMµ¨_ô¾›'!‚�NY\j`ÌΤ4f%µB zAÁOŽS`2š6h„r°iS6fv>Ì %]ÐêC¨OñK¬> ë(ø2îÛ?&ÚE~&n±�—iFk\-‰~Ø”Ø8ÂOlÏ315öÚ…ê¢ +d÷Pr¨„OåÐ U꣉ÀO²É¨ÞùøÔê« &ÑG+"Vm–Çi‹§@ß�ç#x�tµWI°Á~ܼpÌÆF½Ñòõd仾Õô|pb—_"D¡gJ(ì~øb‡3Æ;ˆyØ‹®Óq>eM×™2Õ¯³é­EYö’¿qçž3‹}¢�ùçb7¿_SÁîxµ‹³Ôê¢?öãÉ`±Â#6°Ôæù@ìz â$WoV¿?Ç|¿fLVÓ²^£o¶âÞé!d®gŸÕœÓJ²ßÃèÑŸ-ˆ§Pߣ0z±Ùe¨ØxÛ%·‹†à¯†ýCoðŒ(š!ìþÜÐÙNA8‡FŠó ìò‰áüÊ,Bt¤v~ýËI!¯…ÐQÃåCÁçj 㨡Ãgžÿäƒà¹ ògŠ{$žóa˜�ĶZÈøj5½d<#ÈŒ¼…Å3峕 7_ŒÉäï�iŒè¡Œy ޽êR› ®¥ÙøõxžnP––iª½ÓœÊú_œ«bòÿ§ž¡œïð æ8š²(²ÔYr� ¿}ŒmÞY¯ÚžÑï1žy}ÄxŸ|ÂO9XÜ8?­©ž+ÓÔiò|jÎñq} ‹xzh M ígXU}ÔÀD… Ý_LtÍKqßËõÚÍu^°h>G!Î3ô%^ˆì—uoN´AßêƒPkQ ú;œXÙÃÂþ£<œ8¾¿ùÑ7?úæGÿt~´"ãQüÈÎ|ÅÐNUö~»1jb¼Ú¹¿˜‹—#Ž=î­²zl¨=/•·ÑòšD]Ï™5…EÞ +ºÕu§½ØCÏx§þ…·xÔ"9™ñ¥ù·‰^†|í—@L«ÄÁ ™hô%š#kˆ`ÅF� +[Ï„­’§ÏêÑIrC@é­Ù�äF«ë’«“”)S8Ô#c + ç‰ptNÑÆ‹ž©2a¡¼f IòYkã‡iN;£4!úv#lȲ¥Û¨{ÁFí t�,L—Ô̪QoI8·˜íÅéÄJ`WF²Xíð,±ÙsiÍû�Ek¹8o¼MÞ‹å“ͤí'€ÍL¬á�Nî¼½Ädñ+áoî²òk5ýÞ‹b¢‚ûíß“�QÏêðYÐw’ ßÿ1âÜd¤éò�¥g©:£ Š–o~Š:ÌÌê„QòRA¼%Ž8è#2eMMïº 4‘³´�‹:{±v³…Ap_ƹÀ]òˆü®ÈgÇ‹fbm0@rRÀ! ccŽv*’žlpñ¯an<ÄCÌ��àãw"õÊ\ÏO üî‹“æ„Çxð”¶F�ò‚®í ¢'ý(¨Më ²…‚{‘yñÁ²„Ë´-=ôVÒGyö÷_þ“©³¿A«¥û߯ðu:šÎù†¯oøú†¯oøúÀ×úô–å¹ñ9ùÀç}ŽWÜ l?«ˆÙ¿&Æ6︶+«X)Ê‚˜²ý­¸›Œbð×|¿ê2®~BjÛÎCd-.ל=Ÿ,×Ê5!”?%N-­6è Šv†(äͻݺc†£%GmÍZ¥kQïé¾å„›DoJºÎE6Y<„ä¡w-z©�€F”œ�.÷ÒI�> ª¶h´.�»T±¥½:à]Ò¢¶êÿĵ»§Ê$D8§ä¢!yi0Æ.í9€|uúø'ðý#WݽÃô¦Çd/Ò‡A’ÎÑoYÿ‡ý*É‘G‚_Éd�îÜßÓ—9Ôüÿ:nfN…2*}i40€.Uô”Ä }±…�mšVbüT”è�f¦½äDé ¨?¿ª ¨¿×™Ãã$Ÿ†©V¡z͵@vž'þ‹paÌ{ÌG\qçUq9òe¤àÃzn€ †õ?kþ´íŒ< _|«ƒ6g­þ2|®üWëèáÄbDbîßWT9¶Ýi>é»&¢,¡S×(*=Áct¦ „G3bípËæzã£ÅõlÚog¸P.�’fM§Ôú¯?LVc oLH|Ýmw瘽½[‘ÓrFH¡É2ÄdˆÖJï2“‰yÊ×:�Põ”àRÖµz øSPiî^ÐÔo!êp‹ +ûù,r­F°‡ÜHÊ-Ïšz gp&w?ýtõâ‹&š^ °ýÐ_¡g˜ðÅ"VCqoðëôsÿ“z¼žÿ½ztÇ• w0¥�ö¥.CÚ±ìÔM˜Rž|ŒBêõƒf€´õšeAX)nò›˜Ê±ÎvA·¥f7Â¥ôDi; ]΂ÂÒ®?ƒ–âõ½Y˜ÆO‡zY¡e1ZĹ>@u?àZ6ó˜Å”úœ°_q@!0&¿©ç…¿H*ºâ" g ›^¡ lÁ� é=ûA›å¬‰a@Òy¨Ï~xZ:íÀC©ÕÎ}£“ˆ¿Ê8;Ï®n’†¬Š&cIý +J"rÍiuð7©Æ�]S*ÓL #y´“j…›Ü†ª)òÔðô-îL§Š˜y� +e£&Šé",TW²\áFıмYGEÝèL²\RK•‚ñ\Z +ZKBGÒ³®·¶ðÏH�²C:…lÕBÆŒ.Hª uè)û…ÒëVÿ ƒÅŸ±�¸¬ìÀ’oAû4nê¢íèaCk °]ÈWþ¬³Ð³#M�Ïä’p’Hp™=»}1ßó"kUøKùÿ�n¾僶÷ å¯£_�óÜg&¯~�³WJÍÙ/E©¥l!‰›)Õ ‰CÑHbMù²?‚•™ã¥q¢p4OÇä‹ÊÂ�O«<§ñ³–@�hô~CÊ@r|�ÊéP—Ï»Å$MPÞvêq“ªB*CuµÑÓ=ŠøQÄ�"~ñOЏíâDüþ³ðÛv¤%†yµ=îN£eÂì¨�‘ÖãúC¼�dN&8â‚;Ç2¸P(E3�2jŠ'P1±üã4}FùC‘}ï{ü‹ÏY¯èèi¯’R#õÀG6"‡OxAûI¡Q(s9ôN¬{ ®.x[ƒRBXê´xík´bfò†+‚ëºëz/~­~ rs¼t[JM^AÉ6Ü)ÓØ’ôhžV€ò¥Uõî†tâTÚÎ�eè…’N{Tê»Ã7xO¯•4 …©›µ«…Zéß÷ÐèPê—úW�øXt“N4WŽciü€�uÒ ‚Iá�1ŠgãÔzQ:…Ü'}½ž5ÊÈPâô8ÐlsG>BTÔËà„ÛÒÈ}¿ÏKoáø53jM0ú6’pYs�$ç² Ðø�—þ&mÓYë#}éóHŸGúü(}fPÉ +ò�âÿ).ÐVÌÏÞ=æl´/¤XeYkª¥WA4ø›³Y†0’ðŠØ|]Ý6Ùò^5æÍ ¹{øæØ¶ó48_%0A]»M>k…Ï:é>þ½wñ_ï·C–5âäßÉÐö«ô[°LBiÝdhŒÓM†º­— �ß¾Th}iÐavIP2IÐ@°b—U”ºsÔÛjxëð‡·�9ˆ8ÜgŸŠs6. ÊÙxÉPNøMŠF/éâ‚U-PÓ)úHÑGŠ>Rô')ZËŽþ‹}#j )i +7Ö4m üRNÏÔ Ñn#ÔkVOt[ß^D¶=ÖÙ®EÛ¥n+TKè¥X^j£~2|]* ŸåL!5(a•ŽQ¢Ì˜ŸLÚÀÐD7òIx©¿¨i0éè°¦ÜjέŸ2kíþ +tÓ+´�-øQìĺq?Ó¬©�̶ä!b²¼Ÿ•úO�ÁC©ÕÎ}ÁáS`È'e8ÁðÒˆBŒ”_,©¿âOµ,ôØî¾Ç‰óÈõ–Z�jŒˆ×��®ùä6ž&¡¥Ì»Ç�É!ëp6ïQœÿDMP&±Ø�à±þ’Aœ—мYGE¡´"±‹bÊ\u(+=DÖ˜ü¬­€M½µ5gF8‚”ÅÐQîd«"stABRŒ@K-.4X·úgXid"`q™š4ßÇ6nê¢ Ù8Põ¨\g¡SC¿Ì£Žu’K:£/Ö‘ÕI +G�ßÊÿ®®BFw…2øÞ…ª%d<ËaÏË•ö¢Ák&K½/©<r7Õ²ê)uEY×rè%HÔE»C̾‡€à[$g(�2ûU¬ØðÒJ´ºMô®‰38ë½ Â¡-¾hœét„šŽ>ñbiGGT¹E>®ç�½¥Õ1ÑÍÇ&>6ñ±‰ÿ‚M¬¾¢í#°‰£ÛÛÄE râ6-�$d÷ÔkÊ}ü]ÊÑ(ÜD×ËÈÏCæ‚<“*xàA%wfyˆ€µ¤PÙ¦ ÐðíBi­]ŒúŸ»³Ç-±Ý1TÖô +ƒÆ9ùb°¼`’˜¼¥Š/ªðÍÚ�†:°pu0‡z§\õ¡’‹^-*b¤§Rwê^d8£pñ‰¼i<°ŠÌ…„_2¦'©pA#ûÖ?Ž=íýãåTÅ/Dz4¿s™[|6Îû´Ì?.̰ +�kq”~ÆyÊÜT›ö™Ï{~<4¿�ØÚTÄ­ÚűžMíe¹ÌÙj„™-‡ÀOà&Ä�Í¥1pÆupÖ+Æ;%}ÑîÍùLH¯$µIð㙢ÎíçíoØèÌ™17ñƒ1jª.9T†ÉPŽ=?;ñ<>[‰Ž›Î§*‘cÖh "�d»¹³†æÀ-­Ú2½”ÞS�Z¥Ü¹’¸é + +)S;Lý˜,N'J$t™Ï>Ð3_yÖ¡|% +4BdQxlXi�øFgèâD#ü÷ãNk³Ëµ©\bt1~�¤Zi\ŒùÞxx7NíJ¨V]èŠ,™lñÍjzpúúxÖß/ÍîqÌU÷�j‰ÛB³FhÄ€O¸sí2b骊f«³Íjhv5óÔeµ…SÓå„NÒ³©7ÛK_$…—Rï¢úÂæñˆÒUfÜXŠ|}uËtm¸ðl½´<îVƒ._²ç%yâÞÅrHÀ±÷…êøz:sW4·:rW]¥?Yd‚”Ö›ˆWß™¡—P‹âÈ%<Ž³ìœ©í”såcÝ@7¾m°´…ž‘-ÇzÉ+þÈ +©�ÐÜì"~Iw1Õµõ‡›Æ¨*'j®çB0Çóle|WîÅú“dÊ0¸y Ié{‹-i”ñ€%È')sÅ>—hzG�µSöA—Å¿ØÑ]}zÄ��—Dšž²ÉˆõFvФX½o+x¨lw€Æ“ +[e_…ÂI�?6%Œ¨…šDE¡˜j,ht` ðœP й�ršaP€cNu�J±æ~&œÇ~•b�à8߀ç™d¦JeŽÜQ}èvèjWeÚjÒÜ>_RýQ"¿ÀƆ€¤ümv~›�ßfçß0;ÛÁ¼ êùÙ«½µõCót;>žq"xÊ0.[ï;ƒ´æ³w:ÿ¤¼¬)¢¼ûñ&[·kÒqªñ’6™z«-�€ó²µr¶q²ñÊ]ú(-¢%@`;GhŸ!r˜>¾Äcöì!Ñ…¦»pØ$bèwþüãï·wíþ/2lï`oH­M$Ûà£*#2PJÓR{´A�gI[$—¢1Tf +h'Ñ€bÆ7H¡YÙ3±Uv¢mSGçZŽ–»5&ï‡ÍâÉ&!‡ë`Lf�´ƒºf¤IÅM°ø•¼ZüÊ¢fú!Z|,þkX;îжx›L²ùwj�µ^Sjô¾D3ÆCŒjl;ÿP’â‚]?gÀ*C4:Õ*õw'ߥ9ˆ1ÿû*•7ô±h«[mYŒ3=QÝÎ�£Dµæ¯¨’µQAJp2À‘­=³TzK=€n¾Ã©5 Y7AíxŒ[¤C-ô3—}�œM,…Am78ëhO¿¹9=†27(I;;•8)�ûç)oTpSm̯¦8?8.ùNë�ˆ[µ+~ƒœ6µw/+ßhpÌüe—7ÖÈ)m.��œSœõʇñèz~íÞHŠ£:~ˆ±û¤Sëvƒóö7ltX&Ht“©0Sï Àá‹HD<Ò?¤Ð+KÃWöìb*‘#!SÅAع0㘟âÑ:ÄÀÞ·ØHP—;WRl»‚BðÓŽ1e+L�‡S )Ÿ}×àûR¸¬‚<ëP.WÓHß(1Š�­å�¡ËH™àG.¯©æ¹•`ž!‹«€_§ƒ1Œs1߃V¿Å©]©ïUº"KFe §9>ŸFp}<ëOÝë + (tY¡EJà¿ÝéÜîwšv6fÿóÀŠ-Æß ïùß�J¢ô0ŒKÙx†$ìØ4Êy�S©�åÎQ54O¸” žTÅ?d%°ö`ls/{L;ãÎkq�GYÑ÷s‚~FQ 1ÑúC0Ó gÛ�âcªx‰°Œ~¾"ê©!,�9­:qïê‹=U̬p‚¡N'Úǧ�.õ„òVsH?äO‚æ/@5Ê… + S@èŽáª[�É’u–¬SÄ2|ð#µ÷WaöÒ_…‰÷¬ó�]k«žUe Ê! µÙ#ÿc¿J’$¹qàWê%#®š9õiþÜÁŒÌªVÏA&3µå¥ŠH2¸`q¸/©$«õH�¨Ã®úéÙ€Öf¡íê)£pÑb)vQ‘–ü’íÒÛÑɤa ˆiV–->£ßšÚ•+÷÷ÎMëT��—c”Aö¥a nxñ¦^%•Lù€ "1±7©y±™yÝ|c´ñ^aä Û¼`SÌÙ�¿ñsÙŠåØœo %×N2q¯äÉtŸÑ©€GÌ,XñÅž+sWéÅœÑ5>ú¯&d”\Žq!¨ñJ`!Ñ@�çÄf8»påa8èžÅ_*Î/ûM¨ß„úo"ÔÒ¢Àßþ†ð7„ÿÞó<"ý=†û�p? ™Æâ¥FMÔtºžX>K&�˜Dîuϳzû»# tÏ £ÀGäa-ûÁJÀ~,Œ¥ín1y:Íá耧ÉóWàG—³6n˜† +—Yâ{ä’þ Xõxq_ã'4ÞžhûzXÆÒ‡‡€…¦±:èxÔ|ó,ºBHÎáК‡{ôÊ~û†c½¦Zt±Ô©ca˜ãZ§ù³‘›cÑmXO?¢Á~ ¨I!H JÉȦIsN©šPaŸRWa”\×UCÚÃ߯fC½¥e€ ÉÁ;h/�þ%jc$gYѳÆ=h‘±… 3ŸãÜíóžTKB+ÉõÏ™^’Z÷î¬4âÜZMÁ^ nã&)ù¿Qo¶S�¥(6m÷åM3.5»öÄã�ï™è«—¤Ààú¡ÞÐçe¨\£ å\4¦•ßùKâ¼ñzú9…)‚sŒ•9I3jž »1}-�‚»ñ߬¦Sçf/©�ÀncÀR¹à~2$×™KU‹Ïú¥ = G!§Â�jÄè¢æ8oy¬‚—jÓè@êû×áfJŒêC·òÓ5#D›M»•™>ꜵʦ(kÄEÒ6Ô¾§�¯/ÚÖ9»ŒŽYF0íîËÿ&SoWÎÒMôõ—ï�‰ÆŸ-FlU±‘Z…' ½ „ŠT–×Bø»Z»15ÖLÚ�mP�ìUÞ¶’ƒÜjìÌ¡Ñ1·vW�Œµ­ô§ Ál9s%»ô’QHдcLÕ™‡ Lp‹�ʾ‰û±!·ŽÆÛñû,ˆ³.µD‡¼;rQ¬ØñL]Ã%V Ãí#—[Ò€¥¾áCNqp œN +FYÁ•XçåAµ);H ”z"SFiÝȾï r~ÜóïKÇž;Š4<kVÛs±×v}ýƒEÓï6Ž8ÑŽŠ:_ùRQ± Oc + Å¤f¢úœfB ÀÙ-^œm¬Táä`½TÁ~÷"=1¡¨sÒIRšÜ>´Ö…'Ë|µ +é;éXýɆHëåk§¦›zlUg°ö}cXqÕò31kû0¡†0ã‰å6j¬QwTÒÕÔ‡/ Ù·»s®IôSDoÊ8òüãwÄïÆïUŸ¥Ñêç~R6d§µJ¶š3jÆâ>Ô`¿X�qãf 澤5’œ¨‘€¬ØðBL$/T÷†ã8IVZ`ÂU•þˆO÷‘�tÕp%r§5g�c¥°å˜Ûjg¦ÅíœÜœTbb³�x‡)Ú:&æ:»–;Ò_DeaFD$þóø)9Êê‘©ÆÒ¡éz}Œë¸V=¼ZÎèkŒ±�1þŽQ +H-’-÷0Ì~™¼Ÿzs?8œ¨¾z?-4†PÖfÆ8LM¡ íój¢iÞ,Ź,p1#œ�Þ:µ&mmCLdÁݦh Ò(Â>%Þâ0çÜ4²;�yŸXXZ¦H'Vö°®Õ¿ŸÝj%NÞßôèM�Þôè7§GAˆ� þ[ <«qh €9ý¥ù—�^†|5�KGŒš‰ç�A«bIÕ‘lK‘­ˆ`ÅB�[÷ÀøY&��ìÑIâ@@é¥Õ…äF»TÖ%w''S¦p('c �ÆáêÜ¢8Æ“©2`¡¼ Æ‘$q�¨5ÿ£jMÙž „}»¶dÑÒ«ç»0Õ+!Ô&èI$ˆ.©YÍD½ß\"¶ Lj•À®ˆd’ZwÌL‘Ù}ÑškÜ®U´fåíƒïÃfá²hJWœ6#°†ÚQ¸ãêå &“_ ã”_«é›%ÅDOÌôšaìüoCÞqL´ð‘C†é2*=ŸüÝ&~¯«³ø=à±ó: ²õ‚Ob׸3BßráÐãø± »ú÷``Ô³ sµsnîôÿ1ú¾’‘fÓÜŠ@G©6F-|¾“:ŒÈê€QòRA| i �È”9@4›é%�D�¥]¹ic/®„ÝÀ ÞË8x´G‘ß%ù4x4k�’“ùWæ¨Q�X°ÁÉ¿kûb ¿©gäz|Jàomrј©¼xÊG#HñÀ¦ã*4OÌ£ gXg�(¼‹Ì‹¨¾åOÞàWû 5ÚPD×.‘÷‘zNçÿï?·ùO>óú3¦ÿ{÷J£òÙ?!ëöDÎ×ÃB8ºFH”i òÈá�¼¢NñqRÝ}†É%µPÓ·1d§€åG.{¶¡MŠ1 óc\ëØˆŸŒÜ‹nÃz‚G£ áÕNJ‚ñ¤°°”L$OMªjlô)Ûjê{±�ù…q”ÚÃß/ÍGú].@ßDG´QúE´üK'íl 'ü©“†‹^ÒÑKö8FåÇ};ôªK8B.ª ÍŒl{\±ì †™hྠñÅÇò›$ éÐ›äŸ°Šª¦eç°FúdúcÑ‹9àaZ�(/æ<‘æ�â$pr×t}¹Íz°¸õÕræ]-Øäõÿð;Pöfhß1ÖÍïo7¿[]¿�ùp»?œ ø|Žš>ïÄÈËç²ÒÑÃo£ EǾÛ#–ÓÓ㣠}š1$Ùås*؇ßÿ(Öï¾ÒñáߤìIšý 4ÿ* ‰^¹w”Þh~ 47·­(›1á¶`»6^”N«R:c‘t&8®òIСPŒ´~<,ò¨^M¡CöXRÄ&ñ°ÅOkCÀ{?LÈ)–„+¤;¨[™JÄAßÚ] |›ôËÀµÜÚe³+� ÊgBT 8â~ ‹Ð(ì" à ¦ †+©Ë1˜š† ÈÆ ùAˆú*Œ2wfh61%?*­Q”J�–õ̳…µêJ\¨Ê¢b‰ aKéØ'þu®…î˜Fh‰­•C}$‚ÏÏè7ŠƒØ³1¨û�J +²órŒ2ðŽòjX'‡�©¯*]žÕ4 ¡BÄ‹ÚÎ„ÝÆà›Ô™v��¢HŠOüEGÕÛ¤X©IS. Kvc(¹ê ·�ntŸÑ©qß…™¥+Uì\™»J/‰ŸK»€ú/VÏeíÍD @ ^Ÿ/Òk›¦Ý&çZá\§Þìи�,»·µ©/ÚÚÏü¯[ûhš“ê YmOíÉ+K´ (â¬~·%¾Òþ¤EéÒ &TØ1Q@®¸ÎDÿ9~‚‹Œ³[UšYª4È`êTµ‡pÚ¢³L +Å9étYãgmh¬)@aοZ…ËŽ;V²ûhYƒ|íÔtS/®ê  ß5/ 䪅_™Q`O~]•©ÆÜA ŠÐOÊÐXrê3¿a1—,]cCÓÏSá@'<ÆJ@‚–•k¬tK» ù©rqÐ&<ÔNŸÚ°ÄMi.P¤œ+Ò‚�í }öÜu鋦 [Œ�—ã¼å± +^ªMÛH(¿�l”W²¸• äÚÄáVfú¨sÖ*q*[ht"?1²ï쥲_%É•å6pß§ÐJÁ x…^Øßad&øôUê÷´©"D~>r°`<Œ³!JŒD€¿vŸ1Jl:+ïtÎ2MYmý nîŸM‘? ¾XtLïo¥s™E.´>x~Z–FxÁë1"›Ò6pqérŸª¡m˜‹Ãçï™O!QåS�Àµ=s­€74r®vÌ©îõ1)7œâ­ +q>bì2`©áïÞðÎ:Tˆá¦MblSDnˆ÷¬ÝaˆT»ºù­–�Bö�HŸ[tÑh_'+C$ä¹øÞ“‡�Ω3ˆõª ]‘%£²†ê°÷WQào¯õ÷ñ{³÷@ÑM‚h?ûU-f¡óÏ1)>½zÁÛ2 ·¯Ó¡¶zâÞJˆq.B#z +›�­N©;Ûý%žJã] +o¦í¾!Ø1üücù~ËÜÌm}ÀòåõÎ+§Bªx%­ÞßÅj¸ŸTcˆ£c½Þ"d­¡aÖ[=œ‚�‡‹5w©Å.xfÿxµZ‚ƒÛµE•}¾DkÞzk”ÜK‘âjuKÚj¿†l×Ö(ønˆ¦—}ιà âoÜ$ØÂ`‘#=áœ5)ŠM ôÁ©µ +$¥'TCÍEÜCì&çRË ¹{ámÚ홊E—*ÜStw¢ÍÄ-ÁŒ"ž Ó•gâÜ¢+EK¤tÍ œÒ¿©»Þ û”ìl È>×E"ƒMu ­°0ç]ægC�ºª eídpŠuR‹–-ÊÔlþj-kÔŽ;[qñ$iòòj%èf�eXýÎäÉ1#·�Ì•W¼Æà¼U¥›¬ê¢qhͺMïÇüt–�"Èv€Š)!äÈu5~9èþp!c~�B|”œ7š‡Ý�Õ«/ÉKæ!]˜:¢±†º”]£ê’ à5ò¦1MÖC¼"×¹æÐ'9>"T–ÏÒ~§ÂÀs‘½Ùk:¥Æ‚ í¿¡=_lÿ¦½¥/ÍyÒf,W(J¤Ž†�RO÷–ýÐ)–²½x‘}­ã^œ q¿Ÿ!É.ª=ª6/€n*EWµÂõC}F6«:O*’¶a«¡ïWVö¬ã骩£Q¡î€R±õçïWož3êãØzš¦9<®.Å´©M¤Dg=ÎÖïzÇ»¹Än @B†—^$žô‘\ŠcŸ�nü¨'×J#•ÔrBµ4oþQæ¢ÀB�ÞxEJ×ä�üŸzÀ·(fK2zÂúÎäW +Ác™ž£wJJ¹(¸�)䥞¼cÑþ{þãäjÙa/øg®âtÏ}²‚ª�GÙÊ +8…à’¼{£�kï½F¸4|(ƒN‹�‹©#%B½‡r+U9¨¡!1Þ –@e?$Þ3$”õÍΰƒ` +ðQ}² g‰À°b!‰½i…É4�9ÕAmH:¸ûuÙì7ÀŠT’Dh—î¯N`ë{Y²a Եꠤ|jZ»OU|)‘ojÓ`õ6~`ã6~`ãïÆ§Òɇ–þbèJévTñ¿ÿ¨b|Â.ʽ:MɪöÞŸÕ -k¦Çä,­L‹g¸µn§UÝ ½í[ˆ\¼DMEO?ë±rÃÇžMÌ-)^ÈÛ<à ^œü1š¥opa–ø@ÐÔAæXØÖµ.\ˆwG¯­§‘Ö¹áÐvæe×U-§læÿñ2XÁ5PÁô?_ßeg¬|sìµ­…s\’·=¸mSsK|œqas+\yv“­D×´²M �´ï‰VË dÄàÕQ—s˜Ö! ùÓù½QÍísVË2DsÆ`"`~°ÛH)3(¯¶3ªïÀ”dÕn²ƒwY�U6 !¼.” ý]®�î0|åÎVÜnž²?7fœy£LxàYаD«Ü¶› õ›GÛò °Ÿy¶&Áø6Ô³&ì܇Á¸Û,Ç”€Ú.ˆÂèŒM¬€­Új¤o×£!hÚçÐý%�hŸâhYu—�Olœ/àÃ.8¢òóßÀ=�2ꢢ3]T†«þ=ýKQ¿Ô¤'Æ�‰‘Íz^k²� —z3Jj«ÔÐÓ‰ªwŒú×M¡�ŽÊ“ +^v«[cU ·R�ðâ»Î— òë¤þƒK9·k‹—:_¢5o”{.VQ~îŒÝL�MNlXÄ™V(ǤôÅ Í Ò4Äî»¶Æv«@%¼ìsÎ)„|;æ@ÝjÅqDÃ.ʘ,¡MUáChiåæJŠ4M ²Kw2˜“d2!{8;'ÓE\W¤ÚáÒYêBGkR`âÞðjòäÈÎ� ªaû†¡hû¹í;XÃÒè⬟%q¸Ht}Ïœw¢/jõQ-¼ÜN$òh®ç&™šÍ_Mò7 ž A—‹'ù…V›z¨<‚Æj6¿3yrÌtæ½£ ÷©«`Ø�”9À†¬n¼'›y‹ûˆ4+j” ù  ÇÁâ�©gã—ÉájëN8:R|ˆp5¨¢É67ÐN"ø (M¥lKÂoì½›ž¾C„ncš¬Kïºå¦@uŠù}ð#©~/µ{* <`V½¦SjüñÇ¿¾áD*ýã/4Åø¢!â3R—HP@M‰Ïç-¬:"ŸE•Mþ‹² +$ø ·ÖL€oÇÆK@\c€M¢u/éšË¾FAå&(Ë@YÁ]—_›_ƒÚ‹^†ØOÐv¹¥R¥ìuêŸQzœä²&§ö¤sq;‰~\ëc�jE{ÌÍûQÌj«#­Â'œ&NmÏ«ÍÈ6LEô—’å™ÿÿ’%N"’ƒ27h£/4pSUë!¡– 0¿Á‡¼Ã¾sÙ÷Q¿™ ¾VJdôKó"pó— ª\­½%Fk�ÁÝøŸ÷â]–®È’)=sXMo•UÙKý}Ó‚ç ,ÖŽWŒ'Ï6á·ÙK =¤!Ø’tÞ¢  j ùó²©À‡n^C–MßwbQLË<‹­a<½*¶ueCI}ŽüBs.]¯Ñ ´w�þ*?1”yô¾‹r%Ó¨”Æ ¨�ÿN�«%*ŒÌØŸX;�Ä‘·£c‚0%˜Ÿi,�.ΔôÕOG�TëJ¡4ÉÙ˜˜,ÑAÁÍò"XD�j“«U›v¹p÷\vª9D“i ƒÅáè€)œ¢Ñhy”?¡Àˆ4ÂØ|'�Í 9×µ¦ü]HŸ½·’þçmRÒè^ƒêI""©'[˜d3tÕéõ:èêE^‡ÊȯADBR(³3îò$Ðqíe¼î*FNE?éq?l–)“,�¾¤³5!Ï1rLI€ìy¿ftî(2Í�1ª�Žë×hòw»Dü(;‹Ô=>—nëÚ\d:>�ïåø;, fR³Æ”ºtú׆Ÿä®yf<ýªQ>‡€±‰?®M1wþì2ãÀ\7Î�´*Æü?��[Œ ×ÿ¯–,ÉV8÷*råƒ@â³{Ôoâý¬ˆ73ËxÒ� +’ HŠ�æ Œ³ë\®%3“o~®ˆ§*?C¶`xÈŒešŒ•²² =«›À-:yÙ¸©—vêo›’µ‹yn¤‰$*1F«Þã€ê�²l¨z°Mçšµñ®;Öë:Ÿˆ×Ûq $'¬F«Czq_\4'fŒ‡€ºAÛáÓH´¸>G(Ëy4Ôæ ûÌ‘«n¼WCKñŸ8D›VÀímg1ô/™7Êrü’q©â@h#ìØÁÈæÂÄé%‚ý+\ñ„Ê��c™ÔjÝÄb{Ñ9ž�gi�Må~dž6#o*òqÍ&êœ\Þ—JLÅ¿Uš«cn©ƒ‡€à)ùKºö.§Ä +�Júˆ±½Fne%ˆQïgÍ€ü™›ÿõ!ÕÜãã}6‘‡Î‚RåWlä—?líþ¤B '‚»þ¥"£,z <�§,AÝlêÌC¸Ü«±ä•�·X´¸ë*,Û»«Í¼GÚ¼ E,2o…ùAöÂú.´Ò¯"Ícp`2´5ÂzsÉfœo9ƒ¹TØTÊΚ‡ã¤¶4Ô�� 3ãÒ�Ø^ðÜ÷þHÅo�r­²Þ“¹³Ëâ]˃‹R®R‹2Œ—¼RžÒ¼¨ ‡ôC匱ï6¶w�IL¢L[àçÜ/ʶ©ž:}Ý�:šç@EÞXåIÂôLì)†ì°˜�.¶%²J£8š­FbŸêÁNø·³n |Ûï¹WKâÖ›*ìÄ5_�g‚ë4�Ì»j¬üÍ9Èõz·4ª…2(‰šhsÙ!d€�M^͸ +…‰·ƒ Ú²`1q Ò"Ôâ+POߨñƒ¨1Pßx™Ì¼Yñì…àt¾à”á³ë»@ð‹ëlF«ñ¦Þj-è)Tcg2}ÞŸ ÌÂ;ÔBì–‡ª6+]tµqÚŒsƒ%É3ˆêô[‘%I¦‹,ý:�=g²2±:Å~ ;è[¯`jÅ57Ê]|°3°ËñõRöØá�™ÙQâ5g³£ “Ùå«H¹AßäTc“µQdéÃ3ð`|¨Ð~‡€i碊š­ŒÚž¯Ï¾ùÝÿÖRt¡wòÚÜ™¯7�¡.Ÿ< +³[|…ã ¡(;ÿÛõŸ’…4>ZïGïU¨ÿºô¦Ë¢D8E*y¤¨ï«vÙ'µ>:`¶  ÿ}Zšƒ°GÁ¬Šì`E7<É\[´;@�ÙÝÿÕØ;ò‰½ã ÑÌhÉ‚jhcÆ ƒN5å@q�Â5”@°•ÿ�­.àì0DªèÅèb•C_ÓJQâÊÆêº&ÛÒ±(´I¥k¼F#b]Óxê"›ì+Šå`Ìþ¢×òªÉ¬bx‘±êç¥Í&OªRÉÒ̃©Œpò<ÿy�É¥O$^Xi‰¥ój•'>Ÿú(0â¢aD ®Œ8UÔŒ¯“¦µtŽI\ ÓÄy2Ä36_”äi½ø��8öAîg>s¨ÙY?‚ +ü($ÖJP„@áØ{”ï«E Yöõ h±»ÌF¯>Ïoü@µ¿êë?zÕ:ZEª®5žÙÆÆ™oèlÚ +h]zo’)²zK™rXg¼€qîÕâw(ã²JþbÍE¿üY£ÊœÜ3*Òûù{ÍM·àŠÎ YèZ;h2†ÞÈhÉœlê@ë§¾ÿ�¿Q&ý•jÒ¨‡O¸�„2{•˜•c™ ðÀÜô<¡ìKÁÏ9ž-[ÁH}½¶_u’|�{F +^f‘¦üU÷J(\Ï¥ÞÕ‹tʼz¬~U&^R�’½Ÿ90ªóW©NJÝSÞe.úŠI;Ãñ  r®ø£uQÈ“3‡^­/ªõɆ°Sdl½ƒ{Ö =c>^EÙ±8Òfí/:±§fþ«5ûù»DRgùæó|Šœ=éú4ržù-1íY@É,ën€ÉØÅ€N¥Iè„V 0N5|jÌž4Ó v-¹Võšœ ý©} V$ñÃw�_Y(Fƒë„ kbf²M�ì+µdlaF ¼Òñ¯dý—@xÒDý½e»ž§k/f䪅¥8E"LFy‡€Šó%冪�U"'Þ„ð+Ï´X'Ýä’âúè êÐcUÌ�nfEIkrÍ3³í² ,xÙ;yƒu‘b{æ Õøï,@ÊŽžW™ýZ9�ÖÿC=ð¬ìbŸŒe¦Ž wƒí;…¿ú³áOéç+1æçì }ÎÈ Ç¨ · g&zùP¡¼1B¶qm)ÁLgãZváàKÓín¡¼0)ºÊ²�`,bOïGê:n$5À¥ +¡ ±* óó‹Å0 |J†}b$n[l €Dçg”=RwÔ¥è"׸ +ív e¶¬OR4¸‡äÖ§M£°vÒ t™g08½v *™’æR&ý-†bš¨¿SPæE­h5ßy莱ÑÙ�7šlôÕBÀÆ-:ØQt q§ +„¶Ð-„S VV¤Ê��-–NÆp«M†eK6X–£~0"öYÙ¾¥—Me?ÆK½ÆNˆ7xé¡®öö.Åu[#ÕíÿJÜ(š�$>η@²YVP€²ý‹åçBÇ! ߯§»Ï.5äOã”ZÖ$¥–”T5TF°½õ©<Éw”ûZ•d¢8 Iôêå (U›J]ëM”¥<ÄW S-ñáKàt¥­–�%QÅ䨗à4w(t1ÙK4.ø÷?Ÿ©C�Àþ“SÿúJÃIÌôÿ'ùÿg . ⎀ú%\Ñ-;)'ßprN?²lй=!J¶ýâývw‹=Èœ{¨ +&çĪa�Œ<æ *¯ +|C.­¼£ô§þs~G4“¼%¹Q`®¨¶÷àîÊ鯠J‡cUL©ÝÊ1’î-œŒšÝÂJS_‰ +ð²º&zÃ\ÓÄ×6H ÆÍÛ….l“CÀ|S<ÒÿêÇØy¡”{ŸÄå/Y”æ�—R ó#†LÍË-ºÙŒwV«I¬í’µ.•<„€Y�˜ø}�üüܹïžS7þPgлUŠr#2› ›¡ÈAƒªŠÍü²�²f)�mƒEú)2�$²”k¬0¨Q{l©ðM±këKŠ"Ö&˜ª€)^ö™ò�ØneOÛÂâÂýu8–zÌP“S +zˆhñU…'Ò_Âþ}¤8‘x‘+;%šÁÐnãÖ�hd¾ÛU®²)¿ˆ DPçÓó,HßÄ|E±Yë:åc5Ž=‚ž;¹Ü�Ϭ£ÿà”¦ßÚªc½4+P•d´š@Gè£xOLÏSµž/Âú”°ÎEÐöIo8c«»(�aJ9,ÉÀ¹e*Lr¾Æ�ýc¢)òµ� +3^dSº�² »ÇBúú8K#v�G']‰œ �éÅ)¤s†­Z„»KØ€”:/Z�ñ—šùñAÆõû–úî˜.Ûõ1Ìš[SèÔy>Bј’•©†<ëPQ³×¼ ,�i˜y¬WŒî’Ñ“‘qýU�gÀ›ß­2KÄW�ªŽÏ 1¬wΘïIÀ·è:¾EMÈŽ®È’QY p™3EUöVß1Ô Ü˜IŽ–ú¢yÒóc™ +$�„Ö¿[%6æ³Â`’ñµù<òÕêÐÎ/c1žµ=¨k3XY»¹á-8Bó†çhÖ„Éy_®U^4V¦ÀüvZÍ hd’iaÒ’ +�£"¯57öäÁëæZI³�%×ÙWJ’(¥½×†oðxÿäˆG4†G‚=§H�ü©ë‘ ÇkäBèÑíµ¶uŸzEµ=«€n9É0™cìüžã6HyÞ VO’ƒ)›¨žÆ)ëï—Ŷ˜ÆÜl3T-jp8 öHtÙ 4™�–Ê>ïBôÂÃæ×T©­)€{«â&ø�óR ãšþ)ùÏvvÊT!5(Å0°Uå²:Ç€¡Qo´ÇP¡à²qC¾æûŠÿ4Ú-�}�!²s³Ñ3mS°:C…LÉžåh½Øm„w�eóx R—:§Äx ª+>I3s¶4Ž1nciO Àsâ|Jrçá˜å¦Á##u#%‰‰ñ\õ€$†$�VœÄä;³�û ›þvwýTˆñ +AÄÏí”@?ôSC6>» ¨Ýw Ÿ3¨�³Àú á�³£jWåEÏéOgAÎ<]FºH#×��crØ +f¶k·MßhôMê´ 8�b)çnü·™.|èPÁÛdO;`2K%îùd¨”ãñ5_Ã8³ê«Í é!e�»®S>VÃMµiê~eç~<EÓ–õ%‹[õgVI”<•FÛ£I/ ,-ä-›%‹…Ãǘyøh.‚¶OzØÈòÃ|¦Ý;Ñ9mÀü‡ð»#L‰ö7ö� 9Ÿ¯©7Ã4­N^À'1Æy,¤j r–F욀ŽZW‰œÕ»*ö�PއÀŽ  °Ò9O±ÉÐüÓ_«Ù(d4v¡vL—íúX§mžmÉi'6lL6—³‘‘g*4„vòHŒ: È`½bt—¡¹×8â‘Éï á‹[ oˆTš(1Ùáë‡ë8œ1ß3º8Õè:ÎqLu¡+²dTÖ ›¨¦_UÙ[ýýP* jQ°‘øó®Tò² „+ é›ÞV¦oæU4¢feæGÄ ÞqÎ^3ÚÊhëæµdÙ$$—#ñ~�²Pæ“X˜;ïªX #¾¾’ßV·¿ñH2ó›ª] Â4GöhÒyô~r¦�§íY†Jɯ JÌêiºø_ÿø÷�Ð-xdè"kú]ä5ÏP°Ð†ëžÖ¶îºP½¬JÔ¥[ Ex–Q¥~Í� Ãó @•e"°¹]äÍóÅýZ¹çPú( ƒµNá®Û‘æDó€ž?ìÊ + há¶íU[£mm–Á{Ž1_¾=ˆÌ'ˆU͹I°Ü�¸‡Þ½é%”@ô›�®1 +Pœ>ÕPÛ4š‹ ¶TÇ U›CE #€þ%³Î¼V£Øæ£2©ÄÉM§pØ`ô(�^è³�>êê“<ÿñ’ »îî0GS°'DÂ[�Xݯz¢€0‰"Jé­*hY;iì +{+á¢[ ˆë½øVˆëWftNòaOJû¸·«e÷õø'U™1î‰òyÅSW…*ËËq,É�L²Fæó Y¡��ÿ»æ§í”}°@1µZ`oü2ÜùWë¬á’¼°4 ýýX�êh:QšÐ:Õ-$çb›H’b‹4&Ĺ‚l„ÒåÔo‡ë#òaù íwÊ ¤‹LÇ^Ó)µþ N¤ŒŠÅa02I_ ¶j/k·#¦í¶�L“0¡‰ÎÐôÐæÃ‡õ‚ªkÎGÊd-\Z<ËUŒšÇiÈ4wo(êo&òðfµ-Uƒé-¼¾œê.`vø†j—gð-y¦ò[ÕÁMR{§Ž�wÊhäH� l�Ü7•û +ëÉ^kYì1â;qiÚÄ5¸ú8Åó}Iÿ&¼¾-³fÒhõÿ{*Or$Z0F’O¼#>"oãR-SóÝ.ä.* Øç#®P‘Ч0q ì˜wö>€PÈ|_¨w\ˆ*šmÆœ›øÆ¼æY’;½]/1xH£T}ÀÚ˜ % ÕW«‘©Ùý+曽–¥ztÛ-÷#€7™¿é�–`c ÑÏO6¼*…W8›rSâB¤(á>ƒÊ¡ûãK�Aö jÝ‹€e=ò!•ÈüavÐícQÑ ’ˆÜŠAXAû‘6� 5y¬…iË8ߘkù°‚@¬‡_tÎ[öÊö|i�ö¬~2{!=‰}©ÏLÂÂÀˆÈQx觪ò,}R¬š2j„×öðÌ5 Äfˆ«�8KÑì„% +r×hÔy+§º =vöáýî`iîÎú‘Bæ0§Gh žGÇà„S@�`¾tIdr%Æšÿ±_%É‘í6ð*º@+p>�½jo|ÿ…‘™ ë•${c/¾#z#E>2…�•€ Âf4­)»*ìL^ÐgYRQ!¶šïr‹ÑCËU%¼QH0.è3¢6–Šp�ÉœÊ +=[ûìY€µbfªð6(±<Æí¬¢5›ÊïÃfá²P£'N ž=V—’€´Nr˜&óè²poœ2©…ñ ÷Ì ÓÄL· cçw#õÇì’êÈ!Ãt £§ãs‡¿ÛÄï¶:%h%ý¯*¢ž¸heÄ®qg„¾å(¡гâÇ6üÂ``ÄŽ9ëœÛ¡ú:ý�¾O2ÒlšƒÆˆ> IFdÂçûè! +œ-.j3ÛéÚ“1Sf$dc5â%€ïÆb6nÚRV4JR“q.l\· M‘ÄÍôÆ¢§zC 90Æu‚'äãü8"²÷�—žä>~§¤™…ª‘:ªµÉEc`Æx‰îƲÃÑd�Žcsó(¨ÅÖYk§A¡(úÓ÷¿!d³H×e`äòƒÎñ7]³^–º‰GÁPcÔ# SŠQ~Jׯ&@*aßáÐšŠ¨›€º?Æ •Ðï\ön-±Z¶0¼^ã¬+@“7#7Ç¢ÇÐoÈ(IßJzj’»†Ø™E¦ço ²S©‡¯¡ºžj¦‚ÒuðýÙqa]9е¥Ÿ˜÷hb˜ä¥ÿ̽>±£QÓ„†|FÍÅ—+·{ÙýSzÂDŒC +ñN/QßµCjBŸÍ…†NÝÕ¡…:ºLlr2pØÃ®Ôˆw©]ñöíQ,ÀT †.�ªoBmÁûêv¡¦˜WšÉ�hêãÌ¡$ó› +)Q”k]4¢ŸSº—ù0V&åÛ.ìÎü|p7þ›,}¤ÖÔ:ùÁA¹-ë…Ò‘†`qݹÔýø¬í\³7Àƒi:çÀs¸J;ã¼åµ +^ªMÛÈJ?‡9)1¬Yܪ2(…Ï*‘³aµ2ÓG�³ Ã°vÃ-wÏ/¨á_ßSz©/ÚÞ9»œŽYeñ}ÑîUmgÊÿ×cw¸ÉÙŒ¦q|M¨ìøL8¿Œ�)f”l«QSz×µþ^gj¬™@´E +dOPr¨½Ü™C£«‹¼-[@ö¾É&CmT¹s…œ’_¡¬×ÝíëÌÄ&¸ ¾:ïG°n�@í$ÄY—Z3;ÄJÔ/-{V°ŒÕôÑÒ{žúšª°ñ »øÙJÜEÖ‚Wvx8}Óc—3Æ»¯*}fœÚ>?ÔDtôD¦L¶›Ùô‘NQ–=òïï4(ŠÈç?]Ùÿ¶+k¨Ú(”?|þÿÄç5H¾êŽ«¾E�]dÑK:º pá1Ž ßãíu0¼`Ç(9ép'¹Œ˾` ÑÈ} ÁãkŽMøƒ6:2�p «H9´dòZ¤OJ,úbŽÏ™Vc"¢ˆ€L +Œ_5prÑhÐu|ônáuà2¨%:Dè=…Ží·š4Ì$šHÓlÓ{¢Úùʸ¢‹ N.²ÇúA¿ì(•aˆaùà ©Œ!G Êöøn‹ºîò/æN—ã^�qdJ"ÿ»](:ôFAÐðö¿ÅÛ½DàK =ãÈc Î?ÿöšÝ, Í.“æo‰Fz-G=t+ûÒxt|¸¨¯”Ò/nm§õûeQ7tsAÐ´Ž±u lœ³À‚¾LÁ�P%yS0?¦€tt)ÀÍéÓÞ��kÕðVšNtŒÄÝès} \(S5çbõÅ2Ù(ÒE‘mlU \®Ahu\@6^ÈÏ\©é4ÊÌ<››¥»Ô ¸Ù•¼ô®²î‰“kSÇn«Ù.à¢Å“Ù˜DI€û¤F®Ÿ¨t69×p¨!®¤i/~F¿µ¡=ƒº_¬ª W^ŽQ_K«;Üà6uSp„¿Ð¾"ˆKå& Z|¦U•-ç!YÖÆ‹hYá²�\Òà [‡rŠ×ýVÁ BÉ>[ÌrZ¶N>j¶ªYñE«-Vnë´fÉ‹!ç‘*.é$Ût<§[I'Mô’¬²›x¤?¬^õÈ^êçøeýԇܶ*WÏ™á½þq®ѳu/Û¨�¹”O®ñ|fD’NˆüKèÕ5 }H¿ }ágnÈ4æÛ\Â:†ÍÔÁQvc#×¢JLLéáØÊ4α#„¯>.—¨Î——èãÖã±nš^›Â«Ò%™ðØTjínk*î몘Â.í0‡åEAË%›;h€Û +õÊxšëíf$5z£v‘Dºó’Çœ9Ñ™Æ 9EMÑ”ŸK©mÅþXß±eAV‡vvÿ¡kU­ªQD<»Ø~L¤uU`å=Ç&¦8Z&¬fÚ¿²î0uä€.ƒûRŽ÷o&`òaÉ…e±<χÆÙŠ9´H(ªÇW§sw‰:=úK4‡I­Mg©Dî KËô²aôýº£¬äô×lœ9 ÀMÖ®à�`Ù’.7ï>7_ ÈÂVÇѦÔWë[¿’ �š}Š^w“ó%ÀÈáácdƒ†�kœð\Ó¸0Îõnyå�΋gCÄê&á�sG“èÊë¢~ä»@Æ÷ÑFBR¸'¤v™)cÐ]Ù¼ž”¡`¯;vlü +èáÄké’BÊ7Þˆ6ˆr$^®*U"aV$òàÌ^9—â,ÛRµ.ùsMýbxèŽé¼´p¥ÅÜŸ`“WÎ|´²>»ÞÌ2�3ëM¾¯qä{Œïü²¦˜ý¨ÛÕÖ0úʾª5Ìmç�<äÀ>½Ç ж3 +0öN•ШT"G[*ýÙûUîö6 $T­ù4dzI«r�°�¨ù©¾.æXÌ2Ò‚zo û|øúÝ DÑgÙÈ›ùαBŠž¤úf¬š(•Ê»IjT2_�5™“s>8§�ØÀ25v?jõ ’òÞêiÔ%AY³¬çƒn^ó튥0÷wâ8õe5 ÏÄ­Ÿ…ïÖD‰‹¶àIݱray ήœ~3âÙwLÝŒa³¬ö@M?ÍM!Z¦Ï;«Q,Ïê™\Ø +y^{@JGpÙ�7/žÂasJ|‚èS8éÇF.šÇ…ôúËq cx9ò 9Û­.¹DDʈu +¿òÌ•O£'¡V MÓªÛ¦dLçª;•—Uëµ°›So©/rÏp’bß)uφ|æx,w ó}vW§ +vÙYÜ.ûU,MìÄ1„\ÓB¹�åµ»"¦ÖkóÛÒÄDjÐè—¾ÚaF÷—ãZ|P®Íuœ‹Ì€ÐñKÉ0o'Æ”°° %? +õY­¡c½As䣉j9�*Ùw_Ùä¶#\kÆLº ¶>Ë«X.’k„ÛÎñ²\j2έe– ^\4·7�¸IË¡åÑÈ߃…‡ÖÔ‚ðsÂçØ¤#žôSè,v†’ÕidÒmd� +�3îT2çöO?Ò¤Yd¤ÓMF?^¬^FËÕ ©�„qôµŽÇõP%3XØ*Ž­$/Õiøw­©ÆK¼X”R‡Ù ÅjßÒ@ ¢^ãØëT`hÿ…vxU´ÃR•×EæŸ%¹ÏBà„æèÝ«˜B/í°ß´Cªf +YŠÒ#uâlM:Bš‚¡‘34æä•ýJ +ÆômøÜþšt””GÓ[BÆä�tù?¸�½&ž¶5·�!©µ'd' &Ï?Ø–A“Ï€eÜG/%>ŒÓ¼�Gã¥p3Œ×³·s²µ±gŽ*q(ãat9»[ÅÚt€Õ_Ç© ŽŠþ1ÀS`-KTÏl™}Õ”SdÿúÈ),¨wf^m2ºÔArŸEAV›š’T‡Üš÷åX M«ðq3ܬ4Œ)»Ø4 kñ‰}Õ¡¤ƒÊ/n„ì­ˆyû-k“3-{ÉCº—=ß½êSøK²V+"Ñz¿´c(Àw¦L4¬‘'¾\‚A ±nIwþ zJ ^zZO:¡ÑÚÓN"ƾ½@§¶„ÀɹB ø°PûU¯Ö¾-‹TÍž +ê¿ÿùš”p¹“úƒÙ½û`"»ÿ^ìR'¼«]RÃ�+|ƒÖ÷ÇÃåg§ÿñ³jÊ]-˜Ö|‰SYÉ”GA¨}µR9Ú(I"ÌŒ”Ž0ÖziG˜’’-%N˜Û-üDúu¥³W¡Y,°Õ�|ïxÒ‘—5Ƀ¢sÃþ+¿7^*AÍFL…ýE3N娼%ìŒùfƒAø*$¸{@€”éO–ÈéWm–P×·›éª,MüŠâ‡…üiƒq‹ý%®Ê§våÓ +¥HP·“Á¨r¬šˆ˜•Ú.ž¾3�µîªîVØÈùc|æ@ �áuÔÞQáW5T-£ø§—UU +sgHh±Ð½�«ñä± ðv\q”ú¦sx7Üù�ÚUÜß*?¦"hë¾ÆhÙ8`}¥ ÊZ­”Vô þ“–kO\Ö´`Y®lM´$ÛžÙÂaÒ=ï¼Ñ” Ìe@wñ¿�Y'�ÃbéüÊ8†M>ögJMÄ| &]^d‡íHA“�…NÔI$õ•‹8zzŠö<Ü#¬+ruqHË[luËUDZlwC¨¯+ùx 4t.�øT?»Ú,~ÞóÕjꃢääK1y²¶Ž4O•þ‘DjÅÿ¨´è@ökíq s·ÿ—ïÏ¿©"ÞU¿/Ö„!$´!ÏÌ/5Òb �Ü)jo«ÿ6O˜ó™ÃebæG¸ÛÕtjj/UõJ}�Øœ9ai†t¯¿v«¹‘5«égˆË>òtµÏÕÒ2²Q8æ¬ ‡vã˜j»§˜mÝÄçv¨LÝäóŽ×"LX�÷–~ÅÑG¨Ô[N¬¯âriø`ž�Û�鎶ì¿þšÅ™K" Û:mYŒìFжesÆz?z-µyþäù‰>Ž€ÔÄ-7XDOpZòú²Ü˜2èà4nx³j¡¾BÔg{¶4‡[q2ãPBFÞ¹w¬Ÿ%³Djý#ß•M¦]¥ªî¥JqJg¥Ì·'m8Øû¼Z€˜]_5U�¹+†sÑšj,ŠÆT{¸ˆVYbàÕm&±áÉ ±ÔaLD=.ºæ®bNÎ)1å¡g,ç¥PP¿RyåÌo4Z \ +:¡}Ò[Ì?²ä“%¡ `ü¨ûu îÿ +ê{oxª :,Þ;0ìš²£Ålìê?NÂŽê/'y»†"©ÃsSÂ#Ë]>6Ù<ªÃXãà 3Uìg¤ú_x[ ‰¸–Ý‚^ËùK· +VõØ |'‚„`E6«p_wÕd[ûNñÿ_[�hΨð ôò‚k¾€ÛðÞòc_Ìö˜?xºþíü—‰83=kÈßÕnoWŒ»˜«Êi”›Ê´Ÿ#¯ÅúÝ,,Ys´/fßî j^ÑœÒ|qBg1 táÑoÞhhÇø»ÎOI_\†eÐÈ~-T6æ„K¼£¾IÀâXsÜK]ÐÈŒ<�A›ŽeßLŒ–DJÀmc9ž,$ü˜å´gÊ}õ|)ù«p0%¿:¯¨q‡b¯¿dàzÇÏ^¤é›5Ù¦è0”~@qшPÊŒkø½›BQÅØ‰ùª.wíÊQ8¯rQ›&„\ÕG˜õ؇.q7‡;߆/€˜{¼Jv€o2¬&F§¦w'ûRC~‡1E€(¹ÐÄhÜÔày ŒýéæŒµ½ñw_rÛpj{Åæ e4W‚ÆLª®4è}çiQGMœHl.) (ŒgR——m!bß2=A)æ1}D.»3Ïâ' +JEæÓè†\¶¡0—ƒŒR¡¡Ž°Öác—ÑÔæØÌ ésy² d4¡s»÷`Ú4•< æ�^T«5œ´¥òÔ"Zké~ N)ÇñÔH<ÃæU–h†B°¬«ÀΣÀV0ÇE‹zÛº³¡0Z»¥AÄ�–V½rá”JefnlêeS[—&(7Þw¼ÀP¹JÖ\RÄ«âÖó¥YE’99¡-êæœà„Ô;yi=a"dós«$òs¢ŒôÒRiÌáø¶ÁM8°™»&TâÙ|˜’ù?¸½Ìˆ Ñá¨1ˆ!'€�š?8‹·B ñÝPèÚfÁé½M<Ò©ÅQÍí°äŠª™¿Fáô +Bj@ŽQw ¿ T¿.Ááè<ñôþh ìˆEÈIòqj‚Ž�\`Ì“pºI·ïÂw-C¤¨°JŒ·£O“ /ĉÃìú^›wbI­ìS~l.À.‡ \•.]øœšRÍ€I¸½–JÙÀZër�•ZŸ’ÅÑšd—ॊ˜Ö`Æd©íÐÂÉŽ€=^ÆÞ ÿ4»Ú¤ü +±êãî8TºÆ"œ6ô]Þc*)òŽó¶¾ÿÔŠ|×"4æƒWê]{TªôÛØX.D +|4¦ÈdU(ßB›Õ÷ü$×ÿ$¡@¦Ä Û±I(¢«™Ò¹šC,}PÔXï›7±UÉ`ŒI³.Í ‘RoÄ›ó®yûØIä'îŽÔžËó4ª@u�©ÉVK·Ó�/æ­�×z íøð3ChÇGÇåq¾y2#ëæOÄêïÓrt†¦~¯K7¥¾YŽÃ.¾™Ëøu–ªy(%Éáãr%°½3MNhΞ'Ò"zŽ•>§Þ™.ˆÖeV¢H3g�M݈b¶¿kýŒ7õú‹¹ÈVe�–sxI»\*”–ÆN¿™VÁµ:Ýš¯ÿFŠ�…‡A5µ1Hio.l’;¼dŽP5d5¥¡ãÇÖêv)ðÖQ¡éx±0JhçXª‰œ+ Y1º„þÔ¹) +³s2eKáøwQ1sp{Š© +&Ä·T¢Õ(.KJ¢¤)æ3Ü6µÔ’ËÔ`M«FêJÜù¬k¨›šû57†ûÔÊW{\·™a\Ê?ú„pбN*Ãx<ÐG]Õ‰€CHŸ%Ù³%( ò–túÚÄ+Ò ÒI5"™)T´ÿa¿jÒãÈuØ~Ná ÄŸH‰ú¹SæþÛGTu;~3oѪ®’H;*ÀÅÄ1r,yÆ $°Úšg«ñƒ˜�ôlNLHQó«¡!]HL3ÒÙ.!êí%ô^™= q�Íh5Þt´zv‹ypó\`ü Úç5ªêA¼­Q»8Ç‚Š”óƒäØ2˜ B2Ä}�Šˆß–… Ñvòr·UŠ�±æª$à‹^£èbB¹†Vj�º[»Tº³3ð–3ðÞÅ!¡3­Y3§ÇoX#�0À¸ÖYL?T»Î2sÈ„}ËÒl4K£iIè“W'w‡#¿Ë_M:ðDcc‹„‚ä_}ó�EW›ù: +�_QM¤¨SÐ9bò\ó¥6N£åÞ/®^ºßÔ´8h4pó{NŠtxÔ£õ`mı¯BVß–Ïéob$ývÞÅL|°±µ3\ŽOúæÞ6ŒJ(L§#˜ê–•‰Cˆkdà-î¥Óåfàt=´¤ <±Þ®½y™›�ÍkçØeNNª'…N°B(‘ï_×ù1D‡3Ì$ Mb›‘Á¡C²ò›cYéÉâXxõ$°»3I4‹ ÍŸÏm¯t�~ 诠ÈÇëAÛ4øXЧN¾.ˆüÌ3˜(]I‡ÏÙÊÕ Û,Ù˜,Ð��2±gBŠËñ¡ó)sé#ùhÇ=ªlãf¸EòçŠgvìŽç²Îß�ÆÁ6î ³Öï¸Ù §3ZA¤TD¹âeáy§¬iã㉃àüb¾"¬¦³FOÖ`y@ë_{íë¡]‰ÇˆEY^7 îv{öòÇüÊGFK¨°`#ÁõwFq„¹õø{”ÂY&[ªØ½Ž œàDûná¯ãy!®ù2YrTó}w†>g$¤cl¢­Öáuu4ym(‰â‚Æg;9 bÙø¬‰KÍ68O¢IŒà0e«/Ò‘;kÝfÜ*;¦ïDE‹`˜úöX€ }¡±=Ml;7|FÕ#?F]Šý¸ Cÿ_ÒØ¾ÈöÇÓÞg—“cÕ§\…zÖÊW0M½:*£ Ó§ò$_£Dì+h…+xÔF|Rÿ�êðjæ=�”£=W»ód‹<`«lßjÛÙ:'åòp]�u2Fãw]ùkß5a¢¥SºS;³¿h‚=C‘ÑØÓž…lÎÆœì¡ Ñ�~öˆgoò &ZRÐ9p@X“†<Ë—@>¡3ìÐÊÌQú™É8V3€M…Ü ib°·<ïÁµ*}7ü“b<Ù¢l“6ÊÆÌ:L«ÿ¿!rbZ ˆæÀøñÕ?¾úÇWÿ§|õJ�>#}õFëd½Þ9”vÕ`ÇnYÍPÏÆ5g¸ñ£ñì—&G +–ª| 7£�&'S¥×.Íä5$GÌ_L³àp@€!_"þ›UÝAb1î8š»ëúí®QÛ~ƒFÜCVÙ +Ïó´‹ÿÒ¼QéZv‚ëAòVà*óg¨;h0z΂6n +°høVYe²L "Ÿ254”$“2Ò7A­QäÍäá*U›á‘¶5x23öŸ’IYÊŽ�ÙH;4sÄ�)†A»Ã§nìß•Á9|YÏ_ÎÔ¢zÎ<³>܃Lž£Ž³Jp؃Ð#®{]ùuÚ¯“ ’ú4Ë¥NÇ |Ö²áWk•¿æ’)O°Ø¿YļÐ"=ÒÏmì 6þÀKaPhWg'êÖ‚ÙœüjÒˆ¬£¨ÂaC…èÅ ¸xˆ)“@ \ÙˆnÌq¹&‡ h™¨‰\c&´±nZO]d3Æînkö×ðZâ¡D±d¤¯ú9aÏbô •„fL0ÂÉóü給z<‘˜p¥�7’‰"ïZ-EF:õQ°È�CðV”jŽ“GCÄ 17¶¹&UC>GÎð‚‹"?ÈywÊPz�$7hv²•ºdòÕñN++q6ÞÚXP'“õ„—$†œWÃl’èwRÙ‰‡ÏÀ× ’¾Éçq—^@:£\Í÷?¸Ñ±R¢[©¬ßÝhB¼ÕôMúëø¤ttÊø¯Í±âîz9Xxo-ídþ¡~‘ɼA¾Œ#Õ¸T¼ÖëIã¬RÑ÷¹î7_•.ü:—ô]& �J÷>%ınP“ê¼{PÀú ½Q«q°†#þ¹Ø¾­·`O=¸Da“†ÓI•Í(“µ¬æ�uè\@¦8܈0‘é| +úýìÁðÈ@…ÆŒçDT‰-[Ƚ2nsÜu�ò‰š˜�›Œûñdä0IºŒˆ¯êX“€»&¡ Ã*GÁ]7š¬CÃv†Üؤ™‹³4&Ä6™4îngbv6Vþ¾éí]æ'û{Ñã.Óä*¸¹Âì5ülkò3^¦£.ë> Iw™O4F +ËáÒÕµu©C±u28Ý€”QN˜2£™&°·¥:6&Õ÷›¦·µg£c¿¿?íç��ŽÀj¶Ümñ�ŒNÎO�Ð(K ‚:ëP4Õ²ÆÔuÀ¦q´^9ºKfO¦Žz<Þ®ëA5¦>ˆ¯ TŸq˜±N)c½/UnãÖqœO¨q]‘�)–>DÓG%E({Ãß7ššœ›"›½ƒÀýk³Ãï�²‡Ì“K<ÙõæM»]W÷ÍhÈÊ�`¤^﹈ÃåÝC&F³>Ž£ÞéævM‡Ã�•}T×MT¼…þ²ê‡|mâl”Ó îéxS`5ÛÏa“F¯Qf+ÿSóÃÒ¸4ú“„Äü,: ížÃ]V¶·Ý +¨Ðî,¶ý,Ç-[�*ć)ë™Þ¤aš9÷ˆ/ä +mÐY~éâV¦�]°æãšYºf<åÕ9œ0V]ˆÛªt1œ—…N©?�ìu5ï¤@ý�ƒÙþþ«º2h¬B6�Dnc¦»¹�²Ò/•É!1N­‰†&�¡cÉ"Ú³P‡?,YºÝ9ã�ǶTÉ·?Ô›yÝ"ÃØ"Ÿ-)9Fš2À&ê�u.:Øbq Þ<®�ˆ7˜>1,ðx©†²çµ¦Ö‰¢j5ŽI3\óWx§©K¦µqŽb=¥�V¦Ô5Mº—î7�\Ó�­Ú€ÛRD­�5¶×A·û»j£oFbî¼Üü¿Ü‚‹š¦É¹5¥òúÞ©ÑjŽSÑïWD:ãÑéÝå]ÇÐŽ€jƒ‡Ž7¤[È_é0Ž­�žhÏ�°¾±g‹;Ý>�lÌx…˜nÙÇøŽCF’RC�Q¢M¢~5<Àæ±ÿ@³û;Ö¿€ÙÏ4¯cïp6{‡sØp¶w8K¤©Q"�öHÍ>®õè"­þ)�šâœqô$Cz`þŒySïâšS/5q �«Êð +opv»©Éi¹ð€"Bñn*{ó+<ƒÅwV÷%nÛ Ëä3j»„דØGµœÿc¿Z’, màUæÓ�8�}ßae¦¨÷º{l‡v8½™A�jŠÒ'?‡ûù�Ïnù Y™LŸ1©˜8ì„^H{qvT諾¸“·Ì~gj ‡ÖA¡t#Àb®Q�uÛ¦Ó6÷fãž‹ðæ¯÷.þÆæ;½FdÿÅJ»í › aœH ó÷XNôj…3 âUýcU×M’%f©.[¤¼÷~}'ÁV˜¤)kÎÒ·âq–¾Û(»üX3în~ò”ˆZzÑõDèÙ¯Q+ÞA~DqOìkÖ ñk·¶'ïØº” 4_ô Éî5{á�fÎG3¬æGó· Xìµ€™£Z:a* °Õ`Z&dÝìdVÄœd-)®³µ‘$•¿Ó 8U€#_ÒõüŽ|ûÊÒ¼­öÇ8å +Ç|�,[i‘“™ÁÕà8M䇴³ãBS Ñ³¶ü{̨>ü©›I õ1Î×ÌåÕÖsÉõ˜S ÷ù]7Q赺ƒòÆ¿†™&óçÙÏQçÑ­þÿ~ã¨bÏLÐlŸi+üÜjcIHG˜õú5%ÕŸÕ4âO÷ç‘ÏÑÙ¾‚E̵l—¬?ÇÂv~<î…h)±>X’ë*TE@)¬º—ˆK.h—qX”}Â|;£-«7¹ X­q|wfÞn7)g6;u g†jýµ±ç¤q<>&¢²ÀÎ(Åo/ÐÌŸJŽC@ùP©Ï‰î¯u_÷©WVÛ³úVcGzój?5þ?«±yâQ~…ð†—Íôòþö—×öÜDPmSbæî_?©×$>(¤‘²é —zH¼6*ãv$¸ÁI0¦âµ†½"³Ô_Mî3?�pH5ú±²¬”,!�”o+]–‰En¸—x™©l¯ux=¶Pö©�¼%$ŸNCûŒ¨§Rcú}À<Ñs±ývG°Z‰1´>Nq7Qß쪄�W,oÁŠ:qÈ’£D+* 07‚êGUàŒ²³yl—¯…ªvjqhþ9y·æ´5XK4÷q×ìn?7Äe°î2Dù/¸ö”"YÒKf3ej–k•é[U4MçäÓ™€Iã×µQ¸½KÞúñ«0û5TøÐ°—‰Z4º!«€uÔ‡‚{5‰47.O‡O< [z­”)ÿ¸¥ïö¿né�7Év#èýø±?öãÇþÃ~,òPðÔï�oøç¾!⣪Ÿ×(”€2Ê׈Wd F¨Ž¼�RNµ³^€pÌQ#–KÏ °G/‰÷¶i�¬_¢øhQÕLÁlUpŸË·�ÏAŽ‡Þ–ýæ\A[Ä�!Ð!EÇÞËJA Â$²4KVâ„JÅZ=çš �1¿_칩h†Àïît�;Ê`?5³ÔGdëEOÙ¯´o_ég¦’X©xõäÏ4üÓàùNËýIÝ¿�ºÔñÉÈ+S]{Î'(ÑI+ä ªÌ%j÷}%)¨½ÔQCânEÓÆ!ÑÏ[³Ôö[* �ÚEü±¬Oã»—݇R Ë5P¸ÎÂ;ÜO繪½ü(wý™ÿ’¯·‚ƒáðBé(ˆ ƒ ­uÝò‰è`th +ɶûòl!ɶ>–"5Ñ3èŽ2šr¥a²è�š 4Ù�TyÔC.O™‹`lÎÝ0&&à’RèéôV]·IÔ§s·ôýìOpsÿ„ÐùgÁŠA�ãÐÞEÕð=LcÃk¡ü.efl�ØE$‡ªÞTH_€é)“Ö)�å~XqìÅ‘éÈ|JuT>¨¹Û³×JdEù)êëë§fßõ2±ngIÙ›zj:t“ã÷ÝPg]*¤f‡™.M@tXÌ>*GwÐ�1ÕãV*.4­cé…[Òo§‡!È{±ÞC©sëu�úBŸÈ–Q[ÃaøÇ»Ø¿Þûï›àJ‡³ ,9 ô5늿~?Г³AðÄ;Ûa ±<«èZfAƒ¯‚&&¨.ãÎ7”Ù‰B-‘.ÕhvD{óVÀ{‡O¨âÅQŠvàj­!¹kì— „à ­�ÒLá¸WP�rÃßÄüŽiVjWQó�±<®Mz·ó)šãFPñV&"?˜î$ n,F'< ÚÕ.ØF&°¯œXu4š¾{üÎ9ýµ·'qí'½ 6 ðê„Äw]þcqä¶qkÎGãžæ¶mI@ŽÊly°lË<½& ý0˜®~üF�Òž�*\CÀz0®Í…bÁˆ‚¸50»Û¸gÁ9¶«?3§\Õ4„³)Ù9†0[,z&°ÒÄÞ–\� .g« ZöN×§‚¾bÂ¥ì%‘p@'êÄ•„?y“ß=C…¢Z­°*_W;ysìȃæhå'^»y~a~¥»3%NÌÍzH‚åªÿ]óÕÙ6Š`!IÐLq(Tác4¾‰óŽræ×iï¬L¢Ó’.Šç¡B¹6b�É5�=”á☚%B;Óä=„`�@IM©]® Ìö™:ïT(y‚³¦[jý'[HÉoNü›ÿmc jõåkÜNi×t6Ïî¡�Ñ.ùá«í9™ãž¿ÿ÷IéDJ®ŽK¦¨·O®¡Aà0›A†q~ÅסǗ }­"ÎŒkH6'üŽôM#SœeƒòXçm�ÖA<•ËàDzª–K +¾ñ}“Pu¿AÂæ �Õ%|$5…K¯ÅgÐåcP´+Jµ–l‘ÁPSµ'`k. _È?3¹cÐv µ}(2C¶Àz´¯!ñÔ4^6+íé£|.Ú¬&\e5À@Ù+–e#©*e n½¸šƼͥ3'‹z^¨ "^ŽUÞH´›S}5�.o j‚·¢šÃÙÔ¢ÍvÉ�Éâ«�ï¥jlú�u×O%m2ù?·ÂrÍò™,%ŸÝ”ž£S2}Ƥæ};¡’Ž(ÝgµwèκÀŸuPÚßò:×�äÜè²}„mÓi›{³qÏ©Ròß÷.þª?O£ü\kgRSô}²šÞ…2K¾£E¨Bb¥‚¯!H* 1•3S±[yÃ&•^�Ç@RkL}E1ùŒ!yõ4e6ÇÛú =WýÚùÜ€¦Z´¥Â2z xâçD”ÆA–d‡i‰â/hYq(T€ +¿1Ë‹ý…Êšq´Ñg“‰Ù^ëlqÎÚ�À>FtÄ�”‘-ù)zLSm@éèÔãÌ¢(WsxÉ�¦Ü +À¦ �è|Ìf}ÄV­ 0æƒdj¿ß‡·guYÅ( (ád�KÓ"›‘ýW©ž® ͱe[¹k²¸1º³”%|×R®w�³.›Nª/–¥�’¨‹x7¹77Ñ\Á­ôv>1œé8xJÆÀ ÔÛCæ£D¹k؆ð¦o­_Ó‚-IF#»–»Ý‚‰ š`ê.DÇ´”Ÿ…~=oÞ\£¨3©ÐoÕ<„a¶Nаör¬‰™î´”}iÚ‹¨Åd(JZà…/ &ig + +¨FG\¯õmDE@nì�F„•§ ®��(ljd `mj\ÆÅŽD‡P»nœÌ¥€}�O¤à��C>°ŸÌ0kÕiïmø ‹R˜XâÕòÈ4cvßÈÿH1h•í&UðÈhj¾²Ú›yC[âw#€f�¤kÊüLFt1 á‰S j4¯yUbj~ïIÞ#Yæâ$Nýô†½5‡è{ÑäþvÊÇ@Ž$œ *ãDP<Å 6’ßµQä©–v$û,ÏEúÞ²³×“ž-:EgAÏz憤õ¯i®&{v‰Ä{±Ü)­~œf� KcÇ540ÁËhQÐ賯m`?Yó¿³_íØ’¥8ÐïU¼ ¼>ˆõÔé±fœÙ¿1Šq3³ªÛ³œ*ô ¹ ¤ø$Rüd8gE84.�ÛßNüs\«�ýñKHŽÆV¶ç ðßP~a£|cÎò^¨ó¹é·Øw[†hÍ;Fës# 7ì#kyRDe^Z§üoÌRÊ×nÙ k®T tú[¾þ–¯¿åëÿ[¾Z[�m‘Ç›} +XcFXí’†Š:ß—>Âd·B<7IØç!ÉÆsTå´?¡.­Éqâ6žØìCx,¾ï¿kÙg„(õb}<Á]× ›?‚Ú‹Þ†F�ùà4ö j©‘nv‚}{Ibu¢D»JeZ:(@p?×¹ +A{¹ Qic�–¡î9cÂ(—oë¶¿�I3à(_ —þéÕ†M9 Þrý=Pù�q Á'O×%¤Kó‹�ù§QnCIÙûU�Ô"nacUA3–¦-6¬õÂ=X¢”¾Ù2[ö¥¸‘B¹351aœHósÔ(€Xˆ+ü#ö5 ùD†š–¸heÈúü‡¼¦ÚiÀ?ÉZö™×068;/C…X™l%éÃÖ�£¤Òo¡­³ËòñÏ[ÏÑö[Õ[âzq¡w¶¼ wãÛÊB*AÏ;sÚ}•Z–/Í€¥ñÌ5¹üŒ‚Üž GH ŠÑ@GP"w\§|"9&n:×uMõqÿ³ÔÆRÄ­ÆC?CÎ)Í ]Ýe“¤##;zœ3»ø–ÌägËÞx0îÎÙ�­ +¼¤\í>$!�]G ¶¥ã«Îžàæþ ‡´UðÅÂDëfÂ4×ÊDV +ÇZ_Å[“4œ?Û……GfFé4©”ÞðfãñB|qÌ…d¹MèÃòV.uªù :j®Ý…‚F¥sÝÕ´] á_FÂùÈlÓÁ`Ž¿ïF•ÇC…tÅðAfkê€È ñž•£; IS7Õò^|Ê­ò5–>¸%@Öø:µ¤Yž‹ïí1xø0NÚ¢9n™ÞË%dS„Ć˜¦ +°iYg0)&£×F=¹6ØWh­ÚOh^�JxúknKòœU>7‰¨VìG‚hsÖ%‰‘|wNÍY(/A$:h[Ê£‹ž%ÿ·LV¢]î^À JL—¿‘j‡K®!¾fq59²ìFs®JØ�s=Hý*óÌÀ¹íÛYÃMÉFgén]$2X,Xˆ�‰¹-!�ší’‚há…àv0`ÐÂà6d/Éÿ€Å9Q;.ø‘1£騱šmß™<9fd2 M¸®Ÿ<À°.áw€ “~³±™Ñ6xÿ;æ§³l¼jnXS| Yi4~‰sÃ…\mMÿÖË:=ç25¨¢Á6÷Nê$ß¹:¢±†LÒ´QÁ™tˆ™ÄïL“[ˆ�ü³AR~ +ÜÎò™ÚïTx.ÊöšN©ñ¯"7ÇNïÐùøãƒºz9¤©€­ô&$m +½ 6`Ý A“l‘¸2g†Þc�¯Ò“@tRßòÛ‚˜s5¢K;«I¥¤^ºšõj³lŒ»•¾Á §»D‡ ²÷¤ª9|�.¹³Iê!©ó‘drÃ"Äù87—ê¿Kh�gm�ïÎF^çG>ÝqczÓ--¨óNA”YHvÑÆgë9ð  ªœ®jæíÒŽT í0+b€Î–E+›>o<ѦÓÚ{0$ +åk$ùÛ.¢@¶Snµ1?þ¨ä7ÝÑÒgãÐû\¢À(8vXùÛÁ/ê¤Ò ¼Û3FA3ˆ<›/Øø&�j5oÁ:Ô¬ó¶`>ª¥�IuEÉzþ�O$Öf!®�ÞA%½º£bß®.•Ànª¨¥°§@yŠ÷Q'ü‰˜bÀ¨@E;“Ü:ç,�ÀJöò¸b×ÒÄÂ6Ù¸ PR·ß·fìÔØß]l™oUÒ÷f?ÊjÆuD¼ßwPWàñû ÐØ&JrLœ:E:p•¹e�âï�ï Õö°æƒË(|pÉ +.wy€îÚ +šŸô‰9)ŽÅoŠ=õMˆ¿!¼ÃÜ8IVMó|Êì>®4žû©€ïÒ‡v‡/7b¿ < xñ 7B"fE’ü4¼Ä`1 a3®Žf¦áOèêöM¨Zy‘ñÄÛ‹VsΖ+5¿ÁóÖ +‡P2æÔ$«tCWÁõ:@è.}ÈIn"ß”&¶»ø÷VÛb‚$ÓÑ)y½Å–]íÀ¾Ú +…2(8íªéÕ~M¬ÑÏ…Ó«yûÈn(”�í.R&¾¦0…`,Ü¢Jgýøƒ˜ÉΡ6pjóט5XQ‚Ò&Êv䨇vÛx�NbÍï ú4Èo,öqO· ‹¡v/>�¨ˆ~‹ò© :4wm:#Ûõ^M³=˜».)0%yĄŜÌœ¬¢Ù²¶¶Øƒ!{:™nÓþ,’+ùé¾"—ˆäÇä¾°Ix‘%1¼YÜSN°ÚǨúB8Õ†?°4ÒîÞ¿ ë’äAHLÇRÒ›æ4¦æœ)®€LÀ$bLô;3(T7z‡FËÕ9SBjr†%} +–©°+Ð�+Ì�´…Ò¸Ù›~i7­S¥÷Rì/Ç9¿ˆ»�©'‹UL]̨ëMè­Ömd —#=G/¾Yå[8¶Å×Ên^Ð>~£Õæ/1N.ÝÌv¾Là¸kïSŒ¦AÕuR ¡-¥Œªs¼<ï›å]a×ò9§~âL�èò|4(€º‰*bRn²ì—§À�~– ä r]ÍÕé(èo)¾AY‰z•œW 7­p�LóW2wÚ�È{÷³ Â8U_J.”f§MÚ,Ú^; N—~öÔ“ôÀ»õxµö�Û­xªâ£D~� ÛyéñóÓ?aCŠ<Ó ]¯H—o®D�k +Ë^�YäòÐ?ßL%Ö.­ƒ’›=cHÑ<¸U™å²Ï(˜ež.2@Tpבo>‚Ú‹Þ†j†'h«�­*ˆµ‹R}²%˜Ù)ÞËÄAFªÉð,\˜rzÓÐ'À_õyˆ YòB¥¦¦eš&üÏß8®ƒÆNºð x²w¨wÓ�Ñ#¥f¸ÿKéà úR�_^q‚n3‰§Bdé*ù,c°Yí•Í^—Ô‰!¥&ÓeRp¯ñ)íÀ0óÎu£«‚UY,à'Ãs�M{[ᇩ�®öÄP +â(nO -èœXçK]ç¨h£©nË'Ôx³ÝEÕ…Žyâ%³&Þj’$6ø†Ë¥q™Å¾âëÑóÇÕ•Þ%e4uÈ:`Ï…è³.!§Im3?„§hqzéÎf7&~Ï«JËATü�ð2HŽ�·�ðU|�ßE€$H(Yy•û/‚îg4~/•�‹°4”�¯/¦� dÌâOñ‡»08]õþT®Ïò\p˜Cc=дEŸÔ£1Ä›¢$÷¤_¡™à“éës?à3V¿ðÌÙ–X.8zŸò¡þ™OöŒ¦‚dÓÜJfô‹(NΜ³Æ 8‹ó ù©5?ndLjþ"ªxÀ¢*�M¬%}4z úR‡¥´(Ñׄî[ +º€1÷í?ÉAvÄŸ×h} QQj!¯8’�!°[çú ѧµ ¦�µ Y§ŸZ>±Ãf.…Ó¨ |â‚:o�GH¸ê ³R¶†•ö,Ã?Á3?À{²³Ázç¡Fi,3_PÕ Õhßâ ;lÐͪA¿8Ù�Uƒ&Êò4’ß^Dy�UTÂX1ž‡=è¬ è D<žËXª“_Añr*pN€Î`d?KŒ·uõí.-ë_p]ª­lhIÕÒº¦8¼/Pþ{·<3ÒLâÞëk‹ó%2é;Ó]÷mÇ5(J<‡õa‰£Æ ˜�™O¬k“Ú¾©ÖùmYÓÒ@Œö/ÎÏ`ˆôÀG®2©aá¶5™¡ÉÚ8Ù­$Š#¦Éœ…Öx5ò ;ñ[÷�²”Ž`®:”œ1ÒÊæwtÞ)ðy5ñ+äà.Ñ �<@d$'<Ü…"ŠÌæ%3A(¥§˜+«H›k�Å™¹¾· `C¯‰6«Ö+¥Hw)šdPøÓU3s�ÊX Œ:g+~ò1EÚ™Õ—±wK¨ò ê»J6­^fŠS•#'¤Ÿ€Ü NjZüü‰ù<”Ùì™ZÈïH-²OAd �PØõ>›®7(`“­ &ZU#¾£LK–&§ädYlJ"§¼!:ÂØ ‹yר5Ý…¼JIȶ\ÄŸA'éª8 ;É¡wv�ëÕÖ-t!dc1¨õ–ªÈ'GŸ©Â@Ú lÝs3ù�F W@Wxnätˆ¬Y|4^UÙD ™ÚÔІþ3œ]V ÷v¾Çkg®Y83î”1:¾Ü:+ûÝ«ü�¡@O'.92òLJ«óÛ�ª#ªLNx/Ó:M90žÁ1;Îü*öRpOFQžÃf=àG^¿fÅÆeû|X¦^Iß›FfÕû¡€‹DhkœXÏgË.Ó©siƒ#û¨Ñ+ï«Î¤hou­�Bô ;—ɇˤ—sÖqCžkÚå*/Pýê›#ï3{~ìéŽF«%ýÈ Â?k$,i‹KÔ‡’&žÙ´HÔCúÈvCÜ.}Šz=§bàªåK`Rs»6XXç#ýFHœ´Ϊ†‰Aº¦D5@œÝÈ÷8¬Ô�Á õ+мo]gµuI…Aå˜ïk@."U†!é0"^SVT—ðbT‘ù\¾©p~­¬WôíŽp´TÐè9–>„õÞ«»ÏÀµ¥‰�ÑêRªªu­J;X#ûG×l€vVðW}£ÑήƒMht˜èFÔìµ{¬{Å¿IžœÓ0VâÔ§Ì!Geû·zžC¸¥X'hxÙ]Ë�œŠ4•'íË&¾rXu(Ÿ¼kRtþÕÚ9ƒi„¨ˆ˜»?¯¨«›}�ðÑ«SÑv¹§²­Ø;šŽÞ:Û_*a›7.7¼#Ev?ÚšÍCû� +)Uæ·×ü’ÂF7ÿ¯Öü›@L(|N×ÐlmÜUå/‹¡n—ÎÙmTÙ£f¯£CØE—úM}ì»]ÒB륇²ë!˜œÔ¹»@Ïw{ý;µ”F—6iÓ±IºïF‹ŠÛ›i°gŒæ©ŒÅ$¥›Q© ÜxAµ9Êk(±jrGÝ@ï3ß�¾ôÕ›?Ê�xhÜ/O¼Õ�JÆìøW½DÓÔÕ j¶ªøT|) þ*¬±É•‰¬«p*ák H.@ÐÙ’‡ç4¢Â�&)Ø�ó¯0GEðš|%�Øê. ØÁM]³!k؄ĤEçcåÞàd>íŒ%—#MqúŸ5«Ú7ó½^A'üqüÂ3âwŽ«L’JÒañpÖÿù×ëòxWl^Îu\ý÷S6<Ÿ©jÚ*ïz+¥»é@)âm>‚T!r͇¦Í€¹]m_«�k“0p´.(îµäÌ4Ö…A>ÉJ‚m¬ûº°nz•À‡½WúäÜ’øùˆÄí ±<%Ü‘ËÊî4(K*Þ™}Ò.¿aƒi•ñÃÿTÜ�`ÉË)ñgæÐÂJV®6TW˜"nÛ8ÓE_Û–W¯Ñ$:ke‘vɲøÊá×O\ãŽêP ‹²¨I;z dAb/H˜ÙS9(¯õÜ3Ñ~Ét¥:�šX…öG¦+µ£ãW›ë¹àdÎ)³b´2Fzö<@øáʾ Œµø‹5Ì ·4tÓÆÖÐ984C›è ’h±êÌ6®™ñÅ:gŠQ˜qê­ Ÿ1ך�}߉9ÞÁè‚m$/røH,°YйU�Ž!¿Ð·L9h£-+ç.Aî¼EA%Ì Ç„ôãïæœj}ÑGአ¬;¡yñÏ$lÈÁ"þκqé1U‡Ò:1¬Qnÿnç¬urZêîoNëUé‹L€©Å:!¬k?uÕ7©Ä…ŠcÎÕ­’²¼¸…0°`•`[î³®·Õ Ê/,YŠ&U²²Qs~ràœO ÿ Áß(èÿŸÛ×|РÆÂ uM<è{>xpÎÔïŠç~óàüàÁqyP‡Z<ø +ôÅ‚ö¸…Ò¸Dyö¤<á½—£ûä·øÅoãƒß†øm=ùmôO~Ó‰¿­'¾•3<”9ñé¯o._EL½�A ¯Ž­uJåhTíPŒ4ÞÛ7õBÕÙÿâÙ›ñæ›ñ˜:1Þm¦b¼Ùߌ7ö“ñ†?/öƒñ¼?oˆÖ‹ñR»ßŒ§àÅx;µ/Å:¨ yµŸs÷Ë· ñ‡.ÅbÑz½`‚Ï6ÝÏhSµ§ îzEÔãáëbÇ“ñâ“ñšahX°‘ÕNÕÐÔË,H{÷;ºnλ>\yb°§]÷IŽ0¶'Úçf€2v—Q¬Á5áÔ|¬!÷ùÞVUÖû¯h3É P÷>ŽÈ� 6ÇM�¥]¼S>§fU±tQÉáÕ:L,jxPŸÕc8•F6á}“~,Û_(ËÓtO§‘Ø?ÊÈ ì•£Fãcä³ÅØšIG�­z�µï¢N;.bß‚Ë=UÖ"ÿhTº���N2[„nlÌ…LÑy¯�p—QR2f^þûoBSÞtN­Ãpgä©àÝ€�OÜlMJ>õ6™í˜G&d¡Ü™võï>¨ˆrL<ð‰ŠcÒ¤Ü8_þË~•cG®#AÿŸB(=bÎ3o<µ3÷7&–‰RËü¦ `‘@®‘×^¨Ó¥µ%“æû›bwïq�Œõ}k›·-Í#Ëm*ºOÖÞo7„'ˆïw|ŽÀ½Eôõ[¾%è-{o‰ý–u–ÄØ%AÏÇ®–o¥ôVg®=3%u�ND‹*³Ä}ì‰Ëii——1V¹XâUHNW*åÐ Å85EºK °ó©¤—úLTÌ̡ܬ4"cYÏリQGGMæâ„Qžz[›Îêñ«Ó²F¿TjVr‹Ë6m»yoí‚ ©lQG$·J»«Wˆu%"Ä3‡O]4˜œ±'C�2k!ÕtD·F.¯é,Á¸ +áÕéçPy4D„×5HŽúš&‰¯}Í-Sj¿Q8w¡$¸ž4+zÒh…(Æ©èg=Åqô:"çÍ”`ÃêLê©¢órwsðEÜUÝ|‹*×H#5©uN ,@f›Ç®h;n÷žJs÷³�Š$ç®3*«t×à[…~gê\¢•ú¾‰ôéK‚ YÞsd ˜âÖäŽá¥0aYÛO�‚8Ço]BF©:ôÕTo—&Í$däi9Þºœ"ñJW\ ,×$ÀX™Ýb#ÅäB&´åÏ�Ħ˜óbô¤ó…ÃcCÀê oˆº(ì\%${' è–öKS¥—Q¬úÀ"låHtl†ßÔ6÷Ï�«Õbæ¯)8òûºšk齬GhØ6×:èªäðd Á§Dì(Í© ùn• æÑyæ(ãìàys(S àVöEÙïŽðïç™1$rzU¯½ @‘ðt—yžéVºœaž­ªNQ³¼­NB5r´\ŸZÁc} ,%zàë"®+}Ó; 'Ø®‹ê¨œÔ¸ÝHßõ�†9É +'~­É�BñÕöéqÖºÏ!]Ö…¤[vI1ä9ü{ê´Ög”MÅÑM*úmT2Gû¥«²�ä–îÔãËËŽ§Ï¸¥)§åÎrø«9§ìùïM£î\Š“>aG«¬y t¦ªš—© >LŸØÒù3$Uÿ`m»xÓ½Vô +{å‹AJÝ;øGD¦wiî×àb›ï:±\‰óÉúÕ‰¿:ñW'þêÄ_�øïëÄRÙÝÄØ +º¥¦z0áÄâË "øy„Œ èbÐzNÚר6$"†!Ãì´kM`³MÎuÂ4UêöÎb3é¨lMr™�sÒwh?²X&åÍo¹ר\‡¢ª¤®laDÒâ{UÑɬ¹±I¦^Òr¹f½ÁߺimüµEîò¹ 2¥?0uY§%Éá%eð½ÊÚ™=ˆÂH„º¥u&¤Õ�¯ÉD¬)ßzà@UÀ»@Ì{¡ÚÈÉÁ¦Ÿcòu³?&Yÿ�T û §é9ÏÓ@܆ں–Í`)ÖmJ&Éî©ôÀ¡•¶�X;#Îì2°±‚Ò­*¾o=¡½îÕ_J £@òï4ó;Íü«ÓÌE90QU%}Ã>£Ò6ô�Ë,Ÿ³ºÿ}ã—òüß6×óÒ±D@ïCŸåõCñg|ö=¦dp³ C(*ù7¹l¥¨ (¾ŒC×E]™ANRK±üú‡4oT +uŒucšt‘¯v\/ÑòŸrÐ3{~Ó3 jÓ3;Ðô<•û›žÙO=SCÞôLôœ]û›ž¡JØõ7=_íàç«�í¶ÝïYŒp­ÆòYËCcûØbjŠxS`}î©´¬Û/µ£¸ŒR­H�†"Öí©0"]ÆW벤§”“Äx~¤x &%±POx'‚ ¤ ÜOŠ©æÍ…C»UÚÂ#‹L¨¼4u5Ñ288—�Ò½±Sp#3=\LXNЗ½Véf(~ªVú:ÂàâL8¤02ÆŠhV ¹U«˜ûÖ—³V'×#S^÷ÃW‰¾E´UÇ!¢¢Ñ3FŽGD§íÞ-¢k›o"ºFŒ·ˆÎ‘µøÀuzŠèÒN]Ú›Œ.íÖÑQV�ŽÎï*šË£¢‹¦‹-£ÓѸè‘Ðy–GB·vJhš:é^ÑQÈço Ò2Úôb6P£.ÜDN%�ÀŒI�ÕÅq­NqeÓ/+‘C­É*ª­ýa–c94MÀV@ÛQó�²Fß\KÈ3ð-#¥b¢/«g/÷ȧ %0eHmŒåcPižöxº㵄�4e�&&Ïz2!¯=úˆxRz8Çž¼²š�~³á$=W `H¢?Ië}ıžãþàe»OCZÚ¸¯zy>+Hš¹=&2¡€‡°þõæØëðøÅḦÄëˆÐë-t¯#¦ñ‰cý:“ð:³8maÞÎè¶]©·\áó.�ˆ+'Bµ™Ýûú�7/ +Ó/ÖÂÛ„?¦(‰ƒ5‘æH $ÎKÌ¡>^})iÌ|i9s. ÍuyÀµ¬÷Èfq²µJ7>Ü}4 #ÑcË#`�aì2’‰½ %"ĸŒ,L®Àuq˜Gx›¤@=üT7¯ºÚâ©ßkK,ø€�·.3B5%Þø1<µ®fQéyœ¤­º=ÆI2õ8IúC=lÌD >@­‚¥�·Yu}“ócC4Ãìµ£�u©+Ã3›¡˜1l³ds‰;‰pÌ2‡'ã@ÔÄêg/pÏ�@5’�j樆õª9o *¹<@¥*¿¡ªçªZ{ *—¬ 6n°‚¹ÑŠÚì�+ìn¼Â7^år Vkbõ| –`c–l¾1 ‡Þ˜E?OÌ"‘ߘ…¸ü„Y'd=ﳜË7ÈznbÛcø; ë´ðõf>±¤õ²§_g8MãD­ñ[ãÄ­;ì¯÷ŒÄmrõ¹Žon事"\?‘ë.%ì.€¨ä@.ƒFÖ_›¿¸½ñ‹‚õƯÜßÌ�¶‡H¨÷7ŠõÑó'Çò;ŽÅü8¦ÉéÁ±:¾™DÈ dT”�YšÜ@&-º�¬ŽÉê8¡Œ»ËV–éÈÌxå foPöŽd'ޱo»y'’]óD2VÅF2†õÀ2RÝF3^ Y;áLòbÃCöÀÙh íZÙˆV.ç§­®úÓ¸‡Òûßñs¹`?¬é%[Ö‡GÍF§ñ{AhÚž—î<ñ”·Ÿw¢Š¸OÄ/nt +¢;™‰‚Ø1ìœt+ÆVp +�oÐËc›StÞO ú/'d”Þq¬\Ó„ x’tEؘYû´1¼ˆ=¿´�|¼cò|N¸Ø£�w N�\°�À>�ÃÈ{»±ŸlG÷ ;ûŽ#TaÅ˰òŽõ{6¨¬º*QȉaÀ¬Wfè +­…ÿùSú O)0j3±ùª<«ÅJµ0 E…ÃX¿Ôø 2cyŒÂƒå(°?ÙalšAõ‹ã/ ¯å^ó¿_Ó¡¬$^¢ÿß[Ï@ÏN$ÎsÉ Â‰#ÇÀxy&Etšn¬p1ëÅù)ìЪ +êø”ö]vPï—Â’4áäà+Ê}²AÕÐTûÖo Í:qݿքï˃؈!å¨4�¤nuÐ’ì +êé2—ßч’å|)÷²QÕÃÙì:Lc!‚2ë½Ë¼ÖøÛžxrÚÌ?ì×ñå³rÓ¥ï^&{�{‹‘®“�*w—¡aXª§â—ØM^ï’ªt¢<Åz:³†î}¹HÅ ‚ÿJ[¦ µÿUÚþ%b ñá—MIèK²ßý(Y¾|”¨�—­Ÿy‘¯¶ÁZÿü“õ¿Ü8`o´7Áì¬ã`¸:¹EÒé¹4¸˜ )N$ë±ÜHÿ¬JœÁ|š¨‡ÈÏEšxv©T.X–ÄÀ¥ÒÚï3Ñ%ÅTÈcŒ ØAœ–´&e¥ÀúÜr‡Dèí×?Ò¦¼v©»ó5£Æ4¥àçº,Õ®ºÙtÈ‘àki¿× vl²h�›.7ß7oµº.nêl(º{`Èó²´¶øb„›Ø¿YW^®gtS'69߈VKÂ0¶h0<ÂYàZ–¬ÆÐ�ª qêLèG@Ou+`·+Bcz²U‘�0ù ?i›©üÚ 6È^³¢G|n…$Œ}TÈ…¨À?)–áÏtÛ½¼Å“„Ü/¾1VÞS¦˜òש’<­šþÏ~•cY¶Û°­ôúQ¤¦ÙÇA;ñþuï«îrèì'Uâ“®èDÇmë±*×®9˜r7­œYÌ�Yì�† +¶?V9#ÕFŒÅµ�ÕXAödmߨ*ŠÄ¡ž´¤ó:¥.%ŠP�ªÍ?@e禽'ñ!yü³OËx¸�)ϧòš¨TªÍ&òãÝX vòR"¦â·å[Õ&Ô,e¾eö6?KƒÄ6 ^Hë¨Tݯ±/ÅÀ§t)Ýd,�Ãë]9é+Тœm\Œ:å 8_zÌrÕnå½É Íjí¡ÌQUò¢ižLÛ&7Awn­ÙµŒõÌ¥Ê]ÚTÚíÒôã‘Ò­P!cÌ̵ËLQéXô}hVG!ø‘¬>¢fÒ¾”Ã#!ÊÁ1§»8QÛB×¼G´ò Í\¥œ—6 .°;D1ÕøAòk¸U×|1E6ÿuÕç.FÌ×vF~óÐÓHØ€×ï¡›…DªFZ„¾#õ=-i¦Êd{±éxf Ø™E|‚%Ÿ¨#Â`ÿ‰D,®jÏVy=J½ÁµK›Ä}BY%…�è\ 5¢?Í¢Ûø¿z†�e+¼êHšFáé¦2œQà7.õJö*„1%ZvƒáYY›!v[Y%Œ0<ØlR¨œûÀ®zª4†JA"Hذ壯�ôÀ1*ƒ¤ C!>$áë.ò‡«6)#p½V &ê®U¿ö£] 9)‰Ý‰è� ¬ÑKFˆq&•S“˜ãøy‹Ñ)¯‚úø«“¸Åò,…îô ,F'6¯tÀX+ØfRÉcP¢¾ãz{Ü™(ŠTRà"ÖŠ,ïj’-�AkÅèÌ•vKÕXºM<ÔèûVÚB·ý‘|ÇOq؇J,�‰×…Îùôô;{¿Ö¯t«4^³OèyWþé�»ÓóYA:Rï¹æ¿~¿û>dì¼v_úô½:ˆ–‚('ôxx(TôÏáï,+§çÖêÊP8ßl]‘M%96ò‡´t�WŠÞ˜€¶Í¢�tš÷w¼—VÁJ†P�ó‹”²Z†Í²úZ­Ã9’Vuƒ)å¢Û%~{ÝNÞ9›¢ ÑýôûÖ,™X• œ›Á‹ YÌzëÕå5Üp±—�?cfB³ûvƒSÎ…,ã”|£êÉëâ]SR¨•±Ë˜-'åa”2£·Õíe÷ÀGI"¾î†yµ³ë•y´={K K:@7ãˆß5ÆXŠÜ€1ç.|5 E�èY â:¹ïôWvòÞ–RhÄo|ôW Y�þ# �7NúÉíI�Ù éN›Mnçí�ãp¼²Ùãb3³P\ßd�îõl—n ¿'�ÁíÞAF#LrÄ_µ>—ûÝÉX +ØI„ÝÛü¡ÓA±]÷ÒÈÍ›ÂÐC´^O¼;éõ:£Õ¹ò$nÍÆ³e~ý»ÌÇ?s`�F¶î0¬àÍ.M%–H‰kreÒ”y ØÝÎ=!+mâ¢ÐQ*A%?¤Úš•é‘Y¯ÔÎç0œµ¤å�&óÙô?êˆ`1çÚôgP å­XµƒÀŽå†,E‹3Ðá囑©š³è®;9¬—PxÒ�Esùuvb® F(é…þ‚¹h€ºbtÞ?Ò ?ƹօskÕ ©G”b¨8pàЧ6Ç’-*Üt¦_+�l÷‹V ªÍð»UÈx‡q㉠Î*ðÁ¬êYæ@Zle” x´La›ª ¦Ç�p}Sî÷Zî¾r#§tò.#ýi¤ß×Úýeér§Üiì¯&ÓÕºaž-)„öÊè‰nR* §âï¹%6ÛÇMZ¼É¤œþ¢ÍŸæŠýIyGI›E3$ AjtŒ:tÿõÞ}“~=1ýCˆulå%Tg¹z.¾Œ“~ˆ¢ûk|š;g'Ø’VŸ˜ží¿y +¾xsŽ©žw»3“è•w_Ô×T‚®ŠGA�%ÅÎ�‹Q\Ð]fï.Z{D-2±¶N¶õóŠÂ¬ ô´#‚„S°Þ\3=pPËw4þGµ§¿‹–DlèÐtçH7�ÄÊoU‹³ºÅ¥¹´f”vYl#UÊVª?#1ë¢óµ3Å~Üï² Ùij×§ç¨3“Ê€ ¼ ò áÕ åmZÐU5 ÀéN;aØfÝ/�‰®ÄÐÄ¡ž£†/q]›K�MFåÜÍò°9Õ,ú¼“bpƒKÃPìùàrÅCéŽÎ†M~b3–"Tþ`CSZ4NünÚ+EQ½�)ÒtšÞ±Ø”PvWmø|åÆÜóê�¢@j,ƒÏ,$¬(N�Eqµ×‚¤rÖ¡“ ;¹ž�2— ;µn + }cn2m÷©aWÉ^ãÕ'�Ày»š3´¨S¤G'‡MÝð ÆÈg;/2G'øÒ`é~Fú#å+X¿Ux>âöþö�‚þÎ#㫦7¥¸ßæ`Íùa§ŸÛ3�§o΢�½"”=ª‘êŒB9‰8ÁÅq êGu\!Ø¢=ë›Mïc6 ÀcÑÍa÷1– ãtÌpbÌsÖø¶EÅYËÖ »Ã<vÐ;ej+½í»5S�¼çö¾)ÌÄh¬üe…ÆÿùÇ;=2úòØ‚&YšþçgpÙšÿ›ÿ&Çÿ9fÕË +ú–O‘ãØ¦O9%6|dbÀŽkþzMcèSMÆVõ?ª£ÅŽv¼õ“¼e|y5'E®«2[4(Ɖ�j÷“§cÝ�¼È[ÎìyÙ•™x6=yFY¨51,[šÅU®ndF7IâWZfÌ]¶}ÇÙhqAaðKŽùÚFøíM�¢,Éa:tÆ��Bï¤ÏAdè2ý�Jö˜DB�á7iBšøž¾ lw~ vÅ_ˆkòÏø°B5Uö#ZFˆÏ–öÜ";ÝÀPLصá¾$ ü˜/¦éäØRHHÂe·p‰1;&†FrqE¼/¡‡ŸKô{uæþvök½IÿLþֻȆœÚRGpÑ„Œj)q3Ûø¶ÆÆ³ž‚&•)b†�.µ HûyÇl¶‹„ßMKþî�e#Nl©Âi¨°ZÝ'Õÿ å±SIÍý=îÏs‘�Ãc¯¹J—v€¤¶ÅŽ5*6BOõy1Üw‹ào6ä'o!ÿÁÇqW¥Up?->‡¾Ž¬½ñÅì8æÀÈä ,Uòn~6˜´æãøÚÅÞ–_Bs´zõ7€63‹¨ê[=3¾Ê—øb®e�šéRaF,‡ÓŒV�«f4k1éÆÉºiª4W͇ª¦&—°Z™FƒËz-sU“"Ô[�g(eDƒdK×p_ ‚d‚ºÕÂ/ÆbôôÈ”›1yÌZÚ*æÆÝ_ë¾Z¬‰Ç"YP| Æ–¯ÛjäíguF`¨Äˆ­9ê©>/w4õ2ˆÊ¤%ç—þ‚šä—=Òk‘ðáP²Ýwé°j™¿±ðèó¦CƒæêWØ‚¡¦d¬³ Á­QEâ±¾J3qa;,ðÑ(6Ç;.e"q0l¨cQǯÅ×v›Ï,ô+ß5M‹ÎUÌd”Pò¸–ÚQÃZÌÙÕ�åGù6ô DÞ#R>q>Mt}e‚iHƒwqé¬ÝïT¡u}EL¹†@åËd}q‚ðs†Éwñˆ¢¾œ,ԥƠ5‡(r×Ú-F²C6o +û×›|µKDÝÚjœìå%¡Vgêõ~UíR–rÎ:(¬ÉíäžÓ‹Hs»s: M׺șÏn½Þo0‡¼æH'Œ®t¢œðj0öÄÀw5Œ3³ñokA3pƒ3º–žòyíôˆÿ—ý*É®eÅ�[ñÞ=$šõüéÛÿ¸â6ß®YÕÌ]ÈLR4ýÊ«»†Ü—Å�È=tŒm*ë°£ó%^ì/ 0§,]ð¬å´h£+*{ƒaü€”Ó±àmÌ ôà‚U0Ì,œ ]Æaç°†ú`™Š“�w-BÓƒÚ×è·ýÛÍGÒ0[m°ï‰Á˜R[¬>1…´•‹ƒÎã ®.(¾‡<@‡«‰:…F? ÊJ]wÀ¯‘÷6í“dªiæõ§ó-luG¥ŒÂY/ËŸŒ�®±ê)G£ÿHËà_Äpø·j-ã• :hP€ÿ +3cÚD–¦��X•j—�“Ì£�7|�çG�ÝYa»o¦cžÎM5�.KV”3YÚ¯Øqá¹UA-"®I*œ^Ã!¿ñp·x8óm+vr'•“��›îÑБ€ ‚n² n_�¼P!»2Ã:,TkÔ¥G|t:*z·‚ñ½øä�¸#ïØ‹N°0.Þ7. SG�EqËš[ 3nÕßh=ÍúÆx„4k�!�Ç�0‚nc!ûö~T©n„»ü>gŽ×°Ë[ÜÀqB[@, +z¡Õ:üÖt¤æˆÄ÷¤ šrS&·r=‘PÝ�[€vÿ,w%á@4@¢†Du)ØÄ8ÝDÛD8Šäܘ“9L¨©²Ç˜x<¨q�˜¹/ + U¬ÝR|M1z'0M™-ÀÇJqd½ö•œawÎ¥v€n£ÛWy^�Ïi£�V–] i-³×4Bg>> ôòDÿ*OÙ sÇtGéë ] ƒ!ûæ³ø;é.R6á¨Ú×ÊûJÕ.º)ÛÛk<ë’éù=�7I‡Eäne`qÝQB+ <õª‘à@%¨û†áPYæFòж¤@Þ=¸<¹¯i¸Ó`mu Yycü½Á�ížøh¬I,B”¹ÔÌ,‚`yB5*¥ 9C>èR,KJ�p¡Cº©4Ù.oØÔ ´�†g¦�žy´aìï?{4�X‰ãÆsÅ[´Ë8vÜl!yš4KAvÝÝæ«W­·7‹–lw s«qfø.ʨlYt>}ã 7ð*Ýk£�]´§ ˰À鸶p?^{Ù�]¿ž‡ÜeÃpB/8�Ä@)¨ùÇøéOÞV¼‡;œÍª¨³u.©êOyBP†¿Üb®¶;3³³[ŽÛ"y8ò5Ô™xlå +{�â³¶Üî@ƒö’•ÍÐê.ÿ«^ ›wÞ,ê¹Y{cÜ`µÔ¼j¦2º•,›&+ÛúOV6-' +ܽ˯wùõ.¿Þåã]FÛyúüJ8äD|z—&É?ÎÅ–9ßb¨Óç|e˜0 g"M»£Ú*ÔÓþÖVT1@ºh!…«] »ú³îŸ¡‘(:Ä1Ú›£ë¬b=3.õ½Õ„€…"ÅD-i�„ÑèØ~]îåàmjáÞÿ«(莄¾ßäþ?’›:´�$%¼'÷lY»Ø%‹•D#H·£¡ý†_aON‡$Ù*»Ò¯[TNc¯Ý%¨Ê›,i¾-6]¥ô›Ë†‘!Ž˜ÆÄcœRÚ� qoÿü¡[Le¦1 ʼnЀ¡gЋ«F/•LµC_‘ѨåUñæwâVCÉ’Šp…ÙÌ´‰Ì™•CâlÈ>eU&ýd¬»È/fÐʽ�ÆCⓃž&gQü€€äæxT¹«È¥1+®<ã9²ëXzçææ�ö ¡,õ®2‚àEKÐÚŽvéŸVkª9!ü¨LèÆ\‡‚ȯ±F‚cw½SCŠ�£~·³¦ð·ÏU–—8ù›¬ŽÑhìAð–¢)\—[B[æ…ÊÏÙÄ#u(– ð¬=¨ç5^‹Ë*ÚœirÉÔ(DpO!LIºæ{–ú·®)ŸR0eö y%ÂæE—ù¶âüÊ|8õÇò2G Çê’ìpcPw”+ü‹¸‚«Ö2^©)ñÈ ÿ +Œ)¦��XÊÇ.(Cw“—¹­¼BÖ~¢WG®2Y©ö.Úq8@`áC°åLÀKQó¯Ð´ß|E�œ¸Ÿ >ÜÝ[àÁ†rÜÝB.î]w +¬7δ�º½²¡ÁæMüæÜÚêœlS\·ò Ïi½Öu¯¦2;ÐZMžJƒcvŸ©™ÙEN´²šíʳ9îËŒ†-¿sŠáÄ,Ü¢(óª®l¼A)ï�ÜÖX¦å51úJ [ã»v×*JL‘à»bÉj°k|m-ƒ€ÏÌ.•nÞ@&v”CÀSõUè>Èe îɯ`ÌV ãy±vß‹,õêœp†;“�Þ}9CšN Z[H¢Å`Ysß`4v@’Ÿàm‚I¬Ý1]™?CÉ¸Ï *ãû:�q¿”]V{P€6©Õú\>î›S]ø3à0ºÍ/}=?Þ»ö¥!”;E ƒh½ŽxߤÓëVßkó.XJV¼½ü•øžFÕxÉ�B‚O "ý9ª(lSz¡“�oåºñÚÏý ¯³ˆæàæNGÙ,2«vÏ:¥†b€ +ÁHËó1Ÿ/ʬ¶¨OdÿòsFÏ‚ê»Æ-¨7²Ä6nP €Eàyp@Ó"’” ¬Y7�ÖI°F�ëÇMÞÄZ ÞP~¤Ðû")Æ3΋�Ð sÈÞ�s&«ŠnÒ ÁòUbÄÿÌÁBÇ›cT¬ÆxãF™ävŸ ’{¾ì�ÕCl[]÷÷>±ÁY´ãI1ª°�í[ ”  Š:f™|Úþú(¹oü3�½üËŸHÇLDÛtPñè(éþlOúÔ€!^Ñ.�ÓAP08o ˜ìx#<›syM¢žjQÃpÀ”Oú=_‰újì q'“ýmèT™oá³O|™š[\G^øÎDvsŸúè~¼ö²»~=v#Júäqð*‰�R’Õþ1^YöÜÊ¡¢~ wÎæFš¢>1‰RÛ©60Æ�-îœãpšmwfÌ—xœ(2ÉÒ¹ ø’ÑÜLÙ9H1k¦.;i=àߘÀ–W›;šK�Y¯Nù‘ú~8UYìã./¶RöægV¡nw|Åm™¨Q«òø¡Â–³å³_,ßøvõj5úÀyÔöä䘬ì-·ØW•Ú!ƉH>Pã*<¨ú ¡¶à!¦t�¿" ”6Ÿ³hyÒélZÄfòsÙF\;´´q²·bº¬p)¨™gË®ž‚dœ/ÿûy›=C˜NI:Ð.Ç:ë‹H{~•'ª§Ðkë²U“õÄqè µª�ö¤4áÛ…™±Í�¸ØµvË÷µä–,#3fàk¬)W»j¬+=nœì•%µ3"£/ÒR†Ô…(0 Öætx§—]˜Û¢ª¶ TìO€¼ylëuþ†0”•MÁP1HÇ"gh߉9¶=¨yŸ ÿžl]0³ô5IiŒà�KÁ5R�ÛÎŒ `¢òꮡ˜ îDî¡S±Í¯kæÔ)瀜ODH_ Qð>÷ú�eò#ëÚèŠ +s3gQPU8ÀËLòÍ©P�÷`—qØy¬Y‹¦âdwÒ¨ÕóÖ¾¤¯ó‹CË•�æ€jƒ5xOÅ>›ë {óU“J.˜ðè¸&Ó ‚r=Ô5·1×—šˆŽ‡£@e33Pä3Ÿ,^âáR¢ûGˆìVL†VäŒ Ö ^Mšm®ë›l‰ö3¸»to¼A>P„üV� }ÅôÔ²ÁUÒCŽŒæÄFÓ‡ºÌž’õx‹F*’ Œø[ ?‚Eý¡CfÁmàí+¬¥FûÜ÷kÝgÔÀÏÏ(KPúª©}ÙlS(6ËÊM¶öد’äØr¸÷)t�¯ Žçé°WÝßad&ðª$ýŽðz#E> ˜ƒË±[>‹ÉBí©ÞÆb¤ä£´Ê¤f•ýB +m6I—•ô7*æu‚[æ„Ë|'™´x%c&ÅŽ’ö#l™ö[­ÑËjÀ—ÀqœW0@�.k»�2×á<îÚ ¼H¶u `G€w†j:ÀŒUòñ°oaypG�»J|Ëq èbØÐÅqëd[©öWOL@<¢v©ŒzÁÉòš¬ñ=Ä:WvDÁ\Éþ‘‘ÄM?µKÌ£íSF%Û"ÙW‡o:‘[ã\'K‡�(✜knQ£Á¢Œ]Âÿ ©´(E7ód4ú·9ËynÂ;w�dú+ðÕsà|.¶Uãg‘:0'43Iï¥d~¥ç�ü•t¹\î;Ò}è ¬-ÁÛ<é©Ô¦ŠOˆ"ñúƉä5ˆÙk¥A…˜{PÐäW�À>èm`ؽfgÂ"±F[Z=7Ó¾Ô–s§t�×k&�^k´\WÚè‹%û+Ã'?ài°V™¼^º_¢æ#½¡}Žr�ö"BèK@p­űŒ6ô¤µÅ殡löÂb¬Ú³ò”j"ùü�ÓRixL1×3Ñ fj H[,×ȱ¨¾x/Ø#pp’W:•9õ{'cÐ"_;ÆìJ'›�}­~ã½R�™$ÜxC±HzÐKˆØTÈ£ÁFá"À_T.À*½Î¾&i…פÒ¨ÄHj‘ƒ�g4Ù>l‹ÀЦÂðŠ-“¾hDךìa=>[]÷0ë>I°ºu›O"oŒZ;U 8´Häµ¥·1¤+ÎÇ—’ûãÛ[ ·ˆ·<VûªRt¯D¸»Þžd†�œ–ËJ`ç Œ3F5�G,Åas>‡‹;Ç2Þu¢�–ñ{ØÜ”ˆKÅþÄ™„Ò8ðYÔaÂ|òZ—ßñçè¡ÁTç?rê9åp«$b‰È(ÞÏ›œâþt4á ç{¸Ólvˆ½Ü i²Fj +½Œ™ëD ‹2b›wvgvXÑó\¹È3Œž.!·²"o­Þ¡´þ¬!ßÂÅ–÷?ïOg]á ïO 8 ÛB#ϨŧÎÓëпɜa‰Àh +Ñ ùþ�.è7wxSë´^×)»6*üóöN�²Ä~h§PãW dF¬£©Ý4q{¨-&šwwöT”O—©¯Ùã÷v1ÌAÂÝoŠÃîˆ×5á_•”…7Ç6¶O�cdÔ�ü¬¸9ÊE³£‚Ùp=ÄqqäH;l;è£eSªÓ§" D$6ÚÖ¤€ ç™Ð…ÉO'¨e¢*@ Ï¹W¥xûQUñÒq+#É rº]å8…*¬�åÂ+å.£Q…Ë8óŒï$·æ<Üüme:Ñk Ó„Â2—æ_È€÷N§¶LιoùªL �úÈB½ô*¢@¶‡ÐÕD¡ ¿ +"‹ÛXSøk""üÈ�‚lR5Ô ‰ ì:S+Œ6zNçÙUê‹%ˆÆòËdVì¾ÚTOtØw`Ô&4&¨Cqc:ÉhwôÁëá^¡ážRÿÎöýŒ�¨ƒiû'ž!›ù ¤»Í·è䦌`æÚÕD°(Q`gÏØ·Þíhç-@;�g«U{”ØeTfã½9Xoá‘q]X™�DVŽ…µ±Î‚x˜…¢çóµ—óyò×ûI±‰÷~ã8˜ŠGb ”Dy°f{ǵr+—Oà-<ÑéŠlZ‹Ï[к¹ó‚Ö]@‹÷ Û²©É‹*"†A>G´Sv/RÌ‹ÔEMÅ•š+�=®6v$Õ0wN qqßðüVG”¡£mÏM°vš +X¨‘#£~ºpåñ÷û�×yìN»� ÷Ý‚ëSJ¹A“@zNð|²eüd;kŠÛeáO-!·ÚYy ê&1¨Ï)ÉÄÙÇ+â¡­¯§’– ´ºQ,Ž[nJrË5´³Óz2ŠQƒà£8[ß’åYÝqßÃÞž4Á`‘3L³rÅÜg}$ŠåWxl»á—ÎüâÊŒ›ÂC΀ÂÞíDß!O0£5E'Ç!u¿d¹&¡tÅ�]¹:Yd¥F;-³¤÷lkfõê·tûºÁÙöÉâ‚]ÁQzÛyOé®Ä–Gl·Ð…´!i6©¶Ü¨ø2y´‰®Gdhªô»xù"«.�@ûß¿º¤³²»SvG÷ÞPÉÈ.÷w¼·îxéø7Ž©p¯ÇÓ–ŽßûMÇ»ØãT•ïyoÄ'w$æ#o¦’¿ö.ä#Jº[}¼7~™t_ï¡a™+!?†J´~–BÞ¿ùñ&äGK!ï¿tëáAaP§ûO!?SÈS¬ͨÅ| Å¢η-„çU¥„;|(ÃÒãnÜÊýá2œr ä‚¡¨ÇQ%•x,ßzF�†á'¶uí>r=ô¤wqQV:Ûµ· ;_Mü%„w³GZ®­·Òô< [âÞÿÑx”íLÜzD|:…E5… ò¾ž*0½±·ó¶Göý†ŒO¡FöÄ#¿YÊF°¤,2.µ/¶õhâµ3ˆ³­) Ý)ÑR[ËÊPs#3”â›h 26éÒ&­ɉ«$8o‚Z“ÊÝûÁ($µ/Û&öDw™økÏ�d±@g‚c¬#¾Â;reR’U/Ng {†+½Â%ù#œ1v#ß/Ž +G;³Øsyßu\t pÿE=×,^†��ßâ!“&nZVœÎ²M½7üéZÈ_'Œ¨í% =€0€ßBÿÆšM.ÜØ•.1o»© ùR3¾Y& ¹Ù–ðbõµec{JÑ,»!‚ÿ( ­-µ§õkìÄ3ƒÃˆÆ8pMoXÓõý–„\ë-îıŒ“H©ö˜bkSÎ+ÕÓÔ;oꩱn-uÙ숨7z?. +JþSÞºEËøþê+´"@Å€d2S¶ÌofS«åËýÍÝ@l$k:2�ù2ô$¹ØT§> Y¦Bö!v�C¶Ž2ö# �l½Úíã ÁŠ^ß8…SMìµÒ #Ë=(@z³Å_5>†{Í¥dœ ‹ !q((…ûz± wŠ@Ñx±fÒéµFËuuÑØµ07nõ¯ Ÿü@ww¼Î0{r‹7J5’Y£†æ4ÛN§lPF‹Ø°BÏÂFq‘¡Ø—ss×€ñ{%%FFVžRM$Ÿ Àt3‡Çs=I(i‰¨ .×(i!IKׇê¡Ê÷!æºïÆÙ ‰qÀ¦A‹òØ1fW:ÙÌ“`Œ¢9¨è¶W*0“|o(1“áB¥Ld+ò7x€q…سhª³¯ÉÉøÞyBxœ,±vIa{ƒAEg‡mT¬Úô^Q$¹×�tZ“ýjùÊ+ãfÝ'6¸R;MV=¸2kèÝN-ëØËSµ¥·1$ãÏÇ—’û5î*rIÍØ¡:ß¡&Q!›P>»ÔÌ�°‰´(U%p»žw øøÿد–¹r¸ŸSø.ˆõ;OcfåÕÜ1Œ*ó•] ôb–•¢¥|©ÇO|ÀÞï ¤}-¸œ¡Iœ‘s8:7¿ +9胠76„?„Y`so‰®g¶„ú•)PàuÎaäÌ™×ïÕ�,îW�ü4}§v mgÒËûPËݱ›ý>¬‘éówNñƒ1uÎiò¢ˆ£·nݱîߣּÂc£U—±ÀLÕÜ¥ÆiYƒ<:ø¬!Ý;ÝëöÈFRÙy ̸wù±î%Ç +¤ÐÝ{ФC¦`VAŸ%Öx¶ÝÅ„1…I¤_‹…ñYħp-{I¨@EÁ`‚ Å• +Úµ˜š!ö¾8åt2óuç"šF”Rsë<¥q¥„Î�»”ì`�úµWóÇxD`û‰¢ÿªƒŸ‚E¿ —ÌÜljÌWXG[™ÑGpŸ¯sŸ# +¼WÔ>„‹Ëè/úºf-o?«qà#Á™Ý‚ÀÕF”AV�“‘’_â†#qµ�½t Äu¿ó•O� åáãSOùÔ±ù´¡ö(o9Xê¼ÎŽþz‡fìÅ)f¤*ñ8JwŒ’è,ß_ (FY\Œ¼—´þm@‰ýà=F#ÄŸcšTºÙÞOá€Iª—HŇ¼nRS¼ünÙHFriüsñTïCÿ³:u™¥«ƒ›¨úŽkw¢Åµ;hÜ—WÍ·…eÊÎiRGŠÄL¨ •‘´“V‹²z€ZÏÊ8À2á²l}CU¢ˆÈˆÖ Íq|vM�rWQHËT\yÆ÷$—ž¹ûÛzb8M¶4\ÔDvÁû¤—µÿNÝ9å=drjyQ$Z!ŠRiIôÈuˆ»–h(e :œ=…¿N‘âm³ˆ“ÿ×¥D3¹ÇY\ùGé(ŽÔÂÎ6¾[£ÚªW�2c ÊMî€vñ’Ÿ÷š +ãmº%ƒÆÔ8'‰Ý;ö@ë¨+ãÕê(�sŠ©üÓtPç4!:9|=êYÅ÷3'÷EýƒÂpym̧É=óáy1X ÒÂ>'½v3Wþö,h¡I%ú¥#ÝF‘÷Í1ß“ÝpÛ‚º6p�ý©›�~ôàz†#§•3êÞ�‚¼vwbÁyÄ–ï §½m5ëƒØ]Ï È·’¼YB?ïP~íž…Ó3ôJ~vŠÛ;•¦T×Hü÷ßïí>²³¶%Ërû?�”ô–ú|«°ï Q;Xr­/ñ¾î§wÀ2Èp��v0yÈàoäJ\ÔŒ²WôTGf63g¤zÏ6âš5;£6RO,o’E� Ô‚Âb˜�•Lá¯{ä·0YçÖßÁ(�}µkyMkµ–,èµüjçÛë¥oæRf¤¸ùÛA|mÿƒAô|wƒ�ü:óñÎ<¬-nö—ôÍve~­GæÓh½3ã•ûžèæ>ªŸ•ü1Þ¹?þL}F•ïiñ\>Àóò ?s”ú•LÜüZ¥¾J}5øª-‹L˜Fn�k òÍ*¯k : êœASÉj–Å1‡ë|-ïÕ §ëÙ<í܇¡Ã4Åü¡Ì…ƒHqƒ ( 1}j™<’¦2kº8†ÌgnZåãÇÏó±Ê•÷sˆ&>ƒ*Æ;Ìû64*(�aw6aÝŒq;wzuøÜ€þ¶ˆ_5)¦­ rIÔÑ�FwäR€Ä�FpS *‚Mq�ƒKÄÍ6ö`a«ƒ§¼®ZVÁAÃNi•|bv“ëtæ5á‡-Oå°p/£ú?Ÿ©0¹Óyà5Ñ‹…ÁFt„¤hã¢é«nLÇL n ~ qÎ{:ÚDÔY¬3ÕA�e‚F)¦GmVñ;¶Ã¡ ¡ùк—ll¸>ˆŸ6TRµd¼#ö�Û|ífæ'Ùsš–æ ±DH*vµ£‰®æuµk~)ß ‰$ší‰ó 1‚âLò�‹gýbïw«¸¾Eq�ø§ÍúÆ J¤S¢©ïâi¼ÕÉ@RêFsˆöv�Ýb;dè&‘w&¦\±uÁÇW”ácÕYÆ+1@âß ê~ 3c³˜h¶ó)V§¶k{�“Ì£H¾Àó¥¥Zi×úÙo�ýÙo�ý�ì†`´Ac3 øÙÈ+”¶ì…•Þï2gû®º&lzÏhÎ:Ê8o¹ +�ihšÆí¶Ü"ú´Þ›A‡m6kM/zÞ;hG¶6êcFT‡AEþ’KøSô¨ü!›ZQõâH¡0 RïÓõévçÏía*Š ðò4!™Œ9”«éQÑwç–s¥¸ÞD‡›d�V¶�Œ±Ò®Ç÷¢�w0Oeᦹààcçsdinvv½?R¹Ù�=FMèû®ñ +ð#Š`æ:¿ƒõ +íkæ „‘¿å€ `ãÆÖzeCóTEizçö—’Þ™˜Îic°cøH(.GøÎêWzÁ +Q© ;xŽÐõ àã‘P9EÁPmw¾§ln-¤ÿ›É02»kŽ:ö¥ŠÉîµTDŠ€”«’­z7‚ûVŒãm{¨HWöAµZßsרŸ�í7fãÙo¦=`û~/RÚ5À™)ùÓµÔ;%öL¼]¦ÇÉ,‘<»Aî±û]Õ»zô³ê°—¦I[2~eQ.R0ÈP‡µn X¦ó:‡ºï,Gí“ùÌSëê§Öܼ”#~ÖÝCá©TS«sØǦw‰ŽFÆ$‡1%N5× j’Óí2AŽ™·í‘€_°j �ÜÏ{Y¹íËqïô÷õ{?í6ð?.‰áX¸áøã’þ¸¤?.é�Kú?¹$ˆQ4l]R;ˆè;É5Ãå +•éi«ºÑµTìN•²L3&‡äÞmNé5}€°zOþyZ♵ßÄÎ5ѨíÏ\&,ìü/%Å_ +…®�Ÿ;é™%�*UA^)@f6Éæ€Ÿ·­ŽҕvðÜɰ˜R,bò¹ƒ—UŠ&-ÜÒ(ÕaDj\j¼.)uéÈxHÅo¦+2ùôß!âR²}‘yB6°þa²l•‡ 5ˆªÇ{ÒPÛ (I�Ã)ö7…ætÇ¬Ñ ç#I ÖƒV/¬»ºœ™*Âî<;ù[¶P*jÞ'‡ÊI}$p¨p§%#fTQS&Ž”*p�X}úÒ¥2—µPlËÙ~¥Ñ» ð˜ÌEßžjÍ"Õõ¼ÝÛï¤|Z@bFH8Üß«:œ+ÅÑç°Ë‡½Á•Í‚æG³„&íÌžøY~¬h1—XCcñ&ò _œuÜv'è‘]€P[¡{M†Õ ?ù BÚ5£†ÇK­‰—DuSÏY©·CW.T>(yzúòJ¯E÷ãp©¬qÒÜÇþÆEj‹ _Ùøñ߯¿‹œ…ôl ÇŽ š îW¼!{‘¿áÃÕI—ÔÈê9Òo¿ êë ÈúñüJCÏÆÚGËœ$Q¾º_{Š;¯ßÞRçY)ìdŸ¿¿Ÿå�·�.‰—\£;l])Š}ÑYyß:d×Z2Î ˆj2n—¿Lðõn™"Ýp¡]Oú”ÍÌ匋·w~Œ%{ÀNA½]”l y퉺’1z:÷AsQŠÌx˜4ºpl õµ>Z`Ê- Û)RsìÒ½ÈgZ�:íT�—zè\©Ø fú“Ú¬¡ƒ9`Œ›#%1,Î`ã7AèÕs_!ÀÖTuÕÍÝ›°±¸×Ýu½˜pð�Cæ¶;ó†9Á×_û‰[0~Õð#2jmf¡6ÔlÀE G:EäBO…@r^öô­•ã÷àýnù~–&µÝ*=.Øå¦Æd4» M‘°ÇRX‰˜9"¶ÄlÕËŽ7(ŸéRì�®ì)G ³R‰OÉ& £NÅóàSÊ£*~–YÔ½ °Oýøõ–¾S(¤gG ¨‚µ-Ñ+µÇÈŒIZˆXBg±°š¤ço©T‘îSxHV…"�ìÇY‘_m>H5D\©[†q³=~{�¿Ðžö>ÐmxõÁC¡Ê`0ºy÷¯GúdÉ«,ýBŸQŸë$ä2ë +‚p�x/õ¿Š¹öPrË¡á,gÃS–œ!å>›t…�%ôõ:®ü`�oйÖhûú¡Œ÷ éV6Ä:ŽÄ�¬Å¢fØ)D«”Aãë]Ö€òwª‹°ÿrE¡�í£°¤,ª·üâÉÐSPnsÁ"iœc}ÁÑç}\ŠíÔ ïû\uÉÏR™s¬>©×Æ>ïÎâ‰Ô ËW±É.Þf-ÅÁX”Ê”r¥%)áÒ›î l +½„ÑE ?ß0©_ &Ô�x‰(ä�†˜–J¥ +oˆß© c¾Ð7¡7×"у´ÎçM÷oü‹Ô!çý-Ûë�|Øðò³Û£y¯ƒY¡fí×y‰x¥K¿�ù11ˆô,õRÁ�‹á·Å+½Nã„X�{`ËBç:Ú¦ Z¨Œóq÷oôõÐøu`·‘HôŠg‰uªÅò–èà�ÃÆ¾åÇ6“rJksŒìHG@„zœz^h²hl]LÁpëâÍ¡¢ûµzˆOSlC}“À÷�<%R+”c¡ÚJ7Õ7Mo4eû쬡ÌMƒê*7döŠ×Kz…“YŠØL]ÈA¨ž”óŸ>‚ÜÅ QÕ9­R߅ŵÉp›·„ضkоÁ.éÎUHŒº¡P³¡‡åɦûeCFäB»‘ý`œ;üÛ�ÞúËîÅ(LLDOy}MW§ ~¢GÃ.èý@‹h±E¾G)’hñkj+Êd…š|ƵpÌyÜ@7ߣó€™Ù$äD8ü¥'!3š`z¶i,ØDìs‰`j]ãœÍNÒ ?fnl¡e¯%ô©‘3EŒ}�)w¡ÊyÂ}HÔìÅx5FÅšõg ‘Ó[" à©|i"¸•v­•bñáI�#Ög‹ýˆBkº6èþB½xÈÞŽrLÞÖž¤ƒ©‹cÿ<ex(±Ñ/€D˜â8¡*“3}ËUôN*¢ø¡%,âÚŸÔG¬šoØŸÿ¤¢]ìçiè?¼ éXà حJ'·mR‰K[í’·Õš §þ[W>öˇ‚¼�V·RE3Bn•&Dn1÷ŽÄ%’¨d¹Œ.�9\3¨ÞI�·:®¿¿ÕNØ9ÜÚ)Ne,ªä)UÌ–“ÃǸ»z.þ)¬�äV0!¦òŒÍß6&·8¹RsõÄᑦA-![.æ"ÞŸNž™KjÏå©áo"±oJ-g4 êÌ_D" +i׉]_éü,"©e ®@2û—ð²Éª+›ž +n7¡Ú²4„zg +Ïíö('ˆƒ×1ó«$´ñHa=Ô±¦l•v'¾§”u H’�²ÚŸ 1Úáö§‚]ÐÀ)©ºþM),ff±Ó«JéB1Ä«û´üž˜À¦S9®Pi�#Üîkeçd'¦€ ù©û¶s§"^}?>§<ŽÎ\E�+üyH¿<\:Ì•*zê…zÇØÜÈ/UnÜ~§8JÙª'žš;MZXË–2ïi>í3�ʰ.8í¢çtžV‹t L¶I5< +H¤Ù!HÄõFŠ}“”a®;T4‡8aå˜Oxi<ÍãFÌB‘C“‡ÂÞ)¬zú6É?$Ûf©…ÕhCƒÚU×»MÒàÀP_`=íam�û¾E"-xq¤RggsÛ$gºiˆ³£Ê�*=A*Ag {šhbØrêÌ~’…Žuf ¦n“&\:~Þò§„›ÁÜö?UM»+œ]LÈ>øõ]žMLN6iä\6�[óT¨TÜ*¿S‘¨©iQëŸPЮBxã*£¢šgo§¡ ¸ŽÉ +!Õ¿ü†Ds] ƒB«£”ÿu!Ö[ä–j�Äâ§bÜ’þ醚má–ß  ªôŠF�¥'ÑЙæfV{8©vÑììD?•c!¦†ÝGsCe.ö�kÊkGJèFš­Ub›½‚b>@çtpß�Εš¦àÊò µi±Ò¶uɹV—~!Ú\.í¢Øô6Ü++õ[Q夡õ;‹o¾øŠFrcª*{Ë1l"ÊFØÀâ6%ìmé€ûdÿ’3,ÁØÜÁì'Çy™ÿ�u‹– s6dÍ&±Þ¬K�Jµ(Í€5_¨Ê U&ì‡u¤…ŽÜ=ÜáEhûk$y í7>?}«Â¸CìÄ„.0™®ÜÑŸî:$r&m¹GÄdÏ îkw~C2Àz…ñ,jN”£ôrþ1F]³޹F• J3%3¤ÄøaQ:TìØ4ò2S§í ‰˜çi¡+ì“/ý l)�„ ¨‚ªpâ‘w–µ£HhKÄVIIP¯½+i-€7Ppqð„ˆ(ª‰LÇž)>­Å +.@`€lûGþælWIrÜ8üŠ> €Âú]|°ç2ÿ�˜\ +ì–=‰ÙI –̬jãw¤bÏ éžb],—ÈFÆ#AÅð,{>B‡@àù;x‹–iQŒÛ½T¯Ï}aHiFAÝ¡í屩UP½ÅDpâ ñ�$hânC B…¥±7½ é°/TË Åð˜}kåªRÂs %»>4–Ý¢Õx�42DíÃ䣠Ô`õvïbƒMù�}Ñ„ÛÚ6 ¿°c}¤ò [{»MëÂ24�òüƒ�Tš|kU÷4ñØÖœV$Û6B%+¹Xk‚Ã-í�hy‘7¶Àœ¨€©ôE«bVÈð�fç+þâ‚MòC˜:bÐh8^®ÓƒYê+äœo[‹3ÚNîo‡™ Þ¦OC¢Ǥ+¯5·:£CÃÔ>z€|Ö�Dl 3EF%†»‘1XÑ©!ßãŸÅÔ^�7ɲæ«ð‘µí0BÍt4ô<û¼;Ô5CæÄ¾d»ù%†[Æ­X…ªÆ¾¢=àë%SÂq‹ü�ÿ}!\F™t`/Ì‘’´Ûå:Èe8‘X|#'iµ�õÌ“–�óÔi/D"0^š aíhoæÿýà'~Qyæ9ï?¸Õï2l#}¬ìgmÞ«mhûËÙ.êL+6ûk�7TfŒØìñëB�s|�ô¦&�j¬9€{Òã}´Îô´]ùÕþ�¾ž¿L_>�ÿ*ôƒ·v:'ĈoãUQšpCÆMÄŽê]QëÒ‘V×è1¤{uëÞ&#í’UĹ�.ÔOmÖbñH5†Jxº¸¾šÜX‰¹Ìè˜?åh†5Rmi=EWþ�ýÕD”êû¥†É¡ŽfÀÎæê*ËÒäm;�×¼ôã1‡Ÿy`äÏýf¬Õ0©L iMÿzÿ¦N9ÄÊr�jž†¢ÏšeÎZoÈ1NŒVÔk�Fl±èek’î)šÚÍX”üeÍ-ØsG´tŒ¨y͘ì9añÿœ)qàÛ<ì ¹{øŠEå?’¬6Ù]\µ»}é�ûX…RK_ Êi™+¯%¹@€|Û±$�Vkݰ*ò•:#Ç”òœ^êȽQ|i¥6/9¡ŽDc[}Ûd¨[5fz_ËX‹”‰`*ï0Ù°1kз å™Óe,P ÛuÆÈë'Q Éÿ’I&‘©ˆÚ¨*…¦u’s¹½í"ê�²Õ§}7»tö8àÖ¤KšÌÉ*g¨ëŒñÕB“ .�ã±RóÍØ,´²y)¢·qD�üΩÏ×üöé+‘K‹×T3R)¯59 áÈb°`G5‚6"جDº€<4%*!&˜¥ fU&®A†9´ì°K›âEò‘¶ƒ3k�°Ndq/n"eéÑlx7²©ë2æòˆ=LÔ(+üÚ=èZ¹Ù› ¾^à(…Å�rhä¬Ö®êîìÌpuêŽä*d†ØäJµüþP«R»¤} ‚¢äö:C΅ܲ…‹9äT� ]ŠvBqÿyÝ…Ë¥ŽóQêXÎ]tYªAþ°|¿û~•tVÕÐôwW÷â–OŸ"Vomél¶7È>óòüa/±œ,3³»êQS&x£e¼GÝ)”Ô›QŒ8œØ¿\Dâ,ÒzG—­<’Â8r9>!º`ÎGø»ìy˜%ª©3/ Õ@/\ËÖT£PN¨2œu·z›j_m—Ö€sUÍ»lÏ–þÀHg£ñ½?�ðç,ÕÎýƒßºº8¤LŸÇ.gd�lú‹HäJqvhÔùÌ ú†üW]·2L$sª ë‘ê´ÃS¾«Ø×þ`°r!‡ñͳt'Sáwº¼µàýq0‹ ™f6U¬A"L£ £üŠ(½³N ®€{Ap‹b­—£X¬Cã?Á�òèbOºŸi9‘Ë¢@lÆ™äŽù@Z+Œìy(c¬z`0ëøÊÔ˜!#áJŽêpx¼¶uÔu.øºÇ°ŠÊr6™òshm¤OÒ >*«r_VWZï)qÛò’ÓØÒ¾& oG̼‚²^óÔs +lyÍbž¥&bB$HóêWÐJM›t2ÆÐ€¸svòuÑ +^=E‘9ÁÉ0evU#}g¹éÄXËÛtÒü®nP:ÙmOní ú[%p"ÙÁ¬ œüé=îKP3•È:O�§m˜Ò’àDB”ô¤‡6¤ElhåæS$.$YœJöãJëbÕ«Ÿ¾f’˜Q#ü��Öj4-ý);`0y™ú.¿Hgfú½c¥ø|ôÊ;ß:±XjSø0¦Fcl q.,úÿàëM`K뜼–‡-'YÍ*9"Úæ‹¢¨£xóm(Ä&õ\1.ð Ãq±ÈmÒ)Óq”z÷@Ÿ`sá4Ø€m™9´5¦%1È™'¯É M5Ú¥$ U [Vׇ­ÔT'ÛÒS/8C°*lí³÷'ÃÂNú}¡‡’.UH¨ˆüï8öTsѦ’lÔ³]V=SàÁð ç\4Ô#xh/M²´ CвÆð%ÙÚ­Htµ¯ñ´|й~³­šë¼.úÍÃM:T²^̓g‰ó<¨�#ʘO¯ó`RàÑb�*KÒdg‚ØšXÉ€´&S½t¶LP5�žR5›ÜMµÉaLi¸è=àÖòAI�ÂéܯZæ,Ô_äH§À”ãÉ­œ/ «*YuhÀÙ2áÑïõuÏ —ìLh¬ÂÁv9Òsk½ó‡¯l!uü£}®éžP»ì˜„„¶öë>Ló²ÉÚ]Ž·7»=>–oYW~�Έ[@ü>©½o 㟘S�–ξݸbÅ¡×/�u@±Ä_üjØG¸95sIšFíow9±ðÉ�\nŒ%@S]«üê…š{xVD· (ô¹ž]{ø,.�JYfÌI«Bš×¶^÷«gfAv²úÕ4®¶�Cg'‰RL—¶Ü¹·DãÇÌ¥‚]œE>oúø»Ë,6õŠ–.:…´¸´…Úˆ¾A¦^i»u¶çnóL^ +¹ô¢ßÂÖ˜_›6~:øªúè±…;Øßż÷0„Œ÷nÍaõ`’Á]j¨ðÒ]lòö~6sr H¼†޳Œ˜o­å<Ù„ÇǦ>eá!,‡Î’îDh¸r«9ô‡—ЈÑ,ô ðpM;l(î(ŠÌ`QûCF^/•DÖG»I°Íá×þH[ håsÓ­“=¹üZÒÒQ§‡ÃÝ啇¹î×ë釸”t}W§ ñMϦٺÞ\–­öñœ_½°É ;𠫬�{쓆 $ª´Dû¤`l™‰ê¸^1P?G=¯{µ—ÓZ~Ô´Zx‚{,Vë’ÔR_ฅ áf�iâCöŒÊ�´� d5>P„JST��…–é�x4¼Œ-]uŽÁgä|ú ~s.Õ gAÚÏrXt̾f™;ƒÃX’‹¡1›oÙÈ/]@‰)?Räœ8È Ž�3‘/„- ºö¢*-ˆÊÇ¿_ÿ¼K m_8_}uÔÖ¸úÅ>5È@¬eÔç ý¤Ÿä&ð…߸®MÏûá"ßpW7Wâ –jªZJó@¶†'›ðwÈþŽyð÷õÎ|Ç`Ûñ¾7ß1è°¼¯Ÿ.¦£NßNMËû â ůaëä%“¬Xh?ã¼PÕ=ŸŽ!¿uQÕNs%yý�€xÖyg ª>›Ë~þá j! R¢’øÚ·´§ÈWh��Ñ Ö|7/Ȩ +GãïMF™®«Ðg2ÒŠÇl“�œ¢+®€ ¦®M!qZ_y"ì…PºGæÂzRxoö°Žðù€µxxçØ *86uq¨ ‡|çì—Kv,¹ Dç^…6ðtøÿ¬§'=°{Òû?LjÈR=YÞAO$¢ÈÌ$A pÑyÊP½?x§ê!äÿ¸çg÷„ô©¦üãžÝÓTBlƒSBQÞ%³è]ZØúê½´K$¸ó÷¼ N¥Á@g’°lìê•iÞù¢/AÛæœ ˜38 faš8HKªãû£Á‘æ­c®±ó1¶´& +Në¡wkªC¢ã`/ƒº·+–YÒ›êPÀ FÈ…÷–ûª9(ó¸tÍêÍ6·²Ï9ªƒH‡”Ô%BV‚IweÂkš£§Ü¯1MØË +˜“ã�r¨XÕ&U°¹²ºPŸcέí᯸¾áS€«:¨Nq:F$E\t�g~CPpQ”¬Êzp¿`ŒŒêëÅcôl€UÞîžÍ„üPôÀñì5 +ï°wÆËˆÝ-¯L³ãñ¹ö‡w¬T�þ<Æm“¤œihŸ@U% ÷ÀMƒ_ âü±¢0'uR¹&ãÌŒ¯UÕj6Ï)G•�`kbœ�ñµªð§ÚS-ôd†s*MÃiGö¼hdôûªâ×=gúšÇ¡ZUu3TƽÒrêÇx(.„Õ}ÝC¿o]v ïÆù®_ûáË^pè¨î.ô�Q1Ü%ÏÐ@ÍaoؘU´‹× ¹:º|¹�S]Žm £WíáŽLc]„\È9МýK·vwú¸ Œ•|ˆ¨_#¶<6GÅ›oÏ$R°;è7¼ÒZˆ½Ÿ-M|© Ý»áÚe®¬úý\9‰0p¶ÔÓ6ËG|,ÆÇW}Ÿ1ªÊ*[q᣻Ÿö°sß"-þ;È[——–õd‰ï¿__àÍvçÃL¦>®´'[#�Ž™|mÖ�-÷Õ¯Ôû=ÿø.ò]ra­}mûMåÛ±Êϸ܂ËÂ8[zP/ØTsµ[�—æZI×VÚ£ÆÊí⫌ê¡lþFÇñ#«ÛÂ|taÉØŒé\½ªOâì¸(×®ž¡/Pµ°Ñ,(~¶®¼ŒlOU-c+òµzˆE›õ‘˜ZŸœQÁÐ%ªgë£å84i9¤l­®è»•.‘?S©åR ÀSnuV-ÒÏAuwVø®‰3*=Ž”ãrlmvfŸA7*Níjvuɺ•gì|ii%n�èÁÂ- øˆ·¦¥k\6TQ§ºÀ–Ã#1§¢`œCºˆ2ì©â!þ<ùs…Nnl�˜7ÜI5Q—ªô#iêÈ4ZŠYÑ7%Fª%‰@�é$SûW@²ÏVs(Ÿœ™>¬Öµø¾†‹Ôoªêúà‘JÑqÕÈFz•¾JYµ�WJ& +¶4ìñlÒ™ÊÉÖ¡”ú‚ã5$¡ml}°ë—õI‘òsñ$~+*Òy†~T+Âbá÷�.p¢°Q­¥ô¼¦m$o"P¶¢/­+ w�W†PIÑØ<P·áð,ÔÈÂo³½ª÷w‘8¡ÊÇ"±ªû.·¦JÜîªl ×AÙH÷Š*Sâ¡–Hh”ÊÔ/h{¿ÍÐûák“D�¢KÄ@"6s›ƒn�)Kæð²v×K#„š²Ê2¶VÂDá¼<¤’4OÄøã¶ŠÛEÇù¼+¬Àü’¹=½\ÆÌ„¶uíÛ¤R %†²»%Øí­•TQn# ôÞ1ôûþb3K ~÷H6¶Eô`èTäWb|”ú% q~Sˆ9HÁQDðïw«„Ðý¨nj³+°÷�D$,[þ­±ŸE…’`o…~qUè—<'Ï(üwÏa—ýEµR�Ž^Z>«® æ‹ kRž»ÜÚ( ÄXÁß.’ÿ)5v,U=ýZj–±ÿ‰|xvÕØÎÇßüõž#Ü àk'”b9½"2!ÚÊ­¢]�ЯÞîßþÇmÌb}f–¢a|½!mx:ÇÏT>úí�_¯Î�çåyî·CÒÇœR¢¢|?䎚P†ú¿ÐÀ·û•õ4nŵ·#åsgT¬/ëÏ©>Úïÿ‰±´†h~˜L}­ŽìM…HÓ@TÆdiËþmdàŠõ~-؆m@¦/[…ô}}ãz·‡iüµ~¢¦_v”ìò¾~_v¨øÛ©{öŸ/3RüPÚÆ/ØÏ¼_Ve.„áÚ‡úÖcUvš+‹+˜�È�þZç�¥QS”Xöçw5?'V ˜ºŠào÷ºT÷ЏüBò ÄJ¬›0RXîv§6 ûÐ�Jÿ&6ì•z1ZŒ™Ý×€q”ê~j OjºË¤\ST<{ÇE"¢†ÂÜGa=騵ƒMŒ”¡Ð›kO�Ó\wçºññ3^%—U‘JñL§ÂÓë©…i*÷5×IËm‰®7„á"‡4 ��?M9çœ5žß, +ÍþdU.Ö´–¡%ÈçÕêFézZ=U@ æ‚°n¸_á· ™¨°aHÓ�XlᚤT Ƨ×qö!:„·òR‚¤öÎ “ùK×5ß`,2óeÊM&ªÕ‰ù; t¾  +èã.ðÍVufûtêh�xà•áZ}ݪ�¯ŸeÑ P)[™#~ËñŽVÍ«lÅ“z¢´ÔÂcÊ«Vˆ�ÚÉ£J¨Ï¤œÍæC,K…ö&²¨L»·þ� Ù@ÑN¯¦¦E×Qi­©?¤àîÇ%+çÖ¼•°¢†Ú*Y`BëIÔ»vW7ÝüRH¿ Â;êÑï‘¥ŠÉ~~•¿·C¹ÓQU)›‰ŽðD*æXqæe²‡�(M¦ÝÀ‹bpø7]]^ì!´!.r°·Ú�Õ–"á~äa¼û9§"4›K¹@qçûz`¿¼:€Ç‘†šÀ R¨ì0ÑIËø$3Ðgc§`10 +Æ/ê+h<) ÁÜ¥§-ïMzàf¶4e9 ¶JPR®"£ð> º¥HZ©½âåÝî(Á¡½wSbpuñ•–·[èYÔmæCªòýya$ôCÈúV§Ëô&",ÇÉíÅbè?w.š%ÌÁÜuó¤1y³É»#[\3@›PÝP¾Â­Ð •M7²D¹tGårÐ"®…ŠZ-¾ØQÕ¸hyÄÖ¶š×ž»¿L’¹™�ègóƒ cÖÔº�©®ïé$(óËh'ÝhsÛ¹K/ÞÂ9X¤±…},,ƒ¹l«ÆçºçÍq6½6Šñ&ˆrQ Àñ²Þq¶ð@R‡øyØA{F­²„,ͯ7è×^.)t¯òÞRu›Û~þx» |,‰øE½pM¬�IqÆè 8ôÀ•‚ x]êa¨�œ’meÞrxÐØƒ¤e1Û²ŽÎw1†;¯WNÏ5¸v©1sV<Æx^)s’‘�Ía^(‚sÎGŸ­àóÑxˆõË2õ¿4_Èþ£¼:§(0O¿�b¼%“zÛBaU(ÇK\p¬íºo‚m£qu9…1šã·<�„X¼dC׸g¢FDVŒ%ºou©Rìê�AP£‡TãÎNÝT…LaÏ4‘¾Cédr'DâxC¥®rò¹_Ãë5•9zv†Ë“®µñ)®bQ'¹ŽÔ'+ñšÙœ·B¼dÏ™ÃõISðSH¸ +ã«ñ Xº×¨GF© +K,ôõ1x7Uã­Bü_öË$G’܈¢{�"/P ÎÃyÚµ´�îè¿o¤Gdv¡hÕh“Isg8I£Ù’‡VÔ샲nÑ}QÕUÍ0?½ðÞ'àÏ‚†‘ÿèórˆÑ4sÛ–VK  žªSÌ…ç¥�šD먯Ʊ»<_æ7·•—àýQUÅ­º?ŸÎÜ×â›veuN¼Íå¸+ïVŠBݼ٫¾ ŠI)D2*ö¯âE Îà'ä7ô=° ÔMWå/é™9ÒSlU³‰èwˆW�d�VûGT^2ñ¶ø1Ôùš]Ã^a²[@K3Ãõ„Ç�à繄Ô+Îö¹¯ù‘éWÜ ¯ùªÞñ·@÷gþ”yâþù¶ó0ïa~Äðp†Ê…÷­ß(û]£œÃP±Ð�™Éy‚ œ3/vv‚|Qiþì^§Ês]ÙH©üeeケ×/±SÝô¬×¯~é•„¥H�Åày*&¨eÚÖ7Ï °r·±Žü§Ó*`ÿˆ›½mtÇ9"p×1ÔˆZ£� 0;Á #TL*1 ò-¨.×d®Úîa E�–±£Nh'µvH¯Â›…@Ç!�K{+0¹Ìv�Ïn zÅ­z\µÊô¤ˆ†ªÊvš�„ïêÒ9õL=éYW‡sËþÛô ‡ÜåŸ�΂ô±Ù¬ˆª…º‚ó®“šA7Ãi¾.wJ¼œèt`“k#º³é«'âGÙe„þ;Ã…¤a[,¶ž +`™J1 Á|gƒ¼XÍcŒ£ˆï�C µnÌb§�œ��L,;€¬˜"ް„`~¬U´*ætè"õa@,¡7?¢Õ¡chŸ—VšieúÝtsp�ácJÔÓʯ ‰Âœì™ -Üãˆ!ÔKŽpñ¶Zv«»5£sÛ£¥*g»�û!�ˆVñ›k$û­Õ©“è|‹7hFTr1ˆ”ãÊtÿ-V,þÍ2cîÕìŵ�Y¤èYƒ:¢Ó~Ê ³–_¤þõ�Uz3lË +è=JâN‘F=ª:‡Ÿ¸a ç²ÔƒŒ&ùÍÚ�€Á¶ôµaŽ1 šóÈ™2g=à +w1¤h:ƒü`zÏ\A>ªNÒè¼I•´–ð‘ܽ1TiNù·<‰Ä’·rò +ØYúü ZÖ¬ýodGӺ鋤jŸÖIá[íûóÇÑi8ίAú‰z«MlBÚlt¾ùÀÿ�_ÕèÔ.5VµÃð_÷/æ$çuÏã—ØêT‰­_#«KäÔ�¬®…cû%¶º!™¿pVÅ–jÙÎÁ�~üû·¾ ñÚP좖-zjy¿N 5•%â6à. »ý¨%$“ÿ×'£w˜~üÌ(Šöú‰á¶;¾¯ÎO¿}ûõé³øy�îï^D™í>0*U$óí€5+O™ý_8¾°üá€ë?àúøöÍorÀwÄQ­,1E-âè?‹ÓÙÀ�š,[~äŠÇzÅç¿V¼OÚTnp þé�‘ÏîHåËÿ®>¿»áóáûà¬|wôx¥“6+ÙïŸ4Özv´¥-Æ+~Ûóy’%Áðç ªî‘CååÃóê3=žg¥ó»×ýÝÑo§�–DI·_P}«¯œöBÿ­éa ž¿xÙ¡Éf +<“íÓìîþœmLTŸ‰Î‘¹*Ön‰°K!:ÚmÛZq×#î7ü��íÅd}iߨл„VÏý®ÏžöÛ¥d‹.¤¿‹W' '×![²¥Ø¬Ç“M™f,ݲÉÒD{}ÌÏT²ë6á W¶¿ÛZ¶²žTUɱ¬&î�"»’í”v&Ñ3™9ÆÂ&ò�¾Éí=‘–-óL¾6¸%oE©ýïí°DC×4bú EÚ©pŽ÷}.‡cy:¦Ž¨u¸uèTŸ' ³€³ž‚S÷gÞäVhÒÃô": ¶Ñ×Ù%'q„v‘òö:B ð¹ÜH§çR öl+÷…è÷¥`––Tðô-ù2Ø�Òiÿ!5=(šm„×g±R̆—‚ƒ¤*Ë×öâë[�³¸± +B©9F´»®€­f%1ê/™†Z3Z³¯(ÆšèQãTETúLµ¨ûÐ)fvs%R]äz^© N¯+tôxô@Äj”ehО0”:cm^­ÏÀMéߨÁ]s§35o¾sf�nOŸµÚžrg¥rz‰áÞâÒj\CÇ))çµg•Í/t4*ÙÌÔíõ»7ñŠou>O”høð–_?M¾g¶bK’í�¾ðdýsv¦+vúÜjÞæ½°¦º^{?ð¶Á+rDY¸rÎf Ï©©Ôòäz•ÎvZû6ü¡ÎŒÏS–vÇåf÷QQM +ðé²ý]ÓÞÀN”ŠwKOîÄ=\°Ó�ÒX4‹öÜÂÖeÁŸö’mW'CZ�¢Šå2tV Z*kZš›&éÔ—zy?°@C +dÔphC%§ÃúZÏÿ³`Nõµ¢Ö ÑË+$…›âÁÂÊZ"dç_…BS¤7OSì^}—•¦iÎ7½êÓê8àÊ]‘KwÇñÆ)¢z)Žíèô v)\~i$ªr‹¶–»•'ô¥v7À}¯Ý2_¿N# ±÷Ú‰µI dY+êköâúÞõ�’�S=à7O9§|±Ïµh•èt›ƒ{d_µH¦t5Ý]®«Ê–Sº�…X’5]ÏXÞ\ßÖËzÝžX“Ùe¿)ûj‹;\£y'�t‰eórýö·',j)=¤M©$­ +0öëGPZ¡VTƒ5€RAÓËg RIc{§5;-3[ìHR«+huD¯È¡ë@‡f¶êßI×Z#ÂêéÑß<`]¥ÑOâ×4è•w�÷>WÔTñzÑ�ÒjüWgŸ:/ßK ÄC��;ê�™n\£ÖLÙ´Ñ %vN}xëǯè~âº×'PBÒ.b¨Ï/+:`òA}wÀõwÄžëhç}Ågš®FãhÏÿ¢ _ÖarÐ|F¦:}¤¹á­Ú‚¸4{2ô†¨Ó6ÌruXÿTω¸Ä gF•ÁwÔ;jGÝÍÙ‰&jkèJÂ+³"ØÐ :0BÊÄ0PÆBí2>G§tz"1ÙZˆtè_ ×y`Z"FÒõôu;>³!SÎ; -qìPuÔ�ƒÊý¨‘ƒÑ]ÝÕ•P¼˜™,‚ UKÍó´¦dïªÇê É¢hëyÔ¬E˜!½P$(‚Ø—ç +qõŽÊ»4# ì6Ë Š£xÆ©Dñ a…’UÜ‹‰yΟڜ\ ´ôÚ`B\žÉ®­\ˆü“IÑ×Yxð~G梺$G²1P=YÛÿ¡»Jr캑à¾NQø™œÏ#ð¢äEûþ@Ç�|¿$wo¤JþG2™CD¤l×iLî`@ŠX +°cgoB2ô'áû3Yž {­ìûk6}©M‚És$vIÑåm슠¢“�>RÍvÝ´UÝé=Û5…a�2f¾Þ�†ƒ:šЛ®ä¼Š3qÉæË%™^–ìÏi‚‹v¯byA»¥D`úã"r¡TÒ‘Ò˜÷mWM?O)0õFæõKÐ^¿Eôõk¼ïÞío}òÍÒ½Ø)L§œÜô¸}ë>G%‘/u­dneŒ\a½;6©ä|¶.ÅùóÚô"@ _‰ïÿ^F€À¾P~‡p†Ž\ ägÂ1‘�…/êíM¹½B%óGr�ð;ù4Ñožç×e½|E GÇbfI‘HÞ£ÓÛiÎõ1Lê–FDºä +³Ã¶v�"²0ô ™‹u!z³.“-%—`ÍÃ�°r-I§û±,Ï´WP+båÉl +$i‰N(Ì&kWqJÒ‚¦?*ïóÑW|T ¦›I„O^À9M ŽÅB64RT×¾º Âó,âPßAEY°áì`ËÙ=S×8jš˜Öƹ.>�pÌRKˆÀb€W +Ö5]M_Y›Sh4Î ìòùÏ�¿AÈÎju ¼á`´{òÂ÷”Êý‹ò�‡ôÄC›A6—Y‚ áQÇ\÷8k�* ‰·IËÔ<2“Ê�×�È­–åY¼²oò�šÖ5±…lâ-ä³oç-q]Þµ<Ø ×E[öÞ{ü,w_웋xˆçRÎ�äñ²%ïPO¿Ç»0t‡òšDû=Þmg¼;[HÔ4¾–£&=5kk€^”=ÃJº«ÆBÖ^æõ8⦠ÜK“XQֺߪDó(“ï+p?M߯ÎóÆÂÐmöó£©éÒÄ]K�Ú‚_¦¢äx ïk’I0Õ5Aá»%‰IÁ¬¹‹¸�@’ªHþª„< *gÙPv£‹Žú”3K¼¯2y/HTñ|«ê˜2C2x#]Ì…îñu4W§…%‡G¤Õ’-ª’£…/²Ø(! \aÝ”“I'4"Ô>$¹ãJ÷Ph%ĆXû•·”ç/KÎúØŸíñknáÆ:–ç/‘«Ú a¼’éá?c銺âû`Ú™×)ÿ»ÆB <Ì $�9‚¸M¹Ãó™:~©Âð8S<©Œ²“T‚IÄQ;“¹‡o*½~³o�>+[ð®ø?G°ã ¨â^@$yÃ/¢;ö¾ !à©!—W"²Ó!y%¾Ô€äj¤ä »©Ó9Ѳ9#4ÁA¶öÓòF¸Ú§t €l¨±%§�²$FÇüçO|ö ïVaáu³€¾ý¦ÀÏñSA¡5¹”Fx(R.H=³†G:­Vg ¸8Ä,4ô‘�žƒÓÀÀž¬ÂÏ`@éW ÌåÇqåRÿ-£Ù暎 ÀÉ 8Œ06Mx ìD¢¸åbv÷'F&ïp¬¡ê2Êx¶…KªIÌ" amƒoÁ<Ìl0—ç“Jr¹ýêé�Ye3º›±:\‹e”&’:üÂûû1øÄ/ò(\/^Äããì‚@4µ¤8'‹7À0-.ú ‹Õ-~á©Æ'ñ ±nFËB!‰B4TžHô›]™¨Ìþ�çÄ7“Xçzl|ÜŒ³1èîŠ�I¸Dï艈èZp1"ú6b„>µ ¼ JÓ5xìXŽ”ô£_©)zJó¯µÐ!«]dAÀw·›£Oi�i +b5™uÂMý‡0� Q¶Ueˆ÷F·9g®gÜÍÙ¢—Ü_4¥0æ¨) ´Z”_,]z{E:ùà©.p1{Xœ#¾“|–Ф.KD?eñV�ÂÿvŒŽ-wôµPge%rUÕôÙ9*‡£‹–š•%wRo¯& +é½)“0,'¯‰­ø¯Œ}¼©Ž�°ï”#,MšÝÌ5s&Ej‰ô(°ÄͶžü¸S¸ ­Òteð˜ARålj/,»CãféÒ­ƒD;�~âñwˆ–« +¡ç¾>ØkœrbPMÀbËqòìñ@x£Š™Ø"Ö$ʶÛì6Ä‚£ôûê\² ‰$‚'‰|=y.RÔ[@^äþ1H§R™4QùS¾Jî +|P[®»H°€n y'|´.¡ÆTªZvDuNšõÎb �*ÁÄu¢�‘"q*¡¢&Ü¿uö›`‚ÑG2j¡˜¢â|ÓK‡åÓÅÊ^Á»ƒí•�/_û GRáM¨9ãBíÕä³+VI=³(C…Iá‡}EàT„‘ pN2USÀQÒxZýÚfîBÆ=”°%÷…l…O»�.Ùózˆ"Züø°óÔñéGQ1û±$ÝbFæ94�Î|d¦p¨>2—ÅøìAþœç¼DÝ„ 0Ú Eíã¥I×_|Óö›¬žãý^!‡:‡ãj¤ŒÕc¾QÓ ôÝìܳo‚ò^'/]RRÓÝ›î|Š+!ßèñûoñdlTUµ;#!zgQåÂ�Ÿ×†�bÿúHÿ— Æ~¡âˆæKCù-i8ƒíÍ G#Æiš#Àov§§ËÅ{^éFïß¿RøWé=ä­)5©pá‹ZÑüM±xùb›ÌK#CŽð§ªq+Q+ª°Ìfµ;±pÊ CÕU™³:+ç~œ –aÜK£º°Êjï.¿©¿<ã-É +gXO”ç#¥ø,„�Ò?I¾ÁÔ` Uˆ�ÞsT?Ç +tsG‡ú™Hœˆ4�£ÿœ?:–ç4æ’�•ô D›ŸYð¬îep¡�õõñ×ïI>V£²<ŒÔycà‹ÛJ(>yýg^Ñä©ýá®+ák Íˆkà_ó¦Í#Žó铸ǥ²ñ*Ðcß’ô€ƒˆ¶Ü?4Ò¾×±¥Í»e¨žó(o潌î\/ü÷uЖ}÷½É‡å[}�‚póæ”Ên¶ªF�þóãïo1>gR¶€Îa1ÎwŒKjiö.ËVϳò$A1èjõm¢r�QÔ Ý³_ æ‰b˜]‚î „Ž]<Í]É„C ô¿±bx¢À·gA�ÇùÅWÁ²ƒ’€�:5NN4EðÉfº+xnãÓrÙæ 87 ëTüC­Ö'«¸»QÛ�ÚŽW$¢ÍúÍ×âZ@£·ˆfÿ7Úò"0°þm@6ààK X4;� Ö§¼86­<Η\ ^å06�FÄsªÌËl±–�ë""4°�Ç(,ÃØ6W½³Óô†å±dåý‚hÈf¿["fiþz{ŠìÃx–Âx/o>ÑS8ËM®Ê O²·!·ê¼p÷ GŸ^9»iÆ +�•zéò¬W}]Ý^˜†ÚºÓ>þíù9>2«æXAÒÐ.ž =ôl”L»Ù4hv8›íÃ\ÒN’_§ +<ìµüÅK³l�ö�¤Â3ÁŠ€Ôvï˜JñBŠ}âj¢�Xs¹¢³‘¹ÃfŸÞ°—7PÙ8zÅñÐAS‘CKÇã&�¬üc…_#Ä”`7b…(`ÙžŠm«â®¹v�n{Ú^Û1naÌEžš)´1¤œô¢³TÉGÝwtë·F©?µ2}Ø#¼cp½q¼ñ³+¶ -ï+VPÂ÷œVñ¡ Ks&-O ­«¤Š‹¶¬Ë‚ªËöVÁué|~¿5³r¥3Ù°GµÉ·6J`oHºo,Y7³Ò!Áææ9/—äÈvˆÎµŠÞ@)øÿ¬Çá™<ñþΓÀ-©û½p8¨’yIH$Ð-»NJ�7…•#3,ÎJ‹;¸¯ô²š¿÷F·£ÆÅ#:²«y¤q·ANcßhtWtpt˜Œì‹»¤EXÄÖà 1CÆMÓ1qíXn+3�–Nxò8�¶ìYa†d„È>Ι™ ñPì%Ø:¸’Š=fçØûm±}oU•ó'èO#;áK(ƒI<ù4vÔ +×g:•i$›ð<‘�mÞµíLa…ÞúÆž³pêëRvîLÕ­1ŒOè� ç5 � ¶SêØ1/ÕÈ`Âóô§“bÑ#ãqÔ¬ï x-ð´ìTyŽ9kdBã¸aqVpÆa|Âdž·ÚO¨þÄõdó�¤'Î4Ž=Ýt�´vPh¤�X\FÑ•åìÉ~× Æ +ñÃÌQ¸�Øóï£Ç7o¯¹bZ¦ß(ë`g›üÉU„±Ð)1¹À¢��ÛtQâÓÚ¨o’‹ö +#<x'ž‰s‡¾F®¸10F·h*=˜¡„ãtt¡¡ìóhó<5 +LCh|cžÞ.VøÓ¹#dÙ(Á«Qæ�Àw抙�plvú¢÷q�¬#ÊÛ/ÙM‚I\Ú�÷5v ‹¹ãš»…Åꉩ;à»ñXcÅÙqìC‰ì]>À&B…Úx«Íê�[>º>ËY{s +šíBO¸þE<‹Bb 8àµÍ Ø,v»+°hh¥:oÎ'\ê:‘¨Èd�´nwz.ù)ä*eìÆµ§"|ºñd\m[sà.§ƒ_]Ý)±¢¸ÝÁÒaãs)Ü~¢Ýé‘^hÞ5®Ë °Oú¨|álq<-BœãÈ´¥ðhQÝ"5Ä ­¦l{tέ¡ÛÜß8öÏ\\å~v@Ñ}}üÑ4½›©ÿ±‡ü‘Ðê·ý÷Æl¯_Ó˜ñNÃnw=“¢ëG‹X ޼h¯¦E-Š#h`¥w¿Äôr7çÄÎ%T›áö-o›O\3 æ‹|.iDµ¯ÇZ,Ÿ¹÷¼´€Ï©¦P”Ûæc‹Ò£Pç´rFüÛrí8LÖ3ë1˜·‚0,ìf¢’€Õo�æ]dS½©aó¼iÈ}éïÚc^;Ö�@äW •VËqç1ióãõ/77 ÄesÑJc|ª�ýÌ/Ãó@e©(¼ŒÇ|){h»FÌ/‰KýÄiÍ·Oó!ÞkÑÆVÏÇHÿô6o +L ¸s¬r`ó#rïf}cóí§…‘IÛìŸáÔíöDt>ïcMWÙýR†ENï.6‚’�Ú¥;Bl¾ì‰ �/ñ"ºY|ëœú˜÷Âîwט¯ú̪äû¼ +ñAºQºXo©¬«#¦YL³á³ˆc•Ç*ÒÑk00õ¢Ã×5, +K‡Öl¯ÍuG9p†<v]j­«B�î6#JU�&PÃ¥u3„pjîZùHŠ´Î×Oó#)¬ó÷ú0ųºþÌà}§Z<’t” W JÚ²Һʯ+ +à•0”_ðõ5òFsø ‚U¿¨:ÇU$²î@³ôBË��é¦ìà¶Ëðj<�ÐÐÁ(?“«{‰]è28€¼´˜µºz€ÆÜ2Þ‹}7]h‰µvÔP÷Ü}l)¾ŠØ³TÇ­œe%A†í�îA˜3Ñ;TÏíqòôʽ mÿ^½†¢ä„¦ºÕ5Oif÷!BªÐæ�COŠ­ á�uøÊ¡®2�¹ç +ŠãÝAyœrt+ëõù° ïé=Êò¬ÒùºX¾ŽžGÎÖ§ÂrY²ÝˆLÕ†«,¸Qw…æe!ÏÊ!F•zv¸‹¸ +gX´\¿¶Ê¬Ší¤ùspZ+!´Á^P¸l7Ô~`Ÿ BÆ !Û¨Ba$«2¨û‚ÆäÞ‡ˆ‚ŽèfÂcª;ÛËû 5%3•SùÚ×â¸l­�¡ò£�ŠK)y@H}w_Àà 4©Æ‹¾¶âÎ/N#¡›·P4(JîŠÌ”ï6�àÝP�›ÜóV#¶VÄO:$Á1¼™é`Ã2¶NWo¶§§­åx ÐÖòüö^«8�6üëùesÔ›¯¹ ÁY|°`Wëcèp¶j÷ôÇ£‚d 0œ¸<7vò¢­¹@¤ékU?Ê£8¯VqóÂ<:¯•-Р˱nFjÍåÆL½Ì·¶‘D:ý|Cq@}š.²}‘`Kq”)�:ÑWßÒªwÓÅ·à“ž­ú÷õ=€Œÿõ(HE7M…1ÌâP ÊtSêÓÈÏG¿*¢V¨eß„Oȶ¿äJâø¸#ÃÖÚù¤�a­ä‡cSxëR3uú57¶�ñˆö�Ò/Dý¶à‡²,ùå\ô{´Ór?›}fegAÍà«î+` aîÍ&d<½h´(âTr'ÚÅÝOsÓÞUÝ­O³Ö˶Håíž§ij�D‹–J2¨¸y£ÝªÖÙŒ±QöyÝZÍí[tqÄË}z<í;G6„Û +rD;ØXUú|zÇòè·è,ã;æsHžìI‹›  YÅóg3ð­ü¯JÆ™…¼QH)øîoÊ_qkGQ|U‘°5ÿÇGˆÕûmÐuzÏ\žÐ*>çL¬ûcßïm㻉K.ú»kè%¨âºhÄ×ùý o¼žþòüßo}÷ åÊ‘ÌÎå‰Jvyüމ\öǾßÛ&.±èggÆß_:2dJWi^R=]*ó}�—ï=ž#i“¤(Z4Î1ɾz´–” ’&´›ée–Ï~}¸í4FÒ�gË÷'ôõ:ŸïGN—¼V�•ÿÿúˆu�–‰ÊZQ5÷¯ü”Ž 0ÔSG¿¡'í¶%lÝîÛäCœðQ!9wÊ~½‚?+Cå*J•GÓ?’ŠØ‚L§ËD¦2ù…�zP�^ÅÆÏL%¸á:¿H؂享E£˜lGlѱg&È:6°�â¢g`USð3ò…˜Í>GäŠÒTà[ˆk›‡×”ߢAùˆMj>®Qø;Büб>iG‘YÓ€NFe� h}3‘¨œ!5úÝ�ÁéäN"-K(µàNGãtn–©·þúhpYÔ6×§%ÓŸhŸ<ëQ×õf3XZ¹\ ô∺I`wUw0vñÑ«w�hW�iÖ-h „Âv¨äïÄ·pMþppV¢|§=Éݑ𵹣 +HQ“$:oÍ›n’\‡ŸÜY·»Ûwí¡3ä +†¶Ý�úÑz<ƒeOC噬(‡D‘YrXάGÓ‡øÆOt¾GŽ›±×~3“¾ûÝû´d§ á›”u¾jïlGìö½•¼#J³¾9¨Ôµuñ,ûˆ°p8ÔZƒŽQÎÄ2$I92µŸ„OF«Ū&sM—sëÅ$¢KYöïÊìש¤IŒ‰L$:tp8é!;½)‰E²èÌûTI®¸Ðòô4¼ŠÞÈ'¤ÃãáÖ¤4/�Ó‰/åò}Ó iÍì6CΙH”§y©tCA˜[y­„p#ÅŽèÖâÂä¦PÐV²bÁò¿…¤ÀdÜΤ¸t¨3’fØC¼ôéï¬hQ�µMgÿw<�ÑKpôH¿`§O¸ ‰¨wBÉÿ‡ójÉ�,Ç�û:…/�†$ê{žÚôÂ3›¾?Ðñ¡ž+«`Vv(%=‰"ƒUÅX™#t„í�zÔ¡¸¿ã´Õ´LS^¥N ZafÙÛù%ÙŤ‹‡b„jÝŽçX™Î¥^îS.v±'ÃM§Ë86‘_UÎàd6ey<•ºz ÏÚÎ~>ð²ÚúþDÕééY¥ýaÚwoÔ7ßÙI« \pG²‹?[`æúùã� %5¬ +˜IøZ€¸¿Ë)ˆ”$fºŒJS¤�bÁÛg¸©”ytR:„eU¾“�m•©¶:M¢)c¨<À¥9ù¯ Ë FXr°¾9Àï"¤…̀̾Dzmù­ë9ùD�vàà"�ÒoU·®[ïÒÍxÔ;äÔNú‚^­»‹-Å=4Ÿœù¡££J†Ò¤�üTÑ åñ°)âÊ XÜ�V~dãxŠÍïàäcû�éëè�¶_*ð´x”¾/­³““Í—#EMYIi*øÀdã¢ÕT¶·àÅV¨ËÅ”þ ŠT#>âaÏ4tfpÔN:HŸq4꟰˜ŸUšpâ9IATC†ÃÄr™Ÿs0uFa`ª´ÃeÒ¿DŽû�@Q’S Ï3ö­xuCNÉß ´Ðc!H™Df‚!ÿ£Ì¡ìeBÓÇÔÉ ÜV%5 ë’¦äÙ‘�!�Žª.S͖ߪGššŠ„ŠÀçàã)C”½3ø[#5S„Ðr‹còÌÌD9]Ú¬Å[oÚœcý»Ihl ;ÙñúLUnÒ…\›EŸ¬×LÐygåC 0 ™œ’u:JGíHÀvíÆÇ èAKv¬ì!ög‡þ }d—')BÅ^”uah¦‰&ÏÝ�Ü%E—_cU4*: é#Õì#¢š¶²;O_i÷R6¶Œ™7ƒ÷Ãð:ÔѼ€ît%çUœÉK†/§d.xY²?»‰.â~Šéí–§ Ó€ÓŸ#¢ R%ϯ¦ÄZ÷Ý®š~®þR`ê�Ìë-h¯ß"úz�÷]»=×;ßWºöæ¡ü¸yâø¥Zx¥DÞÔ¹’a¸i”1r†eô®mjl%ç#ºç.æ)è×�ä÷?Àh`_H¿C:CE.‰ögÒ1™�‰¯ÖÛCo{•ÌgöñwöÓtd¿yž_—õò�´ŽÅ�%E"û½ýÌà¹>†›º¥™.{…»Ã¶v�jdÍÔ_d2)&óBíÍ:¸L–”Ž4-iå"I§;Y–gZ+ªUcåÎ, +<ÒR;¡0›Ì]Å)›4}SãGæ}<úŠ—jÈépá•xNŽÁ±Xx YŠêÜÀ¬k8N4<{‡ú½‚�_KÎîùtA«éîÀg úºöᇗZb&N¥`]èlúúñ—µ9…FкËÇß?ÿûÆ��Ù‚„ŸxEr÷C�¯&~/¼@©\¿(Yqxžö´ÍÆn.1²DAÃVÇG·�5D  +CâeÒ25·LÁ¤ôãçÐÈ­–u +vñʺÉ~Ê'¬ ±„ÝÄKØÏ~Ùo©×å·–=€�ap�häÓ{�¯åíî�ý%Ç¢=�çÏÖs$Ó†þ˜,£‰Ný¶XB´@C…G=ÏÈkt"ãE©xa½”šÎzÚ�¾¹MPGÉsDBŠ#»; •¯ˆ†‹ìÿ×. åƒ Ã¯S:ýì·³B,¶�U^·­F3Ø8}�(i¿ž¼ /@Ó³¨�†&A@Nvî: W C§¾T$¡ë/G-2$à�A�4P3¿eñl>R}ö’ýÒÿˆŽt±$¿Ôg“Á@k&ÄŽŽƒÔÍ46<�º_cÞF[Ù¼–·ëœGIïí(9$§%eH=b”ùô|©ò)³)¸tÞéÝw¤ì•"ã@ÆŽšŒÐü*öe_mnaǧäÈèºóªÖá'í[ 3/ Í”ÆÛa¸ú<ª½m�ÞJ†��ÿŽã [ì$Ûs¼e[6� +p¨ ØØmˆ‡�lUñÞAùH¢Î=ŒŸ’xµ¤ÿÈSP¯åC£÷fö":Îå‘îrQÄzaèúæWHx`dUŸÂ{ãq¼ån†}zÁ^^�m‘PƒÃë4âÌ.<Žr_u¬µ>QDskT‹žz_ài…ÏFâ�Õ4�Ýx¯í ‡%úG�á>G4Y= S5¨Ùü�´S겡 –s$æ8ðþÆì +nÐ<¸ïJÕƒ¹z¾´˜+šõh:Z¬^µPn ™qåÁ€·2Ž›ZV�‰’YhiˆÕÇm wõ‚a’‰ƒ;g"UÝ=¼Á¤²¦ù$^yPXéž!óB¼¼Ãi‰·¥SQ›gn~œã7glŽëmÀca��ªOýØt£ƒƒ áÞ܈ëê9[wÃHt¯0—±çbæˆd¿#ã +ÐÃÈæ!pôlîLwàþ扚+OŽÏ*6Ä“W–˜¶˜\°š'ÔÓ5a‰-Š?=Èõá8¯PT8Ò½‚L*<ç1{®8è=$™Jx� +ؘe¥‚RD£M¿³G¯eÖŽß³æ +}#§[”õbZ-ìïÄ|'â3rÅÈä ÂaØ&Ê‹&NqŒÌæ‘NÆéJˆGb. HÙ¹BåÅ‘åk®æò[Äì;Äç^|W¯ØËÇÞ,¸hîÄâA¤Z´fÕ@�-®e³ˆþ†iá¾Õi¥N�9@#–o&1úÿÈPªñc‡ÿÙµYÄÁkiÂb ‡æ?ø€¢Àf_È:",áé­ù÷uôûÃɤVœ\.Wu_gúå@ÓÏÇ‹©kUœ„uzö72Ô:ù¡ îd*´Ï&úF:eœóBd +RËlÓf`'´;Åûèèø,ïîåìgšg9¡öç|…x (á±Í0lÒº¡ š)Λê ý– *Ujƒl·¤n¨<'âd¹Ê.v<ÂÞ|X‡Àƒã0fM‰Kß«ä‡oÛÅ+ŠÌgJ",ök(ÜØ6; ²±.€ +[ +^vA`�ôŠ|àê +–8Ò ªqªjKàÞÜÝ\à†VS¶]™sDëio”û¿ ²FioÈ–èëÇ»ezœÔwîÓG6™®þîi¾Ëm„‚¤ýW¶æÇû,ÛðL]›Ô®vN\åg¿ýeMûÚ¢‚š3jA‘f7qÑC\@Š5'Õ .ÝÑSƒj˜‚…Ó'‹™pBâ 1ïtrb¡”"‡öïži úÀ·mܹTyìÒù3Bòm¹¶oþXw¿³{çï’‚…»‰å Y}U�ÓLSµ©`ÓïâpBÞ—Þ®Ýé58 ÍHHí…Çì +Ò–m©bMßê®nþD$å&WADaÙÔ±r2cŠ�uŸ‚ûB”(ø»ô;}¢t蹺Ÿ–Iç„ ZÓíszé5{ÁÂÕ#R^Ñ<=Ó:.d[+ØôÈ‚¼w“¸Ñô¥§%+�–Ÿê’5—�sgÓR†^J° è¡Níˆ] 7Zže*awFH�x–aŸüÖÞõN�ÂÝϪÿ°].É‘ä8Ýëº@–ÿäyÚÆlêÍÜ1þ`JÕÕ¦… ÄÇáéÁ@Õz¿ŽJE`�a)V.Õs¥Çk>Fhج⩠:ƒCUkµï"ÀgÉi½ ÔõrÝQÁ 0›Ê~¦c•:Ò6� !9Œž6§¾Á0ûÃÀ�3£Jkœ¾«�QYwÞŸcg¿ÕõG:ñzP#IšÄZ(s†Å<›ŽC®.ŠëŒéwÄ +b}ly£ÑíˆÌ¢_Œ ùqT‰|·ÁXè éd°t�ÿ+�íðx˪¤FV—cÌ—Éѽ„.H P”&oÍ€ŽPy· +e¯É¾kÆÛ)š·b `5¿;w-“W;â-£q©gq—"cí é Ÿ¶aëÑ;½W7(/ϬU6T%Û |Šç�ºÌу€Y³v6r”¥‹Ël@‡C63uÓè¼Ûá®ì®šØÞ‹/ÜR¶.%\=v�µ<¥ã™~«n>”¯­ì(Ö:*VNÓµ…©ÁpÔ'f®¬qø�€çØ Iý¶[Aœ¨„ÝMXŽ“ÄZ5Vaí`íÆt“5KXð*j'¢ j߬] û®fñÌ‘f ÊÆе�±š�º/VÜ{Sp²@#”LDLcg±ö�~YU½ÌØ>¾Ö1ñÅœ^­]@¢…�Ê|T;˜`úÚV^˜/zPåR‰Œ¾–ÊÈÜE²zl^C,èÁ£Þ.PLÅn‘ïz,ZÏ[õØZ?¼¸CneöîÍŒ �ñê õR]ûõ@KÉ**L¯Vä—÷š�»i¿~?½æækN°EæxìØŠ°4ó¶ïµP7K£{øpרLš3 hRxòDÒLhék'ª¼Ií|,\xÐ`*ǬÓbe›3cÓ¢LÚóMlÄ�vÛߦ  \ÁŃ”."kÉŒòAò¦Fõ•7¯jÍhñMöÄe‹þ}}?€Â^ö¨êâ¦É.£†ù8اz�™Ü4úórWUÔ ò¡îÀÉ0§¢ÿ;Véob¬ÞoÞæÍ;It�êð‘¤[—ÉÑ�¡±…‡°¯ä}Aè—É>ˆeº¯àÂÝC + Sý +:&z$§ZS€@ÝЛ¤_òD�Jï„tQÝõ~…M}uËžjª—’HÓíì+˜êeh!§Ä‚k/¤–Ø×¬Wˆ±Qj¼fªfé +Žz9WßißÑS .Èî�•mW7>ÎYˆLU�j|Å»Î;OêÑÇ|Í ¬a) ÇO%ðMû�&Æb]Ýjæüƒõ«,(" 6áÛQaå|/hº²3?OÓ >ç›øîû~oç¦ýäGÿv qf¸*hJ„© ÷oטÄâu¥äþ_o;êù¬+Ô)[;?OëI}Çïx‘Ÿýcßïm +Â~⣟¢Œ¿?Ä¥¡4¦Ïù)Æ^Õۚ̅´hÑQø +òÌx³�±¯ª’É‚©ž qv²» òØãš_C+CèûÝG¸ò}„N/ãž-ýä½pPíÿ÷G|Ö4NƒX3†æụ́䂪P©µ¡„Óu˶,«6‘ |0Î@½§4øX +÷³ÂSÉšþÑSÔX:<%j7’).”ÔµJ(/¾*™Ë.ÿ…™˜50®yXTfÉrÅ>rKæÈ™ÛË;3C…Ѳ²Šø>ù‚ʦʶÂ3ÕÄVøáÑ&¼!›Š[Èa•XÅåãŠÀ—Ï¡â‡Üú… ‹Î6Ð1šê\@ßW㈦D³ÂÞ� ¼S8[É Z=Î 9zŽnc® åúë£e1vØ\w€š2“Œ~B}­ÅXWÎF€´z{&ÚPÆá,hIÌæ¡îbl‚£WëÖŽ9Ê0ëÈ'Y±¶kPäzÞ¨ n/£ƒ5ùÃøï[�²‰�ö°Z:Ö#œ6–ÇJ»ò`—ó‹.—óƒ;ëvH¼ +õ +† C]–£NZ‹4˜õTHN ÉŒiHõP™ÇÊ‘ãh؉oûVçûɶ{ÝòÙôÍySY¬]žxoP–ÅÑY®Øå{«y{Lf�ÙÔ¥6ŸyÚ#ÊÂåPJ 8†8SË $*²gk߆OH+ ªöIªd:8wÙÿþ£e?ÀNM\L`R6²¨ý˜AÊ)�E³Ègs}†$aBhvú×Úƒ¬(Gö}GâUÖ´4™&èÔ—zù¼a�†4e¶ÊPp åj—‚ +À\êk5Dƒm±#´õš„0±)¨h ]1AÅ_…BS (踕Mq�3š¦;Bdz·wWÔ˜€îŠR‡;Žÿ+$‹ê¥8Z´_ Ó/° †¨Oœ*©+v3�uÙʾÇF}“Á5JSö£;‚.qly�\}¼Íª–A ¨$� `ìï +¥ X5Ø(et]±þj1Tžyì)BDaY…<…ÛA2=Vg@@rS Rbè:Ð¥Y­úwÐ-l¶œƒþæç*¤Ãd_½º"×åœLQG e ¥»Íü­øÖe;/=Âî¨wRô´û E1 5<§>캺d¸LªÀÏ} ä¹À…=Bñeƒ,6D©À�U^lΑçcG‚‘u¤™jJ­’Ò÷…u&9h¾"Rpʤ¹á›R�ƒ ¥i(Œ·ÆÅVó”kÓü§ARÃ"‰°³4£2ØG½“2<ÑB¹ÿi!æ¯bR8ë0T4äQ„L†& D»Ì_sP:ã!0Å\ˆpè_ ×} +Ji3ˆc")=cߎÃÓ�%ùNDK3VŒ”" +$–?ŽÁ®îæJ¨>Ì“,Œ«¦ša–eN‰ïªÇf#UY5Ûr«“j Œ ü y®Wïl¼«@3Ä Y­qÏÌJ´ÐEe-n½‘ òcý»H¨ †Ib'w}~ˆ„âÚz€ ‹(†¤ÏÊk&ØßYHÔ‚äPÖ9”µcÛ½Éô¨ˆÍ»¾ìÍèÏ„þ¾?sÊŠb±×ʾ¿fóJd˜arÄ'Ì®û-ϵ;@71žúÉÄ}¼:æ™7REØH­Âñ÷Ç(¿=�Cj†ÙÞ„@Ï \ÞÖÿÙ.o,»škç…&@­òfœ Hä®×Øþœá×ï-g=Vß±Yƒ’,Žf¹³òf':ö ƒQ|c!~mS•ûöÐyhØÓ +Ql›ó¼FŽçƒQb½“mr*ÓÒ—­yIÚ[ÿë,é¶r%†õꈺ&ó}”Å)v«Ö¾´9þ„ð2¡9°´kÞÃo£'%�ÈÕÖÜ…ÔŠçc~6µ£ÉX‚ ¶óvRhÝ:RòÄ%wc³U®þÝë´Ûª ×�³ÎŒDZ¦ª˜cÚ¶NØãà5øÊt[ƒ§°ê§å*½¢]+AýÄ·2Œ• ^e•�½d§¶þí#Ó¤Ùê£HY +Õ%°ô¼öÑ¿§UÿQ�û6§î™ç´ÆÛÖvãaÇ“k„ú‹�m±×€éºzÿY•ÜðâácË¢ÎõLLÙQÒ(UÙÈUiž<ܬ͘3j_›£X™1… §ãnhÂïõß7PœâfEðŒÄ2ŸÊxç@½ç�U›í.rŸ‡!¾P4ã0žÚÐö©:Ôv7ˆuÞ„¬H�o@uøÅ€=š:¹ «’�w„XÝBÆRõ?d`ZîÆÞ6::—q0ê±R3ÕzjšŽxé�xþ3r½l[x—šÇÍ;4§»ÖðÔŽ·Ûª'Êßô�¥ÒãÞfc›;49<  ¦çûkùÖ-¤‚ë=PŲx›�ÛkåP{އ�" “Ú#Ó)"PY¦ymá~Ý­Æ�ÆãPË6#Îh  #Ðõ"ùDÖm<ÕÉCmâ}hn{ôg¿«}E–÷·KE”ï2ìÃâ~ú ðNHH[8UÕäy�dZ+UÞ¡j*FCZQöŸ¯‚Œ§i¬ÌwÝDðŸvÊšR—pB@]1À³% Ò·?d}Àn:×À®ï:GãV¶ïŸ#hö÷xïq*E3ªæqŽ’;Ê÷@Öpï{ûßâE„ lŸ÷½ë;wÃ%†-0h­ww}wG«±4†õÁÜ~öy·d/J^~æ´äëW¯ŸŸ T$ûçú°~ëÊ_¿q2e�÷‰†Ñ¬ÑD€û$±’&­ M“Ã_ÝõA1`¿ñ×7~µõÇÀ¤ø§†Íª×C!NÓØùT­ÄÀUÍc�‘ž©9ª%îŽfE�DÒ3 �«jgÏð ÷:W‘]µ<e»×9§×'˜6RP‰šVkÍmá»8E:?¤uÀ ëAï}£Ô…­çB´zªÊ˜Ò R± ­x%‹<ˆÕßÝ×.ÚÔ«ƒL›A};Hµ"݂դ¥�Î3 ¯@6èNGû6üºÙàš¡ßÑóº® +‡�kŸYŸí¢ ó’�ÑÂõ �/¢ƒ/“™ê3Á‰%æñâýa`YxLÞ mhÜ14$�<¾·eíŒÌÔ.™*yе§�tlq2A3)yf(E%ÄV뎅ùéÜ9Ñçá&«¬Lâ½B£ææmÀ°Ú»øw±X9ÍàN'ßÅ:˜4�`°Æ<¶Ž$¶Ÿý=‹DI{juâD¹…¶ b »i�P�”kÂOÁ€VÁü Ï‘#·Mº=·Â"Ç!ägG‹®Õ4ªc;Zn³!ÂLOI轜&ä&•ëzg§X—“ xi¥X¥¼èT²ª+½³{ñ°zËžû¶ ª•W1Gbœ°bÏ„ûFSôF/@½1mRÉqB[û„7£c/¦ð”㦴Wg¹A´Ä ÞϽˆ·ñ®¶Æ¡òi3¬óz¦÷[ì׃°Íå.y×¼�«Š¥å»øBØ: vN2J8£"îáü²qþ{GŒV�zô²£¾íɇŽòëäFlä¼E5 níϰQ1ïÇR@\©‡/Tç)1“ô\Íω + '¶zÞ�DÕa5kÙ” +dS)=—œ5�Δœ×�ßT͆vA»>s~lR#Ý´ˆ ±˜¥Ó�=à˜äpÓt³ø‡´ûEóWûÆêÎÓ�y:�ð\Îkìg:�)¶›Dð`0�}¡9µ:Q¤†Ã©3Îno»Òyc�v‹ÛYZng`¾ØS㧺·–Œª6TØxÞéó4<¥æøçÏ�~w‡W{L`³Ôý ñ=ãûqNßÞùþùF&–w4‹>æ{¯¿Ò{ZÞC8ú'ó{à/xÿ/üõyC¾Búk!Mÿ¿ÀÚzò~ã®Y +&€³¹¡ÿ3ûGÈBð{¹qʹ£K•‰ ÈäÑê8òñôyEk\2ÔÙÌ)Ì•TÛ8uÏLÀœÍ ¾krã™'4|¬Ê +’ÓÏk¥«'.^¨ÍÂÇÜ'ÆèëÈ]Ìʫ繜N^ý„½1ɽ«'Úõc—¦GÕÎ¥d±eÖ_¶ê˾•¤’ăbï�à–Ÿ¯“áôx»MŸv±NjqqjœuáûEØ¡£)£&I¥ín}u…Úzú§ÄAmý�vq;à¯þ]^ÓþW¹ýÍPwÀÅšQ�Ú¹"vû&(Q,«†[H>�å§NP5‡÷¬ßHBd¦xp�õíUí#²]i¿~Üçýb!Å�z=¦]Ö†”nÚ.NiSGƒÉ×Çåbe·„t–òRó¾;›ÙšSÓfëÅêMÕo7 ;#è#…'QnäîåGõ¨Ç±èëÇÙ¤êhW4ݦ�…uþu»˜ZÜMr‘6å?U–S1ˆiI‹õ_G´«IN[ú#I?–$ÐE1ÕÙgܨÕ¹Àt¹lóìQáUJ¶jΧ:Í,ÍL�•­{PqÚá®Ã ¼IàŦ9çT¬Åò0Žñ0å¥#RÃbvÅoKÕ8ŒhÒ‚ÞŠQvpzXj°ûzi¬Uwå&†&«jH¦Ývyǹd ª =I$Ç]äQAÚ%ˆÁ–È4,òÃ!?�óÂVœ©O¢C«\Ûb%yŽQÈQÙ@¬Ma_èºÝ ùø]�‡­0¿ðHo;TbµœÖõoXR«i +Ôž¨pTËópŸ�åCQ‰Âúú('d¾fË0k¯»ñ÷p›Õ‘"P½#•ª@•�iPål¾FÆPÈe6¢¥Á� ¦+e؃´êª[î(Ë6è ãPEÍV™HÀŒ›à ,"çá!Ú|¥ç0PüX!„Êz,fU´š+‹qâ>qàÄ•{þ¡sžÞ@á6Ëfå#õï�+{ÙIé€NtÆõË2ÑAú« +¦P¦÷Ç_°·Å·¢½¶Ö¶ûšž�¶Ææž†=ÃôŠÖô_hÊu÷n¬eµh�<–�~å©qŸ9îk¼Ö5E‹êuØ#›^û­³p¿ìÀñÖã»)—³1 Ë®[57�(Ó!JRYnŸ`¤Í¦â@®4¶Îÿ2Ùê¨Ûéh—”à87§öÛêAVËï•u~ú‡Å·ùÄðð�Ws´Bí¡¿ÂJà CKØÍØåmçÎ�kþ•[aU· öÙL®åð÷ˆ-0&<5ý3L®Ip¹™†Šâ5é:Õb³Ê]e`zs”…¶ƒOx|�m÷ ÿÓúkÃ÷Ÿ1rN¼Ò­¡ò%ܾ�ŸªÕ“ëŽ�Ò”º­×6,ŒÀBTÆÍsZ¦&`CýSU~™ð¹.wäHrˆú:….ÐÉ*’öƘkì&b­‘±÷w6_‚ìîQÈPgø)ÈLœ�@ø›o~��­Ä +9nð�ôú}�ËÆ¢pvµ]vù(ñp$[uu:u�Ø<‡»XÝ;  +ƒÂí•X–ªhÞ }�’ˆÝJlá}ó‰³Ûk6?¿�¦RÕŠC‡'áâÝN"ïqWÍ·€w]é?ÕµUs':éØìI€ÅB‰Qk6…Ô:¶Ä"«eê¶Xc’ÁÙÊùÎlM\©�æ�ÏÂë˜PõõüŒ5Tg¦¼KÊkg­êÞçJ«úÃ?ç¨� Öm¿S­»ïtS +�uÊòÈGp"��pË‚)]„ö¸MÂW™ãrÓ&TÌ­°ËÃY-1{Ì»#3?_I¸èã ¸9,6¤zÇÉÊ�¹å\7Û¤5/S ¶FÏйž,³vï&ŽéR¤Àå'´Y'„j€¾ÔÂê2š›8Zå7†.ÙyñËÎ]>2/ÎV¶(Ïru^4k UNV³ÙpÐe!Å©,—á*_ö¸Ð'Š#®-�ࢣ¯Œ(F±<›Ž-ªÑ gçÓ?ŠÅfdúáZ) ôZîûVjƒ²~‡‹š¯4¬0mÚÎD�-?ËÂÐôáq¥ +n�)~g�Û¼-8”uB+·);­ˆ�i”ÚSí©c¸  �¤I‚A•Í:]á®DŒ¹ŒêN48ƒ5SŸQaŒåiZ±ü±RÔ]ú5LphaééZóÐn[q­-”Ã&ãrg‘Y,RSRew+¶Ý«Üôª³¹ˆÎ2û—ÁTÔžÔ^HÇš`9R^-|ø1½�Ñì…0úÍö‘f’íhnÛ¨!†Í€f�ži[] +·—Á7¼åDö™-�ál‰uo�,ö2Ta»­j‘ĤXå:wÝÉÿî8É }ŸÜëHÛR+—Û©�i¬¢”ë mÛ4°Ämæ»åØ™Y ¾y»½u‡ç»Óv,¸!]üi½êÚЭ×�ƒ»õÒ'�AF�•ö_;«ÙÆ»=xaݦ>hª»Sehþ™�–ïÔõÊfšéh§7SU„¯Çí•Êà œ•D#1)ôš†«ƒæ®+‹ù¢_3.˜-%Yë.gZšî.Mç£Ø+SYÛ‘m¼) +jÙâ±ç®›Ì; ¿«°¤eIîá¦+;E¿Áò‰?„Ñ’eR¤Á¬¸64(]"M‚Û?R_¨u*Б÷p¹–iï‘¥P²Y¢=¹Œ¦&mvÊ•hS­úíêØ„I…—eS`‡^–å>Ëñ·qÜölÌþEõ[�°ÜÈÜÜC;“ëäëzK›h"r,R¬t/”Þé`9% +^70°%Á-긇ùéÑz©{Y�x0ilŠ;‰cÓ¾Ù¸_ÿ~üóñß§äOº×A‰Ëí®vøëëƒW_X¸¥ó-«‹ži»úõ‚û?J|ž,[™=òQ/WyyþB¶Þßx\Ž{Â3ñy� Ÿýð'Á–- Ï¢­’¾:ªóäë³!Q(œôÄo[>JìûóL cüy§&tX?a½6x^ç:ß¶ñÚâ÷c�Òîäx±f‹ò~ìÝꪱ*ðf&Î= ÿiÿÃaÉ G¤ù*Ï_ô'ïo†©ö ÛèLº¡<»xvMµýbé[Tq�w¹• á~ÂçNσârÙ£ÏAä q‚:sœKü¹þkkyÈ?ÿþëSÿþ`^h\S endstream endobj 386 0 obj <> endobj 387 0 obj [/ICCBased 87 0 R] endobj 370 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwnΫZ€N‚ è $´ªŒúÿ€ÌÌ‘ÕSBYa±�¾š¿ýåûñíÏßËñ‡?~?ß¾ÿ­¯Ÿ‡éïøùúÏãÛŸpë_?ålÑŽVüœ=Žåý½3ì\cÿýÇãŸx¥„üü]‘+”/ØY[ÝŸaÓjúê·G9Ì¢6Ê:žºÄƒ¿ü’‹”Ót,«ƒmvÌÖϨX Å o¼~<øìÇã9fÀ”ð‘`4~‡Ë•÷ÏÖæÚñz¼ÁÙáÝý•÷jŽ× +~?`]ïŽ+Ûo›–°½n>-ú{ÁÍ¿â}Üõýû{oF¥7XÉ:\/m½½�Ýõ,�ëžg?}`çÓiä9¬aÇs<šJH=}Ðüz´3V½Àë1ÎŽ!+‹Knìg¯ëXç(Ü”‚‘¼ÓðL[pñá­‰tÇi õp.Xž×¯L_JŸðÅêéíP1¼ +ýBDðVTß‘†ñƨ0¦2¶sø /nÂDÿ }ý,#øa=Gåðé(7Z_¼q­>ik4e v:Ùißj�q…yƒ×#îH ¦ôDbQ\ e=QåðªTnlý´Òh‡£„ªµH®›û×ÐÎãûÑ}73?S‹Â,¤¿w&�"½O$q0šªuÓQ7ت®±r&“¹1úµ¹óä:‹ë°¹&º¬ê)Hbè¶T1,7$2hýÁ«ýœ|µbóãÊ‹¡ üø5KÙŸ!:2ÎX‚hEû¥†‰ŠÿÐ5jc�̦Кì®ÚéAœÞÕ¯(ø!Ü�udŠêÞ¢Â긑ºˆØQÙÖÅg€‘¾ÞØ_èý½n(¹{g•¡U} ÖPT¤’û£Õ¤!Óö ¦�z]7j�›mXF•p0îh¬ÍÀ›Êƒ½¬ø«Î‘Þ¡:YXhTÒÞvKèõö +á^Øçß_R2A9d&¡þ”�rN¤áéK4ßygâÝ3ÔXèÛÕçÊÇËx9ÐÔ¹s^³éij¢Š*Zú€=Õ§GLzÔÅ2ØŽtmˆ­ª_×zƒWÏëv)*9¾�•‚yØKa“©>ç.ؽ+PoÞ—evª“é=cX5ãfWÈ¢WU™“±›kÎà1vOVBΫRPÀ*?.hMÜðñ üÃ[�õ„ô‘GuQ-þ» Çt2+SLf0ZþFdúÄ íó¼ªýË�ü7@”k}¾Q�Æ÷ rQë¹ý5š§­}š‚PV>öÉÑí"íìŸPäÆ`Ò55O‰éÒYlUlRE9&¤ œY]K&zh6åWö'zÝ&~;œsäk�Gaþ~T:˜ÎÖ§ âXïÁÉ‹†àP�y�úpW¹¡!%zˆ­:—¦‹Ðrz1whé&¹à�³*º¦ÑI Gû é'ŠCËTe¦êd$Ÿ©§°zU½S³Ô«:x¶yBÖ¯¨½ÈþZÖ®SDg(% $ó㱫þ™.|hFš8«²'°_á‘Ä/D6Œ$.á ºmZ¢Xæ°±�4RȌʑiÞø”õ6rTQ9ìˆ\�¡2=1ü¶ü¶c¼þb½8…¥‰Èã.ÓWµ°g¡à�9L'dõy…$¡äÀ_ìçhF2-¾¦¼‚—]¡&£q/¸9VÎÐàsŒP k›Œ¼œŸâô�ÁÈŒ&¨ž“V1û˜¢÷™aC“rŒ¤ø>6ånê·„é5j¦ˆó 1°d +�;Ü‹TA¹ÁqŒGaT¬Ù� ¤sZÝÖH±^ª(Z «U¢$®&ê÷}�X¯ÿ™öÌÞxRÁi“P¡ ËJúNùIBJè’.ÃMé�v� +Ë Á-Y¯,»¬TDò]Ú°ˆm?(‘Ø5_p¾þAQ;9ÐÑàã9$·'­”1vuIå2hš„┩M +×S´-�{(å]a_L<&jgBª‡JE+B†Z ¢¶X{KúETv»ô&™Ù³?†QÀ“<¯îXHûÔ;–‡‡«wJ–23—B¥Œ�b— gŸøºð‡°^®Ð[Æ‚ªÿÞyüBBÝQmí�jvOAì‰ô‚:È\ˆù“ç£rIî{û_zø÷:1\IÛ{PÛ¯:­¾ub“ÆXQØ*D’Ì@M¡dýOá™'-Ÿ{ð©å¢ +yÝÍ!Ô‹xDŽHž®û�Xû.�¸ouÝ5µ†ÎV²NŒO5›¡ MBÍʾ¤Ä�0#_DðŒ§8•UÓ¿!•ÅÚ,yÜsu¡ bòž©€aK8 UÇ.Ss�%rŠ]§WNONcjXÓ¡êº�³glQ<[Ü7žCùì"ÏiùºIÃÜlÚ“-ÕöÔ ~]ø¾ßTæðÎgУĭ¦â2¡û¤f)gK—7ÏTe&%¦¡ÝzÍ¡Êjl&MVU;©)¤+©Ö]’›ó¢bÜ@~æ,ÈÙ­+MMѵ„DTG +–©MÖå°&õ¡ÕÆÌæ.ŠM«=ç¥SÃMR>A!¦Šgû�7cñ8É1Ô—­îkrØ@”Á€É'L°mÊÁX{wI6¡-míë�ÌÿSw¨¶Âif† +¬”³wÝm™JÍ(å€]ßÈu&B÷VŠ'ªÉ”;y’»¤m¼6š}†?'¤B¨Ëh#l9a lŸõ¾^-{‘(k)tŠ$I N^£]cåá;$:ƈ (ŠR„zf2JM2«/^s—ê*4•3E?Sšv5<ŒF ÖêÈC +ɘþTSÛ`ÈKûBz`C�TA_dé‘{f*HQHʺ%hРż#)°�l)~Žoˆˆ¢ŸÈvŒáâT/©ãxâäè_:åXÊ¿¥Iv/H Uç…¥ÙÊø¤rjä™öBØ„*�@ÿ´…Óä@öëRÝ>â‚U“‘’´Ô¥'¿t›ó +“o2è׿@Ûfa%LB¥ÿ��T\êÕÔ=.& �ÖŠFwŠ¡²+¹ä¼©<âR‰˜'™cÁæDÌiÿ?öË$Wއ¢[© 0â|)þ£Ò—Í.•>$ØJÿÕe_”öcý¯>¢©ÆpITÚB§ØÃdšúêñ³+ í À«Þï"Fã­C5–X‘Tº5\Ä« åÆnqä‘A�1Ó"º¡–53hÒ�”ª2®üÖÖŒ•nýífàC�-z›ÙÕº¥Y†FèÿaÛôí¥¿òÀºa½÷“l»'¤T¹�ÍšºG–O9 Ì–ŽnŸ-�BìM[š»÷G9ÎXÍèet‘Úbñb{�øð¦w37¬¿ƒv‹ö<”-£×““³VFš¼�@w™X-<Ï´È—´Ø�ÿ5kµE£Õ!N§‚Ibdû‹F-kçØÜ‘›Q¨`vV[‚– Lמ7CK„ +ÕX4%C§œº0Á¿¨©Ã'¤:2�wn³¦z)«¹R–ÄØêÚ°L$íPyÂeKÉÀ×ðP•ÛpŽÐØvõ™ã×Ee˜)¹D®j*k³ºj`>¸ËMöNÑ0×X!þGàË Ë^€2 VZ©Gë«¥-4í7Ü¥Mzì pžÙÂ’ܼˆÂcþbÌ·ïØEi1†ÏSƶj8pL*ìºFÔF‡JDdÀ¡!© ec¶mÌ®\\ã\N¡¶ŒŒàÂ5½ 5k]O@�Xå>q3,¥×·kmݦlX›[&ŽP­²Ò¯#ünp7½™Á÷7 Ä�a‰WqŽžìU£;·£¸ÆÕ]V·z…ÍÂÔÓŸjõÕn³Ÿ€ ørG]»Å Ør—À�[}þsí¼œí �þ÷ýTB&çU˜,ÍBË5È;ž�x^MžÕµ¦hÅw÷ˆÉ-߾ŨÞÚö!h¶��>‹éùÃÙF9‹ +næ ×£­¦p£e¾g=I•ðÍ,áOBÁ<À?)Òú¸—ã{Âp]‘Ÿn¸àÎg�ïÒ󒾨æÎ|"�Ð ôŽk966Nå/K À¼5¶éöõvX«šOiÏ– +!"Ÿ íûüà¯å°Ô€pö/|îânfúº¡stFjäXÓ?ш<Bœ…Ýív¾2ª¾iV÷S$k¹ ë5ë´Ë)?Yìûï +á|V9¡Фñ/ +Aå»ÐM…o ëøYÁí¨äÎM +jZ ʬFÀ0uŒ­,¡TÐŽtjá…4Œ@‚mþ{¶Âùà;íøiåøF™0¼_)em‹¶Ñ&ÝoŒõ¶ÅJª=:ôU�B¯u +›~E®¬¿@«k1#Òj¡$Ƽ©™ŸÈ@}Ö+ÖY¶ùº˜É«é)Ô‰2PÝ� ·Z-øî±ÂsÒL#éjñ.Æc¼t‘„Ýþ™ðßky4:µ«˜'ú.æjÙùC‡k¢®'îÚÐqWŽõéÔñDJÄ¢„–ðºÜmb•�ÇZÀ­xR6ž +Ð.ñ� ¸IÎõ˜ªêþº\Ö¾Ý%®°5šÿú»öQ–0pÙ\·#+Çû )ÍFÐì~BÜ •,¸A�Ëȱ:Ç=üDÀT®€5¤¿(üWó´2ý*“H�—F;&’JP-d‚•QtìÌž³¢^F2yÏV�½žA®° +jµíOϹ=±het³ÛE•ÆE�þЦåƒ5”ãelÔ’*6åh:Åé?™™"jªb�Šùœê«V,dV„¼˜,BM}oݤieÝë�±$‡ç«­W$a Ê +÷ÓÅÞ´'ÒÝÂ̆ÈÖ\Á<ßNM>ºææT¬LYû\�ܲ0 gHݹ�ÜÙù‘xÓ¶>–Ù? ÍmAý/CTLDŸêkýˆ–«è÷O›ï§ƒüCäôqyhž@·‚g»Û°ú�[«èßþ÷ý¿=~@"½3€³óÑâffýlºO5Õ°VHëý‘ÛC³ÒoÍ/an<(ßÂyÄt'òìkæ2¦§6•Ñ+ü‚rÃáÆ‡åÆgŒ~þœ¯:XŸ± +|~Î"®ÏX^´|Î_aÌ^ñüö±s;„_B¤Ä2€bý"Þ­ð +«Ÿ"þ#�|퉪÷úLÕDâ·þš»Ë úÓϼ~ðZ6¥+°ÊûR©Þî�‹Š‘úìd¥$?µo<,Û«“Òø½¹8!½‚%ßο«‚2�Ë�Ý,3ÄZ7Hk92ýŒ�äìP{3_egÇ4œŒÊ—¢®òjÑh¤}yrƒ•—?í¦¦[£û­x`Mƒ¿¤GýZFßN�¼mûH¦€y_°YO‚¤q Ú³¤ìhVpƒ§¯Ð6 ÙÄ„å�Ê\–zA¼–¯P²² æ¦›sÞ¢iDŒž·ítö +³ÊØlÅ +B¶œ•³+a1"\¸õ›õrY1´¬hÒQŒî°È=(¤ÖÂûí�‡™ÕÏ'j‹ÿÅǨ”ÑAb©n@û2ŸgäZ<~�›¬‹Ôö#–Š~çœf �F½­ˆžÚ~óÖ{#Ó8ÓE8"²€¡ò‘U_„Î +FT7¿D¯tMÛŸÊBåÛÐjTóŠd–y‚ƒÄ6 ® .˜J ÊZËáfCcŒ‹\$u‘ša_ãîãØÆ8*;Lb³±�¨\C͵º…FÐÜnÂã傺Ër¥w~ ˆØÕ9"»$¯er •TœÛÙ\ñº•ÚÈÈùþŽ »Á9ƒ†§úÀ-V¢á‚—c3íºLGÛ¹�fŸµk¢‚ ¥Ž�ÀºèÞ“M¹SrÞ¸OªÌ¯<Ö~:§Ïý†=€“}…ãUŒó¡4ãÞðÊVÍœ�³ÔE)Ës¯Ne¨¼A!Â;tæ|Ìõ¥£¡ÈRâº&ÚX„ +>ƒ1^>~ ÀÕd#A�Ï� ×!Ñqä€Q5EJag§=ë�/€ÎŒ%Ð i2ð+0J5¹•ði]xŸµ7~ð³Ñ‹ûÆ{‡ÂÕPeq(ä%„4äç]÷N\FÊùÅûį^$Éùé+UØ.]—( ÀnuóC[§ÙúTC‘–kHj¢ðÕt9>rÇînäœ5œ°cX×%¯èƒrý©Ì0ù[µÏãàè˜Qp¦ž9q®…¬¤Ìnþ `K#Aìò´ƒuŠ›Í¤„Jgá[°$¨˜Î\ƒY^ãr¨ÄxÆSõ‡-û©‡ùAQNɦøªÃàØ·„°=ª¬¼1^ª+Wyj™ c:ãâChÚŒ©¦±h÷U¶‹á ‚É�j¢—òÕ¨4‘,s®ÓTÆZõª “tY®ºbJ°-i4&�UsO Xİ’;"XàÂÉ'´ˆ^¯ m{V‡|ýóóïo´’le OÑps(ê‡Vò³É´ ýžEœðr£vÑ{âÜÒh‚à;c¢ìã½BÅ”å5¾�êÕokÚ qÅúxýÐî{BS²ãl­„dÀS€Ý¡ ?äÄê’FÑ.9ó‹…÷Žþ:õz¾äÐk�Š7ô2¡ð™�ÅÕÇg(…ÆÆT+÷…0�ˆ¯I=ÄmPÓ>q^÷þœ/eòŽCBþ™?È ï8„JÏü™hû�;ÏŸÕËO˜iZ†U¥a�•2ÜÏ8ï¨óY6˜C|ëF�;­™­ �@é™§�Up§ý¡ƒöÖ&9 ôé·{¥™x•€B6Î;‚Åú"\èÙoAûoŸ:NÃè£ÿ^AÙ+x‡t8äDÙ¥­dîܧç³0Tnöø|¢üçd.Û®}c4ô +¯/«ÀE‚[!.Œ¨Ž×î°ÿ0I>ç›û€çM»Lç&õÄÉ`9Ãt*D(šG¨4é}׉MäÕ)h‚‘ ÇI±Y!³˜~ü-¤nŠ–2dš g#9…•FÐ˃e`zq~ò9hX”ÍgPS]täZŒÀp•“àÆò%–AÔ·[ðÙª;Âézéä +Ènv#¨¤ÁwÄ·�A¸H�ožmnÂîÈ:§ð S”¬³º•€~²3·˜@jƒ±”j|ý¹æ"èu ÁxA †doÎF‡“É ï~- ã–›*sóÚ¢/Z/DËä <3¶9Ér›G"¡‹¶YT_8';"ÙÓH” ?-»Qêf¢cêöѨZKчÊ•ã"(uÉ —^?ÅÇXRËBJÐq[£ŒCÖWž ãNɇÉi'¼Kjm¤C—Í Ê÷#ñ·JPc‹Øuâ�Q©Cx¤î�¼rŠóF±€è<;5‡†Ç;'udãå™ ääfÊCâ�·1³jŒzr® oöp} Ú ÷6[vÔpJQÝ`LÎi ÍôäøPœñ?mCT`L{>e¡n>tâBW^÷¦Pñc߉DͳW£À³ü' ¥1Ê80lêFÃ[ä=žM—c¸\\fÉpì¶ Fd‚è:Q`+ç©wV['+‰Ø³3Œ3/æL}SÁ½ +/Ísúúª—â‚L…¿®qt"ò¨M8[]ÛÁBcçù\’-jóÔIK‚� ÿ �jÞ¦$öq(¯ù^²�2nTàÈ?®ä­¸©Fˆå^)ð[¯tzËkƒ]Ö©ÖYìD¿¸a_êpô,™Ž§Ì;p{DUxVs(‡ð+ƒó'—jx¦bfÿ&–ç{ÈafJ#l´†C™ô¬< +GÌð¬FÞ1z¹w‚Жž, E�üÄüÎ4„0"óx@’‚<‚æ<¼Qüì[ò—/ô}ª²]¶0á$‡t`´¹¸V(�ôɦ_Èæ^V˜$BM±ámìWhàÜuT3ã.:“#_ ‘¢·’árM T—íZ¦ó}±9âþ·Æ�J2W>V�$G𳈢ªŠï6ÃÖP¸kI A¡›‰Ó7ÁJPÇô-#‘Ð)ówÎw9�':„ÿ#å¹Aù¸s «-ÿ«ÒÍ)Ò*Ä`üýè�L@m5šß–Í.Ú2sq.¢Q:Ü~ûÖ�€½eZ`>ö}~ê¢N¯*îûE[‘_h9ü ªP¦ößÿbú+ú…­ ’Š/n׊³¨|¼§ÃôùGØYÓ“&æmP^Ìد–×n#¸Ÿ¯ÐH&›Í×6Èc“�Ä{!°cÈý UÕäÑ‘f 8ˆ ¸À6ÅG?ª«¶ùÓ‡ëƒ÷dÖ,y‘äÜ«Œ’NÅN%°�˜–ÑaJ¤[ôa¢hÒÌ52&Ð$¶ÒŽT=zy +œE +5¥ÍîÿM:NªÔôN6�£ =–ìhR bÀj¶®êœî»»’Ãê‹hjxß]¥Kýj�ÕõȔڢ�ÛbÅEØÈ]}iªþ]"�m’ËÂJƒ_Øy®QѤ+ÁQUÒ!™ÈJª`µöàÙDb²hžhÓ5…‹‹¸Œ‡º¼ŠÇ#z„ŒÝä‰2³¸&nß"È +RØ ¸,r8ÉüÜù"­Ž‹Ã®CÁšY_-H„±euÄs1áÖÂ×3(FU\ºØyn + !ú®ãÒJ�Áê@ž^=äͲŽhvÖÇRƒ²soš’Õu�1£Ï ] vÅ\²¿ïêÆiuÉÞ視”n&´œ3Ô£ËË}‘q!ª!GÔ5Ûtqì¹Æò½o++KkìªW›‘=ÃÅ/ÌòP<ì—ÙˆÏâG$?9ÔbV+ ƒ9í¢•¬6Qk¶Sq„,z^B‘¦ºÆ;Ã"«kêÀN§^áê!Ìe?Z�ʆ}ÇШ蛢-yË&’dÍBݹLB¿Å:½ÝY0„­b…L’R+0ºm\`×mD™¦8žviE’Ì‚D€ìS@ÉElØaåPñºQk,£8Å¿¯jpIŒ+QpîeŸ¡šd+î„Äè]wô„ËÂÄOùã8‹‚ë%µªÉº%AÕAKÈTaoP c—ž3¤›´ }zfúJ²Ìì`‰S¶`GlpÊÃOÊ0ÃsŽ –Š"z.C„‰ì� ¦ô`ÃÞ–©ÉìâÆÇW+}zØD�‘Ï_¢+Sn¿‹âý¿à}Þg½ûÛåî“Úý�b÷³¸VpUB¤!xÛ†õ% Ï6Óî% Ÿ’°íü´<‰MûW퀣ñ5¼:(¾†W ó‹äêì””ÿ»W%9 òìâ” ØpùvÿåL¡ Ô0 OT Æ„0¡ìË”d_dzeýµÃ&C~Iq¬ ¿pì°ì$ãýiýôiOÛ&é@¾&ÒþÝCà÷x5Z°èñË£ƒ®}áGæ ÿ½<Ì[ü…†rz›Æ$,zðôÒø1x^hM�®ýãíï<¯úñ­ pû™RöØæzžˆ� ¢ðÒ'o‚Þrºå?\¾ûþ§tùöÓåO?\ö¹(±ÌúÀÉ8�{¬,IùäT³œçùÔ˜Xûä„_Y¢`µi3?ŽÍOÇ $*™)yÕðé¨ïþò}¾üø ã¿ýõ»?ÿœ.üçò¦H@|�´âœq.žéÇTN ¾o7Ç¥@’Bv2öSï�©\¡êÒxšrQ£ÔXge€†#ŠÇ}öÄýíÃ÷™amç©LEùyì” *™|œuL¬û`ëש÷ÇÔé!ÇÔ~ÿ>ëá¡uŸ=qû0Eü|D1"!kÅ"ö'{9É:ó4O u‡´(¿Oèó)ôV å ètC ½áؽ§ðrôÔ�ž�ó˜ {Šâó:õþ˜ +¿úÓ”Â�ØgEÀðaßgOÜß>LajÈÑú4°Ô;k·Qúã¬cbÝ[¿N½?¦N9¦öû÷Y‡‡ö}öÄýíÃÔKè ’·{5 ™m½”Î* ¯ç%pv�³¬ÁWÃn³ØH©üýgù`‘��k‰ð晀t¸³„úºŽ.€EîΆWú…ËË c²ZÁþÌ?âkØv«FÖ;E  ¬S¶}�'iÌbžï cÇ^Ë\gÝß–½.ó¾í¸êÚ*�ZÇ©–‰Â³K¯hhG§6ØQØ|¢‹tx5nŸhg\¢´â0ó%• Ò?ØÈ½Úócý«�†¾Î3Aà³�>!•ÕQj¬8É3Ú׊if{ƒ×ÁvL䆇ã6•Toóð€ïºî€+5µbpU¶ê9ʪ͹ ß1Ñ>/Ø»©iÃñj´ÞêóŠ\g“”*ƒ…&¹ .í7dþñqJâ";‰¶qž!ø¾ìƒ'Lò#Z|EÞâ!õ°€Õ×ZÚ`ÆÆwÁ,Óɘy˜X¸ïµ€[t-GÏ íàà¼FFp®æà­À�+­Þ«�ãµ³:•ã7–þ yh]¦÷²ˆ1΃7�ßT!ðφs ›ð‰ØŠ s<6\–Ý–t3nˆËš‰þÓe1Ö­@åX‘õÕu9’]‘ØÝ”·)œvD~øzE!is»µìºÂ€ó®¯”ˆï&}„‡0uÖwlœœ&t!0›Ó�p(wx>"Ãð˜+J+o„n +–D{�ò�q�ïè&ŒN¶©ääO“+m˜Þšô“¬êŠcæÖˆW_[ÀG½ê@yNv¾ "ù*Ÿ‡Í„Ï+à†ÎÌ��˜+9öŸ%BϨŠ¿Ð‰Üç”îaÿ›÷rÉ�$9‚è¾OÁ �Šÿg+@'ÐB³oHšG Íý=3�ÌJR³4ЬˆÊŠ w773—&¨‘î4·xsÎÝOì©3Iç¶EV«áØP¤³šß@‰ÜÈY¥�ßí´âžA¹€;·8jLã‘"¨½uÛž£†Å·Å^¸„´[YÅãkÕ­™Ð5†�Š üi€k©90ï�Ç´Íñêé + ¼·ÉuúÛöT¥£¡yá¤ny˜È¶º„«2x DÑ·Í\ÎÅÝ4*§T›Èjd•0Î*Iy¾Ó!~›„xØJ+¥9zœüaµ?f‚íæ�-?ô êL“\* üÉØç#¬ÿz²,Ž/ �s‘â¿Y–±V’m:…á`)7 â…º8zO²yŒVão29“ ²q bÂUFÊìÒH)ºJ¿<¿«ýÍYL!›É™øYåXuyïäI*«Z‚4ü€ùQÒ@ø2ÖÄopôô-YtùÑÃ)8w1tª²Ô’iÍØ\Û¾„†4þˆŸÕä,ÔÀ¡:Ba�úY6X—©à¹7~!}h2bUB(¸†è1¦¦fHñzQ¼¡äÅÌHzGwb«=àÝü‹a¢óƒZr7ÞÄ)‹BÑ]Ù/PÃp~.ûèKêÒubq]F‚H«�ŠCÛ½4&�ÍÄXhϧ¬Ï ÂäŸ_%±ƒ””»¿� haÎb¡j!—|¢™ðjÙ¤R9^€+÷j˜wõp¬¥©Û¢2«‘Óƒ~º¼2‘í[³s`¦„ =.�Ïæ 3»{åCkÊ‚~%vÊÕLÌ©U*@¸�c¥üáHnµëÕhG-“ÌÃ¥TZž› µÐ<ÊÈr-‰ÚšMÁ¬!‹n»GM“æ™�5ÔF”��^ + šP†,úˆÖ/â % |<àä…~½¢�´®ªÂök’¥Ê& 8J`"T ‰ÒÙ¾ ‚#õ5Âtߪھ…Ɉϸ[ê×Ï +ü¯éÇ’ÕÍ8Ô�ë ¾ÞÖ Hð òÌü é–;�£aLo–Ã) ,�|è,ÁDe#ž*ò¨o‡6›ž¹$J¶¨] +E´`‘ÈÍ ´õ%ó\K¿f{,.�Ì$=èTä,Äú³”„zQÕÖ´¦’CzSò,Š~É”T:” ôeˆ¥äÛ)è/×eÙÍ’‚"˜‚ªRòN‚4—’ïÂZõ¨ªù€LÐËr}.b Ýõ¬…\F0ƒGÿ¿o_ÇØÝK´Ô–rusµT±—ƒz È£œÉ²ï–û:0�¦oÌîvšÜŽD´i/+õ½˜å í„~%›]~5¤:bí·ßþç¡Yñí�tÍ.ìÌÇ`ÀÖBÎ�b7LF ÔÑl¾¬H@4*wvKq‹?û?�€ú«žëæ5ýäRû8Oú–>^&rI6´ºƒ P’|ž”F#œe3!�ŸŒ`þë¼/Ó5òu�XœÆ‚hÃj T€ »FIš\<Ôì!YHË‘K¡H³‚ò¶2ÕôN”d}.“›:ydáæƒoŨ‹n»/ ]‡(û®ÕÓ@¡Ä{*ñ*K_D1%”TÏøßÀ«ÛTåö)(áîàƒÜcXˆrºMšNèƒ{=|@,“MuK†«ý+•�WK¿®ÛeÞæ}_Ücè뾓·×ñ¼ïŒ‚Ý÷%#qÀ¹ïÑ­Ç}ß»T1³vêŒ1¢ËHWÙ•å¹ÄPË’üýbîR#×£AdUòáÙ¢ nbQ щ.§a0üæ:©ž_;$  1¯Í‘=7žÍ�÷⯉þ(¥Ÿ]«W‰æTËö»Dsí8êd[l¥�ŽSyw“µÍÛW(öЕm푟­šR¤9ë�ìÞ-O\@<üVx0ߊûzÂÝù]*yvš7àhͯY7Z÷jŸtŸµgX YC—]r]¨�ìe™vï2]fŸ°‹æxA±‹+K3&TPýÎq¢È³Ûp.ÙKî ûõ^U±(Ѹ—‘Ϥyë|ϹI³"?/Å»S·x#¯ã›]#Ô¦lön§,–VšôÑÊÖé Ú±½£I‰ÄÜ^QW„ujá<=°RÉÞ4£åSÊ$ÇÉßQOîúð“µVÍ÷ZyÐdð|‚<¤'¬b�WÍ¢¼C¶;2·ãè�†Kƒ×TxJë²'€ãéHgŽ÷cºä<´Èâs‡VlfyÛð1#&!þæë4ã—΄ö—ºT»r"…²ÏÉNS§ç²]›ê’ªQ¦½®VGkf9¥2¤È®Î®TDÏü_KU6� ÔNyaõ?ö«G’äêõŠú@ã>Ôø +\½A²…j…ü?@3ó¸º0Xa1P(e¦<:3ÒsssJÎãݪêVÕ–Ïfå­I`ÉxޏÜ–Ê�ÕC-liKÁŠèÐ5ŒÌåÔùeZ²˜”ùwŸwÕb訸 ô>rÁÜCŸF’+¹(†|ìØÑÇeŒÛ^ât�ññÏ“b+*ì¹Ôà6Å‚f<—0ÆcðéaûÄýˆt„Ý�1SÜ­%ôSô˜D™8cΘWÀ—2‚�:”Õ~7­µ|ˆqDmŒWТLò„¢¢ú®i7‘ËÌn^¹B¼@ZäXËÛæùqÕT«:"J¼Àpx0Šf9K˜^0Ѫغ(�‚$hÈx¥ûU8;Šª0x‚Z#“Žo”\ E¥í³,²í†õ,"]FõÈ'z‚‰;'†kSP$532<ªö Í8ÿ"G \À·zÒ~Ú£Q)7 gËkPÅ��W¬‹àö¿x…Ѱ‰?x¯Z·Ur”åz ³‹c£ª�5ŒÈæ"€HÈIn>ܬÿÑt¢ î™mSÞ6›ŠQ ÑKðœæ.0íT¨ÜûœÊI‰Õ†vaÇq’{Až‚�£Ü8™P@È|‹¹`u¨I€Zª3IR߯JÄŒB´Ñ�¦œ:HO–Ñ´b?"EâP-ªä(¼³¹3°ßñ4ÉÓe5J¡‘Ù¹�üÍ:5ÕŒ›Ô܈¡ÂìŠ[ý„D<È2Ô,fvõŠ ò›ÊÁ/ÐOäÿïFʉ˜R` {À~ã/¦ì÷Ç ×ù›Z×+U2ƒM„û’ÍiôwÑ·¨PöHHÜ“ñ²¦x�‹Ž §BglÎ=uàÆmÒgpe‘²^“1ä{Ísøàz°°+bü^¤GK•^!qG¦vú…jÌÀ€×iu(/6IågÆÇ ½ˆN&ÆŸÁ©“©Îpô /]èÕ †ÚÂr¤%øÐ¹Tj3³¬)WWÔ´ ‘K\ó¬¬×vŒŠmÀè7ä{ŒJÍ>F[õe`Îôl�ÒR½“¦v6ˆ^m/m'[l3í®ù�¾Ç>Ø…$\s²…‚q³bJª§äJ{*Oî1¤vÒ¾èô ÓÎ +³�ó€×�|£J`Ôæ /slÅ×Í¥8a†c "ÉBDMêâ­‰WHŸnÝ>B,�̞ɜ@?j‘5‡Á$3»þoÍ)nW¢Ø© Êï‘I<Ù“^PÕ€ÜüAèˆk˜FÈã \G*ž×á[~~ʼé‡gÓ?û”Úù”s\ *ð[ÈîQÛkT X1èKDÜyý…lÏÅ¡‹šøwí¨yyâ�x4>êõ8éü¥à � â€vboî‚€;«†ž†û! p¿‰¹-ÙÜzLCvSIÑV¡dB[êMeÙ–í¥/È€JÝfÚ–c{zð’#>ôžQ‡£—{‰kÄô/£yù—A™ÁB*ÃÁ’)m‡…iðÛÁ+%ÞAu*­ÂÏj;èä +nÕø«ík¶¢M£"϶�Ù*àƒt{›A´Ä7˜é«;]¥È¯žu¡eeXÛ'³ŸËnÕ‡��ÛÛò±Fy<|,hh МDô�ãÞ¼Df¸„Á�Üøiºy%�QŸ¥CÂSÑ&5 +›ýƒ¢|¹æŠº ��[ô•ZT`əՈY'̲?§9jUNÉ�ú¼Œ�éßÄÎvxÔr{l• ‡7F†Ç„PÚ^üÏœöêáô(êSo§0«Íd×…~Ð �lWGQoéÚ.ùŸEð%I””ÕžNIØX° Mä ¿¨†ehÛ^[�·×£úÃ퉌á÷Îpœ¸Jæ¸ ûvˆ´t~ÎÖÆhã®¶¶º¶ióM$‹Å Ó˜m?ÌÆsÙ=k�‹ð=´l™(™æÇtd<Én?ÐT†q—3_²&0e ÿtÁôü[œF»?àW_9ê±v¡Ù¨æè‘H­FP<ôc8nÖ¦³7 Yý �0°h4€þç\4ÐI�›Œ°Ex×ùct1ä8rGJèªË3÷®¯nn§Ý{úšÅIf8“¢ÃB„Ãp\ BTŸ"EÀ¤·JØÕ¼ À¨9^šôÍ¿M?‘T;§W¤×é§È(„3U;¾wF„ùOÛ£X®J"µëàØ(Ô†Ì-ÒŸÇ qJP|\ô¾Çƒ~‘vÁ«x‹«¶¶¬’É¡hiNŠñó‡`£Ô„§¥R”�ယ²Á_:—Çä4ævyÎN²>òj«�†gS%|™óÝ¢+nV–E»Ç]PßÁÈõ8 ÌÛ´�„Pÿ1öVHÚ SüÞ?( ¸hÇĆÊeñžKÜA�¥(ÖŽ À´…Ô7ƒJh vÆ +C£¤peݶ§nýVFÃÍŽ›-—¿÷œÔhïÒè’GÈaþƒ®cÖ:Õdü^Lø_û‰MLžÀP61wÚ M -ôšH}uaAÓ[ñè€0iÿi¿´¦È.¤ÙœUÝIBV{–oýY¬AÕŸ�Ò6¢!v¸øáƒ6Lõ UžÁÉ:À‹(6§„Ø,›(§x9x uçÇIK$mt®œ&¾!¤²#^­@aæ3õz‚;0£N0Ø=+„¡ç¸ï!}uVŒÛ `gw¼œ<÷Ɉ�ºåïwpŠú¯[…êÉ 2¼Ü±e½ Šãçu<¡ÀÙayÞ‚�ÊèëöÛï÷¿üíÓÝÿóyÿëï÷‘fÌE�9q¤yžlï0ì»Ï;¢š´C®ˆ¦wÄ�¥—ÜÁQÊ,1³\Ö:'g¶Ì£ªêè8ö .0/Ï}0«9ìYþní‚Gk°ã²éÔ÷“_˜dH6tp :)É�û.NШPL::�(£E`—{Gú|=yî“RÐá(”Çíä�Y(/›V¡|¥Ëñ(Ô<Ù…ò ½™ü*”塞³Pt4ì2™¹‹b´<®k^P `ÁHÖê„ƼGç¿dæãWUdP�ü†|ýZTÀ8™ßIÊÖ…ÙøGî^N6¬|*Xõm>+¶©à¨á<¿§qâ}‘¯¨—n¥@v l"æ™óþÈáë îES…¬¼s$º£.“Gáö\¥üÕÝâK}¤RW·ð$¬îP·dÌ$¨ë„,%ÚB]ݲOžûUkE'âƒtžˆCö3&3x æj>l0íÿãä¹OLÙ¯0T «¼¢*÷×x¿õW³S0t¶ÈÇ*c’{¼ iÿ‡ˆßž~í“�æë½&ð¶?n¯'­?<±­`â7Xµ4’áwT“Œ"´žñ¿žLü9~�œÎXFÖ?n¯'/øýyy}ë”ÿARߪ䧧ô­AþŒùÉüûVZq¼ûÍØoÆ~3ö›±ßŒýfì7c¿ûÍØoÆþ?elw÷¾ Èù¥Ÿÿþ‡}èîu7Ò—]‚ ÜÀžHº‹úº],_|”|¿�íÖ` ÖÆCT¡VüŸ„°�Ûåûõˆ“òpO†øð@òåÞ/°qîñwYoŒ°Ó÷¼]àdcÛ¨A˜¦»Wx�ñ?¾ìHrŸðóŠž^Þ‚Ï<æÆô7q1nÉV!�þW9×í/Ø 8Ýþ­…Ã_~ªv!g5Ê ~Åaw]�<À„?N˜î‘¾€C ‡©•²Ç‘0W�œLq…V/ÿÒÏþˆW*!:€ïY¶†u¸gÏ}æJ§»•²ýÍ8®e;œý£—|8Œ”DW—ÃÈX ¬Ä•€�šåðñW"cÔáP�}#€“Cñ„ ÉÃ<é)”ñÃM3…d¨0«‹w÷p®éq³ ÏeP®lÎ ü(ðÄ0?–à nG £æG 3†‰šÃÆÕŒ�È yÇ@`&¿‚rÃÆ,?A†úBÝá ^ÀáÇC9‘gÓzJuxô˜ô‘äÌþ/ûÕ’Qn÷}о@7ôÿœ§‘AÏYd¢$ö³=ŽÁ[Ù*·Õ,²X¤„¥›Â{Á†^ÀU3´¤œ‚›qN5®³ÕQYl"ª˜Ed +jÙŠ›D�Å6hðïP,Ã^!SÑ­ j õ©†…C¥R€ÿ«”=‘›§©Ì³’:6À$¨yÝ£bî„zßYç×m5æZ“£"(à�×}zš9Ç©èqš¡Žk&�7Þ¯Ûtü϶ΛY”eëô•üЉËYB¹­E�Æ[1æB –bÜ3­‰N{s˜†a»KÁè·Þë ËZàÚY(|"”jà6Q8Í FVß0ªºQòÛ¹laI·ÛßMúe�äcó©ìƒü;zòÎKKyë8blb[ /tí4Péw®Ç•Å +±ÞƒL§MÉÂïÄoݳ`ûÿùú×gž�›9�‚ýÒòŒÃºسeÖ ¾T%©9a<y ôb¸Ò°JðœnH‡ëú—2<ÇÓ…x“*e·SÑD >®Š7‘Êv¡{™ZLyŠÿüZ†øÂåÔÔÞÉ@åyôGd,iPBìÔ"«]'·˜Þš{ÓèR�°�1xÚZ4’(;›E#Ýþ²OQºrÝÿÔâ×Üd�_ïé©Ð‰®:ÒeqñA +ûvòA)±u>1¡uó�VË£'å`øHïU¿z/ióéh÷A›OG;Ü6_’æK£ùü4ÿe÷Ñ‹°:çÞË™z�ݨƒ+¤¸d Ê…_7e‰hŠ®T*K䎈ªRƒVÁafx«HiÎ8›ÓeiÏÜ´=»´gõ£?ùØbíOµû/ög0”¹5û„¹—ïè@®‹1¨´(âÑ!²ë½¦ÐoŸ ÃBØ+ržPÎ\À9›å&¤³$y?tdñ òTæ€úŒðŒ©9×ÅŽ`JóWÄ�g @g,àítH‰¾?M2rÙsŒðqŒn >\m~}˜O "15/S‹Œqß¾VðÝMÔkó>!aó(·7Äv…`˜C¢[ƒÍ× Â5Ù±‡ÛÈ2*!Ý�aȬCë +t-U’kNÈa�Uá‰L]d‡Öƒ£låtLõu”à,ð« ïôrPvh™0Þè넼¬h¨@—Þ„WAù¾JB'(ɽC‡� §òV7_á:Ðû¬›¯õÙé,³Hߨ}³u›�©r +_0uC6žÇZÆËýj—m"¦HÃÇ絃7Ú†Ûbêôë,2«r~ÏÕë÷ª¤ž!ñà ?¶g�3÷ûå’Xît›ËwÄxÆ®€zÆ.‘º�VÑX†©ëDÆdöy, ŒØ'j¾@ µˆªBãŹb«¶Ùüñ¾|ß5Ë&ëÙ,Ò´S-¤5ÝUÛßï'�ÝIÛ)²vÈl•+g;áISjŸíe­õ.ïvÚÐa f¤ˆ¶�ÅÚ@ÃkÊ‚ö+ï°Í77ŸWsè¸�Þ~¶‡ð€TZØÝA¥„ØîgêoÝÁW!$‡Ý†ƒöaÎZ-$•Õ„Zð¼�½”¿é…´¢ý0�r”Qw^tœç¼nŸ %ãò%$/Ž­ì6ªç–°ë¨oÊ*ì¶Óp¦¨C0©U—�ÛIHÓÿº}‚N¢þÉ_»Ïw£ø'³|m:ÿÓô^{ÍÏì5?îÜ×ó#[Ìeø—á_†þeø—á_†þeø—á_†þWuqwˆI+®ßòë¿ÿ1¾éîårTÌu‡,ÑxÄ�~\Æ¿}ÜøŸÏ’ï�ð¬�÷Ìò3>Cmø‰ŠCq¯ÛÃ÷§k Hy:L” È£BMògŽÌ<šTül"p3:Þq{4´o2g¨—V8Îî^BÆÏ(é{!mÈOô Û„ Ëò­®€’ã8etg²§ +¥Öpv0é°F‰[ &`~E—¦| i5JüŽÅ9æ +¶ÃLÀ3 BŠgÀ”Ï{IIe,úqdÌ·Æb#ȵ’xù‡ü +9arkF5>ù�#_z2ñ àØÚ(Ùx (•²΀kÙgtGÉ&bä„Î:#FÊj`) ¦T³Düˆøk_FE"%µû³}UJ‘|µB=eU™ñÇD‚$*½ï–Øäãã<ôp¬óÐÉ#�ÐT>B¡/5½f¸Km›€|˜Š˜¦b&�­©I€ª y (“_ DµÁr˜¥' ¤§/U0šÔÒ ¿<«ª8;²“<‡g�Y¾„Ö;iQµ)¼•jD59[9𼩴åÔá:‹D Õæ¡RY4¦’&�-µI9lƒ<�ReÔ3b*¹•ABí¢¡8Õ�P`è¡Ð*Àÿ��Od6NÓKô¨„Žu&•¯z`6U†µ6ίÛjÆô#—ʰµ¼îÓÓLß8N�ÓŒs\39¼q~Ýþ€ÑCö( 3ÇZqÿóõnò™ãYë6�eòN2ÛdP¢»[¦n w¦ ¡€BQº˜V5°½!öÑ~0ÌÀÏÃE\׿”!eÏŽ÷iâ*Ù•ePMXø¸ ª‰¯ ÿ Ý‹B5àé¤Ð$yY´Áõ$±d�Ã<²K¥$À ŒÈj×aÀüãkž^lºþ kx /kkx%i±l†Wº/&üeŸ¢Ô|ÝÿÔ¢„ÿúžÌØâÖÙ5CñÕŸÀ}¯n>(%öÃ'b½ uóA�UËކÆð[©~ÍŠ$IâV,ÃÂ1çætXÈ0y¢ø:*Ø)ÏÈ~å‡G 9C}ªR÷²r¦Þc7ª„†—,A¹ðë¦,MÑ)­²lò˜ªÔ UpÜÚ¬"Á:«"áÃP˜ÛH8èyl|Õ˨j|ËF˜—|ÞG +s�+‡C„h2ôK0”eEv ¬Õ¾ +¦KÁвÞT.Ò ã~u-` +ýö :,„i•ó€ð® ­@Ï—›’ذ¼ñYă͚ïÏý¼!TJ/µr}o0§‚qýÛljƒÉ–Üß2?!aÁMP÷&†Bæ^¼¨ã Qe›±Ä{¦¶äµ�þŽˆŽ•h=¯†×}{\s‚ í2Oh©£Y6¶~_“a¼úýjâ1ùòz,IÚ‚�'W)CçDÆS&ø|_u¡!”ä…À : ´x³xëU8‹·Þ�³Ræµy†vñä‰êMñøˆ�e×NÞ¹.ÙÚMÈj½ïp1˜‹àôYˆ‡ÓÖ»ñ=W¯ß«‘z‡„GüØÞAÒ\—wHZ`½Ë(l2O�ñŽ]õŽ]%u-¤±SÚ‰Œ1!&Æì“xHÇ* +�'®Û&�gD,ó¡…]°Ì5›M[Õ2Zó]•ýÅnºÈ÷„�È›ÇîÜ•\¨¥¹°ôç5.þ«qñ“i¾†ÃO ‡Ÿ¬È5 +~nüd].㿌ÿ2þËø/㿌ÿ2þËø/㿌ÿ2þÿc㩠ǀ¸k’^ ˜©Ôy6yMiô­=‹H>Ïб!_ܳùüåoA®çWyTµQ +3œ ¼nŸ Þ™³Å,ÒŸ®¶}QDûg~Õ4Ü|†Ž  šìõ«vzF4óüº�Vχ +aø9c²$Z?¦ˆÐÈh…´ ù2d@}ÖœMêOÐa!zxþ +¥/ë½àÆ¢ÃZ <Óœâ€gˆ÷4÷d€Džÿ…ë¥�QE[· bˆÊúðÉj ëKÆ2!{­Ã,ÇÇÛ7“�]ºÏµôë;—¬OM{û>:>/ÇÁò¬¸×GVbÖ9¦ýñöìqCïCãk›áÓеlº¬c»ô± +€`Jz‡¹sþìú<\ 7‹Ñ]äSG§(™ãl,×yÂ;ã í֡ܨâ¹ñƒƒ{D`jô[ÏGËtGÓwôÎ ;VŽ4ùçÑåÉ@3R¸6'Ü0-4t3ž Ëæ'æÄQÜC•‚*bßg×çá:¸\žÂîí5î_ПŽmÇÍ$œ¯”Ÿºvhb *ÝÁCýîœ=…~¤¨é*²È ½<}kccs" @pGsb¨1—&~êüž\H?¹T#PÉH* <å7§ÎæÇ‘P_P�x¡�€Z®P­„×O@µÊ¶ž7 ¾ÕC^€ÂH.PËqª1¨<6 *ºBÊ jëBÇ‘­åzÔÚü”ÎC)´Åcz¼p¡ ú –ë@Ï‘ îÌä]IŒXN�¥™r€ÃÊq9Ï.�%j:å�–&= +¦øùÔ°aÍÆUOO®‡;#w"'wªŸ2vfV{ÀaÍЊíÀaE{Ãú�ÃÚÑs>q¸\‡ÀÞä�ÃÆSć ²®Î¹ðÉuàpÓõå ý=±O.%å«m_mb:~^®ÏûvýØw??÷udŸi¡á +e¡á +v]ý‘¢g×�f6R, %UåÞÊ�ÞOÍíDÃrh8‚»šçáš,x¥éŠu%ò)øSxd`&€¨ :IÊãt¬þÞ*f¾ÖԈǼÿ@zü‚áV¤ã®ÇÿþóøÖoù{ºýûw<ÿão¿ýù+ßþôŸù³oïÊ‹wöâ]}ñ®½x×_¼/ÞÅðêe|õ2½zù*7ñUrâ«ìÄ™ÉD`3°ãqfË’áx¢Òê‘貨Ÿ ;`.À±–@“#°%¯.ýcÞï�ä +E�a„€½ýþ�ïߢ ’æ–�…Qpàùz㋯·;¾^ø“O>ŽŠqPÑÝQd¨ +½©¨“¹¨�ê ¥åþ´ ð'>ô^�Iº§whqU(¾58s›Pü¡rmå—0¬¥µ Ú’ìÏ?ÞþÅpwv U!ØÑa ªé#`ì4jÀÜhüP�ø7puw¶Ô7Ž�q„fF*`•®5z€U{£ÕkóµáëäØ! ü ”,Ž4\Rر,„ÿE­Í‘× ¾J—…™«ûÒi’Ó¹Å̘ŒEÇ[ŒD²€+j®H£V.EôMûªéŠÚ&CÐ8½ó4YBä˜ÆI[å½F F¡°@cTD>¹ ›]áêþKQì‰c™HSô…ÓäŒÁ�ƒA>³»=é|=ë­ Ùô§„`ü»v!9vK_&¿b0 94%¶Ñh£zÖK—MʆÕ|i)ºÌÁL®BYG•B! Ð)0XÌ*�á›2™Zõ¥d†;űޢÒùÏÊi¡ûZÙ €ž‹’ò� ~% OÓ<‚ ‹c(³Ä:oØo„ Òcyb'Â…èòWj» öï­5GH�É}Æ}ŠÑˆóG&Ÿå=ýƒòÀ§#zºÒ‰RÁ…bãB,ôî_,7$�Q‰óBèe¸‹×bîpü®ã׬UÔwÿ®…¹Æ·@€—�.«…2±kæ†$æ¥í®‚ÊêáHG÷+�czU^ÙIº×V<ˆl‚¤cÅ+DÐ`ö€å ! †ˆ« Trè¹ ·áøñLVÆa© Y•\í�¬ +" ΄†C‰·šÒ’RÕ‰M"ªŽ�d¤ê^ULC+¥�Y(]ÞnUòÌaTLبþ «q²‹R_ '^£~ØZ¼ˆÇPE2Ó*&u;d0ÆzØ( H`‘âÅõ]ä~™#\ Æ„+ÁÁ‰5°ü®cÍ©•€‹g¤Š.:Ù2l>ób,”iý¤YŇI�?f£åmè™ +FPÁsó~ÃÞËØ:FתÌsã÷ ˜Tà1ó O͆›øŒ–�çÁ½JÖ)g±œ®DWV’Š_�cÖäoÙû¾Ã‹ãª ”ðJ©ªžl0=“šµK#†G nüËl¢…_æè€¬6> öµ1Ïq‚—™A ­âNI²àe0”Z�zJ!c:)åÎ7P�|&jßg»Œµ¯›Frm?vù9ò*GÁ¬Ú0âø�›²-nà› ’aF­¨nKÓqÚdœ*ÓI¤éy8MÑð*v¶‘Iýô¹MKów|î’aͦŠ08ÔgõkŒé2Hr(ÔÆ„8)Ï!�'Üx§t±9òܲ$GžøŽÑRúÙ6¬¯…2Õš/ϽyAªÓˆyR�0¨L‚­ +ñúóÇ÷Khl¹ýR³¿Ôì/5ûKÍþ«ÙŽü~ù¬¦ˆÿÞ—aͶ#S ƒcYZ� ü4•cÁl+E×zSW†È¥Õ–†‡ÅØÖR|¹Ö-Ϩ§ñ�u%ÈkD >�nVa¶¨ò`±¬§èêm=U¢)…Ù�º.æ2‰pÔãàAÈhý°¤D|%â é²(ËÓÏÛv.DV½áîPúÀØy ÃÉ5H#ú„q™?Þ¦¢l �ŽõlB¾¥@¨A¶�Eµs¹n-=Ø«µu�)�Ì·¬Äqg¯ýE!ì‘y$ö{ß#܃)ÕÅ¿w1§)ÌÆ¼-äÙI²Ú eŸyd´±†œ¢^Š–Žè%éMÐï»Ysê‰5y7å¦äü4.Èe±”ìæ2 5šØÚj£l{µú ¬{Û3$Õ‡®×»žò|›LåÞÕÙ˜b2wñ2ÖpT¦þ´ ˜L’S|Ñ\e’âHÖâÄ`N-ΕU|¼7r¢ œ�óîyÙ‡Ã6I&¯|GWaÊÖ1æD}VSdPB(£Ænzä¦x6½t�™s“ßË쀭N©MÕ­ä¡w¹tï!ú]ˆkZ…0»Æ%$Ã_¯a*®AÆk¶\Ç”1›�Lo6¾!mÛSw¾WÔeΫ=ÈŸ’')¯–ã2}¶¢f_"ãÔ‹J)¯élD’�]›Y2Í?:–�?É\ŽÅU, ›jÞ²lòAMKR_ki«M‘  +‚œFµµ ‚"”$‰qæS,=þÇ~¹dY’Û0t+¹�ì£EQëñ´½ÿ© €Š]™^�=© +勯HMfä—™Ùã +RCþCÏ ðÙãEÖÿaF-Þf S/¼Ûä‡Ù†=ž¯8ûg|YsHA“RÛì,Ur\uºäô~›[. ÇÁ±ó©8Ï·rVu +Vs¼XI—±üëÔÀ�J�à6ì� �¢¥WÛÄdB:üÍå%“ºÆèÄiõW°w„û-žë³ ùé²N?4”àd”w‚»˜_̘"{¯ãÁs…¶X Fk‡�Fgf]½ª¼ñ‹³ÇÌmw* Yù’ÔÍö‹-àÂåoHþ~B‚J1(ËÊÙÊcJGö|âc+Í3,œ ¶p<†ÒÁÄų™6kv\?÷…ã¶i#Ž‹0ÿO̯’pìX|�XØè‚ôÎUn#Á“u‡nJÜŸ…¬–)CC¿å”¤B5.@]++ä¥�ùâ)Hò¸�Úë¹õC¾—ÇHúÃr‰*…5›2”åy—©ÍK‘Ø´Jh|² +·ˆ‡¨Âñú;H'Ôh¨Î»±,+„p‡6�‡áQ~¤§ó;Lܲ³�R )>0ìEÍÎGd¥rª·®iYc'‰äðð)�6ƒ&Ó1ûÄ£V��&¯ÐXnÜ6žXì²,:ßÄx¾Ž[.¬ŒúÑðÅi 0 lQjoÅIh»F?ËéW ²¼ôùF*B€Åõž öf#OvÄQóž|;ôÇ×mˆÎR ¯ä1µ$¿ö{ +c¤n? 0ÁÚ¨ìB¦G¶'AEiâMrmÓØÒ‡j�žDKÈød1aLü~tþõ˜Ïñ<•C¸êÁé]ø‚c¼«å»b ¿m:ß1pÐö­‚î€M²ú&Ø>�L’a‘2$²þ`Á¿®¹%¿<;¼â:¼‰ÑY`[g{Ì]Ô0U<"� Šã8wÑÉQszãy SNƒö+%à ÚµÎÆ/òÅyt�kÒÐ tB&ÆT%˜œËÑØÇ®9œ½«Ú®S­+mêWÛìßeï0DçÊ›�H¸S°¹©Qx +Åsù®W�5½ ]0÷� ñ÷Ãú\GŽù&ù­®™'qlN6Ò×­QãÓo>³W>³çÏ›pÑœÎĉв9QÁ«Xiotê)ˆR{6fÙîÕâ§ Ÿ¿v³_1ŠoC=Ge›ßõvc^c„Í Lûa4;­ɷÜWœÉØz�sWGäè0ÒÖ.åö:æL‘‹…y‚âÜã¨³ÈÆ&^›Àáã¼ÙØ tãpóê/4ŠÃ0P>ÃÈp-i Ħaò«‰,R&/–â ³TùQ™‹Æ$ÅÞ5ÒÕŸµÇ¼!JgwjÌæuÊ:¾ÁÇð œ.©¼!ÜìYÐÝ•œêb�è"Ê7þ¥-9oM’±óà,$Ô½€°Nÿª�pѸmÖY˜÷�2¨s>z>.�»FÙvw+œl.vŽíX,[¢J$Ÿ¾ÇM¼!å°/FG¹¦J2˜IÎ%I-§F©1C\b¢^–>-æŽâ˜Ñäbëá˜NÜQv¸¿@¼�¥TPÞltm›y”guš>¬šPÜw©23צ¥ö moBSðÌ‚ó±“Ð]VÆÛ>’WÖ 1µLjýˆù_ +1‘Ö*Äü€hÀ‰ Ú] ®×˜óe;x!ùÈD˫״DïsIM¥”ïpϦ à¦Ë¶®L;+�ÿ ô:Ï"Eê˜N­õîºÑ �ñ +Хͽ8!LôËÁ…φÿA»«¿iw‰Ô:æŒû,†ãoîFÛ/1ÃXÍ"v¯Iä{:›¹-ºýÜB©ñ„‚Në ™°¦|*ê8?iK ´Â~CCô ±¿Ô¡,�€‰¯qC ¶çQ43Þ‚½Í9/ˆZ¢¶£º09�Ìâæb“k:ùÛ4¹£¿hHÕgáäßÀ™£Ÿµ„r@ ½f+ìYäxPaƬA›4‹Êsg£¥`ˆÎ® †„惱䡘Iu)¸ÙÒjr ñ¥w&IA<ë1Ä>6Ÿ�Ûƒñækò/ZSk›šÀ�ž„tSÛ8û�+Qh°NTö[zó,¶Ëm¹Ì=5œÈÌ-dô˜‹yК¼›p³ÓQ2›N€�ñIx��¦…DCB¾…Ð »ou1›..·t¨ÞmòÃ7NîÐ +bxþ?¨ û¦Ò¢p™e~%í[<'-Q(Sˆë<¥îÏ8ƒA'ßÓòÛºùæƒ�µ›á>Ì�n¬fµúEÁ’T~Ó¯ +>³¤Rp�MÓLJdy\æìý,´¥ñWñQðssæWÈÇ"øŸ©¹�p)´ï ÎñÒî®r»«R¼Ïrlö{gÜZ�׵ͶßzÙ\�US—Ô^�žT÷iÕNH.¹^´M}÷¥HtÎgHÈÝÔðX2ò>_Ú¿ÿ0 Û5ã3ƒ"°Æ]{/ëå•+Èlz‚1Qñ}iò˜oï(s×Ò%ô“ È %_LT8+¦"gÔ¢53ÓM‚÷Pñ7ɲ Ž˜•'!&hç{ÌaPGóÙ‘÷ÿ7–[ûN-BnÊh‡I`qÑ£4Q%›'ª +žcV§] $ ìaŒ(4רÛYðvçùZ×[Iú1šÔJ;¥Q*À@­J)�5UT�Ê©| ¹œ°Þ9ï‡ð à–QqçQÉ\©*.�èòîƒÅÚºaÛ] +;éÄü 僈¾Œ±I¥0¼Pü‹›„øÍŽÌ¶_™Ð{ ­sq]¤z•=>_&A7Ò>¸Švá»ñ‹|…`ƒ¿š†4ôýðÜù—�æLÎ%Àï?|WK’ì¸ ¼J_`^’k‡—sßkd&¤ªwxÓM–$J$ùAåÔ‡n¦j§n…&º›øEÆýÌÌŸ{åîsþ~nrÞBò\¹ûDGCH=d?Bä?Ÿ�™ã´Md|#.©çé(ÚbÂð­§Fƒoo§`t]¦xÞ4#Ià–]Q‚Ã@ð|Š•ÎA¯ï¸g.Ásо\˜™:�ùNþIè<¾JêÄ +K/�1éõ0ÀB‚f;Ê; žÆÙ6§&«Kbè´¨Q�};ØØë�äJÌw¤hü“£¯Ôî«%�$ÉÅÆbPWe³‚u­mäŸ;1™w> vš +jRËÂÎiá¬O%­ÓyGö5 ¤0óÇâÎ8[7îÎ`µp=å�’ +?Y-ÀÎñ"ªý$Qo�j5'_LÙE«¥§\6üBÒê°·Ýã")ªÒ3ËÃüWJT¯IÿY•qo  f¶”[xƒÆÛáBXØÇý�_�q«ÛË kíßN«ÝÚ[~ꯆíôÇ1~¨ßIÜ,‰�œx‚ÁF(wí¤ŠâÔ„ì¼ (šŒ«pýô¼û¼ãÓw-`6ØÙQ¯-cå� b�9ÀŽ+�F|F´!$¯2ËGe‰‡ŒŒ£8íþàóOƒÚjS›Ç_5®ªÿq×AsˆƒÞÓ5™}·Q|6Ÿ“ÇFÇ=¸r…F–Š0Ý.!Û†ÎJÊN”‘\°¸Ð7 �?¢g­ +o6Ö= “ØØeÚŠB›Éå9<6°¸75¡WÛ‰@¶ëÕþÚ·:5êyrlO$:8\œ*¬\b²‚8 |Únù°ªMñÓP.WI0©3XÑUàÔűãΟ�•¦�¶pAÏ^ƒ;•¹Æz ®Ñãkó½U¯qPZ�²­Ž-ò´™1ºAx8ö˜í–kÜu7½–�%‘ªˆyÞÀÔÆ×^t‚¥<Ú¹pdcáoT�ô�î³¢´_h¹¾¥üZŠ—óð'ió˜`DR=pì“ØS¬,^8Ô•*Y„j¡q>挂;´>¨.Æq@«PÜ&UòáoôÃ�ûáoóOöËßp/Cf_þ¿ü�P�Ó=Š¥«!­Ž_�6úÌ—ŠÀY™ö¦ÕDƒ¨ÙU{1³E3óž!jQ30¶ÏÄ�>›=2.I§SµçPV’”ëd™dz+f�‰mÔìÿRî,©.Bù5[E4ãJ[l©O›,ò1d +¸âc�þÌ%9ô'À(ׄØx±1¯xú¦~t…�Ó¹y•ѲSÆiN9’0TH‚ÜÕS°IÓ,ùr–yÒ³J#æz-ZMWÏc{&@Ù~¯lz«ŒÀ¯k�ÃfDñˆ,x¦¥íe¬îŠ÷«†<¨µc¹2p ¦Ík´YŒjõÓŒÏd—×t�à¤F§ÜmꇱíRÕFâ£B?)ÈTÀ:¯ÿ|fçBº‚HqSÉ'(H]Û�΂­Þ¬ +Bñ·€·$¬¤ Ë*®}š¿`s)ÞƒÔˆ–Kö´¯¸Øus?3–Ðm]Õúw²û¤ÒcK3œÒ_Tj|‘®)+0ÞÕŒ›yæåÉ�_5�nþñÁq1Þ㎶‚ˆüÞ !ÕÇ�Ž€<9�yͶT•a"l¥»É«­aÛ:ެ;LDÏxïD[h.#ÀÁùoÎ$Þú•Nù1^K§ãÑ$®päÉè» U±Ái*N†3øñ¡ôó¸•7ÈAri?Ÿ¬F£v¾ƒÛ<þ ny;‡ªWC/8m•\W©úeQŽ‚›:÷N¦O2M¶­ÐQ°F>y0‹ -œ[œ´:(çb8;Éøqù$¶ž f™g^X5Þû˜ý£@ÜCœÎŽ–¤„+´\žÄ®±ÞÔ)˜Š4'—; }º|?à$ ¡ÁÑVcpåOB3ÿ +npœ '·Ä?VJ?_©Ì ºÑ½mcÿ|·ýÿ8�Yö;«±~õá«rÇøiÀˆϟֺÁ¾%;zÜÓ¾hQäÊX™(’éà<‰‡ÚÒ‡Å�åy§~¹ÝVs3Ũ�œrˆ÷â|<Wè2TÚ)ÍýôTG±#›9ÏjO’<¿Ÿ÷¢ËÒI¾`:¹‰¿~äΜ¯\‰%"°…cÖc%D:=Î�K‘= ïAïè�:-óVm\IZç ;ºéñm€›wwîÎ02i-ñø•Ñ¢G¿G0™R`ž„8‡´ f@' pS ŒÐ,·èê`$-Ø�Ða�€�²…ƒ¨EuʨRR>�PYˆ¸/xøøya,…/> endobj 372 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1284.596 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1283.5959473 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 373 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1396.149 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1395.1491699 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 374 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1424.787 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1423.7873535 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 375 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1177.828 983.061 m +1143.589 983.061 1115.734 955.205 1115.734 920.966 c +1115.734 886.728 1143.589 858.872 1177.828 858.872 c +1212.067 858.872 1239.922 886.728 1239.922 920.966 c +1239.922 955.205 1212.067 983.061 1177.828 983.061 c +1177.828 857.872 m +1143.037 857.872 1114.734 886.176 1114.734 920.966 c +1114.734 955.757 1143.037 984.061 1177.828 984.061 c +1212.618 984.061 1240.922 955.757 1240.922 920.966 c +1240.922 886.176 1212.618 857.872 1177.828 857.872 c +W n +q +0 g +/GS0 gs +126.1879883 0 0 -126.1879883 1114.7336426 920.9663086 cm +BX /Sh0 sh EX Q +Q + endstream endobj 376 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1361.726 983.061 m +1327.487 983.061 1299.632 955.205 1299.632 920.966 c +1299.632 886.728 1327.487 858.872 1361.726 858.872 c +1395.965 858.872 1423.82 886.728 1423.82 920.966 c +1423.82 955.205 1395.965 983.061 1361.726 983.061 c +1361.726 857.872 m +1326.936 857.872 1298.632 886.176 1298.632 920.966 c +1298.632 955.757 1326.936 984.061 1361.726 984.061 c +1396.516 984.061 1424.82 955.757 1424.82 920.966 c +1424.82 886.176 1396.516 857.872 1361.726 857.872 c +W n +q +0 g +/GS0 gs +126.1879883 0 0 -126.1879883 1298.6320801 920.9663086 cm +BX /Sh0 sh EX Q +Q + endstream endobj 377 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1177.828 688.248 m +1143.589 688.248 1115.734 660.393 1115.734 626.153 c +1115.734 591.915 1143.589 564.06 1177.828 564.06 c +1212.067 564.06 1239.922 591.915 1239.922 626.153 c +1239.922 660.393 1212.067 688.248 1177.828 688.248 c +1177.828 563.06 m +1143.037 563.06 1114.734 591.363 1114.734 626.153 c +1114.734 660.944 1143.037 689.248 1177.828 689.248 c +1212.618 689.248 1240.922 660.944 1240.922 626.153 c +1240.922 591.363 1212.618 563.06 1177.828 563.06 c +W n +q +0 g +/GS0 gs +126.1879883 0 0 -126.1879883 1114.7336426 626.1538086 cm +BX /Sh0 sh EX Q +Q + endstream endobj 378 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1361.726 688.248 m +1327.487 688.248 1299.632 660.393 1299.632 626.153 c +1299.632 591.915 1327.487 564.06 1361.726 564.06 c +1395.965 564.06 1423.82 591.915 1423.82 626.153 c +1423.82 660.393 1395.965 688.248 1361.726 688.248 c +1361.726 563.06 m +1326.936 563.06 1298.632 591.363 1298.632 626.153 c +1298.632 660.944 1326.936 689.248 1361.726 689.248 c +1396.516 689.248 1424.82 660.944 1424.82 626.153 c +1424.82 591.363 1396.516 563.06 1361.726 563.06 c +W n +q +0 g +/GS0 gs +126.1879883 0 0 -126.1879883 1298.6320801 626.1538086 cm +BX /Sh0 sh EX Q +Q + endstream endobj 379 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 954.422 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 954.921875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 380 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 591.697 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 592.1972656 cm +BX /Sh0 sh EX Q +Q + endstream endobj 381 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1610.254 563.06 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9892578 0 0 -684.9892578 925.2644043 563.5595703 cm +BX /Sh0 sh EX Q +Q + endstream endobj 382 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1115.734 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1114.7336426 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 383 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1144.372 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1143.3718262 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 384 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1255.958 401.885 -1 782.84 re +W n +q +0 g +/GS0 gs +1 0 0 -1 1254.9577637 793.3046875 cm +BX /Sh0 sh EX Q +Q + endstream endobj 401 0 obj <> endobj 400 0 obj <> endobj 399 0 obj <> endobj 398 0 obj <> endobj 397 0 obj <> endobj 396 0 obj <> endobj 395 0 obj <> endobj 394 0 obj <> endobj 393 0 obj <> endobj 392 0 obj <> endobj 391 0 obj <> endobj 390 0 obj <> endobj 389 0 obj <> endobj 388 0 obj [/ICCBased 87 0 R] endobj 368 0 obj <>stream +H‰„WË®c·Üë+Îè\6Ù|m= ² +‚�ñþÂÎ,lãù UÕä‘47ƒ@€Ä_ý¨®n¾ýëÓñöÏOéøéoŸŽÛ×[íýLÉŽtæZK¥œÃŽ2ýœ©ýzû÷ñ'–½ýãçtüçÛÍ’ÛY½Ž9üÈϹµçáýeMíå´R¬�~Øhç´:ú(Çû·Ÿ~9Þ~þ’Žo_Ž¿ÿr|¾}^êX=ú˜'6…>ÕB!ÇqÿC¡XQj®GÂçþòOœ— +�™¸êd¨ù¸Þž®û„3ß¿¦ÏñíýÏëštz¥“J£Iíì³f£èo(õV¤‘~7~Ï,ƒ¨ÿðþ½A%ö~½%žæ‡5LÝ5\–¦ÓÚ<ž¿uìW(Hkíð™á`†®A-¯�¶qê�ÛÝS;G§_~§ÐOÏ�.âPÿŸîã!Úñ~{g­ù¸vi§Á{¸ ã̤5™îÒÈt„­sc6éó+??i=áJœ­3Îï–Ÿ´Î'ñH•5ºãVçe×hÿggo…ãêvä3b÷zNºn0.‹·£œ zßý¬É·€ÐÑ�%eÀ –Å&;}ú>0�±†UqòdÎeF’#îãl�z—s–%ý¾$;bª¾8$Ƹ£vZ�nJZë-Kóž¤lºæNP�60æÿp­Ñ>?�>ª“` +RµN +}ʈŒÿÞo+ÅxÖÓÂÚf{¼ü°$Ç®cm´}ZåÞª‹Ú™9# šøBºÝ;ÿ§O©5¤Î°hfœ©nC!””åRúbEfÈ5á½íÓ ÁFä2A­S{ Âè�ó5:ËÄu³pØÚnDL˜>FÚ@Š ÑîƒßmŒ5¦z9÷%!•ÛuH„' †pP€z�z]Ð@ÆãJ¢IŠ…H$¤J®!RYŒŠSYW€z‘FGÂ$¢¦U…+gé<ûhN@®¹ +U)Èû1¶¡e3Ž !áK[,f…ØÆ=5r¢‚g Äœ‚u / „ Å ŒÚ„Ý¥-�àpNÄ£m˜qUK‚–Á‘ ÐXÉØ¨2ã^eÓ=¡ãšJºB“Pj¡àZÇš˜JŒIÐåš ¼CšYl…�÷ÃS¤ŠÓœ!©'Yêi­<Éd9šÂçù V�•KŒ…C…@ù„3�Øn^ca­ÄŽ™æŠ )€§Dr¯lj“ɑרŸŒ«ÑxËCh®‚_Ep2«*ÙåP�[ÙcÆÝÒ–p +ø‘Ñä)Óy®ê1âB·"f™€è‰cz¢8#ïäÅk +sf9TEhXá‘à5 �³ÂÐHiê/Ö�êZ´¤JÒ3JbyäÍ÷€*‡C&@Q±ðQ8àWW€ØËSC ¬‘´¤ +M6¯Q`”0©j!‹öæi4�PUÜ‚“ûÐ\-YÔAI´²ÒM&l|ªŒI1DJmЇäbÓLfv—°?í1ƒ[¶�|lPѹ^7âŽI©ë;É€#,«±‹ý––ˆÈ)jV-‡Y,}E@M}¡×f|Z‹¬ÆXPÈ”àÂ3J¦1a¦!TÇB†€~“з«†Ä™ÂùΊbJ@›b“¾Æ™–Ä;Nž™A‘(ì(ïc…Uñ¦îæÔa;Q°ú:�:£chšc5hÒc©ÓW� ²“¢8…™š!xQÉ� �Ž#úÊÔÌ9& c™¸«Ó•y¬¡\ìK0iЕÀ" êâG¦iœqe¾óÐÒ8DÏ EV*04¿Y *â\Á?Ñ]ÈA¤äÀ†@ +(•&›Ð]»Æ"±+;ghF´9N1naÈ�Ä&„`™+¿<¯!Å!Ð#¥¯í‚½‚Q6TM(0¢æÐ>Æ*—TØÑšT"D펚•%Íu)i„õ4qÔ=jõQµª\\’GLjâjÖP›H÷ˆ…¼DÒãPG…{M,禄®¨O�#Šžb0xjR@³èxŠŽ à�yÕĪjÈjTˆ~ Uˆám5¶“ÔÌ÷ש6O­=Ì HÓWÛC:ûA nå’Ú©�T +/Œ ÒÄNSú:‡eU<ÑR´Î�ÿ¯6¡�¦·Ò-؉´Ç¢[T:ºz�2É4ŵ�-‡¬ZÕZM;»³K‘è!z€+v-Bˆ+â°ò¶ª}K/ø�:¶]“Cÿ¦Ë.d[ßóyÓý ×±²ü‘á3ïoÌâ:éú”ºiöËfôƪ4Û¢@ÓYG<–B³Èu’bpU‹Þ^s]Íy‹êDárÞ-Jwe½Ö‰`ÇMj¼ Ë]=”j‡ +ºéÑR#5¢Õxº¨<ª�N²Ü<ŒÎ»øÒf6÷ʹë¸Ì€¹m>H$‡ËR§ìÒ‰ŒJ}Ë%⇮&±¯ŸhÈXߣd�Á¢þ”øÉ7µ²5íêBÁç«—�fÿ(²3‹ž¢–уҘîRMíų«eIzrÒ_äËd£¹9’Òo~õøë×§Ù xúžÕ¦{ñæUXãZ6Yf¯Y. «ûâM�¥æô¾ÑŽ[ž¶ñäÚ—R7¾LÝuZ}R<0[»õs÷Öº� º;vçs1­_µ¶s, «›6»:4<íxP��ºÚçxÇôº…­Ü£oZ»âÜ8�æFÔ]tyžJlœFï}WB†÷P½CTã§¹ÔÃ=ø©ñŠÛâDöx»Ž"›Á€ÇhÏ +ìô…Sž±rñz¥^ä¥ÚÓ•—mö�—YE‰#V=fy¼T×I¸DxZÏ/=[\�Gˆ˜Rôr=^!ê« )£Ä£aá¡è¥0RÙ�Ô¶û/‘}~9ãYë«ÖÝK<¤Ê +mq½Os<ÿ²ª]¡?Mµ>«‡è"0óð5IŠ�Œ§+’9Bbª† ÌæØ+Œȧ tÃDYÊd*8ê9]6q–ˆÆ‹èª2ÒD©lâÁAø¾:ö34¯MFxDkYs/ëb‰oÙ”ù½ÔÜBôdKDÂÍà,ææCÜÚ"¬Xø*©°ÉÊÆ‚6[½¤µ0=ûTM¿0ûëqÄ¡SÉ6a3åò"“–8U–Ï…óìu{6ÌÔBOœ[¤“§º>¡Òtx¼`è]MÓõ¼+'=x×™€?äÝköÿó®<†ïfo¯¼ËG#Cš“-,+m.!º¬vÍñIÐÖ&t„tGÄ5ìqËÉÝ£àÒ-êU±v°%ÚEy:ÜÁt\¥ÒÅ´íRmIѼ³�[³I/$nT;�L .a§­Öp*ì�^´‡vñ½$F¼¬gåâ]´‰þ;¼Ç–ܘä9hšÀ¯z­mC +ÿùc–o§ ��fWä¹òÓŽMSº÷)k‡HUtÝÿ®l©3þ�úäZ/ Çôp>òi"¯w]dM¼„žK4-LÑN´V®#Óz¥­ûø”Qq¤&pÈÖQEZÆP}$Ʊìbëu­P„»g½#Üp¸«_ž !‚=®9\Þ\»”‘)`DééMµ†'iÌ÷ 3´©âD%œç»è¿ìW;’$» ôuйÀn$ÀÏy^Rï8¦º|¼ô&›¹ÝQ É6âÅZ"˜gA…ö`]wƒÐˆ]’Ç©PO§OÌ^à<|jÍ �Ê“/ÏTç0Î"Èd<“œïe T"zãÁOƒ¢¥•5¸Oà°& ûÔ(sf/26ËŒ;({}øÅÅÏË;Cª1óöõê&˜Þ�ŒS!eB³°Þ-΄¬tYå@î—æìøjæEÈäÞwËxt«ÿ¿E¼@f"#N*¼ß"V­Qý(¶Õ^L#w‘É_4X²!¯¹PÖC0(ïäÜÙÏrÖìÇ<@ KºœøÍÌRxµÄ&Û%ùþý:!ڀχÅ3ºŽ¼¹Ñ„­«sb®‡~§áÕêÎ�„ðF¾ôg™Öð¢ä%(„o* u¤+Ž#x)�àP¸¼‹“H2²ò]ô±DCäÆÙ['–�9 ¶ô©QsL¾Q\TCL™àckëtRa!—W³–ጡ÷�òvíÎ7mÂÒ±ÅlŒd¬d!c‚›ö´ƒß;©\âÁ MFðy= Ì6ê»à +ihÉñð¡²|¬r îìâ9Àº•F?B ¦U óÓ9tr�s XFwíw- (ŠÉïÃa½8nžŒVóõ$�·V–Ö*˜CË·¬|Z-Óá‡E´bØì„^|IkH4°Äx¨S/ä=8 +cRc‡@ÕP(”CX­º¬“·—å71>'E�±FQÏÔ~±ø×°7ž¥î��äãwC+-ŠÇ5”K”iꃈnl;¼zP†,×댤>:i=ì3'©1~q‹Ànþúl·õqôî+ú` dUkd»¨IÀ·Sëz]YHÍQ“S6ùجn/¬m×Ävaç¬øPšòZ‘]´x\s&ô¼Y>®•gzÕþPá jÑáÑ¥�pE™‡âRª›—Lý`…£5¹lÍ:­kQF“øô-'Ü€~At²w‰J +ÎE:ï˜<ÎÊ6u+1~© +ZÖ¸|]{«ŽÒW8PM>56PÿìÛÿ†F$©nœ´µÈ®ëé? ä±Ð¦ù‰E'à"?Žóò�#óy‚STÅîú/±›²<`¥(¦MÙGʪñ͸8àóà_­{I#YšÜ¿k°mü {Ã8Ôm �bº´ÇmSê 3xMx„1#ÖÎN`9\<´¹^®óN™éÂPR¯)J­g«Ö“œlÐÌsò[ßÈß(ÝÓ.sžçÅ\z‡º&í“ß`Ÿnɘ/¶“*H8tŽ.'ôfëòÔÄ“ª˜#eŽŸ@€ÜmÂ/àOû¥µ‘õåYáç`LdÒ_9íØ@7|S'Më,ºóú0Ꙝ ADCŠºèçBp‰Çسä¦Jwrct2ÏÓøoqÜàEj ¢2/‘XñÉÐ(Þ�¯ˆ5‹KNG‘ïÆËÅ é·B(~×åc5|©õ‹Þ÷åIˆp‡à£S�X³†³h�ÙI­(‚^P0À“#ÊLÆÐ¦ �P.6mÊÆìÀ΋ـ¡¤ :}5Bà)~‰Ó'a _ƽûÇĸÈÇÄ-¶ñcšÑWKb66ÂBú‰íKc¯]¨.ê¡DFq‡ZøT ÍP§>šü›Œš��O# žÊd}t" bÕË2œ¶æöèŒ�PàArÐID@ j¯’`ƒó¸yá˜��º£»äíÉÈ{ý¨íyáÄ2%¾DˆÂÌ”Pxûá� gÌwóð.ºNG|ªš®OdÉÔ¼>¬¦�ºUÙKýýÆuœï×™˜cþÞìæ÷i*دvq–:]ôÇ~>õ,VzÄ–Æy…o5XÜ8­ ©™+Ó4i2> çx€¸PƒE<34†!Ðö³¬.„>j`¢Â �î/&¦æ‹¥<ƒïe‚z½Ãu^°h>G!Îú/Dö˺77Ú oõA(�µ¨ýŠn¬êacÿQN?ßüè›}ó£ÿw~´"óQüÈÎ|ÅÐNUöãNcôÄxµóýb.^rŒ8ö¸·Ú걡ö¼TÞÆÈkuaŒ3{ +‡|tkêN{±‡®ñný/ +oð¨Mr2ãËðo³4 õÚ.� +˜V…7‚I3Ñ$èK fÖ�ÁjŠ�$¶ž ZOŸ5£¹$’ä i¥·v7’�bìKžNR¦JáR—Œ-4œ!t¢hëÅÏR™°ÐÞ�3P$@öÚøiÚÓΨ Fˆ¹Ý[²é6ê»à +#„öº@ ¦KjfÕ‚è·$œ[Ìvƒâtb%°+3Y¬v x–Øì¹´æ®ý\œ7>&¿‡å•ͤí•'€ÍL¬a@'wÞYb²ø”ð7ß²òi ýÞ‹b¢ƒª³ýýé?Y:ûñ´Zºÿù +_'C1ÿF¯oôúF¯oôú_ ×'øô–íy3çäŸWôi¯¨È~v«M¬mÞu½®¬"¥h bÊö�¢n2ŠÀ_óÇ—qåJ³Èv‘]´x\s&ô¼Y>®•gB'1*D-©6è ˆv†hÔÍ»}Ç +G3J�Úšu4Z×¢ ~§{|ú–n½©è:Ù$ñБ‡Þµè¥@QqvºÜK&uú¤§Ú¢ÑºôíR;Ä–ôê€w)hÚêÿ×jœÜ*“áÜ’‡†Ô¥Á»¤çòõoö«$Gr ~%?�ÒIçòž¾Ì¡æÿ×q3s*”Q™èK£�t©¢§$é‹-Ægü øùêß™w7„½(ÙŽîõ>u4éhvÆš�]5­Äø©.(Ñ;ÌL{ɉÒ-:P~ÕP¯3ÿŒ“|VLµ +å-×ÙyžØ/ÂEeÞc>âŠ;¯ +¸ˆË‘/#%Ös1Ô¨ÿYó§ëÎÀ³ðҰ*0hsÖZá/#qÀçÆµŽN,F$æþ}E�cëFïIÃ蚈²„N>8&®QTz‚Çp¦ „G«ÄÚa–ÍõÆG‹ëÙµßÎp¡\ %ÍšN©õ_x¬ Æ@ÞØ!¾Žî®w㘽½Û�ÓrFHa•/dˆÉ­wyI‚Ä<åëÎ#4=%¸”u-‡^þTš»4õ[ˆ:Ü¢ÂþD>‹Lk%ØCn$å–†g]=ˆ†‹3“»‰ŸvºzñÅ*šÖ°~è¯Ð² +Løb«¡¸7øµô×û�âñzþ÷âÑ W«A”6ú—² IDzS6aHyð1R©Õ˜aþoÈæ-«‚°QÛä71”c�í‚mKË4n„KÙ‰Ê:ë\΂º²^+Åë{³.�Ÿµ²6BÇb²s>Àt˜>ÀZöò–Å�W´9Q¿á€` ~WË ~ ˆTtÅEÎ@7½Â:°?Š�8NKŠÚKŽš�‡€øôsÀÓÑyøèJ…hõÜ7‰ð«L@³ñêÕ,òÏPUÑc,©½âO!ID¦ñ#«ŽƒýU¢1T×”È4S³Hu2­`“ÛP4Ež:ž¾ÅÎäp¨™÷¨P1êb_¡z¸RÍnDkÈ[uTÔ*�ÉB–KJ©R0�«@JAjIçHaÔõÖüU²”,¦�F![µ�0£ ’)èT$&ý\-5…!kÎYïÄe + +€)«ñß·_Ç!¾uP ؃Êö£ÏYØ›vDé)å^dYʾkîºú$åT%m¤W@ßûe#è¬ìå1>S2Ê€{ûñ&¯ÈÏÈd¼r¸úL¿s¶M+t~³¥õãqäŸÎa�¹:W‘ó:×”);I8†í¤HfŽyûÎû‘zV–t*l$É4NOƒ¹ÑUDY‘�Q’Ÿú#!|VÒœËSŽiúS]Ò ñ9�½Ë/Œ�8í9S¸g^!.Y—*-“¦òP‚í›BëÛ�_ú/VýeŸDšéµˆ-Í�«î´h•bæòo¢‚4wñ{㮯ê›úõŠY¨»üò/êkÛ]|-»‹¯5ßÄW»‹¯&ñµXj/Î!í!ûk.)0Y¨éWtµéÓ©6¦$›VŠékÛªÑᾦ‰¡©¸ÄW̓BÙ‚ $ë,�#6nó2•èªH¶OÙ,ê¬L祿汭ôø¿)Ë»ús”Y]ÕþDÿyÇ–,6ãW/ñx‰ÇKü^Âá%&îìW;v-7̽ +m@:Ið³ÏqðœÌþƒAU�¼-=MêH‰D\v³I¨O”Ú†¼¹‡�¿½KJF¹CÙ#† dÇÐÉ1Bô°ô;\½X¾ëõ§Xa?½þÓë?½þoôúØ‘ÍP³{í¨?kŸ”»I ‡þõG +ð ‘BìUF³H›˜’™Š=¶ä,ͦÙŸQÖ=c£8áê¸î¯áGœúI ”E•YóûÈþèYï¥a®ù……dµÊÖßt4µ¥+\|Ð ³6Z?†´PóÁ΋|&4Ó÷†hzì<>–iŸ Ñ2VŠö�Ú)âæ x!ÕÇ™ƒ1ÌwØ‹%;¯Ò»êçLO™�` =È^“�WÙ¨0±\�ÿ¦^|H’Õœ­FÍÜqñ¹?º´uç2·xÍÏý´Ì?̰ +�k±•~ƹËœT‹ö‘×{>š_Hlm(âRíâXÏ&Œö2�\æl5ÂÌ–Ã +à'pâ|óÑ,ÆÕ9»*/fuJú¢ÕÛâ5!½’Ô&Á�kŠ:·œ»¿a£O°ÅŒ-?£¦ê‚‘Ce˜ ¥ïñ–؉çñÚLtÜt>U‰ôX£�Št’íÆÎŽ9ZZµez)ݧµJ¹s%qs)(¤L­Xh0õ1YìN”H¸d>»£g¿Ï‚z¶�ØBÓ]0lÒ0´;þñ÷—kíö/Ê<È,îÁ¾Yt6�lƒŽª|ˆ£’†¥ôhN}gÉZä�%Ac(ÌÔÏ‹<#ˆï ufeËPÃV¹‰¶M ÝÒÓñ¢·\Å(á¹:Ï-QÉ¡Daй#l ÆöhÏ¥F2Ê z‘öÁ~hƒ¥©gÊ-{\:©¨7âz‚ª¬å¹Èp&8QÎLŠ ±-«Ц“çP5q3�èWisº²pZÃÌTÁ„BuºÃ3îç)F³«¬ümð|X,®lqø|Éîã†vhüiRqGL¾%«_™”LïB )½ƒ€·L£ó=œ�x‡1•CàLÇÁ^S Š×+î»OüÆ U,;·.œØh+C{Fê{Ž" ë~ì¢DŸ“¯{[1g.Ô +NrÞÿ |ŸbdØ5·"ÑA,�Ù�‘§\æƒ#ª:H&ù©‘´ ŒH“±Rfdhíª“vBKiÅ¢ `¹=,ÝOÿÃ<z½hĆ:ŒÄhæý`ì2¸=9'¸CŒÍ$wÐôà>ù×ð¬ß¡mÑ6‰dówJ�µ^Siô>Å3ÆMx5¶ÝzS’â€]Ÿ3à +…!�b•ò»“îÒĘ|_¡ò},Ú +›Ø+T1öôDu#8ŽÕÚzE•¤ÍˆRz“Έl½Ø™¥Ò[Êtó=Ó�uÔúc \T ýÊÇ>G‹M,�Am78ÏÑ�~ +rq<ôÊSÜ $íì⤠\ò¨iA$¯š¸Š<Ÿ^êPÝN7“ݵF<¿H�z·袹+òNÍE½ø÷œa;N_ ~QÝ‘ýO\¼Œê‚½Vüå[|ž@¼èãÌ¡zóê·’jMˆ«Ÿ§¶�ƒÜ`eþ¦ˆiðA¯L5:�«ñßd—àC›ŠÐœPZýƒJ+}n;²î\aó5ç5Ý‘«Ã*9=ˆä£ŸqîòF'Õ¢ÁüjŠóñÀq©w:D\ª]íä´)½{™yGÎY0GD°—]Ö X#£´ùh dœªsvU^ÌŠ®‡Þ×ê�¤1ªã]´ˆÕ�Z·œ»¿a£Á2Aâ2y +3õžk ¶ˆDÄm!ý.�^YkfÏn!¦é ™*–ȅÇø—Ö!ö¾Å¦@zºÜ¹’Z{)(?­S6ócj<ìhHõ¼&q­;1­?‘gmjÉÔ4Ò7JŒbdkyGg¸ä£L +ð-¯)æ¹”`ž!‡§€¯ÓˆÁƾ˜o§“Å·8µ+å½êBGdɨ¬a4ýãéçÛ³þѽÎÀŠÂ%'ä!Q¤þû×�ÞÁíëNÓÍÆìX±Éøø� ýðF)Q„zƩ̟!;V�zv’*ÅÓ¤Þ9²ÆÁóÄKéàAYü.+¡€Åc›s¸¢XcØwž‹�J±…Ð}?‡`ègÅc�Þwáð ëˆ­9{h¦â*°q w7ïb�»µI¿[ÛáA ç`Ú"XX°Q%)ÒmÉ÷§ñ¼üQè§žqÁ zƒ ä™ÔÛ¡ö1t|hâØÿ‰¢�rj€&9Ó¹·UK�':ê0Ÿ^¯¥ìµ0(go~œ�1±+A(TuãÊõ಺¨ñoÈÇJ€8R°g|½Ž/FPÌ哚ŠZ�‘Ñ|’C×%E‡"Ëp��r!I +¥·¥ “�«üc;•È7–J±”z‚)LPòGä-Ë–q#4 „ÞciÁ‰;í‡Â¡@�žRžlY¼^΀Tìþ~ˆLœ¾Tñk¬e g–Ô%(=Q\ëR¥Cï™§XtQÆ»`¹ó±Ý9SÛ�×Ê˺�N|ayj ]#!ºO‰Ž’~AN·Q*4»º±ˆCJÅ[ÿ¨dú‰q-Æ(E„÷;ê)¯�&ºJŸäªÉ'÷Teï,W„Ñiž"¯ƒQ¿ÄعDhõG@ Ü¿&¥[ +"ÉGÖNN—2É023X‹4c9¡�® ŒÚ#&A‰Ý +E�îVtUI?ÒåPÐ*û*Uá‚—µ!KcÛj +h쪱 ‰è´³Nê‡ä¹�rša#šÅ[¬ƒ\�¤~Ö3é¬Wapˆ²pcJPä•Í0L•Ê­…ꃤ-U¦ó ÕÔŒcݪøT"_�†Öe±§}ã4T�2åÈËë<ü„èÕ&zÚ{¼ªTî~åb5QÖŽT-@±¬´·ÿâ.‘Ô;Οý¬dÅ‚f íL´î…2juJ‚C Ô–.vñA–ÌJÕ¯òI¿Ö‘»¼’q®öÿcą̀Zð×7h»‚à#ƒ/^“Ó´íFõ1T¼DXF¿^• äN«vÜ»úb3+œ`¨Ý‰öqÇ©¤K=¡ÌÕpIã‡þIÐtªQ.dXé˜Bw gÝ‚Ìÿ±_%9’ä8ð+ù�LH¤ÖuŸê4ÿ?4ÍŒ®ðÈ5‡Á]ˆK¦’káb4cÊ.¦ì"3ˆe`øè�,ÔÖ‰ÙJ{$&üiã†]s+Ÿ•e4ÊÕ€æf�,É$«õh�¨Ã®úéÙ€Öf¡íê©£pÑb©vQ‘–šíÛÑˤa ˆiV–->£ßšÚ•+÷÷ÎMëT��—c”Áö%b nxñ¦^¥•Lù€ "1±7¹y±™yÝ|c´ñ^aä Û¼`SÔÙ�¿ñsÙŠåØœo %×NRq¯$ÊtŸÑ©€GÌ,XñÅž+sWéÅœÑ5>ú¯&d”\Žq!¨ñJ`!Ñ@�çÄf8»påa8èžÅ_*Î/ûŨ_ŒúŨ=0¤E¿0ü…á/ ÿ`x ÌóxÑ÷îÂý€d‹—4QÓézbù,™@`¹×=Ï>èíwìŽ$8Ð=ƒ�‘‡µ`ìSx+{ømt°0–¶»eÄäé4ÛøöTQ„x üHàrÖÆ ÓPá2K|�\Òÿ«/îÑ*¾çñöÄÛ×Ã2–†H<Œ84�Õ©@Ç£Há›gÑBr‡ÖÄ8Ü£WöÛØ7ë5å¢û'K�J0†ù1®uqš?¹9݆õô#ì×€šT‚Ô ÔÄ|˜1甪 ö.yFÉu]5¤=|ðýj6\ZÈ�>¼#p€öÒ á_¢6ÆEZV4­q�Z¤laÇÌ÷8·{¿gÕ’ÔJ¶@t¦—ÄÖ½=+�8·–FS¸°Û¸É[Š>pÔ›íÔ@g)ªMÛ}yÔŒK�†¾‰×ßSÑW%0IƒÁ÷CÍ¡ÏËP½FʹèL+¿!ô—zãõôsJSDç+“’f=vcþZ@wã¿YM§ÎÍfR;‘ÝÆ€¥zÁýdH0®3—ºŸõKz2ŽBR…Õ‰ÑF .ÌqÞòX/Õ¦Ñ‚Ôø¯Ã͔Շ,nå§mFˆ6»v+3}Ô9k•] XÖŒä ì¨}OA__´­sv³¢�*hw_–8™z»r–n +¤¯Ç¸|Lt–øl1b«ŠŽÔ*@Iì]`Tä²¼ÂßÕÛ�©±fÑîìƒ +d(ó¶•$Wcg�޹µ»êd¼©o¥?egË™+Ù¦—ŒB†¦cªÎäÝÙ‘‹*`ņˆgúè.Q°Jno¹Ü’,5:pŠÜ€dàtr8PÊ +²ÌÀ:/®MÝAf ¼Ð™2JëFú}§�óíž_ZöÜQ¤‘X@°fµ={m×׿X4ýn㈠©¸ó•/Ëð4 ZTj&¬Ïù &ÔœÝ"ÆÙÇJNÖKîGq/òŠ:'�,¥ÉíCë`MqxÒÌÏV!_`+«?ÙP‰¢½|íÔtS“­j Ö¾ï +®Z~”³¶ŠaH3Yn£Æ"uG)]m@�ø²�. q»;çšd@E§¼�%Ïï@~G�&ùÆøØ«>‹£ÕÏý0¤pÈ^ÿÙ*ÙkΨ«û�ƒýÉ +�7c0ù-0­‘æD‘fņ`"™)¡ú7´ÇI³ÒƨªöG|º�p¤«†+“;­)›èš7Kq. lŒÌ磹ŽC®I\ÛY€p·)^ˆ4ʰwÉ·8Ì97�üNhÞ'––)ÒÄŠ•=,l5ðg·Z‰F´ð?zñ£?ú³ùQ0"dCÿ£žÕ8}ädôOÍ¿ ôrÐ0ä« \:2`ÔL<ï ZMªŽd[ŠlE³(‚”غ&@Ð2yld�æ�HÒJ/­.$7Ú¥².¹;I™2…C9Kh4ÞW€àÅ1ž,ðH• å]0Ž$‰ D­ùGÕš²=4!úv!lÈ¢¥WÏwaªWB¨MвH0]R³š%ˆz ¹Äl(Ž+�]Édµî˜™b³û¢5׸]«hÍ&ÎÛß߇ÍÂeÑ”®8lF` /´£pÇÕËAL&¿þÆ)3¾VÓ7KЉ +ž˜é5ÃØùÞ†¼ã˜há#‡ ÓeTz:>7ø»Mü^Wgñ{Àcçu@d'.êŸÄ®qg„¾å(¡ÆñcvõïÁÀ¨gæjçÜ6Üéÿcô}%#ͦ¹�ŽRmŒ.(Zø|'u‘Õ)¢䥂ø8Ò@‘)s€h6ÓK ‰K»rÓÆ^\ »�%@¼—q.ðhŽ<"¿Kòiðh$Ö$'ò1®ÌQ£"±`ƒ“+Öö3 8Ä>~'RÏÈõø”ÀßÚä¢10Sy ð”ŽF�â�MÇUˆž˜GA-ΰΠ;P(x™ÿP|ËŸ¼Á¯þ@j´¡ˆ®]"ï-õœÎÿÏ_·ùO>ó4¦ÿ¾{¥Aù¬¸º=qóõ°Ð:/¢n@òdæ�¾Ø$‰p@H‡Ü$ý„UT4-“8‡5Ò'³‹>™¦Õò"ÎYÞ©Mr'çhM×ñÑ—Û¬‰[þs±œùßË4¹ý~ÈÞ í;ƺù=Ðíæw«ëá÷1n÷‡Ó�ãŸÏQÓç�yù\V:zømtóhØwtsÄrzz|tO†"»|NûðûG±~÷=€Žÿ&e'8Ò/ ùWM´Ê½£^@ó{ ¹¹mEÙŒ ·ÙµñIè´*¡39@g‚ã*ïð™ÁHë×Ã"�êÕ:d�%ClÒ[ô´6¼÷C„œZI¸B¶ƒº•©Dô­ÝõiÁ÷±I¿ \Ë­]¦1»Ù |&4‚#ê·°h�º.þ fÚ`¸’ºƒ©i¸€l¼�Ÿ„(¯Â(3qg†dÃSê£ÒE©ÔiYÏ<[X¡®Ä…ª,*–ÈF±�Ž}â_çÊQháŽi„”ØZ9ÔG"øüŒ~£6ˆ=ƒº¨¤ ;/Ç(郞†uRØ™òªÒåY-@ÓðÕw‘x íLØm ¾IŒ�hGS*ú‡D öÄOQt½M‚•’4Õ’°d7†’k!Îp ÐèF÷�÷]˜Y:°RÄΕ¹«ô’ö¹¤+¨Ÿñbõ\ÖÞœAâ•ñù"»¶iÚmr®ÎuÊ͉ûÈb‘{[›òòÇÖ~æßÚw@�ê YmOýÉ+k´ )â°~·%¾Ò~§EíÒ &TÜAQH®À΄ÿ9Ž‚�Œ³[ešYª4È`îTõ‡ðÚ¢·L +Å9éôYãgmh¬)DaÒ¶ +!–-w¬þd÷ѲùÚ©é¦f\ÕB¾ë ^"–¡ï3£Âžüº*s�Ƀ±=ž”¡7²äÔg~Ãj.Y»ÆŽ¦Ÿ§Â�VxŒ• €&-K×Xê6–vôSåâ M|¨�>µ1`‰œ0Ò4ˆ\àH9W¤ûí¹ +ÓM¸ /ÇyËc¼T›¶‘X~þûUŽ]Ùnó¿ +m u8X�Ž}؉÷U^=µ¾§\I7!ðñrjÈr–÷yq©ù aBWˆW³º£ÍìèªâФB?ArG‘évÆc3ëâDOXúkõé£Ô¦±ò¢3ËkÊjëOpïþ Ñù3ç‹yÃô.õVB×A’Yä‚ëÀóoÁõ`i¸¾Æ&´é!÷0®Pq�/OT ��œŸ¿ç} +Šê>]Û“k…¼® ‘tµb¦ºÕÇ$ݰ‹·N,Äþ²kL7þn ï¬M¹(nîI�mêÏñžuGwèbÕ®n~«é£ Ý¥ÒçÑM|ÞÀ×IËP ¹/¾÷öÉÍ{g*Á^u¡#²dTÖ�ûýUØÛký}üÞìÝQt‹ Úã¼ÊÅl tÞc:&Õç¯W"x[[ÊÍÇkÚÕVOÜ[)1æÜ52‘ñFOaÒU”¼Û§¿ÄS×x§Âœi¹o6À ÞLßÿmúæÌe�àŸÇ‹WR…X±ºyôz­á|bP�!� +�õ|‹˜ ¿†ŽYoõr +>2VîrË¾è™ dÕk¹ H.×uv|‰Ö¼×(Á—2ÉEÖBêbxôöìDm`t·’•ƒ2"ã³à TöCê=CBY?쌦¿Õ' p–  ö’(ЛV˜LãÈ©jAÒÁ]¯Ë`½V¤”$B›„mpÒ�[‡Øk'{Æ@]ç�¡Jʧ¦·;þTÅ—ù&7w¬žØø��Øø��ÿ6,•N~) Zú‹¡+¥ÛQÅÿ£Šñ »L(Côêܺ¬jïóY½Ð²{ë1™¥•iþ �&Áí´ª´÷þâ.^¢¦¢ö§ŸõX¹àcÏ&rKŠò6÷0ˆ‘?F³”âuNìš:h&¶u­ 'âÝÑkëiD\ë<�…†²ëª–(›ùÏ¿¼äƒ\y€ +Ò}}—“°R c­³ûW8Ç!yÚÀi›š{³ÄGŒ »È-7YDܳmÙJtM+ÛÔÐH ðžhµŒ@F ^u9ÇÖ<\Cþ4˜;ÕÜ>ǾkZF€hf6LÌV)åaåÕNFõ˜’¬ÚCv°Ž ²Ê¦!„÷Á�r¢½Ëõ¡Ñ f‚¯Ü™aÅ�Æa”ý¹0#æ�òÂÏ‚†%Zå²}³ÙP¿¹µ#ßû™{kÂŒoCÝ1kbÇ ±Œûžå˜PÛQ�qˆ°UG­‚ë;õhšÖ º¿¤­S-«£îÚñ‰�ó}ì Ž¨üü×qÎF ô:¨¨doT†«;þ�þ¥¨_jÒãbÀ™d³ÆkM6�áRoúBI•z:QõŽQÿ:)"´S¨�\`n8U Û×7жÇmßÁ–þCgý,‰ÃE¢»è 9ëD_Ô,ê£Zø ¸� HäQ®ç"y5‡¿šäo@<'‚.wò ­6õP¹�Õlv3¹sd:ï½£ OÔQ6$eØ�Õ�÷d31`¿ã‘fE�’!ô|ÀƒL=¿L—€P[wÂQHñ!Â9Ô Š&Û|ƒvÁ¡@×T`IøƒµOÓÓwˆÐ³yM»Kïšå¡@5Šùø‘T¿•Ú� +ϘU¯i—üñ·o8‘Êðœø7šb|Ñþ©K$( ¦ÄçóVm‘Ï¢J�&ÿEY|†Gs&À·cá% ®1À&Ѻ—tÍi_#§r”e ¬àÎ˯ͯA-ŽI/C ì'h§ÜR©Rö:õÏ(=NrY“©ƒt.n'Ñ�k}v£ZÑóðü…D³Ú*¤Uø„sË‚SÛójÓ³ Ç�,Oþ¿K�D$ƒÍ»A}q Ž“ªZƒ„Z.`Û >äÎÍeß{ýf‚øZ)‘Ñ/Ì‹ÀÍ^¯0µö‘¬tWãÖ‹wMðØ%�ÈÑ«j³\ã,kâþäJÏ.Z�Ò„³4o#oàƒ²ž‡äC^á¸vùDkZt]v»O �;Òñˆ¸Ô¤-h<„ ìZ+„†„…è‚ïEsÎJB8²éȆŒÍ¬9ZÀôNîUƒ U·È%q°3[Rfõ'¸wÿ„“v…N§Qz`ÑÞÕ¼E;Ð Mà‚máù·œÒ`i¸UÓ‡œžrâ–ôhÄEÕÐÙB²ÇŠÈ þº1âÚƒöäD‘õ+´�?+B­>¦ÎÅ. k¨½ÈŠ™ÝF‡ ˆ¯à©&>³vðÆ&Å=ß{“ð­�·4‚ KGdÉ”ž VÓ[]Šªì¥þ¾iÁ”ŹÀñŠñäÙ&Ü#ã¶ýDÎRÎ#i@w`Í : ¶�?› +|èä5dÙôs‹br³Ì³ØÆÓªb[×V”ÔçÈ.4çÔõ J{è¯òC7�Þ7Q®dº•Ò¸a5À ñàßéqµD…‘oô'Ö$òvtlC¶GIÞÏÜ,�.ΔôwÕOG�Të9J¡4I$&ÅKtPp³ü‡€‘A£ÚäìFÕ¦UD.\=§EÕ#‡h2Ma°¸#l0…]4-óò'x‘F›ï¤³y çºæ´Àß…ôÙkp›.éo“’FçTOi@R°ù–l†®Š^¯ƒ®^äu¨ ‡üDd $å�nv"c&O×^ÆëÎbdTô“çÃbye’Ò—t¶[È…ìS {Þ®™�ŠL¹1FÕ#pÂ�ÙýMþegqu�Ï¥Ûº67�?¸ïeø;, fR³ú”º´1^íX®ì60÷*´�ñ!H€ŸõøØÑ}‰÷U¶¤±'3„Èf³  >ô¯ �ä®yf¤Þk”éÐ06ð£OH¬ÅÇ.3vÌYpî¤U ÞÿĹÅÈÐ5aœ]çr-™™¼ósEv.ÌŒKvbXÁsïû#¿eÊI°‚ÞLæÎ.‹w1V,j¹FÈ-ê0^òJyLó¢.œÒ”3ƾÛÌØÞ5&ý1#ˆ2o�ǹ_,ÔmSAuú:º!u4Ï�’¼±Ì“„陨T Ùb1]0lK"d•Fq4{�Ä>Õ„�ðogÝ@ø¶ßs®žÄWkl*±×|=ž ®sÐt2ñ*²ò7ç ÙëÝÓ(Ê8 $¾ÐD›‹È!ƒ lòjÆU¨|H¼LЖ‹‰c¨’¡X�šúF�/D‘1€úÎÀ£ÈdvàÍŠÇ`/Ô§ó§ Ÿ]ÇØ…:€_|Îf´¿Ô[­]#EƒjìL¦Ïû”Yx‡ZˆÝòPÕg¥‹®6 N›qn°$yQ�žY’dºÈrÐ_àR¡Øt&+«S|áYHØAßzS³(®¹Qîâƒ��]ޝ—²ÇÌÌŽ‚¯9»eù3˜Ì._EÊ ú&§›¨�ª Kž�Ƈ +íwœv.ª( Ùʨíùúì›ß`-E×Î<ïäµ¹3_o>C]^yh·ø +ÇBQvþÛõOÉB­÷£{ƒ*Ô¿.½éÆ2�Vk§Dë²Э¿Cª;Êû_¡ïÃ"µ:â¡ :x‡�•u"ÊoëaíäÉ3G{ãѯ۠m”ó ~™B°¸Þc•Úçiˆ-¤ª�Ô”îÅ®aeËP,IsˆX´Ž*šˆ9¯FÍ�ù’6fuýÉ­fm‰ÂI‚ñø™qTéã�(Þ$0ôxÞ˜ï /þmü€£Q‡í ¦ÂØIèœIy®X]Ve‘s»¶­j•|ý¦³©Eë%ìD2…§¥HØxýjÞE^…yû±ZªÃ`°îUm†G•– èÔ¥?Tž€ÖU ÃÌla§œ_ø|©W%‰ÍG4ƒ§ÊB%�õ}Õn8ó¤ÁKlÃ4áß§¥9{lÁª8ÀVtÓÌU°E»ôø‘Ý]ð_�½Ã!¯Ø+0ž`ÍŒæq‘,(‡6fœ0èôPS)\C [ùIÑêÎC¤Š^¼�.V9ô5­$%>ÙXÝA×d[B…6)u�Ÿ‘ƈX×4žú�ÍöÅr0fÑkyÕdV±ÜÈXõx‰³É“ªT²4ó`*#œ<ÏÞcré‰VZ¢@…Eé¼ZåÁ‰Ï§^ +L…¸hQƒ+#N5ã뤩F1�cÈ4qž õŒ Â%�“0äVeW ùn%l½|èØÓJXA¦–dB;¹é�›PÀ·'z „ 45T©JZ2Êåí$3²[Üa¯B:^�æðÓF} ©íÜ7§÷ÎbniH¿x¥ãƒ}ÈÓzñ9:!qìƒÜÏ|æP³³‚ +|)$ÖJP„@áØ{”÷«E Yöõ´ØÝn£WŸç;~ Û_õöÝj­"U×Ïlc ãA溛¶Z—Þ›dЬÞR¦Öo`…{u±èʸ¬’¿X3FÕ/ƒÖ(ó'÷ŒŠtþžEsÓ.¸¢3èºÖâ´Üz#£%w²©­Ÿzÿ?þF™xô+Õ¤Q/žp e4ö*1+Ë2à‚+¸éyBù—&‚Ÿs<[¶‚‘zzm¿ê$y!÷Œ(ü˜EšòW}WBáz>úá]ÝH§Ì«ËêWeâ&(Ùû™£:ŸHuRêžò.sÑWLÚŽ]�s•À­‹Bžœ94k}Q­O6„�² cëسnèóò*ÊŽÅ‘6kщ=5ó_­ÙÏßm4´f>2óz>EΞt}9ÏüŽ–˜ö, d–u7Àdìb@'‚Ò$tB+§>5f‚Oš�ë»–‰ƒ\¯zÍ +N�þÔ¾† +„xðä[Ê€Ñà:aÚ˜™lS#ûJ-[˜Q¯t¼Å+Yÿ%®´A.Ëv=W×^ÌÈT KqŠD˜Œò6çKÊ U«DN¼ áWži±NºÉ%Åõ%ÐԡǪ˜;ÝÌŠ’Öäšg8f-ÚeXð²wòë"ÅöÌAªñï,@ÊŽžW™ýZ9�ÖÿC=ð¬ìbŸŒe¦Ž wƒí;…_ýÙð§ôó‡•ósv†^gä…cÔ…[†3½‡|¨P^—!Û¸¶”`¦³q-»pð¦év·P^˜]eYH0±§÷#u7’àR…PÐØÐùúÅb˜¾ %Ã>1·-6@¢ó5Ê©;ê£è"׸ +ív e¶¬Or0¸‡äÖ§M£°vÒ t™g08½v *™’æR&ý-†bš¨ß)(óC­h5ïyèc£³o4Ùè!ª…€�[t;«NHÜ©¡­t ሕ©rcàG‹¥“1ÜÀj“aÙ„ –娌ˆ}–D¶oéeSÙ�ñR¯±âÍ^z¨«½½KqÝÖÈDu»Áÿ€‡c +#”ø8ß +ÉfyA!Êöwd¬–Ÿ‹‡d0|¿žö>»ä ³>�SêY“–Z’RÕQÁ÷Ö«ò$ßQVì;hUWЉ"1´$Ñ«™7°T}*y­KýQšòk\…N¹tDtÄ/•€Ó–¶Z6–T³c_ŠÓÜ!ÑEe/ñÈàßÿ|¦gø'§þõ•‡“ éóÿÈCþÿ Ô†Aà²@ ¡,úÊNÎÉ;œœÓC–ú#»'Hɾ_ü¾H�ßÝ¢RçªÄ‹É9Ñj4#�yƒÊ«Bá� Á+ï( ÅÄ©ÿÜ…ßÝ$¿’ä(4WT Û{pwåôWP¥Ã±*®ÔnåY÷NFÍná¦)°Ä¸Y}&zÃ\ÓØ6È ÆÍÛÅ.l“EÀ¼S\ÒÿjÈØùAY§{Ÿæ/]”î�$—/’ ó#†NÍ�[´³ï¬V“Z ú%-j]2y³:1ñû ùú 3¸çÔÈ3Þ*EÙ¹M°Í�Œ‡Pd ÁUÅf~YHY³ÔǶA#ý›Æ YÊ6V©=¶ä§èµõ¥ ÅkMUÀT/û ƒLù�Nl·²�’§m�qÿ:œM=n¨É*MD´x.¥Âçf·ù#ï÷;„:æ½½G™p«ÈÄÒÐV?÷­#gô† óØôä]C5nÃ-ä…Nj¯|dPÇæ·‚O§ €7mi¯Ü}H‡fžñ>\õö«»’Ýæ^Ål@:Hð³žwìãà9ñþ£ªÀ¾WÒÄŽ&‘ˆ‹n6‰OUá­ó$��›�.J-ƒ§±¶@¶ÆÌã³^ÃÛreQ£ JhœýX!K#Yw¥§Ë§“ŸþDúKØ¿Ïg'^$ì™�²›ÁÐnãÖ�h$Þí*WÙÔ_Ä"(�óéy¡uv) !ÓRi1zÉGt Ú\‚ë~õ°†€;ÿrP|m”n†Å¡úø»•Iö+lĉ�n½PqÉ=Ô9&Lòñ{Hj9Ãôh5€ŽÐ3Fõž˜ž§õŠj{V?Ýr”õÄ'æ;¿ç¸ ÒAžwS+ˆ'ÉÁ”MTOã”õ÷Ëb[„±Û U‹΂=]6(MâÑRÙç]ˆ^xØüš*µ¸·*n‚߈kH5Œkú§äçFx–³SB]¸ ©›R [U.«s õF{  + 7äk¾®øO£ÝòX‡Ð¹Evnö z¦-«±UÈ”ìYŽÖ‹ qÐFxX6߯AêR@甂�AuÅ'ifΦÆ1ÆmLí)xξŸ’Üy8f¹i0ÄÈHÝHE EbbÒvÌLõ7TE ²ãÓ¥nWžVp׃¬asø�æ¨ükˆ`±òæ´PSç„2²ØËg�—”2Çddp}ëé|1zíbÜ�5.ªâü«Gh žÈ©ë'Ó‹‰ BOG K_4*œþÉÄõÉê™öä½@lJâ ëu/¸ÂjDÜ©u¡Ç‘¹cÕ„ üìž-ý½Á~Ô� Ž(íÝ;„±Þ¡Þn¥®Õúúy5n‚^|Œ=õàBN>N1Ž”s7þ[L>t¨à-ØÓ˜ÌRÙ÷|2TÊûñ5_Ã8³ê«ÍMÓ5þLBÊw]§|¬†›jÓÔýÊÎýxЦ-ëS·êϬ’(y8*�¶*FA/ ,-ä-›%‹…Ãǘ8|4›¶½Û˜�å‡ùL»w¢sÚ€ùá3vG˜=ì1nìr>_SonÓ h´:yŸÄKDä±�þÐ@å,�½j:j]%2ªwUì¡3€A`¥sžb“¡ù§=¾V³Ñ–ÑØ…Ú1]¶êcyœ¶x +´%§�½Ø`#Ø\ÎFFžu¨­!´“G’`ÔÛ€ Ö+Fw¹5÷G<2ùà4|q+á ‘J%&;|ý0b‡3æ;v§]Ç9Ž©.tE–ŒÊ:aÕô«‚¢*{«¿J%¢v +6Þ•J^¶A‚p4}36‡·™é‹¼ŠFÔ¬ÌüˆØÄ»AœÑkF›mݼ–,›„är$ÞOPÊ<ˆ…¹óªŠ2âë3¹ñm%|û�$3¿Y Ú™ Lsd�&]‘Gï'g +yÚŠ2TJ~MPbVOÓÅÿúÇ¿„nâÀ‘¡ÛYÓï"¯¡x†‚…¶0\ð4±¶y×…êeUú >(ÝöP„£Œ*õk~\Ž 4PU–yˆLÀâvm�7ÏkôkåžCé£0Ü,˜-PëtîºiN4èù�€ænÛšµ5ÚÖ¢ ÞsŒxùÖ 2ŸM¬jÎM6ˈ{è]‹^B D±Ùé£ÅéS µE£¹˜`IuÄVµ9T´0è_2ëĵÅ6•I%6øHnÂaƒÑw�ôì@ŸåôQWŸäù�—LXuw‡9š‚ 1–.-0»_õDaE”ÒKUвvÒXöVÂE·×kò­¾!®Ï¾2Ë “p’ƒxR¢ØÇ½]-»®Ç?©ÊŒqO”Ï+žº*TY^ŽcI†$șσf…vBþ¶SôÀÅ´©Õö!öÆ/#p�Á�µÎ.É KÒß�Õ©ŽÂ‰Ò„ÖPG´-“m"}HŠm,Ò† s1Ø¥Ó©ß×GäÃòÚ‘.2{M§Ôú78‘2jÏI˜°ña«ô²t;BÚnÉ4éšh -:¬T\�’ÉR¶´ý,gjž¦!Ñܽ¡¦¿™HÛՖD †·íõýÍ¡îâe‡o¨Qoy_R‡ *¿E½ù Ié/ï”±q‡ŒFŠ–ðÁ¦Ù¹}¹¯¨žlµ–yÝcç- ›¸W§( Þ—ô/¢ëÛ2K&�Vÿ¿gò$E¶ ×É=ûðy—i™Êïvw1±8À>m…‚T<‰KXǼ³õ�ƒæø½ãT±l3æÜD7æ5Îú&¹ÓÛ5ð‚‡$JÕ¬…‘€QP}µ‰šÍ?w|±ÙjYªG·]ra1x“ù›i—ýÚýüÔ Ã+BPxõ�³¨6¥-ĉÒíã1(º?¾”$/  Ö½øWÖ£RˆÄ³ƒm‹‚•ääV +Z�²il¨à±&†-ãxc®åC +rl°~Á9oÙ+Ûñ’:íYý döæ‚ÝS‘Ø—Í,L Œ…‡€>¼P•‡éA±jJ©^·À‡‡®aàìWIrd» ¼Š.Ð +§Ù«öÆ÷_™ ²^I²7öâ;¢7Qäã€!3±& D\50ш³ÍF\¢ 7µF�Ï2ª Òc`o>Pà–æîL )d�sZBÃy#\�n‚þÒ$‘É•hk ++!AÄÌXµ¦ì¦¸3{AŸeIEmĸ¶|—‘ˆX�Z®)ã+�$ƒ>#Šc© +˜Ì¨¬Ð³ùgÏ +l 3S•·A‰å1ö³ŠÖtÕ',Þ‡ÍÂe¡FOœ@=#z¬.%i�ì0MæÑeáÞ8eR ãf™:€§‰™^3Œ�ß�ÔC³Kj#‡ Ó1*=Ÿüí¿×Õ)Aé5õÄE !v�;#ôž£‡€Ï†}Øa„ÁÀˆ: sµsn‡êëôÿ5ú>ÉHÓ5�}€KFdÂçûè! +œ-2ò™íŒtm„©2Sf$¤³ñà·³š+7õ”N)S‡Âdœ ×.hS$1F3ýƒq‡€è©ÞÐB"LeŽÑòq~ÙûÇKOr ¿SÒÌBÕHå>¹h ÌT^¢[eÙáh ²FDZ¹ŠyÔâ ëÌý4(Eúþ7Œ\k¤ëª äòƒÐ±7a³^–º©CÁPd´# SŠQ~J7g ™°ïphMCÔ«�º?Æà•Ðï\ön-±Z¶0¬]ã¬+@“7#7Ǣǰâ�Q’¿74”Õ$y Ñ3‹T)Òß@d£R_/Bu;ÕL ¥=Úàû³ãºr kK@1ïÑÄ0ÉKÿ™|mbG£¨ ùŒš‰%.6n÷²û§E3IÄ;½Ä}×­ }^4:…W‡êè2±ÉiÈÀQv£H¼KëUoßÕÀQ(˃¢K ê›R[ð¾:…](*æÕf2¤šú8s(Éü¦AKåZ�èçÔîe>Œ•I9Ŷƒ »1Ü�ÿ&K©5­�ü` \Ïz¡v¤!X\w.…?>ëG<·lð`šÆ9ð®âgœ·¼VÁKµ©�¬ôsx�“£¶!‹[5¥ðY%r6,/3}Ô9 : k;n¹x~@+þõ=%˜ú¢m�³Ëè˜PßíÞÔÑv¦ü/q=v‡›ŒÍhÇ÷ׄ̎τó«ò1¥VJ*¶å•Öu-„¿7†Ã˜k&mÑ€Ù“”j/wæÐèê"oÏ�½o²ÉPUî\!§äW(ëuwDû:ó0¡ nˆoÆû¬½¨�¤€8ëRkf‹ØˆúųgËÔ–>:CzÏR`S:ß°‹�­Ä]d= xc‹‡Ó7=Öp¹Êx÷Õ¤Ï*§¶Íõ=‘)“ýßf6}¤S”e�üûÆ;E¥õ§-ûß¶eŽªe»û‡Ïÿø¼£F#hmÇMß‚Æ.²è!MPxð‚c¾÷xzŒ.È1*N2ÜÈ-ㄲ/È3ÄqCèøš…c“Äý`�ŽD'ÚÂ*žDžÃÙ“ +‹¾˜ãs¦ålOÄ�I}ñ«å>Î!ú zŽ�þÁk£’qAžØ�·”9u¿ýàR0“X"E³«ž�ÐÎGÆ Môt2‘ÖêeG¡ŒX»Zù ¨ !G� Èöøn‹¸îò/æN�ã^�q$ +"ÿ»]è¹@ôümÿ[´Ý; d„/+ôŒ!��7ÿüÛkv³~4[q™˜üû3}KÔï !° åÐí­ê‹óèøpQ]+&¨¤_Ü >|§õûeQ5ôj`H/bãÈ48Wpu™r1¡Ið¦\,vLÁèèÒ’/R§½×já­4�؉»ÑåÚ¶P¤,*ÎÅê‹e�±Q¤‹-šØ0š ¹\ƒÀj¸€l¼�Ÿ™RÓh”™y67Kw©°Z¯à� w•uO˜\›*v×–Í.Z,y�I”ô×±O*äö‰Jg‹s ƒâJšØÅÏè7ÚÓÔýâT¹ñrŒ2ØZJÝà«S7óAö 삸Tn ÅfŠSgð�ÑÆ{Y°Eÿ¨Jgþ”úМÎßø¹lÅRL¸�¡äÚI½Ù*Õ ÝgtjÜwaféÀŠ/ö\™»J/Îl°˜UÑg¿cÁñ ©c\Xý5^Ÿ/b€MÓn“s^8׉ ñ÷™ÅßDg NG,ÝÿijþYúÃX¼ÔëÁ³QNžµº^<g_šm/’u€çåØ�”86dK©—ce%±ŽöÍ£i:0ða��eoÄÝ§Š¢±á<ËÚxñ,+üÁµ‘Kzø\kÐMáßÀ*D(Ù§³1À,£U×ÉGÍ6µ*¶hùbåz§5K^ 9�T1H'�ÔMÇãpê°•t⢗d•íâ‘þ°z;Ô#{©›ã—íSrÛ¦\=g†÷úǹND¯®{Y§æR>¸Æ{ð™]H:!òg,¡W×,Ô!ýv0ô…ŸE¸!³2ØäÖ1ôªþ�¢™5bbF ÇfPfåûAøêãr‰ê|ÉÓ•]«Àh1\l86WYvºDˆ™O@‡¸i^¿+üA�Ðzq|­ôÿ.V¯ úBÅ£Ÿœ2‘Ìèé¯ôÔž�·H-½G^-ÎOr¨_¨cÔk3POîèoÔ�L{1Dz'sD>¿3G{2Gs,•>ˆƒ´–’­Ï%ú¸õx¬›¦×¦ðjtI&<6•Z»ÛV•÷5ULa�v˜£æEAË%[;h€ÛõÆxVÓÛk%¨Í­‹$Ò�—<æÌ‰ˆÎ¬ì°�SÔ®üXJm+öÇúŽ-!J7$“ýвªTÕ¥ +!ž-l?&²º)®r^Å&¤:æ«fz¿²î0eä€,ƒ÷R�÷o&PòaɃe± ,χÆÅ؆94H¨©¿7£oÑñEÊÒ¡¿Äâq˜ÄÚ4¶�Êã>±°x¦±7µ–ý*SUد6fº4ÿ_¢=B2kܪõý~ï§?"OÙk¿Ò~°�έÿjG:ù«/ýbBÈf§ÄÁ·›®ðE”À¬ Ù8Þ‰Î({ˆ|syÆ™Jf?ƒ¾Ç�‹Ì³‘…¦Ê`á–uúŒ&Å[_£Ï().¢‰->ò‹(ñ}66Xf·�]át8eÜ«¥Åô™³ÝYÐ1·†úÊœŠM‹ µ9%ÖTœ…­ªŸaÞñXHëì3Zæc-Uíh(â`)péC+F߯;ÊJNÍÆ™“ì²vïKOºÜ¼ûÜ|- ;[‡O©/ï[¿’ +5û½n—ó%ÀÈáácT ×8á¹fåÂ8c´»å•?:/ž «›„CΫDW^?õ#ß2¾�®$$…{Bj—™2ÝU�ד2ìuçÀŽÎ¯F¼–.)¤üÊ›ÒaŽÄËU¥I$̆DœÙ (gRƒQ·GkK~Àœ«_ Ý1�—VÀ®´˜ûlòÊ™oˆVÖgG?3ËЬ7ù¾Æ‘ï1rÞùeMQúP·©!laô•}•;æ¶qPr`Ÿ^�ch×3 +0öN•àT*‘£žJö~•{}” +«Ö|™^Òj\'l˜3êábŽE-#-¨wÙçÃÐïJ$¢0ËFÞÌw’RôdÕ7cµ´À©TÞ.©ÑH}m¶¤NÎÙàœ>bËÔØý¨Ô0HÊ{«?¤Ñ–e˲œS zÀðšÇð+– àßIáÔ—å5<·þ}¾[%.Þ‚'tÇÊ…å58»rú͈gß1u3†^³VØ?5í47…h™>ï¬F±<«gr¡½ö€”Žà²©Ü¼X*‡Í)ñ v O᤹hWpû_Ÿ‰Ã˪ÈÙ^Ë#gñͿدräÈv#èÿSðÃPXÏ£�¬±tC¹^7g!)äȇD5ð°Ô’™…L’$~’?˜HDÛîìeÆIQÛÔ?…!RÐÖÝF¦ŽÍfr Üšý K<‹ñíà&7µª\‡³8‡‘r²í”hBik9m]ÃÒ¯s<–»†ù>;‡�«‚ƒS»ì,n—ý*–&vâB®i¥cyí.†ˆ©µÇâü´mib"5hôK_±D˜­÷—ãZ|P®Íuœ‹Ì€¦ã—’aÞNŒ)#`aJ~ê³Z›ŽqôÍ‘�:$ªåªdß}u{#·áZ@S0é‚Úú,¯b¹H®n;ÇËr)dœ[Ë,¼¸hnoí&-‡–G#o,(<´¦„Ÿ>Ç&ñ¤ŸBg±Ó0”¬N#“n#ëlPœq§’9·xú‘ Í"#�n2úñb53Z®nHí$Œ£—¨u<®‡*™qV¸8¶’¼T§=àßµ¦J/ñbQJf³)Vû–Õê5¾�½NFÂýïµÃ«" –ª¼.2ÿ,É}§iŽÞ½Ú�)ôÒûM;´BõÁL!KQz¤NœÒÒ �œ¡1'¯¼èWR0¦oÃçöפ£¤˜kY¢zfÎ쫦œ"û×GNaA½3ój³&£K$GðYd5Ô”¬FuÈ­y_Ž•Ð´ +7››•À˜²‹M²ŸØWJºQù5�a{+âDžÅ¾CËbr&²g�<¤{ÙóÝ«>…¿$k%°R!­÷K;6øÎ”Ƀ†5òÄ—Kp#¨!Ö-éÎTO ÔKOëI'4"žvy0öí}:5'ç +�âÃBíW½Zû D©š…=Ôþý5)ár'õ³ÿx/öÁ*¬ç?»Ô ïj—Ôðã +ß úþx¸üìôŸ ~VM™ «Óš/q*ë ™ò(µ¯V*G%I„™‘ÒÆZ/íSR2Râ4s»…ŸH¿®tö*4‹¶:�Oã=O:ò²�<(:·Ùå÷ÆkB%¶!u0öÍ8• òHØó̓ðUHp÷6€)ÓŸ,‘Ó¯Ú,M]ßÓUYšøÅ +uƒqj½ÇUùôî|Z¡ ê8Œ*Ǫ‰h³RÛµ§ïL`­»ª»U9 ã/¢‚Ϥ1¼ŽÚ;*üª¦ƒªÅcÿô²ªJaî -º·s5ž<–ÞŽ+î€'n:‡wÃ�©]ÅÝàûCåâÇTmÝw‘�ÖWÊ ¬ÕJiEê?i¹ö4Àe¡Ërek"’lxf ‡I÷¼óDS60—ÝÅÿ4f�t‹¥KãWÆ1lò±?Sj"æ[0éò";lG +š„è,t¢N"Á¨¯\ÄÑÓSä°çàa]‘«‹CZÞ¢`«[®ú#ÒbÜ ¡¾®äãY€Ð¦Ãp ħúÙÕfñóæ˜¯VS%'_ŠÉ“µu¤yªô�$R|ÿ£Ò¢eدM@h��»ýÏp¸|þåHñ®ø}±ž#\ˆ!ÇÔ/%m œÜ(jk‹ÿ˜' ëËùÌá.mæG¸»ÕôiJ/åJ}�Ø›9_i6É^ÑØ¬æF–¬f#œ!*ûÈÓÕŽ~Ô„-7V´žØ´äõeµ1eÐÁiÜð�nÈe +s9È(jk>vMmŽÍ š>—‡ šŒ:ǽÓ&Tò4˜zQ­Z8iKå©C´ÖÒýN)ÇñÔH<ÃÞU–h†B°¬«ÀΣÀVc Ž‹"sër̆ÂhíH6ZZõÊ…S*•™¹±©—Mma\š ÜxßñCå*YKpI h¬Š[?Ì—°Š$sr®5mQ7ç'¤ÞÉKë !›Ÿ[%Èω2ÒKK¥1‡ãƒ):B8°™»&TâÙ|˜’ù?¸½Ìˆ Ñá¨1ˆMN;…?8‹·B ñÝPèb³àôÞ�tjqTs–\Q5ó×V¸¦Ã<ªÞ29F]Ü!Û‡¿l úøuiŽÎOï�¶ÀŽX„œd둚 K](È“æt“nß…ïZ†HQa•’8Ñ'$è qâ0»¾×æ�X|#`Ÿò `ãpv9åªtéÂçÔ”jÌHÂíµTÊÖZ—ëü¨Ôú”,n’]‚—81Ñ`Æd©í¦…³Óáãeì�ðO³«Mʯ«>îŽC¥k,ÂiCßå=¦’"ï8o{áûO­Èw-Bc>x¥Þµ'@¥Jϱ��åB¤ÀGcŠLV…ò­i³úžŸäúŸÄ"È”t;6 Et5S:CsK5ÖûfÄMlU2cÒ¬Ks„H¤ÔíÍy×¼}ì$ò�ÓîŽÔžËó4ª@u�©ÉVK·Ó�/æ­�×z íøð3›ÐŽ�n—ÇùæÉŒ¬›?«¿OËÑšø^—nJ}³‡]|3—ñë,UóPJ2ÇÇåJ`{gšœ¦9{žH‹üé9Vúœzgº bX—Y‰"Íœ=6u#ŠÙþ>¬õ³½©×_ÌEv°* ZÎá%=ìr©PZ;ýfZ×êtk¾þ)6–c�ÑÞ<R;¼cŽP4$5e¡ÃÇÎê6)pÖQ¡Éx‘0*hçX¢‰”+ I1ºt£¾Ô¹'j&ç*`ÊŽÂáïbb¦à4ô3Lho‰D‹Q\–ŒDESLg¸mJ©%�©¿š�ÿb¿jÒãÈuØ~Ná ÄŸH‰ú¹SæþÛGTu;ž7oѪ®’Ha+óÌgÝ€ÃÔܯ½�©†[km[Â׃âþlš‘Mj!:Ž#H.`ê"@x¡DÏ¢ëÙôiòmúÚ +¨¨‰‰�$ìÙÁA� +o1qŒœJž) ¬€®æÙjü $=»RÔøjè‡A“Óˆt¶Ë@ˆy{é¼W¦Äðœ¸Îf´o:Z=»E<¸yÍ-ðþíóúÔ +õ ÞÖ(]cÁ ÅÉùAÒ +\¼!¢¾FAÄoËA�g;i¹Û*ÁÇTsEðC8{Ú8}dB¹†Tj�º[»Dº³3ð–3ðÞÅ¡3­Y3§ÅoX#�0À´ÖYL?»Î2sÆ„{ËÒl4K£gIè“V'wg#¿Ë_M2ðD__‹„‚ã_}ó�DWú˜ù&ÑùpèüB¡ˆj$E¥‚Ö£çš/¹q:50(÷Öx1(�õbÐýÆ Þ Æ© À£�œ—èsR¥ £¦­«#’}ˆºú¶|NC0#ù·ó.Î`âƒ�Í�ár|Ò7÷¶aVBi28ÁT¿¬LB\#oq/�6÷0§ëÁ 'm`ŠõvíÍËÜ„l¾X;‡Ð.wrR>))´‚ª@‰}ÿºÎ�!:bž yhÝŒ š•ßËJPçÂ+(ù€Ý�IªY„iø|n{¥ ¼è@ D>Xú¦ÁÇ‚FuòuAìgžÁEiK:ŒÎV®ùfÉÇd�Œ”‰ç8$Ì�\Î�O™K ÉH;îQå7Ã-š?W=³gw<—uøî4N¶q'¸µ~çÍn8�Ñ "¥¢Ê/¿Ó;åMOÛ0a5ž5š²Ï +XÿªØkç� #?’ý#Ù?’ý”làÐLö>yh÷K²³È;akí³´®ù[xØ£X-¾¿i¬ ëGu?K£ÓŸÜãã@ÏÖÇÞðó݆™ŽC +È©?B¡³gy©V‰# ‘œ�€Iî¦À~v%%_JFÂ\†sÅ­ð/ ��E'm;qAK’Á&C=Ë>ë¡]‰ÇˆEY^7 îv{öòÇüÊGFK¨°`#ÁõwFq„Áõø{”ÂYF[ªØ½Ž œàDûná¯ãy!®ù2YrTó}w†>g$¤cl¢­Öáuu4ym(‰â‚Æg;9 bÙø¬‰KÍ68P¢IŒà0e«/Ò‘;k @V„ •S‚÷¢¢E0L}{,@†¾ÐØž&¶�>£ê‘£.Å~\�¡ÿ/il_d1Ý—ÓL¶êü³JsÉ ƒôhëU4Ãàx½-Z�WÓ8ú-–b¾¨¿ç™áFAá|98÷å>‚_úý ‡Ä]ž@�Uj;q·Êto-òê‡ú‡žˆÜ€‰°\¬é´“2õüáMH÷¨Ps“¨™RIx`’9(�N»Ñ(ú­þh¢UW{ª®zeÐQ„Û ¾Û˜¬eÞ-)T2ú9o†1/Id”=^‘-¿.wú‡>öÇÓÞg—“cÕ§\…zÖÊW0M½:*£ Ó§ò$_£Dì+h…+xÔF|Rÿ�êðjæ=�”£=W»ód‹<`«lßjÛÙ:'åòp]�u2Fãw]ùkß5a¢¥³ÁR;³¿h‚=C‘ÑØÓž…lÎÆœì¡ Ñ�~öˆgoò &ZRÐ9p@X“†<Ë—@>¡3ìÐÊÌQú™É8V3€M…Ü ib°·<ïÁµ*}7ü“b<Ù¢l“6ÊÆÌ:L«ÿ¿!rbZ ˆæÀøñÕ?¾úÇWÿ§|õJ�>Ù9{£u²^ïJ»Œj°c·¬f¨gãš3ÜøÑxöK“#Ë?U>†›Ñ@““©Òk—æaÒ€’#f�/¦Yp8 À�/ÿÍªî ±wÍÝuývרm¿A#î!«l�ç‹ù Z‰ÅiÞ¨‡�t-;Áõ ù+p•ù3Ô�4=gA7X 4|«‡,‹2Y&‘O„J’Ié› Öƒ(òfòp•ªÍðHÛ<™ûÏɤ,eÇÎl¤�š9bÈàÝáSŒ7öïÊྫྷç/gjQ½ gžYîA &ÏQÇY¥8ìAè×½®ü:í×II}šåR§c�>kÙð«µÊ_sÉ� +Œ'Xìß,b^h‘éç6và¥0(´«‹³ukÁlN~5iDÖQTá°¡Bôb\< + +Ä”I ®lD7æ¸\“ôLÔÄ®1ÚX7­§.² cw·ƒ5ûkx-ñP¢X2ÒWýœ°g1ú…JB3&áäyþóZS=žHL¸Ò‚€ÈÉD‘w­–"#�ú(XdÈ¡ x+J5GƒIƒ£!b�˜Û\“ª!ƒ# gxAŒE‘ä¼�;e(½F’4;ÙJ ]2ùêx§••8om,¨“��É�¿zÂKCΫa6Iô;©ìÄÃgàkáIßäó¸K/ �Q®‡æûÿ¸Ñ±R¢ÒJÅúnFá­† €oÒ^Ç'•£SÅmNwïÐzÈÀÂzkyè&óõ‹Ìå òeœ¨Æeâµ^OG•о�%0¿‰€4ñ€à×±¤ïò`hTš÷)ŽuƒTç݃Öoh�ZMƒ5ñÏEöm½{êÁ%›|0œFª\Fy¬e5î¬Cã.ÅæD„�LçS Ìïg~Gþ)4e<'¢Hl¹Bî•o›ã®ë”OÔDì¼Ø,\Ü�'‘ ‡É‘�eD|UÇšüÛ5 V9 +îºÑcúµ3dÆ&½\œ¥)!¶É£qw;³³¯ò÷Moïò>ÙÞ‹vøw™&çìPÁÍýf«ág[ƒŸñ2Íu9/Ð=ºË{¢/R—X—¬®­Kj­«�ÁᜌrÀT�4�½-ѱ1)¾Ø0½­={˜ûýèi?ol4V£ån‹§€btRŽhz„&Y:ÔY‡¢§–3¦”¨6}£õÊÑ]2{ +0tÔã™ðvMª1õA|¥êøÌˆÃŒu*ë}™r·Žã|B�늄L‘ô!š>*)BÙþ¾±ÔÄØ”PÚ³ƒ¿ýk³Ãî�±‡¼“K;ÙµæM»]W÷ÍhÈÉ�`¤^﹈ÃeÝCF£>Ž£ÞáÞv ‡³�•{T×LT¼…þ²ê‡|mâl”Ñ îéxS`5ÛÏa“F¯If+ÿSãÃÒ´4ú“„Äü,: ížÃ]V®·Ý +¨Ðî(¶í,§-[�"ć)ëÞ$a9÷ˆ/ä +mÐY~ÉâV¦�]°æcšYšf<åÕ90V]ˆÛªt1œ—ƒN¥?�êu5ï¤@ý�ƒÙþþ«º2è«B5�Dùmc¦»¹�²Ò.•Ç!1N­‰†&�¡cÉ!Ú³P‡?,YºÝ1ã�ǶTÉ·?Ô›yÝ"ÃØ"Ÿ-)9Fš2À&ê�u.:Øbq Ö<®�ˆ7˜>1ðx©f²çµ¦Ö‰¢j5ŽI3\ãWùw§©K¦µqŒb=¥�VžÔ5Mš—î7�\Ó�­Ú€ÙRD­�5¶×A³û»j£oFbn gÿÈ-¸¨i˜œ[C*¯_à�š¬æ8ý~E¤ã0}‘Þ]Öu ]á¨6xèxC*°…ü•ãØ +é‰ö ë{¶¸ÃíÓÈÆŒWˆá–}¬yïˆ0ä#)åðó˜$Ú$*aWóÀãlû4»¿cý ˜ý|Aó:ög³w8‡ýg{‡³Dº‘%Òh?�ÔìãZ�.ÒêŸÒ¨)ÎGO2¤þûÕ’$Yh¯2˜Ä�ìøþ +3Å«êî±^Øápôfµ(è“ÊäÏ·¹tæÖœ:´ {HLYWx+gëW�v1-S= ‰˜�8›“½Ù<“É7fïeݶW-Ï8Û5xm2ø‡mq”Ëuè'ÇoÜ»9ȵÊdøŒAEÇÁú ÕÅÙQµ«ò¢'o™õÎÐ ê ­ƒDéZ€Å\# +Ð=Øê¶M§múf£Ï5ðæ¯÷*þ6Íwj�¤íÙq©¶¢}™æB'c†ù»-!z¹B¶™ñ²¿þ±ªê&‡%f)/[Cyïýz'ÁV˜¤.kÎÔ·šãL}·Qr!øX3z�ƒOž"QKû`]M„šýjµš;ˆ�FÜcûšÕC|í–{òŽ­‹éJóCß�, ^ó•s>J˜a5?š¿Ád¯ÌUÒ S9[5¦e@Ö�NFE““SFK’ëÌF9’‚$]sŠ' pÄK¼žïȯ¯LÍÛjŒSªpÌw˲”g2#¸§ixA!í¬¸g ÉPëÙ5[þ=ª‡ÿ!t3‡¨MŒó5ty·õÜr=êÐ}¾XG÷Mz­.Ç ¿ñ¯fÆÉüÙûÙê<ºÕÿ߯•홚íóÜ +?7ÝXÓaf¾ZMQõg5�ÔýÙòÙ˜¶/ct-ë% €ýf;?yG�jJcc’ëÊTY€)¬º‹ËaÐîÈq€Q +ãí´¶´ÞäZˆ`µ~ØñõÌ¼Ý p’Ïlvê€Î4UûkÃçœãØ>€&šeÏ(Êo/ÔÌ?ƒ0D…>[º¿Ö}Ý]¯¨¶gõ-ÇŽð¶ó“ãÿ·›' å+„7¼l†G˜÷·¿¼ÜsBå&ÇLï_?Ñל| ç1"yÓ—aê!öÚH�ÛãÆ(È cJ^kðÍÐ4KÖ$?ó�T€CܨQ�•f%g ©„Üx[³ ,bC_âe†²½Öáµm!íSž¼%8ŸNCùŒ¨]I2ý~hžè¹X~»ÃX­ØZ§†7aßìÒ„�W,qAY�†È’¤D)Ê 3×íGV �²²yl—°­v’q�þ9y·æÔ5X‹5÷q׬n?×Äe°îRDù/†í)J‚iI1™Å”¡Y®U†oUÒ`4�“»3ŒƯ«£p{¿õã—bö«¨ðа—ŠZTº!­€uÔC1|Õ‰T7.Q‡OD Kz­ä)ë–ôuÿë’Þy“Ö—PïG‘ý(²EöVd‘[Næïô÷G9üsåñÑ{X:>…®‘+g±/ËØ´�é;)œ„g½z昣šƒüY.í ½XÞÛzv<Ìn|±â£Eå3)ãUÆÝ—_Ÿ�:›Þ–ýF]F[Dž„!LDò޽Á-–‰ˆ‰g©›¬ø ÉŠµÚçê!�1߯ºIj†àïzºà‰´c"?Y³¤H Ña½&TV,Ü× 4“Ld­jãO;üíàùMp¤ŸÐýÛ¡K&{¡<ÁlÏù„$#:ç +yæÒl÷} )YDù’XDý†“»Õœ6öˆþ¼ÕJm¿Q˜BÓÈ>ñ+Â�e~xÿÛ½èè>ä]º�ÔuÜá~2ئˆUùòQîú™ÿ ¯¯bCàƒ"R`AZëºåcQÃèÐdâm÷ãYBâm},Yš%ÑÞÔ(ðž5Ã'xñb¯F;€µÖ ÝÕ÷KXÂî×@n¦€Ü˨J¹æï‹b~û4Sµ+«y Y×&ÕÛùdÍq-ðx+‘?ï& :ˆ£k—l£$“Ø—N¬:Uß½ ¾sNùö$°�`«7ã!Áj`�Ù¡×¥@{n]sV?}jܶEM@*}°¥Â².óôj1ÔÃ`¸úñk5’{n•¹†�õ _› Æ:Œ…qk y·ÑgÁF¶Ë?3§tÕ4˜àMxtö!äÄÖC"�EÕ„±4áÛ¢«sAçlUAËÚIã*UÌÄA�ƒWL蔽DrèD�¸râOÞäwÏÅP¢HF+°ÊÏ•'o�Th‚d>ñ +Îó ,Þ�!q‚næó€,Wþβ‘9N‚bŠC¦rˆ£ñËœw<È_§À³’‰NQºHž¯… åÚrD&WG4ÖPš‹mb„hN(@(!Ú&ï!ëD"PjRíR @a–ÏÔy§Ì@º8(Økº¥Ö6€”ü*pâGØüo ›ÈwdI¿„�Û)öšÒæå>ä2rsB|>'£Ü³îþûcéD².�ߤÕáöI74P†38bœ�8ãj8ù¶/c§•ŦquÉf«bÂ#~Ó8*β By¬ó2ˆë  JgðíÀ,™ª„å"ƒo¿‰ªº_ƒ(aóšÆô? �¬ÂÅX‚ô3(ˆr8íÊx’¯å¸Hc¨ªÚc°6 ��òg&]`4Ú.ª¶ifHXïûÍ&uQP/¡‡”öôQÊmV­‰aeÕÁ€ÙK—f-ñ*j n½†5Ƹͥ3'“z^° $^ŽYàˆ¶›“~Ôl]ê@³ êŠ|g“�6ÛÅ?&“oÌ6ÞKÞØô)ê®?Y´Éàü¹˜«™Ïd*¹w“|ŽNjÈðƒš÷ xBäH8šé>«¼è9˜wÖ…þ¬ƒäþZ عnœÎ}`^ö ’°m:mÓ7}Nš’ÿ¾WñWzšèZ;£š´ï“Úô.œY’-B)Ò\*¥‚:�¦gÊv+yØDÔ«ôhˆl�©gÔ,Ÿ1D°žªÌêx[Ÿ¡}U°�ûXÕ¢â(–ÖÆNHi|@²DP¦úû}x{f—Ù‘�´`$œ,r±ZD3²+ÔÔ5¡9¶”+½&•k £;SYÔw-ÅúÐ{œyÙS}1-íI]¼IßÜ„”p7Ó�Ù¹c8Ã7pð‘�D©¯‡äGÑrW· Nßµ~e b´D�óµîN\ÔĬî‚t´KIZ0Øó&o1ldu ®Š‡8ÌÒ J€Âž€Ž5ÑÔ�ª²/µ{MªA:2‚¤@Fê ŒÉ¹3…䣣4®×ú¢,@7<œ#މ•§ ®� (lªeÀamª]Æ�D‡P¹nœŒ¥�u�'’òÇGhw 1ê È ¹V•ö^†ßÀ(‰IÞlyd”ѺoÃÿˆ0h•Õ&ZìHkª½2Ù›aCUâïFM D)8®ÉFð÷`¬Ð¡‹!;NÕ§Q½æM‰©ùÜ“s�8dŠ“0Uã§7øÖ?ðE“ü;ð”�I4A”Å £æÔßÙ/{,Ir_¥/°óø�àyôäµÝß"̪š^SÆãÌ�Y™I|Á ¬#-.ElVÜ2Þ(´á¿1ÛÁÑ嵺ó3y) •<º¦æoAP£Ñ´ž ©šuå¿v+¸\ôž3dé$!ʫΑ½}/d/¸¨Ãòê ëÉ\)â§äçηÕ�®}" û"ñ’6Ñ­[p“%›¸e›&G�Fý¸aÞg§kã?-Nš¯œ!©&Ë8Üí�ÅùÇZœ÷SË�lIËVÒÞ¹ü± +¬Â«ðÿ¶ +½§VŒ<«e�™ßtrvþSAÀØï1JÞoŒ6S#ršjUu¦¹É?Ͳ’¡½_û$hܪËJw[ç&ûâÑ÷Qô:‚›%¯Œ"qöÏŸÙ*Ê%ÈRX³¿G�ó�Ò¿Â?b_V=ÄÝn]´rQÃþVÉ´“›\çñ1¹<ë�J©êL[·T׺&Õ¤¦te°±öM·¯L6Y# ÏPo;~oëÚ/Ã5NUtú‚âw‡Á®GGgÑ„_2Æ'¢%dQ϶Ù4fCñûÁ>бÑ4‹­'r”÷É[~ÁËh"ݲQðKÙoÔ 7±Zú{4ñj4Ûe¨VK7ä4ŒgÀxé&ÖgËpAOÁÊlÖ�µuy€¬ÿ*P$FÈ,%¡mÌÕ|ñy P.=ú]~ìØÄ˜�ÎaS“6‰…6yòQÀ05ðÂwGûÂ|àWËù«z\A¶Z’Ò–îñ/LÃæMß�f$o•¦9rµy‚’ÃL0kSè½ÕΩ¦un°­€?ÏùÆß?’´3Oø¡!Gž崚ÌXSE�¸1Õ[R’-YTp‚uŸ3Fj£àše-èªd¯ö—T±ë�ÑÉfÕŒ²RîY3ÎÓVëPÎ[æ/URJúQÜsï«Üþ¨is}Ü}�Ç(ê$ üŠ(ràrwÍOÙŒoãM|É최˜ thÂL8·¾y»÷y»� ° +ép n®Ø šJÖ;�PS0;IˆSÂÆ1çPcMmbðšä(o¸@\¢„OãIÇ�Ø/D‘‡¦±�R"f%ö5¶pšB fEpj™&åÛVÒhLsSF…wÒ]FÆ ‰YlwancbR ŽpƒšÂ +ÀÅäë*l•šÉÎÁ¥é½€ïY³+JQÚTÙ�ûÔÓ6™³_�}°Æ‹Ý"î×íÒâüpŒö 3¡±'+cbË :)*׎#8´²¢þTÚGþ€›Pð´#~·™¯Âùg$LeƒQßu^MWGÈ#æé¡Qܯ=“³ÌF»E³Ï±CÊv±ukã¹iH=4t_‘Ï;ˆƒ�ùÜ-Ÿz ‹Û®)kx a¯ª¯ëG^^$÷Ýú›OÙì¹´r&KIoº¡éjN8h`T,Љ~×; +t;ûƒ®%ä»ÙWÆ+,éS²|ühÇ +·:˜ƒž’=±e#›îS¥˜ÊìÊþHSß| ‘€kÚ›AZ�QÙZ2ìº� å¢s;:ñÍ*¦ž­)q +V7 ö µ°c?b|¹X’í|ƒŽv½ˆµ÷)Ã�‚ªrR ©-QFÕ9ýº”î/ï²¢üLþ’3þHp~èÎùh ˆº‰aÄM–}ê²IÜb’5$!4)S„Þ\�Ž‚þKÄ7‰•äu:Ó +'‡éü¥:¨ÊJÖózPaœÔ—hTcX™Óú@hp׎Käçô´J‡Þ­’¿®˜G½±»OU|”ÈOO´sÓY$9àö>eCDžiÆ+"3*âΕ(á]ãö1·¬pœ¿Ý€ùð|c]sJ{P¬soYÒ’@Œö/�Í7‚‘�‰ôÀG®2©aã¶íÌ�³4N6+‰Â`Ä4™³ÎƒQ}|Œá$~ë>+K9ø®CÉ“!­lîcòNiÀ𨇟�3€OY“°åÁ t@�ä„—¡ˆ¢Þý’™ ”J‰SÌÍÊ*-¤mh�Lž¹¾·°au^úªÖ;•Hw)r2(üé.Žñ\§0¨.F“£ ï|M‘vfõÑ"¶néT¢qÎÀá ¾«dÓêe¦8T9q–ä�दÅwá@k ]i¾�syé8¾þûï¼á� yMw~4(TI Êàô-‚&ƒÓŽâx M¶[ÜOiø-tå“•Xp€Ü Ùîød¨t a=«5Uðšo«}ÉÌ1ß"ÐÞ",‘у›òåÈDm6¦y�eF7l8¼'ÚøO΂´¥SÍýOgÿ�ã<÷–ún©ë9À¨âïåÞŒpÜe�( ¨ê¹ª0�о_Q'Lh¬o±ÜË™,éYò‘4—îÂÕ(f{ü‡µ1n¨„.öÅX’�…Æhø½ÐE>k»á`– b•bš�ÊXôA8 öqÞ¤_œb]q=¡5{yBpèx<"vxd%]¢ËQrµlŸ®iR–€Ñj/ÖÏÎôÒ‡8„¿ÓYß½�fT…ÿ6ªFðNµsç�«1Â7VD(R•?zgÞlé™&Œ|u—Y£Ÿ§ÜˆmÈÿ@FߘòR9ˆBr;×0sqRQæàic¿8þC!Ø®?%Ö ¦](‰?·£³TO`°Â`a- 2䘾Á¤æ÷®„^Øñ‹#>v«ò’ߘä&5’?ë0á©"L \7è]õ��ÛCOÛC˜Äk.7g_ïUü{JÅȳr+ xw£Ýd0©pqï±eÅè2õ!71ä¯Ê +R^¥'³L¨Dhï×6é�¦¬¿¶T·uî±/ž|å�FŒKz¨€-WËí‹Wù(Z%êKö÷¨]öÊô„ľ¬Zˆ»Ýÿc¿J²#Çuà¾Oá T=œÏÓ[÷ý·?RéÊrà¿®�-¤$ +c ·›WBȲ}‹c ´¯at¤÷·µ=ò®íA^™yÀ„@«+:sd×¢1ó°Ï¡{Ýòvi;¶m*Z¸b[FÇê-A”– +eÛº¹%ç‡T}m†Xkži¢èÝWéTœ¹‘^å4HZz·ƒÑ“à²&Ág¨:y!ÀÁ£…/¬¥Û#?²$ÇcJžÑ‘äÓ{&ñ‘ÊO´>ççjø�®X4% ‰©k�û½ .�í.iVl™Àh7S.éNÖSVQ¢þ2q\e8}„Ó8»FÙ¤·ø9óO2y„Zã锯>ü͸VÛ>7BÖ!áÚ¹`…í¤�äéÙ®8 $žžÜ$‚ýP¯cn�öA£Ž{³é¹w_ö/åA½H6%†w~k4Nïެ.ËO!†»³öKª¢¿¨ÖX‡~áÍ.–|¥+uDü›[ë”Ôèqz4¬bênû”°å¬ª‘6Á§ªyÜòVû¼¥5 +.ܦ¤"?_S¹gÉÝ�TÎ¥ü_Zäw +Ç�E£ƒOÿºÿ/Bwv �mù³¯Õ^U+Ñ‚{Bb‹¡�ßí\ÚýŸa|Ñaï&¶ÓÌ&MúnƒH¥$¦3Ë7,C�Èçè¬Yÿê,oIA‘µ.Wƒ5XS÷Ïž* †&%VÓÈ釰Z@Î&™Û$Ó\cŸklûE³µ0Õ|“o€�ösTx7J/á{¬"‘Bç^¿‚xa„§ËMƒ(p9§‚ñ…ªºÀ™Ž-¾ü† ²¿ãÔ`ôΗØÚãq‚ºw×—ƒRݾsí’¯o°¶œ†ó†ósŽ»©;ßrV¯Êöññâ¸ï�Èî"£ dM}áZê5°ëLƒÏ‹n‡lë8Œ:2Ä/Ë�!­˜âæÒ»f(ð]û¹óˆÓz ®=yž†m( �Øy3Ï`ûd<öâ|9¸(ãã8Äp\—"Ç)s@É�=)2ÖÒì2Çb÷¨�‰�3îkÐ`l†{æ=>„3É–´3l +nµë«è‚ \q�Ǹ8¦Óã—”·sÞ“Õóµ“t;¢rØÅ§Rvÿ”Ñ�Ý +ÿRþ÷&Šå†�øV%Þ™UðÁ‚¼›)&p)ù2ƒ9„.9ˆDÚ  ({2yÃébãdvxpÝ6ZšE2ŸkàÑ�ÆssH ! [•IÒµjÙ´(ì;hê-ê\XÍ÷R ôØø·PõO¾ºUw’•ó†. $@j§¬”^¤wCvmò•†‚E ¹>–¢\Xø÷nuÑ·(APÏ]˜-\ð¶åR-RP‹ªjŠiùþ¦+[�¢²©N$ÉràHB£ÃSö÷©Ð·ð?‚ÄÐÄE´ÚÃ0,ÇŠôœÀ×–˜± 5OB/¦è_K1ÒH>8)]®cwöm(›8 ŽmŠB ‡"íjÚ6aÔòèÃzòN ©‚“IDdØÚ–5†�¼¸H,ñÄêÀjĤ½,tÑP#tµò@ÚçËä¸q=ïÒ³—IÐG7Ý ØÛ“¨ÞØ‘…CÌ,ÎiÃõ ýÒŒ¦�ÝSHÝÉg§h1`,ò™ÊùMò½ŽÌ ²Iiøg_ÿÙ×öõm_Wîk ßè‹ÈôeYsµ8ë8ÞMÖd×”ÊjRBo¶��&Áˤ6„kZtmƒRCAWÓØ­ÍòsbÓSRgÓÑkgDMµGòeÃò5Ù&Œ´½à{~}µ­.‹1tþžõta׺ Hå €B0�\ß°€ÃK V{èqò�ÌR×²óšæ·-›|\ëÁOÓ~ò†sH‡Þír.gJ1ÒQ–VQ©!êÕ´&Ï0 ’ +pRý³CjU·oο-ÁGŒxîâÀ.£ ðV×9«l#Hb±Â&% ,eF�ÀjÓ©&¬1�(AŸ:T�б®…Ü}·b/�ï8á“Æ„çÕìû÷ú“&Žæ +£jo& +�Ô(¹ŒßÍçá +èʼÛåyòuuü½x3¿¥´ x^Çý²qî‹ÒâÈà[Äáàþíý ð‡ãìP­ð¹‡°(±CšÚŒ@U�HHJ™gƒ².ëç(K;“+"B$ø1ýÏè¥Ð¥ÓðÖ¶¢%kG¢ÔmŸ%šdhdTƒ˜;0Ë™ØÚûMæoz‰¶yº}ß%ºDßÐ�E¦µìÇ—à5ëN¤çÔ NáJn~�Ìœ vð㫞t�r5÷F;‚ $¯1úÉáÅ¿b +æ÷ìnúR5rIÖ]= ˆâ¹ØÕê'eÃÝ!ô%f,~ûaJ‰|þEЬ¿˜©I'‰�ÔõL’òY5Î5§*)4Líá*‚Q·HÜá[f¨‹qd!‡jÅæ(÷B@;ù’mÉš¸ïü0+|äúd%ü52Ç9ìˆ8ëd³ÃKŸKºb<ÐB`­kW´ò„­'e£�*ÇäÚ§Óùø!‰ N¶ƒñîáöD¥‹8#Uúbh±å$Çjª!£ZÔ@: ¸_QàN»œ¹ˆÔØ +MÌ�@ã¾¥ð ítð¤{ÀÐ7¥�ðÐõ!¡µ·ª´Cbƒ£Hª�LìþáØ�¤Ò^-cóS½Öº¤£ú0$¸†Z($g˜ð1±ÂïÄHP,’ÿ”jѺôΔ´­‹­Áºþ‹>kØŒp”$s¨_õUõYkì¡èÌFÀ[`ø0Ã�ø�ç5‰ùÊ©ç4Ô\RŠjVn/S„ +ìº×[„ÆöÀ܇2iñoWÀ®Ò5+†4= ´¦‚dºô ÆÖÃuØKöZ7çFe�=Ö #œ—@[wm,Ž ³OB‹P“×±º¦V’ùÂFÑcQ—X ×ã ­œi¢bìÇ!if]›@Æ6ÒP±LU OÆÊrX£>±Ées@ªÁ9!!ldI£¥ÖB“¦Ü/¥†Žå–p’ÿá°í:¯��,±‹H�3‘ÑgÍ1¢y¦Ñ…¡¹_cÈiwŠßz qmÁ1—…˜3Z·ŽÇDœ µ�, ÓêL^מi fýyH8yš}ÄaÖWOÑEN]í/\ -A‹¦µJ!¥¨äãh¥-Xi‚æM êVàÊ�Ex6Û&gi®~'JœŠB„1 c)c)¤Tkò19ˆ+­ë8%C¿�âÉ(~l£â@ +€ +G¿¶—±º§ù˜'}^“]ÄæÙæk™ ï›Iè�ºÁÚ  M­BS@½ék"_ûÛe’äÈŽÄÐ}�"/ oœ‡µÙ_doúþ‹Æƒ“!eU­®`�NxnפÂá:}UªK¼šæz¾`šã°äùj™Ûòt±—ÕñhåÔ@BþÅß‘:FÚfm�Y=¿P¢Ê]ccå)F (|ÃCÑPúÈ�øe +êLíS(ù~©ÀJ¤Û THv"СùÀÁ9fw/È ¨g|,€m©ÒÙ&ÖY¥V2”G‰tOKè]Bê"¼áqw•{FÖ4âB¢ù=ßåêzGfƒê�Üw® ÖÚ°uÓÙ«¾3¢f0FLº×ÌÍe»]NL5ç iRÌnË'8±Ú3 ¯spswé«¥F¹§¹èw1H¤jX⃠?åj™K 3¥ +QÌOj‰aîNxeÚpŠ$*— +÷@#cqDbœdú˜Á,�÷´sð‡²Zç×å’6êÃ,³Ì*¾�_f,ö’‚©-Š£Ÿa…Ã|¼Ü«û8ÆØ×ÍÛö™\9ËOÞÒ;�DíẔLhñSî{3gªÞ“¨dAØq‰�ƒJ]z…﯀€¸Ô1î}�©Pd«/¾RŒú¼;,'SDózòOY3œLunúaYØ‚‹}Ê(%’¡ˆdG»¶~j󏢯QCïéRI) ‡±à q5h±Õ͸D @¾•310vâ Ú2›T#kÍoë¹ÿ±·+Ø_wbÞrvÎ.WM`lX1ãW!ÅužÜ^Õ‚öÖê ’3!Ð1!º[·ïãm9·�÷}‹ŒÃ(ÅÄLŸæ}š Þð®EÍ)Šó.ƒó<*U ¦LKψ¾G_(ÃÒD KËÑài˜ßÇ,bÈZ“‰á‡õ +‰ë¥ûw+ˆýûWòaöm€jJêCq�­mŸ¢Õ( ñZ=Î�6Í7…ŒJxïÅV’'FtÇ á-¨åpS“ LõÕ·ò·,ЕQ³}ýï?ZôF¤š­B%v5(NdôƒHTš[…6(þVÝ0 s�¹³ªû'/·àª–nõ<ëêó,³üœ\$>Á\±#Ã)Ž’ˆÏùë8 6i4Xü¹Zç±´|γ-£‹®,QÛúlŸ”‚œ¢ŽNo3ȨLj4z2çÔƒFP8]k�YL£Ù–舜/Ú€šû +¹š<¡¸°f¾VWïíyÛŒÁú²u[‹mÊÙVвpn[+„wÚÎay˜Ù¥žµ¼MÖ°lËÖÇ=O2€®å?ŒYt>Ê=‹ð0»¼v¬VUxZ];Šz%wTÛ{¤æéGu¬ÝjZÙU.=–’¾±cÀ°T%)¾uÆ:¿ÊùŒ“ÙWð~É�*6#}<‚;éZøVq+¢:g82óv¹¼§²Çms…è|ê”c®‰ç.�ì`ß@²W)!{ÁÌ£›S‰tÒK ½ì^q©¾„àŒ¶:™'˜Ìâ�oÿQ±˜`@íÐ"9Gæ°iü3(ïÓ• ÷×Q7Áeë±Oqöý±‚ࣂ÷Ø9¦¹e–Â; Ž3³Õyqm*a��z.±Ú¯Üí”vÁ?3ŽJé4Ù>d§$$ŽGŠfËœ¹¼}W¾NQ ªpY‰´N4™yÐYà q¦ˆv ý’6Ò³Šá�$)9î\MŽËòAM}æ>¿U„ÚöK +�îÞwké�‹8vKÐ)•‹¦‡^CGËÁÑ€²¼Û¹ú^åÈsÈþº!DÏÎcií2DŸ—ªµ†!»»º%î\ 3ùƒ¯)¦DþóÔý$mzS&2ƒÍËý)Ï¥ûyÏçB]9 E ªÍòü#ŸÓD-˜èù9Çœòü±„ +ÑÇ7KÅ&xøÜEÔ¡lªQÔ»ëüSêþøçß_ÞÊ+’“MÒ”0{£8Ï:ݤM`$ÎÔ¥½EÚŘ1بDPÔ{HY–G÷j2¤|gtqÝë�ÝŽuËõM'ôJÐòæ:(‡ÄS…ªÍ&@ßÅ*ÞX™ +äºs´°ú‘)3H<¨¿ÛHù†ÅÔ�oBÂ8%–Íáô0#D65ÂÛw—�OÅõ#Ž“Ó §KG‚VE ÆN«SÅ-,eI ŠlH íßu³qFNJ`xÜÁE´›ð×É ¸u¦ã"ù<[š5{‰ ˰ä¢PäŽ1G9‘qguó�’&›'­Íณãl_+.#H��Qz4«ÍjÙì¯RÇx¦Yžá"ÚuQ¦û¤yÛžzH8¢„ûÂz|ùbd¤¶uîÏD¦æò¼é žVL|N:{Ž˜§Å7£ð¾X®MG¼uþÙ{yÕ(ä´$þC‡CzdLWp¹D6ÃúþyÖ75(’{ÃÕÜ–*™"ÂÒ&²è«C¥Éc‘çD €&¹øþ.¿JrªWµ"—ŸÆ�‰2¹+Ù$;„E�˜<¥Xã{ò¾÷r×&ßw;ú­…dE䣒Ð_¾²¯µâBhÙ–€D–Ö£�Ù„±$¹\"s°=LjCÝéÒÖ.ÎŽ[mGÛËáóëRôÃD.å~Ö«fвt·B¶Ï{Ê‹¬Ýã©ÂÙϨÐZŽÓÔnÎç6Ǹ×|Lî¾rTΆ7^ç°åq#b|\¼á?îGfÎÅn–_‡Å£h…­»lÓ,-G›Ø—âq�FíœÖ�¬©�þT|Zzæ=pŒ 8¼ Õóm¬U.Ç,ùu>j&ƒ³¡¢œÖÁcÈ*æ¶ðC°��Ãj=PG"5_}zàÊ¢Øsñ0¨`*,f„û�¶KõÙN'ÍvN’ ùº ïj{¼‘ŽßºO:÷‰Ç{Ók¯�àÄF7nqD„4Ž>Á¯n"Âß“¤¸ÈÍß�ìþÙÓ`I0zú ãÉQ¸Àþiiø õý¼’çÍä˜MÈbtF£¦V˜VçÄѽìhµÒYFÔØ8ÏŒ„€iXB~]'¾è–OìõöËI–‡¢þ[…6Ð äzŠ�ñäÌþ�Á¹`VÕkɘÈé º˜™$>÷Ãà• Ê¯ uRQñÅ~Dk3êX¿ÿÈ zθ”…�RN’KðΧ=Ђ7íCŽ’cù^f9­AÛ÷)[Ï~�0Í�ßÉÑ[^¥o|a²)#„[öTÂ4¢¿‹g»?�2ßÿšŠn¼S~;az*�ôºÁMJ¥Î¦ ޤ¥˜Û¸Ö‘¾dÍå<9ðù¥©™cê±Í.W› ùˆq`tÕ”†ÖÝ*µDœÕË­¾Vy¯±?":>]”qè2”Kn�j·:whP^I×ö:xêéunÔE`YÔ ò­¬fCØÖð ñ�2Ál ™&ÍgˆÂ¼�¸}ëæ¯uóËX§ +ñç÷¡é‰¦#Bò{ RñÀ5@Ú¶Ëá¿]‚¥ÌÐ yÁã,U³™ùSXÖ/-‹ÐDœXûp®ðÁzn¼ÌžpÈÚðÔ’¬WL‰ ¡†çc˜¡—8†QzWª{©½ë·V¥jB�éqƒ¦=Zá½ØNŠ[gÝV—¾)Ͳ�tÌvAœh½K‰g—eá¢_ŒCÿW[6¯ˆ©kÖºjæ/yCºx€ ž¥Wí’e\‘Bê ¥u "ûº6•*kkJ³Ìõx«¯Ò 8М߿ž8/u0;K¿…älIríñu®sJÍ!•&Ó�û1K_GK¤9勬@Þoòïó4¢HÐlHéP;[é‹»– O4$îó˜ƒçºK! Ù˜GqÕr¼vÙ(`UÞ†p•]ÈRfýÈnmÍ1ëkcØvCqàR�—ò¨žÞÚeÕÕ'í…«›¿†à½T|áÕ°›«8ÏAÐ5ßY¶Z“ 9 EŒ(K“Òë|¦ŒÕYúÈ^ð%1¤ÔKq¸•ú¾¶wéˆs¸-•d¢¬šŠDÞðçV�<èÐoˆË£àÃJfþ÷�ÜÔz.³8óû½_¸ù*^ͯßï+þÊÿ ‰ö9;“¿þÒž�`þü‡ïC‰ÄŽâÍø,îÈz®æÌBdWÛZŠõ¯1îÏøÖû Kšûý�DÖ÷‰:´1~{ŸÕÄž{Tü»næó— +)ùý‚!ÌøüD5ÆûYö}ÏŸáçî¿ÿ1{?þdáùÀ;OÏžLÞ>‰þµ©FyªÖ÷¿2ê_õ¯ŒúeÔ÷˜†&Oþ14ØšdÖ&Ir@gfc' ××3ZKÄTÞà€1å< ^Ïö2Š!±L¿í#œ¯ ©¤�ë<�ëàbžšJæ}cÓ®õäkYõÒnkÑ›sŠ2è$$0˜�^¾mg¶¤QfO "š7H¾Òx /“Ó4½½¹£Ò$“Úd~÷`=Ž&E³œòÃAS4{Ú2{@}×ÇÕº™z‘\L­Ñ«µÎ®òÒ‹D%I~þ7ŽïaÂg´Îüe�·¥ü–KHÂNÓvÑøìC5É9ºj­�Þ‚™"èܦ9D>L7Ë.%}í ~ÿ!qzÞ¿�AAÀã/»½¿­ê±šæA‘‡›|j4U± šùÌ]½Õ�pÕopPNk‰i‚Ónµ‘pŸ~¾C¨— ¯Bb½4.즃lÉCC¬g.&ýºËÐ�yP‹º™È)ȧ3p'©XDXܵÈöë—y\³Ààl—wÁ£„+MÉFCi.)=à30â6Z°™%…‹´Éº¶.¥]jÍóìºâÏ ºª‹Ë·Ðë!Ñü/iú|>šÔÛÔuùúEM}†ƒIfJø¼uÎQ¹J.š÷Wø8ÙÙˆöÿ&ÌUÛŸ?® ûcŒü*øõ·Ð$KèÅGÔ»*(o1UÚîp:óÕF¥xHß÷ò=惽Rá,exÚ¾Qþ=rjÅcz•2œc8Êñôè«4r’ÍÐW&Ћ¼‘Cy­­KFÌî:ûÂKª½Ò€ôïaÎÔô�(\gTa�D=Ù&| ˆ|éÞ’&%S—¡µ]]ÿD+´«õnR»†jú£dI,6ï †!Ø[jÊ\ÖK60ñ}H)ÀÚ9àšD%iˆO•ˆ�²«S‹…–’غÖKý0-dhê2 +!5ÐûÝ.€ë{ ]Z§zZ/��×êéBþ«©÷ký4¿ÖòaO„¢`fñ ]m ;7¯Áp—L NÕdÝx¢©£k-bÐ3D4ëØÒØÑ!Åé·Û@ŒSõ»#ïo¿.h­¢jl~±¬¿ÝÚ|wUeP�|®¼HÂÉÕ•1ð�«Üp¤vaÙ°}{¢ Q6µ@Ã[é¹]ÖL÷1,'¹™óÈk–J;YÊG ÜeB¾ŒV�Ñ3IìI¡L×$Іn§ø2›"Ü!;è£g=$k*"…§Êgc}›t‡jý™ì¦P¥_YZ©ë¼û.åäUÀÐÆGÊ¢©JmWv¼Ô{·‚�÷€ÿ2þÓ›šç›°›Ý[| +Æ-L�ð_ƒ…GU°úüˆèÉH ÓLËo¬%DÍiJÿ×G±ûÑëB’Pfn4ÍY^µÖäv¿¢¨Z’ú–³œ2DerÁ$¢óÁï[·ÌuòY®W”dÌ(Ÿ#k\v`É}1�´Iäñ]^/e±Cë[` fGè±ïš] cE]F�÷ÒqNްU’=“ÇÝ¥ˆä7»Œ…Óbǯ½"LF ¯Iqà,?yj×#Õþü[uÛœï$åCße€Œ­xÁå‘Ô{Ëå(æºâòOGÄ€E Münq÷…œ˜o+oÐwQ§C>8,héÐÊ> ŠÖ©A•/p± îi¾$ënÃ%ð¼ º×LöR¦#Oþ +!€…ä�ŠºÙ+Êšæ ¿¶Lõ¤ í]¥·“V‰|M©¶nb1+äΔìò^!�=u ×ð ¹9[&¾ó§Ž:oÁï% þAˆ�6󠙨9Q.þY(S��S�ò‰y§`¦r¬©¹Á^âÄäX�c"Ç6tÚ8wU|í â21Å¢¡ØHãÿ±_-I’å6lïSôÊ!Š”D�gbvöÆ÷_˜ø2«jzº×Žð*ÅH=‰â€È³ b4sÕA»;'æä«ÁÑ5¢�z +m†:­ –^hcÛ Ó­>“u&-_çAѶy=â +(¿¤Þ¤…mŠ×ÊÞ&°,舛mÒ¨B ºAMHõ!X)ó.it¼×I¼móå>ÍS°¨'·Úì!Ë^šáèòrÐEÀöÇfi1iÉÞ¿dVð¥ 3xµUϵ¥ˆú_T€¿’xü2sœ?è P}±™�äÕq™§‘ç[Å�w.ö²„/R¼Þ¬T!A6€w¯öhlž–RG�Íq¨vúh=%KD®zâù%yøå"*1 +u®7ÙÎËÑ,pl;ÔV•#Á÷mïdw,é Ø<á@:owÈ]&"štA1¿Éá•5¿9‡ð4ІPXNŠæ0¬Á‚²`ì�2+‘‰Ø: +*�Ì.vóUîÚrUÛU[›E`Æ®JÆ-ç$Rµt@,½ú¬Œ9(,oÇ Ôð¦¼ÆÐ˜¢a@,h�ÁôŽ»Û`20,çÖaþ�æ¢ßÆéa(VFFk¬s¸ Äø›™vª‡îoIļ߬�§’Eø{ Š}æ“CéP`Tƒ Þ‘ÄÔ%©,×H0R‚Xü,± ‚QC Uìà°×ßÕ1ŸÖ„²¡ûÔÐz¯ê]5ÞV’¦mÎtäÔ +g e{ÈïsIÙǽµ€ŸdÞ²&ù;è:'Hÿ6uDõGâIP\ÕŒi Ùîh¶¡£Žßc ‹×zDü’±ù„°¬–a5ÝO-Óä¡fö!œÐú¹­à&Ü£w7ÙÙ¦LÌ599¶¤¥ÊVINzéöZ£�$@Á]ï“&”dž< ëØ}8PÎÒý{à›bUuˆé¢ûÉû‘lŒðj­‚£ÖÆzZœ÷ƒâ±,ª–¹¨’Ü“nÇéYdiLÉil|ã[o’{¡�W“/9‡í`c«ÙÉ�|°Á;ƒ`±° ®�òBÖ`ðÉÀ \ƒhc‚„)%òš©fO÷pÙƒÌKeÝXsg0‹Ã1àîÊGnÀÜú¯”¦ê¼�Qe>Ma:™î¿Þ¦K¨M ’<xÃP„q_è3)g®À{²¡9òP�Æù'ˆÊá'B¢ +­,žä¦@¹åëè,ô'GGh. ÎÁå¸Á©É6a +ðWøéB#à�p{NÜXÑ™*!²)N&§€ Äãž ¨k›Ú‘a°ê&qxd1$ÐÉ"Cp|h˜WI�Ÿ«·€â¬üüF½ÅWc“ŽS¼‘?Ö¡r ÖÏÞ¤u�t§«¹.�;xædsú Ø�ÙkD&_V¡º–è*è²êfV@�«%µXðÿä¨ ê›ZïÃ]R;§@ z©ÐMZFÙm1¨r¨·“z"g’‘H)\R˜ì5v�¢ÉšL<Îìb´‡Þ;>�`Â8?& …šóF—Ë�…¢yD„³ž—æÃ=¿ B«Êägy¼ÕÒõ ;P†¢¬âàè BsŽæ`´Nçd\ò+:mDlyB=ʯ© r€<½—š£·-ñM|q9HõuòsÚ¨G Ùƒ‡ÍÀ¾³d µ ˜Â%�@¿x5OY=™k j1ê†Z6ç¨z0�?RÄ AY•fÌRÎ÷£¢�“9}+f·^’�'ü³à³q«â˜åÙ÷<%7è;, m9U@®ÿÔYÿþžÑ]Õ‰A‘•Û/"Q MBPétŽGÊü¶òÜ #›ƒ%]ãƒØ~Ij#T™à}`ÎATUÖ«Ì£ üxF¶:E€©>šŠŽN-][TÕn;Óh…«Uß©p‘W�þü kðc«÷“Çë(LúóÜ °çú2gà>ÛiâˆõkÚxžù2ñþþŠQéŸxõe +e»¡·‹OøÛ}e¦öI O¯yA–vÎ|ìI È'ù2ÄO³qr)8±R +Ž3ÞÉÂ@5ËJ©H*Å寴ûCàü2’Ô&xÚ�þ¨$‘ ÉŽfk¸lqˆ¶àAùø¸IÛ#< ê=øt¼­(@Y—�ŠªÉªoüù½ç¯ãê¦}˜ØãByGí$ïÊñÕ~7ú=Z>/},�ûôÄMW(¤ººƒ-¯žDÈßN’òäïKvÿ‚¶ûÖ2ÿ?Úþ�£íYĿߤqÞo¹òèïu’ƒ#œª à»dIeqC�\x=WE±1Âܘ”D€’2Ù,ÕÃÛ*n½gQNºó,|u³�ä�ó"˜H6ÝúãÅ&b>>nóaâ+ÎÁJsÔØ`&ÃUâ ÷-è®1²ýÈ +T¾<¼5TÚ(t ¸>Ä1Â(¿°©,� " &Õà”±È´k£Ld¨Ùß‹E‡_F^¸Êã–ßxÉ¢@Ëê#–(œ Vë5< ¤Fk<.¨¨ôÏ8�"D5cW°Ûë÷âŠD_‹â𽞦ÐÂlŽSø^Õ»M1x +G-gí†CklÑÞìúÅô¼%¼ÞRqr{F/‘`Û”$±Îô!y"‚‰|e¿sJCŽ3R°1ûêŠPìKËAð¢Øi±¦¤Ÿµ�«p¨M…€OÔˆzáhcÔ§tí¦ó’­(ò7�ƒrø”Ê•ÀÙ>[Ì8t^y(¼|Å~$[ȆµÐź+ïþ0M8–©ÔÒ> +øžúÄ b�}×vÛí±ÐíŸBº@'¿ß“FëçN`Aß4fi©E�(¿õGvÔE¿zm3s ßO�Rc®¨@ćÉëÁ6W[×ú\ê_Šºú7|Vi ‘ƒºJì_Åäƒ]5­ËϾ•ÝQ¿-TòS„»ßõSüZ ë´~E}b”Êm°„Õ|ÒåRÂMˆÊM]kÞÑô ѥ䥟¢ƒkÞ:lnî°GcÞzÕT�˜R6v©O&=r³¹×+3€ ס=±autH¸)/£¬äó:î[»s†èÅ” ¨Ñë%b̓öœ×¢=X.b³Ö”D8™ÊjG!«¨u¸Ù×@ wç"Q&Þ1'�C/ +õÝ�ÜP@ ô=ë1J�bÂSé³á?Íšt•[M'e™X@¨B³ï*†€Ö3„´XQjö|õŸ6ÚÐoÑ”¥¶+:óT­`à«Ákÿ?)à“¼:R#¬Å<Çœö°ÀuÔê´Ïk¥R˜T¼'ÿ|�”)*|‹4ˆví[5£N~¤�6Ƭ”hnÙÙ\ü6ŽÜ£Kò�Ç�vnöõ�Ž!üF—éˆÒ¯�Î ¶Æ”Љ¡ÃðÊó$j™–€è³zÈ65¾/KhÓWûQ€e÷h9ÏÃ*Ûq­êØ#4‚_�¾+î%û�E¹ÐW•9x—s‰ƒ¥àâIBƒ‡)º4†v™é'`j‚죨ß$ûRŸ!¡òI„q’@ üï¿Ï�ø•‰þ½"R>CMû/ÅôÉðeœXø¤CqßݯƒHÇv�TVLkG ©ÀÔv¥P$+õµDžÁé"Û»Tê©6YE|qÈK‰Ò1o>3¶f’•ÙžS‡‘“DñUF«é“v?å½IÉ5C’ð¡å ¹¼À‘Á³ê`Æ=¨�Òç1TλýÆøÉÉb‡‰ð !o1`*â*‰ƒ7=-—™µŸ3Oz¹¤€á`tèüžÑ¡ÁÿSF�é(�Ò›–Áÿ®ô«�zȯLçPER6Î�¢ø›h¯„œ—Ÿà¢šòoèè•4²»Ú»-ù˜Rmlbò:$á´WD8Æáx®M¾‘Æ!à©W“z¤4q Ûý_„‚D*´´u÷‹àæ{ê*ž[�ö\OkÄ|=CqŒ~�N£›Ý×\ãyækòþû•¢r|âu/«P^7*Æ×Å'ü×ýÊÌ}Ø7a×J=2]IØEôÇþ”N@•/­H¦87‘µ‚3×.Fú‘iŒY‚ÞK®¹«(Ž6n#…� ƒ±H1³ÏÆ¿ïG‰:eŒYÚa×>.ËìÌR”{iœÚ��.Â(‰<58M=�·%ç›47/ƒŠ@£”•ߌçzo¼ÇÁ%óÞ44B• é�Py—ޝë7bï¾§–ÏK‹ h§zâVWTHëêìòêIDù{“Tyò÷[vòöìvñ(]0 ¦ž¿®'`¸&ÉÇBKF»´x(i‰ÀF˜O¯gØÒL ’�Mú8!µÖœþþrjI)´,î” ’WSã ¢!è±ü} Èr�˜k1CY®,ýÂ2\Vod9Òý)‡ýeþzXßñ�ãHõï»fSMY@yè\ò4‰‘·zo_|>§ ûE\‰âÔΙqQ\häû"w‚‹fWÖ)ÏOÿ‘Ç‘àÿȯä×[™ÌœTÖJ—ÎþÎÕœ³�úÜ"øa綘.>%R~˜h+º½1£}¸‚Ôz.@W1cÐ5Mê+1h )›HÞÉ*¸•¢6Ÿør·?Ö�®êÙ„AFÛ³ºú0 í¿†²·4_-þÜ›ŽwI!è}4ÒÖú¾ëšhØ…õF�~?Mªg~³BafD‡ÚÕ�ù‡jù3Å×å”(d)rþ¬ÕÌ{¾¿ô)-¦�)pªÈ�Îâß²+?¥'?¥ÏKQ%Ò_¿x“=GFžWìË~Œ’<2‰äƒ Öû—IƒÅ™J  À1F"Œmç +­í¶ÛcyhWë¥aDŒ»Æ›5QG`Aß4f—¬Þ"^�hˆ7.ƒ¢Fúi‚E‰Éš‰¤!jQ B"§¼lsñÿìW9’-7ôuŠ�Ž ®çQLÄ’3÷7&²êuAN7ñªŠ±$2KÕz¨zLõ/‹Úý;5áhj8˜²Ð�•Ò¥Mcß5­ÃM7q­JNYDü½\Ïú¿Ö‚Çkq¸’”³�«Êz¢l?}ßšÛ¤WEˆÊ/Š*ÚkQo}C‹Áõ\¢›³7z;uX’¼,CÙ¯�L÷Ôë ©ãØV6Ÿò/r3ÏÎŒ´-TŠ5SÊd&=ÀL·Ðq�Úmmj¼„rÁÑùB\Kº¶v,¶—’;S„±ÙH¥ÛQÈ*aCŽ74ÌP¤!¶)ýš;!®’ºÑTß¡HH'ÄòS(ÝFw�9ô-†p;}‘ã§iqªÜÎúX¡) Té¢{ŠJ +hE4qw�Tô¼ûO/^VkDS–Êrtš‰l ÃÀÛàßÚßÔ)¶‡0$ÉHœ_&GÿûÏû\|*±@ÌßžøWü Ãs¡ÍÏiOœÄ=6~§½‡ˆþf ¢ö’© ½1fØÉbþ°Gæùâþ²pú»ÃRµ¼g,±í?ÿx½X"د—K}ï±n„ñËJ¿oàΔ¢Ïàe|;cв½^L7hšz}Ú#÷ùâþ’„ýg‡‰{Æ«ëÅ�æõò�ög>˜×w¶×ÂBà­ )¼æË‡¿šÄÎ_š-Ìú�Ôú‹mI|ýa¢p7ùs‘Hz­ªܪ4‡´ÎœDÖm N×rV6Z5R +›ø@ëgÉž"Wµ…¿[X.Þ¡­$9Ø�œí«‘… Mmަ¦²%‰0³Vz�Vi¶¤°aÿyí¾à[´ž0 ©�3?LtToÖlòQJ‡—¢8©™½­Ò MøÏ4�ïZC$×óDŽ’:8fÄ÷õ¿’K-RpqÊ6Ξ8o•Åh¯’âmd)ÿ$”j4"<ˈcŸóø£0�¹)5¹š�E„HÇy/� MÕ-öǰSÙ.Fd[Ú1tµº¥zçô¨×‹kKçrJÛ`¤FÔk"¹þh(éšú=\G<«/�ZAÝÒqŠ$±©¡º¨UÏŠé9YQVl×NQ™j W QÏi Ô&ö�rSYx.¯*Ž‘ù’¿…¿âœ1~]Ã+zm–Þ�…°¬®Ä-ÄnÚ2 åy?f¯ˆô‹{W}Ööé‹’X^@b¥šˆI‡¢-›h}lÌ¿X§Yë‹aî²Ìs¯UÕ¼;é‰XâßÕºÙÍ‘fœ‘âúŒËœl®Úùó¾Êc0?¡šÝÌ@lo�5Cȉf ›T®KrÂ’ˆp¾NeŒÞ¥I!­Òb^ÃQKõ1ßB¼+µÝ±[Òm\¿Âí~LÎw–Ú»‹Ñf¸ž—±Ã½ƒN±�ÁV›0¦²äànsÌæÐ/"q⋯ð¦†×ê: |µE Õ'$œË| ¸n„싼’Γ‚Â¹·£âÐ"¯$Ò¦Û]~îzD Û)–™U)ýÚ=¶ËäwIX+IØäœ"îP½ð€¬-êÒ÷úaÁ•Üyj+~3Cèàó{ûfצöoNIo–s˜åX!h ’@*êÙE{Øš°t»FuĵÔ›ÙORÝõej÷up#5qñ&R±ûÍ0¬¡ì÷é‘(µV, ÄV¬Xqr?‘qøUÚ7:tC|ñ›Ék{¦>ö\./+e4™ +ËÁ~¸Á—C!Žô®y-Åj¸(ÎÓôNÂè¸9YõŠ¢Ôu†Éb[ÆÓ®ŒT\Ç¡HŸ�¾7^±l†£3ljV}{©ãa�t"^à–ßxJné ¿Lruë�i!®,Žt�ýN‘!öÜy&+˜}Xg“¬”fH¶Ä‰xC«.Þð÷�™s±rç,‹^=”¨�¿Õ<³^›]ãŠûR,ë¬r-Në¤RÕC)°Jª1 ac¨(Œ¬+˜Âbô³±D‚�‰Šºñ£†!–wCD¹¬‹‰švM¨F?2¼®�CjW1â 4šQ wÃD Ðøâ6DÆ}¢êþ¦ +îvÓvN"Wº.¤ÈûõŽüêø�û”s/ïM¯Å è}Çݸù‡ÔGŸ`׋TË´»å“$_äæï[vãÎ}û?€UùµQ-œwXŒÆmÜ4(™¤3¨<Šc×eÍÆ"[6¶$ET„pF0€ñá¯Å`468 +ÚKÆx‹m1ÍU_l²¥ê¯Uýh�9iVñìÑ´Y•îšÝFq¤9+·8åN"î°’Y£ÐÁš¼¬à,�åM}Z¤¬ªd�$ gÇ ­ú>c¨¹³x6b¶%ªL˜ù¤Ó-ÁìCº�»Ä‹�<#À´X4º‡(}…SÀe?3Äÿý3£cÐ àVN\»~Ð�wûƒôÞ½Ö‚À”*ƒ÷0*•G Ö-ÍöVÕ{ݘÛdŒÍÊ$÷‚Á¼)(ìÃ…ç³ÜÚp‰ ‹ŠØP¢K¼ÏVøY¥ÂÜålÑÝäx8`©í¦vœê)‚#�qj¢j„•i¡k–ÀÚí']¥ÕUX݆¸1Žï¶«xîhž…Uê'×<Ö6ïw¢”TBç9dYõzŸR=hYÇmßÒ7\�:O Á° +esá„÷¢ �ô‚M©‚¨¦ë•ùiR ¡‡ôë÷Š˜"@{¼ÌþIHà*¶å·&÷4å;�mŒW¿¯av®¡MEÂÖÁhäéþˆf^*Pì�ÖQò ü&T–¦ûð+`èÜwG@Rˆçipº Õb>ÑB¢ˆQˆÕÛ@…¢f��k’Qó’Å5$1ú1€UÛþ-µÂ&$U«Žö‹agIänžòÌMgº +²J aXÌ­1À‘0{?€2D5T�!¡âëZ—•g ZÐBou�iý@Õ“?ÍF±i’ømM"°MÊ�õÇŽ,÷l¯©ˆª25$Ç`ñà†jžq“·)�-C7K1ç(×0#Bý?Ïv2!¥Š—°Ç¡ðÁ#sk­Î£²x6'©ÖîëòšÃϲШu_š¥¢A“Ìi9(6@mBô°´-1ŽJ5?ªL]”mÕ!æG…ÄsÄ ŒDHñp + S”©ˆäÕ¨±ž'}7õgµ*Z6tÂ!‹’'d!D°¨ð|q½ržBÓ9Uè6Ä*JÜ¿–`¶[CpV•mrK¢ ¶ŸÜ„Ç6ϤÖÅBÈLÁ/"Û�Ì.áña²¶CW™!ü —K 3ZŒíÙ> +½f›¢®è�` +T%Á«êh7£V'Úë5Ï~ QV+œªõ}ŒœM¿íbŽ}÷æã6Ïøüy4:I÷¿Cñß¡èŠØ`·>üN|�!­¬_OÕ™N¿E·DW9(ima�-$2Ÿ~�Õ•ÊW®Wog=÷­�’ywRïÓNet­ˆIø,óÀA<±l”?X.<ï·o=ÍÝžû\Ü<‘àDOœŒŽö$×÷ÚÉ¢=dn±ú–½‡j¿ŒÃ>(D›ISã!‹ŸöÈ<_Ü_yø³<­ñqÆèÿùÇëÅο^² ǯç6ýÁjóã…Ð~7Gòã`5.ø8¬çqœœßlBƒ¿¸¿äÿÙ/{4gr_e/ ï!Á�çq:÷��·ÀnµfלZÉ !µØ$P¨*øøë½ÃIÄýŽ;U÷)N2ïS¾“ý¨¼üÆo«A{}}mþ—Ñ.D:½Auø" +aÂ$’BÁ¯8ìâ¨Gr­þã};¹¯¬GÀY‚+[Ó}�€³%yânJ!@Ô§T¹TÊÚ¿¥Ÿµê>¯(Üp$¯ÉbµÈ“œŽ&Œ.nbÏþÇU¾��ÞÃeÕy(̃`‹¡Ç{áPsÅ�EÊèÎB˜íÚ~‡À§?"×EÆP=à„@/M°’\+Uuen^k™ñÕïo¬ËëyUÊ”žZÓŒöš2qÉÜ D ÃWÏS|æ7ðS² ·}kÆ0ô_¸ÿúþÍý¶Õoò7ÚòAþZäq›ëÉhñIõùÛ’I½Éÿò|"ò¿w8¼{¿ãfæû‡»ïSn¿ïq³|Òz@L6Þ;„~èK|°×ƒüÉ~�ÿ#>äÿøDäïp%â¼â�©ë W.¯3^¹þ¬Æ/òoaœK]ÿS«Ã•—»ž ­ÞüÙ릩Ê4öÈòÀÊØQl˱Ž¶ØšHÛ¼{½�g«—u·zßÙêtÖN¶ÖÔ­Þè”<Ü£¶£1nõSÙëb§±46¶ìõzÖï^'z4÷ìýwøîõŒ¼ëŒb Æn‡óG÷ÔW¿.¬ww{ñg··õîöúnvñÆÝìm¿›½¶w³÷õÑìí?6û=Ú}—ñu_Wp1¢ËÆ×|]Á3ÎÙƒê0Å#S7,^üz‚¾xÁµ ·/£ÊQÑJ D4IÛŠ¿ÊZ83%}µs´­ÚDè á˜Uß­­ª�;謴|�0Ý.˜ó«-¾¯§.«y[:j¢c¬F\ ‚>ÀCG¨%âÂæÄÛŠ;¸l( Y�2=FÕÜ+Ö͹OQüÚºJ4‰t£©P-^“¬öâýâ©@zœ>ß…ô¸rˆû¯HÈŒ “ÍzE¢\œ4´†Ýshî‰}¢HDŒ”?ä{Kº?€¸‹Á÷øXŒö5ɨO@QO�C€³¦Œ +pñY˜Œ 'í ”)*àœÛ”ÌcXåf0{¤¯\Á¿€ËZ¼¿Û�‚Ð[¯*.ˆýjÖcÞ:6­žšÑoª"^cÄÑWbË*áÌïðd!ᶯ úÑj>HÈY+“’! Ô&�Bä‹ý«ÜËny�e”®–ÍAÆ05™ëÀ…^šÕófd‚6›Ü¬K ! è²êg-Õu3ÔñmÐ8««K{š#TPò†d @߯)»ähò U‡*ÛLŒP8s—; +‘U‘©Ú>ʼn®í�M|²IÑëñ`¨39½¸ÐpQ"�L—ðújœ£‘eùgúðÎøÕx™ÒðP•ø¥+I MÞ�Ú¦Sîzf{w^=³“mu!p-é8Yu—Ûš®çÖVñÚ¼.7k½BÜBþjJ0r‹Q³«fÏ— $/É1"ÙqÄ9ªáS¢—sø†mE´�ûË ¤ð°ú#Ý1k’ÖEyOvá%êÅE·sUÓ³q°†#Ú—e�R,^“š†Á@TeÃO hRðH¯¿¸+œ®Gë$-Ü–JÒQ5AE"Oøs…‰‘Ÿ°§¿Øa…A]q–a ˜ï;üa¼"™ÂdY;Qa3ÍP)0tD.—Bsér‘‡Í’€ÍD–ê°!ÿ˜ë¥Þˈa‚Sš¼§iŸHacÌp=í�36E­^Ô-šzóý󴜊htly­ÊVƒVŠÞå@£eÒºf™!ô˜fX&Jr»îÖåà�Ž•™ü¦E=_ŽvJne:h]P\^„uû,_ÙÁÝIž—™úÆE|ÝëzÉàr²WÖ‘ùêŠ} v£èþHäÝ¥¹Uý(W"4ÑŠ:I´Î¡+½a +…ž*–f-…"¹Ñ/÷JbçлºHk- E5M‡ó¶ +ð–5éJ s¬+IMªD¸Ü\žºñØT‹i�T7*ÄçUœ-û—,cÐÞ*gÐVƒ¹½Ëßa§ôÕv)�&œã£×½¾À¯uó¿"\ +÷™`íîK[OóÉš:§Âæý¢ѹè7D‚µ/ $¤›õƒÃÒ0 ­ªúÖ±ô¯îߨ‹ojÔ_.n.Þ;³2By‘æ�0ŒÇKz\kʨ±]Ç^çÖÆÎîu°Û;þ¼ZU-ðí5½Mõ³æB+`–íÁR3SãQz‘¥Ìv”©Õ‡™�cŒ�Ã^•­Ö Z�V™²¦¹ú©C-gÐ$Mª­ÝëÖf•ô&egùäw>C.T³¶nw”ú(VòµÊJÑÊQÇÝWÒžt=xÙ÷d´‘Æ-³ÓÓ±[Mx7øGûÿÍ#îè×·`Ä´^üé—8�ÓŽþL©1ÚûŽÀ¤Ñ©§5cÌ)F�nŠ™ÏZ`[Û9Y7 px´&”çZ–쎢¡rYå�‰Oeê¢ÉˆVZ¾ªIùFÏb=ÓLÅ”øù!ªÙeV¬_2OMsUÉùiŒÈdSªÀÔ¶Øc�µÌŒÛ‰LÃû‚¸NŽ¥¸/.)×eê5cš†‰Äv?#…1X`€b“Žœ!w>ETþIÍ÷Š´Æû¾jþUó¯šÕü«æÿ‡jÞËbæ]R�¹XO+e@d_‹d`BAèµ·ê=£ØÖγ´�¡±ÖѸ֠ÑIÉç_WGeÔ$|üBm×´•^ÇÐ ÝÐê!èwiø.ƒðz(}ÅÓiç¨}²&;åüOÈI<•´x^A›"Ùº ªnÿÔº´]äH0”Üm:X=îÇÄ£?±;IÌ䰻ܾ·-"6“®eM|/I¨l)Š9–¬�¥NX_òIôs¢xc£úMhþŒ^9 Ý¡צQ€–ù7ûerÉ’Ñû—‚ +”Y ö�‡Wö\F³ñQ,’­À·á¥;‘ÌŠp8ÒWÍ“P y J¼ÞU±„!ê¤JÛª@¨SÅJ8`¦Þ²ÿ¢ ?Ü À1%ôÛÛý«{»^IÑeÿöv¿½Ýoo÷ÛÛýövÿ—½]=lʰ×F!`…~º9W±† y*Iäm54«ïöÈæ”ÕM•:KPJ0@©n�rÊíö2àíLˆC†(ðâ_MU´‡>úîÉÆVñ…›#¹²‰·¯)+¯ÆÙÒŽ_'=úÊ Øî-¬*Q©tVîd!ö‘x‘NIàV«¾m4ϧQ4¡–, +Ê™EÍ�ìÎ>a®žQè¸øé�¯o;·È¾¹; 10n ËõN–¹ºÃBcËæ/e?Lç,“CÙwŒMfàƒ1¿‡Add6³}-jV†ülu§ÁiórštêÁ/¸ÏSóYjÅGAM >…Lœ¦ëTÏÔ$»5Aº:¢Ù¶ä^ØßÃ}Œ{Ô°ˬϑTí`‡“J­­Ã�:Gþˆíà|ؽ4zéE:(�ƒ< ™ßcX¸©Uã{Z�V°_‚º.e1—U[D9HÒ¥»#!4¡Oè2qâÊ!ôïÍ +Qæ��•’{êRQmD‘G£ô�¸Bµ¿tECj?äÚ*}\û¼&D+S±óÙúʯ=O�Ѿ‡¸�Ñ_¢¥�ÐÁB:Õ2†Û€Ó%8^”Àyèäæ}VEI?ü—Ú™=$P™Ž'ls¨ +È…0lÉZXÎY‰‘_•-g)Mb¢k�˜|K‹¾�Ç´K´€ÑÎKZàv+­Û"û´¢"p/¢ Cò´¿ k%^®&þ×t¢�“¿¢AÎ;bˆë5âPßÀÔÊ5˜KþÏݽ¼Å瑟éu’×Ù¿.ì®Y†]¤ÊSÄrTÃ#m�NåŸÕ_Èf¤�†füy‰@;?Š3žØÎ#/,:½gšUÔßÛßÿórmái^½Pµâå"ЩÒB½H˜nS�zêÚŸ¡Hì ëÛóWzôhòœ7×*¿A"å×âŽë¿~ÝKLµUÏ¿ïå0סÆ�F÷UjP®ƒ‡ŒK{�‰™¿ðÞá29zHÇŽPŽ*òØðO +ó¦69xÿg¢\ê js2(H‰-äLj‹˜xD>˜k°£9Jxu #æ‡Ì˜ åy;HNʦ#âÞ¨{ø +KC‚ n:_-€ÍF + )Mä3E‹9êÈ{b¥ ïv*L]Ú×RvïV¯å㋪þ,�ÃnLó›ÜËTÓÒ¦ŒfRÖ‘ÆÛ=Ùlœ`Í$8®ž $äZw·Ú°z°ÉÁõ�îÓ˜÷˜3xÿg?OŠí ¹?*#Õ�Py¤>¬“ÖóóEþB/Ühø…nóæ +•ÈL� ;[ÏO²C¸Ô˜,ú ½G}®ÈÉ2„u%ð6}Ÿyì¡ä(’zÄÊr¬²„nΦ•Ät·¥èýsW¸ò¿2r­±íí-ÈŽ× )ì�d¢4ðÖmc3©Äm͹Á;)ÒžÚϬy®Õàdý€%Õíe¯!º ÈÐ‹È œSµzŸõŸ÷u)Ê8~�‘¶ŒÖC‘€T朅ø®“ú\Øã®,ž'e¸ð!¶=å™:³�VGÈçl5½•‹¸ô¦;`ùç†Ñ% /ñ.$t×CGΈØÍh³ü¨UñF5uaÌ—ÄËS?# +½ch‚æyÜtÿñ¿¶Îs^_°Sø|A)êÃÓO)cT¯u¬¤§ã?×%²’®°K/‘õ1ã£Væã†Ão‹‹µZÔi!© ×@Ë‚s-a£è­®ûÕú½?7èøsö‘¿$zE‚/¦ î¢ÅK¢C77›¶»Ät쇂¼تRE# ·J"·˜{Gp‰$*Y.£‹1‡ëcé�Òy«ãàúûKí„;‡[;Å©Ì�¡%-’b€ëbpÖI=7þP¬�p+˜Sù?Ææo ¯[œœ©¹z +ÎÇ#¦A-á0¶º˜ñþ´óŒ‘¹”öœþK ÿ€ÄŽÍ�‡„Y,’Þ+$¢�vMHìB`ö—!kŠÁH´Œ¨�žf´/7Yu¥é©àvST[–†¢Þ™ÂsÛ±d|§SeÄ̯BhÇ#Ázȱ¦Ú*­NzO”õAP$�²ZŸ1#Øáö§ +qtÁNIÕõßa13‹;½ª”.„!^ÝÃø‹u1�-§ê¸B¥A�°‡Ý®•ÎI'&À†ú©ûmçN"^}?_<¦zí¹J:Wøó¿<µtX+Uôä…zŸ±¸‘_ªþlÜþ›ÎQd+O<¡hîlÒÂ,[ʼ»y¸ÏDT†¹à´=wça5I`Ò&exHHs„CÊÓÁ¹Þ“¢oR2Aë �Í!vXùÌ7¼4n‹ÍãFÌBÈa“‡ÂÞ V=û6á’m³ÔÂ4Ú`0ˆvÕõn‹440ä ¬GD{˜íqß7B‘ˆoIêt6{ئ8³Kp‘†4;ªºS¥'D%Øèž&L KNÎì'Uè˜3[0u›˜piûyÈŸ6ƒ¹ÝÿT™vW28»˜�}<Ã÷Ÿx618i¾Qs9Þ­y*·†Êï$²€45Mjþ Úe!o\2*ªyz; +ê�똪¢þ�Ã/t0$šë¬ŽRþsCÌ·¨-Õ€Äâ'1n¡vCÍmáV¿Té…F?ó”zœŒ†æÈ4·ê°ÚÃIµ‹F§}(ÇB&Ãî£ÙP™‹=ÄcM™cv$B7Êl­‚mz €b>íÓ>`ß犦 \Y”¡6 +m›KÎݰ\ú3B¡ÍåÒ.:›Þ†½²’ߊ\”AšßY|óS¯Ø7¦ª²·|¦‚Mœ²#,`ñ/4%¬miƒû¤ÿá K06W0ûÉç¼Ì¿dÝbK†›jÈš��?³.•´(fÀœŸQU/„ÊmÄ&r¤AÇÜ…®ðF‹F–âÛo|úV…q…X9„ .0ÿÇv™$Ç‘+Atß§¨ P†y8�6ZPóïoÖþ<€dQê ™^…J1¸{P®}Öçy·èCPTÒòôA 47s®±C=Xh¿D<“Å ;ª@Ϩ?bÔl`õöÍ3{Û î2s1ËJôaJ»›]‡Vý*uÄxsŸš�Â6xjo`Ù (‚JŠu¼3Ã;š„–Ml±•E‘Ni�:ÖÖ¼é,©<ÀÁÕÅTDÕM01ÜÃ|ZR8¸,Dö·ç›Æo[Åžâžê¼Ø.‘FÖO*гìEÚ‡pÿ&„ešˆq¹�îõ±.¬VEÌhÔío°½\­’êMÁÄ�ñ3�PÌÝ5%Jc-¼ ‰ŒÂ_è–QŠå1Ûò0ʪ” áÞÈÉÓ©7Ʋ…hž•FBT^A>J®To‹SÌJ°‘ÛOu…¶�Ä«Î×Quk+¨i£°�rÿN#¥bßšÝ=Å<¶<§%Ëv¡t*9…ÖT†[ì�iy '.`”>ùbÙÌ*îÖì󊿸`A~ZÞ6Æ5¿»ÎÌŽ¾JÎyÛœÌhëpÙd®ò5>M‰êŒI£Îóì¹52Ú=L­íÀgm[Äf÷0“lTÐÂî {¹Ï1LuûžøØLëõ&[Öó*m2W8ŒêfÚzžƒ}Ü“éÈZ@r¾dEó[ —�[ +Êû’Ï ÝÓI ãü¯ÿ}¡\F8°/ÌH í6»¸L72K‹oì$ƒGÃN›zÆ>–�yj—/žž eí°7ã¿>ˆ_|¢¯{–Ùs¾¡ˆñÁjE¿FiÔ“_6t�hú4}"ù347éÌMÑò5j>ÏÄd�q�OóÏÞÃN·»—¯˜(ÿ¶d•Aÿ5s•j&œ–ÝÇLHI�Þ±"§iÌólá8‡è•· ËÖj¯ëa†’ýAFg옎</µí^!¾X©Å##�êÈ4¶Ü·Å†ê±U}OÏ6Ö&e�ŒCæ’-ƒX‹¾ÃPN“9.cŠbh×Qûy~u üo™$‰¤ª+j=»r Z‡<Èå$z+Ѝ5d«�ðý-Ø¥Ñã‚Ë“.4y&«3C]g¬]&[\ZwŒ•ž0c0Xxe‰i$™Þú6=4ø�©/žÙ{·yP”ϨTʳ'5,& ¶]#j#À¢qpi$ê@M0ÓÌÌ$®H†ZV —6̋𶶋3sP'¶¸“2Dº=ÛV½[Ùtƒ5s{ÄVƒ¨UVú´Å ÊMoðóKâ¤0ÅO™ujhWŽîldG8Gê¶åªÚ =°Ø•zùý g§vZûDÉÉmyV;¸e§à��}ÿµ=t9Úšû÷×·r¹è8?EÇÎÜ…Ër òÁŒï[|Ÿ-�Ùµ&4bßÙbq9¿Þɬ^Êô%h¶7HŸÅòóÁšf9[ +2³šëÑS¦x£œx÷¼ŽP¢7=b8 ÿrÄß)Ò|G—å(.䵯Ê·‹ +#«_„tò®]† K”kAÊ=ÂÀõÊòUç¾àç½Fè¨Mg±-ß׃æ�B4ÚÔfe_êë˜ïay[vÔº¬~Å"^¶¹yV„==ö©�9°Ôzž)ç‘òA$Ä’4®‚I³rµž+eíÝ#â:ÓS<'¯àé)Š•ÝLsfs=â4˜æF$&Ô¼ŒHZûœNúíÉm¸ƒöV Ì$ë/xêB7ß�|ƒVï +CˆP 2±y¾£n]}`Äå€[ª¤.: &±Ÿ`K-¿‚º”d³fu²_:©‹™¯‚Æ3I"£�ô·V«­‡ÓÔž‚ ,.OÃû²#Þ,œè÷ž�h3)ÍÙþÖ² +ÆtŸºM›ÙºCŠ[�‚җH»ƒY)­½Ï³]d/1ËzZQÈÑ2¾HJ�Š—ó6b±~ÎÚ/ˆQ‡�1Ùoâ•qDbÝ�wwõ‰W# ™6Û9ܯ&SÈë�vøŸÅ¼:kTXêù^ÌÙžóSw+¢ÍaÓ}e rØÚ´õ±ñ† +Å(Žó+ß©Zån² h_¶CÅ›×q ‰jÙºÄNP´}´ [dYÁè&• Þ8V¤œáV�œÆÆÖ1IH«=ÙŽX=—16éøpbµßÆöx‚Î70ÙvcH©] *s??Æ:/aF„'�£—8!±©µâ\aaMó{ûÙ†† ¿0v‹�,‰G2&Æ8öæ®|¿kÛ›±‰´núí½O/LðŸ +ÃmÓ}‘±êƒº}„­TŠœM»‹Pg¿¢,ùuB“¸±¤$OOµ¯’lÄú_€ÞÉb’ðoBw–˜AïCtã‚ùÖN¼;$Ÿ¥C4‘ÞE*àÎÁ¹¿mŽiBðʯ6[+EÊ-Tņ£ÃKÛnè·¹d{çàhœjÄjÎhHå¡)îm²aë üüÇ£E¿6ûÓ¹ò7ì±)YŒAÃÒ¶(í WÏ®#G[ÅÀ»Ìn­;iÙqÇcÝ”&lO8ܤ õUL¬¿ÜÚd÷Ät—<­¾þÿóo¿akUµü=õòf9! V}B=ÕWê*%¦ñ…~¡ëȨvø­ç\ü?¤1…ÄjUhDëÂdÿœZ÷Ò¢Ã>ðŽi7öU†Û;ÆK¿¯§Ÿß±ª¼¿¯=Žw¬¹4½¯1¤=X’ývk¬Ç7¨‹¤x ÃÀyd t,|xQöwŒCöº(û¤g%ÍöUn}ÖÅÉÈÞö,ûõ‘ç4­T¶¢ò•DÁïyÝ‘£xR«­>±|(E§Š½Ü)å ÙRB³»g±s�Ô‡=_‰«ÂÍ+b VCûϺA·HýÝôÀ3GL¬ÿ²_-I’�0ð*}�r€Îã�o|ÿ+3Å«êž9‚3� +}2S“®°ÃÍ­àE‡%@·˜‘& , ).ŒÃ.^M–¢ÔÝ�Ifê#ÐÉÌÎù…6Gy…ÿ“66‘©¬mœ1@=é’ÂtTn`/Ì J Ì,î ½7(%1³TOHÕ³OhÿæLÖ¼º,è6¼é@£Bj}Ú5ä”L=™ô +ÚÑ.BDÅX|ZhÎ2w½p¬+•¯™ˆ¿�ø(.AÀ¿}� fú/SÚ‚E2cdX'=Ï@”P8nj뵤Èi´ÍÎÅØ�HB ½6r: Ú —:ûL/æÒY”*îƒ.‚ÿ‘{Cޅ߬üÚ�Cm“®�™þk»ÒA»ÐŒÿÃo�Á&8À�1ÿF‡ {5Õ¡ë.v˜¡Ã¢ÎdùöÂrHÑÛ¥"Ç>%隸N·M=†ñ,½q +Ƹp�tmÄÂÙiô®z •wÌ^i£Yl�-Æìgñßwt%9Ù]ïz!ÉjŒCÀÂÂ)ç=’ÇeeKÕ…¬�ÐÙ½µÕ£údÈÂQ4õL€où ͪ^q$¹œ/0€Pxƒ0[oÚ¡ VßSjø0Øw.YQ¾Æµñ:$å¸Ñ�¬Ò—Sñ³~|Ðñ¼«Sªô®QXð6�Ÿ+¾tcÔ ôWj[×B›A”à\› ‡Ÿ ì»Êk‚Oãäz$j�È?+¿VЙæP£ãÊÔ#X�ʯ•7¥À@©€J§5¢f�|&^VѿƋïæú °#CÕ«,•~Ž�˜ðBžî +÷Àï�`·ôn^1NüêÅŒ\Ÿ­ª²Ú%â@ö‰Ô­Þ`)˜]ªÌ ƒŠl„kÝmÎØ*u²ë¢!d?£Ê�€ 9Ç0Uÿ"FùØAà( Ĭ‡Œà^séú[ciäÜùx’]IÔ¢�*¦o[R~¢,ÄE]»6eHÇïû�L�ª–¾ÉN&øÈÃr¼êsÇDU®’uØë¢•oÐâ 0`¦å_%¹9Nx² @Œ¿/¹�:Qñ«¢& ««šÙ\·îëïÒû^ˆ¿p ƒž3þçÀßr ãbðN$Pjcè +®Ê0#W:…žQq p/â0tJ@­Ò:ì�šš1� R@ÊO"{àWâ:�EéÚYw[ Þ ¹�¬k„ŽÎñyQl™a‚'³þuù (>¿ê³ÍUÊxøýòí°6:믨‹€rx+1{9B«¸šJιÌ'ådAêõÜ +ÿ?ÃyÁ%+שؾ½ý�›ÌŠÂ¨ËF�z¹¨!ÓË:%ø,¯nŽúl 3“�@6%‰—|òpk :À)ž¤µ$–AR¥®fPã8äŽ/Î]˹j:!ǰ¯KQ±éÉý—3GÁLËRÉœ±ËáÚÈJÀìæO»hi›©åÄ–É<,§S†R'p&Ï áSMà†QÜ °×NE^@ÊþX*a(.ÃKâ\û +ÂÁ'°l‰`›ïC4Ú¡¼’±LºFÛ 6¸ƒÞ(�jÎ]XHBÑîQMM9N«"zÉ_�ê©hnBu¶�D±Vµ*DÂ"Ë•WE*gi3:�Y¼È~,�Ôõ)DOôUL…ð÷¢= `Ì ÕÆ8ˆ /×™x­³\È�há\WÜ‹¾ÔrÖ¤‚ŽºUY—¨rÜKrÛ¥äµ{Úâê½å(…Y)Ét6“Z†âèÅêÕ(þØì)Ie$+Z¢SþË<Í߬’Ç&Ï‚ò{æpBÀË<è¯ïóJ³IÀÞ™…¬ïʦ¯ñ�ªOìùÞº¯ÚýN`Z�$}4’_Kmøó‘‰ÎРОâäSXD—°0êv ›¿™„oë/À"û—È�²­Qõ}LT|Vg¢õùiJN¡Æ±Ôªû6PНEeÄkP×>v†~®—FyÛCZþY?Io{ žõ+�÷Óž|Ü<V]?f>¤if˜†ƒ•¾à}æy[�sBâ¬kuÞ´V¶BwÀ§g�nVÆ#\ö‹"Ú;K:swd-¶oae?ñ*%gœ·…&ë‹È¡¹FûÝITš×²a?3(‘§šQ"f+Á»¶€ª4ú*<­æÌçcå¿�†ôl»­êç¾Ìn™ŸÝaq³ñâ—-‹é’sSÆhÂÉe¹ÀôjEh›G²4 ׃M4Fe3h¸�\›ù±J›¡á‘ ³›¬�LkÑÞHWa§™ÏóêÂÒ0}¸>‰|,îæäÀR ]ž7ÐŒêå°q µ|©KcÔÙmp.*B§³^z7Çd9+CZ ˆu�á"Lä22xxóvGÖ¹„X"f=Ô¯Œ~\’‡@ÆBôÂgÈÏ_Á �¡„^BŒ±!ôЄ��†³ÄÑͤÑ÷íZh¶§½y%4õQpøNž,¢ƒFIÛ� ùÕHñò¸”%ü�p€ç¤N©FLe/éÿ¨‘޶-À<ÀHó[‘Ì!tÔÚv5ž¦kX±ì2bxB’¹�#úexš"nx|µØ«®¡ÆI—âìTg‰Þ û壌R]sg?šÊÙ‚6º´®òM¢Û‚Ÿ]š]]ª Š¢¸R›ß�aö®¦R]oX¿„ÔTe[êkv]VÅc÷]¼hÅ0Ž. „0¹l“cä•Nc�÷x .++ëšœþhL‹!^DO*iÈ�…ˆGÏœ�ëu©Á1ôŠ#ùé|á–p$®±¤z¹jh‡†³w2áà +�&Ùw9€M6^'}SÑ�Ér;bk—¼tÝ5)dÈ;ã1À¾¥+d:=>W|鯠44mT¤…yÁ¾‚sm²Ä:‹2N° ý‚†}©¼Q°ä6>²S¼'XÏʯ•©<äB¨ýHc^oi@©Ó+‹wªmK'%ZþÇ~•ä¸qÁ»^ÁÌ öå=:H>ØÿKÙCÊ>{ _Ø•ìêZr‰Œ’t-v;²"ñÄ]¨ä»È3f!ç,ÚÒ�̰•ÕWš±‚^hÆx½ñµ&r!rs…“ÿÖeš«ùyGVW+? †3Å +�³Zª’íÐP�2Ûo@£Ñ'øn5äº8r‹2f èÂäŸèaÚ^‚n[±�V+«Y”õã¦äÓHÇ_g‘F¬¼k‘iÿG´²cR(}›„ÄLZ¶±,tlV²zÓIJW‹8´«�åB.ònï3ÎVwk ÷·9æb›O¦¦K™†§“KFf<ìEÿop›ü«ø]Q=•S­( eí0¦æ­)Öò(½Ï…ø‚ò^©(h¢|Iåªs™0¼hRÛfÉb‹„á÷oõ°êÖŸßäþ°~ð,]ml ·,Mm"¥jL¦®«3+�‡ÄÊ©„å˜ß_N®£$‘n»ö¨²³›T›NÕ(H43ÑpB¤w÷_â'Bô*c|ô󤤫»DOFX$ÐPÒœ¾?ÍqטÂò¨åæi~-Ì[]xfZ&ð{f+GŠ>Cˆr˜EK\DÈm1y*eø4—Ðû!¦fÂ_Ë4'“LÙ´ Ë>I“,V‰Ž3'ß°ÖÙ~ùfäÊXÒ¼c1ÈI‘lB“~uô»�`­ÐÊuZ�å›É,Q1ÃNI=Ìnóƒ r(-*ùéÅJâ“Ì+çHêW³dÌ\‚H&Ϥ3Î3T:QSÏåÚÈô=CH™ãP²•sl$1»w!#¢[3C�c!#ÜèÂ�J·k-Æ^ý +@P›µ» óÈŽÜ„_sˆ­[qÿv6¥Nਛm,ªÛ™U§Ä�¬Ôžá™ñ°XÄ£zIkþXÙzŸ]Äë/¦ÑŠR„SK�«Á#CóÕƒjwQY×ùȸÚÍ­ò>ÁW»IW<æAÔÃîï—“[—]ÍÜí#b ›|¡óôý°²Þ5ÊUùÐ"ÀVÖIcf(†�<¨÷y>Y9 +SÓ^m"iè�ÒP”…Bá‚hµ¢±Wñ(kE "Ü�Pmb¦È¬:}m}`@NJ‡tä‡H{µnÊ2ŒV5ÄJTf[æhÍ|U‘¯—ñ>ĉfÁÇlbˆLUƒ_\b ·eÉ¿çé§‹Be­Ôðãô‘)ÑS˜�‰C7�}¸svÂŽc¨¥«‘?xŒ,ŸæN¶’D» O<ªŠ©ÊØòˆ<¤³:vŸfÕD_rfQwæžìÛ*öÒ¬}nfobþ„¡�]£~"Ȭ¨­Ó+ºŠŽm†ô9›È?€¸®n88ì¾Ä.vÖÛbÞP¸jŽ ¾cØ×Û¬¢+.S\<…ÅíeÅ™�‚‚ys<ƉôÝÌšQ»Ù9n¦%ðÞŒÝ×vc[Ú]Ä0Yáàû©ö›"Ïæ �FrB +w(Â&RXCÓͧÕ&ÙȧwŒåøv¬,§Iœ*Ò²�:«‰ Þ˜Þ7l�¹�³SUk�ÄPï´Á„Fó,®1iöO5þ,*îºÚ©Çø$¢-²8A�ݩښzó¸Ý[ŽJ†}¦4— “òsñ㹃O_â> òBŠÍ‰9c±Éþ§|b[—?™vM×.³¨ÓÐCȯúþÔeÀlžÒŸ¢œB„4•æ;š«›³RqJ’yR#Ý©ÄÞ…üVîtUpPK +šÇ‚WRcó][¥ž…Á£�qgqk­!ݺ[z¹EùÁ­ +)ƒ„Ë`ÁØ’—<ó~·J¡h\°ö-. +Ræ¹g¦#ÎHÈà1N€ñf?õSîoa_89‹¤-½¨É5ElÚ´¾ã™Àe¸oŸB�î1ë«q˜Ôé€R ûðÙ& \*™‹G}ñÊl ¡yáœyxë„Quiʺ�Å£˜Pl€0M!©\�Òt‰B�¹³ç%ÊÎVêY8r3÷bzk³.Á½G2¬žNULn ‚ì7ÅË}¤'kY›&õ R(?t  û•í�¿ô¸ +ýÏpRLr²|‘ªÌè~*’M]ˆ|`ËnÔ�"Ažµ;Åà�7«‡$Õ_Ø@�Ý/óŸíŬçiãÅ �•Îà™]ÔÇ´b½´Ò§zÌùŠl¨‹©º¶îR˜òwÛË5Ħˆ»g%ÀšªÏ*”€®¡Æø³SU¤)8†ã®š˜Gf‰ùV«Œ–HÓÙ2>Ìeùn‹0”^Ô¶5Щ %ÁwÕîÎc2¸3§ÝÀZ¢Z›eÒÜÉúd±>5�ja‰Q°eÁ±[-‹€ÞŽñqﺸÚû’ræ4$±7ƒ­¢Vˆ5&ËIPÓéÁ®2Ù@’iT#Ö†H?º#- ËÆ‘d”hÌ»É$õkïž§»7– +kFPÀ©§ŒÍã ’€ºÃz7Eê´Ê¨ÂR nàÑ·’“ؤme­o·zw©2Š[4ûM .ñ¸ÿö™ÜYªF¶ßI0,ãŒ'š�gÙ—ü¢pPº… f YÕ½ˆVÜ&ÄJæš\¨ñ@›ˆ£*ŠY)–™ùB*QÈa>T\yÿT‚l4„³ý¹$’=‚—’ƒg=VQs‰EñîÉH¿Ú*ƒ= í¦†$8Þrøó¿œý/ÈÙÚQ‹UÙÎd)þkSp€0¦ù%Ž:‘bëkxu‘ ¯®ÅÆö%ŽºA‹þ͹JR€Ã‚\“I`ÃíÏ�߯¤¹b`tÙ˜ÚÀÄî ¤„ÙÄvª<+^yy’¿òz¼ø¢µÇ +a'1/�Ï«øôiÍÇÒ±yü‘Îw€ïq/ª´_‘â§;Ö W д/|É+èdÊE +ÚÄhWâ’)1|«¹Ø_µd8v<É<ãŸ"Ž~Ÿ¾�w8£�oŸß<}÷²ðÓÎçD¾Iº;‰‡+×ÂáÆZcå z1öåÌñO†f 狨.I»ïæÓ¼—…žvz:Èã�'¿2B‡_F�ù¥†¸m¡žÍ fC3]ò«‚^¨NË :}± ÔNbÿ)¡x6qƒN³@¸�¹?ÛÈ +�3ýÉœbÖÚ*C‰<™¿¢ª8¶qªœ ˺\å „°Äp°äzGœ DøR•1Ò ©bû[U™Íù 67Ȳ6xK¡Dbà¨XP¤µ¸d:¿mÍ|,Î…°…È8oqgP§bŒ„µ¸L‰eÁÙíEkN§ílk0°Û¢-ÞR®øíH�oKtKÞ= +–Þ¡¸©>Df��Ý’Bâ„Y*h{ö4CÞkÎ\Lúº%\¦`B•eˆÇ"ôwI/À†ååìp~0‘@õf%¸Å]9O¯àE&4s•WÐzICâKH&`†.´¸_°XT)eî,Ï}ÊŽƒ�âBƒ3Îäº[ÛõE§„ù!üéÂÒ3�J³ÉæçÈÞÂ'¦Õ*Ç”¦Pò|ƒš¢àX:ò‚þŒTÅÆ}­Ø¡¥qþø¡?Êʧ&b…fW°liç¼ew)BîUãôI_T5IÚ²R{3aGrö}™AçãK­²åkäyéNû®Æ@ݺT!ÊM·¬ø¨çâÙz çn…´§ªÇôV)E‘9ùñSê•Zk–]iÎ\gG¼"©ÁûydÒª»ÈÌp"À‡ s�'èm(è0‡g 9ß$G• `_²Ú&ÔîPê-<„‚§ÁÄ­׺S‰©`Û íƒP2YÐÆ:²aâ^Y)3Ú¸-Z‹ Lø %Ïs“};.Ä:Èj[˜ Ÿhâ%ò¥8U/Q^§—½‚2ÑyxÖ¤!“_—† ¦’> Î¬T~ÿñf]psÒå4‘pæ£¼ÏÆN.‚¨BèÊ–6èf ÀIôX�§T$j3ci0�¿(/w,É‘†ú³ŠÙ@õ‰ÿg=í<£öo?\0B©®gœª¤R)1HIZ Sºù²jå«U©hg\Ïç�†ï"ÒÔL¨FÞnñWOs¶?˵þM…À·Þéj ×ª¨úT“qåsŽ,‹�¥úKQEeÚv€N~LpÿeÂ×Ði´$ˆt©ô§�Zøœ—±"ÐhÚ…‘1Ì’,±k21Џ ÅÜ9©e»eÕ·:‚;»Ži˜ÔàP�£ù»ÕâÊóTËù ƒ +t½3Ç€©É }‡ôýêî#0©“ˆ¯‰˜²íž‹l§¿™šˆ±ãPj’‰U&4f=#“M I´¡Ôá�$V+º¬O‡ŠÄ”¦eÅR{Bác†$E¬*Œd”)^oå©ÌCô/N»@oIqinJ:3ñhü¦¥§¨V�íÛúÑÖI|²Úª%ëJŽ*³ˆœDÐÌBØû¶¨u‚™8Ë(–�T -hS“£s©Çæ;ïë#Åd¤¸m«ãÍTÖö –9ê wž‡ ð ÎÖqYë0ï*Þpþ‚Þ `úI·¯D«ïg$¸IóO•3¿*v ¸Bž—ûAWŽ—aÔ©I ÅÃ%,r­ À¤çÂw´ng[=Û½iðZ ªÞ±Þˆ3K-ѽFS´ÿ¨°¾ +&†…QÕ¿‚ò=`­F¤Îiˆ÷Kv#Â/�º 8'ìžì–âWýe-ÙŒ¥ #S¢LÕI´®îàQ¢Ý“LŠ�CÎ^w”g‹³ î:DWÒª 3ˆîwÊ^1]ö:ì1ŠTr—'ŠëÞˆmŸª¾�‚ayyÂÜ Ûmd¸1z/\‰ÛŸU›‰ìÆê™)Û£�ÝÐ×H�rßfÐ#Ub‡TMKüàRÆ„òsßË[<_ Úœ ‚¶ß Ÿå ™Ë^ö¤ªÛŽàx2QVQ&AÇ^HK_!ôâªøëùN‡eŒ_M¨ß'ª=õÐ(o;<9°q�Iü§25•[³¸½úó}’l©F7^¢·�óò?óòjeCì¬^%sOéñèmPÎRéNuñ|]ñÊcD·è²HݛܚãáôØóÒâzZ8è$èþØórZËté•Ôôµç ¡v²×5–�ü�¸+·†&èþÏX¾be¶³¦wëH?cœñëö¡·©o«�á�ø_w½<ä²À¡‡]¤¿�²;Ì5k3íàu­ˆ+´§O°àEoNÂv? Ú.¸œ5b÷`ß ÙŸo™J;†~[¦Jì pRÒb{8ŸÁîú~Uª ®Æ�‰“MÝ9ÛÕÄ­#˜ç×èÓ;B…Ë|6¤znÝ^üU÷:c'‡…Ør¼E;f©ƒ'!Þ1™ +¼l•ì16û¨qÏøš\À©ÇÚy{‘lvÔrí�­b™&ë! 3 D–íPæÙH¡ÇíSíËSçXýÆrE–·?%ó·Kòf6 Å´„à U}\^=_Vš;Î!²Ç‡RœÂäÆJ¿¢Aã £šIü~¯çÚ©T&vûòô dØ¡*àá°ŠDªÕÂ�¿]T -ñÚÖ]wÖ±}ES¥ºêl{EÜÅ89 +2z¬”Ý�Ç4Ü­&±d–Ψ\¾‡íS�]4Ç:‡µ÷*Cêñ€¯y©Ç«Gçühl¹Gg8Ïb‰ë+Éè�»£šy„Í›…¼c;h„rhö¼mxŽUÿÏ#â4ã—.xë´¥iô°á|èÀ®1¹¶+•I +ŸØŒØ§/ï¤%¤A�2 T\ž]wxÞþÒ׸=.ˆ~©‹¢ì}!~ ÝW‘~¸„¯Ú]oõó@ “„í¡VJ´cûØ+£yØ‚e»T¢‡©ÚªÅ^ ÉÉOÅ¢(÷{Ážg±o~AJCWxåö†ÒšÍŽ­Oˆ¨ªß¯¥PûË/6ÎÃÿÔ=?dÿs),ZGÓøïQÙ2Ö‡`Ãi$œlf÷«‹µ)1ÞÙª m/Z”jZÀwØsü¿ßEѺ‡f|jP½Ÿeû\−¾ùѲ±Â°.Gp0 À7à¥x .»\ agÕ;‰bjðØsYŸ‘RZ”ØÉö¶]M¥Î’Z;ó+d³QŸ^1Ѳ‰·[Bf@ߘA€öƒ2áÃr, í™L+\ÛÇÞ4•’&™ÒjÂmðÝ(TÉŠ;¬šê]êI¸­µ|,Ø3‚~S„Ô«ð]±ó¯ážRRwÀܶW™˜NÞâÄ.Õb¡¦2Æü:b@{¬ 8ÊOEµd¹MC{hßz£›j¬«³†Î¬`�äa7-zÃ^7žÆÍOóž~¹†-+м“{Õ÷ºÂÜ ì�Ù¤Úp/‰_¶ák•Ãa¬züjÄf‹_×SÙÅÙÕkH­9ê[ØŸ”À²Óô†³½i"YËKJÛ-ä­{e™¬}EªÉŒ7,†õú¢Ft&xifô™V-·ül5žVáöÉ=V*¥ju‚êÀ#a Œx +×›”˜h¨*л �kïÈA ‚¶vçÇ2´±7á!â3›b�÷·ÉÈY�m6%=°…\³¢úeMœ(8g[lž¡>¢¬$µa�TëA6¡wß¾�ÎÓìҺ͸uyÑ f”Øïó{�§¾§aêßötLÛ\Ô½Ò¾‰©!B´ðÄrC´eÀ¼" 'øý—RãvB�Œ�%v@LšÑ�díÛ~Åž�3µWQ‚ž”…Š®Ôf3(h«’c}ð†‰è$+{OÅqÌØ�w…ª05´t›iÖpQöIs ¶ ¯o‘éTûGȈœØ”sãm%Ñð'å&n& 4~øLÞ «K2³‰¥{íaueüu1—é…�2šydØt«�ëa‘?8æn0¥Ã¥k°ót5û磜~í®š¡`òþùeùEÙPnfä¼rèxî+w8¾Ã u£[#OÀ_7Âí¿çWWÒã‘jw[ã�e³áu# ,Ž"ÝÐÀÖÑNÄ|~¡ÇAÉ÷qzW¾¯Šlö+³›_üïÖ*, «Ä„Y?y|ŸnÓ�{e×¥K OÜÔýúÆ +±w·¨±_‰ ¬ å?ï”X-olжûiˆ(tšê³��ÞÝM¼ÆÂ4€!q }¸Zíq¶@ÂÖÔÉä¡añR�_Ž_œ+â…$tB‚fé¹€²¯'F6o–I0ËÙÿ§TñèE~â“p“³°‰ŒŒ;jŸ”»è4ôø¦,ûÄþø¤q€âû‰Z¾¦f÷Gت ? ? {�áôýu†‹Œ{†‹œ{†¶î@J H‚<Ž‚‰d+#{Ó^hYPÁ�©)«âç$çB c"»q�£ý´ž·Ÿð’Ë�ïÁ¾?Wv7gÞçéÍèlÐõ\øýdõ\ú†§ÒëÕ¢åç™'zŠñÅvD7a?çæÏÓ_úo“ínNèŸ]áýï-õ˜!H³×ý'=±‡QqÅ€E/†»æ§>¬ ]ŽBD +ãJQðÈþ‚Ÿ Ùì›�¦a^�q Ö÷çŠøîPT¶|•X“{Î!ÿUÌdÆú” ÿã8— ŽNh"iâ6aÏÿ�LÈ‹�Xqeëg¼®²-´þ¡×Êš¸ßÂöæ +Ûsá[Äÿç½Ì‘3Yn ìó¼GU]»«�@†ž?!i Ê‘î¡/Õ ŽýòG/ÕX‰DÚBàÛ¿ )k)E„ÚFjå\à ô ªJl>fL×ë—Ù'ºY_æÈ¡î~Ì>æGLÜ=G¨Ý—)B´×äã0ô»ÐOl®‰Ð›_¯îÿš‡xô†&Ï#ߨjÇzbSÙLÇ…M ¶z!³˜|n\òlÑ´Qq—µ9ÝZtÙ§4’¶F˜¶ÎXRDõZ,ܬå�¶+Çx„KÀok –ç<›P$ÌË¥z_Zš,ÚDS‰•òqÁP×ÎøzéóqÉK¢¶:s±k<Õ +W/v „ñQ¼[IºôDb +Þ[_/qÕã» +v1’t6r6öÛ‹\9/Jè·KŸo/T=‚ÿñKQç¿‘›ÜjÕZÚ³6ËÑi™ÇÏ�Ç +ESÄŽlß¾ÑÝ˵ +?háÑî 9‚In>ÚWtþëµ?³ 4ï: %±M‹2tmŠ€ˆnF ‰ð'\6Þ¯:�Cûÿ0?fù<‹HýèÇr×Ï~dãv—kõiö|Tð¼ô(àÚ +犯b•u—Ož¦u<«w^úR(û.(ÌSjÀ*¯(võ�7�³×\ýü“ªtR‰BȈ·ÿ\L²f»HÄYAÅŸ„qçòõÊÍ gN9+t €]Û>îª~}_©‘écèÆbôõÀ‘°réÏü}»$’d~Ô~ç]ñH¢27±îê=é÷*èŸÕAŒË¬iѳFž~þ÷Ÿþt–„x}T�8óXï —"õ9Z•ü¡B+HÐWA0ªÔ4Û™vŸWXϬVª‰\yµ¥P�¿˜¤n-¾VÜ_í䬾h$T�Dµ4Õ~ÞÑ� Z²iøŽb™”C¤%²+ .Ú„pÚ-N�¼qH¹)C´“-ff’4hGµž˜ì¢Èƒ£úY‰š÷ºoN‹ $ʨsÿ–îbs<Î[‡N+ïÚ²5Í¢€\Kñ(|Å7È¿„ð¡/H¨€ûÓ0GÙ�.+lßjU +ˆ~XV(ÝJ…Å´ná7ê´ü’V“’Ñ*†d“^Â=E„Ù,e•¡<¬•CgŽÅîr=ÆÃl%ÚâÀÇj¡á=쵟(.ÎXHKN–ÐÌrh^ÖÚÙÞ6ª›r*°›nì6]­çŽ•óú<‚SÎH„^{�™-uÓ3±ï òhÖzs„3”»üV�úeF6Ó¬×}Î…¬ýú!o¸<ü-HÊX:eoIÙê´–ý¯ú`ÍpFD Qù ñ¾|%VKb[3 +àz`'éc­!‡ÖÃâzõšw!“´=ÿ¥x•¹€ˆÊQ•|ÙJË@}>ÑÌW>`ÂK±T¬²·¢(+E»öpXìòA9šŒÞx:²™ûðíáVÈûôR˺¼Ι–åÈ +½øîa§o:ÂKŸ»,¥Æz‘jßj\W§çcº2ÅU— /¨mzÑ(ˆBP$Wgɲq�ÿ4U×x<.Twøv†ÉÚ~—HFy®¬žmÎ7õÜPk<›µWÄÊØ¯Ç.µ(t�– ¨aÒÜç_îÎiÊ—ÉRRÎûÀ^g ¡¶R4ݱÁkQâH–…dåxîXLÖ¡qÒ¿ó—ˆsS=³ã_Oz=y½Òþ­ ¤ó±‰e¯? ÎÒè pùQ{çªHd„Xá1¥j$Ñë¢ý§Ã¯8í¹î¤57Í2ø(P93þœâ°6’>õ’f$UÔU¢ Õ|IÉâ²ÓhºzE¤Öäèh6Ê¾àšØÖšê—Hg4-mYû‘¢)ªˆU昔&š2z×Xј±®A€ÒØÅlÅè9<Ñ4{ “áùV×^«6I*ŸLiEZ+ߌBRv¸Âݺžšp6ÆœKìFÃ¥ÊT¾Ý;ІIQ�’²æ”—*þ¨¦—=Åõ‘CïkIïqÄÐÛa „b�§tˆ§"Û²zŒ¦Ý´ïy$F7 1 +E)1gf°@r³›i”€×i¬‡=Ì{¼9%@ñÁ+¹VmÍs0WäŒl¢¾Ó0Ͼԫ¦ù<6‡bÖ[J†Ê#Ut§B-Ò÷ú—#¿¬#ñ¢"ðíè1²Ô–$iÕoMÖº’È +*]%�(MÍýÒe4uð¤gø­RÅ*óV79ñ¬6Gî¶"•äjņ[&Ìhâ)T%ÕÁ ê€Á·€q­>À š­Íþ� n…†ˆß?ßpyœw·"ã<�-6ÔJÚ]b\ÓçÝ«p"pÎ$û�诲:Ù„[$rÝåMÌ»O_Hû4«4ü§’0ªJv2#Ã~í÷iOn@Ç©›úW·(Õr :ÅàP÷LëtŒ‚€hðø–¬…S§ �±�Ÿo4$í¶M@¦ŸGr;K¤q]…†C—?±FàŒòb%Ñ^�t\Õ PYqŽÖgH°‡ÖK¸”âJ)Ì$°i¼Cdaдª¶º™æRÚ·ÅÌ1ض ^söZI¥ê7S-²mSÎi/Oš?áC¸š04ã»c¢bµ§ddK£æŒP PJÌ󇹌J )½šGºE7uœ‹|á˜OeâÒÉW4ÀÊ·Ÿ~¬FÎ4ÁÒ”¼¹$?”- +ÓÁÕŒœW@Ns<·�«UPéêr¹P�æ¹ ý5pÃ\þ»ß:GzI¹ëì›,«'�´nx!‰A¤ó‡h€-ñ4ƒ˜÷'J>�ã[ùüTx³ž�þÅÿæY%I£Ubá.–/ÞT¦ŽzeäUUIÈËÚ'u¿j…X«y¨i»‚ <Ð*é!’’ü®¿’æ¢õo+eñ¤#(ŸÒDWE’E:É÷ÔSS³‘€ÿÓ ÙÖŠr…f*± �4‰µ*}€íl±!’.ã6ëm%µ(H†(¯þÂ/)ròr®j¡8½kÔ¢]Þ�°ÐŽÛ;D’€²½ëM*w;×i�ãvî£V� �ÊÁÓõ–°´\i­ðD¼¶ knº´8êKZìÀ +~ž!̪7”å�•|”£þXÍFF¶uûöçeOÉë‡�S[Üåã(öxûاP}ùHì×á#i‘† _Sß•�t©4ÔŒ\×î}jW´e¿¾«Ý4nXàËGì zht× ù÷TM‹Ûri?O+ +þ147 +äìeü<];ñrû%¼}�únWwé·«0¶«‚M½\QúnãvwòÓïÖ㬰<®ÚëkùŒ:¢ƒ$´|~αYê_xàjù’û(·´›ã¿ËÉ9Á²ÝÚ8ÚVìv:*{;%ßNo0l§/¤l§…£NbZÚ¶‡Ðiüu61cl>\3j;æ6õ9Rý.c·÷¶¶÷Ÿ—M¤­¿ïSø½ÙOXœæÏÓ‡ó§"ÝLç>ŽŠßg’lmú÷öͯo§Ÿñ±þŽAÑAˆF¥ïdPºJªMî$@äÍÎKòb{ÖÝìaßÍ.,­G³}Ñìt¹¼›}‰ï^Jv«óîc6Ü!¬Å ä V½/æ/,KP}QÊà´Öe�.6N)„æ¶p~F0IÂÿ(nFCÎòŠª-Å#µâ®x@+R³5-Y¾Lµ:´´Ž¡©¦èeª9 rÑ+¬$ô ,§#Û äKë;qI{ ¹W<Ò|J'o±á¾f JNÊß7ô^çÑwèÃ:7=˜{D‘çÍÝÃPc:�št‘Þêý` ùŽmMtôŒä¶€{^+KÛ1X9µs$ŠÑIjìmŠÓeÈýÚ]?ë¨ÿ0w¹k)oÎX Ýñ¸ `ÏÓN[ÝüowDäj µá³c( œs‡¤jýŠIYèõŽ :’{Ä›v­®gLUºÜAýŸý²×‘$¹�°?OÑ/Эüÿqè dèü�Nkô9º÷ô™YUÛ#�!¬ÖQc��fVU&É™t…VÒ%(¯¯³›ÖUau•Ø®±]dõû*«Vf3[�ÙÞTÿ©Ò G"Q{ EšWbÒ\R;‰IÀ&F‹˜ä.Í+1É|é ftèåà—ÍþÛ¶¢ŒGUšº¥ÒV]v+L©¯Uf³Òô¾­âl—êLXsê—x‰øcvn€±J�gS{,ÇÊT&O\1 CfËæS‹ºñawækl§q�]_V؃^Ðl…ø“v¹Ý/ó)'�”ïñ²òüx‘›MþvC”@ö$#ÖR™kQ±ô6Òõçýò†BH£ä¹' Mû!Ûµ÷·�?ÿrûÓ_¿…Ûïßnùåæ™Ž!pà +q¦ú\:üc©ðS \RjkGÐ,ÀiÆè3S_–´�®¹–+©æðZÔ½ˆ<¸È•.ÝöyYz~¼ˆZþni‚ +µ×#°(,ôcA[¿,ý̼SŸ“™»]0»ç½é~Ëžge ô¤ ‰<ÝdLF´^–ž—%j&ZT¿ÚèÑ­œøUÂȨr€U™ÙšÍD_–.øÕ>øò‰_tótg¹lDú²tË%Ü—™\ŒQ±+VšI‰Ó8×m¼ÉØçO‚jˆù?¦‰‘ˆEMηlXZ(ý-g2_WNÙØlÙØb¿@çyV‘–è/õRD4îÐÝ.ÓçÕ¾+è\x^P—îºe:ñÝŠ©Ë±²çx6Ñ�tµÇ£�ep®7Ý/öB¨+CFXr](í?düáêo—‹Î›ñ¼wëÃüüxYXD­ÿnÁ. q…ã_Ä] ¦ÅÛkد+›·óÈ•óöÈå‚'ûóãeá…´?.—ïQæ’×÷àòƒËÌò{Lù‘cÊ–è÷Pòß%o}ëû[ßßúþÖ÷·¾¿õý­ïo}ëû[ßÿõ=Übì-ÆÛÝ~þóïv,ãßí÷OÎ䇎ñAÇŽ`ÔöˆqFí«gú¿%ŠZzSÈTŽ_ì½LÑ0“ɯ6tQ`£¼ÚˆÆ¸¼þbÆ^ÕO˵|±ƒåðWE}ÆÛ€)ª1Pí 8�xÈÆcB‰{xô¬(î+“ñG~YpóF»¢=Ý·O�`¼’=‘)‹[ƒ½QHÖîQŽ�[�›ÅÞE�&¦?„€º¬ùë7/Rš#íGI»e¬Ì¹÷$­�:!ø«(g€Ê-kNªý·A¹¥¼^•}�ö¨ÒfîD0w©t!‰Ôø®œ]ÆíNAÌi.¤€Ií$}-"LÀú´|ÕÈé푃%°³-vG$³½ÆËšËir �l^ òhYVcç-s´ŒÃš+ÛËNà›kÃ22¢�A”‚þˆÅ Q5+ ´BÖ+ûs¾ÆTçΖz˜n[ADºÙá=™ ]/fáåµÃôlªh?g_dØ>Oò†ånu4Ì8ÈûñÊd¯ušÿEuh�vlRÓË6f+~‰]†è-î*w"\´l©y«T¤iUŽöjFî¢RÓ!jå×DM+àE‘+ Ê¥‰Â°Èìƒ"DCFkê*ê260v×¿Ž ØÙĊΓ¬¥©õ %Ý\™ö.JA*±C0EËx1�ïÕHHÊ’LN9 HØc KâéËý2•¯¤g)«—dɨ“äé,]P|SC=øzGÇQ÷IúMûu}í¶8(ñ®pJ‡dʳ½«×¨Ù¥úÖŽ$è¦Y‚(ÙÛÌpV릊ԉÓk[+úËnw“=¾Œzˆ]ʶñ †U�c÷åb4ÑÕÄDe§^�÷S70Jw¤%aY÷ ¾R2�ƨ;jÆÛ¨?Ñó›9 ˜ˆ—!ßR󎥪ÔU­xw«²:ÔÕ”ÁTÒEƒTih¨V/MFUj†ß‚jäo±'~‚Õ�o‘[Y‘JrµŒl†•Œ›^0fH¦/C…2gA âšÓ}@@ÔZ«ù70xä#„ÿþüÀ徟na޳vl³†JI·ïÖÔy³Ã +’�#ÉFÌ£”O€à�Öç#rÝäM]—S-„µ› iø’ª ÛÂH¯Ÿë{Ê“¨qh¦ü³ÙTª«*씀£Ü#Ìí€Àhøù¦¬Éü¥Jé0cŸ$å¶LH¦Ÿ)X9kFc .= �vÄìÎ3àÅ +’'¼ é¸Ö‹‘B°â¥O�!PÝÑRÀÕ¤0ƒÈ¦îŽP�…NÑ +mU3Å¥´/‹–cd[6|�~Ë©òÅT‰,Û$gÛÓ Åð�\L0Ôâ›Åb¥eKI�&,Ìé š?�˜÷“ij>SZ1i6sƒã8Tä;�ù|í9ü1+ɉµŠóé2Ú£ÍÒ*íPLzãtn©_Ç:¼B[’˜WI%\×Ðzá2ô¿1ÔÍiÿ¯¯vëö-ÁµŒ¶T±X«ÑLë^h”A Âþ¡zç·MWàõÛI{÷vœ÷Qîͼx¶ýó¿Õš’F]:\m’ól÷áјRémEpˆbˆPµã‹® +sVë^ºGQöÖ˜IÂe0¸Þ5;I§(ê:ûõR…(vïh£ ‡T“ÒQ}À'¥ËÑ}N�ÃÅ©V§sô™G­[C›]4ûk…RN@hü9ԬǶƒª0N]EC¥õ¾jêNŒ§Ç…aÁÆBw¹ +‹rº\u}LW—ˆt#<\näXÓìv¹Q,þÅ^)”J÷Ù”S4{âE°)[yœv›èvI,F3MµÝ¢¦>³OãÕÒô(>lÇ!�lz;´ÀȦ ¹O¸Ÿ¼µª<'>Fï]ÊÙ¶/>®•ç¹24c_�ÉRw8ݳ½Û馋N½xMf†eʼ&oš(H©ºs1¯ïÔ²´kã ,Š¥y2¡F6©'SªzP¹r ?¤Æ6�½Ù¨2”š`ƒ`íoÛΊça/ºÜ;ez°J!L²°ÌÏÃáƒu—ð—65v ›:;†“\;ÑOÚ·c(Ù¨³�4úúÅg¯8ž¶E±Ä9;G·Kã⎷»ÙæV¡ói°ÊkL㬨ŒëbôwÅ}‹ 7—X]4z†.ò œÛŽnJn{ÑõÊ"Æ%çÌÊ&ÔådœÅ’�“¢žbÑdg³Švû=Ô ªÇ²Š�©ëßÊZpjtõR_ÐÇjèÂ^§/sË˶w`ÏseV“ͽ'«y–ƒ^ÇÂçáÕ±ô”R…Ë;ä¢Ä n&”L–¸!<˜ƒÁæÀ<ƒê{HQïê묤 =¦1 endstream endobj 369 0 obj <> endobj 402 0 obj [/ICCBased 87 0 R] endobj 341 0 obj <>stream +H‰lWIŽ$¹¼ç+âMwnΫZ€N‚ Ìa�Ðr¨`ÔÿdfΈªš� 髹ñÛ?¾ßþþ½ùë÷ãñíû/åxý<ÊYÆäo üz‰ãøùúíñíoxüŸŸ�r¶hG+~ÎÇò~Ž^�v.|ö¿=þý°ƒúªœ\k¿¦¯Â÷[cž³Õì­³¶uŒØsáK=þýQð,úa£¬ã©K<øõøíñ;Þ)ø³cŽzF5lg,óúñà3þ>ëY:]iv<ûéÃ;½ÏqkÇëáxŽGS¦×Ó'@œVµ3V½Àë1Î~ÁyFÅûç´Á'¶~¬³Ïνz‡á´¨ÓŠJ·6BH—ÜØÏ^×±ÎQ¸)C‰×8LÃ[0mÁͳ5ÞšˆDœÖÉsÁò¼~=`úºPú„/VOoÇiXïõPè‚ dú::*$øa=Gåðé§­/Þ¸VŸ´5°'|Å‚�NvÚ·ZFc\aÞàõˆ;Rƒ…qZÅG…¡¬' +^•Ê�­ŸVíp¤¡Z‹�äº ° í¼1¾íÐw3ó3µ(ÌBú{gò¸!ÒûD£Ù^…1uƒ­êº+g2™£Ê› 10O®³¸N ¾û¤Ëªž‚D †nKÃrC"ƒÑ¼ÚÑNs[;®¼ +Â�ÏYz¡Cþù±¢#ãðÝB#Ú§>@& +þM×(�ÁÎ6›B ‰B¸:ˆÓ»«V:ºŸ¸;ËÈ +”?œE�Õq#5±£°­cèÕ¯7öºAw¯JGîÞYdèT_‚5ĨäþÆ`5ÄhÈtEý‚é£^×�†äfVDQ ;:k3î¦ê`++ü*sdw¨L–u·[B¯w¯î…}þû%#Á„½ &„Áþ�‘rNä²ðD·¢mqg\‡: �»"]ùx/º:÷Îkv=�MTQFK°©zKMúÔE3Ø®tmˆ­ª_×zƒWÏëv)ª9¾�•‚™ØKa“©Fç.ؽ+Tï†=/Ëì |É(V ”Ù´èUuæ$`ìæŒmÀîIKÈzU +håÇ­‰Þ>à€x«³¢�@#ò¡.®Åwá˜Nje’I ˜ã\þŽHõ‰Á +ÚçyÕû—ùn€)×úx£ �ï7HF­çöCÜhž¶öi +BYùØ^ŽÜ.¿æìP2䯠ÒÅâÞ0�¾[rf±Y±Iç˜x�6phav-™èú''°ò+û½n¿;œƒäk¥GaþÐÁ¨tP�­CÔ�É„í8zÑœ*0 ¯Qî*"´äÐsPšu.�/¡åøbîÐÔ�ë5ç œUÑ5ÍN9ÚoH?Q¤˜Z¦*3­P'# (!ƒ8©ÞGcíêLàÙè Y¿âö"ûkY»N�¡”,ÐÌ�Ç®úgºð¦!ib­ÊžÀ~E”G¿ù0’º„'·i‰b™ÃÆÒL!7*G¦�ãSÖÛÈYEé°#rA†nÈôÄðÛòÛŽùúÉzq +K‘Ç]¦¯jaÏBÁ'šsOÈêó +IBé�%¾ØÏÑŒäZ|M}/»BMFã^ps¬¢Áç> @Ö69y#8?ÅꃓÍ!íÈ «¸}LQŒûÌ0Ž¡Q9F’|›r7€ uÏ[Âô5SÄyÐX2 +•ÎîEª Þà<Æ£�0*ÖìÀ:­nk$ŽX/U”ƒ­ƒÕ*QWõáŽÛ¾F¬WˆÿˆL{fo<)á4ŽI¨†B_Iß©?IC‰ã]f¸)ÁÑ.PÁbb9!¸%ë•eÁ�•ŠH¾+B±í5»æ Î×ߨj'G:š¼d{pÒJƒ`W—V®!ƒ¦I)N™Ú$q=eAÛ¸‡RÞöÅÄc¢v&¤z¨T´"äa¨E° j‹µ·$0QDe·KoÒ™=ûc<Éóꎅô·½cyz¸z§d)Ó1sIT +Hvépö‰¯ ¿ ëå +Åe,ˆ¡úï�²quGµµwªÙ=±ã¡hd/!¡“Ì…˜?y¾1*—ä¾·ÿÔÊá$H§RìAQlŸ•"Z)|+Å&!Œ±¢°Uˆ¤™�šBÉúŸÂ3�Z>÷àSËEòº›C¨5ñˆ‘½“…§ÕF¬}—�NÜ·¼îšZC‡+Y'ƧžÍP�&¡ge_RâF‰‘¯ +"xÆcœÊªéß�Êbm–<﹊ºP1yÏÔÀ°‹%œ„ªs—©9È9ÅÊu¨Âôä4¦Š5�ª®8|ƖųÅ}ã9tÒ‘Ï.òœ–¯›4Ìͦ=ÙRmOÍà×5ŒëûMu`ï|¦8JÞj*.±�j–‚¶”qyóÌÓ&Pé© V½Ðí].«MšD&ËI#�"©yB�vt×+Rœœ$�D`»E�À#"ë}½Zö"QÖRèI’œ¼F»ÆÊ ÂwHtŒ-P¥õÌ +d”šd,V_¼æ.1ÔUh*gŠ~¦4íjx�¬Õ‘‡’1ý©¦$¶Á�—ö„ôÀ† ©‚¾ÈÒ#÷ÌT�"¢�”u JЊy‡ž•@o°¥ø \8¾!"Š~"Û1†kˆS½¤Žã‰�£é”c)ÿ–&Ù½ 5T�–Vd+ã“Ê©‘gÚ aªrýoÐBN“Ù¯Kuûˆ VMFJÒNP—žPüÒmÎ+L¾ÉDðÜAù'&ÙÀÅß q*,�*B&2 #Õ¡š)§¶Ð‘”oc×b€”¯�}Ü�á2›CÅâd{úŇ[ê­˜ˆªÜ_Ñðõ’5¡ë"`ÈÿÜR£LʰwLg‰UÒCC`† ¨8’“RkjaÏ<©Ûi«N{GDÇKúŽgþí?ñ›ä3ÏyþàY¿?Hµ�³Ò µy¯Ö¢Eð/y»H5­Xñ¯5Q™™0Ɔ�ß7´«ã{DÉÐ5É�$d™îaˆ’÷Ñh.(l»ê«ý;ú|ÐñûÀçñ?:}ÚìBnA¯•øj²Šê„íHþcŒ8S½«#*§‡X]dˆùêÖ½MFÚ Wç†Ô¢~j³‹ßÈLj2ÔóPÉõÕ|âž�¹˜Ë#¨TÍ0Kj.ͨèâÊߢqÀš R“¿ôÃ0<ÔÑp´¹ºJ¶4©BKÄNùßåš~¾âGÆs˜l�„*kB`Ó¿†áÁ¿©Sá²”£¦g£¨õ†ÍYë9ÇcõÔ[,zÙš|Ò¦v3I™u öÜ‘-#j^3'{ÎŒ°x €Î=ðm¶�Ö*F )Ƕ­zI`°òøÊ”Ù‰tEIu8 <^Û:ê:7ø¼Ç0“Jw6)ósehm„PB >*¹r˜_vXêï)‚ÛÒ¢ÔØâ¿&oG輂Ô^^ª§ly͆ž¥fÄ‚ˆ”æå0°V 1jWƲ‰;”¯‹VðêÕ¢&8¼fWGRkÐÑMÆ|Þ¦‹ÀxM„Êɉ{ÕÖú ?:�¶dÿ#̾ÀÉ�#� ÇýÒ`j†éç©3âÔ¡ “^2¸ ‘!ZzRH;¤L™lðåæS/Y¸*öK™.öŪ—C}Í"±¢Žð7B|+ƒZú«a¬‚�æeê»ü"Õ™µèש ".Á³öì|1°”!K“J>FudgÃ2`õáÞÂ�ÁŠ oº–”Ü3#¤U–IGNç¨ÐÓ¡JðeFâ\Œx't�Å:s³dõ¡Pâ«1_ØZ¸Òƒn“¢Û…�Õ…!˜ækb:Ëm+Ç©¼&ƒO�²t=ØkPôîßúþMÒž»?7´3é“A@TÅ. ‚DZ°b/Y�jh»T¬††.,4ö ‰ØƒOI™ðBÑ($,>‹OIÜRÜ`“8^ãi©•”=¸µ9XáN¯‹ò”túá\I€®ŽÔ X«YJôqR4ßHH½ç+ÆY–»ˆÊ«øÉò¨AB «Z¥øÎ–¢çä4õä«Égé<úKA)pÜŸ ÿÞÌ„½(Ð̃ únfä¼q‹Ôå�09’Œª nZ¾"OqÂsB`¼—ÙùwÊžÚ Å±‡d½1¢ +We;ƒ,ªÀ±Ëü¸î§«7$|åDq'E·$e€ô 匤£[»a E4¤Rùzˆß®>Á4¬®Cfƒ-Ãߺ n„ñ�aéÁkÊ`ˆbi[$4ÆîLöTŒL˜‹ëk‚ó,9±Ž +®~©J%[Ù¥èûñßÏÿ<Šw6ÙÕ§�ÚQ +U½Š&I*q¬aî›ïè!ZÆhá!@WÓ3T­º(?-)½šNr<Ã"1TúÐÒ†¤¾BZ¦´.þ.ªÙŸ1…Ñs=ò9Ÿ1:y<×£'æ3îò~ïõÓŠû�Ÿ��Kú} q�â×PÙå%5½r¡ýŒóŽªîQÓ9‡üÖ�ªvš+1Üï ÊÈæ:ï,ƒªÏæ²_ßf² ;ñ +ýó­®Ç5òÕú¹v¦OÈñ î%pFj4þÞÄ<ıB}ÁT+ ü½S´²Lr(\�^=Æ¡©¨’̉˜MÙeB)} ïM™AÉ3ô´üp‚wŽ‘ ‰ÁɉÑCyÌCOù†ˆÒI_Äþ› ÿ— �Æ"ßÿ› ¿'¨_°.:ô@#…¾òCŒ+ü?Kþ z/²sàl©j~¿I]­*`YÊÚ�-Ë+<ÂÎr¦ujÛ:'2?óP’à€ž¡÷6T }�¢—iùÖê›Ò'Øk‚¯Tô2’BŸš‡‘Ѧ\ ƒ5Îö +¨KÀ‡Ñ\ +ÜÉ:´– +0wZ·š�¿òž*JT­s¸ßf•x�B+3|N²�Ô0RЧ é#�F@U�”q^w3~F}+%´‹Uª�(Ö¦aWgÅ’Ç‹V+R<Å9 +C'ÜañðƒÎo*5^Õý†BMߺڧ8«$¢ä�—1OǾì·ÀkH—Ÿ³o²iÓ�2+S¦ß�KxdR<ÿªQâ,�ÍRæÒ:¢ÈƒÝiû2‹ßN )õ{'q®X�}#D¨auú½¶dw$ÒnÞ«aLž[b<Áœ[a2´ðÞà„|¨¥£‡2ßw’¡Â “+ϼi¤«—ÅP§m³s Z¢˜BAR"~ÚjÂX,zùßå�dÉ‘Q§˜ 4,99³÷W7üyTõŸ JwƯ,’AœØH3¾EÉŽw5ɡĭõÑ �ª(s¦9òºó +C´°{á4G?“[[¶ž¦«wõîbÝÆñWÅ›S]ÀµÅg =®Ç  :ÊÈ +ƒ•¬Æã&U¶qõÚÓ2Jñ=~¬Ðæ#²™‘금XgˆŠ¥$«˜½šÄ†3U¼$Ÿ'®ˆ”1¬Ï¼qãNyÜJ£=† ú Â�ïR×J…* Fã}µ¤4P© Eê_È—.=Us©´œ™i¬·ø-óßDîzåTaAЍ2:ªLTÓenËT$a7 »´ìqsJ5ÑÊÖÁ97Æ»dªl½±ë—ÂG“+ÙÅ;€úAÈCÄ$,}¯vD⥊p6è ± m ñyLÛ ß§„oEç[WHnÂטÀ(ö�Èð+Pw�Ȳl¡Þl/�ÿ¡<5@Å�BÅ­‰·›ŸkXX=OÈ%�ëçRÞúË3ÛjÊüòü¡<÷ýëiöÆO†ÚŽ&’Î{ÇwVÒ÷‚Ó1ï®óúŽþþCìG"kÜÕE …¾›|·Ç\æìghÁ£YÐÖ–m$sIÌ}-´ ߡɸŽÅ“Ÿû£¿Ög<,¸ßýœüŽƒ‘ËçþÿÇ�ÏÇîé2ß0Rü´²—‘©dðAó~„•«˜$�zÝV¾öÙ\LQEs÷ï­þÀ'ª‰7Þù÷ï>S~cØ[Éÿ¬ðu±¼Ú`°ë="•ó¼£p^M¿7˨®î×ô¯é|4„Â-ì,°áÝÖlk>ì)È&ª—K#F>´CoÆy÷$0©1¯E`EÅäôœœŽ(;}Ä€T�nÌ¡ ÷ãRD/þ%C7Ê$0ï#fa­_T®X¾<ý'�,Ùõª�ZèÊÜb>2RñÅ)�ܘ}~Ħz·G£‰¿ÞÐì¾@WÃì©oøûç·€¡Õ¥Wâóg“3ý`ä9LÈwÛÂ8—íbÚFÛ™?Áˆ$W3ÓöAõÑ~&ͧ¼æ 5BXF—U?÷“ú”;êÍï&"éî@˜’çh]u8ãã(¨Ë“¥tž�&îJºJWk +wôúH_(× 4rmjÝ.‰¶[µªÔ]š�5ý"úånƒ¹ò'S}<üö)5þ¶(†R%’šï.á‚9$õùx)=LAÕïç"éÈGñìTëÍf@™‚ôvÜ‘äƒ ^¾ìï2¼$®^0Lš¿SzáCõk�;¾uéÜeˆYÑÇ8�FOí¯©AúOÏ×ÄM0¿1Ng“ŒµÙwh²ú=ˆ¿Žåï +®•+Ÿ_7•*%öÿãG€2¤™?ư³­,i·ù}[àpƒ ¬ ü +Í.[t#c«vn«zÒsö¼sƒÄ0l’›þ±¾=IƒÆÆ®Ä…ët—,ND+em|`ü¼Ÿ:ÝœG…›—=Ü«@ó=´¬àù¶œø#iã©÷ÞN3‘ú‹aÑ:ê{ñ°TCâKÊYN)ó– +ÜYT¥A¶†GUuÝ¢g!Æ6Ù7þ×±Þõºóƒlöàº:M gCbñëÆ«ŠÑ¤òNžïÚÌDRÙQ¥ÊZn@¡äé”ÒÌZN-[Í%cYfFšáÃ.ÃÔ€9jMš]¡b�wÖÎÈòU»%(Kl ¯å²àgW£¯ˆp=�Ü<^#‘Ëùðµ:ÕL>ž¬êùå;á éS‹” ä¸M(ÀYIŽª™�‹2ŠÅЧ,]™Kß:Ô¢�ÃI£x‚®ÈuAÅUzEî±%-e“šW7ùŠèU/yÖ�Ôx¢ÎüÍÞÍlz–]ÎñPˆì0!Êþ±¥$Ã:¸°qšV‡¥îpÆ¡­+Z°�8Åœ¾ s2ê-ìÛdxjÏÎ0m½k2z’ê�\Ò�°PL¯¤ôÄŒÆYëy•ÞxûE dÇ�EjœÙ²'ÞÓMg ’Ð�c§Õò·‰©óÔ‚Ì+`:ÕÒÛ4JëÚ´ È)úr¾ Îë +Z[o–TŃj(�)²Aõ¾•bƒº§lñPÛ,‘yZy™5(Í{,M ´Ï‹`Äh�G~ë>•Æ#2¬;Û�_üˆ9Nþ‚Òq²öl{Xí-Êõ«\“aaÝWNåY\%©~6ÓÀØVÍÀ4F˦ÏisW·f"Õ¡êL³„¹åB|�O Î_�O5+×ÚtŸ«p±¦\YÉ`R! ’˜µÆtô®1º°—ªW6žÊµ‹oIT]0ߨp x@å`þA#íp»ÄmøÜñ!nåcõ3WAxGÓPÞÕó[õ¥üFEšosejøê‘>Ê~6ƒ.Ä~éä+S”µÍ Ȱ|>µð7ˆŠOìÿ÷‡m�£ŸU¹>}ú³ˆ‡x­Ö‹ÊTØ;RÀ©‰É�t~�~VBW>§à'gçS'¦SÖ“Tgìx5÷´ýhÒH¹Î<Ìǘ4íâ®>�›âìòM+åIµŽ7©êó¤H Þ€KÈΊ’²^-ÿ§¾Zv$Émཿ¢~ k$QÏ«±¶/¾­ï½aïzmÀóÿÀF©Ìz´=ã›L‹J•$Rd0¢­p†à2ä'ÞÂzDpÇõ)o:ÜÇ*äѼKò›�8–]ñ4š(àÓúÊ΢póÕÈìôaGÒÍz®ÆÝs»5] &¹´´vš¯.vósQñõÖFÙÌÛõÈ·~k# ív}SŸ=íê¬ï;•ÃU¿ñÚ®Ž‰‡ G’o£êôaU�¯ÃïÓÖie}«Ä_Å�gm+릱2Eƒ”At?ÖùÍÂØ„N˾>¾ë +€6%­Ìj?­¼èêÞ“_œ�˜�5dâoܼlë=¬Ê'pœ£½‚`�Ûi;VQûìŸßŽ“|á�飻O ²‘wk7)IÊÈ\N"¬$N“�lÅ¡(r¶hZüV’ëcù—Íe-ÉÆî‚H4¯yg1qø¸Ýeö*L=‹.Sp’}…Za[wêA´®Z™‰|-OudÙNÎQÜW>E–_)-2DcÖ5ÅY@ݪ¬{«{l:…‹Üêb K€7'7ŸâŸ9—�ì6fâ$£MºŽÿ³ ¹f0~˜•d2Ï¢¶C_yYÚpÂ�Ç$gãlç¨ç:ÑÇΤJX‘éÉ€ « +*¢ß±»állL|8¯)„ŠŒ9¥*Çe]=RɇÎÐc:KR¬ 8`9¾Á qF ò:˜4«@®}kÝyI@"úÞYælz,P`«¸Èñ!Ã2[ +#×›š‡äìJ &W+}#­ºP»á¨ûÃd˜œ3t¡YÍI‹?P–XåáEèZÜÊFîÝl-XŒøÅ µÃV|܈ëk/ž¢Ä³¾P2M2”tœàDnâ§üImsp+¬Ž1¢ t™¶ÄœˆmM'…Ê#ûºÈ~ZU[ô*•�C³Æg¤- ÁJÛN:Ý“º¸hë÷í¿aI%8å­zSûŽê­wª·Þ«ÞüÙ[ïeoý<²·ÞËÞú²7ßëÞ|/|³ÇÑûn˜Y·Ý‹“sá°²jc/õ n+ëø½òé…É/R—�{ç ;TÄÅ›ãT±zûÀ®(÷v³þÑf#ôHL%nt¶þÑU;éIûW”Ÿ#ª3ëŒPÜgO¼½}¾yúb@dHÝbO_p ŠÉ=Ï�ì(¹d>'Óûüˆ9Á=· å°#\n¨Å@ˆÍÖëD(ñ¢ÈçÕáy½�<•Ã*”ŒÂøý™Ä*b"#I(M÷N^@ö8eÛoî¦Æ,PTÚaë”rlfõövÜå}Û~Sß)}¯Õà¯ÖúºL |a�ñ@žäºŽ¾ævEïà=' ÚØÅã`�¼ì\O\B"oÿäi¢áê‚™}ìÓDðÑÄËÎñ#‹¬ 'vÔókqRº=´ �ÒZBäž'~èÐ7 TiŒE¿Ûy¦)1!{3ðw è0Ø´‰Dà–k[¨:„lž_ñ –X Ûð2W›¬Pâ9ë ÉŒòD$=˜mîí°�î‚·mC²IðËÉ�0 . «¡¡¿:§Õ¾™´�ðOH *xâ¹q‰«uu†QH�¾_ª�„5vm„ã« +ìd¥ �|*ô¶ã ÁDvB÷Á�êµ^@ûq:ÜÇ«Õëµì×Q�Y׌ ŸàóÄR\²¢ºè\éÝ(,7€›ÑsîÄ +ŸC´ +K‰ÔW« ájº(}|]bXp©/Ur&h˜¢&À!±o³Á�· í-–kÌeµËþ5ð6åcs#KÓ=ühsæë¡ ÚcE!Av°³Üƒ·M…c•ŒEƒ¼/ØÇðF0ɼ1p€&\¤»Ak‘:xÄÃÒK50‰°ùØHMX�øoì×Üv*f¨–ÑtLîøŠ¨ã款f‘"XDlì‡eÛN¬p ¥S2ŠýÞCS,Æ8fV-£UõÜX›óÎ åKåÝWñ“©afÀî…Æ¨ÜcAþYm EçuËâ¦_¿s_æXrãJõµŠÚ@ÖóztÚ“œÞ¿ñï €I0•ÒWv«ÊhG* A2ä\ßsqŸÁ¾Y›.|" ¯§¡×µìî!J�¢ÁŠz1)>j¯@ÉüÐu^J12!6°Ô"WMaéCçÔàš×Ä`åàíÍU¨ìZЯ9ëãÇZVAÌâÚ�Î/D¨—Æ9UŠ‚× +] �÷Aó©#rƉFÈ‚@.Ö¼PÔĪŽÓM\�Ôç¬O«Õ@/>©!uŒ3eUäÖûêþ›„‰ô´yß˯_f¥�uó‚ëYÍ +éŽÅWŽ=ÂNóU®5ýG-ʦr†c©>R!‡¥�¢Ra΢\J™¡}µ X¤ ]Rªyn‚@™š‰SnGàƒQW§?’O¥ \ƒÇ �OÆXTg¼î d¢Ò©å) oÕ  ßýYØ1×ð_ÕÕok$¿i6Sµ}#¢hЇ�� +o\U¹?r£€€Ö¹1¯Â¬9ëDyZP©=ʃx¡ÑñBQ¬´©7’.¥sR×7}�Î5XòÌÀcÞ ál©@Ë´Yëa-;šSôoww¦r�Ï �¨3̈ÒÇh•ú¹®à²ÅçŸõrÑ0è b »XxøêPÔsÝ'ë 6›jÄ4U€ñ\gÇD¿¼4LSG¦mͳ« ­]s¬è²" âˆôI”÷õ/nDœQüØ:]Ö¤:î ¨rØŒÀ®åX?Ýî¥z|-Þ +E,´¬{04÷×lA¾Ü/ÎDÊÑÄ·~QªÑÞ#æyjâåãøüY�Û¸Yæƒô€D%är�Oyïõ{ëñ6Ü‘0ýܱΰ €Ž§ýxÐ{mpœÂ¿íÞ ‘E=²—³äàso4O�=¯dkö\Þ7˜•ú[�„ÇœB˜uß¡Iš?JÉúC 8~ߘEƒ¶AÀZfûKÅËŽ”Ì[‡ü5&gê¶�•Ý#þ�K”ÏT[G³ƒ]„�0‡[ä´h÷3ßîgºÉ;}`xk6ùPs•Bx½8®ÁpfÓëñÆIµIÜâ½ nfps{h�éò‡ö�7abG‚U×úóï¿æ—Nbpžâm¢Ñ¶³*“[g†êbý6Üs|»ÿ(þo»s¼ÿ]üž÷ÃÊ$ÊJHd y À€%Y?›â oœA’iH…²þtá\Èà„gë;.JCç'Ò®ŽG~ÜàëÛGØ(’œc^ÿþ÷#Æg†°‡�ž\l})lÍÃ<‰NVêÇ�ßúh¡Ç’ëoÃl¯,0Ô è²SŽtHØŽ,_@ÁÖßÂÓôc§�¹Itú»©U;0»²•Ú$›(JTèÊĸ†û*>N�¦–†­ežŒjÜæ‹†Kó¯ÒŒ +\#Cä7Ò=D%�n’L²]û4=²È“ážIÿ­•4¬®|,õžò¶”…’LŸo+¼Û¾¬oÊÕ¡PT4ê*`�ÞVÜ7Æ<¥:^Vþªt)Ue™no„CÚº›­â6„–S…ä,­Ã¢«åfš×Ê«“ã}­»+*æþE¼ÄK‡×qxu]ã™<£Þ­a›7ø"kÕ�Pvs–ThÙ¤†ôg¶Eåâ]F€ +Hñ~±©™¸¿UÿoÏŽ l¥�”šg�?dl„ÌüŸ’g½SaBÄTí¡›¥™~›C¹'f«÷bt4‹¡n\�7Wòeržk ŽÓBzŒûÈÐù]•9ìdÍJ%ª>þJ +µ\ ¥V?¨%±Óoƒ!Zm³z¨‰+üÃ’&Q 2MGÌsB«O8%çRѧ€Ý4;3x*8Ù74‚ÉÍÝвÂ$À–}ØŒC¦ï÷5É<"C¦M¥P/pËè^·�N>/t4[ÖØyy“Yá`W]¥ÐeßÚ± Q{µyÒ×~ÒWÐÚì˜Ó§Ã�š(³Šš +²Ü„ŒÉM¨µÙÖ�JZ÷Ó’�ú�˜èC2¯�MÊJ)ÉÖ+O³y«Þ�\'õùìz-ù$Ъћ‹¯_¼ÊkÅëbó…P§P‹¯‚'L0iþ•‹8€hÀ›Ä¹y€½Œ 5#>=Ì“Phb¿å*$è§!±èñiKÉŠäÞm–ú¶"nn‘¾þH0]-ÆN¦Ýâ©ó™‹à2Ó!Q>í�€’³îCŠOhã±–Z"yÉéZ„à*-þ^R@3jÓ mÏ5×¼¼áFákï;‡"A½Í»ó/|þ H$îZ‰‚,ÍWŒ»:BPÇIC§ïËZÝÜËS+™¸\4pP{ÓåÎ×Òr�p°*ÒIZæñÝ7@Ý䃛š{M>#Ê;ÖYt:ž;Ønš6Œ�ë[½ü£ñüF…iŸs�&})§„mû¶Ïôywé'ôN=W%O¢ê¬ç¨çЦRØP]Jœ°t¬óO“à˜„L4;jç"ªœ/ž”býtóߞɦ„�—ß�Dm‰?ηBôQæ¥oá­€âæqÓ¼)Í@Ä•ŸýèüY <#ó£Ó"ÌbìÜ@üþeöœ-ç²%Ì>wcÒ#ë©«@З‡°Ôíöž-�[xϼ™ðügþlߣóÖmGçú¼R)·s‡ª•!vä—PÜ$E‡ásgúÝ�¿Á/ú-Õës +îC°gó¾#¥­xw¹(�:7�]´±ñC�â¿×i©mÇë&Ú@£'Ö@cð…mÇ)“k9ž÷-{ÛÎÊðq‡ËÕœ¨ã¨ª�Å”­»Ž"”Jà0æqäÛqĽÿq‘­¡4f£’ "«Õ‡{ä2¸ž7°íŽrÇ>xø­ûnO­3&ü¸Ô‚,‘ºG·Zþçßù‡þ/Å@? ­eªø|–ŸsÐxà ñkŠø&‰¥¢¯dã9 µGjWJ$”~MBx%!?b%’N‹µ?§¡ö@Cíg44žÓP¿ÐP?h(Oâ‰WŠÏ‰(=ÑÏnTé¯*´HWZÝy¨½ÈC1€Œx/^˵S»ðÛG0 ¡<«.a�ÿÑ{«õô| ­¸HÜ·ªdy¾?øÛC´z!×Tme/×<…ä³):zçâl㣋=ž®y/—­†ð\ÆÜ�´Â<û ë§\Ä£†– �\ŸwÓX´kb·-pOn5ø×} Ø¢‡}‹wYsTnm=ˆë—�UI“™[i‚û ì¾…ãs�›ßGÚs¹í¬„·ùÀ¼=Œšò¦«þ•¨’+ÊÀ�Eû}»²(¿™>2À9µ$G–«y€£»kÝÃñSéí¹ÕbcaË'9FMi«×ç)£æ=àEþaa-ßÓ�éû³„• Í9FþlÂÊ.»†ýw+·º$Åe¬ÌÛ†Dò'VšZ°� Vïíì”™Ö/;M·îÿæg+0×�ß@ƒy¾_#ô.ÞÉ ñÞq¹—-ê˜m'§ŒR麋4G–¿Q�w¾Zc±“Ó™Ømkøämä„Õz¯m\·xWÞÉ)ƒ�y¤ë…Ôs'9eÀ2‹çö­Ïíìtärß™ �¯^ÎÛœ´�¯òàf-í„UB�šêúãÔëŒõrˆ>µeg,Þ…)º†sí¹Eexn#,<q}nz�¯^¼Æ¿à+:KW'ÿY¾2ú< ëŸÍWjTÿ;|eÄ9Z®˜¯ÌÅ”³Åç–ð¦�‹}™Íw¡'ëüêqn¡úÍaäU ŸÍ-–þ|Œâ ÖùKˆÞÇi§'ã×âe«Å‚ƒ“žŒ_¹àe �9þ a½|�ôFXk.vv:ózn5{7»¸)Kí½ ‹·-ŒRJz²FÃÉcl[«’=Y®Œ\¼nA‘=nütärÛY �±^NœÏZÙ˰wµ^,–�ëéBXÇ¡× ëåçØî„EJ¨c¾ÆÃ©ÿñ^6IRÃ0¾Š/�™øß^ó·�Ü�  î_Å'Ùé8 ­ª)63ÉN¤gé=ùrà +=<)Ÿ‚½ ×}sÕËë…yü�bAO{ÊÝU*µN‹²À£±9®»e�jDØæ5Tsù3ÅJÀ 0K†¢r^(vc¨ Eòò’÷lôC¢ŸO 0f&¬H4!)аš_žQ˜Ú°»—V�3ªŒe=¬ú«ŸŽË‡—Ì/Ÿî‰vsŒKµˆ5r-ë3ÚFYAV�ñR¤s¨êŠ~A½IÁVe}FÖvža.©6ÙÀ© F§A³k´‹Z¤™kÊ(Kvz:yDr;Ÿ!^ӵ͓ûí­Qò…*�Ý2’ÜÞš©_ØäÀ&ÌëÁ)9¦¡Ã&¹é2ˆµ½œ†#=™….æ«×&¯¼¬rÀBZ‹å(Eíª¾ä“‹)” êyl¼vLÌ-õÔG[­†Y¡GùŠ‚ÈLRÃC~ëãä]uk�§Ðõj¢¸ׂÒE¤†^Aæ)­Ïzn™ÿ'™º]gjk¾k£Uf§Ä ²‹ Ù!<×d4QêóªMyµ4dŽôµÛú8# +A†§Å4NÒ»V…熦íÔ SÉÅÔU”šôÞÜ8¡\Mð#�×n4]:ÖªD0�"ªÌÐ5jܱ$�½ŽUßÎU­4”÷žýÿm�£‡A’£ðcD�¬•SÖˆF§�®&¨©räð´;lC¸ì›‹º�OþU1„l‡‰ùË©ï +ë��!�2~ANÔg§ŒÕ¡ÓÐ*¹e +f« fÊhÃ'—³¤�»/¿·Æx®�Ì©Y?øÜןüþòñùý÷èÞþxäK†/¾bøªák†¯>¿[No9ƒå´°ñ8ÞBÇ[ðx oä-„‚…P° +BÁB(X ¡0z÷é�ãß/¨+Ï÷ endstream endobj 342 0 obj <> endobj 343 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 344 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 656.355 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 656.8554688 cm +BX /Sh0 sh EX Q +Q + endstream endobj 345 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 841.252 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 841.7519531 cm +BX /Sh0 sh EX Q +Q + endstream endobj 346 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1034.793 401.63 m +1033.927 402.13 l +1485.387 1184.11 l +1486.253 1183.61 l +h +W n +q +0 g +/GS0 gs +452.3261719 0 0 -452.3261719 1033.9267578 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 347 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +929.233 401.63 m +928.367 402.13 l +1379.827 1184.11 l +1380.693 1183.61 l +h +W n +q +0 g +/GS0 gs +452.3261719 0 0 -452.3261719 928.3666992 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 348 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +925.443 457.86 m +924.577 458.36 l +1343.577 1184.11 l +1344.443 1183.61 l +h +W n +q +0 g +/GS0 gs +419.8662109 0 0 -419.8662109 924.5766602 820.9853516 cm +BX /Sh0 sh EX Q +Q + endstream endobj 349 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1049.273 401.63 m +1048.407 402.13 l +1499.857 1184.11 l +1500.723 1183.61 l +h +W n +q +0 g +/GS0 gs +452.3164062 0 0 -452.3164062 1048.4067383 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 350 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1140.583 401.63 m +1139.717 402.13 l +1591.177 1184.11 l +1592.043 1183.61 l +h +W n +q +0 g +/GS0 gs +452.3261719 0 0 -452.3261719 1139.7167969 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 351 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1155.693 401.63 m +1154.827 402.13 l +1606.287 1184.11 l +1607.153 1183.61 l +h +W n +q +0 g +/GS0 gs +452.3266602 0 0 -452.3266602 1154.8266602 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 352 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1192.523 401.63 m +1191.657 402.13 l +1609.967 1126.69 l +1610.833 1126.19 l +h +W n +q +0 g +/GS0 gs +419.1762695 0 0 -419.1762695 1191.6567383 764.1601563 cm +BX /Sh0 sh EX Q +Q + endstream endobj 353 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609.967 452.73 m +1187.977 1183.61 l +1188.843 1184.11 l +1610.833 453.23 l +h +W n +q +0 g +/GS0 gs +422.855957 0 0 -422.855957 1187.9770508 818.4204102 cm +BX /Sh0 sh EX Q +Q + endstream endobj 354 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1603.377 401.63 m +1151.887 1183.61 l +1152.753 1184.11 l +1604.243 402.13 l +h +W n +q +0 g +/GS0 gs +452.3564453 0 0 -452.3564453 1151.8867187 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 355 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1588.997 401.63 m +1137.507 1183.61 l +1138.373 1184.11 l +1589.863 402.13 l +h +W n +q +0 g +/GS0 gs +452.3564453 0 0 -452.3564453 1137.5068359 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 356 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1497.927 401.63 m +1046.437 1183.61 l +1047.303 1184.11 l +1498.793 402.13 l +h +W n +q +0 g +/GS0 gs +452.355957 0 0 -452.355957 1046.4370117 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 357 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1482.697 401.63 m +1031.207 1183.61 l +1032.073 1184.11 l +1483.563 402.13 l +h +W n +q +0 g +/GS0 gs +452.355957 0 0 -452.355957 1031.2070312 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 358 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1391.967 401.63 m +940.477 1183.61 l +941.343 1184.11 l +1392.833 402.13 l +h +W n +q +0 g +/GS0 gs +452.355957 0 0 -452.355957 940.4770508 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 359 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1376.217 401.63 m +924.727 1183.61 l +925.593 1184.11 l +1377.083 402.13 l +h +W n +q +0 g +/GS0 gs +452.355957 0 0 -452.355957 924.7270508 792.8701172 cm +BX /Sh0 sh EX Q +Q + endstream endobj 360 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1340.637 401.63 m +924.577 1122.26 l +925.443 1122.76 l +1341.503 402.13 l +h +W n +q +0 g +/GS0 gs +416.9262695 0 0 -416.9262695 924.5766602 762.1948242 cm +BX /Sh0 sh EX Q +Q + endstream endobj 361 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 923.319 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 923.8193359 cm +BX /Sh0 sh EX Q +Q + endstream endobj 362 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 888.081 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 888.5810547 cm +BX /Sh0 sh EX Q +Q + endstream endobj 363 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 874.49 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 874.9902344 cm +BX /Sh0 sh EX Q +Q + endstream endobj 364 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 828.357 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 828.8574219 cm +BX /Sh0 sh EX Q +Q + endstream endobj 365 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 796.423 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 796.9228516 cm +BX /Sh0 sh EX Q +Q + endstream endobj 366 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 783.251 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 783.7509766 cm +BX /Sh0 sh EX Q +Q + endstream endobj 367 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +q +1609 692.012 -684.989 1 re +W n +q +0 g +/GS0 gs +684.9887695 0 0 -684.9887695 924.0112305 692.5117188 cm +BX /Sh0 sh EX Q +Q + endstream endobj 430 0 obj <> endobj 429 0 obj <> endobj 428 0 obj <> endobj 427 0 obj <> endobj 426 0 obj <> endobj 425 0 obj <> endobj 424 0 obj <> endobj 423 0 obj <> endobj 422 0 obj <> endobj 421 0 obj <> endobj 420 0 obj <> endobj 419 0 obj <> endobj 418 0 obj <> endobj 417 0 obj <> endobj 416 0 obj <> endobj 415 0 obj <> endobj 414 0 obj <> endobj 413 0 obj <> endobj 412 0 obj <> endobj 411 0 obj <> endobj 410 0 obj <> endobj 409 0 obj <> endobj 408 0 obj <> endobj 407 0 obj <> endobj 404 0 obj <> endobj 406 0 obj <>stream +H‰ì΋iAÁQþIlc¤ûnKw;ÏÐAUé6�Ï%]®_Þšz;7eÅkóZè6¹5<›ÿªµ´f]¯³ZãëpÖú:˜5¿vgÝ­Çά;õí?źK¿R_ëY÷çOêk9ëÞ>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwTSipwW�@ BOèz ± ‚(à&V¤©++2"`+渎 )tF”¢že18: BÔš¨€DDÊÒ{ €;ûÝ›Š(3@pçœûüßó;Ïûޛ̙ƒDdùËôóÿd™y%üð_E—©á„¨¿�ÌE ÁÜeÁª¹óæÍŸé€™óæA:Aoˆ«ÄÄ%$P(III)(èéžæ¡PâNPÛïu X@…i ƒÅbq30 Ì“‘FKI¢ TÛï* ª bA*´ ++'�Ç+(Š3AA�——“ÅbdÐR( 1¸µÉep] - I´ @á JʪjêêD"I�©G8�HTWWSUV"àåpi)Im²Òu‰‰£¤d°rxEe5¢†–Ž®ž¾™L6œ‰€9úzº:ZDUeE¼,VZ +%.6ii� ªKJ+§ ¤FÒÒ50213·´²¦Pl¡N5Âç)k+Ks3C}M¢ª^# •_Ú$.¨.Y¼’š†Ž�±¹u�­�=ÍÁ�NwdéÔ"|šNw -±_¼h��•™‘¾6IU�“¥ Öùy—$+GP%é�M­¨¶K—¹¬póXÉ`0™LÏéÌ`0<Ü¿ruv¢Û/¢Zšh“Trôgeï\Ò8y%u-S«öŽÎn ¯5ë}|ýüÙ4µŸð÷Û¸aÝêU+¿ZN·›oi¢¯©¦(�ý¬lÔ…W&éYÌ·wZÁX½ÁsPpÈŽÐ�aáÂDL-ïÛúõöm[7ù­÷^éºÔŽjn¨CTÆc¥!x>QìRPÑÐ3±¶ute®õÛºkß�CG"££Y¬˜é‡ÅŠŽŠ<|pÿÞˆÛ¶ø®a¸ÐYë’„² +ƒ)Ž}©hè›ÚØ/÷Xã·uÇ®ý‘1ÿ<~*6.>!!q&’w&öÔñ£1GöG„üÝwµ»“ÅTOÈÐ(± — ¹ÄPh,^YCߌJsñܰåë݇bŽÇ&^¸ôCòÕ”Ô4�ô鑚r5ù‡‹çNÇ:¸+dóz¦óª©>IÜ™,û¸°¹àû…‘W"é™Í§¹zùý#ü@ÌÉ„¤äÔë™YÙ·ÙlvÎôÃfßξ••ù¯ë©—“âO°ö‡ù®r2=’’F +È>ªLp`2²ŠD]S*m…·ÿöÝ‘ßÅ_L¹qóö�?å=È/àp8…Ó‡SPððAÞ½;ٙׯ&Å;²+ØÏËu ÕDW]QVF>³� C¡q +jÚÆ”%®Þ!{Y'Ï_¹qëǼüŸÿR\RZVòtzÊÊJKŠyT˜Ÿ{'ëzò¹“Ñ{¶û{¹ØSŒµÕpЙ�« . ,RY“lµØy•ÿö}1±Ó2ïÜ/|RòôÙ‹ªê—555ÜéLyY]õâYyÉcN^οS“N³öûy._lEÖT–ÇH�¯LP˜4Ž@Ô3[èÄØ¸m+öÒµ[?qž”=¯æÖÖ½©oh„Ò4½À3êß¼~USõ¬ôIÁ½¬ô‹§Y{¶md,]h¦G$à¤ÇWö®0-#šÛº­»¢N_º–�WTò¬ºöMãZZÛÚÚA:¦hH[kKsSCÝ«êgÅ?çÞºvñTTÄÖun4#-•�+01 4N‘¨oaëìzøÄ…ôì¼Ge•Ü7M-m]ÝÝ===½30§»«³£­¹ñ ÷EiQÞ­ô '‡z9ÛZèqà“ñ> Þ¤¤ (̘J÷ð þæèÙ”¬Ü¢²ªÚ†–ö®žÞ¾~o@�Á©G0€Çãõ÷õvw¶57ÔV–åÞL9{ô›`:ÕT&#ùÁ.¡MJHaÔõÌm�½7‡GÅ^θ[XZYÛØÚÙÓÇ>H�á©G0€Ïçc_wGkcmeiá݌˱Q᛽�mÍõÔ°Rïï‚¡¤e•4 )4wŸàýÇÎ_cç¿®®^ÞæŒòvêN€ˆ|@ëílm|õ¢8Ÿ}íü±ýÁ>î4Š¡†’¬4êC¼IUmÓN«âÎ$gæ>®à6´vöò‡ ÔèôÿN=ï ‡‡ùƒ¼ÞΖ†šŠÇ¹™Ég¢ÂW9-0ÕVîrôÄàwlÒb±ëÚ ½GÏ¥³ Jªêš;`×Èô< +G†‡y=ÍuU%ìôsG÷­u]lv ¿—ïŽ >14Ž@"[ÓÜ7†<ù}ƽGÜÆ¶îþÁ¡¡ê·™Š€Éú»Û¹�îe|ò`ÈFwš5™DïåØ.a81M#ª#3 ,*îJÖƒ_+ëš;ûø ¯™T�ÑF†ù}�Íu•¿>ȺÀt¤i‚#û>ûr*Ú& —yoÙýíÙôNÙ˨0Ø5³,! È Ê^–qrÒÏ~»{‹÷²…&Ú*ràãÿ ü�Û×1³uY´ïXÒ�»E¯šÚ{yüá·"�ýms˜ÏëmozUQt÷FÒ±}Ak]lÍtÀõ£Æ®~)1x5] »ëƒœ¸”‘ûäùkh“C¢)L ‚vùúù“ÜŒK'¯_ag¡«†ÇH~0u=K{7Ÿ�C§.ß¼N¬¥Kd›ÂÀ.»ZÀ‘Ý¿yùÔ¡7{K=uSP×·¢yøî8{%ëaqU}kw?ؤˆ\°l˜ßßÝZ_Uü0ëJ쑾4+}ð½?HDk‡•~¡‘qW³óK«ëÛzx"‡ñzÚê«K󳝯E†ú­t°6 ‚¥ñ0‘Lq`øïŒŽO¹]P +^J›‘ ÈÞŽ@°†—¥·Sâ£wú3(d"a‰L¡3¢RÙœ²šÆöøöE èio¬)ã°S¢Ãt +øÂ~Ã)’È6tf@8+!�Í)ŸEX9‡�–À +`ÒmÈ$EÜ0CGf`8+Që�X¯–È +d:Ú~ƒþ&Š£Ga1‰i9…åÜYƒqË sÒcFahñw߇yŽÁ:fÖ1󜖞Sø”Û4K°&îÓœô?'LcHˆ0á’¡±`–KW¬bÅ<–WR~¿ñYûk~ïÀÐðȨ@06xÂLˆ¸œ"ŒŽ ö÷v¿jkn¸WVt:ý@ÌöÆrcm˜äûßÄ÷³TTÑ X8ºûþc';%óüåÊšÆæ¶Ž®žÞþ�A€E NàZpÊðÐà@/¿óå nCõÍ’¼‡ã#6­qµ73PW“œ¾bð,Á½TÓ5]êì°-z'û×+÷šž·wtv÷¼éëëœ[ #úûúÞôtwv´µ<©¿w³$ÿdÊÞ¨­ë=éÖÆÚD¬ðN΀‰î%´ÌÜÞÕg#ë_~ÉþµôfUm#·¥•×ñº³«›Ïï�òFÜ«ùüî®Î×¼Ö–¦GîÜ(>w2-1z[àêo—QõÉ“ ›ƒ×´Lg±5ÍÃwsDlÒ‘¬sE×*ïÕ=zÂmyÑÖÎã½ìæ•x¿äñÚ[_´pŸ4ÔVU\½”—‘ºo7k£Ïß, µ aˆ™ ÂÀ¯�œ¢2Yo‰­³§_HDìþ´Œ3J¯WVÕÔ54>yÚÄm~Ò"~ òfnÓÓ'� u÷ïV\+)È=ž’¸›¼Ö�f½X‡„Wø¸aÐ,¡-C+4)fv+~!á1ÿù9=+ïBÉÕ²Ê;UÕ5jëêë‚4ˆ¨´¾¾®öAMuÕ�ʲߊ Îf=ÄŽfûzЗšê««`À•ü°a¢–�‹©€#jšÙºM?üsORê³Îœ/,¾|õzYyEå-�Ûâ*¯¬(/»~õrqáùÓ™éÉûãvmÛ¸Öc¹-Õ@ƒ€oØG ƒ[ OÒ62·s^µ–ù}ä”£'²róò +/—”””ŠP]\\t±° ?/7ëø/ÉöD‡o ðq§ÛR)šDœp�5 ¾˜`˜e’Ž‘ù2ºÛßý7mÛ±;>ñ`2'ýxFfö©œÜÜÓ gÄ Tš››s*;3ãx:'ù§ÄøèÈÐ`?oW§¥K(ZDœ"<È�`¢aŠdÚ†TGÏ56…†GÅÄïÝ—tðprJj‡sd.ápÒRS’LÚÇŽ‹ÙºÉÿ;�öV¦šD¼¢Ü'99LX¦¦e`biGweø¬g†„†íˆŠŽ‰�‹ß“Àf³÷ŠP�°'>.6&:jGXhs½�çJš­ùb= NäúÄ gÊð ]#ªõ7ô•ÞkÖ‡l ÝÎ + �ˆˆ„³cv™,‹ˆcmݸ~�·‡ ÍÎj‰¡Y§0éú$lJ&§ˆU%iéS­—9:¯tg¬öñõó +b27Š<»ÀULfPP`€¿Ÿ¯Ïj†ûJgÇeVT#=M5%Ôg]S2i”¼ž@ÖÖ72µ°±s 9»¸ºy¬b0¼¼AV‹¨Ø‹ÁXåáæêâLs°³±05ÒÓ"ð´¬ôç]&”I!eÑ +XeYK—bljfickgïàèD£Ó—Ãqž]&Ëètš“£ƒ½�­�¥™©±�®&‰€WcDJ}Þ5)“�BȠЊX¼ªšº–®>ÅØÄ”jfnaii%ŠõìWZZZ˜›QMMŒ)ú:Zêjª€%l—Ä\ð4…M4 NY•HR×ÔÖÑÕÓ7 P(†s 8Á@_OWG[S�DTUÆb n×—\BÔ4IRFVN^ƒÅ)«ˆj$™¬.І8�kÉdI�HPQÆA*9YiÀµëK.Ñ8…4)„´Œ, +-¯ ˆQÂbq8<^y®Áãq8,V £¨ �F�f!D¬/·k& ²!!J�FËËË+Ì5à p’ + ¤…*˜õ¿¹¦h"›�DJKKË@‘�K„'€“�HBJ¤škŠÙNBRøæ-à4pæ_…ªÙ²`d8ˆ7¯�Žü‹H5kÖLÜD|ÔtÜdn¨yeÎ7åÿù 0“C endstream endobj 405 0 obj <> endobj 432 0 obj <> endobj 433 0 obj [0.0 0.0 0.0] endobj 434 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +153 0 0 153 1196.9920654 112.0078735 cm +/Im0 Do +Q + endstream endobj 435 0 obj <> endobj 436 0 obj <>/Filter/FlateDecode/Height 153/Intent/RelativeColorimetric/Length 4783/Name/X/Subtype/Image/Type/XObject/Width 153>>stream +H‰ìÖwTSipwW�@ BOèz ± ‚(à&V¤©++2"`+渎 )tF”¢že18: BÔš¨€DDÊÒ{ €;ûÝ›Š(3@pçœûüßó;Ïûޛ̙ƒDdùËôóÿd™y%üð_E—©á„¨¿�ÌE ÁÜeÁª¹óæÍŸé€™óæA:Aoˆ«ÄÄ%$P(III)(èéžæ¡PâNPÛïu X@…i ƒÅbq30 Ì“‘FKI¢ TÛï* ª bA*´ ++'�Ç+(Š3AA�——“ÅbdÐR( 1¸µÉep] - I´ @á JʪjêêD"I�©G8�HTWWSUV"àåpi)Im²Òu‰‰£¤d°rxEe5¢†–Ž®ž¾™L6œ‰€9úzº:ZDUeE¼,VZ +%.6ii� ªKJ+§ ¤FÒÒ50213·´²¦Pl¡N5Âç)k+Ks3C}M¢ª^# •_Ú$.¨.Y¼’š†Ž�±¹u�­�=ÍÁ�NwdéÔ"|šNw -±_¼h��•™‘¾6IU�“¥ Öùy—$+GP%é�M­¨¶K—¹¬póXÉ`0™LÏéÌ`0<Ü¿ruv¢Û/¢Zšh“Trôgeï\Ò8y%u-S«öŽÎn ¯5ë}|ýüÙ4µŸð÷Û¸aÝêU+¿ZN·›oi¢¯©¦(�ý¬lÔ…W&éYÌ·wZÁX½ÁsPpÈŽÐ�aáÂDL-ïÛúõöm[7ù­÷^éºÔŽjn¨CTÆc¥!x>QìRPÑÐ3±¶ute®õÛºkß�CG"££Y¬˜é‡ÅŠŽŠ<|pÿÞˆÛ¶ø®a¸ÐYë’„² +ƒ)Ž}©hè›ÚØ/÷Xã·uÇ®ý‘1ÿ<~*6.>!!q&’w&öÔñ£1GöG„üÝwµ»“ÅTOÈÐ(± — ¹ÄPh,^YCߌJsñܰåë݇bŽÇ&^¸ôCòÕ”Ô4�ô鑚r5ù‡‹çNÇ:¸+dóz¦óª©>IÜ™,û¸°¹àû…‘W"é™Í§¹zùý#ü@ÌÉ„¤äÔë™YÙ·ÙlvÎôÃfßξ••ù¯ë©—“âO°ö‡ù®r2=’’F +È>ªLp`2²ŠD]S*m…·ÿöÝ‘ßÅ_L¹qóö�?å=È/àp8…Ó‡SPððAÞ½;ٙׯ&Å;²+ØÏËu ÕDW]QVF>³� C¡q +jÚÆ”%®Þ!{Y'Ï_¹qëǼüŸÿR\RZVòtzÊÊJKŠyT˜Ÿ{'ëzò¹“Ñ{¶û{¹ØSŒµÕpЙ�« . ,RY“lµØy•ÿö}1±Ó2ïÜ/|RòôÙ‹ªê—555ÜéLyY]õâYyÉcN^οS“N³öûy._lEÖT–ÇH�¯LP˜4Ž@Ô3[èÄØ¸m+öÒµ[?qž”=¯æÖÖ½©oh„Ò4½À3êß¼~USõ¬ôIÁ½¬ô‹§Y{¶md,]h¦G$à¤ÇWö®0-#šÛº­»¢N_º–�WTò¬ºöMãZZÛÚÚA:¦hH[kKsSCÝ«êgÅ?çÞºvñTTÄÖun4#-•�+01 4N‘¨oaëìzøÄ…ôì¼Ge•Ü7M-m]ÝÝ===½30§»«³£­¹ñ ÷EiQÞ­ô '‡z9ÛZèqà“ñ> Þ¤¤ (̘J÷ð þæèÙ”¬Ü¢²ªÚ†–ö®žÞ¾~o@�Á©G0€Çãõ÷õvw¶57ÔV–åÞL9{ô›`:ÕT&#ùÁ.¡MJHaÔõÌm�½7‡GÅ^θ[XZYÛØÚÙÓÇ>H�á©G0€Ïçc_wGkcmeiá݌˱Q᛽�mÍõÔ°Rïï‚¡¤e•4 )4wŸàýÇÎ_cç¿®®^ÞæŒòvêN€ˆ|@ëílm|õ¢8Ÿ}íü±ýÁ>î4Š¡†’¬4êC¼IUmÓN«âÎ$gæ>®à6´vöò‡ ÔèôÿN=ï ‡‡ùƒ¼ÞΖ†šŠÇ¹™Ég¢ÂW9-0ÕVîrôÄàwlÒb±ëÚ ½GÏ¥³ Jªêš;`×Èô< +G†‡y=ÍuU%ìôsG÷­u]lv ¿—ïŽ >14Ž@"[ÓÜ7†<ù}ƽGÜÆ¶îþÁ¡¡ê·™Š€Éú»Û¹�îe|ò`ÈFwš5™DïåØ.a81M#ª#3 ,*îJÖƒ_+ëš;ûø ¯™T�ÑF†ù}�Íu•¿>ȺÀt¤i‚#û>ûr*Ú& —yoÙýíÙôNÙ˨0Ø5³,! È Ê^–qrÒÏ~»{‹÷²…&Ú*ràãÿ ü�Û×1³uY´ïXÒ�»E¯šÚ{yüá·"�ýms˜ÏëmozUQt÷FÒ±}Ak]lÍtÀõ£Æ®~)1x5] »ëƒœ¸”‘ûäùkh“C¢)L ‚vùúù“ÜŒK'¯_ag¡«†ÇH~0u=K{7Ÿ�C§.ß¼N¬¥Kd›ÂÀ.»ZÀ‘Ý¿yùÔ¡7{K=uSP×·¢yøî8{%ëaqU}kw?ؤˆ\°l˜ßßÝZ_Uü0ëJ쑾4+}ð½?HDk‡•~¡‘qW³óK«ëÛzx"‡ñzÚê«K󳝯E†ú­t°6 ‚¥ñ0‘Lq`øïŒŽO¹]P +^J›‘ ÈÞŽ@°†—¥·Sâ£wú3(d"a‰L¡3¢RÙœ²šÆöøöE èio¬)ã°S¢Ãt +øÂ~Ã)’È6tf@8+!�Í)ŸEX9‡�–À +`ÒmÈ$EÜ0CGf`8+Që�X¯–È +d:Ú~ƒþ&Š£Ga1‰i9…åÜYƒqË sÒcFahñw߇yŽÁ:fÖ1󜖞Sø”Û4K°&îÓœô?'LcHˆ0á’¡±`–KW¬bÅ<–WR~¿ñYûk~ïÀÐðȨ@06xÂLˆ¸œ"ŒŽ ö÷v¿jkn¸WVt:ý@ÌöÆrcm˜äûßÄ÷³TTÑ X8ºûþc';%óüåÊšÆæ¶Ž®žÞþ�A€E NàZpÊðÐà@/¿óå nCõÍ’¼‡ã#6­qµ73PW“œ¾bð,Á½TÓ5]êì°-z'û×+÷šž·wtv÷¼éëëœ[ #úûúÞôtwv´µ<©¿w³$ÿdÊÞ¨­ë=éÖÆÚD¬ðN΀‰î%´ÌÜÞÕg#ë_~ÉþµôfUm#·¥•×ñº³«›Ïï�òFÜ«ùüî®Î×¼Ö–¦GîÜ(>w2-1z[àêo—QõÉ“ ›ƒ×´Lg±5ÍÃwsDlÒ‘¬sE×*ïÕ=zÂmyÑÖÎã½ìæ•x¿äñÚ[_´pŸ4ÔVU\½”—‘ºo7k£Ïß, µ aˆ™ ÂÀ¯�œ¢2Yo‰­³§_HDìþ´Œ3J¯WVÕÔ54>yÚÄm~Ò"~ òfnÓÓ'� u÷ïV\+)È=ž’¸›¼Ö�f½X‡„Wø¸aÐ,¡-C+4)fv+~!á1ÿù9=+ïBÉÕ²Ê;UÕ5jëêë‚4ˆ¨´¾¾®öAMuÕ�ʲߊ Îf=ÄŽfûzЗšê««`À•ü°a¢–�‹©€#jšÙºM?üsORê³Îœ/,¾|õzYyEå-�Ûâ*¯¬(/»~õrqáùÓ™éÉûãvmÛ¸Öc¹-Õ@ƒ€oØG ƒ[ OÒ62·s^µ–ù}ä”£'²róò +/—”””ŠP]\\t±° ?/7ëø/ÉöD‡o ðq§ÛR)šDœp�5 ¾˜`˜e’Ž‘ù2ºÛßý7mÛ±;>ñ`2'ýxFfö©œÜÜÓ gÄ Tš››s*;3ãx:'ù§ÄøèÈÐ`?oW§¥K(ZDœ"<È�`¢aŠdÚ†TGÏ56…†GÅÄïÝ—tðprJj‡sd.ápÒRS’LÚÇŽ‹ÙºÉÿ;�öV¦šD¼¢Ü'99LX¦¦e`biGweø¬g†„†íˆŠŽ‰�‹ß“Àf³÷ŠP�°'>.6&:jGXhs½�çJš­ùb= NäúÄ gÊð ]#ªõ7ô•ÞkÖ‡l ÝÎ + �ˆˆ„³cv™,‹ˆcmݸ~�·‡ ÍÎj‰¡Y§0éú$lJ&§ˆU%iéS­—9:¯tg¬öñõó +b27Š<»ÀULfPP`€¿Ÿ¯Ïj†ûJgÇeVT#=M5%Ôg]S2i”¼ž@ÖÖ72µ°±s 9»¸ºy¬b0¼¼AV‹¨Ø‹ÁXåáæêâLs°³±05ÒÓ"ð´¬ôç]&”I!eÑ +XeYK—bljfickgïàèD£Ó—Ãqž]&Ëètš“£ƒ½�­�¥™©±�®&‰€WcDJ}Þ5)“�BȠЊX¼ªšº–®>ÅØÄ”jfnaii%ŠõìWZZZ˜›QMMŒ)ú:Zêjª€%l—Ä\ð4…M4 NY•HR×ÔÖÑÕÓ7 P(†s 8Á@_OWG[S�DTUÆb n×—\BÔ4IRFVN^ƒÅ)«ˆj$™¬.І8�kÉdI�HPQÆA*9YiÀµëK.Ñ8…4)„´Œ, +-¯ ˆQÂbq8<^y®Áãq8,V £¨ �F�f!D¬/·k& ²!!J�FËËË+Ì5à p’ + ¤…*˜õ¿¹¦h"›�DJKKË@‘�K„'€“�HBJ¤škŠÙNBRøæ-à4pæ_…ªÙ²`d8ˆ7¯�Žü‹H5kÖLÜD|ÔtÜdn¨yeÎ7åÿù 0“C endstream endobj 340 0 obj <> endobj 437 0 obj <> endobj 438 0 obj <> endobj 403 0 obj [/ICCBased 87 0 R] endobj 338 0 obj <>stream +H‰„WËŽG¼÷WÔtM2ßyµlìi±|Xßöê`�õÿ€#‚ÌênÉÂb€édå‹�`�ùöŸÇÛ¿?¤ã‡?·Ï·6Æ™R>Ò™[;,•rÎ4�²ê¹R?þúõößãO¬{û×Ïéøß—›¥jg«m®Y�Œá¬9÷þ<¼¿¬i£œVŠ�9›ý\Öæ˜åxÿãöÃ/ÇÛÏŸÒñåÓñÓ/ÇÇÛÇÐÇÚ1æ:±ÉjfR¨â¸PÈW”–Û‘ðwùâç¥Bc®‡:j>®·§ëß>àÌ÷/‡éïøòþçuM:k3x©tšÔϱúa6‹>C©ß°"õ�ivzNÔaõŸu|mPñ½Ÿo‰§ÕÃ:¦î†¥é´¾Žçÿ:ö3¤µvÔ•áà:qt‡^µuǹ?n÷šú9G…ð;…qÖÜé#õý¬Øy‰v¼ßÂÙZ>®]úip.È83iM¦¿42aq®Ï&ý½ÃÌ�Oj/ø²Ì­3ΖŸ´Îg2WY£;n­¼ìíovŽ^8nÕŽ|f`ìÞÎU¯[>§Š¥ö£œi4p¶T·€ØÑ��2ÔiGl²³®ºLçD°a•_†Ø®f$9â>ODz—s•�~ÉNĘªïñ1îhƒ)0SkkÏÒ|d„óÌ6 kÌÎÙ‘”ú×í«'àGuÌ€aEª¶Ea,‘ñíýÖ°bRœ3í4·¶Û‡BªØuÄp@ß§5îà­º¨Ÿ™3Ò‘°Ðí>ø�>¥Ö�â™y¦¶ …PR–K鈭2uà÷Þöé7 ÁÆŠüh uêO Akhbt–…ëVáp(´Ãˆ˜„1}Œ¼�äAG‚B•Éÿ}ÎS½œGHAãv�áI“á ‚Þ’ ßHy\É@tÂ#I1‰„ÔH–`D*k“QaFŽª�" ŒŽ„IDMo +WÎÒy�-М€\s ªR�÷}lSË–AFÂ?m±D˜b÷4ω¢�k vÔ�¾,ƒ0Ûp‚¨-�PáˆGÛ0㪞-ƒ# ÉØ©2ãÑdÓÝ¡ãšJºB—PZ¡PµŽ51•j“`È5 x‡´²<Ø = ï»§6H ¦9SÒH²´¦X;y’Érþt…¯æK€ZÃW†è yZò|™Fl÷Ú|akÄŽ™æŠ )€§Dr¯lê‹Éž×( Œ«ÑxËShn‚_Cp2Ë*9äP�{ÙcÆÝÒ–p +ø‘Ñä)«ò\dÄ…nEÌ21ÇôD pFvÞÉÁk +sfU¨ŠÐ°Ä#Á›Cg¹ ‘¢š¸‡äЪE!5’Ö\îPË#o¾¦T9æ({G4,|øµª@ìå©)6OZ R…&[m^`”0©iaZLþó2šF¨*nÎÉcj®•,êö Š$z‰…t“ ÛŸ*cR ‘R›â!U1‹i&3»‹ÛŸö˜Á-[H>6 åBn×�¸cQúŸdÀòŒs–Õ¸Šý–žˆÈ%jV-‡Y,}E@M#Ð�ë'3>Å"kÄ…¹1æ²$Ta�%Ó˜°Óª}!C@¿IÛUSâJîüÊŠbJ@[b“ãLOâ�JžYN‘(ì(ï3Â*‰xSké°‚�(X#N£ÎèºæX ºôuF*»(ŠS˜©B-*¹ 2pĈLÍœcÂ0–‰»]™g åâ‚Iƒ¡FaÐ?2MÓäLUæWZ:‡h:¡H¤2!C3ñ›µ !ŽÎ,ðÓ=ä�ìDJ준Òh² Ýmh,s ±²s†ft@›ãäãî†LIlB–űò«æ¾«�)#¶ ö +FÙP4¡˜ÃˆšCÿõ«|\’Sá@kÒˆµ;jV"U”´âRÒëiâhT¯ÕSDÕ› +p©’Ô-TuQ]\Íúj)â>ãÞ¡�—Hzê(w¯‰åª)A'¡+*Ç[ãð¢§LžšÐ,:^¢cxçDŽšØT Y� +Ñ�¡ +1¼­Æv‘šù;զ⭵‡9€´j´=¤³ï´àf•Œ×ÿ‘Já…éTšxÀiJßÊa‰Š'ZòÖyð{´ �'_‘nÎN¤=Ý¢Ò1Ôk”E¦)U ÙrȪ¨ÖjÚÙ�]ÂôDw±:¸|W‚ŸØ‡XÈÛšö…žóuì»&»þ]+Â.dÛØóyâÓãt·YþÈð•w‚wfq›Št{JÝ4©KŸûe3zgUtší^ ‰éêYG<–\3Ïu’¢sU÷Þ^sCÍy÷êDárÞÍKwe½âD°ã&5Þ†åU=”j‡ +ºéÑÒ<5¼5º¨<ª�N²Üª�wñ¥Ílî•r×wp™‘5Xâ3H$…ËÒ–ìÒ‰ŒJ{Ë%⇮&±Ç�7d¬ï^ ²À`^Šÿd‡K5µ²-íêBÁç«—�æøVdgæ=E+/buJcºKE4´ÃÏU-KÒ““Îø$wX&ÏÍ™”~“ðkÇ_¿>ÍfÀ³îYýÃôo/Þ\¨ìllRf“eöšå°ºÏ)ÞÔYjŽAï]î¸ð´Í'׸”¶ñeê®SôIþÀìý:´ž»·Ö…dÐݱW>Süªµ]3$¬îÚ\Õ¡áiǃ†w7ƒµ€´0Ô>û;f´-låBô¾)vù¹~ Íõ:¨»è +ò<•Ø8õÞû®„tï¡z»¨ÆOsi¸{ðÓü·Å…ì#ðv�߈l³?Kt(°3;¦¿œþ¬­QëîÅR%B[ªÞ§ÙŸYծП¦ZŸÕ€C¬"0«îk’!¯ªHf‰©20›c¯0~C>e¢ž|hd2õœ.›8‹GãEpt5i¢T6þà ƒ |_ûšc“ÞZ¶ìňXbø[6¯éy¢27K¼5µ’Ôˇƒ² !¿CÍ-xO"n9g17àÖƒ°|᫤Â&+; Úêí’baz ö©š~`ö5ÖãˆÃJ%û ÂfÊå “ž8UÂçÂy®m{ÖÍÔš8¤“—º>¡Òt¸¿`è]M9Ó�é¼+'=x·2¿Ë»×ìÿçÝ:ñh@ç.Þ͵¿ò.� �kBLv·¬ô‚wYýšã“ Ç&t„t‡ÇÕí©">–“»=FÎ¥[Ô«"v°%ÚE9 +î`:F©¬bÚ~©’7ïìãb6é…Ä�j§“ €Î%ì´Õ.…½áqÀ‹öÐ.¾—Ĉ—xVï’ Mô?à=¶äÆ$ÏNÓ~Ókmëè’û¯>fùvrÚpiqE^‘5騴¤ûX²vŠ„PEãþweK[þÕëSÕzi8Wuçs!Ÿ&òúÐED;Œ~ ;<—hZ˜¼�è½\G¦x¥Å}|ʨ8R8dë¨"-c¨>ã»Øz]F{+äáY¯E7œî—']ð`Ïk—÷ª]ÊÈä 0½ôŒ®ZÊ“4þ›ýjG’d·�¾N1Ø ‚ø9Ï‹'k-Ýß2¬éž]É”¡g†h°X,|™Ð7èÐɉ£I¼Æ¬ž‡.B+÷EÎ8ÙvDÇØŠ|,LFèY3xe%”’z²ö—†º=9ûò±AâéòñÒ›lævG1$Ûˆk‰`žÚƒuÝ B#vI§B=�>1{�óð©53>(O¼<;DP�Ã8‹T “÷IÅboK Ñ~-­¬Á}‡5)`اF™3{‘±Y`ÜAÙëÃ/.~ï ©ÆÌÛ×ÐM0½{?èJ])š…õnq&d¥ûË*r¿4gÇW3!“{ß-ãÑ­þÿvã•d&Kéì¤ÂûíÆª5ªÝmµÓÈ]drÀ –lÈ0×Êzå�œ;ûYΚý ¨aI—¿™Y +¯–ØdÛ£D"ß¿_'Dð¹@ø�Âa¸PÂaÆ@×±ƒ77š°uuNÌõÐï4¼Zݹ‘ÞÈ—þ,Ó^”ý†B˜ñ¦ÒPPGºâ1‚A \…ËXŒ ˆ˜D’‘•ï¢�� B"7®›±uâa`Ù™bKŸ5ÇdàÅ•A5Ä” >¶¶N'Ury5kÎáê½ÄE£¼]»óM›°tl1#+YȘ ¦=íà÷N*—x0H“qù O³�ú.¸BDZr<|h€,«\ƒ;»x°n¥Ñ�¨ƒiÃÄüt�\ç–Ñ]ûÝEK +‚bòûpØ@/Ž›'#‚Õ|=IAçí„•¥µ +&ÀÐò-+ŸVËtøÆaíOX¥1ø¾ Èõ †®–LÓ5Œ‘^¤…Xø€À ‘L x�_+¸èhx$OÍ;#õ^«¿HQÃE�ñ£Kç¡ú'£6éðQ|db’5ãÿE-®éòíƒн¨åBÌO5Þ̪v±�†q”Í‚>bØì„^|IkH4°Äx¨S/ä=8 +cRc‡@ÕP(”CX­ŠÖ�ɈèeùMŒÏIQg¬QÔ3µ_,þ5ì�gi‡{` ùøÝÐJ‹âq ^Ê%Ê4õ�—ˆnl;¼zP†,×댤>:i=ì3'©1~q‹Ànþúì,ýT‹ç@ï¾¢Æ@VµF¶‹ú�„|�Z×ëÊBjŽš„˜²ÉǦ`u{am»&¶ ;gÝ¥)¯å%²‹�k΄ž7ËǵòLï¢Ú*ÜZtxté#„(óðC\Juóã’©¬p4£&—­YG£u-Ê(bŸ¾å„Ð/(‚ÎCö.QIÁ™‡.zc ¡‘È]îEc4;© (!®ÖÉ\�´h‡Øb2]ÂE fRýâZ�S€[e"œ[0÷H\ÐŒ |ýòÕé#àŸ#âUõ{IY‡éMÁToøÒ‡ Hç“ÇYÙ¦n%Æ/UAËÚ—¯°·ê(}…õ×äScõϾýoh`Ü$Õ� €–£ÖÙu=ý'á‚<Ú4?±ã\äÇq^rDc>@pŠªØ]ÿ%vS€¬Å´ "ûHY5¾�>þÕº—4’¥Éýë±Û6À²§1ŒCѶÐ)¦K+pÜ6¥žà1ƒaÂÀ#Œ±vvËáúà¡Íõr�wÊÜH†’zM·Ôúw¶j=É Ú꜓ßúFþFéžv™ó‘%Sóú°š>*(ª²—úû�ë8Þ™úõLŒ1ïuóû0ìŽW»(K.öc?Ÿr+;"KSžñáÐ%¹r³Æý6¶`øš±VMDËz)Œ¾9‰{§wHƒ�|¸¢>k6§•\¿ …1¢ß-h§ÐØ£.z±9d(ØøµKn A¯„ýÃhðL(” ì~ l§œK#Ãùrù¬Dp~e¡“$v~ýÃÉ ¯…ÌQÂe àsÍ`ŠqÕ0à³Ìÿ€ñì\�ö[Þ3!ñÜË$¶5AÆW«)’ñ¬ 2ò+,ž-ïVbÜ|1&k¿;$¦1£‡*æA8öVªKl‚·–ðT÷÷+C1/CÞðçˆbct†jUrÐZ‚3‰Ôp�+p�ù$ã×ãy»AUZjœ©.ðNsªê|q®ˆ¨ÿ¿T@ð Õ|‡0×ùÓЖ‘¥Á’gdúísmóîúŒj{V¿çxæç#Çûdßj°¨q>Z©‘+Ó4iò~šÍñàp= ‹xFh& 3 ígY]yÔ@D…àÜ_L ÍKyÝËõz?fë¼`Ñ|.Š >œwèK´Ù/éÞÜhƒ¾ÕõŸôÕ¢ô«u¸±ª‡�ýGu8¡oFÿ¦Gßôè›ý¿Ó£™Ñ#;óB;5Ù�;ŒÑãÕÎ׋¸x‰1ÂØãÞêªÇ†ÖóÒx¯IÒ…ñšÙR8ä£�[CwÚ‹=Å»õ¿è»u² ]ÀMf|™ýmb”ƒ…¡\»°%PÓªîF0g&–u‰ÁÄX=±‘£‚Ö3á?«Úé³F4—’|! €ôÖîFn£SŒmÉÓÉÉT(\*ÈØBÃy#\ø�[´�õbg¥LXèîF|¨‘¼@¶ÚøiÚÓΨù Bˆ±ÝˆZÀ±œè6ê»à +#‚ö¶@ ¢KffÕ�h·ä›[ÄvƒátB% +3Y¤v x–È칬æ®ý\”7>&¿‡eÈf²öʰf&ÔðB'ûvÞQ^²ø”à7ß²òiÍüÞ‹a¢�JÜw_Ü4'<ÆK€v4bž’”èz�Aó¤ µéaŸAu Qð]$^üCAðIŸ,¡ÆÎ#‡>Jù¨Îþõ÷§ÿdéìÇo�jéþç+|�ŽŒoøú†¯oøú†¯ÿ|}¢OoÙ>1’<� ðyEŸ†ë÷ÙÏ.bõ¯‰µÍ»®×•U¤mALÙþQÜMFøkþ¸â2®|BiÙÎKd-ל =o–�kå™ÐIÌŸ +·–TtPÄ ;C´ êæ‡Ý¾c…£¥FmÍ:­kQ¿Ó=>}Ë 7‰ÞTt�‡l’xèÈCïZôR �¨8;]î%“:}ÒSmÑh]úv©bKzuÀ»”4mõÿ‰k5Nn•IˆpnÉCCêÒþÍ~•äHŽ#Á¯ä²@:é\ÞÓ—9Ôüÿ:nfN…2*}i40€.Uô”Ä }±A[i=G�Oã3þŽü|õïÌ»Â^”lG÷zŸºšt4;cÍήšVbüT”è�f¦½äDé¨?¿j ¨¿×™ÿŠÆI>+¦Z…ò–k�ì´ggQ÷k¼TäÆÃ±Ê\Rú0'�'Æ7“§j(âs�r@K3y¼³øÆjã¾43Eÿ¡‚ô§�TÆ´3ù. ŠŠÝYJ¾;ã_œb¢6LŸ1©qÞ…'K?HhÝâFïÙ^|²ÁV5I~­e�N3�'…,Wx§.ú#›¦Ý&ŸõÂgNº�ï]ü×ûÄí�e�8ùw2´ÿ*~ V•PZ7ãt“¡V×K†Æo_*´½4h‡0»$(™$h X©—U”ºs´ÛjxsøÃ[ÈDO E‹9—ål¼d('ü&E£—tñ?Áª*„ñHÑGŠ>Rô‘¢?IÑVvô_ Ì7¢B‘’¦pcM@çÑÆÐÀ/åôL í6BÞ²z¢ÛÖùö"²í±Îv=Ú.u[¡âX@/ÅòR+õ›�áëRq�øt(gÚ©A ›t ˆeÆüdÒ†&º©"Ÿ„—ö‹š“ŽëÊ­æÜÐú)³ÖöW ›^aØ‚ÅN¬÷ƒ0Íš +Éê¶�¾üÞ…ª%d<ËaÏË•ú Ñà-“¥Þ—Tž¹»jÙô”º¢¬k9ô¤ê¢Ý!fßC@ð-’³”F™í*Vlxi%ZÝ.ú×ÄŒõÞ a‡Ð_¬Âœit„šŸx±ô£#šÜ"Ÿ×sÈÞÒjp Af�M|lâcÿ›ØlEÛGra‡×·‰‹äÄmZIH·ÔkÊ}ü]ʱR¸‰®W%?™ òLªà��ìÌòkI¡²«‚BKÀ· ¥µv©ÔÿÜ�=^Û CU»^aÐy"#_ –L“·TñE¾Y»ÑQ® æP>TrÑ«EEŒô4êNÝ‹ W)\l"ïC¬"s!á…ŒéI*\Ðȶ5�ko™Ù†'sÊ8RÜÖý¼Åh²Ö`ÞÁûa³HÙàhHdž¹˜ ä=÷ {çq|PY3BÓ3ŒÊ”–‰TM<ñšet~7ÒiqM9ͤ%Ët�å¤X��Åßmâj  =qPØ•Š]:˜>thhРņ?va7øf°0"&óšâ0ÀÓ™ÿ+ð}š‘a×3¸—@À.•‰œïã´h�vJ³ªHÖiVvÊŒ† Inº 4a'{WnÚÓ°tš¤:$£'ë &0Âõ¢‰±š™ŸAµ[™¾�ẕ®©ÚæB^—Ï�cOÝ?^NUüBÄ£ö^äÄYèGI‰½O×À“ÊC¸UŽÝúP‘`˜ôsµÔ†t¬9g½—%¬(¦¬Æ|ßVÐ]°ù·ª{PÙ~ô9 {Óî€(=¥Ü‹,KÙwÍ]WŸ¤œª¤�ô +è{¿l�•½<ÆgJFbo?Þäù™ŒWWŸéwζi…Îo¶´~<ŽüÓ9ì1Wç*r^çš2e' ǰ�ÉÌ1oßy?R¯ÂÊòaƒ.@…�$™Æéi07ú¢ŠÈ!+20JòS$„ÏJšS`yÊ1MªKÄ!>'°wù…±§=g +÷Ì+Ä%ëR¥eÒTþJ°}Sh}ûñKÿÅÁª¿ì“H3½±¥ù1b•À�­RÌ\þMT�æ.~oÜõU}S_£^1 u—_þE}m»‹¯ewñµæ›øjwñÕ$¾ëAíÅ9¤=dÍ%& 5ýŠ®6½b:ÕÆ”dÃcÓJ1}m[5:Ü×414—øªyP([p�d�¥sÄÆm^¦=@5Éö)›E�•é¼ô×<¶5ª3Ñ)›²¼«?@™ÕUíOôŸwléÁb`žÇK<^âñÿ†—px‰þ?ö«»–æ^…6 ‚$øY��ç8xNfÿÁ ª@Þ–ž&u¤D".»Ù$Ô¥¶!onÇaãoï’’QîPEöˆ¡Ù1tr ‡=,ýÁW/–ïz}€Š"³?½þÓë?½þoôúØq›ým¯ågí“p7 áPÀ¿þHý}C£Rˆ­ÊgIÓ]¦`�9+³ivÀf”u‡CÅØ¨M¸:²ý5üˆC?"铲(2k~—?z–{i˜ëCvaá®ZeçošÚÒ.>hB…Y�?Z¨Œù`çƒE6’é{?4=‚5ô CXMö]eŸÂÃr5þ›xñ!)Vsv%sGâs +”´uçònñšŸü´¼˜a2Öb+ýŒs—7*8©í#Ó{>’_@lm(âRíÂXàÎ&Šö2�Zæl5¢Ì–Á +Ü'ná|óÑ,ÆÕ9»*³:}Ñêm1Mq½©¨MziŠ:·œÜß°Ñ&Øâ�-=£¦ê‚�Ce˜ü¤ïñ–ø× çñÚLpÜ4>Ué¨Fÿ×I²;kh8æèhÕ–i¥”Oj•rçJÂæRPȘZ±Ð_êcrØŒ(�pÉ{vGÏ8~Ÿ÷¬M­™(Ј�E°bÁJgÄ�á%Ñ¿sZ——œQúàÙ ‹ñurj¥o1Þ·¯ÆÍ/ãÔ®DjÕ…ŽÈ’É߬¦¥Ï·gýýÖì«¢‰êw¢%N É¡>á̵ˇ¥©*š­‹mV8ØÕ¼§.§uœ’¦ènÀçä<ÊÙžz#¼”zª/löG”¦2ãÆRdöÕ-ciÁ‰´õÒr»[ "¸|©ž—â‰s{¨!ÇÞªãí±xwEs³ãîêRé™ ¥õ&ÞÕ{f(Ç)Ô¢6ZÒÇXvÎÔvʹ2Y7ЉoL-¡4²%`X/yÅ�¬�ÚÍÍ.âa�d¯º¶þ�aÃUÝI‡˜ë™BèåHÏÖ�ObÃä“{²þ¤˜2 nv—’î@°/±%M‚2°÷IÊœ±Î%šÞdí”ýFÐeñOvtWŸ-dþRHc¥j2b½Q…4)Von•í0ÀxP`«ì«P êdžt¥P“¨(ÔR�� ¤žjA17Ð�f°0§:È%Xs=Îc½J- +HXØß€ç™d¦Jå­…êspÌ ô`‰Ì&ÉMñ±ÆK©?Jä7ØØø?^çÇëüx�ÃëìÛk êñÑ«}!jë‡æév–?ãDð”`\¶ÞviÍ´w:Ò½Ì!¢¼¯ãM¶0nפã&Tã!mðê­¶t‹‡­•³�“�GîÒGi¡Mkök„öq‘ÃXþ)öѳ‡DšîÂa“ˆ¡ßùó�¿¿äµø¿hÅ`³Èƒ}A²hm"ÙUG) Kíќϒ¶H,)„>c2‚ü¸¡"Ä5©¸£ &ß’W‹¯Lj¦wAДà�CÀŒ[^£ó=œ�€‡1¥C àLËÁ^S Š×+òÝ'~e�«—�ÛNl´ª¡Š=ãê{Žâ:4@×7üØÅ‰>'_;þ¶bÎ\°¤äÌÿ |ŸbdØ5·â¢ƒY:owÆÍ8õ2QÕÁ2IȸÙA Έk2VÊŒ‚ ±]uÀNh`I­X ,»‡¥ üi€xÏ…f/§¡Ž#1š™ŒJÙ“u‚=ÄØLzMî“ ÏúÚo“I6§Ö˜Që5¥FïS„00cÜ„WcÛ­7]R°ës\¡2D£S­Rwò]šƒó�ï«T¾ �5¤dú„,Æžž¨nçÀQ¢Z[¯¨’µQAJp2Àq[/zf©ô–zÝ|‡CÏ4ܺ jý1nqj¡_ùØçh±‰¥°"¨íç9ÚÓOA.އC™Š”¤��Jœ„$�šDúª‰«HôiV oÕít3é]k´Áó‹)xË�.º»"óÔ\”ы϶ƒ87Ô/ª;nÿ/£¼`¯Ÿ'/ú8s¨Þ|‡®¤\âêç©mã 7XySÄ4ø W^5:�«ñßd—àC›’МPZ „J+�n;²î\aó5gšîŽÈU‹a•žDòÑÏ8wy£‚“jÑ`~5Åùxà¸ä;­".Õ®ø rÚÔÞ½ÌÌ‘sÌüe—7ÖÈ)m>9§êœ]•‰YÑõüZ½‘#Fu¼‹±ú Sëvƒ“û6:,$.“©0Sï¹6°à‹HDܮߥÐ+KcÍìÙ-ÄÔEzB¦Šƒ°%rá�c|Фuˆ�½o±)� .w®¤Ø^ + +ÁO+Æ”Íü˜»R>¯I\ëNL«ÄOܳ6µäjé%F1²µÌÑ.)“|ËÇkªy.%˜'AÈ¢À*àëtb0†±/Þ·ÓÊâ[œÚ•ú^u¡#²dTÖpšþñ4‚óíY‚è^'=Tá’ò%þû×k~»¯;OCÓÿy Åç‡Ù)ýñF1Q„{ƹ̟!9;V�ŠvÒ*åÓ¤â9ÂÆÁôDL)áAaü.7¡€åo›sHR¬1ìŒ;ÆÇ¦ØB(‹¾ŸCpô3Šrˆ±G÷»�xÐwÄÖœ]4Ss‚HÂÝÍ»xãnmŵ߭íp!Ptðm,,ب“)[Àòýi†ŽM[ã?qB”RN ÐÂ$k:÷²j©÷ïDG%æóAÁëµ”½éìÍ�³5&v%…®n\¹£\nUþ ýX ï°‚3¾^Ç+(îòI‰UE5ÈÈè?É"Œë’¦ˆC‘g¸ÇNÁ�4…ÒÛR†ÉÈU²�JäK¥XJ½Á&,ù#ò–e˸‰Âï±´àDNû!qhPà§´'›¯—3 »¿*«/Uü+eÃÈ Ðm ŒaO$׺téÐ{fÈ)]ò.`î|lwÎÔv¶2Y7Љ/0O-¡4¤û”ì(éäuÅB³«‹X1ÄT¼õ�J¦Ÿi1F)ƒ ½ßQO™BZ˜è*Ýø$[M>¹§*{g¹"ŒNó”yœú%ÆÎ%C«?ªàžø5)ÞRúI>²v +pòø”IŽ‘�ÁZ$Ë te`Tñ0)JüV(k”[V%I™C;@m¨ì«tA„ nÖ†,,­m«)¡±«Æ‚&¢ÓÐ:É¢çºÓ Ñ,Þb䂤õ³žIy`½ +‹C”…§S’"7بm†aªTÞÑZ¨>ˆZÑReÚl¼jªF؇¬‚O%òÕkXaõXnOûÆk¨:e/ʘ×{ø Ñ«MJô´÷xU/ÈÜý +Æ8 j¢¬;©[€bY7hoÿ-D.‘ô;Οý¬ËŠÌš.hÝ eÔꔇ¨-}ìâƒ&,™•º_䓎­'"w¹%ã\íÿÇ™Áï~ƒÆ±+H>2øbšœ¶m7ê�¡â%Â2úõŠ(©\X ZµãÞÕ{¨˜YáCíN´�§–.õ„²WÃ%Ž +(AÓý¨F¹�a¥g +Ý1„ì!dþ�ý*IŽ$Ç�_ÑTF‚—Íœê4ÿ? ÜÁŒLIV}³nË‹D$\°8Ü™²‹)»È b8>ú# µ÷GböÒ‰ Ú¸a×ÜÊge�r5 ¹Y#KBÉj=j êÐU?ž hmÚ®-•.Z,õ.*Ò’bCµ]ò¡Åv´Ä3iXbš•e‹Ïè·®vÕ”û{ç¦u*È�—c”Á÷%c nxñ¦­J-™òADbbo²ób3óº3øÆhã½ÂÈ@öyÁ¦È³u:ãç²˱9ßJ®�$ã­’*Ó}F§1³t`Å{®Ì]¥gsF×´ág¼º�Qp9Æ…| Æ+�…DA^#6ÃÙ…s(ÃA÷,þRq ð2ߌúͨÿWŒº†ôõ†ð7„¿!üÿá}àüoÁÛÁÈ4/5g¢¤Óõ„òY2�,°$rÏ[ž}À»Ý¡;’à ÷ : +xDÖ‚q›‚#X‰×£ÝF +ci¿[FHž�f�p8Ðiòüø‘¸ÕX7HC…Ë,ñ=rIÿ«<^ìóoO¬}=,ceˆÂC¿ˆAÓXNý9%@ß[Ö\! çphMŒÃ;z¤ßÆmï­¦XlíÅRŸŠ…aí׺8­=¹9݆õt#ìÖ@šÔ�T TD|˜Ä°Æ) +ìSâ*Œ’ë\%¤=ÚàûÕj(·´ ˆ!u tGÜ€ìʼnà_‚6ÆEYV´¬q�Zdla¿Ì÷4n÷yOª%¡•\�úçL/I­{sVqn-�¦`/P·s“�”| +à¨7»Q�¥(6m÷åQ3.5Z�Gáu�Æ÷Tl«—¤Ààû¡Þàó2T®Ñ…r.ÓÊoˆü%qÞx=ýœÂÑ9ÆÊ¤¤5Ï…nÌ_ ¤ànü7«éÔ¹ÙKªØm XªÜO†äâ:s©jñ™_ʰ%ß(¤T8P�]ÔàÂç-�UðRmH}ÿ:<ÀL‰QÛ�Å­Ú隢ͦÝËL9g­²©Ê:q‘4� Õ÷òù¢mÎÙetÌŠ¦ Ý۲ĿÉÔÛ•³tS}=Æåûc¢±Äg‹[Ul¤VJBï¡"“åµ~Wk7¦Æš DÛÙH(ó¾•äVcg ÇÜÚ®:j[éO‚ÙræJvé%£� iǘª3šà•}÷cCîŽÆëø}ÄY—Z¢CÍrQ¬ØñL]Ã%V‰Ãý#—[Ò€¥¾Ñ†œâ6à8�Œ²‚*3°�—Ó¦ê 1P^è‰L¥u'ù¾3ÈùqÏ¿/{î(Ò9‰`Ýj.öÚ¯¯³hün㈠©¨ó•/Ëðt ZLj&¬Ïù`&TœÝâÅÙÇJNÖKîGq/ÒŠ6N6’”.·­ƒ5EáÉ2_­BºÀV:–?ÙЈb½|íÔtW“­j Ö¿ï ËÐk~³¶Ša3Yn£Î"sG)]m@�ø²�.`qÛçºD@Eü¦|€$Ïï@~G�öñk¯ú,�–ŸëaHÙ�­þÕ*ÙjΨ‹ûpƒýbÆ�›1˜û�ÖÉr¢F²bà 0‘¼tPíJŒã$Yi� cTUú#>ÝG5ÒS£)‘�ÖœuŽ•Â–cnl«Ÿ™·käæä›í¼À;LÑÖ¨¦0œÝËÒ_LeaFL$þóø)IÊr€ÈTcqh:¯�qת‡WË} ±Sá|Ï(…£–þÈŽ{¦_&¯§Öì†ó•—ûé /´€²Î0k0ÆÁ_jê\HŸW=óf)Ìe�‹‘á|´Öq˜5ik"" ÞlŠ• �ìSÚ-kœ›Fv',÷‰…¥g†tqb%ËZíûÙ«Vâ„PüfGovôfGÿlv|(²!bðOÒwVãÐ^©Éð—Þ_Z9HòÕ.Ž 5¯9ƒVE’jC²-E¶"‚Y AJlÝ g™<6²EsH$‰i¥—VRíRY—Ü�”L™Â¡œŒ%4:o„«@p‹Ò0ž,ðH• å]0 Iˆ8·_UkÊnÙŸÁѶ a @½¶|¦¼Bm‚-�C‚ç’˜Õ,AÔ[ÐÍ%^»ÀpŒX ìŠH&§m 3S\v_¬æ÷k­ÙÅxýcð}Ø,\MéŠÀfÖðB; +w\½¼dò+áoœ2ãk5}³$˜¨à‰¯FçwxòŽc¢E9d˜.£ÒÓñ¹Áß}â÷ºœÅß�×��¸h+ø$v�;#ô=G 0 ?öaWÿ Œz–a®:çvpa§ÿ�áûJFš]s+¥Ú]0´ðùNê0"«RDHKñ5p¤ƒ="SæÏ즗@u–vå¦�½¸vK€ x/ã\àÑ +òˆô.¹§Á£‘X �”pÈǸ2G�zÄ‚ Nþ­Xëgpˆ50|üN¤ž‘ëñ)�¿÷ÉEc`¦òà(;� Żޫ�<1�‚Zœa�At Pð.2/þ¡ ø–?µ~�§þý!5ÚyFJ¼�Ts:ÿ?ÿºÍo<ùš¯�Ÿ1ýï»W:„O8ã{²nOä|=,ô΋©`„D™"�ÞÉ+ê×!ÕÝg˜\²¡jºâ6†è°üÎeÏÖ"´I0†aí×:6â'#7Ç¢Û°žàÑ(Cxµ“’`<),,ÉS—¨}ʶšú^l`íÂ8ÊíÑß/ÉGú].@ßDƒ†h£ô‹hù—Nêh Ìef@{ê¤áÀ¢—8zÉÇè ü¸¯C®6éFÈ…@u¡™‘m�+–¾`˜‰îË_|Ì!±I2áÀ‡Ü$ÿ„UT5=³8‡5Ò'Ó‹^ÌÓêDy1ç‰4wŠ“ÀÉ9\Óu|ôå6ó†Ìþ¹ZÎüŸ«e›ü/ø({3´ïëæ÷€·›ß­®‡ßÇ|¸½=œ ø|Žš>wbäåsYéèÑn£ EǾÃ[C,gK��‚öi"Ä�d—Ï©`~ÿUÌï¾ÒñáߤìIòýš¿ÐD¯Ü;¢óš?ÍÍm+Êf ¸-Ø®�¥Ó«”ÎX$ÎÇU> : 4Š‘Öï‡EåÕ:d�%Eì[ü´vÜý0¡F±$\!ÝAÝÊT"úÖîµàûØÄ/×jÖ/Ó˜]�lP>¢Á÷[X´€Fa�5í0š’ºƒ©i¸€l¼�Ÿ„¨¯Â(3qg†fÃSò£ÒE©ä´Ì3ÏÖF¨+q¡*‹Š%2„Q,ıOüs®…î˜Fh‰­•C}$‚ÏÏè7ŠƒØ³3¨û�J +rãåeàåÕ0'‡�©¯*]žÕ4 ¡BÄ‹Ú΄ÝÎà›Ô™vè“¢HŠOüEGÕÛ¥X©IS. Kvg(¹ê ·�îtŸÑ©qß…™¥+Uì\™»J/‰ŸK»€üŒ«ç²öæ " ¯ŒÏéµMÓn“s½pΩ7÷‘Åb÷¶v(ÿ¹µŸù?·öÐ4ãȃnµ?õ§VY£.¤ˆÃünK}¥ýI!ŠÚ¥L0¨¸u‚¢�\�� ÿs>g·Ê41²T‰�ÁÜ©êáµEo™$Jãd£Ï:?ëCë`M! +“þÕ*„X¶Ü±üÉöѳùÚ©é®f\ÕB¾ë ­D¬‚¾ÌŒ +{òëªÌ5&zPÄöxR†ÞÈ’s�Ÿù «¹dí;š~ž +Zá1V2šP´,]c©ÛXÚMÐO™‹ƒ6ñ¡:}jcÀ9a¤i¹À‘r®H vö74Ús#f[4Mà +d4ˆ¼ç-�UðRmÚGbùÙ¯’äÊr¸ïSè¥à8�Â/ì�ï¿02|ú*u‡í½6U„ÀÏÇÈá~<ËUXÞçVĥ惄 ]A ^íÔ³£¨ŠC“:ýI‹"SsÆÃ˜uq¢'¬ýµúôQjó°ò¢3ËkÊjëOpïþ Ñù3ç‹yÃô.õVB×A’Yä‚ëÀó›àz°4ü¾¢¿�…Ü“mã +ùrGÕÐ6ä<øü=ïSPT÷©@èÚž\+äu�¤«3ÕO}LÒ »xëÄBì� » `jøûixgmÊEqÓ&A¶©<Ä{ÖÝ¡‹U»ºù­¦�‚v—JŸ[<â+ð¾NZ†JÈ}ñ½Í'7ï�©{Õ…ŽÈ’QYCvØû«*8o¯õ÷ñ{³÷ÔÉ‘;ˆöدr1�÷˜ŽIõùëÕ„Þ–I¹ùxM»Úê‰{+%Æœ»FGdlè),BºŠ’w¶ûK1¨Æ�G…Æz¾EÌ„_CǬ·z9+w¹Å.zf�êµÜ$—k‹:;¾DkÞŠk”àK™ä"k!u1KÜj�s-Ù®¥QñÝ*O/ûÌI†pp\ÄÙà‘� 8Ìš$Å&žÁÔZ…’ª¡vÄÜCô&%w¤—-rõ>PÚ´Û45Ê0NU¸§ø.€¢ÍD.Áôbž Û•{bn8ᕪÅS¼æ D)à^o~ºìl ¿£ƒx›úba!wºìφ"=ª‚–µ3 å4Å:©FËåÕlþj:M«×Š;[qq'ióòh¥èf�eYÏÍäΑ‘_HêÊ#^ko€U §€Y]´-ЬÛôþwÌOgÙ(‚pX ˜<!!ßÕøe§ÿÃ�Œ÷k”⣽Ñ>ìn¬^Ex!ˆ^RùÂÔ�5Ô%íP—n±‘8�×dÝE,ò�{ ‡>ÉqˆQY>KëE…Žç"}³×´K�ÿ'Ú?'ÎÉÛ¿‰o L;Üi3–«F�–�ZOçp–ýÐ.–n{ñ ûšÇ½˜t‘ÿ‰!Í.® UÛ)€n*Å£j…ï-ŠúŒlVu0ž”0dm5ÂVB௬ìYÛ «©­Q¡î€Z±õçïWpFÀ޹úØ·ž¦)‡'ÀÑ%™6ʼn¤è¬ÇÙú]ïx·#µë(—奛I1×é%û tâG>-¡k¤”Z‡P-Ñ›”»(°Ð£7‘Ú59$ŧ0.ŠÙ’Œ†Þ„°¾óòë +Ácy=¡?Ô”²Q„qSÈL!ŒXÁ•¨ ý÷×wÙYÐþXk[ÿ +ç8$O8mSsK|ĸ°‹Üò#‹ˆ{>&[‰®ie›iÞ­Ö!�ƒWG]Îaš‡kÈŸs{£šÛçØ­¦eˆfÆ`"`~°ÚH)3(¯¶3ªïÀ”dÕn²Ãév»¨!„÷Á�rây—ëC£˜ ¾rg†—µŒa”ý¹0#æ�òÂÏ‚†%Z> š õ›[Ûò °Ÿ¹·&Áø6Ô³&,nˆÍ`Üm–cJ@mDatÆ&VÀVmµ +®o×£!hZ'èþ’N´Nq´¬ŽºËâç 8ú° ލüü×qÎF ô:¨¨ÄL•áꎣ)ê—š<‰qÑ 1²Yãµ&Èp©7}¡¤¶J =�¨zǨ�Ú)Tž<�ó°[Ýê«Z¸Ý�j„ßµ¿¼ s�Ô¿p¨ÃåÚâ¡âK´æ�rÍÅ*ʯÂ�±{œWg“‰ ‹8ÓŠåx)}1hó€4�±Ÿ]Kã »U ^ö™ƒ­ÃwÝUù\ĽZq„høˆ2&KhSUœ! ´43„¹’"툦Ù¥2Ø!Éd<\66˜�“×E\W¤ÚáÔYêBGkR`â^?ÕäÉ'� Ì §ªaûº¡h{Üö¬aé?tqÖÏ’8\$º‹¾±�;�苚E}T o·Ó€‰<Êõ\$¯fóW“ü ˆçDÐåâN~¡Õ¦*· ±šíÜLî™Î{ïhÂuÔ† I™6duã=ÙÌ[ ØïøC¤YQ£dÈ_=ð SÏÆ/“Ã% ÔÖ�pR|ˆp5¨¢É67ÐN"ø èšJØ–„ßX{7=}‡ÝÆk².½{$(7ꡘß�IõŸR»Q¡ã¹³ê5íRã�?þñ ':þBSŒ/Â?#u‰Ô”ø|Þª-òYT)Ðä¿(«@‚ÏpkÎøv,¼Ä5Ø$Z÷’®9íkäTn‚² ”Üyùµù5¨Å1ée(�ým—[*UÊ^§þ¥ÇI.k2µc�ÎÅí$úq­�5ª­17Ï_HDA0«­BZ…O8MœÚžW›>hiþR²<ùÿ.Y<‘,rnÞ Úè‹uœTÕ$Ôrvnð!ï°o.ûÞë7Ä×J‰Œ~©`^nç%ð*€£ÖÞ#ƒµ‚ÎàjüïôâÝ#xìHäèUµY®q–5qr¥g-HiÂYš·‘7ðAYÏMò!¯p\»|"Š5-º.»Ý�§„ÀéxD\jÒ4 Bv­BC ÂBtÁ÷¢¹g%!lÙ�tdC†1ëCŽ0mɽj0¡ª‰\;³%eV‚{÷O8iWèt¥í]Í[´½Ð.Øžßä”KÃO5}Èéé!�·¤G» .ª†¶ É+"/øëĈkÚ“EÖ¯ÐBþ¬=õ1u.v]CíEV̬:Lài#@sS~ÊùLéËU¸ 5ÝgÝÑòöä½¾Õô¼pb=—ûéƒø +žjâ3+û76)îùÞFNÀ·BÞò\øX:"K¦ôL°šÞêRTe/õ÷M FdY´¸ÀñŠñäÙ&Ü#ã6{ "{)ç–4 ;8Í : ¶�?› +|èä5dÙô}‹bÒXæYl ãyªb[×V6”Ôçè\hΩë5”öG ¿ÊO Ý{ nÓ%ýãmRÒè\ƒêI"" H +67Éfèªèõ:èêE^‡ÊpȯADBRèf'2çÈ“@ǵ—ñº³*úI‡ˆóa±¼2ÉéK:[ò„¡�}JdÏŸk&@çE¦Ü£ê8q�±~�&·KÄ�²³¸ºÇçÒm]›‹›ÎŸÜ÷:ø;, fR³ú”º<ô¯ ?ÉUsÏÿa¼Ú‘dÉm ¯Sô&‚ ~Σ�¬·Žîo™ VwÏÊ�3C4Y,äWï5ÊëÐ06ð£OH¬ÅÇ.3vÌYpî¤U æÿ âÜbd蚃0ήs¹–¼™Ìù¹"žªü Ù‚Uà!3–×d¬”•éyX} Ü¢“—�›zia§þ¶)Y»xÏ�4‘„C…"ÆhU~0¨Þ(ËÀ†ªÛt®Yyݱ^×ùD¼Þ&ˆkàòñ;ù`5ZÒ‹ûâ¢91c<Ô Ú¯Æ%A‹ëu„²œGCmΰÏwÕ�ßÕÐRü‡hÓ +¸½m�˧Êå8~©¸qлNö�ë äÂrAâôÒÀþ®xB` +UHȰLJµn"±½hÏ@VZgO¹ß±¡ËH›Š|\¯‰2'•÷¥ +SíoUæê˜[*Åà! wJý’­½Ë(ñ€F£�>"ìF«‘[YéBÔ;«�>só¿>”š{|ägxh,¨T~ÅFzùÃÎîï°ñ@ŠÐ Äq¸ë/’²h1�:?NU‚²Ù”™‡h;¸WcÅ);¿bÑá®+t°lï®.îIó&U°H¼æ Ù +;h»ÐI´Škƒë€’I ­Õ›K5ã|ËÌ¥º¦Pv–< '¥¥1ˆ |ì\˜7.Ù‰M`ÏÍ÷ÇUü–)gâþJæÎ.‹w1V,j¹F¸[Ôa¼ä•ò˜æE]8¥2(gŒ}·yc{טôÇA”÷xœûÅBÝ6T§¯£RGó()ÀË$Þ^Ж‹‰c¨’¡ ¬@M}£Æ¢È@}gàQ d2;ðfÅc°ê€Ó™Á)Ãg×1v¡àŸ³­Æ/õVkA׸¢A5v&¯Ïû”Yx‡ZˆÝòPÕg¥‹®6 P›qn°$yQ�žY’dºÈrÐ_ ©Ð l:“•‰Õ)¾ð,$ì o½‚©Y×Ü(wñÁÎÀ.Ç×K·ÇÌÌŽ‚¯9»eù3x™]¾Š”ôMN56)PUA–><?ŒÚï8í\TQ@³•QÛóõÙ7¿ÀZŠ®�gßIlsç}½ù uq˜ò(ÐnñŽ'„¢ìü·ëŸ. ×øh½å ªPÿºô¦Ëd3‚}E±ŒÙ_ôZ^5™U¬«/q6yR•J–fLe„“çùÏ{L.}"ñÂJK¨ (�W«{pâó©—S!.FÔàº§Š‚�ñuÒT£˜Î1‰ dš8O†€zÆá‹’ÇÉr«²«„|·¶^>t ìi%¬ SKòB;¹é�›PÀ·'z „ 45T©JZ2Êåí$3²[Üa¯B:^�æðÓF} ©íÜw�DÒ,æ–†ô‹W:>؇<­Ÿ£Ç>ÈýÌg5;ë!¨°Á—Bbm¡E޽G™_-bȲ¯' ÅîFp½ú<ßñÙþª·ÿ(«u´ŠT]k<³�-ŒyßÐØ´кôÞ$Sdõ–2å°Îx#ã(ܫĢw(ã²JþbÍU¿ Z£ÌœÜ3*Rþü=‹æ¦]pEgÐ-t­Åi¹-ôFFKîdSZ?õþþƒ2ñèWªI£^<á>ÊhìUbV–e2@‚+¸×ó„ò/M?çx¶l#õ>ôÚ~ÕI2!÷Œ(ü˜EšòW}WBáz>úá]e¤SæU²úU™È¤]ö~æÀ¨Î§R�”º§¼Ë\ô“v†ãAä\%ðGë¢�'gÍZ_Të“ a§,ÈØÊƒ{V†ž1“WQv,Ž´Yû‹Nì©™¿µf?мhÍ|dfz>EΞt}9ÏüŽ–˜ö, d–u7Àdìb@'‚Ò$tB+§>5æž4× v-¹^õšœ ý©} V$ñà;È·,”£Áu†513Ù¦Fö•Z2¶0£^éx‹×eýM ŽL)„yjf•ÑM]{ñFþ ZXŠS$ÂË(oãPq¾¤ÜPµ±Jä„À›~å™뤛\R\_}Az¬Š¹Óͬ(iM®y†cÖ¢]v�/{'o°n RlϤÿΤìèy•Ù_ •óhý?ÔŸÀÊ.öÉ(Pfêr78ѾSøÕŸ J?X‰1?ggèuF^8F]¸e8ó¢÷�Ê+‰r°�kK æu6®efšnw å…IÑU–…c{z?R×q#©.U�}P�¯_,†Yà»P2ì#qÛb$:_£Û#uG}]äWA¢Ý®¢¡Ì–õIŠ÷ð€Üú”¢iÖN�c�N ó §×nA%SÒ\ʤߢÅPLõ;e~¨­fž‡¾16:ûñF“�¢ZظE·³êÐ�Ä�*Ú@·N�XY‘*7~´X:à ¬6–-AØ`YŽúÁˆØgIdû–^6•ý/õ;!Þ<ेºÚÛ»×m�¼¨n7øPâpL)À%>ηB²Y^Pˆ²ý«åçbÇ! ߯§½Ï.9Ã[ŸÆ)õ¬IK-I©ê¨ŒÒ÷®zUžä;ÊŠ}­ê +:Q$†€–$z5ó–ªO%¯•Ô]Sb�«Ð)—ŽˆŽø¥pÚÒVËÆ’ªâíØ—â4Gsîâ²—ˆ +lðŸ½ç5§ø'çþýu'a³Ÿÿã&òÿg F B�°%hÑwv²NfqrNYöè� Ÿ@%;ñ @Žw‹@Hž{¨ .&çD¬aP�<æ êf:(‡tfyGi)&Nýç.üŽè'ù•¤Gá¹¢ZØÞƒ»+§¿‚*ŽU;ð¥vkÇÈ»·t2jvK@M‰%6@fõ™\è sM{bÛ ‡7o½X²M&;0§HÒÿjÉØ¤å½O"ó—0JûF–Ëý‡4HÄüˆ!TóÛýlÆ;ËÕ$W‚†I‹Z—NÂÀÄTLü>G¾~¦yzí9õÁú Š·*Q~Dvts#ã!™@h°EU°y½¬£,Y +dÛà‘~ŠNã -å+ ªÔ[zŒSüÚúÒ†"‰µ §ª_Ê—ýÆAÞø�Nl·°�š§m¡q!ÿ:œO=v¨É+]D´x’Rá“™ÃmþÈüý!�™·÷(/Ü*2Ñ4„�ÕÏ}+c$�Þ�0�MÃAâ5ã6d!:)¾ò‘A!›ß +B�.Þ\´%¾r÷!!f˜yÆûpÕ\çI9 7÷!Ný/ûÕŽ]Éns¯B$øYÏ;öqðœxÿ�QU`ß+ibG“HÄE7›Ä§ªP +O Nbm�m�™Çg½¦·åÊ¢fA”À*8ü±B–f²îJO—O'?ý‰ô—°*ÎNlÏØí™�²›�ÐnãÖ�x$Þí*WÙ`„(qóiy‘uvI áÓR‰3zéGâs Ú\Bë~±¦p;ÿrR|m”p†Å!¡úø»•Iö«lDŠ�šn½@qÉ=Ô9&Hòñ{Dj9Ät„5·mߘ©ob½t*Tú9Ö5J5Îësb ßa©´¢‰*üy)m½»t*Mÿ,®qV!i »ñß²ÒìÞÔ�5„äôÅQïI4 É…ýøòRzM”ÿœmõ…Ò°¨6k]§|¬Æ¹GÈsG—ûñÈ2úNiªï¥­:ÖSÃUI¶A«ñd„–1ª÷„ô<åQçù$ª‡”u.6mz·30{,õ_¡3L©‡%8¸„Âä ækÜØ?&z"_ÛRaÆË€kJ¸ó›È&DZ�~`>ÎÄÒØ«æ#Í“®DÆ¢Azq éb«†&Ñn‹$l@H�+ÈøK½üø ãú}Kü|wL—­ú†Í¥±lê<‘h„d%0ª!Ï:Ô®á+.&Kg†ë£»dôdd\?êñ xó»Ufcêƒø +RÕñ™!‚õŽÃó¤|‹®ãKÌ„ìèŠ,•µð–9CPTeoõ÷BÍ@�èupÔ̓¾xËÔ g¤³þÝ*©Ï +ƒI†×âyä«Õ¡œ_Æd vÌÌô7PE²áèÒ¥m7žVh׃œaRrøŽ†¨ük`qòæ¨P焲¸Ëga—2Çddl}ëé|1zíb”Ü�%.¢âì«Gh žÈ)ê'³‹q 2O GK]4ê›þɼõÉê™ö¤­„±Þ¡Ün%®Õúúy5n‚^|Œ=õàBN>N-Ž”s7þ[L>t(à-ØÓ˜ÌRÙ÷|2TÊûñ5_Ã8²ê«ÍMÓ5ýLBÊw]§|¬†›jÓ”ýÊÎýxІ-ëS·êϨ’(y8)�¶*FA/ ,-ä-›%‹…³§˜Ðà›‹MC&†0g`v–Æ3íÞ‰Îiæ Ÿ±;”èa�qcÿ˜Póùšzs›F@£ÕÉ ø$¦X""�…ô‡æ)giìUÐQë*‘Q½«â`ÿå˜qøìÚ+�ó› �?íñµ�¶ŒÆ.ÔŽé²UËã´ÅS -9ììÅÁær62ò¬CmÍ �<’£Ød°^1ºË­±×8á‘Éï Ù‹[ oˆT(1Øáë‡ë8œ1ß±»8Õè:ÎiLu¡+²dTÖ ›¨¦� +Šªì­þ~(•ˆ6/ØHüyW*yÙ ÂÐôÍØœÝf¦/ò*šP³2ó#b ïqF¯mf´uóZ²l’Ë‘x?AY(ó æÎ«*Ȉ¯Ï䯷•ðío<’Ìüf�jg‚0Í‘ýštE½Ÿœ)äi+ÊP)ù5A‰Y=MÿëÿþºÜ?²awì¬éw‘×P›XÕœ›l–;÷л½„ˆ>b³Ó5FŠÓ§j‹Fs1Á’ꈭjs¨haпdÖ‰k5Šm>*“Jlð‘Ü4„ãïéÙ�>Ë飮>Éó¿^2aÕÝ&š�b"!ÆÒE f÷«ž( L¢ˆRz© +ZÖN«ÂÞJ¸èâzM¾Õ7ÄõÙWftNòË ž”(öqoWË®ëñOª2cÜå󊧮 +U–—ãX’! ²Fæó Y¡��ÿ»æ§í”}°@1mjµ}€½ñËdpç_­³†KòÂÒ€ô÷cuª£p¢4¡5ÔmKÆd›H’b‹4‚aÂ\A 6Bétê·Ãõù°|†ö;en¤‹LÇ^Ó)µþ N¤ŒÚ yà„�/[µ—µÛÓv[H¦I˜ÐDghzhñða½ êŠx¤LÖÀ¥íg9‹Qó8 ™æî EýÍDÞ¬¶¤j0½m¯ïoNu0;|C5ˆ‚Ë3ø’<Sù­êÍMRy§Ž�;e4r¤À„6 Hî›Ê}…õtÌŸö±ÇþN\š6q ®~�â€x_Ò¿¯oˬ™4ZýÿžÊìŸ=’wö;Ø#è6.Ë2‹;Þííbaá¿}>º +ŨP +—pŽ)gÛÊ7æxǦbØfL·‰jÌk”õM,r§·kØ%üÉ“* X ã�új5’4îøb³Í²J�n»äÂaÄîæñ7ÍÑgòÏÇîç§þ^‚š«œE¥)]!>”f�AÑÐýñ¥Ä qµî޲å�"$~˜LûX3("·"ÏzTMc/�51hGs-B�@ƒõð ÌyË^ÙŽ—ÌiÏêg ³ | �©FìK�f&†E„Ž¢C ^ˆÊÃô P5¥Ô­[¸ÃC× °{C<5áèÄX +f'$QŒ»Æ¢þ?ö«$9²Ý^Eh ‚Ó�ìU{ãû/ŒÌY¯$Ù{ñщ(�Ä�™à³ŒÊ‚ÔØÖ›°ƒ¡y:Hê˜C@œ–ÐpÞWGÓ„[@} ·4Écò$ZšÂ¦J q+V­)»)îÌ^PgYRP1®-ße$!V£…ŽkÊøJ1 úg`ÐcDq,Uá‹Uú5ÿìY�­afªò6è°<Æ~VÑš®ú„xÅûpX¸,”è‰hgDÕ¥" «“f É<š,Ü_™ÔÁx†Y¦àib¦× c羑ZˆcvHmä�a:F¥§c»Áß>ñ{]�ò³‘úWIO\´±âÔ¸3Bï9ŠphøløÑ‡2 ŒXÃ0W;çväw§ÿ¯Ñ÷IFš®9è‹è\â/">ßG QÜlñ�Ïle¤i#L•™2#!�列¿�Õ\y¨§¤pʘ:¤&ã\Ø´pA—"‰1šéŒ;ÄCOå†öqa*sÔˆž�ŽóãÈÞ?^Z’k` øø�rf*Fj(÷ÉEc`¦òÝ*ËŸF� iô96V1�‚Zœa�¹Ÿæ„ èOßÿ†Œk�t]l\~Ð8ö¦iÖËR' �c(ê‹vÄsÊ0JO©áæl¤ö­iˆzR÷Ç<¢ú�ËÞ­Å"V»†µkœuhòfäáXôÖC2Jò÷†|’–š$¯!zf‘€*EúˆlTéŸè,ÕíT3Õ“ÎhƒïÏn ëÊ�®-íļGÃ$/ýgòµ ¢ê5¡ŸQ3±Ä%ÂÆã^vÿ” ¨bÆ!ux§—¸ïÚ!3¡Í‹æB?§æêC&9͘8êÃnÔ‡wi½ÂíÛ£š‰ÿ–E—@Õ7¥¶à}u »PTÌ«ÍdH5õqæP’¹§AKåZ�èç”íe>Œ•I9Ŷƒ »1<�ÿ&KR[Z;ùÁ@¹žõBíHC°¸î\j~lëG7·ì ð`šÆ9ð®âgœ·¼VÁKu¨�¬ôóñ '%FmC�j Já³JälX^fú¨stÖvÜrðü€Vüë{J0õEÛ:g—Ñ1+ ,ö�ÞÔÍv¦ü/q=N‡›Œ�hÇ÷ׄ̎mÂùUù˜R«%ÛrŠJëºÂßÃaL�5ˆ¶h@�ìÉJµ–;shtu�·] ÈÞ7Ùd¨…*w®�SrÊzÝѺÎü˜Ð·Ä7ãýÖÞ ÔFR@œu©5³;lDýâÙ¯‚ejK�!½g)°© +�oØÅÎQâ.²¼±»Ã×7=Öp¹Êx÷Õ¤Ï*§¶Íõ=‘)“­ßf6}¤S”e�üûÆ;EŒü§-ûß¶eŽªýÃæÿWlÞQ¡á¨Õv\õ-jl"‹^ÒÑ… �áà7¦{�··Áð‚£à¤Â�Ô2N,û‚�4C ÷1ޝ908IØÒèÈs‚-¬"ÝàÉã9¬‘>)°è‹9>gZÎîD4™”¿Zàä¢Í ëøèÜ6*ž×~AžØ¡·”9u¿ýàR0“X"E³«Þ�ÐÎWÆMôtr‘ÖêeG©Œ¨¢ÕÊ×Ee 9‚\¸@¶Çw[Äu—1wº÷zŒ##PùÿÛíBÏÅ!ÁÎÀö¿Û½CàKà +=cHcÎ?ÿöšÝ¬ÍV\&&ÿþLßõ;¹åÐí­ê‹óÓ±qQ\+&¨¤_< >|§õûeQ4ôjB€8/bßÐ48Wxq™j1¡Iï¦Z,vLáèè’Ž/§½×já­4�ày»ÑäÚ¶P£, +ÎÅâ‹eP±Q£‹ +-zØ0š0¹\ƒÈj¸€l¼�ÛL©i4ÊÌ<››•»Ô +X­WïFлªº'L®M»kË^-–ÄÆ$Jþë8'rûD¡³Ã¹†A +q%Í +ìâ6ú͇Îtu¿HUAn¼£ º–P7¸ÁêÔMA}Pýû† .•›ôg±™ÚÔ|c´ñ^lÑ?ŠÒ™?¥<4§ó7~.[±ng(¹vRn¶J1H÷�÷]˜Yú`ÅŽ=Wæ®Ò‹3,fUüÙïXðp,HêV�WÆöE °i:mrÎ ç:1!þ>³ø›æ¬ÑPáþ'–õÏÒÆâ•ÆX–�bz°¬ÕõbÙøò%Ùö¢Xt^†�ÑE‰aCµ”zVVÒêh�Ñ<’¦¨iPeîFÜ}ª$»Íð¬Œ˲¾L™¤‡ÿÀ´Ùüª‚?„‘}:»ÁË2Zu�lÔlSŸb‹–/Ö­wZj| h¬m”é£n:§ [I&.rINÙ.é«·C<²—Z9îlŸÚÈc›2õ|3¼×?Îu"zuÝË:0—ò)@5ރόè‚>Ò ‘?c »ºf!é·ƒ /ô,B ™•¹À— Ž¡W5oÔÜ8È´¨Ó0 +8v‚2+çØ ÂW—ITåKž®lYExáⱹʲÍ%>Ì|ÚÃ¥Hóú]áz€‚~�‹c·Òÿ¸X½&È õŽfrÊD2£m¤¼ÒS{vÂÛ"Q´ô=xµøÞxRCýB£^›�z2G#dÚ‹7–=y#òù�7Ú“7šxc©ôA$ݰ”l}.‘Ç­ÇcÝ4½6eW£K2áq¨´Ú=¶ªtx®©b +[´Ã5/ +R.ÙÙAÜ>¨7ƳšÞ^+©@]Þh]‘î¼Ô1gNDtfeƒ…œ¢¢på'ÀRR[±?Öwl Iº#ŒA?´¬ªUu©‚ˆg Û�‰´n +¬¼Wۉ)†þ€ «Ù�Þ¯¬;L9 Êà¾Ôâý› ˜|XraY¬Ëïà ã‚lÃú#Õ‚ã›Ñ¹»€B�ý%��I«Mcû¨Dî ‹g{SkÙ¯0U‰}qkCª;ÿ_¢7÷Ô¸Sëûý.ÞOoDš²×q¥ý`;]ÿZÿÕŽlòWSúÅ„ŠÍ.‰ƒo]Q07mÈÅñÎsFÍCà›Ë3Ê”1ûò=î\ä��ܘ"ƒu[Öi2šän}�>£¢¸ˆ&ŽøÈQáûh°Ìm/¶Â×á”q¯–“gÎvgÁÆ<Ò+3*-BÖæÔW{Pn¶©~†yÇc!©³Éh™�ñiIjG7–ü–8´²aôýº£¬¤ô×l|s]ÖnÂß�XéÉ–›wŸ›¯b_«Ýð)ñå}ëWòs¥`Ÿb×ír¾ô)<|ÌÕAÃÆ5Nx®Y¹0õÍíyÕ�¾φ‚ÕMÂ!çŽUš+¯€ú‘ïßGWV�Â=¡³ËLƒÖªÎëI +öºs Gç.€‡®%K +¿òæ´A�#ïrUiÒ³!‘göÆ™Ç`AÔ-ÁÑÚ’0çjÃCwL票€+-æþ™¼ræž•õÙ Ò¶LàÌzSïkõ#ç�_Ö1 s›ºÁF_ÙT¹cnçä¡öiÔ8f€v=3!ãì N¡9ê)ôgïW¸×·a ©°jͧáPé%­Æu†90£¦.æXÄ2Ò‚xwp}>üù^!DÂsY3ß V8Ñ“QߌÕÒŸRv»tF#íµÙ’69gƒsÚÄÞ•‰±û‘*¨6 �d÷VkH£-©É–E=8§ô +xá5�áW)…°¿þÃ¥/Ëkø%nýû,|·& +\¤?掕 ËkpNåô›ϾcŠf ½f¥°yfÚél +±2}ÞY‹âxVÏäB/$y�¡eûQyx±T ›Sbœ@ŸÂI?vqh2cÇ_Ÿ‡�ÿ“9Ûkyä,öD&Q=ÁH$à‡hm9™¾SÑ›§&€$°¹zȱÙINBۿدräÈv#èÿSðà +ûy’5–îo(—Âëæ #¤�ã�¨–Z2³Â‰~†å�•øvpƒ%­W{ðá,ÎaK);å™0Ú:NF¬kXö•g®|; ´ + HhšTÝ3%_:Wݦ¼¬Z¯…ÝœzKM‘†“œûN©�x6ä3Çc¹e˜ï³sø¸*88U°ËÎâvÙ¯bab'Ž!ÜšVÉm,¯ÝÅ1µöX˜ŸØ&¦QƒF¿äÕ–è2⸹×âƒtm®ã\d„Ž_J†yÛ0¦Œ€…(ÙQ˜Ïj ãè š#uHSË Tɽûjö ³áZƒ,¦\ÒµõY^År‘X#ÜvŽ—ÅR“qn-³lð⢹½iÄMZ-ŽFþ,(<´¦„Ÿ>Ç&ñ¤ŸBgqÓ0”¬N#“n#ëlPœq§’7·xú‘ É"#�n2úñb52Z®NH½$Œ£—¨o<®‡*‘qVsql%y©N{À¿kM•0^ÒÅ’”*Ìf(Vû–õßÀ^§þ‚`ø/”ë" –ª¼.òþ,É}–'4Gï^åÀz)‡ý¦¢P{0SÈR©gkRR �œ¡1'¯¸èWP0¦oÃçöפ£¤;šÞ2&¤ËÿÆ…l4ñ´­¹ I¥=!:i0yþư š| ê°|ôRâÃ8Í y4^ +7Ãx={ë1×![{樇2F—³»5¬MˆPýuœúé¨è|0Ö²DõÌ&œÙWM1Eö¯�˜Â‚zgæUf!£K$GðY”cµ©%YAmÈ­y_Ž•Ð´ +7íJز‹-²ŸØW::¨ûBàF˜ÁÞŠ8‘g±ëв69Ó²c�8¤{ÙñÝ«>…¿$j%°R­÷K9†|gÊäAà +yâË%¸Ôë–T窧ꥧõ¤­=Í$ò`ìÛùtjKœœ+Š µ_Õjí€P³HÕ*ì© þóï¯I —;©?˜ýÇ{±Va‰ÿ@ìR'¼«]RÃ�+|ƒÖ÷ÇÃåg§ÿñ³jÊ]-˜Ö|‰SYÉ”GAv}µR9Ú(I"ÌŒ”Ž0ÖziG˜’’-%N˜Û-üDúu¥³W¡Y,°Õ|ïxÒ‘—5Ƀ¢sÃþ+¿·]*¡tjÆÁTØ_4ãTn€Ê[ÂΘo6„¯B‚»³H™þd‰œ~Õf õ|»™®ÊÒį(~DPõ£ Æ-ö—¸*Ÿ~XØ•O+”"AÝN£Ê±j"bVj»xºÎÖº«z[`#ç�aüETð™�4†×Q{G…_ÕtPµxŒâŸ^VU)Ì�!¡ÅB÷v®Æ“Ç2ÀÛqÅPê›ÎáÝpçCjWq|¨\ü˜Š ­ûN£eã€õ•2(kµRZуúOZ®= pYÓ‚e¹²5Ñ’lxf ‡I÷¼óDS60—ÝÅÿ4f�t‹¥Kð+ã6ùØŸ)5ó-˜ty‘¶#MBt:Q'‘`ÔW.âèé)rØóp�°®ÈÕÅ!-oQ°Õ-Wýi±Ý ¡¾®äãY€ÐÐa¸âSýìj³øysÌW«©Š’“/ÅäÉÚ:Òs¸LÌü×c»šNMí¥j¢^©¯›3',Í�îõÁn57²f5á qÙGž®6à¹ZZF6 +Çœ5áðÃnSm÷³­›øÜ•©›ÜaÞñZ„ òÞÒ¯8ú•úbˉõU\. Ìóq»1ÝÑ–ý×_³8sIt[§-K‚‘ÝHѶlÎXïG¯¥#ÏŸ<_ ÑÇñ¯�šø å‹è NK^_–SœÆ ÏcV-ÔWˆúlÏ–æp+Nfê@ÈÈ›À!÷Žõ³äc–H­仲Éô£«T•ýT)n@鬔ùö¤ {ŸW ³ë«¦*0÷oÅp.ZS�EјjÑ*K ¼ºÍ$V"<™!–:Œ©‚¨ÇE×ÜUÌÉ9%¦<ôŒå¼´ +êWêÃ#¯œù�F ˜€ç6è“Þbþ‘%ÿ›,©`üÒýAº?H÷…t�½ù 6è°xoÀ°kª~Œ³±‹þ8‰8ª»œäíФú ÏMA�x ,wùØdï¨c�_ /|ÌR±�‘èzám%¤áZ6Px-ç/Ýn(XÕccð�V‚Ù«Â}ÝU“]íO8Åÿítj 8xx�Ë ®ùnCtÀ{Ë�e|1Ûcþàéú·ó_&âÌô¬!W»½]-îb®*§Qn*Ó^|޼ëw³°dÌѾ˜}»-¨yESJóÅ �Å$Ð…G¿y£¡Wýß5~Júâ2,ƒF¶k¡²1­ \¢µuHÇšãöWj‚Ff$€o˾™-ˆ”€ÛÆr ZZõÊ…S"•™¹±©—Mma\š ÜxßñCå*YKpI h¬Š[?Ì—fIæä\„¶¨›s‚Rïä¥õ„‰�ÍÏ­’lÈω2ÒKK¥1‡ãÛSt4áÀfîšP‰góaJæÿàfô2#2D‡£rÄ †œvjþà,ZÜ +�ÄwC¡k›§÷6ñH§G5·Ã’+ªfþ…k:Ì£ê-“cÔÅÃoÕǯKp8:O<½?Ú;br²pÆš c'ó$œn’í»ð]Ë)*¬Òâ-ÂèÓ¤ç qâ0»¾—毡ïاüØ8\€]A¹*]ºð95¥z3’p{-•²�µÖå:?*µ>%‹£5É.ÁK;1­'ÀŒÉRÛ¡…³Óá­�—±wÂ?Í®.)¿B¬ú¸;•®±§ }—÷˜Jмã¼í…ï?µ"ßµ�ùà•zמ•*=Ç66– ‘�)2YÊ·Ðfõ=?Éõ?‰E(�)1ènlŠèj¦t.†æK5ÖûfÄMlU2cÒ¬Ks„H¤Ôñæ¼kÞ6vùƉ»#µçòÁ<�*PÝEgj²ÕÒí4ä‹ykãµCE;>üÌÚñÑqyœožÌȺù±úû´�œ1¿×¥›Rß,Ça—ßÌeü:KÕ<”’äðq¹ØÞ™&'4gÏi‘?=ÇJŸSïLD ë2+Q¤™³Ç¦nD1Û߇µ~Æ›zýÅ\d«²FË9¼¤‡].JKc§ßL«àZ�nÍ×#ÅÆÂÃÐ6)íÍ…Mr‡—̪†¬¦4tüØZÝ.Þ:j#4#/F íK5‘se!+F—ÐaØ—: 7Eav®B¦l)ÿ.*fNcO1UÁ„ø–J´ÅeII”4Å|†Û¦–Zr™¬iÕH]‰;Ÿu uSs¿æÆpŸZùj�ë63Œ+BùGŸN‘#ÖIÿb¿jÒãÈuØ~Ná ÄŸH‰ú¹SæþÛGTu;~3oѪ®’H[ˆ�#ç² ¨ºf(á³h{6 Eº¼EŸ¾6ø +r†rbb$)›v°CP \L#Ç’g B+ ­y¶?ˆ ‰AÏæÄ„5¿bÐ¥�Ä4#�ír¢Þ^Bï•)Ñú×ÙŒVãMG«g·˜7¯Á†ÀŸ }^£Z¡ÄÛµ‹s,È¡H9?H^�-ƒ™ $CÜרˆømYm'/w[¥øk®J~±èá5Š.&”kh¥Ö¨»µA¥;;o9ï]:Óš5szü†52Ñ Œk�ÅôCµë,3‡LØ·,ÍF³4š–„>yurçp8ò»üÕ¤O0&0¶H(HþÕ7ßXt¥±‰=þ�EçC¢ó ‡"ª™• +zGÌžk¾ôÆiÕ@¡Ü[ãE¡@Ö‹B÷…zƒ§„�v^âÏI™.�c´¬ŽXöaVëÛò9ý A�$àλ8ƒ‰66w†ËñIßÜÛ†a ¥ÉàtSý²2qq� ¼Å½túÜà œ®ƒ¦´�)ÖÛµ7/s²ùbíB»ìÉIý¤¦Ð V¨%öýë:?†èpŠy‚ä¡It32xtˆV~s,+EY ¯¢ävw&©f¦àó¹í•.ð¢ýtùx`=hœ :ÕÉ×±Ÿy¥/ép:[¹ä›%#“:pR&žã”@0Cs9@t>e.…$#í¸G•qÜ ·hþ\ùÌžÝñ\ÖYà»Ó8ÚÆu`×ú8»átF3ˆ”Š*W¼ #\ï”9m|Q’× »Ýž½ü1„ê‘Ð)¬×Hlý�QœÇap=þ¥nV„Ñ–"r¯#&8Ѿ[øëx^ˆk¾<– Õ|ß�¡Ïùè{h«sÁw] MZJb„¨ ñÙN +ƒV6>k¢À³ƒƒ ”hFò"(LÙê‹läÎZ·7Â…Ê�)„Á{€1Ñ"¦¾= C[hìNÙÎ�ŸQõH�Q—b;.ÈÐþ—3¶/’�˜æËé%[5þY%¹¤†Av´�õ*–ap¼Þ }À«éý‚K_ÔßóÌ0£`p¾”û2Á/ýþ‹…Cˆ?â.ƒO ƒÄ*³�¸[å¹·yõCy€AOD +n @DX.Ö�lÚɘzþð& œ{Ô¨¹IÓ€L‰$,0¹ H£ÝèýV4±ª«½EW½2h(Âíß]LÖ2;0Ï*ýœ7 +ɘ—¤2ʯȈ–_—;íCûãiï³ËȱêS¦B=ke+˜¦^•Ñ�„éSy’¯Q"ö´Â,j#>)Hux5óžNÊÑž«Ýy²E°U®o5„íl�“�ry¸®Ç:£ñ»®üµï’0b'—Ò™­øE왉Œ¾žîŒ(ds6ædeˆÖhôЯG<{“5Ñ’‚Î)€þa ²,_=ø„Î|p®C+3Gig$ãX�6I23¤‰ÁÞò¼תôÝðOjñd‹²MÚ(3ë0­þÿ†È9Ù{{c +ŒWýãª\õÊU¯Ôgœ}o´NÖë�Bi–Q v,à–Õ õl\o†?Ï~i2¤ ù§ÊÇp3úgR2Ezí’<ìAPCrÄìñÅ3 ü²%¢¿YÕ$㎣¹»®ßîµí7hÄ=T•­àñ|1¿A'±ø/½å°‘­å&¸$?`¦2†ºó�Ÿç,hã¦À'�†oõ�`QËÄ ²)ƒPCCI1©"}Ôz%@ÞL®RµI[ƒ%3cÿÙ!™”£ìØ™�´3@3G ™Zt;|ŠàÆþ]œÃ—õüåL)ª·áÌ3ëÃ=ˆÁä9ê8«ô‡==âš×•_§û:É )O³LêtìÑ¿g-~µVÙk.™âQ�ñ‹ý›EÌ -Ò#íÜÆÎ`ã¼þ„nuqt¢n-xÍéÀ¯�È:Š*.Tˆ^Ì€‹GA�˜1 ”À•�èÆ—kr˜€–‰šØÁ5fBë¦õÔE6£aìîv°f ¯%J+@FúªŸö,F¿PIhæÁ#œ<Ï^kªÇ‰ W:Py#™(ò®ÕRd¤S‹ ´kE©æd0éo4C sã\›kR5äcp‚aá /ˆ±(òƒœ÷q‡ ¥×Hrƒ^'[)¡K&_ï´²gã­�u²ñ1™ñWOxIbÈx5Œ&‰~ç•�xø l-¬ é›|wé¤3ÊõÐ{ÿƒ Õ?RY¿›Ñ„x«!è›´×ñIéè”ñ_›SÅÝ;ô2°°ÞZºÉüCý"“yƒ|'ªq©x­×“ÆQ¥¢ïc Ìof'M<0øu,é»L:•æ}JˆcÝ Õy÷ €õz£VÓ`ÍFüs±}[oÁžzp‰Â& §“*›Q&kY�;ëй€Lq†9a ÓùôûÙƒá‘� +Mω¨[¶�{eÜæ¸ë:å51;/6 ÷ãÉ$Èa’$t_Õ±&w BA†UŽ‚»n4Y‡†í ¹±I3giJˆm2iÜÝÎÄìl¬ü}ÓÛ»ÌOö÷¢>Æ]¦É9;Tpsÿ„ÙkøÙÖàg¼L3F]Ö |@“î2ŸhŒ&–Ã¥«këR‡bë*dp¸)£œ0eF#M`oKulLªï6LokÏ&Ç~~ÚÏ�Õh¹Ûâ) �œ#ž¡I–uÖ¡hªe�©%ê€Mãh½rt—ÌžLõx&¼]׃jL}_A©:>3â0c�RÆz_ªÜÆ­ã8ŸPãº"!S,}ˆ¦�JŠPö†¿o4517¥{Ù³ƒÀýk³Ãï�²‡Ì“K<ÙõæM»]W÷ÍhÈÊ�`¤^﹈ÃåÝC&F³>Ž£ÞéævM‡Ã�•}T×MT¼…þ²ê‡|mâl”Ó îéxS`5ÛÏa“F¯Qf+ÿSóÃÒ¸4ú“„Äü,: ížÃ]V¶·Ý +¨Ðî,¶ý,Ç-[�*ć)ë™Þ¤aš9÷ˆ/ä +mÐY~éâV¦�]°æãšYºf<åÕ9œ0V]ˆÛªt1œ—…N©?�ìu5ï¤@ý�ƒÙþþ«º2h¬B6�Dnc¦»¹�²Ò/•É!1N­‰†&�¡cÉ"Ú³P‡?,YºÝ9ã�ǶTÉ·?Ô›yÝ"ÃØ"Ÿ-)9Fš2À&ê�u.:Øbq Þ<®�ˆ7˜>1,ðx©†²çµ¦Ö‰¢j5ŽI3\óWx§©K¦µqŽb=¥�V¦Ô5Mº—î7�\Ó�­Ú€ÛRD­�5¶×A·û»j£oFbî¼\ü_nÁEMÓäÜšRyýïÔh5Ç©è÷+"‡ñè‹ôîò®cè +G@µÁCÇR�-ä¯tÇVHO´gHXߨ³Å�nŸF6f¼BL·ìc |G„!#I)‡¡Ç(Ñ&Q ¿š`óØ Ùýë_Àìç š×±w8›½Ã9ì8Û;œ%Ò�Ô(‘Fû ¤f×zt‘Vÿ”FMqÎ8z’!=0Ƽ�©wqÍ©—š¸‡†ÀUex…78»ý�ýjI’,´�W™ Lâ@ö|ÿ…•™âUu÷Ø/v8z3ƒJ4ôIe^AÚÅ´Lõ€$b6âlNöfwðL&ߘm¼—uÛ^µL<ãl×àµÉà¶ÅQ.סŸ$¿qïæ +“á3O胔gGծʋž¼eÖ;C3(8´¥ks� €(@€ô`«Û6�¶é›�>×À›¿Þ«øÛ4ß©5ð�X)·¢}™æB'c†ù»-%z¹B¶™ñ²¿þ±ªê&‡%f)/[Cyïýz'ÁV˜¤.kÎÔ·šãL}·Qr!øX3z�ƒOž"QKû`]M„šýjµš;ˆ�FÜcûšÕC|í–{òŽ­‹éJóCß�, ^³œþ(æ|”0Ãj~43‚É^ ˜9ª¤¦r¶jLË€¬�ŒŠ&'§Œ–$×™�r$IæïNàˆ—x=ß‘__™š·Õþ§Tá˜ï–e)-ÎdFp5(NÓð‚BÚYqÏ@“¡Ö³k¶ü{ô¨þ‡ÐM¨É‘1Î×ÐåÝÖsËõ¨S@÷ùbÝ7a赺ƒüÆ¿š'ógïg«óèVÿ¿rT¶gFh¶Ïs+üÜtcIL‡™ ûj5EÕŸÕ4P÷gËgk`Ú¾ŒEе¬—,ö˜íüxä¨)�}ŒI®+Se¦°ê^,.‡A»#ÇFY(Œ·ÓÚÒz“k!‚ÕúaÇ×3óvƒÀI>³qØ© :ÓTí¯ ŸsŽcûšh–<£(¿½P3*>aˆ +}¶t­ûº»^QmÏê[ŽïMìÿÉñÿYŽÍ šð†—Íðóþö——{nB¨Üä˜éýë'úš“o&mŠÉ›¾ S±×FjÜŽ7FANSòZƒo†¦YžÔ$?ó�T€CܨQ�•f%g ©„üþª‡ ,bC_âe†²½Öáµm!íSž¼%8ŸNCùŒ¨]I2ý~hžè¹X~»ÃX­ØZ§†7aßìÒ„�W,qAY�†È’¤D)Ê 3×íGV �²²yl—°­v’q�þ9y·æÔ5X‹5÷q׬n?×Äe°îRDù/†í)J‚iI1™Å”¡Y®U†oUÒ`4�“»3ŒƯ«£p{¿õã—bö«¨ðа—ŠZTº!­€uÔC1|Õ‰T7.Q‡OD Kz­œ¡ÿ¸¤¯û_—ôÎK c Þ�"ûQd?Šì?¬È"·Ä™¢¿?ÊáŸ+‡ˆ¼V¬ŸB×È•€3ŠØˆ—el ZÈ�ô�‚N³^=sÌQM‡Aþ,—ö �^,ïm=;f7¾XñÑ¢òiØxŒ»/¿6>u86½-û�ºŒ¶ˆ< C˜ˆä{ƒ[,+%ÏR7Yñ’kµÏÕC:c,¾_t“Ô Áß9ôtÁ;hÇD~²fI‘²Æ­×|Êz¥~û:fR‰•QÔΟnø7ºÁó›=ó÷º;tIäcçÆ0Û¤?ï@2¢s¬pN�f.�vß×P�’D”/yEÔßpp·ÓÆÑÏ[�Ôö›)4�äEô±ÌOã»݇T K6�¹ÎB;ÜO»±*_>Ê]æ¿ÄÁ뫘Á�ø xH�A…ÖºnùX”0:4 „hÛýx–�h[K�é”GiMɉâ0™ôNN‚š¬F²<ò!—¨ÌEÐ6§7Œ� Ȥ$z:}„UÕmêÓé-‚?ûcÜØ?&xAþY0c ä8´w�ƒ*ø¦²áµ�~33–Fì#‡´Þ”H_é)•ÖI�%˜qøâHud<Å:*ž2TÜíñµ"YQ‚Šüú +ªÙw}L³·€´$mŠM>5¼Éñûnȳ.b³Ã‡T—: :4f£» èN„˜¿j»‹ uëXúà5EÄ×ÉÀ!ò^Ì·Ç�Hêt#¯S]è‰,•5†¼ €ýë½þ¾®”8ìñ,˜ü¸¿ã$˜â¯ßöd³€<öÎzX‚,Ï4º–™Ñà·@ЉªËèù3;a¨eœ“ŽfI´7q¼g�ð Z¼Ø+€Ñ`­58wõý–°;A5�›) ÷2ªR®ùû¢˜ß>ÍTíÊj^<–ǵIñv>Ys\ 4ÞJEäÀÆ;„ ƒ¢ÅèćAÁÚ%Û(Ťöe«ŽFÕw/ƒïœÓ_¾= l'ØêÍxH°ZX'Äuèu �ÅžÛFלÕ�FŸ·m1@�Jl‰°¬Ë<½Z õ0®~üZ�Üž[e®!d=èWdßë0FÆ­�æÝFŸÙ.ýÌœ’UÓ`Φ`gBMl=$ÒXMK¾-¶:dÎV´¬�4®PÅL”8xÅ„LÙK7 �NÔ‰+'þäM~÷\ %Šta´«ü\yòæðH„&Hæ¯Þ<¿ÐÀ¢Ý'èf>8Áråÿ®ùé,YPƒà$(¦8d*‡ø1¿ŒÀyǃœñuê;+•èÔ¤‹ÜùZÈP®� GdruDc ¥¹Ø&Fˆæ„„¢�aò‚°N$£&Ó.ÑfùL�wÊ ¤‹ƒ‚½¦[jý']“/ÚÙ\À‰]ó¿­k"ß1Λ²q;Å^Sۼ܇\FnNˆ¯ÊçLiÿ/Œ¥ɺ4Wòêpû$8ãœ1ÎWœqUª| Ü—±ÕÊb׸Úd³W1âÀiœgÙE¡<ÖyvQ%4øx€–L•Âr±Á·‘ßÄUݯA˜°yMc~ ‰†FZá¢,AþTD¹ ¤ve@IØr^¤1TVí1X† ÈÆ ùg&a`4Ú.®¶yfHXïýÍ.uqP/¥‡œöôQÒmV½‰ieÕÂÀÙË—g-+n n½¦5ÿŒq›KgN&õ¼pAI¼³ Äo7'ÿ¨á4ºä�†ä Î&m¶‹€L&ߘm¼—ıé?rÔ]?[´ÉàüÜ +ÍÕÍg2•Ü»É>G'7døŒAÍû<¡r& uŸU^ô <ë‚ÖAv-0ì\7Žç>00{PJØ6�¶é›�>'OÉß«ø+=M t­�QMÞ÷InzÐ,i�¡i0‚ ¡Ra�fS©3e»•>lbêUz4ĶÆÔ3j˜ÏbXOUfu¼­Ïо*ØÎ}´jQrKëA㉟RÂ,1ÓÙ_àÿ02å ©@3d~£™ ©5co£Ð BM²½ÖYãl¶kaá7^ G¶¤©¨3MÉÁTG©g5õwU‡#hŠ­l +ÁPŠÎm6ë[¹ɘ”©þ~ÞžÙevd#-˜ '‹\´ÑŒ,À +õwMlŽ-éJ¯IæøèÎT÷]K±>ôg^6ÕT_LK;ÅRoÒ77á%\ÆÍôcvîÎð <Åd Qêë!ýQ¼ÜÕmC€Ó·f­_Ý‚-±Fã€-…»…51¬» 4®4-(ìyÓ·6²:ƒ + +WÅCfé5 @aO@ÇšhêNYÙ—Ú½&Õ Ÿ AV #÷ÆäÜ™ÂÒQ"×k} Q ÎÇÄÊÓ×GP6Õ2 ±6Õ.ã‚G¢C¨\7NÆRȃºÀÉùã#4ˆ;Ðõd†^«J{/Ão`”ÌIJä–G†½û6ý�(ƒVYn"v�´¦ú+³½7”%~7"hZ JÁyM>‚߃ÁB‹.Ä ì8U FýšW%¨æ{O>‘e,NâTÍŸÞà[shþÀMðÀSR|$áP'ŒTt°�´øNŽ2:˳0—C¦|ŠÎà„ÿýwöËKŽ¢[é H‡ ~vô íßD˜UÕ}ž5cŒ!G":Y™$>�‹úa{ž7s©H4À¦}ª ×cƒÜÌ7;³¤¹ˆ–�0±“óë­+Ô“EÕó·æ—23¡˜£z ~¿Uú.…?sjúÌ®ýÑ�þ"ß_äû‹|ÿkä³™ÍSNoˆÄ·ŠËdÅã˜*na«²ê›#?Ð1‹Rñ¡<7}�f…Rç­ˆN•®¨6ƒTÃô2cÛ¦–ˆÃ8&#�Û·v‹}ô–¬éµõvæ¸1¥¹ÌC¸¶ÐpžGïRÜŒÖk+â(a@ÌbÿE8ÐZ1÷´'>¨µ\¡c¤{²›Ø¨{±[µôœé¾Å#‘;VE¸š/XŠ’žq–)ê±ç: +³ÆÀ“Å„‰Ù)oë c²„Ç#/>y?¼,]6YjKÏBH°„ÀŠoZ(~ÅÓ,³WêJe XÓU OÂ*ŒÁßán"çU ”•ºŠƒÐùË�XæÏ;áxáï�6ÔÊHý¢½pÐÑð“|ëdÏùíµBKäL4ðG—vÇZüÙÖáPr©�‚á“âôÿcĹÉHÓõlg S�Ñ]™ôùéÚ8 ]§B£9ÈRÛ2LÆLY,å]7iÅ_ð�8å�ŒfS$¿çx’Â8�GŽ¿kxX x/Ó/ 9³9H‹¦9dq´Ø±ø¯ao“军ÕrÊÂPÊHïk±^` ž&E!×Ts„‡^Ù¼'Ó­K &æÅɘ¥ÒM±å\[NûåÔøl3Ø®‹?-§ÑDö0žXËRI'㑺‰ýœå*`ë.}ðèÃp>QD +Ül›tP(‡ì¬X8œªÛC} }}ëUH ¿ä´+of”Jd?Š'ÿ/È]™òØùmRšiltL*ÁÏQS˜ÖÑ¢›È{-\•šÉÊìêVcѳf–Eps•apˆq +“™m~-8Íӗјì¾÷=Ý*-΃)7' ö`f \yÂC'eBéjAæÓì"{2í# Ž ›ÜñÞåŸÂTMx¹*íw§e«âÕô´o±oF…q%èéœyd?"-IØ¡L…ÆK¿¨ ´µþlêR5Ý—ã6"؃Œ7i¦Rä‡lXpqïÙ„Nÿ” yºA\¸_™Qo.GÑÀ|Âv[�ÅXŸ¨Ÿ_të.§ö À AÒñ²g ̓[¥Ynû´6½ÌÓí4úxŒ»�ýæÃ¨—cÓÛRÅðm–²U1w‘ÊhŸ, zÖÕ÷ÒqÀHÂ’Æ•©à¬czøú«:ßꆚ`©JME?jhrÌ?ùüŸïšçhç|ÅÄO2�>´>L¿žm�3üÀ up}ª.ÒÐCÕm&z*IXiÐ2‹é>�Ú,v±ÎB5M]&„{­OÁÍt<÷�®VjíÍ ~\ìƒí´7µ+ü0éÂ'–Bˆ#ÂíXÚæH»˜*#Œ.к�:r•[ÆPëQ­íZȪ.yÌOMkj\MLbƒAœ!È¥ûÜ_ПPYF{PÊ8ÕÁëн�¤{]B£&áÆ?È3 ´8½À³Ùµ)à~Ñ¡`Tq9Í')# +@ ½«3�ƒÒ•Pùúl(ã‚`ºúúDÕ~R�ܜ¤þ7Ò�i&ú¤ûFì7úœk\úœôÙ–Z.ÅOýPÅ;|Φ„dÕÜ&Jhì—Q:A3¢ú @‹ ¡õSk:Þ¯etjþbVòF•:›\KütTút¦3¥ÍR}µèÁްe ¡‹ó½ãò'AÈŽôÎZßD”•bÈ'ÎÎŽ0ñ¶Áõqágw• ÚPw• ;Ùà@¶$}â ›¾O#/pÅyÞ@ö�Ù•Oh–šk˜iïiø“<óÚ¬lÀÞyS£œ,Ó_�Õ€j´ß;,ÐͬA½tÂ;³E”éiD¿½Èò"«YcÆô ¶s´‚¢'¡óô\Î¥<™þ5)^�œ-`Ðð¬ÇÉã¶ax¶{—–�/Œ]Ê­,hIåܺD¦Þ0ÿµž7=ÓRSâ»××@æ!Òé;Ý]ûvÇ3(R<»õaŠ#üôGäëYPÛ7Õ:ï–9- DoÿRpþÀèi¸P°q4V&6,l[Asãdµ)“˜Zs&Z£Ñ«��Óäoíóš);ŒX”ì1ir–Í{ î”ô¸†Šø1Ùø–9H�|@2¢>ÞÅ"²Ì⢙(”R‰(æe5+M¸­k�Pž¾¾ÛÜ0�OÀD…Uë•R¤]²‚ŠuÈD®S‹T'­ÁÞ +ˆ~¦P;½úˆk·„*ƒèl4q�ß•²9륧ØUÙr¦ô”»JM‹??yÔðþ½1 ©¹‚ïWqN;ó§íÐgû7ó(ÁœSék�W]Õÿ?Nw2Y®1Æ÷ÓE¾éûœmŽÖ‡°e<0µ^ +4”×4˜Ãã¥N“s[J̺kȈÊÖº„çL¿of¾ùÍ„3Ù3léÒ£dŸÌ^…‰’4õ5 ³Fž/«�Ê;ư֮Ö'n•Ô�§=«ï~̦ˆ¥ðÇpQÿ_Tÿ¿Gu3TØù›ýÿuö[6¾“/ ¯Ð¾Ï<æcx Ì +ï¶Ô¸l„“ÒËÔsfÄY6Ê“Q£Ž’ké^On¶öª¦f”n›ÄmëEá}÷‹hvK³QD@2ËYò0Æ¡õïV» >óãÃŽ© +¯ôYÿa¿Ê‘#Ûq ÿOÑ�‚àÎó|·ïoO.à«’Ô1ã�ÑŽŠÐãŠ%‘éÏÝ¥žj°ö?çgEžÜ� ²O{Ó’Äs(Z�Öå—ÈtÌ;.™h¶xðÑÍé·®&N ãß'þV˜zì«35OU×ä×À%ÈVµ]áMXïVoמÝü�4smÇKd�©ºZHã6ÕJt¥]b yëÖüÌ­Ìi8T}¼¾-gMj—bžBæožji¶–•�³j +`WÕ§Þ“<9§ªª­,¯ª‡Ñ—#³ÓÏúÚšQ ë´éi-ëÔæ´šÉœ2Ä­O¨‚M>Hפ{ª¾Uë9õ6‰*ÊþÔ4Yt’5ò”Ñ—² ­&Lv~[î)¤—ÕÕDè$®¬•n'ßn¾¢“ñ¯éN´)eÎÎg�ó‡°›R \,ñØü{Ý/õSêKj©Õ<ùÔC.V];G.+E˜¸à„óÓ…¤ÿpÏqÄ‘0L¿ÅýËßhMóèÔ:�ø»-õ¡>_Ç›AÒÚ.’-IÇimÐ;�ÌÁQÙ¦B g§:v#–EŽøè¹ÃVþ¿— ¹Ž�éúÖ:µªôX=*Ö.TWÚ£ø»\â?1UãÐhf‰ET°)¡? ¬Mè-2^†cšfúµOçAn(y÷ ¼�Y&p%�'Q­[JÚšÏ�EBVݦ`[܇|w>Ü%ØgêÅ×ÍýdÅ—ù�J̹Ñh¸íÁ ßý²ÌÇeéÝvS»6É�ˆ„9)«çCŽÝáL²AÄ Ë¯ñ6&ÞãÚ‘I†i_­-›ÿ� µÇ¸óÔ#¿¹9'½ ] +�QRŠžÌe.yÖ¬ù•O0r<ˆéz&O;Þû,´ˆy�ÍÇ_΋=× +ïå;ó5€B½†¸ÞÅûç ¿ŸhØ/Ê_˜#£«+xzURäN%¥L"ú¾åùÔ0¾žO�õ…D +".‡“"é'~,é×Ã:fÉÜI+ùkîÚLßæ‚ôûÝ,ƒ’e¼tƒË¼Û ´.}S ßÃä¸/½Yc78�äž·4ûŽþµ.^ + ½˜ÇLû[®Ðt $ñ6C–_&ƒ7ÝjŸGñÜAÏ#C©?5BVB•*¡””¹díôsÂEk:láoÛ\Ñëá$úÕ:8>N)œÂØE5ÃO•X䤺ª-Zq•©5›ÜB¡çñÔ]5®º°0îÀÜŒDàŽ%û¾ú&N†öQvšò<†œ"øôãx> Röx›º4!W¸òX?®q¨Û@’ÿ¢í_´ý‹¶ÿïhÛ +Sñô?¡mK¬m:u?cx‚îXÏ1”²ƒ8Û�ÖS"‚p¦×u§ÑpqæÎ0$? 8AÁEH|pÕLÐ:XŒÈÀÂï¬7›•�ç¡+…wò'TgZ6ŒÂÏ®hBèœO�¥pý€5ÊŸtÍs>fS¥)¢Œ3^.?/cé$¶ÉêG, Kµ–úY¶¦t˯.B¢Ôž&r +ìôÙÓ‡Ó³´[¥'Tÿ + ‘Š=NU˜+]àÕpÉV…NÕ&¤ê59ÆT +++¿e+Ì…úß³+¼¾ÛsæpHòBÝ ÿ¹nNõcÂáÊ—F¾ä:¢džÚOåq`I¿þ3­Zêì)ÈÿFA^"°}�:³¼„^ó™ëû«Í‰Üâ5°´»Ó¿ø­/YønüwYˆ©CD¡X_ˆ +°5œ Uð™Äô"îFÍ®®´rîè âÕe>ØÝ?›‡¢ZŒVÿÙÄçJ"¤ +ÖLb|ð,æ3g>$¨ÎÀo†|TP[n°ÉâÃ÷%fÉrŒbís"Øyq3 +98G‘+~� +OÔ$,s·Ñ3ºzsù!ƒeØö!žóHJ˜Ý[³Å + fCéZ�“#óuÛt*w7ª¢þÚŸFæ*·¯¤)ò"&Wâ=˜ÙÝgê Qût)l¶Öª‘ +°Ý¡¼t®‡2ii ÷âé~²ñ%(â?‚íxg[ChÆ‘Tª¬lS0ÒîûÈS徯ýÍ\è¥üÉöÝ2Bq½VTÑ=ÃVÄâ¶zšÏFZtPãÏ} ¦<–${w²ÆÏ£+ùµ‰Øˆ5–B–78Õ¾—=¬· !Ög1“ +´2¸ÉÊ¿Êd�ºÜäiC>ôú%ïzÛ­þÝM ïÝ4· q,.ÿ(E”‚,Âäv¡æ¢>­¤cõ™!Ó˜6»|WØt›ù:n¸¼HüìrÅÆý¶ +žÇËûUáÏvQ!¸6(ã,xñ~ï?ω—âù*yÆ~$Ï~Ižñ¦yÆKôÌ7Ñs^š'½u5Ï´ä™oŠg>‚Çs_‚ç|Ñ;ó¥wÆúñ¦xö»âa®<Šç›ä9ñUò°ãâë¡âÑËl—7íÈU`7uÝTÃïÊ m͘qJ12mÕ´ãÕ|�óü©–´�ïZ—Ò7“p�)BÆr 'YùÓ•XÍÃ{Rg�5¥<ëLZM ©z,É×;V +.O'o�ìÛ¹n I‘ä²”ãý"Bc°úg»RvØSáÜO6þ5[(‡·Å‰–œ÷ö«9¶ús +]@ +ÜÏÓÑÞo§ïoL.ä«’~Œ5ÎÄD;Q�@ 3¡pŸWœîù§ºžSrEAô�¡Žz­ê:ØŠ âSÈ÷ª=£Æ¿<–äþu´oî14kßáoÅ´àFþSLÿm1mUùn‹å2DEy+!N)¥q^DV¤8o)å[)­½_¥”í­”ÊüVJù^JßÊ轈êÞÿ—E´ê[õ§ŠØþ|*nÞ,ËYkq%{UuZPxDc‰üŸjËþVnj5\o˜öª·wã?Õ[näÜW¨[íC&ÿý'>×ÂwE B!£ûñGt^(F|¯~,Ф®\È¼Š Õ]Ÿ_jÙJæ�ö,@Ù�hð‰+(Ùéò¯�Àh¸Ê@ +rÆ<+® gΊû 8X+øb!{V™1W‰zŽèÝ¿¬=4cñÈ +ýíu)ØkxÅR1&ÜCnœffŒ&{iGTi0—éxCãÝ C0¡)Újaí�'TÇæŠ´ãÏ Ôv¬·ªÞúý â`{Ýö@:?·d|÷C{¿Ÿ8RªR¨Ý0?öóÏ/ç©`Ëçû”÷>¯Ç¦¼ñMéÓýJ— õRðÅh«ÈÐKË‘�ý½§ŒÓ+zDHé²j +Ü�b\nA*�náÇy¥QŽ™D‡ŽE…8�ÈS0Ĥsä—+¸OŠj2d¨†±ù~äV+G ĵ…w!ލÔ˜ˆ§0²y„µ¸¬I!¼R=Ým +Ì…ãAœºp•i?C&¢¦ÉÒdúøúicKQÂx*F©‹ÀT/§5C¡*‹>˜¡Ép­â3Õ¥t‡qz2t=C<.uÐ¥Ög–îµ-TÒ»´K(@pu¢ª£ì÷÷ðzSµ[#NÙÞÉð/°¢#@Y�›HÛ vBQ^ßú£vìš ùFÏèË“oì:¤@Øó˜/§°^]íé9ñ˜jÕâ-«:Fâo;5±[ûª’ª³‚å*‰Z½,Ž˜J3AÄM¹„øiæå~,ŸîHþú—¸U4ÔÎi¦+>|â» ¯®F¤a3ZNÓÉ ?ó‰H¤–,Js÷¬rCâ[•ÔÅÌfIw [¾æyÄsdSîåmp»kRìjïÂ,=Nî§"±üƒÒ“g/5°fþ}Ê×­ê'ª²é+…þ`f³¼ÉûDõ«3¤°å¢F‹Ì\ïPQÚ×¢b¤`±q¥ªéÚ|ùŧHš?°ßeê˶ë$¥³•ûÊ<:ÄW¿ø…âF­8÷ϳ™æ£ÑTg-D�—õÚWúâ1KäXÞ�ûµu%Ãb=-N+¨u¼—å"c�çºÂö2·ÓJ-%ï$ë”ò£¤ä¨)LžÖC¯ŸŠ®·E ƒ²œcöd¼ +çà–A)emîJƒyl!™e>¾(éX}ò6† á¼IÓ—*�'yX¿ÚÕÅšX‡Ô`õ7ÁÐô~é"üãw$™HÔÙØÊôHbÖød£JXê_u$B‰oÆ«)MuPµ6¯º«ª½ZÿëWDP…Þ)F8 9x†„¡Jp€LàŸG�÷´ÅMRrÔÙmœ'% É�¿3™‹j½IÞIÝÔºl'˜ðr*õp‚“—]¡ö­ª@Ö7Σªë½-•RA±ÒX°�96B™èdPŸÓŶx‹êÏ&½­ÒRc%µ¯ÎMï ‚â¬”+”ŒQ%¦Ÿ(Í�Ä¢^€$�NÍ­|®0…•d4TACK*bµqL Ň&!â.(Úådáè:2�œËÀ× ›K]©ÿ¦@žp‰ÙSŒ·a*[Ö·úÜæ¶ûÉØI¤¯�¸Ó Y~3"³ê¾h½»D]…¨cÑ¡w~Œô4Yxvò]ù�)ÝÌ‹ü%/1@eˆA³Xõ[ïQ-à=S]¿²ƒkçWߪ+‹Ô†B…¥3Óz9)·œžŽ[¶‡‘C²Ç ÄËU¯ŠØ“f™ŸªB¥UÏ7“xÖ©D7©Ÿ‡0››Æî½ªhb(¯Ž“•ŠÅ�ÅÌd,Ñ¡û?"®ymìˆô›#À6UÞãXg_hùÃåÎK×´pŠÐÐuS•‰Ï‹-9§ØZà½êœ2T_ªËÏqªÏ?„?kVSmÁW Ä?!1нçGoðhÇwq5&ÓaI"°>Ñ�)4¸b‰5J³Ú‰6®ý‹�ÑÊPqÃù_$älíÍÆD:ç‚YÏ“ù#"¶òeþvã ¿;:µÞÁ6cì7Ém@%¨ ÍVTTB`hýXBaÏv„E-ʦ2Ôðj̳%¬/­^˰4ÚóA�Zrš^ë‡ÞnógÞR@—<D>jmLƒâ±wUÜŠÃ×,vF¨ ÙqôlÒFš6œ³¿äQërl¬þ|d©@�òöäP9LÀ_‘AuŠf¶Î_AµÀ·¨L´¢äŠp„{¦—Ä +f,3·£VæµtãˆçcóÉÃyÞ,�Án#M6=äƒL²¶s¡>ü_ÛseƒœSs»¹¦î>‡^¾ï+… +ûĨڡ,6“Ýò‹ˆ‚ÆÝÏ·r µÎ#ò&ãbåƒî�uôžŒN»Â”ä¶“Ч+~ÓÛ"¯™´A¡×¦ê¿&Z-� þˆk ‡W5‚ôHï¸MúMÏ‘‹¸#à,ªUñ±Ë‚ÑÛ$2¥7Õá©¢)¨rf«çr ‹W Ž.F¬N*ç•"Ŧ.�’ì“Ȫ,�3üôŤíÜ„šE5�<ÿJDª{+/©üVÍcR7s7fÍkH¿Ä¾&üÉÔªþHâ¥€Ö •Êî=õO•͵�oñû™¡ ©»'Ò‹pY'ïf(‘n +Ð=â™}ËÜC~W…(û(ÒŽƒiSâÈU"¯,×kŒ6Z“RµW‘öW;;²c{K½ÂIQ%ŠêZ±�¨N ’ú|…w-½ÒÌu¨"¾›FâHÜ2pìPȆP^4ÔØ_"QbŽí_×¶Žøu§ÿ0ÑèÅH¯„Ò¶šXÓ�ÅPÆ1¬òšn?±ˆ€‚ÌãS¸Cˆ`Ap��êøÁ¬âFîÁ3&a5ªí^?|Št—Y¤(ãëlæW¡gª‡A—–SÀ•®¯pª{á¶Ì:x�/Qœ¹D~½us¥³šMŽùûOLÊšRF?¦8Ù1ãù.¬åSdÅ;¦X‹oöˆÐ¢b¦½˜¿°)¹z^,º‘1Iÿ’›3BìO»�a÷±Û+Êå5™{í€»ÕøvbÕ·X^1Úð-1óÝ®µž÷—vxíÙ…ü|��ŽeæYÁ¶‹¿(!xËÙd'*\~È/Ûö#“÷ŽÄÝáÆêuÆ�æ½Å�51úûK�&ßP©Rj·ýIþC’ÿ $Ùƒ¯ŒÜox¦�¨>éˆÇÌ$Þ.Þ/ ”¦F6Žz qËzL¾×¿Ù/—Ü<’ï} +]ÀF>ÉÌó è…½éû/†Á¬*Iv�¼tÚØEýõÈd’'4·­¥y bŒ)”£`SÄÔØ5Ÿ*¾´ "½uݸ&Jk þ¶�fYe°Äý‘ˆdEc¬^”w+<°^+-ëÏ/ò`pm¼îÇro=1me�ƒêT캘Wf­ŠÕ ¥ôE»+·Þ‡¨Ì~"&¥Ž+Fk½#T¬¿óí›NƒL;­Û½&\ãû¸î¦2]-ÏŸß=º0õ‰Â1¢Wí;*¹ž±@F¶:ƒE­˜(½‘yìØ&´!Çò†P!eÄ“yDYZò +÷A¬Ô6>èý∌˜4s»~ (ë:ßV�kÆá“}–†”‚Jš‘A�¬H]F…ñŸ/‡ú¿µšvÍe´‚RuOðšd²¡±Ö;¤Ì3É*à–lœ°p–‹‡x �Ã#•¶§Û׋^‰ªž×XÏÿ}£EªÆú…îÏytÎ[÷!õÔaT[£Y‡ùܲ>ú‰&K2ž0H×âÚeš)(äÂ"y¬+�ïe©±JÍdx‹Vý6ŒBû#Qñ U€ŒëºM)nšS …lT.¦bƒøêô@ ­\¿A>ÚC õöÕ4к±*ÏaR±—¤p²¨lWiáœÓB£½ƒÐ2†��`úþ%AìmŒã‹tÈÖ}Ú×}Ó›0r4;×t_�[”€×Qùé¢Wh~7N9ÑöjÑsPÌ=›SŽ– ¿Û<†ÂæQb’Á�s®iPëDP`z4fœk á!cX‘ÛNl.çôöhÈ9#�‰ø©^pÎÄÄñFÒpÓèã^4ÙœÁF¥¨°Â5Ô”t�4…šqœ=çày�ïfGÆÎð‚è{FÐ�…R×­oC8DcØ4¯ £ÍÂÀ7…¨]–âr„ìm¾ttömN '8”1¡{³EÎä²ö‰ŠnÓ°SŒÇ3ìÁ|ô·KàÊÂöú2Úé• fÉ=¯yØåDp/žrA’°áX[õŸé›‡n”R?ȵQäÚÄZvújçx@-ŠKX °KûCc¹ýFÛJb-…gBgHZI7ÚܲnAÛì’NSØ{ž‹(:„x�\nðê¿I^ ^U9‡¡Ðjh (-©-¾~ÂЦ….ðâôˆ™;¿i¹Œ†ˆ ©jŠãð '~·¤½ãK†±Tk»—T9I°¢¦Ö4�GÙ–EVSDvÕN@ÿïâ‰üq U8èš­æ½6ùlׯÎ[Çw`%©B!F;|BgW¥GÄ$HÃa•EçÈB$±ÆŽR*…ʆŠCoö†:Kê +œ§œa˜µÁÚTÉJ÷°ü.{<Œ·da½|�.i]è¸NDHiXbþÜù¢Iœ±FVê~nm¤>ŒB¤×µ ¢3ÒÒ§5Q5øêz´qðÒ¥žw!ܬâö}"Š +5,­ú(Þ¯(¤{%ëf<åù³hÐÆm/cƒ@�¸†’ì»x \ó.´!ª]ìàL ³7Á·œä+Ó_âe¸S¢� – ã¿×*ê]í&è“ÚØÝ*N®¸•zEPè¼7cXŠX¾Q¼£s1ž[;Í+^"C0šj�›=�f‚ÖÏo*kxVK3zÝ�QKá)¶>¨¨9lKI…Z6‘{Š*éÿˆª§¤ö[N­=�²Ú-§„å‚91¤¥9{yM'S�ó7û6ö!TçHu^·8ï*Š1sñu7dp /Ã#™ëtãu„‰¯^Qì*ÚhÅÉH�ÜœŒfo¨c§L ${ü4Z²åŽ ôuP"´8ø!îŒë"Tþ‡¶vVcȆ«ðl÷�a˜™>ŸØ\|¿ !.ýãô Èë8+iÌܵJÌŸ~ÿVõTÒ±¹–¹sRdýUc– �Ó°~ϯz ¹ð¡OÐüÍÿ7h†•Ä}Ñq#h°#8PAëË_ÄM!y‘“õw·<ª¹Ã+Ʀ‹nÔ,n¨»pÁ©í½R,Œg�€éXWHÿÄÀ×ðfMê„L”z©`@�ìIÖ“¥A/ �qÔümû`þhŸÔSÐ’DZľh´h`å§×ÊÓúó‹Ú¯#VŽVOLr€HãÔU(U¾9TlòÜq¬Xâ[´»’Ÿ<Ï~"yܸbEÑ»E�3½_dköp•Æo²©ºÙíÚ tír¹©O6t¯ÚwßÌ*ÅÍØ«‹è|sÑâ•ÇŽ„¿u +‘$ôMœÚŒv?åžSRÜá´rÔÅ ¸%'„~¡÷æ~Œª M¬�CÏFùµêy�õñüßÙFC¶¨ÏϹðƒ>‚´jÈàœ(àç\X8lÓües¼‹‹¦¼ö¼Š]ôußò&Œ¢Ùí£º„›ó§\¶.`PÝÙ³§i‚”Bš¶H?8ÒˆN›õ­«¨Ì-šåâ‘@<.SE4£ÿšÊ aέ +x�÷nçÏCºtÍ1lÎëˆàä8zP­ÎîkJü?nvf—r%Dky•ŸÐ�Áñ+ò*¦¦:¢ëÍ.häv°¦ÒÅxð'{²�«sCÍ5µVЋY;mLÈI²<ÏQ5ÃÜ׆¥ÕMcåÈ¢×!ùÆV€&7Ro,aZ2�V÷ ¡å7 EðdÖ®w! HiƒÇá˪ æÿx’»©’¾ný•òó…“-¾ Le|ÐâXtŠ˜"œ2Öã-ƒ“eË Ôõ"äžÄÓxaÏ˯ZnÚê�†˜ÓEIó%5û`Ê8΃~ïrz¡ÜÒo,‹WIëÆ~„l£‘ʬh‚܇Ê•Mô 2/¯ò÷nr4f<ó©¹Ô\óøzØêÇ–²-3ÆFP±fÎ'gžëw¶¬]ÙŠ Ù�-úóѯæÄ‘5]å®ç7 �®ù�“âÎëFEA¶‹¯ó¸!ƒƒüžŒ¬o@Ÿ× ³^Qì*ØoE—+ßqàáìN½¡¡ü›tnô?�¶Ï êÑXëb�3V†24ÄÆ5$äë!ŽðŸÎ«ÿ(“©Þè'È6£³xtâ~ÆfâÁ+Tßw¹˜VÒ˜¹k•@^¿«zjP)�b\æN8%ÔVêIÖ£—þ¨Çß,ÇlŽdþÂal±ÙVO �Õ¹ü¥ÍC�j’ôèÈÓ^„Ôr—âýx—{ÙU?Ðär}pëwA9Á+õ´Rz.­n¾ ‚Uà_”�,$–v]Ó\‚ƒ/sÔPZ—&'`6½€£Ì…A‚•K»ƒÍŠÈ°¢+!vÞÄ n}‡1ÓÄ +c- +0f zQ|q¡¢„ëê¶fƒ´²NÀ )l,Àœ„¹£¤±l«2$ã 1œÌf†G°[½‹ëÚBy\¿;©¾‚_b¥sÄØbqÏuTì† ²Àç¡Ú‹Ð[©çFZD@1XWˆzg�µõ_ê«$I’‡Ýëù�l“D­ï)k³>T]æÿ‡@JòˆÌ¶é9ö%ÌîÚ(xžeE£“¸]QP ÉÉò�ª]wó'sbQïÖ¨R`, ¤ÒÆvù�É<€¸˜©Ïb×IÆrŸÿõÃûËÓýþ!NËÿ"¦Í#™¹Ô¤øå^]®:“Ö8@sû–üt)–uvh¶‘‚’ëÁ´šÉçî"°fš}õ.ll\fä N®ÏgënÛf ?¤uÙrXBÍ—Hj–ýܶUÑ�·:0.Áìú¬­q4ž€Ý×µvâ¶�ã<$6ŽVìõ4; ž«oyR2×Ú¢�Ã\N休‚ÖG?oQÏF`š-í™—�/£qá@Ì$¨­Z¶ÝÚ(É!â[Ç ò®µ vtjm£¨zÆ(ž#m°ÕU—,ÃHÛ3µ­RèH½n˜Ô§1H23z&¿[lΤ Ÿ�Ê#ž¹?Ýÿ{¡å��w8Üü?h|q¿«Gç“ ñ{ˆÞ§»Ü½oDç³Ûõz9]¯Š v×ÓÑ·-C7=Ûiò ñ®Chç4T {:ðÌÜo@SÓ |`û±€»³�Bí±~óA8ÊŠœæ}·8¼Ð2—Æ®W+È�DèJ$ ’´¹Y½¹ )Òý¥I–TzJÁÏ}™ì>ªµ\�aÍ5Žmªh{…Õ³¾@fÙ…®ßÌ݈ï¤(rg—d“qßeU¥x™åÚæŠº_déÂÐ#ÙCWü²‡»Ç6Kß9…>%š¦Em£ü½`†û„ÒvaºØ /@=ø´ ÎVîÒ°í-´Ýc;l›¹âêßÝ)á€í“¦¢¬>Ygi6.DÉÏ_¦�[lí<Ë$€bŽI¨ÒÂ"\oJ=»‹Ëò…™^‰ o�àÌ‚…K®÷@¿}ºnùµµädc)‚Å\e˧´T¶þfÊ—«Íéšê†ŒÈÌ.'%ÎGé·îØØzs30žâ\ÂÆÅùõ9íúŸc˜w{>Ò¶9/¦Ùålººp ÿÂlÇÙpó±éé–ƒÄo/ây˜W)·2Üzâz²þçÏû^\ÉçUµZ3pF¼þÓIþÀ]’xRqS?A«ª[ãÎø.ù?eñ‹& A\YKÀìóÿÔ>R}~Ñ5òÎЩž^Ö€vËÓw1}Ĥ�ã.ÑþžØl¯±ÿI`ø;C×yîŒI‰”Éü‡4¯]B.³„tŽfûÉ+2ýù…GbϰcuרÑÜ»¸Ñ&Ó¾ß}Þƒ]Ö„BÌýûf×Únv­ÝfÇþ–=³g8€ÝËúÃÁAœØFMú #ºôUa´Ù]ÿWÑ.â‰ïœ?°^ä£DuÀËä!ï_ ˆ½® Ѧ*¹É\ù¬.+Ù/¡�§’ +�c:ß§›%ÌÔÆÒþé¼£V.�à³35\û‹J³DGûNçÿ¦6ÕWHÿÖþQ€dAôÀlƒ¤÷hÎÿ“ÄY<°M"g8%Ð^±xËJäOóv¼F<»^}¿21 ;ÀîX;`Ô¦E+ )N§y²ÙLp)Ä轊gQ×Wø9åØòS“’·($ÌíÆrGR}›«l$.”%ˆ·ì㌤ôÍ�y™|Z—æÍ²¶è Ÿd» 3[s§AX¤«d4hHöêæô8BöÔ—h‰‘{@VDûðÃmf¦ˆ•íj\Š�“yÈRr¼¡r"øß]B/Ûê$�ì„w;Y1Ӭ܂Úp«ÄvÈïÕÛ–ÞâX~£I#xdغaÿÃY~Q·ïöøÄ±oÒ´PôˆhÞ™$)9Vä9¥,cU©› ëúØÊċ͸g‡¼’µGðÙ$§©ê½àQé÷‰†Åò°¨÷(’ÕŠÉ­ˆ^8¥öCÝGöñ ÆÕÕ¶bn§Šë½¡Ï‹[ÆNN‡pÀ;¢ÈÈLì{”rfÜ)yág9¶wôâØ³½–³IZ×Á˜»ólž6�²Å·Û¬øUÐãúÖÊ3¢�¢A/ö„f› Åjz!œƒÎN@ÁÈí@õ1ÖÍ#ê�âšN|;”оwö`ºXŒ^HjO,\"gÎGû”ï¤ï2²2ƒúø;å<²›0Ñ:uãaQýkÙ:8Kö…Bæ_ý)ž‡VWÏÌS�¢Üí^Ã4œÊ±Ö§2ýjŽâ=Ï[= Üî*»’'ŠTlWÃé¥KÙ–‘%†U­‡HöÝ=äóW>K»r„·ß=WRE`•Ô]>ýüy( +�á÷SŠ*U³äúæ^({¨&l2·Hb|ܶÞôÍm%Š&«j#ÂAe ³T\×øØlGÞùp�Öäg¤üñÓ7&áÖ$!ÔM-P­ƒu>ƒærX“áhäêìG­ŽÀÌqu<¦r:$Äy\ã×"!ÓSvÿ¹e¼Rñµ§Œïõã%~?ß3´5^53"�dþÌPœbõHñV¿`¦¼Úàã ü€®r>yƒÈ«U.l‘ûU gGÑÕ¥½¹!ŽT¹®1@,]g¤ìXñ¬JAƒu„P4~5eÇÆjî™H%(6`æ nÁ�ž-2O‹ù?êŒg®Q[;o(�:Ùœ¬£¤áyœi~†Ü?ØïAçSIyâ{yEßRH¯Ìñõ¿/¨Ž/8®…ñx<>ï„ôû +ÁÞðä¼ût·IñùоÝô�¸¤¡E(Φq‰y:jJc2I,{3é@)=¤¼ÒÎËt]V¸oþJ`ÔÄ]©� 64Jò¤HŠ�FÍ?œŒÄ³êÝ.k¤6%Z ’·hS§HL•$íl9‹•þúá,ÍÊÃtÒoÕ屜�¾å眢o©¹Y�j€êNÔ�˪6Z³�”\Føfò¹IòÉ›õAÔé™Ë0Uþ\ŸÏÖµ³)gA³ÒnéZ›/0û¹¥/‚¸<ѧ ÌžÅåYªHq4ž€=¤zEp[(’=Vº½]Ê +‚I—´R„¶hà°#©)h}ôóÉL³å¡=óòå¦Óhb&¡à«7ÕTJÒT?¦VÒZèÙ:µ¶QSuŒp!m�°«7^Šlº¬¶{­©× “º éB(ôqÉïÀV¿’œš wÄ3÷§ûÿZhtdHZNé!0¢Ø£)a¢clHÂäJy¹Šêiœwˆ~Y¹ûa•ƒâjÜ8�©[näó}î ùÐî·ª¨rà—SÌÊ"Éÿ.Ž[¤“¹¾qY¶AÕP)ÖÅTQW¾ï†dç‡ÖL;ÎÓ~ïó ŽâŽæh÷-«8Z±ïÐÚRù"²R«RcŸ÷æ^ä7þAyC„5ƒUÀˆ×” ‰bEp‚W qIˆ�ë§¾‡Äàeñ=šŠ0}±­v0°Äíå‹UÇc†¦z.�Î+%�=LÓuß"à‰Í,FìÈæÎ=€ˆÞ5:j¹Ä®V+úÇzÑ®ü=[QMå`ÿž,r¿ˆ0ìá¦;„qoàF9Ùüx¿‡Ÿ/~ÈÒ�Qvþ‹ŠÝ –²ù‹‰»;[ž&.*¸> „ƒ´9eE“‘‘Xn(£™Sý—£(½ÝÎb.Ë9_—Áê"XOJ債˜a�¯Ãms¹w<ŒráPçÃ^ä®À�æ°âÊYcMm€Š×d©Z¡ )l”èâ:„i@×8C]‡Ìm÷ì ÌX‹Ì£‡:©°ŠøjUŸ>6Ø¢à™³Çûýe‹¼$½lñøGl<Öƒ. +$@²g1v7»å\û%â!ùx£ÐÃõÇT&� °Íò²B¦­=l8­]¶xà`‹Ç?b‹=AÔê^àÔrqitŠ�ìv¹€GèíÉ:äxùƒ°gØa:kœ@Æ&�a¼]Åa$Û0û¶AA�ïÚkò°®ýX|Y–Qôâƒfa€Ñ�j<³ôªmÔ$W“ÒQ>­Íî¥Wå?q*TW•æ­mÙ¤|èI÷¨¬ Q×…Qÿe¿Jr$Éqà½^ˆ‚vJïÉkÖ\úÿ@Û"yx.ô­g€¼d:Ã]EI3¬aQ\|¦f|š–ÓÇ”Bâ2Ë}³i6ªjnbCe—®wE³‘«F9e`”¶ËN<9‹£1n¤uõ8díªëýåz=~i�„/IúÿUOo {Uƒð§§ÿ/öô[ªz¥pè’1ðÍK ùªŒÒ1›ÄžHüu’œó2)N²b¥Êûdý•"#=óªí®U)ô!¥EVõ‡“ ý=›Þ­`/‰|8.ÚG[ÖX9èbåaUM^'ëÑÌKRå#+¶ûÃU­äcK{ÔP_XUz%ÏPûPõ6µ’hû�µªûñªûXu‡Þë±”Ü.›²5yï!1Ù«v_cX²ÄyŒd_*n_|®CžÍi È™Ga«^Œ#}D*ýáaûT+R‰+n�³ëVZܑȕº`+oáÚš>LU:¶ñ’pо6ø:ä2aRž›]žì¥í„¶haT„œ�¥ �×[Ôs¥Qµ[ùÌäãËö{f5òD$�|Üì¦ Ý¶¥Â6&ÌÐY³øÖr£¨zB#’âW„s8Ä8˜M¹{CWí˜ØaÂ"%$=“sPqñ¬¶á 8¤c?Ó?åÿK¡ ðЦQ̱�„Ü9NžšŠl!Ž%âݵiØ5¶³ ŒžÄVQ=‡VÌm ³žwUñÀª,£õÇ}CÑQ¡§¬»=§ÎM†¦j®"´gÛ;*Û»S·‰ „#Kñ.Ý¥5û±T‚Ø~‹Û9Ñ©e#íB‘îž—Ïä´Q–º‚ª3WVn‰Ì“pŒc¿»j«÷óù'“sµÙD—Â¥¦JÆôà'>mÈ¡(Ç$ª\Ä©†ÅTDéÆÉ [ ÇÀ]&ƒŸSÞÏI¿«WO1‰MpÀ3X(ŸÂâ.â¤Ê¨¡t¸Fq3v­Óº÷(½Ýý —R¦x¿€4€ø"šXQãÛ0J Òº+ž µòp•~Ê•U¢ƒª†ÕŠóÌ�çF‹˜Ñ O‚(±&“Mý‚!qÆèAìpÂÔ +‰Ïx¡Ó›EzÅØ30.Mm%QSc2íQeD& d2Äã†cÕìG¿iãÁ­÷m=ÍfÞ÷§ŸMŽ›"³¸ÜŽ€»IF,uµrt%<²hŠ”kÓVE¸7€œkŽ»¡€®%n{€'ºcPú3c5 ýÎ5"Ï{?6óê*H“׫sùÏÑ¥ˆý¬d§cŠÊrb�xaø–ã;Nìi~/L>H&>d.É”jŠ®n*.ÙºúYî&[KC£2®K#Ðâ¥ÞÄ Ü­±-jÍäNà�¡3LgvÒ¨‡’Ö—y€@P–ª¤j¬Õ�A'’3@sߢˆmƒ ì/"÷OdÂï,ã§p +÷ß-ܵÀ S6ËYõÉYõNræ�åŒz§9iê¢-3�„™þ™J–îß@¥•ò4¦®ZJm³MÝ<5ú‹yô²ŸŸgø^¦Ô™=¯UÜñyÛ2—jucnŽ^DkÎÓNÖë ÅSö*sè$2Ô×fuyÌOÔfmHâ£)‡+*âÏËŒB +!†Äúá-©…Hz£y$Y;^5sôPÁ´®«[$V‘ê6ÙvˆáÎЬIV5 8ÈRk4òVéÑÖ™¹ŽaÅÖ^/«òÄvµŠõ7s“|Ê�ñ;3#ïô�ªÿ¶ÙŒR´X¦øÙ(æú͘‡d�Ù­ÂŽõ©n2Ê0t 7R¢¢·Ëµ1©:l™÷�×[€chßR^â¾%B²t�.ʘ” JµÖ¶åLßmsK.Õ”¯·ÍC ŠË3EYKÂî3&÷rltÑÂt³¬õ)m¼tÉ ™š®M¥†¥&Yפ3¬êºaÊ^]뱕kKë¼cpTû­ŸhP¦ŽW4ª ù¾!z¬Ï�¡%¼!1ýéÿl¤·œˆ�øé?#ýßéèlÌÛðHga~œé³Ýgúm¤Ç}¢‡j,ôšhãÝc>Ù¢Õ¬ªCš‚ùÞ­ÝØ9¥‹ŽŠâ H¸ÝŸ ÄçÌáìqÕÓ`|^àÎ{Ì$wA’Ž,¥ŸÀ{“ÏJ‘’z½%.‹WfÝ<²÷Í{¼¯OÓ½ot’yd�ÏD|>7$m¿»j«÷óù'Uç€Y˜×Æ»Á}×^ÒÙ¬Qo¿6jl2U}=¦Âà$ÎØp“(”˜SÞχ;½0;ØT8v,°Ž ëc •EÒDÏn=Ët¯Šc¹^o‰P/ô¼R¼Ž�_A +ŽÒpB¯‹Aªÿeºt„ RdnÆ€PN�ÏT×Ã�`ìiuõcú/Wá±›²ÌÂêêB:hMÁ¥@nXöp +íâ2–FÑ63°Ì&è�Êþ“=Å�.3à‘1«'.á !šr€| šÓøÈŒ—4�¡‰Éš°Y4ù`„&ÅZ"qi˜#¢ÞJ Eo"Î7c•üšj×ÒíùKª*WáO/ÓçÜÛI H]ž„&÷yB�e›]›ïðïÜÏô‚Sò¼éõ¬à4ïg#\±oˆë÷çùR—Y×s Ë»–½�\‹é¶`½ +ýÁƒš{tmeƒ}ÆY•L+ΆÉL‚‡…»_»k0�|?Edx‹<þzûÏ]‚zù\c»î·ø>Ë`Õf WÎà£~G7˜/SMì2ÐÖËãZ¥Gï&¯„jÒ7ˆÑþÚ[œ}ý6}¸KìD¯¿Ÿï²@eÙ­r�û„®ÝÙºšê¶¨ ã?7§—gÕ 6G&xhñŒ¸ Ö£¤•Íø=ÙØ§ò4˜xñB{Wè Z™HéÖg벜,\Ù6{ñz !%:б#ò6à¾bCÈ*&þ¸&j#ÂÍÏ,kbЖï„«û¶C8 jZÖ½ˆÎ…rͰnex31`™+9”i[;5iZ48Ë4t�ÊbLËYzŸö„úJÆ + FÄ%;ý[ÍÑ'ÌÛxû5¯H‘¾aUÅ¢ÄPVÌù‰[¥ÊƒsY€TºC¢§Hãnƒ‚`êämc=E×…óÚÔ +´w&�rº#‰ƒÑlêWä’åôôm9Ádn›c»Èb`8Î)páúܼE¡YÒq…c +Q )U”êÓ÷‘R‹f>Ó'/h'«<>féí‹ q�è˜âLËAˆ¼¥D2†ôÅ$¬,¬ÊÂÍSŒO�”Sv7=W$¦dÛÞ¸,·AŽrà:‹– ”cÿ懽B?˜êùeç÷¡¹YÔ †fš¶’ϧ2£dmC®+èÇôõ¹~h@ Û&)·<Í. +‰ž7`Žìa1„’Õ¥ƒHh¯kÉz{ÝJÄû;iFÖ€|·¾ŸFXN-’ „¦ÁKSuÅ!Ej«¶2‡fÑ�~UÃþ労ű¾´€%ÕIÙŒ.ÆÁ&ƒCp“®=Dö³¾‡:?§dý*gÒ±·ª"ãOŸ‚Ó»"õrìy<ËW¤:»|q·î°�½ +f¥kÖ’=Ç"�9†¤Wå€ôÏ1sSkx¿Ù÷ÃW± y¦Uæ”Õ—Y—HìdZVJCĨ¼,6zÛ!ɸáþå¯x—[ëþCB_?°IJàøaTìk߬%-¿.¡I¯¾ÔF¿Yî�ÛF#]¡Y* Kß&O¬&j�«:Nž[fÔ.é0­;gˆ!F³–\—õv]ÐöëÂ#ß½à8¿!ä67R�çú!š +«íg€£˜ÑB9½Od¥K“KìÕ“‹‰CA7ñ„ÂñU¡Í›4tË~™¼äßlWI–Ý6 ¼J.ÐyÁñ<Þ:÷ߦð·gÕ*}µD‚@ èС8DFÖrg%4Œ?Þžjö58BÕšÝCnÈæµOÓú“ÑHMŠÒ,�ÇÅÐ<©å¿¼…®b¬ä@à{MtGˆ\xL[°íCYf·ð*°INÈ‹: �ÖÐsgË2E×Py�¥[Zº1“©ÿ—)ê·Õ‹PØ—¨üš:¾\öëêü‹$Ê„Sýz%1tXYÔïSΞÿMkÅ¡R“Îø-ls]ëçY + üÇÆŽûAØü£‡"ÊŠ€rÜé€èˆ¢2®%•\Ë?Wñm:õ’ZBï=ÓDx©TI;9¿Ë}É´”bü´PFÕšãg �3²�ýïR¿¤øfBЯIT-JÖâ½T>ò5j­øgú¦gã‹îMRL6…un×ÜmëI6X:8Êç•'cD ×À!,Qœ¶¥Õë”»Ø ”ÔÄðS*ØDµ?i�85`?þ“†vSÎ+ 0~ø3 ¤k ƒb+À€1Ž´C&qk©Cî¶ÛŒ²¿ó8•ªìw8jNH"±5ôF8ãÁ Ñ[ì½+o‰&j5.sÈbNÏÇ +šw2盎‹ã¿ÌN88¼Ùinen,ºÜ)M ܺ,8ç¤ß‡ +ëá„Û +6ÄRÿÏyø¿ÉFÃíŒ[_JOOCíPYÌŠqbâùiç…ѹdöúüo3ü‡G‡N FZA›ù›GÄ �^qÈã)ퟃB$³ 4THvÿÞÎX}—æiàN +õ¬Ñƒ-¼ŽÕqNrРPbçw9hãY¾zJ°–R•V'¾§“u!H’p²ZŸ ±ÔðøQA”.˜ßÔTC– ;³9èuµt£âÑ}Ùýb]l`Ó©Wh4ÈÖ°Z)œbú×Pœz7�:Oâ=ÎçÆ×RÄÑž»¨s‡Ù——Ns¥†žv¡¿k,nÖ“š?ë¶Sel¥‰7„Ö©Œ¶²­­·›/ÇL 6m n>ôÙ�_«� ùKʤ�þIÇ ©ªƒº¾JQ7IFàºK‡Àlˆv^ó�Ûbv<‚Õèq˜ñ0ا|Õ¨Ø&÷‡f;µ°M Ðé:Þc’†t�ót¦­=Îû! ‰¬àÃQF�Êf ;$g†iˆ³£+œª=A*Á` sZ1,¹læ¸ÅB×63ƒ­›²„[Û¯Ó@ÿ´°¬ãøÓ%ÚCÍàîbCŽù�?þtg /ÏùW’r©oäi00¨84 þ ! 0Sê›¶?¡š=+„êÆ3FM#Oigœ xŒI +!ÏPûFCŸy,Ð@!50Éÿ<ˆïmRK·?âìÓ0ÿÊBéPx”v‚¼‚!}žÑ×,Òˆ[hêÕå&{¸§NÓÛ)D?Õb!&½3­§lŲc©Æ±u¤�N²lï²Ú”ø‰õÚ§eÀ²›+/M¿UÓAÊe¯’Ç¶ä¾ K¤¿ælmOvSmFNKe§}kQþ‚.´{çì­oºb €ÛXÊ‘uM[¨²°ù 5 kÛÚà¹%¿Sn†‡+XãÖuæÿ4Ýf ƒeKtÍ!¯¾®+J³(Ë€o~£®$„ÁMº&ÚHûç·çy¸Â‡ ú{w@õ“÷ï80®+/AÛuîü\ßá1$r'eGòâä×µ®ÅƒÏ� ð½Æz6iÝ( +½Ý¬Ñ�ÅÛ/¯ù�.4Õfjf8‰ù·=éÔ¬cÑèÿÅN]N'äaî'CG8 ÞÆ/àÈ?5L…�´³mÅAG¶ËI‚¡xœ�:L¬œùÀZZÿ/ˆŠbšHt¬á]¢ÓÞlàüHÕ¿Š7aßw%bŸÒ<å~X&‘ƒŒI +†“ìCø €û0AtL›ZÜߥf}�S¢H/: òêº^n›RÑÛ<ú>ñH�.ê6Djl�shy�n ÛB� ŽseQ>Õ‚%¼—ÒáaÕ—¾rX³:¯qŒ,QÿË䣢D²{‡W±“ŦzȽ(`ä±´­Æ/œÜ•ð`ZGCëÆ24�rÿ“ƒÔºlkhzºxì(¦5©¶}P«Nn–šd¶¥-oòÆÅx&j` +}ÓÆBÌ +ž’ìzÅ\pH~�G :ýÆ·ét.+y…šóm{3¢�âþ~yrÉŸiÓpP“)iå®kÅVŸèT–:Wÿ@>W"¶§²L“OÉéid vöwí,5e{|[Líçñ&9Öz>²� Fj˜®2Ïga_oeøÊš!ÏĶäxø%†G¾­Y…B©¯i øz«#aÚ"ÿcÆÿy&£-°oÌDIÚ2ä2ìH, ¾‘‘4�ÚM‹zÖ-ÇÎ8uû7"oC8;º›õ7ü?©<ëÞ_oxÔß ùµY6Vî3º×jÚÄþ2¶›:Ó›½þÞóÔVŒØìñóA§9¾Gz SSH5V à¦ôø\-�±‚–vè|µ~£Ÿ o˜¶|ÿÑèo”ÄÌßÒUÓ1áù~ 'j 5‡ƒ[ÚCÉcJ÷âè·CF ú$«Ìû M¨ÿë°›ßÈBj0Ô«ÑÅ�ݽáQÀJÌÇŒ®ùSŽfZ#5–ÖS4qð^vÎWQjî·nL“CÌnÀÉæÓ!ËÒåm}ÿP\úûc¿jÃ8_üß?¬µ&&•GBZÓŸŽÙÁŸ¥]N±²\£†gƒ¡èó¦¢ÌÝûäÆ(ê58F,±ée{‘î)šZÍÜ”ümÍmXó@µ´�ŒºfMÎZ…ððÿÜ%qàÛœu¦Ì=|Ŧò_IV_œ¿!®:þtÊ}ìF)É­/&å´­]׎Z ÀL¾m�X +H«õÜ´jòA�‘c*y./uå^Œ(¾´R‡—L@è#ÑØÑÜvª�­š«<‰¯e¬EÊD0Á_xذ1kз å™ÓelP Çuå¬ëÏA$ÿK&yˆ<ª‰ªÍP+DšÖI<ËÍê7Ñ”­±ìû‡ÙepÆ�‚.i²‚UE¨çŒñÕF“ .ÍëT©¼@3öƒ…žìN#Mô6¯èa�ßú|Íoß± ¹µxM5#•òZÉGƒ»êŒÁa'Òà¦)Q‘`¶Ì\1´œ´K[âEò•¶ƒ3#ÖìY܇»H™DzmïÆijÀ†Œ¹<âH5Ú +w‡s®•›³YàÇ·ø¥°ù_™uÒÚžÎÁÓÝ•\¥ÌÐv¹R=þnDèh·´DÐt¸#–`ʹ�[Žp3‡ÜÐþÏUèRµ Šûï÷¯p¹Ôqþ+u¬r]–z�7¶þ=$�¡^Zþî~¸×ß&Vï}k¶_ çÌ�×�³År²<™3Ô�J™à�^õžqJ(©7³1œØ¿­bÊ6†,âN÷äqÑ Žî¢Èw‚“ÁgvÕ#•ÝÜôŘÍëô¥5 ¼úA×É~»ïÖê ?*�ždÿ'̺ÀÉ�#� ·k¤Á$T &ÏSgÄ©›6LrÉà*ˆ QÒ“*Ú!EâÈdƒ-7ß"tá’…šM—}ëÒźXq1¨Ç¼$Þ¨#ümMl+sZú]0ÖÀÀò2µ.W¤6³}ïÙE2Fö`‘�·–E2–úTmÚedÛ1÷áÂ"¤o!V¯ +Vci�“c©ÈQ3¢—•[AÊ‘Ñ:_ …Dùãü +±Š?WW`«CÃX¤7©•©ˆ€<8¿=Ð'Ø\ó5PÐ@´IÎQýÂ0 BÎÜ9&„jÑ l +µX_VSS­lUOÊ �`YXÝgóOæ…­ô×Ú—tÛ  ¦êÁ1ŽeÕ\TªD5m—†UÓì:âœ+j¼´—Ì,U臢®ñ¬$e»•Š®~ãoKª8"ÜoöUu¡Ç¢ä<ܤs%õUí=Kû2Ô“„ú8ÂŒyGêuî˜x4Ùne‹�,NP[¦•Hu2ÕLgK…;~ôd«Yý³usJ�Àv&ü³˜7îkÒ~ˆ¨×³˜Cµö'MhíwD4¬…üÍe÷Š +¥¹éÚäOÑ䃧œ)ǸëcûÈRc´¨(Ä‘¶<²±ž­�q?]õÇ +‹©ÒCË+§e pÿ2’:PŒZí±Jd€“aƒÐ””og3,Ü[Åôrc‡fè"¸"Ü�Ü +un•^‚�ËÁÓpsK}SG&l'LMQ6ªåì;±Ž +F?º#Ü× R¦ÙޝþøûquGm–j@“xjVRèS4HRˆc 3ß|E?h™¢…—]UïP±jP~·œôlºÈñ ‹„PéCS+6{‡´Ki[¼.DaÆEÏùHç|ƨãñœ�¢˜Ï¸Ë÷½æO«í;ö>NMy q�âÏPÕå�z^¹Ð~ÆyE¡gÔsÎ!׺¢ÐNs&zû„LlÎóÎ2-›Ó~>:2 +†x^Ñ“»Ìúv¯Çwä‹,Ó§ìØ35/¹…òQù{õÆ +ÕS­4ð÷mƒ‰ýMr'œ:F¡©H¾¤/ŠˆÖ .›²Ë~Rô>›²�’fÛß‚µÃ'Ǩ†´àÜè!u<äMoù�xÒƒ_¤'øÐæÿéùuz  Êýÿôü2=µ‰8kƒ^}ƒLÊ_Œðÿ,Ù‚ðVäáÀÕÓ\ì‡xE5a g¢?;•;<ÍÕdGC¾×Ç$I晤¼�9CîÕ¡¨u™Óá™ágGjù$æ*XÐHâÆCï–⺢q°; kgDC)H¯…â{„‚ˆªy«îƒÏ޶´Iø¤;m¶Z^ç×I¨k0&<¿j‰W%:bÆ +$ˆsÜMôIjô­|Ð"†¤P,H›�ÜjT&y̱¸=嫈ÿyŠs6�p7K†/º½©ÔxV÷ +•|í*�⬒~’5ÔPmö+æéX“ýºÝEO5ºÝ>­+ñÚk“¿tç]v7=3æŒÉlî˜-HކèožXÇ�èYÁzUÄÅ�ÕVsw�N [Šž1A͇d«É�ެ¯‰RîNa¨E»˜PÅF{ «”×áLUÀÉ@r$29NdCáAƒó÷‰j2AE«�4DÈZ�y3bFT†#w>Æ=MVo¾îÎßeâ +²‹-.]'mÛ[óãdU7=d e¹Äa;²&.‘Í@ Êj§Â“Óљ˵ÝêLl� +h—°åžmÜ¥ùfè™z ºû'oí¬Ìq£ff[h![Ø/ŸFÚþöØ: +_>-›ˆÅî¢_Ò+µRtê]*a€,MÙªJí„Ñc'ó÷}˜$•�»%¶ÜR5|Œ){è«>×X ªYŽMd¡UÛô£¼ïo«aÙV¹%ò4žg ÷j_à‘+qó»£F©W·¢�D +¨™e÷B)×uµÚ[#~Zšh„kúPà8oX¸�bx°%Òá÷"•—´©,`3O>«%aœ[©³·‹¯'äK}˜éšߓܦ &ƒ¥ñV;‡gµ¡:ÛæährSH*ÄO[ìÑ–|†�_Yb+Ì5–,,‘­ ¦L�«gªŒ‡Àótú±ÖkŽ�IÓ%åh6V¼�A ¿[ËTÀÂco5Íšj?1þòîŒð�vg©Ç&r››ò4º`áF(©èÅ¡K¶QõØýR3J¹Ý¿&T…¥xÇW3â5NdÔéâ–’N)É( +¶�#E†3Uwþ'0ˆïqðâJQ^ +âGŠ©Í¨Ëh±f)>tS”HQRð¢ºÉ€VÕSä�9Ù#å0ŒkXŸÃ©Ö¯du.¸‰Rr…‰r*ÔZç¨ei‘Œ*@Z‹Ã†wSœ‘NÅÖïp½ßC5´ƒÅ™¿‹d:ó\J¼¢ +œ1ºZpJQ ø×3*¸ó-é'ü{š+l,ìµ¥D,‹ù ìgŠ¡Ø‹¥_ÌŠ]øÅÌ13,ÿÕr؈Cª~…\I‘ŒDONÁ+ˆü�…Ä¢çÆ´V¨jI²ÅߺRÄü‹jœX±zæµDÒØ*ŸE!y¶UªØÎ×?üýlˆŽ4T<­HÑ¡œî†@'ÀU.’vàn�4ß­ºÜ?þã6F±½žLVC}!céé_�òÕ�o¾>�‹çåzïí�ò1EI)`”ÏC®%£ ᇥp¹¯¦—o+¦Þ&$+‹b¾¢ŸßH�Nû_jT,Ý/«QïÙhÞˆ ­‡JšZÓ¾õ¬[J½ï)i£mH˜Þ1yô9µ8Ÿq·¿ç�é+c—çü)}ðŠâ�S·´ŸwˆƒFJÚÃ. Š\h?ã¼¢Ð3àÂq¹Ö…vš3‹ ÌZ Ýó¼³ "1IÓ~>Á|Z W#~Üëñy´„Ͼ厨i7´ü²amt|+ñŒŽË13 Uúád&E”G¦Š3’W‰æŠŒó€è‰ÖL"â� ÏZ<Ö…!it¤ô¾m}Àä;�Åì±°¬€ + ësÊ ¦¿HÏÁÝT¤ªœ´úžžrHÿå*:vEÉJçͰnÝ®üHF¼6b5uÑÌblã61Ø=µE¹{‡fý)ð5 +ï¸ÃÏÝׂµ vìoL=º‰ú,{§²qF¯+ÓG<¡K†îvr�ÀíOª}y¸ä{›y'T÷¬úa›P]HZ�‚9I~vDÎ'»^Ár GÒáŽôn›�ÔiÖ2 3‚52²½ý¶�£ÕS`¥NwiÀ >;Ú’SáÍZ1Õëᨲ4ö›<r{_BÂcß +æy�{JlG•2\Z'DIÄH' Øl4ÛÐ%˜Ç¤Ê|áúºOÁba>tBÕ},ý”„Ožµû ¥‹oò{÷Šªø6ûí$«{ªßæŒþ­ÉØ©ýÛ¿tWK–$' Üûu�®‡@€8�7^´ï¿µ"BTÕôŒ73¨“Ê}â#?˳&ô»²ã¯ Øùf|’lqb@iœ¡�}^ÍŠÒPO“1óãgSˆ ¡Ã¤`o�Ï� ¡K*¨Åfõ×2H�®g�îl*gGBkW-ƒû2eªS¼ Re§Ž)ÙEEÏ @ÌÏ«@ç]CŒ˜šç9Ï“�¡HÈ•k§šÇQÊ€Çß7ŠÝ]ã~ÈÜ8Z�Z•ûíTWQ äwJ«;$w#ʶ(ºm—�;²s‡F�zw1/ÿÀä¡H!Ÿqº¦Q�¾L($5Æ‚b×CIÉa.?´“ç›Ï¨!B³«é7æ¡ë·-Ex’äþîLí +ÃßãPÞÑ�ÂèÅ.ø˜€î.?yÎ]“¸KÑ�µC´!Šz Øiù¿š¼Óœ-áÉ‚'èüûe0'~MÔ¤¥à´æ‘Ô`a¸/6ÒgïÑûuú±Þ€!àI"t&(?fù1äCQWFC¬Q%j|èC$ÉžX"©FE×zy2’Äà,wc ¯ÅiǬiŸ‡0Á…�ÌËøXŸ;¨' %ß�¤¥¸l¨À+VöR�Ññç}ëøa²ZÁ—_nE€qv,�¸½¥ðæR§td~æ1ØBL;úUë,áÖ¬*j�'Czg®Á��óQøšhÛ#©�™1b4GJ�0›r;8-.®}m¾ˆ¾º„ŒP{üÈà˜ÃÓ³º¬Žb”%Ûõë#H6ù_ê/¯T{<ãìæc|ÚÕ§=ë‘©Ú«€v-åú¨‹'벉ý¶XɵÄìœ 0ˆÚÔ_DªÜJ¿BãŽ1Åx±k 2{»¾‡ìt‚_'51jþ~âY«>Û 9ZM IswJ�8S|A¨7”f +¿ ¶ø}jÍÄû�ŒI-PÚÔÙý¨u >´·È”bxcÐAcKJ#Û(@C{þP3FàNPpâ‰ú5W�ÈZßFTÔ ªG²'T‚Óñ¢��_�ìŽL~tv׸€ØŸ»€çv¹Ìû \Ùd d9ôŒÄ�勨OÕäŽÛiŸmøÙÉ'«ô�wBF^4Ê—tnËã2W®)EÑ|H(-ê­ÍÔ ðµKk•éF²5Ûy <�âίFÅ¿îÕâ/ 9]�€.AŠ©Ú¸^ÕH$n Aü¸²±ÛãêI é|¼¤fîBÁª\=I8%';� ØÊSIQÒáQÊHw¬…Ê dë‚áãJm'¼½Ís^rF—жý&¯oï|Go)J\°Qó^í¨YAr¢[C5™Aq"Àl Oæ"”Ú˜wƒ Ñô�kÉ×Й�Ãé¥�кø‘ž€Sñ‘»¾ºâFƒ»æâ3¼K&4 8z $?äÙ¸8PqŠÈ—\æñ¨„ëE½ C4á÷Â¡ÄÆßb*9:fIJpµÎÆ·&rœà® žçÕªM,0¹PB$¦] +Ù^‘\/?x^^pŸ_æ¼=!#æ‹âoõ•p+D™^ãå¥tGùÂ>øV�¨&Á2úBãٔܯ!úR¾‰­ØG—ŠÂÅB«Y•óĦuåJ^:Eã,/Ĥ³‹—#¢/IŒ�tűJ¢üV2S†O\³á5ááŒ�G“8+…Q4üE"(3Yªõ«Ä†AšëSw*ë5ޱdoñ¦Fv˜ßÒÆEjåèª%Ùν‹=�Åò¼ãIÆ‘ë4Gå„Lïó1¢¥ñYŸB”-aC<¼® öÉâ@ƒ uH3ꀭmº&^iå™$hQ<ÍÈVHÎòM>‘å7úèÁŸCËúƤ¿´,¼^®¾k•<—ýþ�Oïêþͨc ö\J|‹"K±›fÑ�íªq¿ÁxÒÝT„›ÏJkë÷…�*…�°4'ÙªöFOÐh‚ü¿I)ú®Èàìpô»€ˆæýM¨Ÿ p÷m¿ÀWù¡%Mbîau6¨�%0ÞTêÛºMf¥Í{Ñ F“ð@ I(à/˜½›ÓßzfA¡¥ÜI›�‘ß}7 $Ímša27ÏÞwôè„©FÅ åøâFc}Âß»óì6?CÙ>`#¶R ÜðKŽ6Ó1ôÝœvÿŒsdâsöÚúŒ3�ósÿ$¹¾c°¿ö¯ÛƧ4ÿ¸õx +_a^¤é5œL-�Äî[ç™çŸ9�—9Ä·nd]†FKä$fÌ!¶–Ð`¢#ø ÕçœÒ;Û)»ôH³å˜O[ +¡ù[ZJlñ¬qàs¹�÷×’t¦`ãƒ0±™Ý‰o:òÜ´!9��õ·©¥~ŠÒ>üûÆXRÁ3°�6�Nï´ð¤Ñã4|i.#Ü›b~™—MÃöô}5$%/Ø#›?$ή"ø�‘l³ûG�@²øã¨ê…£`¦]L‘üÇvzÞË‚‡ñ÷CÊž#ªV_¢nùÚ¿A`õÌÒ¡Õ0"úò»žH6·!ZÀ/þUi]¯ ëÔggGùJy†ÐxBížùHVPˆzåQ—A í{O4pa!R€>å¥zöÕ°9�^A§Ûb¿ÈNðè‘ê)((µ¿‰!šC£Å–l·3dZßKÉÛ,qþŠj†Ž%žÂÞ–#”/ob\¹]1Ÿp±eC:Ûo£†€Þ�v–*]'®˜ÒåLuSIÛGF1.À±~”L&�ަºÜ…ùøÖ (ê9?ö�lÖ:y¿Ô‡ááꦒeÂx/Dffˆãíb»XØŽ¼æï(š‘qÉäåhOH&ã(uNZð†äœLv IRÐç�,àd“âÁâ\DdaÜ;4³Nû-–ŒÚmý �hýÚü#„¥»~ýAŒÅ��MõÒÆ¯ª´�k?D¶‰�WÃÔ�Žœ'ˆ˜KE ˜rœü"j>æ;¼Í÷æS�ü+Ö­§µ›œ°WøÛémeýìÏ™w) |`‡¾%(³6ÛÇO:}J7ö3ÄΠDÈ».û¸~ÖIÚhíìxÈu*”)ÑãÂ}ttÃøŒÁÀŸ“v�Ü SDçÌõD’‚*W€–¥Ÿ:Ê‚yt>K»)oïzµÚf‡-?HÊòÉ`nàà†û¢ãÙ‘þ¶,Êav3X~A¤Ïû,ï9�“þ©%”oáw^.÷¤Ùã`M—“hDÎô_˜údY3ì%ÃÉôCù/Î`ljÖ¨x„#iÛæOíãÝ“OQE�­Í¾Õ¬ °ä�ù¡.rÜ_!Ò$‰°aóL)({úð± ³¦È„Aº]üÇ~¹äF’AtÏSÔªÿÏv�@ ÍžÔ‹îY¨ïè™EdU²ŠÍB ˆ‚@1=22ÂÿnVëÆ,Æ â WÏ;\²ž«Úù<¶ÑF‡›‹�MW�Ó¤÷sg¶­]KâK}‘ŒÐVKK*Œ¥·XÊkâ 5_]³™\õ±ÉlwnÊÕ‰Û®FeùN±¨Ìwãm‚ÍÍ®3„jéÿ¹® +ñ`µTÚ'«ý3°Ú\ɺLM¦"t£¤»Åuu†­o-›ÖÏïÈ…ê®§ý�ò1ïš›Áƒø_GX«Šó‡Pµ“bãcxuÈ~ ¯ÂRÚÉÕ øÎU\0e4fjàËË�×ßÎh7sKd ¥Ét*€Ž›"ƒ�ˆ©æ.¼Ïÿ,0“žþ ÐÀÀÌ·7�/J¹Ÿ°å`�±ž�WûÓ‡3ïGïË÷B8¾»cwæD12ÊH\ù`dŽøªÅø‘�úéÒ§…J§˜«gÜŸ;\Ä"�½p˳iû®pº¶€Vð·Ð´fgá^Û­‚1»È Mìv+èS`’®f9@³9ÙG¯‡@:'E5–L>¶döÒDÊ¢ €µ *uP”,‚JÒF ¨C½CÂ¥­zز 0ê'ØÞ`-ÐÓbŸÆXç/}xF½ Å-ªI�¢Ô3„c©�<ÀsÂä¢NŽÛ®Ó¬p-Šù6Cú) +ûƒÉ\¢‹Cn³L‡¢E“\VDP*œ£s LGû–j"*�Œ £ Â){]§�qunÞÆ¾(ø�—c°Š¡È'ùC‘Ô`�jq꼃�~<(‚áœÄ/µÀ/ÅxùñúÛÉÊYI„Ôéëµk –»‘òrwj±­a~•Ò}ùàÑu DÂLBÍBC)Ü}?4 fôKQ^ê�¹~_¨n‡ÄPÀ w‘Ï$òMæhåæ»×Rª5taGRo†v|¼µÚ|½Ë-)Ýt–PLÂ4w™0¯*Šrn ¦w¹ª+xà5G šÛ‡¬äg£â×”3Ó]þ=£:2ÓKçˆ(í Ðê¤õM G¤ÀK¯®·h=;¢âN­e”¿Û§'Û¯áRɪe({û¥ñ*µå¦¹ºÛÚº^»Þ8ú¸•{_&qŒ¼›ƒ\¦ú¾¿ìÌ;�Ý~êyE5ï_éÄ¿_È_Tý'oudunów=É+­·ŽËªŒüå×Ë_þö5\~|½üõ×ËÖÎÛëY»•ÂGK—ÉžùfeCf×PLŸUY:N y!ÇŸ®¿µU‚ŠDŽ|ß&õ] o|y,tÒ“!0ç–×JY�â¼"£…}€Þµ4Öl<-íÀ1Ø×ƒ>$5èç%y'HI¡#{ãðàyi»ùfÊOó™ ëØZå2<“tP“Ì»dcˆñ¶éÛm*«yÌŸ§Ÿ*T×P ùïRFÐf¾QÆU¼‹¸Û}/ê¼ìñDâ^ÉçÏö&|¼àêϲ�N•–-Šðø¯¬‹îL2 œÉüÅR½‹aö˜Ð`\§.ö; ©Zã"Ž·gpÖ}çjBQw=N¿HÓ*lÛHÀ\Òéò¬‘Ñ|ù~”ϯ}^˜FÎßÜÌ_ž`$)ž¾x’‰èè§KŸ(#R[|{~ìï‘°Co@·Ï–í«ÂéV +¿ºƒÓ°ª æÓ¼µ%!Õ~©D5ÇÓàO&b rLØŠ,q›Ÿ†‰[x¶ +¹2ÝC°I$UU@¨\h¨ílÙI°Æ— +`1‹¹&ÌV�LO´,ÒÅ}I|¯Ú|-ºpÅM5ìÞV‡8•²Ø™/Q­uÝ-½¾¬@ruó’¤F‹�Å�btáåè›Ä1h>bÒc�y´Ÿlo瘛NÈk!ð9ŽP²Ù*ŠW¬udÛ¼ú½$ù{¢¥[1‹�²Ú¦%«Mæ»ñ=Íš$K÷ +Éyž¨«J .nJ&©~óFC__Ô3ñ‘ê—\þ®^ßc>dž°QõäV=~Sa–Ï °µ8¬všÌ»õž°T±¿}rMêâå´²ÌQ—…ºù¥ÊfIéR›BQNU^îór£x¢ÙàxŸS.r3.”X•¹÷C“PF¿åeÝÀ+‘L·…êvÅtŒJ¦qÙMþ=*ûoöËG’¢¾N1˜?ÅŸ-ÈÔ)òVŽîoèE$«›;½ZÆ“3ÓÉb™¿Èˆ�$$lÑüµšóã©#óíi÷úå=„æá9×8lÒ]d™ +�_z|ÛM¨à�×ý90$inß¶Š?K™|©fà ^g ²íŸ9e–Ҁܹ_ßñ¬AYûíÎȸy—½?²õòÙ`ö佬cyç²¥¾¿' +s°£–�G¥G˜V [l�Çî·\§Zm�GH>^Ï—ÄPÞ®»v¨¼ceKÊýÒR;lµS=ÿ¤„¼½w‹ú½Ë÷P�ÇÊ––­ µÜú“®ÒÊ@q®Èmí!³sú­aÒx¬ì´Qg€’5"¢g•y®(4óÀT>£÷\ؾ}ø´X¹�[«I½ 0ÀR)%ax~lúöØÔÕX)ÞõÔ–œ2ͼþÔUDgÖwWqçÞ�ëØi¤mÙÓ‡=à ýªçk{S§YsjŸæà’©ÅܳÙ?ÿúÃeÍÔ�ãö¤¼KÐ @d1Ÿ£bšÂ¤=$4ÖexjÌMo-DãýŽõÜ÷2ÔµÙLfŬ{=fDÕŒè>oÿÔ±9­CǾ.,Såobj,/ H�’�7^lÒ9ÇqèËÍ#j/¿_<#çèñÿÏöQé8•VoImD5qÊ—…yj/¢¦0 ÅL¬�³ç̵ô‚»P±°À~É iHÃm|›JuÜ6äRDK²T#TÔhÕ i"rÀ*z™gQôm‡k³Öm×�IÂFÝC®]KV™3¾{Q«à²NHúM¡ë™+#Ñ'î�Mj³4µþeš°,x d¦Š¸ß²ˆñ»Þ–I<:¯I³`¸n† +ˆr'H8+âÍàšíz·Ä€Å 5à®è*±Z|¤†ÆÕW(¸¶‚/öqM(bN¾bãZX+› ÔKדj äŠ�è÷R¡ª¶%e˜[°hÛ%ê9ÞD5„Äþ®èQ–Û§Â Šž^”Í-D¹m®jvY°/‡hñX?šøüÒ· iÇtŒeQÅd&Q˜¸\É%¾ƒ¼-'Gºä~JЉ/)6î�*Ã*®£e-[ÅІ…'\DçsSÈ¢(hUv­•Ø”‚ÁWà%!ÃÙ—uV*öQúÊ*,KD‚O—ùdZÞ”qo‚ 'suÂ^Õxü¿$Õˆ»&ßD½ÀëUöÖæÂWµ±A¬Ú ÉRÃ=Uïwé…õõ—e‘´M�1ü=B #»·˜Ö8ÆÕd´90©ÞYZÓerý Ý¡De£vv! føðÑ…²FXQaFfõŸBíN+iF¯^(*ü*Ë•8`ºlª +f"éö²Ǹ�$m³ýìÝ\ZíRTÑ“{l™;,hùKîIÊ(r&gm¼ÍyS¥S%­È#u)·jØ$Ü¿©Ö9®Øh» +öô´,� +ŒÓ’KÔBçJÍ^]1²Ô¡%VŒ˜}U"²<ƪdç)¼fˆµÂ;abG¼Æ,ðUÚbW¾LAë–¶ÛúúK$ú¶›ÁK–€–K)`åì&"ÊÙ'I²>ҺǤò€Ÿêh\®1ƒNª±�x�@¨ØìÍ+�:«}¼KŠß'[:·H)«}Ùòµ©|ß˰) +°�w¬žÎG ´P£T’ú‡9_‚s 3‰‘ú7™T‘­\o›‰'fÔ<º§i:?®žÏôYž¾v MÐ{,ˆêÎã•÷"¿Ž•pGÒh¾Ñæ/Íø�ma¤NQ×ÛCÔ}0­ÿæ�Ud( +©JNšUD3ÆÛ¥ºl›lŠé±Ð ‡YêÆ´d™‹=쟉×Ð!JQhš vðáÔ‘€ùö´ÍÆûSZÒLsªT#'ºÈú¡zz|ÛM¨à�×ý90$inß¶ŠŸ�Ê_—j»UžöÏœ²„Ð.:=ÍïxÖ ª}‰v'dܼK�ÞÉzùjÐz¥�.Mß}6Û×ß2â`?�F�J�(­·Ø�Ýn¹>Ný!ÿ¿îþ¯»O®»é>Æ7ã3tßo¿ÿúÆ¿¿W²v� endstream endobj 339 0 obj <> endobj 439 0 obj [/ICCBased 87 0 R] endobj 50 0 obj [49 0 R] endobj 440 0 obj <> endobj xref +0 441 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000044837 00000 n +0000000000 00000 f +0001783157 00000 n +0000000000 00000 f +0000000000 00000 f +0000053192 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000053259 00000 n +0000053841 00000 n +0000055117 00000 n +0000120705 00000 n +0000186293 00000 n +0000251881 00000 n +0000317469 00000 n +0000383057 00000 n +0000448645 00000 n +0000514233 00000 n +0000579821 00000 n +0000645409 00000 n +0000710997 00000 n +0000776585 00000 n +0000842173 00000 n +0000863204 00000 n +0000928792 00000 n +0000994380 00000 n +0001059968 00000 n +0001125556 00000 n +0001191144 00000 n +0001256732 00000 n +0000000000 00000 f +0001783591 00000 n +0001784397 00000 n +0001784831 00000 n +0001785563 00000 n +0001548905 00000 n +0001549439 00000 n +0001550171 00000 n +0001550903 00000 n +0000052892 00000 n +0002083709 00000 n +0000044911 00000 n +0000045004 00000 n +0000045098 00000 n +0000045192 00000 n +0001551635 00000 n +0001342578 00000 n +0001343269 00000 n +0001343703 00000 n +0001344435 00000 n +0001344863 00000 n +0000045300 00000 n +0000045702 00000 n +0000046120 00000 n +0000046538 00000 n +0000046956 00000 n +0000047374 00000 n +0000047792 00000 n +0001339207 00000 n +0001342481 00000 n +0000049851 00000 n +0000053079 00000 n +0001335151 00000 n +0001339110 00000 n +0000049708 00000 n +0001330530 00000 n +0001335054 00000 n +0001327121 00000 n +0001330433 00000 n +0001325032 00000 n +0001327024 00000 n +0001322355 00000 n +0001324935 00000 n +0000048210 00000 n +0000049646 00000 n +0001322320 00000 n +0000049886 00000 n +0000050244 00000 n +0000050004 00000 n +0000050124 00000 n +0000052963 00000 n +0000052994 00000 n +0001324997 00000 n +0001327086 00000 n +0001330495 00000 n +0001335116 00000 n +0001339172 00000 n +0001342543 00000 n +0001516977 00000 n +0001544248 00000 n +0001396865 00000 n +0001435111 00000 n +0001435226 00000 n +0001398864 00000 n +0001387959 00000 n +0001388284 00000 n +0001544311 00000 n +0001544653 00000 n +0001544995 00000 n +0001545335 00000 n +0001392780 00000 n +0001545677 00000 n +0001546039 00000 n +0001546401 00000 n +0001546763 00000 n +0001547125 00000 n +0001547484 00000 n +0001547825 00000 n +0001395574 00000 n +0001435386 00000 n +0001516877 00000 n +0001353955 00000 n +0001387895 00000 n +0001388610 00000 n +0001388952 00000 n +0001389292 00000 n +0001389634 00000 n +0001390417 00000 n +0001391197 00000 n +0001391990 00000 n +0001393106 00000 n +0001393465 00000 n +0001393827 00000 n +0001394189 00000 n +0001394551 00000 n +0001394893 00000 n +0001395233 00000 n +0001349909 00000 n +0001353855 00000 n +0001345291 00000 n +0001349809 00000 n +0001349873 00000 n +0001353919 00000 n +0001435350 00000 n +0001423492 00000 n +0001400455 00000 n +0001429311 00000 n +0001423556 00000 n +0001412245 00000 n +0001417879 00000 n +0001412309 00000 n +0001412181 00000 n +0001412117 00000 n +0001412053 00000 n +0001411989 00000 n +0001411925 00000 n +0001411861 00000 n +0001411797 00000 n +0001399853 00000 n +0001405830 00000 n +0001399917 00000 n +0001399789 00000 n +0001399725 00000 n +0001399661 00000 n +0001399597 00000 n +0001399533 00000 n +0001399469 00000 n +0001398800 00000 n +0001396911 00000 n +0001398593 00000 n +0001399009 00000 n +0001399157 00000 n +0001399274 00000 n +0001399378 00000 n +0001400500 00000 n +0001405775 00000 n +0001405946 00000 n +0001406012 00000 n +0001406043 00000 n +0001406335 00000 n +0001411684 00000 n +0001406409 00000 n +0001412845 00000 n +0001417995 00000 n +0001418061 00000 n +0001418092 00000 n +0001418384 00000 n +0001418458 00000 n +0001424089 00000 n +0001429427 00000 n +0001429493 00000 n +0001429524 00000 n +0001429815 00000 n +0001429889 00000 n +0001516941 00000 n +0001548869 00000 n +0001548805 00000 n +0001548741 00000 n +0001548677 00000 n +0001548613 00000 n +0001548549 00000 n +0001548485 00000 n +0001548421 00000 n +0001548357 00000 n +0001548293 00000 n +0001548229 00000 n +0001548165 00000 n +0001716427 00000 n +0001759972 00000 n +0001760036 00000 n +0001760362 00000 n +0001673873 00000 n +0001708793 00000 n +0001708857 00000 n +0001709199 00000 n +0001709539 00000 n +0001709881 00000 n +0001710664 00000 n +0001711444 00000 n +0001712237 00000 n +0001713027 00000 n +0001713386 00000 n +0001713748 00000 n +0001714110 00000 n +0001714472 00000 n +0001714814 00000 n +0001715154 00000 n +0001636750 00000 n +0001671342 00000 n +0001671406 00000 n +0001671748 00000 n +0001672088 00000 n +0001630197 00000 n +0001630982 00000 n +0001631764 00000 n +0001632557 00000 n +0001633347 00000 n +0001633709 00000 n +0001634071 00000 n +0001634433 00000 n +0001672430 00000 n +0001672772 00000 n +0001673112 00000 n +0001593998 00000 n +0001629109 00000 n +0001629173 00000 n +0001629515 00000 n +0001629855 00000 n +0001634795 00000 n +0001635137 00000 n +0001635477 00000 n +0001552367 00000 n +0001586356 00000 n +0001586420 00000 n +0001586762 00000 n +0001587102 00000 n +0001587444 00000 n +0001588227 00000 n +0001589010 00000 n +0001589803 00000 n +0001590596 00000 n +0001590955 00000 n +0001591317 00000 n +0001591679 00000 n +0001592041 00000 n +0001592383 00000 n +0001592725 00000 n +0001593962 00000 n +0001593898 00000 n +0001593834 00000 n +0001593770 00000 n +0001593706 00000 n +0001593642 00000 n +0001593578 00000 n +0001593514 00000 n +0001593450 00000 n +0001593386 00000 n +0001593322 00000 n +0001593258 00000 n +0001593194 00000 n +0001593130 00000 n +0001593066 00000 n +0001636714 00000 n +0001636650 00000 n +0001636586 00000 n +0001636522 00000 n +0001636458 00000 n +0001636394 00000 n +0001636330 00000 n +0001636266 00000 n +0001636202 00000 n +0001636138 00000 n +0001636074 00000 n +0001636010 00000 n +0001635946 00000 n +0001635882 00000 n +0001635818 00000 n +0001673837 00000 n +0001673773 00000 n +0001673709 00000 n +0001673645 00000 n +0001673581 00000 n +0001673517 00000 n +0001673453 00000 n +0001716391 00000 n +0001716327 00000 n +0001716263 00000 n +0001716199 00000 n +0001716135 00000 n +0001716071 00000 n +0001716007 00000 n +0001715943 00000 n +0001715879 00000 n +0001715815 00000 n +0001715751 00000 n +0001715687 00000 n +0001715623 00000 n +0001715559 00000 n +0001715495 00000 n +0001783121 00000 n +0001771927 00000 n +0001777527 00000 n +0001771991 00000 n +0001760688 00000 n +0001766320 00000 n +0001760752 00000 n +0001761292 00000 n +0001766436 00000 n +0001766502 00000 n +0001766533 00000 n +0001766825 00000 n +0001766899 00000 n +0001772512 00000 n +0001777643 00000 n +0001777709 00000 n +0001777740 00000 n +0001778032 00000 n +0001778106 00000 n +0002018868 00000 n +0002083609 00000 n +0002018469 00000 n +0001980866 00000 n +0001996006 00000 n +0001996070 00000 n +0001996396 00000 n +0001996753 00000 n +0001997110 00000 n +0001997517 00000 n +0001997921 00000 n +0001998325 00000 n +0001998732 00000 n +0001999139 00000 n +0001999546 00000 n +0001999953 00000 n +0002000358 00000 n +0002000765 00000 n +0002001172 00000 n +0002001577 00000 n +0002001982 00000 n +0002002384 00000 n +0002002786 00000 n +0002003189 00000 n +0002003546 00000 n +0002003903 00000 n +0002004257 00000 n +0002004614 00000 n +0002004971 00000 n +0002005328 00000 n +0001903331 00000 n +0001980766 00000 n +0001867888 00000 n +0001896119 00000 n +0001896183 00000 n +0001896523 00000 n +0001896865 00000 n +0001897207 00000 n +0001898001 00000 n +0001898789 00000 n +0001899575 00000 n +0001900355 00000 n +0001900716 00000 n +0001901078 00000 n +0001901437 00000 n +0001901779 00000 n +0001902121 00000 n +0001785986 00000 n +0001867788 00000 n +0001867852 00000 n +0001903295 00000 n +0001903231 00000 n +0001903167 00000 n +0001903103 00000 n +0001903039 00000 n +0001902975 00000 n +0001902911 00000 n +0001902847 00000 n +0001902783 00000 n +0001902719 00000 n +0001902655 00000 n +0001902591 00000 n +0001902527 00000 n +0001902463 00000 n +0001980830 00000 n +0002018832 00000 n +0002007221 00000 n +0002012856 00000 n +0002007285 00000 n +0002007157 00000 n +0002007093 00000 n +0002007029 00000 n +0002006965 00000 n +0002006901 00000 n +0002006837 00000 n +0002006773 00000 n +0002006709 00000 n +0002006645 00000 n +0002006581 00000 n +0002006517 00000 n +0002006453 00000 n +0002006389 00000 n +0002006325 00000 n +0002006261 00000 n +0002006197 00000 n +0002006133 00000 n +0002006069 00000 n +0002006005 00000 n +0002005941 00000 n +0002005877 00000 n +0002005813 00000 n +0002005749 00000 n +0002005685 00000 n +0002007822 00000 n +0002012972 00000 n +0002013038 00000 n +0002013069 00000 n +0002013361 00000 n +0002013435 00000 n +0002018614 00000 n +0002018711 00000 n +0002083673 00000 n +0002083734 00000 n +trailer <]>> startxref 2083937 %%EOF \ No newline at end of file diff --git a/design/logo/Esla_vector-17.svg b/design/logo/Esla_vector-17.svg new file mode 100644 index 0000000..34e87ae --- /dev/null +++ b/design/logo/Esla_vector-17.svg @@ -0,0 +1 @@ +Esla_vector \ No newline at end of file diff --git a/design/logo/Esla_vector-18.svg b/design/logo/Esla_vector-18.svg new file mode 100644 index 0000000..d768cd7 --- /dev/null +++ b/design/logo/Esla_vector-18.svg @@ -0,0 +1 @@ +Esla_vector \ No newline at end of file diff --git a/design/logo/Esla_vector-19.svg b/design/logo/Esla_vector-19.svg new file mode 100644 index 0000000..830c79d --- /dev/null +++ b/design/logo/Esla_vector-19.svg @@ -0,0 +1 @@ +Esla_vector \ No newline at end of file diff --git a/design/logo/Esla_vector-20.svg b/design/logo/Esla_vector-20.svg new file mode 100644 index 0000000..ca7ae43 --- /dev/null +++ b/design/logo/Esla_vector-20.svg @@ -0,0 +1 @@ +Esla_vector \ No newline at end of file diff --git a/design/logo/Esla_vector-21.svg b/design/logo/Esla_vector-21.svg new file mode 100644 index 0000000..62097b9 --- /dev/null +++ b/design/logo/Esla_vector-21.svg @@ -0,0 +1 @@ +Esla_vector \ No newline at end of file diff --git a/design/logo/Esla_vector-22.svg b/design/logo/Esla_vector-22.svg new file mode 100644 index 0000000..bc608fa --- /dev/null +++ b/design/logo/Esla_vector-22.svg @@ -0,0 +1 @@ +Esla_vector \ No newline at end of file diff --git a/design/logo/elsa-logo-glass.png b/design/logo/elsa-logo-glass.png new file mode 100644 index 0000000..8a4d3f0 Binary files /dev/null and b/design/logo/elsa-logo-glass.png differ diff --git a/design/screenshots/elsa-studio-login.png b/design/screenshots/elsa-studio-login.png new file mode 100644 index 0000000..486dbbd Binary files /dev/null and b/design/screenshots/elsa-studio-login.png differ diff --git a/design/screenshots/http-hello-world-workflow-designer.png b/design/screenshots/http-hello-world-workflow-designer.png new file mode 100644 index 0000000..27e66d8 Binary files /dev/null and b/design/screenshots/http-hello-world-workflow-designer.png differ diff --git a/design/screenshots/http-send-email-workflow-designer.png b/design/screenshots/http-send-email-workflow-designer.png new file mode 100644 index 0000000..994a03e Binary files /dev/null and b/design/screenshots/http-send-email-workflow-designer.png differ diff --git a/doc/adr/0001-record-architecture-decisions.md b/doc/adr/0001-record-architecture-decisions.md new file mode 100644 index 0000000..4deea1a --- /dev/null +++ b/doc/adr/0001-record-architecture-decisions.md @@ -0,0 +1,19 @@ +# 1. Record architecture decisions + +Date: 2025-04-01 + +## Status + +Accepted + +## Context + +We need to record the architectural decisions made on this project. + +## Decision + +We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). + +## Consequences + +See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools). diff --git a/doc/adr/0002-fault-propagation-from-child-to-parent-activities.md b/doc/adr/0002-fault-propagation-from-child-to-parent-activities.md new file mode 100644 index 0000000..3bd184d --- /dev/null +++ b/doc/adr/0002-fault-propagation-from-child-to-parent-activities.md @@ -0,0 +1,23 @@ +# 2. Fault Propagation from Child to Parent Activities + +Date: 2025-04-01 + +## Status + +Accepted + +## Context +When an activity throws an exception during execution, the `ExceptionHandlingMiddleware` is responsible for handling the fault. In addition to logging the exception and recording an incident, it also explicitly faults all ancestor activities using the `GetAncestors()` method and calling `TransitionTo(ActivityStatus.Faulted)` on each one. + +At the time of implementing this behavior, the rationale was likely to bubble up the fault status to allow Elsa Studio to display that a given activity has one or more faulting descendant activities. + +However, this behavior causes unintended side effects when the faulted activity is later resumed and completes successfully. Since the parent (e.g., a `Flowchart`) was faulted earlier, it remains in a `Faulted` state, unaware that the child it depends on has now succeeded. As a result, the Flowchart itself never reaches `Completed`, and the entire workflow instance is stuck in `Faulted` or `Running`, depending on the selected fault strategy. + +## Decision +A new field will be introduced that represents an aggregate count of the faults occurring in descendant activities. + +## Consequences +- Allows composite activities to reflect a failed state immediately and consistently when one of their children fails. + +## Alternatives Considered +- Query descendants at runtime to get an aggregate fault count instead. However, this is an expensive operation that can be time consuming. diff --git a/doc/adr/0003-direct-bookmark-management-in-workflowexecutioncontext.md b/doc/adr/0003-direct-bookmark-management-in-workflowexecutioncontext.md new file mode 100644 index 0000000..755e5fd --- /dev/null +++ b/doc/adr/0003-direct-bookmark-management-in-workflowexecutioncontext.md @@ -0,0 +1,40 @@ +# 3. Direct Bookmark Management in WorkflowExecutionContext + +Date: 2025-04-01 + +## Status + +Accepted + +## Context +Currently, `ActivityExecutionContext` maintains a temporary list of bookmarks created by the activity during its execution. After the activity completes, a middleware is responsible for copying these bookmarks into the `WorkflowExecutionContext.Bookmarks` list, which is then persisted to the database. + +This architecture leads to a subtle issue upon resumption: +- When a workflow is resumed from a persisted state, only the `WorkflowExecutionContext` and its `Bookmarks` are restored from the database. +- The `ActivityExecutionContext`'s temporary `Bookmarks` list remains empty. +- As a result, if the resumed activity attempts to cancel (or modify) its previously created bookmarks, it cannot, because it has no access to them—changes are not tracked. + +However, there is an existing convention that determines that if an activity created a bookmark during its execution, the activity will not automatically complete. +Specifically, this is implemented in the `AutoCompleteBehavior`, which is installed by the `CodeActivity` and possibly by custom activities. +To keep this behavior in tact, we will still maintain a private list of bookmarks, one that is explicitly purposed for maintaining *new** bookmarks, temporarily for the lifetime of the ActivityExecutionContext in memory. + +## Decision +Eliminate the temporary `Bookmarks` list in `ActivityExecutionContext`. Instead, have activities add bookmarks directly to the `WorkflowExecutionContext.Bookmarks` list. + +This is possible and safe because each `Bookmark` already contains: +- A reference to the originating `ActivityId` +- A reference to the originating `ActivityInstanceId` + +These references allow accurate tracking and filtering of bookmarks, even when multiple activities are active. + +Additionally, maintain a new temporary bookmarks list that explicitly stores newly created bookmarks. This list does not have to be copied into the WorkflowExecutionContext's Bookmarks property, given that this property will now be updated directly. + +## Consequences + +- Simplifies the architecture by removing the need for middleware to copy bookmarks post-execution. +- Fixes a bug where resumed activities could not cancel their previously created bookmarks. +- Reduces the chance of inconsistencies between temporary and persisted bookmark state. +- Ensures bookmark changes are always applied to the persisted, canonical source of truth. + +## Alternatives Considered +- Keep the existing temporary list and enhance the system to hydrate the `ActivityExecutionContext.Bookmarks` list on resume. Rejected due to added complexity and duplication of state. diff --git a/doc/adr/0004-activity-execution-snapshots.md b/doc/adr/0004-activity-execution-snapshots.md new file mode 100644 index 0000000..f0ff799 --- /dev/null +++ b/doc/adr/0004-activity-execution-snapshots.md @@ -0,0 +1,28 @@ +# 4. Activity Execution Snapshots + +**Date:** 2025-08-04 +**Status:** Accepted + +## Context + +Today the `ActivityExecutionContext` is persisted only at *commit points*. +If an activity references a workflow variable that changes after it has run—but before the next commit—the value saved is the *later* value, not the one that existed when the activity executed. +As a result, the Workflow Instance Viewer shows misleading data: users expect to see the variable values *at execution time*, not at commit time. + +## Decision + +Capture a **snapshot** of the `ActivityExecutionContext` immediately when an activity executes. +The snapshot must include: + +* All workflow variables and their values at that moment. +* Any other execution-specific metadata required for replay or inspection. + +The snapshot is created by serializing the `ActivityExecutionRecord` to JSON and storing it in the database. +The persistence layer will be updated to handle this new snapshot field, ensuring it is stored alongside the activity execution record. + +## Consequences + +* The Workflow Instance Viewer will now display the exact state that the activity saw, eliminating confusion during debugging and auditing. +* Additional storage will be consumed for each snapshot. We accept this overhead in exchange for correctness and developer experience. +* Existing persistence schemas will require a non-breaking migration to store the snapshot payload. +* Workflow instances before this change will not have snapshots, but they will still be replayable even if the variable values are not accurate at execution time. \ No newline at end of file diff --git a/doc/adr/0005-tenant-deleted-event.md b/doc/adr/0005-tenant-deleted-event.md new file mode 100644 index 0000000..d0d2fa9 --- /dev/null +++ b/doc/adr/0005-tenant-deleted-event.md @@ -0,0 +1,23 @@ +# 5. Tenant Deleted Event + +Date: 2025-08-05 + +## Status + +Accepted + +## Context + +As outlined in issue [#6661](https://github.com/elsa-workflows/elsa-core/issues/6661), there is a need to differentiate between **Tenant Deactivating** and **Tenant Deleting** events. + +Currently, the `TenantDeactivated` event is used to unregister timer-based triggers. However, this causes the triggers to be unregistered when the application host shuts down, which is not the desired behavior. Instead, we want the triggers to remain registered until the tenant is explicitly deleted. + +## Decision + +To address this, we will introduce a new event called `TenantDeleted`. This event will be raised when a tenant is deleted and will be responsible for unregistering timer-based triggers. This ensures that the triggers remain active until the tenant is explicitly deleted. + +## Consequences + +- Timer-based triggers will no longer be unregistered during tenant deactivation. Instead, they will remain active until the tenant is deleted. +- The `TenantDeactivated` event will continue to be used for deactivating tenants without affecting the registration of timer-based triggers. +- The new `TenantDeleted` event will specifically handle the cleanup of resources associated with a tenant when it is deleted, ensuring a clear separation of responsibilities. diff --git a/doc/adr/graph.dot b/doc/adr/graph.dot new file mode 100644 index 0000000..4818df2 --- /dev/null +++ b/doc/adr/graph.dot @@ -0,0 +1,14 @@ +digraph { +node [shape=plaintext]; +subgraph { +_1 [label="1. Record architecture decisions"; URL="0001-record-architecture-decisions.html"]; +_2 [label="2. Fault Propagation from Child to Parent Activities"; URL="0002-fault-propagation-from-child-to-parent-activities.html"]; +_1 -> _2 [style="dotted", weight=1]; +_3 [label="3. Direct Bookmark Management in WorkflowExecutionContext"; URL="0003-direct-bookmark-management-in-workflowexecutioncontext.html"]; +_2 -> _3 [style="dotted", weight=1]; +_4 [label="4. Activity Execution Snapshots"; URL="0004-activity-execution-snapshots.html"]; +_3 -> _4 [style="dotted", weight=1]; +_5 [label="5. Tenant Deleted Event"; URL="0005-tenant-deleted-event.html"]; +_4 -> _5 [style="dotted", weight=1]; +} +} \ No newline at end of file diff --git a/doc/adr/toc.md b/doc/adr/toc.md new file mode 100644 index 0000000..26b1568 --- /dev/null +++ b/doc/adr/toc.md @@ -0,0 +1,7 @@ +# Architecture Decision Records + +* [1. Record architecture decisions](0001-record-architecture-decisions.md) +* [2. Fault Propagation from Child to Parent Activities](0002-fault-propagation-from-child-to-parent-activities.md) +* [3. Direct Bookmark Management in WorkflowExecutionContext](0003-direct-bookmark-management-in-workflowexecutioncontext.md) +* [4. Activity Execution Snapshots](0004-activity-execution-snapshots.md) +* [5. Tenant Deleted Event](0005-tenant-deleted-event.md) \ No newline at end of file diff --git a/doc/bounty/bounty-announcement-template.md b/doc/bounty/bounty-announcement-template.md new file mode 100644 index 0000000..b351e9e --- /dev/null +++ b/doc/bounty/bounty-announcement-template.md @@ -0,0 +1,17 @@ +## Bounty Candidacy Announcement + +I am announcing my intention to tackle this bounty issue. Below is my acknowledgment of the key eligibility requirements and rules of the Elsa Workflows Bounty Hunting Program: + +- [ ] I have a GitHub account set up for receiving payments via GitHub Sponsors. +- [ ] I understand this issue is assigned on a "First Come, First Served" basis. +- [ ] I am aware of the specific time limit for this issue and commit to submitting my solution within this timeframe. +- [ ] I understand that I must first describe my proposed solution in a comment on this issue or via a discussion linked to this bounty, before starting my work. +- [ ] I have reviewed the [Bounty Hunting Program Guidelines](#5211) in detail. + +**GitHub Username**: `YourGitHubUsernameHere` + +**Estimated Start Date**: `YYYY-MM-DD` + +**Notes/Comments**: `Any additional comments or notes you wish to add` + +By checking the boxes above, I signify my understanding and acceptance of the program rules and confirm my intent to proceed with resolving this issue as per the guidelines of the Elsa Workflows Bounty Hunting Program. diff --git a/doc/bounty/bounty-footer.md b/doc/bounty/bounty-footer.md new file mode 100644 index 0000000..18cd670 --- /dev/null +++ b/doc/bounty/bounty-footer.md @@ -0,0 +1,35 @@ +â­� **This Issue is Part of the Elsa Workflows Bounty Hunting Program** â­� + +Are you ready to contribute and earn rewards for your efforts? +This issue offers a bounty for the first eligible contributor who successfully resolves it within the designated time limit, according to our comprehensive program rules. + +**Before You Start**: +- Ensure you have a GitHub account set up to receive payments via GitHub Sponsors. +- Publicly announce your intention to tackle this issue by commenting below. This follows our "First Come, First Served" rule. +- Be aware of the specific time limit for this issue, as failing to submit a solution within this timeframe may open the opportunity for others. + +📜 **For a detailed overview of participation, submission guidelines, and the process for claiming rewards, please visit our [Bounty Hunting Program Guidelines](https://github.com/elsa-workflows/elsa-core/issues/5211).** + +To announce your intention to claim this bounty, please comment below. You can use this template: + +\`\`\`markdown +## Bounty Candidacy Announcement + +I am announcing my intention to tackle this bounty issue. Below is my acknowledgment of the key eligibility requirements and rules of the Elsa Workflows Bounty Hunting Program: + +- [ ] I have a GitHub account set up for receiving payments via GitHub Sponsors. +- [ ] I understand this issue is assigned on a "First Come, First Served" basis. +- [ ] I am aware of the specific time limit for this issue and commit to submitting my solution within this timeframe. +- [ ] I understand that I must first describe my proposed solution in a comment on this issue or via a discussion linked to this bounty, before starting my work. +- [ ] I have reviewed the [Bounty Hunting Program Guidelines](#5211) in detail. + +**GitHub Username**: \`YourGitHubUsernameHere\` + +**Estimated Start Date**: \`YYYY-MM-DD\` + +**Notes/Comments**: \`Any additional comments or notes you wish to add\` + +By checking the boxes above, I signify my understanding and acceptance of the program rules and confirm my intent to proceed with resolving this issue as per the guidelines of the Elsa Workflows Bounty Hunting Program. +\`\`\` + +We value your contributions to Elsa Workflows and are excited to see the innovative solutions you bring. Let's enhance Elsa Workflows together! \ No newline at end of file diff --git a/doc/bounty/bounty-quality-standards.md b/doc/bounty/bounty-quality-standards.md new file mode 100644 index 0000000..dd24072 --- /dev/null +++ b/doc/bounty/bounty-quality-standards.md @@ -0,0 +1,40 @@ +# Pull Request Quality Standard Checklist + +## Coding Standards +- [ ] Follows [Microsoft's coding guidelines](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions), with the following exceptions: + - **Use of `var`**: Use `var` for variable declarations consistently. See rationale below. + +## Documentation +- [ ] XML comments provided for all public members. +- [ ] Inline comments explain complex logic. + +## Testing +- [ ] Unit tests cover critical functions. +- [ ] Integration tests for major workflows. +- [ ] High code coverage. + +## Code Review +- [ ] Peer review completed. +- [ ] Passes automated code analysis. + +## Continuous Integration +- [ ] CI checks pass (builds, tests, style checks). + +## Performance and Security +- [ ] Performance is optimized where necessary. +- [ ] Security best practices followed. + +## Dependencies and Compatibility +- [ ] Dependencies are managed and up to date. +- [ ] No breaking changes without documentation. + +### Rationale for Using `var` + +We have chosen to use `var` consistently in our codebase for the following reasons: + +1. **Cleaner Code**: Using `var` reduces visual clutter and makes the code cleaner and more readable. It helps avoid redundant type information, especially when the type is already apparent from the right-hand side of the declaration. +2. **Modern IDEs**: Tools like Visual Studio and other modern IDEs provide features such as hover or tool tips that easily display variable types, alleviating concerns about readability. This makes it unnecessary to explicitly specify the type, as it can be easily inferred by the developer. +3. **Consistency and Maintenance**: Consistent use of `var` across the codebase promotes uniformity and reduces the mental load on developers. It simplifies refactoring because changes to the type do not require updating the variable declaration. +4. **Focus on Logic**: By using `var`, developers can focus on the logic and functionality of the code rather than getting bogged down by type details. This is particularly beneficial in complex expressions and LINQ queries where the type is often verbose and less important than the expression itself. + +These points align with the insights from Chris Schaller's blog post "To var or not to var," which emphasizes that using `var` can lead to more maintainable and readable code in the context of modern development environments. diff --git a/docker/.dockerignore b/docker/.dockerignore new file mode 100644 index 0000000..af50df1 --- /dev/null +++ b/docker/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/docker/ElsaServer-Datadog.Dockerfile b/docker/ElsaServer-Datadog.Dockerfile new file mode 100644 index 0000000..7d5022c --- /dev/null +++ b/docker/ElsaServer-Datadog.Dockerfile @@ -0,0 +1,57 @@ +# Version: 1 +# Description: Dockerfile for building and running Elsa Server + +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build +WORKDIR /source + +# Copy sources. +COPY src/. ./src +COPY ./NuGet.Config ./ +COPY *.props ./ + +# Restore packages. +RUN dotnet restore "./src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj" + +# Build and publish (UseAppHost=false creates platform independent binaries). +WORKDIR /source/src/bundles/Elsa.Server.Web +RUN dotnet build "Elsa.Server.Web.csproj" -c Release -o /app/build +RUN dotnet publish "Elsa.Server.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 + +# Move binaries into smaller base image. +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base +WORKDIR /app +COPY --from=build /app/publish ./ + +# Install Python 3.11 +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3.11 \ + python3.11-dev \ + libpython3.11 \ + python3-pip && \ + rm -rf /var/lib/apt/lists/* + +# Set PYTHONNET_PYDLL environment variable +ENV PYTHONNET_PYDLL=/usr/lib/aarch64-linux-gnu/libpython3.11.so + +# Install dependencies +RUN apt-get update && apt-get install -y wget unzip curl + +# Set environment variables for OpenTelemetry Auto-Instrumentation +ENV OTEL_DOTNET_AUTO_HOME=/otel +ENV OTEL_LOG_LEVEL="debug" + +# Download and extract OpenTelemetry Auto-Instrumentation +ARG OTEL_VERSION=1.7.0 +RUN mkdir /otel +RUN curl -L -o /otel/otel-dotnet-install.sh https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/download/v${OTEL_VERSION}/otel-dotnet-auto-install.sh +RUN chmod +x /otel/otel-dotnet-install.sh +RUN /bin/bash /otel/otel-dotnet-install.sh + +# Provide necessary permissions for the script to execute +RUN chmod +x /otel/instrument.sh + +EXPOSE 8080/tcp +EXPOSE 443/tcp + +# Instrument the application and start it +ENTRYPOINT ["/bin/bash", "-c", "source /otel/instrument.sh && dotnet Elsa.Server.Web.dll"] \ No newline at end of file diff --git a/docker/ElsaServer.Dockerfile b/docker/ElsaServer.Dockerfile new file mode 100644 index 0000000..b31307e --- /dev/null +++ b/docker/ElsaServer.Dockerfile @@ -0,0 +1,35 @@ +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build +WORKDIR /source + +# copy sources. +COPY src/. ./src +COPY ./NuGet.Config ./ +COPY *.props ./ + +# restore packages. +RUN dotnet restore "./src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj" + +# build and publish (UseAppHost=false creates platform independent binaries). +WORKDIR /source/src/apps/Elsa.Server.Web +RUN dotnet build "Elsa.Server.Web.csproj" -c Release -o /app/build +RUN dotnet publish "Elsa.Server.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 + +# move binaries into smaller base image. +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base +WORKDIR /app +COPY --from=build /app/publish ./ + +# Install Python 3.11 +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3.11 \ + python3.11-dev \ + libpython3.11 \ + python3-pip && \ + rm -rf /var/lib/apt/lists/* + +# Set PYTHONNET_PYDLL environment variable +ENV PYTHONNET_PYDLL=/usr/lib/aarch64-linux-gnu/libpython3.11.so + +EXPOSE 8080/tcp +EXPOSE 443/tcp +ENTRYPOINT ["dotnet", "Elsa.Server.Web.dll"] diff --git a/docker/ElsaServerAndStudio.Dockerfile b/docker/ElsaServerAndStudio.Dockerfile new file mode 100644 index 0000000..27b33e9 --- /dev/null +++ b/docker/ElsaServerAndStudio.Dockerfile @@ -0,0 +1,36 @@ +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build +WORKDIR /source + +# copy sources. +COPY src/. ./src +COPY ./NuGet.Config ./ +COPY *.props ./ + +# restore packages. +RUN dotnet restore "./src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj" +RUN dotnet restore "./src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj" + +# build and publish (UseAppHost=false creates platform independent binaries). +WORKDIR /source/src/apps/Elsa.ServerAndStudio.Web +RUN dotnet build "Elsa.ServerAndStudio.Web.csproj" -c Release -o /app/build +RUN dotnet publish "Elsa.ServerAndStudio.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 + +# move binaries into smaller base image. +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base +WORKDIR /app +COPY --from=build /app/publish ./ + +# Install Python 3.11 +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3.11 \ + python3.11-dev \ + libpython3.11 \ + python3-pip && \ + rm -rf /var/lib/apt/lists/* + +# Set PYTHONNET_PYDLL environment variable +ENV PYTHONNET_PYDLL=/usr/lib/aarch64-linux-gnu/libpython3.11.so + +EXPOSE 8080/tcp +EXPOSE 443/tcp +ENTRYPOINT ["dotnet", "Elsa.ServerAndStudio.Web.dll"] diff --git a/docker/ElsaStudio.Dockerfile b/docker/ElsaStudio.Dockerfile new file mode 100644 index 0000000..7f2eba8 --- /dev/null +++ b/docker/ElsaStudio.Dockerfile @@ -0,0 +1,25 @@ +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build +WORKDIR /source + +# copy sources. +COPY src/. ./src +COPY ./NuGet.Config ./ +COPY *.props ./ + +# restore packages. +RUN dotnet restore "./src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj" +RUN dotnet restore "./src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj" + +# build and publish (UseAppHost=false creates platform independent binaries). +WORKDIR /source/src/apps/Elsa.Studio.Web +RUN dotnet build "Elsa.Studio.Web.csproj" -c Release -o /app/build +RUN dotnet publish "Elsa.Studio.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 + +# move binaries into smaller base image. +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base +WORKDIR /app +COPY --from=build /app/publish ./ + +EXPOSE 8080/tcp +EXPOSE 443/tcp +ENTRYPOINT ["dotnet", "Elsa.Studio.Web.dll"] diff --git a/docker/docker-compose-datadog+otel-collector.yml b/docker/docker-compose-datadog+otel-collector.yml new file mode 100644 index 0000000..20a0565 --- /dev/null +++ b/docker/docker-compose-datadog+otel-collector.yml @@ -0,0 +1,115 @@ +services: + postgres: + image: postgres:latest + command: -c 'max_connections=2000' + environment: + POSTGRES_USER: elsa + POSTGRES_PASSWORD: elsa + POSTGRES_DB: elsa + volumes: + - postgres-data:/var/lib/postgresql/data + ports: + - "5432:5432" + + rabbitmq: + image: "rabbitmq:3-management" + ports: + - "15672:15672" + - "5672:5672" + + redis: + image: redis:latest + ports: + - "127.0.0.1:6379:6379" + + elsa-server: + pull_policy: always + build: + context: ../. + dockerfile: ./docker/ElsaServer-Datadog.Dockerfile + depends_on: + - postgres + - rabbitmq + - redis + - otel-collector + environment: + DD_AGENT_HOST: datadog-agent + DD_ENV: development + DD_TRACE_DEBUG: true + DD_TRACE_OTEL_ENABLED: true + DD_SERVICE: "Elsa Server" + DD_VERSION: "3.3.0" + # OpenTelemetry environment variables + OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector:4317" # Point to OpenTelemetry Collector + OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" # Use gRPC for OTLP + OTEL_TRACES_EXPORTER: "otlp" + OTEL_METRICS_EXPORTER: "otlp" + OTEL_LOGS_EXPORTER: "otpl" + OTEL_RESOURCE_ATTRIBUTES: "service.name=elsa-server-local,service.version=3.2.1-blueberry,deployment.environment=development" + OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES: "Elsa.Workflows" + OTEL_DOTNET_AUTO_INSTRUMENTATION_ENABLED: "true" + OTEL_LOG_LEVEL: "debug" + OTEL_DOTNET_AUTO_RESOURCE_DETECTOR_ENABLED: "true" + OTEL_DOTNET_AUTO_LOGS_CONSOLE_EXPORTER_ENABLED: "true" + OTEL_DOTNET_AUTO_METRICS_CONSOLE_EXPORTER_ENABLED: "true" + OTEL_DOTNET_AUTO_TRACES_CONSOLE_EXPORTER_ENABLED: "true" + + ASPNETCORE_ENVIRONMENT: Development + PYTHONNET_PYDLL: /opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/bin/python3.11 + PYTHONNET_RUNTIME: coreclr + CONNECTIONSTRINGS__POSTGRESQL: "Server=postgres;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer" + CONNECTIONSTRINGS__RABBITMQ: "amqp://guest:guest@rabbitmq:5672/" + CONNECTIONSTRINGS__REDIS: "redis:6379" + DISTRIBUTEDLOCKPROVIDER: "Postgres" + ports: + - "13000:8080" + + elsa-studio: + pull_policy: always + build: + context: ../. + dockerfile: ./docker/ElsaStudio.Dockerfile + environment: + ASPNETCORE_ENVIRONMENT: Development + ELSASERVER__URL: "http://localhost:13000/elsa/api" + ports: + - "14000:8080" + + otel-collector: + image: otel/opentelemetry-collector-contrib:latest + volumes: + - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml + command: [ "--config", "/etc/otel-collector-config.yaml", "--feature-gates", "-component.UseLocalHostAsDefaultHost" ] + environment: + DD_API_KEY: "secret api key" + DD_SITE: "datadoghq.eu" + ports: + - "13133:13133" + - "4317:4317" + - "4318:4318" + + datadog-agent: + image: datadog/agent:latest + environment: + DD_API_KEY: "" + DD_SITE: "datadoghq.eu" + DD_HOSTNAME: "otel-collector" + DD_LOGS_ENABLED: "true" + DD_OTLP_CONFIG_LOGS_ENABLED: "true" + DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL: "true" + DD_APM_ENABLED: "true" + DD_APM_NON_LOCAL_TRAFFIC: "true" + DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT: 0.0.0.0:4317 # The Datadog Agent expects traces from OpenTelemetry Collector + DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT: 0.0.0.0:4318 + + # Service autodiscovery + DD_AC_INCLUDE: "name:postgres,name:rabbitmq,name:redis,name:elsa-server" + DD_AC_EXCLUDE: "name:datadog-agent" + + ports: + - "8126:8126" + - "14317:4317" + - "14318:4318" + +volumes: + postgres-data: \ No newline at end of file diff --git a/docker/docker-compose-kafka.yml b/docker/docker-compose-kafka.yml new file mode 100644 index 0000000..106510d --- /dev/null +++ b/docker/docker-compose-kafka.yml @@ -0,0 +1,167 @@ +--- +version: '2' +services: + + broker: + image: confluentinc/cp-kafka:7.7.1 + hostname: broker + container_name: broker + ports: + - "9092:9092" + - "9101:9101" + environment: + KAFKA_NODE_ID: 1 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT' + KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092' + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 + KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 + KAFKA_JMX_PORT: 9101 + KAFKA_JMX_HOSTNAME: localhost + KAFKA_PROCESS_ROLES: 'broker,controller' + KAFKA_CONTROLLER_QUORUM_VOTERS: '1@broker:29093' + KAFKA_LISTENERS: 'PLAINTEXT://broker:29092,CONTROLLER://broker:29093,PLAINTEXT_HOST://0.0.0.0:9092' + KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT' + KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER' + KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs' + # Replace CLUSTER_ID with a unique base64 UUID using "bin/kafka-storage.sh random-uuid" + # See https://docs.confluent.io/kafka/operations-tools/kafka-tools.html#kafka-storage-sh + CLUSTER_ID: 'MkU3OEVBNTcwNTJENDM2Qk' + + schema-registry: + image: confluentinc/cp-schema-registry:7.7.1 + hostname: schema-registry + container_name: schema-registry + depends_on: + - broker + ports: + - "8081:8081" + environment: + SCHEMA_REGISTRY_HOST_NAME: schema-registry + SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: 'broker:29092' + SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081 + + connect: + image: cnfldemos/cp-server-connect-datagen:0.6.4-7.6.0 + hostname: connect + container_name: connect + depends_on: + - broker + - schema-registry + ports: + - "8083:8083" + environment: + CONNECT_BOOTSTRAP_SERVERS: 'broker:29092' + CONNECT_REST_ADVERTISED_HOST_NAME: connect + CONNECT_GROUP_ID: compose-connect-group + CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs + CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1 + CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000 + CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets + CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1 + CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status + CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1 + CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter + CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter + CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 + # CLASSPATH required due to CC-2422 + CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.7.1.jar + CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor" + CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor" + CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components" + CONNECT_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.I0Itec.zkclient=ERROR,org.reflections=ERROR + + control-center: + image: confluentinc/cp-enterprise-control-center:7.7.1 + hostname: control-center + container_name: control-center + depends_on: + - broker + - schema-registry + - connect + - ksqldb-server + ports: + - "9021:9021" + environment: + CONTROL_CENTER_BOOTSTRAP_SERVERS: 'broker:29092' + CONTROL_CENTER_CONNECT_CONNECT-DEFAULT_CLUSTER: 'connect:8083' + CONTROL_CENTER_CONNECT_HEALTHCHECK_ENDPOINT: '/connectors' + CONTROL_CENTER_KSQL_KSQLDB1_URL: "http://ksqldb-server:8088" + CONTROL_CENTER_KSQL_KSQLDB1_ADVERTISED_URL: "http://localhost:8088" + CONTROL_CENTER_SCHEMA_REGISTRY_URL: "http://schema-registry:8081" + CONTROL_CENTER_REPLICATION_FACTOR: 1 + CONTROL_CENTER_INTERNAL_TOPICS_PARTITIONS: 1 + CONTROL_CENTER_MONITORING_INTERCEPTOR_TOPIC_PARTITIONS: 1 + CONFLUENT_METRICS_TOPIC_REPLICATION: 1 + PORT: 9021 + + ksqldb-server: + image: confluentinc/cp-ksqldb-server:7.7.1 + hostname: ksqldb-server + container_name: ksqldb-server + depends_on: + - broker + - connect + ports: + - "8088:8088" + environment: + KSQL_CONFIG_DIR: "/etc/ksql" + KSQL_BOOTSTRAP_SERVERS: "broker:29092" + KSQL_HOST_NAME: ksqldb-server + KSQL_LISTENERS: "http://0.0.0.0:8088" + KSQL_CACHE_MAX_BYTES_BUFFERING: 0 + KSQL_KSQL_SCHEMA_REGISTRY_URL: "http://schema-registry:8081" + KSQL_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor" + KSQL_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor" + KSQL_KSQL_CONNECT_URL: "http://connect:8083" + KSQL_KSQL_LOGGING_PROCESSING_TOPIC_REPLICATION_FACTOR: 1 + KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: 'true' + KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: 'true' + + ksqldb-cli: + image: confluentinc/cp-ksqldb-cli:7.7.1 + container_name: ksqldb-cli + depends_on: + - broker + - connect + - ksqldb-server + entrypoint: /bin/sh + tty: true + + ksql-datagen: + image: confluentinc/ksqldb-examples:7.7.1 + hostname: ksql-datagen + container_name: ksql-datagen + depends_on: + - ksqldb-server + - broker + - schema-registry + - connect + command: "bash -c 'echo Waiting for Kafka to be ready... && \ + cub kafka-ready -b broker:29092 1 40 && \ + echo Waiting for Confluent Schema Registry to be ready... && \ + cub sr-ready schema-registry 8081 40 && \ + echo Waiting a few seconds for topic creation to finish... && \ + sleep 11 && \ + tail -f /dev/null'" + environment: + KSQL_CONFIG_DIR: "/etc/ksql" + STREAMS_BOOTSTRAP_SERVERS: broker:29092 + STREAMS_SCHEMA_REGISTRY_HOST: schema-registry + STREAMS_SCHEMA_REGISTRY_PORT: 8081 + + rest-proxy: + image: confluentinc/cp-kafka-rest:7.7.1 + depends_on: + - broker + - schema-registry + ports: + - 8082:8082 + hostname: rest-proxy + container_name: rest-proxy + environment: + KAFKA_REST_HOST_NAME: rest-proxy + KAFKA_REST_BOOTSTRAP_SERVERS: 'broker:29092' + KAFKA_REST_LISTENERS: "http://0.0.0.0:8082" + KAFKA_REST_SCHEMA_REGISTRY_URL: 'http://schema-registry:8081' diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..8acb41b --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,164 @@ +services: + postgres: + image: postgres:latest + command: -c 'max_connections=2000' + environment: + POSTGRES_USER: elsa + POSTGRES_PASSWORD: elsa + POSTGRES_DB: elsa + volumes: + - postgres-data:/var/lib/postgresql/data + - ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh # This will initialize the 'tracelens' database + ports: + - "5432:5432" + + sqlserver: + image: mcr.microsoft.com/mssql/server:2022-latest + environment: + - ACCEPT_EULA=Y + - MSSQL_SA_PASSWORD=!Elsa2025@ + ports: + - 1433:1433 + volumes: + - sqlserver_data:/var/opt/mssql + + mysql: + image: mysql:8.0 + container_name: mysql + environment: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: elsa + MYSQL_USER: admin + MYSQL_PASSWORD: password + ports: + - "3306:3306" + volumes: + - mysql_data2:/var/lib/mysql + + oracle: + image: container-registry.oracle.com/database/free:latest + container_name: oracle-db + environment: + ORACLE_PWD: elsa + ports: + - "1521:1521" + - "5500:5500" + volumes: + - ./data/oracle-data:/opt/oracle/oradata + - ./setup/oracle-setup:/opt/oracle/scripts/setup + + mongodb: + image: mongo:latest + ports: + - "127.0.0.1:27017:27017" + volumes: + - mongodb_data:/data/db + + cockroachdb: + image: cockroachdb/cockroach:v22.1.0 + command: start-single-node --insecure + ports: + - "26257:26257" # CockroachDB SQL port + - "8080:8080" # CockroachDB UI port + volumes: + - cockroachdb-data:/cockroach/cockroach-data + environment: + - COCKROACH_DATABASE=elsa + + rabbitmq: + image: "rabbitmq:4-management" + ports: + - "15672:15672" + - "5672:5672" + + redis: + image: redis:latest + ports: + - "127.0.0.1:6379:6379" + + plantuml-server: + image: plantuml/plantuml-server:tomcat + container_name: plantuml-server + ports: + - 7080:8080 + + trace-lens: + image: docker.io/rogeralsing/tracelens:latest + pull_policy: always + depends_on: + - plantuml-server + - postgres + ports: + - 7001:5001 + - 4317:4317 + environment: + - PlantUml__RemoteUrl= + - ConnectionStrings__DefaultConnection=USER ID=tracelens;PASSWORD=tracelenspass;HOST=postgres;PORT=5432;DATABASE=tracelens;POOLING=true; + + smtp4dev: # Mock SMTP server + image: rnwood/smtp4dev + container_name: smtp4dev + restart: always + ports: + - "3000:80" # Web interface + - "2525:25" # SMTP port + environment: + - ASPNETCORE_URLS=http://+:80 + - Logging__LogLevel__Default=Information + + azurite: + image: mcr.microsoft.com/azure-storage/azurite + container_name: azurite + command: > + azurite + --blobHost 0.0.0.0 --blobPort 10010 + --queueHost 0.0.0.0 --queuePort 10011 + --tableHost 0.0.0.0 --tablePort 10012 + --location /data + --debug /data/debug.log + --skipApiVersionCheck + --loose + ports: + - "10010:10010" # Blob service + - "10011:10011" # Queue service + - "10012:10012" # Table service + volumes: + - ./azurite-data:/data + restart: always + + elsa-server: + build: + context: ../. + dockerfile: ./docker/ElsaServer.Dockerfile + depends_on: + - postgres + - rabbitmq + - redis + environment: + ASPNETCORE_ENVIRONMENT: Development + PYTHONNET_PYDLL: /opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/bin/python3.11 + PYTHONNET_RUNTIME: coreclr + CONNECTIONSTRINGS__POSTGRESQL: "Server=postgres;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer" + CONNECTIONSTRINGS__RABBITMQ: "amqp://guest:guest@rabbitmq:5672/" + CONNECTIONSTRINGS__REDIS: "redis:6379" + DISTRIBUTEDLOCKPROVIDER: "Postgres" + ports: + - "13000:8080" + + elsa-studio: + build: + context: ../. + dockerfile: ./docker/ElsaStudio.Dockerfile + environment: + ASPNETCORE_ENVIRONMENT: Development + ELSASERVER__URL: "http://localhost:13000/elsa/api" + ports: + - "14000:8080" + +volumes: + sqlserver_data: + postgres-data: + oracle-data-free1: + mysql_data2: + cockroachdb-data: + mongodb_data: diff --git a/docker/init-db-postgres.sh b/docker/init-db-postgres.sh new file mode 100644 index 0000000..5185802 --- /dev/null +++ b/docker/init-db-postgres.sh @@ -0,0 +1,9 @@ +echo "Starting database initialization" + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER tracelens WITH PASSWORD 'tracelenspass'; + CREATE DATABASE tracelens; + GRANT ALL PRIVILEGES ON DATABASE tracelens TO tracelens; +EOSQL + +echo "Database initialization completed" \ No newline at end of file diff --git a/docker/otel-collector-config.yaml b/docker/otel-collector-config.yaml new file mode 100644 index 0000000..6cf8cef --- /dev/null +++ b/docker/otel-collector-config.yaml @@ -0,0 +1,49 @@ +receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + +processors: + batch: + send_batch_max_size: 100 + send_batch_size: 10 # Increased batch size for efficiency + timeout: 1s + tail_sampling: + decision_wait: 10s + num_traces: 10000 # Increased from 100 to handle more traces + expected_new_traces_per_sec: 100 # Increased from 10 + decision_cache: + sampled_cache_size: 100000 + policies: [ + { + name: incidents-policy, + type: boolean_attribute, + boolean_attribute: { key: hasIncidents, value: true } + } + ] + +exporters: + debug: + verbosity: detailed + datadog: + api: + site: ${env:DD_SITE} + key: ${env:DD_API_KEY} + +service: + pipelines: + metrics: + receivers: [ otlp ] + processors: [ batch ] + exporters: [ datadog ] + traces: + receivers: [ otlp ] + processors: [ batch ] # Added tail_sampling to the main traces pipeline + exporters: [ debug, datadog ] # Directly exporting to debug and datadog + logs: + receivers: [ otlp ] + processors: [ batch ] + exporters: [ debug, datadog ] diff --git a/docker/setup/oracle-setup/setup.sql b/docker/setup/oracle-setup/setup.sql new file mode 100644 index 0000000..311441d --- /dev/null +++ b/docker/setup/oracle-setup/setup.sql @@ -0,0 +1,3 @@ +alter session set "_ORACLE_SCRIPT"=true; +CREATE USER ELSA IDENTIFIED BY elsa; +GRANT ALL PRIVILEGES TO ELSA; \ No newline at end of file diff --git a/gen/ElsaLexer.interp b/gen/ElsaLexer.interp new file mode 100644 index 0000000..778a120 --- /dev/null +++ b/gen/ElsaLexer.interp @@ -0,0 +1,163 @@ +token literal names: +null +'=' +'>' +'++' +'--' +'new' +'variable' +'let' +'if' +'then' +'else' +'for' +'return' +'void' +'float' +'int' +'string' +'object' +'expression' +null +':' +';' +',' +'+' +'-' +'*' +'==' +'!=' +'>=' +'<' +'<=' +'=>' +'(' +')' +'[' +']' +'{' +'}' +'!' +'|' +'||' +'.' +null +null +null +null +null +null +'\\|' + +token symbolic names: +null +EQ +GREATER +INCREMENT +DECREMENT +NEW +VARIABLE +LET +IF +THEN +ELSE +FOR +RETURN +VOID +FLOAT +INT +STRING +OBJECT +EXPRESSION_MARKER +SYMBOL +COLON +SEMICOLON +COMMA +PLUS +MINUS +STAR +EQUALS +NOT_EQUALS +GREATER_EQUALS +LESS +LESS_EQUALS +LAMBDA +PARENTHESES_OPEN +PARENTHESES_CLOSE +BRACKET_OPEN +BRACKET_CLOSE +CURLYBRACE_OPEN +CURLYBRACE_CLOSE +EXCLAMATION +PIPE +PIPE_DBL +PERIOD +STRING_VAL +BACKTICKSTRING_VAL +LINE_COMMENT +INTEGER_VAL +ID +WS +ESC + +rule names: +EQ +GREATER +INCREMENT +DECREMENT +NEW +VARIABLE +LET +IF +THEN +ELSE +FOR +RETURN +VOID +FLOAT +INT +STRING +OBJECT +EXPRESSION_MARKER +SYMBOL +COLON +SEMICOLON +COMMA +PLUS +MINUS +STAR +EQUALS +NOT_EQUALS +GREATER_EQUALS +LESS +LESS_EQUALS +LAMBDA +PARENTHESES_OPEN +PARENTHESES_CLOSE +BRACKET_OPEN +BRACKET_CLOSE +CURLYBRACE_OPEN +CURLYBRACE_CLOSE +EXCLAMATION +PIPE +PIPE_DBL +PERIOD +STRING_VAL +BACKTICKSTRING_VAL +LINE_COMMENT +INTEGER_VAL +ID +WS +LETTER +DIGIT +ESC + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 50, 308, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 7, 43, 251, 10, 43, 12, 43, 14, 43, 254, 11, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 262, 10, 44, 12, 44, 14, 44, 265, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 273, 10, 45, 12, 45, 14, 45, 276, 11, 45, 3, 45, 5, 45, 279, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 6, 46, 286, 10, 46, 13, 46, 14, 46, 287, 3, 47, 3, 47, 3, 47, 7, 47, 293, 10, 47, 12, 47, 14, 47, 296, 11, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 5, 252, 263, 274, 2, 52, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 2, 99, 2, 101, 50, 3, 2, 6, 6, 2, 38, 38, 45, 45, 63, 64, 98, 98, 5, 2, 11, 12, 15, 15, 34, 34, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 2, 314, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 3, 103, 3, 2, 2, 2, 5, 105, 3, 2, 2, 2, 7, 107, 3, 2, 2, 2, 9, 110, 3, 2, 2, 2, 11, 113, 3, 2, 2, 2, 13, 117, 3, 2, 2, 2, 15, 126, 3, 2, 2, 2, 17, 130, 3, 2, 2, 2, 19, 133, 3, 2, 2, 2, 21, 138, 3, 2, 2, 2, 23, 143, 3, 2, 2, 2, 25, 147, 3, 2, 2, 2, 27, 154, 3, 2, 2, 2, 29, 159, 3, 2, 2, 2, 31, 165, 3, 2, 2, 2, 33, 169, 3, 2, 2, 2, 35, 176, 3, 2, 2, 2, 37, 183, 3, 2, 2, 2, 39, 194, 3, 2, 2, 2, 41, 196, 3, 2, 2, 2, 43, 198, 3, 2, 2, 2, 45, 200, 3, 2, 2, 2, 47, 202, 3, 2, 2, 2, 49, 204, 3, 2, 2, 2, 51, 206, 3, 2, 2, 2, 53, 208, 3, 2, 2, 2, 55, 211, 3, 2, 2, 2, 57, 214, 3, 2, 2, 2, 59, 217, 3, 2, 2, 2, 61, 219, 3, 2, 2, 2, 63, 222, 3, 2, 2, 2, 65, 225, 3, 2, 2, 2, 67, 227, 3, 2, 2, 2, 69, 229, 3, 2, 2, 2, 71, 231, 3, 2, 2, 2, 73, 233, 3, 2, 2, 2, 75, 235, 3, 2, 2, 2, 77, 237, 3, 2, 2, 2, 79, 239, 3, 2, 2, 2, 81, 241, 3, 2, 2, 2, 83, 244, 3, 2, 2, 2, 85, 246, 3, 2, 2, 2, 87, 257, 3, 2, 2, 2, 89, 268, 3, 2, 2, 2, 91, 285, 3, 2, 2, 2, 93, 289, 3, 2, 2, 2, 95, 297, 3, 2, 2, 2, 97, 301, 3, 2, 2, 2, 99, 303, 3, 2, 2, 2, 101, 305, 3, 2, 2, 2, 103, 104, 7, 63, 2, 2, 104, 4, 3, 2, 2, 2, 105, 106, 7, 64, 2, 2, 106, 6, 3, 2, 2, 2, 107, 108, 7, 45, 2, 2, 108, 109, 7, 45, 2, 2, 109, 8, 3, 2, 2, 2, 110, 111, 7, 47, 2, 2, 111, 112, 7, 47, 2, 2, 112, 10, 3, 2, 2, 2, 113, 114, 7, 112, 2, 2, 114, 115, 7, 103, 2, 2, 115, 116, 7, 121, 2, 2, 116, 12, 3, 2, 2, 2, 117, 118, 7, 120, 2, 2, 118, 119, 7, 99, 2, 2, 119, 120, 7, 116, 2, 2, 120, 121, 7, 107, 2, 2, 121, 122, 7, 99, 2, 2, 122, 123, 7, 100, 2, 2, 123, 124, 7, 110, 2, 2, 124, 125, 7, 103, 2, 2, 125, 14, 3, 2, 2, 2, 126, 127, 7, 110, 2, 2, 127, 128, 7, 103, 2, 2, 128, 129, 7, 118, 2, 2, 129, 16, 3, 2, 2, 2, 130, 131, 7, 107, 2, 2, 131, 132, 7, 104, 2, 2, 132, 18, 3, 2, 2, 2, 133, 134, 7, 118, 2, 2, 134, 135, 7, 106, 2, 2, 135, 136, 7, 103, 2, 2, 136, 137, 7, 112, 2, 2, 137, 20, 3, 2, 2, 2, 138, 139, 7, 103, 2, 2, 139, 140, 7, 110, 2, 2, 140, 141, 7, 117, 2, 2, 141, 142, 7, 103, 2, 2, 142, 22, 3, 2, 2, 2, 143, 144, 7, 104, 2, 2, 144, 145, 7, 113, 2, 2, 145, 146, 7, 116, 2, 2, 146, 24, 3, 2, 2, 2, 147, 148, 7, 116, 2, 2, 148, 149, 7, 103, 2, 2, 149, 150, 7, 118, 2, 2, 150, 151, 7, 119, 2, 2, 151, 152, 7, 116, 2, 2, 152, 153, 7, 112, 2, 2, 153, 26, 3, 2, 2, 2, 154, 155, 7, 120, 2, 2, 155, 156, 7, 113, 2, 2, 156, 157, 7, 107, 2, 2, 157, 158, 7, 102, 2, 2, 158, 28, 3, 2, 2, 2, 159, 160, 7, 104, 2, 2, 160, 161, 7, 110, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 99, 2, 2, 163, 164, 7, 118, 2, 2, 164, 30, 3, 2, 2, 2, 165, 166, 7, 107, 2, 2, 166, 167, 7, 112, 2, 2, 167, 168, 7, 118, 2, 2, 168, 32, 3, 2, 2, 2, 169, 170, 7, 117, 2, 2, 170, 171, 7, 118, 2, 2, 171, 172, 7, 116, 2, 2, 172, 173, 7, 107, 2, 2, 173, 174, 7, 112, 2, 2, 174, 175, 7, 105, 2, 2, 175, 34, 3, 2, 2, 2, 176, 177, 7, 113, 2, 2, 177, 178, 7, 100, 2, 2, 178, 179, 7, 108, 2, 2, 179, 180, 7, 103, 2, 2, 180, 181, 7, 101, 2, 2, 181, 182, 7, 118, 2, 2, 182, 36, 3, 2, 2, 2, 183, 184, 7, 103, 2, 2, 184, 185, 7, 122, 2, 2, 185, 186, 7, 114, 2, 2, 186, 187, 7, 116, 2, 2, 187, 188, 7, 103, 2, 2, 188, 189, 7, 117, 2, 2, 189, 190, 7, 117, 2, 2, 190, 191, 7, 107, 2, 2, 191, 192, 7, 113, 2, 2, 192, 193, 7, 112, 2, 2, 193, 38, 3, 2, 2, 2, 194, 195, 9, 2, 2, 2, 195, 40, 3, 2, 2, 2, 196, 197, 7, 60, 2, 2, 197, 42, 3, 2, 2, 2, 198, 199, 7, 61, 2, 2, 199, 44, 3, 2, 2, 2, 200, 201, 7, 46, 2, 2, 201, 46, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 48, 3, 2, 2, 2, 204, 205, 7, 47, 2, 2, 205, 50, 3, 2, 2, 2, 206, 207, 7, 44, 2, 2, 207, 52, 3, 2, 2, 2, 208, 209, 7, 63, 2, 2, 209, 210, 7, 63, 2, 2, 210, 54, 3, 2, 2, 2, 211, 212, 7, 35, 2, 2, 212, 213, 7, 63, 2, 2, 213, 56, 3, 2, 2, 2, 214, 215, 7, 64, 2, 2, 215, 216, 7, 63, 2, 2, 216, 58, 3, 2, 2, 2, 217, 218, 7, 62, 2, 2, 218, 60, 3, 2, 2, 2, 219, 220, 7, 62, 2, 2, 220, 221, 7, 63, 2, 2, 221, 62, 3, 2, 2, 2, 222, 223, 7, 63, 2, 2, 223, 224, 7, 64, 2, 2, 224, 64, 3, 2, 2, 2, 225, 226, 7, 42, 2, 2, 226, 66, 3, 2, 2, 2, 227, 228, 7, 43, 2, 2, 228, 68, 3, 2, 2, 2, 229, 230, 7, 93, 2, 2, 230, 70, 3, 2, 2, 2, 231, 232, 7, 95, 2, 2, 232, 72, 3, 2, 2, 2, 233, 234, 7, 125, 2, 2, 234, 74, 3, 2, 2, 2, 235, 236, 7, 127, 2, 2, 236, 76, 3, 2, 2, 2, 237, 238, 7, 35, 2, 2, 238, 78, 3, 2, 2, 2, 239, 240, 7, 126, 2, 2, 240, 80, 3, 2, 2, 2, 241, 242, 7, 126, 2, 2, 242, 243, 7, 126, 2, 2, 243, 82, 3, 2, 2, 2, 244, 245, 7, 48, 2, 2, 245, 84, 3, 2, 2, 2, 246, 252, 7, 36, 2, 2, 247, 248, 7, 94, 2, 2, 248, 251, 7, 36, 2, 2, 249, 251, 11, 2, 2, 2, 250, 247, 3, 2, 2, 2, 250, 249, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 253, 255, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 7, 36, 2, 2, 256, 86, 3, 2, 2, 2, 257, 263, 7, 98, 2, 2, 258, 259, 7, 94, 2, 2, 259, 262, 7, 36, 2, 2, 260, 262, 11, 2, 2, 2, 261, 258, 3, 2, 2, 2, 261, 260, 3, 2, 2, 2, 262, 265, 3, 2, 2, 2, 263, 264, 3, 2, 2, 2, 263, 261, 3, 2, 2, 2, 264, 266, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 266, 267, 7, 98, 2, 2, 267, 88, 3, 2, 2, 2, 268, 269, 7, 49, 2, 2, 269, 270, 7, 49, 2, 2, 270, 274, 3, 2, 2, 2, 271, 273, 11, 2, 2, 2, 272, 271, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 278, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 277, 279, 7, 15, 2, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 281, 7, 12, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 8, 45, 2, 2, 283, 90, 3, 2, 2, 2, 284, 286, 5, 99, 50, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 92, 3, 2, 2, 2, 289, 294, 5, 97, 49, 2, 290, 293, 5, 97, 49, 2, 291, 293, 5, 99, 50, 2, 292, 290, 3, 2, 2, 2, 292, 291, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 94, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 297, 298, 9, 3, 2, 2, 298, 299, 3, 2, 2, 2, 299, 300, 8, 48, 2, 2, 300, 96, 3, 2, 2, 2, 301, 302, 9, 4, 2, 2, 302, 98, 3, 2, 2, 2, 303, 304, 9, 5, 2, 2, 304, 100, 3, 2, 2, 2, 305, 306, 7, 94, 2, 2, 306, 307, 7, 126, 2, 2, 307, 102, 3, 2, 2, 2, 12, 2, 250, 252, 261, 263, 274, 278, 287, 292, 294, 3, 8, 2, 2] \ No newline at end of file diff --git a/gen/ElsaLexer.java b/gen/ElsaLexer.java new file mode 100644 index 0000000..83a2c71 --- /dev/null +++ b/gen/ElsaLexer.java @@ -0,0 +1,236 @@ +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaLexer.g4 by ANTLR 4.9.2 +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class ElsaLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + EQ=1, GREATER=2, INCREMENT=3, DECREMENT=4, NEW=5, VARIABLE=6, LET=7, IF=8, + THEN=9, ELSE=10, FOR=11, RETURN=12, VOID=13, FLOAT=14, INT=15, STRING=16, + OBJECT=17, EXPRESSION_MARKER=18, SYMBOL=19, COLON=20, SEMICOLON=21, COMMA=22, + PLUS=23, MINUS=24, STAR=25, EQUALS=26, NOT_EQUALS=27, GREATER_EQUALS=28, + LESS=29, LESS_EQUALS=30, LAMBDA=31, PARENTHESES_OPEN=32, PARENTHESES_CLOSE=33, + BRACKET_OPEN=34, BRACKET_CLOSE=35, CURLYBRACE_OPEN=36, CURLYBRACE_CLOSE=37, + EXCLAMATION=38, PIPE=39, PIPE_DBL=40, PERIOD=41, STRING_VAL=42, BACKTICKSTRING_VAL=43, + LINE_COMMENT=44, INTEGER_VAL=45, ID=46, WS=47, ESC=48; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "EQ", "GREATER", "INCREMENT", "DECREMENT", "NEW", "VARIABLE", "LET", + "IF", "THEN", "ELSE", "FOR", "RETURN", "VOID", "FLOAT", "INT", "STRING", + "OBJECT", "EXPRESSION_MARKER", "SYMBOL", "COLON", "SEMICOLON", "COMMA", + "PLUS", "MINUS", "STAR", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS", + "LESS_EQUALS", "LAMBDA", "PARENTHESES_OPEN", "PARENTHESES_CLOSE", "BRACKET_OPEN", + "BRACKET_CLOSE", "CURLYBRACE_OPEN", "CURLYBRACE_CLOSE", "EXCLAMATION", + "PIPE", "PIPE_DBL", "PERIOD", "STRING_VAL", "BACKTICKSTRING_VAL", "LINE_COMMENT", + "INTEGER_VAL", "ID", "WS", "LETTER", "DIGIT", "ESC" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'='", "'>'", "'++'", "'--'", "'new'", "'variable'", "'let'", "'if'", + "'then'", "'else'", "'for'", "'return'", "'void'", "'float'", "'int'", + "'string'", "'object'", "'expression'", null, "':'", "';'", "','", "'+'", + "'-'", "'*'", "'=='", "'!='", "'>='", "'<'", "'<='", "'=>'", "'('", "')'", + "'['", "']'", "'{'", "'}'", "'!'", "'|'", "'||'", "'.'", null, null, + null, null, null, null, "'\\|'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "EQ", "GREATER", "INCREMENT", "DECREMENT", "NEW", "VARIABLE", "LET", + "IF", "THEN", "ELSE", "FOR", "RETURN", "VOID", "FLOAT", "INT", "STRING", + "OBJECT", "EXPRESSION_MARKER", "SYMBOL", "COLON", "SEMICOLON", "COMMA", + "PLUS", "MINUS", "STAR", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS", + "LESS_EQUALS", "LAMBDA", "PARENTHESES_OPEN", "PARENTHESES_CLOSE", "BRACKET_OPEN", + "BRACKET_CLOSE", "CURLYBRACE_OPEN", "CURLYBRACE_CLOSE", "EXCLAMATION", + "PIPE", "PIPE_DBL", "PERIOD", "STRING_VAL", "BACKTICKSTRING_VAL", "LINE_COMMENT", + "INTEGER_VAL", "ID", "WS", "ESC" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public ElsaLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "ElsaLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\62\u0134\b\1\4\2"+ + "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+ + "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+ + "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+ + "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+ + " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+ + "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\3\2"+ + "\3\2\3\3\3\3\3\4\3\4\3\4\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3"+ + "\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13"+ + "\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16"+ + "\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20"+ + "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25"+ + "\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\33"+ + "\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37\3\37\3\37\3 \3 \3 \3!\3"+ + "!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\3)\3*\3*\3+\3+\3"+ + "+\3+\7+\u00fb\n+\f+\16+\u00fe\13+\3+\3+\3,\3,\3,\3,\7,\u0106\n,\f,\16"+ + ",\u0109\13,\3,\3,\3-\3-\3-\3-\7-\u0111\n-\f-\16-\u0114\13-\3-\5-\u0117"+ + "\n-\3-\3-\3-\3-\3.\6.\u011e\n.\r.\16.\u011f\3/\3/\3/\7/\u0125\n/\f/\16"+ + "/\u0128\13/\3\60\3\60\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3\63\5\u00fc"+ + "\u0107\u0112\2\64\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31"+ + "\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65"+ + "\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\2c\2e\62"+ + "\3\2\6\6\2&&--?@bb\5\2\13\f\17\17\"\"\5\2C\\aac|\3\2\62;\2\u013a\2\3\3"+ + "\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2"+ + "\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3"+ + "\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2"+ + "%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61"+ + "\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2"+ + "\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I"+ + "\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2"+ + "\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2e\3\2\2\2"+ + "\3g\3\2\2\2\5i\3\2\2\2\7k\3\2\2\2\tn\3\2\2\2\13q\3\2\2\2\ru\3\2\2\2\17"+ + "~\3\2\2\2\21\u0082\3\2\2\2\23\u0085\3\2\2\2\25\u008a\3\2\2\2\27\u008f"+ + "\3\2\2\2\31\u0093\3\2\2\2\33\u009a\3\2\2\2\35\u009f\3\2\2\2\37\u00a5\3"+ + "\2\2\2!\u00a9\3\2\2\2#\u00b0\3\2\2\2%\u00b7\3\2\2\2\'\u00c2\3\2\2\2)\u00c4"+ + "\3\2\2\2+\u00c6\3\2\2\2-\u00c8\3\2\2\2/\u00ca\3\2\2\2\61\u00cc\3\2\2\2"+ + "\63\u00ce\3\2\2\2\65\u00d0\3\2\2\2\67\u00d3\3\2\2\29\u00d6\3\2\2\2;\u00d9"+ + "\3\2\2\2=\u00db\3\2\2\2?\u00de\3\2\2\2A\u00e1\3\2\2\2C\u00e3\3\2\2\2E"+ + "\u00e5\3\2\2\2G\u00e7\3\2\2\2I\u00e9\3\2\2\2K\u00eb\3\2\2\2M\u00ed\3\2"+ + "\2\2O\u00ef\3\2\2\2Q\u00f1\3\2\2\2S\u00f4\3\2\2\2U\u00f6\3\2\2\2W\u0101"+ + "\3\2\2\2Y\u010c\3\2\2\2[\u011d\3\2\2\2]\u0121\3\2\2\2_\u0129\3\2\2\2a"+ + "\u012d\3\2\2\2c\u012f\3\2\2\2e\u0131\3\2\2\2gh\7?\2\2h\4\3\2\2\2ij\7@"+ + "\2\2j\6\3\2\2\2kl\7-\2\2lm\7-\2\2m\b\3\2\2\2no\7/\2\2op\7/\2\2p\n\3\2"+ + "\2\2qr\7p\2\2rs\7g\2\2st\7y\2\2t\f\3\2\2\2uv\7x\2\2vw\7c\2\2wx\7t\2\2"+ + "xy\7k\2\2yz\7c\2\2z{\7d\2\2{|\7n\2\2|}\7g\2\2}\16\3\2\2\2~\177\7n\2\2"+ + "\177\u0080\7g\2\2\u0080\u0081\7v\2\2\u0081\20\3\2\2\2\u0082\u0083\7k\2"+ + "\2\u0083\u0084\7h\2\2\u0084\22\3\2\2\2\u0085\u0086\7v\2\2\u0086\u0087"+ + "\7j\2\2\u0087\u0088\7g\2\2\u0088\u0089\7p\2\2\u0089\24\3\2\2\2\u008a\u008b"+ + "\7g\2\2\u008b\u008c\7n\2\2\u008c\u008d\7u\2\2\u008d\u008e\7g\2\2\u008e"+ + "\26\3\2\2\2\u008f\u0090\7h\2\2\u0090\u0091\7q\2\2\u0091\u0092\7t\2\2\u0092"+ + "\30\3\2\2\2\u0093\u0094\7t\2\2\u0094\u0095\7g\2\2\u0095\u0096\7v\2\2\u0096"+ + "\u0097\7w\2\2\u0097\u0098\7t\2\2\u0098\u0099\7p\2\2\u0099\32\3\2\2\2\u009a"+ + "\u009b\7x\2\2\u009b\u009c\7q\2\2\u009c\u009d\7k\2\2\u009d\u009e\7f\2\2"+ + "\u009e\34\3\2\2\2\u009f\u00a0\7h\2\2\u00a0\u00a1\7n\2\2\u00a1\u00a2\7"+ + "q\2\2\u00a2\u00a3\7c\2\2\u00a3\u00a4\7v\2\2\u00a4\36\3\2\2\2\u00a5\u00a6"+ + "\7k\2\2\u00a6\u00a7\7p\2\2\u00a7\u00a8\7v\2\2\u00a8 \3\2\2\2\u00a9\u00aa"+ + "\7u\2\2\u00aa\u00ab\7v\2\2\u00ab\u00ac\7t\2\2\u00ac\u00ad\7k\2\2\u00ad"+ + "\u00ae\7p\2\2\u00ae\u00af\7i\2\2\u00af\"\3\2\2\2\u00b0\u00b1\7q\2\2\u00b1"+ + "\u00b2\7d\2\2\u00b2\u00b3\7l\2\2\u00b3\u00b4\7g\2\2\u00b4\u00b5\7e\2\2"+ + "\u00b5\u00b6\7v\2\2\u00b6$\3\2\2\2\u00b7\u00b8\7g\2\2\u00b8\u00b9\7z\2"+ + "\2\u00b9\u00ba\7r\2\2\u00ba\u00bb\7t\2\2\u00bb\u00bc\7g\2\2\u00bc\u00bd"+ + "\7u\2\2\u00bd\u00be\7u\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7q\2\2\u00c0"+ + "\u00c1\7p\2\2\u00c1&\3\2\2\2\u00c2\u00c3\t\2\2\2\u00c3(\3\2\2\2\u00c4"+ + "\u00c5\7<\2\2\u00c5*\3\2\2\2\u00c6\u00c7\7=\2\2\u00c7,\3\2\2\2\u00c8\u00c9"+ + "\7.\2\2\u00c9.\3\2\2\2\u00ca\u00cb\7-\2\2\u00cb\60\3\2\2\2\u00cc\u00cd"+ + "\7/\2\2\u00cd\62\3\2\2\2\u00ce\u00cf\7,\2\2\u00cf\64\3\2\2\2\u00d0\u00d1"+ + "\7?\2\2\u00d1\u00d2\7?\2\2\u00d2\66\3\2\2\2\u00d3\u00d4\7#\2\2\u00d4\u00d5"+ + "\7?\2\2\u00d58\3\2\2\2\u00d6\u00d7\7@\2\2\u00d7\u00d8\7?\2\2\u00d8:\3"+ + "\2\2\2\u00d9\u00da\7>\2\2\u00da<\3\2\2\2\u00db\u00dc\7>\2\2\u00dc\u00dd"+ + "\7?\2\2\u00dd>\3\2\2\2\u00de\u00df\7?\2\2\u00df\u00e0\7@\2\2\u00e0@\3"+ + "\2\2\2\u00e1\u00e2\7*\2\2\u00e2B\3\2\2\2\u00e3\u00e4\7+\2\2\u00e4D\3\2"+ + "\2\2\u00e5\u00e6\7]\2\2\u00e6F\3\2\2\2\u00e7\u00e8\7_\2\2\u00e8H\3\2\2"+ + "\2\u00e9\u00ea\7}\2\2\u00eaJ\3\2\2\2\u00eb\u00ec\7\177\2\2\u00ecL\3\2"+ + "\2\2\u00ed\u00ee\7#\2\2\u00eeN\3\2\2\2\u00ef\u00f0\7~\2\2\u00f0P\3\2\2"+ + "\2\u00f1\u00f2\7~\2\2\u00f2\u00f3\7~\2\2\u00f3R\3\2\2\2\u00f4\u00f5\7"+ + "\60\2\2\u00f5T\3\2\2\2\u00f6\u00fc\7$\2\2\u00f7\u00f8\7^\2\2\u00f8\u00fb"+ + "\7$\2\2\u00f9\u00fb\13\2\2\2\u00fa\u00f7\3\2\2\2\u00fa\u00f9\3\2\2\2\u00fb"+ + "\u00fe\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fd\u00ff\3\2"+ + "\2\2\u00fe\u00fc\3\2\2\2\u00ff\u0100\7$\2\2\u0100V\3\2\2\2\u0101\u0107"+ + "\7b\2\2\u0102\u0103\7^\2\2\u0103\u0106\7$\2\2\u0104\u0106\13\2\2\2\u0105"+ + "\u0102\3\2\2\2\u0105\u0104\3\2\2\2\u0106\u0109\3\2\2\2\u0107\u0108\3\2"+ + "\2\2\u0107\u0105\3\2\2\2\u0108\u010a\3\2\2\2\u0109\u0107\3\2\2\2\u010a"+ + "\u010b\7b\2\2\u010bX\3\2\2\2\u010c\u010d\7\61\2\2\u010d\u010e\7\61\2\2"+ + "\u010e\u0112\3\2\2\2\u010f\u0111\13\2\2\2\u0110\u010f\3\2\2\2\u0111\u0114"+ + "\3\2\2\2\u0112\u0113\3\2\2\2\u0112\u0110\3\2\2\2\u0113\u0116\3\2\2\2\u0114"+ + "\u0112\3\2\2\2\u0115\u0117\7\17\2\2\u0116\u0115\3\2\2\2\u0116\u0117\3"+ + "\2\2\2\u0117\u0118\3\2\2\2\u0118\u0119\7\f\2\2\u0119\u011a\3\2\2\2\u011a"+ + "\u011b\b-\2\2\u011bZ\3\2\2\2\u011c\u011e\5c\62\2\u011d\u011c\3\2\2\2\u011e"+ + "\u011f\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120\\\3\2\2\2"+ + "\u0121\u0126\5a\61\2\u0122\u0125\5a\61\2\u0123\u0125\5c\62\2\u0124\u0122"+ + "\3\2\2\2\u0124\u0123\3\2\2\2\u0125\u0128\3\2\2\2\u0126\u0124\3\2\2\2\u0126"+ + "\u0127\3\2\2\2\u0127^\3\2\2\2\u0128\u0126\3\2\2\2\u0129\u012a\t\3\2\2"+ + "\u012a\u012b\3\2\2\2\u012b\u012c\b\60\2\2\u012c`\3\2\2\2\u012d\u012e\t"+ + "\4\2\2\u012eb\3\2\2\2\u012f\u0130\t\5\2\2\u0130d\3\2\2\2\u0131\u0132\7"+ + "^\2\2\u0132\u0133\7~\2\2\u0133f\3\2\2\2\f\2\u00fa\u00fc\u0105\u0107\u0112"+ + "\u0116\u011f\u0124\u0126\3\b\2\2"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/gen/ElsaLexer.tokens b/gen/ElsaLexer.tokens new file mode 100644 index 0000000..0d4fb8c --- /dev/null +++ b/gen/ElsaLexer.tokens @@ -0,0 +1,89 @@ +EQ=1 +GREATER=2 +INCREMENT=3 +DECREMENT=4 +NEW=5 +VARIABLE=6 +LET=7 +IF=8 +THEN=9 +ELSE=10 +FOR=11 +RETURN=12 +VOID=13 +FLOAT=14 +INT=15 +STRING=16 +OBJECT=17 +EXPRESSION_MARKER=18 +SYMBOL=19 +COLON=20 +SEMICOLON=21 +COMMA=22 +PLUS=23 +MINUS=24 +STAR=25 +EQUALS=26 +NOT_EQUALS=27 +GREATER_EQUALS=28 +LESS=29 +LESS_EQUALS=30 +LAMBDA=31 +PARENTHESES_OPEN=32 +PARENTHESES_CLOSE=33 +BRACKET_OPEN=34 +BRACKET_CLOSE=35 +CURLYBRACE_OPEN=36 +CURLYBRACE_CLOSE=37 +EXCLAMATION=38 +PIPE=39 +PIPE_DBL=40 +PERIOD=41 +STRING_VAL=42 +BACKTICKSTRING_VAL=43 +LINE_COMMENT=44 +INTEGER_VAL=45 +ID=46 +WS=47 +ESC=48 +'='=1 +'>'=2 +'++'=3 +'--'=4 +'new'=5 +'variable'=6 +'let'=7 +'if'=8 +'then'=9 +'else'=10 +'for'=11 +'return'=12 +'void'=13 +'float'=14 +'int'=15 +'string'=16 +'object'=17 +'expression'=18 +':'=20 +';'=21 +','=22 +'+'=23 +'-'=24 +'*'=25 +'=='=26 +'!='=27 +'>='=28 +'<'=29 +'<='=30 +'=>'=31 +'('=32 +')'=33 +'['=34 +']'=35 +'{'=36 +'}'=37 +'!'=38 +'|'=39 +'||'=40 +'.'=41 +'\\|'=48 diff --git a/gen/ElsaParser.interp b/gen/ElsaParser.interp new file mode 100644 index 0000000..e2a3357 --- /dev/null +++ b/gen/ElsaParser.interp @@ -0,0 +1,128 @@ +token literal names: +null +'=' +'>' +'++' +'--' +'new' +'variable' +'let' +'if' +'then' +'else' +'for' +'return' +'void' +'float' +'int' +'string' +'object' +'expression' +null +':' +';' +',' +'+' +'-' +'*' +'==' +'!=' +'>=' +'<' +'<=' +'=>' +'(' +')' +'[' +']' +'{' +'}' +'!' +'|' +'||' +'.' +null +null +null +null +null +null +'\\|' + +token symbolic names: +null +EQ +GREATER +INCREMENT +DECREMENT +NEW +VARIABLE +LET +IF +THEN +ELSE +FOR +RETURN +VOID +FLOAT +INT +STRING +OBJECT +EXPRESSION_MARKER +SYMBOL +COLON +SEMICOLON +COMMA +PLUS +MINUS +STAR +EQUALS +NOT_EQUALS +GREATER_EQUALS +LESS +LESS_EQUALS +LAMBDA +PARENTHESES_OPEN +PARENTHESES_CLOSE +BRACKET_OPEN +BRACKET_CLOSE +CURLYBRACE_OPEN +CURLYBRACE_CLOSE +EXCLAMATION +PIPE +PIPE_DBL +PERIOD +STRING_VAL +BACKTICKSTRING_VAL +LINE_COMMENT +INTEGER_VAL +ID +WS +ESC + +rule names: +program +object +newObject +varDecl +localVarDecl +type +expressionMarker +expressionContent +methodCall +funcCall +args +arg +block +objectInitializer +propertyList +property +stat +thenStat +elseStat +expr +exprList + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 50, 263, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 3, 2, 3, 2, 7, 2, 47, 10, 2, 12, 2, 14, 2, 50, 11, 2, 3, 3, 3, 3, 5, 3, 54, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 62, 10, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 74, 10, 5, 3, 5, 3, 5, 5, 5, 78, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 84, 10, 6, 3, 6, 3, 6, 5, 6, 88, 10, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 102, 10, 8, 3, 9, 7, 9, 105, 10, 9, 12, 9, 14, 9, 108, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 5, 11, 117, 10, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 7, 12, 124, 10, 12, 12, 12, 14, 12, 127, 11, 12, 3, 13, 3, 13, 5, 13, 131, 10, 13, 3, 14, 3, 14, 7, 14, 135, 10, 14, 12, 14, 14, 14, 138, 11, 14, 3, 14, 3, 14, 3, 15, 3, 15, 5, 15, 144, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 7, 16, 151, 10, 16, 12, 16, 14, 16, 154, 11, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 169, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 185, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 203, 10, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 222, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 227, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 232, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 250, 10, 21, 12, 21, 14, 21, 253, 11, 21, 3, 22, 3, 22, 3, 22, 7, 22, 258, 10, 22, 12, 22, 14, 22, 261, 11, 22, 3, 22, 3, 106, 3, 40, 23, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 2, 4, 4, 2, 15, 19, 48, 48, 5, 2, 4, 4, 28, 28, 31, 31, 2, 288, 2, 48, 3, 2, 2, 2, 4, 51, 3, 2, 2, 2, 6, 55, 3, 2, 2, 2, 8, 69, 3, 2, 2, 2, 10, 79, 3, 2, 2, 2, 12, 89, 3, 2, 2, 2, 14, 101, 3, 2, 2, 2, 16, 106, 3, 2, 2, 2, 18, 109, 3, 2, 2, 2, 20, 113, 3, 2, 2, 2, 22, 120, 3, 2, 2, 2, 24, 130, 3, 2, 2, 2, 26, 132, 3, 2, 2, 2, 28, 141, 3, 2, 2, 2, 30, 147, 3, 2, 2, 2, 32, 155, 3, 2, 2, 2, 34, 202, 3, 2, 2, 2, 36, 204, 3, 2, 2, 2, 38, 206, 3, 2, 2, 2, 40, 231, 3, 2, 2, 2, 42, 254, 3, 2, 2, 2, 44, 47, 5, 34, 18, 2, 45, 47, 7, 46, 2, 2, 46, 44, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 50, 3, 2, 2, 2, 48, 46, 3, 2, 2, 2, 48, 49, 3, 2, 2, 2, 49, 3, 3, 2, 2, 2, 50, 48, 3, 2, 2, 2, 51, 53, 7, 48, 2, 2, 52, 54, 5, 28, 15, 2, 53, 52, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 5, 3, 2, 2, 2, 55, 56, 7, 7, 2, 2, 56, 61, 7, 48, 2, 2, 57, 58, 7, 31, 2, 2, 58, 59, 5, 12, 7, 2, 59, 60, 7, 4, 2, 2, 60, 62, 3, 2, 2, 2, 61, 57, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 65, 7, 34, 2, 2, 64, 66, 5, 22, 12, 2, 65, 64, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 3, 2, 2, 2, 67, 68, 7, 35, 2, 2, 68, 7, 3, 2, 2, 2, 69, 70, 7, 8, 2, 2, 70, 73, 7, 48, 2, 2, 71, 72, 7, 22, 2, 2, 72, 74, 5, 12, 7, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 77, 3, 2, 2, 2, 75, 76, 7, 3, 2, 2, 76, 78, 5, 40, 21, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 80, 7, 9, 2, 2, 80, 83, 7, 48, 2, 2, 81, 82, 7, 22, 2, 2, 82, 84, 5, 12, 7, 2, 83, 81, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 87, 3, 2, 2, 2, 85, 86, 7, 3, 2, 2, 86, 88, 5, 40, 21, 2, 87, 85, 3, 2, 2, 2, 87, 88, 3, 2, 2, 2, 88, 11, 3, 2, 2, 2, 89, 90, 9, 2, 2, 2, 90, 13, 3, 2, 2, 2, 91, 92, 7, 20, 2, 2, 92, 93, 7, 34, 2, 2, 93, 94, 7, 48, 2, 2, 94, 95, 7, 24, 2, 2, 95, 96, 5, 16, 9, 2, 96, 97, 7, 35, 2, 2, 97, 102, 3, 2, 2, 2, 98, 99, 7, 48, 2, 2, 99, 100, 7, 33, 2, 2, 100, 102, 5, 16, 9, 2, 101, 91, 3, 2, 2, 2, 101, 98, 3, 2, 2, 2, 102, 15, 3, 2, 2, 2, 103, 105, 11, 2, 2, 2, 104, 103, 3, 2, 2, 2, 105, 108, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 106, 104, 3, 2, 2, 2, 107, 17, 3, 2, 2, 2, 108, 106, 3, 2, 2, 2, 109, 110, 7, 48, 2, 2, 110, 111, 7, 43, 2, 2, 111, 112, 5, 20, 11, 2, 112, 19, 3, 2, 2, 2, 113, 114, 7, 48, 2, 2, 114, 116, 7, 34, 2, 2, 115, 117, 5, 22, 12, 2, 116, 115, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 119, 7, 35, 2, 2, 119, 21, 3, 2, 2, 2, 120, 125, 5, 24, 13, 2, 121, 122, 7, 24, 2, 2, 122, 124, 5, 24, 13, 2, 123, 121, 3, 2, 2, 2, 124, 127, 3, 2, 2, 2, 125, 123, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126, 23, 3, 2, 2, 2, 127, 125, 3, 2, 2, 2, 128, 131, 5, 40, 21, 2, 129, 131, 5, 14, 8, 2, 130, 128, 3, 2, 2, 2, 130, 129, 3, 2, 2, 2, 131, 25, 3, 2, 2, 2, 132, 136, 7, 38, 2, 2, 133, 135, 5, 34, 18, 2, 134, 133, 3, 2, 2, 2, 135, 138, 3, 2, 2, 2, 136, 134, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 139, 3, 2, 2, 2, 138, 136, 3, 2, 2, 2, 139, 140, 7, 39, 2, 2, 140, 27, 3, 2, 2, 2, 141, 143, 7, 38, 2, 2, 142, 144, 5, 30, 16, 2, 143, 142, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 7, 39, 2, 2, 146, 29, 3, 2, 2, 2, 147, 152, 5, 32, 17, 2, 148, 149, 7, 24, 2, 2, 149, 151, 5, 32, 17, 2, 150, 148, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 31, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 156, 7, 48, 2, 2, 156, 157, 7, 22, 2, 2, 157, 158, 5, 40, 21, 2, 158, 33, 3, 2, 2, 2, 159, 160, 5, 4, 3, 2, 160, 161, 7, 23, 2, 2, 161, 203, 3, 2, 2, 2, 162, 163, 7, 10, 2, 2, 163, 164, 5, 40, 21, 2, 164, 165, 7, 11, 2, 2, 165, 168, 5, 36, 19, 2, 166, 167, 7, 12, 2, 2, 167, 169, 5, 38, 20, 2, 168, 166, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 203, 3, 2, 2, 2, 170, 171, 7, 13, 2, 2, 171, 172, 7, 34, 2, 2, 172, 173, 7, 48, 2, 2, 173, 174, 7, 3, 2, 2, 174, 175, 5, 40, 21, 2, 175, 176, 7, 23, 2, 2, 176, 177, 5, 40, 21, 2, 177, 178, 7, 23, 2, 2, 178, 179, 5, 40, 21, 2, 179, 180, 7, 35, 2, 2, 180, 181, 5, 34, 18, 2, 181, 203, 3, 2, 2, 2, 182, 184, 7, 14, 2, 2, 183, 185, 5, 40, 21, 2, 184, 183, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 203, 7, 23, 2, 2, 187, 203, 5, 26, 14, 2, 188, 189, 5, 8, 5, 2, 189, 190, 7, 23, 2, 2, 190, 203, 3, 2, 2, 2, 191, 192, 5, 10, 6, 2, 192, 193, 7, 23, 2, 2, 193, 203, 3, 2, 2, 2, 194, 195, 5, 40, 21, 2, 195, 196, 7, 3, 2, 2, 196, 197, 5, 40, 21, 2, 197, 198, 7, 23, 2, 2, 198, 203, 3, 2, 2, 2, 199, 200, 5, 40, 21, 2, 200, 201, 7, 23, 2, 2, 201, 203, 3, 2, 2, 2, 202, 159, 3, 2, 2, 2, 202, 162, 3, 2, 2, 2, 202, 170, 3, 2, 2, 2, 202, 182, 3, 2, 2, 2, 202, 187, 3, 2, 2, 2, 202, 188, 3, 2, 2, 2, 202, 191, 3, 2, 2, 2, 202, 194, 3, 2, 2, 2, 202, 199, 3, 2, 2, 2, 203, 35, 3, 2, 2, 2, 204, 205, 5, 34, 18, 2, 205, 37, 3, 2, 2, 2, 206, 207, 5, 34, 18, 2, 207, 39, 3, 2, 2, 2, 208, 209, 8, 21, 1, 2, 209, 232, 5, 20, 11, 2, 210, 232, 5, 4, 3, 2, 211, 232, 5, 6, 4, 2, 212, 213, 7, 26, 2, 2, 213, 232, 5, 40, 21, 15, 214, 215, 7, 40, 2, 2, 215, 232, 5, 40, 21, 14, 216, 232, 7, 47, 2, 2, 217, 232, 7, 44, 2, 2, 218, 232, 7, 45, 2, 2, 219, 221, 7, 34, 2, 2, 220, 222, 5, 42, 22, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 232, 7, 35, 2, 2, 224, 226, 7, 36, 2, 2, 225, 227, 5, 42, 22, 2, 226, 225, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 232, 7, 37, 2, 2, 229, 232, 5, 18, 10, 2, 230, 232, 7, 48, 2, 2, 231, 208, 3, 2, 2, 2, 231, 210, 3, 2, 2, 2, 231, 211, 3, 2, 2, 2, 231, 212, 3, 2, 2, 2, 231, 214, 3, 2, 2, 2, 231, 216, 3, 2, 2, 2, 231, 217, 3, 2, 2, 2, 231, 218, 3, 2, 2, 2, 231, 219, 3, 2, 2, 2, 231, 224, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 230, 3, 2, 2, 2, 232, 251, 3, 2, 2, 2, 233, 234, 12, 13, 2, 2, 234, 235, 7, 27, 2, 2, 235, 250, 5, 40, 21, 14, 236, 237, 12, 12, 2, 2, 237, 238, 7, 25, 2, 2, 238, 250, 5, 40, 21, 13, 239, 240, 12, 11, 2, 2, 240, 241, 7, 26, 2, 2, 241, 250, 5, 40, 21, 12, 242, 243, 12, 10, 2, 2, 243, 244, 9, 3, 2, 2, 244, 250, 5, 40, 21, 11, 245, 246, 12, 17, 2, 2, 246, 250, 7, 5, 2, 2, 247, 248, 12, 16, 2, 2, 248, 250, 7, 6, 2, 2, 249, 233, 3, 2, 2, 2, 249, 236, 3, 2, 2, 2, 249, 239, 3, 2, 2, 2, 249, 242, 3, 2, 2, 2, 249, 245, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 253, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 41, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 259, 5, 40, 21, 2, 255, 256, 7, 24, 2, 2, 256, 258, 5, 40, 21, 2, 257, 255, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 43, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 28, 46, 48, 53, 61, 65, 73, 77, 83, 87, 101, 106, 116, 125, 130, 136, 143, 152, 168, 184, 202, 221, 226, 231, 249, 251, 259] \ No newline at end of file diff --git a/gen/ElsaParser.java b/gen/ElsaParser.java new file mode 100644 index 0000000..fb31992 --- /dev/null +++ b/gen/ElsaParser.java @@ -0,0 +1,2471 @@ +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.9.2 +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class ElsaParser extends Parser { + static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + EQ=1, GREATER=2, INCREMENT=3, DECREMENT=4, NEW=5, VARIABLE=6, LET=7, IF=8, + THEN=9, ELSE=10, FOR=11, RETURN=12, VOID=13, FLOAT=14, INT=15, STRING=16, + OBJECT=17, EXPRESSION_MARKER=18, SYMBOL=19, COLON=20, SEMICOLON=21, COMMA=22, + PLUS=23, MINUS=24, STAR=25, EQUALS=26, NOT_EQUALS=27, GREATER_EQUALS=28, + LESS=29, LESS_EQUALS=30, LAMBDA=31, PARENTHESES_OPEN=32, PARENTHESES_CLOSE=33, + BRACKET_OPEN=34, BRACKET_CLOSE=35, CURLYBRACE_OPEN=36, CURLYBRACE_CLOSE=37, + EXCLAMATION=38, PIPE=39, PIPE_DBL=40, PERIOD=41, STRING_VAL=42, BACKTICKSTRING_VAL=43, + LINE_COMMENT=44, INTEGER_VAL=45, ID=46, WS=47, ESC=48; + public static final int + RULE_program = 0, RULE_object = 1, RULE_newObject = 2, RULE_varDecl = 3, + RULE_localVarDecl = 4, RULE_type = 5, RULE_expressionMarker = 6, RULE_expressionContent = 7, + RULE_methodCall = 8, RULE_funcCall = 9, RULE_args = 10, RULE_arg = 11, + RULE_block = 12, RULE_objectInitializer = 13, RULE_propertyList = 14, + RULE_property = 15, RULE_stat = 16, RULE_thenStat = 17, RULE_elseStat = 18, + RULE_expr = 19, RULE_exprList = 20; + private static String[] makeRuleNames() { + return new String[] { + "program", "object", "newObject", "varDecl", "localVarDecl", "type", + "expressionMarker", "expressionContent", "methodCall", "funcCall", "args", + "arg", "block", "objectInitializer", "propertyList", "property", "stat", + "thenStat", "elseStat", "expr", "exprList" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'='", "'>'", "'++'", "'--'", "'new'", "'variable'", "'let'", "'if'", + "'then'", "'else'", "'for'", "'return'", "'void'", "'float'", "'int'", + "'string'", "'object'", "'expression'", null, "':'", "';'", "','", "'+'", + "'-'", "'*'", "'=='", "'!='", "'>='", "'<'", "'<='", "'=>'", "'('", "')'", + "'['", "']'", "'{'", "'}'", "'!'", "'|'", "'||'", "'.'", null, null, + null, null, null, null, "'\\|'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "EQ", "GREATER", "INCREMENT", "DECREMENT", "NEW", "VARIABLE", "LET", + "IF", "THEN", "ELSE", "FOR", "RETURN", "VOID", "FLOAT", "INT", "STRING", + "OBJECT", "EXPRESSION_MARKER", "SYMBOL", "COLON", "SEMICOLON", "COMMA", + "PLUS", "MINUS", "STAR", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS", + "LESS_EQUALS", "LAMBDA", "PARENTHESES_OPEN", "PARENTHESES_CLOSE", "BRACKET_OPEN", + "BRACKET_CLOSE", "CURLYBRACE_OPEN", "CURLYBRACE_CLOSE", "EXCLAMATION", + "PIPE", "PIPE_DBL", "PERIOD", "STRING_VAL", "BACKTICKSTRING_VAL", "LINE_COMMENT", + "INTEGER_VAL", "ID", "WS", "ESC" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "ElsaParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public ElsaParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + public static class ProgramContext extends ParserRuleContext { + public List stat() { + return getRuleContexts(StatContext.class); + } + public StatContext stat(int i) { + return getRuleContext(StatContext.class,i); + } + public List LINE_COMMENT() { return getTokens(ElsaParser.LINE_COMMENT); } + public TerminalNode LINE_COMMENT(int i) { + return getToken(ElsaParser.LINE_COMMENT, i); + } + public ProgramContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_program; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterProgram(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitProgram(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitProgram(this); + else return visitor.visitChildren(this); + } + } + + public final ProgramContext program() throws RecognitionException { + ProgramContext _localctx = new ProgramContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_program); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(46); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << VARIABLE) | (1L << LET) | (1L << IF) | (1L << FOR) | (1L << RETURN) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << CURLYBRACE_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << LINE_COMMENT) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + setState(44); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NEW: + case VARIABLE: + case LET: + case IF: + case FOR: + case RETURN: + case MINUS: + case PARENTHESES_OPEN: + case BRACKET_OPEN: + case CURLYBRACE_OPEN: + case EXCLAMATION: + case STRING_VAL: + case BACKTICKSTRING_VAL: + case INTEGER_VAL: + case ID: + { + setState(42); + stat(); + } + break; + case LINE_COMMENT: + { + setState(43); + match(LINE_COMMENT); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(48); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public ObjectInitializerContext objectInitializer() { + return getRuleContext(ObjectInitializerContext.class,0); + } + public ObjectContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_object; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterObject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitObject(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitObject(this); + else return visitor.visitChildren(this); + } + } + + public final ObjectContext object() throws RecognitionException { + ObjectContext _localctx = new ObjectContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_object); + try { + enterOuterAlt(_localctx, 1); + { + setState(49); + match(ID); + setState(51); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { + case 1: + { + setState(50); + objectInitializer(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NewObjectContext extends ParserRuleContext { + public TerminalNode NEW() { return getToken(ElsaParser.NEW, 0); } + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode PARENTHESES_OPEN() { return getToken(ElsaParser.PARENTHESES_OPEN, 0); } + public TerminalNode PARENTHESES_CLOSE() { return getToken(ElsaParser.PARENTHESES_CLOSE, 0); } + public TerminalNode LESS() { return getToken(ElsaParser.LESS, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TerminalNode GREATER() { return getToken(ElsaParser.GREATER, 0); } + public ArgsContext args() { + return getRuleContext(ArgsContext.class,0); + } + public NewObjectContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_newObject; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterNewObject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitNewObject(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitNewObject(this); + else return visitor.visitChildren(this); + } + } + + public final NewObjectContext newObject() throws RecognitionException { + NewObjectContext _localctx = new NewObjectContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_newObject); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(53); + match(NEW); + setState(54); + match(ID); + setState(59); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LESS) { + { + setState(55); + match(LESS); + setState(56); + type(); + setState(57); + match(GREATER); + } + } + + setState(61); + match(PARENTHESES_OPEN); + setState(63); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + setState(62); + args(); + } + } + + setState(65); + match(PARENTHESES_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VarDeclContext extends ParserRuleContext { + public TerminalNode VARIABLE() { return getToken(ElsaParser.VARIABLE, 0); } + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode COLON() { return getToken(ElsaParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TerminalNode EQ() { return getToken(ElsaParser.EQ, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public VarDeclContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_varDecl; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterVarDecl(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitVarDecl(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitVarDecl(this); + else return visitor.visitChildren(this); + } + } + + public final VarDeclContext varDecl() throws RecognitionException { + VarDeclContext _localctx = new VarDeclContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_varDecl); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(67); + match(VARIABLE); + setState(68); + match(ID); + setState(71); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLON) { + { + setState(69); + match(COLON); + setState(70); + type(); + } + } + + setState(75); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQ) { + { + setState(73); + match(EQ); + setState(74); + expr(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LocalVarDeclContext extends ParserRuleContext { + public TerminalNode LET() { return getToken(ElsaParser.LET, 0); } + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode COLON() { return getToken(ElsaParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TerminalNode EQ() { return getToken(ElsaParser.EQ, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public LocalVarDeclContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_localVarDecl; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterLocalVarDecl(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitLocalVarDecl(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitLocalVarDecl(this); + else return visitor.visitChildren(this); + } + } + + public final LocalVarDeclContext localVarDecl() throws RecognitionException { + LocalVarDeclContext _localctx = new LocalVarDeclContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_localVarDecl); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(77); + match(LET); + setState(78); + match(ID); + setState(81); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLON) { + { + setState(79); + match(COLON); + setState(80); + type(); + } + } + + setState(85); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EQ) { + { + setState(83); + match(EQ); + setState(84); + expr(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeContext extends ParserRuleContext { + public TerminalNode VOID() { return getToken(ElsaParser.VOID, 0); } + public TerminalNode FLOAT() { return getToken(ElsaParser.FLOAT, 0); } + public TerminalNode INT() { return getToken(ElsaParser.INT, 0); } + public TerminalNode OBJECT() { return getToken(ElsaParser.OBJECT, 0); } + public TerminalNode STRING() { return getToken(ElsaParser.STRING, 0); } + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_type; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitType(this); + else return visitor.visitChildren(this); + } + } + + public final TypeContext type() throws RecognitionException { + TypeContext _localctx = new TypeContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_type); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(87); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << VOID) | (1L << FLOAT) | (1L << INT) | (1L << STRING) | (1L << OBJECT) | (1L << ID))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionMarkerContext extends ParserRuleContext { + public TerminalNode EXPRESSION_MARKER() { return getToken(ElsaParser.EXPRESSION_MARKER, 0); } + public TerminalNode PARENTHESES_OPEN() { return getToken(ElsaParser.PARENTHESES_OPEN, 0); } + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode COMMA() { return getToken(ElsaParser.COMMA, 0); } + public ExpressionContentContext expressionContent() { + return getRuleContext(ExpressionContentContext.class,0); + } + public TerminalNode PARENTHESES_CLOSE() { return getToken(ElsaParser.PARENTHESES_CLOSE, 0); } + public TerminalNode LAMBDA() { return getToken(ElsaParser.LAMBDA, 0); } + public ExpressionMarkerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionMarker; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterExpressionMarker(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitExpressionMarker(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitExpressionMarker(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionMarkerContext expressionMarker() throws RecognitionException { + ExpressionMarkerContext _localctx = new ExpressionMarkerContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_expressionMarker); + try { + setState(99); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EXPRESSION_MARKER: + enterOuterAlt(_localctx, 1); + { + setState(89); + match(EXPRESSION_MARKER); + setState(90); + match(PARENTHESES_OPEN); + setState(91); + match(ID); + setState(92); + match(COMMA); + setState(93); + expressionContent(); + setState(94); + match(PARENTHESES_CLOSE); + } + break; + case ID: + enterOuterAlt(_localctx, 2); + { + setState(96); + match(ID); + setState(97); + match(LAMBDA); + setState(98); + expressionContent(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionContentContext extends ParserRuleContext { + public ExpressionContentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionContent; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterExpressionContent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitExpressionContent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitExpressionContent(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionContentContext expressionContent() throws RecognitionException { + ExpressionContentContext _localctx = new ExpressionContentContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_expressionContent); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(104); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,10,_ctx); + while ( _alt!=1 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1+1 ) { + { + { + setState(101); + matchWildcard(); + } + } + } + setState(106); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,10,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MethodCallContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode PERIOD() { return getToken(ElsaParser.PERIOD, 0); } + public FuncCallContext funcCall() { + return getRuleContext(FuncCallContext.class,0); + } + public MethodCallContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_methodCall; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterMethodCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitMethodCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitMethodCall(this); + else return visitor.visitChildren(this); + } + } + + public final MethodCallContext methodCall() throws RecognitionException { + MethodCallContext _localctx = new MethodCallContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_methodCall); + try { + enterOuterAlt(_localctx, 1); + { + setState(107); + match(ID); + setState(108); + match(PERIOD); + setState(109); + funcCall(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FuncCallContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode PARENTHESES_OPEN() { return getToken(ElsaParser.PARENTHESES_OPEN, 0); } + public TerminalNode PARENTHESES_CLOSE() { return getToken(ElsaParser.PARENTHESES_CLOSE, 0); } + public ArgsContext args() { + return getRuleContext(ArgsContext.class,0); + } + public FuncCallContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcCall; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterFuncCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitFuncCall(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitFuncCall(this); + else return visitor.visitChildren(this); + } + } + + public final FuncCallContext funcCall() throws RecognitionException { + FuncCallContext _localctx = new FuncCallContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_funcCall); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(111); + match(ID); + setState(112); + match(PARENTHESES_OPEN); + setState(114); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + setState(113); + args(); + } + } + + setState(116); + match(PARENTHESES_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ArgsContext extends ParserRuleContext { + public List arg() { + return getRuleContexts(ArgContext.class); + } + public ArgContext arg(int i) { + return getRuleContext(ArgContext.class,i); + } + public List COMMA() { return getTokens(ElsaParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(ElsaParser.COMMA, i); + } + public ArgsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_args; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterArgs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitArgs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitArgs(this); + else return visitor.visitChildren(this); + } + } + + public final ArgsContext args() throws RecognitionException { + ArgsContext _localctx = new ArgsContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_args); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(118); + arg(); + setState(123); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(119); + match(COMMA); + setState(120); + arg(); + } + } + setState(125); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ArgContext extends ParserRuleContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ExpressionMarkerContext expressionMarker() { + return getRuleContext(ExpressionMarkerContext.class,0); + } + public ArgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterArg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitArg(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitArg(this); + else return visitor.visitChildren(this); + } + } + + public final ArgContext arg() throws RecognitionException { + ArgContext _localctx = new ArgContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_arg); + try { + setState(128); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(126); + expr(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(127); + expressionMarker(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BlockContext extends ParserRuleContext { + public TerminalNode CURLYBRACE_OPEN() { return getToken(ElsaParser.CURLYBRACE_OPEN, 0); } + public TerminalNode CURLYBRACE_CLOSE() { return getToken(ElsaParser.CURLYBRACE_CLOSE, 0); } + public List stat() { + return getRuleContexts(StatContext.class); + } + public StatContext stat(int i) { + return getRuleContext(StatContext.class,i); + } + public BlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_block; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitBlock(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitBlock(this); + else return visitor.visitChildren(this); + } + } + + public final BlockContext block() throws RecognitionException { + BlockContext _localctx = new BlockContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_block); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(130); + match(CURLYBRACE_OPEN); + setState(134); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << VARIABLE) | (1L << LET) | (1L << IF) | (1L << FOR) | (1L << RETURN) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << CURLYBRACE_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + { + setState(131); + stat(); + } + } + setState(136); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(137); + match(CURLYBRACE_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectInitializerContext extends ParserRuleContext { + public TerminalNode CURLYBRACE_OPEN() { return getToken(ElsaParser.CURLYBRACE_OPEN, 0); } + public TerminalNode CURLYBRACE_CLOSE() { return getToken(ElsaParser.CURLYBRACE_CLOSE, 0); } + public PropertyListContext propertyList() { + return getRuleContext(PropertyListContext.class,0); + } + public ObjectInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectInitializer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterObjectInitializer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitObjectInitializer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitObjectInitializer(this); + else return visitor.visitChildren(this); + } + } + + public final ObjectInitializerContext objectInitializer() throws RecognitionException { + ObjectInitializerContext _localctx = new ObjectInitializerContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_objectInitializer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(139); + match(CURLYBRACE_OPEN); + setState(141); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ID) { + { + setState(140); + propertyList(); + } + } + + setState(143); + match(CURLYBRACE_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PropertyListContext extends ParserRuleContext { + public List property() { + return getRuleContexts(PropertyContext.class); + } + public PropertyContext property(int i) { + return getRuleContext(PropertyContext.class,i); + } + public List COMMA() { return getTokens(ElsaParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(ElsaParser.COMMA, i); + } + public PropertyListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_propertyList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterPropertyList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitPropertyList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitPropertyList(this); + else return visitor.visitChildren(this); + } + } + + public final PropertyListContext propertyList() throws RecognitionException { + PropertyListContext _localctx = new PropertyListContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_propertyList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(145); + property(); + setState(150); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(146); + match(COMMA); + setState(147); + property(); + } + } + setState(152); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PropertyContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode COLON() { return getToken(ElsaParser.COLON, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public PropertyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_property; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterProperty(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitProperty(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitProperty(this); + else return visitor.visitChildren(this); + } + } + + public final PropertyContext property() throws RecognitionException { + PropertyContext _localctx = new PropertyContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_property); + try { + enterOuterAlt(_localctx, 1); + { + setState(153); + match(ID); + setState(154); + match(COLON); + setState(155); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StatContext extends ParserRuleContext { + public StatContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stat; } + + public StatContext() { } + public void copyFrom(StatContext ctx) { + super.copyFrom(ctx); + } + } + public static class IfStatContext extends StatContext { + public TerminalNode IF() { return getToken(ElsaParser.IF, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode THEN() { return getToken(ElsaParser.THEN, 0); } + public ThenStatContext thenStat() { + return getRuleContext(ThenStatContext.class,0); + } + public TerminalNode ELSE() { return getToken(ElsaParser.ELSE, 0); } + public ElseStatContext elseStat() { + return getRuleContext(ElseStatContext.class,0); + } + public IfStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterIfStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitIfStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitIfStat(this); + else return visitor.visitChildren(this); + } + } + public static class BlockStatContext extends StatContext { + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public BlockStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterBlockStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitBlockStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitBlockStat(this); + else return visitor.visitChildren(this); + } + } + public static class ExpressionStatContext extends StatContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(ElsaParser.SEMICOLON, 0); } + public ExpressionStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterExpressionStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitExpressionStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitExpressionStat(this); + else return visitor.visitChildren(this); + } + } + public static class ObjectStatContext extends StatContext { + public ObjectContext object() { + return getRuleContext(ObjectContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(ElsaParser.SEMICOLON, 0); } + public ObjectStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterObjectStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitObjectStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitObjectStat(this); + else return visitor.visitChildren(this); + } + } + public static class ReturnStatContext extends StatContext { + public TerminalNode RETURN() { return getToken(ElsaParser.RETURN, 0); } + public TerminalNode SEMICOLON() { return getToken(ElsaParser.SEMICOLON, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ReturnStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterReturnStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitReturnStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitReturnStat(this); + else return visitor.visitChildren(this); + } + } + public static class VariableDeclarationStatContext extends StatContext { + public VarDeclContext varDecl() { + return getRuleContext(VarDeclContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(ElsaParser.SEMICOLON, 0); } + public VariableDeclarationStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterVariableDeclarationStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitVariableDeclarationStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitVariableDeclarationStat(this); + else return visitor.visitChildren(this); + } + } + public static class AssignmentStatContext extends StatContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode EQ() { return getToken(ElsaParser.EQ, 0); } + public TerminalNode SEMICOLON() { return getToken(ElsaParser.SEMICOLON, 0); } + public AssignmentStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterAssignmentStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitAssignmentStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitAssignmentStat(this); + else return visitor.visitChildren(this); + } + } + public static class LocalVariableDeclarationStatContext extends StatContext { + public LocalVarDeclContext localVarDecl() { + return getRuleContext(LocalVarDeclContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(ElsaParser.SEMICOLON, 0); } + public LocalVariableDeclarationStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterLocalVariableDeclarationStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitLocalVariableDeclarationStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitLocalVariableDeclarationStat(this); + else return visitor.visitChildren(this); + } + } + public static class ForStatContext extends StatContext { + public TerminalNode FOR() { return getToken(ElsaParser.FOR, 0); } + public TerminalNode PARENTHESES_OPEN() { return getToken(ElsaParser.PARENTHESES_OPEN, 0); } + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public TerminalNode EQ() { return getToken(ElsaParser.EQ, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List SEMICOLON() { return getTokens(ElsaParser.SEMICOLON); } + public TerminalNode SEMICOLON(int i) { + return getToken(ElsaParser.SEMICOLON, i); + } + public TerminalNode PARENTHESES_CLOSE() { return getToken(ElsaParser.PARENTHESES_CLOSE, 0); } + public StatContext stat() { + return getRuleContext(StatContext.class,0); + } + public ForStatContext(StatContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterForStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitForStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitForStat(this); + else return visitor.visitChildren(this); + } + } + + public final StatContext stat() throws RecognitionException { + StatContext _localctx = new StatContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_stat); + int _la; + try { + setState(200); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { + case 1: + _localctx = new ObjectStatContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(157); + object(); + setState(158); + match(SEMICOLON); + } + break; + case 2: + _localctx = new IfStatContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(160); + match(IF); + setState(161); + expr(0); + setState(162); + match(THEN); + setState(163); + thenStat(); + setState(166); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + case 1: + { + setState(164); + match(ELSE); + setState(165); + elseStat(); + } + break; + } + } + break; + case 3: + _localctx = new ForStatContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(168); + match(FOR); + setState(169); + match(PARENTHESES_OPEN); + setState(170); + match(ID); + setState(171); + match(EQ); + setState(172); + expr(0); + setState(173); + match(SEMICOLON); + setState(174); + expr(0); + setState(175); + match(SEMICOLON); + setState(176); + expr(0); + setState(177); + match(PARENTHESES_CLOSE); + setState(178); + stat(); + } + break; + case 4: + _localctx = new ReturnStatContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(180); + match(RETURN); + setState(182); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + setState(181); + expr(0); + } + } + + setState(184); + match(SEMICOLON); + } + break; + case 5: + _localctx = new BlockStatContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(185); + block(); + } + break; + case 6: + _localctx = new VariableDeclarationStatContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(186); + varDecl(); + setState(187); + match(SEMICOLON); + } + break; + case 7: + _localctx = new LocalVariableDeclarationStatContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(189); + localVarDecl(); + setState(190); + match(SEMICOLON); + } + break; + case 8: + _localctx = new AssignmentStatContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(192); + expr(0); + setState(193); + match(EQ); + setState(194); + expr(0); + setState(195); + match(SEMICOLON); + } + break; + case 9: + _localctx = new ExpressionStatContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(197); + expr(0); + setState(198); + match(SEMICOLON); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ThenStatContext extends ParserRuleContext { + public StatContext stat() { + return getRuleContext(StatContext.class,0); + } + public ThenStatContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_thenStat; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterThenStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitThenStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitThenStat(this); + else return visitor.visitChildren(this); + } + } + + public final ThenStatContext thenStat() throws RecognitionException { + ThenStatContext _localctx = new ThenStatContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_thenStat); + try { + enterOuterAlt(_localctx, 1); + { + setState(202); + stat(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ElseStatContext extends ParserRuleContext { + public StatContext stat() { + return getRuleContext(StatContext.class,0); + } + public ElseStatContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elseStat; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterElseStat(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitElseStat(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitElseStat(this); + else return visitor.visitChildren(this); + } + } + + public final ElseStatContext elseStat() throws RecognitionException { + ElseStatContext _localctx = new ElseStatContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_elseStat); + try { + enterOuterAlt(_localctx, 1); + { + setState(204); + stat(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExprContext extends ParserRuleContext { + public ExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr; } + + public ExprContext() { } + public void copyFrom(ExprContext ctx) { + super.copyFrom(ctx); + } + } + public static class NewObjectExprContext extends ExprContext { + public NewObjectContext newObject() { + return getRuleContext(NewObjectContext.class,0); + } + public NewObjectExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterNewObjectExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitNewObjectExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitNewObjectExpr(this); + else return visitor.visitChildren(this); + } + } + public static class SubtractExprContext extends ExprContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode MINUS() { return getToken(ElsaParser.MINUS, 0); } + public SubtractExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterSubtractExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitSubtractExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitSubtractExpr(this); + else return visitor.visitChildren(this); + } + } + public static class IncrementExprContext extends ExprContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode INCREMENT() { return getToken(ElsaParser.INCREMENT, 0); } + public IncrementExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterIncrementExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitIncrementExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitIncrementExpr(this); + else return visitor.visitChildren(this); + } + } + public static class ObjectExprContext extends ExprContext { + public ObjectContext object() { + return getRuleContext(ObjectContext.class,0); + } + public ObjectExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterObjectExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitObjectExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitObjectExpr(this); + else return visitor.visitChildren(this); + } + } + public static class StringValueExprContext extends ExprContext { + public TerminalNode STRING_VAL() { return getToken(ElsaParser.STRING_VAL, 0); } + public StringValueExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterStringValueExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitStringValueExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitStringValueExpr(this); + else return visitor.visitChildren(this); + } + } + public static class MultiplyExprContext extends ExprContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode STAR() { return getToken(ElsaParser.STAR, 0); } + public MultiplyExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterMultiplyExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitMultiplyExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitMultiplyExpr(this); + else return visitor.visitChildren(this); + } + } + public static class ParenthesesExprContext extends ExprContext { + public TerminalNode PARENTHESES_OPEN() { return getToken(ElsaParser.PARENTHESES_OPEN, 0); } + public TerminalNode PARENTHESES_CLOSE() { return getToken(ElsaParser.PARENTHESES_CLOSE, 0); } + public ExprListContext exprList() { + return getRuleContext(ExprListContext.class,0); + } + public ParenthesesExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterParenthesesExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitParenthesesExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitParenthesesExpr(this); + else return visitor.visitChildren(this); + } + } + public static class FunctionExprContext extends ExprContext { + public FuncCallContext funcCall() { + return getRuleContext(FuncCallContext.class,0); + } + public FunctionExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterFunctionExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitFunctionExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitFunctionExpr(this); + else return visitor.visitChildren(this); + } + } + public static class DecrementExprContext extends ExprContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode DECREMENT() { return getToken(ElsaParser.DECREMENT, 0); } + public DecrementExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterDecrementExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitDecrementExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitDecrementExpr(this); + else return visitor.visitChildren(this); + } + } + public static class NegateExprContext extends ExprContext { + public TerminalNode MINUS() { return getToken(ElsaParser.MINUS, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public NegateExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterNegateExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitNegateExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitNegateExpr(this); + else return visitor.visitChildren(this); + } + } + public static class MethodCallExprContext extends ExprContext { + public MethodCallContext methodCall() { + return getRuleContext(MethodCallContext.class,0); + } + public MethodCallExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterMethodCallExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitMethodCallExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitMethodCallExpr(this); + else return visitor.visitChildren(this); + } + } + public static class VariableExprContext extends ExprContext { + public TerminalNode ID() { return getToken(ElsaParser.ID, 0); } + public VariableExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterVariableExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitVariableExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitVariableExpr(this); + else return visitor.visitChildren(this); + } + } + public static class NotExprContext extends ExprContext { + public TerminalNode EXCLAMATION() { return getToken(ElsaParser.EXCLAMATION, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public NotExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterNotExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitNotExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitNotExpr(this); + else return visitor.visitChildren(this); + } + } + public static class IntegerValueExprContext extends ExprContext { + public TerminalNode INTEGER_VAL() { return getToken(ElsaParser.INTEGER_VAL, 0); } + public IntegerValueExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterIntegerValueExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitIntegerValueExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitIntegerValueExpr(this); + else return visitor.visitChildren(this); + } + } + public static class AddExprContext extends ExprContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode PLUS() { return getToken(ElsaParser.PLUS, 0); } + public AddExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterAddExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitAddExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitAddExpr(this); + else return visitor.visitChildren(this); + } + } + public static class BackTickStringValueExprContext extends ExprContext { + public TerminalNode BACKTICKSTRING_VAL() { return getToken(ElsaParser.BACKTICKSTRING_VAL, 0); } + public BackTickStringValueExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterBackTickStringValueExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitBackTickStringValueExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitBackTickStringValueExpr(this); + else return visitor.visitChildren(this); + } + } + public static class BracketsExprContext extends ExprContext { + public TerminalNode BRACKET_OPEN() { return getToken(ElsaParser.BRACKET_OPEN, 0); } + public TerminalNode BRACKET_CLOSE() { return getToken(ElsaParser.BRACKET_CLOSE, 0); } + public ExprListContext exprList() { + return getRuleContext(ExprListContext.class,0); + } + public BracketsExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterBracketsExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitBracketsExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitBracketsExpr(this); + else return visitor.visitChildren(this); + } + } + public static class CompareExprContext extends ExprContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode EQUALS() { return getToken(ElsaParser.EQUALS, 0); } + public TerminalNode GREATER() { return getToken(ElsaParser.GREATER, 0); } + public TerminalNode LESS() { return getToken(ElsaParser.LESS, 0); } + public CompareExprContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterCompareExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitCompareExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitCompareExpr(this); + else return visitor.visitChildren(this); + } + } + + public final ExprContext expr() throws RecognitionException { + return expr(0); + } + + private ExprContext expr(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExprContext _localctx = new ExprContext(_ctx, _parentState); + ExprContext _prevctx = _localctx; + int _startState = 38; + enterRecursionRule(_localctx, 38, RULE_expr, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(229); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { + case 1: + { + _localctx = new FunctionExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(207); + funcCall(); + } + break; + case 2: + { + _localctx = new ObjectExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(208); + object(); + } + break; + case 3: + { + _localctx = new NewObjectExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(209); + newObject(); + } + break; + case 4: + { + _localctx = new NegateExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(210); + match(MINUS); + setState(211); + expr(13); + } + break; + case 5: + { + _localctx = new NotExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(212); + match(EXCLAMATION); + setState(213); + expr(12); + } + break; + case 6: + { + _localctx = new IntegerValueExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(214); + match(INTEGER_VAL); + } + break; + case 7: + { + _localctx = new StringValueExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(215); + match(STRING_VAL); + } + break; + case 8: + { + _localctx = new BackTickStringValueExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(216); + match(BACKTICKSTRING_VAL); + } + break; + case 9: + { + _localctx = new ParenthesesExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(217); + match(PARENTHESES_OPEN); + setState(219); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + setState(218); + exprList(); + } + } + + setState(221); + match(PARENTHESES_CLOSE); + } + break; + case 10: + { + _localctx = new BracketsExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(222); + match(BRACKET_OPEN); + setState(224); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + setState(223); + exprList(); + } + } + + setState(226); + match(BRACKET_CLOSE); + } + break; + case 11: + { + _localctx = new MethodCallExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(227); + methodCall(); + } + break; + case 12: + { + _localctx = new VariableExprContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(228); + match(ID); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(249); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,24,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(247); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { + case 1: + { + _localctx = new MultiplyExprContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(231); + if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); + setState(232); + match(STAR); + setState(233); + expr(12); + } + break; + case 2: + { + _localctx = new AddExprContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(234); + if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); + setState(235); + match(PLUS); + setState(236); + expr(11); + } + break; + case 3: + { + _localctx = new SubtractExprContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(237); + if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(238); + match(MINUS); + setState(239); + expr(10); + } + break; + case 4: + { + _localctx = new CompareExprContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(240); + if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(241); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GREATER) | (1L << EQUALS) | (1L << LESS))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(242); + expr(9); + } + break; + case 5: + { + _localctx = new IncrementExprContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(243); + if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); + setState(244); + match(INCREMENT); + } + break; + case 6: + { + _localctx = new DecrementExprContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(245); + if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); + setState(246); + match(DECREMENT); + } + break; + } + } + } + setState(251); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,24,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class ExprListContext extends ParserRuleContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List COMMA() { return getTokens(ElsaParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(ElsaParser.COMMA, i); + } + public ExprListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exprList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).enterExprList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof ElsaParserListener ) ((ElsaParserListener)listener).exitExprList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof ElsaParserVisitor ) return ((ElsaParserVisitor)visitor).visitExprList(this); + else return visitor.visitChildren(this); + } + } + + public final ExprListContext exprList() throws RecognitionException { + ExprListContext _localctx = new ExprListContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_exprList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(252); + expr(0); + setState(257); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(253); + match(COMMA); + setState(254); + expr(0); + } + } + setState(259); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 19: + return expr_sempred((ExprContext)_localctx, predIndex); + } + return true; + } + private boolean expr_sempred(ExprContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 11); + case 1: + return precpred(_ctx, 10); + case 2: + return precpred(_ctx, 9); + case 3: + return precpred(_ctx, 8); + case 4: + return precpred(_ctx, 15); + case 5: + return precpred(_ctx, 14); + } + return true; + } + + public static final String _serializedATN = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\62\u0107\4\2\t\2"+ + "\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\3\2\3\2\7\2/\n\2\f\2\16\2\62"+ + "\13\2\3\3\3\3\5\3\66\n\3\3\4\3\4\3\4\3\4\3\4\3\4\5\4>\n\4\3\4\3\4\5\4"+ + "B\n\4\3\4\3\4\3\5\3\5\3\5\3\5\5\5J\n\5\3\5\3\5\5\5N\n\5\3\6\3\6\3\6\3"+ + "\6\5\6T\n\6\3\6\3\6\5\6X\n\6\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+ + "\b\3\b\5\bf\n\b\3\t\7\ti\n\t\f\t\16\tl\13\t\3\n\3\n\3\n\3\n\3\13\3\13"+ + "\3\13\5\13u\n\13\3\13\3\13\3\f\3\f\3\f\7\f|\n\f\f\f\16\f\177\13\f\3\r"+ + "\3\r\5\r\u0083\n\r\3\16\3\16\7\16\u0087\n\16\f\16\16\16\u008a\13\16\3"+ + "\16\3\16\3\17\3\17\5\17\u0090\n\17\3\17\3\17\3\20\3\20\3\20\7\20\u0097"+ + "\n\20\f\20\16\20\u009a\13\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3"+ + "\22\3\22\3\22\3\22\3\22\5\22\u00a9\n\22\3\22\3\22\3\22\3\22\3\22\3\22"+ + "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u00b9\n\22\3\22\3\22\3\22"+ + "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22"+ + "\u00cb\n\22\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ + "\3\25\3\25\3\25\3\25\3\25\5\25\u00de\n\25\3\25\3\25\3\25\5\25\u00e3\n"+ + "\25\3\25\3\25\3\25\5\25\u00e8\n\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ + "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u00fa\n\25\f\25\16"+ + "\25\u00fd\13\25\3\26\3\26\3\26\7\26\u0102\n\26\f\26\16\26\u0105\13\26"+ + "\3\26\3j\3(\27\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*\2\4\4\2\17"+ + "\23\60\60\5\2\4\4\34\34\37\37\2\u0120\2\60\3\2\2\2\4\63\3\2\2\2\6\67\3"+ + "\2\2\2\bE\3\2\2\2\nO\3\2\2\2\fY\3\2\2\2\16e\3\2\2\2\20j\3\2\2\2\22m\3"+ + "\2\2\2\24q\3\2\2\2\26x\3\2\2\2\30\u0082\3\2\2\2\32\u0084\3\2\2\2\34\u008d"+ + "\3\2\2\2\36\u0093\3\2\2\2 \u009b\3\2\2\2\"\u00ca\3\2\2\2$\u00cc\3\2\2"+ + "\2&\u00ce\3\2\2\2(\u00e7\3\2\2\2*\u00fe\3\2\2\2,/\5\"\22\2-/\7.\2\2.,"+ + "\3\2\2\2.-\3\2\2\2/\62\3\2\2\2\60.\3\2\2\2\60\61\3\2\2\2\61\3\3\2\2\2"+ + "\62\60\3\2\2\2\63\65\7\60\2\2\64\66\5\34\17\2\65\64\3\2\2\2\65\66\3\2"+ + "\2\2\66\5\3\2\2\2\678\7\7\2\28=\7\60\2\29:\7\37\2\2:;\5\f\7\2;<\7\4\2"+ + "\2<>\3\2\2\2=9\3\2\2\2=>\3\2\2\2>?\3\2\2\2?A\7\"\2\2@B\5\26\f\2A@\3\2"+ + "\2\2AB\3\2\2\2BC\3\2\2\2CD\7#\2\2D\7\3\2\2\2EF\7\b\2\2FI\7\60\2\2GH\7"+ + "\26\2\2HJ\5\f\7\2IG\3\2\2\2IJ\3\2\2\2JM\3\2\2\2KL\7\3\2\2LN\5(\25\2MK"+ + "\3\2\2\2MN\3\2\2\2N\t\3\2\2\2OP\7\t\2\2PS\7\60\2\2QR\7\26\2\2RT\5\f\7"+ + "\2SQ\3\2\2\2ST\3\2\2\2TW\3\2\2\2UV\7\3\2\2VX\5(\25\2WU\3\2\2\2WX\3\2\2"+ + "\2X\13\3\2\2\2YZ\t\2\2\2Z\r\3\2\2\2[\\\7\24\2\2\\]\7\"\2\2]^\7\60\2\2"+ + "^_\7\30\2\2_`\5\20\t\2`a\7#\2\2af\3\2\2\2bc\7\60\2\2cd\7!\2\2df\5\20\t"+ + "\2e[\3\2\2\2eb\3\2\2\2f\17\3\2\2\2gi\13\2\2\2hg\3\2\2\2il\3\2\2\2jk\3"+ + "\2\2\2jh\3\2\2\2k\21\3\2\2\2lj\3\2\2\2mn\7\60\2\2no\7+\2\2op\5\24\13\2"+ + "p\23\3\2\2\2qr\7\60\2\2rt\7\"\2\2su\5\26\f\2ts\3\2\2\2tu\3\2\2\2uv\3\2"+ + "\2\2vw\7#\2\2w\25\3\2\2\2x}\5\30\r\2yz\7\30\2\2z|\5\30\r\2{y\3\2\2\2|"+ + "\177\3\2\2\2}{\3\2\2\2}~\3\2\2\2~\27\3\2\2\2\177}\3\2\2\2\u0080\u0083"+ + "\5(\25\2\u0081\u0083\5\16\b\2\u0082\u0080\3\2\2\2\u0082\u0081\3\2\2\2"+ + "\u0083\31\3\2\2\2\u0084\u0088\7&\2\2\u0085\u0087\5\"\22\2\u0086\u0085"+ + "\3\2\2\2\u0087\u008a\3\2\2\2\u0088\u0086\3\2\2\2\u0088\u0089\3\2\2\2\u0089"+ + "\u008b\3\2\2\2\u008a\u0088\3\2\2\2\u008b\u008c\7\'\2\2\u008c\33\3\2\2"+ + "\2\u008d\u008f\7&\2\2\u008e\u0090\5\36\20\2\u008f\u008e\3\2\2\2\u008f"+ + "\u0090\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0092\7\'\2\2\u0092\35\3\2\2"+ + "\2\u0093\u0098\5 \21\2\u0094\u0095\7\30\2\2\u0095\u0097\5 \21\2\u0096"+ + "\u0094\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0098\u0099\3\2"+ + "\2\2\u0099\37\3\2\2\2\u009a\u0098\3\2\2\2\u009b\u009c\7\60\2\2\u009c\u009d"+ + "\7\26\2\2\u009d\u009e\5(\25\2\u009e!\3\2\2\2\u009f\u00a0\5\4\3\2\u00a0"+ + "\u00a1\7\27\2\2\u00a1\u00cb\3\2\2\2\u00a2\u00a3\7\n\2\2\u00a3\u00a4\5"+ + "(\25\2\u00a4\u00a5\7\13\2\2\u00a5\u00a8\5$\23\2\u00a6\u00a7\7\f\2\2\u00a7"+ + "\u00a9\5&\24\2\u00a8\u00a6\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00cb\3\2"+ + "\2\2\u00aa\u00ab\7\r\2\2\u00ab\u00ac\7\"\2\2\u00ac\u00ad\7\60\2\2\u00ad"+ + "\u00ae\7\3\2\2\u00ae\u00af\5(\25\2\u00af\u00b0\7\27\2\2\u00b0\u00b1\5"+ + "(\25\2\u00b1\u00b2\7\27\2\2\u00b2\u00b3\5(\25\2\u00b3\u00b4\7#\2\2\u00b4"+ + "\u00b5\5\"\22\2\u00b5\u00cb\3\2\2\2\u00b6\u00b8\7\16\2\2\u00b7\u00b9\5"+ + "(\25\2\u00b8\u00b7\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba"+ + "\u00cb\7\27\2\2\u00bb\u00cb\5\32\16\2\u00bc\u00bd\5\b\5\2\u00bd\u00be"+ + "\7\27\2\2\u00be\u00cb\3\2\2\2\u00bf\u00c0\5\n\6\2\u00c0\u00c1\7\27\2\2"+ + "\u00c1\u00cb\3\2\2\2\u00c2\u00c3\5(\25\2\u00c3\u00c4\7\3\2\2\u00c4\u00c5"+ + "\5(\25\2\u00c5\u00c6\7\27\2\2\u00c6\u00cb\3\2\2\2\u00c7\u00c8\5(\25\2"+ + "\u00c8\u00c9\7\27\2\2\u00c9\u00cb\3\2\2\2\u00ca\u009f\3\2\2\2\u00ca\u00a2"+ + "\3\2\2\2\u00ca\u00aa\3\2\2\2\u00ca\u00b6\3\2\2\2\u00ca\u00bb\3\2\2\2\u00ca"+ + "\u00bc\3\2\2\2\u00ca\u00bf\3\2\2\2\u00ca\u00c2\3\2\2\2\u00ca\u00c7\3\2"+ + "\2\2\u00cb#\3\2\2\2\u00cc\u00cd\5\"\22\2\u00cd%\3\2\2\2\u00ce\u00cf\5"+ + "\"\22\2\u00cf\'\3\2\2\2\u00d0\u00d1\b\25\1\2\u00d1\u00e8\5\24\13\2\u00d2"+ + "\u00e8\5\4\3\2\u00d3\u00e8\5\6\4\2\u00d4\u00d5\7\32\2\2\u00d5\u00e8\5"+ + "(\25\17\u00d6\u00d7\7(\2\2\u00d7\u00e8\5(\25\16\u00d8\u00e8\7/\2\2\u00d9"+ + "\u00e8\7,\2\2\u00da\u00e8\7-\2\2\u00db\u00dd\7\"\2\2\u00dc\u00de\5*\26"+ + "\2\u00dd\u00dc\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00df\3\2\2\2\u00df\u00e8"+ + "\7#\2\2\u00e0\u00e2\7$\2\2\u00e1\u00e3\5*\26\2\u00e2\u00e1\3\2\2\2\u00e2"+ + "\u00e3\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e8\7%\2\2\u00e5\u00e8\5\22"+ + "\n\2\u00e6\u00e8\7\60\2\2\u00e7\u00d0\3\2\2\2\u00e7\u00d2\3\2\2\2\u00e7"+ + "\u00d3\3\2\2\2\u00e7\u00d4\3\2\2\2\u00e7\u00d6\3\2\2\2\u00e7\u00d8\3\2"+ + "\2\2\u00e7\u00d9\3\2\2\2\u00e7\u00da\3\2\2\2\u00e7\u00db\3\2\2\2\u00e7"+ + "\u00e0\3\2\2\2\u00e7\u00e5\3\2\2\2\u00e7\u00e6\3\2\2\2\u00e8\u00fb\3\2"+ + "\2\2\u00e9\u00ea\f\r\2\2\u00ea\u00eb\7\33\2\2\u00eb\u00fa\5(\25\16\u00ec"+ + "\u00ed\f\f\2\2\u00ed\u00ee\7\31\2\2\u00ee\u00fa\5(\25\r\u00ef\u00f0\f"+ + "\13\2\2\u00f0\u00f1\7\32\2\2\u00f1\u00fa\5(\25\f\u00f2\u00f3\f\n\2\2\u00f3"+ + "\u00f4\t\3\2\2\u00f4\u00fa\5(\25\13\u00f5\u00f6\f\21\2\2\u00f6\u00fa\7"+ + "\5\2\2\u00f7\u00f8\f\20\2\2\u00f8\u00fa\7\6\2\2\u00f9\u00e9\3\2\2\2\u00f9"+ + "\u00ec\3\2\2\2\u00f9\u00ef\3\2\2\2\u00f9\u00f2\3\2\2\2\u00f9\u00f5\3\2"+ + "\2\2\u00f9\u00f7\3\2\2\2\u00fa\u00fd\3\2\2\2\u00fb\u00f9\3\2\2\2\u00fb"+ + "\u00fc\3\2\2\2\u00fc)\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fe\u0103\5(\25\2"+ + "\u00ff\u0100\7\30\2\2\u0100\u0102\5(\25\2\u0101\u00ff\3\2\2\2\u0102\u0105"+ + "\3\2\2\2\u0103\u0101\3\2\2\2\u0103\u0104\3\2\2\2\u0104+\3\2\2\2\u0105"+ + "\u0103\3\2\2\2\34.\60\65=AIMSWejt}\u0082\u0088\u008f\u0098\u00a8\u00b8"+ + "\u00ca\u00dd\u00e2\u00e7\u00f9\u00fb\u0103"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/gen/ElsaParser.tokens b/gen/ElsaParser.tokens new file mode 100644 index 0000000..0d4fb8c --- /dev/null +++ b/gen/ElsaParser.tokens @@ -0,0 +1,89 @@ +EQ=1 +GREATER=2 +INCREMENT=3 +DECREMENT=4 +NEW=5 +VARIABLE=6 +LET=7 +IF=8 +THEN=9 +ELSE=10 +FOR=11 +RETURN=12 +VOID=13 +FLOAT=14 +INT=15 +STRING=16 +OBJECT=17 +EXPRESSION_MARKER=18 +SYMBOL=19 +COLON=20 +SEMICOLON=21 +COMMA=22 +PLUS=23 +MINUS=24 +STAR=25 +EQUALS=26 +NOT_EQUALS=27 +GREATER_EQUALS=28 +LESS=29 +LESS_EQUALS=30 +LAMBDA=31 +PARENTHESES_OPEN=32 +PARENTHESES_CLOSE=33 +BRACKET_OPEN=34 +BRACKET_CLOSE=35 +CURLYBRACE_OPEN=36 +CURLYBRACE_CLOSE=37 +EXCLAMATION=38 +PIPE=39 +PIPE_DBL=40 +PERIOD=41 +STRING_VAL=42 +BACKTICKSTRING_VAL=43 +LINE_COMMENT=44 +INTEGER_VAL=45 +ID=46 +WS=47 +ESC=48 +'='=1 +'>'=2 +'++'=3 +'--'=4 +'new'=5 +'variable'=6 +'let'=7 +'if'=8 +'then'=9 +'else'=10 +'for'=11 +'return'=12 +'void'=13 +'float'=14 +'int'=15 +'string'=16 +'object'=17 +'expression'=18 +':'=20 +';'=21 +','=22 +'+'=23 +'-'=24 +'*'=25 +'=='=26 +'!='=27 +'>='=28 +'<'=29 +'<='=30 +'=>'=31 +'('=32 +')'=33 +'['=34 +']'=35 +'{'=36 +'}'=37 +'!'=38 +'|'=39 +'||'=40 +'.'=41 +'\\|'=48 diff --git a/gen/ElsaParserBaseListener.java b/gen/ElsaParserBaseListener.java new file mode 100644 index 0000000..56db6cb --- /dev/null +++ b/gen/ElsaParserBaseListener.java @@ -0,0 +1,590 @@ +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.9.2 + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link ElsaParserListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +public class ElsaParserBaseListener implements ElsaParserListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProgram(ElsaParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProgram(ElsaParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObject(ElsaParser.ObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObject(ElsaParser.ObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNewObject(ElsaParser.NewObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNewObject(ElsaParser.NewObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVarDecl(ElsaParser.VarDeclContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVarDecl(ElsaParser.VarDeclContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLocalVarDecl(ElsaParser.LocalVarDeclContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLocalVarDecl(ElsaParser.LocalVarDeclContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterType(ElsaParser.TypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitType(ElsaParser.TypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionMarker(ElsaParser.ExpressionMarkerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionMarker(ElsaParser.ExpressionMarkerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionContent(ElsaParser.ExpressionContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionContent(ElsaParser.ExpressionContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMethodCall(ElsaParser.MethodCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMethodCall(ElsaParser.MethodCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncCall(ElsaParser.FuncCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncCall(ElsaParser.FuncCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArgs(ElsaParser.ArgsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArgs(ElsaParser.ArgsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArg(ElsaParser.ArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArg(ElsaParser.ArgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlock(ElsaParser.BlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlock(ElsaParser.BlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectInitializer(ElsaParser.ObjectInitializerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectInitializer(ElsaParser.ObjectInitializerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPropertyList(ElsaParser.PropertyListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPropertyList(ElsaParser.PropertyListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProperty(ElsaParser.PropertyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProperty(ElsaParser.PropertyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectStat(ElsaParser.ObjectStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectStat(ElsaParser.ObjectStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfStat(ElsaParser.IfStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfStat(ElsaParser.IfStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForStat(ElsaParser.ForStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForStat(ElsaParser.ForStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReturnStat(ElsaParser.ReturnStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReturnStat(ElsaParser.ReturnStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlockStat(ElsaParser.BlockStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlockStat(ElsaParser.BlockStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLocalVariableDeclarationStat(ElsaParser.LocalVariableDeclarationStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLocalVariableDeclarationStat(ElsaParser.LocalVariableDeclarationStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignmentStat(ElsaParser.AssignmentStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignmentStat(ElsaParser.AssignmentStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpressionStat(ElsaParser.ExpressionStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpressionStat(ElsaParser.ExpressionStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterThenStat(ElsaParser.ThenStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitThenStat(ElsaParser.ThenStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElseStat(ElsaParser.ElseStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElseStat(ElsaParser.ElseStatContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNewObjectExpr(ElsaParser.NewObjectExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNewObjectExpr(ElsaParser.NewObjectExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSubtractExpr(ElsaParser.SubtractExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSubtractExpr(ElsaParser.SubtractExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIncrementExpr(ElsaParser.IncrementExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIncrementExpr(ElsaParser.IncrementExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectExpr(ElsaParser.ObjectExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectExpr(ElsaParser.ObjectExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringValueExpr(ElsaParser.StringValueExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringValueExpr(ElsaParser.StringValueExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiplyExpr(ElsaParser.MultiplyExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiplyExpr(ElsaParser.MultiplyExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesesExpr(ElsaParser.ParenthesesExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesesExpr(ElsaParser.ParenthesesExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionExpr(ElsaParser.FunctionExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionExpr(ElsaParser.FunctionExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDecrementExpr(ElsaParser.DecrementExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDecrementExpr(ElsaParser.DecrementExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNegateExpr(ElsaParser.NegateExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNegateExpr(ElsaParser.NegateExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMethodCallExpr(ElsaParser.MethodCallExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMethodCallExpr(ElsaParser.MethodCallExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariableExpr(ElsaParser.VariableExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariableExpr(ElsaParser.VariableExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNotExpr(ElsaParser.NotExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNotExpr(ElsaParser.NotExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIntegerValueExpr(ElsaParser.IntegerValueExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIntegerValueExpr(ElsaParser.IntegerValueExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAddExpr(ElsaParser.AddExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAddExpr(ElsaParser.AddExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBracketsExpr(ElsaParser.BracketsExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBracketsExpr(ElsaParser.BracketsExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCompareExpr(ElsaParser.CompareExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCompareExpr(ElsaParser.CompareExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprList(ElsaParser.ExprListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprList(ElsaParser.ExprListContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/gen/ElsaParserBaseVisitor.java b/gen/ElsaParserBaseVisitor.java new file mode 100644 index 0000000..391b174 --- /dev/null +++ b/gen/ElsaParserBaseVisitor.java @@ -0,0 +1,335 @@ +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.9.2 +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link ElsaParserVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public class ElsaParserBaseVisitor extends AbstractParseTreeVisitor implements ElsaParserVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProgram(ElsaParser.ProgramContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObject(ElsaParser.ObjectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNewObject(ElsaParser.NewObjectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVarDecl(ElsaParser.VarDeclContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLocalVarDecl(ElsaParser.LocalVarDeclContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitType(ElsaParser.TypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionMarker(ElsaParser.ExpressionMarkerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionContent(ElsaParser.ExpressionContentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMethodCall(ElsaParser.MethodCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncCall(ElsaParser.FuncCallContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArgs(ElsaParser.ArgsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArg(ElsaParser.ArgContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlock(ElsaParser.BlockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectInitializer(ElsaParser.ObjectInitializerContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPropertyList(ElsaParser.PropertyListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProperty(ElsaParser.PropertyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectStat(ElsaParser.ObjectStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIfStat(ElsaParser.IfStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitForStat(ElsaParser.ForStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReturnStat(ElsaParser.ReturnStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlockStat(ElsaParser.BlockStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLocalVariableDeclarationStat(ElsaParser.LocalVariableDeclarationStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignmentStat(ElsaParser.AssignmentStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpressionStat(ElsaParser.ExpressionStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitThenStat(ElsaParser.ThenStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElseStat(ElsaParser.ElseStatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNewObjectExpr(ElsaParser.NewObjectExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubtractExpr(ElsaParser.SubtractExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIncrementExpr(ElsaParser.IncrementExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectExpr(ElsaParser.ObjectExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringValueExpr(ElsaParser.StringValueExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMultiplyExpr(ElsaParser.MultiplyExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitParenthesesExpr(ElsaParser.ParenthesesExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionExpr(ElsaParser.FunctionExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDecrementExpr(ElsaParser.DecrementExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNegateExpr(ElsaParser.NegateExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMethodCallExpr(ElsaParser.MethodCallExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariableExpr(ElsaParser.VariableExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNotExpr(ElsaParser.NotExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIntegerValueExpr(ElsaParser.IntegerValueExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAddExpr(ElsaParser.AddExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBracketsExpr(ElsaParser.BracketsExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCompareExpr(ElsaParser.CompareExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprList(ElsaParser.ExprListContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/gen/ElsaParserListener.java b/gen/ElsaParserListener.java new file mode 100644 index 0000000..2d8168e --- /dev/null +++ b/gen/ElsaParserListener.java @@ -0,0 +1,523 @@ +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.9.2 +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link ElsaParser}. + */ +public interface ElsaParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link ElsaParser#program}. + * @param ctx the parse tree + */ + void enterProgram(ElsaParser.ProgramContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#program}. + * @param ctx the parse tree + */ + void exitProgram(ElsaParser.ProgramContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#object}. + * @param ctx the parse tree + */ + void enterObject(ElsaParser.ObjectContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#object}. + * @param ctx the parse tree + */ + void exitObject(ElsaParser.ObjectContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#newObject}. + * @param ctx the parse tree + */ + void enterNewObject(ElsaParser.NewObjectContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#newObject}. + * @param ctx the parse tree + */ + void exitNewObject(ElsaParser.NewObjectContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#varDecl}. + * @param ctx the parse tree + */ + void enterVarDecl(ElsaParser.VarDeclContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#varDecl}. + * @param ctx the parse tree + */ + void exitVarDecl(ElsaParser.VarDeclContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#localVarDecl}. + * @param ctx the parse tree + */ + void enterLocalVarDecl(ElsaParser.LocalVarDeclContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#localVarDecl}. + * @param ctx the parse tree + */ + void exitLocalVarDecl(ElsaParser.LocalVarDeclContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#type}. + * @param ctx the parse tree + */ + void enterType(ElsaParser.TypeContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#type}. + * @param ctx the parse tree + */ + void exitType(ElsaParser.TypeContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#expressionMarker}. + * @param ctx the parse tree + */ + void enterExpressionMarker(ElsaParser.ExpressionMarkerContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#expressionMarker}. + * @param ctx the parse tree + */ + void exitExpressionMarker(ElsaParser.ExpressionMarkerContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#expressionContent}. + * @param ctx the parse tree + */ + void enterExpressionContent(ElsaParser.ExpressionContentContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#expressionContent}. + * @param ctx the parse tree + */ + void exitExpressionContent(ElsaParser.ExpressionContentContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#methodCall}. + * @param ctx the parse tree + */ + void enterMethodCall(ElsaParser.MethodCallContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#methodCall}. + * @param ctx the parse tree + */ + void exitMethodCall(ElsaParser.MethodCallContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#funcCall}. + * @param ctx the parse tree + */ + void enterFuncCall(ElsaParser.FuncCallContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#funcCall}. + * @param ctx the parse tree + */ + void exitFuncCall(ElsaParser.FuncCallContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#args}. + * @param ctx the parse tree + */ + void enterArgs(ElsaParser.ArgsContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#args}. + * @param ctx the parse tree + */ + void exitArgs(ElsaParser.ArgsContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#arg}. + * @param ctx the parse tree + */ + void enterArg(ElsaParser.ArgContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#arg}. + * @param ctx the parse tree + */ + void exitArg(ElsaParser.ArgContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#block}. + * @param ctx the parse tree + */ + void enterBlock(ElsaParser.BlockContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#block}. + * @param ctx the parse tree + */ + void exitBlock(ElsaParser.BlockContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#objectInitializer}. + * @param ctx the parse tree + */ + void enterObjectInitializer(ElsaParser.ObjectInitializerContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#objectInitializer}. + * @param ctx the parse tree + */ + void exitObjectInitializer(ElsaParser.ObjectInitializerContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#propertyList}. + * @param ctx the parse tree + */ + void enterPropertyList(ElsaParser.PropertyListContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#propertyList}. + * @param ctx the parse tree + */ + void exitPropertyList(ElsaParser.PropertyListContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#property}. + * @param ctx the parse tree + */ + void enterProperty(ElsaParser.PropertyContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#property}. + * @param ctx the parse tree + */ + void exitProperty(ElsaParser.PropertyContext ctx); + /** + * Enter a parse tree produced by the {@code objectStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterObjectStat(ElsaParser.ObjectStatContext ctx); + /** + * Exit a parse tree produced by the {@code objectStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitObjectStat(ElsaParser.ObjectStatContext ctx); + /** + * Enter a parse tree produced by the {@code ifStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterIfStat(ElsaParser.IfStatContext ctx); + /** + * Exit a parse tree produced by the {@code ifStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitIfStat(ElsaParser.IfStatContext ctx); + /** + * Enter a parse tree produced by the {@code forStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterForStat(ElsaParser.ForStatContext ctx); + /** + * Exit a parse tree produced by the {@code forStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitForStat(ElsaParser.ForStatContext ctx); + /** + * Enter a parse tree produced by the {@code returnStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterReturnStat(ElsaParser.ReturnStatContext ctx); + /** + * Exit a parse tree produced by the {@code returnStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitReturnStat(ElsaParser.ReturnStatContext ctx); + /** + * Enter a parse tree produced by the {@code blockStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterBlockStat(ElsaParser.BlockStatContext ctx); + /** + * Exit a parse tree produced by the {@code blockStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitBlockStat(ElsaParser.BlockStatContext ctx); + /** + * Enter a parse tree produced by the {@code variableDeclarationStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext ctx); + /** + * Exit a parse tree produced by the {@code variableDeclarationStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext ctx); + /** + * Enter a parse tree produced by the {@code localVariableDeclarationStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterLocalVariableDeclarationStat(ElsaParser.LocalVariableDeclarationStatContext ctx); + /** + * Exit a parse tree produced by the {@code localVariableDeclarationStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitLocalVariableDeclarationStat(ElsaParser.LocalVariableDeclarationStatContext ctx); + /** + * Enter a parse tree produced by the {@code assignmentStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterAssignmentStat(ElsaParser.AssignmentStatContext ctx); + /** + * Exit a parse tree produced by the {@code assignmentStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitAssignmentStat(ElsaParser.AssignmentStatContext ctx); + /** + * Enter a parse tree produced by the {@code expressionStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void enterExpressionStat(ElsaParser.ExpressionStatContext ctx); + /** + * Exit a parse tree produced by the {@code expressionStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + */ + void exitExpressionStat(ElsaParser.ExpressionStatContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#thenStat}. + * @param ctx the parse tree + */ + void enterThenStat(ElsaParser.ThenStatContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#thenStat}. + * @param ctx the parse tree + */ + void exitThenStat(ElsaParser.ThenStatContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#elseStat}. + * @param ctx the parse tree + */ + void enterElseStat(ElsaParser.ElseStatContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#elseStat}. + * @param ctx the parse tree + */ + void exitElseStat(ElsaParser.ElseStatContext ctx); + /** + * Enter a parse tree produced by the {@code newObjectExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterNewObjectExpr(ElsaParser.NewObjectExprContext ctx); + /** + * Exit a parse tree produced by the {@code newObjectExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitNewObjectExpr(ElsaParser.NewObjectExprContext ctx); + /** + * Enter a parse tree produced by the {@code subtractExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterSubtractExpr(ElsaParser.SubtractExprContext ctx); + /** + * Exit a parse tree produced by the {@code subtractExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitSubtractExpr(ElsaParser.SubtractExprContext ctx); + /** + * Enter a parse tree produced by the {@code incrementExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterIncrementExpr(ElsaParser.IncrementExprContext ctx); + /** + * Exit a parse tree produced by the {@code incrementExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitIncrementExpr(ElsaParser.IncrementExprContext ctx); + /** + * Enter a parse tree produced by the {@code objectExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterObjectExpr(ElsaParser.ObjectExprContext ctx); + /** + * Exit a parse tree produced by the {@code objectExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitObjectExpr(ElsaParser.ObjectExprContext ctx); + /** + * Enter a parse tree produced by the {@code stringValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterStringValueExpr(ElsaParser.StringValueExprContext ctx); + /** + * Exit a parse tree produced by the {@code stringValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitStringValueExpr(ElsaParser.StringValueExprContext ctx); + /** + * Enter a parse tree produced by the {@code multiplyExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterMultiplyExpr(ElsaParser.MultiplyExprContext ctx); + /** + * Exit a parse tree produced by the {@code multiplyExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitMultiplyExpr(ElsaParser.MultiplyExprContext ctx); + /** + * Enter a parse tree produced by the {@code parenthesesExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterParenthesesExpr(ElsaParser.ParenthesesExprContext ctx); + /** + * Exit a parse tree produced by the {@code parenthesesExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitParenthesesExpr(ElsaParser.ParenthesesExprContext ctx); + /** + * Enter a parse tree produced by the {@code functionExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterFunctionExpr(ElsaParser.FunctionExprContext ctx); + /** + * Exit a parse tree produced by the {@code functionExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitFunctionExpr(ElsaParser.FunctionExprContext ctx); + /** + * Enter a parse tree produced by the {@code decrementExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterDecrementExpr(ElsaParser.DecrementExprContext ctx); + /** + * Exit a parse tree produced by the {@code decrementExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitDecrementExpr(ElsaParser.DecrementExprContext ctx); + /** + * Enter a parse tree produced by the {@code negateExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterNegateExpr(ElsaParser.NegateExprContext ctx); + /** + * Exit a parse tree produced by the {@code negateExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitNegateExpr(ElsaParser.NegateExprContext ctx); + /** + * Enter a parse tree produced by the {@code methodCallExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterMethodCallExpr(ElsaParser.MethodCallExprContext ctx); + /** + * Exit a parse tree produced by the {@code methodCallExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitMethodCallExpr(ElsaParser.MethodCallExprContext ctx); + /** + * Enter a parse tree produced by the {@code variableExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterVariableExpr(ElsaParser.VariableExprContext ctx); + /** + * Exit a parse tree produced by the {@code variableExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitVariableExpr(ElsaParser.VariableExprContext ctx); + /** + * Enter a parse tree produced by the {@code notExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterNotExpr(ElsaParser.NotExprContext ctx); + /** + * Exit a parse tree produced by the {@code notExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitNotExpr(ElsaParser.NotExprContext ctx); + /** + * Enter a parse tree produced by the {@code integerValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterIntegerValueExpr(ElsaParser.IntegerValueExprContext ctx); + /** + * Exit a parse tree produced by the {@code integerValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitIntegerValueExpr(ElsaParser.IntegerValueExprContext ctx); + /** + * Enter a parse tree produced by the {@code addExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterAddExpr(ElsaParser.AddExprContext ctx); + /** + * Exit a parse tree produced by the {@code addExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitAddExpr(ElsaParser.AddExprContext ctx); + /** + * Enter a parse tree produced by the {@code backTickStringValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext ctx); + /** + * Exit a parse tree produced by the {@code backTickStringValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext ctx); + /** + * Enter a parse tree produced by the {@code bracketsExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterBracketsExpr(ElsaParser.BracketsExprContext ctx); + /** + * Exit a parse tree produced by the {@code bracketsExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitBracketsExpr(ElsaParser.BracketsExprContext ctx); + /** + * Enter a parse tree produced by the {@code compareExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void enterCompareExpr(ElsaParser.CompareExprContext ctx); + /** + * Exit a parse tree produced by the {@code compareExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + */ + void exitCompareExpr(ElsaParser.CompareExprContext ctx); + /** + * Enter a parse tree produced by {@link ElsaParser#exprList}. + * @param ctx the parse tree + */ + void enterExprList(ElsaParser.ExprListContext ctx); + /** + * Exit a parse tree produced by {@link ElsaParser#exprList}. + * @param ctx the parse tree + */ + void exitExprList(ElsaParser.ExprListContext ctx); +} \ No newline at end of file diff --git a/gen/ElsaParserVisitor.java b/gen/ElsaParserVisitor.java new file mode 100644 index 0000000..6912115 --- /dev/null +++ b/gen/ElsaParserVisitor.java @@ -0,0 +1,315 @@ +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.9.2 +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link ElsaParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface ElsaParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link ElsaParser#program}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProgram(ElsaParser.ProgramContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#object}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObject(ElsaParser.ObjectContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#newObject}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNewObject(ElsaParser.NewObjectContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#varDecl}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVarDecl(ElsaParser.VarDeclContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#localVarDecl}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLocalVarDecl(ElsaParser.LocalVarDeclContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#type}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitType(ElsaParser.TypeContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#expressionMarker}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionMarker(ElsaParser.ExpressionMarkerContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#expressionContent}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionContent(ElsaParser.ExpressionContentContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#methodCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMethodCall(ElsaParser.MethodCallContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#funcCall}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncCall(ElsaParser.FuncCallContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#args}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArgs(ElsaParser.ArgsContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#arg}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArg(ElsaParser.ArgContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlock(ElsaParser.BlockContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#objectInitializer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectInitializer(ElsaParser.ObjectInitializerContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#propertyList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPropertyList(ElsaParser.PropertyListContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#property}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProperty(ElsaParser.PropertyContext ctx); + /** + * Visit a parse tree produced by the {@code objectStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectStat(ElsaParser.ObjectStatContext ctx); + /** + * Visit a parse tree produced by the {@code ifStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfStat(ElsaParser.IfStatContext ctx); + /** + * Visit a parse tree produced by the {@code forStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForStat(ElsaParser.ForStatContext ctx); + /** + * Visit a parse tree produced by the {@code returnStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReturnStat(ElsaParser.ReturnStatContext ctx); + /** + * Visit a parse tree produced by the {@code blockStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlockStat(ElsaParser.BlockStatContext ctx); + /** + * Visit a parse tree produced by the {@code variableDeclarationStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext ctx); + /** + * Visit a parse tree produced by the {@code localVariableDeclarationStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLocalVariableDeclarationStat(ElsaParser.LocalVariableDeclarationStatContext ctx); + /** + * Visit a parse tree produced by the {@code assignmentStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignmentStat(ElsaParser.AssignmentStatContext ctx); + /** + * Visit a parse tree produced by the {@code expressionStat} + * labeled alternative in {@link ElsaParser#stat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionStat(ElsaParser.ExpressionStatContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#thenStat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitThenStat(ElsaParser.ThenStatContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#elseStat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElseStat(ElsaParser.ElseStatContext ctx); + /** + * Visit a parse tree produced by the {@code newObjectExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNewObjectExpr(ElsaParser.NewObjectExprContext ctx); + /** + * Visit a parse tree produced by the {@code subtractExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubtractExpr(ElsaParser.SubtractExprContext ctx); + /** + * Visit a parse tree produced by the {@code incrementExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIncrementExpr(ElsaParser.IncrementExprContext ctx); + /** + * Visit a parse tree produced by the {@code objectExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectExpr(ElsaParser.ObjectExprContext ctx); + /** + * Visit a parse tree produced by the {@code stringValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringValueExpr(ElsaParser.StringValueExprContext ctx); + /** + * Visit a parse tree produced by the {@code multiplyExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMultiplyExpr(ElsaParser.MultiplyExprContext ctx); + /** + * Visit a parse tree produced by the {@code parenthesesExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitParenthesesExpr(ElsaParser.ParenthesesExprContext ctx); + /** + * Visit a parse tree produced by the {@code functionExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionExpr(ElsaParser.FunctionExprContext ctx); + /** + * Visit a parse tree produced by the {@code decrementExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDecrementExpr(ElsaParser.DecrementExprContext ctx); + /** + * Visit a parse tree produced by the {@code negateExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNegateExpr(ElsaParser.NegateExprContext ctx); + /** + * Visit a parse tree produced by the {@code methodCallExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMethodCallExpr(ElsaParser.MethodCallExprContext ctx); + /** + * Visit a parse tree produced by the {@code variableExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariableExpr(ElsaParser.VariableExprContext ctx); + /** + * Visit a parse tree produced by the {@code notExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNotExpr(ElsaParser.NotExprContext ctx); + /** + * Visit a parse tree produced by the {@code integerValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIntegerValueExpr(ElsaParser.IntegerValueExprContext ctx); + /** + * Visit a parse tree produced by the {@code addExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAddExpr(ElsaParser.AddExprContext ctx); + /** + * Visit a parse tree produced by the {@code backTickStringValueExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext ctx); + /** + * Visit a parse tree produced by the {@code bracketsExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBracketsExpr(ElsaParser.BracketsExprContext ctx); + /** + * Visit a parse tree produced by the {@code compareExpr} + * labeled alternative in {@link ElsaParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCompareExpr(ElsaParser.CompareExprContext ctx); + /** + * Visit a parse tree produced by {@link ElsaParser#exprList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprList(ElsaParser.ExprListContext ctx); +} \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..47e1cad Binary files /dev/null and b/icon.png differ diff --git a/scripts/docker/build-and-run-all-in-one-web-docker.sh b/scripts/docker/build-and-run-all-in-one-web-docker.sh new file mode 100644 index 0000000..c307fa1 --- /dev/null +++ b/scripts/docker/build-and-run-all-in-one-web-docker.sh @@ -0,0 +1,2 @@ +docker build -t elsa-server:latest -f ../../docker/ElsaServer.Dockerfile . +docker run -t -i -e ASPNETCORE_ENVIRONMENT='Development' -e HTTP_PORTS=8080 -p 13000:8080 elsa-server:local \ No newline at end of file diff --git a/scripts/docker/docker-compose-citus.yml b/scripts/docker/docker-compose-citus.yml new file mode 100644 index 0000000..3575fac --- /dev/null +++ b/scripts/docker/docker-compose-citus.yml @@ -0,0 +1,65 @@ +services: + # Coordinator Node + citus-coordinator: + image: citusdata/citus:latest + container_name: citus-coordinator + ports: + - "9700:5432" + environment: + POSTGRES_DB: citus + POSTGRES_USER: citus + POSTGRES_PASSWORD: citus + CITUS_HOST: citus-coordinator + command: [ "postgres", "-c", "wal_level=logical" ] + healthcheck: + test: ["CMD", "pg_isready", "-U", "citus"] + interval: 10s + retries: 5 + networks: + - citus-network + + # Worker Node 1 + citus-worker-1: + image: citusdata/citus:latest + container_name: citus-worker-1 + environment: + POSTGRES_DB: citus + POSTGRES_USER: citus + POSTGRES_PASSWORD: citus + CITUS_HOST: citus-worker-1 + command: [ "postgres", "-c", "wal_level=logical" ] + depends_on: + - citus-coordinator + networks: + - citus-network + + # Worker Node 2 + citus-worker-2: + image: citusdata/citus:latest + container_name: citus-worker-2 + environment: + POSTGRES_DB: citus + POSTGRES_USER: citus + POSTGRES_PASSWORD: citus + CITUS_HOST: citus-worker-2 + command: [ "postgres", "-c", "wal_level=logical" ] + depends_on: + - citus-coordinator + networks: + - citus-network + + # Citus Manager (optional - registers worker nodes automatically) + citus-manager: + image: citusdata/citus:latest + container_name: citus-manager + depends_on: + - citus-coordinator + - citus-worker-1 + - citus-worker-2 + command: [ "citus_setup" ] + networks: + - citus-network + +networks: + citus-network: + driver: bridge diff --git a/scripts/docker/docker-compose-yugabyte.yml b/scripts/docker/docker-compose-yugabyte.yml new file mode 100644 index 0000000..9dd6c48 --- /dev/null +++ b/scripts/docker/docker-compose-yugabyte.yml @@ -0,0 +1,55 @@ +version: '3.8' + +services: + yb-master: + image: yugabytedb/yugabyte:latest + container_name: yb-master + command: ["/home/yugabyte/bin/yb-master", "--fs_data_dirs=/mnt/data", "--master_addresses=yb-master:7100"] + ports: + - "7001:7000" # Master UI + networks: + - yugabytedb + environment: + - YB_ENABLED_IN_POSTGRES_MODE=1 + volumes: + - yb-master-data:/mnt/data + + yb-tserver-1: + image: yugabytedb/yugabyte:latest + container_name: yb-tserver-1 + command: ["/home/yugabyte/bin/yb-tserver", "--fs_data_dirs=/mnt/data", "--tserver_master_addrs=yb-master:7100", "--pgsql_proxy_bind_address=0.0.0.0:5433"] + ports: + - "5543:5433" # Changed from 5433 -> 5543 for PostgreSQL + - "9000:9000" # TServer UI + networks: + - yugabytedb + depends_on: + - yb-master + environment: + - YB_ENABLED_IN_POSTGRES_MODE=1 + volumes: + - yb-tserver-1-data:/mnt/data + + yb-tserver-2: + image: yugabytedb/yugabyte:latest + container_name: yb-tserver-2 + command: ["/home/yugabyte/bin/yb-tserver", "--fs_data_dirs=/mnt/data", "--tserver_master_addrs=yb-master:7100", "--pgsql_proxy_bind_address=0.0.0.0:5433"] + ports: + - "5544:5433" # Second worker node (internal) + - "9001:9000" # TServer UI + networks: + - yugabytedb + depends_on: + - yb-master + environment: + - YB_ENABLED_IN_POSTGRES_MODE=1 + volumes: + - yb-tserver-2-data:/mnt/data + +networks: + yugabytedb: + +volumes: + yb-master-data: + yb-tserver-1-data: + yb-tserver-2-data: diff --git a/scripts/docker/docker-compose.yml b/scripts/docker/docker-compose.yml new file mode 100644 index 0000000..f7c8198 --- /dev/null +++ b/scripts/docker/docker-compose.yml @@ -0,0 +1,143 @@ +services: + + consul-agent-1: &consul-agent + image: consul:latest + networks: + - consul + command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0" + + consul-agent-2: + <<: *consul-agent + + consul-agent-3: + <<: *consul-agent + + consul-server-1: &consul-server + <<: *consul-agent + command: "agent -server -retry-join consul-server-bootstrap -client 0.0.0.0" + + consul-server-2: + <<: *consul-server + + consul-server-bootstrap: + <<: *consul-agent + ports: + - "8400:8400" + - "8500:8500" + - "8600:8600" + - "8600:8600/udp" + command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0" + + sqlserver: + image: mcr.microsoft.com/mssql/server:2022-latest + ports: + - 1433:1433 + environment: + MSSQL_SA_PASSWORD: "Elsa2022!" + ACCEPT_EULA: "Y" + volumes: + - sqlserver_data:/var/opt/mssql + restart: unless-stopped + + postgres: + image: postgres:13.3-alpine + container_name: elsa3-postgres + environment: + POSTGRES_USER: elsa + POSTGRES_PASSWORD: elsa + POSTGRES_DB: elsa + ports: + - "5432:5432" + volumes: + - pgdata-3:/var/lib/postgresql/data + + mongodb: + image: mongo:latest + ports: + - "127.0.0.1:27017:27017" + volumes: + - mongodb_data:/data/db + + mysql: + image: arm64v8/mysql + restart: always + environment: + MYSQL_DATABASE: 'elsa' + MYSQL_USER: 'user' + MYSQL_PASSWORD: 'password' + MYSQL_ROOT_PASSWORD: 'password' + ports: + - '3306:3306' + expose: + - '3306' + + citusdata: + image: citusdata/citus:13.0 + container_name: citus_cluster + environment: + POSTGRES_USER: citus + POSTGRES_PASSWORD: citus_password + POSTGRES_DB: citus + ports: + - "9700:5432" # Citus uses PostgreSQL default port; 9700 avoids conflicts with other Postgres services + volumes: + - citusdata_data:/var/lib/postgresql/data + + # (Other volume and network definitions) + + redis: + image: redis:latest + ports: + - "127.0.0.1:6379:6379" + + rabbitmq: + image: "rabbitmq:3-management" + ports: + - "15672:15672" + - "5672:5672" + + elasticsearch: + image: "docker.elastic.co/elasticsearch/elasticsearch:8.5.0" + environment: + - xpack.security.enabled=false + - discovery.type=single-node + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + cap_add: + - IPC_LOCK + volumes: + - elasticsearch-data:/usr/share/elasticsearch/data + ports: + - "9200:9200" + - "9300:9300" + + kibana: + image: "docker.elastic.co/kibana/kibana:8.5.0" + environment: + - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 + ports: + - "5601:5601" + depends_on: + - elasticsearch + + smtp4dev: + image: rnwood/smtp4dev:3.1.3-ci20211206101 + ports: + - "4000:80" + - "2525:25" + +networks: + consul: + +volumes: + mongodb_data: + pgdata-3: + sqlserver_data: + citusdata_data: + elasticsearch-data: + driver: local \ No newline at end of file diff --git a/scripts/docker/docker-run-all-in-one-web.ps1 b/scripts/docker/docker-run-all-in-one-web.ps1 new file mode 100644 index 0000000..a5f376f --- /dev/null +++ b/scripts/docker/docker-run-all-in-one-web.ps1 @@ -0,0 +1,2 @@ +docker build -t elsa-all-in-one-web:local -f ./src/apps/all-in-one-web/Dockerfile . +docker run -t -i -e ASPNETCORE_ENVIRONMENT='Development' -p 24000:80 elsa-all-in-one-web:local \ No newline at end of file diff --git a/scripts/k8s/elsa-server/deployment.yaml b/scripts/k8s/elsa-server/deployment.yaml new file mode 100644 index 0000000..22c4f48 --- /dev/null +++ b/scripts/k8s/elsa-server/deployment.yaml @@ -0,0 +1,60 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: elsa-server-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: elsa-server + template: + metadata: + labels: + app: elsa-server + spec: + serviceAccountName: proto-cluster + containers: + - name: elsa-server + imagePullPolicy: Never + image: elsa-server:latest + ports: + - containerPort: 8080 + env: + - name: ASPNETCORE_ENVIRONMENT + value: Development + - name: "ProtoActor__AdvertisedHost" + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CONNECTIONSTRINGS__POSTGRESQL + value: "Server=postgres;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60" + - name: COR_ENABLE_PROFILING + value: "1" + - name: COR_PROFILER + value: "{918728DD-259F-4A6A-AC2B-B85E1B658318}" + - name: CORECLR_PROFILER_PATH + value: "$INSTALL_DIR/osx-x64/OpenTelemetry.AutoInstrumentation.Native.dylib" + - name: DOTNET_ADDITIONAL_DEPS + value: "$INSTALL_DIR/AdditionalDeps" + - name: DOTNET_EnableDiagnostics + value: "1" + - name: DOTNET_SHARED_STORE + value: "$INSTALL_DIR/store" + - name: DOTNET_STARTUP_HOOKS + value: "OpenTelemetry.AutoInstrumentation.StartupHook" + - name: OTEL_DOTNET_AUTO_HOME + value: "$INSTALL_DIR" + - name: OTEL_DOTNET_AUTO_LOGS_CONSOLE_EXPORTER_ENABLED + value: "false" + - name: OTEL_DOTNET_AUTO_METRICS_CONSOLE_EXPORTER_ENABLED + value: "false" + - name: OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES + value: "Proto.Actor,Elsa.Workflows" + - name: OTEL_DOTNET_AUTO_TRACES_CONSOLE_EXPORTER_ENABLED + value: "false" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: "http://trace-lens-collector:4317" + - name: OTEL_EXPORTER_OTLP_PROTOCOL + value: "grpc" + - name: OTEL_RESOURCE_ATTRIBUTES + value: "service.name=Elsa Server,service.version=3.3.0" \ No newline at end of file diff --git a/scripts/k8s/elsa-server/role-binding.yaml b/scripts/k8s/elsa-server/role-binding.yaml new file mode 100644 index 0000000..222766d --- /dev/null +++ b/scripts/k8s/elsa-server/role-binding.yaml @@ -0,0 +1,11 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: proto-cluster +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: proto-cluster +subjects: + - kind: ServiceAccount + name: proto-cluster # this is the service account that should have the role applied \ No newline at end of file diff --git a/scripts/k8s/elsa-server/role.yaml b/scripts/k8s/elsa-server/role.yaml new file mode 100644 index 0000000..51c2bf9 --- /dev/null +++ b/scripts/k8s/elsa-server/role.yaml @@ -0,0 +1,14 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: proto-cluster +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - patch \ No newline at end of file diff --git a/scripts/k8s/elsa-server/service-account.yml b/scripts/k8s/elsa-server/service-account.yml new file mode 100644 index 0000000..b639b7a --- /dev/null +++ b/scripts/k8s/elsa-server/service-account.yml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: proto-cluster + namespace: default # Ensure the namespace matches your deployment \ No newline at end of file diff --git a/scripts/k8s/elsa-server/service.yaml b/scripts/k8s/elsa-server/service.yaml new file mode 100644 index 0000000..cf9ebc1 --- /dev/null +++ b/scripts/k8s/elsa-server/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: elsa-server-service +spec: + type: LoadBalancer + sessionAffinity: None + ports: + - port: 8001 + targetPort: 8080 + selector: + app: elsa-server diff --git a/scripts/k8s/elsa-studio/deployment.yaml b/scripts/k8s/elsa-studio/deployment.yaml new file mode 100644 index 0000000..e56d84a --- /dev/null +++ b/scripts/k8s/elsa-studio/deployment.yaml @@ -0,0 +1,25 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: elsa-studio-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: elsa-studio + template: + metadata: + labels: + app: elsa-studio + spec: + containers: + - name: elsa-studio + imagePullPolicy: Never + image: elsa-studio:latest + ports: + - containerPort: 8080 + env: + - name: ASPNETCORE_ENVIRONMENT + value: Development + - name: "ELSASERVER__URL" + value: "http://localhost:8001/elsa/api" \ No newline at end of file diff --git a/scripts/k8s/elsa-studio/service.yaml b/scripts/k8s/elsa-studio/service.yaml new file mode 100644 index 0000000..067c10f --- /dev/null +++ b/scripts/k8s/elsa-studio/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: elsa-studio-service +spec: + type: LoadBalancer + sessionAffinity: None + ports: + - port: 9001 + targetPort: 8080 + selector: + app: elsa-studio diff --git a/scripts/k8s/plant-uml/deployment.yaml b/scripts/k8s/plant-uml/deployment.yaml new file mode 100644 index 0000000..7c49679 --- /dev/null +++ b/scripts/k8s/plant-uml/deployment.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: plant-uml-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: plant-uml + template: + metadata: + labels: + app: plant-uml + spec: + containers: + - name: plant-uml + imagePullPolicy: Always + image: plantuml/plantuml-server:tomcat + ports: + - containerPort: 8080 \ No newline at end of file diff --git a/scripts/k8s/postgres/config-map.yaml b/scripts/k8s/postgres/config-map.yaml new file mode 100644 index 0000000..a2ea928 --- /dev/null +++ b/scripts/k8s/postgres/config-map.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: init-db-config +data: + init-db.sh: | + #!/bin/bash + echo "Starting database initialization" + + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + GRANT ALL ON SCHEMA public TO elsa; + GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO elsa; + GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO elsa; + GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO elsa; + CREATE USER tracelens WITH PASSWORD 'tracelenspass'; + CREATE DATABASE tracelens; + GRANT ALL PRIVILEGES ON DATABASE tracelens TO tracelens; + GRANT ALL ON SCHEMA public TO tracelens; + EOSQL + + echo "Database initialization completed" \ No newline at end of file diff --git a/scripts/k8s/postgres/deployment.yaml b/scripts/k8s/postgres/deployment.yaml new file mode 100644 index 0000000..4ec7912 --- /dev/null +++ b/scripts/k8s/postgres/deployment.yaml @@ -0,0 +1,41 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + containers: + - name: postgres + imagePullPolicy: Always + image: postgres:latest + # command: ["-c", "max_connections=2000"] + volumeMounts: + - name: postgres-data + mountPath: /var/lib/postgresql/data + - name: init-db + mountPath: /docker-entrypoint-initdb.d/init-db.sh + subPath: init-db.sh + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + value: "elsa" + - name: POSTGRES_PASSWORD + value: "elsa" + - name: POSTGRES_DB + value: "elsa" + + volumes: + - name: postgres-data + emptyDir: {} + - name: init-db + configMap: + name: init-db-config \ No newline at end of file diff --git a/scripts/k8s/postgres/service.yml b/scripts/k8s/postgres/service.yml new file mode 100644 index 0000000..ce3bbc4 --- /dev/null +++ b/scripts/k8s/postgres/service.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: postgres + labels: + app: postgres +spec: + type: LoadBalancer + ports: + - port: 5432 + targetPort: 5432 + selector: + app: postgres \ No newline at end of file diff --git a/scripts/k8s/trace-lens/deployment.yaml b/scripts/k8s/trace-lens/deployment.yaml new file mode 100644 index 0000000..2586a15 --- /dev/null +++ b/scripts/k8s/trace-lens/deployment.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tracelens-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: trace-lens + template: + metadata: + labels: + app: trace-lens + spec: + containers: + - name: trace-lens + imagePullPolicy: Always + image: docker.io/rogeralsing/tracelens:latest + ports: + - containerPort: 5001 + - containerPort: 4317 + env: + - name: PlantUml__RemoteUrl + value: "" + - name: ConnectionStrings__DefaultConnection + value: "USER ID=tracelens;PASSWORD=tracelenspass;HOST=postgres;PORT=5432;DATABASE=tracelens;POOLING=true;" \ No newline at end of file diff --git a/scripts/k8s/trace-lens/service.yaml b/scripts/k8s/trace-lens/service.yaml new file mode 100644 index 0000000..dd41b53 --- /dev/null +++ b/scripts/k8s/trace-lens/service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: trace-lens-dashboard +spec: + type: LoadBalancer + selector: + app: trace-lens + ports: + - name: dashboard + port: 7001 + targetPort: 5001 + # OTEL collector port is internal-only, avoid exposing it via LoadBalancer +--- +apiVersion: v1 +kind: Service +metadata: + name: trace-lens-collector +spec: + selector: + app: trace-lens + ports: + - name: otel-collector + port: 4317 + targetPort: 4317 \ No newline at end of file diff --git a/scripts/migrations/README.md b/scripts/migrations/README.md new file mode 100644 index 0000000..3859b21 --- /dev/null +++ b/scripts/migrations/README.md @@ -0,0 +1,3 @@ +The `ef-migration-runtime-schema` package provides a runtime schema for the Entity Framework Core migrations. This schema is used to generate the migration scripts for the database. + +https://www.nuget.org/packages/ef-migration-runtime-schema \ No newline at end of file diff --git a/scripts/migrations/efcore-3.0.sh b/scripts/migrations/efcore-3.0.sh new file mode 100644 index 0000000..e66bcb3 --- /dev/null +++ b/scripts/migrations/efcore-3.0.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh + +# Define the modules to update +mods=("Alterations" "Runtime" "Management" "Identity" "Labels") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Connection strings for each provider +typeset -A connStrings +connStrings=( + MySql "Server=localhost;Port=3306;Database=elsa;User=root;Password=password;" + SqlServer "" + Sqlite "" + PostgreSql "" +) + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../src/modules/Elsa.EntityFrameworkCore.$provider" + migrationsPath="Migrations/$module" + + echo "Updating migrations for $provider..." + echo "Provider path: ${providerPath:?}/${migrationsPath}" + echo "Migrations path: $migrationsPath" + echo "Connection string: ${connStrings[$provider]}" + + # 1. Delete the existing migrations folder + rm -rf "${providerPath:?}/${migrationsPath}" + + # 2. Run the migrations command + dotnet ef migrations add Initial -c "$module"ElsaDbContext -p "$providerPath" -o "$migrationsPath" -- --connectionString "${connStrings[$provider]}" + done +done diff --git a/scripts/migrations/efcore-3.1-sql.sh b/scripts/migrations/efcore-3.1-sql.sh new file mode 100644 index 0000000..6fffe06 --- /dev/null +++ b/scripts/migrations/efcore-3.1-sql.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# Define the modules to update +mods=("Alterations" "Runtime" "Management" "Identity") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../src/modules/Elsa.EntityFrameworkCore.$provider" + sqlPath="$providerPath/Migrations/$module/v3.1.sql" + + echo "Generating SQL for $provider..." + echo "SQL path: $sqlPath" + dotnet ef migrations script -p "$providerPath" -c "$module"ElsaDbContext -o "$sqlPath" + + # Make the file writable: + chmod 777 "$sqlPath" + done +done diff --git a/scripts/migrations/efcore-3.1.sh b/scripts/migrations/efcore-3.1.sh new file mode 100644 index 0000000..b9357f0 --- /dev/null +++ b/scripts/migrations/efcore-3.1.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Define the modules to update +mods=("Alterations" "Runtime" "Management" "Identity" "Labels") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../src/modules/Elsa.EntityFrameworkCore.$provider" + migrationsPath="Migrations/$module" + + echo "Updating migrations for $provider..." + echo "Provider path: ${providerPath:?}/${migrationsPath}" + echo "Migrations path: $migrationsPath" + ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_1 -c ""$module""ElsaDbContext -p ""$providerPath"" -o ""$migrationsPath""" + done +done diff --git a/scripts/migrations/efcore-3.2.sh b/scripts/migrations/efcore-3.2.sh new file mode 100644 index 0000000..c9fc38e --- /dev/null +++ b/scripts/migrations/efcore-3.2.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Define the modules to update +mods=("Alterations" "Runtime" "Management" "Identity" "Labels") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../src/modules/Elsa.EntityFrameworkCore.$provider" + migrationsPath="Migrations/$module" + + echo "Updating migrations for $provider..." + echo "Provider path: ${providerPath:?}/${migrationsPath}" + echo "Migrations path: $migrationsPath" + ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_2 -c ""$module""ElsaDbContext -p ""$providerPath"" -o ""$migrationsPath""" + done +done diff --git a/scripts/migrations/efcore-3.3.sh b/scripts/migrations/efcore-3.3.sh new file mode 100644 index 0000000..a285230 --- /dev/null +++ b/scripts/migrations/efcore-3.3.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Define the modules to update +mods=("Alterations" "Runtime" "Management" "Identity" "Labels" "Tenants") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../../src/modules/Elsa.EntityFrameworkCore.$provider" + migrationsPath="Migrations/$module" + + echo "Updating migrations for $provider..." + echo "Provider path: ${providerPath:?}/${migrationsPath}" + echo "Migrations path: $migrationsPath" + ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_3 -c ""$module""ElsaDbContext -p ""$providerPath"" -o ""$migrationsPath""" + done +done diff --git a/scripts/migrations/efcore-3.4.sh b/scripts/migrations/efcore-3.4.sh new file mode 100644 index 0000000..6550b02 --- /dev/null +++ b/scripts/migrations/efcore-3.4.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Define the modules to update +mods=("Alterations" "Runtime" "Management" "Identity" "Labels" "Tenants") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../../src/modules/Elsa.EntityFrameworkCore.$provider" + migrationsPath="Migrations/$module" + + echo "Updating migrations for $provider..." + echo "Provider path: ${providerPath:?}/${migrationsPath}" + echo "Migrations path: $migrationsPath" + ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_4 -c ""$module""ElsaDbContext -p ""$providerPath"" -o ""$migrationsPath""" + done +done diff --git a/scripts/migrations/efcore-3.5.sh b/scripts/migrations/efcore-3.5.sh new file mode 100644 index 0000000..1b9cb5e --- /dev/null +++ b/scripts/migrations/efcore-3.5.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Define the modules to update +mods=("Runtime") + +# Define the list of providers +providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle") + +# Loop through each module +for module in "${mods[@]}"; do + # Loop through each provider + for provider in "${providers[@]}"; do + providerPath="../../src/modules/Elsa.EntityFrameworkCore.$provider" + migrationsPath="Migrations/$module" + + echo "Updating migrations for $provider..." + echo "Provider path: ${providerPath:?}/${migrationsPath}" + echo "Migrations path: $migrationsPath" + ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_5 -c ""$module""ElsaDbContext -p ""$providerPath"" -o ""$migrationsPath""" + done +done diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 0000000..8421221 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,20 @@ + + + + + + net8.0;net9.0 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/apps/Directory.Build.props b/src/apps/Directory.Build.props new file mode 100644 index 0000000..45f95be --- /dev/null +++ b/src/apps/Directory.Build.props @@ -0,0 +1,16 @@ + + + net9.0 + latest + enable + enable + $(NoWarn);CS0162;CS1591 + + + + + + + + + \ No newline at end of file diff --git a/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj b/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj new file mode 100644 index 0000000..ecf73e2 --- /dev/null +++ b/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/apps/Elsa.Server.LoadBalancer/FodyWeavers.xml b/src/apps/Elsa.Server.LoadBalancer/FodyWeavers.xml new file mode 100644 index 0000000..b76f5eb --- /dev/null +++ b/src/apps/Elsa.Server.LoadBalancer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/apps/Elsa.Server.LoadBalancer/Program.cs b/src/apps/Elsa.Server.LoadBalancer/Program.cs new file mode 100644 index 0000000..dda4fa8 --- /dev/null +++ b/src/apps/Elsa.Server.LoadBalancer/Program.cs @@ -0,0 +1,5 @@ +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); +var app = builder.Build(); +app.MapReverseProxy(); +await app.RunAsync(); \ No newline at end of file diff --git a/src/apps/Elsa.Server.LoadBalancer/Properties/launchSettings.json b/src/apps/Elsa.Server.LoadBalancer/Properties/launchSettings.json new file mode 100644 index 0000000..2416263 --- /dev/null +++ b/src/apps/Elsa.Server.LoadBalancer/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:28212", + "sslPort": 44310 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5272", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7036;http://localhost:5272", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/apps/Elsa.Server.LoadBalancer/appsettings.Development.json b/src/apps/Elsa.Server.LoadBalancer/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/src/apps/Elsa.Server.LoadBalancer/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/apps/Elsa.Server.LoadBalancer/appsettings.json b/src/apps/Elsa.Server.LoadBalancer/appsettings.json new file mode 100644 index 0000000..741ae00 --- /dev/null +++ b/src/apps/Elsa.Server.LoadBalancer/appsettings.json @@ -0,0 +1,35 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ReverseProxy": { + "Routes": { + "route1": { + "ClusterId": "cluster1", + "Match": { + "Path": "{**catch-all}" + } + } + }, + "Clusters": { + "cluster1": { + "LoadBalancingPolicy": "RoundRobin", + "Destinations": { + "cluster1/destination1": { + "Address": "https://localhost:5001/" + }, + "cluster1/destination2": { + "Address": "https://localhost:5002/" + }, + "cluster1/destination3": { + "Address": "https://localhost:5003/" + } + } + } + } + } +} diff --git a/src/apps/Elsa.Server.Web/Activities/AuthorizeFlow.cs b/src/apps/Elsa.Server.Web/Activities/AuthorizeFlow.cs new file mode 100644 index 0000000..1761e81 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Activities/AuthorizeFlow.cs @@ -0,0 +1,49 @@ +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Activities.Flowchart.Attributes; +using Elsa.Workflows.Attributes; + +namespace Elsa.Server.Web.Activities; + +[Activity("Elsa", "Authorization", "Authorizes a flow based on the configured policies.")] +[FlowNode("Authorized", "Unauthorized", "Error")] +public class AuthorizeFlow : Activity +{ + protected override ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var httpContext = context.GetRequiredService().HttpContext; + + if (httpContext == null) + throw new InvalidOperationException("HttpContext is not available. Ensure that the activity is executed within an HTTP request context."); + + var bookmark = context.CreateBookmark(new AuthorizeStimulus(), OnResumeAsync); + var redirectUrl = context.ExpressionExecutionContext.GenerateBookmarkTriggerUrl(bookmark.Id); + + Result.Set(context, redirectUrl); + return ValueTask.CompletedTask; + } + + private async ValueTask OnResumeAsync(ActivityExecutionContext context) + { + if (!context.TryGetWorkflowInput("Answer", out var response)) + { + await context.CompleteActivityWithOutcomesAsync("Unauthorized"); + return; + } + + switch (response) + { + case "Authorized": + await context.CompleteActivityWithOutcomesAsync("Authorized"); + return; + case "Error": + await context.CompleteActivityWithOutcomesAsync("Error"); + return; + default: + await context.CompleteActivityWithOutcomesAsync("Unauthorized"); + break; + } + } +} + +public record AuthorizeStimulus; \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Activities/CheckedActivity.cs b/src/apps/Elsa.Server.Web/Activities/CheckedActivity.cs new file mode 100644 index 0000000..782853b --- /dev/null +++ b/src/apps/Elsa.Server.Web/Activities/CheckedActivity.cs @@ -0,0 +1,19 @@ +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Models; +using Elsa.Workflows.UIHints; +using Elsa.Workflows.UIHints.CheckList; + +namespace Elsa.Server.Web.Activities; + +public class CheckedActivity : CodeActivity +{ + [Input(UIHint = InputUIHints.CheckList, UIHandler = typeof(CustomCheckListOptionsProvider))] + public Input CheckedItems { get; set; } + + protected override void Execute(ActivityExecutionContext context) + { + context.SetResult(CheckedItems.GetOrDefault(context)); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Activities/CustomDelay.cs b/src/apps/Elsa.Server.Web/Activities/CustomDelay.cs new file mode 100644 index 0000000..700f8d5 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Activities/CustomDelay.cs @@ -0,0 +1,19 @@ +using Elsa.Extensions; +using Elsa.Workflows; + +namespace Elsa.Server.Web.Activities; + +public class CustomDelay : Activity +{ + protected override ValueTask ExecuteAsync(ActivityExecutionContext context) + { + context.DelayFor(TimeSpan.FromSeconds(5), OnDelayElapsedAsync); + return default; + } + + private async ValueTask OnDelayElapsedAsync(ActivityExecutionContext context) + { + Console.WriteLine("Delay elapsed"); + await context.CompleteActivityAsync(); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Activities/CustomEvent.cs b/src/apps/Elsa.Server.Web/Activities/CustomEvent.cs new file mode 100644 index 0000000..a1f40ad --- /dev/null +++ b/src/apps/Elsa.Server.Web/Activities/CustomEvent.cs @@ -0,0 +1,18 @@ +using Elsa.Expressions.Models; +using Elsa.Workflows; +using Elsa.Workflows.Runtime.Activities; + +namespace Elsa.Server.Web.Activities; + +public class CustomEvent : EventBase +{ + protected override string GetEventName(ExpressionExecutionContext context) + { + return "MyEvent"; + } + + protected override void OnEventReceived(ActivityExecutionContext context, object? eventData) + { + Console.WriteLine("Event received with data: " + eventData); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Activities/CustomHttpEndpoint.cs b/src/apps/Elsa.Server.Web/Activities/CustomHttpEndpoint.cs new file mode 100644 index 0000000..a1ac115 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Activities/CustomHttpEndpoint.cs @@ -0,0 +1,23 @@ +using Elsa.Http; +using Elsa.Http.Extensions; +using Elsa.Workflows; + +namespace Elsa.Server.Web.Activities; + +public class CustomHttpEndpoint : HttpEndpointBase +{ + protected override HttpEndpointOptions GetOptions() + { + return new() + { + Path = "my-path", + Methods = [HttpMethods.Get], + }; + } + + protected override async ValueTask OnHttpRequestReceivedAsync(ActivityExecutionContext context, HttpContext httpContext) + { + httpContext.Response.StatusCode = 200; + await httpContext.Response.WriteAsync("Hello World", context.CancellationToken); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Activities/CustomTimer.cs b/src/apps/Elsa.Server.Web/Activities/CustomTimer.cs new file mode 100644 index 0000000..3a9cdfd --- /dev/null +++ b/src/apps/Elsa.Server.Web/Activities/CustomTimer.cs @@ -0,0 +1,18 @@ +using Elsa.Expressions.Models; +using Elsa.Scheduling.Activities; +using Elsa.Workflows; + +namespace Elsa.Server.Web.Activities; + +public class CustomTimer : TimerBase +{ + protected override TimeSpan GetInterval(ExpressionExecutionContext context) + { + return TimeSpan.FromSeconds(5); + } + + protected override void OnTimerElapsed(ActivityExecutionContext context) + { + Console.WriteLine("Timer elapsed"); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj new file mode 100644 index 0000000..09c85bc --- /dev/null +++ b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj.DotSettings b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj.DotSettings new file mode 100644 index 0000000..3d80b14 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Enums/ApplicationRole.cs b/src/apps/Elsa.Server.Web/Enums/ApplicationRole.cs new file mode 100644 index 0000000..a4e8c7c --- /dev/null +++ b/src/apps/Elsa.Server.Web/Enums/ApplicationRole.cs @@ -0,0 +1,9 @@ +namespace Elsa.Server.Web; + +public enum ApplicationRole +{ + Default, + Api, + Worker, + Monitor +} diff --git a/src/apps/Elsa.Server.Web/Enums/DistributedCachingTransport.cs b/src/apps/Elsa.Server.Web/Enums/DistributedCachingTransport.cs new file mode 100644 index 0000000..5a5a6a8 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Enums/DistributedCachingTransport.cs @@ -0,0 +1,12 @@ +namespace Elsa.Server.Web; + +/// +/// Represents the transport options for distributed caching. +/// +public enum DistributedCachingTransport +{ + None, + Memory, + MassTransit, + ProtoActor +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Enums/MassTransitBroker.cs b/src/apps/Elsa.Server.Web/Enums/MassTransitBroker.cs new file mode 100644 index 0000000..d4ad98f --- /dev/null +++ b/src/apps/Elsa.Server.Web/Enums/MassTransitBroker.cs @@ -0,0 +1,11 @@ +namespace Elsa.Server.Web; + +/// +/// Represents the type of messaging broker used in MassTransit. +/// +public enum MassTransitBroker +{ + Memory, + AzureServiceBus, + RabbitMq +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Enums/PersistenceProvider.cs b/src/apps/Elsa.Server.Web/Enums/PersistenceProvider.cs new file mode 100644 index 0000000..31e3e33 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Enums/PersistenceProvider.cs @@ -0,0 +1,9 @@ +namespace Elsa.Server.Web; + +public enum PersistenceProvider +{ + Memory, + EntityFrameworkCore, + MongoDb, + Dapper +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs b/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs new file mode 100644 index 0000000..72aad1b --- /dev/null +++ b/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs @@ -0,0 +1,13 @@ +namespace Elsa.Server.Web; + +public enum SqlDatabaseProvider +{ + SqlServer, + Sqlite, + MySql, + PostgreSql, + Citus, + YugabyteDb, + Oracle, + CockroachDb +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Enums/WorkflowRuntime.cs b/src/apps/Elsa.Server.Web/Enums/WorkflowRuntime.cs new file mode 100644 index 0000000..07bed54 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Enums/WorkflowRuntime.cs @@ -0,0 +1,8 @@ +namespace Elsa.Server.Web; + +public enum WorkflowRuntime +{ + Default, + Distributed, + ProtoActor +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs b/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs new file mode 100644 index 0000000..0cc7a9c --- /dev/null +++ b/src/apps/Elsa.Server.Web/Extensions/MultitenantConnectionStringServiceProviderExtensions.cs @@ -0,0 +1,22 @@ +using Elsa.Common.Multitenancy; +using Elsa.EntityFrameworkCore.Extensions; + +namespace Elsa.Server.Web.Extensions; + +public static class MultitenantConnectionStringServiceProviderExtensions +{ + public static string GetSqliteConnectionString(this IServiceProvider serviceProvider) => serviceProvider.GetConnectionString("Sqlite")!; + public static string GetSqlServerConnectionString(this IServiceProvider serviceProvider) => serviceProvider.GetConnectionString("SqlServer")!; + public static string GetMySqlConnectionString(this IServiceProvider serviceProvider) => serviceProvider.GetConnectionString("MySql")!; + public static string GetPostgreSqlConnectionString(this IServiceProvider serviceProvider) => serviceProvider.GetConnectionString("PostgreSql")!; + + public static string? GetConnectionString(this IServiceProvider serviceProvider, string name) + { + var tenantAccessor = serviceProvider.GetRequiredService(); + var configuration = serviceProvider.GetRequiredService(); + var tenant = tenantAccessor.Tenant; + var defaultConnectionString = configuration.GetConnectionString(name)!; + var connectionString = tenant?.GetConnectionString(name) ?? defaultConnectionString; + return connectionString; + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Filters/HttpRequestAuthenticationHeaderFilter.cs b/src/apps/Elsa.Server.Web/Filters/HttpRequestAuthenticationHeaderFilter.cs new file mode 100644 index 0000000..ffcefd8 --- /dev/null +++ b/src/apps/Elsa.Server.Web/Filters/HttpRequestAuthenticationHeaderFilter.cs @@ -0,0 +1,30 @@ +using Elsa.Http; +using Elsa.Workflows; +using JetBrains.Annotations; + +namespace Elsa.Server.Web.Filters; + +/// +/// Mask the value of the input if it is a HttpRequest and the input name is "Authorization". +/// +[UsedImplicitly] +public class HttpRequestAuthenticationHeaderFilter : ActivityStateFilterBase +{ + protected override ActivityStateFilterResult OnExecute(ActivityStateFilterContext context) + { + var activityExecutionContext = context.ActivityExecutionContext; + var activity = activityExecutionContext.Activity; + var inputDescriptor = context.InputDescriptor; + + if (activity is not SendHttpRequestBase || inputDescriptor.Name is not nameof(SendHttpRequestBase.Authorization)) + return ActivityStateFilterResult.Pass(); + + var contextValue = context.Value.GetString(); + + if (contextValue == null) + return ActivityStateFilterResult.Pass(); + + var maskedValue = new string('*', contextValue.Length); + return Filtered(maskedValue); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/FodyWeavers.xml b/src/apps/Elsa.Server.Web/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/apps/Elsa.Server.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Messages/OrderReceived.cs b/src/apps/Elsa.Server.Web/Messages/OrderReceived.cs new file mode 100644 index 0000000..32151ae --- /dev/null +++ b/src/apps/Elsa.Server.Web/Messages/OrderReceived.cs @@ -0,0 +1,6 @@ +namespace Elsa.Server.Web.Messages; + +public class OrderReceived +{ + public string OrderId { get; set; } = null!; +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Program.cs b/src/apps/Elsa.Server.Web/Program.cs new file mode 100644 index 0000000..c97a88c --- /dev/null +++ b/src/apps/Elsa.Server.Web/Program.cs @@ -0,0 +1,828 @@ +using System.Text.Encodings.Web; +using Elsa.Alterations.Extensions; +using Elsa.Alterations.MassTransit.Extensions; +using Elsa.Caching.Options; +using Elsa.Common.Codecs; +using Elsa.Common.DistributedHosting.DistributedLocks; +using Elsa.Common.RecurringTasks; +using Elsa.Common.Serialization; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Services; +using Elsa.DropIns.Extensions; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Elsa.EntityFrameworkCore.Modules.Identity; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Elsa.Expressions.Helpers; +using Elsa.Extensions; +using Elsa.Features.Services; +using Elsa.Identity.Multitenancy; +using Elsa.Kafka; +using Elsa.Kafka.Factories; +using Elsa.MassTransit.Extensions; +using Elsa.MongoDb.Extensions; +using Elsa.MongoDb.Modules.Alterations; +using Elsa.MongoDb.Modules.Identity; +using Elsa.MongoDb.Modules.Management; +using Elsa.MongoDb.Modules.Runtime; +using Elsa.MongoDb.Modules.Tenants; +using Elsa.OpenTelemetry.Middleware; +using Elsa.Retention.Extensions; +using Elsa.Retention.Models; +using Elsa.Secrets.Extensions; +using Elsa.Secrets.Management.Tasks; +using Elsa.Secrets.Persistence; +using Elsa.Server.Web; +using Elsa.Server.Web.Extensions; +using Elsa.Server.Web.Filters; +using Elsa.Server.Web.Messages; +using Elsa.Sql.Extensions; +using Elsa.Sql.MySql; +using Elsa.Sql.PostgreSql; +using Elsa.Sql.Sqlite; +using Elsa.Sql.SqlServer; +using Elsa.Tenants.AspNetCore; +using Elsa.Tenants.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Api; +using Elsa.Workflows.CommitStates.Strategies; +using Elsa.Workflows.IncidentStrategies; +using Elsa.Workflows.LogPersistence; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Stores; +using Elsa.Workflows.Options; +using Elsa.Workflows.Runtime.Distributed.Extensions; +using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Stores; +using Elsa.Workflows.Runtime.Tasks; +using Hangfire; +using Hangfire.MemoryStorage; +using Hangfire.PostgreSql; +using Hangfire.PostgreSql.Factories; +using Hangfire.SqlServer; +using Hangfire.Storage.SQLite; +using JetBrains.Annotations; +using Medallion.Threading.FileSystem; +using Medallion.Threading.Postgres; +using Medallion.Threading.Redis; +using Microsoft.Extensions.Options; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; +using OpenTelemetry.Trace; +using Proto.Cluster.Kubernetes; +using Proto.Persistence.Sqlite; +using Proto.Persistence.SqlServer; +using Proto.Remote; +using Proto.Remote.GrpcNet; +using StackExchange.Redis; + +// ReSharper disable RedundantAssignment +const PersistenceProvider persistenceProvider = PersistenceProvider.EntityFrameworkCore; +const bool useDbContextPooling = false; +const bool useHangfire = false; +const bool useQuartz = true; +const bool useMassTransit = false; +const bool useZipCompression = false; +const bool runEFCoreMigrations = true; +const bool useMemoryStores = false; +const bool useCaching = true; +const bool useKafka = false; +const bool useReadOnlyMode = false; +const bool useSignalR = false; // Disabled until Elsa Studio sends authenticated requests. +const WorkflowRuntime workflowRuntime = WorkflowRuntime.Distributed; +const DistributedCachingTransport distributedCachingTransport = DistributedCachingTransport.Memory; +const MassTransitBroker massTransitBroker = MassTransitBroker.Memory; +const bool useMultitenancy = false; +const bool useTenantsFromConfiguration = true; +const bool useSecrets = false; +const bool disableVariableWrappers = false; +const bool disableVariableCopying = false; +const bool useManualOtelInstrumentation = false; + +ObjectConverter.StrictMode = true; + +var builder = WebApplication.CreateBuilder(args); +var services = builder.Services; +var configuration = builder.Configuration; +var identitySection = configuration.GetSection("Identity"); +var identityTokenSection = identitySection.GetSection("Tokens"); +var sqliteConnectionString = configuration.GetConnectionString("Sqlite")!; +var sqlServerConnectionString = configuration.GetConnectionString("SqlServer")!; +var postgresConnectionString = configuration.GetConnectionString("PostgreSql")!; +var citusConnectionString = configuration.GetConnectionString("Citus")!; +var yugabyteDbConnectionString = configuration.GetConnectionString("YugabyteDb")!; +var oracleConnectionString = configuration.GetConnectionString("Oracle")!; +var mySqlConnectionString = configuration.GetConnectionString("MySql")!; +var cockroachDbConnectionString = configuration.GetConnectionString("CockroachDb")!; +var mongoDbConnectionString = configuration.GetConnectionString("MongoDb")!; +var azureServiceBusConnectionString = configuration.GetConnectionString("AzureServiceBus")!; +var rabbitMqConnectionString = configuration.GetConnectionString("RabbitMq")!; +var redisConnectionString = configuration.GetConnectionString("Redis")!; +var distributedLockProviderName = configuration.GetSection("Runtime:DistributedLocking")["Provider"]; +var appRole = Enum.Parse(configuration["AppRole"] ?? "Default"); +var sqlDatabaseProvider = Enum.Parse(configuration["DatabaseProvider"] ?? "Sqlite"); + +// Optionally create type aliases for easier configuration. +TypeAliasRegistry.RegisterAlias("OrderReceivedProducerFactory", typeof(GenericProducerFactory)); +TypeAliasRegistry.RegisterAlias("OrderReceivedConsumerFactory", typeof(GenericConsumerFactory)); + +if (useManualOtelInstrumentation) +{ + services.AddOpenTelemetry() + .ConfigureResource(resource => resource.AddService("elsa-workflows", serviceVersion: "3.5.0").AddTelemetrySdk()) + .WithTracing(tracing => + { + tracing + .AddSource("*") + .SetSampler(new AlwaysOnSampler()) + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddSqlClientInstrumentation() + .AddConsoleExporter() + .AddOtlpExporter() + ; + }) + .WithMetrics(metrics => + { + metrics + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddConsoleExporter() + .AddOtlpExporter() + ; + }); + + // Enable OpenTelemetry Logging (optional) + builder.Logging.AddOpenTelemetry(options => + { + options.IncludeFormattedMessage = true; + options.IncludeScopes = true; + options.ParseStateValues = true; + }); +} + +// Add Elsa services. +services.AddScoped(); +services + .AddElsa(elsa => + { + if (persistenceProvider == PersistenceProvider.MongoDb) + elsa.UseMongoDb(mongoDbConnectionString); + + if (persistenceProvider == PersistenceProvider.Dapper) + elsa.UseDapper(dapper => + { + dapper.UseMigrations(feature => + { + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + feature.UseSqlServer(); + else + feature.UseSqlite(); + }); + dapper.DbConnectionProvider = sp => + { + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + return new SqlServerDbConnectionProvider(sqlServerConnectionString); + else + return new SqliteDbConnectionProvider(sqliteConnectionString); + }; + }); + + if (useHangfire) + { + JobStorage jobStorage; + if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + { + jobStorage = new PostgreSqlStorage(new NpgsqlConnectionFactory(postgresConnectionString, new() + { + QueuePollInterval = TimeSpan.FromSeconds(1) + })); + } + else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) + { + jobStorage = new SQLiteStorage(sqliteConnectionString, new() + { + QueuePollInterval = TimeSpan.FromSeconds(1) + }); + } + else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + { + jobStorage = new SqlServerStorage(sqlServerConnectionString, new() + { + QueuePollInterval = TimeSpan.FromSeconds(1) + }); + } + else + { + jobStorage = new MemoryStorage(); + } + + elsa.UseHangfire(hangfire => hangfire.UseJobStorage(jobStorage)); + } + + elsa + .AddActivitiesFrom() + .AddWorkflowsFrom() + .UseFluentStorageProvider() + .UseFileStorage() + .UseIdentity(identity => + { + if (persistenceProvider == PersistenceProvider.MongoDb) + identity.UseMongoDb(); + else if (persistenceProvider == PersistenceProvider.Dapper) + identity.UseDapper(); + else + identity.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + ef.UseSqlServer(sqlServerConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + ef.UsePostgreSql(postgresConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Citus) + ef.UsePostgreSql(citusConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.YugabyteDb) + ef.UsePostgreSql(yugabyteDbConnectionString); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + ef.UseMySql(mySqlConnectionString); +#endif + else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) + ef.UsePostgreSql(cockroachDbConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) + ef.UseOracle(oracleConnectionString, new() + { + SchemaName = "ELSA" + }); + else + ef.UseSqlite(sp => sp.GetSqliteConnectionString()); + + ef.RunMigrations = runEFCoreMigrations; + }); + + identity.TokenOptions = options => identityTokenSection.Bind(options); + identity.UseConfigurationBasedUserProvider(options => identitySection.Bind(options)); + identity.UseConfigurationBasedApplicationProvider(options => identitySection.Bind(options)); + identity.UseConfigurationBasedRoleProvider(options => identitySection.Bind(options)); + }) + .UseDefaultAuthentication() + .UseWorkflows(workflows => + { + workflows.WithDefaultWorkflowExecutionPipeline(pipeline => pipeline.UseWorkflowExecutionTracing()); + workflows.WithDefaultActivityExecutionPipeline(pipeline => pipeline.UseActivityExecutionTracing()); + workflows.UseCommitStrategies(strategies => + { + strategies.AddStandardStrategies(); + strategies.Add("Every 10 seconds", new PeriodicWorkflowStrategy(TimeSpan.FromSeconds(10))); + }); + }) + .UseWorkflowManagement(management => + { + if (persistenceProvider == PersistenceProvider.MongoDb) + management.UseMongoDb(); + else if (persistenceProvider == PersistenceProvider.Dapper) + management.UseDapper(); + else + management.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + ef.UseSqlServer(sqlServerConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + ef.UsePostgreSql(postgresConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Citus) + ef.UsePostgreSql(citusConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.YugabyteDb) + ef.UsePostgreSql(yugabyteDbConnectionString); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + ef.UseMySql(mySqlConnectionString); +#endif + else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) + ef.UsePostgreSql(cockroachDbConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) + ef.UseOracle(oracleConnectionString, new() + { + SchemaName = "ELSA" + }); + else + ef.UseSqlite(sp => sp.GetSqliteConnectionString()); + + ef.RunMigrations = runEFCoreMigrations; + }); + + if (useZipCompression) + management.SetCompressionAlgorithm(nameof(Zstd)); + + if (useMemoryStores) + management.UseWorkflowInstances(feature => feature.WorkflowInstanceStore = sp => sp.GetRequiredService()); + + if (useMassTransit) + management.UseMassTransitDispatcher(); + + if (useCaching) + management.UseCache(); + + management.SetDefaultLogPersistenceMode(LogPersistenceMode.Inherit); + management.UseReadOnlyMode(useReadOnlyMode); + management.AddVariableTypeAndAlias("Application"); + }) + .UseWorkflowRuntime(runtime => + { + if (persistenceProvider == PersistenceProvider.MongoDb) + runtime.UseMongoDb(); + else if (persistenceProvider == PersistenceProvider.Dapper) + runtime.UseDapper(); + else + runtime.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + { + //ef.UseSqlServer(sqlServerConnectionString, new ElsaDbContextOptions); + var migrationsAssembly = typeof(Elsa.EntityFrameworkCore.SqlServer.IdentityDbContextFactory).Assembly; + var connectionString = sqlServerConnectionString; + ef.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(migrationsAssembly, connectionString, null, configure => configure.CommandTimeout(60000)); + } + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + ef.UsePostgreSql(postgresConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Citus) + ef.UsePostgreSql(citusConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.YugabyteDb) + ef.UsePostgreSql(yugabyteDbConnectionString); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + ef.UseMySql(mySqlConnectionString); +#endif + else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) + ef.UsePostgreSql(cockroachDbConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) + ef.UseOracle(oracleConnectionString, new() + { + SchemaName = "ELSA" + }); + else + ef.UseSqlite(sp => sp.GetSqliteConnectionString()); + + ef.RunMigrations = runEFCoreMigrations; + }); + + if (workflowRuntime == WorkflowRuntime.Distributed) + { + runtime.UseDistributedRuntime(); + } + + if (workflowRuntime == WorkflowRuntime.ProtoActor) + { + runtime.UseProtoActor(); + } + + if (useMassTransit) + runtime.UseMassTransitDispatcher(); + + runtime.WorkflowDispatcherOptions = options => configuration.GetSection("Runtime:WorkflowDispatcher").Bind(options); + + if (useMemoryStores) + { + runtime.ActivityExecutionLogStore = sp => sp.GetRequiredService(); + runtime.WorkflowExecutionLogStore = sp => sp.GetRequiredService(); + } + + if (useCaching) + runtime.UseCache(); + + runtime.DistributedLockingOptions = options => configuration.GetSection("Runtime:DistributedLocking").Bind(options); + + runtime.DistributedLockProvider = _ => + { + switch (distributedLockProviderName) + { + case "Postgres": + return new PostgresDistributedSynchronizationProvider(postgresConnectionString, options => + { + options.KeepaliveCadence(TimeSpan.FromMinutes(5)); + options.UseMultiplexing(); + }); + case "Redis": + { + var connectionMultiplexer = ConnectionMultiplexer.Connect(redisConnectionString); + var database = connectionMultiplexer.GetDatabase(); + return new RedisDistributedSynchronizationProvider(database); + } + case "File": + return new FileDistributedSynchronizationProvider(new(Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "locks"))); + case "Noop": + default: + return new NoopDistributedSynchronizationProvider(); + } + }; + }) + .UseEnvironments(environments => environments.EnvironmentsOptions = options => configuration.GetSection("Environments").Bind(options)) + .UseScheduling(scheduling => + { + if (useHangfire) + scheduling.UseHangfireScheduler(); + + if (useQuartz) + scheduling.UseQuartzScheduler(); + }) + .UseWorkflowsApi(api => + { + api.AddFastEndpointsAssembly(); + }) + .UseCSharp(options => + { + options.DisableWrappers = disableVariableWrappers; + options.AppendScript("string Greet(string name) => $\"Hello {name}!\";"); + options.AppendScript("string SayHelloWorld() => Greet(\"World\");"); + }) + .UseJavaScript(options => + { + options.AllowClrAccess = true; + options.DisableWrappers = disableVariableWrappers; + options.DisableVariableCopying = disableVariableCopying; + options.RegisterType(); + options.ConfigureEngine(engine => + { + engine.Execute("function greet(name) { return `Hello ${name}!`; }"); + engine.Execute("function sayHelloWorld() { return greet('World'); }"); + }); + }) + .UsePython(python => + { + python.PythonOptions += options => + { + // Make sure to configure the path to the python DLL. E.g. /opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/bin/python3.11 + // alternatively, you can set the PYTHONNET_PYDLL environment variable. + configuration.GetSection("Scripting:Python").Bind(options); + + options.AddScript(sb => + { + sb.AppendLine("def greet():"); + sb.AppendLine(" return \"Hello, welcome to Python!\""); + }); + }; + }) + .UseLiquid(liquid => liquid.FluidOptions = options => options.Encoder = HtmlEncoder.Default) + .UseHttp(http => + { + http.ConfigureHttpOptions = options => configuration.GetSection("Http").Bind(options); + + if (useCaching) + http.UseCache(); + }) + .UseSql(options => + { + options.Clients = client => + { + client.Register("MySql"); + client.Register("PostgreSql"); + client.Register("Sqlite"); + client.Register("Sql Server"); + }; + }) + .UseEmail(email => email.ConfigureOptions = options => configuration.GetSection("Smtp").Bind(options)) + .UseAlterations(alterations => + { + if (persistenceProvider == PersistenceProvider.MongoDb) + { + alterations.UseMongoDb(); + } + else if (persistenceProvider == PersistenceProvider.Dapper) + { + // TODO: alterations.UseDapper(); + } + else + { + alterations.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + ef.UseSqlServer(sqlServerConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + ef.UsePostgreSql(postgresConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Citus) + ef.UsePostgreSql(citusConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.YugabyteDb) + ef.UsePostgreSql(yugabyteDbConnectionString); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + ef.UseMySql(mySqlConnectionString); +#endif + else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) + ef.UsePostgreSql(cockroachDbConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) + ef.UseOracle(oracleConnectionString, new() + { + SchemaName = "ELSA" + }); + else + ef.UseSqlite(sp => sp.GetSqliteConnectionString()); + + ef.RunMigrations = runEFCoreMigrations; + }); + } + + if (useMassTransit) + { + alterations.UseMassTransitDispatcher(); + } + }) + .UseOpenTelemetry(otel => otel.UseNewRootActivityForRemoteParent = true) + .UseWorkflowContexts(); + + if (useQuartz) + { + elsa.UseQuartz(quartz => + { + if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) + quartz.UseSqlite(sqliteConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + quartz.UsePostgreSql(postgresConnectionString); + }); + } + + if (useSignalR) + { + elsa.UseRealTimeWorkflows(); + } + + if (useMassTransit) + { + elsa.UseMassTransit(massTransit => + { + massTransit.DisableConsumers = appRole == ApplicationRole.Api; + massTransit.AddMessageType(); + + if (massTransitBroker == MassTransitBroker.AzureServiceBus) + { + massTransit.UseAzureServiceBus(azureServiceBusConnectionString, serviceBusFeature => serviceBusFeature.ConfigureTransportBus = (context, bus) => + { + bus.PrefetchCount = 50; + bus.LockDuration = TimeSpan.FromMinutes(5); + bus.MaxConcurrentCalls = 32; + bus.MaxDeliveryCount = 8; + // etc. + }); + } + + if (massTransitBroker == MassTransitBroker.RabbitMq) + { + massTransit.UseRabbitMq(rabbitMqConnectionString, rabbit => rabbit.ConfigureTransportBus = (context, bus) => + { + bus.PrefetchCount = 50; + bus.Durable = true; + bus.AutoDelete = false; + bus.ConcurrentMessageLimit = 32; + // etc. + }); + } + }); + } + + if (distributedCachingTransport != DistributedCachingTransport.None) + { + elsa.UseDistributedCache(distributedCaching => + { + if (distributedCachingTransport == DistributedCachingTransport.MassTransit) distributedCaching.UseMassTransit(); + if (distributedCachingTransport == DistributedCachingTransport.ProtoActor) distributedCaching.UseProtoActor(); + }); + } + + if (distributedCachingTransport == DistributedCachingTransport.ProtoActor || workflowRuntime == WorkflowRuntime.ProtoActor) + { + elsa.UseProtoActor(proto => + { + proto + .EnableMetrics() + .EnableTracing(); + + proto.PersistenceProvider = _ => + { + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + return new SqlServerProvider(sqlServerConnectionString, true, "", "proto_actor"); + return new SqliteProvider(new(sqliteConnectionString)); + }; + + if (configuration["KUBERNETES_SERVICE_HOST"] != null) + { + var kubernetesConfig = new KubernetesProviderConfig(); + var clusterProvider = new KubernetesProvider(kubernetesConfig); + + var remoteConfig = GrpcNetRemoteConfig + .BindToAllInterfaces(advertisedHost: configuration["ProtoActor:AdvertisedHost"]) // Environment variable to be provided by Kubernetes using pod.status.podIP. + .WithLogLevelForDeserializationErrors(LogLevel.Critical) + .WithRemoteDiagnostics(true); + + proto.CreateClusterProvider = _ => clusterProvider; + proto.ConfigureRemoteConfig = _ => remoteConfig; + } + }); + } + + if (useKafka) + { + elsa.UseKafka(kafka => + { + kafka.ConfigureOptions(options => configuration.GetSection("Kafka").Bind(options)); + }); + } + + if (useSecrets) + { + elsa + .UseSecrets() + .UseSecretsManagement(management => + { + management.ConfigureOptions(options => configuration.GetSection("Secrets:Management").Bind(options)); + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + management.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + ef.UseSqlServer(sqlServerConnectionString); + }); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + management.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + ef.UsePostgreSql(postgresConnectionString); + }); + else + management.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + ef.UseSqlite(sp => sp.GetSqliteConnectionString()); + }); + }) + .UseSecretsApi() + .UseSecretsScripting() + ; + } + + elsa.UseRetention(r => + { + r.SweepInterval = TimeSpan.FromHours(5); + r.AddDeletePolicy("Delete all finished workflows", sp => + { + var filter = new RetentionWorkflowInstanceFilter + { + WorkflowStatus = WorkflowStatus.Finished + }; + return filter; + }); + }); + + if (useMultitenancy) + { + elsa.UseTenants(tenants => + { + tenants.ConfigureMultitenancy(options => + { + options.TenantResolverPipelineBuilder + .Append() + .Append() + .Append() + .Append(); + }); + + if (useTenantsFromConfiguration) + { + tenants.UseConfigurationBasedTenantsProvider(options => configuration.GetSection("Multitenancy").Bind(options)); + } + else + { + tenants.UseStoreBasedTenantsProvider(); + + tenants.UseTenantManagement(management => + { + if (persistenceProvider == PersistenceProvider.MongoDb) + management.UseMongoDb(); + if (persistenceProvider == PersistenceProvider.Dapper) + throw new NotSupportedException("Dapper is not supported for tenant management."); + if (persistenceProvider == PersistenceProvider.EntityFrameworkCore) + { + management.UseEntityFrameworkCore(ef => + { + ef.UseContextPooling = useDbContextPooling; + if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString); + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString); + if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString); + if (sqlDatabaseProvider == SqlDatabaseProvider.Citus) ef.UsePostgreSql(citusConnectionString); + if (sqlDatabaseProvider == SqlDatabaseProvider.YugabyteDb) ef.UsePostgreSql(yugabyteDbConnectionString); + if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) + ef.UseOracle(oracleConnectionString, new() + { + SchemaName = "ELSA" + }); +#if !NET9_0 + if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + ef.UseMySql(mySqlConnectionString); +#endif + if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString); + }); + } + }); + + tenants.UseTenantManagementEndpoints(); + } + }); + + elsa.UseTenantHttpRouting(tenantHttpRouting => + { + // Override the tenant header name with a custom one. + tenantHttpRouting.WithTenantHeader("X-Tenant-ID"); + }); + } + + elsa.UseWebhooks(webhooks => webhooks.ConfigureSinks += options => builder.Configuration.GetSection("Webhooks").Bind(options)); + elsa.InstallDropIns(options => options.DropInRootDirectory = Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "DropIns")); + elsa.AddSwagger(); + elsa.AddFastEndpointsAssembly(); + ConfigureForTest?.Invoke(elsa); + }); + +// Obfuscate HTTP request headers. +services.AddActivityStateFilter(); + +// Optionally configure recurring tasks using alternative schedules. +services.Configure(options => +{ + options.Schedule.ConfigureTask(TimeSpan.FromSeconds(300)); + options.Schedule.ConfigureTask(TimeSpan.FromSeconds(300)); + options.Schedule.ConfigureTask(TimeSpan.FromHours(4)); + options.Schedule.ConfigureTask(TimeSpan.FromSeconds(15)); +}); + +services.Configure(options => { options.InactivityThreshold = TimeSpan.FromSeconds(15); }); +services.Configure(options => options.Ttl = TimeSpan.FromSeconds(10)); +services.Configure(options => options.CacheDuration = TimeSpan.FromDays(1)); +services.Configure(options => options.DefaultIncidentStrategy = typeof(ContinueWithIncidentsStrategy)); +services.AddHealthChecks(); +services.AddControllers(); +services.AddCors(cors => cors.AddDefaultPolicy(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().WithExposedHeaders("*"))); + +// Build the web application. +var app = builder.Build(); + +// Configure the pipeline. +if (app.Environment.IsDevelopment()) + app.UseDeveloperExceptionPage(); + +// CORS. +app.UseCors(); + +// Health checks. +app.MapHealthChecks("/"); + +// Routing used for SignalR. +app.UseRouting(); + +// Security. +app.UseAuthentication(); +app.UseAuthorization(); + +// Multitenancy. +if (useMultitenancy) + app.UseTenants(); + +// Elsa API endpoints for designer. +var routePrefix = app.Services.GetRequiredService>().Value.RoutePrefix; +app.UseWorkflowsApi(routePrefix); + +// Captures unhandled exceptions and returns a JSON response. +app.UseJsonSerializationErrorHandler(); + +// Elsa HTTP Endpoint activities. +app.UseWorkflows(); + +app.MapControllers(); + +// Swagger API documentation. +if (app.Environment.IsDevelopment()) +{ + app.UseSwaggerUI(); +} + +// SignalR. +if (useSignalR) +{ + app.UseWorkflowsSignalRHubs(); +} + +// Run. +await app.RunAsync(); + +/// +/// The main entry point for the application made public for end to end testing. +/// +[UsedImplicitly] +public partial class Program +{ + /// + /// Set by the test runner to configure the module for testing. + /// + public static Action? ConfigureForTest { get; set; } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/Properties/launchSettings.json b/src/apps/Elsa.Server.Web/Properties/launchSettings.json new file mode 100644 index 0000000..65a64df --- /dev/null +++ b/src/apps/Elsa.Server.Web/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:16508", + "sslPort": 44323 + } + }, + "profiles": { + "Elsa.WorkflowServer.Web": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5072", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/apps/Elsa.Server.Web/README.md b/src/apps/Elsa.Server.Web/README.md new file mode 100644 index 0000000..89efb3a --- /dev/null +++ b/src/apps/Elsa.Server.Web/README.md @@ -0,0 +1,28 @@ +# Server + +This project represents an Elsa application that hosts workflows and exposes API endpoints to manage & execute workflows. + +## Secrets +The following are the secrets stored in hashed form in appsettings.json: + +**API key**: `48587230567A646D394B435A6277734A-4802fa49-e91e-45e8-b00f-b5492377e20b` +**Admin user**: `admin` +**Admin password**: `password` + +## OpenTelemetry (MacOS) + +COR_ENABLE_PROFILING=1 +COR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318} +CORECLR_PROFILER_PATH=$INSTALL_DIR/osx-x64/OpenTelemetry.AutoInstrumentation.Native.dylib +DOTNET_ADDITIONAL_DEPS=$INSTALL_DIR/AdditionalDeps +DOTNET_EnableDiagnostics=1 +DOTNET_SHARED_STORE=$INSTALL_DIR/store +DOTNET_STARTUP_HOOKS=OpenTelemetry.AutoInstrumentation.StartupHook +OTEL_DOTNET_AUTO_HOME=$INSTALL_DIR +OTEL_DOTNET_AUTO_LOGS_CONSOLE_EXPORTER_ENABLED=true +OTEL_DOTNET_AUTO_METRICS_CONSOLE_EXPORTER_ENABLED=true +OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES=Proto.Actor,Elsa.Workflows +OTEL_DOTNET_AUTO_TRACES_CONSOLE_EXPORTER_ENABLED=true +OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 +OTEL_EXPORTER_OTLP_PROTOCOL=grpc +OTEL_RESOURCE_ATTRIBUTES=service.name=Elsa Server,service.version=3.3.0,service.instance.id=instance-123,deployment.environment=development \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/StaticCheckListOptionsProvider.cs b/src/apps/Elsa.Server.Web/StaticCheckListOptionsProvider.cs new file mode 100644 index 0000000..4154b94 --- /dev/null +++ b/src/apps/Elsa.Server.Web/StaticCheckListOptionsProvider.cs @@ -0,0 +1,22 @@ +using System.Reflection; +using Elsa.Workflows.UIHints.CheckList; + +namespace Elsa.Server.Web; + +/// +/// Provides static drop-down options for a given property. +/// +public class CustomCheckListOptionsProvider : CheckListOptionsProviderBase +{ + /// + protected override ValueTask> GetItemsAsync(PropertyInfo propertyInfo, object? context, CancellationToken cancellationToken) + { + var items = new[] + { + "Apple", "Banana", "Cherry" + }; + var selectListItems = items.Select(x => new CheckListItem(x, x)).ToList(); + + return new(selectListItems); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.Server.Web/appsettings.json b/src/apps/Elsa.Server.Web/appsettings.json new file mode 100644 index 0000000..bf9d5c5 --- /dev/null +++ b/src/apps/Elsa.Server.Web/appsettings.json @@ -0,0 +1,290 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "HostBuilder": { + "reloadConfigOnChange": true + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "Sqlite": "Data Source=App_Data/elsa.sqlite.db;Cache=Shared;", + "SqlServer": "Server=localhost,1433;Initial Catalog=Elsa;User=sa;Password=!Elsa2025@;Encrypt=false;PersistSecurityInfo=false", + "MySql": "Server=localhost;Database=elsa;Uid=admin;Pwd=password;", + "PostgreSql": "Server=localhost;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60", + "Citus": "Server=localhost;Username=citus;Database=citus;Port=9700;Password=citus;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60", + "YugabyteDb": "Host=localhost;Port=5433;Database=elsa;Username=yugabyte;Password=yugabyte;Pooling=true", + "Oracle": "Data Source=(DESCRIPTION = (ADDRESS_LIST = (FAILOVER =ON) (LOAD_BALANCE = OFF) (ADDRESS = (PROTOCOL =TCP)(HOST=localhost)(PORT=1521))) (CONNECT_DATA = (SID= FREE) ));User Id=ELSA;Password=elsa;", + "CockroachDb": "Host=localhost;Port=26257;Database=elsa;SslMode=Disable;Username=root;IncludeErrorDetail=true", + "MongoDb": "mongodb://localhost:27017/elsa-workflows", + "AzureServiceBus": "", + "RabbitMq": "amqp://guest:guest@localhost:5672", + "Redis": "localhost:6379,abortConnect=false" + }, + "DatabaseProvider": "Sqlite", + "Multitenancy": { + "Tenants": [ + { + "Id": null, + "Name": "Default", + "Configuration": { + "Http": { + "Prefix": "", + "Host": "localhost:5001" + }, + "ConnectionStrings": { + "Sqlite": "Data Source=App_Data/elsa.sqlite.db;Cache=Shared;" + } + } + }, + { + "Id": "tenant-1", + "Name": "Tenant 1", + "Configuration": { + "Http": { + "Prefix": "tenant-1", + "Host": "localhost:5001" + }, + "ConnectionStrings": { + "Sqlite": "Data Source=App_Data/elsa.sqlite.db;Cache=Shared;" + } + } + } + ] + }, + "Smtp": { + "Host": "localhost", + "Port": 2525, + "DefaultSender": "noreply@crmservices.com" + }, + "Http": { + "BaseUrl": "https://localhost:5001", + "BasePath": "/workflows", + "ApiRoutePrefix": "elsa/api", + "AvailableContentTypes": [ + "application/json", + "application/xml", + "text/plain", + "text/html" + ] + }, + "Identity": { + "Tokens": { + "SigningKey": "sufficiently-large-secret-signing-key", + "AccessTokenLifetime": "1:00:00:00", + "RefreshTokenLifetime": "7:00:00:00" + }, + "Roles": [ + { + "Id": "admin", + "Name": "Administrator", + "Permissions": [ + "*" + ], + "TenantId": "default" + } + ], + "Users": [ + { + "Id": "a2323f46-42db-4e15-af8b-94238717d817", + "Name": "admin", + "HashedPassword": "TfKzh9RLix6FPcCNeHLkGrysFu3bYxqzGqduNdi8v1U=", + "HashedPasswordSalt": "JEy9kBlhHCNsencitRHlGxmErmSgY+FVyMJulCH27Ds=", + "Roles": [ + "admin" + ], + "TenantId": "" + }, + { + "Id": "b0cd0e506e713a9d", + "Name": "alice", + "Roles": [ + "admin" + ], + "HashedPassword": "8B0fFK/f/kk9GkVtzXfRJ2Y6cNyYVvLTfKouWcAcuPg=", + "HashedPasswordSalt": "xlNWvEng8fRvo0McyJopbRJ2MJ9NIYV/4IY5dOZeiiw=", + "TenantId": "tenant-2" + }, + { + "Id": "789d5056cb3bb8e9", + "Name": "bob", + "Roles": [ + "admin" + ], + "HashedPassword": "GMHHvUw7RfIIBq+GAWZ/AlHR50TbgONYfGQ92Xge0EI=", + "HashedPasswordSalt": "V4uHKg1PFBc1bsngCQoptibOu14faj9obSn5B23h1wE=", + "TenantId": "tenant-1" + } + ], + "Applications": [ + { + "Id": "d57030226341448daff5a2935aba2d3f", + "Name": "Postman", + "Roles": [ + "admin" + ], + "ClientId": "HXr0Vzdm9KCZbwsJ", + "ClientSecret": "a<~QGGHTEA%u4;CU&'Wga5ED:_&Gd1C)", + "HashedApiKey": "Z5ClHs3mbzx8Pnw3+PxbMq8A/Y+VKMCCDTGYtax8JFM=", + "HashedApiKeySalt": "kBisa1X8FwBfN2zmyGMFRgIVVBleghhQAJ4WGyTkaD0=", + "HashedClientSecret": "jEv58d0SVbGQ3nBZM0lkzHghG4Y+lMKW80wipz+9vHk=", + "HashedClientSecretSalt": "xRKy14Ok1/tU3kLf/8V1fcbLIegy9vcM90Peu2tzohU=", + "TenantId": "default" + } + ] + }, + "Environments": { + "Environments": [ + { + "Name": "Local", + "ServerUrl": "https://localhost:5001/elsa/api" + }, + { + "Name": "Staging", + "ServerUrl": "https://staging.acme.com/elsa/api" + }, + { + "Name": "Production", + "ServerUrl": "https://production.acme.com/elsa/api" + } + ] + }, + "AppRole": "Default", + "Runtime": { + "DistributedLocking": { + "Provider": "File", + "LockAcquisitionTimeout": "00:00:10" + }, + "DistributedLockProvider": "File", + "WorkflowDispatcher": { + "Channels": [ + { + "Name": "Low" + }, + { + "Name": "Medium" + }, + { + "Name": "High" + } + ] + } + }, + "Scripting": { + "Python": { + "PythonDllPath": "", + "Scripts": [ + "def greet(name): return f'Hello {name}!'", + "def say_hello_world(): return greet('World')" + ] + } + }, + "AzureServiceBus": { + "Queues": [ + { + "Name": "queue1" + }, + { + "Name": "queue2" + } + ], + "Topics": [ + { + "Name": "topic1", + "Subscriptions": [ + { + "Name": "subscription1" + }, + { + "Name": "subscription2" + } + ] + } + ] + }, + "Kafka": { + "Topics": [ + { + "Id": "topic-1", + "Name": "topic-1" + }, + { + "Id": "topic-2", + "Name": "topic-2" + } + ], + "SchemaRegistries": [ + { + "Id": "schema-registry-1", + "Name": "Schema Registry 1", + "Config": { + "Url": "http://localhost:8081" + } + } + ], + "Producers": [ + { + "Id": "producer-1", + "Name": "Producer 1", + "FactoryType": "Elsa.Kafka.Factories.GenericProducerFactory`2[[System.String, System.Private.CoreLib], [Elsa.Server.Web.Messages.OrderReceived, Elsa.Server.Web]], Elsa.Kafka", + "Config": { + "BootstrapServers": "localhost:9092" + }, + "SchemaRegistryId": "schema-registry-1" + } + ], + "Consumers": [ + { + "Id": "consumer-1", + "Name": "Consumer 1", + "FactoryType": "Elsa.Kafka.Factories.GenericConsumerFactory`2[[System.String, System.Private.CoreLib], [Elsa.Server.Web.Messages.OrderReceived, Elsa.Server.Web]], Elsa.Kafka", + "Config": { + "BootstrapServers": "localhost:9092", + "GroupId": "group-1", + "AutoOffsetReset": "earliest", + "EnableAutoCommit": "true" + }, + "SchemaRegistryId": "schema-registry-1" + } + ] + }, + "Secrets": { + "Management": { + "SweepInterval": "04:00:00" + } + }, + "Webhooks": { + "Sinks": [ + { + "Id": "1", + "Name": "Run Task", + "Filters": [ + { + "EventType": "Elsa.RunTask" + } + ], + "Url": "https://localhost:6001/webhooks/run-task" + } + ] + }, + "Resilience": { + "Strategies": [ + { + "$type": "HttpResilienceStrategy", + "Id": "1", + "DisplayName": "Retry 3 times, exponential", + "MaxRetryAttempts": 3, + "BackoffType": "Exponential" + }, + { + "$type": "HttpResilienceStrategy", + "Id": "2", + "DisplayName": "Retry 10 times, linear", + "MaxRetryAttempts": 10, + "BackoffType": "Linear" + } + ] + } +} diff --git a/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomDelay.cs b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomDelay.cs new file mode 100644 index 0000000..9998487 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomDelay.cs @@ -0,0 +1,26 @@ +using Elsa.Extensions; +using Elsa.Workflows; + +namespace Elsa.ServerAndStudio.Web.Activities; + +public class CustomDelay : Activity +{ + protected override ValueTask ExecuteAsync(ActivityExecutionContext context) + { + context.DelayFor(TimeSpan.FromSeconds(5), FailAsync); + context.DelayFor(TimeSpan.FromSeconds(500), OnDelayElapsedAsync); + return default; + } + + private ValueTask FailAsync(ActivityExecutionContext context) + { + Console.WriteLine("Failing!"); + throw new("Failing!"); + } + + private async ValueTask OnDelayElapsedAsync(ActivityExecutionContext context) + { + Console.WriteLine("Delay elapsed"); + await context.CompleteActivityAsync(); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomEvent.cs b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomEvent.cs new file mode 100644 index 0000000..e8fe638 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomEvent.cs @@ -0,0 +1,18 @@ +using Elsa.Expressions.Models; +using Elsa.Workflows; +using Elsa.Workflows.Runtime.Activities; + +namespace Elsa.ServerAndStudio.Web.Activities; + +public class CustomEvent : EventBase +{ + protected override string GetEventName(ExpressionExecutionContext context) + { + return "MyEvent"; + } + + protected override void OnEventReceived(ActivityExecutionContext context, object? eventData) + { + Console.WriteLine("Event received with data: " + eventData); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomHttpEndpoint.cs b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomHttpEndpoint.cs new file mode 100644 index 0000000..5bf5d64 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomHttpEndpoint.cs @@ -0,0 +1,22 @@ +using Elsa.Http; +using Elsa.Workflows; + +namespace Elsa.ServerAndStudio.Web.Activities; + +public class CustomHttpEndpoint : HttpEndpointBase +{ + protected override HttpEndpointOptions GetOptions() + { + return new() + { + Path = "my-path", + Methods = [HttpMethods.Get], + }; + } + + protected override async ValueTask OnHttpRequestReceivedAsync(ActivityExecutionContext context, HttpContext httpContext) + { + httpContext.Response.StatusCode = 200; + await httpContext.Response.WriteAsync("Hello World", context.CancellationToken); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomTimer.cs b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomTimer.cs new file mode 100644 index 0000000..3233611 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Activities/CustomTimer.cs @@ -0,0 +1,18 @@ +using Elsa.Expressions.Models; +using Elsa.Scheduling.Activities; +using Elsa.Workflows; + +namespace Elsa.ServerAndStudio.Web.Activities; + +public class CustomTimer : TimerBase +{ + protected override TimeSpan GetInterval(ExpressionExecutionContext context) + { + return TimeSpan.FromSeconds(5); + } + + protected override void OnTimerElapsed(ActivityExecutionContext context) + { + Console.WriteLine("Timer elapsed"); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj new file mode 100644 index 0000000..23b7189 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj @@ -0,0 +1,55 @@ + + + + net9.0 + Linux + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Enums/DistributedCachingTransport.cs b/src/apps/Elsa.ServerAndStudio.Web/Enums/DistributedCachingTransport.cs new file mode 100644 index 0000000..fc8e2f3 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Enums/DistributedCachingTransport.cs @@ -0,0 +1,11 @@ +namespace Elsa.ServerAndStudio.Web.Enums; + +/// +/// Represents the transport options for distributed caching. +/// +public enum DistributedCachingTransport +{ + None, + Memory, + MassTransit +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Enums/MassTransitBroker.cs b/src/apps/Elsa.ServerAndStudio.Web/Enums/MassTransitBroker.cs new file mode 100644 index 0000000..2ab461e --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Enums/MassTransitBroker.cs @@ -0,0 +1,11 @@ +namespace Elsa.ServerAndStudio.Web.Enums; + +/// +/// Represents the type of messaging broker used in MassTransit. +/// +public enum MassTransitBroker +{ + Memory, + AzureServiceBus, + RabbitMq +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Enums/SqlDatabaseProvider.cs b/src/apps/Elsa.ServerAndStudio.Web/Enums/SqlDatabaseProvider.cs new file mode 100644 index 0000000..ee52480 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Enums/SqlDatabaseProvider.cs @@ -0,0 +1,10 @@ +namespace Elsa.ServerAndStudio.Web.Enums; + +public enum SqlDatabaseProvider +{ + SqlServer, + Sqlite, + MySql, + PostgreSql, + CockroachDb +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Extensions/CorsOptionsExtensions.cs b/src/apps/Elsa.ServerAndStudio.Web/Extensions/CorsOptionsExtensions.cs new file mode 100644 index 0000000..d7ab5e2 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Extensions/CorsOptionsExtensions.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Cors.Infrastructure; + +namespace Elsa.ServerAndStudio.Web.Extensions; + +public static class CorsOptionsExtensions +{ + private static bool AllowAny(IList values) => values.Count == 0 || values[0] == "*"; + + public static void Configure(this CorsOptions options, IConfigurationSection section) + { + var corsPolicy = section.Get() ?? new CorsPolicy(); + options.AddDefaultPolicy(policy => { + var headers = corsPolicy.Headers; + var origins = corsPolicy.Origins; + var methods = corsPolicy.Methods; + + if (AllowAny(headers)) + policy.AllowAnyHeader(); + else + policy.WithHeaders(headers.ToArray()); + + if (AllowAny(origins)) + policy.AllowAnyOrigin(); + else + policy.WithOrigins(origins.ToArray()); + + if (AllowAny(methods)) + policy.AllowAnyMethod(); + else + policy.WithMethods(methods.ToArray()); + }); + } +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/FodyWeavers.xml b/src/apps/Elsa.ServerAndStudio.Web/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Pages/_Host.cshtml b/src/apps/Elsa.ServerAndStudio.Web/Pages/_Host.cshtml new file mode 100644 index 0000000..d1fbc2a --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Pages/_Host.cshtml @@ -0,0 +1,61 @@ +@page "/" +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@inject IConfiguration Configuration; +@{ + var baseUrl = Configuration["Hosting:BaseUrl"] ?? Configuration["Http:BaseUrl"]!; // HttpBaseUrl is for backward compatibility. + var apiUrl = $"{baseUrl.TrimEnd('/')}/{(Configuration["Hosting:ApiPrefix"] ?? "elsa/api").TrimStart('/')}"; +} + + + + + + + + Elsa Studio 3.5 + + + + + + + + + + + + + + + + + + + + +
+
+
Loading...
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + + + + + + + \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Program.cs b/src/apps/Elsa.ServerAndStudio.Web/Program.cs new file mode 100644 index 0000000..2987cf1 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Program.cs @@ -0,0 +1,223 @@ +using Elsa.Agents; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.MassTransit.Options; +using Elsa.Extensions; +using Elsa.JavaScript.Libraries.Extensions; +using Elsa.ServerAndStudio.Web.Extensions; +using Elsa.MassTransit.Extensions; +using Elsa.ServerAndStudio.Web.Enums; +using Medallion.Threading.FileSystem; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Data.Sqlite; +using WebhooksCore.Options; +using Elsa.Connections.Middleware; +using Elsa.IO.Http.Features; +using Proto.Persistence.Sqlite; + +const bool useMassTransit = true; +const bool useProtoActor = true; +const bool useCaching = true; +const DistributedCachingTransport distributedCachingTransport = DistributedCachingTransport.MassTransit; +const MassTransitBroker useMassTransitBroker = MassTransitBroker.Memory; + +var builder = WebApplication.CreateBuilder(args); +builder.WebHost.UseStaticWebAssets(); +var services = builder.Services; +var configuration = builder.Configuration; +var sqliteConnectionString = configuration.GetConnectionString("Sqlite")!; +var mySqlConnectionString = configuration.GetConnectionString("MySql")!; +var sqlServerConnectionString = configuration.GetConnectionString("SqlServer")!; +var postgreSqlConnectionString = configuration.GetConnectionString("PostgreSql")!; +var rabbitMqConnectionString = configuration.GetConnectionString("RabbitMq")!; +var azureServiceBusConnectionString = configuration.GetConnectionString("AzureServiceBus")!; +var identitySection = configuration.GetSection("Identity"); +var identityTokenSection = identitySection.GetSection("Tokens"); +var massTransitSection = configuration.GetSection("MassTransit"); +var massTransitDispatcherSection = configuration.GetSection("MassTransit.Dispatcher"); +var heartbeatSection = configuration.GetSection("Heartbeat"); +var sqlDatabaseProvider = Enum.Parse(configuration["DatabaseProvider"] ?? "Sqlite"); + +services.Configure(massTransitSection); +services.Configure(massTransitDispatcherSection); + +// Add Elsa services. +services + .AddElsa(elsa => + { + elsa + .UseSasTokens() + .UseIdentity(identity => + { + identity.TokenOptions = options => identityTokenSection.Bind(options); + identity.UseConfigurationBasedUserProvider(options => identitySection.Bind(options)); + identity.UseConfigurationBasedApplicationProvider(options => identitySection.Bind(options)); + identity.UseConfigurationBasedRoleProvider(options => identitySection.Bind(options)); + }) + .UseDefaultAuthentication() + .UseApplicationCluster(x => x.HeartbeatOptions = settings => heartbeatSection.Bind(settings)) + .UseWorkflowManagement(management => + { + if (useMassTransit) + { + management.UseMassTransitDispatcher(); + } + + if (useCaching) + management.UseCache(); + + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + management.UseEntityFrameworkCore(ef => ef.UseSqlServer(sqlServerConnectionString)); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + management.UseEntityFrameworkCore(ef => ef.UsePostgreSql(postgreSqlConnectionString)); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) + management.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + management.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); +#endif + }) + .UseWorkflowRuntime(runtime => + { + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + runtime.UseEntityFrameworkCore(ef => ef.UseSqlServer(sqlServerConnectionString)); + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + runtime.UseEntityFrameworkCore(ef => ef.UsePostgreSql(postgreSqlConnectionString)); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) + runtime.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + runtime.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); +#endif + + if (useMassTransit) + { + runtime.UseMassTransitDispatcher(); + } + + if (useProtoActor) + { + runtime.UseProtoActor(); + } + + if (useCaching) + runtime.UseCache(); + + runtime.DistributedLockProvider = _ => new FileDistributedSynchronizationProvider(new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "locks"))); + runtime.WorkflowInboxCleanupOptions = options => configuration.GetSection("Runtime:WorkflowInboxCleanup").Bind(options); + runtime.WorkflowDispatcherOptions = options => configuration.GetSection("Runtime:WorkflowDispatcher").Bind(options); + }) + .UseScheduling() + .UseJavaScript(javaScriptFeature => + { + javaScriptFeature + .ConfigureJintOptions(jintOptions => jintOptions.AllowClrAccess = true) + .UseLodashFp() + .UseMoment(); + }) + .UseLiquid() + .UseCSharp() + .UsePython(python => + { + python.PythonOptions += options => + { + // Make sure to configure the path to the python DLL. E.g. /opt/homebrew/Cellar/python@3.11/3.11.6_1/Frameworks/Python.framework/Versions/3.11/bin/python3.11 + // alternatively, you can set the PYTHONNET_PYDLL environment variable. + configuration.GetSection("Scripting:Python").Bind(options); + }; + }) + .UseHttp(http => + { + if (useCaching) + http.UseCache(); + + http.ConfigureHttpOptions = options => + { + options.BaseUrl = new Uri(configuration["Hosting:BaseUrl"] ?? configuration["Http:BaseUrl"]!); // HttpBaseUrl is for backward compatibility. + options.BasePath = configuration["Http:BasePath"]; + }; + }) + .UseEmail(email => email.ConfigureOptions = options => configuration.GetSection("Smtp").Bind(options)) + .UseWebhooks(webhooks => webhooks.ConfigureSinks = options => builder.Configuration.GetSection("Webhooks:Sinks").Bind(options)) + .UseWorkflowsApi() + .UseCompression() + .Use() + .AddActivitiesFrom() + .AddWorkflowsFrom(); + + if (useProtoActor) + { + elsa.UseProtoActor(proto => proto.PersistenceProvider = _ => + { + return new SqliteProvider(new SqliteConnectionStringBuilder(sqliteConnectionString)); + }); + } + + if (useMassTransit) + { + elsa.UseMassTransit(massTransit => + { + switch (useMassTransitBroker) + { + case MassTransitBroker.AzureServiceBus: + massTransit.UseAzureServiceBus(azureServiceBusConnectionString, asb => + { + asb.SubscriptionCleanupOptions = options => options.Interval = TimeSpan.FromMinutes(5); + asb.EnableAutomatedSubscriptionCleanup = true; + }); + break; + case MassTransitBroker.RabbitMq: + massTransit.UseRabbitMq(rabbitMqConnectionString); + break; + } + } + ); + } + + if (distributedCachingTransport != DistributedCachingTransport.None) + { + elsa.UseDistributedCache(distributedCaching => + { + if (distributedCachingTransport == DistributedCachingTransport.MassTransit) distributedCaching.UseMassTransit(); + }); + } + + elsa.UseConnections( + configure=> configure.AddConnectionsFrom()); + elsa.UseConnectionPersistence(ef=> ef.UseEntityFrameworkCore(f=>f.UseSqlite())); + elsa.UseConnectionsApi(); + }); + +services.Configure(options => configuration.GetSection("Webhooks").Bind(options)); + +services.AddHealthChecks(); + +services.AddCors(cors => cors.Configure(configuration.GetSection("CorsPolicy"))); + +// Razor Pages. +services.AddRazorPages(options => options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute())); + +// Configure middleware pipeline. +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseBlazorFrameworkFiles(); +app.MapHealthChecks("/health"); +app.UseRouting(); +app.UseCors(); +app.UseStaticFiles(); +app.UseAuthentication(); +app.UseAuthorization(); +app.UseWorkflowsApi(); +app.UseWorkflows(); +app.MapFallbackToPage("/_Host"); +await app.RunAsync(); \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Properties/launchSettings.json b/src/apps/Elsa.ServerAndStudio.Web/Properties/launchSettings.json new file mode 100644 index 0000000..633f4e6 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:8080", + "sslPort": 44363 + } + }, + "profiles": { + "Elsa.AllInOne.Web": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:8080", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/apps/Elsa.ServerAndStudio.Web/README.md b/src/apps/Elsa.ServerAndStudio.Web/README.md new file mode 100644 index 0000000..4f753d9 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/README.md @@ -0,0 +1,11 @@ +# Server + +This project represents an Elsa application that hosts workflows and exposes API endpoints to manage & execute workflows. +It also hosts the Elsa Studio Web Assembly project, which replaces the Stencil implementation. + +## Secrets +The following are the secrets stored in hashed form in appsettings.json: + +**API key**: `48587230567A646D394B435A6277734A-4802fa49-e91e-45e8-b00f-b5492377e20b` +**Admin user**: `admin` +**Admin password**: `password` \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/appsettings.json b/src/apps/Elsa.ServerAndStudio.Web/appsettings.json new file mode 100644 index 0000000..09a3f96 --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/appsettings.json @@ -0,0 +1,135 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "OpenTelemetry": "Debug" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "Sqlite": "Data Source=elsa.sqlite.db;Cache=Shared;", + "RabbitMq": "rabbitmq://guest:guest@localhost:5672", + "MySql": "Server=localhost;Database=elsa;Uid=user;Pwd=password;", + "SqlServer": "Server=.;Database=WorkflowDb;User Id=sa;Password=123456;TrustServerCertificate=True;", + "PostgreSql": "Server=localhost;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60" + }, + "DatabaseProvider": "Sqlite", + "Hosting": { + "BaseUrl": "https://localhost:8080", + "ApiPrefix": "/elsa/api" + }, + "Identity": { + "Tokens": { + "SigningKey": "c7dc81876a782d502084763fa322429fca015941eac90ce8ca7ad95fc8752035", + "AccessTokenLifetime": "1:00:00:00", + "RefreshTokenLifetime": "1:00:10:00" + }, + "Roles": [ + { + "Id": "admin", + "Name": "Administrator", + "Permissions": [ + "*" + ] + } + ], + "Users": [ + { + "Id": "a2323f46-42db-4e15-af8b-94238717d817", + "Name": "admin", + "HashedPassword": "TfKzh9RLix6FPcCNeHLkGrysFu3bYxqzGqduNdi8v1U=", + "HashedPasswordSalt": "JEy9kBlhHCNsencitRHlGxmErmSgY+FVyMJulCH27Ds=", + "Roles": [ + "admin" + ] + } + ], + "Applications": [ + { + "id": "d57030226341448daff5a2935aba2d3f", + "name": "Postman", + "roles": [ + "admin" + ], + "clientId": "HXr0Vzdm9KCZbwsJ", + "clientSecret": "a<~QGGHTEA%u4;CU&'Wga5ED:_&Gd1C)", + "hashedApiKey": "Z5ClHs3mbzx8Pnw3+PxbMq8A/Y+VKMCCDTGYtax8JFM=", + "hashedApiKeySalt": "kBisa1X8FwBfN2zmyGMFRgIVVBleghhQAJ4WGyTkaD0=", + "hashedClientSecret": "jEv58d0SVbGQ3nBZM0lkzHghG4Y+lMKW80wipz+9vHk=", + "hashedClientSecretSalt": "xRKy14Ok1/tU3kLf/8V1fcbLIegy9vcM90Peu2tzohU=" + } + ] + }, + "Heartbeat": { + "Interval": "00:00:01:00", + "Timeout": "00:00:05:00" + }, + "MassTransit": { + "TemporaryQueueTtl": "00:00:05:00", + "ConcurrentMessageLimit": 4, + "PrefetchCount": 4, + "MaxAutoRenewDuration": "00:00:00:30", + "Dispatcher": { + "ConcurrentMessageLimit": 4 + } + }, + "Smtp": { + "Host": "localhost", + "Port": 2525, + "DefaultSender": "noreply@crmservices.com" + }, + "Http": { + "BasePath": "/api/workflows" + }, + "Webhooks": { + "Sinks": [] + }, + "CorsPolicy": { + "Origins": ["*"], + "Methods": ["*"], + "Headers": ["*"] + }, + "Runtime": { + "WorkflowInboxCleanup": { + "SweepInterval": "00:00:10:00", + "BatchSize": 1000 + }, + "WorkflowDispatcher": { + "Channels": [ + { + "Name": "Low" + }, + { + "Name": "Medium" + }, + { + "Name": "High" + } + ] + } + }, + "Scripting": { + "Python": { + "PythonDllPath": "", + "Scripts": [ + "def greet(name): return f'Hello {name}!'", + "def say_hello_world(): return greet('World')" + ] + } + }, + "AzureServiceBus": { + "ConnectionStringOrName": "AzureServiceBus", + "Queues": [ + { + "name": "order-created" + }, + { + "name": "order-completed" + } + ], + "Topics": [], + "Subscriptions": [] + } +} diff --git a/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj b/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj new file mode 100644 index 0000000..8fb1118 --- /dev/null +++ b/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj @@ -0,0 +1,23 @@ + + + + net9.0 + Linux + false + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/apps/Elsa.Studio.Web/FodyWeavers.xml b/src/apps/Elsa.Studio.Web/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/apps/Elsa.Studio.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/apps/Elsa.Studio.Web/Pages/_Host.cshtml b/src/apps/Elsa.Studio.Web/Pages/_Host.cshtml new file mode 100644 index 0000000..5a4f2d2 --- /dev/null +++ b/src/apps/Elsa.Studio.Web/Pages/_Host.cshtml @@ -0,0 +1,67 @@ +@page "/" +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@inject IConfiguration Configuration; +@{ + var baseUrl = Configuration["ElsaServer:Url"]!; + var basePath = Configuration["Hosting:BasePath"]!; + + if (string.IsNullOrWhiteSpace(baseUrl)) + { + baseUrl = "https://localhost:5001/elsa/api"; + } +} + + + + + + + + Elsa Studio 3.5 + + + + + + + + + + + + + + + + + + + + +
+
+
Loading...
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + + + + + + + \ No newline at end of file diff --git a/src/apps/Elsa.Studio.Web/Program.cs b/src/apps/Elsa.Studio.Web/Program.cs new file mode 100644 index 0000000..9b0045c --- /dev/null +++ b/src/apps/Elsa.Studio.Web/Program.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Mvc; + +var builder = WebApplication.CreateBuilder(args); +builder.WebHost.UseStaticWebAssets(); +var services = builder.Services; + +// Razor Pages. +services.AddRazorPages(options => options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute())); + +// Configure middleware pipeline. +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseBlazorFrameworkFiles(); +app.UseRouting(); +app.UseStaticFiles(); +app.MapFallbackToPage("/_Host"); +await app.RunAsync(); \ No newline at end of file diff --git a/src/apps/Elsa.Studio.Web/Properties/launchSettings.json b/src/apps/Elsa.Studio.Web/Properties/launchSettings.json new file mode 100644 index 0000000..f2a3449 --- /dev/null +++ b/src/apps/Elsa.Studio.Web/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:64391", + "sslPort": 44336 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5161", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7030;http://localhost:5161", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj b/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj new file mode 100644 index 0000000..a3c43e1 --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + + + + + + + + + + + + + + diff --git a/src/apps/ElsaStudioWebAssembly/FodyWeavers.xml b/src/apps/ElsaStudioWebAssembly/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/apps/ElsaStudioWebAssembly/MainLayout.razor b/src/apps/ElsaStudioWebAssembly/MainLayout.razor new file mode 100644 index 0000000..f5ddb21 --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/MainLayout.razor @@ -0,0 +1,5 @@ +@inherits LayoutComponentBase + +
+ @Body +
\ No newline at end of file diff --git a/src/apps/ElsaStudioWebAssembly/Program.cs b/src/apps/ElsaStudioWebAssembly/Program.cs new file mode 100644 index 0000000..b4274c8 --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/Program.cs @@ -0,0 +1,58 @@ +using System.Text.Json; +using Elsa.Studio.Dashboard.Extensions; +using Elsa.Studio.Shell; +using Elsa.Studio.Shell.Extensions; +using Elsa.Studio.Workflows.Extensions; +using Elsa.Studio.Contracts; +using Elsa.Studio.Core.BlazorWasm.Extensions; +using Elsa.Studio.Extensions; +using Elsa.Studio.Login.BlazorWasm.Extensions; +using Elsa.Studio.Login.Extensions; +using Elsa.Studio.Login.HttpMessageHandlers; +using Elsa.Studio.Models; +using Elsa.Studio.Options; +using Elsa.Studio.Workflows.Designer.Extensions; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using Microsoft.Extensions.Options; +using Microsoft.JSInterop; + +// Build the host. +var builder = WebAssemblyHostBuilder.CreateDefault(args); + +// Register root components. +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); +builder.RootComponents.RegisterCustomElsaStudioElements(); + +// Register shell services and modules. +var backendApiConfig = new BackendApiConfig +{ + ConfigureBackendOptions = options => builder.Configuration.GetSection("Backend").Bind(options), + ConfigureHttpClientBuilder = options => options.AuthenticationHandler = typeof(AuthenticatingApiHttpMessageHandler) +}; + +builder.Services.AddCore(); +builder.Services.AddShell(); +builder.Services.AddRemoteBackend(backendApiConfig); +builder.Services.AddLoginModule(); +builder.Services.UseElsaIdentity(); +builder.Services.AddDashboardModule(); +builder.Services.AddWorkflowsModule(); +builder.Services.AddAgentsModule(backendApiConfig); + +// Build the application. +var app = builder.Build(); + +// Apply client config. +var js = app.Services.GetRequiredService(); +var clientConfig = await js.InvokeAsync("getClientConfig"); +var apiUrl = clientConfig.GetProperty("apiUrl").GetString()!; +app.Services.GetRequiredService>().Value.Url = new Uri(apiUrl); + +// Run each startup task. +var startupTaskRunner = app.Services.GetRequiredService(); +await startupTaskRunner.RunStartupTasksAsync(); + +// Run the application. +await app.RunAsync(); \ No newline at end of file diff --git a/src/apps/ElsaStudioWebAssembly/Properties/launchSettings.json b/src/apps/ElsaStudioWebAssembly/Properties/launchSettings.json new file mode 100644 index 0000000..bd2e9a7 --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "iisSettings": { + "iisExpress": { + "applicationUrl": "http://localhost:18109", + "sslPort": 44371 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5059", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7020;http://localhost:5059", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/apps/ElsaStudioWebAssembly/README.md b/src/apps/ElsaStudioWebAssembly/README.md new file mode 100644 index 0000000..38c7593 --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/README.md @@ -0,0 +1,3 @@ +# Server + +This project represents the Elsa Studio Blazor web assembly application and is hosted by Elsa.AllInOne.Web. \ No newline at end of file diff --git a/src/apps/ElsaStudioWebAssembly/_Imports.razor b/src/apps/ElsaStudioWebAssembly/_Imports.razor new file mode 100644 index 0000000..a2fe699 --- /dev/null +++ b/src/apps/ElsaStudioWebAssembly/_Imports.razor @@ -0,0 +1,6 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.WebAssembly.Http +@using Microsoft.JSInterop \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Converters/TypeJsonConverter.cs b/src/clients/Elsa.Api.Client/Converters/TypeJsonConverter.cs new file mode 100644 index 0000000..60602c7 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Converters/TypeJsonConverter.cs @@ -0,0 +1,56 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Elsa.Api.Client.Extensions; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Converters; + +/// +/// Converts objects to and from their assembly-qualified name. +/// +[UsedImplicitly] +public class TypeJsonConverter : JsonConverter +{ + /// + public override bool CanConvert(Type typeToConvert) + { + return typeToConvert == typeof(Type) || typeToConvert.FullName == "System.RuntimeType"; + } + + /// + public override Type? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var typeName = reader.GetString()!; + + // Handle collection types. + if (typeName.EndsWith("[]")) + { + var elementTypeName = typeName[..^"[]".Length]; + var elementType = Type.GetType(elementTypeName)!; + return typeof(List<>).MakeGenericType(elementType); + } + + return Type.GetType(typeName); + } + + /// + public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) + { + // Handle collection types. + if (value is { IsGenericType: true, GenericTypeArguments.Length: 1 }) + { + var elementType = value.GenericTypeArguments.First(); + var typedEnumerable = typeof(IEnumerable<>).MakeGenericType(elementType); + + if (typedEnumerable.IsAssignableFrom(value)) + { + var elementTypeName = value.GetSimpleAssemblyQualifiedName(); + JsonSerializer.Serialize(writer, $"{elementTypeName}[]", options); + return; + } + } + + var typeName = value.GetSimpleAssemblyQualifiedName(); + JsonSerializer.Serialize(writer, typeName, options); + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Converters/VersionOptionsJsonConverter.cs b/src/clients/Elsa.Api.Client/Converters/VersionOptionsJsonConverter.cs new file mode 100644 index 0000000..0da7b64 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Converters/VersionOptionsJsonConverter.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Converters; + +/// +/// A JSON converter that serializes . +/// +public class VersionOptionsJsonConverter : JsonConverter +{ + /// + public override VersionOptions Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var textValue = reader.GetString(); + return string.IsNullOrWhiteSpace(textValue) ? VersionOptions.Published : VersionOptions.FromString(textValue); + } + + /// + public override void Write(Utf8JsonWriter writer, VersionOptions value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString()); + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Converters/VersionOptionsTypeConverter.cs b/src/clients/Elsa.Api.Client/Converters/VersionOptionsTypeConverter.cs new file mode 100644 index 0000000..16945d9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Converters/VersionOptionsTypeConverter.cs @@ -0,0 +1,17 @@ +using System.ComponentModel; +using System.Globalization; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Converters; + +/// +/// A type converter that converts to and from strings. +/// +public class VersionOptionsTypeConverter : TypeConverter +{ + /// + public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) => sourceType == typeof(string) || base.CanConvertFrom(context, sourceType); + + /// + public override object ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) => value is string text ? VersionOptions.FromString(text) : base.ConvertFrom(context, culture, value)!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Elsa.Api.Client.csproj b/src/clients/Elsa.Api.Client/Elsa.Api.Client.csproj new file mode 100644 index 0000000..068b8ba --- /dev/null +++ b/src/clients/Elsa.Api.Client/Elsa.Api.Client.csproj @@ -0,0 +1,20 @@ + + + + + Provides HTTP clients for the Elsa Workflows REST API. + + elsa api client + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Elsa.Api.Client.csproj.DotSettings b/src/clients/Elsa.Api.Client/Elsa.Api.Client.csproj.DotSettings new file mode 100644 index 0000000..801d2b0 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Elsa.Api.Client.csproj.DotSettings @@ -0,0 +1,4 @@ + + True + True + True \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/ActivityExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/ActivityExtensions.cs new file mode 100644 index 0000000..f34b3a6 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/ActivityExtensions.cs @@ -0,0 +1,216 @@ +using System.Text.Json.Nodes; +using Elsa.Api.Client.Resources.Resilience.Models; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for . +/// +public static class ActivityExtensions +{ + /// + /// Gets the type name of the specified activity. + /// + public static string GetTypeName(this JsonObject activity) => activity.GetProperty("type")!; + + /// + /// Gets the type name of the specified activity. + /// + public static void SetTypeName(this JsonObject activity, string value) => activity.SetProperty(JsonValue.Create(value), "type"); + + /// + /// Gets the version of the specified activity. + /// + public static int GetVersion(this JsonObject activity) => activity.GetProperty("version"); + + /// + /// Gets the version of the specified activity. + /// + public static void SetVersion(this JsonObject activity, int value) => activity.SetProperty(JsonValue.Create(value), "version"); + + /// + /// Gets the ID of the specified activity. + /// + public static string GetId(this JsonObject activity) => activity.GetProperty("id")!; + + /// + /// Sets the ID of the specified activity. + /// + public static void SetId(this JsonObject activity, string value) => activity.SetProperty(JsonValue.Create(value), "id"); + + /// + /// Gets the node ID of the specified activity. + /// + public static string GetNodeId(this JsonObject activity) => activity.GetProperty("nodeId")!; + + /// + /// Sets the node ID of the specified activity. + /// + public static void SetNodeId(this JsonObject activity, string value) => activity.SetProperty(JsonValue.Create(value), "nodeId"); + + /// + /// Gets the name of the specified activity. + /// + public static string? GetName(this JsonObject activity) => activity.GetProperty("name"); + + /// + /// Sets the name of the specified activity. + /// + public static void SetName(this JsonObject activity, string? value) => activity.SetProperty(JsonValue.Create(value), "name"); + + /// + /// Gets the designer metadata for the specified activity. + /// + public static JsonObject? GetMetadata(this JsonObject activity) => activity.GetProperty("metadata")?.AsObject(); + + /// + /// Sets the designer metadata for the specified activity. + /// + public static void SetDesignerMetadata(this JsonObject activity, ActivityDesignerMetadata designerMetadata) => activity.SetProperty(designerMetadata.SerializeToNode(), "metadata", "designer"); + + /// + /// Gets the designer metadata for the specified activity. + /// + public static ActivityDesignerMetadata GetDesignerMetadata(this JsonObject activity) => activity.GetProperty("metadata", "designer") ?? new ActivityDesignerMetadata(); + + /// + /// Gets the display text for the specified activity. + /// + public static string? GetDisplayText(this JsonObject activity) => activity.GetProperty("metadata", "displayText")?.GetValue(); + + /// + /// Sets the display text for the specified activity. + /// + public static void SetDisplayText(this JsonObject activity, string? value) + { + activity.SetProperty(JsonValue.Create(value), "metadata", "displayText"); + } + + /// + /// Gets the description for the specified activity. + /// + public static string? GetDescription(this JsonObject activity) => activity.GetProperty("metadata", "description")?.GetValue(); + + /// + /// Sets the description for the specified activity. + /// + public static void SetDescription(this JsonObject activity, string value) => activity.SetProperty(JsonValue.Create(value), "metadata", "description"); + + /// + /// Gets a value indicating whether the description for the specified activity should be shown. + /// + public static bool? GetShowDescription(this JsonObject activity) => activity.GetProperty("metadata", "showDescription"); + + /// + /// Sets a value indicating whether the description for the specified activity should be shown. + /// + public static void SetShowDescription(this JsonObject activity, bool value) => activity.SetProperty(JsonValue.Create(value), "metadata", "showDescription"); + + /// + /// Gets a value indicating whether the specified activity can trigger the workflow. + /// + public static bool? GetCanStartWorkflow(this JsonObject activity) => activity.GetProperty("customProperties", "canStartWorkflow"); + + /// + /// Sets a value indicating whether the specified activity can trigger the workflow. + /// + public static void SetCanStartWorkflow(this JsonObject activity, bool value) => activity.SetProperty(JsonValue.Create(value), "customProperties", "canStartWorkflow"); + + /// + /// Gets the activities in the specified flowchart. + /// + public static IEnumerable GetActivities(this JsonObject flowchart) => flowchart.GetProperty("activities")?.AsArray().AsEnumerable().Cast() ?? Array.Empty(); + + /// + /// Sets the activities in the specified flowchart. + /// + public static void SetActivities(this JsonObject flowchart, JsonArray activities) => flowchart.SetProperty(activities, "activities"); + + /// + /// Gets the connections in the specified flowchart. + /// + public static IEnumerable GetConnections(this JsonObject flowchart) => flowchart.GetProperty>("connections") ?? new List(); + + /// + /// Sets the connections in the specified flowchart. + /// + public static void SetConnections(this JsonObject flowchart, IEnumerable connections) => flowchart.SetProperty(JsonValue.Create(connections), "connections"); + + /// + /// Gets the root activity in the specified activity. + /// + public static JsonObject? GetRoot(this JsonObject activity) => activity.GetProperty("root") as JsonObject; + + /// + /// Sets the root activity in the specified activity. + /// + public static void SetRoot(this JsonObject container, JsonObject root) => container.SetProperty(root, "root"); + + /// + /// Gets the root activity in the specified activity. + /// + public static string? GetWorkflowDefinitionId(this JsonObject activity) + { + // Determine if this activity represents a workflow definition activity based on the presence of the following properties. + var workflowDefinitionIdNode = activity.GetProperty("workflowDefinitionId"); + var workflowDefinitionVersionId = activity.GetProperty("workflowDefinitionVersionId"); + var latestAvailablePublishedVersion = activity.GetProperty("latestAvailablePublishedVersion"); + var latestAvailablePublishedVersionId = activity.GetProperty("latestAvailablePublishedVersionId"); + + if (workflowDefinitionIdNode == null || workflowDefinitionVersionId == null || latestAvailablePublishedVersion == null || latestAvailablePublishedVersionId == null) + return null; // Not a workflow definition activity. + + if (workflowDefinitionIdNode is JsonValue value) + return value.ToString(); + + return null; // Not a workflow definition activity. + } + + /// + /// Determines whether the given activity is a workflow definition activity. + /// + /// The JsonObject representing the activity. + /// Returns true if the activity is a workflow definition activity; otherwise, false. + public static bool GetIsWorkflowDefinitionActivity(this JsonObject activity) => activity.ContainsKey("workflowDefinitionId") && activity.ContainsKey("workflowDefinitionVersionId"); + + /// + /// Gets a value indicating whether the specified activity can trigger the workflow. + /// + public static bool? GetRunAsynchronously(this JsonObject activity) => activity.GetProperty("customProperties", "runAsynchronously"); + + /// + /// Sets a value indicating whether the specified activity can trigger the workflow. + /// + public static void SetRunAsynchronously(this JsonObject activity, bool value) => activity.SetProperty(JsonValue.Create(value), "customProperties", "runAsynchronously"); + + /// + /// Gets the commit state behavior for the specified activity. + /// + public static string? GetCommitStrategy(this JsonObject activity) => activity.TryGetProperty("customProperties", "commitStrategyName"); + + /// + /// Sets the commit state behavior for the specified activity. + /// + public static void SetCommitStrategy(this JsonObject activity, string? name) => activity.SetProperty(JsonValue.Create(name), "customProperties", "commitStrategyName"); + + + /// + /// Gets the resilience strategy for the specified activity. + /// + public static ResilienceStrategyConfig? GetResilienceStrategy(this JsonObject activity) + { + var node = activity.GetProperty("customProperties", "resilienceStrategy"); + return ResilienceStrategyConfig.Deserialize(node); + } + + /// + /// Sets the resilience strategy for the specified activity. + /// + public static void SetResilienceStrategy(this JsonObject activity, ResilienceStrategyConfig? config) + { + var node = config?.SerializeToNode(); + activity.SetProperty(node, "customProperties", "resilienceStrategy"); + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/ApiResponseExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/ApiResponseExtensions.cs new file mode 100644 index 0000000..e1edc82 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/ApiResponseExtensions.cs @@ -0,0 +1,28 @@ +using Refit; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for . +/// +public static class ApiResponseExtensions +{ + /// + /// Returns the downloaded file name or the specified default file name. + /// + public static string GetDownloadedFileNameOrDefault(this IApiResponse response, string defaultFileName = "download.bin") + { + var fileName = defaultFileName; + + if (response.Headers.TryGetValues("content-disposition", out var contentDispositionHeader)) // Only available if the Elsa Server exposes the "Content-Disposition" header. + { + // ReSharper disable once NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract + var values = contentDispositionHeader.ToList() ?? []; + + if (values.Count >= 2) + fileName = values[1].Split('=')[1]; + } + + return fileName; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..4bc70d8 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs @@ -0,0 +1,186 @@ +using Elsa.Api.Client.Options; +using Elsa.Api.Client.Resources.ActivityDescriptorOptions.Contracts; +using Elsa.Api.Client.Resources.ActivityDescriptors.Contracts; +using Elsa.Api.Client.Resources.ActivityExecutions.Contracts; +using Elsa.Api.Client.Resources.Alterations.Contracts; +using Elsa.Api.Client.Resources.CommitStrategies.Contracts; +using Elsa.Api.Client.Resources.Features.Contracts; +using Elsa.Api.Client.Resources.Identity.Contracts; +using Elsa.Api.Client.Resources.IncidentStrategies.Contracts; +using Elsa.Api.Client.Resources.LogPersistenceStrategies; +using Elsa.Api.Client.Resources.Resilience.Contracts; +using Elsa.Api.Client.Resources.Scripting.Contracts; +using Elsa.Api.Client.Resources.StorageDrivers.Contracts; +using Elsa.Api.Client.Resources.Tasks.Contracts; +using Elsa.Api.Client.Resources.VariableTypes.Contracts; +using Elsa.Api.Client.Resources.WorkflowActivationStrategies.Contracts; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Contracts; +using Elsa.Api.Client.Resources.WorkflowExecutionContexts.Contracts; +using Elsa.Api.Client.Resources.WorkflowInstances.Contracts; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; +using Refit; +using static Elsa.Api.Client.RefitSettingsHelper; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for dependency injection. +/// +[PublicAPI] +public static class DependencyInjectionExtensions +{ + /// + /// Adds default Elsa API clients configured to use an API key. + /// + public static IServiceCollection AddDefaultApiClientsUsingApiKey(this IServiceCollection services, Action configureOptions) + { + var options = new ElsaClientOptions(); + configureOptions(options); + + return services.AddDefaultApiClients(client => + { + client.BaseAddress = options.BaseAddress; + client.ApiKey = options.ApiKey; + client.ConfigureHttpClient = options.ConfigureHttpClient; + }); + } + + /// + /// Adds default Elsa API clients. + /// + public static IServiceCollection AddDefaultApiClients(this IServiceCollection services, Action? configureClient = null) + { + return services.AddApiClients(configureClient, builderOptions => + { + var builderOptionsWithoutRetryPolicy = new ElsaClientBuilderOptions + { + ApiKey = builderOptions.ApiKey, + AuthenticationHandler = builderOptions.AuthenticationHandler, + BaseAddress = builderOptions.BaseAddress, + ConfigureHttpClient = builderOptions.ConfigureHttpClient, + ConfigureHttpClientBuilder = builderOptions.ConfigureHttpClientBuilder, + ConfigureRetryPolicy = null + }; + + services.AddApi(builderOptions); + services.AddApi(builderOptionsWithoutRetryPolicy); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + services.AddApi(builderOptions); + }); + } + + /// + /// Adds an API client to the service collection. Requires AddElsaClient to be called exactly once. + /// + public static IServiceCollection AddApiClient(this IServiceCollection services, Action? configureClient = null) where T : class + { + return services.AddApiClients(configureClient, builderOptions => services.AddApi(builderOptions)); + } + + /// + /// Adds the Elsa client to the service collection. + /// + public static IServiceCollection AddApiClients(this IServiceCollection services, Action? configureClient = null, Action? configureServices = null) + { + var builderOptions = new ElsaClientBuilderOptions(); + configureClient?.Invoke(builderOptions); + builderOptions.ConfigureHttpClientBuilder += builder => builder.AddHttpMessageHandler(sp => (DelegatingHandler)sp.GetRequiredService(builderOptions.AuthenticationHandler)); + + services.TryAddScoped(builderOptions.AuthenticationHandler); + + services.Configure(options => + { + options.BaseAddress = builderOptions.BaseAddress; + options.ConfigureHttpClient = builderOptions.ConfigureHttpClient; + options.ApiKey = builderOptions.ApiKey; + }); + + configureServices?.Invoke(builderOptions); + return services; + } + + /// + /// Adds a refit client for the specified API type. + /// + /// The service collection. + /// An options object that can be used to configure the HTTP client builder. + /// The type representing the API. + public static IServiceCollection AddApi(this IServiceCollection services, ElsaClientBuilderOptions? httpClientBuilderOptions = default) where T : class + { + return services.AddApi(typeof(T), httpClientBuilderOptions); + } + + /// + /// Adds a refit client for the specified API type. + /// + /// The service collection. + /// The type representing the API + /// An options object that can be used to configure the HTTP client builder. + public static IServiceCollection AddApi(this IServiceCollection services, Type apiType, ElsaClientBuilderOptions? httpClientBuilderOptions = default) + { + var builder = services.AddRefitClient(apiType, sp => CreateRefitSettings(sp, httpClientBuilderOptions?.ConfigureJsonSerializerOptions), apiType.Name).ConfigureHttpClient(ConfigureElsaApiHttpClient); + httpClientBuilderOptions?.ConfigureHttpClientBuilder(builder); + httpClientBuilderOptions?.ConfigureRetryPolicy?.Invoke(builder); + return services; + } + + /// + /// Adds a refit client for the specified API type. + /// + /// The service collection. + /// An options object that can be used to configure the HTTP client builder. + /// The type representing the API. + public static void AddApiWithoutRetryPolicy(this IServiceCollection services, ElsaClientBuilderOptions? httpClientBuilderOptions = default) where T : class + { + var builder = services + .AddRefitClient(sp => CreateRefitSettings(sp), typeof(T).Name) + .ConfigureHttpClient(ConfigureElsaApiHttpClient); + httpClientBuilderOptions?.ConfigureHttpClientBuilder(builder); + } + + /// + /// Creates an API client for the specified API type. + /// + public static T CreateApi(this IServiceProvider serviceProvider, Uri baseAddress) where T : class + { + var httpClientFactory = serviceProvider.GetRequiredService(); + var httpClient = httpClientFactory.CreateClient(typeof(T).Name); + httpClient.BaseAddress = baseAddress; + return CreateApi(serviceProvider, httpClient); + } + + /// + /// Creates an API client for the specified API type. + /// + public static T CreateApi(this IServiceProvider serviceProvider, HttpClient httpClient) where T : class + { + return RestService.For(httpClient, CreateRefitSettings(serviceProvider)); + } + + private static void ConfigureElsaApiHttpClient(IServiceProvider serviceProvider, HttpClient httpClient) + { + var options = serviceProvider.GetRequiredService>().Value; + httpClient.BaseAddress = options.BaseAddress; + options.ConfigureHttpClient?.Invoke(serviceProvider, httpClient); + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/DictionaryExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/DictionaryExtensions.cs new file mode 100644 index 0000000..c733e11 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/DictionaryExtensions.cs @@ -0,0 +1,66 @@ +using System.Text.Json; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for . +/// +public static class DictionaryExtensions +{ + /// + /// Returns the value of the specified property if it exists, otherwise the default value. + /// + public static T TryGetValue(this IDictionary dictionary, string key, Func? defaultValue = default, JsonSerializerOptions? serializerOptions = default) + { + var caseInsensitiveDictionary = ToCaseInsensitiveDictionary(dictionary); + + if (caseInsensitiveDictionary.TryGetValue(key, out var value) && value is not JsonElement { ValueKind: JsonValueKind.Undefined }) + { + var convertedValue = value.ConvertTo(new ObjectConverterOptions(serializerOptions)); + + if (convertedValue != null) + return convertedValue; + } + + if (defaultValue == null) + return default!; + + var defaultVal = defaultValue()!; + dictionary[key] = defaultVal; + return defaultVal; + } + + /// + /// Returns the value of the specified property if it exists, otherwise the default value. + /// + public static object? TryGetValue(this IDictionary dictionary, string key, Func? defaultValue = default) + { + var caseInsensitiveDictionary = ToCaseInsensitiveDictionary(dictionary); + + if (caseInsensitiveDictionary.TryGetValue(key, out var value) && value is not JsonElement { ValueKind: JsonValueKind.Undefined }) + return value; + + if (defaultValue == null) + return default; + + var defaultVal = defaultValue()!; + dictionary[key] = defaultVal; + return defaultVal; + } + + // A method that de-duplicates the keys in the dictionary, taking into account that there may already be multiple keys that would be considered the same if the case was ignored. + private static Dictionary ToCaseInsensitiveDictionary(this IDictionary dictionary) + { + var caseInsensitiveDictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); + + foreach (var key in dictionary.Keys) + { + if (caseInsensitiveDictionary.ContainsKey(key)) + continue; + + caseInsensitiveDictionary[key] = dictionary[key]!; + } + + return caseInsensitiveDictionary; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/HeaderExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/HeaderExtensions.cs new file mode 100644 index 0000000..e23bafc --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/HeaderExtensions.cs @@ -0,0 +1,14 @@ +using Elsa.Api.Client.Shared; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Contains extension methods for the class. +/// +public static class HttpResponseMessageExtensions +{ + /// + /// Gets the workflow instance ID from the response. + /// + public static string? GetWorkflowInstanceId(this HttpResponseMessage response) => response.Headers.TryGetValues(HeaderNames.WorkflowInstanceId, out var values) ? values.FirstOrDefault() : default; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/JsonElementExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/JsonElementExtensions.cs new file mode 100644 index 0000000..052ac1a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/JsonElementExtensions.cs @@ -0,0 +1,26 @@ +using System.Text.Json; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for . +/// +public static class JsonElementExtensions +{ + /// + /// Returns the value of the specified property if it exists, otherwise the default value. + /// + public static bool TryGetPropertySafe(this JsonElement element, string propertyName, out JsonElement value) + { + value = default; + + if(element.ValueKind != JsonValueKind.Object) + return false; + + if (!element.TryGetProperty(propertyName, out var property)) + return false; + + value = property; + return true; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/JsonObjectExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/JsonObjectExtensions.cs new file mode 100644 index 0000000..b37f0f7 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/JsonObjectExtensions.cs @@ -0,0 +1,207 @@ +using System.Text.Json; +using System.Text.Json.Nodes; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for . +/// +public static class JsonObjectExtensions +{ + /// + /// Returns true if the specified represents an activity. + /// + public static bool IsActivity(this JsonObject obj) + { + return obj.ContainsKey("type") && obj.ContainsKey("id") && obj.ContainsKey("version"); + } + + /// + /// Serializes the specified value to a . + /// + /// The value to serialize. + /// The to use. + /// A representing the specified value. + public static JsonNode SerializeToNode(this object value, JsonSerializerOptions? options = null) + { + options ??= new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; + + return JsonSerializer.SerializeToNode(value, options)!; + } + + /// + /// Serializes the specified value to a . + /// + /// The value to serialize. + /// The to use. + /// A representing the specified value. + public static JsonArray SerializeToArray(this object value, JsonSerializerOptions? options = null) + { + options ??= new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; + + return JsonSerializer.SerializeToNode(value, options)!.AsArray(); + } + + /// + /// Serializes the specified value to a . + /// + /// The value to serialize. + /// The to use. + /// A representing the specified value. + public static JsonArray SerializeToArray(this IEnumerable value, JsonSerializerOptions? options = null) + { + options ??= new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; + + return JsonSerializer.SerializeToNode(value, options)!.AsArray(); + } + + /// + /// Deserializes the specified to the specified type. + /// + /// The to deserialize. + /// The to use. + /// The type to deserialize to. + /// The deserialized value. + public static T Deserialize(this JsonNode value, JsonSerializerOptions? options = null) + { + options ??= new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; + + if (value is JsonObject jsonObject) + return JsonSerializer.Deserialize(jsonObject, options)!; + + if (value is JsonArray jsonArray) + return JsonSerializer.Deserialize(jsonArray, options)!; + + if (typeof(T).IsEnum || (Nullable.GetUnderlyingType(typeof(T))?.IsEnum ?? false)) + { + if (value.GetValueKind() == JsonValueKind.Null) + return default!; + return (T)Enum.Parse(Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T), value.ToString()); + } + + if (value is JsonValue jsonValue) + return jsonValue.GetValue(); + + throw new NotSupportedException($"Cannot deserialize {value.GetType()} to {typeof(T)}."); + } + + /// + /// Sets the property value of the specified model. + /// + /// The model to set the property value on. + /// The value to set. + /// The path to the property. + public static void SetProperty(this JsonObject model, JsonNode? value, params string[] path) + { + model = GetPropertyContainer(model, path); + model[path.Last()] = value?.SerializeToNode(); + } + + /// + /// Sets the property value of the specified model. + /// + /// The model to set the property value on. + /// The value to set. + /// The path to the property. + public static void SetProperty(this JsonObject model, JsonArray? value, params string[] path) + { + model = GetPropertyContainer(model, path); + model[path.Last()] = value?.SerializeToNode(); + } + + /// + /// Sets the property value of the specified model. + /// + /// The model to set the property value on. + /// The value to set. + /// The path to the property. + public static void SetProperty(this JsonObject model, IEnumerable value, params string[] path) + { + model = GetPropertyContainer(model, path); + model[path.Last()] = new JsonArray(value.Select(x => x.SerializeToNode()).ToArray()); + } + + /// + /// Gets the property value of the specified model. + /// + /// The model to get the property value from. + /// The path to the property. + /// The property value. + public static JsonNode? GetProperty(this JsonObject model, params string[] path) + { + var currentModel = model; + + foreach (var prop in path.SkipLast(1)) + { + if (currentModel[prop] is not JsonObject value) + return null; + + currentModel = value; + } + + return currentModel[path.Last()]; + } + + /// + /// Gets the property value of the specified model. + /// + /// The model to get the property value from. + /// The path to the property. + /// The type to deserialize to. + /// The property value. + public static T? TryGetProperty(this JsonObject model, params string[] path) + { + try + { + return model.GetProperty(path); + } + catch (Exception e) + { + return default; + } + } + + /// + /// Gets the property value of the specified model. + /// + /// The model to get the property value from. + /// The path to the property. + /// The type to deserialize to. + /// The property value. + public static T? GetProperty(this JsonObject model, params string[] path) + { + var property = GetProperty(model, path); + return property != null ? property.Deserialize() : default; + } + + /// + /// Gets the property value of the specified model. + /// + /// The model to get the property value from. + /// The to use when deserializing. + /// The path to the property. + /// The type to deserialize to. + /// The property value. + public static T? GetProperty(this JsonObject model, JsonSerializerOptions options, params string[] path) + { + var property = GetProperty(model, path); + return property != null ? property.Deserialize(options) : default; + } + + /// + /// Returns the property container of the specified model. + /// + /// The model to set the property value on. + /// The path to the property. + private static JsonObject GetPropertyContainer(this JsonObject model, params string[] path) + { + foreach (var prop in path.SkipLast(1)) + { + var property = model[prop] as JsonObject ?? new JsonObject(); + model[prop] = property; + model = property; + } + + return model; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/ObjectConverter.cs b/src/clients/Elsa.Api.Client/Extensions/ObjectConverter.cs new file mode 100644 index 0000000..75f7d96 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/ObjectConverter.cs @@ -0,0 +1,229 @@ +using System.Collections; +using System.ComponentModel; +using System.Dynamic; +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides options to the conversion method. +/// +public record ObjectConverterOptions(JsonSerializerOptions? SerializerOptions = default) +{ + /// + public ObjectConverterOptions(Action configureSerializerOptions) : this() + { + SerializerOptions = new JsonSerializerOptions(); + configureSerializerOptions(SerializerOptions); + } +} + +/// +/// A helper that attempts many strategies to try and convert the source value into the destination type. +/// +public static class ObjectConverter +{ + /// + /// Attempts to convert the source value into the destination type. + /// + public static T? ConvertTo(this object? value, ObjectConverterOptions? serializerOptions = null) => value != null ? (T?)value.ConvertTo(typeof(T), serializerOptions) : default; + + /// + /// Attempts to convert the source value into the destination type. + /// + public static object? ConvertTo(this object? value, Type targetType, ObjectConverterOptions? converterOptions = null) + { + if (value == null) + return default!; + + var sourceType = value.GetType(); + + if (sourceType == targetType) + return value; + + var options = converterOptions?.SerializerOptions != null ? new JsonSerializerOptions(converterOptions.SerializerOptions) : new JsonSerializerOptions(); + options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + options.ReferenceHandler = ReferenceHandler.Preserve; + options.PropertyNameCaseInsensitive = true; + options.Converters.Add(new JsonStringEnumConverter()); + + var underlyingTargetType = Nullable.GetUnderlyingType(targetType) ?? targetType; + var underlyingSourceType = Nullable.GetUnderlyingType(sourceType) ?? sourceType; + + if (value is JsonElement { ValueKind: JsonValueKind.Number } jsonNumber && underlyingTargetType == typeof(string)) + return jsonNumber.ToString().ConvertTo(underlyingTargetType); + + if (value is JsonElement jsonElement) + { + if (jsonElement.ValueKind == JsonValueKind.String && underlyingTargetType != typeof(string)) + return jsonElement.GetString().ConvertTo(underlyingTargetType); + + return jsonElement.Deserialize(targetType, options); + } + + if (value is JsonNode jsonNode) + return jsonNode.Deserialize(targetType, options); + + if (underlyingSourceType == typeof(string) && !underlyingTargetType.IsPrimitive && underlyingTargetType != typeof(object)) + { + var stringValue = (string)value; + + try + { + var firstChar = stringValue.TrimStart().FirstOrDefault(); + + if (firstChar is '{' or '[') + return JsonSerializer.Deserialize(stringValue, underlyingTargetType, options); + } + catch (Exception) + { + throw new Exception($"Failed to deserialize {stringValue} to {underlyingTargetType}"); + } + } + + if (targetType == typeof(object)) + return value; + + if (underlyingTargetType.IsInstanceOfType(value)) + return value; + + if (underlyingSourceType == underlyingTargetType) + return value; + + if (IsDateType(underlyingSourceType) && IsDateType(underlyingTargetType)) + return ConvertAnyDateType(value, underlyingTargetType); + + if (typeof(IDictionary).IsAssignableFrom(underlyingSourceType) && underlyingTargetType.IsClass) + { + if (typeof(ExpandoObject) == underlyingTargetType) + { + var expandoJson = JsonSerializer.Serialize(value); + return ConvertTo(expandoJson, underlyingTargetType, converterOptions); + } + + if (typeof(IDictionary).IsAssignableFrom(underlyingTargetType)) + return new Dictionary((IDictionary)value); + + if (typeof(ExpandoObject) == underlyingSourceType) + { + // Parse ExpandoObject into target type. + var expandoObject = (IDictionary)value; + var json = JsonSerializer.Serialize(expandoObject); + return ConvertTo(json, underlyingTargetType, converterOptions); + } + } + + var targetTypeConverter = TypeDescriptor.GetConverter(underlyingTargetType); + + if (targetTypeConverter.CanConvertFrom(underlyingSourceType)) + return targetTypeConverter.IsValid(value) + ? targetTypeConverter.ConvertFrom(null!, CultureInfo.InvariantCulture, value) + : targetType.GetDefaultValue(); + + var sourceTypeConverter = TypeDescriptor.GetConverter(underlyingSourceType); + + if (sourceTypeConverter.CanConvertTo(underlyingTargetType)) + return sourceTypeConverter.ConvertTo(value, underlyingTargetType); + + if (underlyingTargetType.IsEnum) + { + if (underlyingSourceType == typeof(string)) + return Enum.Parse(underlyingTargetType, (string)value); + + if (underlyingSourceType == typeof(int)) + return Enum.ToObject(underlyingTargetType, value); + + if (underlyingSourceType == typeof(double)) + return Enum.ToObject(underlyingTargetType, Convert.ChangeType(value, typeof(int), CultureInfo.InvariantCulture)); + } + + if (value is string s) + { + if (string.IsNullOrWhiteSpace(s)) + return null; + + if (underlyingTargetType == typeof(Type)) + return Type.GetType(s); + + // Perhaps it's a bit of a leap, but if the input is a string and the target type is IEnumerable, then let's assume the string is a comma-separated list of strings. + if (typeof(IEnumerable).IsAssignableFrom(underlyingTargetType)) + return new[] { s }; + } + + if (value is IEnumerable enumerable) + { + if (underlyingTargetType is { IsGenericType: true }) + { + var desiredCollectionItemType = targetType.GenericTypeArguments[0]; + var desiredCollectionType = typeof(ICollection<>).MakeGenericType(desiredCollectionItemType); + + if (underlyingTargetType.IsAssignableFrom(desiredCollectionType) || desiredCollectionType.IsAssignableFrom(underlyingTargetType)) + { + var collectionType = typeof(List<>).MakeGenericType(desiredCollectionItemType); + var collection = (IList)Activator.CreateInstance(collectionType)!; + + foreach (var item in enumerable) + { + var convertedItem = ConvertTo(item, desiredCollectionItemType); + collection.Add(convertedItem); + } + + return collection; + } + } + } + + try + { + return Convert.ChangeType(value, underlyingTargetType, CultureInfo.InvariantCulture); + } + catch (InvalidCastException) + { + throw new Exception($"Failed to convert an object of type {sourceType} to {underlyingTargetType}"); + } + } + + /// + /// Returns true if the specified type is date-like type, false otherwise. + /// + private static bool IsDateType(Type type) + { + var dateTypes = new[] + { + typeof(DateTime), + typeof(DateTimeOffset) + }; + + return dateTypes.Contains(type); + } + + /// + /// Converts any date type to the specified target type. + /// + /// Any of or . + /// Any of or . + /// The converted value. + /// Thrown if is not of type or . + private static object ConvertAnyDateType(object value, Type targetType) + { + return targetType switch + { + { } t when t == typeof(DateTime) => value switch + { + DateTime dateTime => dateTime, + DateTimeOffset dateTimeOffset => dateTimeOffset.DateTime, + _ => throw new ArgumentException("Invalid value type.") + }, + { } t when t == typeof(DateTimeOffset) => value switch + { + DateTime dateTime => new DateTimeOffset(dateTime), + DateTimeOffset dateTimeOffset => dateTimeOffset, + _ => throw new ArgumentException("Invalid value type.") + }, + _ => throw new ArgumentException("Invalid target type.") + }; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/PropertyBagExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/PropertyBagExtensions.cs new file mode 100644 index 0000000..7ff4216 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/PropertyBagExtensions.cs @@ -0,0 +1,45 @@ +using System.Text.Json; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Provides extension methods for the PropertyBag class. +/// +public static class PropertyBagExtensions +{ + /// + /// Tries to retrieve a value from the PropertyBag based on the provided key. + /// If the specified key does not exist in the PropertyBag, the method will return the default value obtained from the defaultValue function. + /// + /// The type of the value to retrieve. + /// The PropertyBag to retrieve the value from. + /// The key of the value to retrieve. + /// A function that returns the default value to be returned if the key does not exist in the PropertyBag. + /// The value associated with the key, or the default value if the key does not exist. + public static T? TryGetValueOrDefault(this PropertyBag propertyBag, string key, Func defaultValue) + { + if (!propertyBag.TryGetValue(key, out var value)) + return defaultValue(); + + var json = value.ToString(); + + if (string.IsNullOrWhiteSpace(json)) + return defaultValue(); + + return JsonSerializer.Deserialize(json); + } + + /// + /// Sets a value in the PropertyBag based on the provided key. + /// The value is serialized using JSON. + /// + /// The PropertyBag to set the value in. + /// The key to associate with the value. + /// The value to store in the PropertyBag. + public static void SetValue(this PropertyBag propertyBag, string key, object value) + { + var json = JsonSerializer.Serialize(value); + propertyBag[key] = json; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/ResilienceStrategyExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/ResilienceStrategyExtensions.cs new file mode 100644 index 0000000..b198f05 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/ResilienceStrategyExtensions.cs @@ -0,0 +1,16 @@ +using System.Text.Json.Nodes; + +namespace Elsa.Api.Client.Extensions; + +public static class ResilienceStrategyExtensions +{ + public static string GetResilienceStrategyId(this JsonObject strategyJsonObject) + { + return strategyJsonObject.GetProperty("id")!; + } + + public static string GetResilienceStrategyDisplayName(this JsonObject strategyJsonObject) + { + return strategyJsonObject.GetProperty("displayName")!; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/TypeExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/TypeExtensions.cs new file mode 100644 index 0000000..1ddab6c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Extensions/TypeExtensions.cs @@ -0,0 +1,98 @@ +using System.Collections.Concurrent; + +namespace Elsa.Api.Client.Extensions; + +/// +/// Adds extension methods to . +/// +public static class TypeExtensions +{ + private static readonly ConcurrentDictionary SimpleAssemblyQualifiedTypeNameCache = new(); + + /// + /// Gets the assembly-qualified name of the type, without any version info etc. + /// E.g. "System.String, System.Private.CoreLib" + /// + public static string GetSimpleAssemblyQualifiedName(this Type type) + { + if (type is null) throw new ArgumentNullException(nameof(type)); + return SimpleAssemblyQualifiedTypeNameCache.GetOrAdd(type, BuildSimplifiedName); + } + + /// + /// Returns the default value for the specified type. + /// + public static object? GetDefaultValue(this Type type) => type.IsClass ? null : Activator.CreateInstance(type); + + /// + /// Returns the element type of the specified type representing an array or generic enumerable. + /// + public static Type GetEnumerableElementType(this Type type) + { + if (type.IsArray) + return type.GetElementType()!; + + var elementType = FindIEnumerable(type); + return elementType == null ? type : elementType.GetGenericArguments()[0]; + } + + /// + /// Searches for the first implemented IEnumerable interface in the given type hierarchy, and returns the generic type argument of the interface. + /// + /// The type to search for the IEnumerable interface. + /// The generic type argument of the first implemented IEnumerable interface found in the type hierarchy, or null if none is found. + private static Type? FindIEnumerable(Type? sequenceType) + { + if (sequenceType == null || sequenceType == typeof(string)) + return null; + + if (sequenceType.IsArray) + return typeof(IEnumerable<>).MakeGenericType(sequenceType.GetElementType()!); + + if (sequenceType.IsGenericType) + { + foreach (var arg in sequenceType.GetGenericArguments()) + { + var enumerable = typeof(IEnumerable<>).MakeGenericType(arg); + if (enumerable.IsAssignableFrom(sequenceType)) + return enumerable; + } + } + + var interfaces = sequenceType.GetInterfaces(); + + if (interfaces is { Length: > 0 }) + { + foreach (var interfaceType in interfaces) + { + var enumerable = FindIEnumerable(interfaceType); + if (enumerable != null) return enumerable; + } + } + if (sequenceType.BaseType != null && sequenceType.BaseType != typeof(object)) + return FindIEnumerable(sequenceType.BaseType); + + return null; + } + + private static string BuildSimplifiedName(Type type) + { + var assemblyName = type.Assembly.GetName().Name; + + if (type.IsGenericType) + { + var genericTypeName = type.GetGenericTypeDefinition().FullName!; + var backtickIndex = genericTypeName.IndexOf('`'); + var typeNameWithoutArity = genericTypeName[..backtickIndex]; + var arity = genericTypeName[backtickIndex..]; + + var genericArguments = type.GetGenericArguments(); + var simplifiedGenericArguments = genericArguments.Select(BuildSimplifiedName); + + return $"{typeNameWithoutArity}{arity}[[{string.Join("],[", simplifiedGenericArguments)}]], {assemblyName}"; + } + + var typeName = type.FullName; + return $"{typeName}, {assemblyName}"; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/FodyWeavers.xml b/src/clients/Elsa.Api.Client/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/clients/Elsa.Api.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs b/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs new file mode 100644 index 0000000..446b012 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs @@ -0,0 +1,44 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Elsa.Api.Client.Converters; +using Refit; + +namespace Elsa.Api.Client; + +/// +/// Contains helper methods for configuring Refit settings. +/// +public static class RefitSettingsHelper +{ + /// + /// Creates a instance configured for Elsa. + /// + public static RefitSettings CreateRefitSettings(IServiceProvider serviceProvider, Action? configureJsonSerializerOptions = null) + { + var settings = new RefitSettings + { + ContentSerializer = new SystemTextJsonContentSerializer(CreateJsonSerializerOptions(serviceProvider, configureJsonSerializerOptions)) + }; + + return settings; + } + + /// + /// Creates a instance configured for Elsa. + /// + public static JsonSerializerOptions CreateJsonSerializerOptions(IServiceProvider serviceProvider, Action? configureJsonSerializerOptions = null) + { + var options = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }; + + options.Converters.Add(new JsonStringEnumConverter()); + options.Converters.Add(new VersionOptionsJsonConverter()); + options.Converters.Add(new TypeJsonConverter()); + + configureJsonSerializerOptions?.Invoke(serviceProvider, options); + + return options; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/HttpMessageHandlers/ApiKeyHttpMessageHandler.cs b/src/clients/Elsa.Api.Client/HttpMessageHandlers/ApiKeyHttpMessageHandler.cs new file mode 100644 index 0000000..8fd0d88 --- /dev/null +++ b/src/clients/Elsa.Api.Client/HttpMessageHandlers/ApiKeyHttpMessageHandler.cs @@ -0,0 +1,30 @@ +using System.Net.Http.Headers; +using Elsa.Api.Client.Options; +using Microsoft.Extensions.Options; + +namespace Elsa.Api.Client.HttpMessageHandlers; + +/// +/// An that configures the outgoing HTTP request to use an API key as the authorization header. +/// +public class ApiKeyHttpMessageHandler : DelegatingHandler +{ + private readonly ElsaClientOptions _options; + + /// + /// Initializes a new instance of the class. + /// + public ApiKeyHttpMessageHandler(IOptions options) + { + _options = options.Value; + } + + /// + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + var apiKey = _options.ApiKey; + request.Headers.Authorization = new AuthenticationHeaderValue("ApiKey", apiKey); + + return await base.SendAsync(request, cancellationToken); + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/IsExternalInit.cs b/src/clients/Elsa.Api.Client/IsExternalInit.cs new file mode 100644 index 0000000..653e3c1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/IsExternalInit.cs @@ -0,0 +1,7 @@ +using System.ComponentModel; + +// ReSharper disable once CheckNamespace +namespace System.Runtime.CompilerServices; + +[EditorBrowsable(EditorBrowsableState.Never)] +internal sealed class IsExternalInit; \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs b/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs new file mode 100644 index 0000000..52b0b1b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs @@ -0,0 +1,48 @@ +using System.Text.Json; +using Elsa.Api.Client.HttpMessageHandlers; +using Microsoft.Extensions.DependencyInjection; +using Polly; + +namespace Elsa.Api.Client.Options; + +/// +/// Represents options for building an Elsa API client. +/// +public class ElsaClientBuilderOptions +{ + /// + /// Gets or sets the base address of the Elsa server. + /// + public Uri BaseAddress { get; set; } = default!; + + /// + /// Gets or sets the API key function to use when authenticating with the Elsa server. + /// + public string? ApiKey { get; set; } + + /// + /// A type that can be used to authenticate with the Elsa server. + /// Defaults to . + /// + public Type AuthenticationHandler { get; set; } = typeof(ApiKeyHttpMessageHandler); + + /// + /// Gets or sets a delegate that can be used to configure the HTTP client. + /// + public Action? ConfigureHttpClient { get; set; } + + /// + /// Gets or sets a delegate that can be used to configure the HTTP client builder. + /// + public Action ConfigureHttpClientBuilder { get; set; } = _ => { }; + + /// + /// Gets or sets a delegate that can be used to configure the retry policy. + /// + public Action? ConfigureRetryPolicy { get; set; } = builder => builder.AddTransientHttpErrorPolicy(p => p.WaitAndRetryAsync(3, attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)))); + + /// + /// Gets or sets a delegate that can be used to configure the JSON serializer options. + /// + public Action? ConfigureJsonSerializerOptions { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs b/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs new file mode 100644 index 0000000..21e9af5 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs @@ -0,0 +1,22 @@ +namespace Elsa.Api.Client.Options; + +/// +/// Represents options for the Elsa client. +/// +public class ElsaClientOptions +{ + /// + /// Gets or sets the base address of the Elsa server. + /// + public Uri BaseAddress { get; set; } = default!; + + /// + /// Gets or sets the API key function to use when authenticating with the Elsa server. + /// + public string? ApiKey { get; set; } + + /// + /// Gets or sets a delegate that can be used to configure the HTTP client. + /// + public Action? ConfigureHttpClient { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutedMessage.cs b/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutedMessage.cs new file mode 100644 index 0000000..998db30 --- /dev/null +++ b/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutedMessage.cs @@ -0,0 +1,10 @@ +using Elsa.Api.Client.Resources.ActivityExecutions.Models; + +namespace Elsa.Api.Client.RealTime.Messages; + +/// +/// Contains information about the activity executed event. +/// +/// The ID of the activity. +/// Execution stats about the activity. +public record ActivityExecutedMessage(string ActivityId, ActivityExecutionStats Stats); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutingMessage.cs b/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutingMessage.cs new file mode 100644 index 0000000..9245637 --- /dev/null +++ b/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutingMessage.cs @@ -0,0 +1,10 @@ +using Elsa.Api.Client.Resources.ActivityExecutions.Models; + +namespace Elsa.Api.Client.RealTime.Messages; + +/// +/// Contains information about the activity executing event. +/// +/// The ID of the activity. +/// Execution stats about the activity. +public record ActivityExecutingMessage(string ActivityId, ActivityExecutionStats Stats); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutionLogUpdatedMessage.cs b/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutionLogUpdatedMessage.cs new file mode 100644 index 0000000..d4530ca --- /dev/null +++ b/src/clients/Elsa.Api.Client/RealTime/Messages/ActivityExecutionLogUpdatedMessage.cs @@ -0,0 +1,9 @@ +using Elsa.Api.Client.Resources.ActivityExecutions.Models; + +namespace Elsa.Api.Client.RealTime.Messages; + +/// +/// Contains information about the activity execution logs updated event. +/// +/// Execution stats about a set of activities. +public record ActivityExecutionLogUpdatedMessage(ICollection Stats); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/RealTime/Messages/WorkflowExecutionLogUpdatedMessage.cs b/src/clients/Elsa.Api.Client/RealTime/Messages/WorkflowExecutionLogUpdatedMessage.cs new file mode 100644 index 0000000..9ecd704 --- /dev/null +++ b/src/clients/Elsa.Api.Client/RealTime/Messages/WorkflowExecutionLogUpdatedMessage.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.RealTime.Messages; + +/// +/// Represents a message that is sent when the workflow execution log is updated. +/// +public record WorkflowExecutionLogUpdatedMessage(); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/RealTime/Messages/WorkflowInstanceUpdatedMessage.cs b/src/clients/Elsa.Api.Client/RealTime/Messages/WorkflowInstanceUpdatedMessage.cs new file mode 100644 index 0000000..568b38e --- /dev/null +++ b/src/clients/Elsa.Api.Client/RealTime/Messages/WorkflowInstanceUpdatedMessage.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.RealTime.Messages; + +/// +/// Represents a message that is sent when the workflow instance is updated. +/// +/// The ID of the workflow instance that was updated. +public record WorkflowInstanceUpdatedMessage(string WorkflowInstanceId); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Contracts/IActivityDescriptorOptionsApi.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Contracts/IActivityDescriptorOptionsApi.cs new file mode 100644 index 0000000..a6fc3e2 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Contracts/IActivityDescriptorOptionsApi.cs @@ -0,0 +1,22 @@ +using Elsa.Api.Client.Resources.ActivityDescriptorOptions.Requests; +using Elsa.Api.Client.Resources.ActivityDescriptorOptions.Responses; +using Refit; + +namespace Elsa.Api.Client.Resources.ActivityDescriptorOptions.Contracts; + +/// +/// Represents a client for the workflow definitions API. +/// +public interface IActivityDescriptorOptionsApi +{ + /// + /// Lists activity descriptors options. + /// + /// The TypeName of the activity + /// The name of the property + /// The context request. + /// The cancellation token. + /// The response containing the activity descriptors. + [Post("/descriptors/activities/{activityTypeName}/options/{propertyName}")] + Task GetAsync(string activityTypeName, string propertyName, [Body]GetActivityDescriptorOptionsRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Requests/GetActivityDescriptorOptionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Requests/GetActivityDescriptorOptionsRequest.cs new file mode 100644 index 0000000..7897cef --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Requests/GetActivityDescriptorOptionsRequest.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Resources.ActivityDescriptorOptions.Requests; + +/// +/// Represents a request to Get Activity Descriptor Options. +/// +public class GetActivityDescriptorOptionsRequest +{ + /// + /// Object context use to pass custom information + /// + public object? Context { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Responses/GetActivityDescriptorOptionsResponse.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Responses/GetActivityDescriptorOptionsResponse.cs new file mode 100644 index 0000000..3b56542 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptorOptions/Responses/GetActivityDescriptorOptionsResponse.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.ActivityDescriptorOptions.Responses; +/// +/// Represents a response from get activity descriptors Options. +/// +/// The options elements. +public record GetActivityDescriptorOptionsResponse(IDictionary Items); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Contracts/IActivityDescriptorsApi.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Contracts/IActivityDescriptorsApi.cs new file mode 100644 index 0000000..cad8416 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Contracts/IActivityDescriptorsApi.cs @@ -0,0 +1,20 @@ +using Elsa.Api.Client.Resources.ActivityDescriptors.Requests; +using Elsa.Api.Client.Resources.ActivityDescriptors.Responses; +using Refit; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Contracts; + +/// +/// Represents a client for the workflow definitions API. +/// +public interface IActivityDescriptorsApi +{ + /// + /// Lists activity descriptors. + /// + /// The request containing options for listing activity descriptors. + /// The cancellation token. + /// The response containing the activity descriptors. + [Get("/descriptors/activities")] + Task ListAsync([Query]ListActivityDescriptorsRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Enums/ActivityKind.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Enums/ActivityKind.cs new file mode 100644 index 0000000..dc45a7b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Enums/ActivityKind.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Enums; + +/// +/// Represents the kind of an activity, which affects how it is executed. +/// +public enum ActivityKind +{ + /// + /// Always run synchronously. + /// + Action, + + /// + /// Can be used to trigger new workflows. + /// + Trigger, + + /// + /// Always run asynchronously. + /// + Job, + + /// + /// Run synchronously by default (like , but can be configured to run asynchronously (like ). + /// + Task +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Enums/PortType.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Enums/PortType.cs new file mode 100644 index 0000000..7552795 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Enums/PortType.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Enums; + +/// +/// The type of a port. +/// +public enum PortType +{ + /// + /// A port that is embedded in the activity. + /// + Embedded, + + /// + /// A flow port. + /// + Flow +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/ActivityDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/ActivityDescriptor.cs new file mode 100644 index 0000000..4f6b68a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/ActivityDescriptor.cs @@ -0,0 +1,94 @@ +using Elsa.Api.Client.Resources.ActivityDescriptors.Enums; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Models; + +/// +/// A descriptor of an activity type. +/// +public record ActivityDescriptor +{ + /// + /// The fully qualified name of the activity type. + /// + public string TypeName { get; init; } = default!; + + /// + /// The namespace of the activity type. + /// + public string Namespace { get; init; } = default!; + + /// + /// The name of the activity type. + /// + public string Name { get; init; } = default!; + + /// + /// The version of the activity type. + /// + public int Version { get; init; } + + /// + /// The category of the activity type. + /// + public string Category { get; init; } = default!; + + /// + /// The display name of the activity type. + /// + public string? DisplayName { get; init; } + + /// + /// The description of the activity type. + /// + public string? Description { get; init; } + + /// + /// The input properties of the activity type. + /// + public IReadOnlyCollection Inputs { get; init; } = new List(); + + /// + /// The output properties of the activity type. + /// + public IReadOnlyCollection Outputs { get; init; } = new List(); + + /// + /// The kind of activity. + /// + public ActivityKind Kind { get; set; } = ActivityKind.Action; + + /// + /// The ports of the activity type. + /// + public IReadOnlyCollection Ports { get; init; } = new List(); + + /// + /// The custom properties of the activity type. + /// + public IReadOnlyDictionary CustomProperties { get; set; } = new Dictionary(); + + /// + /// The properties to set when constructing an activity in the designer. + /// + public IDictionary ConstructionProperties { get; set; } = new Dictionary(); + + /// + /// A value indicating whether this activity is a container of child activities. + /// + public bool IsContainer { get; set; } + + /// + /// Whether this activity type is selectable from activity pickers. + /// + public bool IsBrowsable { get; set; } + + /// + /// Whether this activity type is a start activity. + /// + public bool IsStart { get; set; } + + /// + /// Whether this activity type is a terminal activity. + /// + public bool IsTerminal { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/InputDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/InputDescriptor.cs new file mode 100644 index 0000000..d190895 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/InputDescriptor.cs @@ -0,0 +1,56 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Models; + +/// +/// A descriptor of an activity's input property. +/// +[PublicAPI] +public class InputDescriptor : PropertyDescriptor +{ + /// + public InputDescriptor() + { + } + + /// + /// True if the property is wrapped with an "Input{T}" type, false otherwise. + /// + public bool IsWrapped { get; set; } + + /// + /// A string value that hints at what UI control might be used to render in a UI tool. + /// + public string UIHint { get; set; } = default!; + + /// + /// The category to which this input belongs. Can be used by UI to e.g. render different inputs in different tabs. + /// + public string? Category { get; set; } + + /// + /// The default value. + /// + public object? DefaultValue { get; set; } + + /// + /// The default syntax. + /// + public string? DefaultSyntax { get; set; } + + /// + /// True if the input is readonly, false otherwise. + /// + public bool? IsReadOnly { get; set; } + + /// + /// The storage driver type to use for persistence. + /// If no driver is specified, the referenced memory block will remain in memory for as long as the expression execution context exists. + /// + public string? StorageDriverType { get; set; } + + /// + /// A dictionary of UI specifications to be used by the UI. + /// + public IDictionary? UISpecifications { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/OutputDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/OutputDescriptor.cs new file mode 100644 index 0000000..3902968 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/OutputDescriptor.cs @@ -0,0 +1,11 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Models; + +/// +/// A descriptor of an activity's output property. +/// +[PublicAPI] +public class OutputDescriptor : PropertyDescriptor +{ +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs new file mode 100644 index 0000000..554fef7 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs @@ -0,0 +1,29 @@ +using Elsa.Api.Client.Resources.ActivityDescriptors.Enums; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Models; + +/// +/// Represents a port on an activity. +/// +public class Port +{ + /// + /// Gets or sets the name of the port. + /// + public string Name { get; set; } = default!; + + /// + /// Gets or sets the display name of the port. + /// + public string? DisplayName { get; set; } + + /// + /// Gets or sets the type of the port. + /// + public PortType Type { get; set; } + + /// + /// Gets or sets the visibility of the port. + /// + public bool? IsBrowsable { get; set; } = true; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/PropertyDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/PropertyDescriptor.cs new file mode 100644 index 0000000..927f0ea --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/PropertyDescriptor.cs @@ -0,0 +1,47 @@ +using System.Text.Json.Serialization; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Models; + +/// +/// A base type for and . +/// +[PublicAPI] +public abstract class PropertyDescriptor +{ + /// + /// The name. + /// + public string Name { get; set; } = default!; + + /// + /// The .NET type. + /// + [JsonPropertyName("typeName")] + public string TypeName { get; set; } = default!; + + /// + /// The user friendly name of the input. Used by UI tools. + /// + public string? DisplayName { get; set; } + + /// + /// The user friendly description of the input. Used by UI tools. + /// + public string? Description { get; set; } + + /// + /// The order in which this input should be displayed by UI tools. + /// + public float Order { get; set; } + + /// + /// True if this input should be displayed by UI tools, false otherwise. + /// + public bool? IsBrowsable { get; set; } + + /// + /// True if this input property is synthetic, which means it does not exist physically on the activity's .NET type. + /// + public bool IsSynthetic { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Requests/ListActivityDescriptorsRequest.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Requests/ListActivityDescriptorsRequest.cs new file mode 100644 index 0000000..cdbe025 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Requests/ListActivityDescriptorsRequest.cs @@ -0,0 +1,14 @@ +using Refit; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Requests; + +/// +/// Represents a request to list activity descriptors. +/// +public class ListActivityDescriptorsRequest +{ + /// + /// Whether to refresh the activity descriptors or not. + /// + [Query] public bool Refresh { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Responses/ListActivityDescriptorsResponse.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Responses/ListActivityDescriptorsResponse.cs new file mode 100644 index 0000000..bda8992 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Responses/ListActivityDescriptorsResponse.cs @@ -0,0 +1,10 @@ +using Elsa.Api.Client.Resources.ActivityDescriptors.Models; + +namespace Elsa.Api.Client.Resources.ActivityDescriptors.Responses; + +/// +/// Represents a response from listing activity descriptors. +/// +/// The activity descriptors. +/// The total number of activity descriptors. +public record ListActivityDescriptorsResponse(ICollection Items, int Count); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Contracts/IActivityExecutionsApi.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Contracts/IActivityExecutionsApi.cs new file mode 100644 index 0000000..2238c81 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Contracts/IActivityExecutionsApi.cs @@ -0,0 +1,48 @@ +using Elsa.Api.Client.Resources.ActivityExecutions.Models; +using Elsa.Api.Client.Resources.ActivityExecutions.Requests; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.ActivityExecutions.Contracts; + +/// +/// Represents a client for the activity executions API. +/// +public interface IActivityExecutionsApi +{ + /// + /// Gets a report of activity executions for a given workflow instance. + /// + /// The request. + /// An optional cancellation token. + /// The response containing the activity execution report. + [Post("/activity-executions/report")] + Task GetReportAsync([Body] GetActivityExecutionReportRequest request, CancellationToken cancellationToken = default); + + /// + /// Lists activity executions for a given activity in a workflow instance. + /// + /// The request. + /// An optional cancellation token. + /// The response containing a list of activity executions. + [Get("/activity-executions/list")] + Task> ListAsync(ListActivityExecutionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Lists activity execution summaries for a given activity in a workflow instance. + /// + /// The request. + /// An optional cancellation token. + /// The response containing a list of activity execution summaries. + [Get("/activity-execution-summaries/list")] + Task> ListSummariesAsync(ListActivityExecutionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Gets a single activity execution by ID. + /// + /// The ID of the activity execution. + /// An optional cancellation token. + /// The activity execution. + [Get("/activity-executions/{id}")] + Task GetAsync(string id, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionRecord.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionRecord.cs new file mode 100644 index 0000000..c3ac7c8 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionRecord.cs @@ -0,0 +1,93 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Models; +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.ActivityExecutions.Models; + +/// +/// Represents a single workflow execution, associated with an individual activity instance. +/// +[UsedImplicitly] +public class ActivityExecutionRecord : Entity +{ + /// + /// Gets or sets the workflow instance ID. + /// + public string WorkflowInstanceId { get; set; } = null!; + + /// + /// Gets or sets the activity ID. + /// + public string ActivityId { get; set; } = null!; + + /// + /// Gets or sets the activity node ID. + /// + public string ActivityNodeId { get; set; } = null!; + + /// + /// The type of the activity. + /// + public string ActivityType { get; set; } = null!; + + /// + /// The version of the activity type. + /// + public int ActivityTypeVersion { get; set; } + + /// + /// The name of the activity. + /// + public string? ActivityName { get; set; } = null!; + + /// + /// The state of the activity at the time this record is created or last updated. + /// + public IDictionary? ActivityState { get; set; } + + /// + /// Any additional payload associated with the log record. + /// + public IDictionary? Payload { get; set; } + + /// + /// Any outputs provided by the activity. + /// + public IDictionary? Outputs { get; set; } + + /// + /// Any properties provided by the activity. + /// + public IDictionary Properties { get; set; } = new Dictionary(); + + /// + /// Any metadata provided by the activity. In contrast to the property, this metadata is also persisted as part of the activity execution summary record. + /// It is therefore not suitable for larger payloads. + /// + public IDictionary Metadata { get; set; } = new Dictionary(); + + /// + /// Gets or sets the exception that occurred during the activity execution. + /// + public ExceptionState? Exception { get; set; } + + /// + /// Gets or sets the time at which the activity execution began. + /// + public DateTimeOffset StartedAt { get; set; } = default!; + + /// + /// Gets or sets whether the activity has any bookmarks. + /// + public bool HasBookmarks { get; set; } + + /// + /// Gets or sets the status of the activity. + /// + public ActivityStatus Status { get; set; } + + /// + /// Gets or sets the time at which the activity execution completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionRecordSummary.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionRecordSummary.cs new file mode 100644 index 0000000..349b964 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionRecordSummary.cs @@ -0,0 +1,86 @@ +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.ActivityExecutions.Models; + +/// +/// Represents a summarized view of a single activity execution of an activity instance. +/// +public class ActivityExecutionRecordSummary : Entity +{ + /// + /// Gets or sets the workflow instance ID. + /// + public string WorkflowInstanceId { get; set; } = null!; + + /// + /// Gets or sets the activity ID. + /// + public string ActivityId { get; set; } = null!; + + /// + /// Gets or sets the activity node ID. + /// + public string ActivityNodeId { get; set; } = null!; + + /// + /// The type of the activity. + /// + public string ActivityType { get; set; } = null!; + + /// + /// The version of the activity type. + /// + public int ActivityTypeVersion { get; set; } + + /// + /// The name of the activity. + /// + public string? ActivityName { get; set; } + + /// + /// Gets or sets the time at which the activity execution began. + /// + public DateTimeOffset StartedAt { get; set; } + + /// + /// Gets or sets whether the activity has any bookmarks. + /// + public bool HasBookmarks { get; set; } + + /// + /// Gets or sets metadata for the activity execution. + /// + public IDictionary? Metadata { get; set; } + + /// + /// Gets or sets the status of the activity. + /// + public ActivityStatus Status { get; set; } + + /// + /// Gets or sets the time at which the activity execution completed. + /// + public DateTimeOffset? CompletedAt { get; set; } + + /// + /// Returns a summary view of the specified . + /// + public static ActivityExecutionRecordSummary FromRecord(ActivityExecutionRecord record) + { + return new() + { + Id = record.Id, + WorkflowInstanceId = record.WorkflowInstanceId, + ActivityId = record.ActivityId, + ActivityNodeId = record.ActivityNodeId, + ActivityType = record.ActivityType, + ActivityTypeVersion = record.ActivityTypeVersion, + ActivityName = record.ActivityName, + StartedAt = record.StartedAt, + HasBookmarks = record.HasBookmarks, + Status = record.Status, + CompletedAt = record.CompletedAt, + Metadata = record.Metadata + }; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionReport.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionReport.cs new file mode 100644 index 0000000..46b8079 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionReport.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.ActivityExecutions.Models; + +/// +/// Represents a report of activity executions. +/// +/// The activity execution stats. +public record ActivityExecutionReport(ICollection Stats); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionStats.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionStats.cs new file mode 100644 index 0000000..31e1070 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Models/ActivityExecutionStats.cs @@ -0,0 +1,47 @@ +namespace Elsa.Api.Client.Resources.ActivityExecutions.Models; + +/// +/// Represents statistics about the execution of an activity. +/// +public class ActivityExecutionStats +{ + /// + /// Gets or sets the ID of the activity. + /// + public string ActivityId { get; set; } = null!; + + /// + /// Gets or sets the node ID of the activity. + /// + public string ActivityNodeId { get; set; } = null!; + + /// + /// Gets or sets the number of uncompleted executions. + /// + public long StartedCount { get; set; } + + /// + /// Gets or sets the number of completed executions. + /// + public long CompletedCount { get; set; } + + /// + /// Gets or sets the number of uncompleted executions. + /// + public long UncompletedCount { get; set; } + + /// + /// Gets or sets a value whether this activity is waiting for bookmarks to be resumed. + /// + public bool IsBlocked { get; set; } + + /// + /// Gets or sets a value whether this activity is faulted. + /// + public bool IsFaulted { get; set; } + + /// + /// Gets or sets additional metadata associated with the activity execution. + /// + public IDictionary? Metadata { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Requests/GetActivityExecutionReportRequest.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Requests/GetActivityExecutionReportRequest.cs new file mode 100644 index 0000000..54e1b66 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Requests/GetActivityExecutionReportRequest.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Resources.ActivityExecutions.Requests; + +/// +/// Represents a request for a list of activity execution records for a given activity in a workflow instance. +/// +public class GetActivityExecutionReportRequest +{ + /// + /// The ID of the workflow instance to get the execution log for. + /// + public string WorkflowInstanceId { get; set; } = default!; + + /// + /// The node IDs of the activities to get the execution record for. + /// + public ICollection ActivityNodeIds { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Requests/ListActivityExecutionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Requests/ListActivityExecutionsRequest.cs new file mode 100644 index 0000000..267c01e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/ActivityExecutions/Requests/ListActivityExecutionsRequest.cs @@ -0,0 +1,21 @@ +using Refit; + +namespace Elsa.Api.Client.Resources.ActivityExecutions.Requests; + +/// +/// Represents a request for a list of activity execution records for a given activity in a workflow instance. +/// +public class ListActivityExecutionsRequest +{ + /// + /// The ID of the workflow instance to get the execution log for. + /// + [Query] + public string WorkflowInstanceId { get; set; } = default!; + + /// + /// The node ID of the activity to get the execution record for. + /// + [Query] + public string ActivityNodeId { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Contracts/IAlterationsApi.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Contracts/IAlterationsApi.cs new file mode 100644 index 0000000..f71ed54 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Contracts/IAlterationsApi.cs @@ -0,0 +1,52 @@ +using Elsa.Api.Client.Resources.Alterations.Models; +using Elsa.Api.Client.Resources.Alterations.Requests; +using Elsa.Api.Client.Resources.Alterations.Responses; +using Refit; + +namespace Elsa.Api.Client.Resources.Alterations.Contracts; + +/// +/// Represents a client for the alterations API. Requires the Elsa.Alterations feature. +/// +public interface IAlterationsApi +{ + /// + /// Returns an alteration plan and its associated jobs. + /// + /// The ID of the alteration plan to return. + /// The cancellation token. + [Get("/alterations/{id}")] + Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Determines which workflow instances a "Submit" request would target without actually running an alteration + /// + /// The requested workflow filter to dry run + /// The cancellation token. + [Post("/alterations/dry-run")] + Task DryRun(AlterationWorkflowInstanceFilter request, CancellationToken cancellationToken = default); + + /// + /// Submits an alteration plan and a filter for workflows instances to be executed against + /// + /// The alterations and filter to submit + /// The cancellation token. + [Post("/alterations/submit")] + Task Submit(AlterationPlanParams request, CancellationToken cancellationToken = default); + + /// + /// Runs an alteration plan and a list of workflow Instance Ids to be executed against + /// + /// The alterations and workflowInstanceIds to execute + /// The cancellation token. + [Post("/alterations/run")] + Task Run(RunRequest request, CancellationToken cancellationToken = default); + + /// + /// Retries the specified workflow instances. + /// + /// The request containing the selection of workflow instances to retry. + /// The cancellation token. + [Post("/alterations/workflows/retry")] + Task BulkRetryAsync(BulkRetryRequest request, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/ActivityStatus.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/ActivityStatus.cs new file mode 100644 index 0000000..4f37626 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/ActivityStatus.cs @@ -0,0 +1,32 @@ +namespace Elsa.Api.Client.Resources.Alterations.Enums; + +/// +/// Represents the status of an activity. +/// +public enum ActivityStatus +{ + /// + /// The activity is in the Pending state. + /// + Pending, + + /// + /// The activity is in the Running state. Note that event if an activity is running, it may not be executing. + /// + Running, + + /// + /// The activity is in the Completed state. + /// + Completed, + + /// + /// The activity is in the Canceled state. + /// + Canceled, + + /// + /// The activity is in the Faulted state. + /// + Faulted +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/AlterationJobStatus.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/AlterationJobStatus.cs new file mode 100644 index 0000000..c64b4f5 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/AlterationJobStatus.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Resources.Alterations.Enums; + +/// +/// The status of an alteration plan for a workflow instance. +/// +public enum AlterationJobStatus +{ + /// + /// The plan is pending execution. + /// + Pending, + + /// + /// The plan is currently being executed. + /// + Running, + + /// + /// The plan has been completed. + /// + Completed, + + /// + /// The job has failed. + /// + Failed +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/AlterationPlanStatus.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/AlterationPlanStatus.cs new file mode 100644 index 0000000..737330d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Enums/AlterationPlanStatus.cs @@ -0,0 +1,37 @@ +namespace Elsa.Api.Client.Resources.Alterations.Enums; + +/// +/// The status of an alteration plan. +/// +public enum AlterationPlanStatus +{ + /// + /// The plan is pending execution. + /// + Pending, + + /// + /// The plan is currently generating jobs. + /// + Generating, + + /// + /// The plan is currently dispatching jobs. + /// + Dispatching, + + /// + /// The plan is currently being executed. + /// + Running, + + /// + /// The plan has been completed. + /// + Completed, + + /// + /// The plan has failed. + /// + Failed +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/ActivityFilter.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/ActivityFilter.cs new file mode 100644 index 0000000..dbd32b0 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/ActivityFilter.cs @@ -0,0 +1,34 @@ +using Elsa.Api.Client.Resources.Alterations.Enums; + +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// A filter for activities within a workflow instance +/// +public class ActivityFilter +{ + /// + /// The ID of the activity. + /// + public string? ActivityId { get; set; } + + /// + /// The ID of the activity instance. + /// + public string? ActivityInstanceId { get; set; } + + /// + /// The node ID of the activity. + /// + public string? NodeId { get; set; } + + /// + /// The name of the activity. + /// + public string? Name { get; set; } + + /// + /// The status of the activity. + /// + public ActivityStatus? Status { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationJob.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationJob.cs new file mode 100644 index 0000000..3ba5367 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationJob.cs @@ -0,0 +1,45 @@ +using Elsa.Api.Client.Resources.Alterations.Enums; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// Represents the execution of the plan for an individual workflow instance. +/// +public class AlterationJob : Entity +{ + /// + /// The ID of the plan that this job belongs to. + /// + public string PlanId { get; set; } = default!; + + /// + /// The ID of the workflow instance that this job applies to. + /// + public string WorkflowInstanceId { get; set; } = default!; + + /// + /// The status of the job. + /// + public AlterationJobStatus Status { get; set; } + + /// + /// The serialized log of the job. + /// + public ICollection? Log { get; set; } = new List(); + + /// + /// The date and time at which the job was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// The date and time at which the job was started. + /// + public DateTimeOffset? StartedAt { get; set; } + + /// + /// The date and time at which the job was completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationLog.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationLog.cs new file mode 100644 index 0000000..50bdea9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationLog.cs @@ -0,0 +1,13 @@ +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// Represents a log of alterations. +/// +public class AlterationLog +{ + + /// + /// The log entries. + /// + public ICollection LogEntries { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationLogEntry.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationLogEntry.cs new file mode 100644 index 0000000..d5fa2e8 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationLogEntry.cs @@ -0,0 +1,12 @@ +using Microsoft.Extensions.Logging; + +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// An individual log entry about an alteration +/// +/// +/// +/// +/// +public record AlterationLogEntry(string Message, LogLevel LogLevel, DateTimeOffset Timestamp, string? EventName = null); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationPlan.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationPlan.cs new file mode 100644 index 0000000..0ab6972 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationPlan.cs @@ -0,0 +1,41 @@ +using System.Text.Json.Nodes; +using Elsa.Api.Client.Resources.Alterations.Enums; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// A plan that contains a list of alterations to be applied to a set of workflow instances. +/// +public class AlterationPlan : Entity +{ + /// + /// The alterations to be applied. + /// + public ICollection Alterations { get; set; } = new List(); + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public AlterationWorkflowInstanceFilter WorkflowInstanceFilter { get; set; } = new(); + + /// + /// The status of the plan. + /// + public AlterationPlanStatus Status { get; set; } + + /// + /// The date and time at which the plan was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// The date and time at which the plan was started. + /// + public DateTimeOffset? StartedAt { get; set; } + + /// + /// The date and time at which the plan was completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationPlanParams.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationPlanParams.cs new file mode 100644 index 0000000..8a08f3a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationPlanParams.cs @@ -0,0 +1,24 @@ +using System.Text.Json.Nodes; + +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// Represents the execution of an alteration plan against a set of workflow instances defined by the given filter +/// +public class AlterationPlanParams +{ + /// + /// The unique identifier for the alteration plan. If not specified, a new ID will be generated. + /// + public string? Id { get; set; } + + /// + /// The alterations to be applied. + /// + public ICollection Alterations { get; set; } = new List(); + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public AlterationWorkflowInstanceFilter Filter { get; set; } = new(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationWorkflowInstanceFilter.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationWorkflowInstanceFilter.cs new file mode 100644 index 0000000..9e06e24 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/AlterationWorkflowInstanceFilter.cs @@ -0,0 +1,76 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Enums; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// Represents a filter for workflow instances. +/// +public class AlterationWorkflowInstanceFilter +{ + /// + /// If the filter is empty, all records are matched. + /// + public bool EmptyFilterSelectsAll { get; set; } + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public IEnumerable? WorkflowInstanceIds { get; set; } + + /// + /// The correlation IDs of the workflow instances that this plan applies to. + /// + public IEnumerable? CorrelationIds { get; set; } + + /// + /// A collection of names associated with the workflow instances being filtered. + /// + public ICollection? Names { get; set; } + + /// + /// A search term used to filter workflow instances based on matching criteria. + /// + public string? SearchTerm { get; set; } + + /// + /// A collection of timestamp filters used for filtering data based on specified timestamp columns and operators. + /// + public IEnumerable? TimestampFilters { get; set; } + + /// + /// The IDs of the workflow definitions that this plan applies to. + /// + public ICollection? DefinitionIds { get; set; } + + /// + /// The IDs of the workflow definitions that this plan applies to. + /// + public IEnumerable? DefinitionVersionIds { get; set; } + + /// + /// Whether the workflow instances to match have incidents. + /// + public bool? HasIncidents { get; set; } + + /// + /// Whether the workflow instances to match are system workflows. Defaults to false. + /// + public bool? IsSystem { get; set; } = false; + + /// + /// Represents the workflow statuses included in the filter. + /// + public ICollection? Statuses { get; set; } + + /// + /// A collection of sub-statuses used to filter workflow instances by their specific sub-state. + /// + public ICollection? SubStatuses { get; set; } + + /// + /// Represents a collection of filters for activities. + /// + public IEnumerable? ActivityFilters { get; set; } + +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/RunAlterationsResult.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/RunAlterationsResult.cs new file mode 100644 index 0000000..344973b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/RunAlterationsResult.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// The result of running a series of alterations. +/// +public class RunAlterationsResult +{ + /// + /// The ID of the workflow instance that was altered. + /// + public string WorkflowInstanceId { get; set; } = string.Empty; + + /// + /// A log of the alterations that were run. + /// + public AlterationLog Log { get; set; } = new(); + + /// + /// A flag indicating whether the workflow has scheduled work. + /// + public bool WorkflowHasScheduledWork { get; set; } + + /// + /// A flag indicating whether the alterations have succeeded. + /// + public bool IsSuccessful { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Requests/BulkRetryRequest.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Requests/BulkRetryRequest.cs new file mode 100644 index 0000000..2fbc9fd --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Requests/BulkRetryRequest.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Resources.Alterations.Requests; + +/// +/// Represents a request to bulk retry workflow instances. +/// +public class BulkRetryRequest +{ + /// + /// The IDs of the workflow instances that have incidents to be retried. + /// + public ICollection WorkflowInstanceIds { get; set; } = new List(); + + /// + /// An optional list of explicitly specified activity IDs to retry. If omitted, all faulted activities will be retried. + /// + public ICollection? ActivityIds { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/BulkRetryResponse.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/BulkRetryResponse.cs new file mode 100644 index 0000000..532e517 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/BulkRetryResponse.cs @@ -0,0 +1,14 @@ +using Elsa.Api.Client.Resources.Alterations.Models; + +namespace Elsa.Api.Client.Resources.Alterations.Responses; + +/// +/// Represents a response to bulk retry workflow instances. +/// +public class BulkRetryResponse +{ + /// + /// The alterations that resulted from the bulk retry request + /// + public ICollection Results { get;set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/DryRunResponse.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/DryRunResponse.cs new file mode 100644 index 0000000..5c8a383 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/DryRunResponse.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Resources.Alterations.Responses; + +/// +/// The response to the DryRun request +/// +public class DryRunResponse +{ + /// + /// The list of workflow instance IDs that would be affected by a "Submit" request + /// + public ICollection WorkflowInstanceIds { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/GetAlterationPlanResponse.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/GetAlterationPlanResponse.cs new file mode 100644 index 0000000..ee64475 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/GetAlterationPlanResponse.cs @@ -0,0 +1,19 @@ +using Elsa.Api.Client.Resources.Alterations.Models; + +namespace Elsa.Api.Client.Resources.Alterations.Responses; + +/// +/// The response from the "Get" alteration plan endpoint +/// +public class GetAlterationPlanResponse +{ + /// + /// The alteration plan mathching the provided ID + /// + public AlterationPlan Plan { get; set; } = new(); + + /// + /// The list of jobs that exist for that AlterationPlan + /// + public ICollection Jobs { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/RunRequest.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/RunRequest.cs new file mode 100644 index 0000000..fdd5509 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/RunRequest.cs @@ -0,0 +1,19 @@ +using System.Text.Json.Nodes; + +namespace Elsa.Api.Client.Resources.Alterations.Responses; + +/// +/// A plan that contains a list of alterations to be applied to a set of workflow instances. +/// +public class RunRequest +{ + /// + /// The alterations to be applied. + /// + public ICollection Alterations { get; set; } = new List(); + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public ICollection WorkflowInstanceIds { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/RunResponse.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/RunResponse.cs new file mode 100644 index 0000000..50b2fec --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/RunResponse.cs @@ -0,0 +1,14 @@ +using Elsa.Api.Client.Resources.Alterations.Models; + +namespace Elsa.Api.Client.Resources.Alterations.Responses; + +/// +/// The response to the Run endpoint +/// +public class RunResponse +{ + /// + /// The alteration results of a Run request + /// + private ICollection Results { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/SubmitResponse.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/SubmitResponse.cs new file mode 100644 index 0000000..b3b0e52 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Responses/SubmitResponse.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Resources.Alterations.Responses; + +/// +/// The response to the "Submit" endpoint +/// +public class SubmitResponse +{ + /// + /// The ID of the alteration plan created as part of the Submit request + /// + public string PlanId { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/CommitStrategies/Contracts/IIncidentStrategiesApi.cs b/src/clients/Elsa.Api.Client/Resources/CommitStrategies/Contracts/IIncidentStrategiesApi.cs new file mode 100644 index 0000000..cfee71f --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/CommitStrategies/Contracts/IIncidentStrategiesApi.cs @@ -0,0 +1,25 @@ +using Elsa.Api.Client.Resources.CommitStrategies.Models; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.CommitStrategies.Contracts; + +/// +/// Represents a client for the commit strategies API. +/// +public interface ICommitStrategiesApi +{ + /// + /// Lists workflow commit strategies. + /// + /// A list response containing activity commit strategy descriptors and their count. + [Get("/descriptors/commit-strategies/workflows")] + Task> ListWorkflowStrategiesAsync(CancellationToken cancellationToken = default); + + /// + /// Lists activity commit strategies. + /// + /// A list response containing activity commit strategy descriptors and their count. + [Get("/descriptors/commit-strategies/activities")] + Task> ListActivityStrategiesAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/CommitStrategies/Models/CommitStrategyDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/CommitStrategies/Models/CommitStrategyDescriptor.cs new file mode 100644 index 0000000..ad63d59 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/CommitStrategies/Models/CommitStrategyDescriptor.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.CommitStrategies.Models; + +/// +/// Represents a descriptor for a commit strategy, containing information such as its technical name, +/// display name, and description. +/// +public record CommitStrategyDescriptor(string Name, string DisplayName, string Description); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Features/Contracts/IFeaturesApi.cs b/src/clients/Elsa.Api.Client/Resources/Features/Contracts/IFeaturesApi.cs new file mode 100644 index 0000000..107f0af --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Features/Contracts/IFeaturesApi.cs @@ -0,0 +1,23 @@ +using Elsa.Api.Client.Resources.Features.Models; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.Features.Contracts; + +/// +/// A client for working with features. +/// +public interface IFeaturesApi +{ + /// + /// Gets the specified feature. + /// + [Get("/features/installed/{fullName}")] + Task GetAsync(string fullName, CancellationToken cancellationToken = default); + + /// + /// Gets the specified feature. + /// + [Get("/features/installed")] + Task> ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Features/Models/FeatureDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/Features/Models/FeatureDescriptor.cs new file mode 100644 index 0000000..a376cd9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Features/Models/FeatureDescriptor.cs @@ -0,0 +1,35 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.Features.Models; + +/// +/// Represents a feature descriptor. +/// +[PublicAPI] +public class FeatureDescriptor +{ + /// + /// Gets or sets the name of the feature. + /// + public string Name { get; set; } = default!; + + /// + /// Gets or sets the namespace of the feature. + /// + public string Namespace { get; set; } = default!; + + /// + /// Gets the full name of the feature. + /// + public string FullName { get; set; } = default!; + + /// + /// The display name for the feature. + /// + public string DisplayName { get; set; } = default!; + + /// + /// The description of the feature. + /// + public string Description { get; set; } = ""; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Identity/Contracts/ILoginApi.cs b/src/clients/Elsa.Api.Client/Resources/Identity/Contracts/ILoginApi.cs new file mode 100644 index 0000000..2f14df7 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Identity/Contracts/ILoginApi.cs @@ -0,0 +1,20 @@ +using Elsa.Api.Client.Resources.Identity.Requests; +using Elsa.Api.Client.Resources.Identity.Responses; +using Refit; + +namespace Elsa.Api.Client.Resources.Identity.Contracts; + +/// +/// Represents a client for the login API. +/// +public interface ILoginApi +{ + /// + /// Sends the specified request to the login API. + /// + /// The request. + /// The cancellation token. + /// The response. + [Post("/identity/login")] + Task LoginAsync([Body] LoginRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Identity/Requests/LoginRequest.cs b/src/clients/Elsa.Api.Client/Resources/Identity/Requests/LoginRequest.cs new file mode 100644 index 0000000..60b3e8c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Identity/Requests/LoginRequest.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Resources.Identity.Requests; + +/// +/// Represents a request to log in. +/// +/// The username. +/// The password. +public record LoginRequest(string Username, string Password); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Identity/Responses/LoginResponse.cs b/src/clients/Elsa.Api.Client/Resources/Identity/Responses/LoginResponse.cs new file mode 100644 index 0000000..d4d332f --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Identity/Responses/LoginResponse.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.Identity.Responses; + +/// +/// The response of logging in. +/// +public record LoginResponse(bool IsAuthenticated, string? AccessToken, string? RefreshToken); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/IncidentStrategies/Contracts/IIncidentStrategiesApi.cs b/src/clients/Elsa.Api.Client/Resources/IncidentStrategies/Contracts/IIncidentStrategiesApi.cs new file mode 100644 index 0000000..4bb0f63 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/IncidentStrategies/Contracts/IIncidentStrategiesApi.cs @@ -0,0 +1,17 @@ +using Elsa.Api.Client.Resources.IncidentStrategies.Models; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.IncidentStrategies.Contracts; + +/// +/// Represents a client for the variable types API. +/// +public interface IIncidentStrategiesApi +{ + /// + /// Lists incident strategies. + /// + [Get("/descriptors/incident-strategies")] + Task> ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/IncidentStrategies/Models/IncidentStrategyDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/IncidentStrategies/Models/IncidentStrategyDescriptor.cs new file mode 100644 index 0000000..fc401f3 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/IncidentStrategies/Models/IncidentStrategyDescriptor.cs @@ -0,0 +1,9 @@ +namespace Elsa.Api.Client.Resources.IncidentStrategies.Models; + +/// +/// Represents an incident strategy. +/// +/// The .NET type name of the strategy. +/// The display name of the strategy. +/// The description of the strategy. +public record IncidentStrategyDescriptor(string TypeName, string DisplayName, string? Description); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/LogPersistenceStrategies/Contracts/ILogPersistenceStrategiesApi.cs b/src/clients/Elsa.Api.Client/Resources/LogPersistenceStrategies/Contracts/ILogPersistenceStrategiesApi.cs new file mode 100644 index 0000000..94f0fed --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/LogPersistenceStrategies/Contracts/ILogPersistenceStrategiesApi.cs @@ -0,0 +1,19 @@ +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; +using Refit; + +namespace Elsa.Api.Client.Resources.LogPersistenceStrategies; + +/// +/// Represents a client API for managing log persistence strategies. +/// +[UsedImplicitly] +public interface ILogPersistenceStrategiesApi +{ + /// + /// Lists log persistence strategies. + /// + /// The cancellation token. + [Get("/descriptors/log-persistence-strategies")] + Task> ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/LogPersistenceStrategies/Models/LogPersistenceStrategyDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/LogPersistenceStrategies/Models/LogPersistenceStrategyDescriptor.cs new file mode 100644 index 0000000..89cccfc --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/LogPersistenceStrategies/Models/LogPersistenceStrategyDescriptor.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.LogPersistenceStrategies; + +/// +/// Represents a log persistence strategy. +/// +/// The .NET type name of the log persistence strategy. +/// The display name of the log persistence strategy. +/// The description of the log persistence strategy. +[UsedImplicitly] +public record LogPersistenceStrategyDescriptor(string TypeName, string DisplayName, string? Description); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Package/Contracts/IPackageApi.cs b/src/clients/Elsa.Api.Client/Resources/Package/Contracts/IPackageApi.cs new file mode 100644 index 0000000..08bb9b2 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Package/Contracts/IPackageApi.cs @@ -0,0 +1,16 @@ +using Elsa.Api.Client.Resources.Package.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.Package.Contracts; + +/// +/// A client for working with packages. +/// +public interface IPackageApi +{ + /// + /// Gets the installed package version of Elsa. + /// + [Get("/package/version")] + Task GetAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Package/Models/PackageVersionResponse.cs b/src/clients/Elsa.Api.Client/Resources/Package/Models/PackageVersionResponse.cs new file mode 100644 index 0000000..0dcf5e5 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Package/Models/PackageVersionResponse.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.Package.Models; + +/// +/// Contains the installed package version of Elsa. +/// +/// The installed package version of Elsa. +public record PackageVersionResponse(string PackageVersion); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Resilience/Contracts/IIncidentStrategiesApi.cs b/src/clients/Elsa.Api.Client/Resources/Resilience/Contracts/IIncidentStrategiesApi.cs new file mode 100644 index 0000000..713b348 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Resilience/Contracts/IIncidentStrategiesApi.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Nodes; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.Resilience.Contracts; + +/// +/// Provides operations for managing and retrieving resilience strategies within the application. +/// +public interface IResilienceStrategiesApi +{ + /// + /// Retrieves a list of resilience strategies from the resilience strategies API endpoint. + /// + /// The category to filter the strategies by. + /// An optional token to cancel the operation. + /// A with the list of resilience strategies. + [Get("/resilience/strategies")] + Task> ListAsync(string category, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Resilience/Contracts/IRetryAttemptsApi.cs b/src/clients/Elsa.Api.Client/Resources/Resilience/Contracts/IRetryAttemptsApi.cs new file mode 100644 index 0000000..fc25331 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Resilience/Contracts/IRetryAttemptsApi.cs @@ -0,0 +1,11 @@ +using Elsa.Api.Client.Resources.Resilience.Models; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.Resilience.Contracts; + +public interface IRetryAttemptsApi +{ + [Get("/resilience/retries/{activityInstanceId}")] + Task> ListAsync(string activityInstanceId, int? skip = null, int? take = null, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Resilience/Models/ResilienceStrategyConfig.cs b/src/clients/Elsa.Api.Client/Resources/Resilience/Models/ResilienceStrategyConfig.cs new file mode 100644 index 0000000..2b56bd4 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Resilience/Models/ResilienceStrategyConfig.cs @@ -0,0 +1,23 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using Elsa.Api.Client.Resources.Scripting.Models; +using Elsa.Api.Client.Serialization; + +namespace Elsa.Api.Client.Resources.Resilience.Models; + +public class ResilienceStrategyConfig +{ + public ResilienceStrategyConfigMode Mode { get; set; } + public string? StrategyId { get; set; } + public Expression? Expression { get; set; } + + public JsonNode SerializeToNode() + { + return JsonSerializer.SerializeToNode(this, SerializerOptions.ResilienceStrategyConfigSerializerOptions)!; + } + + public static ResilienceStrategyConfig? Deserialize(JsonNode? node) + { + return node.Deserialize(SerializerOptions.ResilienceStrategyConfigSerializerOptions)!; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Resilience/Models/ResilienceStrategyConfigMode.cs b/src/clients/Elsa.Api.Client/Resources/Resilience/Models/ResilienceStrategyConfigMode.cs new file mode 100644 index 0000000..1c55276 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Resilience/Models/ResilienceStrategyConfigMode.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.Resilience.Models; + +public enum ResilienceStrategyConfigMode +{ + Identifier, + Expression, +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Resilience/Models/RetryAttempt.cs b/src/clients/Elsa.Api.Client/Resources/Resilience/Models/RetryAttempt.cs new file mode 100644 index 0000000..f765183 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Resilience/Models/RetryAttempt.cs @@ -0,0 +1,13 @@ +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.Resilience.Models; + +public class RetryAttemptRecord : Entity +{ + public string ActivityInstanceId { get; set; } = null!; + public string ActivityId { get; set; } = null!; + public string WorkflowInstanceId { get; set; } = null!; + public int AttemptNumber { get; set; } + public TimeSpan RetryDelay { get; set; } + public IDictionary Details { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Scripting/Contracts/IExpressionsApi.cs b/src/clients/Elsa.Api.Client/Resources/Scripting/Contracts/IExpressionsApi.cs new file mode 100644 index 0000000..a129d2c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Scripting/Contracts/IExpressionsApi.cs @@ -0,0 +1,19 @@ +using Elsa.Api.Client.Resources.Scripting.Models; +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; +using Refit; + +namespace Elsa.Api.Client.Resources.Scripting.Contracts; + +/// +/// Represents a client for the expression descriptors API. +/// +[PublicAPI] +public interface IExpressionDescriptorsApi +{ + /// + /// Sends a request to retrieve all available expression descriptors. + /// + [Get("/descriptors/expression-descriptors")] + Task> ListAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Scripting/Contracts/IJavaScriptApi.cs b/src/clients/Elsa.Api.Client/Resources/Scripting/Contracts/IJavaScriptApi.cs new file mode 100644 index 0000000..eb94667 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Scripting/Contracts/IJavaScriptApi.cs @@ -0,0 +1,22 @@ +using Elsa.Api.Client.Resources.Scripting.Requests; +using JetBrains.Annotations; +using Refit; + +namespace Elsa.Api.Client.Resources.Scripting.Contracts; + +/// +/// Represents a client for the workflow javascript API. +/// +[PublicAPI] +public interface IJavaScriptApi +{ + /// + /// Dispatches a request to retrieve the type definitions of the specified workflow definition. + /// + /// The definition ID of the workflow definition to retrieve the type definitions for. + /// Required request containing properties to retrieve the correct type definitions. + /// An optional cancellation token. + /// A response containing the type definition data which can be used to extend auto completion in Monaco. + [Post("/scripting/javascript/type-definitions/{definitionId}")] + Task GetTypeDefinitions(string definitionId, GetWorkflowJavaScriptDefinitionRequest request, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Scripting/Extensions/ExpressionExtensions.cs b/src/clients/Elsa.Api.Client/Resources/Scripting/Extensions/ExpressionExtensions.cs new file mode 100644 index 0000000..f9cbc17 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Scripting/Extensions/ExpressionExtensions.cs @@ -0,0 +1,16 @@ +using Elsa.Api.Client.Resources.Scripting.Models; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.Scripting.Extensions; + +/// +/// Provides extension methods for . +/// +[PublicAPI] +public static class ExpressionDescriptorExtensions +{ + /// + /// Gets the expression language to use for the Monaco editor. + /// + public static string? GetMonacoLanguage(this ExpressionDescriptor descriptor) => descriptor.Properties.TryGetValue("MonacoLanguage", out var language) ? language : null; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Scripting/Models/Expression.cs b/src/clients/Elsa.Api.Client/Resources/Scripting/Models/Expression.cs new file mode 100644 index 0000000..718c746 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Scripting/Models/Expression.cs @@ -0,0 +1,53 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.Scripting.Models; + +/// +/// Represents a dynamic expression. +/// +public class Expression +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public Expression() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The type of the expression. + /// The expression. + public Expression(string type, string? value = null) + { + Type = type; + Value = value; + } + + /// + /// Gets or sets the expression type. + /// + public string Type { get; set; } = null!; + + /// + /// Gets or sets the value representing the expression. + /// + public object? Value { get; set; } + + /// + /// Returns the C# expression. + /// + public override string ToString() => Value?.ToString() ?? ""; + + /// + /// Creates a literal expression. + /// + public static Expression CreateLiteral(string value) => new("Literal", value); + + /// + /// Creates an object expression. + /// + public static Expression CreateObject(string value) => new("Object", value); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Scripting/Models/ExpressionDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/Scripting/Models/ExpressionDescriptor.cs new file mode 100644 index 0000000..f002f11 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Scripting/Models/ExpressionDescriptor.cs @@ -0,0 +1,53 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.Scripting.Models; + +/// +/// Represents a descriptor for an expression. +/// +public class ExpressionDescriptor +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public ExpressionDescriptor() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The expression type. + /// The display name of the expression type. + public ExpressionDescriptor(string type, string displayName) + { + Type = type; + DisplayName = displayName; + } + + /// + /// Gets or sets the expression type. + /// + public string Type { get; set; } = default!; + + /// + /// Gets or sets the display name of the expression type. + /// + public string DisplayName { get; set; } = default!; + + /// + /// Gets or sets whether the expression value is serializable. + /// + public bool IsSerializable { get; set; } = true; + + /// + /// Gets or sets whether the expression type is browsable. + /// + public bool IsBrowsable { get; set; } = true; + + /// + /// Gets or sets the expression type properties. + /// + public IDictionary Properties { get; set; } = new Dictionary(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Scripting/Requests/GetWorkflowJavaScriptDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/Scripting/Requests/GetWorkflowJavaScriptDefinitionRequest.cs new file mode 100644 index 0000000..9b89006 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Scripting/Requests/GetWorkflowJavaScriptDefinitionRequest.cs @@ -0,0 +1,22 @@ +namespace Elsa.Api.Client.Resources.Scripting.Requests; + +/// +/// A request to retrieve the type definitions +/// +public class GetWorkflowJavaScriptDefinitionRequest(string workflowDefinitionId, string? activityTypeName, string? propertyName) +{ + /// + /// Gets or sets workflow definition to retrieve type definitions for. + /// + public string WorkflowDefinitionId { get; set; } = workflowDefinitionId; + + /// + /// Gets or sets the type name of the activity to retrieve type definitions for. + /// + public string? ActivityTypeName { get; set; } = activityTypeName; + + /// + /// Gets or sets the name of the property to retrieve type definitions for. + /// + public string? PropertyName { get; set; } = propertyName; +} diff --git a/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Contracts/IStorageDriversApi.cs b/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Contracts/IStorageDriversApi.cs new file mode 100644 index 0000000..0040883 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Contracts/IStorageDriversApi.cs @@ -0,0 +1,18 @@ +using Elsa.Api.Client.Resources.StorageDrivers.Responses; +using Refit; + +namespace Elsa.Api.Client.Resources.StorageDrivers.Contracts; + +/// +/// Represents a client for the storage drivers API. +/// +public interface IStorageDriversApi +{ + /// + /// Lists storage drivers. + /// + /// The cancellation token. + /// The response containing the storage drivers. + [Get("/descriptors/storage-drivers")] + Task ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Models/StorageDriverDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Models/StorageDriverDescriptor.cs new file mode 100644 index 0000000..835893b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Models/StorageDriverDescriptor.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Resources.StorageDrivers.Models; + +/// +/// Represents a storage driver descriptor. +/// +/// The type name of the storage driver. +/// The display name of the storage driver. +public record StorageDriverDescriptor(string TypeName, string DisplayName, double Priority = 0, bool Deprecated = false); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Responses/ListStorageDriversResponse.cs b/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Responses/ListStorageDriversResponse.cs new file mode 100644 index 0000000..6608c2a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/StorageDrivers/Responses/ListStorageDriversResponse.cs @@ -0,0 +1,9 @@ +using Elsa.Api.Client.Resources.StorageDrivers.Models; + +namespace Elsa.Api.Client.Resources.StorageDrivers.Responses; + +/// +/// The response containing the storage drivers. +/// +/// The storage drivers. +public record ListStorageDriversResponse(ICollection Items); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Tasks/Contracts/ITasksApi.cs b/src/clients/Elsa.Api.Client/Resources/Tasks/Contracts/ITasksApi.cs new file mode 100644 index 0000000..1fa7661 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Tasks/Contracts/ITasksApi.cs @@ -0,0 +1,20 @@ +using Elsa.Api.Client.Resources.Tasks.Requests; +using Refit; + +namespace Elsa.Api.Client.Resources.Tasks.Contracts; + +/// +/// Represents a client for the tasks API. +/// +public interface ITasksApi +{ + /// + /// Sends the specified request to the tasks API. + /// + /// The Id of the task being reported as completed. + /// The request. + /// The cancellation token. + /// The response. + [Post("/tasks/{taskId}/complete")] + Task ReportTaskCompletedAsync(string taskId, [Body] ReportTaskCompletedRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/Tasks/Requests/ReportTaskCompletedRequest.cs b/src/clients/Elsa.Api.Client/Resources/Tasks/Requests/ReportTaskCompletedRequest.cs new file mode 100644 index 0000000..f005e11 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Tasks/Requests/ReportTaskCompletedRequest.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.Tasks.Requests; + +/// +/// Represents a request to report a task has been completed. +/// +/// The result of the task being reported as completed. +public record ReportTaskCompletedRequest(object? Result); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/VariableTypes/Contracts/IStorageDriversApi.cs b/src/clients/Elsa.Api.Client/Resources/VariableTypes/Contracts/IStorageDriversApi.cs new file mode 100644 index 0000000..fb77e64 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/VariableTypes/Contracts/IStorageDriversApi.cs @@ -0,0 +1,18 @@ +using Elsa.Api.Client.Resources.VariableTypes.Responses; +using Refit; + +namespace Elsa.Api.Client.Resources.VariableTypes.Contracts; + +/// +/// Represents a client for the variable types API. +/// +public interface IVariableTypesApi +{ + /// + /// Lists variable types. + /// + /// The cancellation token. + /// The response containing the variable types. + [Get("/descriptors/variables")] + Task ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/VariableTypes/Models/VariableTypeDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/VariableTypes/Models/VariableTypeDescriptor.cs new file mode 100644 index 0000000..6937c19 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/VariableTypes/Models/VariableTypeDescriptor.cs @@ -0,0 +1,10 @@ +namespace Elsa.Api.Client.Resources.VariableTypes.Models; + +/// +/// Represents a variable type. +/// +/// The .NET type name of the variable type. +/// The display name of the variable type. +/// The category of the variable type. +/// The description of the variable type. +public record VariableTypeDescriptor(string TypeName, string DisplayName, string Category, string? Description); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/VariableTypes/Responses/ListVariableTypesResponse.cs b/src/clients/Elsa.Api.Client/Resources/VariableTypes/Responses/ListVariableTypesResponse.cs new file mode 100644 index 0000000..3992675 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/VariableTypes/Responses/ListVariableTypesResponse.cs @@ -0,0 +1,9 @@ +using Elsa.Api.Client.Resources.VariableTypes.Models; + +namespace Elsa.Api.Client.Resources.VariableTypes.Responses; + +/// +/// A response containing a list of variable types. +/// +/// A list of variable types. +public record ListVariableTypesResponse(ICollection Items); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowActivationStrategies/Contracts/IWorkflowActivationStrategiesApi.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowActivationStrategies/Contracts/IWorkflowActivationStrategiesApi.cs new file mode 100644 index 0000000..7717310 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowActivationStrategies/Contracts/IWorkflowActivationStrategiesApi.cs @@ -0,0 +1,18 @@ +using Elsa.Api.Client.Resources.WorkflowActivationStrategies.Models; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.WorkflowActivationStrategies.Contracts; + +/// +/// Represents a client for the variable types API. +/// +public interface IWorkflowActivationStrategiesApi +{ + /// + /// Lists workflow activation strategies. + /// + /// The cancellation token. + [Get("/descriptors/workflow-activation-strategies")] + Task> ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowActivationStrategies/Models/WorkflowActivationStrategyDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowActivationStrategies/Models/WorkflowActivationStrategyDescriptor.cs new file mode 100644 index 0000000..4415496 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowActivationStrategies/Models/WorkflowActivationStrategyDescriptor.cs @@ -0,0 +1,9 @@ +namespace Elsa.Api.Client.Resources.WorkflowActivationStrategies.Models; + +/// +/// Represents a workflow activation strategy. +/// +/// The .NET type name of the activation strategy. +/// The display name of the activation strategy. +/// The description of the activation strategy. +public record WorkflowActivationStrategyDescriptor(string TypeName, string DisplayName, string? Description); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IExecuteWorkflowApi.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IExecuteWorkflowApi.cs new file mode 100644 index 0000000..c06c8d8 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IExecuteWorkflowApi.cs @@ -0,0 +1,32 @@ +using Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; +using JetBrains.Annotations; +using Refit; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Contracts; + +/// +/// Represents a client for the workflow definitions API. +/// +[PublicAPI] +public interface IExecuteWorkflowApi +{ + /// + /// Executes a workflow definition. + /// + /// The definition ID of the workflow definition to execute. + /// An optional request containing options for executing the workflow definition. + /// An optional cancellation token. + /// A response containing information about the workflow instance that was created. + [Post("/workflow-definitions/{definitionId}/execute")] + Task ExecuteAsync(string definitionId, ExecuteWorkflowDefinitionRequest? request = null , CancellationToken cancellationToken = default); + + /// + /// Dispatches a request to execute the specified workflow definition. + /// + /// The definition ID of the workflow definition to dispatch request. + /// An optional request containing options for dispatching a request to execute the specified workflow definition. + /// An optional cancellation token. + /// A response containing information about the workflow instance that was created. + [Post("/workflow-definitions/{definitionId}/dispatch")] + Task DispatchAsync(string definitionId, DispatchWorkflowDefinitionRequest? request = null, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs new file mode 100644 index 0000000..ab41f8a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs @@ -0,0 +1,215 @@ +using System.Net.Mime; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; +using Refit; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Contracts; + +/// +/// Represents a client for the workflow definitions API. +/// +[PublicAPI] +public interface IWorkflowDefinitionsApi +{ + /// + /// Lists workflow definitions. + /// + /// The request containing options for listing workflow definitions. + /// The version options. + /// The cancellation token. + [Get("/workflow-definitions?versionOptions={versionOptions}")] + Task> ListAsync([Query]ListWorkflowDefinitionsRequest request, [Query]VersionOptions? versionOptions = default, CancellationToken cancellationToken = default); + + /// + /// Gets a workflow definition by definition ID. + /// + /// The definition ID of the workflow definition to get. + /// The version options. + /// The cancellation token. + [Get("/workflow-definitions/by-definition-id/{definitionId}?versionOptions={versionOptions}")] + Task GetByDefinitionIdAsync(string definitionId, VersionOptions? versionOptions = default, CancellationToken cancellationToken = default); + + /// + /// Gets a workflow definition by ID. + /// + /// The ID of the workflow definition to get. + /// The cancellation token. + [Get("/workflow-definitions/by-id/{id}")] + Task GetByIdAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Gets a workflow definition by ID. + /// + /// The IDs of the workflow definition versions to get. + /// The cancellation token. + [Get("/workflow-definitions/many-by-id")] + Task> GetManyByIdAsync([Query(CollectionFormat.Multi)]ICollection ids, CancellationToken cancellationToken = default); + + /// + /// Gets a workflow subgraph by workflow definition version ID. + /// + /// The ID of the workflow definition to get. + /// The node ID of the parent activity to get the subgraph for. + /// The cancellation token. + [Get("/workflow-definitions/subgraph/{id}")] + Task GetSubgraphAsync(string id, [Query]string? parentNodeId = null, CancellationToken cancellationToken = default); + + /// + /// Gets a list of path segments leading to the specified child node. + /// + /// The ID of the workflow definition containing the specified node. + /// The node ID of the child activity to get the segments for. + /// The cancellation token. + [Get("/workflow-definitions/subgraph/segments/{id}")] + Task GetPathSegmentsGetAsync(string id, [Query]string? childNodeId = null, CancellationToken cancellationToken = default); + + /// + /// Gets the number of workflow definitions. + /// + /// The cancellation token. + [Get("/workflow-definitions/query/count")] + Task CountAsync(CancellationToken cancellationToken = default); + + /// + /// Gets a value indicating whether a workflow definition name is unique. + /// + /// The name to check. + /// The ID of the workflow definition to exclude from the check. + /// The cancellation token. + [Get("/workflow-definitions/validation/is-name-unique?name={name}")] + Task GetIsNameUniqueAsync(string name, string? definitionId = default, CancellationToken cancellationToken = default); + + /// + /// Saves a workflow definition. + /// + /// The request containing the workflow definition to save. + /// The cancellation token. + [Post("/workflow-definitions")] + Task SaveAsync(SaveWorkflowDefinitionRequest request, CancellationToken cancellationToken = default); + + /// + /// Deletes a workflow definition. + /// + /// The definition ID of the workflow definition, and all of its versions, to delete. + /// The cancellation token. + [Delete("/workflow-definitions/{definitionId}")] + Task DeleteAsync(string definitionId, CancellationToken cancellationToken = default); + + /// + /// Deletes a workflow definition version. + /// + /// The ID of a specific workflow definition version to delete. + /// The cancellation token. + [Delete("/workflow-definition-versions/{id}")] + Task DeleteVersionAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Publishes a workflow definition. + /// + /// The ID of the workflow definition to publish. + /// An empty object to satisfy the request body requirement. + /// The cancellation token. + [Post("/workflow-definitions/{definitionId}/publish")] + [Headers(MediaTypeNames.Application.Json)] + Task PublishAsync(string definitionId, PublishWorkflowDefinitionRequest request, CancellationToken cancellationToken = default); + + /// + /// Retracts a workflow definition. + /// + /// The ID of the workflow definition to retract. + /// An empty object to satisfy the request body requirement. + /// The cancellation token. + [Post("/workflow-definitions/{definitionId}/retract")] + [Headers(MediaTypeNames.Application.Json)] + Task RetractAsync(string definitionId, RetractWorkflowDefinitionRequest request, CancellationToken cancellationToken = default); + + /// + /// Deletes many workflow definitions. + /// + /// The request containing the IDs of the workflow definitions to delete. + /// The cancellation token. + [Post("/bulk-actions/delete/workflow-definitions/by-definition-id")] + Task BulkDeleteAsync(BulkDeleteWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Deletes many workflow definition versions. + /// + /// The request containing the IDs of the workflow definition versions to delete. + /// The cancellation token. + [Post("/bulk-actions/delete/workflow-definitions/by-id")] + Task BulkDeleteVersionsAsync(BulkDeleteWorkflowDefinitionVersionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Publishes many workflow definitions. + /// + /// The request containing the IDs of the workflow definitions to publish. + /// The cancellation token. + [Post("/bulk-actions/publish/workflow-definitions/by-definition-ids")] + Task BulkPublishAsync(BulkPublishWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Retracts many workflow definitions. + /// + /// The request containing the IDs of the workflow definitions to retract. + /// The cancellation token. + [Post("/bulk-actions/retract/workflow-definitions/by-definition-ids")] + Task BulkRetractAsync(BulkRetractWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Exports a workflow definition. + /// + /// The ID of the workflow definition to export. + /// The version options. + /// The cancellation token. + [Get("/workflow-definitions/{definitionId}/export?versionOptions={versionOptions}")] + Task> ExportAsync(string definitionId, VersionOptions? versionOptions = default, CancellationToken cancellationToken = default); + + /// + /// Exports a set of workflow definitions. + /// + /// The request containing the IDs of the workflow definitions to export. + /// The cancellation token. + [Post("/bulk-actions/export/workflow-definitions")] + Task> BulkExportAsync(BulkExportWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default); + + /// + /// Imports a workflow definition. + /// + /// The model containing the workflow definition to import. + /// The cancellation token. + /// The imported workflow definition. + [Post("/workflow-definitions/import")] + Task ImportAsync(WorkflowDefinitionModel model, CancellationToken cancellationToken = default); + + /// + /// Imports a workflow definition. + /// + /// The files to import. + /// The cancellation token. + [Post("/workflow-definitions/import-files")] + [Multipart] + Task ImportFilesAsync([AliasAs("files")] List files, CancellationToken cancellationToken = default); + + /// + /// Updates the references of consuming workflow definitions to point to the latest version of the specified definition. + /// + /// The definition ID of the workflow definition to update references for. + /// An empty object to satisfy the request body requirement. + /// An optional cancellation token. + /// A list of workflow definitions that were affected by the update. + [Post("/workflow-definitions/{definitionId}/update-references")] + Task UpdateReferencesAsync(string definitionId, UpdateConsumingWorkflowReferencesRequest request, CancellationToken cancellationToken = default); + + /// + /// Reverts a workflow definition to a previous version. + /// + /// The definition ID of the workflow definition to revert. + /// The version to revert to. + /// An optional cancellation token. + /// A summary view of the newly created workflow definition version. + [Post("/workflow-definitions/{definitionId}/revert/{version}")] + Task RevertVersionAsync(string definitionId, int version, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Enums/LogPersistenceMode.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Enums/LogPersistenceMode.cs new file mode 100644 index 0000000..6601031 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Enums/LogPersistenceMode.cs @@ -0,0 +1,23 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Enums; + +/// +/// Define the Log Persistence mode to store information +/// +public enum LogPersistenceMode +{ + /// + /// Persist using the Parent mode + /// + Inherit, + + /// + /// Include property to store + /// + Include, + + /// + /// Exclude Property to store + /// + Exclude + +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Enums/OrderByWorkflowDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Enums/OrderByWorkflowDefinition.cs new file mode 100644 index 0000000..912dadb --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Enums/OrderByWorkflowDefinition.cs @@ -0,0 +1,22 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Enums; + +/// +/// Defines the order by options for workflow definitions. +/// +public enum OrderByWorkflowDefinition +{ + /// + /// Order by the date the workflow definition was created. + /// + Created, + + /// + /// Order by the name of the workflow definition. + /// + Name, + + /// + /// Order by the version of the workflow definition. + /// + Version +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ArgumentDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ArgumentDefinition.cs new file mode 100644 index 0000000..730cbec --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ArgumentDefinition.cs @@ -0,0 +1,42 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Base class for workflow input and output definitions. +/// +public abstract class ArgumentDefinition +{ + /// + /// The type of the input value. + /// + public string Type { get; set; } = default!; + + /// + /// Indicates whether the input is an array. + /// + public bool IsArray { get; set; } + + /// + /// The technical name of the input. + /// + public string Name { get; set; } = default!; + + /// + /// A user friendly name of the input. + /// + public string DisplayName { get; set; } = default!; + + /// + /// A description of the input. + /// + public string Description { get; set; } = default!; + + /// + /// The category to which this input belongs. + /// + public string Category { get; set; } = default!; + + /// + /// The type name of the variable, including the array indicator. + /// + public string GetTypeDisplayName() => IsArray ? $"{Type}[]" : Type; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkExportWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkExportWorkflowDefinitionsRequest.cs new file mode 100644 index 0000000..305f85a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkExportWorkflowDefinitionsRequest.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// A request to bulk export workflow definitions. +/// +/// The version IDs of the workflow definitions to export. +public record BulkExportWorkflowDefinitionsRequest(string[] Ids); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ExecuteResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ExecuteResponse.cs new file mode 100644 index 0000000..b9c7c3c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ExecuteResponse.cs @@ -0,0 +1,5 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +public record ExecuteResponse(WorkflowState WorkflowState); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ImportFilesResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ImportFilesResponse.cs new file mode 100644 index 0000000..b023b07 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/ImportFilesResponse.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// The response of a file import operation. +/// +/// The number of workflows that were imported. +public record ImportFilesResponse(int Count); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/InputDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/InputDefinition.cs new file mode 100644 index 0000000..88fbda8 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/InputDefinition.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// A definition of a workflow's input. +/// +public class InputDefinition : ArgumentDefinition +{ + /// + /// The UI hint to use for this input. + /// + public string UIHint { get; set; } = default!; + + /// + /// The type of the storage driver to use for this input. + /// + public string? StorageDriverType { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/OutputDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/OutputDefinition.cs new file mode 100644 index 0000000..900a44a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/OutputDefinition.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// A definition of a workflow's output. +/// +public class OutputDefinition : ArgumentDefinition +{ +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/UIHintDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/UIHintDescriptor.cs new file mode 100644 index 0000000..600690e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/UIHintDescriptor.cs @@ -0,0 +1,9 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Represents a UI hint. +/// +/// The name of the UI hint. +/// The display name of the UI hint. +/// The description of the UI hint. +public record UIHintDescriptor(string Name, string DisplayName, string? Description); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/Variable.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/Variable.cs new file mode 100644 index 0000000..4a6b571 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/Variable.cs @@ -0,0 +1,42 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Represents a workflow variable. +/// +public class Variable +{ + /// + /// The ID of the variable. + /// + public string Id { get; set; } = default!; + + /// + /// The name of the variable. + /// + public string Name { get; set; } = default!; + + /// + /// The type name of the variable. + /// + public string TypeName { get; set; } = default!; + + /// + /// Indicates whether the variable is an array. + /// + public bool IsArray { get; set; } + + /// + /// The default value of the variable. + /// + public object? Value { get; set; } + + /// + /// The storage driver type to use for persistence. + /// + public string? StorageDriverTypeName { get; set; } + + /// + /// The type name of the variable, including the array indicator. + /// + public string GetTypeDisplayName() => IsArray ? $"{TypeName}[]" : TypeName; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs new file mode 100644 index 0000000..f19701d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs @@ -0,0 +1,37 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Stores information about a workflow variable. +/// +public class VariableDefinition +{ + /// + /// Gets or sets the ID of the variable. + /// + public string Id { get; set; } = default!; + + /// + /// Gets or sets the name of the variable. + /// + public string Name { get; set; } = default!; + + /// + /// Gets or sets the type of the variable. + /// + public string TypeName { get; set; } = default!; + + /// + /// Gets or sets whether the variable is an array. + /// + public bool IsArray { get; set; } + + /// + /// Gets or sets the default value of the variable. + /// + public string? Value { get; set; } + + /// + /// Gets or sets the storage driver type name of the variable. + /// + public string? StorageDriverTypeName { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowCommitStateOptions.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowCommitStateOptions.cs new file mode 100644 index 0000000..8e14345 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowCommitStateOptions.cs @@ -0,0 +1,19 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +public class WorkflowCommitStateOptions +{ + /// + /// Commit workflow state before the workflow starts. + /// + public bool Starting { get; set; } + + /// + /// Commit workflow state before an activity executes, unless the activity is configured to not commit state. + /// + public bool ActivityExecuting { get; set; } + + /// + /// Commit workflow state after an activity executes, unless the activity is configured to not commit state. + /// + public bool ActivityExecuted { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinition.cs new file mode 100644 index 0000000..4a6ddb1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinition.cs @@ -0,0 +1,85 @@ +using System.Text.Json.Nodes; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Represents a linked workflow definition. +/// +public class WorkflowDefinition : LinkedEntity +{ + /// + /// The logical ID of the workflow. This ID is the same across versions. + /// + public string DefinitionId { get; set; } = default!; + + /// + /// The name of the workflow. + /// + public string? Name { get; set; } + + /// + /// A short description of that the workflow is about. + /// + public string? Description { get; set; } + + /// + /// The version of the tool that created this workflow. + /// + public Version? ToolVersion { get; set; } + + /// + /// A set of options for the workflow. + /// + public WorkflowOptions Options { get; set; } = new(); + + /// + /// A set of workflow variables that are accessible throughout the workflow. + /// + public ICollection Variables { get; set; } = new List(); + + /// + /// A set of input definitions. + /// + public ICollection Inputs { get; set; } = new List(); + + /// + /// A set of output definitions. + /// + public ICollection Outputs { get; set; } = new List(); + + /// + /// A set of possible outcomes for this workflow. + /// + public ICollection Outcomes { get; set; } = new List(); + + /// + /// Stores custom information about the workflow. Can be used to store application-specific properties to associate with the workflow. + /// + public IDictionary CustomProperties { get; set; } = new Dictionary(); + + /// + /// The name of the workflow provider that created this workflow, if any. + /// + public string? ProviderName { get; set; } + + /// + /// The name of the workflow materializer to interpret the StringData or BinaryData. + /// + public string MaterializerName { get; set; } = default!; + + /// + /// Provider-specific data. + /// + public string? MaterializerContext { get; set; } + + /// + /// The root activity of the workflow. + /// + public JsonObject Root { get; set; } = default!; + + /// + /// An option to use the workflow as a readonly workflow. + /// + public bool IsReadonly { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs new file mode 100644 index 0000000..a617b54 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs @@ -0,0 +1,72 @@ +using System.Text.Json.Nodes; +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Represents a serializable workflow definition. +/// +[PublicAPI] +public class WorkflowDefinitionModel : LinkedEntity +{ + /// + /// Gets or sets the definition ID of the workflow definition. + /// + public string DefinitionId { get; set; } = default!; + + /// + /// Gets or sets the name of the workflow definition. + /// + public string? Name { get; set; } + + /// + /// Gets or sets the description of the workflow definition. + /// + public string? Description { get; set; } + + /// + /// Gets or sets the version of the tool that created the workflow definition. + /// + public Version? ToolVersion { get; set; } + + /// + /// Gets or sets the variables of the workflow definition. + /// + public ICollection? Variables { get; set; } + + /// + /// Gets or sets the inputs of the workflow definition. + /// + public ICollection? Inputs { get; set; } + + /// + /// Gets or sets the outputs of the workflow definition. + /// + public ICollection? Outputs { get; set; } + + /// + /// Gets or sets the outcomes of the workflow definition. + /// + public ICollection? Outcomes { get; set; } + + /// + /// Gets or sets the custom properties associated with the workflow definition. + /// + public IDictionary? CustomProperties { get; set; } + + /// + /// Gets or sets whether the workflow definition is read-only. + /// + public bool IsReadonly { get; set; } + + /// + /// Gets or sets the of the workflow definition. + /// + public WorkflowOptions? Options { get; set; } + + /// + /// Gets or sets the root activity of the workflow definition. + /// + public JsonObject? Root { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionSummary.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionSummary.cs new file mode 100644 index 0000000..fe1a4cc --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionSummary.cs @@ -0,0 +1,16 @@ +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// A summary of a workflow definition. +/// +[PublicAPI] +public class WorkflowDefinitionSummary : LinkedEntity +{ + public string DefinitionId { get; set; } = default!; + public string Name { get; set; } = default!; + public string? Description { get; set; } + public string MaterializerName { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowOptions.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowOptions.cs new file mode 100644 index 0000000..07b5c88 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowOptions.cs @@ -0,0 +1,37 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Provides workflow options. +/// +public class WorkflowOptions +{ + /// + /// The type of IWorkflowActivationStrategy to apply when new instances are requested to be created. + /// + public string? ActivationStrategyType { get; set; } + + /// + /// Used to decide if the workflow can be used as an activity. + /// + public bool? UsableAsActivity { get; set; } + + /// + /// Used to decide if the consuming workflows should be updated automatically to use the last published version of the workflow when it is published. + /// + public bool AutoUpdateConsumingWorkflows { get; set; } + + /// + /// The category to use when the workflow is used as an activity. + /// + public string? ActivityCategory { get; set; } + + /// + /// The type of IIncidentStrategy to use when a fault occurs in the workflow. + /// + public string? IncidentStrategyType { get; set; } + + /// + /// The options for committing workflow state. + /// + public string? CommitStrategyName { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkDeleteWorkflowDefinitionVersionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkDeleteWorkflowDefinitionVersionsRequest.cs new file mode 100644 index 0000000..e837a61 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkDeleteWorkflowDefinitionVersionsRequest.cs @@ -0,0 +1,21 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// A request to delete many workflow definitions. +/// +public class BulkDeleteWorkflowDefinitionVersionsRequest +{ + /// + /// Initializes a new instance of the class. + /// + /// The IDs of the workflow definition versions to delete. + public BulkDeleteWorkflowDefinitionVersionsRequest(IEnumerable ids) + { + Ids = ids.ToArray(); + } + + /// + /// Gets or sets the IDs of the workflow definitions to delete. + /// + public string[] Ids { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkDeleteWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkDeleteWorkflowDefinitionsRequest.cs new file mode 100644 index 0000000..8cf7dad --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkDeleteWorkflowDefinitionsRequest.cs @@ -0,0 +1,21 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// A request to delete many workflow definitions. +/// +public class BulkDeleteWorkflowDefinitionsRequest +{ + /// + /// Initializes a new instance of the class. + /// + /// The IDs of the workflow definitions to delete. + public BulkDeleteWorkflowDefinitionsRequest(IEnumerable definitionIds) + { + DefinitionIds = definitionIds.ToArray(); + } + + /// + /// Gets or sets the IDs of the workflow definitions to delete. + /// + public string[] DefinitionIds { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkPublishWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkPublishWorkflowDefinitionsRequest.cs new file mode 100644 index 0000000..d692a17 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkPublishWorkflowDefinitionsRequest.cs @@ -0,0 +1,21 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// A request to publish many workflow definitions. +/// +public class BulkPublishWorkflowDefinitionsRequest +{ + /// + /// Initializes a new instance of the class. + /// + /// The IDs of the workflow definitions to publish. + public BulkPublishWorkflowDefinitionsRequest(IEnumerable definitionIds) + { + DefinitionIds = definitionIds.ToArray(); + } + + /// + /// Gets or sets the IDs of the workflow definitions to delete. + /// + public string[] DefinitionIds { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkRetractWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkRetractWorkflowDefinitionsRequest.cs new file mode 100644 index 0000000..7273c4d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/BulkRetractWorkflowDefinitionsRequest.cs @@ -0,0 +1,21 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// A request to retract many workflow definitions. +/// +public class BulkRetractWorkflowDefinitionsRequest +{ + /// + /// Initializes a new instance of the class. + /// + /// The IDs of the workflow definitions to retract. + public BulkRetractWorkflowDefinitionsRequest(IEnumerable definitionIds) + { + DefinitionIds = definitionIds.ToArray(); + } + + /// + /// Gets or sets the IDs of the workflow definitions to delete. + /// + public string[] DefinitionIds { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/DispatchWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/DispatchWorkflowDefinitionRequest.cs new file mode 100644 index 0000000..84ce2da --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/DispatchWorkflowDefinitionRequest.cs @@ -0,0 +1,34 @@ +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// A request to dispatches a request to execute the specified workflow definition. +/// +public class DispatchWorkflowDefinitionRequest +{ + /// + /// The ID to use when creating an instance of the workflow to dispatch. + /// + public string? InstanceId { get; set; } + + /// + /// An optional correlation ID to associate with the workflow instance. + /// + public string? CorrelationId { get; set; } + + /// + /// An optional activity ID to trigger. + /// + public string? TriggerActivityId { get; set; } + + /// + /// An optional version to execute. + /// + public VersionOptions? VersionOptions { get; set; } + + /// + /// Optional input to pass to the workflow instance. + /// + public object? Input { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/ExecuteWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/ExecuteWorkflowDefinitionRequest.cs new file mode 100644 index 0000000..5ce6d32 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/ExecuteWorkflowDefinitionRequest.cs @@ -0,0 +1,29 @@ +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// A request to execute a workflow definition. +/// +public class ExecuteWorkflowDefinitionRequest +{ + /// + /// An optional correlation ID to associate with the workflow instance. + /// + public string? CorrelationId { get; set; } + + /// + /// An optional activity ID to trigger. + /// + public string? TriggerActivityId { get; set; } + + /// + /// An optional version to execute. + /// + public VersionOptions? VersionOptions { get; set; } + + /// + /// Optional input to pass to the workflow instance. + /// + public object? Input { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/GetWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/GetWorkflowDefinitionRequest.cs new file mode 100644 index 0000000..573df97 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/GetWorkflowDefinitionRequest.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// Represents a request to get a workflow definition. +/// +public class GetWorkflowDefinitionRequest +{ + /// + /// Gets or sets a value indicating whether the response should include the root activity of composite activities. + /// + public bool IncludeCompositeRoot { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/ListWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/ListWorkflowDefinitionsRequest.cs new file mode 100644 index 0000000..46bf040 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/ListWorkflowDefinitionsRequest.cs @@ -0,0 +1,66 @@ +using Elsa.Api.Client.Resources.WorkflowDefinitions.Enums; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests +; + +/// +/// Represents a request to list workflow definitions. +/// +public class ListWorkflowDefinitionsRequest +{ + /// + /// The page number. + /// + public int? Page { get; set; } + + /// + /// The page size. + /// + public int? PageSize { get; set; } + + /// + /// The definition IDs of the workflow definitions to filter by. + /// + [Query(CollectionFormat.Multi)] + public ICollection? DefinitionIds { get; set; } + + /// + /// The IDs of the workflow definitions to filter by. + /// + [Query(CollectionFormat.Multi)] + public ICollection? Ids { get; set; } + + /// + /// The name of the workflow materializer to filter by. + /// + [AliasAs("materializer")] + public string? MaterializerName { get; set; } + + /// + /// The labels to filter by. + /// + [AliasAs("label")] + public string[]? Labels { get; set; } + + /// + /// The search term used to filter workflow definitions by their name, ID or description. + /// + public string? SearchTerm { get; set; } + + /// + /// Gets or sets whether to include system workflows. + /// + public bool? IsSystem { get; set; } + + /// + /// The field to order by. + /// + public OrderByWorkflowDefinition? OrderBy { get; set; } + + /// + /// The order direction. + /// + public OrderDirection? OrderDirection { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/PublishWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/PublishWorkflowDefinitionRequest.cs new file mode 100644 index 0000000..863c354 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/PublishWorkflowDefinitionRequest.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// Request to publish a workflow definition. +/// +public record PublishWorkflowDefinitionRequest; \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/RetractWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/RetractWorkflowDefinitionRequest.cs new file mode 100644 index 0000000..5902526 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/RetractWorkflowDefinitionRequest.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// Request to retract a workflow definition. +/// +public record RetractWorkflowDefinitionRequest; \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/SaveWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/SaveWorkflowDefinitionRequest.cs new file mode 100644 index 0000000..762cf3e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/SaveWorkflowDefinitionRequest.cs @@ -0,0 +1,19 @@ +using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// Represents a request to save a workflow definition. +/// +public class SaveWorkflowDefinitionRequest +{ + /// + /// The workflow definition to save. + /// + public WorkflowDefinitionModel Model { get; set; } = default!; + + /// + /// Whether the workflow definition should be published. + /// + public bool? Publish { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/UpdateConsumingWorkflowReferencesRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/UpdateConsumingWorkflowReferencesRequest.cs new file mode 100644 index 0000000..ee482c4 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Requests/UpdateConsumingWorkflowReferencesRequest.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Requests; + +/// +/// Represents a request to update the references of consuming workflow definitions to point to the latest version of the specified definition. +/// +public record UpdateConsumingWorkflowReferencesRequest; \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkDeleteWorkflowDefinitionsResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkDeleteWorkflowDefinitionsResponse.cs new file mode 100644 index 0000000..ad018ae --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkDeleteWorkflowDefinitionsResponse.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// The response from a request to delete workflow definitions. +/// +/// The number of workflow definitions deleted. +public record BulkDeleteWorkflowDefinitionsResponse(long Deleted); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkPublishWorkflowDefinitionsResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkPublishWorkflowDefinitionsResponse.cs new file mode 100644 index 0000000..88d11e6 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkPublishWorkflowDefinitionsResponse.cs @@ -0,0 +1,10 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// The response from a request to publish workflow definitions. +/// +public record BulkPublishWorkflowDefinitionsResponse( + ICollection Published, + ICollection AlreadyPublished, + ICollection NotFound, + ICollection UpdatedConsumers); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkRetractWorkflowDefinitionsResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkRetractWorkflowDefinitionsResponse.cs new file mode 100644 index 0000000..1f646e2 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/BulkRetractWorkflowDefinitionsResponse.cs @@ -0,0 +1,9 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// The response from a request to publish workflow definitions. +/// +public record BulkRetractWorkflowDefinitionsResponse( + ICollection Retracted, + ICollection AlreadyRetracted, + ICollection NotFound); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/CountWorkflowDefinitionsResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/CountWorkflowDefinitionsResponse.cs new file mode 100644 index 0000000..3f4bec0 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/CountWorkflowDefinitionsResponse.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// A response containing the number of workflow definitions. +/// +public record CountWorkflowDefinitionsResponse(long Count); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/ExecuteWorkflowDefinitionResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/ExecuteWorkflowDefinitionResponse.cs new file mode 100644 index 0000000..05bcb0c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/ExecuteWorkflowDefinitionResponse.cs @@ -0,0 +1,8 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// A response to a request to execute a workflow definition. +/// +public record ExecuteWorkflowDefinitionResponse(WorkflowState WorkflowState); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/GetIsNameUniqueResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/GetIsNameUniqueResponse.cs new file mode 100644 index 0000000..4f1232b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/GetIsNameUniqueResponse.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// A response containing a value indicating whether a workflow definition name is unique. +/// +/// true if the name is unique, otherwise false. +public record GetIsNameUniqueResponse(bool IsUnique); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/GetPathSegmentsResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/GetPathSegmentsResponse.cs new file mode 100644 index 0000000..d81c6e3 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/GetPathSegmentsResponse.cs @@ -0,0 +1,5 @@ +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +public record GetPathSegmentsResponse(ActivityNode ChildNode, ActivityNode Container, ICollection PathSegments); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/SaveWorkflowDefinitionResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/SaveWorkflowDefinitionResponse.cs new file mode 100644 index 0000000..8ead878 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/SaveWorkflowDefinitionResponse.cs @@ -0,0 +1,8 @@ +using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// Represents the response for saving a workflow definition. +/// +public record SaveWorkflowDefinitionResponse(WorkflowDefinition WorkflowDefinition, bool AlreadyPublished, int ConsumingWorkflowCount); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/UpdateConsumingWorkflowReferencesResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/UpdateConsumingWorkflowReferencesResponse.cs new file mode 100644 index 0000000..696ad95 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Responses/UpdateConsumingWorkflowReferencesResponse.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; + +/// +/// Represents a response to a request to update consuming workflow references. +/// +/// The definition IDs of the affected workflows. +public record UpdateConsumingWorkflowReferencesResponse(ICollection AffectedWorkflows); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowExecutionContexts/Contracts/IWorkflowContextProviderDescriptorsApi.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowExecutionContexts/Contracts/IWorkflowContextProviderDescriptorsApi.cs new file mode 100644 index 0000000..2199fb7 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowExecutionContexts/Contracts/IWorkflowContextProviderDescriptorsApi.cs @@ -0,0 +1,19 @@ +using Elsa.Api.Client.Resources.WorkflowExecutionContexts.Models; +using Elsa.Api.Client.Shared.Models; +using JetBrains.Annotations; +using Refit; + +namespace Elsa.Api.Client.Resources.WorkflowExecutionContexts.Contracts; + +/// +/// Provides workflow context provider descriptors. +/// +[PublicAPI] +public interface IWorkflowContextProviderDescriptorsApi +{ + /// + /// Returns a list of workflow context provider descriptors. + /// + [Get("/workflow-contexts/provider-descriptors")] + Task> ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowExecutionContexts/Models/WorkflowContextProviderDescriptor.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowExecutionContexts/Models/WorkflowContextProviderDescriptor.cs new file mode 100644 index 0000000..7f4371e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowExecutionContexts/Models/WorkflowContextProviderDescriptor.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Resources.WorkflowExecutionContexts.Models; + +/// +/// Represents a workflow context provider descriptor. +/// +/// The name of the workflow context provider. +/// The type of the workflow context provider. +public record WorkflowContextProviderDescriptor(string Name, string Type); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Contracts/IWorkflowInstancesApi.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Contracts/IWorkflowInstancesApi.cs new file mode 100644 index 0000000..b3e071b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Contracts/IWorkflowInstancesApi.cs @@ -0,0 +1,118 @@ +using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; +using Elsa.Api.Client.Resources.WorkflowInstances.Models; +using Elsa.Api.Client.Resources.WorkflowInstances.Requests; +using Elsa.Api.Client.Resources.WorkflowInstances.Responses; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Contracts; + +/// +/// Represents a client for the workflow instances API. +/// +public interface IWorkflowInstancesApi +{ + /// + /// Returns a list of workflow instances. + /// + [Post("/workflow-instances")] + Task> ListAsync(ListWorkflowInstancesRequest request, CancellationToken cancellationToken = default); + + /// + /// Returns a workflow instance. + /// + /// The ID of the workflow instance to return. + /// The cancellation token. + [Get("/workflow-instances/{id}")] + Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Returns a page of journal records for the specified workflow instance. + /// + /// The ID of the workflow instance for which to return the journal. + /// The number of records to skip. + /// The number of records to return. + /// The cancellation token. + [Get("/workflow-instances/{workflowInstanceId}/journal")] + Task> GetJournalAsync(string workflowInstanceId, int? skip = null, int? take = null, CancellationToken cancellationToken = default); + + /// + /// Returns a page of journal records for the specified workflow instance. + /// + /// The ID of the workflow instance for which to return the journal. + /// The filter to apply. + /// The number of records to skip. + /// The number of records to return. + /// The cancellation token. + [Post("/workflow-instances/{workflowInstanceId}/journal")] + Task> GetFilteredJournalAsync(string workflowInstanceId, GetFilteredJournalRequest? filter, int? skip = null, int? take = null, CancellationToken cancellationToken = default); + + /// + /// Returns the execution state of the specified workflow instance. + /// + /// The ID of the workflow instance for which to return its execution state. + /// The cancellation token. + /// Returns a response containing the execution state. + [Get("/workflow-instances/{workflowInstanceId}/execution-state")] + Task GetExecutionStateAsync(string workflowInstanceId, CancellationToken cancellationToken = default); + + /// + /// Deletes a workflow instance. + /// + /// The ID of the workflow instance to delete. + /// The cancellation token. + [Delete("/workflow-instances/{id}")] + Task DeleteAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Deletes a list of workflow instances. + /// + /// The request containing the IDs of the workflow instances to delete. + /// The cancellation token. + [Post("/bulk-actions/delete/workflow-instances/by-id")] + Task BulkDeleteAsync(BulkDeleteWorkflowInstancesRequest request, CancellationToken cancellationToken); + + /// + /// Cancels a workflow instance. + /// + /// The ID of the workflow instance to cancel. + /// The cancellation token. + [Post("/cancel/workflow-instances/{id}")] + Task CancelAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Cancels a list of workflow instances. + /// + /// The request containing the selection of workflow instances to cancel. + /// The cancellation token. + [Post("/bulk-actions/cancel/workflow-instances")] + Task BulkCancelAsync(BulkCancelWorkflowInstancesRequest request, CancellationToken cancellationToken); + + /// + /// Exports a workflow instance. + /// + /// The ID of the workflow instance to export. + /// The cancellation token. + [Get("/workflow-instances/{id}/export")] + Task> ExportAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Exports a set of workflow instances. + /// + /// The request containing the IDs of the workflow instances to export. + /// The cancellation token. + [Post("/bulk-actions/export/workflow-instances")] + Task> BulkExportAsync(BulkExportWorkflowInstancesRequest request, CancellationToken cancellationToken = default); + + /// + /// Imports a set of workflow instances. + /// + /// The files to import. + /// The cancellation token. + [Post("/bulk-actions/import/workflow-instances")] + [Multipart] + Task BulkImportAsync([AliasAs("files")] List files, CancellationToken cancellationToken = default); + + [Get("/workflow-instances/{workflowInstanceId}/variables")] + Task> GetVariablesAsync(string workflowInstanceId, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/OrderByWorkflowInstance.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/OrderByWorkflowInstance.cs new file mode 100644 index 0000000..fd4056a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/OrderByWorkflowInstance.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Enums; + +/// +/// Defines the order by options for workflow instances. +/// +public enum OrderByWorkflowInstance +{ + /// + /// Order by the date the workflow instance was created. + /// + Created, + + /// + /// Order by the date the workflow instance was last executed. + /// + LastExecuted, + + /// + /// Order by the date the workflow instance was finished. + /// + Finished, + + /// + /// Order by the name of the workflow instance. + /// + Name +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/WorkflowStatus.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/WorkflowStatus.cs new file mode 100644 index 0000000..8932118 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/WorkflowStatus.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Enums; + +/// +/// Represents the current workflow status. +/// +public enum WorkflowStatus +{ + /// + /// The workflow is running (although it may be waiting for external stimuli). + /// + Running, + + /// + /// The workflow completed and is no longer running. + /// + Finished +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/WorkflowSubStatus.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/WorkflowSubStatus.cs new file mode 100644 index 0000000..05e1ef8 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Enums/WorkflowSubStatus.cs @@ -0,0 +1,37 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Enums; + +/// +/// Represents the workflow sub-status. +/// +public enum WorkflowSubStatus +{ + /// + /// The workflow is pending execution. + /// + Pending, + + /// + /// The workflow is currently executing. + /// + Executing, + + /// + /// The workflow is currently suspended and waiting for external stimuli to resume. + /// + Suspended, + + /// + /// The workflow completed successfully. + /// + Finished, + + /// + /// The workflow was cancelled. + /// + Cancelled, + + /// + /// The workflow has faulted. + /// + Faulted, +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ActivityExecutionContextState.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ActivityExecutionContextState.cs new file mode 100644 index 0000000..64181fa --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ActivityExecutionContextState.cs @@ -0,0 +1,44 @@ +using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// A serializable shape of an ActivityExecutionContext. +/// +public class ActivityExecutionContextState +{ + /// + /// The ID of the activity instance. + /// + public string Id { get; set; } = default!; + + /// + /// The ID of the parent of the activity instance. + /// + public string? ParentContextId { get; set; } + + /// + /// The node ID of the scheduled activity. + /// + public string ScheduledActivityNodeId { get; set; } = default!; + + /// + /// The node ID of the activity that owns the scheduled activity. + /// + public string? OwnerActivityNodeId { get; set; } + + /// + /// A bag of properties. + /// + public IDictionary Properties { get; set; } = new Dictionary(); + + /// + /// The evaluated values of the activity's properties. + /// + public IDictionary? ActivityState { get; set; } + + /// + /// A list of dynamically created variables. + /// + public ICollection DynamicVariables { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ActivityIncident.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ActivityIncident.cs new file mode 100644 index 0000000..503b5f9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ActivityIncident.cs @@ -0,0 +1,56 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Holds information about an activity incident. +/// +public class ActivityIncident +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public ActivityIncident() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The ID of the activity that caused the incident. + /// The Node ID of the activity that caused the incident. + /// The type of the activity that caused the incident. + /// The message of the incident. + /// The exception that caused the incident. + /// The timestamp of the incident. + public ActivityIncident(string activityId, string activityNodeId, string activityType, string message, ExceptionState? exception, DateTimeOffset timestamp) + { + ActivityId = activityId; + ActivityNodeId = activityNodeId; + ActivityType = activityType; + Message = message; + Exception = exception; + Timestamp = timestamp; + } + + /// The ID of the activity that caused the incident. + public string ActivityId { get; init; } = default!; + + /// The Node ID of the activity that caused the incident. + public string ActivityNodeId { get; init; } = default!; + + /// The type of the activity that caused the incident. + public string ActivityType { get; init; } = default!; + + /// The message of the incident. + public string Message { get; init; } = default!; + + /// The exception that caused the incident. + public ExceptionState? Exception { get; init; } + + /// + /// The timestamp of the incident. + /// + public DateTimeOffset Timestamp { get; init; } +} diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/Bookmark.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/Bookmark.cs new file mode 100644 index 0000000..40f7f62 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/Bookmark.cs @@ -0,0 +1,36 @@ +using System.Text.Json.Serialization; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// A bookmark represents a location in a workflow where the workflow can be resumed at a later time. +/// +/// The ID of the bookmark. +/// The name of the bookmark. +/// The hash of the bookmark. +/// The data associated with the bookmark. +/// The ID of the activity node associated with the bookmark. +/// The ID of the activity instance associated with the bookmark. +/// Whether the bookmark should be automatically burned. +/// The name of the method on the activity class to invoke when the bookmark is resumed. +/// The metadata associated with this bookmark. +[PublicAPI] +public record Bookmark( + string Id, + string Name, + string Hash, + object? Payload, + string ActivityNodeId, + string ActivityInstanceId, + bool AutoBurn = true, + string? CallbackMethodName = default, + IDictionary? Metadata = default +) +{ + /// + [JsonConstructor] + public Bookmark() : this("", "", "", null, "", "") + { + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/BulkExportWorkflowInstancesRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/BulkExportWorkflowInstancesRequest.cs new file mode 100644 index 0000000..3e2cec5 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/BulkExportWorkflowInstancesRequest.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// A request to bulk export workflow instances. +/// +/// The version IDs of the workflow instances to export. +public record BulkExportWorkflowInstancesRequest(string[] Ids); diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/CompletionCallbackState.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/CompletionCallbackState.cs new file mode 100644 index 0000000..d71b07d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/CompletionCallbackState.cs @@ -0,0 +1,32 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Represents a completion callback state. +/// +public class CompletionCallbackState +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public CompletionCallbackState() + { + } + + /// + /// The ID of the activity instance that owns the callback. + /// + public string OwnerInstanceId { get; init; } = default!; + + /// + /// The ID of the child activity node. + /// + public string ChildNodeId { get; init; } = default!; + + /// + /// The name of the method to invoke on the owner when the child completes. + /// + public string? MethodName { get; init; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ExceptionState.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ExceptionState.cs new file mode 100644 index 0000000..27f15b6 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ExceptionState.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// A simplified, serializable model representing an exception. +/// +public record ExceptionState(string Type, string Message, string? StackTrace, ExceptionState? InnerException) +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public ExceptionState() : this(null!, null!, null, null) + { + + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/PersistentVariableState.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/PersistentVariableState.cs new file mode 100644 index 0000000..067e330 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/PersistentVariableState.cs @@ -0,0 +1,27 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Represents the state of a workflow instance's persistent variable. +/// +public class PersistentVariableState +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public PersistentVariableState() + { + } + + /// + /// The name of the variable. + /// + public string Name { get; set; } = default!; + + /// + /// The ID of the storage driver. + /// + public string StorageDriverId { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ResolvedVariable.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ResolvedVariable.cs new file mode 100644 index 0000000..450b0ec --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/ResolvedVariable.cs @@ -0,0 +1,3 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +public record ResolvedVariable(string Id, string Name, object? Value); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowExecutionLogRecord.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowExecutionLogRecord.cs new file mode 100644 index 0000000..e704ac9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowExecutionLogRecord.cs @@ -0,0 +1,36 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Represents a single execution log record. +/// +/// The ID of the execution log record. +/// The ID of the activity instance associated with the execution log record. +/// The ID of the parent activity instance associated with the execution log record. +/// The ID of the activity associated with the execution log record. +/// The type of the activity associated with the execution log record. +/// The version of the activity type associated with the execution log record. +/// The name of the activity associated with the execution log record. +/// The ID of the node associated with the execution log record. +/// The timestamp of the execution log record. +/// The sequence of the execution log record. +/// The name of the event associated with the execution log record. +/// The message associated with the execution log record. +/// The source of the execution log record. +/// The state of the activity associated with the execution log record. +/// The payload associated with the execution log record. +public record WorkflowExecutionLogRecord( + string Id, + string ActivityInstanceId, + string? ParentActivityInstanceId, + string ActivityId, + string ActivityType, + int ActivityTypeVersion, + string? ActivityName, + string NodeId, + DateTimeOffset Timestamp, + long Sequence, + string? EventName, + string? Message, + string? Source, + IDictionary? ActivityState, + object? Payload); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowFaultState.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowFaultState.cs new file mode 100644 index 0000000..0feba09 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowFaultState.cs @@ -0,0 +1,22 @@ +using System.Text.Json.Serialization; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Holds information about a workflow fault. +/// +/// The exception that occurred +/// A description about the fault. Usually the exception message, if there waa an exception. +/// The ID of the activity that caused the workflow to fault. +[PublicAPI] +public record WorkflowFaultState(ExceptionState? Exception, string Message, string? FaultedActivityId) +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public WorkflowFaultState() : this(default, default!, default) + { + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowInstance.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowInstance.cs new file mode 100644 index 0000000..7b3740e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowInstance.cs @@ -0,0 +1,70 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Enums; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Represents a workflow instance. +/// +public class WorkflowInstance : Entity +{ + /// + /// The ID of the workflow definition. + /// + public string DefinitionId { get; set; } = default!; + + /// + /// The version ID of the workflow definition. + /// + public string DefinitionVersionId { get; set; } = default!; + + /// + /// The version of the workflow definition. + /// + public int Version { get; set; } + + /// + /// The state of the workflow instance. + /// + public WorkflowState WorkflowState { get; set; } = default!; + + /// + /// The status of the workflow instance. + /// + public WorkflowStatus Status { get; set; } + + /// + /// The sub-status of the workflow instance. + /// + public WorkflowSubStatus SubStatus { get; set; } + + /// + /// The ID of the workflow instance. + /// + public string? CorrelationId { get; set; } + + /// + /// The name of the workflow instance. + /// + public string? Name { get; set; } + + /// + /// The number of incidents that have occurred during execution, if any. + /// + public int IncidentCount { get; set; } + + /// + /// The timestamp when the workflow instance was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// The timestamp when the workflow instance was last executed. + /// + public DateTimeOffset UpdatedAt { get; set; } + + /// + /// The timestamp when the workflow instance was finished. + /// + public DateTimeOffset? FinishedAt { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowInstanceSummary.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowInstanceSummary.cs new file mode 100644 index 0000000..047b6fc --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowInstanceSummary.cs @@ -0,0 +1,49 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Enums; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Represents a summary view of a . +/// +[PublicAPI] +public record WorkflowInstanceSummary +{ + /// The ID of the workflow instance. + public string Id { get; set; } = default!; + + /// The ID of the workflow definition. + public string DefinitionId { get; set; } = default!; + + /// The version ID of the workflow definition. + public string DefinitionVersionId { get; set; } = default!; + + /// The version of the workflow definition. + public int Version { get; set; } + + /// The status of the workflow instance. + public WorkflowStatus Status { get; set; } + + /// The sub-status of the workflow instance. + public WorkflowSubStatus SubStatus { get; set; } + + /// The ID of the workflow instance. + public string? CorrelationId { get; set; } + + /// The name of the workflow instance. + public string? Name { get; set; } + + /// + /// The number of incidents that have occurred during execution, if any. + /// + public int IncidentCount { get; set; } + + /// The timestamp when the workflow instance was created. + public DateTimeOffset CreatedAt { get; set; } + + /// The timestamp when the workflow instance was last executed. + public DateTimeOffset UpdatedAt { get; set; } + + /// The timestamp when the workflow instance was finished. + public DateTimeOffset? FinishedAt { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowState.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowState.cs new file mode 100644 index 0000000..48f1391 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Models/WorkflowState.cs @@ -0,0 +1,90 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Enums; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Models; + +/// +/// Represents the current state of a workflow. +/// +public class WorkflowState : Entity +{ + /// + /// The workflow definition ID. + /// + public string DefinitionId { get; set; } = default!; + + /// + /// The workflow definition version. + /// + public int DefinitionVersion { get; set; } + + /// + /// The correlation ID of the workflow, if any. + /// + public string? CorrelationId { get; set; } + + /// + /// The status of the workflow. + /// + public WorkflowStatus Status { get; set; } + + /// + /// The sub status of the workflow. + /// + public WorkflowSubStatus SubStatus { get; set; } + + /// + /// Collected bookmarks. + /// + public ICollection Bookmarks { get; set; } = new List(); + + /// + /// A collection of incidents that may have occurred during execution. + /// + public ICollection Incidents { get; set; } = new List(); + + /// + /// The serialized workflow state, if any. + /// + public WorkflowFaultState? Fault { get; set; } + + /// + /// A list of callbacks that activities registered in order to be notified when the activities they scheduled complete. + /// + public ICollection CompletionCallbacks { get; set; } = new List(); + + /// + /// A flattened list of objects, representing the various active "call stacks" of the workflow. + /// + public ICollection ActivityExecutionContexts { get; set; } = new List(); + + /// + /// A dictionary of inputs sent to the workflow. + /// + public IDictionary Input { get; set; } = new Dictionary(); + + /// + /// A dictionary of outputs produced by the workflow. + /// + public IDictionary Output { get; set; } = new Dictionary(); + + /// + /// A global property bag that contains properties set by application code and/or activities. + /// + public IDictionary Properties { get; set; } = new Dictionary(); + + /// + /// The created time of the workflow. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// The last updated time of the workflow. + /// + public DateTimeOffset UpdatedAt { get; set; } + + /// + /// The finished time of the workflow. + /// + public DateTimeOffset? FinishedAt { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/BulkCancelWorkflowInstancesRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/BulkCancelWorkflowInstancesRequest.cs new file mode 100644 index 0000000..4c51fb2 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/BulkCancelWorkflowInstancesRequest.cs @@ -0,0 +1,32 @@ +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Requests; + +/// +/// Represents a request to bulk cancel workflow instances. +/// +public class BulkCancelWorkflowInstancesRequest +{ + /// + /// Gets or sets the IDs of the workflow instances to delete. + /// + public ICollection? Ids { get; set; } + + /// + /// Gets or sets the definition version id. + /// + public string? DefinitionVersionId { get; set; } + + /// + /// Represents the ID of a workflow definition. + /// + /// This should be used in combination with + public string? DefinitionId { get; set; } + + /// + /// Represents the version options for getting a specific version. + /// + /// This should be used in combination with + public VersionOptions? VersionOptions { get; set; } + +} diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/BulkDeleteWorkflowInstancesRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/BulkDeleteWorkflowInstancesRequest.cs new file mode 100644 index 0000000..071ce30 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/BulkDeleteWorkflowInstancesRequest.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Requests; + +/// +/// Represents a request to bulk delete workflow instances. +/// +public class BulkDeleteWorkflowInstancesRequest +{ + /// + /// Gets or sets the IDs of the workflow instances to delete. + /// + public ICollection Ids { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/GetFilteredJournalRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/GetFilteredJournalRequest.cs new file mode 100644 index 0000000..e41797d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/GetFilteredJournalRequest.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Requests; + +/// +/// Represents a request to list journal records. +/// +public class GetFilteredJournalRequest +{ + /// + /// Gets or sets the filter to apply. + /// + public JournalFilter? Filter { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/JournalFilter.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/JournalFilter.cs new file mode 100644 index 0000000..614c8d1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/JournalFilter.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Resources.WorkflowInstances.Requests; + +/// +/// Represents a request to list journal records. +/// +public class JournalFilter +{ + /// + /// Gets or sets the activity IDs to filter by. + /// + public ICollection? ActivityIds { get; set; } + + /// + /// Gets or sets the activity node IDs to filter by. + /// + public ICollection? ActivityNodeIds { get; set; } + + /// + /// Gets or sets the activity types to filter out. + /// + public ICollection? ExcludedActivityTypes { get; set; } + + /// + /// Gets or sets the event types to filter by. + /// + public ICollection? EventNames { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/ListWorkflowInstancesRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/ListWorkflowInstancesRequest.cs new file mode 100644 index 0000000..e591ad7 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Requests/ListWorkflowInstancesRequest.cs @@ -0,0 +1,90 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Enums; +using Elsa.Api.Client.Shared.Models; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Requests; + +/// +/// Represents a request to list workflow instances. +/// +public class ListWorkflowInstancesRequest +{ + /// + /// Gets or sets the page number. + /// + public int? Page { get; set; } + + /// + /// Gets or sets the page size. + /// + public int? PageSize { get; set; } + + /// + /// Gets or sets the search term. + /// + public string? SearchTerm { get; set; } + + /// + /// Gets or sets the workflow definition id. + /// + public string? DefinitionId { get; set; } + + /// + /// Gets or sets the workflow definition ids. + /// + public ICollection? DefinitionIds { get; set; } + + /// + /// Gets or sets the correlation id. + /// + public string? CorrelationId { get; set; } + + /// + /// Gets or sets the version. + /// + public int? Version { get; set; } + + /// + /// Gets or sets whether the workflow instances have incidents or not. + /// + public bool? HasIncidents { get; set; } + + /// + /// Gets or sets whether to include system workflows. + /// + public bool? IsSystem { get; set; } + + /// + /// Gets or sets the status. + /// + public WorkflowStatus? Status { get; set; } + + /// + /// Gets or sets the statuses. + /// + public ICollection? Statuses { get; set; } + + /// + /// Gets or sets the sub status. + /// + public WorkflowSubStatus? SubStatus { get; set; } + + /// + /// Gets or sets the sub statuses. + /// + public ICollection? SubStatuses { get; set; } + + /// + /// Gets or sets the key to order by. + /// + public OrderByWorkflowInstance? OrderBy { get; set; } + + /// + /// Gets or sets the order direction. + /// + public OrderDirection? OrderDirection { get; set; } + + /// + /// Gets or sets the timestamp filters. + /// + public ICollection? TimestampFilters { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Responses/BulkDeleteWorkflowInstancesResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Responses/BulkDeleteWorkflowInstancesResponse.cs new file mode 100644 index 0000000..b729209 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Responses/BulkDeleteWorkflowInstancesResponse.cs @@ -0,0 +1,8 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Responses; + +internal sealed class BulkDeleteWorkflowInstancesResponse +{ + [JsonPropertyName("deleted")] public int DeletedCount { get; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Responses/WorkflowInstanceExecutionStateResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Responses/WorkflowInstanceExecutionStateResponse.cs new file mode 100644 index 0000000..3be1e2a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowInstances/Responses/WorkflowInstanceExecutionStateResponse.cs @@ -0,0 +1,8 @@ +using Elsa.Api.Client.Resources.WorkflowInstances.Enums; + +namespace Elsa.Api.Client.Resources.WorkflowInstances.Responses; + +/// +/// Represents the response containing the last updated timestamp of a workflow instance. +/// +public record WorkflowInstanceExecutionStateResponse(WorkflowStatus Status, WorkflowSubStatus WorkflowSubStatus, DateTimeOffset UpdatedAt); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Serialization/SerializerOptions.cs b/src/clients/Elsa.Api.Client/Serialization/SerializerOptions.cs new file mode 100644 index 0000000..41b0449 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Serialization/SerializerOptions.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Serialization; + +/// +/// Provides options for serializing and deserializing objects. +/// +public static class SerializerOptions +{ + public static JsonSerializerOptions CommonSerializerOptions { get; } = new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNameCaseInsensitive = true, + Converters = { new JsonStringEnumConverter() } + }; + + /// + /// Gets the serializer options for the log persistence configuration. + /// + public static JsonSerializerOptions LogPersistenceConfigSerializerOptions { get; } = new(CommonSerializerOptions); + + public static JsonSerializerOptions ResilienceStrategyConfigSerializerOptions { get; } = new(CommonSerializerOptions); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Enums/LogPersistenceEvaluationMode.cs b/src/clients/Elsa.Api.Client/Shared/Enums/LogPersistenceEvaluationMode.cs new file mode 100644 index 0000000..1f4a18a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Enums/LogPersistenceEvaluationMode.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Shared.Enums; + +public enum LogPersistenceEvaluationMode +{ + Strategy, + Expression +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Enums/TimestampFilterOperator.cs b/src/clients/Elsa.Api.Client/Shared/Enums/TimestampFilterOperator.cs new file mode 100644 index 0000000..cabedd9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Enums/TimestampFilterOperator.cs @@ -0,0 +1,37 @@ +namespace Elsa.Api.Client.Shared.Enums; + +/// +/// Specifies the operators for filtering timestamps in a TimestampFilter object. +/// +public enum TimestampFilterOperator +{ + /// + /// The timestamp is equal to the specified value. + /// + Is, + + /// + /// The timestamp is not equal to the specified value. + /// + IsNot, + + /// + /// The timestamp is before the specified value. + /// + LessThan, + + /// + /// The timestamp is greater than the specified value. + /// + GreaterThan, + + /// + /// The timestamp is less than or equal to the specified value. + /// + LessThanOrEqual, + + /// + /// The timestamp is greater than or equal to the specified value. + /// + GreaterThanOrEqual +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/HeaderNames.cs b/src/clients/Elsa.Api.Client/Shared/HeaderNames.cs new file mode 100644 index 0000000..a3c2675 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/HeaderNames.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Shared; + +/// +/// Contains header names used by the Elsa API. +/// +public static class HeaderNames +{ + /// + /// The name of the header that contains the workflow instance ID. + /// + public const string WorkflowInstanceId = "x-elsa-workflow-instance-id"; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/ActivityDesignerMetadata.cs b/src/clients/Elsa.Api.Client/Shared/Models/ActivityDesignerMetadata.cs new file mode 100644 index 0000000..09a4010 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/ActivityDesignerMetadata.cs @@ -0,0 +1,50 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents designer metadata for an activity. +/// +public class ActivityDesignerMetadata +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public ActivityDesignerMetadata() + { + + } + + /// + /// Initializes a new instance of the class. + /// + /// The x coordinate of the activity. + /// The y coordinate of the activity. + /// The width of the activity. + /// The height of the activity. + public ActivityDesignerMetadata(double x, double y, double width, double height) : this(new(x, y), new(width, height)) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The position of the activity. + /// The size of the activity. + public ActivityDesignerMetadata(Position position, Size size) + { + Position = position; + Size = size; + } + + /// + /// Gets or sets the position of the activity. + /// + public Position Position { get; set; } = new(); + + /// + /// Gets or sets the size of the activity. + /// + public Size Size { get; set; } = new(); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/ActivityNode.cs b/src/clients/Elsa.Api.Client/Shared/Models/ActivityNode.cs new file mode 100644 index 0000000..7a5db56 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/ActivityNode.cs @@ -0,0 +1,96 @@ +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; +using Elsa.Api.Client.Extensions; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an activity in the context of an hierarchical tree structure, providing access to its siblings, parents and children. +/// +public class ActivityNode +{ + [JsonConstructor] + public ActivityNode() + { + } + + public ActivityNode(JsonObject activity) + { + Activity = activity; + NodeId = activity.GetNodeId(); + } + + public ActivityNode(JsonObject activity, string port) : this(activity) + { + Port = port; + } + + /// + /// Gets the activity. + /// + public JsonObject Activity { get; set; } = default!; + + /// + /// Gets the property name that contains the activity. + /// + public string? Port { get; set; } + + /// + /// Gets the node ID. + /// + public string NodeId { get; set; } = default!; + + /// + /// Gets the parents of this node. + /// + public ICollection Parents { get; set; } = new List(); + + /// + /// Gets the children of this node. + /// + public ICollection Children { get; set; } = new List(); + + /// + /// Gets the descendants of this node. + /// + /// + public IEnumerable Descendants() + { + foreach (var child in Children) + { + yield return child; + + var descendants = child.Descendants(); + + foreach (var descendant in descendants) + yield return descendant; + } + } + + /// + /// Gets the ancestors of this node. + /// + public IEnumerable Ancestors() + { + foreach (var parent in Parents) + { + yield return parent; + + var ancestors = parent.Ancestors(); + + foreach (var ancestor in ancestors) + yield return ancestor; + } + } + + /// + /// Gets the siblings of this node. + /// + public IEnumerable Siblings() => Parents.SelectMany(parent => parent.Children); + + /// + /// Gets the siblings and cousins of this node. + /// + /// + public IEnumerable SiblingsAndCousins() => Parents.SelectMany(parent => parent.Descendants()); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/ActivityOutput.cs b/src/clients/Elsa.Api.Client/Shared/Models/ActivityOutput.cs new file mode 100644 index 0000000..b7af4c1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/ActivityOutput.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an output binding for an activity. +/// +public class ActivityOutput +{ + /// + /// Gets or sets the type of this output. + /// + public string TypeName { get; set; } = default!; + + /// + /// Gets or sets the memory reference of this output. + /// + public MemoryReference MemoryReference { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/ActivityPathSegment.cs b/src/clients/Elsa.Api.Client/Shared/Models/ActivityPathSegment.cs new file mode 100644 index 0000000..7c248db --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/ActivityPathSegment.cs @@ -0,0 +1,13 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a path segment in a workflow. For example, the following is a list of segments: ForEach:Body -> Container:Body -> MyCustomActivity:Root +/// +/// The node ID of the activity in the graph. +/// The ID of the activity. +/// The type of the activity. +/// The name of the port. +[UsedImplicitly] +public record ActivityPathSegment(string ActivityNodeId, string ActivityId, string ActivityType, string PortName); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/ActivityStatus.cs b/src/clients/Elsa.Api.Client/Shared/Models/ActivityStatus.cs new file mode 100644 index 0000000..05747f1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/ActivityStatus.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents the status of an activity. +/// +public enum ActivityStatus +{ + /// + /// The activity is in the Running state. Note that event if an activity is running, it may not be executing. + /// + Running, + + /// + /// The activity is in the Completed state. + /// + Completed, + + /// + /// The activity is in the Canceled state. + /// + Canceled, + + /// + /// The activity is in the Faulted state. + /// + Faulted +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Connection.cs b/src/clients/Elsa.Api.Client/Shared/Models/Connection.cs new file mode 100644 index 0000000..6327863 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Connection.cs @@ -0,0 +1,22 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a connection between two activities. +/// +public class Connection +{ + /// + /// Gets or sets the source endpoint. + /// + public Endpoint Source { get; set; } = null!; + + /// + /// Gets or sets the target endpoint. + /// + public Endpoint Target { get; set; } = null!; + + /// + /// Gets or sets the vertices of the connection. + /// + public ICollection Vertices { get; set; } = []; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Container.cs b/src/clients/Elsa.Api.Client/Shared/Models/Container.cs new file mode 100644 index 0000000..e173976 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Container.cs @@ -0,0 +1,29 @@ +// using Elsa.Api.Client.Activities; +// using Elsa.Api.Client.Extensions; +// using Elsa.Api.Client.Resources.WorkflowDefinitions.Models; +// +// namespace Elsa.Api.Client.Shared.Models; +// +// /// +// /// Represents a container activity. +// /// +// public class Container : Activity +// { +// /// +// /// Gets or sets the activities contained in this container. +// /// +// public ICollection Activities +// { +// get => this.TryGetValue>("activities", () => new List())!; +// set => this["activities"] = value; +// } +// +// /// +// /// Gets or sets the variables in this container. +// /// +// public ICollection Variables +// { +// get => this.TryGetValue>("variables", () => new List())!; +// set => this["variables"] = value; +// } +// } \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/DynamicOutcomesOptions.cs b/src/clients/Elsa.Api.Client/Shared/Models/DynamicOutcomesOptions.cs new file mode 100644 index 0000000..9ae9428 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/DynamicOutcomesOptions.cs @@ -0,0 +1,7 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Options for dynamic outcomes. +/// +/// A list of fixed outcomes that will be appended to the final list of outcomes. +public record DynamicOutcomesOptions(ICollection? FixedOutcomes); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Endpoint.cs b/src/clients/Elsa.Api.Client/Shared/Models/Endpoint.cs new file mode 100644 index 0000000..6f291a1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Endpoint.cs @@ -0,0 +1,39 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a connection between two activities. +/// +public class Endpoint +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public Endpoint() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The activity identifier. + /// The port. + public Endpoint(string activityId, string? port = default) + { + ActivityId = activityId; + Port = port; + } + + /// + /// Gets or sets the activity identifier. + /// + [JsonPropertyName("activity")] + public string ActivityId { get; set; } = default!; + + /// + /// Gets or sets the port. + /// + public string? Port { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Entity.cs b/src/clients/Elsa.Api.Client/Shared/Models/Entity.cs new file mode 100644 index 0000000..eef0a70 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Entity.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an entity. +/// +public abstract class Entity +{ + /// + /// Gets or sets the ID of this entity. + /// + public string Id { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/HttpStatusCodeCase.cs b/src/clients/Elsa.Api.Client/Shared/Models/HttpStatusCodeCase.cs new file mode 100644 index 0000000..ed8352e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/HttpStatusCodeCase.cs @@ -0,0 +1,19 @@ +using System.Text.Json.Nodes; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an expected status code in the FlowSendHttpRequest activity. +/// +public class HttpStatusCodeCase +{ + /// + /// The HTTP status code to match. + /// + public int StatusCode { get; set; } + + /// + /// The activity to execute when the HTTP status code matches. + /// + public JsonObject? Activity { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Link.cs b/src/clients/Elsa.Api.Client/Shared/Models/Link.cs new file mode 100644 index 0000000..aae33d9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Link.cs @@ -0,0 +1,3 @@ +namespace Elsa.Api.Client.Shared.Models; + +public record Link(string Href, string Rel, string Method); diff --git a/src/clients/Elsa.Api.Client/Shared/Models/LinkedEntity.cs b/src/clients/Elsa.Api.Client/Shared/Models/LinkedEntity.cs new file mode 100644 index 0000000..2d5047e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/LinkedEntity.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an entity that is linked, meaning it contains links used in the context of HATEOAS. +/// +public class LinkedEntity : VersionedEntity +{ + /// + /// A list of links that with the possible actions used in the context of HATEOAS. + /// + public Link[]? Links { get; set; } +} diff --git a/src/clients/Elsa.Api.Client/Shared/Models/ListResponse.cs b/src/clients/Elsa.Api.Client/Shared/Models/ListResponse.cs new file mode 100644 index 0000000..335be4b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/ListResponse.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a generic list response that offers a unified format for returning list of things from API endpoints. +/// +public record ListResponse(ICollection Items, long Count); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/LogPersistenceConfiguration.cs b/src/clients/Elsa.Api.Client/Shared/Models/LogPersistenceConfiguration.cs new file mode 100644 index 0000000..ac4531b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/LogPersistenceConfiguration.cs @@ -0,0 +1,11 @@ +using Elsa.Api.Client.Resources.Scripting.Models; +using Elsa.Api.Client.Shared.Enums; + +namespace Elsa.Api.Client.Shared.Models; + +public class LogPersistenceConfiguration +{ + public LogPersistenceEvaluationMode EvaluationMode { get; set; } + public string? StrategyType { get; set; } + public Expression? Expression { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/MemoryReference.cs b/src/clients/Elsa.Api.Client/Shared/Models/MemoryReference.cs new file mode 100644 index 0000000..5072ecf --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/MemoryReference.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a reference to a memory block. +/// +public class MemoryReference +{ + /// + /// Gets or sets the ID of the memory block being referenced. + /// + public string Id { get; set; } = default!; +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/OrderDirection.cs b/src/clients/Elsa.Api.Client/Shared/Models/OrderDirection.cs new file mode 100644 index 0000000..cef8556 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/OrderDirection.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// The order direction. +/// +public enum OrderDirection +{ + /// + /// Ascending order. + /// + Ascending, + + /// + /// + /// + Descending +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/PagedListResponse.cs b/src/clients/Elsa.Api.Client/Shared/Models/PagedListResponse.cs new file mode 100644 index 0000000..beb9415 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/PagedListResponse.cs @@ -0,0 +1,11 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a generic paged list response that offers a unified format for returning paged list of things from API endpoints. +/// +/// The type of the items. +public class PagedListResponse : LinkedEntity +{ + public ICollection Items { get; set; } = default!; + public long TotalCount { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Position.cs b/src/clients/Elsa.Api.Client/Shared/Models/Position.cs new file mode 100644 index 0000000..7283a5b --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Position.cs @@ -0,0 +1,38 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a position. +/// +public class Position +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public Position() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// + public Position(double x, double y) + { + X = x; + Y = y; + } + + /// + /// Gets or sets the x coordinate. + /// + public double X { get; set; } + + /// + /// Gets or sets the y coordinate. + /// + public double Y { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/PropertyBag.cs b/src/clients/Elsa.Api.Client/Shared/Models/PropertyBag.cs new file mode 100644 index 0000000..c4c1f3c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/PropertyBag.cs @@ -0,0 +1,22 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// A dictionary of values that is skipped by polymorphic serialization. +/// +public class PropertyBag : Dictionary +{ + /// + [JsonConstructor] + public PropertyBag() : base(StringComparer.OrdinalIgnoreCase) + { + } + + /// + public PropertyBag(IDictionary dictionary) : this() + { + foreach (var kvp in dictionary) + Add(kvp.Key, kvp.Value); + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/Size.cs b/src/clients/Elsa.Api.Client/Shared/Models/Size.cs new file mode 100644 index 0000000..9dfa1d6 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/Size.cs @@ -0,0 +1,38 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a size. +/// +public class Size +{ + /// + /// Initializes a new instance of the class. + /// + [JsonConstructor] + public Size() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The width. + /// The height. + public Size(double width, double height) + { + Width = width; + Height = height; + } + + /// + /// Gets or sets the width. + /// + public double Width { get; set; } + + /// + /// Gets or sets the height. + /// + public double Height { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/SwitchCase.cs b/src/clients/Elsa.Api.Client/Shared/Models/SwitchCase.cs new file mode 100644 index 0000000..d8e659d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/SwitchCase.cs @@ -0,0 +1,26 @@ +using System.Diagnostics; +using System.Text.Json.Nodes; +using Elsa.Api.Client.Resources.Scripting.Models; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a case in a switch statement. +/// +public class SwitchCase +{ + /// + /// Gets or sets the label of the case. + /// + public string Label { get; set; } = default!; + + /// + /// Gets or sets the condition of the case. + /// + public Expression Condition { get; set; } = Expression.CreateLiteral(""); + + /// + /// When used in a activity, specifies the activity to schedule when the condition evaluates to true. + /// + public JsonObject? Activity { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/TimestampFilter.cs b/src/clients/Elsa.Api.Client/Shared/Models/TimestampFilter.cs new file mode 100644 index 0000000..0e08217 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/TimestampFilter.cs @@ -0,0 +1,26 @@ +using Elsa.Api.Client.Shared.Enums; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents a timestamp filter used for filtering data based on a specified timestamp column and operator. +/// +[UsedImplicitly] +public class TimestampFilter +{ + /// + /// Gets or sets the column to filter by. + /// + public string Column { get; set; } = default!; + + /// + /// Gets or sets the operator to use for filtering. + /// + public TimestampFilterOperator Operator { get; set; } + + /// + /// Gets or sets the timestamp to filter by. + /// + public DateTimeOffset Timestamp { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/VersionOptions.cs b/src/clients/Elsa.Api.Client/Shared/Models/VersionOptions.cs new file mode 100644 index 0000000..ab36220 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/VersionOptions.cs @@ -0,0 +1,118 @@ +using System.ComponentModel; +using System.Globalization; +using System.Text.Json.Serialization; +using Elsa.Api.Client.Converters; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents the version to get. +/// +[PublicAPI] +[TypeConverter(typeof(VersionOptionsTypeConverter))] +[JsonConverter(typeof(VersionOptionsJsonConverter))] +public struct VersionOptions +{ + /// + /// Gets the latest version. + /// + public static readonly VersionOptions Latest = new() { IsLatest = true }; + + /// + /// Gets the published version. + /// + public static readonly VersionOptions Published = new() { IsPublished = true }; + + /// + /// Gets the published version if available, and if not, the latest version. + /// + public static readonly VersionOptions LatestOrPublished = new() { IsLatestOrPublished = true }; + + /// + /// Gets the latest, published version. + /// + public static readonly VersionOptions LatestAndPublished = new() { IsLatestAndPublished = true }; + + /// + /// Gets the draft version. + /// + public static readonly VersionOptions Draft = new() { IsDraft = true }; + + /// + /// Gets all versions. + /// + public static readonly VersionOptions All = new() { AllVersions = true }; + + /// + /// Gets a specific version. + /// + public static VersionOptions SpecificVersion(int version) => new() { Version = version }; + + /// + /// Parses a string into a . + /// + public static VersionOptions FromString(string value) => + value switch + { + "AllVersions" => All, + "Draft" => Draft, + "Latest" => Latest, + "Published" => Published, + "LatestOrPublished" => LatestOrPublished, + "LatestAndPublished" => LatestAndPublished, + _ => SpecificVersion(int.Parse(value, CultureInfo.InvariantCulture)) + }; + + /// + /// Tries to parse a string into a . + /// + /// The value to parse. + /// The parsed value. + /// true if the value was parsed successfully, otherwise false. + public static bool TryParse(string value, out VersionOptions versionOptions) + { + versionOptions = FromString(value); + return true; + } + + /// + /// Gets the latest version. + /// + public bool IsLatest { get; private set; } + + /// + /// Gets the published version if available, and if not, the latest version. + /// + public bool IsLatestOrPublished { get; private set; } + + /// + /// Gets the latest, published version. + /// + public bool IsLatestAndPublished { get; private set; } + + /// + /// Gets the published version. + /// + public bool IsPublished { get; private set; } + + /// + /// Gets the draft version. + /// + public bool IsDraft { get; private set; } + + /// + /// Gets all versions. + /// + public bool AllVersions { get; private set; } + + /// + /// Gets a specific version. + /// + public int Version { get; private set; } + + /// + /// Returns a simple string representation of this . + /// + public override string ToString() => AllVersions ? "AllVersions" : IsDraft ? "Draft" : IsLatest ? "Latest" : IsPublished ? "Published" : IsLatestOrPublished ? "LatestOrPublished" : IsLatestAndPublished ? "LatestAndPublished" : Version.ToString(CultureInfo.InvariantCulture); +} diff --git a/src/clients/Elsa.Api.Client/Shared/Models/VersionedEntity.cs b/src/clients/Elsa.Api.Client/Shared/Models/VersionedEntity.cs new file mode 100644 index 0000000..e00dfd1 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/VersionedEntity.cs @@ -0,0 +1,27 @@ +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an entity that is versioned. +/// +public abstract class VersionedEntity : Entity +{ + /// + /// Gets or sets the date and time this entity was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// Gets or sets the version of this entity. + /// + public int Version { get; set; } = 1; + + /// + /// Gets or sets whether this entity is the latest version. + /// + public bool IsLatest { get; set; } + + /// + /// Gets or sets whether this entity is published. + /// + public bool IsPublished { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/Models/WrappedInput.cs b/src/clients/Elsa.Api.Client/Shared/Models/WrappedInput.cs new file mode 100644 index 0000000..072f437 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/Models/WrappedInput.cs @@ -0,0 +1,25 @@ +using Elsa.Api.Client.Resources.Scripting.Models; + +namespace Elsa.Api.Client.Shared.Models; + +/// +/// Represents an input value for an activity. +/// +public class WrappedInput +{ + /// + /// Gets or sets the type of this input. + /// + public string TypeName { get; set; } = default!; + + /// + /// Gets or sets the expression of this input. + /// + public Expression Expression { get; set; } = default!; + + /// + /// Gets or sets the memory reference of this input. + /// + public MemoryReference MemoryReference { get; set; } = default!; +} + diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckList.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckList.cs new file mode 100644 index 0000000..ed04df0 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckList.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Shared.UIHints.CheckList; + +/// +/// Represents a list of check list items. +/// +/// The items. +/// Whether the select list represents a flags enum. +public record CheckList(IEnumerable Items, bool IsFlagsEnum = false); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckListItem.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckListItem.cs new file mode 100644 index 0000000..abeeee9 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckListItem.cs @@ -0,0 +1,13 @@ +namespace Elsa.Api.Client.Shared.UIHints.CheckList; + +/// +/// Represents an item in a . +/// +public class CheckListItem +{ +#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. + public string Text { get; set; } + public string Value { get; set; } +#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. + public bool IsChecked { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckListProps.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckListProps.cs new file mode 100644 index 0000000..4ef203d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/CheckList/CheckListProps.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Shared.UIHints.CheckList; + +/// +/// Provides properties for the checklist UI hint. +/// +public class CheckListProps +{ + /// + /// The select list. + /// + public CheckList? CheckList { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/CodeEditorOptions.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/CodeEditorOptions.cs new file mode 100644 index 0000000..bb8e10f --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/CodeEditorOptions.cs @@ -0,0 +1,19 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Shared.UIHints.CodeEditor; + +/// +/// Options for the code editor component. +/// +[PublicAPI] +public class CodeEditorOptions +{ + /// The height of the editor. + public EditorHeight? EditorHeight { get; set; } + + /// The language to use for syntax highlighting. + public string? Language { get; set; } + + /// Whether the editor should be in single line mode. + public bool? SingleLineMode { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/EditorHeight.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/EditorHeight.cs new file mode 100644 index 0000000..33a9ffd --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/EditorHeight.cs @@ -0,0 +1,20 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Shared.UIHints.CodeEditor; + +/// +/// Height options for the code editor component. +/// +[PublicAPI] +public enum EditorHeight +{ + /// + /// The default height. + /// + Default, + + /// + /// A large height. + /// + Large +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/MultiLineOptions.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/MultiLineOptions.cs new file mode 100644 index 0000000..e9d0ba3 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/CodeEditor/MultiLineOptions.cs @@ -0,0 +1,10 @@ +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Shared.UIHints.CodeEditor; + +/// +/// Options for the multi-line editor component. +/// +/// The height of the editor. +[PublicAPI] +public record MultiLineOptions(EditorHeight EditorHeight); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/DropDownProps.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/DropDownProps.cs new file mode 100644 index 0000000..de44983 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/DropDownProps.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Shared.UIHints.DropDown; + +/// +/// Provides properties for the dropdown UI hint. +/// +public class DropDownProps +{ + /// + /// The select list. + /// + public SelectList? SelectList { get; set; } + + /// + /// The name of the provider that will provide the select list. + /// + public string? ProviderName { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/SelectList.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/SelectList.cs new file mode 100644 index 0000000..e2def91 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/SelectList.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Shared.UIHints.DropDown; + +/// +/// Represents a list of select list items. +/// +/// The items. +/// Whether the select list represents a flags enum. +public record SelectList(ICollection Items, bool IsFlagsEnum = false); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/SelectListItem.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/SelectListItem.cs new file mode 100644 index 0000000..8bf6228 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/DropDown/SelectListItem.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Shared.UIHints.DropDown; + +/// +/// Represents an item in a . +/// +public record SelectListItem(string Text, string Value); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioList.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioList.cs new file mode 100644 index 0000000..b17e00f --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioList.cs @@ -0,0 +1,8 @@ +namespace Elsa.Api.Client.Shared.UIHints.RadioList; + +/// +/// Represents a list of radio list items. +/// +/// The items. +/// Whether the select list represents a flags enum. +public record RadioList(IEnumerable Items, bool IsFlagsEnum = false); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioListItem.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioListItem.cs new file mode 100644 index 0000000..3e77222 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioListItem.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Shared.UIHints.RadioList; + +/// +/// Represents an item in a . +/// +public record RadioListItem(string Text, string Value); \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioListProps.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioListProps.cs new file mode 100644 index 0000000..be100b6 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/RadioList/RadioListProps.cs @@ -0,0 +1,12 @@ +namespace Elsa.Api.Client.Shared.UIHints.RadioList; + +/// +/// Provides properties for the radiolist UI hint. +/// +public class RadioListProps +{ + /// + /// The select list. + /// + public RadioList? RadioList { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Shared/UIHints/SingleLine/SingleLineProps.cs b/src/clients/Elsa.Api.Client/Shared/UIHints/SingleLine/SingleLineProps.cs new file mode 100644 index 0000000..68fb99a --- /dev/null +++ b/src/clients/Elsa.Api.Client/Shared/UIHints/SingleLine/SingleLineProps.cs @@ -0,0 +1,17 @@ +namespace Elsa.Api.Client.Shared.UIHints.SingleLine; + +/// +/// Provides additional options for the SingleLine input field. +/// +public class SingleLineProps +{ + /// + /// Gets or sets adornment text. + /// + public string? AdornmentText { get; set; } + + /// + /// Gets or sets enabling or disabling the copy adornment. + /// + public bool EnableCopyAdornment { get; set; } = false; +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs b/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs new file mode 100644 index 0000000..82b6049 --- /dev/null +++ b/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs @@ -0,0 +1,72 @@ +using FastEndpoints; + +namespace Elsa.Abstractions; + +/// +/// An endpoint that maps a request to a response. +/// +public abstract class ElsaEndpointWithMapper : EndpointWithMapper where TMapper : class, IRequestMapper where TRequest : notnull +{ + protected void ConfigurePermissions(params string[] permissions) + { + if (!EndpointSecurityOptions.SecurityIsEnabled) + AllowAnonymous(); + else + Permissions(new[] { PermissionNames.All }.Concat(permissions).ToArray()); + } +} + +public abstract class ElsaEndpointWithoutRequest : EndpointWithoutRequest +{ + protected void ConfigurePermissions(params string[] permissions) + { + if (!EndpointSecurityOptions.SecurityIsEnabled) + AllowAnonymous(); + else + Permissions(new[] { PermissionNames.All }.Concat(permissions).ToArray()); + } +} + +public abstract class ElsaEndpointWithoutRequest : EndpointWithoutRequest where TResponse : notnull +{ + protected void ConfigurePermissions(params string[] permissions) + { + if (!EndpointSecurityOptions.SecurityIsEnabled) + AllowAnonymous(); + else + Permissions(new[] { PermissionNames.All }.Concat(permissions).ToArray()); + } +} + +public class ElsaEndpoint : Endpoint where TRequest : notnull, new() where TResponse : notnull +{ + protected void ConfigurePermissions(params string[] permissions) + { + if (!EndpointSecurityOptions.SecurityIsEnabled) + AllowAnonymous(); + else + Permissions(new[] { PermissionNames.All }.Concat(permissions).ToArray()); + } +} + +public class ElsaEndpoint : Endpoint where TRequest : notnull, new() where TResponse : notnull where TMapper : class, IMapper, new() +{ + protected void ConfigurePermissions(params string[] permissions) + { + if (!EndpointSecurityOptions.SecurityIsEnabled) + AllowAnonymous(); + else + Permissions(new[] { PermissionNames.All }.Concat(permissions).ToArray()); + } +} + +public class ElsaEndpoint : Endpoint where TRequest : notnull, new() +{ + protected void ConfigurePermissions(params string[] permissions) + { + if (!EndpointSecurityOptions.SecurityIsEnabled) + AllowAnonymous(); + else + Permissions(new[] { PermissionNames.All }.Concat(permissions).ToArray()); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Elsa.Api.Common.csproj b/src/common/Elsa.Api.Common/Elsa.Api.Common.csproj new file mode 100644 index 0000000..8288f16 --- /dev/null +++ b/src/common/Elsa.Api.Common/Elsa.Api.Common.csproj @@ -0,0 +1,22 @@ + + + + + Provides common features to modules that expose API endpoints. + + Elsa + elsa api common + + + + + + + + + + + + + + diff --git a/src/common/Elsa.Api.Common/EndpointSecurityOptions.cs b/src/common/Elsa.Api.Common/EndpointSecurityOptions.cs new file mode 100644 index 0000000..b4fd264 --- /dev/null +++ b/src/common/Elsa.Api.Common/EndpointSecurityOptions.cs @@ -0,0 +1,11 @@ +namespace Elsa; + +public static class EndpointSecurityOptions +{ + public static string AdminRoleName = "Admin"; + public static string ReaderRoleName = "Reader"; + public static string WriteRoleName = "Writer"; + public static bool SecurityIsEnabled = true; + + public static void DisableSecurity() => SecurityIsEnabled = false; +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Extensions/HttpContextAccessorExtensions.cs b/src/common/Elsa.Api.Common/Extensions/HttpContextAccessorExtensions.cs new file mode 100644 index 0000000..1a058d8 --- /dev/null +++ b/src/common/Elsa.Api.Common/Extensions/HttpContextAccessorExtensions.cs @@ -0,0 +1,25 @@ +using System.Net; +using Microsoft.AspNetCore.Http; + +namespace Elsa.Extensions; + +/// +/// Extension methods for . +/// +public static class HttpRequestExtensions +{ + /// + /// Returns a value indicating whether the specified request is a local request. + /// + /// + /// True if the request is local, otherwise false. + public static bool IsLocal(this HttpRequest request) + { + var connection = request.HttpContext.Connection; + return connection.RemoteIpAddress != null + ? connection.LocalIpAddress != null + ? connection.RemoteIpAddress.Equals(connection.LocalIpAddress) + : IPAddress.IsLoopback(connection.RemoteIpAddress) + : connection.RemoteIpAddress == null && connection.LocalIpAddress == null; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Extensions/ModuleExtensions.cs b/src/common/Elsa.Api.Common/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..1ce843b --- /dev/null +++ b/src/common/Elsa.Api.Common/Extensions/ModuleExtensions.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using Elsa.Features.Services; +using FastEndpoints; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extensions to . +/// +public static class ModuleExtensions +{ + private static readonly object FastEndpointsAssembliesKey = new(); + + /// + /// Registers the specified assembly for FastEndpoint assembly discovery. + /// + public static IModule AddFastEndpointsAssembly(this IModule module, Assembly assembly) + { + var assemblies = module.Properties.GetOrAdd(FastEndpointsAssembliesKey, () => new HashSet()); + assemblies.Add(assembly); + return module; + } + + /// + /// Registers the assembly for FastEndpoint assembly discovery using the specified marker type. + /// + public static IModule AddFastEndpointsAssembly(this IModule module) => module.AddFastEndpointsAssembly(typeof(T)); + + /// + /// Registers the assembly for FastEndpoint assembly discovery using the specified marker type. + /// + public static IModule AddFastEndpointsAssembly(this IModule module, Type markerType) => module.AddFastEndpointsAssembly(markerType.Assembly); + + /// + /// Returns all collected assemblies for discovery of endpoints. + /// + public static IEnumerable GetFastEndpointsAssembliesFromModule(this IModule module) => module.Properties.GetOrAdd(FastEndpointsAssembliesKey, () => new HashSet()); + + /// + /// Adds FastEndpoints to the service container and registers all collected assemblies for discovery of endpoints. + /// + public static IModule AddFastEndpointsFromModule(this IModule module) + { + var assemblies = module.GetFastEndpointsAssembliesFromModule().ToList(); + + module.Services.AddFastEndpoints(options => + { + options.DisableAutoDiscovery = true; + options.Assemblies = assemblies; + }); + + return module; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Extensions/ObjectDictionaryExtensions.cs b/src/common/Elsa.Api.Common/Extensions/ObjectDictionaryExtensions.cs new file mode 100644 index 0000000..b065150 --- /dev/null +++ b/src/common/Elsa.Api.Common/Extensions/ObjectDictionaryExtensions.cs @@ -0,0 +1,15 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +static class ObjectDictionaryExtensions +{ + public static T GetOrAdd(this IDictionary dictionary, object key, Func valueFactory) + { + if (dictionary.TryGetValue(key, out var value)) return (T)value; + value = valueFactory(); + dictionary.Add(key, value!); + return (T)value!; + } + + public static T Get(this IDictionary dictionary, object key) => (T)dictionary[key]; +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Extensions/SwaggerExtensions.cs b/src/common/Elsa.Api.Common/Extensions/SwaggerExtensions.cs new file mode 100644 index 0000000..deeabfb --- /dev/null +++ b/src/common/Elsa.Api.Common/Extensions/SwaggerExtensions.cs @@ -0,0 +1,50 @@ +using Elsa.Features.Services; +using FastEndpoints.Swagger; +using Microsoft.AspNetCore.Builder; + +namespace Elsa.Extensions +{ + /// + /// Extensions to enable the generation of Swagger API Documentation and associated Swagger UI. + /// + public static class SwaggerExtensions + { + /// + /// Registers Swagger document generator. + /// + public static IModule AddSwagger(this IModule module) + { + Version ver = new(3, 0); + + // Swagger API documentation + module.Services.SwaggerDocument(o => + { + o.EnableJWTBearerAuth = true; + o.DocumentSettings = s => + { + s.DocumentName = $"v{ver.Major}"; + s.Title = "Elsa API"; + s.Version = $"v{ver.Major}.{ver.Minor}"; + s.AddAuth("ApiKey", new() + { + Name = "Authorization", + In = NSwag.OpenApiSecurityApiKeyLocation.Header, + Type = NSwag.OpenApiSecuritySchemeType.ApiKey, + Description = "Enter: ApiKey [your API key]" + }); + }; + }); + + return module; + } + + /// + /// Adds middleware to enable the Swagger UI at '/swagger' + /// + public static IApplicationBuilder UseSwaggerUI(this IApplicationBuilder app) + { + return app.UseSwaggerGen(); + } + + } +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Extensions/WebApplicationExtensions.cs b/src/common/Elsa.Api.Common/Extensions/WebApplicationExtensions.cs new file mode 100644 index 0000000..42a836f --- /dev/null +++ b/src/common/Elsa.Api.Common/Extensions/WebApplicationExtensions.cs @@ -0,0 +1,75 @@ +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; +using Elsa.Workflows; +using FastEndpoints; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.DependencyInjection; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extension methods to add the FastEndpoints middleware configured for use with Elsa API endpoints. +/// +[PublicAPI] +public static class WebApplicationExtensions +{ + /// + /// Register the FastEndpoints middleware configured for use with with Elsa API endpoints. + /// + /// + /// The route prefix to apply to Elsa API endpoints. + /// E.g. "elsa/api" will expose endpoints like this: "/elsa/api/workflow-definitions" + public static IApplicationBuilder UseWorkflowsApi(this IApplicationBuilder app, string routePrefix = "elsa/api") + { + return app.UseFastEndpoints(config => + { + config.Endpoints.RoutePrefix = routePrefix; + config.Serializer.RequestDeserializer = DeserializeRequestAsync; + config.Serializer.ResponseSerializer = SerializeRequestAsync; + + config.Binding.ValueParserFor(s => + new(DateTimeOffset.TryParse(s.ToString(), CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result), result)); + }); + } + + /// + /// Register the FastEndpoints middleware configured for use with with Elsa API endpoints. + /// + /// The to register the endpoints with. + /// The route prefix to apply to Elsa API endpoints. + /// E.g. "elsa/api" will expose endpoints like this: "/elsa/api/workflow-definitions" + public static IEndpointRouteBuilder MapWorkflowsApi(this IEndpointRouteBuilder routes, string routePrefix = "elsa/api") => + routes.MapFastEndpoints(config => + { + config.Endpoints.RoutePrefix = routePrefix; + config.Serializer.RequestDeserializer = DeserializeRequestAsync; + config.Serializer.ResponseSerializer = SerializeRequestAsync; + }); + + private static ValueTask DeserializeRequestAsync(HttpRequest httpRequest, Type modelType, JsonSerializerContext? serializerContext, CancellationToken cancellationToken) + { + var serializer = httpRequest.HttpContext.RequestServices.GetRequiredService(); + var options = serializer.GetOptions(); + + return serializerContext == null + ? JsonSerializer.DeserializeAsync(httpRequest.Body, modelType, options, cancellationToken) + : JsonSerializer.DeserializeAsync(httpRequest.Body, modelType, serializerContext, cancellationToken); + } + + private static Task SerializeRequestAsync(HttpResponse httpResponse, object? dto, string contentType, JsonSerializerContext? serializerContext, CancellationToken cancellationToken) + { + var serializer = httpResponse.HttpContext.RequestServices.GetRequiredService(); + var options = serializer.GetOptions(); + + httpResponse.ContentType = contentType; + return serializerContext == null + ? JsonSerializer.SerializeAsync(httpResponse.Body, dto, dto?.GetType() ?? typeof(object), options, cancellationToken) + : JsonSerializer.SerializeAsync(httpResponse.Body, dto, dto?.GetType() ?? typeof(object), serializerContext, cancellationToken); + } + +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/FodyWeavers.xml b/src/common/Elsa.Api.Common/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.Api.Common/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Models/CountResponse.cs b/src/common/Elsa.Api.Common/Models/CountResponse.cs new file mode 100644 index 0000000..67b16df --- /dev/null +++ b/src/common/Elsa.Api.Common/Models/CountResponse.cs @@ -0,0 +1,7 @@ +namespace Elsa.Models; + +/// +/// Represents a count response that offers a unified format for returning count of things from API endpoints. +/// +/// The number of items found for a given query. +public record CountResponse(long Count); \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Models/LinkedResource.cs b/src/common/Elsa.Api.Common/Models/LinkedResource.cs new file mode 100644 index 0000000..b5b9aa7 --- /dev/null +++ b/src/common/Elsa.Api.Common/Models/LinkedResource.cs @@ -0,0 +1,8 @@ +namespace Elsa.Models; + +public record LinkedResource(Link[] Links) +{ + public LinkedResource() : this([]) { } +} + +public record Link(string Href, string Rel, string Method); \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Models/ListResponse.cs b/src/common/Elsa.Api.Common/Models/ListResponse.cs new file mode 100644 index 0000000..dac148f --- /dev/null +++ b/src/common/Elsa.Api.Common/Models/ListResponse.cs @@ -0,0 +1,33 @@ +namespace Elsa.Models; + +/// +/// Represents a generic list response that offers a unified format for returning list of things from API endpoints. +/// +public class ListResponse +{ + /// + /// Default constructor. + /// + public ListResponse() + { + } + + /// + /// Constructor accepting a list of items. + /// + public ListResponse(ICollection items) + { + Items = items; + Count = items.Count; + } + + /// + /// A list of items. + /// + public ICollection Items { get; set; } = default!; + + /// + /// The number of items in the list. + /// + public long Count { get; set; } +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Models/PagedListResponse.cs b/src/common/Elsa.Api.Common/Models/PagedListResponse.cs new file mode 100644 index 0000000..06cdb55 --- /dev/null +++ b/src/common/Elsa.Api.Common/Models/PagedListResponse.cs @@ -0,0 +1,21 @@ +using Elsa.Common.Models; + +namespace Elsa.Models; + +public record PagedListResponse: LinkedResource +{ + public PagedListResponse() + { + } + + public PagedListResponse(Page page) + { + Items = page.Items; + TotalCount = page.TotalCount; + } + + public ICollection Items { get; set; } = default!; + public long TotalCount { get; set; } + + public static PagedListResponse From(Page page) => new(page); +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Models/ValidateCredentialsResult.cs b/src/common/Elsa.Api.Common/Models/ValidateCredentialsResult.cs new file mode 100644 index 0000000..d035656 --- /dev/null +++ b/src/common/Elsa.Api.Common/Models/ValidateCredentialsResult.cs @@ -0,0 +1,7 @@ +namespace Elsa.Models; + +public record ValidateCredentialsResult(bool IsValid, object? Context = null) +{ + public static ValidateCredentialsResult Invalid() => new(false); + public static ValidateCredentialsResult Valid(object? context = null) => new(true, context); +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/PermissionNames.cs b/src/common/Elsa.Api.Common/PermissionNames.cs new file mode 100644 index 0000000..1664717 --- /dev/null +++ b/src/common/Elsa.Api.Common/PermissionNames.cs @@ -0,0 +1,6 @@ +namespace Elsa; + +public static class PermissionNames +{ + public const string All = "*"; +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Requirements/LocalHostPermissionRequirement.cs b/src/common/Elsa.Api.Common/Requirements/LocalHostPermissionRequirement.cs new file mode 100644 index 0000000..e9742ae --- /dev/null +++ b/src/common/Elsa.Api.Common/Requirements/LocalHostPermissionRequirement.cs @@ -0,0 +1,49 @@ +using System.Security.Claims; +using Elsa.Extensions; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; + +namespace Elsa.Requirements; + +/// +/// Adda the "create:application" permission to the current user if the request is local. +/// +public class LocalHostPermissionRequirement : IAuthorizationRequirement +{ +} + +/// +[PublicAPI] +public class LocalHostPermissionRequirementHandler : AuthorizationHandler +{ + private readonly IHttpContextAccessor _httpContextAccessor; + + /// + public LocalHostPermissionRequirementHandler(IHttpContextAccessor httpContextAccessor) + { + _httpContextAccessor = httpContextAccessor; + } + + /// + protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, LocalHostPermissionRequirement requirement) + { + if (_httpContextAccessor.HttpContext?.Request.IsLocal() == false) + return Task.CompletedTask; + + var currentIdentity = context.User.Identity; + + if (currentIdentity?.IsAuthenticated == false) + { + var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme); + identity.AddClaim(new Claim("permissions", "create:application")); + identity.AddClaim(new Claim("permissions", "create:user")); + identity.AddClaim(new Claim("permissions", "create:role")); + context.User.AddIdentity(identity); + } + + context.Succeed(requirement); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Api.Common/Requirements/LocalHostRequirement.cs b/src/common/Elsa.Api.Common/Requirements/LocalHostRequirement.cs new file mode 100644 index 0000000..eab4351 --- /dev/null +++ b/src/common/Elsa.Api.Common/Requirements/LocalHostRequirement.cs @@ -0,0 +1,36 @@ +using Elsa.Extensions; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; + +namespace Elsa.Requirements; + +/// +/// Represents an authorization requirement for localhost requests, meaning that if a request comes from the localhost, the requirement is met. +/// +public class LocalHostRequirement : IAuthorizationRequirement +{ +} + +/// +[PublicAPI] +public class LocalHostRequirementHandler : AuthorizationHandler +{ + private readonly IHttpContextAccessor _httpContextAccessor; + + /// + public LocalHostRequirementHandler(IHttpContextAccessor httpContextAccessor) + { + _httpContextAccessor = httpContextAccessor; + } + + /// + protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, LocalHostRequirement requirement) + { + if (_httpContextAccessor.HttpContext?.Request.IsLocal() == false) + context.Fail(new AuthorizationFailureReason(this, "Only requests from localhost are allowed")); + + context.Succeed(requirement); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns.Core/Elsa.DropIns.Core.csproj b/src/common/Elsa.DropIns.Core/Elsa.DropIns.Core.csproj new file mode 100644 index 0000000..d684d14 --- /dev/null +++ b/src/common/Elsa.DropIns.Core/Elsa.DropIns.Core.csproj @@ -0,0 +1,18 @@ + + + + + Reference this package when developing drop-ins for Elsa Workflows. + + elsa drop-ins common + + + + + + + + + + + diff --git a/src/common/Elsa.DropIns.Core/FodyWeavers.xml b/src/common/Elsa.DropIns.Core/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.DropIns.Core/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.DropIns.Core/IDropIn.cs b/src/common/Elsa.DropIns.Core/IDropIn.cs new file mode 100644 index 0000000..ef2ca2d --- /dev/null +++ b/src/common/Elsa.DropIns.Core/IDropIn.cs @@ -0,0 +1,25 @@ +using Elsa.Features.Services; + +namespace Elsa.DropIns.Core; + +/// +/// Implement this in your drop-in module to configure elsa and register services. +/// +public interface IDropIn +{ + /// + /// Called when the drop-in is installed. + /// + /// The Elsa module. + void Install(IModule module); + + /// + /// Called when the drop-in is being configured. + /// + ValueTask ConfigureAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken); + + /// + /// Unconfigure the drop-in when it's deleted. + /// + void Unconfigure(IServiceProvider serviceProvider); +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Catalogs/AssembliesDropInCatalog.cs b/src/common/Elsa.DropIns/Catalogs/AssembliesDropInCatalog.cs new file mode 100644 index 0000000..6372ddd --- /dev/null +++ b/src/common/Elsa.DropIns/Catalogs/AssembliesDropInCatalog.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Models; + +namespace Elsa.DropIns.Catalogs; + +public class AssembliesDropInCatalog : IDropInCatalog +{ + private readonly IEnumerable _assemblies; + + public AssembliesDropInCatalog(IEnumerable assemblies) + { + _assemblies = assemblies; + } + + public IEnumerable List() + { + var allDropIns = new List(); + + foreach (var assembly in _assemblies) + { + var assemblyCatalog = new AssemblyDropInCatalog(assembly); + var dropIns = assemblyCatalog.List(); + allDropIns.AddRange(dropIns); + } + + return allDropIns; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Catalogs/AssemblyDropInCatalog.cs b/src/common/Elsa.DropIns/Catalogs/AssemblyDropInCatalog.cs new file mode 100644 index 0000000..791757a --- /dev/null +++ b/src/common/Elsa.DropIns/Catalogs/AssemblyDropInCatalog.cs @@ -0,0 +1,26 @@ +using System.Reflection; +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Core; +using Elsa.DropIns.Helpers; +using Elsa.DropIns.Models; + +namespace Elsa.DropIns.Catalogs; + +public class AssemblyDropInCatalog : IDropInCatalog +{ + private readonly Assembly _assembly; + + public AssemblyDropInCatalog(Assembly assembly) + { + _assembly = assembly; + } + + public IEnumerable List() + { + var dropIns = TypeFinder.FindImplementationsOf(_assembly) + .Select(type => new DropInDescriptor(type)) + .ToList(); + + return dropIns; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Catalogs/DirectoryDropInCatalog.cs b/src/common/Elsa.DropIns/Catalogs/DirectoryDropInCatalog.cs new file mode 100644 index 0000000..8a05e24 --- /dev/null +++ b/src/common/Elsa.DropIns/Catalogs/DirectoryDropInCatalog.cs @@ -0,0 +1,62 @@ +using System.Reflection; +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Helpers; +using Elsa.DropIns.Models; + +namespace Elsa.DropIns.Catalogs; + +/// +/// A catalog that lists drop-ins from a directory. +/// +public class DirectoryDropInCatalog : IDropInCatalog +{ + private readonly string _directoryPath; + + /// + /// Initializes a new instance of the class. + /// + /// The directory path to list drop-ins from. + public DirectoryDropInCatalog(string directoryPath) + { + _directoryPath = directoryPath; + } + + /// + public IEnumerable List() + { + if (!Directory.Exists(_directoryPath)) + return Enumerable.Empty(); + + var assemblies = ListAssemblies(); + var packages = ListPackages(); + var assembliesCatalog = new AssembliesDropInCatalog(assemblies); + var packagesCatalog = new NuGetPackagesCatalog(packages); + + return assembliesCatalog.List().Concat(packagesCatalog.List()); + } + + private IEnumerable ListAssemblies() + { + var assemblyPaths = Directory.GetFiles(_directoryPath, "*.dll", SearchOption.AllDirectories); + + foreach (var assemblyPath in assemblyPaths) + { + var assembly = LoadDropInAssembly(assemblyPath); + + if (assembly == null) + continue; + + yield return assembly; + } + } + + private string[] ListPackages() + { + return Directory.GetFiles(_directoryPath, "*.nupkg", SearchOption.AllDirectories); + } + + private static Assembly? LoadDropInAssembly(string path) + { + return !File.Exists(path) ? null : AssemblyLoader.LoadPath(path); + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Catalogs/NuGetPackageCatalog.cs b/src/common/Elsa.DropIns/Catalogs/NuGetPackageCatalog.cs new file mode 100644 index 0000000..9f8dbcb --- /dev/null +++ b/src/common/Elsa.DropIns/Catalogs/NuGetPackageCatalog.cs @@ -0,0 +1,24 @@ +using Elsa.DropIns.Contexts; +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Models; + +namespace Elsa.DropIns.Catalogs; + +public class NuGetPackageCatalog : IDropInCatalog +{ + private readonly string _packagePath; + + public NuGetPackageCatalog(string packagePath) + { + _packagePath = packagePath; + } + + public IEnumerable List() + { + var assemblyLoadContext = new NuGetPackageAssemblyLoadContext(_packagePath); + var assemblies = assemblyLoadContext.Assemblies; + var assembliesCatalog = new AssembliesDropInCatalog(assemblies); + + return assembliesCatalog.List(); + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Catalogs/NuGetPackagesCatalog.cs b/src/common/Elsa.DropIns/Catalogs/NuGetPackagesCatalog.cs new file mode 100644 index 0000000..a879325 --- /dev/null +++ b/src/common/Elsa.DropIns/Catalogs/NuGetPackagesCatalog.cs @@ -0,0 +1,19 @@ +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Models; + +namespace Elsa.DropIns.Catalogs; + +public class NuGetPackagesCatalog : IDropInCatalog +{ + private readonly IEnumerable _packagePaths; + + public NuGetPackagesCatalog(IEnumerable packagePaths) + { + _packagePaths = packagePaths; + } + + public IEnumerable List() + { + return _packagePaths.Select(packagePath => new NuGetPackageCatalog(packagePath)).SelectMany(catalog => catalog.List()); + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Contexts/DirectoryAssemblyLoadContext.cs b/src/common/Elsa.DropIns/Contexts/DirectoryAssemblyLoadContext.cs new file mode 100644 index 0000000..4a33f99 --- /dev/null +++ b/src/common/Elsa.DropIns/Contexts/DirectoryAssemblyLoadContext.cs @@ -0,0 +1,26 @@ +using System.Reflection; +using System.Runtime.Loader; + +namespace Elsa.DropIns.Contexts; + +internal sealed class DirectoryAssemblyLoadContext : AssemblyLoadContext +{ + private readonly AssemblyDependencyResolver _resolver; + + public DirectoryAssemblyLoadContext(string dropInPath) + { + _resolver = new AssemblyDependencyResolver(dropInPath); + } + + protected override Assembly? Load(AssemblyName assemblyName) + { + var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName); + return assemblyPath != null ? LoadFromAssemblyPath(assemblyPath) : null; + } + + protected override IntPtr LoadUnmanagedDll(string unmanagedDllName) + { + var libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName); + return libraryPath != null ? LoadUnmanagedDllFromPath(libraryPath) : IntPtr.Zero; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Contexts/NuGetPackageAssemblyLoadContext.cs b/src/common/Elsa.DropIns/Contexts/NuGetPackageAssemblyLoadContext.cs new file mode 100644 index 0000000..8c2d126 --- /dev/null +++ b/src/common/Elsa.DropIns/Contexts/NuGetPackageAssemblyLoadContext.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.Loader; +using NuGet.Packaging; + +namespace Elsa.DropIns.Contexts; + +internal sealed class NuGetPackageAssemblyLoadContext : AssemblyLoadContext +{ + private readonly Dictionary _loadedAssemblies = new Dictionary(); + + public NuGetPackageAssemblyLoadContext(string nugetPackagePath) + { + var packageReader = new PackageArchiveReader(nugetPackagePath); + + foreach (var dllFile in packageReader.GetFiles().Where(fileName => fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))) + { + using var dllStream = packageReader.GetStream(dllFile); + using var memoryStream = new MemoryStream(); + dllStream.CopyTo(memoryStream); + memoryStream.Seek(0, SeekOrigin.Begin); + var assembly = LoadFromStream(memoryStream); + + _loadedAssemblies[assembly.FullName!] = assembly; + } + //Closes the package reader, closing the .nupkg file + packageReader.Dispose(); + } + + protected override Assembly? Load(AssemblyName assemblyName) + { + return _loadedAssemblies.GetValueOrDefault(assemblyName.FullName); + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Contracts/IDropInCatalog.cs b/src/common/Elsa.DropIns/Contracts/IDropInCatalog.cs new file mode 100644 index 0000000..12f88f5 --- /dev/null +++ b/src/common/Elsa.DropIns/Contracts/IDropInCatalog.cs @@ -0,0 +1,8 @@ +using Elsa.DropIns.Models; + +namespace Elsa.DropIns.Contracts; + +public interface IDropInCatalog +{ + IEnumerable List(); +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Contracts/IDropInInstaller.cs b/src/common/Elsa.DropIns/Contracts/IDropInInstaller.cs new file mode 100644 index 0000000..a1d7df1 --- /dev/null +++ b/src/common/Elsa.DropIns/Contracts/IDropInInstaller.cs @@ -0,0 +1,8 @@ +using Elsa.Features.Services; + +namespace Elsa.DropIns.Contracts; + +public interface IDropInInstaller +{ + void Install(IModule module); +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Elsa.DropIns.csproj b/src/common/Elsa.DropIns/Elsa.DropIns.csproj new file mode 100644 index 0000000..ea1b795 --- /dev/null +++ b/src/common/Elsa.DropIns/Elsa.DropIns.csproj @@ -0,0 +1,29 @@ + + + + + Provides drop-in features for Elsa workflows. + + elsa drop-ins common + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Extensions/ModuleExtensions.cs b/src/common/Elsa.DropIns/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..9ef671b --- /dev/null +++ b/src/common/Elsa.DropIns/Extensions/ModuleExtensions.cs @@ -0,0 +1,21 @@ +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Options; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.DropIns.Extensions; + +public static class ModuleExtensions +{ + public static IModule InstallDropIns(this IModule elsa, Action? configureOptions = default) + { + // Install drop-ins. + var serviceProvider = new ServiceCollection().AddDropInInstaller(configureOptions).BuildServiceProvider(); + serviceProvider.GetRequiredService().Install(elsa); + + // Register drop-in monitor. + elsa.Services.AddDropInMonitor(configureOptions); + + return elsa; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Extensions/ServiceCollectionExtensions.cs b/src/common/Elsa.DropIns/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..5ec1e89 --- /dev/null +++ b/src/common/Elsa.DropIns/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,33 @@ +using Elsa.DropIns.Contracts; +using Elsa.DropIns.HostedServices; +using Elsa.DropIns.Options; +using Elsa.DropIns.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.DropIns.Extensions; + +internal static class ServiceCollectionExtensions +{ + public static IServiceCollection AddDropInMonitor(this IServiceCollection services, Action? configureOptions = default) + { + services.AddDropInCore(configureOptions); + services.AddHostedService(); + + return services; + } + + public static IServiceCollection AddDropInInstaller(this IServiceCollection services, Action? configureOptions = default) + { + services.AddDropInCore(configureOptions); + services.AddSingleton(); + + return services; + } + + public static IServiceCollection AddDropInCore(this IServiceCollection services, Action? configureOptions = default) + { + services.Configure(configureOptions ?? (_ => { })); + + return services; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/FodyWeavers.xml b/src/common/Elsa.DropIns/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.DropIns/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Helpers/AssemblyLoader.cs b/src/common/Elsa.DropIns/Helpers/AssemblyLoader.cs new file mode 100644 index 0000000..64b7799 --- /dev/null +++ b/src/common/Elsa.DropIns/Helpers/AssemblyLoader.cs @@ -0,0 +1,24 @@ +using System.Reflection; +using System.Runtime.Loader; +using Elsa.DropIns.Contexts; + +namespace Elsa.DropIns.Helpers; + +public static class AssemblyLoader +{ + public static Assembly LoadPath(string path) + { + var loadContext = new DirectoryAssemblyLoadContext(path); + var assemblyName = AssemblyLoadContext.GetAssemblyName(path); + + // Copy drop in to memory stream to avoid file locking + using var fileStream = File.OpenRead(path); + using var memoryStream = new MemoryStream(); + fileStream.CopyTo(memoryStream); + memoryStream.Seek(0, SeekOrigin.Begin); + fileStream.Close(); + var assembly = loadContext.LoadFromStream(memoryStream); + + return assembly; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Helpers/TypeFinder.cs b/src/common/Elsa.DropIns/Helpers/TypeFinder.cs new file mode 100644 index 0000000..b8b5655 --- /dev/null +++ b/src/common/Elsa.DropIns/Helpers/TypeFinder.cs @@ -0,0 +1,18 @@ +using System.Reflection; + +namespace Elsa.DropIns.Helpers; + +public static class TypeFinder +{ + public static IEnumerable FindImplementationsOf(IEnumerable assemblies) + { + // Find all types that implement IDropInStartup: + return assemblies.SelectMany(FindImplementationsOf); + } + + public static IEnumerable FindImplementationsOf(Assembly assembly) + { + // Find all types that implement T: + return assembly.GetExportedTypes().Where(t => typeof(T).IsAssignableFrom(t) && t is { IsAbstract: false, IsInterface: false }); + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/HostedServices/DropInDirectoryMonitorHostedService.cs b/src/common/Elsa.DropIns/HostedServices/DropInDirectoryMonitorHostedService.cs new file mode 100644 index 0000000..7fed31e --- /dev/null +++ b/src/common/Elsa.DropIns/HostedServices/DropInDirectoryMonitorHostedService.cs @@ -0,0 +1,123 @@ +using Elsa.DropIns.Catalogs; +using Elsa.DropIns.Core; +using Elsa.DropIns.Options; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using ThrottleDebounce; + +namespace Elsa.DropIns.HostedServices; + +/// +/// Monitors the drop-in directory for changes and loads any new drop-ins. +/// +public class DropInDirectoryMonitorHostedService : BackgroundService +{ + private readonly IOptions _options; + private readonly ILogger _logger; + private readonly IServiceProvider _serviceProvider; + private readonly RateLimitedFunc _debouncedLoader; + private readonly RateLimitedFunc _debouncedUnloader; + private readonly FileSystemWatcher _watcher; + + private readonly Dictionary> _installedDropIns; + + + /// + public DropInDirectoryMonitorHostedService( + IOptions options, + IServiceProvider serviceProvider, + ILogger logger + ) + { + _options = options; + _logger = logger; + _serviceProvider = serviceProvider; + _debouncedLoader = Debouncer.Debounce(LoadDropInAssemblyAsync, TimeSpan.FromSeconds(2)); + _debouncedUnloader = Debouncer.Debounce(UnloadDropInAssemblyAsync, TimeSpan.FromSeconds(2)); + + _installedDropIns = []; + + var rootDirectoryPath = _options.Value.DropInRootDirectory; + + if (!Directory.Exists(rootDirectoryPath)) + Directory.CreateDirectory(rootDirectoryPath); + + _watcher = new FileSystemWatcher(rootDirectoryPath) + { + EnableRaisingEvents = true, + IncludeSubdirectories = true, + NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName + }; + } + + /// + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + await LoadDropInAssemblyAsync(_options.Value.DropInRootDirectory); + + _watcher.Changed += OnChanged; + _watcher.Deleted += OnDeleted; + } + + private async void OnChanged(object sender, FileSystemEventArgs e) + { + var task = _debouncedLoader.Invoke(e.FullPath); + + if (task == null) + return; + + await task; + } + + private async void OnDeleted(object sender, FileSystemEventArgs e) + { + var task = _debouncedUnloader.Invoke(e.FullPath); + + if (task == null) + return; + + await task; + } + + private async Task LoadDropInAssemblyAsync(string fullPath) + { + var directory = Path.GetDirectoryName(fullPath)!; + var directoryCatalog = new DirectoryDropInCatalog(directory); + var dropInDescriptors = directoryCatalog.List(); + + foreach (var dropInDescriptor in dropInDescriptors) + { + var dropIn = (IDropIn)Activator.CreateInstance(dropInDescriptor.Type)!; + if (_installedDropIns.TryGetValue(fullPath, out var installedDropIns)) + { + installedDropIns.Add(dropIn); + } + else + { + _installedDropIns[fullPath] = [dropIn]; + } + await dropIn.ConfigureAsync(_serviceProvider, CancellationToken.None); + } + } + + private Task UnloadDropInAssemblyAsync(string fullPath) + { + if (_installedDropIns.TryGetValue(fullPath, out var installedDropIn)) + { + installedDropIn.ForEach(dropIn => + { + try + { + dropIn.Unconfigure(_serviceProvider); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error unconfiguring drop-in {DropIn}", dropIn.GetType().Name); + } + }); + _installedDropIns.Remove(fullPath); + } + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Models/DropInDescriptor.cs b/src/common/Elsa.DropIns/Models/DropInDescriptor.cs new file mode 100644 index 0000000..8b03626 --- /dev/null +++ b/src/common/Elsa.DropIns/Models/DropInDescriptor.cs @@ -0,0 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + +namespace Elsa.DropIns.Models; + +public class DropInDescriptor([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type type) +{ + /// + /// Gets or sets the type of the drop-in. + /// The DynamicallyAccessedMembers attribute ensures that the IL2072 warning is suppressed. + /// + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] + public Type Type { get; set; } = type; +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Options/DropInOptions.cs b/src/common/Elsa.DropIns/Options/DropInOptions.cs new file mode 100644 index 0000000..e2b3987 --- /dev/null +++ b/src/common/Elsa.DropIns/Options/DropInOptions.cs @@ -0,0 +1,6 @@ +namespace Elsa.DropIns.Options; + +public class DropInOptions +{ + public string DropInRootDirectory { get; set; } = default!; +} \ No newline at end of file diff --git a/src/common/Elsa.DropIns/Services/DropInInstaller.cs b/src/common/Elsa.DropIns/Services/DropInInstaller.cs new file mode 100644 index 0000000..3706e7c --- /dev/null +++ b/src/common/Elsa.DropIns/Services/DropInInstaller.cs @@ -0,0 +1,36 @@ +using Elsa.DropIns.Catalogs; +using Elsa.DropIns.Contracts; +using Elsa.DropIns.Core; +using Elsa.DropIns.Options; +using Elsa.Features.Services; +using Microsoft.Extensions.Options; + +namespace Elsa.DropIns.Services; + +/// +public class DropInInstaller : IDropInInstaller +{ + private readonly IOptions _options; + + /// + /// Initializes a new instance of the class. + /// + public DropInInstaller(IOptions options) + { + _options = options; + } + + /// + public void Install(IModule module) + { + var dropInRootDirectory = _options.Value.DropInRootDirectory; + var directoryCatalog = new DirectoryDropInCatalog(dropInRootDirectory); + var dropInDescriptors = directoryCatalog.List(); + + foreach (var dropInDescriptor in dropInDescriptors) + { + var dropIn = (IDropIn)Activator.CreateInstance(dropInDescriptor.Type)!; + dropIn.Install(module); + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Abstractions/FeatureBase.cs b/src/common/Elsa.Features/Abstractions/FeatureBase.cs new file mode 100644 index 0000000..141ab35 --- /dev/null +++ b/src/common/Elsa.Features/Abstractions/FeatureBase.cs @@ -0,0 +1,60 @@ +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Elsa.Features.Abstractions; + +/// +/// Base type for classes that represent a feature. +/// +public abstract class FeatureBase : IFeature +{ + /// + /// Constructor. + /// + protected FeatureBase(IModule module) + { + Module = module; + } + + /// + /// The module this feature is a part of. + /// + public IModule Module { get; } + + /// + /// A reference to the to which services can be added. + /// + public IServiceCollection Services => Module.Services; + + /// + /// Override this method to configure your feature. + /// + public virtual void Configure() + { + } + + /// + /// Override this method to register any hosted services provided by your feature. + /// + public virtual void ConfigureHostedServices() + { + } + + /// + /// Override this to register services with . + /// + public virtual void Apply() + { + } + + /// + /// Configures the specified hosted service using an optional priority to control in which order it will be registered with the service container. + /// + /// The priority. + /// The type of hosted service to configure. + protected void ConfigureHostedService(int priority = 0) where T : class, IHostedService + { + Module.ConfigureHostedService(priority); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Attributes/DependencyOf.cs b/src/common/Elsa.Features/Attributes/DependencyOf.cs new file mode 100644 index 0000000..9865bac --- /dev/null +++ b/src/common/Elsa.Features/Attributes/DependencyOf.cs @@ -0,0 +1,19 @@ +namespace Elsa.Features.Attributes; + +/// +/// Specifies that the feature is enabled automatically when the specified feature is enabled. +/// +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] +public class DependencyOfAttribute : Attribute +{ + /// + public DependencyOfAttribute(Type type) + { + Type = type; + } + + /// + /// The type of the feature this feature is a dependency of. + /// + public Type Type { get; set; } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Attributes/DependsOn.cs b/src/common/Elsa.Features/Attributes/DependsOn.cs new file mode 100644 index 0000000..fb9e3fa --- /dev/null +++ b/src/common/Elsa.Features/Attributes/DependsOn.cs @@ -0,0 +1,22 @@ +namespace Elsa.Features.Attributes; + +/// +/// Specifies that the feature depends on another feature. +/// +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] +public class DependsOnAttribute : Attribute +{ + /// + /// Initializes a new instance of the class. + /// + /// The type of the feature this feature depends on. + public DependsOnAttribute(Type type) + { + Type = type; + } + + /// + /// The type of the feature this feature depends on. + /// + public Type Type { get; set; } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Contracts/IInstalledFeatureRegistry.cs b/src/common/Elsa.Features/Contracts/IInstalledFeatureRegistry.cs new file mode 100644 index 0000000..7dc5387 --- /dev/null +++ b/src/common/Elsa.Features/Contracts/IInstalledFeatureRegistry.cs @@ -0,0 +1,28 @@ +using Elsa.Features.Models; + +namespace Elsa.Features.Contracts; + +/// +/// Represents a registry of installed features. +/// +public interface IInstalledFeatureRegistry +{ + /// + /// Adds a feature descriptor to the registry. + /// + /// The feature descriptor. + void Add(FeatureDescriptor descriptor); + + /// + /// Gets all installed features. + /// + /// All installed features. + IEnumerable List(); + + /// + /// Finds a feature descriptor by its full name. + /// + /// The full name of the feature. + /// The feature descriptor or null if not found. + FeatureDescriptor? Find(string fullName); +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Elsa.Features.csproj b/src/common/Elsa.Features/Elsa.Features.csproj new file mode 100644 index 0000000..10a3eae --- /dev/null +++ b/src/common/Elsa.Features/Elsa.Features.csproj @@ -0,0 +1,15 @@ + + + + + Provides utilities to turn your class library into a module that provides features. + + elsa common + + + + + + + + diff --git a/src/common/Elsa.Features/Extensions/DependencyInjectionExtensions.cs b/src/common/Elsa.Features/Extensions/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..afc859d --- /dev/null +++ b/src/common/Elsa.Features/Extensions/DependencyInjectionExtensions.cs @@ -0,0 +1,26 @@ +using Elsa.Features.Implementations; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Adds extension methods to that creates and configures modules. +/// +public static class DependencyInjectionExtensions +{ + /// + /// Returns a new instance of an implementation. + /// + public static IModule CreateModule(this IServiceCollection services) => new Module(services); + + /// + /// Installs and configures the specified feature. If the feature was already installed, it is not added twice, which means it is safe to call this method multiple times. + /// + public static IModule Use(this IModule module, Action? configure = null) where T: class, IFeature + { + module.Configure(configure); + return module; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Extensions/EnumerableTopologicalSortExtensions.cs b/src/common/Elsa.Features/Extensions/EnumerableTopologicalSortExtensions.cs new file mode 100644 index 0000000..3be72b1 --- /dev/null +++ b/src/common/Elsa.Features/Extensions/EnumerableTopologicalSortExtensions.cs @@ -0,0 +1,39 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Adds extension methods to sort collections by their dependencies, also known as a topological sort. +/// +public static class EnumerableTopologicalSortExtensions +{ + /// + /// Returns a topologically sorted copy of the specified list. + /// + // ReSharper disable once InconsistentNaming + public static IEnumerable TSort(this IEnumerable source, Func> dependencies, bool throwOnCycle = false) + { + var sorted = new List(); + var visited = new HashSet(); + + foreach (var item in source) + Visit(item, visited, sorted, dependencies, throwOnCycle); + + return sorted; + } + + private static void Visit(T item, ISet visited, ICollection sorted, Func> dependencies, bool throwOnCycle) + { + if (visited.Add(item)) + { + foreach (var dep in dependencies(item)) + Visit(dep, visited, sorted, dependencies, throwOnCycle); + + sorted.Add(item); + } + else + { + if (throwOnCycle && !sorted.Contains(item)) + throw new Exception("Cyclic dependency found"); + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/FodyWeavers.xml b/src/common/Elsa.Features/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.Features/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.Features/Implementations/Module.cs b/src/common/Elsa.Features/Implementations/Module.cs new file mode 100644 index 0000000..4821e91 --- /dev/null +++ b/src/common/Elsa.Features/Implementations/Module.cs @@ -0,0 +1,172 @@ +using System.ComponentModel; +using System.Reflection; +using Elsa.Extensions; +using Elsa.Features.Attributes; +using Elsa.Features.Contracts; +using Elsa.Features.Models; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; + +namespace Elsa.Features.Implementations; + +/// +public class Module : IModule +{ + private sealed record HostedServiceDescriptor(int Order, Type Type); + + private Dictionary _features = new(); + private readonly HashSet _configuredFeatures = new(); + private readonly List _hostedServiceDescriptors = new(); + + /// + /// Constructor. + /// + public Module(IServiceCollection services) + { + Services = services; + } + + /// + public IServiceCollection Services { get; } + + /// + public IDictionary Properties { get; } = new Dictionary(); + + /// + public bool HasFeature() where T : class, IFeature + { + return HasFeature(typeof(T)); + } + + /// + public bool HasFeature(Type featureType) + { + return _features.ContainsKey(featureType); + } + + /// + public T Configure(Action? configure = null) where T : class, IFeature + { + return Configure(module => (T)Activator.CreateInstance(typeof(T), module)!, configure); + } + + /// + public T Configure(Func factory, Action? configure = null) where T : class, IFeature + { + if (!_features.TryGetValue(typeof(T), out var feature)) + { + feature = factory(this); + _features[typeof(T)] = feature; + } + + configure?.Invoke((T)feature); + + if (!_isApplying) + return (T)feature; + + var dependencies = GetDependencyTypes(feature.GetType()).ToHashSet(); + foreach (var dependency in dependencies.Select(GetOrCreateFeature)) + ConfigureFeature(dependency); + + ConfigureFeature(feature); + return (T)feature; + } + + /// + public IModule ConfigureHostedService(int priority = 0) where T : class, IHostedService + { + return ConfigureHostedService(typeof(T), priority); + } + + /// + public IModule ConfigureHostedService(Type hostedServiceType, int priority = 0) + { + _hostedServiceDescriptors.Add(new(priority, hostedServiceType)); + return this; + } + + private bool _isApplying; + + /// + public void Apply() + { + _isApplying = true; + var featureTypes = GetFeatureTypes(); + _features = featureTypes.ToDictionary(featureType => featureType, featureType => _features.TryGetValue(featureType, out var existingFeature) ? existingFeature : (IFeature)Activator.CreateInstance(featureType, this)!); + + // Iterate over a copy of the features to avoid concurrent modification exceptions. + foreach (var feature in _features.Values.ToList()) + { + // This will cause additional features to be added to _features. + ConfigureFeature(feature); + } + + // Filter out features that depend on other features that are not installed. + _features = ExcludeFeaturesWithMissingDependencies(_features.Values).ToDictionary(x => x.GetType(), x => x); + + // Add hosted services in order of priority. + foreach (var hostedServiceDescriptor in _hostedServiceDescriptors.OrderBy(x => x.Order)) + Services.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IHostedService), hostedServiceDescriptor.Type)); + + // Make sure to use the complete list of features when applying them. + foreach (var feature in _features.Values) + feature.Apply(); + + // Add a registry of enabled features to the service collection for client applications to reflect on what features are installed. + var registry = new InstalledFeatureRegistry(); + foreach (var feature in _features.Values) + { + var type = feature.GetType(); + var name = type.Name.Replace("Feature", string.Empty); + var ns = "Elsa"; + var displayName = type.GetCustomAttribute()?.DisplayName ?? name; + var description = type.GetCustomAttribute()?.Description; + registry.Add(new(name, ns, displayName, description)); + } + + Services.AddSingleton(registry); + } + + private IEnumerable ExcludeFeaturesWithMissingDependencies(IEnumerable features) + { + return + from feature in features + let featureType = feature.GetType() + let dependencyOfAttributes = featureType.GetCustomAttributes(true).ToList() + let missingDependencies = dependencyOfAttributes.Where(x => !_features.ContainsKey(x.Type)).ToList() + where missingDependencies.Count == 0 + select feature; + } + + private void ConfigureFeature(IFeature feature) + { + if (_configuredFeatures.Contains(feature)) + return; + + feature.Configure(); + feature.ConfigureHostedServices(); + _features[feature.GetType()] = feature; + _configuredFeatures.Add(feature); + } + + private IFeature GetOrCreateFeature(Type featureType) + { + return _features.TryGetValue(featureType, out var existingFeature) ? existingFeature : (IFeature)Activator.CreateInstance(featureType, this)!; + } + + private HashSet GetFeatureTypes() + { + var featureTypes = _features.Keys.ToHashSet(); + var featureTypesWithDependencies = featureTypes.Concat(featureTypes.SelectMany(GetDependencyTypes)).ToHashSet(); + return featureTypesWithDependencies.TSort(x => x.GetCustomAttributes(true).Select(dependsOn => dependsOn.Type)).ToHashSet(); + } + + // Recursively get dependency types. + private IEnumerable GetDependencyTypes(Type type) + { + var dependencies = type.GetCustomAttributes(true).Select(dependsOn => dependsOn.Type).ToList(); + return dependencies.Concat(dependencies.SelectMany(GetDependencyTypes)); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Models/FeatureDescriptor.cs b/src/common/Elsa.Features/Models/FeatureDescriptor.cs new file mode 100644 index 0000000..0c8a025 --- /dev/null +++ b/src/common/Elsa.Features/Models/FeatureDescriptor.cs @@ -0,0 +1,57 @@ +using JetBrains.Annotations; + +namespace Elsa.Features.Models; + +/// +/// Represents a feature descriptor. +/// +[PublicAPI] +public class FeatureDescriptor +{ + /// + /// Initializes a new instance of the class. + /// + public FeatureDescriptor() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The name of the feature. + /// The namespace of the feature. + /// The display name for the feature. + /// The description of the feature. + public FeatureDescriptor(string name, string ns, string displayName, string? description = default) + { + Name = name; + Namespace = ns; + DisplayName = displayName; + Description = description ?? ""; + } + + /// + /// Gets or sets the name of the feature. + /// + public string Name { get; set; } = default!; + + /// + /// Gets or sets the namespace of the feature. + /// + public string Namespace { get; set; } = default!; + + /// + /// Gets the full name of the feature. + /// + public string FullName => $"{Namespace}.{Name}"; + + /// + /// The display name for the feature. + /// + public string DisplayName { get; set; } = default!; + + /// + /// The description of the feature. + /// + public string Description { get; set; } = ""; +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Services/IFeature.cs b/src/common/Elsa.Features/Services/IFeature.cs new file mode 100644 index 0000000..71c6ed5 --- /dev/null +++ b/src/common/Elsa.Features/Services/IFeature.cs @@ -0,0 +1,31 @@ +using JetBrains.Annotations; + +namespace Elsa.Features.Services; + +/// +/// Represents a feature. +/// +[UsedImplicitly(ImplicitUseTargetFlags.WithInheritors | ImplicitUseTargetFlags.Members)] +public interface IFeature +{ + /// + /// Gets the module that this feature belongs to. + /// + IModule Module { get; } + + /// + /// Configures the feature. + /// + void Configure(); + + /// + /// Configures the hosted services. + /// + void ConfigureHostedServices(); + + /// + /// Applies the feature by adding services to the service collection. + /// + void Apply(); + +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Services/IModule.cs b/src/common/Elsa.Features/Services/IModule.cs new file mode 100644 index 0000000..da070d3 --- /dev/null +++ b/src/common/Elsa.Features/Services/IModule.cs @@ -0,0 +1,55 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Elsa.Features.Services; + +/// +/// A thin abstraction on top of to help organize features and dependencies. +/// +public interface IModule +{ + /// + /// The service collection being populated. + /// + IServiceCollection Services { get; } + + /// + /// A dictionary into which features can stash away values for later use. + /// + IDictionary Properties { get; } + + /// + /// Returns true if a feature of the specified type has been configured. + /// + bool HasFeature() where T : class, IFeature; + + /// + /// Returns true if a feature of the specified type has been configured. + /// + bool HasFeature(Type featureType); + + /// + /// Creates and configures a feature of the specified type. + /// + T Configure(Action? configure = null) where T : class, IFeature; + + /// + /// Creates and configures a feature of the specified type. + /// + T Configure(Func factory, Action? configure = null) where T : class, IFeature; + + /// + /// Configures a using an optional priority to control in which order it will be registered with the service container. + /// + IModule ConfigureHostedService(int priority = 0) where T : class, IHostedService; + + /// + /// Configures a using an optional priority to control in which order it will be registered with the service container. + /// + IModule ConfigureHostedService(Type hostedServiceType, int priority = 0); + + /// + /// Will apply all configured features, causing the collection to be populated. + /// + void Apply(); +} \ No newline at end of file diff --git a/src/common/Elsa.Features/Services/InstalledFeatureRegistry.cs b/src/common/Elsa.Features/Services/InstalledFeatureRegistry.cs new file mode 100644 index 0000000..abd2e6d --- /dev/null +++ b/src/common/Elsa.Features/Services/InstalledFeatureRegistry.cs @@ -0,0 +1,19 @@ +using Elsa.Features.Contracts; +using Elsa.Features.Models; + +namespace Elsa.Features.Services; + +/// +public class InstalledFeatureRegistry : IInstalledFeatureRegistry +{ + private readonly Dictionary _descriptors = new(); + + /// + public void Add(FeatureDescriptor descriptor) => _descriptors[descriptor.FullName] = descriptor; + + /// + public IEnumerable List() => _descriptors.Values; + + /// + public FeatureDescriptor? Find(string fullName) => _descriptors.GetValueOrDefault(fullName); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Abstractions/ChannelBase.cs b/src/common/Elsa.Mediator/Abstractions/ChannelBase.cs new file mode 100644 index 0000000..bdc952f --- /dev/null +++ b/src/common/Elsa.Mediator/Abstractions/ChannelBase.cs @@ -0,0 +1,30 @@ +using System.Threading.Channels; + +namespace Elsa.Mediator.Abstractions; + +/// +/// A base class for channels. +/// +/// The type of the items in the channel. +public abstract class ChannelBase +{ + private readonly Channel _channel; + + /// + /// Initializes a new instance of the class. + /// + protected ChannelBase() + { + _channel = Channel.CreateUnbounded(); + } + + /// + /// Gets the writer for the channel. + /// + public ChannelWriter Writer => _channel.Writer; + + /// + /// Gets the reader for the channel. + /// + public ChannelReader Reader => _channel.Reader; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Channels/CommandsChannel.cs b/src/common/Elsa.Mediator/Channels/CommandsChannel.cs new file mode 100644 index 0000000..f80bbdb --- /dev/null +++ b/src/common/Elsa.Mediator/Channels/CommandsChannel.cs @@ -0,0 +1,10 @@ +using Elsa.Mediator.Abstractions; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Command; + +namespace Elsa.Mediator.Channels; + +/// +public class CommandsChannel : ChannelBase, ICommandsChannel +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Channels/JobsChannel.cs b/src/common/Elsa.Mediator/Channels/JobsChannel.cs new file mode 100644 index 0000000..179af27 --- /dev/null +++ b/src/common/Elsa.Mediator/Channels/JobsChannel.cs @@ -0,0 +1,10 @@ +using Elsa.Mediator.Abstractions; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Models; + +namespace Elsa.Mediator.Channels; + +/// +public class JobsChannel : ChannelBase, IJobsChannel +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Channels/NotificationsChannel.cs b/src/common/Elsa.Mediator/Channels/NotificationsChannel.cs new file mode 100644 index 0000000..6766736 --- /dev/null +++ b/src/common/Elsa.Mediator/Channels/NotificationsChannel.cs @@ -0,0 +1,10 @@ +using Elsa.Mediator.Abstractions; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Notification; + +namespace Elsa.Mediator.Channels; + +/// +public class NotificationsChannel : ChannelBase, INotificationsChannel +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/CommandStrategies/BackgroundStrategy.cs b/src/common/Elsa.Mediator/CommandStrategies/BackgroundStrategy.cs new file mode 100644 index 0000000..8d4210e --- /dev/null +++ b/src/common/Elsa.Mediator/CommandStrategies/BackgroundStrategy.cs @@ -0,0 +1,19 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Mediator.CommandStrategies; + +/// +/// Invokes command handlers in the background and does not wait for the result. +/// +public class BackgroundStrategy : ICommandStrategy +{ + /// + public async Task ExecuteAsync(CommandStrategyContext context) + { + var commandsChannel = context.ServiceProvider.GetRequiredService(); + await commandsChannel.Writer.WriteAsync(context.CommandContext, context.CancellationToken); + return default!; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/CommandStrategies/DefaultStrategy.cs b/src/common/Elsa.Mediator/CommandStrategies/DefaultStrategy.cs new file mode 100644 index 0000000..12bf6e2 --- /dev/null +++ b/src/common/Elsa.Mediator/CommandStrategies/DefaultStrategy.cs @@ -0,0 +1,23 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Extensions; + +namespace Elsa.Mediator.CommandStrategies; + +/// +/// Invokes command handlers using the default strategy. +/// +public class DefaultStrategy : ICommandStrategy +{ + /// + public async Task ExecuteAsync(CommandStrategyContext context) + { + var commandContext = context.CommandContext; + var command = commandContext.Command; + var commandType = command.GetType(); + var handleMethod = commandType.GetCommandHandlerMethod(); + var handler = context.Handler; + + return await handler.InvokeAsync(handleMethod, commandContext); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/CommandStrategy.cs b/src/common/Elsa.Mediator/CommandStrategy.cs new file mode 100644 index 0000000..f9dd08a --- /dev/null +++ b/src/common/Elsa.Mediator/CommandStrategy.cs @@ -0,0 +1,19 @@ +using Elsa.Mediator.CommandStrategies; + +namespace Elsa.Mediator; + +/// +/// Provides a set of strategies for publishing events. +/// +public static class CommandStrategy +{ + /// + /// Invokes command handlers in parallel and waits for the result. + /// + public static readonly DefaultStrategy Default = new(); + + /// + /// Invokes command handlers in the background and does not wait for the result. + /// + public static readonly BackgroundStrategy Background = new(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contexts/CommandStrategyContext.cs b/src/common/Elsa.Mediator/Contexts/CommandStrategyContext.cs new file mode 100644 index 0000000..9c4c9a6 --- /dev/null +++ b/src/common/Elsa.Mediator/Contexts/CommandStrategyContext.cs @@ -0,0 +1,13 @@ +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Command; + +namespace Elsa.Mediator.Contexts; + +/// +/// Represents a context for executing a command. +/// +/// The command context to execute. +/// The command handler. +/// The service provider to resolve services from. +/// The cancellation token. +public record CommandStrategyContext(CommandContext CommandContext, ICommandHandler Handler, IServiceProvider ServiceProvider, CancellationToken CancellationToken = default); \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contexts/NotificationStrategyContext.cs b/src/common/Elsa.Mediator/Contexts/NotificationStrategyContext.cs new file mode 100644 index 0000000..7872e1a --- /dev/null +++ b/src/common/Elsa.Mediator/Contexts/NotificationStrategyContext.cs @@ -0,0 +1,15 @@ +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Notification; +using Microsoft.Extensions.Logging; + +namespace Elsa.Mediator.Contexts; + +/// +/// Represents a context for publishing events. +/// +/// The notification to publish. +/// The handlers to publish the notification to. +/// The logger. +/// The service provider to resolve services from. +/// The cancellation token. +public record NotificationStrategyContext(NotificationContext NotificationContext, INotificationHandler[] Handlers, ILogger Logger, IServiceProvider ServiceProvider, CancellationToken CancellationToken = default); \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/ICommand.cs b/src/common/Elsa.Mediator/Contracts/ICommand.cs new file mode 100644 index 0000000..91978e5 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/ICommand.cs @@ -0,0 +1,20 @@ +using JetBrains.Annotations; + +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a command. +/// +[PublicAPI] +public interface ICommand +{ +} + +/// +/// Represents a command. +/// +/// The type of the result. +[PublicAPI] +public interface ICommand : ICommand +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/ICommandHandler.cs b/src/common/Elsa.Mediator/Contracts/ICommandHandler.cs new file mode 100644 index 0000000..add51bb --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/ICommandHandler.cs @@ -0,0 +1,34 @@ +using Elsa.Mediator.Models; + +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a command handler. +/// +public interface ICommandHandler +{ +} + +/// +/// Represents a command handler. +/// +/// The type of the command to handle. +/// The type of the result. +public interface ICommandHandler : ICommandHandler where TCommand : ICommand +{ + /// + /// Handles the command. + /// + /// The command to handle. + /// The cancellation token. + /// The result. + Task HandleAsync(TCommand command, CancellationToken cancellationToken); +} + +/// +/// Represents a command handler. +/// +/// The type of the command to handle. +public interface ICommandHandler : ICommandHandler where TCommand : ICommand +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/ICommandSender.cs b/src/common/Elsa.Mediator/Contracts/ICommandSender.cs new file mode 100644 index 0000000..5373afb --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/ICommandSender.cs @@ -0,0 +1,67 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Sends a command. +/// +public interface ICommandSender +{ + /// + /// Sends a command using the default strategy. + /// + Task SendAsync(ICommand command, CancellationToken cancellationToken = default); + + /// + /// Sends a command using the default strategy. + /// + /// The command to send. + /// Any headers to pass along. + /// The cancellation token. + /// The type of the result. + /// The result. + Task SendAsync(ICommand command, IDictionary headers, CancellationToken cancellationToken = default); + + /// + /// Sends a command using the specified strategy. + /// + /// The command to send. + /// The command strategy to use. + /// The cancellation token. + /// The type of the result. + /// The result. + Task SendAsync(ICommand command, ICommandStrategy strategy, CancellationToken cancellationToken = default); + + /// + /// Sends a command using the specified strategy. + /// + /// The command to send. + /// The command strategy to use. + /// Any headers to pass along. + /// The cancellation token. + /// The type of the result. + /// The result. + Task SendAsync(ICommand command, ICommandStrategy strategy, IDictionary headers, CancellationToken cancellationToken = default); + + /// + /// Sends a command using the default strategy. + /// + /// The command to send. + /// The cancellation token. + Task SendAsync(ICommand command, CancellationToken cancellationToken = default); + + /// + /// Sends a command using the specified strategy. + /// + /// The command to send. + /// The command strategy to use. + /// The cancellation token. + Task SendAsync(ICommand command, ICommandStrategy strategy, CancellationToken cancellationToken = default); + + /// + /// Sends a command using the specified strategy. + /// + /// The command to send. + /// The command strategy to use. + /// Any headers to pass along. + /// The cancellation token. + Task SendAsync(ICommand command, ICommandStrategy strategy, IDictionary headers, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/ICommandStrategy.cs b/src/common/Elsa.Mediator/Contracts/ICommandStrategy.cs new file mode 100644 index 0000000..3b619a5 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/ICommandStrategy.cs @@ -0,0 +1,15 @@ +using Elsa.Mediator.Contexts; + +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a strategy for executing commands. +/// +public interface ICommandStrategy +{ + /// + /// Executes a command. + /// + /// The context for executing the command. + Task ExecuteAsync(CommandStrategyContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/ICommandsChannel.cs b/src/common/Elsa.Mediator/Contracts/ICommandsChannel.cs new file mode 100644 index 0000000..280df94 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/ICommandsChannel.cs @@ -0,0 +1,20 @@ +using System.Threading.Channels; +using Elsa.Mediator.Middleware.Command; + +namespace Elsa.Mediator.Contracts; + +/// +/// A channel that can be used to enqueue commands. +/// +public interface ICommandsChannel +{ + /// + /// Gets the writer for the commands queue. + /// + ChannelWriter Writer { get; } + + /// + /// Gets the reader for the commands queue. + /// + ChannelReader Reader { get; } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IConsumer.cs b/src/common/Elsa.Mediator/Contracts/IConsumer.cs new file mode 100644 index 0000000..f9a9f5f --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IConsumer.cs @@ -0,0 +1,15 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a consumer of a given message type. +/// +/// The type of the message to consume. +public interface IConsumer +{ + /// + /// Consumes the given message. + /// + /// The message to consume. + /// The cancellation token. + ValueTask ConsumeAsync(T message, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IEventPublishingStrategy.cs b/src/common/Elsa.Mediator/Contracts/IEventPublishingStrategy.cs new file mode 100644 index 0000000..ba69147 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IEventPublishingStrategy.cs @@ -0,0 +1,15 @@ +using Elsa.Mediator.Contexts; + +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a strategy for publishing events. +/// +public interface IEventPublishingStrategy +{ + /// + /// Publishes an event. + /// + /// The context for publishing the event. + Task PublishAsync(NotificationStrategyContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IJobQueue.cs b/src/common/Elsa.Mediator/Contracts/IJobQueue.cs new file mode 100644 index 0000000..c29fef9 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IJobQueue.cs @@ -0,0 +1,39 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Manages jobs. +/// +public interface IJobQueue +{ + /// + /// Creates a pending job. The caller must use the returned ID to schedule the job for execution. + /// + string Create(Func job); + + /// + /// Enqueues a job for execution. + /// + /// The ID of the job to enqueue. + void Enqueue(string jobId); + + /// + /// Enqueues a job for execution. + /// + /// The job to enqueue. + /// The ID of the job. + string Enqueue(Func job); + + /// + /// Dequeues a job. + /// + /// The ID of the job to dequeue. + /// true if the job was dequeued; otherwise, false. + bool Dequeue(string jobId); + + /// + /// Cancels a job. + /// + /// The ID of the job to cancel. + /// true if the job was cancelled; otherwise, false. + bool Cancel(string jobId); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IJobsChannel.cs b/src/common/Elsa.Mediator/Contracts/IJobsChannel.cs new file mode 100644 index 0000000..6b24cbc --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IJobsChannel.cs @@ -0,0 +1,20 @@ +using System.Threading.Channels; +using Elsa.Mediator.Models; + +namespace Elsa.Mediator.Contracts; + +/// +/// A channel that can be used to enqueue jobs. +/// +public interface IJobsChannel +{ + /// + /// Gets the writer for the job queue. + /// + ChannelWriter Writer { get; } + + /// + /// Gets the reader for the job queue. + /// + ChannelReader Reader { get; } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IMediator.cs b/src/common/Elsa.Mediator/Contracts/IMediator.cs new file mode 100644 index 0000000..3fee967 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IMediator.cs @@ -0,0 +1,8 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a mediator that can send requests, commands and publish events. +/// +public interface IMediator : IRequestSender, ICommandSender, INotificationSender +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/INotification.cs b/src/common/Elsa.Mediator/Contracts/INotification.cs new file mode 100644 index 0000000..7726080 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/INotification.cs @@ -0,0 +1,8 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a notification. +/// +public interface INotification +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/INotificationHandler.cs b/src/common/Elsa.Mediator/Contracts/INotificationHandler.cs new file mode 100644 index 0000000..df9e90c --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/INotificationHandler.cs @@ -0,0 +1,22 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a notification handler. +/// +public interface INotificationHandler +{ +} + +/// +/// Represents a notification handler. +/// +/// The type of the notification. +public interface INotificationHandler : INotificationHandler where T : INotification +{ + /// + /// Handles the given notification. + /// + /// The notification to handle. + /// The cancellation token. + Task HandleAsync(T notification, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/INotificationSender.cs b/src/common/Elsa.Mediator/Contracts/INotificationSender.cs new file mode 100644 index 0000000..75c2fba --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/INotificationSender.cs @@ -0,0 +1,24 @@ +using Elsa.Mediator.PublishingStrategies; + +namespace Elsa.Mediator.Contracts; + +/// +/// Publishes notifications. +/// +public interface INotificationSender +{ + /// + /// Publishes the given notification. + /// + /// The notification to publish. + /// The cancellation token. + Task SendAsync(INotification notification, CancellationToken cancellationToken = default); + + /// + /// Publishes the given notification. + /// + /// The notification to publish. + /// + /// The cancellation token. + Task SendAsync(INotification notification, IEventPublishingStrategy? strategy, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/INotificationsChannel.cs b/src/common/Elsa.Mediator/Contracts/INotificationsChannel.cs new file mode 100644 index 0000000..59f2544 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/INotificationsChannel.cs @@ -0,0 +1,20 @@ +using System.Threading.Channels; +using Elsa.Mediator.Middleware.Notification; + +namespace Elsa.Mediator.Contracts; + +/// +/// A channel that can be used to enqueue notifications. +/// +public interface INotificationsChannel +{ + /// + /// Gets the writer for the notification queue. + /// + ChannelWriter Writer { get; } + + /// + /// Gets the reader for the notification queue. + /// + ChannelReader Reader { get; } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IRequest.cs b/src/common/Elsa.Mediator/Contracts/IRequest.cs new file mode 100644 index 0000000..4693cee --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IRequest.cs @@ -0,0 +1,16 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a request. +/// +public interface IRequest +{ +} + +/// +/// Represents a request. +/// +/// The type of the response. +public interface IRequest : IRequest +{ +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IRequestHandler.cs b/src/common/Elsa.Mediator/Contracts/IRequestHandler.cs new file mode 100644 index 0000000..97099e0 --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IRequestHandler.cs @@ -0,0 +1,24 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a request handler. +/// +public interface IRequestHandler +{ +} + +/// +/// Represents a request handler. +/// +/// The type of the request. +/// The type of the response. +public interface IRequestHandler : IRequestHandler where TRequest : IRequest? +{ + /// + /// Handles the given request. + /// + /// The request to handle. + /// The cancellation token. + /// The response. + Task HandleAsync(TRequest request, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Contracts/IRequestSender.cs b/src/common/Elsa.Mediator/Contracts/IRequestSender.cs new file mode 100644 index 0000000..82c96fc --- /dev/null +++ b/src/common/Elsa.Mediator/Contracts/IRequestSender.cs @@ -0,0 +1,16 @@ +namespace Elsa.Mediator.Contracts; + +/// +/// Represents a request sender. +/// +public interface IRequestSender +{ + /// + /// Sends a request. + /// + /// The request to send. + /// The cancellation token. + /// The type of the response. + /// The response. + Task SendAsync(IRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Elsa.Mediator.csproj b/src/common/Elsa.Mediator/Elsa.Mediator.csproj new file mode 100644 index 0000000..a64218a --- /dev/null +++ b/src/common/Elsa.Mediator/Elsa.Mediator.csproj @@ -0,0 +1,17 @@ + + + + + Provides a mediator service inspired by MediatR. + + elsa module common mediator + + + + + + + + + + \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Extensions/DependencyInjectionExtensions.cs b/src/common/Elsa.Mediator/Extensions/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..68ea123 --- /dev/null +++ b/src/common/Elsa.Mediator/Extensions/DependencyInjectionExtensions.cs @@ -0,0 +1,228 @@ +using System.Reflection; +using System.Threading.Channels; +using Elsa.Mediator.Channels; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.HostedServices; +using Elsa.Mediator.Middleware.Command; +using Elsa.Mediator.Middleware.Command.Contracts; +using Elsa.Mediator.Middleware.Notification; +using Elsa.Mediator.Middleware.Notification.Contracts; +using Elsa.Mediator.Middleware.Request; +using Elsa.Mediator.Middleware.Request.Contracts; +using Elsa.Mediator.Models; +using Elsa.Mediator.Options; +using Elsa.Mediator.Services; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; + +// ReSharper disable once CheckNamespace +namespace Microsoft.Extensions.DependencyInjection; + +/// +/// Adds mediator services to the . +/// +[PublicAPI] +public static class DependencyInjectionExtensions +{ + /// + /// Adds mediator services to the . + /// + public static IServiceCollection AddMediator(this IServiceCollection services, Action? configure = default) + { + services.Configure(configure ?? (_ => { })); + + return services + .AddScoped() + .AddScoped(sp => sp.GetRequiredService()) + .AddScoped(sp => sp.GetRequiredService()) + .AddScoped(sp => sp.GetRequiredService()) + .AddSingleton() + .AddSingleton() + .AddSingleton() + ; + } + + /// + /// Adds mediator hosted services to the . + /// + /// + /// + public static IServiceCollection AddMediatorHostedServices(this IServiceCollection services) + { + return services + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddHostedService() + .AddHostedService() + .AddHostedService(); + } + + /// + /// Adds a to the and a hosted service that continuously reads from the channel and executes each received message. + /// + public static IServiceCollection AddMessageChannel(this IServiceCollection services, int workerCount = 1) where T : notnull + { + services.AddSingleton>(_ => CreateChannel()); + + services.AddHostedService(sp => + { + var channel = sp.GetRequiredService>(); + var consumers = sp.GetServices>(); + var logger = sp.GetRequiredService>>(); + return new MessageProcessorHostedService(workerCount, channel, consumers, logger); + }); + return services; + } + + /// + /// Adds a channel consumer. + /// + public static IServiceCollection AddMessageConsumer(this IServiceCollection services) where TConsumer : class, IConsumer where T : notnull + { + return services.AddScoped, TConsumer>(); + } + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddCommandHandler(this IServiceCollection services) where THandler : class, ICommandHandler => + services.AddScoped(); + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddCommandHandler(this IServiceCollection services) + where THandler : class, ICommandHandler where TCommand : ICommand => + services.AddCommandHandler(); + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddCommandHandler(this IServiceCollection services) + where THandler : class, ICommandHandler + where TCommand : ICommand + { + return services.AddScoped(); + } + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddNotificationHandler(this IServiceCollection services) + where THandler : class, INotificationHandler + { + return services.AddScoped(); + } + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddNotificationHandler(this IServiceCollection services) + where THandler : class, INotificationHandler + where TNotification : INotification => + services.AddScoped(); + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddNotificationHandler(this IServiceCollection services, Func factory) + where THandler : class, INotificationHandler + where TNotification : INotification => + services.AddScoped(factory); + + /// + /// Registers a with the service container. + /// + public static IServiceCollection AddRequestHandler(this IServiceCollection services) + where THandler : class, IRequestHandler + where TRequest : IRequest? + { + return services.AddScoped(); + } + + /// + /// Registers all handlers from the assembly of the specified TMarker type with the service container. + /// + public static IServiceCollection AddHandlersFrom(this IServiceCollection services) => services.AddHandlersFrom(typeof(TMarker)); + + /// + /// Registers all handlers from the assembly of the specified marker type with the service container. + /// + public static IServiceCollection AddHandlersFrom(this IServiceCollection services, Type markerType) => services.AddHandlersFrom(markerType.Assembly); + + /// + /// Registers all handlers from the specified assembly with the service container. + /// + public static IServiceCollection AddHandlersFrom(this IServiceCollection services, Assembly assembly) + { + return services + .AddNotificationHandlersFrom(assembly) + .AddRequestHandlersFrom(assembly) + .AddCommandHandlersFrom(assembly); + } + + /// + /// Registers all handlers from the assembly of the specified TMarker type with the service container. + /// + public static IServiceCollection AddNotificationHandlersFrom(this IServiceCollection services) => services.AddHandlersFromInternal(typeof(TMarker)); + + /// + /// Registers all handlers from the assembly of the specified marker type with the service container. + /// + public static IServiceCollection AddNotificationHandlersFrom(this IServiceCollection services, Type markerType) => services.AddHandlersFromInternal(markerType); + + /// + /// Registers all handlers from the specified assembly with the service container. + /// + public static IServiceCollection AddNotificationHandlersFrom(this IServiceCollection services, Assembly assembly) => services.AddHandlersFromInternal(assembly); + + /// + /// Registers all handlers from the assembly of the specified TMarker type with the service container. + /// + public static IServiceCollection AddRequestHandlersFrom(this IServiceCollection services) => services.AddHandlersFromInternal(typeof(TMarker)); + + /// + /// Registers all handlers from the assembly of the specified marker type with the service container. + /// + public static IServiceCollection AddRequestHandlersFrom(this IServiceCollection services, Type markerType) => services.AddHandlersFromInternal(markerType); + + /// + /// Registers all handlers from the specified assembly with the service container. + /// + public static IServiceCollection AddRequestHandlersFrom(this IServiceCollection services, Assembly assembly) => services.AddHandlersFromInternal(assembly); + + /// + /// Registers all handlers from the assembly of the specified TMarker type with the service container. + /// + public static IServiceCollection AddCommandHandlersFrom(this IServiceCollection services) => services.AddHandlersFromInternal(typeof(TMarker)); + + /// + /// Registers all handlers from the assembly of the specified marker type with the service container. + /// + public static IServiceCollection AddCommandHandlersFrom(this IServiceCollection services, Type markerType) => services.AddHandlersFromInternal(markerType); + + /// + /// Registers all handlers from the specified assembly with the service container. + /// + public static IServiceCollection AddCommandHandlersFrom(this IServiceCollection services, Assembly assembly) => services.AddHandlersFromInternal(assembly); + + private static IServiceCollection AddHandlersFromInternal(this IServiceCollection services) => services.AddHandlersFromInternal(typeof(TMarker)); + private static IServiceCollection AddHandlersFromInternal(this IServiceCollection services, Type assemblyMarkerType) => services.AddHandlersFromInternal(assemblyMarkerType.Assembly); + + private static IServiceCollection AddHandlersFromInternal(this IServiceCollection services, Assembly assembly) + { + var serviceType = typeof(TService); + var types = assembly.DefinedTypes.Where(x => serviceType.IsAssignableFrom(x)); + + foreach (var type in types) + services.AddScoped(serviceType, type); + + return services; + } + + private static Channel CreateChannel() => Channel.CreateUnbounded(new UnboundedChannelOptions()); + private static ChannelReader CreateChannelReader(IServiceProvider serviceProvider) => serviceProvider.GetRequiredService>().Reader; + private static ChannelWriter CreateChannelWriter(IServiceProvider serviceProvider) => serviceProvider.GetRequiredService>().Writer; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Extensions/HandlerExtensions.cs b/src/common/Elsa.Mediator/Extensions/HandlerExtensions.cs new file mode 100644 index 0000000..5ac381c --- /dev/null +++ b/src/common/Elsa.Mediator/Extensions/HandlerExtensions.cs @@ -0,0 +1,67 @@ +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Command; +using Elsa.Mediator.Middleware.Notification; +using Elsa.Mediator.Models; + +namespace Elsa.Mediator.Extensions; + +/// +/// Contains helper methods for invoking notification handlers. +/// +public static class HandlerExtensions +{ + /// + /// Gets the handle method for a notification handler of the given notification type. + /// + /// The notification type. + /// The handle method. + public static MethodInfo GetNotificationHandlerMethod(this Type notificationType) + { + var handlerType = typeof(INotificationHandler<>).MakeGenericType(notificationType); + return handlerType.GetMethod("HandleAsync")!; + } + + /// + /// Gets the handle method for a command handler of the given command type. + /// + /// The command type. + /// The handle method. + public static MethodInfo GetCommandHandlerMethod([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)] this Type commandType) + { + var commandTypeInterfaces = commandType.GetInterfaces(); + var commandTypeInterface = commandTypeInterfaces.FirstOrDefault(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(ICommand<>)); + var resultType = commandTypeInterface?.GetGenericArguments()[0] ?? typeof(Unit); + var handlerType = typeof(ICommandHandler<,>).MakeGenericType(commandType, resultType); + return handlerType.GetMethod("HandleAsync")!; + } + + /// + /// Invokes the given handler for the given notification. + /// + /// The handler to invoke. + /// The handle method. + /// The notification to handle. + /// The cancellation token. + public static Task InvokeAsync(this INotificationHandler handler, MethodBase handleMethod, NotificationContext notificationContext) + { + var notification = notificationContext.Notification; + var cancellationToken = notificationContext.CancellationToken; + return (Task)handleMethod.Invoke(handler, [notification, cancellationToken])!; + } + + /// + /// Invokes the given handler for the given command. + /// + /// The handler to invoke. + /// The handle method. + /// The command to handle. + public static Task InvokeAsync(this ICommandHandler handler, MethodBase handleMethod, CommandContext commandContext) + { + var command = commandContext.Command; + var cancellationToken = commandContext.CancellationToken; + var task = (Task)handleMethod.Invoke(handler, [command, cancellationToken])!; + return task; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Extensions/MediatorExtensions.cs b/src/common/Elsa.Mediator/Extensions/MediatorExtensions.cs new file mode 100644 index 0000000..e1b3076 --- /dev/null +++ b/src/common/Elsa.Mediator/Extensions/MediatorExtensions.cs @@ -0,0 +1,55 @@ +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Options; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides a set of extension methods for . +/// +public static class MediatorExtensions +{ + /// + /// Sends a notification using the default notification strategy configured via . + /// + /// The mediator. + /// The notification to send. + /// The cancellation token. + public static async Task SendAsync(this IMediator mediator, INotification notification, CancellationToken cancellationToken = default) + { + await mediator.SendAsync(notification, default, cancellationToken); + } + + /// + /// Sends a notification using the default notification strategy configured via . + /// + /// The publisher. + /// The notification to send. + /// The cancellation token. + public static async Task SendAsync(this INotificationSender publisher, INotification notification, CancellationToken cancellationToken = default) + { + await publisher.SendAsync(notification, default, cancellationToken); + } + + /// + /// Sends a command using the default command strategy configured via . + /// + /// The mediator. + /// The command to send. + /// The cancellation token. + public static async Task SendAsync(this IMediator mediator, ICommand command, CancellationToken cancellationToken = default) + { + await mediator.SendAsync(command, default, cancellationToken); + } + + /// + /// Sends a command using the default command strategy configured via . + /// + /// The command sender. + /// The command to send. + /// The cancellation token. + public static async Task SendAsync(this ICommandSender commandSender, ICommand command, CancellationToken cancellationToken = default) + { + await commandSender.SendAsync(command, default, cancellationToken); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/FodyWeavers.xml b/src/common/Elsa.Mediator/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.Mediator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.Mediator/HostedServices/BackgroundCommandSenderHostedService.cs b/src/common/Elsa.Mediator/HostedServices/BackgroundCommandSenderHostedService.cs new file mode 100644 index 0000000..f0606a1 --- /dev/null +++ b/src/common/Elsa.Mediator/HostedServices/BackgroundCommandSenderHostedService.cs @@ -0,0 +1,91 @@ +using System.Threading.Channels; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Command; +using Elsa.Mediator.Options; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Elsa.Mediator.HostedServices; + +/// +/// Continuously reads from a channel to which commands can be sent, executing each received command. +/// +public class BackgroundCommandSenderHostedService : BackgroundService +{ + private readonly int _workerCount; + private readonly ICommandsChannel _commandsChannel; + private readonly IServiceScopeFactory _scopeFactory; + private readonly List> _outputs; + private readonly ILogger _logger; + + /// + public BackgroundCommandSenderHostedService(IOptions options, ICommandsChannel commandsChannel, IServiceScopeFactory scopeFactory, ILogger logger) + { + _workerCount = options.Value.CommandWorkerCount; + _commandsChannel = commandsChannel; // The shared input channel for all commands + _scopeFactory = scopeFactory; + _logger = logger; + _outputs = new(_workerCount); // Prepare a list to hold worker-specific channels + } + + /// + protected override async Task ExecuteAsync(CancellationToken cancellationToken) + { + var index = 0; // Used for round-robin distribution of work + + // Set up worker channels and start background tasks for each worker + for (var i = 0; i < _workerCount; i++) + { + var output = Channel.CreateUnbounded(); + _outputs.Add(output); + // Start a background task that processes commands from this worker's channel + _ = ReadOutputAsync(output, cancellationToken); + } + + // Main dispatcher loop: read from the input channel and distribute to worker channels + await foreach (var commandContext in _commandsChannel.Reader.ReadAllAsync(cancellationToken)) + { + var output = _outputs[index]; + await output.Writer.WriteAsync(commandContext, cancellationToken); + // Round-robin distribution - move to next worker + index = (index + 1) % _workerCount; + } + + // If the input channel is completed, complete all worker channels + foreach (var output in _outputs) + output.Writer.Complete(); + } + + private async Task ReadOutputAsync(Channel output, CancellationToken cancellationToken) + { + // Worker task: process commands from the worker's channel + await foreach (var commandContext in output.Reader.ReadAllAsync(cancellationToken)) + { + try + { + // Create a fresh scope for each command to ensure proper service lifetime + using var scope = _scopeFactory.CreateScope(); + var commandSender = scope.ServiceProvider.GetRequiredService(); + + // Link the service cancellation token with the command's token to ensure proper cancellation + using var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource( + cancellationToken, + commandContext.CancellationToken); + + // Process the command using the command sender service with the linked token + await commandSender.SendAsync( + commandContext.Command, + CommandStrategy.Default, + commandContext.Headers, + linkedTokenSource.Token); + } + catch (Exception e) + { + // Log errors but continue processing other commands + _logger.LogError(e, "An unhandled exception occurred while processing the queue"); + } + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/HostedServices/BackgroundEventPublisherHostedService.cs b/src/common/Elsa.Mediator/HostedServices/BackgroundEventPublisherHostedService.cs new file mode 100644 index 0000000..384b091 --- /dev/null +++ b/src/common/Elsa.Mediator/HostedServices/BackgroundEventPublisherHostedService.cs @@ -0,0 +1,97 @@ +using System.Threading.Channels; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Notification; +using Elsa.Mediator.Options; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Elsa.Mediator.HostedServices; + +/// +/// Continuously reads from a channel to which notifications can be sent, publishing each received notification. +/// +public class BackgroundEventPublisherHostedService : BackgroundService +{ + private readonly int _workerCount; + private readonly INotificationsChannel _notificationsChannel; + private readonly IServiceScopeFactory _scopeFactory; + private readonly List> _outputs; + private readonly ILogger _logger; + + /// + public BackgroundEventPublisherHostedService(IOptions options, INotificationsChannel notificationsChannel, IServiceScopeFactory scopeFactory, ILogger logger) + { + _workerCount = options.Value.NotificationWorkerCount; + _notificationsChannel = notificationsChannel; + _scopeFactory = scopeFactory; + _logger = logger; + _outputs = new(_workerCount); + } + + /// + protected override async Task ExecuteAsync(CancellationToken cancellationToken) + { + // Index to round-robin distribute notifications across worker channels + var index = 0; + + using var scope = _scopeFactory.CreateScope(); + var notificationSender = scope.ServiceProvider.GetRequiredService(); + + // Create multiple output channels and start worker tasks for parallel processing + for (var i = 0; i < _workerCount; i++) + { + var output = Channel.CreateUnbounded(); + _outputs.Add(output); + // Start a background task to process notifications from this output channel + _ = ReadOutputAsync(output, notificationSender, cancellationToken); + } + + var channelReader = _notificationsChannel.Reader; + + // Continuously read notifications from the input channel and distribute them to worker channels + // using round-robin distribution for load balancing + await foreach (var notification in channelReader.ReadAllAsync(cancellationToken)) + { + var output = _outputs[index]; + await output.Writer.WriteAsync(notification, cancellationToken); + // Move to the next worker in a circular fashion + index = (index + 1) % _workerCount; + } + + // When the input channel is completed, complete all output channels + foreach (var output in _outputs) + { + output.Writer.Complete(); + } + } + + /// + /// Processes notifications from an output channel asynchronously. + /// + /// The channel to read notifications from + /// The service used to send notifications + /// Cancellation token from the hosted service + private async Task ReadOutputAsync(Channel output, INotificationSender notificationSender, CancellationToken cancellationToken) + { + await foreach (var notificationContext in output.Reader.ReadAllAsync(cancellationToken)) + { + try + { + var notification = notificationContext.Notification; + // Link the cancellation tokens so that cancellation can happen from either source + using var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, notificationContext.CancellationToken); + await notificationSender.SendAsync(notification, NotificationStrategy.Sequential, linkedTokenSource.Token); + } + catch (OperationCanceledException e) + { + _logger.LogDebug(e, "An operation was cancelled while processing the queue"); + } + catch (Exception e) + { + _logger.LogError(e, "An unhandled exception occured while processing the queue"); + } + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/HostedServices/JobRunnerHostedService.cs b/src/common/Elsa.Mediator/HostedServices/JobRunnerHostedService.cs new file mode 100644 index 0000000..14af18b --- /dev/null +++ b/src/common/Elsa.Mediator/HostedServices/JobRunnerHostedService.cs @@ -0,0 +1,71 @@ +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Options; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Elsa.Mediator.HostedServices; + +/// +/// A hosted service that runs jobs. +/// +public class JobRunnerHostedService : BackgroundService +{ + private readonly int _workerCount; + private readonly IJobsChannel _jobsChannel; + private readonly ILogger _logger; + + /// + public JobRunnerHostedService(IOptions options, IJobsChannel jobsChannel, ILogger logger) + { + _workerCount = options.Value.JobWorkerCount; + _jobsChannel = jobsChannel; + _logger = logger; + } + + /// + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + // Create an array of worker tasks to process jobs in parallel + var workers = new Task[_workerCount]; + + // Start multiple workers (tasks) to process jobs concurrently + for (var i = 0; i < _workerCount; i++) + workers[i] = ProcessJobsAsync(stoppingToken); + + // Wait for all worker tasks to complete (typically when the application is shutting down) + await Task.WhenAll(workers); + } + + /// + /// Continuously processes jobs from the job channel until cancellation is requested. + /// + /// Cancellation token from the hosted service + private async Task ProcessJobsAsync(CancellationToken stoppingToken) + { + // Process all jobs from the channel until it's completed or cancellation is requested + await foreach (var jobItem in _jobsChannel.Reader.ReadAllAsync(stoppingToken)) + { + try + { + // Link the cancellation tokens so that cancellation can happen from either source + using var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(stoppingToken, jobItem.CancellationTokenSource.Token); + await jobItem.Action(linkedTokenSource.Token); + _logger.LogInformation("Worker {CurrentTaskId} processed job {JobId}", Task.CurrentId, jobItem.JobId); + } + catch (OperationCanceledException) + { + _logger.LogInformation("Job {JobId} was canceled", jobItem.JobId); + } + catch (Exception ex) + { + _logger.LogError(ex, "Job {JobId} failed", jobItem.JobId); + } + finally + { + // Notify that the job has completed (whether successfully or not) + jobItem.OnJobCompleted(jobItem.JobId); + } + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/HostedServices/MessageProcessorHostedService.cs b/src/common/Elsa.Mediator/HostedServices/MessageProcessorHostedService.cs new file mode 100644 index 0000000..9f99961 --- /dev/null +++ b/src/common/Elsa.Mediator/HostedServices/MessageProcessorHostedService.cs @@ -0,0 +1,119 @@ +using System.Threading.Channels; +using Elsa.Mediator.Contracts; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace Elsa.Mediator.HostedServices; + +/// +/// Continuously reads from a channel to which commands can be sent, executing each received command. +/// +public class MessageProcessorHostedService : BackgroundService where T : notnull +{ + private readonly int _workerCount; + private readonly Channel _channel; + private readonly IEnumerable> _consumers; + private readonly ILogger _logger; + private readonly List> _workers; + + /// + // ReSharper disable once ContextualLoggerProblem + public MessageProcessorHostedService(int workerCount, Channel channel, IEnumerable> consumers, ILogger> logger) + { + _workerCount = workerCount; + _channel = channel; + _consumers = consumers; + _logger = logger; + _workers = new List>(workerCount); + } + + /// + protected override async Task ExecuteAsync(CancellationToken cancellationToken) + { + var index = 0; + + for (var i = 0; i < _workerCount; i++) + { + var worker = new MessageWorker(Channel.CreateUnbounded(), _consumers, _logger); + _workers.Add(worker); + _ = worker.StartAsync(cancellationToken); + } + + await foreach (var message in _channel.Reader.ReadAllAsync(cancellationToken)) + { + var worker = _workers[index]; + await worker.DeliverMessageAsync(message, cancellationToken); + index = (index + 1) % _workerCount; + } + + foreach (var worker in _workers) + worker.Complete(); + + _workers.Clear(); + } +} + +/// +/// Represents a worker that continuously reads from a channel and processes each received message. +/// +/// The type of message to process. +public class MessageWorker where T : notnull +{ + private readonly Channel _channel; + private readonly IEnumerable> _consumers; + private readonly ILogger _logger; + + /// + /// Initializes a new instance of the class. + /// + /// The channel to read from. + /// The consumers that will process each received message. + /// The logger. + public MessageWorker(Channel channel, IEnumerable> consumers, ILogger logger) + { + _channel = channel; + _consumers = consumers; + _logger = logger; + } + + /// + /// Continuously reads from the channel and processes each received message. + /// + /// The cancellation token. + public async Task StartAsync(CancellationToken cancellationToken) + { + await foreach (var message in _channel.Reader.ReadAllAsync(cancellationToken)) + foreach (var consumer in _consumers) + await InvokeConsumerAsync(consumer, message, cancellationToken); + } + + /// + /// Delivers a message to the channel. + /// + /// The message to deliver. + /// The cancellation token. + public async Task DeliverMessageAsync(T message, CancellationToken cancellationToken) + { + await _channel.Writer.WriteAsync(message, cancellationToken); + } + + /// + /// Completes the channel. + /// + public void Complete() + { + _channel.Writer.Complete(); + } + + private async Task InvokeConsumerAsync(IConsumer consumer, T message, CancellationToken cancellationToken) + { + try + { + await consumer.ConsumeAsync(message, cancellationToken); + } + catch (Exception ex) + { + _logger.LogError(ex, "An error occurred while invoking consumer {ConsumerType} for message {MessageType}", consumer.GetType(), message.GetType()); + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/CommandContext.cs b/src/common/Elsa.Mediator/Middleware/Command/CommandContext.cs new file mode 100644 index 0000000..f043849 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/CommandContext.cs @@ -0,0 +1,57 @@ +using Elsa.Mediator.Contracts; + +namespace Elsa.Mediator.Middleware.Command; + +/// +/// Provides context for a command. +/// +public class CommandContext +{ + /// + /// Initializes a new instance of the class. + /// + public CommandContext(ICommand command, ICommandStrategy commandStrategy, Type resultType, IDictionary headers, IServiceProvider serviceProvider, CancellationToken cancellationToken) + { + Command = command; + CommandStrategy = commandStrategy; + ResultType = resultType; + Headers = headers; + ServiceProvider = serviceProvider; + CancellationToken = cancellationToken; + } + + /// + /// Gets the command. + /// + public ICommand Command { get; init; } + + /// + /// Gets the command strategy. + /// + public ICommandStrategy CommandStrategy { get; } + + /// + /// Gets or sets the headers associated with the command context. + /// + public IDictionary Headers { get; } + + /// + /// Gets the service provider used to resolve services for the command context. + /// + public IServiceProvider ServiceProvider { get; } + + /// + /// Gets the result type. + /// + public Type ResultType { get; init; } + + /// + /// Gets the cancellation token. + /// + public CancellationToken CancellationToken { get; init; } + + /// + /// Gets or sets the result. + /// + public object? Result { get; set; } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/CommandMiddlewareDelegate.cs b/src/common/Elsa.Mediator/Middleware/Command/CommandMiddlewareDelegate.cs new file mode 100644 index 0000000..450bc04 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/CommandMiddlewareDelegate.cs @@ -0,0 +1,6 @@ +namespace Elsa.Mediator.Middleware.Command; + +/// +/// Represents a command middleware delegate. +/// +public delegate ValueTask CommandMiddlewareDelegate(CommandContext context); \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/CommandPipeline.cs b/src/common/Elsa.Mediator/Middleware/Command/CommandPipeline.cs new file mode 100644 index 0000000..3af4df1 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/CommandPipeline.cs @@ -0,0 +1,33 @@ +using Elsa.Mediator.Middleware.Command.Contracts; + +namespace Elsa.Mediator.Middleware.Command; + +/// +public class CommandPipeline : ICommandPipeline +{ + private readonly CommandPipelineBuilder _builder; + private CommandMiddlewareDelegate _pipeline = null!; + + /// + /// Constructor. + /// + public CommandPipeline(IServiceProvider serviceProvider) + { + _builder = new(serviceProvider); + Setup(x => x.UseCommandInvoker().UseCommandLogging()); + } + + /// + public CommandMiddlewareDelegate Pipeline => _pipeline; + + /// + public CommandMiddlewareDelegate Setup(Action? setup = null) + { + setup?.Invoke(_builder); + _pipeline = _builder.Build(); + return _pipeline; + } + + /// + public async Task InvokeAsync(CommandContext context) => await Pipeline(context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/CommandPipelineBuilder.cs b/src/common/Elsa.Mediator/Middleware/Command/CommandPipelineBuilder.cs new file mode 100644 index 0000000..94012e6 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/CommandPipelineBuilder.cs @@ -0,0 +1,77 @@ +using Elsa.Mediator.Middleware.Command.Contracts; + +namespace Elsa.Mediator.Middleware.Command; + +/// +public class CommandPipelineBuilder : ICommandPipelineBuilder +{ + private const string ServicesKey = "mediator.Services"; + private readonly List> _components = new(); + + /// + /// Initializes a new instance of the class. + /// + public CommandPipelineBuilder(IServiceProvider serviceProvider) + { + ApplicationServices = serviceProvider; + } + + /// + public IDictionary Properties { get; } = new Dictionary(); + + /// + public IServiceProvider ApplicationServices + { + get => GetProperty(ServicesKey)!; + set => SetProperty(ServicesKey, value); + } + + /// + public ICommandPipelineBuilder Use(Func middleware) + { + _components.Add(middleware); + return this; + } + + /// + public ICommandPipelineBuilder Use(int index, Func middleware) + { + _components.Insert(index, middleware); + return this; + } + + /// + public ICommandPipelineBuilder Remove(Func middleware) + { + _components.Remove(middleware); + return this; + } + + /// + public ICommandPipelineBuilder RemoveAt(int index) + { + _components.RemoveAt(index); + return this; + } + + /// + public ICommandPipelineBuilder Clear() + { + _components.Clear(); + return this; + } + + /// + public CommandMiddlewareDelegate Build() + { + CommandMiddlewareDelegate pipeline = _ => new(); + + for (var i = _components.Count - 1; i >= 0; i--) + pipeline = _components[i](pipeline); + + return pipeline; + } + + private T? GetProperty(string key) => Properties.TryGetValue(key, out var value) ? (T?)value : default; + private void SetProperty(string key, T value) => Properties[key] = value; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/CommandPipelineBuilderExtensions.cs b/src/common/Elsa.Mediator/Middleware/Command/CommandPipelineBuilderExtensions.cs new file mode 100644 index 0000000..cfa1793 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/CommandPipelineBuilderExtensions.cs @@ -0,0 +1,24 @@ +using Elsa.Mediator.Middleware.Command.Contracts; +using Elsa.Mediator.Middleware.Command.Components; + +namespace Elsa.Mediator.Middleware.Command; + +/// +/// Provides extension methods for . +/// +public static class CommandPipelineBuilderExtensions +{ + /// + /// Adds the to the pipeline. + /// + /// The pipeline builder. + /// The pipeline builder. + public static ICommandPipelineBuilder UseCommandInvoker(this ICommandPipelineBuilder builder) => builder.UseMiddleware(); + + /// + /// Adds the to the pipeline. + /// + /// The pipeline builder. + /// The pipeline builder. + public static ICommandPipelineBuilder UseCommandLogging(this ICommandPipelineBuilder builder) => builder.UseMiddleware(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/Components/CommandHandlerInvokerMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Command/Components/CommandHandlerInvokerMiddleware.cs new file mode 100644 index 0000000..47cceb0 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/Components/CommandHandlerInvokerMiddleware.cs @@ -0,0 +1,50 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Command.Contracts; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Mediator.Middleware.Command.Components; + +/// +/// A command middleware that invokes the command. +/// +[UsedImplicitly] +public class CommandHandlerInvokerMiddleware(CommandMiddlewareDelegate next) : ICommandMiddleware +{ + /// + public async ValueTask InvokeAsync(CommandContext context) + { + // Find all handlers for the specified command. + var command = context.Command; + var commandType = command.GetType(); + var resultType = context.ResultType; + var handlerType = typeof(ICommandHandler<,>).MakeGenericType(commandType, resultType); + var serviceProvider = context.ServiceProvider; + var commandHandlers = serviceProvider.GetServices(); + var handlers = commandHandlers.DistinctBy(x => x.GetType()).Where(x => handlerType.IsInstanceOfType(x)).ToArray(); + + if (handlers.Length == 0) + throw new InvalidOperationException($"There is no handler to handle the {commandType.FullName} command"); + + if (handlers.Length > 1) + throw new InvalidOperationException($"Multiple handlers were found to handle the {commandType.FullName} command"); + + var handler = handlers.First(); + var strategyContext = new CommandStrategyContext(context, handler, serviceProvider, context.CancellationToken); + var strategy = context.CommandStrategy; + var executeMethod = strategy.GetType().GetMethod(nameof(ICommandStrategy.ExecuteAsync))!; + var executeMethodWithReturnType = executeMethod.MakeGenericMethod(resultType); + + // Execute command. + var task = executeMethodWithReturnType.Invoke(strategy, [strategyContext]); + + // Get the result of the task. + var taskWithReturnType = typeof(Task<>).MakeGenericType(resultType); + var resultProperty = taskWithReturnType.GetProperty(nameof(Task.Result))!; + context.Result = resultProperty.GetValue(task); + + // Invoke next middleware. + await next(context); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/Components/CommandLoggingMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Command/Components/CommandLoggingMiddleware.cs new file mode 100644 index 0000000..910f03f --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/Components/CommandLoggingMiddleware.cs @@ -0,0 +1,27 @@ +using Elsa.Mediator.Middleware.Command.Contracts; +using Elsa.Mediator.Models; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; + +namespace Elsa.Mediator.Middleware.Command.Components; + +/// +/// A command middleware that logs the command being invoked. +/// +[UsedImplicitly] +public class CommandLoggingMiddleware(CommandMiddlewareDelegate next, ILogger logger) : ICommandMiddleware +{ + /// + public async ValueTask InvokeAsync(CommandContext context) + { + var commandType = context.Command.GetType(); + logger.LogInformation("Invoking {CommandName}", commandType.Name); + + await next(context); + + if (context.Result is null or Unit) + logger.LogInformation("{CommandName} completed with no result", commandType.Name); + else + logger.LogInformation("{CommandName} completed with result {CommandResult}", commandType.Name, context.Result); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandMiddleware.cs new file mode 100644 index 0000000..cf9efbb --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandMiddleware.cs @@ -0,0 +1,13 @@ +namespace Elsa.Mediator.Middleware.Command.Contracts; + +/// +/// Represents a command middleware. +/// +public interface ICommandMiddleware +{ + /// + /// Invokes the middleware. + /// + /// The command context. + ValueTask InvokeAsync(CommandContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandPipeline.cs b/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandPipeline.cs new file mode 100644 index 0000000..b049f1c --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandPipeline.cs @@ -0,0 +1,25 @@ +namespace Elsa.Mediator.Middleware.Command.Contracts; + +/// +/// Represents a pipeline for processing commands. The pipeline is responsible for orchestrating the execution of registered middleware in sequence. +/// +public interface ICommandPipeline +{ + /// + /// Configures the pipeline. + /// + /// A delegate that configures the pipeline. + /// The pipeline. + CommandMiddlewareDelegate Setup(Action setup); + + /// + /// Gets the pipeline. + /// + CommandMiddlewareDelegate Pipeline { get; } + + /// + /// Invokes the pipeline. + /// + /// The command context. + Task InvokeAsync(CommandContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandPipelineBuilder.cs b/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandPipelineBuilder.cs new file mode 100644 index 0000000..b6ac7c8 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/Contracts/ICommandPipelineBuilder.cs @@ -0,0 +1,48 @@ +namespace Elsa.Mediator.Middleware.Command.Contracts; + +/// +/// Represents a command pipeline builder. +/// +public interface ICommandPipelineBuilder +{ + /// + /// Gets a property bag that can be used to share data between middleware components. + /// + public IDictionary Properties { get; } + + /// + /// Gets the service provider. + /// + IServiceProvider ApplicationServices { get; } + + /// + /// Appends a middleware component to the pipeline. + /// + ICommandPipelineBuilder Use(Func middleware); + + /// + /// Adds a middleware component at the specified index. + /// + ICommandPipelineBuilder Use(int index, Func middleware); + + /// + /// Removes a middleware component from the pipeline. + /// + ICommandPipelineBuilder Remove(Func middleware); + + /// + /// Removes a middleware component at the specified index from the pipeline. + /// + ICommandPipelineBuilder RemoveAt(int index); + + /// + /// Clears the pipeline. + /// + ICommandPipelineBuilder Clear(); + + /// + /// Builds the pipeline. + /// + /// The pipeline. + public CommandMiddlewareDelegate Build(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Command/MiddlewareExtensions.cs b/src/common/Elsa.Mediator/Middleware/Command/MiddlewareExtensions.cs new file mode 100644 index 0000000..deac86d --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Command/MiddlewareExtensions.cs @@ -0,0 +1,45 @@ +using Elsa.Mediator.Middleware.Command.Contracts; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Mediator.Middleware.Command; + +/// +/// Provides extension methods for . +/// +public static class MiddlewareExtensions +{ + /// + /// Adds middleware to the pipeline. + /// + public static ICommandPipelineBuilder UseMiddleware(this ICommandPipelineBuilder builder, params object[] args) where TMiddleware : ICommandMiddleware + { + return builder.Use(next => BuildMiddlewareDelegate(builder, next, args)); + } + + /// + /// Inserts middleware at a specific index in the pipeline. + /// + public static ICommandPipelineBuilder UseMiddleware(this ICommandPipelineBuilder builder, int index, params object[] args) where TMiddleware : ICommandMiddleware + { + return builder.Use(index, next => BuildMiddlewareDelegate(builder, next, args)); + } + + /// + /// Builds a delegate for the middleware type. + /// + private static CommandMiddlewareDelegate BuildMiddlewareDelegate( + ICommandPipelineBuilder builder, + CommandMiddlewareDelegate next, + object[] args + ) where TMiddleware : ICommandMiddleware + { + var middleware = typeof(TMiddleware); + var invokeMethod = MiddlewareHelpers.GetInvokeMethod(middleware); + var ctorParams = new[] + { + next + }.Concat(args).Select(x => x!).ToArray(); + var instance = ActivatorUtilities.CreateInstance(builder.ApplicationServices, middleware, ctorParams); + return (CommandMiddlewareDelegate)invokeMethod.CreateDelegate(typeof(CommandMiddlewareDelegate), instance); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/MiddlewareHelpers.cs b/src/common/Elsa.Mediator/Middleware/MiddlewareHelpers.cs new file mode 100644 index 0000000..9cf399e --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/MiddlewareHelpers.cs @@ -0,0 +1,38 @@ +using System.Reflection; + +namespace Elsa.Mediator.Middleware; + +/// +/// Provides a set of static methods for working with middleware. +/// +public static class MiddlewareHelpers +{ + /// + /// Gets the Invoke or InvokeAsync method from the middleware type. + /// + /// The middleware type. + /// The Invoke or InvokeAsync method. + /// Thrown when the Invoke or InvokeAsync method cannot be found or the return type is not Task or ValueTask. + public static MethodInfo GetInvokeMethod(Type middleware) + { + const string invokeMethodName = "Invoke"; + const string invokeAsyncMethodName = "InvokeAsync"; + var methods = middleware.GetMethods(BindingFlags.Instance | BindingFlags.Public); + var invokeMethods = methods.Where(m => string.Equals(m.Name, invokeMethodName, StringComparison.Ordinal) || string.Equals(m.Name, invokeAsyncMethodName, StringComparison.Ordinal)).ToArray(); + + switch (invokeMethods.Length) + { + case > 1: + throw new InvalidOperationException("Multiple Invoke methods were found. Use either Invoke or InvokeAsync."); + case 0: + throw new InvalidOperationException("No Invoke methods were found. Use either Invoke or InvokeAsync"); + } + + var methodInfo = invokeMethods[0]; + + if (!typeof(Task).IsAssignableFrom(methodInfo.ReturnType) && !typeof(ValueTask).IsAssignableFrom(methodInfo.ReturnType)) + throw new InvalidOperationException($"The {methodInfo.Name} method must return Task or ValueTask"); + + return methodInfo; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/Components/NotificationHandlerInvokerMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Notification/Components/NotificationHandlerInvokerMiddleware.cs new file mode 100644 index 0000000..e7e2212 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/Components/NotificationHandlerInvokerMiddleware.cs @@ -0,0 +1,34 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Notification.Contracts; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Elsa.Mediator.Middleware.Notification.Components; + +/// +[UsedImplicitly] +public class NotificationHandlerInvokerMiddleware( + NotificationMiddlewareDelegate next, + ILogger logger) + : INotificationMiddleware +{ + /// + public async ValueTask InvokeAsync(NotificationContext context) + { + // Find all handlers for the specified notification. + var notification = context.Notification; + var notificationType = notification.GetType(); + var handlerType = typeof(INotificationHandler<>).MakeGenericType(notificationType); + var serviceProvider = context.ServiceProvider; + var notificationHandlers = serviceProvider.GetServices(); + var handlers = notificationHandlers.Where(x => handlerType.IsInstanceOfType(x)).DistinctBy(x => x.GetType()).ToArray(); + var strategyContext = new NotificationStrategyContext(context, handlers, logger, serviceProvider, context.CancellationToken); + + await context.NotificationStrategy.PublishAsync(strategyContext); + + // Invoke next middleware. + await next(context); + } +} diff --git a/src/common/Elsa.Mediator/Middleware/Notification/Components/NotificationLoggingMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Notification/Components/NotificationLoggingMiddleware.cs new file mode 100644 index 0000000..ace5378 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/Components/NotificationLoggingMiddleware.cs @@ -0,0 +1,25 @@ +using Elsa.Mediator.Middleware.Notification.Contracts; + +namespace Elsa.Mediator.Middleware.Notification.Components; + +/// +/// A notification middleware that logs the notification. +/// +public class NotificationLoggingMiddleware : INotificationMiddleware +{ + private readonly NotificationMiddlewareDelegate _next; + + /// + /// Initializes a new instance of the class. + /// + public NotificationLoggingMiddleware(NotificationMiddlewareDelegate next) => _next = next; + + /// + public async ValueTask InvokeAsync(NotificationContext context) + { + // TODO: Log notification. + + // Invoke next middleware. + await _next(context); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationMiddleware.cs new file mode 100644 index 0000000..8c4e048 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationMiddleware.cs @@ -0,0 +1,13 @@ +namespace Elsa.Mediator.Middleware.Notification.Contracts; + +/// +/// Represents a notification middleware component. +/// +public interface INotificationMiddleware +{ + /// + /// Invokes the notification middleware. + /// + /// The notification context. + ValueTask InvokeAsync(NotificationContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationPipeline.cs b/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationPipeline.cs new file mode 100644 index 0000000..1eb8468 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationPipeline.cs @@ -0,0 +1,25 @@ +namespace Elsa.Mediator.Middleware.Notification.Contracts; + +/// +/// Represents a notification request pipeline. A notification pipeline is a chain of middleware that can be used to process a notification. +/// +public interface INotificationPipeline +{ + /// + /// Sets up the notification pipeline. + /// + /// The setup action. + /// A delegate representing the notification pipeline. + NotificationMiddlewareDelegate Setup(Action setup); + + /// + /// Gets the delegate representing the notification pipeline. + /// + NotificationMiddlewareDelegate Pipeline { get; } + + /// + /// Executes the notification pipeline. + /// + /// The notification context. + Task ExecuteAsync(NotificationContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationPipelineBuilder.cs b/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationPipelineBuilder.cs new file mode 100644 index 0000000..accacdc --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/Contracts/INotificationPipelineBuilder.cs @@ -0,0 +1,29 @@ +namespace Elsa.Mediator.Middleware.Notification.Contracts; + +/// +/// Represents a builder for building a notification pipeline. +/// +public interface INotificationPipelineBuilder +{ + /// + /// Gets the properties associated with the notification pipeline. + /// + public IDictionary Properties { get; } + + /// + /// Gets the service provider. + /// + IServiceProvider ApplicationServices { get; } + + /// + /// Adds a middleware to the notification pipeline. + /// + /// The middleware to add. + INotificationPipelineBuilder Use(Func middleware); + + /// + /// Builds the notification pipeline. + /// + /// + public NotificationMiddlewareDelegate Build(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/MiddlewareExtensions.cs b/src/common/Elsa.Mediator/Middleware/Notification/MiddlewareExtensions.cs new file mode 100644 index 0000000..5be932c --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/MiddlewareExtensions.cs @@ -0,0 +1,29 @@ +using Elsa.Mediator.Middleware.Notification.Contracts; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Mediator.Middleware.Notification; + +/// +/// Contains extension methods for . +/// +public static class MiddlewareExtensions +{ + /// + /// Adds a middleware to the notification pipeline. + /// + /// The notification pipeline builder. + /// The arguments to pass to the middleware constructor. + /// The middleware type. + public static INotificationPipelineBuilder UseMiddleware(this INotificationPipelineBuilder builder, params object[] args) where TMiddleware : INotificationMiddleware + { + var middleware = typeof(TMiddleware); + + return builder.Use(next => + { + var invokeMethod = MiddlewareHelpers.GetInvokeMethod(middleware); + var ctorParams = new[] { next }.Concat(args).Select(x => x).ToArray(); + var instance = ActivatorUtilities.CreateInstance(builder.ApplicationServices, middleware, ctorParams); + return (NotificationMiddlewareDelegate)invokeMethod.CreateDelegate(typeof(NotificationMiddlewareDelegate), instance); + }); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/NotificationContext.cs b/src/common/Elsa.Mediator/Middleware/Notification/NotificationContext.cs new file mode 100644 index 0000000..4f4f630 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/NotificationContext.cs @@ -0,0 +1,44 @@ +using Elsa.Mediator.Contracts; + +namespace Elsa.Mediator.Middleware.Notification; + +/// +/// Represents a context for a notification. +/// +public class NotificationContext +{ + /// + /// Initializes a new instance of the class. + /// + /// The notification to publish. + /// The publishing strategy to use. + /// The service provider to resolve services from. + /// The cancellation token. + public NotificationContext(INotification notification, IEventPublishingStrategy notificationStrategy, IServiceProvider serviceProvider, CancellationToken cancellationToken = default) + { + Notification = notification; + NotificationStrategy = notificationStrategy; + ServiceProvider = serviceProvider; + CancellationToken = cancellationToken; + } + + /// + /// Gets the notification to publish. + /// + public INotification Notification { get; init; } + + /// + /// Gets the publishing strategy to use. + /// + public IEventPublishingStrategy NotificationStrategy { get; init; } + + /// + /// Gets the service provider used for resolving dependencies within the notification context. + /// + public IServiceProvider ServiceProvider { get; } + + /// + /// Gets the cancellation token. + /// + public CancellationToken CancellationToken { get; init; } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/NotificationMiddlewareDelegate.cs b/src/common/Elsa.Mediator/Middleware/Notification/NotificationMiddlewareDelegate.cs new file mode 100644 index 0000000..915d679 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/NotificationMiddlewareDelegate.cs @@ -0,0 +1,6 @@ +namespace Elsa.Mediator.Middleware.Notification; + +/// +/// Represents a delegate for a notification middleware. +/// +public delegate ValueTask NotificationMiddlewareDelegate(NotificationContext context); \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipeline.cs b/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipeline.cs new file mode 100644 index 0000000..a568fcd --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipeline.cs @@ -0,0 +1,32 @@ +using Elsa.Mediator.Middleware.Notification.Contracts; + +namespace Elsa.Mediator.Middleware.Notification; + +/// +public class NotificationPipeline : INotificationPipeline +{ + private readonly IServiceProvider _serviceProvider; + private NotificationMiddlewareDelegate? _pipeline; + + /// + /// Initializes a new instance of the class. + /// + public NotificationPipeline(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider; + + /// + public NotificationMiddlewareDelegate Pipeline => _pipeline ??= CreateDefaultPipeline(); + + /// + public NotificationMiddlewareDelegate Setup(Action? setup = default) + { + var builder = new NotificationPipelineBuilder(_serviceProvider); + setup?.Invoke(builder); + _pipeline = builder.Build(); + return _pipeline; + } + + /// + public async Task ExecuteAsync(NotificationContext context) => await Pipeline(context); + + private NotificationMiddlewareDelegate CreateDefaultPipeline() => Setup(x => x.UseNotificationHandlers()); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipelineBuilder.cs b/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipelineBuilder.cs new file mode 100644 index 0000000..850229f --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipelineBuilder.cs @@ -0,0 +1,51 @@ +using Elsa.Mediator.Middleware.Notification.Contracts; + +namespace Elsa.Mediator.Middleware.Notification; + +/// +public class NotificationPipelineBuilder : INotificationPipelineBuilder +{ + private const string ServicesKey = "mediator.Services"; + private readonly List> _components = new(); + + /// + /// Initializes a new instance of the class. + /// + public NotificationPipelineBuilder(IServiceProvider serviceProvider) + { + ApplicationServices = serviceProvider; + } + + /// + public IDictionary Properties { get; } = new Dictionary(); + + /// + public IServiceProvider ApplicationServices + { + get => GetProperty(ServicesKey)!; + set => SetProperty(ServicesKey, value); + } + + /// + public INotificationPipelineBuilder Use(Func middleware) + { + _components.Add(middleware); + return this; + } + + /// + public NotificationMiddlewareDelegate Build() + { + NotificationMiddlewareDelegate pipeline = _ => new ValueTask(); + + for (int i = _components.Count - 1; i >= 0; i--) + { + pipeline = _components[i](pipeline); + } + + return pipeline; + } + + private T? GetProperty(string key) => Properties.TryGetValue(key, out var value) ? (T?)value : default(T); + private void SetProperty(string key, T value) => Properties[key] = value; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipelineBuilderExtensions.cs b/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipelineBuilderExtensions.cs new file mode 100644 index 0000000..23367de --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Notification/NotificationPipelineBuilderExtensions.cs @@ -0,0 +1,23 @@ +using Elsa.Mediator.Middleware.Notification.Components; +using Elsa.Mediator.Middleware.Notification.Contracts; + +namespace Elsa.Mediator.Middleware.Notification; + +/// +/// Provides a set of static methods for building a notification pipeline. +/// +public static class NotificationPipelineBuilderExtensions +{ + /// + /// Adds a notification handler invoker middleware to the notification pipeline. + /// + /// The notification pipeline builder. + public static INotificationPipelineBuilder UseNotificationHandlers(this INotificationPipelineBuilder builder) => builder.UseMiddleware(); + + + /// + /// Adds a notification logging middleware to the notification pipeline. + /// + /// The notification pipeline builder. + public static INotificationPipelineBuilder UseNotificationLogging(this INotificationPipelineBuilder builder) => builder.UseMiddleware(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/Components/RequestHandlerInvokerMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Request/Components/RequestHandlerInvokerMiddleware.cs new file mode 100644 index 0000000..2055515 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/Components/RequestHandlerInvokerMiddleware.cs @@ -0,0 +1,44 @@ +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Request.Contracts; + +namespace Elsa.Mediator.Middleware.Request.Components; + +/// +/// A middleware component that invokes request handlers. +/// +public class RequestHandlerInvokerMiddleware( + RequestMiddlewareDelegate next, + IEnumerable requestHandlers) : IRequestMiddleware +{ + /// + public async ValueTask InvokeAsync(RequestContext context) + { + + // Find all handlers for the specified request. + var request = context.Request; + var requestType = request.GetType(); + var responseType = context.ResponseType; + var handlerType = typeof(IRequestHandler<,>).MakeGenericType(requestType, responseType); + var handlers = requestHandlers.Where(x => handlerType.IsInstanceOfType(x)).ToArray(); + + if (handlers.Length == 0) + throw new InvalidOperationException($"There is no handler to handle the {requestType.FullName} request"); + + if (handlers.Length > 1) + throw new InvalidOperationException($"Multiple handlers were found to handle the {requestType.FullName} request"); + + var handler = handlers.First(); + var handleMethod = handlerType.GetMethod("HandleAsync")!; + var cancellationToken = context.CancellationToken; + var task = (Task)handleMethod.Invoke(handler, [request, cancellationToken])!; + await task; + + // Get result of task. + var taskWithReturnType = typeof(Task<>).MakeGenericType(responseType); + var resultProperty = taskWithReturnType.GetProperty(nameof(Task.Result))!; + context.Response = resultProperty.GetValue(task)!; + + // Invoke next middleware. + await next(context); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/Components/RequestLoggingMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Request/Components/RequestLoggingMiddleware.cs new file mode 100644 index 0000000..92b2e30 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/Components/RequestLoggingMiddleware.cs @@ -0,0 +1,24 @@ +using Elsa.Mediator.Middleware.Request.Contracts; + +namespace Elsa.Mediator.Middleware.Request.Components; + +/// +/// A middleware that logs the request. +/// +public class RequestLoggingMiddleware : IRequestMiddleware +{ + private readonly RequestMiddlewareDelegate _next; + + /// + /// Initializes a new instance of the class. + /// + /// The next middleware in the pipeline. + public RequestLoggingMiddleware(RequestMiddlewareDelegate next) => _next = next; + + /// + public async ValueTask InvokeAsync(RequestContext context) + { + // Invoke next middleware. + await _next(context); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestMiddleware.cs b/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestMiddleware.cs new file mode 100644 index 0000000..97ee52e --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestMiddleware.cs @@ -0,0 +1,13 @@ +namespace Elsa.Mediator.Middleware.Request.Contracts; + +/// +/// Represents a request middleware component. +/// +public interface IRequestMiddleware +{ + /// + /// Invokes the request middleware. + /// + /// The request context. + ValueTask InvokeAsync(RequestContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestPipeline.cs b/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestPipeline.cs new file mode 100644 index 0000000..8ec077b --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestPipeline.cs @@ -0,0 +1,26 @@ +namespace Elsa.Mediator.Middleware.Request.Contracts; + +/// +/// Represents a request pipeline. A request pipeline is a chain of middleware that can be used to process a request. +/// +public interface IRequestPipeline +{ + /// + /// Sets up the request pipeline. + /// + /// The setup action. + /// A delegate representing the request pipeline. + RequestMiddlewareDelegate Setup(Action setup); + + + /// + /// Gets the delegate representing the request pipeline. + /// + RequestMiddlewareDelegate Pipeline { get; } + + /// + /// Executes the request pipeline. + /// + /// The request context. + Task ExecuteAsync(RequestContext context); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestPipelineBuilder.cs b/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestPipelineBuilder.cs new file mode 100644 index 0000000..f9b91c8 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/Contracts/IRequestPipelineBuilder.cs @@ -0,0 +1,29 @@ +namespace Elsa.Mediator.Middleware.Request.Contracts; + +/// +/// Represents a builder for building a request pipeline. +/// +public interface IRequestPipelineBuilder +{ + /// + /// Gets the properties associated with the request pipeline. + /// + public IDictionary Properties { get; } + + /// + /// Gets the service provider. + /// + IServiceProvider ApplicationServices { get; } + + /// + /// Adds a middleware to the request pipeline. + /// + /// The middleware to add. + IRequestPipelineBuilder Use(Func middleware); + + /// + /// Builds the request pipeline. + /// + /// + public RequestMiddlewareDelegate Build(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/MiddlewareExtensions.cs b/src/common/Elsa.Mediator/Middleware/Request/MiddlewareExtensions.cs new file mode 100644 index 0000000..cfaa7f6 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/MiddlewareExtensions.cs @@ -0,0 +1,29 @@ +using Elsa.Mediator.Middleware.Request.Contracts; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Mediator.Middleware.Request; + +/// +/// Provides a set of static methods for building a request pipeline. +/// +public static class MiddlewareExtensions +{ + /// + /// Adds a request handler invoker middleware to the request pipeline. + /// + /// The request pipeline builder. + /// The arguments to pass to the middleware constructor. + /// The middleware type. + public static IRequestPipelineBuilder UseMiddleware(this IRequestPipelineBuilder builder, params object[] args) where TMiddleware : IRequestMiddleware + { + var middleware = typeof(TMiddleware); + + return builder.Use(next => + { + var invokeMethod = MiddlewareHelpers.GetInvokeMethod(middleware); + var ctorParams = new[] { next }.Concat(args).Select(x => x!).ToArray(); + var instance = ActivatorUtilities.CreateInstance(builder.ApplicationServices, middleware, ctorParams); + return (RequestMiddlewareDelegate)invokeMethod.CreateDelegate(typeof(RequestMiddlewareDelegate), instance); + }); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/RequestContext.cs b/src/common/Elsa.Mediator/Middleware/Request/RequestContext.cs new file mode 100644 index 0000000..422c0e1 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/RequestContext.cs @@ -0,0 +1,34 @@ +using Elsa.Mediator.Contracts; + +namespace Elsa.Mediator.Middleware.Request; + +/// +/// Provides context to a request handler. +/// +public class RequestContext(IRequest request, Type responseType, IServiceProvider serviceProvider, CancellationToken cancellationToken) +{ + /// + /// Gets the request. + /// + public IRequest Request { get; init; } = request; + + /// + /// Gets the response type. + /// + public Type ResponseType { get; init; } = responseType; + + /// + /// Gets the service provider used for resolving dependencies within the request context. + /// + public IServiceProvider ServiceProvider { get; } = serviceProvider; + + /// + /// Gets the cancellation token. + /// + public CancellationToken CancellationToken { get; init; } = cancellationToken; + + /// + /// Gets the response the request handler. + /// + public object Response { get; set; } = null!; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/RequestMiddlewareDelegate.cs b/src/common/Elsa.Mediator/Middleware/Request/RequestMiddlewareDelegate.cs new file mode 100644 index 0000000..28ad381 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/RequestMiddlewareDelegate.cs @@ -0,0 +1,6 @@ +namespace Elsa.Mediator.Middleware.Request; + +/// +/// Represents a delegate for a request middleware. +/// +public delegate ValueTask RequestMiddlewareDelegate(RequestContext context); \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/RequestPipeline.cs b/src/common/Elsa.Mediator/Middleware/Request/RequestPipeline.cs new file mode 100644 index 0000000..d542f92 --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/RequestPipeline.cs @@ -0,0 +1,32 @@ +using Elsa.Mediator.Middleware.Request.Contracts; + +namespace Elsa.Mediator.Middleware.Request; + +/// +public class RequestPipeline : IRequestPipeline +{ + private readonly IServiceProvider _serviceProvider; + private RequestMiddlewareDelegate? _pipeline; + + /// + /// Initializes a new instance of the class. + /// + public RequestPipeline(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider; + + /// + public RequestMiddlewareDelegate Pipeline => _pipeline ??= CreateDefaultPipeline(); + + /// + public RequestMiddlewareDelegate Setup(Action? setup = default) + { + var builder = new RequestPipelineBuilder(_serviceProvider); + setup?.Invoke(builder); + _pipeline = builder.Build(); + return _pipeline; + } + + /// + public async Task ExecuteAsync(RequestContext context) => await Pipeline(context); + + private RequestMiddlewareDelegate CreateDefaultPipeline() => Setup(x => x.UseRequestHandlers()); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/RequestPipelineBuilder.cs b/src/common/Elsa.Mediator/Middleware/Request/RequestPipelineBuilder.cs new file mode 100644 index 0000000..173203b --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/RequestPipelineBuilder.cs @@ -0,0 +1,51 @@ +using Elsa.Mediator.Middleware.Request.Contracts; + +namespace Elsa.Mediator.Middleware.Request; + +/// +public class RequestPipelineBuilder : IRequestPipelineBuilder +{ + private const string ServicesKey = "mediator.Services"; + private readonly List> _components = new(); + + /// + /// Initializes a new instance of the class. + /// + public RequestPipelineBuilder(IServiceProvider serviceProvider) + { + ApplicationServices = serviceProvider; + } + + /// + public IDictionary Properties { get; } = new Dictionary(); + + /// + public IServiceProvider ApplicationServices + { + get => GetProperty(ServicesKey)!; + set => SetProperty(ServicesKey, value); + } + + /// + public IRequestPipelineBuilder Use(Func middleware) + { + _components.Add(middleware); + return this; + } + + /// + public RequestMiddlewareDelegate Build() + { + RequestMiddlewareDelegate pipeline = _ => new ValueTask(); + + for (int i = _components.Count - 1; i >= 0; i--) + { + pipeline = _components[i](pipeline); + } + + return pipeline; + } + + private T? GetProperty(string key) => Properties.TryGetValue(key, out var value) ? (T?)value : default(T); + private void SetProperty(string key, T value) => Properties[key] = value; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Middleware/Request/RequestPipelineBuilderExtensions.cs b/src/common/Elsa.Mediator/Middleware/Request/RequestPipelineBuilderExtensions.cs new file mode 100644 index 0000000..80b591c --- /dev/null +++ b/src/common/Elsa.Mediator/Middleware/Request/RequestPipelineBuilderExtensions.cs @@ -0,0 +1,22 @@ +using Elsa.Mediator.Middleware.Request.Components; +using Elsa.Mediator.Middleware.Request.Contracts; + +namespace Elsa.Mediator.Middleware.Request; + +/// +/// Provides a set of static methods for . +/// +public static class RequestPipelineBuilderExtensions +{ + /// + /// Adds a request handler middleware to the pipeline. + /// + /// The request pipeline builder. + public static IRequestPipelineBuilder UseRequestHandlers(this IRequestPipelineBuilder builder) => builder.UseMiddleware(); + + /// + /// Adds a request logging middleware to the pipeline. + /// + /// The request pipeline builder. + public static IRequestPipelineBuilder UseRequestLogging(this IRequestPipelineBuilder builder) => builder.UseMiddleware(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Models/EnqueuedJob.cs b/src/common/Elsa.Mediator/Models/EnqueuedJob.cs new file mode 100644 index 0000000..e8ec4f9 --- /dev/null +++ b/src/common/Elsa.Mediator/Models/EnqueuedJob.cs @@ -0,0 +1,10 @@ +namespace Elsa.Mediator.Models; + +/// +/// Represents an item in the job queue. +/// +/// The ID of the job. +/// The job to execute. +/// The cancellation token source. +/// The action to invoke when the job has completed. +public record EnqueuedJob(string JobId, Func Action, CancellationTokenSource CancellationTokenSource, Action OnJobCompleted); \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Models/Unit.cs b/src/common/Elsa.Mediator/Models/Unit.cs new file mode 100644 index 0000000..ee16905 --- /dev/null +++ b/src/common/Elsa.Mediator/Models/Unit.cs @@ -0,0 +1,12 @@ +namespace Elsa.Mediator.Models; + +/// +/// Represents a void result. +/// +public record Unit +{ + /// + /// Gets the singleton instance of . + /// + public static readonly Unit Instance = new(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/NotificationStrategy.cs b/src/common/Elsa.Mediator/NotificationStrategy.cs new file mode 100644 index 0000000..33c29dd --- /dev/null +++ b/src/common/Elsa.Mediator/NotificationStrategy.cs @@ -0,0 +1,24 @@ +using Elsa.Mediator.PublishingStrategies; + +namespace Elsa.Mediator; + +/// +/// Provides a set of strategies for publishing events. +/// +public static class NotificationStrategy +{ + /// + /// Invokes event handlers in the background and does not wait for the result. + /// + public static readonly BackgroundProcessingStrategy Background = new(); + + /// + /// Invokes event handlers in parallel and waits for the result. + /// + public static readonly ParallelProcessingStrategy Parallel = new(); + + /// + /// Invokes event handlers in sequence and waits for the result. + /// + public static readonly SequentialProcessingStrategy Sequential = new(); +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Options/MediatorOptions.cs b/src/common/Elsa.Mediator/Options/MediatorOptions.cs new file mode 100644 index 0000000..d57b7ed --- /dev/null +++ b/src/common/Elsa.Mediator/Options/MediatorOptions.cs @@ -0,0 +1,34 @@ +using Elsa.Mediator.Contracts; + +namespace Elsa.Mediator.Options; + +/// +/// Options for the mediator. +/// +public class MediatorOptions +{ + /// + /// The max number of workers to process commands. + /// + public int CommandWorkerCount { get; set; } = 4; + + /// + /// The max number of workers to process notifications. + /// + public int NotificationWorkerCount { get; set; } = 4; + + /// + /// The max number of workers to process jobs. + /// + public int JobWorkerCount { get; set; } = 4; + + /// + /// The default publishing strategy to use. + /// + public IEventPublishingStrategy DefaultPublishingStrategy { get; set; } = NotificationStrategy.Sequential; + + /// + /// The default command strategy to use. + /// + public ICommandStrategy DefaultCommandStrategy { get; set; } = CommandStrategy.Default; +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/PublishingStrategies/BackgroundProcessingStrategy.cs b/src/common/Elsa.Mediator/PublishingStrategies/BackgroundProcessingStrategy.cs new file mode 100644 index 0000000..e960050 --- /dev/null +++ b/src/common/Elsa.Mediator/PublishingStrategies/BackgroundProcessingStrategy.cs @@ -0,0 +1,19 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Mediator.PublishingStrategies; + +/// +/// Invokes event handlers in parallel and does not wait for the result. +/// +public class BackgroundProcessingStrategy : IEventPublishingStrategy +{ + /// + public async Task PublishAsync(NotificationStrategyContext context) + { + var notificationsChannel = context.ServiceProvider.GetRequiredService(); + + await notificationsChannel.Writer.WriteAsync(context.NotificationContext, context.CancellationToken); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/PublishingStrategies/ParallelProcessingStrategy.cs b/src/common/Elsa.Mediator/PublishingStrategies/ParallelProcessingStrategy.cs new file mode 100644 index 0000000..8eec006 --- /dev/null +++ b/src/common/Elsa.Mediator/PublishingStrategies/ParallelProcessingStrategy.cs @@ -0,0 +1,23 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Extensions; + +namespace Elsa.Mediator.PublishingStrategies; + +/// +/// Invokes event handlers in parallel and waits for the result. +/// +public class ParallelProcessingStrategy : IEventPublishingStrategy +{ + /// + public async Task PublishAsync(NotificationStrategyContext context) + { + var notificationContext = context.NotificationContext; + var notification = notificationContext.Notification; + var notificationType = notification.GetType(); + var handleMethod = notificationType.GetNotificationHandlerMethod(); + var tasks = context.Handlers.Select(handler => handler.InvokeAsync(handleMethod, context.NotificationContext)).ToList(); + + await Task.WhenAll(tasks); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/PublishingStrategies/SequentialProcessingStrategy.cs b/src/common/Elsa.Mediator/PublishingStrategies/SequentialProcessingStrategy.cs new file mode 100644 index 0000000..494b9de --- /dev/null +++ b/src/common/Elsa.Mediator/PublishingStrategies/SequentialProcessingStrategy.cs @@ -0,0 +1,23 @@ +using Elsa.Mediator.Contexts; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Extensions; + +namespace Elsa.Mediator.PublishingStrategies; + +/// +/// Invokes event handlers in sequence and waits for the result. +/// +public class SequentialProcessingStrategy : IEventPublishingStrategy +{ + /// + public async Task PublishAsync(NotificationStrategyContext context) + { + var notificationContext = context.NotificationContext; + var notification = notificationContext.Notification; + var notificationType = notification.GetType(); + var handleMethod = notificationType.GetNotificationHandlerMethod(); + + foreach (var handler in context.Handlers) + await handler.InvokeAsync(handleMethod, context.NotificationContext); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Services/DefaultMediator.cs b/src/common/Elsa.Mediator/Services/DefaultMediator.cs new file mode 100644 index 0000000..40587c3 --- /dev/null +++ b/src/common/Elsa.Mediator/Services/DefaultMediator.cs @@ -0,0 +1,112 @@ +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Middleware.Command; +using Elsa.Mediator.Middleware.Command.Contracts; +using Elsa.Mediator.Middleware.Notification; +using Elsa.Mediator.Middleware.Notification.Contracts; +using Elsa.Mediator.Middleware.Request; +using Elsa.Mediator.Middleware.Request.Contracts; +using Elsa.Mediator.Models; +using Elsa.Mediator.Options; +using Microsoft.Extensions.Options; + +namespace Elsa.Mediator.Services; + +/// +public class DefaultMediator : IMediator +{ + private readonly IRequestPipeline _requestPipeline; + private readonly ICommandPipeline _commandPipeline; + private readonly INotificationPipeline _notificationPipeline; + private readonly IServiceProvider _serviceProvider; + private readonly IEventPublishingStrategy _defaultPublishingStrategy; + private readonly ICommandStrategy _defaultCommandStrategy; + + /// + /// Initializes a new instance of the class. + /// + /// The request pipeline. + /// The command pipeline. + /// The notification pipeline. + /// The mediator options. + public DefaultMediator( + IRequestPipeline requestPipeline, + ICommandPipeline commandPipeline, + INotificationPipeline notificationPipeline, + IOptions options, + IServiceProvider serviceProvider) + { + _requestPipeline = requestPipeline; + _commandPipeline = commandPipeline; + _notificationPipeline = notificationPipeline; + _serviceProvider = serviceProvider; + _defaultPublishingStrategy = options.Value.DefaultPublishingStrategy; + _defaultCommandStrategy = options.Value.DefaultCommandStrategy; + } + + /// + public async Task SendAsync(IRequest request, CancellationToken cancellationToken = default) + { + var responseType = typeof(T); + var context = new RequestContext(request, responseType, _serviceProvider, cancellationToken); + await _requestPipeline.ExecuteAsync(context); + + return (T)context.Response; + } + + public async Task SendAsync(ICommand command, ICommandStrategy strategy, IDictionary headers, CancellationToken cancellationToken = default) + { + var resultType = typeof(T); + var context = new CommandContext(command, strategy, resultType, headers, _serviceProvider, cancellationToken); + await _commandPipeline.InvokeAsync(context); + + return (T)context.Result!; + } + + /// + public async Task SendAsync(ICommand command, CancellationToken cancellationToken = default) => await SendAsync(command, _defaultCommandStrategy, cancellationToken); + + /// + public Task SendAsync(ICommand command, ICommandStrategy? strategy = null, CancellationToken cancellationToken = default) + { + return SendAsync(command, strategy, new Dictionary(), cancellationToken); + } + + public async Task SendAsync(ICommand command, ICommandStrategy? strategy, IDictionary headers, CancellationToken cancellationToken = default) + { + var resultType = typeof(Unit); + strategy ??= _defaultCommandStrategy; + var context = new CommandContext(command, strategy, resultType, headers, _serviceProvider, cancellationToken); + await _commandPipeline.InvokeAsync(context); + } + + /// + public Task SendAsync(ICommand command, CancellationToken cancellationToken = default) + { + return SendAsync(command, new Dictionary(), cancellationToken); + } + + public Task SendAsync(ICommand command, IDictionary headers, CancellationToken cancellationToken = default) + { + return SendAsync(command, _defaultCommandStrategy, headers, cancellationToken); + } + + /// + public Task SendAsync(ICommand command, ICommandStrategy strategy, CancellationToken cancellationToken = default) + { + return SendAsync(command, strategy, new Dictionary(), cancellationToken); + } + + /// + public async Task SendAsync(INotification notification, CancellationToken cancellationToken = default) + { + await SendAsync(notification, _defaultPublishingStrategy, cancellationToken); + } + + /// + public async Task SendAsync(INotification notification, IEventPublishingStrategy? strategy = null, CancellationToken cancellationToken = default) + { + strategy ??= _defaultPublishingStrategy; + var context = new NotificationContext(notification, strategy, _serviceProvider, cancellationToken); + await _notificationPipeline.ExecuteAsync(context); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Mediator/Services/JobQueue.cs b/src/common/Elsa.Mediator/Services/JobQueue.cs new file mode 100644 index 0000000..738e9d8 --- /dev/null +++ b/src/common/Elsa.Mediator/Services/JobQueue.cs @@ -0,0 +1,72 @@ +using System.Collections.Concurrent; +using Elsa.Mediator.Contracts; +using Elsa.Mediator.Models; +using Microsoft.Extensions.Logging; + +namespace Elsa.Mediator.Services; + +/// +public class JobQueue(IJobsChannel jobsChannel, ILogger logger) : IJobQueue +{ + private readonly ConcurrentDictionary _scheduledItems = new(); + private readonly ConcurrentDictionary _pendingItems = new(); + + /// + public string Create(Func job) + { + var jobItem = CreateJob(job); + _pendingItems.TryAdd(jobItem.JobId, jobItem); + return jobItem.JobId; + } + + public void Enqueue(string jobId) + { + if (!_pendingItems.TryRemove(jobId, out var jobItem)) + { + logger.LogWarning($"Job {jobId} was not found"); + return; + } + + _scheduledItems.TryAdd(jobItem.JobId, jobItem); + jobsChannel.Writer.TryWrite(jobItem); + } + + /// + public string Enqueue(Func job) + { + var jobItem = CreateJob(job); + _scheduledItems.TryAdd(jobItem.JobId, jobItem); + jobsChannel.Writer.TryWrite(jobItem); + return jobItem.JobId; + } + + /// + public bool Dequeue(string jobId) + { + if (!_pendingItems.TryRemove(jobId, out _)) + if (!_scheduledItems.TryRemove(jobId, out _)) + return false; + + return true; + } + + /// + public bool Cancel(string jobId) + { + if (!_pendingItems.TryGetValue(jobId, out var jobItem)) + if (!_scheduledItems.TryGetValue(jobId, out jobItem)) + return false; + + jobItem.CancellationTokenSource.Cancel(); + return true; + } + + private EnqueuedJob CreateJob(Func job) + { + var jobId = Guid.NewGuid().ToString(); + var cts = new CancellationTokenSource(); + return new EnqueuedJob(jobId, job, cts, OnJobCompleted); + } + + void OnJobCompleted(string completedJobId) => _scheduledItems.TryRemove(completedJobId, out _); +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Activities/TriggerSignal.cs b/src/common/Elsa.Testing.Shared.Component/Activities/TriggerSignal.cs new file mode 100644 index 0000000..78fd7c4 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Activities/TriggerSignal.cs @@ -0,0 +1,16 @@ +using Elsa.Testing.Shared.Services; +using Elsa.Workflows; +using Elsa.Workflows.Runtime; + +namespace Elsa.Testing.Shared.Activities; + +public class TriggerSignal(object signal) : CodeActivity +{ + public object Signal { get; set; } = signal; + + protected override void Execute(ActivityExecutionContext context) + { + var signalManager = context.GetRequiredService(); + context.DeferTask(() => signalManager.Trigger(Signal)); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj b/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj new file mode 100644 index 0000000..3e0b5a4 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Elsa.Testing.Shared.Component.csproj @@ -0,0 +1,28 @@ + + + + + Provides common utilities that are helpful when writing component tests against Elsa Workflows functionality. + + elsa, component testing + Elsa.Testing.Shared + + + + + + + + + + + + + + + + + + + + diff --git a/src/common/Elsa.Testing.Shared.Component/EventArgs/TriggerChangeTokenSignalEventArgs.cs b/src/common/Elsa.Testing.Shared.Component/EventArgs/TriggerChangeTokenSignalEventArgs.cs new file mode 100644 index 0000000..501def1 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/EventArgs/TriggerChangeTokenSignalEventArgs.cs @@ -0,0 +1,6 @@ +namespace Elsa.Testing.Shared; + +public class TriggerChangeTokenSignalEventArgs(string key) : EventArgs +{ + public string Key { get; } = key; +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowDefinitionDeletedEventArgs.cs b/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowDefinitionDeletedEventArgs.cs new file mode 100644 index 0000000..090a558 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowDefinitionDeletedEventArgs.cs @@ -0,0 +1,6 @@ +namespace Elsa.Testing.Shared; + +public class WorkflowDefinitionDeletedEventArgs(string definitionId) : EventArgs +{ + public string DefinitionId { get; } = definitionId; +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowFinishedEventArgs.cs b/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowFinishedEventArgs.cs new file mode 100644 index 0000000..af54718 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowFinishedEventArgs.cs @@ -0,0 +1,10 @@ +using Elsa.Workflows.Activities; +using Elsa.Workflows.State; + +namespace Elsa.Testing.Shared; + +public class WorkflowFinishedEventArgs(Workflow workflow, WorkflowState workflowState) : EventArgs +{ + public Workflow Workflow { get; } = workflow; + public WorkflowState WorkflowState { get; } = workflowState; +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowInstanceSavedEventArgs.cs b/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowInstanceSavedEventArgs.cs new file mode 100644 index 0000000..7bcf1b0 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/EventArgs/WorkflowInstanceSavedEventArgs.cs @@ -0,0 +1,8 @@ +using Elsa.Workflows.Management.Entities; + +namespace Elsa.Testing.Shared; + +public class WorkflowInstanceSavedEventArgs(WorkflowInstance workflowInstance) : EventArgs +{ + public WorkflowInstance WorkflowInstance { get; } = workflowInstance; +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Extensions/HttpResponseMessageExtensions.cs b/src/common/Elsa.Testing.Shared.Component/Extensions/HttpResponseMessageExtensions.cs new file mode 100644 index 0000000..d58fb70 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Extensions/HttpResponseMessageExtensions.cs @@ -0,0 +1,14 @@ +using System.Text.Json; +using Elsa.Api.Client; + +namespace Elsa.Testing.Shared.Extensions; + +public static class HttpResponseMessageExtensions +{ + public static async Task ReadAsJsonAsync(this HttpResponseMessage response, IServiceProvider serviceProvider, CancellationToken cancellationToken = default) + { + var json = await response.Content.ReadAsStringAsync(cancellationToken); + var options = RefitSettingsHelper.CreateJsonSerializerOptions(serviceProvider); + return JsonSerializer.Deserialize(json, options)!; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/FodyWeavers.xml b/src/common/Elsa.Testing.Shared.Component/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Handlers/WorkflowEventHandlers.cs b/src/common/Elsa.Testing.Shared.Component/Handlers/WorkflowEventHandlers.cs new file mode 100644 index 0000000..abe71cb --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Handlers/WorkflowEventHandlers.cs @@ -0,0 +1,25 @@ +using Elsa.Mediator.Contracts; +using Elsa.Testing.Shared.Services; +using Elsa.Workflows.Management.Notifications; +using Elsa.Workflows.Notifications; +using JetBrains.Annotations; + +namespace Elsa.Testing.Shared.Handlers; + +[UsedImplicitly] +public class WorkflowEventHandlers(WorkflowEvents workflowEvents) : + INotificationHandler, + INotificationHandler +{ + public Task HandleAsync(WorkflowFinished notification, CancellationToken cancellationToken) + { + workflowEvents.OnWorkflowFinished(new WorkflowFinishedEventArgs(notification.Workflow, notification.WorkflowState)); + return Task.CompletedTask; + } + + public Task HandleAsync(WorkflowInstanceSaved notification, CancellationToken cancellationToken) + { + workflowEvents.OnWorkflowInstanceSaved(new WorkflowInstanceSavedEventArgs(notification.WorkflowInstance)); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Services/SignalManager.cs b/src/common/Elsa.Testing.Shared.Component/Services/SignalManager.cs new file mode 100644 index 0000000..b9b585f --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/SignalManager.cs @@ -0,0 +1,50 @@ +using System.Collections.Concurrent; + +namespace Elsa.Testing.Shared.Services; + +public class SignalManager +{ + private readonly ConcurrentDictionary> _signals = new(); + + public async Task WaitAsync(object signal, int millisecondsTimeout = 60000) + { + var result = await WaitAsync(signal, millisecondsTimeout); + + if(result is not T typedResult) + throw new InvalidCastException($"Signal '{signal}' was not of type '{typeof(T).Name}'."); + + return typedResult; + } + + public async Task WaitAsync(object signal, int millisecondsTimeout = 60000) + { + var taskCompletionSource = GetOrCreate(signal); + using var cancellationTokenSource = new CancellationTokenSource(millisecondsTimeout); + try + { + await Task.WhenAny(taskCompletionSource.Task, Task.Delay(millisecondsTimeout, cancellationTokenSource.Token)); + cancellationTokenSource.Token.ThrowIfCancellationRequested(); + _signals.TryRemove(signal, out _); + return await taskCompletionSource.Task; + } + catch (OperationCanceledException) + { + throw new TimeoutException($"Signal '{signal}' timed out after {millisecondsTimeout} milliseconds."); + } + } + + public void Trigger(object signal, object? result = null) + { + var taskCompletionSource = GetOrCreate(signal); + + if (taskCompletionSource.Task.IsCompleted) + return; + + taskCompletionSource.SetResult(result); + } + + private TaskCompletionSource GetOrCreate(object eventName) + { + return _signals.GetOrAdd(eventName, _ => new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously)); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Services/StaticValueHolder.cs b/src/common/Elsa.Testing.Shared.Component/Services/StaticValueHolder.cs new file mode 100644 index 0000000..f99b9e2 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/StaticValueHolder.cs @@ -0,0 +1,6 @@ +namespace Elsa.Testing.Shared.Services; + +public static class StaticValueHolder +{ + public static object? Value { get; set; } +} diff --git a/src/common/Elsa.Testing.Shared.Component/Services/TestTenantResolver.cs b/src/common/Elsa.Testing.Shared.Component/Services/TestTenantResolver.cs new file mode 100644 index 0000000..042db6e --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/TestTenantResolver.cs @@ -0,0 +1,11 @@ +using Elsa.Common.Multitenancy; + +namespace Elsa.Testing.Shared.Services; + +public class TestTenantResolver : TenantResolverBase +{ + protected override TenantResolverResult Resolve(TenantResolverContext context) + { + return AutoResolve("Tenant1"); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Services/TestTenantsProvider.cs b/src/common/Elsa.Testing.Shared.Component/Services/TestTenantsProvider.cs new file mode 100644 index 0000000..8dffc68 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/TestTenantsProvider.cs @@ -0,0 +1,20 @@ +using Elsa.Common.Multitenancy; +using JetBrains.Annotations; + +namespace Elsa.Testing.Shared.Services; + +[UsedImplicitly] +public class TestTenantsProvider(params string[] tenantIds) : ITenantsProvider +{ + public Task> ListAsync(CancellationToken cancellationToken = default) + { + var tenants = tenantIds.Select(id => new Tenant {Id = id, Name = id}); + return Task.FromResult(tenants); + } + + public async Task FindAsync(TenantFilter filter, CancellationToken cancellationToken = default) + { + var query = (await ListAsync(cancellationToken)).AsQueryable(); + return filter.Apply(query).FirstOrDefault(); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Services/TriggerChangeTokenSignalEvents..cs b/src/common/Elsa.Testing.Shared.Component/Services/TriggerChangeTokenSignalEvents..cs new file mode 100644 index 0000000..3d152ec --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/TriggerChangeTokenSignalEvents..cs @@ -0,0 +1,7 @@ +namespace Elsa.Testing.Shared.Services; + +public class TriggerChangeTokenSignalEvents +{ + public event EventHandler? ChangeTokenSignalTriggered; + public void RaiseChangeTokenSignalTriggered(TriggerChangeTokenSignalEventArgs args) => ChangeTokenSignalTriggered?.Invoke(this, args); +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Services/WorkflowDefinitionEvents.cs b/src/common/Elsa.Testing.Shared.Component/Services/WorkflowDefinitionEvents.cs new file mode 100644 index 0000000..03caa9f --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/WorkflowDefinitionEvents.cs @@ -0,0 +1,7 @@ +namespace Elsa.Testing.Shared.Services; + +public class WorkflowDefinitionEvents +{ + public event EventHandler? WorkflowDefinitionDeleted; + public void OnWorkflowDefinitionDeleted(WorkflowDefinitionDeletedEventArgs args) => WorkflowDefinitionDeleted?.Invoke(this, args); +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Component/Services/WorkflowEvents.cs b/src/common/Elsa.Testing.Shared.Component/Services/WorkflowEvents.cs new file mode 100644 index 0000000..a90b9b9 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Component/Services/WorkflowEvents.cs @@ -0,0 +1,9 @@ +namespace Elsa.Testing.Shared.Services; + +public class WorkflowEvents +{ + public event EventHandler? WorkflowFinished; + public event EventHandler? WorkflowInstanceSaved; + public void OnWorkflowFinished(WorkflowFinishedEventArgs args) => WorkflowFinished?.Invoke(this, args); + public void OnWorkflowInstanceSaved(WorkflowInstanceSavedEventArgs args) => WorkflowInstanceSaved?.Invoke(this, args); +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/DispatchWorkflowExtensions.cs b/src/common/Elsa.Testing.Shared.Integration/DispatchWorkflowExtensions.cs new file mode 100644 index 0000000..fcd9264 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/DispatchWorkflowExtensions.cs @@ -0,0 +1,86 @@ +using Elsa.Extensions; +using Elsa.Features.Services; +using Elsa.Mediator.Contracts; +using Elsa.Workflows; +using Elsa.Workflows.Notifications; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Contracts; +using Elsa.Workflows.Runtime.Requests; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Elsa.Testing.Shared; + +public static class DispatchWorkflowExtensions +{ + public static async Task DispatchWorkflowAndRunToCompletion( + this IWorkflow workflowDefinition, + Action? configureServices = null, + Action? configureElsa = null, + string? instanceId = null, + TimeSpan? timeout = null) + { + var semaphore = new SemaphoreSlim(0, 1); + WorkflowFinished? workflowFinishedRecord = null; + + var host = Host.CreateDefaultBuilder() + .ConfigureServices(services => + { + configureServices?.Invoke(services); + + // This notification handler will capture the WorkflowFinished record (to be returned) and release the semaphore. + services.AddNotificationHandler(sp => new(notification => + { + workflowFinishedRecord = notification; + semaphore.Release(); + })); + + services.AddElsa(elsa => configureElsa?.Invoke(elsa)); + }) + .Build(); + + try + { + // Start the host. + await host.StartAsync(CancellationToken.None); + using var scope = host.Services.CreateScope(); + var serviceProvider = scope.ServiceProvider; + await serviceProvider.PopulateRegistriesAsync(); + + // Build the workflow + var workflowBuilderFactory = serviceProvider.GetRequiredService(); + var workflow = await workflowBuilderFactory.CreateBuilder().BuildWorkflowAsync(workflowDefinition); + + // Register the workflow + var workflowRegistry = serviceProvider.GetRequiredService(); + await workflowRegistry.RegisterAsync(workflow); + + // Dispatch the workflow + var workflowDispatcher = serviceProvider.GetRequiredService(); + var dispatchWorkflowResponse = await workflowDispatcher.DispatchAsync(new DispatchWorkflowDefinitionRequest + { + DefinitionVersionId = workflow.DefinitionHandle.DefinitionVersionId, + InstanceId = instanceId ?? Guid.NewGuid().ToString(), + }); + dispatchWorkflowResponse.ThrowIfFailed(); + + // Wait for the workflow to complete, and then return the WorkflowFinished notification. + var signaled = await semaphore.WaitAsync(timeout ?? TimeSpan.FromSeconds(5)); + return signaled ? workflowFinishedRecord : null; + } + finally + { + // Stop the host. + await host.StopAsync(CancellationToken.None); + } + } + + class WorkflowFinishedAction(Action action) : INotificationHandler + { + public Task HandleAsync(WorkflowFinished notification, CancellationToken cancellationToken) + { + action(notification); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj b/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj new file mode 100644 index 0000000..06b02b1 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/Elsa.Testing.Shared.Integration.csproj @@ -0,0 +1,26 @@ + + + + + Provides common utilities that are helpful when writing integration tests against Elsa Workflows functionality. + + elsa, integration testing + Elsa.Testing.Shared + + + + + + + + + + + + + + + + + + diff --git a/src/common/Elsa.Testing.Shared.Integration/FodyWeavers.xml b/src/common/Elsa.Testing.Shared.Integration/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/RunActivityExtensions.cs b/src/common/Elsa.Testing.Shared.Integration/RunActivityExtensions.cs new file mode 100644 index 0000000..52bc601 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/RunActivityExtensions.cs @@ -0,0 +1,52 @@ +using Elsa.Common.Models; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Models; +using Elsa.Workflows.Models; +using Elsa.Workflows.Options; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.Messages; +using Elsa.Workflows.State; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Testing.Shared; + +/// +/// Provides extension methods for . +/// +[PublicAPI] +public static class RunActivityExtensions +{ + /// + /// Runs the specified activity. + /// + /// The service provider. + /// The activity to run. + /// An optional cancellation token. + /// The result of running the activity. + public static async Task RunActivityAsync(this IServiceProvider services, IActivity activity, CancellationToken cancellationToken = default) + { + await services.PopulateRegistriesAsync(); + var workflowRunner = services.GetRequiredService(); + var result = await workflowRunner.RunAsync(activity, cancellationToken: cancellationToken); + return result; + } + + /// + /// Runs the specified activity. + /// + /// The service provider. + /// The activity to run. + /// An set of options. + /// An optional cancellation token. + /// The result of running the activity. + public static async Task RunActivityAsync(this IServiceProvider services, IActivity activity, RunWorkflowOptions options, CancellationToken cancellationToken = default) + { + var workflowRunner = services.GetRequiredService(); + var result = await workflowRunner.RunAsync(activity, options, cancellationToken); + return result; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/RunWorkflowExtensions.cs b/src/common/Elsa.Testing.Shared.Integration/RunWorkflowExtensions.cs new file mode 100644 index 0000000..25e8b3c --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/RunWorkflowExtensions.cs @@ -0,0 +1,81 @@ +using Elsa.Common.Models; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Models; +using Elsa.Workflows.Models; +using Elsa.Workflows.Options; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.Messages; +using Elsa.Workflows.State; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Testing.Shared; + +/// +/// Provides extension methods for . +/// +[PublicAPI] +public static class RunWorkflowExtensions +{ + /// + /// Runs a workflow until its end, automatically resuming any bookmark it encounters. + /// + /// The services. + /// The ID of the workflow definition. + /// An optional dictionary of input values. + /// An optional set of options to specify the version of the workflow definition to retrieve. + /// The workflow state. + public static async Task RunWorkflowUntilEndAsync(this IServiceProvider services, + string workflowDefinitionId, + IDictionary? input = null, + VersionOptions? versionOptions = null) + { + var workflowDefinitionService = services.GetRequiredService(); + var workflowGraph = await workflowDefinitionService.FindWorkflowGraphAsync(workflowDefinitionId, versionOptions ?? VersionOptions.Published); + var workflowRuntime = services.GetRequiredService(); + var workflowClient = await workflowRuntime.CreateClientAsync(); + var response = await workflowClient.CreateAndRunInstanceAsync(new() + { + WorkflowDefinitionHandle = WorkflowDefinitionHandle.ByDefinitionVersionId(workflowGraph!.Workflow.Identity.Id), + Input = input + }); + + var bookmarkStore = services.GetRequiredService(); + + // Continue resuming the workflow for as long as there are bookmarks to resume and the workflow is not Finished. + while (response.Status != WorkflowStatus.Finished) + { + var bookmarks = (await bookmarkStore.FindManyAsync(new() + { + WorkflowInstanceId = response.WorkflowInstanceId + })).ToList(); + + if (!bookmarks.Any()) + break; + + foreach (var bookmark in bookmarks) + { + var runRequest = new RunWorkflowInstanceRequest + { + BookmarkId = bookmark.Id + }; + response = await workflowClient.RunInstanceAsync(runRequest); + } + } + + // Return the workflow state. + return await workflowClient.ExportStateAsync(); + } + + /// + /// Runs a workflow until its end, automatically resuming any bookmark it encounters. + /// + public static async Task RunWorkflowUntilEndAsync(this IServiceProvider services, IDictionary? input = null) where TWorkflow : IWorkflow + { + var workflowDefinitionId = typeof(TWorkflow).Name; + return await services.RunWorkflowUntilEndAsync(workflowDefinitionId, input); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/ServiceProviderExtensions.cs b/src/common/Elsa.Testing.Shared.Integration/ServiceProviderExtensions.cs new file mode 100644 index 0000000..b4dfd6e --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/ServiceProviderExtensions.cs @@ -0,0 +1,70 @@ +using Elsa.Common.Models; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Models; +using Elsa.Workflows.Models; +using Elsa.Workflows.Options; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.Messages; +using Elsa.Workflows.State; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Testing.Shared; + +/// +/// Provides extension methods for . +/// +[PublicAPI] +public static class ServiceProviderExtensions +{ + /// + /// Updates the registries. + /// + /// The services. + public static Task PopulateRegistriesAsync(this IServiceProvider services) + { + var registriesPopulator = services.GetRequiredService(); + return registriesPopulator.PopulateAsync(); + } + + /// + /// Imports a workflow definition from a file. + /// + /// The services. + /// The file name. + /// The workflow definition. + public static async Task ImportWorkflowDefinitionAsync(this IServiceProvider services, string fileName) + { + var json = await File.ReadAllTextAsync(fileName); + var serializer = services.GetRequiredService(); + var model = serializer.Deserialize(json); + + var workflowDefinitionRequest = new SaveWorkflowDefinitionRequest + { + Model = model, + Publish = true + }; + + var workflowDefinitionImporter = services.GetRequiredService(); + var result = await workflowDefinitionImporter.ImportAsync(workflowDefinitionRequest); + return result.WorkflowDefinition; + } + + /// + /// Retrieves a workflow definition by its ID. + /// + /// The service provider. + /// The definition ID of the workflow definition. + /// Options to specify the version of the workflow definition to retrieve. + /// A cancellation token to cancel the operation. + /// The retrieved workflow definition. + public static async Task GetWorkflowDefinitionAsync(this IServiceProvider services, string workflowDefinitionId, VersionOptions versionOptions, CancellationToken cancellationToken = default) + { + var workflowDefinitionService = services.GetRequiredService(); + var workflowDefinition = await workflowDefinitionService.FindWorkflowDefinitionAsync(workflowDefinitionId, versionOptions, cancellationToken); + return workflowDefinition!; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/TestApplicationBuilder.cs b/src/common/Elsa.Testing.Shared.Integration/TestApplicationBuilder.cs new file mode 100644 index 0000000..48a1118 --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/TestApplicationBuilder.cs @@ -0,0 +1,123 @@ +using Elsa.Extensions; +using Elsa.Features.Services; +using Elsa.Workflows; +using Elsa.Workflows.Activities; +using FluentStorage; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Xunit.Abstractions; + +namespace Elsa.Testing.Shared; + +/// +/// A builder that can be used to configure an for testing purposes. +/// +public class TestApplicationBuilder +{ + private readonly ITestOutputHelper _testOutputHelper; + private readonly ServiceCollection _services; + private Action _configureElsa; + + /// + /// Initializes a new instance of the class. + /// + /// The test output helper. + public TestApplicationBuilder(ITestOutputHelper testOutputHelper) + { + _testOutputHelper = testOutputHelper; + _services = new(); + + _services + .AddSingleton(testOutputHelper) + .AddSingleton() + .AddLogging(logging => logging.AddProvider(new XunitLoggerProvider(testOutputHelper)).SetMinimumLevel(LogLevel.Debug)); + + _configureElsa += elsa => elsa + .AddActivitiesFrom() + .UseScheduling() + .UseCSharp() + .UseJavaScript() + .UseLiquid() + .UseDsl() + .UseWorkflowManagement() + .UseWorkflows(workflows => workflows + .WithStandardOutStreamProvider(_ => new StandardOutStreamProvider(new XunitConsoleTextWriter(_testOutputHelper))) + ); + } + + /// + /// Builds the . + /// + /// The . + public IServiceProvider Build() + { + _services.AddElsa(_configureElsa); + return _services.BuildServiceProvider(); + } + + /// + /// Configures Elsa. + /// + /// The configuration delegate. + /// The . + public TestApplicationBuilder ConfigureElsa(Action configure) + { + _configureElsa += configure; + return this; + } + + /// + /// Configures the service provider. + /// + /// The configuration delegate. + /// The . + public TestApplicationBuilder ConfigureServices(Action configure) + { + configure(_services); + return this; + } + + /// + /// Configures the service provider to use a to capture standard output. + /// + /// The capturing text writer. + /// The . + public TestApplicationBuilder WithCapturingTextWriter(CapturingTextWriter capturingTextWriter) + { + var combinedTextWriter = new CombinedTextWriter(capturingTextWriter, new XunitConsoleTextWriter(_testOutputHelper)); + var provider = new StandardOutStreamProvider(combinedTextWriter); + + ConfigureElsa(elsa => elsa.UseWorkflows(workflows => workflows.WithStandardOutStreamProvider(_ => provider))); + return this; + } + + /// + /// Adds a workflow to the service provider. + /// + public TestApplicationBuilder AddWorkflow() where T : IWorkflow + { + return ConfigureElsa(elsa => elsa.AddWorkflow()); + } + + /// + /// Adds activities from the assembly containing the specified type. + /// + public TestApplicationBuilder AddActivitiesFrom() + { + return ConfigureElsa(elsa => elsa.AddActivitiesFrom()); + } + + /// + /// Add workflows from the specified relative directory. + /// + /// The path segments of the directory. + public TestApplicationBuilder WithWorkflowsFromDirectory(params string[] directory) + { + var assemblyLocation = System.Reflection.Assembly.GetExecutingAssembly().Location; + var assemblyDirectory = Path.GetDirectoryName(assemblyLocation)!; + var workflowsDirectory = directory.Prepend(assemblyDirectory).ToArray(); + _configureElsa += elsa => elsa.UseFluentStorageProvider(storage => storage.BlobStorage = sp => StorageFactory.Blobs.DirectoryFiles(Path.Combine(workflowsDirectory))); + return this; + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared.Integration/TestWorkflow.cs b/src/common/Elsa.Testing.Shared.Integration/TestWorkflow.cs new file mode 100644 index 0000000..e24602f --- /dev/null +++ b/src/common/Elsa.Testing.Shared.Integration/TestWorkflow.cs @@ -0,0 +1,23 @@ +using Elsa.Workflows; + +namespace Elsa.Testing.Shared; + +public class TestWorkflow : WorkflowBase +{ + private readonly Action _buildWorkflow; + + public TestWorkflow(Action buildWorkflow) + { + _buildWorkflow = buildWorkflow; + } + + protected override void Build(IWorkflowBuilder workflowBuilder) + { + _buildWorkflow(workflowBuilder); + + if (string.IsNullOrEmpty(workflowBuilder.Id)) + { + workflowBuilder.Id = Guid.NewGuid().ToString(); + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/CapturingTextWriter.cs b/src/common/Elsa.Testing.Shared/CapturingTextWriter.cs new file mode 100644 index 0000000..b887a73 --- /dev/null +++ b/src/common/Elsa.Testing.Shared/CapturingTextWriter.cs @@ -0,0 +1,42 @@ +using System.Text; + +namespace Elsa.Testing.Shared; + +/// +/// Captures lines of text. +/// +public class CapturingTextWriter : TextWriter +{ + private readonly ICollection _lines = new List(); + private IList _line = new List(); + + public IReadOnlyCollection Lines => _lines.ToList(); + public override Encoding Encoding => Console.Out.Encoding; + + public override void Write(char value) + { + if (value == '\n') + { + FlushLine(); + _line = new List(); + return; + } + + _line.Add(value); + } + + protected override void Dispose(bool disposing) + { + if (_line.Count > 0) + FlushLine(); + base.Dispose(disposing); + } + + private void FlushLine() + { + if (_line.Count > 0 && _line.Last() == '\r') + _line.RemoveAt(_line.Count - 1); + + _lines.Add(new string(_line.ToArray())); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/CombinedTextWriter.cs b/src/common/Elsa.Testing.Shared/CombinedTextWriter.cs new file mode 100644 index 0000000..8fede95 --- /dev/null +++ b/src/common/Elsa.Testing.Shared/CombinedTextWriter.cs @@ -0,0 +1,25 @@ +using System.Text; + +namespace Elsa.Testing.Shared; + +/// +/// Forwards text to the specified list of writers. +/// +public class CombinedTextWriter : TextWriter +{ + private readonly IEnumerable _targets; + public CombinedTextWriter(IEnumerable targets) => _targets = targets; + public CombinedTextWriter(params TextWriter[] targets) => _targets = targets; + public override Encoding Encoding => Console.Out.Encoding; + + public override void Write(char value) + { + foreach (var target in _targets) target.Write(value); + } + + protected override void Dispose(bool disposing) + { + foreach (var target in _targets) target.Dispose(); + base.Dispose(disposing); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj b/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj new file mode 100644 index 0000000..ceabd44 --- /dev/null +++ b/src/common/Elsa.Testing.Shared/Elsa.Testing.Shared.csproj @@ -0,0 +1,24 @@ + + + + + Provides common utilities that are helpful when writing tests against Elsa Workflows functionality. + + elsa, unit testing + + + + + + + + + + + + + + + + + diff --git a/src/common/Elsa.Testing.Shared/FodyWeavers.xml b/src/common/Elsa.Testing.Shared/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/common/Elsa.Testing.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/UnicodeRangeGenerator.cs b/src/common/Elsa.Testing.Shared/UnicodeRangeGenerator.cs new file mode 100644 index 0000000..24eb7c6 --- /dev/null +++ b/src/common/Elsa.Testing.Shared/UnicodeRangeGenerator.cs @@ -0,0 +1,70 @@ +namespace Elsa.Testing.Shared; + +/// +/// Generates Unicode ranges. +/// +public static class UnicodeRangeGenerator +{ + /// + /// Generates a range of Unicode characters. + /// + public static string GenerateUnicodeString() + { + // This method generates a string containing characters from various Unicode ranges. + var sb = new System.Text.StringBuilder(); + + // Add some characters from various ranges + sb.Append('a'); // Basic Latin + sb.Append('\u0370'); // Greek and Coptic + sb.Append('\u200B'); // Zero width space + sb.Append('\u4E00'); // CJK Unified Ideographs + + // German umlauts (in unicode): + sb.Append('\u00E4'); // ä + sb.Append('\u00F6'); // ö + sb.Append('\u00FC'); // ü + sb.Append('\u00DF'); // ß + + // French characters (in unicode): + sb.Append('\u00E0'); // à + sb.Append('\u00E2'); // â + sb.Append('\u00E7'); // ç + sb.Append('\u00E8'); // è + + // Chinese characters (in unicode): + sb.Append('\u4E00'); // 一 + sb.Append('\u4E01'); // � + sb.Append('\u4E02'); // 丂 + sb.Append('\u4E03'); // 七 + + // Russian characters (in unicode): + sb.Append('\u0410'); // � + sb.Append('\u0411'); // Б + sb.Append('\u0412'); // В + sb.Append('\u0413'); // Г + sb.Append('\u0414'); // Д + sb.Append('\u0415'); // Е + + // Arabic characters (in unicode): + sb.Append('\u0627'); // ا + sb.Append('\u0628'); // ب + sb.Append('\u0629'); // ة + sb.Append('\u062A'); // ت + + // Syriac characters (in unicode): + sb.Append('\u0710'); // � + sb.Append('\u0711'); // ܑ + sb.Append('\u0712'); // ܒ + sb.Append('\u0713'); // ܓ + sb.Append('\u0714'); // ܔ + + // Hebrew characters (in unicode): + sb.Append('\u05D0'); // � + sb.Append('\u05D1'); // ב + sb.Append('\u05D2'); // ג + sb.Append('\u05D3'); // ד + + return sb.ToString(); + } + +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/XunitConsoleTextWriter.cs b/src/common/Elsa.Testing.Shared/XunitConsoleTextWriter.cs new file mode 100644 index 0000000..22a3857 --- /dev/null +++ b/src/common/Elsa.Testing.Shared/XunitConsoleTextWriter.cs @@ -0,0 +1,42 @@ +using System.Text; +using Xunit.Abstractions; + +namespace Elsa.Testing.Shared; + +/// +/// Forwards text to . +/// +public class XunitConsoleTextWriter : TextWriter +{ + private readonly ITestOutputHelper _output; + private IList _line = new List(); + public XunitConsoleTextWriter(ITestOutputHelper output) => _output = output; + public override Encoding Encoding => Console.Out.Encoding; + + public override void Write(char value) + { + if (value == '\n') + { + FlushLine(); + _line = new List(); + return; + } + + _line.Add(value); + } + + protected override void Dispose(bool disposing) + { + if (_line.Count > 0) + FlushLine(); + base.Dispose(disposing); + } + + private void FlushLine() + { + if (_line.Count > 0 && _line.Last() == '\r') + _line.RemoveAt(_line.Count - 1); + + _output.WriteLine(new string(_line.ToArray())); + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/XunitLogger.cs b/src/common/Elsa.Testing.Shared/XunitLogger.cs new file mode 100644 index 0000000..08c9471 --- /dev/null +++ b/src/common/Elsa.Testing.Shared/XunitLogger.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Logging; +using Xunit.Abstractions; + +namespace Elsa.Testing.Shared; + +public class XunitLogger : ILogger +{ + private readonly ITestOutputHelper _testOutputHelper; + private readonly string _categoryName; + + public XunitLogger(ITestOutputHelper testOutputHelper, string categoryName) + { + _testOutputHelper = testOutputHelper; + _categoryName = categoryName; + } + + public IDisposable BeginScope(TState state) => NoopDisposable.Instance; + + public bool IsEnabled(LogLevel logLevel) + => true; + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) + { + _testOutputHelper.WriteLine($"{_categoryName} [{eventId}] {formatter(state, exception)}"); + + if (exception != null) + _testOutputHelper.WriteLine(exception.ToString()); + } + + private class NoopDisposable : IDisposable + { + public static readonly NoopDisposable Instance = new NoopDisposable(); + + public void Dispose() + { + } + } +} \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/XunitLoggerProvider.cs b/src/common/Elsa.Testing.Shared/XunitLoggerProvider.cs new file mode 100644 index 0000000..f9816fc --- /dev/null +++ b/src/common/Elsa.Testing.Shared/XunitLoggerProvider.cs @@ -0,0 +1,18 @@ +using Microsoft.Extensions.Logging; +using Xunit.Abstractions; + +namespace Elsa.Testing.Shared; + +/// +/// Provides an implementation that writes log messages to xUnit's . +/// +public class XunitLoggerProvider(ITestOutputHelper testOutputHelper) : ILoggerProvider +{ + /// + public ILogger CreateLogger(string categoryName) => new XunitLogger(testOutputHelper, categoryName); + + /// + public void Dispose() + { + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Abstractions/AlterationBase.cs b/src/modules/Elsa.Alterations.Core/Abstractions/AlterationBase.cs new file mode 100644 index 0000000..e7f0f24 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Abstractions/AlterationBase.cs @@ -0,0 +1,10 @@ +using Elsa.Alterations.Core.Contracts; + +namespace Elsa.Alterations.Core.Abstractions; + +/// +/// A base class for alterations. +/// +public abstract class AlterationBase : IAlteration +{ +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Abstractions/AlterationHandlerBase.cs b/src/modules/Elsa.Alterations.Core/Abstractions/AlterationHandlerBase.cs new file mode 100644 index 0000000..0652234 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Abstractions/AlterationHandlerBase.cs @@ -0,0 +1,33 @@ +using Elsa.Alterations.Core.Contexts; +using Elsa.Alterations.Core.Contracts; + +namespace Elsa.Alterations.Core.Abstractions; + +/// +/// A base class for alterations. +/// +public abstract class AlterationHandlerBase : IAlterationHandler +{ + /// + public abstract bool CanHandle(IAlteration alteration); + + /// + public abstract ValueTask HandleAsync(AlterationContext context); +} + +/// +public abstract class AlterationHandlerBase : AlterationHandlerBase where T : IAlteration +{ + /// + public override bool CanHandle(IAlteration alteration) => alteration is T; + + /// + public override ValueTask HandleAsync(AlterationContext context) => HandleAsync(context, (T)context.Alteration); + + /// + /// Applies the alteration to the specified context. + /// + /// A context object that contains information for the alteration and provides a way to alter the workflow instance and control the alteration process. + /// A strongly typed alteration. + protected abstract ValueTask HandleAsync(AlterationContext context, T alteration); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contexts/AlterationHandlerContext.cs b/src/modules/Elsa.Alterations.Core/Contexts/AlterationHandlerContext.cs new file mode 100644 index 0000000..9836749 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contexts/AlterationHandlerContext.cs @@ -0,0 +1,155 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using Elsa.Workflows; +using Elsa.Workflows.Activities; +using Microsoft.Extensions.Logging; + +namespace Elsa.Alterations.Core.Contexts; + +/// +/// Provides contextual information about an alteration. +/// +public class AlterationContext +{ + /// + /// Initializes a new instance of the class. + /// + public AlterationContext( + IAlteration alteration, + WorkflowExecutionContext workflowExecutionContext, + AlterationLog log, + CancellationToken cancellationToken) + { + Alteration = alteration; + WorkflowExecutionContext = workflowExecutionContext; + AlterationLog = log; + CancellationToken = cancellationToken; + } + + /// + /// The alteration being handled. + /// + public IAlteration Alteration { get; } + + /// + /// A workflow execution context of the workflow instance being altered. This offers maximum flexibility for altering the workflow state. + /// + public WorkflowExecutionContext WorkflowExecutionContext { get; set; } + + /// + /// The workflow of the workflow instance being altered. + /// + public Workflow Workflow => WorkflowExecutionContext.Workflow; + + /// + /// The cancellation token. + /// + public CancellationToken CancellationToken { get; } + + /// + /// The service provider. + /// + public IServiceProvider ServiceProvider => WorkflowExecutionContext.ServiceProvider; + + /// + /// The alteration log. + /// + public AlterationLog AlterationLog { get; } + + /// + /// A flag indicating whether the alteration has succeeded. + /// + public bool HasSucceeded { get; private set; } + + /// + /// A flag indicating whether the alteration has failed. + /// + public bool HasFailed { get; private set; } + + /// + /// An optional action to be executed when the alteration is committed. Set this to perform permanent side effects such as deleting records form the database. + /// + public Func? CommitAction { get; set; } + + /// + /// Logs a message. + /// + /// The event name to log. + /// The message to log. + /// The log level. + public void Log(string eventName, string message, LogLevel logLevel = LogLevel.Information) + { + AlterationLog.Add(message, logLevel, eventName); + } + + /// + /// Marks the alteration as succeeded. + /// + public void Succeed() + { + Succeed($"{Alteration.GetType().Name} succeeded"); + } + + /// + /// Marks the alteration as succeeded. + /// + public void Succeed(Func commitAction) + { + Succeed(); + CommitAction = commitAction; + } + + /// + /// Marks the alteration as succeeded. + /// + public void Succeed(Action commitAction) + { + Succeed(); + CommitAction = () => + { + commitAction(); + return Task.CompletedTask; + }; + } + + /// + /// Marks the alteration as succeeded. + /// + public void Succeed(string message) + { + HasSucceeded = true; + Log($"Alteration {Alteration.GetType().Name} succeeded", message); + } + + /// + /// Marks the alteration as succeeded. + /// + public void Succeed(string message, Func commitAction) + { + Succeed(message); + CommitAction = commitAction; + } + + /// + /// Marks the alteration as succeeded. + /// + public void Succeed(string message, Action commitAction) + { + Succeed(message); + CommitAction = () => + { + commitAction(); + return Task.CompletedTask; + }; + } + + /// + /// Marks the alteration as failed. + /// + /// An optional message. + public void Fail(string? message = null) + { + HasFailed = true; + Log($"Alteration {Alteration.GetType().Name} failed", message ?? $"{Alteration.GetType().Name} failed", LogLevel.Error); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlteration.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlteration.cs new file mode 100644 index 0000000..33150b9 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlteration.cs @@ -0,0 +1,8 @@ +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Represents an alteration. +/// +public interface IAlteration +{ +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationHandler.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationHandler.cs new file mode 100644 index 0000000..e8aee6e --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationHandler.cs @@ -0,0 +1,21 @@ +using Elsa.Alterations.Core.Contexts; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Represents a change to a given type T. +/// +public interface IAlterationHandler +{ + /// + /// Returns true if the alteration is supported by this handler; otherwise, false. + /// + /// + bool CanHandle(IAlteration alteration); + + /// + /// Applies the alteration to the specified context. + /// + /// A context object that contains information for the alteration and provides a way to alter the workflow instance and control the alteration process. + ValueTask HandleAsync(AlterationContext context); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobDispatcher.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobDispatcher.cs new file mode 100644 index 0000000..e3191dd --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobDispatcher.cs @@ -0,0 +1,14 @@ +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Dispatches an alteration job for execution. +/// +public interface IAlterationJobDispatcher +{ + /// + /// Dispatches an alteration job for execution. + /// + /// The ID of the job to dispatch. + /// An optional cancellation token. + ValueTask DispatchAsync(string jobId, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobRunner.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobRunner.cs new file mode 100644 index 0000000..82139c7 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobRunner.cs @@ -0,0 +1,17 @@ +using Elsa.Alterations.Core.Entities; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Executes an alteration job. +/// +public interface IAlterationJobRunner +{ + /// + /// Executes the specified alteration plan. + /// + /// The Id of the alteration job to execute. + /// An optional cancellation token. + /// The job with updated state. + Task RunAsync(string jobId, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobStore.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobStore.cs new file mode 100644 index 0000000..6d2dc59 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationJobStore.cs @@ -0,0 +1,41 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Filters; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// A store for alteration jobs. +/// +public interface IAlterationJobStore +{ + /// + /// Saves the specified alteration job. + /// + Task SaveAsync(AlterationJob job, CancellationToken cancellationToken = default); + + /// + /// Saves the specified alteration jobs. + /// + Task SaveManyAsync(IEnumerable jobs, CancellationToken cancellationToken = default); + + /// + /// Finds the alteration job matching the specified filter. + /// + Task FindAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default); + + /// + /// Finds all alteration jobs matching the specified filter. + /// + Task> FindManyAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default); + + /// + /// Finds the IDs of all alteration jobs matching the specified filter. + /// + /// + Task> FindManyIdsAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default); + + /// + /// Returns the number of alteration jobs matching the specified filter. + /// + Task CountAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanManager.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanManager.cs new file mode 100644 index 0000000..617cf28 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanManager.cs @@ -0,0 +1,24 @@ +using Elsa.Alterations.Core.Entities; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Represents a manager for alteration plans. +/// +public interface IAlterationPlanManager +{ + /// + /// Gets an alteration plan by ID. + /// + Task GetPlanAsync(string planId, CancellationToken cancellationToken = default); + + /// + /// Gets a value indicating whether all jobs in the plan have been completed. + /// + Task GetIsAllJobsCompletedAsync(string planId, CancellationToken cancellationToken = default); + + /// + /// Completes an alteration plan. + /// + Task CompletePlanAsync(AlterationPlan plan, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanScheduler.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanScheduler.cs new file mode 100644 index 0000000..68ee9b2 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanScheduler.cs @@ -0,0 +1,14 @@ +using Elsa.Alterations.Core.Models; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Scheduler for alteration plans. +/// +public interface IAlterationPlanScheduler +{ + /// + /// Submits an alteration plan for execution. + /// + Task SubmitAsync(AlterationPlanParams planParams, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanStore.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanStore.cs new file mode 100644 index 0000000..9029948 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationPlanStore.cs @@ -0,0 +1,25 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Filters; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// A store for alteration plans. +/// +public interface IAlterationPlanStore +{ + /// + /// Saves the specified alteration plan. + /// + Task SaveAsync(AlterationPlan plan, CancellationToken cancellationToken = default); + + /// + /// Finds the alteration plan matching the specified filter. + /// + Task FindAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default); + + /// + /// Returns the number of alteration plans matching the specified filter. + /// + Task CountAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationRunner.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationRunner.cs new file mode 100644 index 0000000..8693938 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationRunner.cs @@ -0,0 +1,25 @@ +using Elsa.Alterations.Core.Results; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Runs a series of alterations on the specified workflow execution context. +/// +public interface IAlterationRunner +{ + /// + /// Runs a series of alterations on the specified workflow instances. + /// + /// The IDs of the workflow instances to alter. + /// The alterations to run. + /// An optional cancellation token. + Task> RunAsync(IEnumerable workflowInstanceIds, IEnumerable alterations, CancellationToken cancellationToken = default); + + /// + /// Runs a series of alterations on the specified workflow instances. + /// + /// The ID of the workflow instance to alter. + /// The alterations to run. + /// An optional cancellation token. + Task RunAsync(string workflowInstanceId, IEnumerable alterations, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlterationSerializer.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationSerializer.cs new file mode 100644 index 0000000..c273789 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlterationSerializer.cs @@ -0,0 +1,27 @@ +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Serializes and deserializes objects. +/// +public interface IAlterationSerializer +{ + /// + /// Serializes the specified object. + /// + string Serialize(IAlteration alteration); + + /// + /// Serializes the specified set of objects. + /// + string SerializeMany(IEnumerable alterations); + + /// + /// Deserializes the specified JSON string into an object. + /// + IAlteration Deserialize(string json); + + /// + /// Deserializes the specified JSON string into a set of objects. + /// + IEnumerable DeserializeMany(string json); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IAlteredWorkflowDispatcher.cs b/src/modules/Elsa.Alterations.Core/Contracts/IAlteredWorkflowDispatcher.cs new file mode 100644 index 0000000..38374ca --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IAlteredWorkflowDispatcher.cs @@ -0,0 +1,23 @@ +using Elsa.Alterations.Core.Results; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Schedules a workflow instance to be resumed when an alteration job has been completed. +/// +public interface IAlteredWorkflowDispatcher +{ + /// + /// Schedules the altered workflow instances to be resumed. + /// + /// The results of running a series of alterations. + /// An optional cancellation token. + Task DispatchAsync(IEnumerable results, CancellationToken cancellationToken = default); + + /// + /// Schedules the altered workflow instance to be resumed. + /// + /// The result of running a series of alterations. + /// An optional cancellation token. + Task DispatchAsync(RunAlterationsResult result, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Contracts/IWorkflowInstanceFinder.cs b/src/modules/Elsa.Alterations.Core/Contracts/IWorkflowInstanceFinder.cs new file mode 100644 index 0000000..fd32593 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Contracts/IWorkflowInstanceFinder.cs @@ -0,0 +1,14 @@ +using Elsa.Alterations.Core.Models; + +namespace Elsa.Alterations.Core.Contracts; + +/// +/// Represents a service that can find workflow instances based on specified filters. +/// +public interface IWorkflowInstanceFinder +{ + /// + /// Finds workflow instances based on the specified filter. + /// + Task> FindAsync(AlterationWorkflowInstanceFilter filter, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Elsa.Alterations.Core.csproj b/src/modules/Elsa.Alterations.Core/Elsa.Alterations.Core.csproj new file mode 100644 index 0000000..716e77f --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Elsa.Alterations.Core.csproj @@ -0,0 +1,19 @@ + + + + + Provides core interfaces, models and services that support the alteration engine. + + elsa module alterations + + + + + + + + + + + + diff --git a/src/modules/Elsa.Alterations.Core/Entities/AlterationJob.cs b/src/modules/Elsa.Alterations.Core/Entities/AlterationJob.cs new file mode 100644 index 0000000..2cc6712 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Entities/AlterationJob.cs @@ -0,0 +1,46 @@ +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Models; +using Elsa.Common.Entities; + +namespace Elsa.Alterations.Core.Entities; + +/// +/// Represents the execution of the plan for an individual workflow instance. +/// +public class AlterationJob : Entity +{ + /// + /// The ID of the plan that this job belongs to. + /// + public string PlanId { get; set; } = default!; + + /// + /// The ID of the workflow instance that this job applies to. + /// + public string WorkflowInstanceId { get; set; } = default!; + + /// + /// The status of the job. + /// + public AlterationJobStatus Status { get; set; } + + /// + /// The serialized log of the job. + /// + public ICollection? Log { get; set; } = new List(); + + /// + /// The date and time at which the job was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// The date and time at which the job was started. + /// + public DateTimeOffset? StartedAt { get; set; } + + /// + /// The date and time at which the job was completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Entities/AlterationPlan.cs b/src/modules/Elsa.Alterations.Core/Entities/AlterationPlan.cs new file mode 100644 index 0000000..10c6a47 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Entities/AlterationPlan.cs @@ -0,0 +1,42 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Models; +using Elsa.Common.Entities; + +namespace Elsa.Alterations.Core.Entities; + +/// +/// A plan that contains a list of alterations to be applied to a set of workflow instances. +/// +public class AlterationPlan : Entity +{ + /// + /// The alterations to be applied. + /// + public ICollection Alterations { get; set; } = new List(); + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public AlterationWorkflowInstanceFilter WorkflowInstanceFilter { get; set; } = new(); + + /// + /// The status of the plan. + /// + public AlterationPlanStatus Status { get; set; } + + /// + /// The date and time at which the plan was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// The date and time at which the plan was started. + /// + public DateTimeOffset? StartedAt { get; set; } + + /// + /// The date and time at which the plan was completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Enums/AlterationJobStatus.cs b/src/modules/Elsa.Alterations.Core/Enums/AlterationJobStatus.cs new file mode 100644 index 0000000..d9d7ac7 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Enums/AlterationJobStatus.cs @@ -0,0 +1,27 @@ +namespace Elsa.Alterations.Core.Enums; + +/// +/// The status of an alteration plan for a workflow instance. +/// +public enum AlterationJobStatus +{ + /// + /// The plan is pending execution. + /// + Pending, + + /// + /// The plan is currently being executed. + /// + Running, + + /// + /// The plan has been completed. + /// + Completed, + + /// + /// The job has failed. + /// + Failed +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Enums/AlterationPlanStatus.cs b/src/modules/Elsa.Alterations.Core/Enums/AlterationPlanStatus.cs new file mode 100644 index 0000000..2ba9eea --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Enums/AlterationPlanStatus.cs @@ -0,0 +1,37 @@ +namespace Elsa.Alterations.Core.Enums; + +/// +/// The status of an alteration plan. +/// +public enum AlterationPlanStatus +{ + /// + /// The plan is pending execution. + /// + Pending, + + /// + /// The plan is currently generating jobs. + /// + Generating, + + /// + /// The plan is currently dispatching jobs. + /// + Dispatching, + + /// + /// The plan is currently being executed. + /// + Running, + + /// + /// The plan has been completed. + /// + Completed, + + /// + /// The plan has failed. + /// + Failed +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Alterations.Core/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..13f473b --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,37 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Options; +using Elsa.Alterations.Core.Serialization; +using Elsa.Alterations.Core.Services; +using Elsa.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.Core.Extensions; + +/// +/// Extension methods for . +/// +public static class ServiceCollectionExtensions +{ + /// + /// Adds the core Elsa alterations services. + /// + public static IServiceCollection AddAlterationsCore(this IServiceCollection services) + { + services.Configure(_ => { }); // Ensure that the options are configured even if the application doesn't do so. + services.AddScoped(); + services.AddScoped(); + services.AddSingleton(); + services.AddSerializationOptionsConfigurator(); + return services; + } + + /// + /// Adds an alteration handler. + /// + public static IServiceCollection AddAlteration(this IServiceCollection services) where T : IAlteration where THandler : class, IAlterationHandler + { + services.Configure(options => options.AlterationTypes.Add(typeof(T))); + services.AddScoped(); + return services; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Filters/AlterationJobFilter.cs b/src/modules/Elsa.Alterations.Core/Filters/AlterationJobFilter.cs new file mode 100644 index 0000000..37751d0 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Filters/AlterationJobFilter.cs @@ -0,0 +1,50 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Enums; + +namespace Elsa.Alterations.Core.Filters; + +/// +/// A filter for querying alteration jobs. +/// +public class AlterationJobFilter +{ + /// + /// The ID of the job. + /// + public string? Id { get; set; } + + /// + /// The ID of the plan. + /// + public string? PlanId { get; set; } + + /// + /// The status of the job. + /// + public AlterationJobStatus? Status { get; set; } + + /// + /// The statuses of the job to match. + /// + public ICollection? Statuses { get; set; } + + /// + /// Applies the filter to the specified query. + /// + public IQueryable Apply(IQueryable query) + { + if (!string.IsNullOrWhiteSpace(Id)) + query = query.Where(x => x.Id == Id); + + if (!string.IsNullOrWhiteSpace(PlanId)) + query = query.Where(x => x.PlanId == PlanId); + + if (Status != null) + query = query.Where(x => x.Status == Status); + + if (Statuses != null) + query = query.Where(x => Statuses.Contains(x.Status)); + + return query; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Filters/AlterationPlanFilter.cs b/src/modules/Elsa.Alterations.Core/Filters/AlterationPlanFilter.cs new file mode 100644 index 0000000..cc2cbc0 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Filters/AlterationPlanFilter.cs @@ -0,0 +1,25 @@ +using Elsa.Alterations.Core.Entities; + +namespace Elsa.Alterations.Core.Filters; + +/// +/// A filter for querying alteration plans. +/// +public class AlterationPlanFilter +{ + /// + /// The ID of the plan. + /// + public string? Id { get; set; } + + /// + /// Applies the filter to the specified query. + /// + public IQueryable Apply(IQueryable query) + { + if (!string.IsNullOrWhiteSpace(Id)) + query = query.Where(x => x.Id == Id); + + return query; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/FodyWeavers.xml b/src/modules/Elsa.Alterations.Core/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Models/ActivityFilter.cs b/src/modules/Elsa.Alterations.Core/Models/ActivityFilter.cs new file mode 100644 index 0000000..f13ba2c --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Models/ActivityFilter.cs @@ -0,0 +1,36 @@ +using Elsa.Workflows; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Core.Models; + +/// +/// Represents a filter for activities. +/// +[UsedImplicitly] +public class ActivityFilter +{ + /// + /// The ID of the activity. + /// + public string? ActivityId { get; set; } + + /// + /// The ID of the activity instance. + /// + public string? ActivityInstanceId { get; set; } + + /// + /// The node ID of the activity. + /// + public string? NodeId { get; set; } + + /// + /// The name of the activity. + /// + public string? Name { get; set; } + + /// + /// The status of the activity. + /// + public ActivityStatus? Status { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationLog.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationLog.cs new file mode 100644 index 0000000..1032bb5 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Models/AlterationLog.cs @@ -0,0 +1,46 @@ +using Elsa.Common; +using Microsoft.Extensions.Logging; + +namespace Elsa.Alterations.Core.Models; + + +/// +/// Represents a log of alterations. +/// +public class AlterationLog +{ + private readonly ISystemClock _systemClock; + private readonly List _logEntries = new(); + + /// + /// Initializes a new instance of the class. + /// + public AlterationLog(ISystemClock systemClock) + { + _systemClock = systemClock; + } + + /// + /// Gets the log entries. + /// + public IReadOnlyCollection LogEntries => _logEntries.ToList().AsReadOnly(); + + /// + /// Adds a log entry. + /// + /// The message. + /// The log level. + /// The event that generated the log entry. + public void Add(string message, LogLevel logLevel = LogLevel.Information, string? eventName = null) + { + var entry = new AlterationLogEntry(message, logLevel, _systemClock.UtcNow, eventName); + + _logEntries.Add(entry); + } + + /// + /// Adds a set of log entries. + /// + /// + public void AddRange(IEnumerable entries) => _logEntries.AddRange(entries); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationLogEntry.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationLogEntry.cs new file mode 100644 index 0000000..77b772c --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Models/AlterationLogEntry.cs @@ -0,0 +1,12 @@ +using Microsoft.Extensions.Logging; + +namespace Elsa.Alterations.Core.Models; + +/// +/// A log entry for an alteration. +/// +/// The log message. +/// The log level. +/// The timestamp when the log entry was created. +/// The event that generated the log entry. +public record AlterationLogEntry(string Message, LogLevel LogLevel, DateTimeOffset Timestamp, string? EventName = null); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationPlanParams.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationPlanParams.cs new file mode 100644 index 0000000..08c266c --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Models/AlterationPlanParams.cs @@ -0,0 +1,24 @@ +using Elsa.Alterations.Core.Contracts; + +namespace Elsa.Alterations.Core.Models; + +/// +/// Represents a new alteration plan. +/// +public class AlterationPlanParams +{ + /// + /// The unique identifier for the alteration plan. If not specified, a new ID will be generated. + /// + public string? Id { get; set; } + + /// + /// The alterations to be applied. + /// + public ICollection Alterations { get; set; } = new List(); + + /// + /// The filter used to determine which workflow instances that this plan applies to. + /// + public AlterationWorkflowInstanceFilter Filter { get; set; } = new(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Models/AlterationWorkflowInstanceFilter.cs b/src/modules/Elsa.Alterations.Core/Models/AlterationWorkflowInstanceFilter.cs new file mode 100644 index 0000000..51f2cd6 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Models/AlterationWorkflowInstanceFilter.cs @@ -0,0 +1,78 @@ +using Elsa.Workflows; +using Elsa.Workflows.Management.Models; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Core.Models; + +/// +/// Represents a filter for workflow instances. +/// +[UsedImplicitly] +public class AlterationWorkflowInstanceFilter +{ + /// + /// If the filter is empty, all records are matched. + /// + public bool EmptyFilterSelectsAll { get; set; } + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public IEnumerable? WorkflowInstanceIds { get; set; } + + /// + /// The correlation IDs of the workflow instances that this plan applies to. + /// + public IEnumerable? CorrelationIds { get; set; } + + /// + /// A collection of names associated with the workflow instances being filtered. + /// + public ICollection? Names { get; set; } + + /// + /// A search term used to filter workflow instances based on matching criteria. + /// + public string? SearchTerm { get; set; } + + /// + /// A collection of timestamp filters used for filtering data based on specified timestamp columns and operators. + /// + public IEnumerable? TimestampFilters { get; set; } + + /// + /// The IDs of the workflow definitions that this plan applies to. + /// + public ICollection? DefinitionIds { get; set; } + + /// + /// The IDs of the workflow definitions that this plan applies to. + /// + public IEnumerable? DefinitionVersionIds { get; set; } + + /// + /// Whether the workflow instances to match have incidents. + /// + public bool? HasIncidents { get; set; } + + /// + /// Whether the workflow instances to match are system workflows. Defaults to false. + /// + public bool? IsSystem { get; set; } = false; + + /// + /// Represents the workflow statuses included in the filter. + /// + public ICollection? Statuses { get; set; } + + /// + /// A collection of sub-statuses used to filter workflow instances by their specific sub-state. + /// + public ICollection? SubStatuses { get; set; } + + /// + /// Represents a collection of filters for activities. + /// + public IEnumerable? ActivityFilters { get; set; } + +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Models/NewAlterationJob.cs b/src/modules/Elsa.Alterations.Core/Models/NewAlterationJob.cs new file mode 100644 index 0000000..8b994b6 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Models/NewAlterationJob.cs @@ -0,0 +1,7 @@ +namespace Elsa.Alterations.Core.Models; + +public class NewAlterationJob +{ + public string PlanId { get; set; } + public string WorkflowInstanceId { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Notifications/AlterationJobCompleted.cs b/src/modules/Elsa.Alterations.Core/Notifications/AlterationJobCompleted.cs new file mode 100644 index 0000000..b15d44c --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Notifications/AlterationJobCompleted.cs @@ -0,0 +1,9 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Mediator.Contracts; + +namespace Elsa.Alterations.Core.Notifications; + +/// +/// A notification that is published when an alteration job is completed. +/// +public record AlterationJobCompleted(AlterationJob Job, bool WorkflowContainsScheduledWork) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanCompleted.cs b/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanCompleted.cs new file mode 100644 index 0000000..70a13fb --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanCompleted.cs @@ -0,0 +1,9 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Mediator.Contracts; + +namespace Elsa.Alterations.Core.Notifications; + +/// +/// A notification that is published when an alteration plan is completed. +/// +public record AlterationPlanCompleted(AlterationPlan Plan) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanSubmitted.cs b/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanSubmitted.cs new file mode 100644 index 0000000..e968183 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Notifications/AlterationPlanSubmitted.cs @@ -0,0 +1,9 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Mediator.Contracts; + +namespace Elsa.Alterations.Core.Notifications; + +/// +/// A notification that is published when an alteration plan is submitted. +/// +public record AlterationPlanSubmitted(AlterationPlan Plan) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Options/AlterationOptions.cs b/src/modules/Elsa.Alterations.Core/Options/AlterationOptions.cs new file mode 100644 index 0000000..3d54cc2 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Options/AlterationOptions.cs @@ -0,0 +1,12 @@ +namespace Elsa.Alterations.Core.Options; + +/// +/// Options for the Alteration module. +/// +public class AlterationOptions +{ + /// + /// The types of alterations that are supported. + /// + public ISet AlterationTypes { get; set; } = new HashSet(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Results/RunAlterationsResult.cs b/src/modules/Elsa.Alterations.Core/Results/RunAlterationsResult.cs new file mode 100644 index 0000000..42e5e97 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Results/RunAlterationsResult.cs @@ -0,0 +1,39 @@ +using Elsa.Alterations.Core.Models; +using Microsoft.Extensions.Logging; + +namespace Elsa.Alterations.Core.Results; + +/// +/// The result of running a series of alterations. +/// +public class RunAlterationsResult +{ + /// + /// Initializes a new instance of the class. + /// + public RunAlterationsResult(string workflowInstanceId, AlterationLog log) + { + WorkflowInstanceId = workflowInstanceId; + Log = log; + } + + /// + /// The ID of the workflow instance that was altered. + /// + public string WorkflowInstanceId { get; } + + /// + /// A log of the alterations that were run. + /// + public AlterationLog Log { get; set; } + + /// + /// A flag indicating whether the workflow has scheduled work. + /// + public bool WorkflowHasScheduledWork { get; set; } + + /// + /// A flag indicating whether the alterations have succeeded. + /// + public bool IsSuccessful => Log.LogEntries.Any(x => x.LogLevel <= LogLevel.Warning); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs new file mode 100644 index 0000000..217331a --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs @@ -0,0 +1,43 @@ +using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Options; +using Elsa.Workflows; +using JetBrains.Annotations; +using Microsoft.Extensions.Options; + +namespace Elsa.Alterations.Core.Serialization; + +/// +/// Add additional objects. +/// +[UsedImplicitly] +public class AlterationSerializationOptionConfigurator(IOptions options) : SerializationOptionsConfiguratorBase +{ + /// + public override IEnumerable> GetModifiers() + { + var alterationTypes = options.Value.AlterationTypes; + + yield return typeInfo => + { + if (typeInfo.Type != typeof(IAlteration)) + return; + + if (typeInfo.Kind != JsonTypeInfoKind.Object) + return; + + var polymorphismOptions = new JsonPolymorphismOptions + { + TypeDiscriminatorPropertyName = "type" + }; + + foreach (var alterationType in alterationTypes.ToList()) + { + polymorphismOptions.DerivedTypes.Add(new(alterationType, alterationType.Name)); + } + + typeInfo.PolymorphismOptions = polymorphismOptions; + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializer.cs b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializer.cs new file mode 100644 index 0000000..001dc5a --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializer.cs @@ -0,0 +1,49 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using Elsa.Alterations.Core.Contracts; +using Elsa.Common.Serialization; + +namespace Elsa.Alterations.Core.Serialization; + +/// +/// A serializer for objects. +/// +public class AlterationSerializer : ConfigurableSerializer, IAlterationSerializer +{ + /// + public AlterationSerializer(IServiceProvider serviceProvider) : base(serviceProvider) + { + } + + /// + [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")] + public string Serialize(IAlteration alteration) + { + var options = GetOptions(); + return JsonSerializer.Serialize(alteration, options); + } + + /// + [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")] + public string SerializeMany(IEnumerable alterations) + { + var options = GetOptions(); + return JsonSerializer.Serialize(alterations.ToArray(), options); + } + + /// + [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")] + public IAlteration Deserialize(string json) + { + var options = GetOptions(); + return JsonSerializer.Deserialize(json, options)!; + } + + /// + [RequiresUnreferencedCode("The type of the alteration must be known at compile time.")] + public IEnumerable DeserializeMany(string json) + { + var options = GetOptions(); + return JsonSerializer.Deserialize(json, options)!; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Services/AlteredWorkflowDispatcher.cs b/src/modules/Elsa.Alterations.Core/Services/AlteredWorkflowDispatcher.cs new file mode 100644 index 0000000..1014dfd --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Services/AlteredWorkflowDispatcher.cs @@ -0,0 +1,34 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Results; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Contracts; +using Elsa.Workflows.Runtime.Requests; + +namespace Elsa.Alterations.Core.Services; + +/// +public class AlteredWorkflowDispatcher : IAlteredWorkflowDispatcher +{ + private readonly IWorkflowDispatcher _workflowDispatcher; + + /// + /// Initializes a new instance of the class. + /// + public AlteredWorkflowDispatcher(IWorkflowDispatcher workflowDispatcher) + { + _workflowDispatcher = workflowDispatcher; + } + + /// + public async Task DispatchAsync(IEnumerable results, CancellationToken cancellationToken = default) + { + foreach (var result in results.Where(x => x is { IsSuccessful: true, WorkflowHasScheduledWork: true })) + await DispatchAsync(result, cancellationToken); + } + + /// + public async Task DispatchAsync(RunAlterationsResult result, CancellationToken cancellationToken = default) + { + await _workflowDispatcher.DispatchAsync(new DispatchWorkflowInstanceRequest(result.WorkflowInstanceId), cancellationToken: cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Services/WorkflowInstanceFinder.cs b/src/modules/Elsa.Alterations.Core/Services/WorkflowInstanceFinder.cs new file mode 100644 index 0000000..b48b86e --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Services/WorkflowInstanceFinder.cs @@ -0,0 +1,93 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Filters; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Filters; + +namespace Elsa.Alterations.Core.Services; + +/// +public class WorkflowInstanceFinder(IWorkflowInstanceStore workflowInstanceStore, IActivityExecutionStore activityExecutionStore) : IWorkflowInstanceFinder +{ + /// + public async Task> FindAsync(AlterationWorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var workflowInstanceFilter = new WorkflowInstanceFilter + { + Ids = filter.WorkflowInstanceIds?.ToList(), + DefinitionIds = filter.DefinitionIds, + DefinitionVersionIds = filter.DefinitionVersionIds?.ToList(), + CorrelationIds = filter.CorrelationIds?.ToList(), + HasIncidents = filter.HasIncidents, + IsSystem = filter.IsSystem, + TimestampFilters = filter.TimestampFilters?.ToList(), + WorkflowStatuses = filter.Statuses?.ToList(), + WorkflowSubStatuses = filter.SubStatuses?.ToList(), + Names = filter.Names?.ToList(), + SearchTerm = filter.SearchTerm, + }; + var activityExecutionFilters = filter.ActivityFilters?.Select(x => new ActivityExecutionRecordFilter + { + ActivityId = x.ActivityId, + Id = x.ActivityInstanceId, + ActivityNodeId = x.NodeId, + Name = x.Name, + Status = x.Status, + }).ToList(); + + var emptyFilterSelectsAll = filter.EmptyFilterSelectsAll; + var workflowInstanceFilterIsEmpty = WorkflowFilterIsEmpty(workflowInstanceFilter); + + var workflowInstanceIds = workflowInstanceFilterIsEmpty && !emptyFilterSelectsAll + ? Enumerable.Empty().ToHashSet() + : (await workflowInstanceStore.FindManyIdsAsync(workflowInstanceFilter, cancellationToken)).ToHashSet(); + + if (activityExecutionFilters == null) + return workflowInstanceIds; + + foreach (ActivityExecutionRecordFilter activityExecutionFilter in activityExecutionFilters.Where(x => !x.IsEmpty)) + { + var activityExecutionRecords = await activityExecutionStore.FindManySummariesAsync(activityExecutionFilter, cancellationToken); + var matchingWorkflowInstanceIds = activityExecutionRecords.Select(x => x.WorkflowInstanceId).ToHashSet(); + + if (workflowInstanceFilterIsEmpty) + workflowInstanceIds = matchingWorkflowInstanceIds; + else + workflowInstanceIds.IntersectWith(matchingWorkflowInstanceIds); + } + + // Alterations must apply only to running workflows. + workflowInstanceIds = (await FilterRunningWorkflowInstancesAsync(workflowInstanceIds, cancellationToken)).ToHashSet(); + + return workflowInstanceIds; + } + + private async Task> FilterRunningWorkflowInstancesAsync(IEnumerable workflowInstanceIds, CancellationToken cancellationToken) + { + var filter = new WorkflowInstanceFilter + { + Ids = workflowInstanceIds.ToList(), + WorkflowStatus = WorkflowStatus.Running + }; + + return await workflowInstanceStore.FindManyIdsAsync(filter, cancellationToken); + } + + private bool WorkflowFilterIsEmpty(WorkflowInstanceFilter filter) + { + return filter.Id == null && + filter.Ids == null && + filter.DefinitionId == null && + filter.DefinitionVersionId == null && + filter.DefinitionIds == null && + filter.DefinitionVersionIds == null && + filter.Version == null && + filter.CorrelationId == null && + filter.CorrelationIds == null && + filter.HasIncidents == null && + filter.TimestampFilters == null + && string.IsNullOrWhiteSpace(filter.SearchTerm); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationJobStore.cs b/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationJobStore.cs new file mode 100644 index 0000000..1af9f76 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationJobStore.cs @@ -0,0 +1,67 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Filters; +using Elsa.Common.Services; + +namespace Elsa.Alterations.Core.Stores; + +/// +/// A memory-based store for alteration jobs. +/// +public class MemoryAlterationJobStore : IAlterationJobStore +{ + private readonly MemoryStore _store; + + /// + /// Initializes a new instance of the class. + /// + public MemoryAlterationJobStore(MemoryStore store) + { + _store = store; + } + + /// + public Task SaveAsync(AlterationJob job, CancellationToken cancellationToken = default) + { + _store.Save(job, x => x.Id); + return Task.CompletedTask; + } + + /// + public Task SaveManyAsync(IEnumerable jobs, CancellationToken cancellationToken = default) + { + _store.SaveMany(jobs, x => x.Id); + return Task.CompletedTask; + } + + /// + public Task FindAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + var entity = _store.Query(query => Filter(query, filter)).FirstOrDefault(); + return Task.FromResult(entity); + } + + /// + public Task> FindManyAsync(AlterationJobFilter filter, CancellationToken cancellationToken) + { + var entities = _store.Query(query => Filter(query, filter)).ToList().AsEnumerable(); + return Task.FromResult(entities); + } + + /// + public Task> FindManyIdsAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + var ids = _store.Query(query => Filter(query, filter)).Select(x => x.Id).ToList().AsEnumerable(); + return Task.FromResult(ids); + } + + /// + public Task CountAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + var count = _store.Query(query => Filter(query, filter)).LongCount(); + return Task.FromResult(count); + } + + + private static IQueryable Filter(IQueryable query, AlterationJobFilter filter) => filter.Apply(query); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationPlanStore.cs b/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationPlanStore.cs new file mode 100644 index 0000000..9657c58 --- /dev/null +++ b/src/modules/Elsa.Alterations.Core/Stores/MemoryAlterationPlanStore.cs @@ -0,0 +1,45 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Filters; +using Elsa.Common.Services; + +namespace Elsa.Alterations.Core.Stores; + +/// +/// A memory-based store for alteration plans. +/// +public class MemoryAlterationPlanStore : IAlterationPlanStore +{ + private readonly MemoryStore _store; + + /// + /// Initializes a new instance of the class. + /// + public MemoryAlterationPlanStore(MemoryStore store) + { + _store = store; + } + + /// + public Task SaveAsync(AlterationPlan plan, CancellationToken cancellationToken = default) + { + _store.Save(plan, x => x.Id); + return Task.CompletedTask; + } + + /// + public Task FindAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default) + { + var entity = _store.Query(query => Filter(query, filter)).FirstOrDefault(); + return Task.FromResult(entity); + } + + /// + public Task CountAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default) + { + var count = _store.Query(query => Filter(query, filter)).LongCount(); + return Task.FromResult(count); + } + + private static IQueryable Filter(IQueryable query, AlterationPlanFilter filter) => filter.Apply(query); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/Consumers/RunAlterationJobConsumer.cs b/src/modules/Elsa.Alterations.MassTransit/Consumers/RunAlterationJobConsumer.cs new file mode 100644 index 0000000..8bc2fe7 --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Consumers/RunAlterationJobConsumer.cs @@ -0,0 +1,27 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.MassTransit.Messages; +using MassTransit; + +namespace Elsa.Alterations.MassTransit.Consumers; + +/// +/// Consumes messages. +/// +public class RunAlterationJobConsumer : IConsumer +{ + private readonly IAlterationJobRunner _alterationJobRunner; + + /// + /// Initializes a new instance of the class. + /// + public RunAlterationJobConsumer(IAlterationJobRunner alterationJobRunner) + { + _alterationJobRunner = alterationJobRunner; + } + + /// + public async Task Consume(ConsumeContext context) + { + await _alterationJobRunner.RunAsync(context.Message.JobId, context.CancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/Elsa.Alterations.MassTransit.csproj b/src/modules/Elsa.Alterations.MassTransit/Elsa.Alterations.MassTransit.csproj new file mode 100644 index 0000000..d1f049a --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Elsa.Alterations.MassTransit.csproj @@ -0,0 +1,15 @@ + + + + + Provides alteration background job runners using MassTransit. + + elsa module alterations masstransit + + + + + + + + diff --git a/src/modules/Elsa.Alterations.MassTransit/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Alterations.MassTransit/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..f5fef36 --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Extensions/ModuleExtensions.cs @@ -0,0 +1,20 @@ +using Elsa.Alterations.Features; +using Elsa.Alterations.MassTransit.Features; +using Elsa.Extensions; +using Elsa.Features.Services; + +namespace Elsa.Alterations.MassTransit.Extensions; + +/// +/// Adds the . +/// +public static class ModuleExtensions +{ + /// + /// Adds the . + /// + public static IModule UseMassTransitDispatcher(this AlterationsFeature alterations, Action? configure = default) + { + return alterations.Module.Use(configure); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/Features/AlterationsMassTransitFeature.cs b/src/modules/Elsa.Alterations.MassTransit/Features/AlterationsMassTransitFeature.cs new file mode 100644 index 0000000..27cbaf6 --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Features/AlterationsMassTransitFeature.cs @@ -0,0 +1,42 @@ +using Elsa.Alterations.Features; +using Elsa.Alterations.MassTransit.Consumers; +using Elsa.Alterations.MassTransit.Messages; +using Elsa.Alterations.MassTransit.Services; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.MassTransit.Features; +using MassTransit; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.MassTransit.Features; + +/// +/// A feature for enabling the Alterations MassTransit feature. +/// +[DependsOn(typeof(MassTransitFeature))] +[DependsOn(typeof(AlterationsFeature))] +public class MassTransitAlterationsFeature : FeatureBase +{ + /// + public MassTransitAlterationsFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + Module.Configure(feature => feature.AlterationJobDispatcherFactory = sp => sp.GetRequiredService()); + var queueName = KebabCaseEndpointNameFormatter.Instance.Consumer(); + var queueAddress = new Uri($"queue:elsa-{queueName}"); + EndpointConvention.Map(queueAddress); + Module.AddMassTransitConsumer(queueName); + } + + /// + public override void Apply() + { + Services.AddScoped(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/FodyWeavers.xml b/src/modules/Elsa.Alterations.MassTransit/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/Messages/RunAlterationJob.cs b/src/modules/Elsa.Alterations.MassTransit/Messages/RunAlterationJob.cs new file mode 100644 index 0000000..b96e5f9 --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Messages/RunAlterationJob.cs @@ -0,0 +1,7 @@ +namespace Elsa.Alterations.MassTransit.Messages; + +/// +/// Represents a request to run an alteration job. +/// +/// The job ID. +public record RunAlterationJob(string JobId); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/Readme.md b/src/modules/Elsa.Alterations.MassTransit/Readme.md new file mode 100644 index 0000000..9e45a99 --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Readme.md @@ -0,0 +1,4 @@ +# MassTransit Alterations Background Runner + +This module provides an implementation that processes alteration plans in the background using a MassTransit dispatcher and consumer. +This implementation is more resilient than the in-memory queue implementation provided by **Elsa.Alterations.BackgroundRunner** because it uses a message broker to persist messages. \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.MassTransit/Services/MassTransitAlterationJobDispatcher.cs b/src/modules/Elsa.Alterations.MassTransit/Services/MassTransitAlterationJobDispatcher.cs new file mode 100644 index 0000000..a2e2327 --- /dev/null +++ b/src/modules/Elsa.Alterations.MassTransit/Services/MassTransitAlterationJobDispatcher.cs @@ -0,0 +1,28 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.MassTransit.Messages; +using MassTransit; + +namespace Elsa.Alterations.MassTransit.Services; + +/// +/// Dispatches an alteration job for execution using MassTransit. +/// +public class MassTransitAlterationJobDispatcher : IAlterationJobDispatcher +{ + private readonly IBus _bus; + + /// + /// Initializes a new instance of the class. + /// + public MassTransitAlterationJobDispatcher(IBus bus) + { + _bus = bus; + } + + /// + public async ValueTask DispatchAsync(string jobId, CancellationToken cancellationToken = default) + { + var message = new RunAlterationJob(jobId); + await _bus.Send(message, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Activities/AlterationPlanCompleted.cs b/src/modules/Elsa.Alterations/Activities/AlterationPlanCompleted.cs new file mode 100644 index 0000000..5d6d01f --- /dev/null +++ b/src/modules/Elsa.Alterations/Activities/AlterationPlanCompleted.cs @@ -0,0 +1,55 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; +using Elsa.Alterations.Bookmarks; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Memory; +using Elsa.Workflows.Models; + +namespace Elsa.Alterations.Activities; + +/// +/// Submits an alteration plan for execution. +/// +[Browsable(false)] +[Activity("Elsa", "Alterations", "Triggered when an Alteration Plan completed")] +public class AlterationPlanCompleted : Trigger +{ + /// + public AlterationPlanCompleted(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + PlanId = new Input(planId); + } + + /// + public AlterationPlanCompleted([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + } + + /// + /// The ID of the alteration plan. + /// + public Input PlanId { get; set; } = null!; + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + if (context.IsTriggerOfWorkflow()) + { + await context.CompleteActivityAsync(); + return; + } + + var planId = context.Get(PlanId)!; + var bookmarkPayload = new AlterationPlanCompletedPayload(planId); + context.CreateBookmark(bookmarkPayload, false); + } + + /// + protected override object GetTriggerPayload(TriggerIndexingContext context) + { + var planId = context.Get(PlanId)!; + return new AlterationPlanCompletedPayload(planId); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Activities/CompleteAlterationPlan.cs b/src/modules/Elsa.Alterations/Activities/CompleteAlterationPlan.cs new file mode 100644 index 0000000..0c1d504 --- /dev/null +++ b/src/modules/Elsa.Alterations/Activities/CompleteAlterationPlan.cs @@ -0,0 +1,48 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; +using Elsa.Alterations.Core.Contracts; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Exceptions; +using Elsa.Workflows.Memory; +using Elsa.Workflows.Models; + +namespace Elsa.Alterations.Activities; + +/// +/// Marks an alteration plan as completed. +/// +[Browsable(false)] +[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Task)] +public class CompleteAlterationPlan : CodeActivity +{ + /// + public CompleteAlterationPlan(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + PlanId = new Input(planId); + } + + /// + public CompleteAlterationPlan([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + } + + /// + /// The ID of the alteration plan. + /// + public Input PlanId { get; set; } = null!; + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var cancellationToken = context.CancellationToken; + var planId = context.Get(PlanId)!; + var manager = context.GetRequiredService(); + var plan = await manager.GetPlanAsync(planId, cancellationToken); + + if (plan == null) + throw new FaultException(AlterationFaultCodes.PlanNotFound, AlterationFaultCategories.Alteration, DefaultFaultTypes.System, $"Alteration Plan with ID {planId} not found."); + + await manager.CompletePlanAsync(plan, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs b/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs new file mode 100644 index 0000000..965a25c --- /dev/null +++ b/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs @@ -0,0 +1,73 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Filters; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Exceptions; +using Elsa.Workflows.Memory; +using Elsa.Workflows.Models; + +namespace Elsa.Alterations.Activities; + +/// +/// Submits an alteration plan for execution. +/// +[Browsable(false)] +[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Task)] +public class DispatchAlterationJobs : CodeActivity +{ + /// + public DispatchAlterationJobs(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + PlanId = new Input(planId); + } + + /// + public DispatchAlterationJobs([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + } + + /// + /// The ID of the alteration plan. + /// + public Input PlanId { get; set; } = null!; + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var cancellationToken = context.CancellationToken; + var planId = context.Get(PlanId)!; + var alterationPlanStore = context.GetRequiredService(); + var planFilter = new AlterationPlanFilter + { + Id = planId + }; + var plan = await alterationPlanStore.FindAsync(planFilter, cancellationToken); + + if (plan == null) + throw new FaultException(AlterationFaultCodes.PlanNotFound, AlterationFaultCategories.Alteration, DefaultFaultTypes.System, $"Alteration Plan with ID {planId} not found."); + + // Update status. + plan.Status = AlterationPlanStatus.Dispatching; + await alterationPlanStore.SaveAsync(plan, cancellationToken); + + // Find all jobs for the plan and dispatch them. + var filter = new AlterationJobFilter + { + PlanId = plan.Id + }; + var alterationJobStore = context.GetRequiredService(); + var alterationJobIds = await alterationJobStore.FindManyIdsAsync(filter, cancellationToken); + + // Dispatch each job. + var alterationJobDispatcher = context.GetRequiredService(); + foreach (var jobId in alterationJobIds) + await alterationJobDispatcher.DispatchAsync(jobId, cancellationToken); + + // Update status. + plan.Status = AlterationPlanStatus.Running; + await alterationPlanStore.SaveAsync(plan, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs b/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs new file mode 100644 index 0000000..8bae666 --- /dev/null +++ b/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs @@ -0,0 +1,104 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Filters; +using Elsa.Alterations.Core.Models; +using Elsa.Common; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Exceptions; +using Elsa.Workflows.Memory; +using Elsa.Workflows.Models; + +namespace Elsa.Alterations.Activities; + +/// +/// Submits an alteration plan for execution. +/// +[Browsable(false)] +[Activity("Elsa", "Alterations", "Generates jobs for the specified Alteration Plan", Kind = ActivityKind.Task)] +public class GenerateAlterationJobs : CodeActivity +{ + /// + public GenerateAlterationJobs([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + } + + /// + public GenerateAlterationJobs(Variable planId, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + PlanId = new Input(planId); + } + + /// + /// The ID of the submitted alteration plan. + /// + public Input PlanId { get; set; } = null!; + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var plan = await GetPlanAsync(context); + await UpdatePlanStatusAsync(context, plan); + var workflowInstanceIds = (await FindMatchingWorkflowInstanceIdsAsync(context, plan.WorkflowInstanceFilter)).ToList(); + + if (workflowInstanceIds.Any()) + await GenerateJobsAsync(context, plan, workflowInstanceIds); + + context.SetResult(workflowInstanceIds.Count); + } + + private async Task GetPlanAsync(ActivityExecutionContext context) + { + var cancellationToken = context.CancellationToken; + var planId = context.Get(PlanId)!; + var alterationPlanStore = context.GetRequiredService(); + var planFilter = new AlterationPlanFilter + { + Id = planId + }; + var plan = await alterationPlanStore.FindAsync(planFilter, cancellationToken); + + if (plan == null) + throw new FaultException(AlterationFaultCodes.PlanNotFound, AlterationFaultCategories.Alteration, DefaultFaultTypes.System, $"Alteration Plan with ID {planId} not found."); + + return plan; + } + + private async Task UpdatePlanStatusAsync(ActivityExecutionContext context, AlterationPlan plan) + { + var cancellationToken = context.CancellationToken; + var alterationPlanStore = context.GetRequiredService(); + plan.Status = AlterationPlanStatus.Generating; + await alterationPlanStore.SaveAsync(plan, cancellationToken); + } + + private async Task> FindMatchingWorkflowInstanceIdsAsync(ActivityExecutionContext context, AlterationWorkflowInstanceFilter filter) + { + var cancellationToken = context.CancellationToken; + var workflowInstanceFinder = context.GetRequiredService(); + return await workflowInstanceFinder.FindAsync(filter, cancellationToken); + } + + private async Task GenerateJobsAsync(ActivityExecutionContext context, AlterationPlan plan, IEnumerable workflowInstanceIds) + { + var cancellationToken = context.CancellationToken; + var identityGenerator = context.GetRequiredService(); + var systemClock = context.GetRequiredService(); + var jobs = workflowInstanceIds.Select(workflowInstanceId => new AlterationJob + { + Id = identityGenerator.GenerateId(), + PlanId = plan.Id, + Status = AlterationJobStatus.Pending, + WorkflowInstanceId = workflowInstanceId, + CreatedAt = systemClock.UtcNow + }) + .ToList(); + + var alterationJobStore = context.GetRequiredService(); + await alterationJobStore.SaveManyAsync(jobs, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Activities/SubmitAlterationPlan.cs b/src/modules/Elsa.Alterations/Activities/SubmitAlterationPlan.cs new file mode 100644 index 0000000..d1624a4 --- /dev/null +++ b/src/modules/Elsa.Alterations/Activities/SubmitAlterationPlan.cs @@ -0,0 +1,52 @@ +using System.ComponentModel; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Models; +using Elsa.Common; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Models; + +namespace Elsa.Alterations.Activities; + +/// +/// Submits an alteration plan for execution. +/// +[Browsable(false)] +[Output( + DisplayName = "Plan ID", + Description = "The ID of the submitted alteration plan." +)] +[Activity("Elsa", "Alterations", "Submits an Alteration Plan", Kind = ActivityKind.Task)] +public class SubmitAlterationPlan : CodeActivity +{ + /// + /// The parameters for the alteration plan to be submitted. + /// + public Input Params { get; set; } = null!; + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var systemClock = context.GetRequiredService(); + var identityGenerator = context.GetRequiredService(); + var now = systemClock.UtcNow; + var planParams = context.Get(Params)!; + + var plan = new AlterationPlan + { + Id = string.IsNullOrWhiteSpace(planParams.Id) ? identityGenerator.GenerateId() : planParams.Id, + Alterations = planParams.Alterations, + WorkflowInstanceFilter = planParams.Filter, + Status = AlterationPlanStatus.Pending, + CreatedAt = now + }; + + var alterationPlanStore = context.GetRequiredService(); + var cancellationToken = context.CancellationToken; + await alterationPlanStore.SaveAsync(plan, cancellationToken); + Result.Set(context, plan.Id); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/CancelActivityHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/CancelActivityHandler.cs new file mode 100644 index 0000000..95ffa2d --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationHandlers/CancelActivityHandler.cs @@ -0,0 +1,62 @@ +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Abstractions; +using Elsa.Alterations.Core.Contexts; +using Elsa.Extensions; +using Elsa.Workflows; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationHandlers; + +/// +/// Cancels an activity. +/// +[UsedImplicitly] +public class CancelActivityHandler : AlterationHandlerBase +{ + /// + protected override ValueTask HandleAsync(AlterationContext context, CancelActivity alteration) + { + if (alteration.ActivityInstanceId == null && alteration.ActivityId == null) + { + context.Fail("Either ActivityInstanceId or ActivityId must be specified"); + return ValueTask.CompletedTask; + } + + var activityExecutionContexts = GetActivityExecutionContexts(context, alteration).ToList(); + + if (!activityExecutionContexts.Any()) + { + context.Fail( + alteration.ActivityInstanceId != null + ? $"Activity execution context with ID {alteration.ActivityInstanceId} not found" + : $"Activity execution contexts for activity with ID {alteration.ActivityId} not found"); + + return ValueTask.CompletedTask; + } + + context.Succeed(() => CancelAsync(activityExecutionContexts)); + return ValueTask.CompletedTask; + } + + private async Task CancelAsync(IEnumerable activityExecutionContexts) + { + foreach (var activityExecutionContext in activityExecutionContexts) + await CancelAsync(activityExecutionContext); + } + + private async Task CancelAsync(ActivityExecutionContext activityExecutionContext) + { + await activityExecutionContext.CancelActivityAsync(); + } + + private static IEnumerable GetActivityExecutionContexts(AlterationContext context, CancelActivity alteration) + { + var workflowExecutionContext = context.WorkflowExecutionContext; + + return alteration.ActivityInstanceId != null + ? workflowExecutionContext.ActivityExecutionContexts.Where(x => x.Id == alteration.ActivityInstanceId) + : alteration.ActivityId != null + ? workflowExecutionContext.ActivityExecutionContexts.Where(x => x.Activity.Id == alteration.ActivityId) + : Enumerable.Empty(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs new file mode 100644 index 0000000..38bc324 --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs @@ -0,0 +1,22 @@ +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Abstractions; +using Elsa.Alterations.Core.Contexts; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationHandlers; + +/// +/// Upgrades the version of the workflow instance. +/// +[UsedImplicitly] +public class CancelHandler : AlterationHandlerBase +{ + /// + protected override ValueTask HandleAsync(AlterationContext context, Cancel alteration) + { + context.WorkflowExecutionContext.Cancel(); + + context.Succeed(); + return ValueTask.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/MigrateHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/MigrateHandler.cs new file mode 100644 index 0000000..25418ed --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationHandlers/MigrateHandler.cs @@ -0,0 +1,37 @@ +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Abstractions; +using Elsa.Alterations.Core.Contexts; +using Elsa.Common.Models; +using Elsa.Workflows.Management; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.AlterationHandlers; + +/// +/// Upgrades the version of the workflow instance. +/// +[UsedImplicitly] +public class MigrateHandler : AlterationHandlerBase +{ + /// + protected override async ValueTask HandleAsync(AlterationContext context, Migrate alteration) + { + var workflowDefinitionService = context.ServiceProvider.GetRequiredService(); + var definitionId = context.Workflow.Identity.DefinitionId; + var targetVersion = alteration.TargetVersion; + var cancellationToken = context.CancellationToken; + var targetWorkflowDefinition = await workflowDefinitionService.FindWorkflowDefinitionAsync(definitionId, VersionOptions.SpecificVersion(targetVersion), cancellationToken); + + if (targetWorkflowDefinition == null) + { + context.Fail($"Workflow definition with ID {definitionId} and version {targetVersion} not found"); + return; + } + + var targetWorkflow = await workflowDefinitionService.MaterializeWorkflowAsync(targetWorkflowDefinition, cancellationToken); + await context.WorkflowExecutionContext.SetWorkflowGraphAsync(targetWorkflow); + + context.Succeed(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/ModifyVariableHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/ModifyVariableHandler.cs new file mode 100644 index 0000000..e42d516 --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationHandlers/ModifyVariableHandler.cs @@ -0,0 +1,74 @@ +using System.Diagnostics.CodeAnalysis; +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Abstractions; +using Elsa.Alterations.Core.Contexts; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Activities; +using Elsa.Workflows.Memory; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.AlterationHandlers; + +/// +/// Modifies a workflow variable. +/// +[UsedImplicitly] +public class ModifyVariableHandler : AlterationHandlerBase +{ + /// + [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.Serialize(TValue, JsonSerializerOptions)")] + protected override async ValueTask HandleAsync(AlterationContext context, ModifyVariable alteration) + { + var workflow = context.Workflow; + var cancellationToken = context.CancellationToken; + var variable = await FindVariable(context, alteration, workflow, cancellationToken); + + if (variable == null) + { + context.Fail($"Variable with ID {alteration.VariableId} not found"); + return; + } + + var convertedValue = variable.ParseValue(alteration.Value); + UpdateVariable(context, variable, convertedValue); + context.Succeed(); + } + + private void UpdateVariable(AlterationContext context, Variable variable, object? value) + { + var activityExecutionContext = FindActivityExecutionContextContainingVariable(context, variable); + + if (activityExecutionContext == null) + { + context.Fail($"Activity execution context containing variable with ID {variable.Id} not found"); + return; + } + + variable.Set(activityExecutionContext, value); + } + + private ActivityExecutionContext? FindActivityExecutionContextContainingVariable(AlterationContext context, Variable variable) + { + var query = + from activityExecutionContext in context.WorkflowExecutionContext.ActivityExecutionContexts + from var in activityExecutionContext.Variables + where var.Id == variable.Id + select activityExecutionContext; + + return query.FirstOrDefault(); + } + + private async Task FindVariable(AlterationContext context, ModifyVariable alteration, Workflow workflow, CancellationToken cancellationToken) + { + var activityVisitor = context.ServiceProvider.GetRequiredService(); + var graph = await activityVisitor.VisitAsync(workflow, cancellationToken); + var flattenedList = graph.Flatten().ToList(); + + return flattenedList + .Where(x => x.Activity is IVariableContainer) + .SelectMany(x => ((IVariableContainer)x.Activity).Variables) + .FirstOrDefault(x => x.Id == alteration.VariableId); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/ScheduleActivityHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/ScheduleActivityHandler.cs new file mode 100644 index 0000000..89c7fd9 --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationHandlers/ScheduleActivityHandler.cs @@ -0,0 +1,85 @@ +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Abstractions; +using Elsa.Alterations.Core.Contexts; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Signals; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationHandlers; + +/// +/// Schedules an activity for execution. +/// +[UsedImplicitly] +public class ScheduleActivityHandler : AlterationHandlerBase +{ + /// + protected override async ValueTask HandleAsync(AlterationContext context, ScheduleActivity alteration) + { + if (alteration.ActivityInstanceId == null && alteration.ActivityId == null) + { + context.Fail("Either ActivityInstanceId or ActivityId must be specified"); + return; + } + + var workflowExecutionContext = context.WorkflowExecutionContext; + var existingActivityExecutionContext = GetActivityExecutionContext(context, alteration); + + if (existingActivityExecutionContext != null) + { + // If the activity is in a faulted state, reset it to Running. + if (existingActivityExecutionContext.Status == ActivityStatus.Faulted) + existingActivityExecutionContext.TransitionTo(ActivityStatus.Running); + + // Schedule the activity execution context. + var parentContext = existingActivityExecutionContext.ParentActivityExecutionContext; + await parentContext!.SendSignalAsync(new ScheduleChildActivity(existingActivityExecutionContext)); + context.Succeed(); + return; + } + + // Schedule a new activity instance. + var activityId = alteration.ActivityId; + + if (activityId == null) + { + context.Fail("No existing activity execution context was found and no activity ID was specified"); + return; + } + + var activityNode = workflowExecutionContext.FindNodeByActivityId(activityId); + + if (activityNode == null) + { + context.Fail($"Activity with ID {activityId} not found"); + return; + } + + // Find the parent activity execution context within which to schedule the activity. + var parentActivityContexts = workflowExecutionContext.ActivityExecutionContexts.Reverse().ToList(); + + var parentExecutionContext = + (from ancestorNode in activityNode.Ancestors() + from parentActivityContext in parentActivityContexts + where parentActivityContext.Activity.Id == ancestorNode.Activity.Id + select parentActivityContext).FirstOrDefault(); + + if (parentExecutionContext == null) + { + context.Fail($"Could not find parent activity execution context for activity with ID {activityId}"); + return; + } + + await parentExecutionContext.SendSignalAsync(new ScheduleChildActivity(activityNode.Activity)); + context.Succeed(); + } + + private static ActivityExecutionContext? GetActivityExecutionContext(AlterationContext context, ScheduleActivity alteration) + { + if (alteration.ActivityInstanceId != null) + return context.WorkflowExecutionContext.ActivityExecutionContexts.FirstOrDefault(x => x.Id == alteration.ActivityInstanceId); + + return null; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs b/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs new file mode 100644 index 0000000..c0a5f7f --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs @@ -0,0 +1,10 @@ +using Elsa.Alterations.Core.Abstractions; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationTypes; + +/// +/// Cancels the workflow instances in an alteration plan. +/// +[UsedImplicitly] +public class Cancel : AlterationBase; \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationTypes/CancelActivity.cs b/src/modules/Elsa.Alterations/AlterationTypes/CancelActivity.cs new file mode 100644 index 0000000..15083ba --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationTypes/CancelActivity.cs @@ -0,0 +1,21 @@ +using Elsa.Alterations.Core.Abstractions; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationTypes; + +/// +/// Cancels an activity. +/// +[UsedImplicitly] +public class CancelActivity : AlterationBase +{ + /// + /// The ID of the activity to be cancelled. If not specified, the activity instance ID will be used. + /// + public string? ActivityId { get; set; } + + /// + /// The ID of the activity instance to be cancelled. If specified, overrides . + /// + public string? ActivityInstanceId { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationTypes/Migrate.cs b/src/modules/Elsa.Alterations/AlterationTypes/Migrate.cs new file mode 100644 index 0000000..2097bed --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationTypes/Migrate.cs @@ -0,0 +1,16 @@ +using Elsa.Alterations.Core.Abstractions; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationTypes; + +/// +/// Migrates a workflow instance to a newer version. +/// +[UsedImplicitly] +public class Migrate : AlterationBase +{ + /// + /// The target version to upgrade to. + /// + public int TargetVersion { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationTypes/ModifyVariable.cs b/src/modules/Elsa.Alterations/AlterationTypes/ModifyVariable.cs new file mode 100644 index 0000000..179a94e --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationTypes/ModifyVariable.cs @@ -0,0 +1,22 @@ +using Elsa.Alterations.Core.Abstractions; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationTypes; + +/// +/// Modifies a variable. +/// +[UsedImplicitly] +public class ModifyVariable : AlterationBase +{ + /// + /// The ID of the variable to modify. + /// + public string VariableId { get; set; } = default!; + + /// + /// The new value of the variable. + /// + public object? Value { get; set; } + +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationTypes/ScheduleActivity.cs b/src/modules/Elsa.Alterations/AlterationTypes/ScheduleActivity.cs new file mode 100644 index 0000000..de44785 --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationTypes/ScheduleActivity.cs @@ -0,0 +1,21 @@ +using Elsa.Alterations.Core.Abstractions; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationTypes; + +/// +/// Schedules an activity for execution. +/// +[UsedImplicitly] +public class ScheduleActivity : AlterationBase +{ + /// + /// The ID of the next activity to be scheduled. If not specified, the ActivityInstanceId will be used. + /// + public string? ActivityId { get; set; } + + /// + /// The ID of the activity instance to be scheduled. If not specified, the ActivityId will be used. + /// + public string? ActivityInstanceId { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Bookmarks/AlterationPlanCompletedPayload.cs b/src/modules/Elsa.Alterations/Bookmarks/AlterationPlanCompletedPayload.cs new file mode 100644 index 0000000..2c1f6e9 --- /dev/null +++ b/src/modules/Elsa.Alterations/Bookmarks/AlterationPlanCompletedPayload.cs @@ -0,0 +1,9 @@ +using Elsa.Alterations.Activities; + +namespace Elsa.Alterations.Bookmarks; + +/// +/// Represents bookmark payload for the trigger. +/// +/// The ID of the alteration plan. +public record AlterationPlanCompletedPayload(string PlanId); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Constants/AlterationFaultCategories.cs b/src/modules/Elsa.Alterations/Constants/AlterationFaultCategories.cs new file mode 100644 index 0000000..dc52875 --- /dev/null +++ b/src/modules/Elsa.Alterations/Constants/AlterationFaultCategories.cs @@ -0,0 +1,6 @@ +namespace Elsa.Alterations; + +public static class AlterationFaultCategories +{ + public const string Alteration = "Alteration"; +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Constants/AlterationFaultCodes.cs b/src/modules/Elsa.Alterations/Constants/AlterationFaultCodes.cs new file mode 100644 index 0000000..f3ea75e --- /dev/null +++ b/src/modules/Elsa.Alterations/Constants/AlterationFaultCodes.cs @@ -0,0 +1,6 @@ +namespace Elsa.Alterations; + +public static class AlterationFaultCodes +{ + public const string PlanNotFound = "PlanNotFound"; +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Elsa.Alterations.csproj b/src/modules/Elsa.Alterations/Elsa.Alterations.csproj new file mode 100644 index 0000000..10d13fd --- /dev/null +++ b/src/modules/Elsa.Alterations/Elsa.Alterations.csproj @@ -0,0 +1,15 @@ + + + + + Provides alterations for workflow instances. + + elsa module alterations + + + + + + + + diff --git a/src/modules/Elsa.Alterations/Elsa.Alterations.csproj.DotSettings b/src/modules/Elsa.Alterations/Elsa.Alterations.csproj.DotSettings new file mode 100644 index 0000000..fa77252 --- /dev/null +++ b/src/modules/Elsa.Alterations/Elsa.Alterations.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Endpoint.cs new file mode 100644 index 0000000..f401755 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Endpoint.cs @@ -0,0 +1,28 @@ +using Elsa.Abstractions; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Endpoints.Alterations.DryRun; + +/// +/// Determines which workflow instances a "Submit" request would target without actually running an alteration. +/// +[PublicAPI] +public class DryRun(IWorkflowInstanceFinder workflowInstanceFinder) : ElsaEndpoint +{ + /// + public override void Configure() + { + Post("/alterations/dry-run"); + ConfigurePermissions("run:alterations"); + } + + /// + public override async Task HandleAsync(AlterationWorkflowInstanceFilter filter, CancellationToken cancellationToken) + { + var workflowInstanceIds = await workflowInstanceFinder.FindAsync(filter, cancellationToken); + var response = new Response(workflowInstanceIds.ToList()); + await SendOkAsync(response, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Response.cs new file mode 100644 index 0000000..fdae58b --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/DryRun/Response.cs @@ -0,0 +1,6 @@ +namespace Elsa.Alterations.Endpoints.Alterations.DryRun; + +/// +/// The response from the endpoint. +/// +public record Response(ICollection WorkflowInstanceIds); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Endpoint.cs new file mode 100644 index 0000000..7c4be8e --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Endpoint.cs @@ -0,0 +1,52 @@ +using Elsa.Abstractions; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Filters; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Endpoints.Alterations.Get; + +/// +/// Gets an alteration plan and its associated jobs. +/// +[PublicAPI] +public class Get : ElsaEndpointWithoutRequest +{ + private readonly IAlterationPlanStore _alterationPlanStore; + private readonly IAlterationJobStore _alterationJobStore; + + /// + public Get(IAlterationPlanStore alterationPlanStore, IAlterationJobStore alterationJobStore) + { + _alterationPlanStore = alterationPlanStore; + _alterationJobStore = alterationJobStore; + } + + /// + public override void Configure() + { + Get("/alterations/{id}"); + ConfigurePermissions("read:alterations"); + } + + /// + public override async Task HandleAsync(CancellationToken cancellationToken) + { + var planId = Route("id"); + + // Load the plan. + var plan = await _alterationPlanStore.FindAsync(new AlterationPlanFilter { Id = planId }, cancellationToken); + + if (plan == null) + { + await SendNotFoundAsync(cancellationToken); + return; + } + + // Load the jobs. + var jobs = (await _alterationJobStore.FindManyAsync(new AlterationJobFilter { PlanId = planId }, cancellationToken)).ToList(); + + // Write response. + var response = new Response(plan, jobs); + await SendOkAsync(response, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Response.cs new file mode 100644 index 0000000..673a776 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Get/Response.cs @@ -0,0 +1,10 @@ +using Elsa.Alterations.Core.Entities; + +namespace Elsa.Alterations.Endpoints.Alterations.Get; + +/// +/// Represents a response to a request to get an alteration plan. +/// +/// The alteration plan. +/// The jobs created for the plan. +public record Response(AlterationPlan Plan, ICollection Jobs); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Endpoint.cs new file mode 100644 index 0000000..a1d090e --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Endpoint.cs @@ -0,0 +1,43 @@ +using Elsa.Abstractions; +using Elsa.Alterations.Core.Contracts; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Endpoints.Alterations.Run; + +/// +/// Executes an alteration plan by targeting workflow instances by ID. +/// +[PublicAPI] +public class Run : ElsaEndpoint +{ + private readonly IAlterationRunner _alterationRunner; + private readonly IAlteredWorkflowDispatcher _workflowDispatcher; + + /// + public Run(IAlterationRunner alterationRunner, IAlteredWorkflowDispatcher workflowDispatcher) + { + _alterationRunner = alterationRunner; + _workflowDispatcher = workflowDispatcher; + } + + /// + public override void Configure() + { + Post("/alterations/run"); + ConfigurePermissions("run:alterations"); + } + + /// + public override async Task HandleAsync(Request request, CancellationToken cancellationToken) + { + // Run the alterations. + var results = await _alterationRunner.RunAsync(request.WorkflowInstanceIds, request.Alterations, cancellationToken); + + // Schedule each successfully updated workflow containing scheduled work. + await _workflowDispatcher.DispatchAsync(results, cancellationToken); + + // Write response. + var response = new Response(results); + await SendOkAsync(response, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Request.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Request.cs new file mode 100644 index 0000000..9b661f9 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Request.cs @@ -0,0 +1,20 @@ +using Elsa.Alterations.Core.Contracts; +// ReSharper disable CollectionNeverUpdated.Global + +namespace Elsa.Alterations.Endpoints.Alterations.Run; + +/// +/// A plan that contains a list of alterations to be applied to a set of workflow instances. +/// +public class Request +{ + /// + /// The alterations to be applied. + /// + public ICollection Alterations { get; set; } = new List(); + + /// + /// The IDs of the workflow instances that this plan applies to. + /// + public ICollection WorkflowInstanceIds { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Response.cs new file mode 100644 index 0000000..d2b04d6 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Run/Response.cs @@ -0,0 +1,8 @@ +using Elsa.Alterations.Core.Results; + +namespace Elsa.Alterations.Endpoints.Alterations.Run; + +/// +/// The response from the endpoint. +/// +public record Response(ICollection Results); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Endpoint.cs new file mode 100644 index 0000000..e7ba123 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Endpoint.cs @@ -0,0 +1,45 @@ +using Elsa.Abstractions; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using Elsa.Common; +using Elsa.Workflows; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Endpoints.Alterations.Submit; + +/// +/// Submits an alteration plan to be executed targeting workflow instances by a filter. +/// +[PublicAPI] +public class Submit : ElsaEndpoint +{ + private readonly IAlterationPlanScheduler _alterationPlanScheduler; + private readonly IIdentityGenerator _identityGenerator; + private readonly ISystemClock _systemClock; + + /// + public Submit(IAlterationPlanScheduler alterationPlanScheduler, IIdentityGenerator identityGenerator, ISystemClock systemClock) + { + _alterationPlanScheduler = alterationPlanScheduler; + _identityGenerator = identityGenerator; + _systemClock = systemClock; + } + + /// + public override void Configure() + { + Post("/alterations/submit"); + ConfigurePermissions("run:alterations"); + } + + /// + public override async Task HandleAsync(AlterationPlanParams planParams, CancellationToken cancellationToken) + { + // Submit the plan. + var planId = await _alterationPlanScheduler.SubmitAsync(planParams, cancellationToken); + + // Write response. + var response = new Response(planId); + await SendOkAsync(response, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Response.cs new file mode 100644 index 0000000..f888d37 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Alterations/Submit/Response.cs @@ -0,0 +1,6 @@ +namespace Elsa.Alterations.Endpoints.Alterations.Submit; + +/// +/// The response from the endpoint. +/// +public record Response(string PlanId); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Endpoint.cs b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Endpoint.cs new file mode 100644 index 0000000..c690f65 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Endpoint.cs @@ -0,0 +1,77 @@ +using Elsa.Abstractions; +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Results; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Filters; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Contracts; +using Elsa.Workflows.Runtime.Requests; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Endpoints.Workflows.Retry; + +/// +/// Retries the specified workflow instances. +/// +[PublicAPI] +public class Retry : ElsaEndpoint +{ + private readonly IAlterationRunner _alterationRunner; + private readonly IWorkflowDispatcher _workflowDispatcher; + private readonly IWorkflowInstanceStore _workflowInstanceStore; + + /// + public Retry(IAlterationRunner alterationRunner, IWorkflowDispatcher workflowDispatcher, IWorkflowInstanceStore workflowInstanceStore) + { + _alterationRunner = alterationRunner; + _workflowDispatcher = workflowDispatcher; + _workflowInstanceStore = workflowInstanceStore; + } + + /// + public override void Configure() + { + Routes("/alterations/workflows/retry"); + Verbs(FastEndpoints.Http.GET, FastEndpoints.Http.POST); + ConfigurePermissions("run:alterations"); + } + + /// + public override async Task HandleAsync(Request request, CancellationToken cancellationToken) + { + var allResults = new List(); + + // Load each workflow instance. + var workflowInstances = (await _workflowInstanceStore.FindManyAsync(new WorkflowInstanceFilter { Ids = request.WorkflowInstanceIds }, cancellationToken)).ToList(); + + foreach (var workflowInstance in workflowInstances) + { + // Setup an alteration plan. + var activityIds = GetActivityIds(request, workflowInstance).ToList(); + var alterations = activityIds.Select(activityId => new ScheduleActivity { ActivityId = activityId }).Cast().ToList(); + + // Run the plan. + var results = await _alterationRunner.RunAsync(request.WorkflowInstanceIds, alterations, cancellationToken); + allResults.AddRange(results); + + // Schedule updated workflow. + await _workflowDispatcher.DispatchAsync(new DispatchWorkflowInstanceRequest(workflowInstance.Id), cancellationToken: cancellationToken); + } + + // Write response. + var response = new Response(allResults); + await SendOkAsync(response, cancellationToken); + } + + private IEnumerable GetActivityIds(Request request, WorkflowInstance workflowInstance) + { + // If activity IDs are explicitly specified, use them. + if (request.ActivityIds?.Any() == true) + return request.ActivityIds; + + // Otherwise, select IDs of all faulted activities. + return workflowInstance.WorkflowState.Incidents.Select(x => x.ActivityId).Distinct().ToList(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Request.cs b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Request.cs new file mode 100644 index 0000000..7539fe3 --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Request.cs @@ -0,0 +1,17 @@ +namespace Elsa.Alterations.Endpoints.Workflows.Retry; + +/// +/// A request to retry one or more faulted workflow instances. +/// +public class Request +{ + /// + /// The IDs of the workflow instances that have incidents to be retried. + /// + public ICollection WorkflowInstanceIds { get; set; } = new List(); + + /// + /// An optional list of explicitly specified activity IDs to retry. If omitted, all faulted activities will be retried. + /// + public ICollection? ActivityIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Response.cs b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Response.cs new file mode 100644 index 0000000..99a910c --- /dev/null +++ b/src/modules/Elsa.Alterations/Endpoints/Workflows/Retry/Response.cs @@ -0,0 +1,8 @@ +using Elsa.Alterations.Core.Results; + +namespace Elsa.Alterations.Endpoints.Workflows.Retry; + +/// +/// The response from the endpoint. +/// +public record Response(ICollection Results); \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Alterations/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..9361504 --- /dev/null +++ b/src/modules/Elsa.Alterations/Extensions/ModuleExtensions.cs @@ -0,0 +1,19 @@ +using Elsa.Alterations.Features; +using Elsa.Extensions; +using Elsa.Features.Services; + +namespace Elsa.Alterations.Extensions; + +/// +/// Adds the . +/// +public static class ModuleExtensions +{ + /// + /// Adds the . + /// + public static IModule UseAlterations(this IModule module, Action? configure = default) + { + return module.Use(configure); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..b930d28 --- /dev/null +++ b/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,27 @@ +using Elsa.Alterations.AlterationHandlers; +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Extensions; +using Elsa.Alterations.Features; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.Extensions; + +/// +/// Extension methods for . +/// +public static class ServiceCollectionExtensions +{ + /// + /// Adds various alteration handlers. + /// + public static IServiceCollection AddAlterations(this IServiceCollection services) + { + services.AddAlteration(); + services.AddAlteration(); + services.AddAlteration(); + services.AddAlteration(); + services.AddAlteration(); + services.AddNotificationHandlersFrom(); + return services; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Features/AlterationsFeature.cs b/src/modules/Elsa.Alterations/Features/AlterationsFeature.cs new file mode 100644 index 0000000..426a341 --- /dev/null +++ b/src/modules/Elsa.Alterations/Features/AlterationsFeature.cs @@ -0,0 +1,76 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Extensions; +using Elsa.Alterations.Core.Stores; +using Elsa.Alterations.Extensions; +using Elsa.Alterations.Services; +using Elsa.Alterations.Workflows; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.Features; + +/// +/// Adds the Elsa alterations services. +/// +public class AlterationsFeature : FeatureBase +{ + /// + public AlterationsFeature(IModule module) : base(module) + { + } + + /// + /// Gets or sets the factory for the alteration plan store. + /// + public Func AlterationPlanStoreFactory { get; set; } = sp => sp.GetRequiredService(); + + /// + /// Gets or sets the factory for the alteration job store. + /// + public Func AlterationJobStoreFactory { get; set; } = sp => sp.GetRequiredService(); + + /// + /// Gets or sets the factory for the alteration job dispatcher. + /// + public Func AlterationJobDispatcherFactory { get; set; } = sp => sp.GetRequiredService(); + + /// + /// Adds an alteration and its handler. + /// + /// The type of alteration. + /// The type of alteration handler. + public AlterationsFeature AddAlteration() where T : class, IAlteration where THandler : class, IAlterationHandler + { + Services.AddAlteration(); + return this; + } + + /// + public override void Configure() + { + Module.AddFastEndpointsAssembly(); + Module.AddWorkflow(); + } + + /// + public override void Apply() + { + Services.AddScoped(); + Services.AddAlterations(); + Services.AddAlterationsCore(); + Services.AddScoped(); + Services.AddScoped(); + Services.AddScoped(); + Services.AddScoped(); + + Services.AddMemoryStore(); + Services.AddMemoryStore(); + + Services.AddScoped(AlterationPlanStoreFactory); + Services.AddScoped(AlterationJobStoreFactory); + Services.AddScoped(AlterationJobDispatcherFactory); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/FodyWeavers.xml b/src/modules/Elsa.Alterations/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Alterations/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Handlers/AlterationJobCompletedHandler.cs b/src/modules/Elsa.Alterations/Handlers/AlterationJobCompletedHandler.cs new file mode 100644 index 0000000..e9b2758 --- /dev/null +++ b/src/modules/Elsa.Alterations/Handlers/AlterationJobCompletedHandler.cs @@ -0,0 +1,27 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Notifications; +using Elsa.Mediator.Contracts; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Handlers; + +/// +/// Handles notifications and updates the plan status if all jobs are completed. +/// +[UsedImplicitly] +public class AlterationJobCompletedHandler(IAlterationPlanManager manager) : INotificationHandler +{ + /// + public async Task HandleAsync(AlterationJobCompleted notification, CancellationToken cancellationToken) + { + var job = notification.Job; + var planId = job.PlanId; + var plan = (await manager.GetPlanAsync(planId, cancellationToken))!; + var allJobsCompleted = await manager.GetIsAllJobsCompletedAsync(planId, cancellationToken); + + if(!allJobsCompleted) + return; + + await manager.CompletePlanAsync(plan, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Handlers/AlterationPlanCompletedHandler.cs b/src/modules/Elsa.Alterations/Handlers/AlterationPlanCompletedHandler.cs new file mode 100644 index 0000000..f9b6050 --- /dev/null +++ b/src/modules/Elsa.Alterations/Handlers/AlterationPlanCompletedHandler.cs @@ -0,0 +1,31 @@ +using Elsa.Alterations.Bookmarks; +using Elsa.Alterations.Core.Notifications; +using Elsa.Mediator.Contracts; +using Elsa.Workflows; +using Elsa.Workflows.Helpers; +using Elsa.Workflows.Runtime; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Handlers; + +/// +/// Handles notifications and triggers any workflows that are waiting for the plan to complete. +/// +[UsedImplicitly] +public class AlterationPlanCompletedHandler(IBookmarkQueue bookmarkQueue, IStimulusHasher stimulusHasher) : INotificationHandler +{ + /// + public async Task HandleAsync(AlterationPlanCompleted notification, CancellationToken cancellationToken) + { + // Trigger any workflow instances that are waiting for the plan to complete. + var planId = notification.Plan.Id; + var bookmarkPayload = new AlterationPlanCompletedPayload(planId); + var activityTypeName = ActivityTypeNameHelper.GenerateTypeName(); + var item = new NewBookmarkQueueItem + { + ActivityTypeName = activityTypeName, + StimulusHash = stimulusHasher.Hash(activityTypeName, bookmarkPayload) + }; + await bookmarkQueue.EnqueueAsync(item, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Handlers/ResumeWorkflowInstance.cs b/src/modules/Elsa.Alterations/Handlers/ResumeWorkflowInstance.cs new file mode 100644 index 0000000..91bb827 --- /dev/null +++ b/src/modules/Elsa.Alterations/Handlers/ResumeWorkflowInstance.cs @@ -0,0 +1,43 @@ +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Notifications; +using Elsa.Mediator.Contracts; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Contracts; +using Elsa.Workflows.Runtime.Requests; +using JetBrains.Annotations; + +namespace Elsa.Alterations.Handlers; + +/// +/// Resumes a workflow instance when an alteration job has been completed and the workflow contains scheduled work. +/// +[UsedImplicitly] +public class ResumeWorkflowInstance : INotificationHandler +{ + private readonly IWorkflowDispatcher _workflowDispatcher; + + /// + /// Initializes a new instance of the class. + /// + public ResumeWorkflowInstance(IWorkflowDispatcher workflowDispatcher) + { + _workflowDispatcher = workflowDispatcher; + } + + /// + public async Task HandleAsync(AlterationJobCompleted notification, CancellationToken cancellationToken) + { + var job = notification.Job; + + // Check if job is completed. + if(job.Status != AlterationJobStatus.Completed) + return; + + // Check if the workflow contains scheduled work. + if(!notification.WorkflowContainsScheduledWork) + return; + + // Resume workflow instance. + await _workflowDispatcher.DispatchAsync(new DispatchWorkflowInstanceRequest(job.WorkflowInstanceId), cancellationToken: cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Middleware/Workflows/RunAlterationsMiddleware.cs b/src/modules/Elsa.Alterations/Middleware/Workflows/RunAlterationsMiddleware.cs new file mode 100644 index 0000000..f412a8c --- /dev/null +++ b/src/modules/Elsa.Alterations/Middleware/Workflows/RunAlterationsMiddleware.cs @@ -0,0 +1,58 @@ +using Elsa.Alterations.Core.Contexts; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Pipelines.WorkflowExecution; + +namespace Elsa.Alterations.Middleware.Workflows; + +/// +/// Middleware that runs alterations. +/// +internal class RunAlterationsMiddleware(WorkflowMiddlewareDelegate next, IEnumerable handlers) : WorkflowExecutionMiddleware(next) +{ + public static readonly object AlterationsPropertyKey = new(); + public static readonly object AlterationsLogPropertyKey = new(); + + public override async ValueTask InvokeAsync(WorkflowExecutionContext context) + { + var alterations = (IEnumerable)(context.TransientProperties.GetValue(AlterationsPropertyKey) ?? throw new InvalidOperationException("No alterations found in the transient properties.")); + var log = (AlterationLog)(context.TransientProperties.GetValue(AlterationsLogPropertyKey) ?? throw new InvalidOperationException("No alteration log found in the transient properties.")); + await RunAsync(context, alterations, log, context.CancellationToken); + } + + private async Task RunAsync(WorkflowExecutionContext workflowExecutionContext, IEnumerable alterations, AlterationLog log, CancellationToken cancellationToken = default) + { + var commitActions = new List>(); + + foreach (var alteration in alterations) + { + // Find handlers. + var supportedHandlers = handlers.Where(x => x.CanHandle(alteration)).ToList(); + + foreach (var handler in supportedHandlers) + { + // Execute handler. + var alterationContext = new AlterationContext(alteration, workflowExecutionContext, log, cancellationToken); + await handler.HandleAsync(alterationContext); + + // If the handler has failed, exit. + if (alterationContext.HasFailed) + return; + + // Collect the commit handler, if any. + if (alterationContext.CommitAction != null) + commitActions.Add(alterationContext.CommitAction); + } + } + + // Execute commit handlers. + foreach (var commitAction in commitActions) + await commitAction(); + + // Add alteration logs to the workflow execution log. + foreach (var alterationLogEntry in log.LogEntries) + workflowExecutionContext.AddExecutionLogEntry(alterationLogEntry.EventName ?? alterationLogEntry.Message, alterationLogEntry.Message); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Services/AlterationPlanManager.cs b/src/modules/Elsa.Alterations/Services/AlterationPlanManager.cs new file mode 100644 index 0000000..23e0542 --- /dev/null +++ b/src/modules/Elsa.Alterations/Services/AlterationPlanManager.cs @@ -0,0 +1,43 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Filters; +using Elsa.Alterations.Core.Notifications; +using Elsa.Common; +using Elsa.Mediator.Contracts; + +namespace Elsa.Alterations.Services; + +/// +public class AlterationPlanManager(IAlterationPlanStore planStore, IAlterationJobStore jobStore, ISystemClock systemClock, INotificationSender notificationSender) : IAlterationPlanManager +{ + /// + public async Task GetPlanAsync(string planId, CancellationToken cancellationToken = default) + { + var planFilter = new AlterationPlanFilter { Id = planId }; + return await planStore.FindAsync(planFilter, cancellationToken); + } + + /// + public async Task GetIsAllJobsCompletedAsync(string planId, CancellationToken cancellationToken = default) + { + // Check if all jobs are completed. + var jobFilter = new AlterationJobFilter + { + PlanId = planId, + Statuses = [AlterationJobStatus.Pending, AlterationJobStatus.Running] + }; + + return await jobStore.CountAsync(jobFilter, cancellationToken) == 0; + } + + /// + public async Task CompletePlanAsync(AlterationPlan plan, CancellationToken cancellationToken = default) + { + plan.Status = AlterationPlanStatus.Completed; + plan.CompletedAt = systemClock.UtcNow; + + await planStore.SaveAsync(plan, cancellationToken); + await notificationSender.SendAsync(new AlterationPlanCompleted(plan), cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Services/BackgroundAlterationJobDispatcher.cs b/src/modules/Elsa.Alterations/Services/BackgroundAlterationJobDispatcher.cs new file mode 100644 index 0000000..80874dc --- /dev/null +++ b/src/modules/Elsa.Alterations/Services/BackgroundAlterationJobDispatcher.cs @@ -0,0 +1,25 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Mediator.Contracts; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Alterations.Services; + +/// +/// Dispatches an alteration job for execution using an in-memory channel. +/// +public class BackgroundAlterationJobDispatcher(IJobQueue jobQueue, IServiceScopeFactory scopeFactory) : IAlterationJobDispatcher +{ + /// + public ValueTask DispatchAsync(string jobId, CancellationToken cancellationToken = default) + { + jobQueue.Enqueue(ct => ExecuteJobAsync(jobId, ct)); + return default; + } + + private async Task ExecuteJobAsync(string alterationJobId, CancellationToken cancellationToken) + { + using var scope = scopeFactory.CreateScope(); + var alterationJobRunner = scope.ServiceProvider.GetRequiredService(); + await alterationJobRunner.RunAsync(alterationJobId, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Services/DefaultAlterationJobRunner.cs b/src/modules/Elsa.Alterations/Services/DefaultAlterationJobRunner.cs new file mode 100644 index 0000000..020d970 --- /dev/null +++ b/src/modules/Elsa.Alterations/Services/DefaultAlterationJobRunner.cs @@ -0,0 +1,58 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Enums; +using Elsa.Alterations.Core.Filters; +using Elsa.Alterations.Core.Notifications; +using Elsa.Common; +using Elsa.Mediator.Contracts; + +namespace Elsa.Alterations.Services; + +/// +public class DefaultAlterationJobRunner : IAlterationJobRunner +{ + private readonly IAlterationPlanStore _alterationPlanStore; + private readonly IAlterationJobStore _alterationJobStore; + private readonly IAlterationRunner _alterationRunner; + private readonly INotificationSender _notificationSender; + private readonly ISystemClock _systemClock; + + /// + /// Initializes a new instance of the class. + /// + public DefaultAlterationJobRunner( + IAlterationPlanStore alterationPlanStore, + IAlterationJobStore alterationJobStore, + IAlterationRunner alterationRunner, + INotificationSender notificationSender, + ISystemClock systemClock) + { + _alterationPlanStore = alterationPlanStore; + _alterationJobStore = alterationJobStore; + _alterationRunner = alterationRunner; + _notificationSender = notificationSender; + _systemClock = systemClock; + } + + /// + public async Task RunAsync(string jobId, CancellationToken cancellationToken = default) + { + var job = (await _alterationJobStore.FindAsync(new AlterationJobFilter { Id = jobId }, cancellationToken))!; + var plan = (await _alterationPlanStore.FindAsync(new AlterationPlanFilter { Id = job.PlanId }, cancellationToken))!; + var workflowInstanceId = job.WorkflowInstanceId; + + job.Status = AlterationJobStatus.Running; + job.StartedAt = _systemClock.UtcNow; + await _alterationJobStore.SaveAsync(job, cancellationToken); + + var result = await _alterationRunner.RunAsync(workflowInstanceId, plan.Alterations, cancellationToken); + + job.Status = result.IsSuccessful ? AlterationJobStatus.Completed : AlterationJobStatus.Failed; + job.Log = result.Log.LogEntries.ToList(); + job.CompletedAt = _systemClock.UtcNow; + await _alterationJobStore.SaveAsync(job, cancellationToken); + await _notificationSender.SendAsync(new AlterationJobCompleted(job, result.WorkflowHasScheduledWork), cancellationToken); + + return job; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Services/DefaultAlterationPlanScheduler.cs b/src/modules/Elsa.Alterations/Services/DefaultAlterationPlanScheduler.cs new file mode 100644 index 0000000..4ab30f4 --- /dev/null +++ b/src/modules/Elsa.Alterations/Services/DefaultAlterationPlanScheduler.cs @@ -0,0 +1,59 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using Elsa.Alterations.Workflows; +using Elsa.Common; +using Elsa.Common.Models; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Contracts; +using Elsa.Workflows.Runtime.Requests; + +namespace Elsa.Alterations.Services; + +/// +/// Stores the new plan and schedules it for immediate execution. +/// +public class DefaultAlterationPlanScheduler : IAlterationPlanScheduler +{ + private readonly IWorkflowDefinitionService _workflowDefinitionService; + private readonly IWorkflowDispatcher _workflowDispatcher; + private readonly IIdentityGenerator _identityGenerator; + private readonly IJsonSerializer _jsonSerializer; + + /// + /// Initializes a new instance of the class. + /// + public DefaultAlterationPlanScheduler(IWorkflowDefinitionService workflowDefinitionService, IWorkflowDispatcher workflowDispatcher, IIdentityGenerator identityGenerator, IJsonSerializer jsonSerializer) + { + _workflowDefinitionService = workflowDefinitionService; + _workflowDispatcher = workflowDispatcher; + _identityGenerator = identityGenerator; + _jsonSerializer = jsonSerializer; + } + + /// + public async Task SubmitAsync(AlterationPlanParams planParams, CancellationToken cancellationToken = default) + { + if(string.IsNullOrWhiteSpace(planParams.Id)) + planParams.Id = _identityGenerator.GenerateId(); + + var definitionId = ExecuteAlterationPlanWorkflow.WorkflowDefinitionId; + var workflowGraph = await _workflowDefinitionService.FindWorkflowGraphAsync(definitionId, VersionOptions.Published, cancellationToken); + + if (workflowGraph == null) + throw new($"Workflow definition with ID '{definitionId}' not found"); + + var serializedPlan = _jsonSerializer.Serialize(planParams); + var request = new DispatchWorkflowDefinitionRequest(workflowGraph.Workflow.Identity.Id) + { + Input = new Dictionary + { + ["Plan"] = serializedPlan + } + }; + await _workflowDispatcher.DispatchAsync(request, cancellationToken); + + return planParams.Id; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Services/DefaultAlterationRunner.cs b/src/modules/Elsa.Alterations/Services/DefaultAlterationRunner.cs new file mode 100644 index 0000000..37ae0e8 --- /dev/null +++ b/src/modules/Elsa.Alterations/Services/DefaultAlterationRunner.cs @@ -0,0 +1,100 @@ +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Models; +using Elsa.Alterations.Core.Results; +using Elsa.Alterations.Middleware.Workflows; +using Elsa.Common; +using Elsa.Workflows; +using Elsa.Workflows.CommitStates; +using Elsa.Workflows.Management; +using Elsa.Workflows.Pipelines.WorkflowExecution; +using Elsa.Workflows.Runtime; +using Microsoft.Extensions.Logging; + +namespace Elsa.Alterations.Services; + +/// +public class DefaultAlterationRunner( + IWorkflowRuntime workflowRuntime, + IWorkflowExecutionPipeline workflowExecutionPipeline, + IWorkflowDefinitionService workflowDefinitionService, + IWorkflowStateExtractor workflowStateExtractor, + ICommitStateHandler commitStateHandler, + ISystemClock systemClock, + IServiceProvider serviceProvider) + : IAlterationRunner +{ + /// + public async Task> RunAsync(IEnumerable workflowInstanceIds, IEnumerable alterations, CancellationToken cancellationToken = default) + { + var results = new List(); + var alterationList = alterations as ICollection ?? alterations.ToList(); + + foreach (var workflowInstanceId in workflowInstanceIds) + { + var result = await RunAsync(workflowInstanceId, alterationList, cancellationToken); + results.Add(result); + } + + return results; + } + + /// + public async Task RunAsync(string workflowInstanceId, IEnumerable alterations, CancellationToken cancellationToken = default) + { + var log = new AlterationLog(systemClock); + var result = new RunAlterationsResult(workflowInstanceId, log); + var workflowClient = await workflowRuntime.CreateClientAsync(workflowInstanceId, cancellationToken: cancellationToken); + + // Load workflow instance. + var workflowState = await workflowClient.ExportStateAsync(cancellationToken); + + if (workflowState == null) + { + log.Add($"Workflow instance with ID '{workflowInstanceId}' not found.", LogLevel.Error); + return result; + } + + // Load workflow definition. + var workflowGraph = await workflowDefinitionService.FindWorkflowGraphAsync(workflowState.DefinitionVersionId, cancellationToken); + + if (workflowGraph == null) + { + log.Add($"Workflow definition with ID '{workflowState.DefinitionVersionId}' not found.", LogLevel.Error); + return result; + } + + // Create workflow execution context. + var workflowExecutionContext = await WorkflowExecutionContext.CreateAsync(serviceProvider, workflowGraph, workflowState, cancellationToken: cancellationToken); + workflowExecutionContext.TransientProperties.Add(RunAlterationsMiddleware.AlterationsPropertyKey, alterations); + workflowExecutionContext.TransientProperties.Add(RunAlterationsMiddleware.AlterationsLogPropertyKey, log); + + // Build a new workflow execution pipeline. + var pipelineBuilder = new WorkflowExecutionPipelineBuilder(serviceProvider); + workflowExecutionPipeline.ConfigurePipelineBuilder(pipelineBuilder); + + // Replace the terminal DefaultActivitySchedulerMiddleware with the RunAlterationsMiddleware terminal. + pipelineBuilder.ReplaceTerminal(); + + // Build modified pipeline. + var pipeline = pipelineBuilder.Build(); + + // Execute the pipeline. + await pipeline(workflowExecutionContext); + + // Extract workflow state. + workflowState = workflowStateExtractor.Extract(workflowExecutionContext); + + // Commit workflow state. + await commitStateHandler.CommitAsync(workflowExecutionContext, workflowState, cancellationToken); + + // Apply updated workflow state. + // TODO: Importing back into the workflow runtime makes sense, but this also causes another SAVE ction of the workflow instance in the DB, which also happens in the previous step during the commit action. + // Can we avoid this? Perhaps we need more granular control over when we purge and when we save to DB. + await workflowClient.ImportStateAsync(workflowState, cancellationToken); + + // Check if the workflow has scheduled work. + result.WorkflowHasScheduledWork = workflowExecutionContext.Scheduler.HasAny; + + return result; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Workflows/ExecuteAlterationPlanWorkflow.cs b/src/modules/Elsa.Alterations/Workflows/ExecuteAlterationPlanWorkflow.cs new file mode 100644 index 0000000..0994c79 --- /dev/null +++ b/src/modules/Elsa.Alterations/Workflows/ExecuteAlterationPlanWorkflow.cs @@ -0,0 +1,48 @@ +using Elsa.Alterations.Activities; +using Elsa.Alterations.Core.Models; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Activities; + +namespace Elsa.Alterations.Workflows; + +/// +/// Executes an alteration plan. +/// +public class ExecuteAlterationPlanWorkflow : WorkflowBase +{ + internal const string WorkflowDefinitionId = "Elsa.Alterations.ExecuteAlterationPlan"; + + /// + protected override void Build(IWorkflowBuilder builder) + { + builder.WithDefinitionId(WorkflowDefinitionId); + builder.AsSystemWorkflow(); + var plan = builder.WithInput("Plan", "The parameters for the new plan"); + var planId = builder.WithVariable(); + var jobCount = builder.WithVariable(); + + builder.Root = new Sequence + { + Activities = + { + new SubmitAlterationPlan + { + Params = new(context => context.GetInput(plan)!), + Result = new(planId) + }, + new Correlate(planId), + new GenerateAlterationJobs(planId) + { + Result = new(jobCount) + }, + new If(context => jobCount.Get(context) > 0) + { + Then = new DispatchAlterationJobs(planId), + Else = new CompleteAlterationPlan(planId) + }, + new AlterationPlanCompleted(planId), + } + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Activities/RunCSharp/RunCSharp.cs b/src/modules/Elsa.CSharp/Activities/RunCSharp/RunCSharp.cs new file mode 100644 index 0000000..2df6d48 --- /dev/null +++ b/src/modules/Elsa.CSharp/Activities/RunCSharp/RunCSharp.cs @@ -0,0 +1,75 @@ +using System.Runtime.CompilerServices; +using Elsa.CSharp.Contracts; +using Elsa.CSharp.Extensions; +using Elsa.CSharp.Models; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.UIHints; +using Elsa.Workflows.Models; + +// ReSharper disable once CheckNamespace +namespace Elsa.CSharp.Activities; + +/// +/// Executes C# code. +/// +[Activity("Elsa", "Scripting", "Executes C# code", DisplayName = "Run C#")] +public class RunCSharp : CodeActivity +{ + /// + public RunCSharp([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + } + + /// + public RunCSharp(string script, [CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : this(source, line) + { + Script = new Input(script); + } + + /// + /// The script to run. + /// + [Input( + Description = "The script to run.", + DefaultSyntax = "CSharp", + UIHint = InputUIHints.CodeEditor, + UIHandler = typeof(RunCSharpOptionsProvider) + )] + public Input Script { get; set; } = new(""); + + /// + /// A list of possible outcomes. Use "SetOutcome(string)" to set the outcome. Use "SetOutcomes(params string[])" to set multiple outcomes. + /// + [Input(Description = "A list of possible outcomes.", UIHint = InputUIHints.DynamicOutcomes)] + public Input> PossibleOutcomes { get; set; } = null!; + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var script = context.Get(Script); + + // If no script was specified, there's nothing to do. + if (string.IsNullOrWhiteSpace(script)) + return; + + // Get a C# evaluator. + var evaluator = context.GetRequiredService(); + + // Run the script. + var options = new ExpressionEvaluatorOptions(); + var result = await evaluator.EvaluateAsync(script, typeof(object), context.ExpressionExecutionContext, options, context.CancellationToken); + + // Set the result as output, if any. + if (result is not null) + context.Set(Result, result); + + // Get the outcome or outcomes set by the script, if any. If not set, use "Done". + var outcomes = context.ExpressionExecutionContext.TransientProperties.GetValueOrDefault(OutcomeProxy.OutcomePropertiesKey, () => new[] { "Done" })!; + + // Complete the activity with the outcome. + await context.CompleteActivityWithOutcomesAsync(outcomes); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Activities/RunCSharp/RunCSharpOptionsProvider.cs b/src/modules/Elsa.CSharp/Activities/RunCSharp/RunCSharpOptionsProvider.cs new file mode 100644 index 0000000..f179728 --- /dev/null +++ b/src/modules/Elsa.CSharp/Activities/RunCSharp/RunCSharpOptionsProvider.cs @@ -0,0 +1,10 @@ +using System.Reflection; +using Elsa.Workflows.UIHints.CodeEditor; + +// ReSharper disable once CheckNamespace +namespace Elsa.CSharp.Activities; + +internal class RunCSharpOptionsProvider : CodeEditorOptionsProviderBase +{ + protected override string GetLanguage(PropertyInfo propertyInfo, object? context) => "csharp"; +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Contexts/ScriptConfigurationContext.cs b/src/modules/Elsa.CSharp/Contexts/ScriptConfigurationContext.cs new file mode 100644 index 0000000..bdae8a4 --- /dev/null +++ b/src/modules/Elsa.CSharp/Contexts/ScriptConfigurationContext.cs @@ -0,0 +1,11 @@ +using Elsa.Expressions.Models; +using Microsoft.CodeAnalysis.Scripting; + +namespace Elsa.CSharp.Contexts; + +/// +/// Context for configuring the . +/// +/// The script. +/// The expression execution context. +public record ScriptConfigurationContext(Script Script, ExpressionExecutionContext ExpressionExecutionContext); \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Contexts/ScriptOptionsConfigurationContext.cs b/src/modules/Elsa.CSharp/Contexts/ScriptOptionsConfigurationContext.cs new file mode 100644 index 0000000..4ae1bc0 --- /dev/null +++ b/src/modules/Elsa.CSharp/Contexts/ScriptOptionsConfigurationContext.cs @@ -0,0 +1,11 @@ +using Elsa.Expressions.Models; +using Microsoft.CodeAnalysis.Scripting; + +namespace Elsa.CSharp.Contexts; + +/// +/// Context for configuring the . +/// +/// The script options. +/// The expression execution context. +public record ScriptOptionsConfigurationContext(ScriptOptions ScriptOptions, ExpressionExecutionContext ExpressionExecutionContext); \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Contracts/ICSharpEvaluator.cs b/src/modules/Elsa.CSharp/Contracts/ICSharpEvaluator.cs new file mode 100644 index 0000000..ef8c96b --- /dev/null +++ b/src/modules/Elsa.CSharp/Contracts/ICSharpEvaluator.cs @@ -0,0 +1,32 @@ +using Elsa.Expressions.Models; +using JetBrains.Annotations; +using Microsoft.CodeAnalysis.Scripting; + +namespace Elsa.CSharp.Contracts; + +/// +/// Evaluates C# expressions. +/// +[PublicAPI] +public interface ICSharpEvaluator +{ + /// + /// Evaluates a C# expression. + /// + /// The expression to evaluate. + /// The type of the return value. + /// The context in which the expression is evaluated. + /// A set of options. + /// An optional callback to configure the script options. + /// An optional callback to configure the script. + /// An optional cancellation token. + /// The result of the evaluation. + Task EvaluateAsync( + string expression, + Type returnType, + ExpressionExecutionContext context, + ExpressionEvaluatorOptions options, + Func? configureScriptOptions = default, + Func, Script>? configureScript = default, + CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Elsa.CSharp.csproj b/src/modules/Elsa.CSharp/Elsa.CSharp.csproj new file mode 100644 index 0000000..30083f4 --- /dev/null +++ b/src/modules/Elsa.CSharp/Elsa.CSharp.csproj @@ -0,0 +1,20 @@ + + + + + Provides a CSharp expression provider. + + elsa module expressions scripting csharp + + + + + + + + + + + + + diff --git a/src/modules/Elsa.CSharp/Expressions/CSharpExpressionHandler.cs b/src/modules/Elsa.CSharp/Expressions/CSharpExpressionHandler.cs new file mode 100644 index 0000000..60dd1da --- /dev/null +++ b/src/modules/Elsa.CSharp/Expressions/CSharpExpressionHandler.cs @@ -0,0 +1,29 @@ +using Elsa.CSharp.Contracts; +using Elsa.Expressions.Contracts; +using Elsa.Expressions.Helpers; +using Elsa.Expressions.Models; + +namespace Elsa.CSharp.Expressions; + +/// +/// Evaluates C# expressions. +/// +public class CSharpExpressionHandler : IExpressionHandler +{ + private readonly ICSharpEvaluator _cSharpEvaluator; + + /// + /// Initializes a new instance of the class. + /// + public CSharpExpressionHandler(ICSharpEvaluator cSharpEvaluator) + { + _cSharpEvaluator = cSharpEvaluator; + } + + /// + public async ValueTask EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options) + { + var script = expression.Value.ConvertTo() ?? ""; + return await _cSharpEvaluator.EvaluateAsync(script, returnType, context, options); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Extensions/CSharpEvaluatorExtensions.cs b/src/modules/Elsa.CSharp/Extensions/CSharpEvaluatorExtensions.cs new file mode 100644 index 0000000..135253b --- /dev/null +++ b/src/modules/Elsa.CSharp/Extensions/CSharpEvaluatorExtensions.cs @@ -0,0 +1,30 @@ +using Elsa.CSharp.Contracts; +using Elsa.Expressions.Models; + +namespace Elsa.CSharp.Extensions; + +/// +/// Provides extension methods for . +/// +public static class CSharpEvaluatorExtensions +{ + /// + /// Evaluates a C# expression. + /// + /// The evaluator. + /// The expression to evaluate. + /// The type of the return value. + /// The context in which the expression is evaluated. + /// An set of options. + /// An optional cancellation token. + /// The result of the evaluation. + public static async Task EvaluateAsync(this ICSharpEvaluator evaluator, + string expression, + Type returnType, + ExpressionExecutionContext context, + ExpressionEvaluatorOptions options, + CancellationToken cancellationToken = default) + { + return await evaluator.EvaluateAsync(expression, returnType, context, options, null, null, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Extensions/ModuleExtensions.cs b/src/modules/Elsa.CSharp/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..b264bbb --- /dev/null +++ b/src/modules/Elsa.CSharp/Extensions/ModuleExtensions.cs @@ -0,0 +1,29 @@ +using Elsa.CSharp.Features; +using Elsa.CSharp.Options; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Adds extensions to that installs the feature. +/// +public static class ModuleExtensions +{ + /// + /// Setup the feature. + /// + public static IModule UseCSharp(this IModule module, Action? configure = default) + { + module.Configure(configure); + return module; + } + + /// + /// Setup the feature. + /// + public static IModule UseCSharp(this IModule module, Action configureOptions) + { + return module.UseCSharp(csharp => csharp.CSharpOptions += configureOptions); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Extensions/VariableNameExtensions.cs b/src/modules/Elsa.CSharp/Extensions/VariableNameExtensions.cs new file mode 100644 index 0000000..35584f2 --- /dev/null +++ b/src/modules/Elsa.CSharp/Extensions/VariableNameExtensions.cs @@ -0,0 +1,19 @@ +namespace Elsa.CSharp.Extensions; + +public static class VariableNameExtensions +{ + public static bool IsValidVariableName(this string name) + { + return !string.IsNullOrWhiteSpace(name) && name.All(char.IsLetterOrDigit); + } + + public static bool IsInvalidVariableName(this string name) + { + return !IsValidVariableName(name); + } + + public static IEnumerable FilterInvalidVariableNames(this IEnumerable names) + { + return names.Where(IsValidVariableName); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Features/CSharpFeature.cs b/src/modules/Elsa.CSharp/Features/CSharpFeature.cs new file mode 100644 index 0000000..7dd9d2d --- /dev/null +++ b/src/modules/Elsa.CSharp/Features/CSharpFeature.cs @@ -0,0 +1,56 @@ +using Elsa.Caching.Features; +using Elsa.Common.Features; +using Elsa.CSharp.Activities; +using Elsa.CSharp.Contracts; +using Elsa.CSharp.Options; +using Elsa.CSharp.Providers; +using Elsa.CSharp.Services; +using Elsa.Expressions.Features; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.CSharp.Features; + +/// +/// Installs C# integration. +/// +[DependsOn(typeof(MediatorFeature))] +[DependsOn(typeof(ExpressionsFeature))] +[DependsOn(typeof(MemoryCacheFeature))] +public class CSharpFeature : FeatureBase +{ + /// + public CSharpFeature(IModule module) : base(module) + { + } + + /// + /// Configures the . + /// + public Action CSharpOptions { get; set; } = _ => { }; + + /// + public override void Apply() + { + Services.Configure(CSharpOptions); + + // C# services. + Services + .AddExpressionDescriptorProvider() + .AddScoped() + ; + + // Handlers. + Services.AddNotificationHandlersFrom(); + + // Activities. + Module.AddActivitiesFrom(); + + // UI property handlers. + Services.AddScoped(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/FodyWeavers.xml b/src/modules/Elsa.CSharp/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.CSharp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Handlers/AddAssembliesAndReferencesFromOptions.cs b/src/modules/Elsa.CSharp/Handlers/AddAssembliesAndReferencesFromOptions.cs new file mode 100644 index 0000000..139a808 --- /dev/null +++ b/src/modules/Elsa.CSharp/Handlers/AddAssembliesAndReferencesFromOptions.cs @@ -0,0 +1,35 @@ +using Elsa.CSharp.Notifications; +using Elsa.CSharp.Options; +using Elsa.Mediator.Contracts; +using JetBrains.Annotations; +using Microsoft.CodeAnalysis.Scripting; +using Microsoft.Extensions.Options; + +namespace Elsa.CSharp.Handlers; + +/// +/// This handler adds assemblies and namespaces from the to the . +/// +[UsedImplicitly] +public class AddAssembliesAndReferencesFromOptions : INotificationHandler +{ + private readonly CSharpOptions _options; + + /// + /// Initializes a new instance of the class. + /// + public AddAssembliesAndReferencesFromOptions(IOptions options) + { + _options = options.Value; + } + + /// + public Task HandleAsync(EvaluatingCSharp notification, CancellationToken cancellationToken) + { + notification.ConfigureScriptOptions(scriptOptions => scriptOptions + .AddReferences(_options.Assemblies) + .AddImports(_options.Namespaces)); + + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Handlers/ConfigureScriptsFromOptions.cs b/src/modules/Elsa.CSharp/Handlers/ConfigureScriptsFromOptions.cs new file mode 100644 index 0000000..7c49bcd --- /dev/null +++ b/src/modules/Elsa.CSharp/Handlers/ConfigureScriptsFromOptions.cs @@ -0,0 +1,37 @@ +using Elsa.CSharp.Notifications; +using Elsa.CSharp.Options; +using Elsa.Mediator.Contracts; +using JetBrains.Annotations; +using Microsoft.CodeAnalysis.Scripting; +using Microsoft.Extensions.Options; + +namespace Elsa.CSharp.Handlers; + +/// +/// This handler configures the and from the . +/// +[UsedImplicitly] +public class ConfigureScriptsFromOptions : INotificationHandler +{ + private readonly CSharpOptions _options; + + /// + /// Initializes a new instance of the class. + /// + public ConfigureScriptsFromOptions(IOptions options) + { + _options = options.Value; + } + + /// + public Task HandleAsync(EvaluatingCSharp notification, CancellationToken cancellationToken) + { + foreach (var scriptOptionsCallback in _options.ConfigureScriptOptionsCallbacks) + notification.ScriptOptions = scriptOptionsCallback(notification.ScriptOptions, notification.Context); + + foreach (var scriptCallback in _options.ConfigureScriptCallbacks) + notification.Script = scriptCallback(notification.Script, notification.Context); + + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Handlers/GenerateArgumentAccessors.cs b/src/modules/Elsa.CSharp/Handlers/GenerateArgumentAccessors.cs new file mode 100644 index 0000000..bcbc202 --- /dev/null +++ b/src/modules/Elsa.CSharp/Handlers/GenerateArgumentAccessors.cs @@ -0,0 +1,50 @@ +using System.Text; +using Elsa.CSharp.Extensions; +using Elsa.CSharp.Notifications; +using Elsa.CSharp.Options; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Mediator.Contracts; +using JetBrains.Annotations; +using Microsoft.Extensions.Options; + +namespace Elsa.CSharp.Handlers; + +/// +/// Configures the C# evaluator with methods to access workflow variables. +/// +[UsedImplicitly] +public class GenerateArgumentAccessors(IOptions options) : INotificationHandler +{ + /// + public Task HandleAsync(EvaluatingCSharp notification, CancellationToken cancellationToken) + { + var arguments = notification.Options.Arguments; + var sb = new StringBuilder(); + sb.AppendLine("public partial class ArgumentsProxy {"); + sb.AppendLine("\tpublic ArgumentsProxy(IDictionary arguments) => Arguments = arguments;"); + sb.AppendLine("\tpublic IDictionary Arguments { get; }"); + sb.AppendLine(); + sb.AppendLine("\tpublic T? Get(string name) => Arguments.TryGetValue(name, out var v) ? (T?)v : default;"); + sb.AppendLine(); + + if (!options.Value.DisableWrappers) + { + foreach (var argument in arguments.Where(x => x.Key.IsValidVariableName())) + { + var argumentName = argument.Key; + var variableType = argument.Value.GetType(); + var friendlyTypeName = variableType.GetFriendlyTypeName(Brackets.Angle); + sb.AppendLine($"\tpublic {friendlyTypeName} {argumentName}"); + sb.AppendLine("\t{"); + sb.AppendLine($"\t\tget => Get<{friendlyTypeName}>(\"{argumentName}\");"); + sb.AppendLine("\t}"); + } + } + + sb.AppendLine("}"); + sb.AppendLine("var Args = new ArgumentsProxy(Arguments);"); + notification.AppendScript(sb.ToString()); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Handlers/GenerateWorkflowInputAccessors.cs b/src/modules/Elsa.CSharp/Handlers/GenerateWorkflowInputAccessors.cs new file mode 100644 index 0000000..b8702fd --- /dev/null +++ b/src/modules/Elsa.CSharp/Handlers/GenerateWorkflowInputAccessors.cs @@ -0,0 +1,57 @@ +using System.Text; +using Elsa.CSharp.Extensions; +using Elsa.CSharp.Notifications; +using Elsa.CSharp.Options; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Mediator.Contracts; +using JetBrains.Annotations; +using Microsoft.Extensions.Options; + +namespace Elsa.CSharp.Handlers; + +/// +/// Configures the C# evaluator with methods to access workflow variables. +/// +[UsedImplicitly] +public class GenerateWorkflowInputAccessors(IOptions options) : INotificationHandler +{ + /// + public Task HandleAsync(EvaluatingCSharp notification, CancellationToken cancellationToken) + { + var expressionExecutionContext = notification.Context; + + if (!expressionExecutionContext.TryGetWorkflowExecutionContext(out var workflowExecutionContext)) + return Task.CompletedTask; + + var workflow = workflowExecutionContext.Workflow; + var inputDefinitions = workflow.Inputs.ToList(); + var sb = new StringBuilder(); + sb.AppendLine("public partial class WorkflowInputsProxy {"); + sb.AppendLine("\tpublic WorkflowInputsProxy(ExecutionContextProxy executionContext) => ExecutionContext = executionContext;"); + sb.AppendLine("\tpublic ExecutionContextProxy ExecutionContext { get; }"); + sb.AppendLine(); + sb.AppendLine("\tpublic T? Get(string name) => ExecutionContext.GetInput(name);"); + sb.AppendLine(); + + if (!options.Value.DisableWrappers) + { + foreach (var inputDefinition in inputDefinitions.Where(x => x.Name.IsValidVariableName())) + { + var inputName = inputDefinition.Name; + var variableType = inputDefinition.Type; + var friendlyTypeName = variableType.GetFriendlyTypeName(Brackets.Angle); + sb.AppendLine($"\tpublic {friendlyTypeName} {inputName}"); + sb.AppendLine("\t{"); + sb.AppendLine($"\t\tget => Get<{friendlyTypeName}>(\"{inputName}\");"); + sb.AppendLine("\t}"); + } + } + + sb.AppendLine("}"); + sb.AppendLine("var Inputs = new WorkflowInputsProxy(ExecutionContext);"); // Obsolete; use Input instead. + sb.AppendLine("var Input = Inputs;"); + notification.AppendScript(sb.ToString()); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Handlers/GenerateWorkflowVariableAccessors.cs b/src/modules/Elsa.CSharp/Handlers/GenerateWorkflowVariableAccessors.cs new file mode 100644 index 0000000..c7f03d0 --- /dev/null +++ b/src/modules/Elsa.CSharp/Handlers/GenerateWorkflowVariableAccessors.cs @@ -0,0 +1,56 @@ +using System.Text; +using Elsa.CSharp.Extensions; +using Elsa.CSharp.Notifications; +using Elsa.CSharp.Options; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Mediator.Contracts; +using Humanizer; +using JetBrains.Annotations; +using Microsoft.Extensions.Options; + +namespace Elsa.CSharp.Handlers; + +/// +/// Configures the C# evaluator with methods to access workflow variables. +/// +[UsedImplicitly] +public class GenerateWorkflowVariableAccessors(IOptions options) : INotificationHandler +{ + /// + public Task HandleAsync(EvaluatingCSharp notification, CancellationToken cancellationToken) + { + var expressionExecutionContext = notification.Context; + var variables = expressionExecutionContext.GetVariablesInScope().ToList(); + var sb = new StringBuilder(); + sb.AppendLine("public partial class WorkflowVariablesProxy {"); + sb.AppendLine("\tpublic WorkflowVariablesProxy(ExecutionContextProxy executionContext) => ExecutionContext = executionContext;"); + sb.AppendLine("\tpublic ExecutionContextProxy ExecutionContext { get; }"); + sb.AppendLine(); + sb.AppendLine("\tpublic T? Get(string name) => ExecutionContext.GetVariable(name);"); + sb.AppendLine("\tpublic object? Get(string name) => ExecutionContext.GetVariable(name);"); + sb.AppendLine("\tpublic void Set(string name, object? value) => ExecutionContext.SetVariable(name, value);"); + sb.AppendLine(); + + if (!options.Value.DisableWrappers) + { + foreach (var variable in variables.Where(x => x.Name.IsValidVariableName())) + { + var variableName = variable.Name.Pascalize(); + var variableType = variable.GetVariableType(); + var friendlyTypeName = variableType.GetFriendlyTypeName(Brackets.Angle); + sb.AppendLine($"\tpublic {friendlyTypeName} {variableName}"); + sb.AppendLine("\t{"); + sb.AppendLine($"\t\tget => Get<{friendlyTypeName}>(\"{variableName}\");"); + sb.AppendLine($"\t\tset => Set(\"{variableName}\", value);"); + sb.AppendLine("\t}"); + } + } + + sb.AppendLine("}"); + sb.AppendLine("var Variables = new WorkflowVariablesProxy(ExecutionContext);"); // Obsolete; use Variable instead. + sb.AppendLine("var Variable = Variables;"); + notification.AppendScript(sb.ToString()); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Models/ExecutionContextProxy.cs b/src/modules/Elsa.CSharp/Models/ExecutionContextProxy.cs new file mode 100644 index 0000000..a1c1fd4 --- /dev/null +++ b/src/modules/Elsa.CSharp/Models/ExecutionContextProxy.cs @@ -0,0 +1,46 @@ +using Elsa.Expressions.Helpers; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using JetBrains.Annotations; + +namespace Elsa.CSharp.Models; + +/// +/// Provides access to the current execution context. +/// +[UsedImplicitly] +public partial class ExecutionContextProxy +{ + /// + /// Gets the current execution context. + /// + public ExpressionExecutionContext ExpressionExecutionContext { get; } + + /// + /// Initializes a new instance of the class. + /// + public ExecutionContextProxy(ExpressionExecutionContext expressionExecutionContext) + { + ExpressionExecutionContext = expressionExecutionContext; + } + + /// + /// Gets the value of the specified variable. + /// + public T? GetVariable(string name) => ExpressionExecutionContext.GetVariableInScope(name).ConvertTo(); + + /// + /// Gets the value of the specified variable. + /// + public object? GetVariable(string name) => ExpressionExecutionContext.GetVariableInScope(name); + + /// + /// Sets the value of the specified variable. + /// + public void SetVariable(string name, object? value) => ExpressionExecutionContext.SetVariable(name, value); + + /// + /// Gets the value of the specified variable. + /// + public T? GetInput(string name) => ExpressionExecutionContext.GetInput(name); +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Models/Globals.cs b/src/modules/Elsa.CSharp/Models/Globals.cs new file mode 100644 index 0000000..cc3de6d --- /dev/null +++ b/src/modules/Elsa.CSharp/Models/Globals.cs @@ -0,0 +1,69 @@ +using Elsa.Expressions.Models; +using Elsa.Extensions; +using JetBrains.Annotations; + +namespace Elsa.CSharp.Models; + +/// +/// Provides access to global objects, such as the workflow execution context. +/// +[UsedImplicitly] +public partial class Globals +{ + /// + /// Initializes a new instance of the class. + /// + public Globals(ExpressionExecutionContext expressionExecutionContext, IDictionary arguments) + { + ExpressionExecutionContext = expressionExecutionContext; + Arguments = arguments; + ExecutionContext = new(expressionExecutionContext); + Output = new(expressionExecutionContext); + Outcome = new(expressionExecutionContext); + } + + /// + /// Provides access to activity outcomes. + /// + public OutcomeProxy Outcome { get; set; } + + /// + /// Provides access to activity outputs. + /// + public OutputProxy Output { get; set; } + + /// + /// Gets the current execution context. + /// + public ExecutionContextProxy ExecutionContext { get; } + + /// + /// Gets the ID of the current workflow instance. + /// + public string WorkflowInstanceId => ExpressionExecutionContext.GetWorkflowExecutionContext().Id; + + /// + /// Gets or sets the correlation ID of the current workflow instance. + /// + public string? CorrelationId + { + get => ExpressionExecutionContext.GetWorkflowExecutionContext().CorrelationId; + set => ExpressionExecutionContext.GetWorkflowExecutionContext().CorrelationId = value; + } + + /// + /// Gets or sets the name of the current workflow instance. + /// + public string? WorkflowInstanceName + { + get => ExpressionExecutionContext.GetWorkflowExecutionContext().Name; + set => ExpressionExecutionContext.GetWorkflowExecutionContext().Name = value; + } + + /// + /// Gets additional arguments provided by the caller of the evaluator. + /// + public IDictionary Arguments { get; } + + private ExpressionExecutionContext ExpressionExecutionContext { get; } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Models/OutcomeProxy.cs b/src/modules/Elsa.CSharp/Models/OutcomeProxy.cs new file mode 100644 index 0000000..9d313b3 --- /dev/null +++ b/src/modules/Elsa.CSharp/Models/OutcomeProxy.cs @@ -0,0 +1,33 @@ +using Elsa.Expressions.Models; + +namespace Elsa.CSharp.Models; + +/// +/// Provides access to activity outcomes. +/// +public class OutcomeProxy +{ + /// + /// Gets the key of the outcomes property. + /// + public static readonly object OutcomePropertiesKey = new(); + + /// + /// Initializes a new instance of the class. + /// + public OutcomeProxy(ExpressionExecutionContext expressionExecutionContext) + { + ExpressionExecutionContext = expressionExecutionContext; + } + + private ExpressionExecutionContext ExpressionExecutionContext { get; } + + /// + /// Sets the outcome of the current activity. + /// + /// The names of the outcomes. + public void Set(params string[] outcomeNames) + { + ExpressionExecutionContext.TransientProperties[OutcomePropertiesKey] = outcomeNames; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Models/OutputProxy.cs b/src/modules/Elsa.CSharp/Models/OutputProxy.cs new file mode 100644 index 0000000..b641aed --- /dev/null +++ b/src/modules/Elsa.CSharp/Models/OutputProxy.cs @@ -0,0 +1,60 @@ +using Elsa.Expressions.Helpers; +using Elsa.Expressions.Models; +using Elsa.Extensions; + +namespace Elsa.CSharp.Models; + +/// +/// Provides access to activity outputs. +/// +public class OutputProxy +{ + private readonly ExpressionExecutionContext _expressionExecutionContext; + + /// + /// Initializes a new instance of the class. + /// + public OutputProxy(ExpressionExecutionContext expressionExecutionContext) + { + _expressionExecutionContext = expressionExecutionContext; + } + + /// + /// Gets the value of the specified output from the specified activity. + /// + /// The ID or name of the activity that produced the output. + /// The name of the output. + /// The value of the output. + public object? From(string activityIdOrName, string? outputName = null) => _expressionExecutionContext.GetOutput(activityIdOrName, outputName); + + /// + /// Gets the value of the specified output from the specified activity. + /// + /// The ID or name of the activity that produced the output. + /// The name of the output. + /// The value of the output. + public T? From(string activityIdOrName, string? outputName = null) => From(activityIdOrName, outputName).ConvertTo(); + + /// + /// Gets the value of the specified output. + /// + /// The ID or name of the activity that produced the output. + /// The name of the output. + /// The value of the output. + [Obsolete("Use From instead.")] + public object? Get(string activityIdOrName, string? outputName = null) => From(activityIdOrName, outputName); + + /// + /// Gets the value of the specified output. + /// + /// The ID or name of the activity that produced the output. + /// The name of the output. + /// The value of the output. + [Obsolete("Use From instead.")] + public T? Get(string activityIdOrName, string? outputName = null) => From(activityIdOrName, outputName); + + /// + /// Gets the result of the last activity that executed. + /// + public object? LastResult => _expressionExecutionContext.GetLastResult(); +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Notifications/EvaluatingCSharp.cs b/src/modules/Elsa.CSharp/Notifications/EvaluatingCSharp.cs new file mode 100644 index 0000000..e05b81d --- /dev/null +++ b/src/modules/Elsa.CSharp/Notifications/EvaluatingCSharp.cs @@ -0,0 +1,40 @@ +using Elsa.Expressions.Models; +using Elsa.Mediator.Contracts; +using Microsoft.CodeAnalysis.Scripting; + +namespace Elsa.CSharp.Notifications; + +/// +/// This notification is published every time a C# expression is about to be evaluated. +/// It gives subscribers a chance to configure the with additional functions and variables. +/// +public record EvaluatingCSharp(ExpressionEvaluatorOptions Options, Script Script, ScriptOptions ScriptOptions, ExpressionExecutionContext Context) : INotification +{ + /// + /// Configures the with additional functions and variables. + /// + public EvaluatingCSharp ConfigureScriptOptions(Func scriptOptions) + { + ScriptOptions = scriptOptions(ScriptOptions); + return this; + } + + /// + /// Appends the specified script to the current script. + /// + public EvaluatingCSharp AppendScript(string script) + { + Script = Script.ContinueWith(script, ScriptOptions); + return this; + } + + /// + /// The that will be used to evaluate the expression. + /// + public ScriptOptions ScriptOptions { get; set; } = ScriptOptions; + + /// + /// The that will be used to evaluate the expression. + /// + public Script Script { get; set; } = Script; +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Options/CSharpOptions.cs b/src/modules/Elsa.CSharp/Options/CSharpOptions.cs new file mode 100644 index 0000000..5595d03 --- /dev/null +++ b/src/modules/Elsa.CSharp/Options/CSharpOptions.cs @@ -0,0 +1,99 @@ +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; +using Elsa.CSharp.Contexts; +using Elsa.CSharp.Models; +using Elsa.Expressions.Models; +using Microsoft.CodeAnalysis.Scripting; + +namespace Elsa.CSharp.Options; + +/// +/// Options for the C# expression evaluator. +/// +public class CSharpOptions +{ + /// + /// A list of callbacks that is invoked when a C# expression is evaluated. Use this to configure the . + /// + public ICollection> ConfigureScriptOptionsCallbacks { get; } = new List>(); + + /// + /// A list of callbacks that is invoked when a C# expression is evaluated. Use this to configure the . + /// + public ICollection> ConfigureScriptCallbacks { get; } = new List>(); + + /// + /// A list of assemblies that will be referenced when evaluating a C# expression. + /// + public ISet Assemblies { get; } = new HashSet(new[] + { + typeof(Globals).Assembly, // Elsa.CSharp + typeof(Enumerable).Assembly, // System.Linq + typeof(Guid).Assembly, // System.Runtime + typeof(JsonSerializer).Assembly, // System.Text.Json + typeof(IDictionary).Assembly, // System.Collections + }); + + /// + /// A list of namespaces that will be imported when evaluating a C# expression. + /// + public ISet Namespaces { get; } = new HashSet(new[] + { + typeof(Globals).Namespace!, // Elsa.CSharp + typeof(Enumerable).Namespace!, // System.Linq + typeof(Guid).Namespace!, // System + typeof(JsonSerializer).Namespace!, // System.Text.Json + typeof(JsonConverter).Namespace!, // System.Text.Json.Serialization + typeof(JsonNode).Namespace!, // System.Text.Json.Nodes + typeof(IDictionary).Namespace!, // System.Collections.Generic + }); + + /// + /// The timeout for script caching. + /// + /// + /// The ScriptCacheTimeout property specifies the duration for which the scripts are cached in the C# engine. When a script is executed, it is compiled and cached for future use. This caching improves performance by avoiding repetitive compilation of the same script. + /// If the value of ScriptCacheTimeout is null, the scripts are cached indefinitely. If a time value is specified, the scripts will be purged from the cache after they've been unused for the specified duration and recompiled on next use. + /// + public TimeSpan? ScriptCacheTimeout { get; set; } = TimeSpan.FromDays(1); + + /// + /// Disables the generation of variable wrappers. E.g. Variables.MyVariable will no longer be available for variables. Instead, you can only access variables using Variables.Get("MyVariable") and the typed Variables.Get<T>("MyVariable") function. + /// This is useful if your application requires the use of invalid JavaScript variable names. + /// + public bool DisableWrappers { get; set; } + + /// + /// Configures the . + /// + /// A callback that is invoked before a C# expression is evaluated. Use this to configure the . + public CSharpOptions ConfigureScriptOptions(Action configurator) + { + ConfigureScriptOptionsCallbacks.Add((scriptOptions, context) => + { + configurator(new ScriptOptionsConfigurationContext(scriptOptions, context)); + return scriptOptions; + }); + return this; + } + + /// + /// Appends a C# script to the current script. + /// + public CSharpOptions AppendScript(string script) + { + ConfigureScriptCallbacks.Add((s, _) => s.ContinueWith(script)); + return this; + } + + /// + /// Appends a C# script to the current script. + /// + public CSharpOptions AppendScript(Func script) + { + ConfigureScriptCallbacks.Add((s, c) => s.ContinueWith(script(c))); + return this; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Providers/CSharpExpressionDescriptorProvider.cs b/src/modules/Elsa.CSharp/Providers/CSharpExpressionDescriptorProvider.cs new file mode 100644 index 0000000..051f2f1 --- /dev/null +++ b/src/modules/Elsa.CSharp/Providers/CSharpExpressionDescriptorProvider.cs @@ -0,0 +1,23 @@ +using Elsa.CSharp.Expressions; +using Elsa.Expressions.Contracts; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.CSharp.Providers; + +internal class CSharpExpressionDescriptorProvider : IExpressionDescriptorProvider +{ + private const string TypeName = "CSharp"; + + public IEnumerable GetDescriptors() + { + yield return new() + { + Type = TypeName, + DisplayName = "C#", + Properties = new { MonacoLanguage = "csharp" }.ToDictionary(), + HandlerFactory = ActivatorUtilities.GetServiceOrCreateInstance + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs b/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs new file mode 100644 index 0000000..4e2942b --- /dev/null +++ b/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs @@ -0,0 +1,88 @@ +using System.Security.Cryptography; +using System.Text; +using Elsa.CSharp.Contracts; +using Elsa.CSharp.Models; +using Elsa.CSharp.Notifications; +using Elsa.CSharp.Options; +using Elsa.Expressions.Models; +using Elsa.Mediator.Contracts; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Scripting; +using Microsoft.CodeAnalysis.Scripting; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Options; + +namespace Elsa.CSharp.Services; + +/// +/// A C# expression evaluator using Roslyn. +/// +/// +/// Initializes a new instance of the class. +/// +public class CSharpEvaluator(INotificationSender notificationSender, IOptions scriptOptions, IMemoryCache memoryCache) : ICSharpEvaluator +{ + private readonly CSharpOptions _csharpOptions = scriptOptions.Value; + + /// + public async Task EvaluateAsync( + string expression, + Type returnType, + ExpressionExecutionContext context, + ExpressionEvaluatorOptions options, + Func? configureScriptOptions = default, + Func, Script>? configureScript = default, + CancellationToken cancellationToken = default) + { + var scriptOptions = ScriptOptions.Default.WithOptimizationLevel(OptimizationLevel.Release); + + if (configureScriptOptions != null) + scriptOptions = configureScriptOptions(scriptOptions); + + var globals = new Globals(context, options.Arguments); + var script = CSharpScript.Create("", scriptOptions, typeof(Globals)); + + if (configureScript != null) + script = configureScript(script); + + var notification = new EvaluatingCSharp(options, script, scriptOptions, context); + await notificationSender.SendAsync(notification, cancellationToken); + scriptOptions = notification.ScriptOptions; + script = notification.Script.ContinueWith(expression, scriptOptions); + var runner = GetCompiledScript(script); + return await runner(globals, cancellationToken: cancellationToken); + } + + private ScriptRunner GetCompiledScript(Script script) + { + var cacheKey = "csharp:script:" + Hash(script); + + return memoryCache.GetOrCreate(cacheKey, entry => + { + if (_csharpOptions.ScriptCacheTimeout.HasValue) + entry.SetSlidingExpiration(_csharpOptions.ScriptCacheTimeout.Value); + + return script.CreateDelegate(); + })!; + } + + private static string Hash(Script script) + { + var ms = new MemoryStream(); + using (var sw = new StreamWriter(ms, Encoding.UTF8)) + { + for (Script current = script; current != null; current = current.Previous) + { + sw.WriteLine(current.Code); + } + } + + if (!ms.TryGetBuffer(out var segment)) + { + segment = ms.ToArray(); + } + + var hash = SHA256.HashData(segment.AsSpan()); + return Convert.ToBase64String(hash); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Consumers/TriggerChangeTokenSignalConsumer.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Consumers/TriggerChangeTokenSignalConsumer.cs new file mode 100644 index 0000000..9695335 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/Consumers/TriggerChangeTokenSignalConsumer.cs @@ -0,0 +1,20 @@ +using Elsa.Caching.Distributed.MassTransit.Messages; +using JetBrains.Annotations; +using MassTransit; + +namespace Elsa.Caching.Distributed.MassTransit.Consumers; + +/// +/// Consumes messages and triggers the change token signal. +/// +[UsedImplicitly] +public class TriggerChangeTokenSignalConsumer(IChangeTokenSignalInvoker changeTokenSignalInvoker) : IConsumer +{ + /// + public async Task Consume(ConsumeContext context) + { + var message = context.Message; + var cancellationToken = context.CancellationToken; + await changeTokenSignalInvoker.TriggerTokenAsync(message.Key, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Elsa.Caching.Distributed.MassTransit.csproj b/src/modules/Elsa.Caching.Distributed.MassTransit/Elsa.Caching.Distributed.MassTransit.csproj new file mode 100644 index 0000000..16d6c0d --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/Elsa.Caching.Distributed.MassTransit.csproj @@ -0,0 +1,16 @@ + + + + + Provides distributed caching services leveraging MassTransit for transport of signals. + + elsa module distributed caching masstransit + + + + + + + + + diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..861da8c --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/Extensions/ModuleExtensions.cs @@ -0,0 +1,29 @@ +using Elsa.Caching.Distributed.Features; +using Elsa.Caching.Distributed.MassTransit.Features; +using Elsa.Caching.Features; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides methods to install and configure the distributed caching feature with MassTransit. +/// +public static class ModuleExtensions +{ + /// + /// Configures the distributed caching feature to use MassTransit. + /// + public static MassTransitDistributedCacheFeature UseMassTransit(this DistributedCacheFeature distributedCacheFeature, Action? configure = default) + { + return distributedCacheFeature.Module.Configure(configure); + } + + /// + /// Configures the memory caching feature with the distributed caching feature that uses MassTransit. + /// + public static MemoryCacheFeature UseMassTransit(this MemoryCacheFeature memoryCacheFeature, Action? configure = default) + { + memoryCacheFeature.Module.Configure(configure); + return memoryCacheFeature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Features/MassTransitDistributedCacheFeature.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Features/MassTransitDistributedCacheFeature.cs new file mode 100644 index 0000000..f325911 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/Features/MassTransitDistributedCacheFeature.cs @@ -0,0 +1,32 @@ +using Elsa.Caching.Distributed.Features; +using Elsa.Caching.Distributed.MassTransit.Consumers; +using Elsa.Caching.Distributed.MassTransit.Services; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.MassTransit.Features; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Caching.Distributed.MassTransit.Features; + +/// +/// Configures distributed cache management with MassTransit. +/// +[DependsOn(typeof(DistributedCacheFeature))] +[DependsOn(typeof(MassTransitFeature))] +public class MassTransitDistributedCacheFeature(IModule module) : FeatureBase(module) +{ + /// + public override void Configure() + { + Module.AddMassTransitConsumer("elsa-trigger-change-token-signal", true, true); + Module.Use(feature => feature.WithChangeTokenSignalPublisher(sp => sp.GetRequiredService())); + } + + /// + public override void Apply() + { + Services.AddSingleton(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/FodyWeavers.xml b/src/modules/Elsa.Caching.Distributed.MassTransit/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Messages/TriggerChangeTokenSignal.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Messages/TriggerChangeTokenSignal.cs new file mode 100644 index 0000000..600f3aa --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/Messages/TriggerChangeTokenSignal.cs @@ -0,0 +1,7 @@ +namespace Elsa.Caching.Distributed.MassTransit.Messages; + +/// +/// Represents a message containing a signal to trigger a change token. +/// +/// The key of the change token to trigger. +public record TriggerChangeTokenSignal(string Key); \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.MassTransit/Services/MassTransitChangeTokenSignalPublisher.cs b/src/modules/Elsa.Caching.Distributed.MassTransit/Services/MassTransitChangeTokenSignalPublisher.cs new file mode 100644 index 0000000..984dc16 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.MassTransit/Services/MassTransitChangeTokenSignalPublisher.cs @@ -0,0 +1,18 @@ +using Elsa.Caching.Distributed.Contracts; +using Elsa.Caching.Distributed.MassTransit.Messages; +using MassTransit; + +namespace Elsa.Caching.Distributed.MassTransit.Services; + +/// +/// Represents a service that publishes change token signals using MassTransit. +/// +public class MassTransitChangeTokenSignalPublisher(IBus bus) : IChangeTokenSignalPublisher +{ + /// + public async ValueTask PublishAsync(string key, CancellationToken cancellationToken = default) + { + var message = new TriggerChangeTokenSignal(key); + await bus.Publish(message, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Actors/LocalCache.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Actors/LocalCache.cs new file mode 100644 index 0000000..b08b899 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Actors/LocalCache.cs @@ -0,0 +1,22 @@ +using Elsa.Caching.Distributed.ProtoActor.ProtoBuf; +using Proto; +using Proto.Cluster; +using Proto.Cluster.PubSub; + +namespace Elsa.Caching.Distributed.ProtoActor.Actors; + +internal class LocalCache(IContext context, IChangeTokenSignalInvoker changeTokenSignaler) : LocalCacheBase(context) +{ + public override async Task OnStopped() + { + await Cluster.Unsubscribe(Topics.ChangeTokenSignals, Context.ClusterIdentity()!); + } + + public override async Task OnReceive() + { + if (Context.Message is ProtoTriggerChangeTokenSignal triggerChangeTokenSignal) + { + await changeTokenSignaler.TriggerTokenAsync(triggerChangeTokenSignal.Key, Context.CancellationToken); + } + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Elsa.Caching.Distributed.ProtoActor.csproj b/src/modules/Elsa.Caching.Distributed.ProtoActor/Elsa.Caching.Distributed.ProtoActor.csproj new file mode 100644 index 0000000..14e9931 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Elsa.Caching.Distributed.ProtoActor.csproj @@ -0,0 +1,27 @@ + + + + + Provides distributed caching services leveraging Proto.Actor for transport of signals. + + elsa module distributed caching proto.actor + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Extensions/ClusterExtensions.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Extensions/ClusterExtensions.cs new file mode 100644 index 0000000..7a70312 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Extensions/ClusterExtensions.cs @@ -0,0 +1,15 @@ +using Elsa.Caching.Distributed.ProtoActor.ProtoBuf; +using Proto.Cluster; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +internal static class ClusterExtensions +{ + private static readonly string ActorId = Guid.NewGuid().ToString(); + + public static LocalCacheClient GetLocalCacheClient(this Cluster cluster) + { + return cluster.GetLocalCache($"{nameof(LocalCacheActor)}-{ActorId}"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Extensions/ProtoActorDistributedCacheFeatureExtensions.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Extensions/ProtoActorDistributedCacheFeatureExtensions.cs new file mode 100644 index 0000000..a657409 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Extensions/ProtoActorDistributedCacheFeatureExtensions.cs @@ -0,0 +1,22 @@ +using Elsa.Caching.Distributed.Features; +using Elsa.Caching.Distributed.ProtoActor.Features; +using JetBrains.Annotations; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extension methods on . +/// +[PublicAPI] +public static class ProtoActorDistributedCacheFeatureExtensions +{ + /// + /// Configure the distributed cache feature using Proto.Actor. + /// + public static DistributedCacheFeature UseProtoActor(this DistributedCacheFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Features/ProtoActorDistributedCacheFeature.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Features/ProtoActorDistributedCacheFeature.cs new file mode 100644 index 0000000..476aa74 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Features/ProtoActorDistributedCacheFeature.cs @@ -0,0 +1,53 @@ +using Elsa.Caching.Distributed.Features; +using Elsa.Caching.Distributed.ProtoActor.Actors; +using Elsa.Caching.Distributed.ProtoActor.HostedServices; +using Elsa.Caching.Distributed.ProtoActor.ProtoBuf; +using Elsa.Caching.Distributed.ProtoActor.Providers; +using Elsa.Caching.Distributed.ProtoActor.Services; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.ProtoActor; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Caching.Distributed.ProtoActor.Features; + +/// +/// Installs the Proto Actor feature to host & execute workflow instances. +/// +[DependsOn(typeof(DistributedCacheFeature))] +public class ProtoActorDistributedCacheFeature : FeatureBase +{ + /// + public ProtoActorDistributedCacheFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + // Configure runtime with ProtoActor workflow runtime. + Module.Configure().WithChangeTokenSignalPublisher(sp => ActivatorUtilities.CreateInstance(sp)); + } + + public override void ConfigureHostedServices() + { + ConfigureHostedService(); + } + + /// + public override void Apply() + { + var services = Services; + + // Actor providers. + services.AddSingleton(); + + // Actors. + services + .AddTransient(sp => new LocalCacheActor((context, _) => ActivatorUtilities.CreateInstance(sp, context))); + + // Distributed runtime. + services.AddSingleton(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/FodyWeavers.xml b/src/modules/Elsa.Caching.Distributed.ProtoActor/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/HostedServices/StartLocalCacheActor.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/HostedServices/StartLocalCacheActor.cs new file mode 100644 index 0000000..e646b1a --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/HostedServices/StartLocalCacheActor.cs @@ -0,0 +1,22 @@ +using Elsa.Caching.Distributed.ProtoActor.ProtoBuf; +using JetBrains.Annotations; +using Microsoft.Extensions.Hosting; +using Proto.Cluster; +using Proto.Cluster.PubSub; + +namespace Elsa.Caching.Distributed.ProtoActor.HostedServices; + +/// +/// Subscribes the LocalCacheActor to the "change-token-signals" topic. +/// +[UsedImplicitly] +public class StartLocalCacheActor(Cluster cluster) : BackgroundService +{ + private static readonly string ActorName = Guid.NewGuid().ToString(); + private readonly ClusterIdentity _clusterIdentity = ClusterIdentity.Create(ActorName, LocalCacheActor.Kind); + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + await cluster.Subscribe(Topics.ChangeTokenSignals, _clusterIdentity, stoppingToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Proto/LocalCache.Messages.proto b/src/modules/Elsa.Caching.Distributed.ProtoActor/Proto/LocalCache.Messages.proto new file mode 100644 index 0000000..2b46598 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Proto/LocalCache.Messages.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; +option csharp_namespace = "Elsa.Caching.Distributed.ProtoActor.ProtoBuf"; +package Elsa.Caching.Distributed.ProtoActor.ProtoBuf; + +message ProtoTriggerChangeTokenSignal { + string Key = 1; +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Proto/LocalCache.proto b/src/modules/Elsa.Caching.Distributed.ProtoActor/Proto/LocalCache.proto new file mode 100644 index 0000000..2cb60bb --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Proto/LocalCache.proto @@ -0,0 +1,6 @@ +syntax = "proto3"; +option csharp_namespace = "Elsa.Caching.Distributed.ProtoActor.ProtoBuf"; +package Elsa.Caching.Distributed.ProtoActor.ProtoBuf; + +service LocalCache { +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Providers/LocalCacheVirtualActorProvider.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Providers/LocalCacheVirtualActorProvider.cs new file mode 100644 index 0000000..e946647 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Providers/LocalCacheVirtualActorProvider.cs @@ -0,0 +1,23 @@ +using Elsa.Caching.Distributed.ProtoActor.ProtoBuf; +using Elsa.ProtoActor; +using Elsa.ProtoActor.MemberStrategies; +using Google.Protobuf.Reflection; +using Proto; +using Proto.Cluster; +using Proto.DependencyInjection; + +namespace Elsa.Caching.Distributed.ProtoActor.Providers; + +public class LocalCacheVirtualActorProvider : VirtualActorsProviderBase +{ + public override IEnumerable GetClusterKinds(ActorSystem system) + { + var props = system.DI().PropsFor(); + yield return new ClusterKind(LocalCacheActor.Kind, props).WithMemberStrategy(cluster => new LocalNodeStrategy(cluster)); + } + + public override IEnumerable GetFileDescriptors() + { + yield return LocalCacheMessagesReflection.Descriptor; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Services/ProtoActorChangeTokenSignalPublisher.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Services/ProtoActorChangeTokenSignalPublisher.cs new file mode 100644 index 0000000..8e6d5ed --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Services/ProtoActorChangeTokenSignalPublisher.cs @@ -0,0 +1,18 @@ +using Elsa.Caching.Distributed.Contracts; +using Elsa.Caching.Distributed.ProtoActor.ProtoBuf; +using Proto.Cluster; +using Proto.Cluster.PubSub; + +namespace Elsa.Caching.Distributed.ProtoActor.Services; + +public class ProtoActorChangeTokenSignalPublisher(Cluster cluster) : IChangeTokenSignalPublisher +{ + public async ValueTask PublishAsync(string key, CancellationToken cancellationToken = default) + { + var message = new ProtoTriggerChangeTokenSignal + { + Key = key + }; + await cluster.Publisher().Publish(Topics.ChangeTokenSignals, message, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed.ProtoActor/Topics.cs b/src/modules/Elsa.Caching.Distributed.ProtoActor/Topics.cs new file mode 100644 index 0000000..193e9e1 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed.ProtoActor/Topics.cs @@ -0,0 +1,6 @@ +namespace Elsa.Caching.Distributed.ProtoActor; + +internal static class Topics +{ + public const string ChangeTokenSignals = "change-token-signals"; +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed/Contracts/IChangeTokenSignalPublisher.cs b/src/modules/Elsa.Caching.Distributed/Contracts/IChangeTokenSignalPublisher.cs new file mode 100644 index 0000000..f7d7faf --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/Contracts/IChangeTokenSignalPublisher.cs @@ -0,0 +1,12 @@ +namespace Elsa.Caching.Distributed.Contracts; + +/// +/// Represents a service that can publish change token signals. +/// +public interface IChangeTokenSignalPublisher +{ + /// + /// Publishes a change token signal for the specified key. + /// + ValueTask PublishAsync(string key, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed/Elsa.Caching.Distributed.csproj b/src/modules/Elsa.Caching.Distributed/Elsa.Caching.Distributed.csproj new file mode 100644 index 0000000..c2a63e1 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/Elsa.Caching.Distributed.csproj @@ -0,0 +1,15 @@ + + + + + Provides distributed caching services and utility functions common to Elsa modules. + + elsa module caching distributed + + + + + + + + diff --git a/src/modules/Elsa.Caching.Distributed/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Caching.Distributed/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..3d12820 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/Extensions/ModuleExtensions.cs @@ -0,0 +1,20 @@ +using Elsa.Caching.Distributed.Features; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides methods to install and configure the distributed caching feature. +/// +public static class ModuleExtensions +{ + /// + /// Adds the feature to the system. + /// + public static IModule UseDistributedCache(this IModule module, Action? configure = default) + { + module.Configure(configure); + return module; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed/Features/DistributedCacheFeature.cs b/src/modules/Elsa.Caching.Distributed/Features/DistributedCacheFeature.cs new file mode 100644 index 0000000..0e36006 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/Features/DistributedCacheFeature.cs @@ -0,0 +1,40 @@ +using Elsa.Caching.Distributed.Contracts; +using Elsa.Caching.Distributed.Services; +using Elsa.Caching.Features; +using Elsa.Caching.Options; +using Elsa.Caching.Services; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Caching.Distributed.Features; + +/// +/// Configures distributed cache management. +/// +[DependsOn(typeof(MemoryCacheFeature))] +public class DistributedCacheFeature(IModule module) : FeatureBase(module) +{ + /// + /// A delegate to configure the . + /// + private Func ChangeTokenSignalPublisherFactory { get; set; } = _ => new NoopChangeTokenSignalPublisher(); + + /// + /// Configures the change token signal publisher. + /// + public DistributedCacheFeature WithChangeTokenSignalPublisher(Func factory) + { + ChangeTokenSignalPublisherFactory = factory; + return this; + } + + /// + public override void Apply() + { + Services.AddSingleton(ChangeTokenSignalPublisherFactory); + Services.Decorate(); + Services.AddSingleton(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed/FodyWeavers.xml b/src/modules/Elsa.Caching.Distributed/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed/Services/DistributedChangeTokenSignaler.cs b/src/modules/Elsa.Caching.Distributed/Services/DistributedChangeTokenSignaler.cs new file mode 100644 index 0000000..5f0eba4 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/Services/DistributedChangeTokenSignaler.cs @@ -0,0 +1,25 @@ +using Elsa.Caching.Distributed.Contracts; +using JetBrains.Annotations; +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching.Distributed.Services; + +/// +/// Decorates an and publishes a signal after the signal has been triggered. +/// +[UsedImplicitly] +public class DistributedChangeTokenSignaler(IChangeTokenSignaler decoratedSignaler, IChangeTokenSignalPublisher signalPublisher, IChangeTokenSignalInvoker invoker) : IChangeTokenSignaler +{ + /// + public IChangeToken GetToken(string key) + { + return decoratedSignaler.GetToken(key); + } + + /// + public async ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default) + { + await decoratedSignaler.TriggerTokenAsync(key, cancellationToken); + await signalPublisher.PublishAsync(key, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching.Distributed/Services/NoopChangeTokenSignalPublisher.cs b/src/modules/Elsa.Caching.Distributed/Services/NoopChangeTokenSignalPublisher.cs new file mode 100644 index 0000000..1eff9f2 --- /dev/null +++ b/src/modules/Elsa.Caching.Distributed/Services/NoopChangeTokenSignalPublisher.cs @@ -0,0 +1,15 @@ +using Elsa.Caching.Distributed.Contracts; + +namespace Elsa.Caching.Distributed.Services; + +/// +/// A no-op implementation of . +/// +public class NoopChangeTokenSignalPublisher : IChangeTokenSignalPublisher +{ + /// + public ValueTask PublishAsync(string key, CancellationToken cancellationToken = default) + { + return default; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Contracts/ICacheManager.cs b/src/modules/Elsa.Caching/Contracts/ICacheManager.cs new file mode 100644 index 0000000..6e93fe8 --- /dev/null +++ b/src/modules/Elsa.Caching/Contracts/ICacheManager.cs @@ -0,0 +1,32 @@ +using Elsa.Caching.Options; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching; + +/// +/// A thin wrapper around , allowing for centralized handling of cache entries. +/// +public interface ICacheManager +{ + /// + /// Provides options for configuring caching. + /// + IOptions CachingOptions { get; } + + /// + /// Gets a change token for the specified key. + /// + IChangeToken GetToken(string key); + + /// + /// Triggers the change token for the specified key. + /// + ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default); + + /// + /// Gets an item from the cache, or creates it if it doesn't exist. + /// + Task GetOrCreateAsync(object key, Func> factory); +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Contracts/IChangeTokenSignalInvoker.cs b/src/modules/Elsa.Caching/Contracts/IChangeTokenSignalInvoker.cs new file mode 100644 index 0000000..700da3d --- /dev/null +++ b/src/modules/Elsa.Caching/Contracts/IChangeTokenSignalInvoker.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching; + +/// +/// Triggers the change token associated with the specified key. +/// +public interface IChangeTokenSignalInvoker +{ + /// + /// Gets a change token for the specified key. + /// + IChangeToken GetToken(string key); + + /// + /// Triggers the change token for the specified key. + /// + ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Contracts/IChangeTokenSignaler.cs b/src/modules/Elsa.Caching/Contracts/IChangeTokenSignaler.cs new file mode 100644 index 0000000..f937e2b --- /dev/null +++ b/src/modules/Elsa.Caching/Contracts/IChangeTokenSignaler.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching; + +/// +/// Provides change tokens for memory caches, allowing code to evict cache entries by triggering a signal. +/// +public interface IChangeTokenSignaler +{ + /// + /// Gets a change token for the specified key. + /// + IChangeToken GetToken(string key); + + /// + /// Triggers the change token for the specified key. + /// + ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Elsa.Caching.csproj b/src/modules/Elsa.Caching/Elsa.Caching.csproj new file mode 100644 index 0000000..1f902f7 --- /dev/null +++ b/src/modules/Elsa.Caching/Elsa.Caching.csproj @@ -0,0 +1,19 @@ + + + + + Provides caching services and utility functions common to Elsa modules. + + elsa module caching + + + + + + + + + + + + diff --git a/src/modules/Elsa.Caching/Elsa.Caching.csproj.DotSettings b/src/modules/Elsa.Caching/Elsa.Caching.csproj.DotSettings new file mode 100644 index 0000000..127787e --- /dev/null +++ b/src/modules/Elsa.Caching/Elsa.Caching.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Caching/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..879f9c9 --- /dev/null +++ b/src/modules/Elsa.Caching/Extensions/ModuleExtensions.cs @@ -0,0 +1,19 @@ +using Elsa.Caching.Features; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides methods to install and configure the distributed caching feature. +/// +public static class ModuleExtensions +{ + /// + /// Adds the feature to the system. + /// + public static MemoryCacheFeature UseMemoryCache(this IModule module, Action? configure = default) + { + return module.Configure(configure); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Features/MemoryCacheFeature.cs b/src/modules/Elsa.Caching/Features/MemoryCacheFeature.cs new file mode 100644 index 0000000..1a3ad07 --- /dev/null +++ b/src/modules/Elsa.Caching/Features/MemoryCacheFeature.cs @@ -0,0 +1,31 @@ +using Elsa.Caching.Options; +using Elsa.Caching.Services; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Caching.Features; + +/// +/// Configures the MemoryCache. +/// +public class MemoryCacheFeature(IModule module) : FeatureBase(module) +{ + /// + /// A delegate to configure the . + /// + public Action CachingOptions { get; set; } = _ => { }; + + /// + public override void Apply() + { + Services.Configure(CachingOptions); + + Services + .AddMemoryCache() + .AddSingleton() + .AddSingleton() + .AddSingleton() + ; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/FodyWeavers.xml b/src/modules/Elsa.Caching/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Caching/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Options/CachingOptions.cs b/src/modules/Elsa.Caching/Options/CachingOptions.cs new file mode 100644 index 0000000..4b9b5dd --- /dev/null +++ b/src/modules/Elsa.Caching/Options/CachingOptions.cs @@ -0,0 +1,12 @@ +namespace Elsa.Caching.Options; + +/// +/// Provides options for configuring caching. +/// +public class CachingOptions +{ + /// + /// Gets or sets the duration for which cache entries are stored. + /// + public TimeSpan CacheDuration { get; set; } = TimeSpan.FromMinutes(1); +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Services/CacheManager.cs b/src/modules/Elsa.Caching/Services/CacheManager.cs new file mode 100644 index 0000000..6db5013 --- /dev/null +++ b/src/modules/Elsa.Caching/Services/CacheManager.cs @@ -0,0 +1,31 @@ +using Elsa.Caching.Options; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching.Services; + +/// +public class CacheManager(IMemoryCache memoryCache, IChangeTokenSignaler changeTokenSignaler, IOptions options) : ICacheManager +{ + /// + public IOptions CachingOptions => options; + + /// + public IChangeToken GetToken(string key) + { + return changeTokenSignaler.GetToken(key); + } + + /// + public ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default) + { + return changeTokenSignaler.TriggerTokenAsync(key, cancellationToken); + } + + /// + public async Task GetOrCreateAsync(object key, Func> factory) + { + return await memoryCache.GetOrCreateAsync(key, async entry => await factory(entry)); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Services/ChangeTokenSignalInvoker.cs b/src/modules/Elsa.Caching/Services/ChangeTokenSignalInvoker.cs new file mode 100644 index 0000000..1bffad1 --- /dev/null +++ b/src/modules/Elsa.Caching/Services/ChangeTokenSignalInvoker.cs @@ -0,0 +1,38 @@ +using System.Collections.Concurrent; +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching.Services; + +/// +public class ChangeTokenSignalInvoker : IChangeTokenSignalInvoker +{ + private readonly ConcurrentDictionary _changeTokens = new(); + + /// + public IChangeToken GetToken(string key) + { + return _changeTokens.GetOrAdd( + key, + _ => + { + var cancellationTokenSource = new CancellationTokenSource(); + var changeToken = new CancellationChangeToken(cancellationTokenSource.Token); + return new ChangeTokenInfo(changeToken, cancellationTokenSource); + }).ChangeToken; + } + + /// + public ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default) + { + if (_changeTokens.TryRemove(key, out var changeTokenInfo)) + changeTokenInfo.TokenSource.Cancel(); + + return default; + } + + private readonly struct ChangeTokenInfo(IChangeToken changeToken, CancellationTokenSource tokenSource) + { + public IChangeToken ChangeToken { get; } = changeToken; + public CancellationTokenSource TokenSource { get; } = tokenSource; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Caching/Services/ChangeTokenSignaler.cs b/src/modules/Elsa.Caching/Services/ChangeTokenSignaler.cs new file mode 100644 index 0000000..69d9f2f --- /dev/null +++ b/src/modules/Elsa.Caching/Services/ChangeTokenSignaler.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.Primitives; + +namespace Elsa.Caching.Services; + +/// +public class ChangeTokenSignaler(IChangeTokenSignalInvoker invoker) : IChangeTokenSignaler +{ + /// + public IChangeToken GetToken(string key) + { + return invoker.GetToken(key); + } + + /// + public ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default) + { + return invoker.TriggerTokenAsync(key, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Attributes/ForwardedTypeAttribute.cs b/src/modules/Elsa.Common/Attributes/ForwardedTypeAttribute.cs new file mode 100644 index 0000000..eccbfd6 --- /dev/null +++ b/src/modules/Elsa.Common/Attributes/ForwardedTypeAttribute.cs @@ -0,0 +1,10 @@ +namespace Elsa.Common; + +/// +/// Helps to forward types to new types when deserializing JSON containing types that have been renamed and or moved to a different namespace. +/// +/// The new type to forward to. +public class ForwardedTypeAttribute(Type type) : Attribute +{ + public Type NewType { get; set; } = type; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Codecs/GZip.cs b/src/modules/Elsa.Common/Codecs/GZip.cs new file mode 100644 index 0000000..b7b3d1e --- /dev/null +++ b/src/modules/Elsa.Common/Codecs/GZip.cs @@ -0,0 +1,35 @@ +using System.IO.Compression; +using System.Text; + +namespace Elsa.Common.Codecs; + +/// +/// Represents a GZip compression strategy. +/// +public class GZip : ICompressionCodec +{ + /// + public async ValueTask CompressAsync(string input, CancellationToken cancellationToken) + { + var inputBytes = Encoding.UTF8.GetBytes(input); + using var output = new MemoryStream(); + await using var compressionStream = new GZipStream(output, CompressionMode.Compress); + await compressionStream.WriteAsync(inputBytes, 0, inputBytes.Length, cancellationToken); + await compressionStream.FlushAsync(cancellationToken); + + return Convert.ToBase64String(output.ToArray()); + } + + /// + public async ValueTask DecompressAsync(string input, CancellationToken cancellationToken) + { + var inputBytes = Convert.FromBase64String(input); + using var inputMemoryStream = new MemoryStream(inputBytes); + await using var decompressionStream = new GZipStream(inputMemoryStream, CompressionMode.Decompress); + using var outputMemoryStream = new MemoryStream(); + await decompressionStream.CopyToAsync(outputMemoryStream, cancellationToken); + var decompressedBytes = outputMemoryStream.ToArray(); + + return Encoding.UTF8.GetString(decompressedBytes); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Codecs/None.cs b/src/modules/Elsa.Common/Codecs/None.cs new file mode 100644 index 0000000..5e2dc80 --- /dev/null +++ b/src/modules/Elsa.Common/Codecs/None.cs @@ -0,0 +1,19 @@ +namespace Elsa.Common.Codecs; + +/// +/// Represents a compression strategy that does not compress or decompress the input. +/// +public class None : ICompressionCodec +{ + /// + public ValueTask CompressAsync(string input, CancellationToken cancellationToken) + { + return new ValueTask(input); + } + + /// + public ValueTask DecompressAsync(string input, CancellationToken cancellationToken) + { + return new ValueTask(input); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Codecs/Zstd.cs b/src/modules/Elsa.Common/Codecs/Zstd.cs new file mode 100644 index 0000000..11a49c5 --- /dev/null +++ b/src/modules/Elsa.Common/Codecs/Zstd.cs @@ -0,0 +1,36 @@ +using System.Text; +using IronCompress; + +namespace Elsa.Common.Codecs; + +/// +/// Represents a ZSTD compression strategy. +/// +public class Zstd : ICompressionCodec +{ + private Iron Iron { get; set; } = new(); + + /// + public ValueTask CompressAsync(string input, CancellationToken cancellationToken = default) + { + var inputBytes = Encoding.UTF8.GetBytes(input); + var span = inputBytes.AsSpan(); + var result = Iron.Compress(Codec.Zstd, span); + var compressedBytes = result.AsSpan(); + var compressedString = Convert.ToBase64String(compressedBytes); + + return new (compressedString); + } + + /// + public ValueTask DecompressAsync(string input, CancellationToken cancellationToken = default) + { + var inputBytes = Convert.FromBase64String(input); + var span = inputBytes.AsSpan(); + var result = Iron.Decompress(Codec.Zstd, span); + var decompressedBytes = result.AsSpan(); + var decompressedString = Encoding.UTF8.GetString(decompressedBytes); + + return new (decompressedString); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/BackgroundTask.cs b/src/modules/Elsa.Common/Contracts/BackgroundTask.cs new file mode 100644 index 0000000..758d045 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/BackgroundTask.cs @@ -0,0 +1,8 @@ +namespace Elsa.Common; + +public abstract class BackgroundTask : IBackgroundTask +{ + public virtual Task ExecuteAsync(CancellationToken cancellationToken) => Task.CompletedTask; + public virtual Task StartAsync(CancellationToken cancellationToken) => Task.CompletedTask; + public virtual Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/IBackgroundTask.cs b/src/modules/Elsa.Common/Contracts/IBackgroundTask.cs new file mode 100644 index 0000000..e1cac86 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/IBackgroundTask.cs @@ -0,0 +1,11 @@ +namespace Elsa.Common; + +/// +/// Represents a task that is executed in the background. +/// In multi-tenant applications, this task is executed for each tenant. +/// +public interface IBackgroundTask : ITask +{ + Task StartAsync(CancellationToken cancellationToken); + Task StopAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/ICompressionCodec.cs b/src/modules/Elsa.Common/Contracts/ICompressionCodec.cs new file mode 100644 index 0000000..c34a0dc --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/ICompressionCodec.cs @@ -0,0 +1,17 @@ +namespace Elsa.Common; + +/// +/// Represents a compression strategy. +/// +public interface ICompressionCodec +{ + /// + /// Compresses the input. + /// + ValueTask CompressAsync(string input, CancellationToken cancellationToken = default); + + /// + /// Decompresses the input. + /// + ValueTask DecompressAsync(string input, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/ICompressionCodecResolver.cs b/src/modules/Elsa.Common/Contracts/ICompressionCodecResolver.cs new file mode 100644 index 0000000..8649415 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/ICompressionCodecResolver.cs @@ -0,0 +1,12 @@ +namespace Elsa.Common; + +/// +/// Resolves a from its name. +/// +public interface ICompressionCodecResolver +{ + /// + /// Resolves a from its name. + /// + ICompressionCodec Resolve(string name); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/IFormatter.cs b/src/modules/Elsa.Common/Contracts/IFormatter.cs new file mode 100644 index 0000000..03c15bf --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/IFormatter.cs @@ -0,0 +1,17 @@ +namespace Elsa.Common; + +/// +/// Represents a formatter that can serialize an object to and from a string. +/// +public interface IFormatter +{ + /// + /// Serializes the specified value into a string. + /// + ValueTask ToStringAsync(object value, CancellationToken cancellationToken = default); + + /// + /// Deserializes the specified string into the specified return type. + /// + ValueTask FromStringAsync(string data, Type? returnType, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/IJsonSerializer.cs b/src/modules/Elsa.Common/Contracts/IJsonSerializer.cs new file mode 100644 index 0000000..d0fae72 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/IJsonSerializer.cs @@ -0,0 +1,54 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace Elsa.Common; + +/// +/// Provides JSON serialization services. +/// +public interface IJsonSerializer +{ + /// + /// Returns the serializer options. + /// + JsonSerializerOptions GetOptions(); + + /// + /// Applies the specified options. + /// + void ApplyOptions(JsonSerializerOptions options); + + /// + /// Serializes the specified value. + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + string Serialize(object value); + + /// + /// Serializes the specified value. + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + string Serialize(object value, Type type); + + /// + /// Serializes the specified value. + /// + string Serialize(T value); + + /// + /// Deserializes the specified JSON. + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + object Deserialize(string json); + + /// + /// Deserializes the specified JSON. + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + object Deserialize(string json, Type type); + + /// + /// Deserializes the specified JSON. + /// + T Deserialize(string json); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/ILogRecord.cs b/src/modules/Elsa.Common/Contracts/ILogRecord.cs new file mode 100644 index 0000000..946d4ab --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/ILogRecord.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common; + +/// +/// Represents a log record. +/// +public interface ILogRecord; \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/IRecurringTask.cs b/src/modules/Elsa.Common/Contracts/IRecurringTask.cs new file mode 100644 index 0000000..f7f1aa8 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/IRecurringTask.cs @@ -0,0 +1,11 @@ +namespace Elsa.Common; + +/// +/// Represents a recurring task that is executed in the background. +/// In multi-tenant applications, this task is executed for each tenant. +/// +public interface IRecurringTask : ITask +{ + Task StartAsync(CancellationToken cancellationToken); + Task StopAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/ISerializationOptionsConfigurator.cs b/src/modules/Elsa.Common/Contracts/ISerializationOptionsConfigurator.cs new file mode 100644 index 0000000..0558e75 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/ISerializationOptionsConfigurator.cs @@ -0,0 +1,20 @@ +using System.Text.Json; +using System.Text.Json.Serialization.Metadata; + +namespace Elsa.Common; + +/// +/// Configures objects. +/// +public interface ISerializationOptionsConfigurator +{ + /// + /// Configures the specified object. + /// + void Configure(JsonSerializerOptions options); + + /// + /// Returns a set of modifiers to be added to the type info resolver used by the serializer. + /// + IEnumerable> GetModifiers(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/IStartupTask.cs b/src/modules/Elsa.Common/Contracts/IStartupTask.cs new file mode 100644 index 0000000..e7e8fe0 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/IStartupTask.cs @@ -0,0 +1,9 @@ +namespace Elsa.Common; + +/// +/// Represents a task that is executed during application startup. +/// In multi-tenant applications, this task is executed for each tenant. +/// +public interface IStartupTask : ITask +{ +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/ISystemClock.cs b/src/modules/Elsa.Common/Contracts/ISystemClock.cs new file mode 100644 index 0000000..156be39 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/ISystemClock.cs @@ -0,0 +1,12 @@ +namespace Elsa.Common; + +/// +/// Represents a system clock. +/// +public interface ISystemClock +{ + /// + /// Gets the current date and time in UTC. + /// + DateTimeOffset UtcNow { get; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/ITask.cs b/src/modules/Elsa.Common/Contracts/ITask.cs new file mode 100644 index 0000000..74048f8 --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/ITask.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common; + +public interface ITask +{ + Task ExecuteAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Contracts/RecurringTask.cs b/src/modules/Elsa.Common/Contracts/RecurringTask.cs new file mode 100644 index 0000000..dc0598e --- /dev/null +++ b/src/modules/Elsa.Common/Contracts/RecurringTask.cs @@ -0,0 +1,8 @@ +namespace Elsa.Common; + +public abstract class RecurringTask : IRecurringTask +{ + public virtual Task ExecuteAsync(CancellationToken cancellationToken) => Task.CompletedTask; + public virtual Task StartAsync(CancellationToken cancellationToken) => Task.CompletedTask; + public virtual Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Converters/BigIntegerJsonConverter.cs b/src/modules/Elsa.Common/Converters/BigIntegerJsonConverter.cs new file mode 100644 index 0000000..2638b3e --- /dev/null +++ b/src/modules/Elsa.Common/Converters/BigIntegerJsonConverter.cs @@ -0,0 +1,33 @@ +using System.Numerics; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.Common.Converters; + +/// +/// Converts big integers to and from JSON strings. +/// +public class BigIntegerJsonConverter : JsonConverter +{ + /// + public override BigInteger Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Number) + return reader.GetInt64(); + + if (reader.TokenType == JsonTokenType.String) + { + var value = reader.GetString()!; + return long.Parse(value); + } + + throw new JsonException("Expected number or string."); + } + + /// + public override void Write(Utf8JsonWriter writer, BigInteger value, JsonSerializerOptions options) + { + // Write the Big Integer as a JSON number. + writer.WriteNumberValue((long)value); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Converters/DecimalJsonConverter.cs b/src/modules/Elsa.Common/Converters/DecimalJsonConverter.cs new file mode 100644 index 0000000..b4c41e5 --- /dev/null +++ b/src/modules/Elsa.Common/Converters/DecimalJsonConverter.cs @@ -0,0 +1,33 @@ +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.Common.Converters; + +/// +/// Converts decimals to and from JSON strings. +/// +public class DecimalJsonConverter : JsonConverter +{ + /// + public override decimal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Number) + return reader.GetDecimal(); + + if (reader.TokenType == JsonTokenType.String) + { + var value = reader.GetString()!; + return decimal.Parse(value, CultureInfo.InvariantCulture); + } + + throw new JsonException("Expected number or string."); + } + + /// + public override void Write(Utf8JsonWriter writer, decimal value, JsonSerializerOptions options) + { + // Write the decimal as a JSON number + writer.WriteNumberValue(value); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Converters/IntegerJsonConverter.cs b/src/modules/Elsa.Common/Converters/IntegerJsonConverter.cs new file mode 100644 index 0000000..142aade --- /dev/null +++ b/src/modules/Elsa.Common/Converters/IntegerJsonConverter.cs @@ -0,0 +1,33 @@ +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.Common.Converters; + +/// +/// Converts integers to and from JSON strings. +/// +public class IntegerJsonConverter : JsonConverter +{ + /// + public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Number) + return reader.GetInt32(); + + if (reader.TokenType == JsonTokenType.String) + { + var value = reader.GetString()!; + return int.Parse(value, CultureInfo.InvariantCulture); + } + + throw new JsonException("Expected number or string."); + } + + /// + public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options) + { + // Write the integer as a JSON number. + writer.WriteNumberValue(value); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Converters/VersionOptionsJsonConverter.cs b/src/modules/Elsa.Common/Converters/VersionOptionsJsonConverter.cs new file mode 100644 index 0000000..059928d --- /dev/null +++ b/src/modules/Elsa.Common/Converters/VersionOptionsJsonConverter.cs @@ -0,0 +1,27 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Elsa.Common.Models; + +namespace Elsa.Common.Converters; + +/// +/// A JSON converter that serializes . +/// +public class VersionOptionsJsonConverter : JsonConverter +{ + /// + public override VersionOptions Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if(reader.TokenType == JsonTokenType.Number) + return VersionOptions.SpecificVersion(reader.GetInt32()); + + var textValue = reader.GetString(); + return string.IsNullOrWhiteSpace(textValue) ? VersionOptions.Published : VersionOptions.FromString(textValue); + } + + /// + public override void Write(Utf8JsonWriter writer, VersionOptions value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString()); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Converters/VersionOptionsTypeConverter.cs b/src/modules/Elsa.Common/Converters/VersionOptionsTypeConverter.cs new file mode 100644 index 0000000..535f249 --- /dev/null +++ b/src/modules/Elsa.Common/Converters/VersionOptionsTypeConverter.cs @@ -0,0 +1,17 @@ +using System.ComponentModel; +using System.Globalization; +using Elsa.Common.Models; + +namespace Elsa.Common.Converters; + +/// +/// A type converter that converts to and from strings. +/// +public class VersionOptionsTypeConverter : TypeConverter +{ + /// + public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) => sourceType == typeof(string) || base.CanConvertFrom(context, sourceType); + + /// + public override object ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) => value is string text ? VersionOptions.FromString(text) : base.ConvertFrom(context, culture, value)!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedLock.cs b/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedLock.cs new file mode 100644 index 0000000..fe78ba9 --- /dev/null +++ b/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedLock.cs @@ -0,0 +1,36 @@ +using Medallion.Threading; + +namespace Elsa.Common.DistributedHosting.DistributedLocks; + +/// +/// Represents a Noop (No-Operation) implementation of the interface. +/// +public class NoopDistributedLock : IDistributedLock +{ + /// + public IDistributedSynchronizationHandle? TryAcquire(TimeSpan timeout = new TimeSpan(), CancellationToken cancellationToken = new CancellationToken()) + { + return new NoopDistributedSynchronizationHandle(); + } + + /// + public IDistributedSynchronizationHandle Acquire(TimeSpan? timeout = null, CancellationToken cancellationToken = new CancellationToken()) + { + return new NoopDistributedSynchronizationHandle(); + } + + /// + public ValueTask TryAcquireAsync(TimeSpan timeout = new TimeSpan(), CancellationToken cancellationToken = new CancellationToken()) + { + return new ValueTask(new NoopDistributedSynchronizationHandle()); + } + + /// + public ValueTask AcquireAsync(TimeSpan? timeout = null, CancellationToken cancellationToken = new CancellationToken()) + { + return new ValueTask(new NoopDistributedSynchronizationHandle()); + } + + /// + public string Name => "Noop"; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedSynchronizationHandle.cs b/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedSynchronizationHandle.cs new file mode 100644 index 0000000..85ed289 --- /dev/null +++ b/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedSynchronizationHandle.cs @@ -0,0 +1,24 @@ +using Medallion.Threading; + +namespace Elsa.Common.DistributedHosting.DistributedLocks; + +/// +/// Represents a Noop distributed synchronization handle. This handle is used in the NoopDistributedLock implementation +/// to provide a no-operation implementation of the IDistributedSynchronizationHandle interface. +/// +public class NoopDistributedSynchronizationHandle : IDistributedSynchronizationHandle +{ + /// + public void Dispose() + { + } + + /// + public ValueTask DisposeAsync() + { + return new ValueTask(); + } + + /// + public CancellationToken HandleLostToken { get; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedSynchronizationProvider.cs b/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedSynchronizationProvider.cs new file mode 100644 index 0000000..9da1d08 --- /dev/null +++ b/src/modules/Elsa.Common/DistributedHosting/DistributedLocks/Noop/NoopDistributedSynchronizationProvider.cs @@ -0,0 +1,15 @@ +using Medallion.Threading; + +namespace Elsa.Common.DistributedHosting.DistributedLocks; + +/// +/// Represents a no-op implementation of the IDistributedLockProvider interface. +/// +public class NoopDistributedSynchronizationProvider : IDistributedLockProvider +{ + /// + public IDistributedLock CreateLock(string name) + { + return new NoopDistributedLock(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/DistributedHosting/Options/DistributedLockingOptions.cs b/src/modules/Elsa.Common/DistributedHosting/Options/DistributedLockingOptions.cs new file mode 100644 index 0000000..bfb1a78 --- /dev/null +++ b/src/modules/Elsa.Common/DistributedHosting/Options/DistributedLockingOptions.cs @@ -0,0 +1,15 @@ +using JetBrains.Annotations; + +namespace Elsa.Common.DistributedHosting; + +/// +/// Provides options related to distributed locking, which is used by . +/// +[UsedImplicitly] +public class DistributedLockingOptions +{ + /// + /// The maximum amount of time to wait before giving up trying to acquire a lock. Defaults to 10 minutes. + /// + public TimeSpan LockAcquisitionTimeout { get; set; } = TimeSpan.FromMinutes(10); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Elsa.Common.csproj b/src/modules/Elsa.Common/Elsa.Common.csproj new file mode 100644 index 0000000..fa16002 --- /dev/null +++ b/src/modules/Elsa.Common/Elsa.Common.csproj @@ -0,0 +1,25 @@ + + + + + Provides services and utility functions common to Elsa modules. + For example, it provides a system clock and a memory store implementation. + + elsa module common + + + + + + + + + + + + + + + + + diff --git a/src/modules/Elsa.Common/Elsa.Common.csproj.DotSettings b/src/modules/Elsa.Common/Elsa.Common.csproj.DotSettings new file mode 100644 index 0000000..2982096 --- /dev/null +++ b/src/modules/Elsa.Common/Elsa.Common.csproj.DotSettings @@ -0,0 +1,15 @@ + + True + True + True + True + True + True + True + True + True + True + True + True + True + True \ No newline at end of file diff --git a/src/modules/Elsa.Common/Entities/Entity.cs b/src/modules/Elsa.Common/Entities/Entity.cs new file mode 100644 index 0000000..3da8462 --- /dev/null +++ b/src/modules/Elsa.Common/Entities/Entity.cs @@ -0,0 +1,17 @@ +namespace Elsa.Common.Entities; + +/// +/// Represents an entity. +/// +public abstract class Entity +{ + /// + /// Gets or sets the ID of this entity. + /// + public string Id { get; set; } = null!; + + /// + /// Gets or sets the ID of the tenant that own this entity. + /// + public string? TenantId { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Entities/ManagedEntity.cs b/src/modules/Elsa.Common/Entities/ManagedEntity.cs new file mode 100644 index 0000000..95061de --- /dev/null +++ b/src/modules/Elsa.Common/Entities/ManagedEntity.cs @@ -0,0 +1,11 @@ +namespace Elsa.Common.Entities; + +/// +/// An entity that maintains a "created" timestamp. +/// +public abstract class ManagedEntity : Entity +{ + public DateTimeOffset CreatedAt { get; set; } + public DateTimeOffset UpdatedAt { get; set; } + public string? Owner { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Entities/OrderDefinition.cs b/src/modules/Elsa.Common/Entities/OrderDefinition.cs new file mode 100644 index 0000000..99108ec --- /dev/null +++ b/src/modules/Elsa.Common/Entities/OrderDefinition.cs @@ -0,0 +1,35 @@ +using System.Linq.Expressions; + +namespace Elsa.Common.Entities; + +/// +/// Represents the order by which to order the results of a query. +/// +public class OrderDefinition +{ + /// + /// Creates a new instance of the class. + /// + public OrderDefinition() + { + } + + /// + /// Creates a new instance of the class. + /// + public OrderDefinition(Expression> keySelector, OrderDirection direction) + { + KeySelector = keySelector; + Direction = direction; + } + + /// + /// The direction in which to order the results. + /// + public OrderDirection Direction { get; set; } + + /// + /// The key selector to use to order the results. + /// + public Expression> KeySelector { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Entities/OrderDirection.cs b/src/modules/Elsa.Common/Entities/OrderDirection.cs new file mode 100644 index 0000000..6acd719 --- /dev/null +++ b/src/modules/Elsa.Common/Entities/OrderDirection.cs @@ -0,0 +1,17 @@ +namespace Elsa.Common.Entities; + +/// +/// The order direction. +/// +public enum OrderDirection +{ + /// + /// Ascending order. + /// + Ascending, + + /// + /// + /// + Descending +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Entities/VersionedEntity.cs b/src/modules/Elsa.Common/Entities/VersionedEntity.cs new file mode 100644 index 0000000..cb2e592 --- /dev/null +++ b/src/modules/Elsa.Common/Entities/VersionedEntity.cs @@ -0,0 +1,27 @@ +namespace Elsa.Common.Entities; + +/// +/// Represents an entity that is versioned. +/// +public abstract class VersionedEntity : Entity +{ + /// + /// Gets or sets the date and time this entity was created. + /// + public DateTimeOffset CreatedAt { get; set; } + + /// + /// Gets or sets the version of this entity. + /// + public int Version { get; set; } = 1; + + /// + /// Gets or sets whether this entity is the latest version. + /// + public bool IsLatest { get; set; } + + /// + /// Gets or sets whether this entity is published. + /// + public bool IsPublished { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Exceptions/MissingConfigurationException.cs b/src/modules/Elsa.Common/Exceptions/MissingConfigurationException.cs new file mode 100644 index 0000000..20f6699 --- /dev/null +++ b/src/modules/Elsa.Common/Exceptions/MissingConfigurationException.cs @@ -0,0 +1,12 @@ +namespace Elsa.Common.Exceptions; + +/// +/// Configuration is missing. +/// +public class MissingConfigurationException : Exception +{ + /// + public MissingConfigurationException(string message) : base(message) + { + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/CollectionExtensions.cs b/src/modules/Elsa.Common/Extensions/CollectionExtensions.cs new file mode 100644 index 0000000..6e32a59 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/CollectionExtensions.cs @@ -0,0 +1,39 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extension methods for collections. +/// +public static class CollectionExtensions +{ + /// + /// Adds a range of items to a collection. + /// + /// The target collection. + /// The source collection. + /// The type of items in the collection. + public static void AddRange(this ICollection target, IEnumerable source) + { + foreach (var item in source) target.Add(item); + } + + /// + /// Adds a range of items to a collection. + /// + /// The target collection. + /// The source collection. + /// The type of items in the collection. + public static void AddRange(this ICollection target, params T[] source) => AddRange(target, source.AsEnumerable()); + + /// + /// Removes all items from a collection that match the specified predicate. + /// + /// The collection. + /// The predicate. + /// The type of items in the collection. + public static void RemoveWhere(this ICollection collection, Func predicate) + { + var itemsToRemove = collection.Where(predicate).ToList(); + foreach (var item in itemsToRemove) collection.Remove(item); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/ConfigurationExtensions.cs b/src/modules/Elsa.Common/Extensions/ConfigurationExtensions.cs new file mode 100644 index 0000000..8297401 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/ConfigurationExtensions.cs @@ -0,0 +1,45 @@ +using System.Text.Json; +using Microsoft.Extensions.Configuration; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +public static class ConfigurationExtensions +{ + public static string GetSectionAsJson(this IConfiguration configuration, string sectionKey, JsonSerializerOptions? options = null) + { + var section = configuration.GetSection(sectionKey); + var element = ConvertToJsonElement(section); + return JsonSerializer.Serialize(element, options); + } + + private static JsonElement ConvertToJsonElement(IConfigurationSection section) + { + using var doc = JsonDocument.Parse(JsonSerializer.Serialize(ToObject(section))); + return doc.RootElement.Clone(); + } + + private static object? ToObject(IConfigurationSection section) + { + var children = section.GetChildren().ToList(); + if (!children.Any()) + return section.Value; + + if (children.All(c => int.TryParse(c.Key, out _))) + { + // Treat as array + return children + .OrderBy(c => int.Parse(c.Key)) + .Select(ToObject) + .ToList(); + } + + var dict = new Dictionary(); + foreach (var child in children) + { + dict[child.Key] = ToObject(child); + } + + return dict; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/DependencyInjectionExtensions.cs b/src/modules/Elsa.Common/Extensions/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..b4c8a42 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/DependencyInjectionExtensions.cs @@ -0,0 +1,54 @@ +using Elsa.Common; +using Elsa.Common.RecurringTasks; +using Elsa.Common.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Extension methods for . +/// +public static class DependencyInjectionExtensions +{ + /// + /// Adds a memory store for the specified entity. + /// + public static IServiceCollection AddMemoryStore(this IServiceCollection services) where TStore : class + { + services.TryAddSingleton>(); + services.TryAddScoped(); + return services; + } + + /// + /// Adds a serialization options configurator for the specified type. + /// + public static IServiceCollection AddSerializationOptionsConfigurator(this IServiceCollection services) where T : class, ISerializationOptionsConfigurator + { + services.AddSingleton(); + return services; + } + + public static IServiceCollection AddStartupTask(this IServiceCollection services) where T : class, IStartupTask + { + return services.AddScoped(); + } + + public static IServiceCollection AddBackgroundTask(this IServiceCollection services) where T : class, IBackgroundTask + { + return services.AddScoped(); + } + + public static IServiceCollection AddRecurringTask(this IServiceCollection services) where T : class, IRecurringTask + { + return services.AddScoped(); + } + + public static IServiceCollection AddRecurringTask(this IServiceCollection services, TimeSpan interval) where T : class, IRecurringTask + { + services.Configure(options => options.Schedule.ConfigureTask(interval)); + return services.AddRecurringTask(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/EnumerableExtensions.cs b/src/modules/Elsa.Common/Extensions/EnumerableExtensions.cs new file mode 100644 index 0000000..f95d639 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/EnumerableExtensions.cs @@ -0,0 +1,62 @@ +using Elsa.Common.Models; +using JetBrains.Annotations; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Extension methods for . +/// +[PublicAPI] +public static class EnumerableExtensions +{ + /// + /// Paginates the enumerable. + /// + /// The enumerable to paginate. + /// The projection to apply to the enumerable. + /// The pagination arguments. + /// The type of the enumerable. + /// The type of the projection. + /// A page of the projected enumerable. + public static Page Paginate(this IEnumerable enumerable, Func projection, PageArgs? pageArgs = default) + { + var items = enumerable.ToList(); + var count = items.Count; + + if (pageArgs?.Offset != null) items = items.Skip(pageArgs.Offset.Value).ToList(); + if (pageArgs?.Limit != null) items = items.Take(pageArgs.Limit.Value).ToList(); + + var results = items.Select(projection).ToList(); + return Page.Of(results, count); + } + + /// + /// Paginates the enumerable. + /// + /// The enumerable to paginate. + /// The pagination arguments. + /// The type of the enumerable. + /// A page of the enumerable. + public static Page Paginate(this IEnumerable enumerable, PageArgs? pageArgs = default) + { + var items = enumerable.ToList(); + var count = items.Count; + + if (pageArgs?.Offset != null) items = items.Skip(pageArgs.Offset.Value).ToList(); + if (pageArgs?.Limit != null) items = items.Take(pageArgs.Limit.Value).ToList(); + + var results = items.ToList(); + return Page.Of(results, count); + } + + /// + /// Returns a value indicating whether two lists are equal. + /// + /// The first list. + /// The second list. + /// The type of the items in the lists. + /// True if the lists are equal, otherwise false. + public static bool IsEqualTo(this IEnumerable list1, IEnumerable list2) => list1.OrderBy(g => g).SequenceEqual(list2.OrderBy(g => g)); + +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/JsonSerializerOptionsExtensions.cs b/src/modules/Elsa.Common/Extensions/JsonSerializerOptionsExtensions.cs new file mode 100644 index 0000000..62a5cf9 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/JsonSerializerOptionsExtensions.cs @@ -0,0 +1,30 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Adds extension methods to . +/// +public static class JsonSerializerOptionsExtensions +{ + /// + /// Adds the specified converters to the options. + /// + public static JsonSerializerOptions WithConverters(this JsonSerializerOptions options, params JsonConverter[] converters) + { + foreach (var converter in converters) + options.Converters.Add(converter); + + return options; + } + + /// + /// Clones the options. + /// + public static JsonSerializerOptions Clone(this JsonSerializerOptions options) + { + return new JsonSerializerOptions(options); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/PropertyAccessorExtensions.cs b/src/modules/Elsa.Common/Extensions/PropertyAccessorExtensions.cs new file mode 100644 index 0000000..bea2a3b --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/PropertyAccessorExtensions.cs @@ -0,0 +1,78 @@ +using System.Linq.Expressions; +using System.Reflection; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extension methods for working with property accessors. +/// +public static class PropertyAccessorExtensions +{ + /// + /// Sets the value of the property referenced by the expression. + /// + /// The target on which to set the property value. + /// The name of the property. + /// The value to set. + public static void SetPropertyValue(this object target, string propertyName, object? value) + { + var property = target.GetType().GetProperty(propertyName)!; + property.SetValue(target, value); + } + + /// + /// Sets the value of the property referenced by the expression. + /// + /// The target on which to set the property value. + /// The expression. + /// The value to set. + /// The type of the object containing the property. + /// The type of the property. + public static void SetPropertyValue(this T target, Expression> expression, TProperty value) + { + var property = expression.GetProperty(); + + if (property != null) + property.SetValue(target, value, null); + } + + /// + /// Gets the value of the property referenced by the expression. + /// + /// The target from which to get the property value. + /// The expression. + /// The type of the object containing the property. + /// The type of the property. + /// The value of the property referenced by the expression. + public static TProperty? GetPropertyValue(this T target, Expression> expression) + { + var property = expression.GetProperty(); + return (TProperty?)property?.GetValue(target); + } + + /// + /// Gets the name of the property referenced by the expression. + /// + /// The expression. + /// The type of the object containing the property. + /// The type of the property. + /// The name of the property referenced by the expression. + public static string GetPropertyName(this Expression> expression) => expression.GetProperty()!.Name; + + /// + /// Gets the property referenced by the expression. + /// + /// The expression. + /// The type of the object containing the property. + /// The type of the property. + /// The property referenced by the expression. + public static PropertyInfo? GetProperty(this Expression> expression) => + expression.Body is MemberExpression memberExpression + ? memberExpression.Member as PropertyInfo + : expression.Body is UnaryExpression unaryExpression + ? unaryExpression.Operand is MemberExpression unaryMemberExpression + ? unaryMemberExpression.Member as PropertyInfo + : null + : null; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/QueryableExtensions.cs b/src/modules/Elsa.Common/Extensions/QueryableExtensions.cs new file mode 100644 index 0000000..e4fc50b --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/QueryableExtensions.cs @@ -0,0 +1,76 @@ +using System.Linq.Expressions; +using Elsa.Common.Entities; +using Elsa.Common.Models; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extension methods for objects. +/// +public static class QueryableExtensions +{ + /// + /// Paginates the queryable. + /// + /// The queryable to paginate. + /// The projection to apply to the queryable. + /// The pagination arguments. + /// The type of the queryable. + /// The type of the projection. + /// A page of the projected queryable. + public static Page Paginate(this IQueryable queryable, Expression> projection, PageArgs? pageArgs = default) + { + if (pageArgs?.Offset != null) queryable = queryable.Skip(pageArgs.Offset.Value); + if (pageArgs?.Limit != null) queryable = queryable.Take(pageArgs.Limit.Value); + + var count = queryable.Count(); + var results = queryable.Select(projection).ToList(); + return Page.Of(results, count); + } + + /// + /// Paginates the queryable. + /// + /// The queryable to paginate. + /// The pagination arguments. + /// The type of the queryable. + /// A page of the queryable. + public static Page ToPage(this IQueryable queryable, PageArgs? pageArgs = default) + { + if (pageArgs?.Offset != null) queryable = queryable.Skip(pageArgs.Offset.Value); + if (pageArgs?.Limit != null) queryable = queryable.Take(pageArgs.Limit.Value); + + var count = queryable.Count(); + var results = queryable.ToList(); + return Page.Of(results, count); + } + + /// + /// Paginates the queryable. + /// + /// The queryable to paginate. + /// The pagination arguments. + /// The type of the queryable. + /// The paginated queryable. + public static IQueryable Paginate(this IQueryable queryable, PageArgs? pageArgs) + { + if (pageArgs?.Offset != null) queryable = queryable.Skip(pageArgs.Offset.Value); + if (pageArgs?.Limit != null) queryable = queryable.Take(pageArgs.Limit.Value); + + return queryable; + } + + /// + /// Orders the queryable by the specified order. + /// + /// The queryable to order. + /// The order to apply to the queryable. + /// The type of the queryable. + /// The type of the property to order by. + /// The ordered queryable. + public static IQueryable OrderBy(this IQueryable queryable, OrderDefinition order) => + order.Direction == OrderDirection.Ascending + ? queryable.OrderBy(order.KeySelector) + : queryable.OrderByDescending(order.KeySelector); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Common/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..c5088a1 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,37 @@ +namespace Elsa.Extensions; + +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Linq; + +public static class ServiceCollectionExtensions +{ + /// + /// Adds the service with a specific implementation type only if the combination + /// of service and implementation does not already exist in the service collection. + /// + public static IServiceCollection TryAddScopedImplementation( + this IServiceCollection services) + where TService : class + where TImplementation : class, TService + { + if (!services.Any(sd => sd.ServiceType == typeof(TService) && sd.ImplementationType == typeof(TImplementation))) + services.AddScoped(); + + return services; + } + + /// + /// Adds the service with a specific implementation factory only if the combination + /// of service and implementation already doesn't exist. + /// + public static IServiceCollection TryAddScopedImplementation( + this IServiceCollection services, Func implementationFactory) + where TService : class + { + if (services.All(sd => sd.ServiceType != typeof(TService))) + services.AddScoped(implementationFactory); + + return services; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/StringExtensions.cs b/src/modules/Elsa.Common/Extensions/StringExtensions.cs new file mode 100644 index 0000000..d22cb86 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/StringExtensions.cs @@ -0,0 +1,9 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +public static class StringExtensions +{ + public static string WithDefault(this string? value, string defaultValue) => !string.IsNullOrWhiteSpace(value) ? value : defaultValue; + public static string EmptyIfNull(this string? value) => value ?? ""; + public static string? NullIfEmpty(this string? value) => value == "" ? null : value; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/TypeExtensions.cs b/src/modules/Elsa.Common/Extensions/TypeExtensions.cs new file mode 100644 index 0000000..863a205 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/TypeExtensions.cs @@ -0,0 +1,57 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Extends with additional methods. +/// +public static class TypeExtensions +{ + /// + /// Returns true of the type is generic, false otherwise. + /// + public static bool IsGenericType(this Type type, Type genericType) => type.IsGenericType && type.GetGenericTypeDefinition() == genericType; + + /// + /// Returns true of the type is nullable, false otherwise. + /// + public static bool IsNullableType(this Type type) => type.IsGenericType(typeof(Nullable<>)); + + /// + /// Returns the wrapped type of the specified nullable type. + /// + public static Type GetTypeOfNullable(this Type type) => type.GenericTypeArguments[0]; + + /// + /// Returns true if the specified type is a collection type, false otherwise. + /// + public static bool IsCollectionType(this Type type) + { + if (!type.IsGenericType) + return false; + + var elementType = type.GenericTypeArguments[0]; + var collectionType = typeof(ICollection<>).MakeGenericType(elementType); + var listType = typeof(IList<>).MakeGenericType(elementType); + return collectionType.IsAssignableFrom(type) || listType.IsAssignableFrom(type); + } + + /// + /// Constructs a collection type from the specified type. + /// + public static Type MakeCollectionType(this Type type) => typeof(ICollection<>).MakeGenericType(type); + + /// + /// Returns the element type of the specified collection type. + /// + public static Type GetCollectionElementType(this Type type) => type.GenericTypeArguments[0]; + + /// + /// Determines whether the specified type is a numeric type. + /// + /// The type to check. + /// True if the specified type is numeric, otherwise false. + public static bool IsNumericType(this Type type) + { + return type.IsPrimitive || type == typeof(decimal) || type == typeof(float) || type == typeof(double) || type == typeof(int) || type == typeof(long) || type == typeof(short) || type == typeof(byte) || type == typeof(uint) || type == typeof(ulong) || type == typeof(ushort) || type == typeof(sbyte); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Extensions/VersionedEntityExtensions.cs b/src/modules/Elsa.Common/Extensions/VersionedEntityExtensions.cs new file mode 100644 index 0000000..3c823b7 --- /dev/null +++ b/src/modules/Elsa.Common/Extensions/VersionedEntityExtensions.cs @@ -0,0 +1,104 @@ +using System.Linq.Expressions; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using LinqKit; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extension methods for objects. +/// +public static class VersionedEntityExtensions +{ + /// + /// Returns true if the specified entity matches the version options. + /// + /// The entity to check. + /// The version options. + /// True if the entity matches the version options. + public static bool WithVersion(this VersionedEntity entity, VersionOptions versionOptions) + { + var isPublished = entity.IsPublished; + var isLatest = entity.IsLatest; + var version = entity.Version; + + if (versionOptions.IsDraft) + return !isPublished; + if (versionOptions.IsLatest) + return isLatest; + if (versionOptions.IsPublished) + return isPublished; + if (versionOptions.IsLatestOrPublished) + return isPublished || isLatest; + if (versionOptions.IsLatestAndPublished) + return isPublished && isLatest; + if (versionOptions.AllVersions) + return true; + if (versionOptions.Version > 0) + return version == versionOptions.Version; + return true; + } + + /// + /// Filters the specified enumerable by the version options. + /// + /// The enumerable to filter. + /// The version options. + /// The type of the enumerable. + /// The filtered enumerable. + public static IEnumerable WithVersion( + this IEnumerable enumerable, + VersionOptions versionOptions) where T : VersionedEntity => + enumerable.Where(x => x.WithVersion(versionOptions)).OrderByDescending(x => x.Version); + + /// + /// Filters the specified queryable by the version options. + /// + /// The queryable to filter. + /// The version options. + /// The type of the queryable. + /// The filtered queryable. + public static IQueryable WithVersion(this IQueryable query, VersionOptions versionOptions) where T : VersionedEntity + { + if (versionOptions.IsDraft) + return query.Where(x => !x.IsPublished); + if (versionOptions.IsLatest) + return query.Where(x => x.IsLatest); + if (versionOptions.IsPublished) + return query.Where(x => x.IsPublished); + if (versionOptions.IsLatestOrPublished) + return query.Where(x => x.IsPublished || x.IsLatest); + if (versionOptions.IsLatestAndPublished) + return query.Where(x => x.IsPublished && x.IsLatest); + if (versionOptions.Version > 0) + return query.Where(x => x.Version == versionOptions.Version); + + return query; + } + + /// + /// Returns an expression that filters the specified expression by the version options. + /// + /// The expression to filter. + /// The version options. + /// The type of the expression. + /// The filtered expression. + public static Expression> WithVersion(this Expression> expression, VersionOptions versionOptions) where T : VersionedEntity + { + if (versionOptions.IsDraft) + return expression.And(x => !x.IsPublished); + if (versionOptions.IsLatest) + return expression.And(x => x.IsLatest); + if (versionOptions.IsPublished) + return expression.And(x => x.IsPublished); + if (versionOptions.IsLatestOrPublished) + return expression.And(x => x.IsPublished || x.IsLatest); + if (versionOptions.IsLatestAndPublished) + return expression.And(x => x.IsPublished && x.IsLatest); + if (versionOptions.Version > 0) + return expression.And(x => x.Version == versionOptions.Version); + + return expression; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Features/DefaultFormattersFeature.cs b/src/modules/Elsa.Common/Features/DefaultFormattersFeature.cs new file mode 100644 index 0000000..97ea1f3 --- /dev/null +++ b/src/modules/Elsa.Common/Features/DefaultFormattersFeature.cs @@ -0,0 +1,17 @@ +using System.ComponentModel; +using Elsa.Common.Serialization; +using Elsa.Common.Services; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Features; + +public class DefaultFormattersFeature(IModule module) : FeatureBase(module) +{ + public override void Configure() + { + TypeDescriptor.AddAttributes(typeof(Type), new TypeConverterAttribute(typeof(TypeTypeConverter))); + Module.Services.AddSingleton(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Features/MediatorFeature.cs b/src/modules/Elsa.Common/Features/MediatorFeature.cs new file mode 100644 index 0000000..0aaf0dd --- /dev/null +++ b/src/modules/Elsa.Common/Features/MediatorFeature.cs @@ -0,0 +1,24 @@ +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Features; + +/// +/// Adds and configures the Mediator feature. +/// +public class MediatorFeature : FeatureBase +{ + /// + public MediatorFeature(IModule module) : base(module) + { + } + + /// + public override void Apply() + { + Services + .AddMediator() + .AddMediatorHostedServices(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Features/MultitenancyFeature.cs b/src/modules/Elsa.Common/Features/MultitenancyFeature.cs new file mode 100644 index 0000000..640e618 --- /dev/null +++ b/src/modules/Elsa.Common/Features/MultitenancyFeature.cs @@ -0,0 +1,62 @@ +using Elsa.Common.Multitenancy; +using Elsa.Common.Multitenancy.EventHandlers; +using Elsa.Common.Multitenancy.HostedServices; +using Elsa.Common.RecurringTasks; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace Elsa.Common.Features; + +public class MultitenancyFeature(IModule module) : FeatureBase(module) +{ + private Func _tenantsProviderFactory = sp => sp.GetRequiredService(); + + public MultitenancyFeature UseTenantsProvider() where TTenantsProvider : class, ITenantsProvider + { + Services.TryAddScoped(); + return UseTenantsProvider(sp => sp.GetRequiredService()); + } + + public MultitenancyFeature UseTenantsProvider(Func tenantsProviderFactory) + { + _tenantsProviderFactory = tenantsProviderFactory; + return this; + } + + public override void ConfigureHostedServices() + { + Module + .ConfigureHostedService(-1) + ; + } + + public override void Apply() + { + Services + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddSingleton() + + // Order is important: Startup task first, then background and recurring tasks. + .AddSingleton() + + .AddSingleton() + .AddSingleton(sp => sp.GetRequiredService()) + .AddSingleton(sp => sp.GetRequiredService()) + + .AddSingleton() + .AddSingleton(sp => sp.GetRequiredService()) + .AddSingleton(sp => sp.GetRequiredService()) + + .AddSingleton() + .AddSingleton() + .AddScoped() + .AddScoped() + .AddScoped() + .AddScoped() + .AddScoped(_tenantsProviderFactory); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Features/StringCompressionFeature.cs b/src/modules/Elsa.Common/Features/StringCompressionFeature.cs new file mode 100644 index 0000000..5b2c2b0 --- /dev/null +++ b/src/modules/Elsa.Common/Features/StringCompressionFeature.cs @@ -0,0 +1,21 @@ +using Elsa.Common.Codecs; +using Elsa.Common.Services; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Features; + +[UsedImplicitly] +public class StringCompressionFeature(IModule module) : FeatureBase(module) +{ + public override void Apply() + { + Services + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddSingleton(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Features/SystemClockFeature.cs b/src/modules/Elsa.Common/Features/SystemClockFeature.cs new file mode 100644 index 0000000..5fb7d44 --- /dev/null +++ b/src/modules/Elsa.Common/Features/SystemClockFeature.cs @@ -0,0 +1,23 @@ +using Elsa.Common.Services; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Features; + +/// +/// Configures the system clock. +/// +public class SystemClockFeature : FeatureBase +{ + /// + public SystemClockFeature(IModule module) : base(module) + { + } + + /// + public override void Apply() + { + Services.AddSingleton(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/FodyWeavers.xml b/src/modules/Elsa.Common/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Common/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Common/Helpers/TypeHelper.cs b/src/modules/Elsa.Common/Helpers/TypeHelper.cs new file mode 100644 index 0000000..58e2205 --- /dev/null +++ b/src/modules/Elsa.Common/Helpers/TypeHelper.cs @@ -0,0 +1,13 @@ +using System.Reflection; + +namespace Elsa.Common.Helpers; + +public static class TypeHelper +{ + public static Type GetLatestType(string typeName) + { + var type = Type.GetType(typeName); + var deprecatedByTypeAttribute = type?.GetCustomAttribute(); + return deprecatedByTypeAttribute?.NewType ?? type ?? throw new InvalidOperationException($"Type {typeName} not found."); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Models/Page.cs b/src/modules/Elsa.Common/Models/Page.cs new file mode 100644 index 0000000..cb59b6a --- /dev/null +++ b/src/modules/Elsa.Common/Models/Page.cs @@ -0,0 +1,25 @@ +namespace Elsa.Common.Models; + +/// +/// Represents a page of items. +/// +/// The items. +/// The total count. +/// The type of the items. +public record Page(ICollection Items, long TotalCount); + +/// +/// Provides a way to create a new instance of the class. +/// +public static class Page +{ + /// + /// Creates a new instance of the class. + /// + /// The items. + /// The total count. + /// The type of the items. + /// A new instance of the class. + public static Page Of(ICollection items, long totalCount) => new(items, totalCount); + public static Page Empty() => new([], 0); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Models/PageArgs.cs b/src/modules/Elsa.Common/Models/PageArgs.cs new file mode 100644 index 0000000..054c0db --- /dev/null +++ b/src/modules/Elsa.Common/Models/PageArgs.cs @@ -0,0 +1,71 @@ +namespace Elsa.Common.Models; + +/// +/// Represents pagination arguments. +/// +public record PageArgs +{ + /// + /// Gets pagination arguments that returns all items. + /// + public static PageArgs All => new() { Offset = null, Limit = null }; + + /// + /// Creates pagination arguments from a page number and page size. + /// + /// The zero-based page number. + /// The number of items per page. + public static PageArgs FromPage(int? page, int? pageSize) => new() { Offset = page * pageSize, Limit = pageSize }; + + /// + /// Creates pagination arguments from an offset and limit. + /// + /// The number of items to skip. + /// The number of items to take. + public static PageArgs FromRange(int? offset, int? limit) => new() { Offset = offset, Limit = limit }; + + /// + /// Creates pagination arguments from page and page size or offset and limit. + /// + /// The zero-based page number. + /// The number of items per page. + /// The number of items to skip. + /// The number of items to take. + /// Thrown when neither page and pageSize nor offset and limit are specified. + public static PageArgs From(int? page, int? pageSize, int? offset, int? limit) + { + if(page != null && pageSize != null) + return FromPage(page, pageSize); + + if(offset != null && limit != null) + return FromRange(offset, limit); + + return FromPage(0, 100); + } + + /// + /// Gets the offset of the page. + /// + public int? Offset { get; set; } + + /// + /// Gets or sets the limit of the page. + /// + public int? Limit { get; set; } + + /// + /// Gets the zero-based page number. + /// + public int? Page => Offset.HasValue && Limit.HasValue ? Offset / Limit : null; + + /// + /// Gets the number of items per page. + /// + public int? PageSize => Limit; + + /// + /// Returns pagination arguments for the next page. + /// + /// The arguments for the next page. + public PageArgs Next() => this with { Offset = Page + 1 }; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Models/VersionOptions.cs b/src/modules/Elsa.Common/Models/VersionOptions.cs new file mode 100644 index 0000000..25d2beb --- /dev/null +++ b/src/modules/Elsa.Common/Models/VersionOptions.cs @@ -0,0 +1,118 @@ +using System.ComponentModel; +using System.Globalization; +using System.Text.Json.Serialization; +using Elsa.Common.Converters; +using JetBrains.Annotations; + +namespace Elsa.Common.Models; + +/// +/// Provides parameters for querying a given version of versioned entities. +/// +[TypeConverter(typeof(VersionOptionsTypeConverter))] +[JsonConverter(typeof(VersionOptionsJsonConverter))] +[PublicAPI] +public struct VersionOptions +{ + /// + /// Gets the latest version. + /// + public static readonly VersionOptions Latest = new() { IsLatest = true }; + + /// + /// Gets the published version. + /// + public static readonly VersionOptions Published = new() { IsPublished = true }; + + /// + /// Gets the published version if available, and if not, the latest version. + /// + public static readonly VersionOptions LatestOrPublished = new() { IsLatestOrPublished = true }; + + /// + /// Gets the latest, published version. + /// + public static readonly VersionOptions LatestAndPublished = new() { IsLatestAndPublished = true }; + + /// + /// Gets the draft version. + /// + public static readonly VersionOptions Draft = new() { IsDraft = true }; + + /// + /// Gets all versions. + /// + public static readonly VersionOptions All = new() { AllVersions = true }; + + /// + /// Gets a specific version. + /// + public static VersionOptions SpecificVersion(int version) => new() { Version = version }; + + /// + /// Parses a string into a . + /// + public static VersionOptions FromString(string value) => + value switch + { + "AllVersions" => All, + "Draft" => Draft, + "Latest" => Latest, + "Published" => Published, + "LatestOrPublished" => LatestOrPublished, + "LatestAndPublished" => LatestAndPublished, + _ => SpecificVersion(int.Parse(value, CultureInfo.InvariantCulture)) + }; + + /// + /// Tries to parse a string into a . + /// + /// The string to parse. + /// The parsed . + /// True if the string could be parsed, otherwise false. + public static bool TryParse(string value, out VersionOptions versionOptions) + { + versionOptions = FromString(value); + return true; + } + + /// + /// Gets the latest version. + /// + public bool IsLatest { get; private set; } + + /// + /// Gets the published version if available, and if not, the latest version. + /// + public bool IsLatestOrPublished { get; private set; } + + /// + /// Gets the latest, published version. + /// + public bool IsLatestAndPublished { get; private set; } + + /// + /// Gets the published version. + /// + public bool IsPublished { get; private set; } + + /// + /// Gets the draft version. + /// + public bool IsDraft { get; private set; } + + /// + /// Gets all versions. + /// + public bool AllVersions { get; private set; } + + /// + /// Gets a specific version. + /// + public int Version { get; private set; } + + /// + /// Returns a simple string representation of this . + /// + public override string ToString() => AllVersions ? "AllVersions" : IsDraft ? "Draft" : IsLatest ? "Latest" : IsPublished ? "Published" : IsLatestOrPublished ? "LatestOrPublished" : IsLatestAndPublished ? "LatestAndPublished" : Version.ToString(CultureInfo.InvariantCulture); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Abstractions/TenantResolverBase.cs b/src/modules/Elsa.Common/Multitenancy/Abstractions/TenantResolverBase.cs new file mode 100644 index 0000000..db0966a --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Abstractions/TenantResolverBase.cs @@ -0,0 +1,43 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// Base class for implementing a tenant resolution strategy. +/// +public abstract class TenantResolverBase : ITenantResolver +{ + Task ITenantResolver.ResolveAsync(TenantResolverContext context) + { + return ResolveAsync(context); + } + + /// + /// Implement this method to resolve the tenant. + /// + protected virtual Task ResolveAsync(TenantResolverContext context) + { + return Task.FromResult(Resolve(context)); + } + + /// + /// Implement this method to resolve the tenant. + /// + protected virtual TenantResolverResult Resolve(TenantResolverContext context) + { + return Unresolved(); + } + + /// + /// Creates a new instance of representing a resolved tenant. + /// + protected TenantResolverResult Resolved(string tenantId) => new(tenantId); + + /// + /// Creates a new instance of representing an unresolved tenant. + /// + protected TenantResolverResult Unresolved() => new(null); + + /// + /// Automatically resolves the tenant if the tenant ID is not null. + /// + protected TenantResolverResult AutoResolve(string? tenantId) => tenantId == null ? Unresolved() : Resolved(tenantId); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contexts/TenantResolverContext.cs b/src/modules/Elsa.Common/Multitenancy/Contexts/TenantResolverContext.cs new file mode 100644 index 0000000..72b4619 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contexts/TenantResolverContext.cs @@ -0,0 +1,47 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// Represents the context for resolving a tenant in a tenant resolution strategy pipeline. +/// +/// +/// This class provides the necessary information for resolving a tenant, including a cancellation token +/// to allow for cancelling the resolution process. +/// +public class TenantResolverContext +{ + private readonly IDictionary _tenantsDictionary; + + /// + /// Initializes a new instance of the class. + /// + public TenantResolverContext(IDictionary tenants, CancellationToken cancellationToken) + { + CancellationToken = cancellationToken; + _tenantsDictionary = tenants; + } + + /// + /// Gets the cancellation token. + /// + public CancellationToken CancellationToken { get; } + + /// + /// Finds a tenant based on the provided tenant ID. + /// + /// The tenant ID. + /// The found tenant or null if no tenant with the provided ID exists. + public Tenant? FindTenant(string tenantId) + { + return _tenantsDictionary.TryGetValue(tenantId, out var tenant) ? tenant : null; + } + + /// + /// Finds a tenant based on the provided predicate. + /// + /// The predicate used to filter the tenants. + /// The found tenant or null if no tenant satisfies the predicate. + public Tenant? FindTenant(Func predicate) + { + return _tenantsDictionary.Values.FirstOrDefault(predicate); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/IBackgroundTaskStarter.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/IBackgroundTaskStarter.cs new file mode 100644 index 0000000..4aaae4e --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/IBackgroundTaskStarter.cs @@ -0,0 +1,7 @@ +namespace Elsa.Common.Multitenancy; + +public interface IBackgroundTaskStarter +{ + Task StartAsync(IBackgroundTask task, CancellationToken cancellationToken); + Task StopAsync(IBackgroundTask task, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITaskExecutor.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITaskExecutor.cs new file mode 100644 index 0000000..3694f7f --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITaskExecutor.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITaskExecutor +{ + Task ExecuteTaskAsync(ITask task, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantAccessor.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantAccessor.cs new file mode 100644 index 0000000..66dab5b --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantAccessor.cs @@ -0,0 +1,12 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantAccessor +{ + /// + /// Get the current . + /// + /// Current tenant or null. + Tenant? Tenant { get; } + + IDisposable PushContext(Tenant? tenant); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantActivatedEvent.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantActivatedEvent.cs new file mode 100644 index 0000000..8bba065 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantActivatedEvent.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantActivatedEvent +{ + Task TenantActivatedAsync(TenantActivatedEventArgs args); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantDeactivatedEvent.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantDeactivatedEvent.cs new file mode 100644 index 0000000..d176105 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantDeactivatedEvent.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantDeactivatedEvent +{ + Task TenantDeactivatedAsync(TenantDeactivatedEventArgs args); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantDeletedEvent.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantDeletedEvent.cs new file mode 100644 index 0000000..f651cdf --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantDeletedEvent.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantDeletedEvent +{ + Task TenantDeletedAsync(TenantDeletedEventArgs args); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantFinder.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantFinder.cs new file mode 100644 index 0000000..1d3ec1f --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantFinder.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantFinder +{ + Task FindByIdAsync(string tenantId, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantResolver.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantResolver.cs new file mode 100644 index 0000000..76fcb7e --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantResolver.cs @@ -0,0 +1,13 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// A strategy for resolving the current tenant. This is called the tenant initializer. +/// +public interface ITenantResolver +{ + /// + /// Attempts to resolve the current tenant. + /// + /// Current tenant or null. + Task ResolveAsync(TenantResolverContext context); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantScopeFactory.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantScopeFactory.cs new file mode 100644 index 0000000..917f1e4 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantScopeFactory.cs @@ -0,0 +1,11 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantScopeFactory +{ + /// + /// Creates a new tenant scope. + /// + /// The tenant. + /// The tenant scope. + TenantScope CreateScope(Tenant? tenant); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantService.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantService.cs new file mode 100644 index 0000000..88b1e44 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantService.cs @@ -0,0 +1,68 @@ +namespace Elsa.Common.Multitenancy; + +public interface ITenantService +{ + /// + /// Finds a tenant by the given id. + /// + /// The tenant id. + /// The cancellation token. + /// The tenant or null if not found. + Task FindAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Finds a tenant using the given filter. + /// + /// The filter. + /// The cancellation token. + Task FindAsync(TenantFilter filter, CancellationToken cancellationToken = default); + + /// + /// Gets a tenant by the given id. + /// + /// The tenant id. + /// The cancellation token. + /// The tenant. + /// Thrown if the tenant is not found. + Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Gets a tenant by the given id. + /// + /// The filter. + /// The cancellation token. + /// The tenant. + /// Thrown if the tenant is not found. + Task GetAsync(TenantFilter filter, CancellationToken cancellationToken = default); + + /// + /// Lists all the tenants. + /// + /// The cancellation token. + /// The tenants. + Task> ListAsync(CancellationToken cancellationToken = default); + + /// + /// Lists all the tenants using the given filter. + /// + /// The filter. + /// The cancellation token. + /// The tenants. + Task> ListAsync(TenantFilter filter, CancellationToken cancellationToken = default); + + /// + /// Activates all tenants. + /// + Task ActivateTenantsAsync(CancellationToken cancellationToken = default); + + /// + /// Deactivates all tenants. + /// + Task DeactivateTenantsAsync(CancellationToken cancellationToken = default); + + /// + /// Invokes the and caches the result. + /// When new tenants are added, lifecycle events are triggered to ensure background tasks are updated. + /// + Task RefreshAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantsProvider.cs b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantsProvider.cs new file mode 100644 index 0000000..e5e7a49 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Contracts/ITenantsProvider.cs @@ -0,0 +1,17 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// Represents a tenant provider. +/// +public interface ITenantsProvider +{ + /// + /// Lists all the tenants. + /// + Task> ListAsync(CancellationToken cancellationToken = default); + + /// + /// Finds a tenant by the given filter. + /// + Task FindAsync(TenantFilter filter, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Entities/Tenant.cs b/src/modules/Elsa.Common/Multitenancy/Entities/Tenant.cs new file mode 100644 index 0000000..cba4b37 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Entities/Tenant.cs @@ -0,0 +1,28 @@ +using Elsa.Common.Entities; +using JetBrains.Annotations; +using Microsoft.Extensions.Configuration; + +namespace Elsa.Common.Multitenancy; + +/// +/// Represents a tenant. +/// +[UsedImplicitly] +public class Tenant : Entity +{ + /// + /// Gets or sets the name. + /// + public string Name { get; set; } = null!; + + /// + /// Gets or sets the configuration. + /// + public IConfiguration Configuration { get; set; } = new ConfigurationBuilder().Build(); + + public static readonly Tenant Default = new() + { + Id = null!, + Name = "Default" + }; +} diff --git a/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantActivatedEventArgs.cs b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantActivatedEventArgs.cs new file mode 100644 index 0000000..a30edf8 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantActivatedEventArgs.cs @@ -0,0 +1,3 @@ +namespace Elsa.Common.Multitenancy; + +public record TenantActivatedEventArgs(Tenant Tenant, TenantScope TenantScope, CancellationToken CancellationToken) : TenantEventArgs(Tenant, TenantScope, CancellationToken); \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantDeactivatedEventArgs.cs b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantDeactivatedEventArgs.cs new file mode 100644 index 0000000..b6cb61e --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantDeactivatedEventArgs.cs @@ -0,0 +1,3 @@ +namespace Elsa.Common.Multitenancy; + +public record TenantDeactivatedEventArgs(Tenant Tenant, TenantScope TenantScope, CancellationToken CancellationToken) : TenantEventArgs(Tenant, TenantScope, CancellationToken); \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantDeletedEventArgs.cs b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantDeletedEventArgs.cs new file mode 100644 index 0000000..07f6f11 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantDeletedEventArgs.cs @@ -0,0 +1,3 @@ +namespace Elsa.Common.Multitenancy; + +public record TenantDeletedEventArgs(Tenant Tenant, TenantScope TenantScope, CancellationToken CancellationToken) : TenantEventArgs(Tenant, TenantScope, CancellationToken); \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantEventArgs.cs b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantEventArgs.cs new file mode 100644 index 0000000..f2813c1 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventArgs/TenantEventArgs.cs @@ -0,0 +1,3 @@ +namespace Elsa.Common.Multitenancy; + +public record TenantEventArgs(Tenant Tenant, TenantScope TenantScope, CancellationToken CancellationToken); \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/EventHandlers/RunBackgroundTasks.cs b/src/modules/Elsa.Common/Multitenancy/EventHandlers/RunBackgroundTasks.cs new file mode 100644 index 0000000..8548156 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventHandlers/RunBackgroundTasks.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Multitenancy.EventHandlers; + +public class RunBackgroundTasks : ITenantActivatedEvent, ITenantDeactivatedEvent +{ + private readonly ICollection _runningTasks = new List(); + private CancellationTokenSource _cancellationTokenSource = default!; + + public Task TenantActivatedAsync(TenantActivatedEventArgs args) + { + var cancellationToken = args.CancellationToken; + _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); + + var tenantScope = args.TenantScope; + var backgroundTasks = tenantScope.ServiceProvider.GetServices(); + var backgroundTaskStarter = tenantScope.ServiceProvider.GetRequiredService(); + var taskExecutor = tenantScope.ServiceProvider.GetRequiredService(); + + foreach (var backgroundTask in backgroundTasks) + { + var task = backgroundTaskStarter + .StartAsync(backgroundTask, _cancellationTokenSource.Token) + .ContinueWith(t => taskExecutor.ExecuteTaskAsync(backgroundTask, _cancellationTokenSource.Token), cancellationToken, TaskContinuationOptions.RunContinuationsAsynchronously, TaskScheduler.Default); + if (!task.IsCompleted) _runningTasks.Add(task); + } + + return Task.CompletedTask; + } + + public Task TenantDeactivatedAsync(TenantDeactivatedEventArgs args) + { + _cancellationTokenSource.Cancel(); + _runningTasks.Clear(); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/EventHandlers/RunStartupTasks.cs b/src/modules/Elsa.Common/Multitenancy/EventHandlers/RunStartupTasks.cs new file mode 100644 index 0000000..0bcca5c --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventHandlers/RunStartupTasks.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using Elsa.Common.RecurringTasks; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Multitenancy.EventHandlers; + +public class RunStartupTasks : ITenantActivatedEvent +{ + public async Task TenantActivatedAsync(TenantActivatedEventArgs args) + { + var cancellationToken = args.CancellationToken; + var tenantScope = args.TenantScope; + var tasks = tenantScope.ServiceProvider.GetServices().OrderBy(x => x.GetType().GetCustomAttribute()?.Order ?? 0f).ToList(); + var taskExecutor = tenantScope.ServiceProvider.GetRequiredService(); + + foreach (var task in tasks) + await taskExecutor.ExecuteTaskAsync(task, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/EventHandlers/StartRecurringTasks.cs b/src/modules/Elsa.Common/Multitenancy/EventHandlers/StartRecurringTasks.cs new file mode 100644 index 0000000..f83479a --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/EventHandlers/StartRecurringTasks.cs @@ -0,0 +1,49 @@ +using Elsa.Common.RecurringTasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Elsa.Common.Multitenancy.EventHandlers; + +public class StartRecurringTasks(RecurringTaskScheduleManager scheduleManager, ILogger logger) : ITenantActivatedEvent, ITenantDeactivatedEvent +{ + private readonly ICollection _scheduledTimers = new List(); + private CancellationTokenSource _cancellationTokenSource = null!; + + public async Task TenantActivatedAsync(TenantActivatedEventArgs args) + { + var cancellationToken = args.CancellationToken; + _cancellationTokenSource = new CancellationTokenSource(); + var tenantScope = args.TenantScope; + var tasks = tenantScope.ServiceProvider.GetServices().ToList(); + var taskExecutor = tenantScope.ServiceProvider.GetRequiredService(); + + foreach (var task in tasks) + { + var schedule = scheduleManager.GetScheduleFor(task.GetType()); + var timer = schedule.CreateTimer(async () => + { + try + { + await taskExecutor.ExecuteTaskAsync(task, _cancellationTokenSource.Token); + } + catch (OperationCanceledException e) + { + logger.LogInformation(e, "Task {TaskType} was cancelled", task.GetType().Name); + } + + }); + _scheduledTimers.Add(timer); + await task.StartAsync(cancellationToken); + } + } + + public async Task TenantDeactivatedAsync(TenantDeactivatedEventArgs args) + { + var tenantScope = args.TenantScope; + _cancellationTokenSource.Cancel(); + foreach (var timer in _scheduledTimers) await timer.DisposeAsync(); + _scheduledTimers.Clear(); + var tasks = tenantScope.ServiceProvider.GetServices(); + foreach (var task in tasks) await task.StopAsync(args.CancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Extensions/TenantsProviderExtensions.cs b/src/modules/Elsa.Common/Multitenancy/Extensions/TenantsProviderExtensions.cs new file mode 100644 index 0000000..a60e1f9 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Extensions/TenantsProviderExtensions.cs @@ -0,0 +1,16 @@ +using JetBrains.Annotations; + +namespace Elsa.Common.Multitenancy; + +[UsedImplicitly] +public static class TenantsProviderExtensions +{ + public static async Task FindByIdAsync(this ITenantsProvider tenantsProvider, string id, CancellationToken cancellationToken = default) + { + var filter = new TenantFilter + { + Id = id + }; + return await tenantsProvider.FindAsync(filter, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/HostedServices/ActivateTenants.cs b/src/modules/Elsa.Common/Multitenancy/HostedServices/ActivateTenants.cs new file mode 100644 index 0000000..bb5fed0 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/HostedServices/ActivateTenants.cs @@ -0,0 +1,18 @@ +using JetBrains.Annotations; +using Microsoft.Extensions.Hosting; + +namespace Elsa.Common.Multitenancy.HostedServices; + +[UsedImplicitly] +public class ActivateTenants(ITenantService tenantService) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + await tenantService.ActivateTenantsAsync(cancellationToken); + } + + public async Task StopAsync(CancellationToken cancellationToken) + { + await tenantService.DeactivateTenantsAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantAccessor.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantAccessor.cs new file mode 100644 index 0000000..146dfd4 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantAccessor.cs @@ -0,0 +1,39 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// Default implementation of . +/// +public class DefaultTenantAccessor : ITenantAccessor +{ + private static readonly AsyncLocal CurrentTenantField = new(); + + /// + public Tenant? Tenant + { + get => CurrentTenantField.Value; + private set => CurrentTenantField.Value = value; + } + + public IDisposable PushContext(Tenant? tenant) + { + return new CurrentTenantScope(tenant, Tenant, t => Tenant = t); + } +} + +public class CurrentTenantScope : IDisposable +{ + private readonly Tenant? _previousTenant; + private readonly Action _apply; + + public CurrentTenantScope(Tenant? newTenant, Tenant? previousTenant, Action apply) + { + _previousTenant = previousTenant; + _apply = apply; + _apply(newTenant); + } + + public void Dispose() + { + _apply(_previousTenant); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantFinder.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantFinder.cs new file mode 100644 index 0000000..0487bb8 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantFinder.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Multitenancy; + +public class DefaultTenantFinder(IServiceScopeFactory scopeFactory) : ITenantFinder +{ + public async Task FindByIdAsync(string tenantId, CancellationToken cancellationToken = default) + { + await using var scope = scopeFactory.CreateAsyncScope(); + var tenantsProvider = scope.ServiceProvider.GetRequiredService(); + return await tenantsProvider.FindByIdAsync(tenantId, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantResolver.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantResolver.cs new file mode 100644 index 0000000..112aa9f --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantResolver.cs @@ -0,0 +1,18 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// An implementation of that always returns the default tenant. +/// +public class DefaultTenantResolver : TenantResolverBase +{ + private readonly Tenant _defaultTenant = new() + { + Id = string.Empty, + Name = "Default" + }; + + protected override TenantResolverResult Resolve(TenantResolverContext context) + { + return Resolved(_defaultTenant.Id); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantScopeFactory.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantScopeFactory.cs new file mode 100644 index 0000000..0e792d2 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantScopeFactory.cs @@ -0,0 +1,12 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Multitenancy; + +public class DefaultTenantScopeFactory(ITenantAccessor tenantAccessor, IServiceScopeFactory serviceScopeFactory) : ITenantScopeFactory +{ + public TenantScope CreateScope(Tenant? tenant) + { + var serviceScope = serviceScopeFactory.CreateAsyncScope(); + return new(serviceScope, tenantAccessor, tenant); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantService.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantService.cs new file mode 100644 index 0000000..6a1f9cb --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantService.cs @@ -0,0 +1,155 @@ +using Elsa.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Multitenancy; + +public class DefaultTenantService(IServiceScopeFactory scopeFactory, ITenantScopeFactory tenantScopeFactory, TenantEventsManager tenantEvents, ITenantAccessor tenantAccessor) : ITenantService, IAsyncDisposable +{ + private readonly AsyncServiceScope _serviceScope = scopeFactory.CreateAsyncScope(); + private readonly SemaphoreSlim _initializationLock = new(1, 1); + private readonly SemaphoreSlim _refreshLock = new(1, 1); + private IDictionary? _tenantsDictionary; + private IDictionary? _tenantScopesDictionary; + + public async ValueTask DisposeAsync() + { + await _serviceScope.DisposeAsync(); + _initializationLock.Dispose(); + } + + public async Task FindAsync(string id, CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + return dictionary.TryGetValue(id.EmptyIfNull(), out var tenant) ? tenant : null; + } + + public async Task FindAsync(TenantFilter filter, CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + return filter.Apply(dictionary.Values.AsQueryable()).FirstOrDefault(); + } + + public async Task GetAsync(string id, CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + return dictionary[id.EmptyIfNull()]; + } + + public async Task GetAsync(TenantFilter filter, CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + return filter.Apply(dictionary.Values.AsQueryable()).First(); + } + + public async Task> ListAsync(CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + return dictionary.Values; + } + + public async Task> ListAsync(TenantFilter filter, CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + return filter.Apply(dictionary.Values.AsQueryable()); + } + + public async Task ActivateTenantsAsync(CancellationToken cancellationToken = default) + { + await RefreshAsync(cancellationToken); + } + + public async Task DeactivateTenantsAsync(CancellationToken cancellationToken = default) + { + var dictionary = await GetTenantsDictionaryAsync(cancellationToken); + var tenants = dictionary.Values.ToArray(); + + foreach (var tenant in tenants) + await UnregisterTenantAsync(tenant, false, cancellationToken); + } + + public async Task RefreshAsync(CancellationToken cancellationToken = default) + { + await _refreshLock.WaitAsync(cancellationToken); + + try + { + await using var scope = scopeFactory.CreateAsyncScope(); + var tenantsProvider = scope.ServiceProvider.GetRequiredService(); + var currentTenants = await GetTenantsDictionaryAsync(cancellationToken); + var currentTenantIds = currentTenants.Keys; + var newTenants = (await tenantsProvider.ListAsync(cancellationToken)).ToDictionary(x => x.Id.EmptyIfNull()); + var newTenantIds = newTenants.Keys; + var removedTenantIds = currentTenantIds.Except(newTenantIds).ToArray(); + var addedTenantIds = newTenantIds.Except(currentTenantIds).ToArray(); + + foreach (var removedTenantId in removedTenantIds) + { + var removedTenant = currentTenants[removedTenantId]; + await UnregisterTenantAsync(removedTenant, true, cancellationToken); + } + + foreach (var addedTenantId in addedTenantIds) + { + var addedTenant = newTenants[addedTenantId]; + await RegisterTenantAsync(addedTenant, cancellationToken); + } + } + finally + { + _refreshLock.Release(); + } + } + + private async Task> GetTenantsDictionaryAsync(CancellationToken cancellationToken) + { + if (_tenantsDictionary == null) + { + await _initializationLock.WaitAsync(cancellationToken); // Lock to ensure single-threaded initialization + try + { + if (_tenantsDictionary == null) // Double-check locking + { + _tenantsDictionary = new Dictionary(); + _tenantScopesDictionary = new Dictionary(); + var tenantsProvider = _serviceScope.ServiceProvider.GetRequiredService(); + var tenants = await tenantsProvider.ListAsync(cancellationToken); + + foreach (var tenant in tenants) + await RegisterTenantAsync(tenant, cancellationToken); + } + } + finally + { + _initializationLock.Release(); + } + } + + return _tenantsDictionary; + } + + private async Task RegisterTenantAsync(Tenant tenant, CancellationToken cancellationToken = default) + { + var scope = tenantScopeFactory.CreateScope(tenant); + _tenantsDictionary![tenant.Id.EmptyIfNull()] = tenant; + _tenantScopesDictionary![tenant] = scope; + + using (tenantAccessor.PushContext(tenant)) + await tenantEvents.TenantActivatedAsync(new(tenant, scope, cancellationToken)); + } + + private async Task UnregisterTenantAsync(Tenant tenant, bool isDeleted, CancellationToken cancellationToken = default) + { + if (_tenantScopesDictionary!.Remove(tenant, out var scope)) + { + _tenantsDictionary!.Remove(tenant.Id.EmptyIfNull(), out _); + + using (tenantAccessor.PushContext(tenant)) + { + await tenantEvents.TenantDeactivatedAsync(new(tenant, scope, cancellationToken)); + + if (isDeleted) + await tenantEvents.TenantDeletedAsync(new(tenant, scope, cancellationToken)); + } + } + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantsProvider.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantsProvider.cs new file mode 100644 index 0000000..7618205 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/DefaultTenantsProvider.cs @@ -0,0 +1,23 @@ +using JetBrains.Annotations; + +namespace Elsa.Common.Multitenancy; + +/// +/// A tenant provider that provides the default tenant only. To turn on multitenancy, use another implementation. +/// +[UsedImplicitly] +public class DefaultTenantsProvider : ITenantsProvider +{ + private readonly Tenant[] _tenants = { Tenant.Default }; + + public Task> ListAsync(CancellationToken cancellationToken = default) + { + return Task.FromResult>(_tenants); + } + + public Task FindAsync(TenantFilter filter, CancellationToken cancellationToken = default) + { + var queryable = _tenants.AsQueryable(); + return Task.FromResult(filter.Apply(queryable).FirstOrDefault()); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/TaskExecutor.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/TaskExecutor.cs new file mode 100644 index 0000000..6f00628 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/TaskExecutor.cs @@ -0,0 +1,42 @@ +using System.Reflection; +using Elsa.Common.DistributedHosting; +using Elsa.Common.RecurringTasks; +using Medallion.Threading; +using Microsoft.Extensions.Options; + +namespace Elsa.Common.Multitenancy; + +public class TaskExecutor(IDistributedLockProvider distributedLockProvider, IOptions options) : ITaskExecutor, IBackgroundTaskStarter +{ + public async Task ExecuteTaskAsync(ITask task, CancellationToken cancellationToken) + { + await ExecuteInternalAsync(task, () => task.ExecuteAsync(cancellationToken), cancellationToken); + } + + public async Task StartAsync(IBackgroundTask task, CancellationToken cancellationToken) + { + await ExecuteInternalAsync(task, () => task.StartAsync(cancellationToken), cancellationToken); + } + + public async Task StopAsync(IBackgroundTask task, CancellationToken cancellationToken) + { + await ExecuteInternalAsync(task, () => task.StopAsync(cancellationToken), cancellationToken); + } + + private async Task ExecuteInternalAsync(ITask task, Func action, CancellationToken cancellationToken) + { + var taskType = task.GetType(); + var singleNodeTask = taskType.GetCustomAttribute() != null; + + if (singleNodeTask) + { + var resourceName = taskType.AssemblyQualifiedName!; + await using (await distributedLockProvider.AcquireLockAsync(resourceName, options.Value.LockAcquisitionTimeout, cancellationToken: cancellationToken)) + await action(); + } + else + { + await action(); + } + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Implementations/TenantEventsManager.cs b/src/modules/Elsa.Common/Multitenancy/Implementations/TenantEventsManager.cs new file mode 100644 index 0000000..c8b9763 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Implementations/TenantEventsManager.cs @@ -0,0 +1,56 @@ +using Microsoft.Extensions.Logging; + +namespace Elsa.Common.Multitenancy; + +public class TenantEventsManager( + IEnumerable tenantActivatedEvents, + IEnumerable tenantDeactivatedEvents, + IEnumerable tenantDeletedEvents, + ILogger logger) +{ + public async Task TenantActivatedAsync(TenantActivatedEventArgs args) + { + await ExecuteEventHandlersAsync( + tenantActivatedEvents, + (handler, eventArgs) => handler.TenantActivatedAsync(eventArgs), + args, + "activated"); + } + + public async Task TenantDeactivatedAsync(TenantDeactivatedEventArgs args) + { + await ExecuteEventHandlersAsync( + tenantDeactivatedEvents, + (handler, eventArgs) => handler.TenantDeactivatedAsync(eventArgs), + args, + "deactivated"); + } + + public async Task TenantDeletedAsync(TenantDeletedEventArgs args) + { + await ExecuteEventHandlersAsync( + tenantDeletedEvents, + (handler, eventArgs) => handler.TenantDeletedAsync(eventArgs), + args, + "deleted"); + } + + private async Task ExecuteEventHandlersAsync( + IEnumerable handlers, + Func handlerAction, + TArgs args, + string eventType) + { + foreach (var handler in handlers) + { + try + { + await handlerAction(handler, args); + } + catch (Exception e) + { + logger.LogError(e, "Error occurred while processing tenant {EventType} event.", eventType); + } + } + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Models/TenantFilter.cs b/src/modules/Elsa.Common/Multitenancy/Models/TenantFilter.cs new file mode 100644 index 0000000..51a8859 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Models/TenantFilter.cs @@ -0,0 +1,29 @@ +using JetBrains.Annotations; + +namespace Elsa.Common.Multitenancy; + +/// +/// Represents a tenant filter. +/// +[UsedImplicitly] +public class TenantFilter +{ + /// + /// Gets or sets the tenant ID to filter for. + /// + public string Id { get; set; } = null!; + + /// + /// Applies the filter to the specified queryable. + /// + /// The queryable. + /// The filtered queryable. + public IQueryable Apply(IQueryable queryable) + { + queryable = queryable.Where(x => x.Id == Id); + + return queryable; + } + + public static TenantFilter ById(string id) => new() { Id = id }; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Models/TenantScope.cs b/src/modules/Elsa.Common/Multitenancy/Models/TenantScope.cs new file mode 100644 index 0000000..33d6fb2 --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Models/TenantScope.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Multitenancy; + +/// +/// Represents a tenant scope, which sets the current tenant for the duration of the scope. +/// After the scope is disposed, the original tenant is restored. +/// +public class TenantScope(IServiceScope serviceScope, ITenantAccessor tenantAccessor, Tenant? tenant) : IAsyncDisposable +{ + private readonly IDisposable _tenantContext = tenantAccessor.PushContext(tenant); + + public IServiceScope ServiceScope { get; } = serviceScope; + public IServiceProvider ServiceProvider => ServiceScope.ServiceProvider; + + public async ValueTask DisposeAsync() + { + _tenantContext.Dispose(); + if (ServiceScope is IAsyncDisposable asyncDisposable) + await asyncDisposable.DisposeAsync(); + else + ServiceScope.Dispose(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Multitenancy/Results/TenantResolverResult.cs b/src/modules/Elsa.Common/Multitenancy/Results/TenantResolverResult.cs new file mode 100644 index 0000000..76c06ce --- /dev/null +++ b/src/modules/Elsa.Common/Multitenancy/Results/TenantResolverResult.cs @@ -0,0 +1,28 @@ +namespace Elsa.Common.Multitenancy; + +/// +/// Represents the result of a tenant resolution. +/// +/// The resolved tenant. +public record TenantResolverResult(string? TenantId) +{ + /// + /// Creates a new instance of representing a resolved tenant. + /// + /// The resolved tenant. + /// A new instance of representing a resolved tenant. + public static TenantResolverResult Resolved(string tenantId) => new(tenantId); + + /// + /// Creates a new instance of representing an unresolved tenant. + /// + /// A new instance of representing an unresolved tenant. + public static TenantResolverResult Unresolved() => new(default(string?)); + + /// + /// Gets a value indicating whether the tenant has been resolved. + /// + public bool IsResolved => TenantId != null; + + public string ResolveTenantId() => TenantId ?? throw new InvalidOperationException("Tenant has not been resolved."); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/CronSchedule.cs b/src/modules/Elsa.Common/RecurringTasks/CronSchedule.cs new file mode 100644 index 0000000..e530469 --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/CronSchedule.cs @@ -0,0 +1,11 @@ +using Cronos; + +namespace Elsa.Common.RecurringTasks; + +public class CronSchedule(ISystemClock systemClock, CronExpression expression) : ISchedule +{ + public ScheduledTimer CreateTimer(Func action) + { + return new ScheduledTimer(action, () => expression.GetNextOccurrence(systemClock.UtcNow.DateTime)!.Value - systemClock.UtcNow.DateTime); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/ISchedule.cs b/src/modules/Elsa.Common/RecurringTasks/ISchedule.cs new file mode 100644 index 0000000..82459cb --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/ISchedule.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.RecurringTasks; + +public interface ISchedule +{ + ScheduledTimer CreateTimer(Func action); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/IntervalExpression.cs b/src/modules/Elsa.Common/RecurringTasks/IntervalExpression.cs new file mode 100644 index 0000000..ef92cca --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/IntervalExpression.cs @@ -0,0 +1,25 @@ +namespace Elsa.Common.RecurringTasks; + +public class IntervalExpression +{ + public static IntervalExpression FromInterval(TimeSpan interval) + { + return new IntervalExpression + { + Type = IntervalExpressionType.Interval, + Expression = interval.ToString() + }; + } + + public static IntervalExpression FromCron(string cronExpression) + { + return new IntervalExpression + { + Type = IntervalExpressionType.Cron, + Expression = cronExpression + }; + } + + public IntervalExpressionType Type { get; set; } + public string Expression { get; set; } = default!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/IntervalExpressionType.cs b/src/modules/Elsa.Common/RecurringTasks/IntervalExpressionType.cs new file mode 100644 index 0000000..cd1f11e --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/IntervalExpressionType.cs @@ -0,0 +1,7 @@ +namespace Elsa.Common.RecurringTasks; + +public enum IntervalExpressionType +{ + Cron, + Interval +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/IntervalSchedule.cs b/src/modules/Elsa.Common/RecurringTasks/IntervalSchedule.cs new file mode 100644 index 0000000..ee0e7d5 --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/IntervalSchedule.cs @@ -0,0 +1,9 @@ +namespace Elsa.Common.RecurringTasks; + +public class IntervalSchedule(TimeSpan interval) : ISchedule +{ + public ScheduledTimer CreateTimer(Func action) + { + return new ScheduledTimer(action, () => interval); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/OrderAttribute.cs b/src/modules/Elsa.Common/RecurringTasks/OrderAttribute.cs new file mode 100644 index 0000000..b0efd88 --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/OrderAttribute.cs @@ -0,0 +1,10 @@ +namespace Elsa.Common.RecurringTasks; + +/// +/// Configures a task with a priority. +/// +[AttributeUsage(AttributeTargets.Class)] +public class OrderAttribute(float order) : Attribute +{ + public float Order { get; } = order; +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/RecurringTaskOptions.cs b/src/modules/Elsa.Common/RecurringTasks/RecurringTaskOptions.cs new file mode 100644 index 0000000..ee3d1bb --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/RecurringTaskOptions.cs @@ -0,0 +1,6 @@ +namespace Elsa.Common.RecurringTasks; + +public class RecurringTaskOptions +{ + public RecurringTaskSchedule Schedule { get; } = new(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/RecurringTaskSchedule.cs b/src/modules/Elsa.Common/RecurringTasks/RecurringTaskSchedule.cs new file mode 100644 index 0000000..e484018 --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/RecurringTaskSchedule.cs @@ -0,0 +1,26 @@ +namespace Elsa.Common.RecurringTasks; + +public class RecurringTaskSchedule +{ + public IDictionary ScheduledTasks { get; } = new Dictionary(); + + public void ConfigureTask(TimeSpan interval) where T : IRecurringTask + { + ConfigureTask(IntervalExpression.FromInterval(interval)); + } + + public void ConfigureTask(string cronExpression) where T : IRecurringTask + { + ConfigureTask(IntervalExpression.FromCron(cronExpression)); + } + + public void ConfigureTask(IntervalExpression intervalExpression) where T : IRecurringTask + { + ConfigureTask(typeof(T), intervalExpression); + } + + public void ConfigureTask(Type recurringTaskType, IntervalExpression intervalExpression) + { + ScheduledTasks[recurringTaskType] = intervalExpression; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/RecurringTaskScheduleManager.cs b/src/modules/Elsa.Common/RecurringTasks/RecurringTaskScheduleManager.cs new file mode 100644 index 0000000..fbb286d --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/RecurringTaskScheduleManager.cs @@ -0,0 +1,31 @@ +using Cronos; +using Microsoft.Extensions.Options; + +namespace Elsa.Common.RecurringTasks; + +public class RecurringTaskScheduleManager(IOptions options, ISystemClock systemClock) +{ + public IDictionary ScheduledTasks { get; set; } = new Dictionary(); + + public ISchedule GetScheduleFor(Type taskType) + { + if (!ScheduledTasks.TryGetValue(taskType, out var schedule)) + { + var intervalExpression = options.Value.Schedule.ScheduledTasks.TryGetValue(taskType, out var expr) ? expr : null; + schedule = intervalExpression != null ? CreateSchedule(intervalExpression) : new IntervalSchedule(TimeSpan.FromMinutes(1)); + ScheduledTasks[taskType] = schedule; + } + + return schedule; + } + + private ISchedule CreateSchedule(IntervalExpression intervalExpression) + { + return intervalExpression.Type switch + { + IntervalExpressionType.Cron => new CronSchedule(systemClock, CronExpression.Parse(intervalExpression.Expression)), + IntervalExpressionType.Interval => new IntervalSchedule(TimeSpan.Parse(intervalExpression.Expression)), + _ => throw new NotSupportedException($"Interval expression type '{intervalExpression.Type}' is not supported.") + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/ScheduledTimer.cs b/src/modules/Elsa.Common/RecurringTasks/ScheduledTimer.cs new file mode 100644 index 0000000..5afdb03 --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/ScheduledTimer.cs @@ -0,0 +1,31 @@ +namespace Elsa.Common.RecurringTasks; + +public class ScheduledTimer : IDisposable, IAsyncDisposable +{ + private readonly Func _action; + private readonly Func _interval; + private readonly Timer _timer; + + public ScheduledTimer(Func action, Func interval) + { + _action = action; + _interval = interval; + _timer = new Timer(Callback, null, interval(), Timeout.InfiniteTimeSpan); + } + + private async void Callback(object? state) + { + await _action(); + _timer.Change(_interval(), Timeout.InfiniteTimeSpan); + } + + public void Dispose() + { + _timer.Dispose(); + } + + public async ValueTask DisposeAsync() + { + await _timer.DisposeAsync(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/RecurringTasks/SingleNodeTaskAttribute.cs b/src/modules/Elsa.Common/RecurringTasks/SingleNodeTaskAttribute.cs new file mode 100644 index 0000000..14f8694 --- /dev/null +++ b/src/modules/Elsa.Common/RecurringTasks/SingleNodeTaskAttribute.cs @@ -0,0 +1,7 @@ +namespace Elsa.Common.RecurringTasks; + +/// +/// Configures a task to be executed on a single node in a multi-node environment. +/// +[AttributeUsage(AttributeTargets.Class)] +public class SingleNodeTaskAttribute : Attribute; \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/ConfigurableSerializer.cs b/src/modules/Elsa.Common/Serialization/ConfigurableSerializer.cs new file mode 100644 index 0000000..ba28751 --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/ConfigurableSerializer.cs @@ -0,0 +1,124 @@ +using System.Text.Encodings.Web; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; +using System.Text.Unicode; +using Elsa.Common.Converters; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Common.Serialization; + +/// +/// A base class for configurable JSON serializers. +/// +public abstract class ConfigurableSerializer +{ + private JsonSerializerOptions? _options; + + /// + /// Initializes a new instance of the class. + /// + protected ConfigurableSerializer(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + + /// + /// Gets the service provider. + /// + protected IServiceProvider ServiceProvider { get; } + + /// + /// Creates a new instance of with the configured options. + /// + public virtual JsonSerializerOptions GetOptions() + { + if (_options != null) + return _options; + + var options = CreateOptionsInternal(); + ApplyOptions(options); + _options = options; + return options; + } + + /// + /// Creates a new instance of with the configured options. + /// + public virtual void ApplyOptions(JsonSerializerOptions options) + { + Configure(options); + AddConverters(options); + RunConfigurators(options); + } + + /// + /// Creates a new instance of . + /// + protected JsonSerializerOptions GetOptionsInternal() + { + var options = CreateOptionsInternal(); + ApplyOptions(options); + _options = options; + return options; + } + + /// + /// Creates a new instance of . + /// + private static JsonSerializerOptions CreateOptionsInternal() + { + var options = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNameCaseInsensitive = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) + }; + + options.Converters.Add(new JsonStringEnumConverter()); + options.Converters.Add(JsonMetadataServices.TimeSpanConverter); + options.Converters.Add(new IntegerJsonConverter()); + options.Converters.Add(new BigIntegerJsonConverter()); + options.Converters.Add(new DecimalJsonConverter()); + + return options; + } + + /// + /// Configures the object. + /// + protected virtual void Configure(JsonSerializerOptions options) + { + } + + /// + /// Adds additional objects. + /// + protected virtual void AddConverters(JsonSerializerOptions options) + { + } + + /// + /// Give external packages a chance to further configure the serializer options. + /// + protected virtual void RunConfigurators(JsonSerializerOptions options) + { + var configurators = ServiceProvider.GetServices(); + var modifiers = new List>(); + + foreach (var configurator in configurators) + { + configurator.Configure(options); + var modifiersToAdd = configurator.GetModifiers(); + modifiers.AddRange(modifiersToAdd); + } + + options.TypeInfoResolver = new ModifiableJsonTypeInfoResolver(modifiers); + } + + /// + /// Creates an instance of the specified type using the service provider. + /// + protected T CreateInstance() => ActivatorUtilities.CreateInstance(ServiceProvider); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/ConfigurationJsonConverter.cs b/src/modules/Elsa.Common/Serialization/ConfigurationJsonConverter.cs new file mode 100644 index 0000000..e4a38f7 --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/ConfigurationJsonConverter.cs @@ -0,0 +1,45 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.Configuration; + +namespace Elsa.Common.Serialization; + +public class ConfigurationJsonConverter : JsonConverter +{ + public override IConfiguration? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var jsonElement = JsonElement.ParseValue(ref reader); + using var memoryStream = new MemoryStream(); + using var writer = new Utf8JsonWriter(memoryStream); + jsonElement.WriteTo(writer); + writer.Flush(); + memoryStream.Position = 0; + + var configurationBuilder = new ConfigurationBuilder(); + configurationBuilder.AddJsonStream(memoryStream); + return configurationBuilder.Build(); + } + + public override void Write(Utf8JsonWriter writer, IConfiguration value, JsonSerializerOptions options) + { + var dictionary = new Dictionary(); + foreach (var child in value.GetChildren()) + dictionary[child.Key] = GetValue(child); + + JsonSerializer.Serialize(writer, dictionary, options); + } + + private static object? GetValue(IConfigurationSection section) + { + var children = section.GetChildren().ToList(); + + if (!children.Any()) + return section.Value; + + var dict = new Dictionary(); + foreach (var child in children) + dict[child.Key] = GetValue(child); + + return dict; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/JsonSerializer.cs b/src/modules/Elsa.Common/Serialization/JsonSerializer.cs new file mode 100644 index 0000000..a44dac8 --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/JsonSerializer.cs @@ -0,0 +1,59 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace Elsa.Common.Serialization; + +/// +/// Provides JSON serialization services. +/// +public class StandardJsonSerializer : ConfigurableSerializer, IJsonSerializer +{ + /// + public StandardJsonSerializer(IServiceProvider serviceProvider) : base(serviceProvider) + { + } + + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + public string Serialize(object value) + { + var options = GetOptions(); + return JsonSerializer.Serialize(value, options); + } + + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + public string Serialize(object? value, Type type) + { + var options = GetOptions(); + return JsonSerializer.Serialize(value, type, options); + } + + /// + public string Serialize(T value) + { + return Serialize(value, typeof(T)); + } + + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + public object Deserialize(string json) + { + var options = GetOptions(); + return JsonSerializer.Deserialize(json, options)!; + } + + /// + [RequiresUnreferencedCode("The type is not known at compile time.")] + public object Deserialize(string json, Type type) + { + var options = GetOptions(); + return JsonSerializer.Deserialize(json, type, options)!; + } + + /// + public T Deserialize(string json) + { + return (T)Deserialize(json, typeof(T)); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/ModifiableJsonTypeInfoResolver.cs b/src/modules/Elsa.Common/Serialization/ModifiableJsonTypeInfoResolver.cs new file mode 100644 index 0000000..59ae223 --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/ModifiableJsonTypeInfoResolver.cs @@ -0,0 +1,16 @@ +using System.Text.Json.Serialization.Metadata; +using Elsa.Extensions; + +namespace Elsa.Common.Serialization; + +/// +/// A custom JSON type info resolver that allows private constructors to be used when deserializing JSON. +/// +public class ModifiableJsonTypeInfoResolver : DefaultJsonTypeInfoResolver +{ + /// + public ModifiableJsonTypeInfoResolver(IEnumerable> modifiers) + { + Modifiers.AddRange(modifiers); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/SerializerOptions.cs b/src/modules/Elsa.Common/Serialization/SerializerOptions.cs new file mode 100644 index 0000000..13357cc --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/SerializerOptions.cs @@ -0,0 +1,26 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.Common.Serialization; + +public static class SerializerOptions +{ + public static JsonSerializerOptions CommonSerializerOptions { get; } = new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNameCaseInsensitive = true, + Converters = { new JsonStringEnumConverter() } + }; + + public static JsonSerializerOptions ConfigurationJsonSerializerOptions { get; } = new() + { + Converters = { new ConfigurationJsonConverter() } + }; + + /// + /// Gets the serializer options for the log persistence configuration. + /// + public static JsonSerializerOptions LogPersistenceConfigSerializerOptions { get; } = new(CommonSerializerOptions); + + public static JsonSerializerOptions ResilienceStrategyConfigSerializerOptions { get; } = new(CommonSerializerOptions); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/Serializers.cs b/src/modules/Elsa.Common/Serialization/Serializers.cs new file mode 100644 index 0000000..f4c9bd7 --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/Serializers.cs @@ -0,0 +1,25 @@ +using System.Text.Json; +using Microsoft.Extensions.Configuration; + +namespace Elsa.Common.Serialization; + +public static class Serializers +{ + public static IConfiguration DeserializeConfiguration(JsonElement? json) + { + return DeserializeConfiguration(json?.GetRawText()); + } + + public static IConfiguration DeserializeConfiguration(string? json) + { + if (json == null) + return new ConfigurationBuilder().Build(); + + return JsonSerializer.Deserialize(json, SerializerOptions.ConfigurationJsonSerializerOptions)!; + } + + public static string SerializeConfiguration(IConfiguration configuration) + { + return JsonSerializer.Serialize(configuration, SerializerOptions.ConfigurationJsonSerializerOptions); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/TypeAliasRegistry.cs b/src/modules/Elsa.Common/Serialization/TypeAliasRegistry.cs new file mode 100644 index 0000000..7c610ef --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/TypeAliasRegistry.cs @@ -0,0 +1,10 @@ +namespace Elsa.Common.Serialization; + +public static class TypeAliasRegistry +{ + public static Dictionary TypeAliases { get; } = new(); + + public static void RegisterAlias(string alias, Type type) => TypeAliases[alias] = type; + + public static Type? GetType(string alias) => TypeAliases.GetValueOrDefault(alias); +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Serialization/TypeTypeConverter.cs b/src/modules/Elsa.Common/Serialization/TypeTypeConverter.cs new file mode 100644 index 0000000..63e1b21 --- /dev/null +++ b/src/modules/Elsa.Common/Serialization/TypeTypeConverter.cs @@ -0,0 +1,41 @@ +using System.ComponentModel; +using System.Globalization; +using JetBrains.Annotations; + +namespace Elsa.Common.Serialization; + +[PublicAPI] +public class TypeTypeConverter : TypeConverter +{ + public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) + { + return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType); + } + + public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) + { + if (value is string stringValue) + { + if (TypeAliasRegistry.GetType(stringValue) is { } type) + return type; + return Type.GetType(stringValue) ?? throw new InvalidOperationException($"Type '{stringValue}' not found."); + } + return base.ConvertFrom(context, culture, value); + } + + public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destinationType) + { + return destinationType == typeof(string) || base.CanConvertTo(context, destinationType); + } + + public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType) + { + if (destinationType == typeof(string) && value is Type type) + { + if (TypeAliasRegistry.TypeAliases.FirstOrDefault(x => x.Value == type).Key is { } alias) + return alias; + return type.AssemblyQualifiedName; + } + return base.ConvertTo(context, culture, value, destinationType); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Services/CompressionCodecResolver.cs b/src/modules/Elsa.Common/Services/CompressionCodecResolver.cs new file mode 100644 index 0000000..1cd3a11 --- /dev/null +++ b/src/modules/Elsa.Common/Services/CompressionCodecResolver.cs @@ -0,0 +1,23 @@ +using Elsa.Common.Codecs; + +namespace Elsa.Common.Services; + +/// +public class CompressionCodecResolver : ICompressionCodecResolver +{ + private readonly IDictionary _codecs; + + /// + /// Initializes a new instance of the class. + /// + public CompressionCodecResolver(IEnumerable codecs) + { + _codecs = codecs.ToDictionary(c => c.GetType().Name); + } + + /// + public ICompressionCodec Resolve(string name) + { + return _codecs.TryGetValue(name, out var codec) ? codec : new None(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Services/JsonFormatter.cs b/src/modules/Elsa.Common/Services/JsonFormatter.cs new file mode 100644 index 0000000..d543942 --- /dev/null +++ b/src/modules/Elsa.Common/Services/JsonFormatter.cs @@ -0,0 +1,30 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.Common.Services; + +/// +public class JsonFormatter : IFormatter +{ + private readonly JsonSerializerOptions _options; + + public JsonFormatter() + { + _options = new JsonSerializerOptions(); + _options.Converters.Add(new JsonStringEnumConverter()); + } + + /// + public ValueTask ToStringAsync(object value, CancellationToken cancellationToken = default) + { + var json = JsonSerializer.Serialize(value); + return ValueTask.FromResult(json); + } + + /// + public ValueTask FromStringAsync(string data, Type? returnType, CancellationToken cancellationToken = default) + { + var value = returnType != null ? JsonSerializer.Deserialize(data, returnType, _options)! : JsonSerializer.Deserialize(data, _options)!; + return ValueTask.FromResult(value); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Services/MemoryStore.cs b/src/modules/Elsa.Common/Services/MemoryStore.cs new file mode 100644 index 0000000..cbbb7f8 --- /dev/null +++ b/src/modules/Elsa.Common/Services/MemoryStore.cs @@ -0,0 +1,198 @@ +using System.Collections.Concurrent; +using Elsa.Common.Entities; + +namespace Elsa.Common.Services; + +/// +/// A simple in-memory store for entities. +/// +/// The type of entity to store. +public class MemoryStore +{ + private IDictionary Entities { get; set; } = new ConcurrentDictionary(); + + /// + /// Gets a queryable of all entities. + /// + public IQueryable Queryable => Entities.Values.AsQueryable(); + + /// + /// Adds an entity. + /// + /// The entity to add. + /// A function that returns the ID of the entity. + public void Add(TEntity entity, Func idAccessor) => Entities.Add(idAccessor(entity), entity); + + /// + /// Adds many entities. + /// + /// The entities to add. + /// A function that returns the ID of the entity. + public void AddMany(IEnumerable entities, Func idAccessor) + { + foreach (var entity in entities) + Add(entity, idAccessor); + } + + /// + /// Adds or updates an entity. + /// + /// The entity to add or update. + /// A function that returns the ID of the entity. + public void Save(TEntity entity, Func idAccessor) => Entities[idAccessor(entity)] = entity; + + /// + /// Adds or updates many entities. + /// + /// The entities to add or update. + /// A function that returns the ID of the entity. + public void SaveMany(IEnumerable entities, Func idAccessor) + { + foreach (var entity in entities) + Save(entity, idAccessor); + } + + /// + /// Updates an entity. + /// + /// The entity to update. + /// A function that returns the ID of the entity. + public void Update(TEntity entity, Func idAccessor) => Entities[idAccessor(entity)] = entity; + + /// + /// Finds an entity matching the specified predicate. + /// + /// A predicate to match. + /// The matching entity or null if no match was found. + public TEntity? Find(Func predicate) => Entities.Values.Where(predicate).FirstOrDefault(); + + /// + /// Finds all entities matching the specified predicate. + /// + /// A predicate to match. + /// The matching entities. + public IEnumerable FindMany(Func predicate) => Entities.Values.Where(predicate); + + /// + /// Finds all entities matching the specified predicate and orders them by the specified key. + /// + /// The predicate to match. + /// The key to order by. + /// The order direction. + /// The type of the key. + /// The matching entities. + public IEnumerable FindMany(Func predicate, Func orderBy, OrderDirection orderDirection = OrderDirection.Ascending) + { + var query = Entities.Values.Where(predicate); + + query = orderDirection switch + { + OrderDirection.Ascending => query.OrderBy(orderBy), + OrderDirection.Descending => query.OrderByDescending(orderBy), + _ => query.OrderBy(orderBy) + }; + + return query; + } + + /// + /// Lists all entities. + /// + /// All entities. + public IEnumerable List() => Entities.Values; + + /// + /// Deletes an entity by ID. + /// + /// The ID of the entity to delete. + /// True if the entity was deleted, otherwise false. + public bool Delete(string id) => Entities.Remove(id); + + /// + /// Deletes all entities matching the specified predicate. + /// + /// The predicate to match. + /// The number of entities deleted. + public long DeleteWhere(Func predicate) + { + var query = + from entry in Entities + where predicate(entry.Value) + select entry; + + var entries = query.ToList(); + foreach (var entry in entries) + Entities.Remove(entry); + + return entries.Count; + } + + /// + /// Deletes all entities matching the specified IDs. + /// + /// The IDs of the entities to delete. + /// The number of entities deleted. + public long DeleteMany(IEnumerable ids) + { + var count = 0; + foreach (var id in ids) + { + count++; + Entities.Remove(id); + } + + return count; + } + + /// + /// Deletes the specified entities. + /// + /// The entities to delete. + /// A function that returns the ID of the entity. + /// + public long DeleteMany(IEnumerable entities, Func idAccessor) + { + var count = 0; + var list = entities.ToList(); + + foreach (var entity in list) + { + count++; + var id = idAccessor(entity); + Entities.Remove(id); + } + + return count; + } + + /// + /// Returns a queryable of all entities. + /// + /// A function that returns a queryable. + /// A queryable of all entities. + public IEnumerable Query(Func, IQueryable> query) + { + var queryable = Entities.Values.AsQueryable(); + return query(queryable); + } + + /// + /// Returns true if any entity matches the specified predicate. + /// + /// The predicate to match. + /// True if any entity matches the specified predicate, otherwise false. + public bool Any(Func predicate) => Entities.Values.Any(predicate); + + /// + /// Returns the number of entities matching the specified predicate. + /// + /// The predicate to match. + /// The property to distinct by. + /// True if any entity matches the specified predicate, otherwise false. + public long Count(Func predicate, Func propertySelector) + { + return Entities.Values + .DistinctBy(propertySelector) + .Count(predicate); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Common/Services/SystemClock.cs b/src/modules/Elsa.Common/Services/SystemClock.cs new file mode 100644 index 0000000..377887e --- /dev/null +++ b/src/modules/Elsa.Common/Services/SystemClock.cs @@ -0,0 +1,8 @@ +namespace Elsa.Common.Services; + +/// +public class SystemClock : ISystemClock +{ + /// + public DateTimeOffset UtcNow => DateTimeOffset.UtcNow; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Constants.cs b/src/modules/Elsa.Connections.Api/Constants.cs new file mode 100644 index 0000000..6f8bb49 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Constants.cs @@ -0,0 +1,5 @@ +namespace Elsa.Connections.Api; +public class Constants +{ + public const string PermissionsNamespace = "connections"; +} diff --git a/src/modules/Elsa.Connections.Api/Elsa.Connections.Api.csproj b/src/modules/Elsa.Connections.Api/Elsa.Connections.Api.csproj new file mode 100644 index 0000000..5a3ea1a --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Elsa.Connections.Api.csproj @@ -0,0 +1,14 @@ + + + + Provides Activity Connection API endpoints + elsa module activity connection abstraction api + + + + + + + + + diff --git a/src/modules/Elsa.Connections.Api/Endpoints/ActivityConnectionDescriptor/Get/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/ActivityConnectionDescriptor/Get/Endpoint.cs new file mode 100644 index 0000000..1a3266a --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/ActivityConnectionDescriptor/Get/Endpoint.cs @@ -0,0 +1,29 @@ +using Elsa.Abstractions; +using Elsa.Connections.Contracts; +using Elsa.Workflows.Models; + +namespace Elsa.Connections.Api.Endpoints.ActivityConnectionDescriptor.Get; + +public class Endpoint(IConnectionDescriptorRegistry store) : ElsaEndpointWithoutRequest> +{ + public override void Configure() + { + Get("/connection-configuration/input-descriptor/{ActivityType}"); + ConfigurePermissions($"{Constants.PermissionsNamespace}/descriptor:read"); + } + + public override async Task HandleAsync(CancellationToken ct) + { + var type = Route("ActivityType"); + + if (string.IsNullOrWhiteSpace(type)) + { + AddError("ActivityType is required"); + await SendErrorsAsync(cancellation: ct); + return; + } + + var config = await store.GetConnectionDescriptorAsync(type, ct); + await SendOkAsync(config, ct); + } +} diff --git a/src/modules/Elsa.Connections.Api/Endpoints/ActivityConnectionDescriptor/List/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/ActivityConnectionDescriptor/List/Endpoint.cs new file mode 100644 index 0000000..c293554 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/ActivityConnectionDescriptor/List/Endpoint.cs @@ -0,0 +1,22 @@ +using Elsa.Abstractions; +using Elsa.Common.Models; +using Elsa.Connections.Contracts; +using Elsa.Connections.Models; +using Elsa.Models; + +namespace Elsa.Connections.Api.Endpoints.ActivityConnectionDescriptor.List; + +public class List(IConnectionDescriptorRegistry registry) : ElsaEndpointWithoutRequest> +{ + public override void Configure() + { + Get("/connection-configuration/descriptors"); + ConfigurePermissions($"{Constants.PermissionsNamespace}/descriptor:read"); + } + + public override Task> ExecuteAsync(CancellationToken ct) + { + var descriptors = registry.ListAll().ToList(); + return Task.FromResult(new PagedListResponse(Page.Of(descriptors, descriptors.Count)) ); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Endpoints/Add/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/Add/Endpoint.cs new file mode 100644 index 0000000..af924cc --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/Add/Endpoint.cs @@ -0,0 +1,53 @@ +using Elsa.Abstractions; +using Elsa.Connections.Models; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Connections.Persistence.Filters; +using Elsa.Workflows; +using Elsa.Connections.Persistence.Entities; +using Elsa.Connections.Api.Extensions; + +namespace Elsa.Connections.Api.Endpoints.Add; + +public class Endpoint(IConnectionStore store, IIdentityGenerator identityGenerator) : ElsaEndpoint +{ + public override void Configure() + { + Post("/connection-configuration"); + ConfigurePermissions($"{Constants.PermissionsNamespace}:write"); + } + + public override async Task ExecuteAsync(ConnectionInputModel model, CancellationToken ct) + { + var isNameUnique = await IsNameUniqueAsync(model.Name, ct); + + if (!isNameUnique) + { + AddError("A connection already exists with the specified name"); + await SendErrorsAsync(cancellation: ct); + return null!; + } + + var newEntity = new ConnectionDefinition + { + Id = identityGenerator.GenerateId(), + Name = model.Name, + Description = model.Description, + ConnectionType = model.ConnectionType, + ConnectionConfiguration = model.ConnectionConfiguration, + }; + await store.AddAsync(newEntity, ct); + await SendOkAsync(ct); + + return newEntity.ToModel(); + } + + private async Task IsNameUniqueAsync(string name, CancellationToken ct) + { + var filter = new ConnectionDefinitionFilter + { + Name = name + }; + return await store.FindAsync(filter, ct) == null; + } +} + diff --git a/src/modules/Elsa.Connections.Api/Endpoints/Delete/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/Delete/Endpoint.cs new file mode 100644 index 0000000..980538d --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/Delete/Endpoint.cs @@ -0,0 +1,27 @@ +using Elsa.Abstractions; +using Elsa.Connections.Persistence.Contracts; + +namespace Elsa.Connections.Api.Endpoints.Delete; + +public class Endpoint(IConnectionStore store) : ElsaEndpoint +{ + public override void Configure() + { + Delete("/connection-configuration/{id}"); + ConfigurePermissions($"{Constants.PermissionsNamespace}:delete"); + } + + public override async Task HandleAsync(Request req, CancellationToken ct) + { + var entity = await store.GetAsync(req.Id, ct); + + if (entity == null) + { + await SendNotFoundAsync(ct); + return; + } + + await store.DeleteAsync(entity, ct); + await SendOkAsync(ct); + } +} diff --git a/src/modules/Elsa.Connections.Api/Endpoints/Delete/Request.cs b/src/modules/Elsa.Connections.Api/Endpoints/Delete/Request.cs new file mode 100644 index 0000000..6edccd0 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/Delete/Request.cs @@ -0,0 +1,8 @@ +using System.ComponentModel.DataAnnotations; + +namespace Elsa.Connections.Api.Endpoints.Delete; + +public class Request +{ + [Required] public string Id { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Endpoints/Get/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/Get/Endpoint.cs new file mode 100644 index 0000000..b95ae23 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/Get/Endpoint.cs @@ -0,0 +1,32 @@ +using Elsa.Abstractions; +using Elsa.Connections.Models; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Connections.Api.Extensions; + +namespace Elsa.Connections.Api.Endpoints.Get; + +public class Endpoint(IConnectionStore store) : ElsaEndpoint +{ + public override void Configure() + { + Get("/connection-configuration/{id}"); + ConfigurePermissions($"{Constants.PermissionsNamespace}:read"); + } + + public override async Task ExecuteAsync(Request req, CancellationToken ct) + { + var entity = await store.FindAsync( + new() + { + Id = req.Id + }, ct); + + if (entity == null) + { + await SendNotFoundAsync(ct); + return null!; + } + + return entity.ToModel(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Endpoints/Get/Request.cs b/src/modules/Elsa.Connections.Api/Endpoints/Get/Request.cs new file mode 100644 index 0000000..e2bbdab --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/Get/Request.cs @@ -0,0 +1,8 @@ +using System.ComponentModel.DataAnnotations; + +namespace Elsa.Connections.Api.Endpoints.Get; + +public class Request +{ + [Required] public string Id { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Endpoints/List/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/List/Endpoint.cs new file mode 100644 index 0000000..04b4f7a --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/List/Endpoint.cs @@ -0,0 +1,24 @@ +using Elsa.Abstractions; +using Elsa.Common.Models; +using Elsa.Connections.Api.Extensions; +using Elsa.Connections.Models; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Models; + +namespace Elsa.Connections.Api.Endpoints.List; + +public class Endpoint(IConnectionStore store) : ElsaEndpointWithoutRequest> +{ + public override void Configure() + { + Get("/connection-configuration"); + ConfigurePermissions($"{Constants.PermissionsNamespace}:read"); + } + + public override async Task> ExecuteAsync(CancellationToken ct) + { + var entities = await store.ListAsync(ct); + var models = entities.Select(x => x.ToModel()).ToList(); + return new(Page.Of(models, models.Count())); + } +} diff --git a/src/modules/Elsa.Connections.Api/Endpoints/Update/Endpoint.cs b/src/modules/Elsa.Connections.Api/Endpoints/Update/Endpoint.cs new file mode 100644 index 0000000..bcad533 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Endpoints/Update/Endpoint.cs @@ -0,0 +1,55 @@ +using Elsa.Abstractions; +using Elsa.Connections.Models; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Connections.Persistence.Filters; +using Elsa.Connections.Api.Extensions; + +namespace Elsa.Connections.Api.Endpoints.Update; + +public class Endpoint(IConnectionStore store) : ElsaEndpoint +{ + public override void Configure() + { + Put("/connection-configuration/{id}"); + ConfigurePermissions($"{Constants.PermissionsNamespace}:write"); + } + + public override async Task ExecuteAsync(ConnectionInputModel model, CancellationToken ct) + { + var id = Route("id")!; + var entity = await store.GetAsync(id, ct); + + if (entity == null) + { + await SendNotFoundAsync(ct); + return null!; + } + + var isNameDuplicate = await IsNameDuplicateAsync(model.Name, id, ct); + + if (isNameDuplicate) + { + AddError("Another connection already exist with the specified name"); + await SendErrorsAsync(cancellation: ct); + return entity.ToModel(); + } + + entity.Name = model.Name; + entity.Description = model.Description; + entity.ConnectionConfiguration = model.ConnectionConfiguration; + + await store.UpdateAsync(entity, ct); + return entity.ToModel(); + } + + private async Task IsNameDuplicateAsync(string name, string id, CancellationToken cancellationToken) + { + var entities = await store.FindAsync(new() + { + NotId = id, + Name = name + }, cancellationToken); + + return entities != null; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Extensions/ConnectionDefinitionExtensions.cs b/src/modules/Elsa.Connections.Api/Extensions/ConnectionDefinitionExtensions.cs new file mode 100644 index 0000000..28926e4 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Extensions/ConnectionDefinitionExtensions.cs @@ -0,0 +1,19 @@ +using Elsa.Connections.Models; +using Elsa.Connections.Persistence.Entities; + +namespace Elsa.Connections.Api.Extensions; + +public static class ConnectionDefinitionExtensions +{ + public static ConnectionModel ToModel(this ConnectionDefinition entity) + { + return new() + { + Id = entity.Id, + Name = entity.Name, + Description = entity.Description, + ConnectionType = entity.ConnectionType, + ConnectionConfiguration = entity.ConnectionConfiguration, + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Connections.Api/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..10cc541 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Extensions/ModuleExtensions.cs @@ -0,0 +1,19 @@ +using Elsa.Connections.Api.Features; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Extends with methods to Connection API endpoints. +/// +public static class ModuleExtensions +{ + /// + /// Installs the Connections API feature. + /// + public static IModule UseConnectionsApi(this IModule module, Action? configure = null) + { + return module.Use(configure); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/Features/ConnectionsApiFeature.cs b/src/modules/Elsa.Connections.Api/Features/ConnectionsApiFeature.cs new file mode 100644 index 0000000..d3fc3c7 --- /dev/null +++ b/src/modules/Elsa.Connections.Api/Features/ConnectionsApiFeature.cs @@ -0,0 +1,22 @@ +using Elsa.Connections.Persistence.Features; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using JetBrains.Annotations; + +namespace Elsa.Connections.Api.Features; + +/// +/// A feature that installs API endpoints to interact connections. +/// +[DependsOn(typeof(ConnectionPersistenceFeature))] +[UsedImplicitly] +public class ConnectionsApiFeature(IModule module) : FeatureBase(module) +{ + /// + public override void Configure() + { + Module.AddFastEndpointsAssembly(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Api/FodyWeavers.xml b/src/modules/Elsa.Connections.Api/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Connections.Api/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/Attributes/ConnectionActivityAttribute.cs b/src/modules/Elsa.Connections.Core/Attributes/ConnectionActivityAttribute.cs new file mode 100644 index 0000000..7ed3d98 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Attributes/ConnectionActivityAttribute.cs @@ -0,0 +1,10 @@ +namespace Elsa.Connections.Attributes; + +[AttributeUsage(AttributeTargets.Class)] +public class ConnectionActivityAttribute(string type) : Attribute +{ + /// + /// The TypeName of the connection + /// + public string Type { get; set; } = type; +} diff --git a/src/modules/Elsa.Connections.Core/Attributes/ConnectionPropertyAttribute.cs b/src/modules/Elsa.Connections.Core/Attributes/ConnectionPropertyAttribute.cs new file mode 100644 index 0000000..e027935 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Attributes/ConnectionPropertyAttribute.cs @@ -0,0 +1,8 @@ +namespace Elsa.Connections.Attributes; + +public class ConnectionPropertyAttribute(string ns, string displayName, string? description = null) : Attribute +{ + public string? Namespace { get; set; } = ns; + public string? Description { get; set; } = description; + public string? DisplayName { get; set; } = displayName; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/Attributes/ConnectionTypeAttribute.cs b/src/modules/Elsa.Connections.Core/Attributes/ConnectionTypeAttribute.cs new file mode 100644 index 0000000..5ec4e9e --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Attributes/ConnectionTypeAttribute.cs @@ -0,0 +1,13 @@ +namespace Elsa.Connections.Attributes; + +public class ConnectionTypeAttribute : Attribute +{ + public ConnectionTypeAttribute(Type type) + { + Type = type; + } + /// + /// The TypeName of the connection + /// + public Type Type { get; set; } +} diff --git a/src/modules/Elsa.Connections.Core/Attributes/NoLogAttribute.cs b/src/modules/Elsa.Connections.Core/Attributes/NoLogAttribute.cs new file mode 100644 index 0000000..1c81650 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Attributes/NoLogAttribute.cs @@ -0,0 +1,5 @@ +namespace Elsa.Connections.Attributes; + +public class NoLogAttribute : Attribute +{ +} diff --git a/src/modules/Elsa.Connections.Core/Contracts/IConnectionDescriptorRegistry.cs b/src/modules/Elsa.Connections.Core/Contracts/IConnectionDescriptorRegistry.cs new file mode 100644 index 0000000..1c37ecb --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Contracts/IConnectionDescriptorRegistry.cs @@ -0,0 +1,40 @@ +using Elsa.Connections.Models; +using Elsa.Workflows.Models; + +namespace Elsa.Connections.Contracts; + +/// +/// Store all connection descriptors available to the system +/// +public interface IConnectionDescriptorRegistry +{ + /// + /// Adds a connection descriptor to the registry + /// + /// The type of the connection + /// The type desiptor of the connection + void Add(Type connectionType, ConnectionDescriptor connectionDescriptor); + + /// + /// Removes an activity descriptor from the registry. + /// + /// The type of the connection. + /// + void Remove(Type connectionType, ActivityDescriptor descriptor); + + /// + /// Returns all connection descriptors in the registry. + /// + /// All connection descriptors in the registry. + IEnumerable ListAll(); + + Type? Get(string type); + + /// + /// Get the Input Descriptors for an connection + /// + /// The type of the connectn + /// + /// + Task> GetConnectionDescriptorAsync(string activityType, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/Contracts/IConnectionDescriptorRepository.cs b/src/modules/Elsa.Connections.Core/Contracts/IConnectionDescriptorRepository.cs new file mode 100644 index 0000000..f73f05c --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Contracts/IConnectionDescriptorRepository.cs @@ -0,0 +1,6 @@ +namespace Elsa.Connections.Contracts; + +public interface IConnectionDescriptorRegistryEX +{ + +} diff --git a/src/modules/Elsa.Connections.Core/Contracts/IConnectionProperty.cs b/src/modules/Elsa.Connections.Core/Contracts/IConnectionProperty.cs new file mode 100644 index 0000000..ad69399 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Contracts/IConnectionProperty.cs @@ -0,0 +1,11 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Connections.Contracts; +interface IConnectionProperty +{ + public string ConnectionName { get; set; } + + [JsonIgnore] + public object Properties { get; set; } +} + diff --git a/src/modules/Elsa.Connections.Core/Converters/Int32Converter.cs b/src/modules/Elsa.Connections.Core/Converters/Int32Converter.cs new file mode 100644 index 0000000..7513c65 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Converters/Int32Converter.cs @@ -0,0 +1,29 @@ +using System.Text.Json; + +namespace Elsa.Connections.Converters; + +public class Int32Converter : System.Text.Json.Serialization.JsonConverter +{ + public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.String) + { + var stringValue = reader.GetString(); + if (int.TryParse(stringValue, out var value)) + { + return value; + } + } + else if (reader.TokenType == JsonTokenType.Number) + { + return reader.GetInt32(); + } + + throw new JsonException(); + } + + public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options) + { + writer.WriteNumberValue(value); + } +} diff --git a/src/modules/Elsa.Connections.Core/Elsa.Connections.Core.csproj b/src/modules/Elsa.Connections.Core/Elsa.Connections.Core.csproj new file mode 100644 index 0000000..962bdc9 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Elsa.Connections.Core.csproj @@ -0,0 +1,17 @@ + + + + Provides an connection framework to use connection abtraction in activities + elsa module connection abstratction + Elsa.Connections + + + + + + + + + + + diff --git a/src/modules/Elsa.Connections.Core/Extensions/LogConnectionExtensions.cs b/src/modules/Elsa.Connections.Core/Extensions/LogConnectionExtensions.cs new file mode 100644 index 0000000..62fb158 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Extensions/LogConnectionExtensions.cs @@ -0,0 +1,24 @@ +// ReSharper disable once CheckNamespace + +using Microsoft.Extensions.Logging; + +namespace Elsa.Connections.Core.Extensions; + +/// +/// +/// +public static partial class LogConnectionExtensions +{ + [LoggerMessage( + Level = LogLevel.Warning, + Message = "Connection {name} was not found" + )] + public static partial void LogConnectionNotFound(ILogger logger, string name); + + [LoggerMessage( + Level = LogLevel.Warning, + Message = "Connection is null" + )] + public static partial void LogConnectionIsNull(ILogger logger); + +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Connections.Core/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..a33dbd6 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Extensions/ModuleExtensions.cs @@ -0,0 +1,33 @@ +using Elsa.Connections.Features; +using Elsa.Connections.Middleware; +using Elsa.Features.Services; +using Elsa.Workflows; +using Elsa.Workflows.Pipelines.ActivityExecution; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Extends with methods to install Semantic Kernel API endpoints. +/// +public static class ModuleExtensions +{ + /// + /// Installs the Semantic Kernel API feature. + /// + public static IModule UseConnections(this IModule module, Action? configure = null) + { + return module.Use(configure); + } +} + +/// +/// Adds extension methods to . +/// +public static class ConnectionMiddlewareExtensions +{ + /// + /// Installs the component in the activity execution pipeline. + /// + public static IActivityExecutionPipelineBuilder UseConnectionMiddleware(this IActivityExecutionPipelineBuilder pipelineBuilder) => pipelineBuilder.UseMiddleware(); +} diff --git a/src/modules/Elsa.Connections.Core/Features/ConnectionsFeatures.cs b/src/modules/Elsa.Connections.Core/Features/ConnectionsFeatures.cs new file mode 100644 index 0000000..2f5debf --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Features/ConnectionsFeatures.cs @@ -0,0 +1,73 @@ +using System.Reflection; +using Elsa.Connections.Attributes; +using Elsa.Connections.Contracts; +using Elsa.Connections.Filters; +using Elsa.Connections.ServiceProvider; +using Elsa.Connections.Services; +using Elsa.Connections.UIHints; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows; +using Elsa.Workflows.Pipelines.ActivityExecution; +using Elsa.Workflows.Features; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; +using Elsa.Connections.Middleware; +using Elsa.Connections.Models; + +namespace Elsa.Connections.Features; + +/// +/// A feature that installs API endpoints to interact with skilled agents. +/// +[DependsOn(typeof(WorkflowsFeature))] +[UsedImplicitly] +public class ConnectionsFeatures(IModule module) : FeatureBase(module) +{ + + /// + /// A set of connection types to make available to the system. + /// + public HashSet ConnectionTypes { get; } = []; + + /// + public override void Apply() + { + // Obfuscate Connection Properties. + Services.AddActivityStateFilter(); + // Activity property options providers. + Services.AddScoped(); + + Services.AddSingleton(); + + //UIHints + Services.AddScoped(); + + Services.Configure(options => + { + foreach (var connectionType in ConnectionTypes.Distinct()) + options.ConnectionTypes.Add(connectionType); + }); + } + public override void Configure() + { + //TODO: Need to insert the middleware just before the BackgroundActivityInvoker + //How to be sure that it is inserted before? + var workflowFeature = Module.Configure() + .WithDefaultActivityExecutionPipeline(pipeline => pipeline.Insert(3)); + base.Configure(); + } + public ConnectionsFeatures AddConnectionsFrom() + { + var connectionTypes = typeof(TMarker).Assembly.GetExportedTypes() + .Where(x => x.GetCustomAttribute() != null ) + .ToList(); + + ConnectionTypes.AddRange(connectionTypes); + + return this; + } + +} diff --git a/src/modules/Elsa.Connections.Core/Filters/PropertyAttributeFilter.cs b/src/modules/Elsa.Connections.Core/Filters/PropertyAttributeFilter.cs new file mode 100644 index 0000000..4861b1b --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Filters/PropertyAttributeFilter.cs @@ -0,0 +1,25 @@ +using Elsa.Connections.Attributes; +using Elsa.Workflows; + +namespace Elsa.Connections.Filters; + +public class PropertyAttributeFilter : ActivityStateFilterBase +{ + protected override ActivityStateFilterResult OnExecute(ActivityStateFilterContext context) + { + var inputDescriptor = context.InputDescriptor; + + if (Attribute.IsDefined(inputDescriptor.PropertyInfo, typeof(NoLogAttribute))) + { + var contextValue = context.Value.GetProperty("connectionName").GetString(); + + if (contextValue == null) + return ActivityStateFilterResult.Pass(); + + var maskedValue = $"**** see connection information for {contextValue} ****"; + return Filtered(maskedValue); + } + + return ActivityStateFilterResult.Pass(); + } +} diff --git a/src/modules/Elsa.Connections.Core/FodyWeavers.xml b/src/modules/Elsa.Connections.Core/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Connections.Core/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/Middleware/ConnectionMiddleware.cs b/src/modules/Elsa.Connections.Core/Middleware/ConnectionMiddleware.cs new file mode 100644 index 0000000..d4947db --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Middleware/ConnectionMiddleware.cs @@ -0,0 +1,70 @@ +using System.Text.Json; +using Elsa.Connections.Attributes; +using Elsa.Connections.Models; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Pipelines.ActivityExecution; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; +using Elsa.Connections.Core.Extensions; +using Elsa.Connections.Converters; +using Elsa.Connections.Persistence.Contracts; + +namespace Elsa.Connections.Middleware; + +/// +/// An activity execution middleware component that injects connection properties from Connection Name. +/// +[UsedImplicitly] +public class ConnectionMiddleware(ActivityMiddlewareDelegate next + , IConnectionStore connectionStore + ,ILogger logger) + : IActivityExecutionMiddleware +{ + private static JsonSerializerOptions? _serializerOptions; + + private static JsonSerializerOptions SerializerOptions => + _serializerOptions ??= new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }.WithConverters(new Int32Converter()); + + /// + public async ValueTask InvokeAsync(ActivityExecutionContext context) + { + var activityDescriptor = context.ActivityDescriptor; + + if (activityDescriptor.Attributes.Any(attr => attr.GetType() == typeof(ConnectionActivityAttribute))) + { + var inputDescriptors = activityDescriptor.Inputs.Where(x => x.PropertyInfo?.PropertyType.GetGenericTypeDefinition() == typeof(ConnectionProperties<>)).ToList(); + + if (inputDescriptors.Count > 0) + { + var input = inputDescriptors[0]; + var propertyType = input.PropertyInfo?.PropertyType.GetGenericArguments()[0]; + + dynamic inputValue = input.ValueGetter(context.Activity)!; + var connectionName = (string)inputValue.ConnectionName; + + if (connectionName == null) + LogConnectionExtensions.LogConnectionIsNull(logger); + else + { + // Get connection from store, if exists. + var connectionConfiguration = await connectionStore.FindAsync(new() { Name = connectionName }); + if (connectionConfiguration != null) + { + dynamic deserializedJson = connectionConfiguration.ConnectionConfiguration.Deserialize(propertyType, SerializerOptions)!; + + inputValue.Properties = deserializedJson; + input.ValueSetter(context.Activity, inputValue); + } + else + LogConnectionExtensions.LogConnectionNotFound(logger, connectionName); + } + } + } + + await next(context); + } +} diff --git a/src/modules/Elsa.Connections.Core/Models/ConnectionOptions.cs b/src/modules/Elsa.Connections.Core/Models/ConnectionOptions.cs new file mode 100644 index 0000000..e691443 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Models/ConnectionOptions.cs @@ -0,0 +1,9 @@ +namespace Elsa.Connections.Models; + +public class ConnectionOptions +{ + /// + /// A collection of connection types that are available to the system. + /// + public HashSet ConnectionTypes { get; set; } = new(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/ServiceProvider/ConnectionOptionsProvider.cs b/src/modules/Elsa.Connections.Core/ServiceProvider/ConnectionOptionsProvider.cs new file mode 100644 index 0000000..cf6e6a0 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/ServiceProvider/ConnectionOptionsProvider.cs @@ -0,0 +1,34 @@ +using System.Reflection; +using Elsa.Connections.Attributes; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Workflows.UIHints.Dropdown; + +namespace Elsa.Connections.ServiceProvider; + +public class ConnectionOptionsProvider(IConnectionStore store) : DropDownOptionsProviderBase +{ + protected override bool RefreshOnChange => true; + + public new async ValueTask> GetUIPropertiesAsync(PropertyInfo propertyInfo, object? context, CancellationToken cancellationToken = default) + { + var options = await base.GetUIPropertiesAsync(propertyInfo, context, cancellationToken); + options.Add("Refresh", true); + return options; + } + + protected override async ValueTask> GetItemsAsync(PropertyInfo propertyInfo, object? context, CancellationToken cancellationToken) + { + var connection = new List(); + var connectionType = propertyInfo.GetCustomAttribute()?.Type; + + if (connectionType == null) + return connection; + + var connections = await store.FindManyAsync(new() { Type = connectionType.ToString() }, cancellationToken); + + foreach(var conn in connections) + connection.Add(new(conn.Name, conn.Name)); + + return connection; + } +} diff --git a/src/modules/Elsa.Connections.Core/Services/ConnectionRegistry.cs b/src/modules/Elsa.Connections.Core/Services/ConnectionRegistry.cs new file mode 100644 index 0000000..9c56c59 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/Services/ConnectionRegistry.cs @@ -0,0 +1,72 @@ +using System.Collections.Concurrent; +using System.Reflection; +using Elsa.Connections.Attributes; +using Elsa.Connections.Contracts; +using Elsa.Connections.Models; +using Elsa.Workflows; +using Elsa.Workflows.Models; +using Microsoft.Extensions.Options; + +namespace Elsa.Connections.Services; + +public class ConnectionRegistry(IOptions options, IActivityDescriber describer) : IConnectionDescriptorRegistry +{ + private readonly ConcurrentDictionary _connectionDescriptors = new(); + private readonly ConnectionOptions _options = options.Value; + + public void Add(Type connectionType, ConnectionDescriptor connectionDescriptor) + { + var descriptor = DescribeConnection(connectionType); + + _connectionDescriptors.TryAdd(connectionType, descriptor); + } + + public IEnumerable ListAll() + { + foreach (var connectionType in _options.ConnectionTypes) + yield return DescribeConnection(connectionType); + } + + public void Remove(Type connectionType, ActivityDescriptor descriptor) + { + throw new NotImplementedException(); + } + + public Type? Get(string type) + { + return _options.ConnectionTypes.FirstOrDefault(c => c.ToString() == type); + } + + public async Task> GetConnectionDescriptorAsync(string activityType, CancellationToken cancellationToken = default) + { + var propertyType = Get(activityType); + + if (propertyType == null) + return []; + + var connectionInputProperty = describer.GetInputProperties(propertyType); + var connectionInputDescriptor = await DescribeInputPropertiesAsync(connectionInputProperty, cancellationToken); + + return connectionInputDescriptor; + } + + private async Task> DescribeInputPropertiesAsync(IEnumerable properties, CancellationToken cancellationToken = default) + { + return await Task.WhenAll(properties.Select(async x => await describer.DescribeInputPropertyAsync(x, cancellationToken))); + } + + private ConnectionDescriptor DescribeConnection(Type connectionType) + { + var connectionAttribute = connectionType.GetCustomAttribute(); + + if (connectionAttribute == null) + throw new ArgumentNullException($"{connectionType} is not a valid connection, make sure [ConnectionPropertyAttribute] is set "); + + return new( + connectionType.ToString(), + connectionAttribute.Description, + connectionAttribute.Namespace, + connectionAttribute.DisplayName + ); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Core/UIHints/ConnectionDropDownUIHintHandler.cs b/src/modules/Elsa.Connections.Core/UIHints/ConnectionDropDownUIHintHandler.cs new file mode 100644 index 0000000..060ad75 --- /dev/null +++ b/src/modules/Elsa.Connections.Core/UIHints/ConnectionDropDownUIHintHandler.cs @@ -0,0 +1,21 @@ +using System.Reflection; +using Elsa.Workflows; +using Elsa.Workflows.UIHints; +using Elsa.Workflows.UIHints.Dropdown; + +namespace Elsa.Connections.UIHints; + +/// +/// UIHint Handler that use DropDown for Connection Property +/// +public class ConnectionDropDownUIHintHandler : IUIHintHandler +{ + /// + public string UIHint => $"connection-{InputUIHints.DropDown}"; + + /// + public ValueTask> GetPropertyUIHandlersAsync(PropertyInfo propertyInfo, CancellationToken cancellationToken) + { + return new([typeof(StaticDropDownOptionsProvider)]); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Models/ConnectionDescriptor.cs b/src/modules/Elsa.Connections.Models/ConnectionDescriptor.cs new file mode 100644 index 0000000..0d2c3ba --- /dev/null +++ b/src/modules/Elsa.Connections.Models/ConnectionDescriptor.cs @@ -0,0 +1,3 @@ +namespace Elsa.Connections.Models; + +public record ConnectionDescriptor(string Type, string? Description, string? Namespace, string? ProviderName); diff --git a/src/modules/Elsa.Connections.Models/ConnectionInputModel.cs b/src/modules/Elsa.Connections.Models/ConnectionInputModel.cs new file mode 100644 index 0000000..a7f7b78 --- /dev/null +++ b/src/modules/Elsa.Connections.Models/ConnectionInputModel.cs @@ -0,0 +1,27 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Nodes; + +namespace Elsa.Connections.Models; + +public class ConnectionInputModel +{ + /// + /// The Name of the Connection + /// + [Required] public string Name { get; set; } = null!; + + /// + /// The Description of the Connection + /// + public string? Description { get; set; } + + /// + /// The Configuration of the Connection in a Json Format + /// + public JsonObject ConnectionConfiguration { get; set; } = new(); + + /// + /// The Connection Type Name + /// + [Required] public string ConnectionType { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Models/ConnectionModel.cs b/src/modules/Elsa.Connections.Models/ConnectionModel.cs new file mode 100644 index 0000000..cf08912 --- /dev/null +++ b/src/modules/Elsa.Connections.Models/ConnectionModel.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations; + +namespace Elsa.Connections.Models; + +public class ConnectionModel : ConnectionInputModel +{ + /// + /// The Id of the Connection + /// + [Required] public string Id { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Models/ConnectionProperties.cs b/src/modules/Elsa.Connections.Models/ConnectionProperties.cs new file mode 100644 index 0000000..548b882 --- /dev/null +++ b/src/modules/Elsa.Connections.Models/ConnectionProperties.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace Elsa.Connections.Models; + +public class ConnectionProperties where T : class, new() +{ + /// + /// Creates a new instance of the class. + /// + [JsonConstructor] + public ConnectionProperties() + { + } + + public string? ConnectionName { get; set; } + + [JsonIgnore] + public T Properties { get; set; } = new(); +} + diff --git a/src/modules/Elsa.Connections.Models/Elsa.Connections.Models.csproj b/src/modules/Elsa.Connections.Models/Elsa.Connections.Models.csproj new file mode 100644 index 0000000..8146d6d --- /dev/null +++ b/src/modules/Elsa.Connections.Models/Elsa.Connections.Models.csproj @@ -0,0 +1,9 @@ + + + + Provides models that can be shared between the API and API clients + elsa module connections api + Elsa.Connections + + + diff --git a/src/modules/Elsa.Connections.Models/FodyWeavers.xml b/src/modules/Elsa.Connections.Models/FodyWeavers.xml new file mode 100644 index 0000000..bf65762 --- /dev/null +++ b/src/modules/Elsa.Connections.Models/FodyWeavers.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs new file mode 100644 index 0000000..cd4fca5 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs @@ -0,0 +1,15 @@ +using Elsa.EntityFrameworkCore.Abstractions; +using Elsa.EntityFrameworkCore.Extensions; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite; + +[UsedImplicitly] +public class SqliteConnectionDbContextFactory : DesignTimeDbContextFactoryBase +{ + protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) + { + builder.UseElsaSqlite(GetType().Assembly, connectionString); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.csproj b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.csproj new file mode 100644 index 0000000..18520c0 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.csproj @@ -0,0 +1,19 @@ + + + + Provides an EF Core migrations for SQLite for the Connection Persistence module. + elsa module persistence efcore entity framework core sqlite + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250212220543_V3_3.Designer.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250212220543_V3_3.Designer.cs new file mode 100644 index 0000000..97cedc3 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250212220543_V3_3.Designer.cs @@ -0,0 +1,60 @@ +// +using Elsa.Connections.Persistence.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.Migrations +{ + [DbContext(typeof(ConnectionDbContext))] + [Migration("20250212220543_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Connections.Persistence.Entities.ConnectionDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ConnectionConfiguration") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ConnectionType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_ConnectionDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ConnectionDefinition_TenantId"); + + b.ToTable("ConnectionDefinitions", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250212220543_V3_3.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250212220543_V3_3.cs new file mode 100644 index 0000000..fd498f9 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250212220543_V3_3.cs @@ -0,0 +1,62 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.Migrations +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "ConnectionDefinitions", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + Description = table.Column(type: "TEXT", nullable: true), + ConnectionConfiguration = table.Column(type: "TEXT", nullable: false), + ConnectionType = table.Column(type: "TEXT", nullable: false), + TenantId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ConnectionDefinitions", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_ConnectionDefinition_Name", + schema: _schema.Schema, + table: "ConnectionDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_ConnectionDefinition_TenantId", + schema: _schema.Schema, + table: "ConnectionDefinitions", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ConnectionDefinitions", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/ConnectionDbContextModelSnapshot.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/ConnectionDbContextModelSnapshot.cs new file mode 100644 index 0000000..cdad248 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/Migrations/ConnectionDbContextModelSnapshot.cs @@ -0,0 +1,57 @@ +// +using Elsa.Connections.Persistence.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite.Migrations +{ + [DbContext(typeof(ConnectionDbContext))] + partial class ConnectionDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Connections.Persistence.Entities.ConnectionDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ConnectionConfiguration") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ConnectionType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_ConnectionDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ConnectionDefinition_TenantId"); + + b.ToTable("ConnectionDefinitions", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs new file mode 100644 index 0000000..9a38e37 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using Elsa.Connections.Persistence.EntityFrameworkCore; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to configure EF Core to use Sqlite. +/// +public static class ConnectionsSqliteProvidersExtensions +{ + private static Assembly Assembly => typeof(ConnectionsSqliteProvidersExtensions).Assembly; + + /// + /// Configures the feature to use Sqlite. + /// + public static EFCoreConnectionPersistenceFeature UseSqlite(this EFCoreConnectionPersistenceFeature feature, string? connectionString = null, ElsaDbContextOptions? options = null) + { + feature.UseSqlite(Assembly, connectionString, options); + return feature; + } + + public static EFCoreConnectionPersistenceFeature UseSqlite(this EFCoreConnectionPersistenceFeature feature, Func connectionStringFunc, ElsaDbContextOptions? options = null) + { + feature.UseSqlite(Assembly, connectionStringFunc, options); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/efcore-3.3.sh b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/efcore-3.3.sh new file mode 100644 index 0000000..e5eb428 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore.Sqlite/efcore-3.3.sh @@ -0,0 +1 @@ +ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_3 -c ConnectionDbContext -o Migrations" \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Configurations.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Configurations.cs new file mode 100644 index 0000000..5635aac --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Configurations.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Elsa.Connections.Models; +using Elsa.Connections.Persistence.Entities; +using Elsa.EntityFrameworkCore.Extensions; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.Connections.Persistence.EntityFrameworkCore; +public class Configurations : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.Property(x => x.ConnectionConfiguration).HasJsonValueConversion(); + builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(ConnectionDefinition)}_{nameof(ConnectionDefinition.Name)}"); + builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(ConnectionDefinition)}_{nameof(ConnectionDefinition.TenantId)}"); + + } +} diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/DbContext.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/DbContext.cs new file mode 100644 index 0000000..72b7c45 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/DbContext.cs @@ -0,0 +1,34 @@ +using Elsa.Connections.Models; +using Elsa.EntityFrameworkCore; +using Elsa.Connections.Persistence.Entities; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.Connections.Persistence.EntityFrameworkCore; + + +/// +/// Db Context for the Connection Module +/// +[UsedImplicitly] +public class ConnectionDbContext : ElsaDbContextBase +{ + /// + public ConnectionDbContext(DbContextOptions options, IServiceProvider serviceProvider) + : base(options, serviceProvider) + { + } + + /// + /// The Connection DB set. + /// + public DbSet ConnectionDefinitions { get; set; } = default!; + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var configuration = new Configurations(); + modelBuilder.ApplyConfiguration(configuration); + base.OnModelCreating(modelBuilder); + } +} diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/EFCoreConnectionStore.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/EFCoreConnectionStore.cs new file mode 100644 index 0000000..bfe4a62 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/EFCoreConnectionStore.cs @@ -0,0 +1,54 @@ +using Elsa.Connections.Persistence.Contracts; +using Elsa.Connections.Persistence.Entities; +using Elsa.Connections.Persistence.Filters; +using Elsa.EntityFrameworkCore; +using JetBrains.Annotations; + +namespace Elsa.Connections.Persistence.EntityFrameworkCore; + +/// +/// An EF Core implementation of . +/// +[UsedImplicitly] +public class EFCoreConnectionStore(EntityStore store) : IConnectionStore +{ + public Task AddAsync(ConnectionDefinition entity, CancellationToken cancellationToken = default) + { + return store.AddAsync(entity, cancellationToken); + } + + public Task UpdateAsync(ConnectionDefinition entity, CancellationToken cancellationToken = default) + { + return store.UpdateAsync(entity, cancellationToken); + } + + public Task GetAsync(string id, CancellationToken cancellationToken = default) + { + var filter = new ConnectionDefinitionFilter + { + Id = id + }; + + return FindAsync(filter, cancellationToken); + } + + public Task FindAsync(ConnectionDefinitionFilter filter, CancellationToken cancellationToken = default) + { + return store.FindAsync(filter.Apply, cancellationToken); + } + + public Task> ListAsync(CancellationToken cancellationToken = default) + { + return store.ListAsync(cancellationToken); + } + + public Task DeleteAsync(ConnectionDefinition entity, CancellationToken cancellationToken = default) + { + return store.DeleteAsync(entity, cancellationToken); + } + + public Task> FindManyAsync(ConnectionDefinitionFilter filter, CancellationToken cancellationToken = default) + { + return store.QueryAsync(filter.Apply, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Elsa.Connections.Persistence.EntityFrameworkCore.csproj b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Elsa.Connections.Persistence.EntityFrameworkCore.csproj new file mode 100644 index 0000000..305c470 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Elsa.Connections.Persistence.EntityFrameworkCore.csproj @@ -0,0 +1,13 @@ + + + + Provides an Entity Framework Core provider for the persistence layer of the Connection module + elsa connection persistence efcore entity framework core + + + + + + + + diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Extensions.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Extensions.cs new file mode 100644 index 0000000..718e644 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Extensions.cs @@ -0,0 +1,22 @@ +using Elsa.Connections.Persistence.Features; +using Elsa.Connections.Persistence.EntityFrameworkCore; +using JetBrains.Annotations; + +// ReSharper disable once CheckNamespace +namespace Elsa.Agents; + +/// +/// Provides extensions to the feature. +/// +[PublicAPI] +public static class Extensions +{ + /// + /// Configures the to use EF Core persistence providers. + /// + public static ConnectionPersistenceFeature UseEntityFrameworkCore(this ConnectionPersistenceFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Feature.cs b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Feature.cs new file mode 100644 index 0000000..6ebaa70 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/Feature.cs @@ -0,0 +1,34 @@ +using Elsa.Connections.Persistence.Entities; +using Elsa.Connections.Persistence.Features; +using Elsa.EntityFrameworkCore; +using Elsa.EntityFrameworkCore.EntityHandlers; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Connections.Persistence.EntityFrameworkCore; + +/// +/// Configures the default workflow runtime to use EF Core persistence providers. +/// +[DependsOn(typeof(ConnectionPersistenceFeature))] +public class EFCoreConnectionPersistenceFeature(IModule module) : PersistenceFeatureBase(module) +{ + /// + public override void Configure() + { + Module.Configure(feature => + { + feature + .UseConnectionStore(sp=> sp.GetRequiredService()) + ; + }); + } + + /// + public override void Apply() + { + base.Apply(); + AddEntityStore(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/FodyWeavers.xml b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence/Contracts/IConnectionStore.cs b/src/modules/Elsa.Connections.Persistence/Contracts/IConnectionStore.cs new file mode 100644 index 0000000..069bc5d --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Contracts/IConnectionStore.cs @@ -0,0 +1,42 @@ +using Elsa.Connections.Persistence.Filters; +using Elsa.Connections.Persistence.Entities; + +namespace Elsa.Connections.Persistence.Contracts; + +public interface IConnectionStore +{ + /// + /// Get The Connection from the Store + /// + public Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// + /// Get All Connections from the store + /// + public Task> ListAsync(CancellationToken cancellationToken = default); + + /// + /// Get All connection using Filter + /// + public Task FindAsync(ConnectionDefinitionFilter filter, CancellationToken cancellationToken = default); + + /// + /// Get All connection using Filter + /// + public Task> FindManyAsync(ConnectionDefinitionFilter filter, CancellationToken cancellationToken = default); + + /// + /// Add a new entity to the store + /// + public Task AddAsync(ConnectionDefinition entity, CancellationToken cancellationToken = default); + + /// + /// Update the entity to the store + /// + public Task UpdateAsync(ConnectionDefinition entity, CancellationToken cancellationToken = default); + + /// + /// Delete the entity from the store + /// + public Task DeleteAsync(ConnectionDefinition entity, CancellationToken cancellationToken = default); +} diff --git a/src/modules/Elsa.Connections.Persistence/Elsa.Connections.Persistence.csproj b/src/modules/Elsa.Connections.Persistence/Elsa.Connections.Persistence.csproj new file mode 100644 index 0000000..6d2082e --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Elsa.Connections.Persistence.csproj @@ -0,0 +1,13 @@ + + + + Provides Connections persistence services + elsa module connections persistence + + + + + + + + diff --git a/src/modules/Elsa.Connections.Persistence/Entities/ConnectionDefinition.cs b/src/modules/Elsa.Connections.Persistence/Entities/ConnectionDefinition.cs new file mode 100644 index 0000000..0252e75 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Entities/ConnectionDefinition.cs @@ -0,0 +1,27 @@ +using System.Text.Json.Nodes; +using Elsa.Common.Entities; + +namespace Elsa.Connections.Persistence.Entities; + +public class ConnectionDefinition : Entity +{ + /// + /// The Name of the Connection + /// + public string Name { get; set; } = null!; + + /// + /// The Description of the Connection + /// + public string? Description { get; set; } + + /// + /// The Configuration of the Connection in a Json Format + /// + public JsonObject ConnectionConfiguration { get; set; } = new(); + + /// + /// The Connection Type Name + /// + public string ConnectionType { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence/Extensions/ConnectionPersistenceExtensions.cs b/src/modules/Elsa.Connections.Persistence/Extensions/ConnectionPersistenceExtensions.cs new file mode 100644 index 0000000..1689759 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Extensions/ConnectionPersistenceExtensions.cs @@ -0,0 +1,19 @@ +using Elsa.Connections.Persistence.Features; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Extends with methods to use Connection Persistence Feature. +/// +public static class ConnectionPersistenceExtensions +{ + /// + /// Installs the persistence feature for the Connection module. + /// + public static IModule UseConnectionPersistence(this IModule module, Action? configure = null) + { + return module.Use(configure); + } +} diff --git a/src/modules/Elsa.Connections.Persistence/Features/ConnectionPersistenceFeature.cs b/src/modules/Elsa.Connections.Persistence/Features/ConnectionPersistenceFeature.cs new file mode 100644 index 0000000..a8b55c7 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Features/ConnectionPersistenceFeature.cs @@ -0,0 +1,28 @@ +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Connections.Persistence.Services; +using Elsa.Connections.Persistence.Entities; + +namespace Elsa.Connections.Persistence.Features; + +public class ConnectionPersistenceFeature(IModule module) : FeatureBase(module) +{ + private Func _connectionStoreFactory = sp => sp.GetRequiredService(); + + public ConnectionPersistenceFeature UseConnectionStore(Func factory) + { + _connectionStoreFactory = factory; + return this; + } + + public override void Apply() + { + Services.AddScoped(_connectionStoreFactory); + + Services + .AddMemoryStore(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence/Filters/ConnectionDefinitionFilter.cs b/src/modules/Elsa.Connections.Persistence/Filters/ConnectionDefinitionFilter.cs new file mode 100644 index 0000000..c842073 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Filters/ConnectionDefinitionFilter.cs @@ -0,0 +1,19 @@ +using Elsa.Connections.Persistence.Entities; + +namespace Elsa.Connections.Persistence.Filters; +public class ConnectionDefinitionFilter +{ + public string? Id { get; set; } + public string? Name { get; set; } + public string? NotId { get; set; } + public string? Type { get; set; } + + public IQueryable Apply(IQueryable queryable) + { + if(!string.IsNullOrEmpty(Id)) queryable = queryable.Where(x=>x.Id == Id); + if (!string.IsNullOrWhiteSpace(NotId)) queryable = queryable.Where(x => x.Id != NotId); + if (!string.IsNullOrWhiteSpace(Name)) queryable = queryable.Where(x=> x.Name == Name); + if(!string.IsNullOrWhiteSpace(Type)) queryable = queryable.Where(x=>x.ConnectionType == Type); + return queryable; + } +} diff --git a/src/modules/Elsa.Connections.Persistence/FodyWeavers.xml b/src/modules/Elsa.Connections.Persistence/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Connections.Persistence/Services/InMemoryConnectionStore.cs b/src/modules/Elsa.Connections.Persistence/Services/InMemoryConnectionStore.cs new file mode 100644 index 0000000..4961b17 --- /dev/null +++ b/src/modules/Elsa.Connections.Persistence/Services/InMemoryConnectionStore.cs @@ -0,0 +1,52 @@ +using Elsa.Common.Services; +using Elsa.Connections.Persistence.Contracts; +using Elsa.Connections.Persistence.Filters; +using Elsa.Connections.Persistence.Entities; +using JetBrains.Annotations; + +namespace Elsa.Connections.Persistence.Services; + +[UsedImplicitly] +public class InMemoryConnectionStore(MemoryStore memoryStore) : IConnectionStore +{ + public Task AddAsync(ConnectionDefinition model, CancellationToken cancellationToken = default) + { + memoryStore.Add(model, x => x.Id); + return Task.CompletedTask; + } + + public Task DeleteAsync(ConnectionDefinition model, CancellationToken cancellationToken = default) + { + memoryStore.Delete(model.Id); + return Task.CompletedTask; + } + + public Task GetAsync(string id, CancellationToken cancellationToken = default) + { + var result = memoryStore.Find(c => c.Id == id); + return Task.FromResult(result); + } + + public Task> ListAsync(CancellationToken cancellationToken) + { + var results = memoryStore.List(); + return Task.FromResult(results); + } + public Task FindAsync(ConnectionDefinitionFilter filter, CancellationToken cancellationToken = default) + { + var entity = memoryStore.Query(filter.Apply).FirstOrDefault(); + return Task.FromResult(entity); + } + + public Task> FindManyAsync(ConnectionDefinitionFilter filter, CancellationToken cancellationToken = default) + { + var entities = memoryStore.Query(filter.Apply); + return Task.FromResult(entities); + } + + public Task UpdateAsync(ConnectionDefinition model, CancellationToken cancellationToken = default) + { + memoryStore.Update(model, x => x.Id); + return Task.CompletedTask; + } +} diff --git a/src/modules/Elsa.Dapper.Migrations/Elsa.Dapper.Migrations.csproj b/src/modules/Elsa.Dapper.Migrations/Elsa.Dapper.Migrations.csproj new file mode 100644 index 0000000..16c1b56 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Elsa.Dapper.Migrations.csproj @@ -0,0 +1,14 @@ + + + + + Provides Dapper migrations for Dapper perisstence providers from various modules. + + elsa persistence dapper migrations + + + + + + + diff --git a/src/modules/Elsa.Dapper.Migrations/FodyWeavers.xml b/src/modules/Elsa.Dapper.Migrations/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Identity/Initial.cs b/src/modules/Elsa.Dapper.Migrations/Identity/Initial.cs new file mode 100644 index 0000000..aea88ea --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Identity/Initial.cs @@ -0,0 +1,48 @@ +using FluentMigrator; +using JetBrains.Annotations; +using static System.Int32; + +namespace Elsa.Dapper.Migrations.Identity; + +/// +[Migration(30001, "Elsa:Identity:V3.0")] +[PublicAPI] +public class Initial : Migration +{ + /// + public override void Up() + { + Create + .Table("Users") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("Name").AsString().NotNullable() + .WithColumn("HashedPassword").AsString().NotNullable() + .WithColumn("HashedPasswordSalt").AsString().NotNullable() + .WithColumn("Roles").AsString(MaxValue).NotNullable(); + + Create + .Table("Roles") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("Name").AsString().NotNullable() + .WithColumn("Permissions").AsString(MaxValue).NotNullable(); + + Create + .Table("Applications") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("ClientId").AsString().NotNullable() + .WithColumn("HashedClientSecret").AsString().NotNullable() + .WithColumn("HashedClientSecretSalt").AsString().NotNullable() + .WithColumn("Name").AsString().NotNullable() + .WithColumn("HashedApiKey").AsString().NotNullable() + .WithColumn("HashedApiKeySalt").AsString().NotNullable() + .WithColumn("Roles").AsString(MaxValue).NotNullable(); + } + + /// + public override void Down() + { + Delete.Table("Users"); + Delete.Table("Roles"); + Delete.Table("Applications"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Identity/V3_1.cs b/src/modules/Elsa.Dapper.Migrations/Identity/V3_1.cs new file mode 100644 index 0000000..75d8ab1 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Identity/V3_1.cs @@ -0,0 +1,24 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Identity; + +/// +[Migration(30002, "Elsa:Identity:V3.1")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_1 : Migration +{ + /// + public override void Up() + { + // No changes + } + + /// + public override void Down() + { + // No changes + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Identity/V3_2.cs b/src/modules/Elsa.Dapper.Migrations/Identity/V3_2.cs new file mode 100644 index 0000000..3342605 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Identity/V3_2.cs @@ -0,0 +1,22 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Identity; + +/// +[Migration(30003, "Elsa:Identity:V3.2")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_2 : Migration +{ + /// + public override void Up() + { + } + + /// + public override void Down() + { + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Identity/V3_3.cs b/src/modules/Elsa.Dapper.Migrations/Identity/V3_3.cs new file mode 100644 index 0000000..fe79d8f --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Identity/V3_3.cs @@ -0,0 +1,28 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Identity; + +/// +[Migration(30004, "Elsa:Identity:V3.3")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_3 : Migration +{ + /// + public override void Up() + { + Alter.Table("Users").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("Roles").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("Applications").AddColumn("TenantId").AsString().Nullable(); + } + + /// + public override void Down() + { + Delete.Column("TenantId").FromTable("Users"); + Delete.Column("TenantId").FromTable("Roles"); + Delete.Column("TenantId").FromTable("Applications"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Management/Initial.cs b/src/modules/Elsa.Dapper.Migrations/Management/Initial.cs new file mode 100644 index 0000000..4fbad50 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Management/Initial.cs @@ -0,0 +1,99 @@ +using FluentMigrator; +using JetBrains.Annotations; +using static System.Int32; + +namespace Elsa.Dapper.Migrations.Management; + +/// +[Migration(10001, "Elsa:Management:V3.0")] +[PublicAPI] +public class Initial : Migration +{ + /// + public override void Up() + { + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("WorkflowDefinitions") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("DefinitionId").AsString().NotNullable() + .WithColumn("Name").AsString().Nullable() + .WithColumn("ToolVersion").AsString().Nullable() + .WithColumn("Description").AsString(MaxValue).Nullable() + .WithColumn("ProviderName").AsString().Nullable() + .WithColumn("MaterializerName").AsString().NotNullable() + .WithColumn("MaterializerContext").AsString(MaxValue).Nullable() + .WithColumn("Props").AsString(MaxValue).NotNullable() + .WithColumn("UsableAsActivity").AsBoolean().Nullable() + .WithColumn("StringData").AsString(MaxValue).Nullable() + .WithColumn("BinaryData").AsBinary(MaxValue).Nullable() + .WithColumn("CreatedAt").AsDateTimeOffset().NotNullable() + .WithColumn("Version").AsInt32().NotNullable() + .WithColumn("IsLatest").AsBoolean().NotNullable() + .WithColumn("IsReadonly").AsBoolean().NotNullable() + .WithColumn("IsPublished").AsBoolean().NotNullable(); + + + IfDatabase("Sqlite") + .Create + .Table("WorkflowDefinitions") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("DefinitionId").AsString().NotNullable() + .WithColumn("Name").AsString().Nullable() + .WithColumn("ToolVersion").AsString().Nullable() + .WithColumn("Description").AsString(MaxValue).Nullable() + .WithColumn("ProviderName").AsString().Nullable() + .WithColumn("MaterializerName").AsString().NotNullable() + .WithColumn("MaterializerContext").AsString().Nullable() + .WithColumn("Props").AsString(MaxValue).NotNullable() + .WithColumn("UsableAsActivity").AsBoolean().Nullable() + .WithColumn("StringData").AsString(MaxValue).Nullable() + .WithColumn("BinaryData").AsBinary(MaxValue).Nullable() + .WithColumn("CreatedAt").AsDateTime2().NotNullable() + .WithColumn("Version").AsInt32().NotNullable() + .WithColumn("IsLatest").AsBoolean().NotNullable() + .WithColumn("IsReadonly").AsBoolean().NotNullable() + .WithColumn("IsPublished").AsBoolean().NotNullable(); + + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("WorkflowInstances") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("DefinitionId").AsString().NotNullable() + .WithColumn("DefinitionVersionId").AsString().NotNullable() + .WithColumn("Version").AsInt32().NotNullable() + .WithColumn("WorkflowState").AsString(MaxValue).NotNullable() + .WithColumn("Status").AsString().NotNullable() + .WithColumn("SubStatus").AsString().NotNullable() + .WithColumn("CorrelationId").AsString().Nullable() + .WithColumn("Name").AsString().Nullable() + .WithColumn("IncidentCount").AsInt32().NotNullable() + .WithColumn("CreatedAt").AsDateTimeOffset().NotNullable() + .WithColumn("UpdatedAt").AsDateTimeOffset().Nullable() + .WithColumn("FinishedAt").AsDateTimeOffset().Nullable(); + + IfDatabase("Sqlite") + .Create + .Table("WorkflowInstances") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("DefinitionId").AsString().NotNullable() + .WithColumn("DefinitionVersionId").AsString().NotNullable() + .WithColumn("Version").AsInt32().NotNullable() + .WithColumn("WorkflowState").AsString(MaxValue).NotNullable() + .WithColumn("Status").AsString().NotNullable() + .WithColumn("SubStatus").AsString().NotNullable() + .WithColumn("CorrelationId").AsString().Nullable() + .WithColumn("Name").AsString().Nullable() + .WithColumn("IncidentCount").AsInt32().NotNullable() + .WithColumn("CreatedAt").AsDateTime2().NotNullable() + .WithColumn("UpdatedAt").AsDateTime2().Nullable() + .WithColumn("FinishedAt").AsDateTime2().Nullable(); + } + + /// + public override void Down() + { + Delete.Table("WorkflowDefinitions"); + Delete.Table("WorkflowInstances"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Management/V3_1.cs b/src/modules/Elsa.Dapper.Migrations/Management/V3_1.cs new file mode 100644 index 0000000..bac4582 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Management/V3_1.cs @@ -0,0 +1,31 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Management; + +/// +[Migration(10002, "Elsa:Management:V3.1")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_1 : Migration +{ + /// + public override void Up() + { + Alter + .Table("WorkflowDefinitions") + .AddColumn("IsSystem").AsBoolean().Nullable(); + + Alter + .Table("WorkflowInstances") + .AddColumn("IsSystem").AsBoolean().Nullable(); + } + + /// + public override void Down() + { + Delete.Column("IsSystem").FromTable("WorkflowInstances"); + Delete.Column("IsSystem").FromTable("WorkflowDefinitions"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Management/V3_2.cs b/src/modules/Elsa.Dapper.Migrations/Management/V3_2.cs new file mode 100644 index 0000000..1d9270a --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Management/V3_2.cs @@ -0,0 +1,22 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Management; + +/// +[Migration(10003, "Elsa:Management:V3.2")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_2 : Migration +{ + /// + public override void Up() + { + } + + /// + public override void Down() + { + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Management/V3_3.cs b/src/modules/Elsa.Dapper.Migrations/Management/V3_3.cs new file mode 100644 index 0000000..ae13177 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Management/V3_3.cs @@ -0,0 +1,26 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Management; + +/// +[Migration(10004, "Elsa:Management:V3.3")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_3: Migration +{ + /// + public override void Up() + { + Alter.Table("WorkflowDefinitions").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("WorkflowInstances").AddColumn("TenantId").AsString().Nullable(); + } + + /// + public override void Down() + { + Delete.Column("TenantId").FromTable("WorkflowDefinitions"); + Delete.Column("TenantId").FromTable("WorkflowInstances"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Management/V3_4.cs b/src/modules/Elsa.Dapper.Migrations/Management/V3_4.cs new file mode 100644 index 0000000..f4d8cff --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Management/V3_4.cs @@ -0,0 +1,24 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Management; + +/// +[Migration(10005, "Elsa:Management:V3.4")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_4: Migration +{ + /// + public override void Up() + { + Alter.Table("WorkflowInstances").AddColumn("IsExecuting").AsBoolean().NotNullable().WithDefaultValue(false); + } + + /// + public override void Down() + { + Delete.Column("IsExecuting").FromTable("WorkflowInstances"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Readme.md b/src/modules/Elsa.Dapper.Migrations/Readme.md new file mode 100644 index 0000000..a5e0686 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Readme.md @@ -0,0 +1,14 @@ +# Migration versioning + +Each migration's version number is prefixed with a numerical value that represents a given module. +The following table shows the mapping between module and version prefix: + +| Module | Version prefix | +|------------------------|-----------------| +| Management | 1000 | +| Runtime | 2000 | +| Identity | 3000 | + +After the prefix comes the version of the migration. For example, the "Initial" migration is at version 1. +For the "Management" module, the "Initial" migration is at version 10001. +Similarly, the "Initial" migration for the "Runtime" module is at version 20001. diff --git a/src/modules/Elsa.Dapper.Migrations/Runtime/Initial.cs b/src/modules/Elsa.Dapper.Migrations/Runtime/Initial.cs new file mode 100644 index 0000000..866b4f6 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Runtime/Initial.cs @@ -0,0 +1,183 @@ +using FluentMigrator; +using JetBrains.Annotations; +using static System.Int32; + +namespace Elsa.Dapper.Migrations.Runtime; + +/// +[Migration(20001, "Elsa:Runtime:V3.0")] +[PublicAPI] +public class Initial : Migration +{ + private const int MaxNodeIdColumnLength = 2048; + /// + public override void Up() + { + Create + .Table("Triggers") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("WorkflowDefinitionId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowDefinitionVersionId").AsString().NotNullable().Indexed() + .WithColumn("Name").AsString().NotNullable().Indexed() + .WithColumn("ActivityId").AsString().NotNullable().Indexed() + .WithColumn("Hash").AsString().Nullable().Indexed() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable(); + + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("Bookmarks") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("ActivityTypeName").AsString().NotNullable().Indexed() + .WithColumn("WorkflowInstanceId").AsString().NotNullable().Indexed() + .WithColumn("CorrelationId").AsString().Nullable().Indexed() + .WithColumn("ActivityInstanceId").AsString().NotNullable().Indexed() + .WithColumn("Hash").AsString().Nullable().Indexed() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable() + .WithColumn("SerializedMetadata").AsString(MaxValue).Nullable() + .WithColumn("CreatedAt").AsDateTimeOffset().NotNullable().Indexed(); + + IfDatabase("Sqlite") + .Create + .Table("Bookmarks") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("ActivityTypeName").AsString().NotNullable().Indexed() + .WithColumn("WorkflowInstanceId").AsString().NotNullable().Indexed() + .WithColumn("CorrelationId").AsString().Nullable().Indexed() + .WithColumn("ActivityInstanceId").AsString().NotNullable().Indexed() + .WithColumn("Hash").AsString().Nullable().Indexed() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable() + .WithColumn("SerializedMetadata").AsString(MaxValue).Nullable() + .WithColumn("CreatedAt").AsDateTime2().NotNullable().Indexed(); + + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("WorkflowExecutionLogRecords") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("WorkflowDefinitionId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowDefinitionVersionId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowInstanceId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowVersion").AsInt32().NotNullable().Indexed() + .WithColumn("ActivityInstanceId").AsString().NotNullable().Indexed() + .WithColumn("ParentActivityInstanceId").AsString().Nullable().Indexed() + .WithColumn("ActivityId").AsString().NotNullable().Indexed() + .WithColumn("ActivityType").AsString().NotNullable().Indexed() + .WithColumn("ActivityTypeVersion").AsInt32().NotNullable().Indexed() + .WithColumn("ActivityName").AsString().Nullable().Indexed() + .WithColumn("ActivityNodeId").AsString(MaxNodeIdColumnLength).NotNullable().Indexed() + .WithColumn("EventName").AsString().Nullable().Indexed() + .WithColumn("Message").AsString(MaxValue).Nullable() + .WithColumn("Source").AsString().Nullable() + .WithColumn("SerializedActivityState").AsString(MaxValue).Nullable() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable() + .WithColumn("SerializedException").AsString(MaxValue).Nullable() + .WithColumn("Timestamp").AsDateTimeOffset().NotNullable().Indexed() + .WithColumn("Sequence").AsInt64().NotNullable().Indexed() + ; + + IfDatabase("Sqlite") + .Create + .Table("WorkflowExecutionLogRecords") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("WorkflowDefinitionId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowDefinitionVersionId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowInstanceId").AsString().NotNullable().Indexed() + .WithColumn("WorkflowVersion").AsInt32().NotNullable().Indexed() + .WithColumn("ActivityInstanceId").AsString().NotNullable().Indexed() + .WithColumn("ParentActivityInstanceId").AsString().Nullable().Indexed() + .WithColumn("ActivityId").AsString().NotNullable().Indexed() + .WithColumn("ActivityType").AsString().NotNullable().Indexed() + .WithColumn("ActivityTypeVersion").AsInt32().NotNullable().Indexed() + .WithColumn("ActivityName").AsString().Nullable().Indexed() + .WithColumn("ActivityNodeId").AsString(MaxNodeIdColumnLength).NotNullable().Indexed() + .WithColumn("EventName").AsString().Nullable().Indexed() + .WithColumn("Message").AsString(MaxValue).Nullable() + .WithColumn("Source").AsString().Nullable() + .WithColumn("SerializedActivityState").AsString(MaxValue).Nullable() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable() + .WithColumn("SerializedOutputs").AsString(MaxValue).Nullable() + .WithColumn("SerializedException").AsString(MaxValue).Nullable() + .WithColumn("Timestamp").AsDateTime2().NotNullable().Indexed() + .WithColumn("Sequence").AsInt64().NotNullable().Indexed() + ; + + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("ActivityExecutionRecords") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("WorkflowInstanceId").AsString().NotNullable().Indexed() + .WithColumn("ActivityId").AsString().NotNullable().Indexed() + .WithColumn("ActivityNodeId").AsString(MaxNodeIdColumnLength).NotNullable().Indexed() + .WithColumn("ActivityType").AsString().NotNullable().Indexed() + .WithColumn("ActivityTypeVersion").AsInt32().NotNullable().Indexed() + .WithColumn("ActivityName").AsString().Nullable().Indexed() + .WithColumn("SerializedActivityState").AsString(MaxValue).Nullable() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable() + .WithColumn("SerializedOutputs").AsString(MaxValue).Nullable() + .WithColumn("SerializedException").AsString(MaxValue).Nullable() + .WithColumn("StartedAt").AsDateTimeOffset().NotNullable().Indexed() + .WithColumn("CompletedAt").AsDateTimeOffset().Nullable().Indexed() + .WithColumn("HasBookmarks").AsBoolean().NotNullable().Indexed() + .WithColumn("Status").AsString().NotNullable().Indexed() + ; + + IfDatabase("Sqlite") + .Create + .Table("ActivityExecutionRecords") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("WorkflowInstanceId").AsString().NotNullable().Indexed() + .WithColumn("ActivityId").AsString().NotNullable().Indexed() + .WithColumn("ActivityNodeId").AsString(MaxNodeIdColumnLength).NotNullable().Indexed() + .WithColumn("ActivityType").AsString().NotNullable().Indexed() + .WithColumn("ActivityTypeVersion").AsInt32().NotNullable().Indexed() + .WithColumn("ActivityName").AsString().Nullable().Indexed() + .WithColumn("SerializedActivityState").AsString(MaxValue).Nullable() + .WithColumn("SerializedPayload").AsString(MaxValue).Nullable() + .WithColumn("SerializedOutputs").AsString(MaxValue).Nullable() + .WithColumn("SerializedException").AsString(MaxValue).Nullable() + .WithColumn("StartedAt").AsDateTime2().NotNullable().Indexed() + .WithColumn("CompletedAt").AsDateTime2().Nullable().Indexed() + .WithColumn("HasBookmarks").AsBoolean().NotNullable().Indexed() + .WithColumn("Status").AsString().NotNullable().Indexed() + ; + + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("WorkflowInboxMessages") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("ActivityTypeName").AsString().NotNullable().Indexed() + .WithColumn("WorkflowInstanceId").AsString().Nullable().Indexed() + .WithColumn("ActivityInstanceId").AsString().Nullable().Indexed() + .WithColumn("CorrelationId").AsString().Nullable().Indexed() + .WithColumn("Hash").AsString().NotNullable().Indexed() + .WithColumn("SerializedBookmarkPayload").AsString(MaxValue) + .WithColumn("SerializedInput").AsString(MaxValue).Nullable() + .WithColumn("CreatedAt").AsDateTimeOffset().Indexed() + .WithColumn("ExpiresAt").AsDateTimeOffset().Indexed() + ; + + IfDatabase("Sqlite") + .Create + .Table("WorkflowInboxMessages") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("ActivityTypeName").AsString().NotNullable().Indexed() + .WithColumn("WorkflowInstanceId").AsString().Nullable().Indexed() + .WithColumn("ActivityInstanceId").AsString().Nullable().Indexed() + .WithColumn("CorrelationId").AsString().Nullable().Indexed() + .WithColumn("Hash").AsString().NotNullable().Indexed() + .WithColumn("SerializedBookmarkPayload").AsString(MaxValue) + .WithColumn("SerializedInput").AsString(MaxValue).Nullable() + .WithColumn("CreatedAt").AsDateTime2().Indexed() + .WithColumn("ExpiresAt").AsDateTime2().Indexed() + ; + } + + /// + public override void Down() + { + Delete.Table("Triggers"); + Delete.Table("Bookmarks"); + Delete.Table("WorkflowExecutionLogRecords"); + Delete.Table("ActivityExecutionRecords"); + Delete.Table("WorkflowInboxMessages"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Runtime/V3_1.cs b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_1.cs new file mode 100644 index 0000000..ff74e9f --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_1.cs @@ -0,0 +1,29 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; +using static System.Int32; + +namespace Elsa.Dapper.Migrations.Runtime; + +/// +[Migration(20002, "Elsa:Runtime:V3.1")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_1 : Migration +{ + /// + public override void Up() + { + Create + .Table("KeyValuePairs") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("Key").AsString().Indexed() + .WithColumn("Value").AsString(MaxValue).NotNullable(); + } + + /// + public override void Down() + { + Delete.Table("KeyValuePairs"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Runtime/V3_2.cs b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_2.cs new file mode 100644 index 0000000..f550c62 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_2.cs @@ -0,0 +1,22 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Migrations.Runtime; + +/// +[Migration(20003, "Elsa:Runtime:V3.2")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_2 : Migration +{ + /// + public override void Up() + { + } + + /// + public override void Down() + { + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Runtime/V3_3.cs b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_3.cs new file mode 100644 index 0000000..9e61204 --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_3.cs @@ -0,0 +1,65 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; +using static System.Int32; + +namespace Elsa.Dapper.Migrations.Runtime; + +/// +[Migration(20004, "Elsa:Runtime:V3.3")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_3 : Migration +{ + /// + public override void Up() + { + Alter.Table("Triggers").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("Bookmarks").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("WorkflowExecutionLogRecords").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("ActivityExecutionRecords").AddColumn("TenantId").AsString().Nullable(); + Alter.Table("ActivityExecutionRecords").AddColumn("SerializedProperties").AsString(MaxValue).Nullable(); + Alter.Table("KeyValuePairs").AddColumn("TenantId").AsString().Nullable(); + + IfDatabase("SqlServer", "Oracle", "MySql", "Postgres") + .Create + .Table("BookmarkQueueItems") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("TenantId").AsString().Nullable() + .WithColumn("WorkflowInstanceId").AsString().Nullable() + .WithColumn("CorrelationId").AsString().Nullable() + .WithColumn("BookmarkId").AsString().Nullable() + .WithColumn("StimulusHash").AsString().Nullable() + .WithColumn("ActivityInstanceId").AsString().Nullable() + .WithColumn("ActivityTypeName").AsString().Nullable() + .WithColumn("CreatedAt").AsDateTimeOffset().NotNullable() + ; + + IfDatabase("Sqlite") + .Create + .Table("BookmarkQueueItems") + .WithColumn("Id").AsString().PrimaryKey() + .WithColumn("TenantId").AsString().Nullable() + .WithColumn("WorkflowInstanceId").AsString().Nullable() + .WithColumn("CorrelationId").AsString().Nullable() + .WithColumn("BookmarkId").AsString().Nullable() + .WithColumn("StimulusHash").AsString().Nullable() + .WithColumn("ActivityInstanceId").AsString().Nullable() + .WithColumn("ActivityTypeName").AsString().Nullable() + .WithColumn("CreatedAt").AsDateTime2().NotNullable() + ; + } + + /// + public override void Down() + { + Delete.Column("TenantId").FromTable("Triggers"); + Delete.Column("TenantId").FromTable("Bookmarks"); + Delete.Column("TenantId").FromTable("WorkflowExecutionLogRecords"); + Delete.Column("TenantId").FromTable("ActivityExecutionRecords"); + Delete.Column("SerializedProperties").FromTable("ActivityExecutionRecords"); + Delete.Column("TenantId").FromTable("KeyValuePairs"); + Rename.Column("Id").OnTable("KeyValuePairs").To("Key"); + Delete.Table("BookmarkQueueItems"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper.Migrations/Runtime/V3_5.cs b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_5.cs new file mode 100644 index 0000000..620b82e --- /dev/null +++ b/src/modules/Elsa.Dapper.Migrations/Runtime/V3_5.cs @@ -0,0 +1,27 @@ +using System.Diagnostics.CodeAnalysis; +using FluentMigrator; +using JetBrains.Annotations; +using static System.Int32; + +namespace Elsa.Dapper.Migrations.Runtime; + +/// +[Migration(20006, "Elsa:Runtime:V3.5")] +[PublicAPI] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class V3_5 : Migration +{ + /// + public override void Up() + { + Alter.Table("ActivityExecutionRecords").AddColumn("AggregateFaultCount").AsInt32().NotNullable().WithDefault(0); + Alter.Table("ActivityExecutionRecords").AddColumn("Metadata").AsString().Nullable(); + } + + /// + public override void Down() + { + Delete.Column("AggregateFaultCount").FromTable("ActivityExecutionRecords"); + Delete.Column("Metadata").FromTable("ActivityExecutionRecords"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Abstractions/SqlDialectBase.cs b/src/modules/Elsa.Dapper/Abstractions/SqlDialectBase.cs new file mode 100644 index 0000000..2588562 --- /dev/null +++ b/src/modules/Elsa.Dapper/Abstractions/SqlDialectBase.cs @@ -0,0 +1,113 @@ +using System.Text; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Dapper.Contracts; + +namespace Elsa.Dapper.Abstractions; + +/// +/// Provides a base implementation of , where the dialect defaults to SQLite. +/// +public abstract class SqlDialectBase : ISqlDialect +{ + /// + public virtual string From(string table) => From(table, "*"); + + /// + public virtual string From(string table, params string[] fields) + { + var fieldList = string.Join(", ", fields); + return $"select {fieldList} from {table} where 1=1"; + } + + /// + public string Delete(string table) => $"delete from {table} where 1=1"; + + /// + public string Count(string table) => Count("*", table); + + /// + public string Count(string fieldExpression, string table) => $"select COUNT({fieldExpression}) from {table} where 1=1"; + + /// + public virtual string And(string field) => $"and {field} = @{field}"; + + /// + public virtual string AndNot(string field) => $"and not {field} = @{field}"; + + /// + public virtual string And(string field, string[] fieldParamNames) => $"and {field} in ({string.Join(", ", fieldParamNames)})"; + + /// + public virtual string AndNot(string field, string[] fieldParamNames) => $"and {field} not in ({string.Join(", ", fieldParamNames)})"; + + /// + public string IsNull(string field) => $"and {field} is null"; + + /// + public string IsNotNull(string field) => $"and {field} is not null"; + + /// + public virtual string OrderBy(string field, OrderDirection direction) + { + var directionString = direction == OrderDirection.Ascending ? "asc" : "desc"; + return $"order by {field} {directionString}"; + } + + /// + public virtual string Skip(int count) => $"offset {count} rows"; + + /// + public virtual string Take(int count) => $"fetch next {count} rows only"; + + /// + public virtual string Page(PageArgs pageArgs) + { + var sb = new StringBuilder(); + + // Attention: the order is important here for SQL Server (OFFSET before FETCH NEXT). + if (pageArgs.Offset != null) + sb.AppendLine(Skip(pageArgs.Offset.Value)); + + if (pageArgs.Limit != null) + sb.AppendLine(Take(pageArgs.Limit.Value)); + + return sb.ToString(); + } + + /// + public string Insert(string table, string[] fields, Func? getParamName = default) + { + getParamName ??= x => x; + var fieldList = string.Join(", ", fields); + var fieldParamNames = fields.Select(x => $"@{getParamName(x)}"); + var fieldParamList = string.Join(", ", fieldParamNames); + return $"INSERT INTO {table} ({fieldList}) VALUES ({fieldParamList});"; + } + + public string Update(string table, string primaryKeyField, string[] fields, Func? getParamName = default) + { + getParamName ??= x => x; + var fieldList = string.Join(", ", fields.Select(x => $"{x} = @{getParamName(x)}")); + return $"UPDATE {table} SET {fieldList} WHERE {primaryKeyField} = @{getParamName(primaryKeyField)};"; + } + + /// + public virtual string Upsert(string table, string primaryKeyField, string[] fields, Func? getParamName = default) + { + getParamName ??= x => x; + var fieldList = string.Join(", ", fields); + var fieldParamNames = fields.Select(x => $"@{getParamName(x)}"); + var fieldParamList = string.Join(", ", fieldParamNames); + return @$" + MERGE INTO {table} WITH (HOLDLOCK) AS Target + USING (VALUES (@{getParamName(primaryKeyField)}, {fieldParamList})) + AS Source ({primaryKeyField}, {fieldList}) + ON Target.{primaryKeyField} = Source.{primaryKeyField} + WHEN MATCHED THEN + UPDATE SET {string.Join(", ", fields.Select(x => $"{x} = Source.{x}"))} + WHEN NOT MATCHED THEN + INSERT ({primaryKeyField}, {fieldList}) + VALUES (Source.{primaryKeyField}, {string.Join(", ", fields.Select(x => $"Source.{x}"))});"; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Contracts/IDbConnectionProvider.cs b/src/modules/Elsa.Dapper/Contracts/IDbConnectionProvider.cs new file mode 100644 index 0000000..8beb78f --- /dev/null +++ b/src/modules/Elsa.Dapper/Contracts/IDbConnectionProvider.cs @@ -0,0 +1,26 @@ +using System.Data; + +namespace Elsa.Dapper.Contracts; + +/// +/// Provides a connection to the database and corresponding SQL dialect. +/// +public interface IDbConnectionProvider +{ + /// + /// Gets the connection string. + /// + /// The connection string. + string GetConnectionString(); + + /// + /// Gets a connection to the database. + /// + /// A connection to the database. + IDbConnection GetConnection(); + + /// + /// Gets the SQL dialect. + /// + ISqlDialect Dialect { get; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Contracts/ISqlDialect.cs b/src/modules/Elsa.Dapper/Contracts/ISqlDialect.cs new file mode 100644 index 0000000..526b9ce --- /dev/null +++ b/src/modules/Elsa.Dapper/Contracts/ISqlDialect.cs @@ -0,0 +1,135 @@ +using Elsa.Common.Entities; +using Elsa.Common.Models; + +namespace Elsa.Dapper.Contracts; + +/// +/// Represents a SQL dialect. +/// +public interface ISqlDialect +{ + /// + /// Returns a SELECT FROM query. + /// + /// The table to query. + string From(string table); + + /// + /// Returns a SELECT FROM query. + /// + /// The table to query. + /// The fields to query. + string From(string table, params string[] fields); + + /// + /// Returns a DELETE FROM query. + /// + /// The table to query. + string Delete(string table); + + /// + /// Returns a SELECT count(*) FROM query. + /// + /// The table to query. + string Count(string table); + + /// + /// Returns a SELECT count(fieldExpression) FROM query. + /// + /// The field expression to query. Examples: "*", "distinct FieldName" + /// The table to query. + string Count(string fieldExpression, string table); + + /// + /// Returns an AND clause. + /// + /// The field to query. + string And(string field); + + /// + /// Returns a negating AND clause. + /// + /// The field to query. + string AndNot(string field); + + /// + /// Returns an AND field IN () clause. + /// + /// The field to query. + /// The parameter names to query. + string And(string field, string[] fieldParamNames); + + /// + /// Returns a negating AND field IN () clause. + /// + /// The field to query. + /// The parameter names to query. + string AndNot(string field, string[] fieldParamNames); + + /// + /// Returns an IS NULL clause. + /// + /// The field to query. + string IsNull(string field); + + /// + /// Returns an IS NOT NULL clause. + /// + /// The field to query. + string IsNotNull(string field); + + /// + /// Returns an ORDER BY clause. + /// + /// The field to order by. + /// The direction to order by. + string OrderBy(string field, OrderDirection direction); + + /// + /// Returns an OFFSET clause. + /// + /// The number of records to skip. + string Skip(int count); + + /// + /// Returns a LIMIT clause. + /// + /// The number of records to take. + string Take(int count); + + /// + /// Adds pagination to a SQL query. + /// + /// The pagination arguments. + /// The modified SQL query with pagination. + string Page(PageArgs pageArgs); + + /// + /// Builds an INSERT query. + /// + /// The table. + /// The fields. + /// An optional function to get the parameter name. + /// The query. + string Insert(string table, string[] fields, Func? getParamName = default); + + /// + /// Builds an UPDATE query. + /// + /// The table. + /// The primary key field. + /// The fields. + /// An optional function to get the parameter name. + /// The query. + string Update(string table, string primaryKeyField, string[] fields, Func? getParamName = default); + + /// + /// Builds an UPSERT query. + /// + /// The table. + /// The primary key field. + /// The fields. + /// An optional function to get the parameter name. + /// The query. + string Upsert(string table, string primaryKeyField, string[] fields, Func? getParamName = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Dialects/PostgreSqlDialect.cs b/src/modules/Elsa.Dapper/Dialects/PostgreSqlDialect.cs new file mode 100644 index 0000000..2bce3e2 --- /dev/null +++ b/src/modules/Elsa.Dapper/Dialects/PostgreSqlDialect.cs @@ -0,0 +1,20 @@ +using Elsa.Dapper.Abstractions; + +namespace Elsa.Dapper.Dialects; + +/// +/// Represents a SQL Server dialect. +/// +public class PostgreSqlDialect : SqlDialectBase +{ + /// + public override string Upsert(string table, string primaryKeyField, string[] fields, Func? getParamName = default) + { + getParamName ??= x => x; + var fieldList = string.Join(", ", fields); + var fieldParamNames = fields.Select(x => $"@{getParamName(x)}"); + var fieldParamList = string.Join(", ", fieldParamNames); + var updateList = string.Join(", ", fields.Select(x => $"{x} = @{getParamName(x)}")); + return $"insert into {table} ({fieldList}) values ({fieldParamList}) on conflict({primaryKeyField}) do update set {updateList}"; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Dialects/SqlServerDialect.cs b/src/modules/Elsa.Dapper/Dialects/SqlServerDialect.cs new file mode 100644 index 0000000..f0733c7 --- /dev/null +++ b/src/modules/Elsa.Dapper/Dialects/SqlServerDialect.cs @@ -0,0 +1,10 @@ +using Elsa.Dapper.Abstractions; + +namespace Elsa.Dapper.Dialects; + +/// +/// Represents a SQL Server dialect. +/// +public class SqlServerDialect : SqlDialectBase +{ +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Dialects/SqliteDialect.cs b/src/modules/Elsa.Dapper/Dialects/SqliteDialect.cs new file mode 100644 index 0000000..f852ec2 --- /dev/null +++ b/src/modules/Elsa.Dapper/Dialects/SqliteDialect.cs @@ -0,0 +1,41 @@ +using System.Text; +using Elsa.Common.Models; +using Elsa.Dapper.Abstractions; + +namespace Elsa.Dapper.Dialects; + +/// +/// Represents a SQLite dialect. +/// +public class SqliteDialect : SqlDialectBase +{ + /// + public override string Skip(int count) => $"offset {count}"; + + /// + public override string Take(int count) => $"limit {count}"; + + /// + public override string Page(PageArgs pageArgs) + { + var sb = new StringBuilder(); + + // Attention: the order is important here for SQLite (LIMIT must come before OFFSET). + if (pageArgs.Limit != null) + sb.AppendLine(Take(pageArgs.Limit.Value)); + + if (pageArgs.Offset != null) + sb.AppendLine(Skip(pageArgs.Offset.Value)); + + return sb.ToString(); + } + + public override string Upsert(string table, string primaryKeyField, string[] fields, Func? getParamName = default) + { + getParamName ??= x => x; + var fieldList = string.Join(", ", fields); + var fieldParamNames = fields.Select(x => $"@{getParamName(x)}"); + var fieldParamList = string.Join(", ", fieldParamNames); + return $"INSERT OR REPLACE INTO {table} ({primaryKeyField}, {fieldList}) VALUES (@{getParamName(primaryKeyField)}, {fieldParamList});"; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Elsa.Dapper.csproj b/src/modules/Elsa.Dapper/Elsa.Dapper.csproj new file mode 100644 index 0000000..6bdc0ea --- /dev/null +++ b/src/modules/Elsa.Dapper/Elsa.Dapper.csproj @@ -0,0 +1,30 @@ + + + + + Provides Dapper implementations of various persistence abstractions from various modules. + + elsa module persistence dapper + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Elsa.Dapper/Extensions/DapperFeatureExtensions.cs b/src/modules/Elsa.Dapper/Extensions/DapperFeatureExtensions.cs new file mode 100644 index 0000000..fe8cbde --- /dev/null +++ b/src/modules/Elsa.Dapper/Extensions/DapperFeatureExtensions.cs @@ -0,0 +1,21 @@ +using Elsa.Dapper.Features; +using Elsa.Features.Services; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Extensions; + +/// +/// Provides extensions to add the Dapper feature. +/// +[PublicAPI] +public static class DapperFeatureExtensions +{ + /// + /// Adds the Dapper migrations feature. + /// + public static IModule UseDapper(this IModule module, Action? configure = default) + { + module.Configure(configure); + return module; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Extensions/DapperMigrationsFeatureExtensions.cs b/src/modules/Elsa.Dapper/Extensions/DapperMigrationsFeatureExtensions.cs new file mode 100644 index 0000000..cf1c275 --- /dev/null +++ b/src/modules/Elsa.Dapper/Extensions/DapperMigrationsFeatureExtensions.cs @@ -0,0 +1,26 @@ +using Elsa.Dapper.Features; +using FluentMigrator.Runner; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Extensions; + +/// +/// Provides extensions to add the Dapper migrations feature. +/// +[PublicAPI] +public static class DapperMigrationsFeatureExtensions +{ + /// + /// Adds the Dapper migrations feature. + /// + public static DapperFeature UseMigrations(this DapperFeature feature, Action configure) => feature.UseMigrations(migrations => migrations.ConfigureRunner = configure); + + /// + /// Adds the Dapper migrations feature. + /// + public static DapperFeature UseMigrations(this DapperFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Extensions/DbConnectionProviderExtensions.cs b/src/modules/Elsa.Dapper/Extensions/DbConnectionProviderExtensions.cs new file mode 100644 index 0000000..72ed834 --- /dev/null +++ b/src/modules/Elsa.Dapper/Extensions/DbConnectionProviderExtensions.cs @@ -0,0 +1,17 @@ +using Elsa.Dapper.Contracts; +using Elsa.Dapper.Models; + +namespace Elsa.Dapper.Extensions; + +/// +/// Provides extension methods for . +/// +public static class DbConnectionProviderExtensions +{ + /// + /// Creates a instance. + /// + /// The instance. + /// A instance. + public static ParameterizedQuery CreateQuery(this IDbConnectionProvider dbConnectionProvider) => new(dbConnectionProvider.Dialect); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Extensions/ParameterizedQueryBuilderExtensions.cs b/src/modules/Elsa.Dapper/Extensions/ParameterizedQueryBuilderExtensions.cs new file mode 100644 index 0000000..6896bab --- /dev/null +++ b/src/modules/Elsa.Dapper/Extensions/ParameterizedQueryBuilderExtensions.cs @@ -0,0 +1,469 @@ +using System.Data; +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Dapper.Models; +using Elsa.Extensions; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Extensions; + +/// +/// Provides extension methods for to build SQL queries. +/// +[PublicAPI] +public static class ParameterizedQueryBuilderExtensions +{ + /// + /// Begins a SELECT FROM query. + /// + /// The query. + /// The table. + public static ParameterizedQuery From(this ParameterizedQuery query, string table) + { + query.Sql.AppendLine(query.Dialect.From(table)); + return query; + } + + /// + /// Begins a SELECT FROM query. + /// + /// The query. + /// The table. + /// The fields. + public static ParameterizedQuery From(this ParameterizedQuery query, string table, params string[] fields) + { + query.Sql.AppendLine(query.Dialect.From(table, fields)); + return query; + } + + /// + /// Begins a SELECT FROM query. + /// + /// The query. + /// The table. + /// The fields to include based on the public properties of the specified type. + public static ParameterizedQuery From<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T>(this ParameterizedQuery query, string table) => query.From(table, typeof(T)); + + /// + /// Begins a SELECT FROM query. + /// + /// The query. + /// The table. + /// The fields to include based on the public properties of the specified type. + public static ParameterizedQuery From(this ParameterizedQuery query, string table, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] Type modelType) + { + // Create a list of fields based on the public properties of the specified type. + var fields = modelType.GetProperties().Select(x => x.Name).ToArray(); + query.Sql.AppendLine(query.Dialect.From(table, fields)); + return query; + } + + /// + /// Begins a DELETE FROM query. + /// + /// The query. + /// The table. + public static ParameterizedQuery Delete(this ParameterizedQuery query, string table) + { + query.Sql.AppendLine(query.Dialect.Delete(table)); + return query; + } + + /// + /// Begins a DELETE FROM query. + /// + /// The query. + /// The table. + /// The primary key. + /// The inner query. + public static ParameterizedQuery Delete(this ParameterizedQuery query, string table, string primaryKey, ParameterizedQuery innerQuery) + { + query.Sql.AppendLine(query.Dialect.Delete(table)); + query.Sql.AppendLine($"and {primaryKey} in ("); + query.Sql.AppendLine(innerQuery.Sql.ToString()); + query.Sql.AppendLine(")"); + return query; + } + + /// + /// Begins a SELECT COUNT(*) FROM query. + /// + /// The query. + /// The table. + public static ParameterizedQuery Count(this ParameterizedQuery query, string table) + { + query.Sql.AppendLine(query.Dialect.Count(table)); + return query; + } + + /// + /// Begins a SELECT COUNT(expression) FROM query. + /// + /// The query. + /// The expression. Examples: "*" or "DISTINCT FieldName" + /// The table. + public static ParameterizedQuery Count(this ParameterizedQuery query, string expression, string table) + { + query.Sql.AppendLine(query.Dialect.Count(expression, table)); + return query; + } + + /// + /// Appends an AND clause to the query if the value is not null. + /// + /// The query. + /// The field. + /// The value. + public static ParameterizedQuery Is(this ParameterizedQuery query, string field, object? value) + { + if (value == null) return query; + if (value is DBNull) return IsNull(query, field); + query.Sql.AppendLine(query.Dialect.And(field)); + query.Parameters.Add($"@{field}", value); + + return query; + } + + /// + /// Appends a negating AND clause to the query if the value is not null. + /// + /// The query. + /// The field. + /// The value. + public static ParameterizedQuery IsNot(this ParameterizedQuery query, string field, object? value) + { + if (value == null) return query; + if (value is DBNull) return IsNotNull(query, field); + + query.Sql.AppendLine(query.Dialect.AndNot(field)); + query.Parameters.Add($"@{field}", value); + + return query; + } + + /// + /// Appends an IS NULL clause to the query. + /// + /// The query. + /// The field. + public static ParameterizedQuery IsNull(this ParameterizedQuery query, string field) + { + query.Sql.AppendLine(query.Dialect.IsNull(field)); + return query; + } + + /// + /// Appends an IS NOT NULL clause to the query. + /// + /// The query. + /// The field. + public static ParameterizedQuery IsNotNull(this ParameterizedQuery query, string field) + { + query.Sql.AppendLine(query.Dialect.IsNotNull(field)); + return query; + } + + /// + /// Appends a search term for workflow definitions to the search. + /// + /// The query. + /// The search term. + public static ParameterizedQuery WorkflowDefinitionSearchTerm(this ParameterizedQuery query, string? searchTerm) + { + if (string.IsNullOrWhiteSpace(searchTerm)) return query; + + var searchTermLike = $"%{searchTerm}%"; + query.Sql.AppendLine("and (Name like @SearchTermLike or Description like @SearchTermLike or Id like @SearchTerm or DefinitionId like @SearchTerm)"); + query.Parameters.Add("@SearchTerm", searchTerm); + query.Parameters.Add("@SearchTermLike", searchTermLike); + return query; + } + + /// + /// Appends an AND clause to the query if the value is not null. + /// + /// The query. + /// The field. + /// The values. + public static ParameterizedQuery In(this ParameterizedQuery query, string field, IEnumerable? values) + { + var valueList = values?.ToList(); + + if (valueList == null || !valueList.Any()) return query; + + var fieldParamNames = valueList + .Select((_, index) => $"@{field}{index}") + .ToArray(); + + query.Sql.AppendLine(query.Dialect.And(field, fieldParamNames)); + + for (var i = 0; i < fieldParamNames.Length; i++) + query.Parameters.Add(fieldParamNames[i], valueList.ElementAt(i)); + + return query; + } + + /// + /// Appends a negating AND clause to the query if the value is not null. + /// + /// The query. + /// The field. + /// The values. + public static ParameterizedQuery NotIn(this ParameterizedQuery query, string field, IEnumerable? values) + { + var valueList = values?.ToList(); + + if (valueList == null || !valueList.Any()) return query; + + var fieldParamNames = valueList + .Select((_, index) => $"@{field}{index}") + .ToArray(); + + query.Sql.AppendLine(query.Dialect.AndNot(field, fieldParamNames)); + + for (var i = 0; i < fieldParamNames.Length; i++) + query.Parameters.Add(fieldParamNames[i], valueList.ElementAt(i)); + + return query; + } + + public static ParameterizedQuery StartsWith(this ParameterizedQuery query, string field, bool startsWith, string? value) + { + if (!startsWith || value == null || string.IsNullOrWhiteSpace(value)) + return query; + + var searchTermLike = $"{value}%"; + query.Sql.AppendLine($"and {field} like @SearchTermLike"); + query.Parameters.Add($"@{field}", searchTermLike); + + return query; + } + + /// + /// Appends an AND clause to the query if the value is not null. + /// + /// The query. + /// The version options. + public static ParameterizedQuery Is(this ParameterizedQuery query, VersionOptions? versionOptions) + { + if (versionOptions == null) return query; + + var sql = query.Sql; + var options = versionOptions.Value; + if (options.IsDraft) sql.AppendLine("and IsPublished = 0"); + if (options.IsLatest) sql.AppendLine("and IsLatest = 1"); + if (options.IsPublished) sql.AppendLine("and IsPublished = 1"); + if (options.IsLatestOrPublished) sql.AppendLine("and (IsLatest = 1 or IsPublished = 1)"); + if (options.IsLatestAndPublished) sql.AppendLine("and IsLatest = 1 and IsPublished = 1"); + if (options.Version > 0) + { + sql.AppendLine(query.Dialect.And("Version")); + query.Parameters.Add("@Version", options.Version); + } + + return query; + } + + /// + /// Appends an AND clause to the query if the search term is not null. + /// + /// The query. + /// The search term. + public static ParameterizedQuery AndWorkflowInstanceSearchTerm(this ParameterizedQuery query, string? searchTerm) + { + if (string.IsNullOrWhiteSpace(searchTerm)) return query; + + var searchTermLike = $"%{searchTerm}%"; + query.Sql.AppendLine("and (Name like @SearchTermLike or ID like @SearchTerm or DefinitionId like @SearchTerm or DefinitionVersionId like @SearchTerm or CorrelationId like @SearchTerm)"); + query.Parameters.Add("@SearchTerm", searchTerm); + query.Parameters.Add("@SearchTermLike", searchTermLike); + return query; + } + + /// + /// Appends an ORDER BY clause to the query. + /// + /// The query. + /// A lambda expression that selects the field to order by. + /// The order direction. + /// The type of the record. + /// The type of the field. + public static ParameterizedQuery OrderBy(this ParameterizedQuery query, Expression> keySelector, OrderDirection direction) + { + var fieldName = keySelector.GetPropertyName(); + return query.OrderBy(fieldName, direction); + } + + /// + /// Appends an ORDER BY clause to the query. + /// + /// The query. + /// The field. + /// The direction. + public static ParameterizedQuery OrderBy(this ParameterizedQuery query, string field, OrderDirection direction) + { + var directionString = direction == OrderDirection.Ascending ? "asc" : "desc"; + query.Sql.AppendLine($"order by {field} {directionString}"); + return query; + } + + /// + /// Appends an ORDER BY clause to the query. + /// + /// The query. + /// The fields by which to order. + public static ParameterizedQuery OrderBy(this ParameterizedQuery query, params OrderField[] orderFields) + { + if (!orderFields.Any()) + return query; + + var clauses = string.Join(",", orderFields.Select(x => $"{x.Field} {(x.Direction == OrderDirection.Ascending ? "asc" : "desc")}")); + query.Sql.AppendLine($"order by {clauses}"); + return query; + } + + /// + /// Appends an OFFSET clause to the query. + /// + /// The query. + /// The number of records to skip. + public static ParameterizedQuery Skip(this ParameterizedQuery query, int skip) + { + query.Sql.AppendLine(query.Dialect.Skip(skip)); + return query; + } + + /// + /// Appends a LIMIT clause to the query. + /// + /// The query. + /// The number of records to take. + public static ParameterizedQuery Take(this ParameterizedQuery query, int take) + { + query.Sql.AppendLine(query.Dialect.Take(take)); + return query; + } + + /// + /// Applies paging to the query. + /// + /// The query. + /// The page arguments. + public static ParameterizedQuery Page(this ParameterizedQuery query, PageArgs pageArgs) + { + query.Sql.AppendLine(query.Dialect.Page(pageArgs)); + return query; + } + + /// + /// Appends a statement that updates or inserts a record. + /// + /// The query. + /// The table. + /// The primary key field. + /// The record. + /// An optional function to get the parameter name. + public static ParameterizedQuery Upsert(this ParameterizedQuery query, string table, string primaryKeyField, object record, Func? getParameterName = default) + { + var fields = record.GetType().GetProperties() + .Where(x => x.CanRead && x.Name != primaryKeyField) + .Select(x => x.Name) + .ToArray(); + + getParameterName ??= x => x; + + query.Sql.AppendLine(query.Dialect.Upsert(table, primaryKeyField, fields, getParameterName)); + + var primaryKeyValue = record.GetType().GetProperty(primaryKeyField)?.GetValue(record); + query.Parameters.Add($"@{getParameterName(primaryKeyField)}", primaryKeyValue); + + var recordType = record.GetType(); + foreach (var field in fields) + { + var prop = recordType.GetProperty(field)!; + var propType = prop.PropertyType; + var value = prop.GetValue(record); + var dbType = value == null ? GetDbType(propType) : default; + query.Parameters.Add($"@{getParameterName(field)}", value, dbType); + } + + return query; + } + + /// + /// Appends a statement that inserts a record. + /// + /// The query. + /// The table. + /// The record. + /// An optional function to get the parameter name. + public static ParameterizedQuery Insert(this ParameterizedQuery query, string table, object record, Func? getParameterName = default) + { + var fields = record.GetType().GetProperties() + .Select(x => x.Name) + .ToArray(); + + getParameterName ??= x => x; + query.Sql.AppendLine(query.Dialect.Insert(table, fields, getParameterName)); + + foreach (var field in fields) + { + var value = record.GetType().GetProperty(field)?.GetValue(record); + query.Parameters.Add($"@{getParameterName(field)}", value); + } + + return query; + } + + /// + /// Appends a statement that updates a record. + /// + public static ParameterizedQuery Update(this ParameterizedQuery query, string table, object record, string primaryKeyField, Func? getParameterName = default) + { + var fields = record.GetType().GetProperties() + .Where(x => x.CanRead && x.Name != primaryKeyField) + .Select(x => x.Name) + .ToArray(); + + return Update(query, table, record, primaryKeyField, fields, getParameterName); + } + + /// + /// Constructs an UPDATE query for the specified table and applies the provided record, primaryKeyField, and specified fields. + /// + /// The query being built. + /// The name of the table to update. + /// The object containing the values to be updated. + /// The name of the primary key field to identify the record. + /// An array of field names to include in the update statement. + /// An optional function to customize parameter names for the query. + /// Returns the updated instance of . + public static ParameterizedQuery Update(this ParameterizedQuery query, string table, object record, string primaryKeyField, string[] fields, Func? getParameterName = default) + { + getParameterName ??= x => x; + query.Sql.AppendLine(query.Dialect.Update(table, primaryKeyField, fields, getParameterName)); + + var primaryKeyValue = record.GetType().GetProperty(primaryKeyField)?.GetValue(record); + query.Parameters.Add($"@{getParameterName(primaryKeyField)}", primaryKeyValue); + + var recordType = record.GetType(); + foreach (var field in fields) + { + var prop = recordType.GetProperty(field)!; + var propType = prop.PropertyType; + var value = prop.GetValue(record); + var dbType = value == null ? GetDbType(propType) : default; + query.Parameters.Add($"@{getParameterName(field)}", value, dbType); + } + + return query; + } + + private static DbType? GetDbType(Type type) + { + if (type == typeof(byte[])) return DbType.Binary; + return null; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Extensions/ParameterizedQueryExtensions.cs b/src/modules/Elsa.Dapper/Extensions/ParameterizedQueryExtensions.cs new file mode 100644 index 0000000..50b1c3b --- /dev/null +++ b/src/modules/Elsa.Dapper/Extensions/ParameterizedQueryExtensions.cs @@ -0,0 +1,84 @@ +using System.Data; +using Dapper; +using Elsa.Dapper.Models; + +namespace Elsa.Dapper.Extensions; + +/// +/// Provides extension methods for to execute queries. +/// +public static class ParameterizedQueryExtensions +{ + /// + /// Execute a query asynchronously using Task. + /// + /// The query to execute. + /// The connection to query on. + /// The transaction to use, if any. + /// The command timeout (in seconds). + /// The type of command to execute. + /// The type to return. + /// A single row of the query result. + public static async Task SingleAsync(this ParameterizedQuery query, IDbConnection connection, IDbTransaction? transaction = null, int? commandTimeout = null, CommandType? commandType = null) + { + return await connection.QuerySingleAsync(query.Sql.ToString(), query.Parameters, transaction, commandTimeout, commandType); + } + + /// + /// Execute a single-row query asynchronously using Task. + /// + /// The type to return. + /// The query to execute. + /// The connection to query on. + /// The transaction to use, if any. + /// The command timeout (in seconds). + /// The type of command to execute. + /// A single row of the query result. + public static async Task SingleOrDefaultAsync(this ParameterizedQuery query, IDbConnection connection, IDbTransaction? transaction = null, int? commandTimeout = null, CommandType? commandType = null) + { + return await connection.QuerySingleOrDefaultAsync(query.Sql.ToString(), query.Parameters, transaction, commandTimeout, commandType); + } + + /// + /// Execute a single-row query asynchronously using Task. + /// + /// The query to execute. + /// The connection to query on. + /// The transaction to use, if any. + /// The command timeout (in seconds). + /// The type of command to execute. + /// The type to return. + /// A single row of the query result. + public static async Task FirstOrDefaultAsync(this ParameterizedQuery query, IDbConnection connection, IDbTransaction? transaction = null, int? commandTimeout = null, CommandType? commandType = null) + { + return await connection.QueryFirstOrDefaultAsync(query.Sql.ToString(), query.Parameters, transaction, commandTimeout, commandType); + } + + /// + /// Execute a query asynchronously using Task. + /// + /// The query to execute. + /// The connection to query on. + /// The transaction to use, if any. + /// The command timeout (in seconds). + /// The type of command to execute. + /// The type to return. + /// A sequence of data of the supplied type. + public static async Task> QueryAsync(this ParameterizedQuery query, IDbConnection connection, IDbTransaction? transaction = null, int? commandTimeout = null, CommandType? commandType = null) + { + return await connection.QueryAsync(query.Sql.ToString(), query.Parameters, transaction, commandTimeout, commandType); + } + + /// + /// Execute a command asynchronously using Task. + /// + /// The query to execute. + /// The connection to query on. + /// The transaction to use, if any. + /// The command timeout (in seconds). + /// The type of command to execute. + public static async Task ExecuteAsync(this ParameterizedQuery query, IDbConnection connection, IDbTransaction? transaction = null, int? commandTimeout = null, CommandType? commandType = null) + { + return await connection.ExecuteAsync(query.Sql.ToString(), query.Parameters, transaction, commandTimeout, commandType); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Dapper/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..42c1185 --- /dev/null +++ b/src/modules/Elsa.Dapper/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,22 @@ +using Elsa.Common.Entities; +using Elsa.Dapper.Records; +using Elsa.Dapper.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Extensions; + +/// +/// Extension methods for to register Dapper stores. +/// +public static class ServiceCollectionExtensions +{ + /// + /// Registers a Dapper store. + /// + public static IServiceCollection AddDapperStore(this IServiceCollection services, string tableName, string primaryKey = nameof(Entity.Id)) where TStore : class where TRecord : Record + { + services.AddScoped(); + services.AddScoped(sp => ActivatorUtilities.CreateInstance>(sp, tableName, primaryKey)); + return services; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Features/DapperFeature.cs b/src/modules/Elsa.Dapper/Features/DapperFeature.cs new file mode 100644 index 0000000..a9bb0c4 --- /dev/null +++ b/src/modules/Elsa.Dapper/Features/DapperFeature.cs @@ -0,0 +1,33 @@ +using Dapper; +using Elsa.Dapper.Contracts; +using Elsa.Dapper.Services; +using Elsa.Dapper.TypeHandlers.Sqlite; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Features; + +/// +/// Configures common Dapper features. +/// +public class DapperFeature : FeatureBase +{ + /// + public DapperFeature(IModule module) : base(module) + { + // See: https://learn.microsoft.com/en-us/dotnet/standard/data/sqlite/dapper-limitations#data-types + SqlMapper.AddTypeHandler(new GuidHandler()); + } + + /// + /// Gets or sets a factory that provides an instance. + /// + public Func DbConnectionProvider { get; set; } = _ => new SqliteDbConnectionProvider(); + + /// + public override void Apply() + { + Services.AddSingleton(DbConnectionProvider); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Features/DapperMigrationsFeature.cs b/src/modules/Elsa.Dapper/Features/DapperMigrationsFeature.cs new file mode 100644 index 0000000..b04bd10 --- /dev/null +++ b/src/modules/Elsa.Dapper/Features/DapperMigrationsFeature.cs @@ -0,0 +1,49 @@ +using Elsa.Dapper.Contracts; +using Elsa.Dapper.HostedServices; +using Elsa.Dapper.Migrations.Management; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using FluentMigrator.Runner; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Features; + +/// +/// Configures migrations. +/// +public class DapperMigrationsFeature(IModule module) : FeatureBase(module) +{ + /// + /// Configures migrations to use SQLite. + /// + public DapperMigrationsFeature UseSqlite() + { + ConfigureRunner += runner => runner.AddSQLite(); + return this; + } + + /// + /// Configures migrations to use SQLite. + /// + public DapperMigrationsFeature UseSqlServer() + { + ConfigureRunner += runner => runner.AddSqlServer(); + return this; + } + + /// + /// Gets or sets a delegate to configure migrations. + /// + public Action ConfigureRunner { get; set; } = runner => runner + .WithGlobalConnectionString(sp => sp.GetRequiredService().GetConnectionString()) + .WithMigrationsIn(typeof(Initial).Assembly); + + /// + public override void Configure() + { + Services.AddFluentMigratorCore(); + Services.ConfigureRunner(ConfigureRunner); + Services.AddStartupTask(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/FodyWeavers.xml b/src/modules/Elsa.Dapper/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Dapper/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/HostedServices/RunMigrationsStartupTask.cs b/src/modules/Elsa.Dapper/HostedServices/RunMigrationsStartupTask.cs new file mode 100644 index 0000000..fa82e4e --- /dev/null +++ b/src/modules/Elsa.Dapper/HostedServices/RunMigrationsStartupTask.cs @@ -0,0 +1,18 @@ +using Elsa.Common; +using FluentMigrator.Runner; +using JetBrains.Annotations; + +namespace Elsa.Dapper.HostedServices; + +/// +/// Runs database migrations on startup. +/// +[UsedImplicitly] +public class RunMigrationsStartupTask(IMigrationRunner migrationRunner) : IStartupTask +{ + public Task ExecuteAsync(CancellationToken cancellationToken) + { + migrationRunner.MigrateUp(); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Models/OrderField.cs b/src/modules/Elsa.Dapper/Models/OrderField.cs new file mode 100644 index 0000000..a7d87ef --- /dev/null +++ b/src/modules/Elsa.Dapper/Models/OrderField.cs @@ -0,0 +1,10 @@ +using Elsa.Common.Entities; + +namespace Elsa.Dapper.Models; + +/// +/// Represents a field by which to order. +/// +/// The field. +/// The direction. +public record OrderField(string Field, OrderDirection Direction); \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Models/ParameterizedQuery.cs b/src/modules/Elsa.Dapper/Models/ParameterizedQuery.cs new file mode 100644 index 0000000..63f592a --- /dev/null +++ b/src/modules/Elsa.Dapper/Models/ParameterizedQuery.cs @@ -0,0 +1,31 @@ +using System.Text; +using Dapper; +using Elsa.Dapper.Contracts; + +namespace Elsa.Dapper.Models; + +/// +/// Represents a parameterized SQL query. +/// +public class ParameterizedQuery +{ + /// + /// Initializes a new instance of the class. + /// + /// The SQL dialect. + public ParameterizedQuery(ISqlDialect dialect) + { + Dialect = dialect; + } + + /// + /// Gets the SQL dialect. + /// + public ISqlDialect Dialect { get; } + + /// A containing the SQL query. + public StringBuilder Sql { get; } = new(); + + /// A containing the parameters. + public DynamicParameters Parameters { get; } = new(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Extensions/IdentityFeatureExtensions.cs b/src/modules/Elsa.Dapper/Modules/Identity/Extensions/IdentityFeatureExtensions.cs new file mode 100644 index 0000000..e8fdb8f --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Extensions/IdentityFeatureExtensions.cs @@ -0,0 +1,20 @@ +using Elsa.Dapper.Modules.Identity.Features; +using Elsa.Identity.Features; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extensions for +/// +public static class IdentityFeatureExtensions +{ + /// + /// Sets up the EF Core persistence provider for the User, Application and Role stores. + /// + public static IdentityFeature UseDapper(this IdentityFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Features/Feature.cs b/src/modules/Elsa.Dapper/Modules/Identity/Features/Feature.cs new file mode 100644 index 0000000..6e6d628 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Features/Feature.cs @@ -0,0 +1,47 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Features; +using Elsa.Dapper.Modules.Identity.Records; +using Elsa.Dapper.Modules.Identity.Stores; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Identity.Features; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Modules.Identity.Features; + +/// +/// Configures the feature with Dapper persistence providers. +/// +[DependsOn(typeof(IdentityFeature))] +[DependsOn(typeof(DapperFeature))] +[PublicAPI] +public class DapperIdentityPersistenceFeature : FeatureBase +{ + /// + public DapperIdentityPersistenceFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.UserStore = sp => sp.GetRequiredService(); + feature.ApplicationStore = sp => sp.GetRequiredService(); + feature.RoleStore = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + + Services.AddDapperStore("Users"); + Services.AddDapperStore("Applications"); + Services.AddDapperStore("Roles"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Records/ApplicationRecord.cs b/src/modules/Elsa.Dapper/Modules/Identity/Records/ApplicationRecord.cs new file mode 100644 index 0000000..2a60ce2 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Records/ApplicationRecord.cs @@ -0,0 +1,14 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Identity.Records; + +internal class ApplicationRecord : Record +{ + public string ClientId { get; set; } = default!; + public string HashedClientSecret { get; set; } = default!; + public string HashedClientSecretSalt { get; set; } = default!; + public string Name { get; set; } = default!; + public string HashedApiKey { get; set; } = default!; + public string HashedApiKeySalt { get; set; } = default!; + public string Roles { get; set; } = default!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Records/RoleRecord.cs b/src/modules/Elsa.Dapper/Modules/Identity/Records/RoleRecord.cs new file mode 100644 index 0000000..a1f9122 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Records/RoleRecord.cs @@ -0,0 +1,9 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Identity.Records; + +internal class RoleRecord : Record +{ + public string Name { get; set; } = default!; + public string Permissions { get; set; } = default!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Records/UserRecord.cs b/src/modules/Elsa.Dapper/Modules/Identity/Records/UserRecord.cs new file mode 100644 index 0000000..4438bcf --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Records/UserRecord.cs @@ -0,0 +1,11 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Identity.Records; + +internal class UserRecord : Record +{ + public string Name { get; set; } = default!; + public string HashedPassword { get; set; } = default!; + public string HashedPasswordSalt { get; set; } = default!; + public string Roles { get; set; } = default!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Stores/ApplicationStore.cs b/src/modules/Elsa.Dapper/Modules/Identity/Stores/ApplicationStore.cs new file mode 100644 index 0000000..f63d4db --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Stores/ApplicationStore.cs @@ -0,0 +1,76 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Identity.Records; +using Elsa.Dapper.Services; +using Elsa.Identity.Contracts; +using Elsa.Identity.Entities; +using Elsa.Identity.Models; + +namespace Elsa.Dapper.Modules.Identity.Stores; + +/// +/// A Dapper implementation of . +/// +internal class DapperApplicationStore(Store store) : IApplicationStore +{ + /// + public async Task SaveAsync(Application application, CancellationToken cancellationToken = default) + { + var record = Map(application); + await store.SaveAsync(record, cancellationToken); + } + + /// + public async Task DeleteAsync(ApplicationFilter filter, CancellationToken cancellationToken = default) + { + await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + /// + public async Task FindAsync(ApplicationFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(query => ApplyFilter(query, filter), cancellationToken); + return record == null ? null : Map(record); + } + + private void ApplyFilter(ParameterizedQuery query, ApplicationFilter filter) + { + query + .Is(nameof(ApplicationRecord.Id), filter.Id) + .Is(nameof(ApplicationRecord.ClientId), filter.ClientId) + .Is(nameof(ApplicationRecord.Name), filter.Name) + ; + } + + private ApplicationRecord Map(Application source) + { + return new() + { + Id = source.Id, + ClientId = source.ClientId, + HashedClientSecret = source.HashedClientSecret, + HashedClientSecretSalt = source.HashedClientSecretSalt, + Name = source.Name, + HashedApiKey = source.HashedApiKey, + HashedApiKeySalt = source.HashedApiKeySalt, + Roles = string.Join(',', source.Roles), + TenantId = source.TenantId + }; + } + + private Application Map(ApplicationRecord source) + { + return new() + { + Id = source.Id, + ClientId = source.ClientId, + HashedClientSecret = source.HashedClientSecret, + HashedClientSecretSalt = source.HashedClientSecretSalt, + Name = source.Name, + HashedApiKey = source.HashedApiKey, + HashedApiKeySalt = source.HashedApiKeySalt, + Roles = source.Roles.Split(',', StringSplitOptions.RemoveEmptyEntries), + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Stores/RoleStore.cs b/src/modules/Elsa.Dapper/Modules/Identity/Stores/RoleStore.cs new file mode 100644 index 0000000..4787bd4 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Stores/RoleStore.cs @@ -0,0 +1,80 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Identity.Records; +using Elsa.Dapper.Services; +using Elsa.Identity.Contracts; +using Elsa.Identity.Entities; +using Elsa.Identity.Models; +using Open.Linq.AsyncExtensions; + +namespace Elsa.Dapper.Modules.Identity.Stores; + +/// +/// A Dapper implementation of . +/// +internal class DapperRoleStore(Store store) : IRoleStore +{ + /// + public async Task SaveAsync(Role application, CancellationToken cancellationToken = default) + { + var record = Map(application); + await store.SaveAsync(record, cancellationToken); + } + + /// + public async Task AddAsync(Role role, CancellationToken cancellationToken = default) + { + var record = Map(role); + await store.AddAsync(record, cancellationToken); + } + + /// + public async Task DeleteAsync(RoleFilter filter, CancellationToken cancellationToken = default) + { + await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + /// + public async Task FindAsync(RoleFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record == null ? null : Map(record); + } + + /// + public async Task> FindManyAsync(RoleFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(queryable => ApplyFilter(queryable, filter), cancellationToken).ToList(); + return records.Select(Map); + } + + private void ApplyFilter(ParameterizedQuery query, RoleFilter filter) + { + query + .Is(nameof(RoleRecord.Id), filter.Id) + .In(nameof(RoleRecord.Name), filter.Ids) + ; + } + + private RoleRecord Map(Role source) + { + return new() + { + Id = source.Id, + Name = source.Name, + Permissions = string.Join(',', source.Permissions), + TenantId = source.TenantId + }; + } + + private Role Map(RoleRecord source) + { + return new() + { + Id = source.Id, + Name = source.Name, + Permissions = source.Permissions.Split(',', StringSplitOptions.RemoveEmptyEntries), + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Identity/Stores/UserStore.cs b/src/modules/Elsa.Dapper/Modules/Identity/Stores/UserStore.cs new file mode 100644 index 0000000..23a13c4 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Identity/Stores/UserStore.cs @@ -0,0 +1,69 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Identity.Records; +using Elsa.Dapper.Services; +using Elsa.Identity.Contracts; +using Elsa.Identity.Entities; +using Elsa.Identity.Models; + +namespace Elsa.Dapper.Modules.Identity.Stores; + +/// +/// A Dapper implementation of . +/// +internal class DapperUserStore(Store store) : IUserStore +{ + /// + public async Task SaveAsync(User user, CancellationToken cancellationToken = default) + { + var record = Map(user); + await store.SaveAsync(record, cancellationToken); + } + + /// + public async Task DeleteAsync(UserFilter filter, CancellationToken cancellationToken = default) + { + await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + /// + public async Task FindAsync(UserFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record == null ? null : Map(record); + } + + private static void ApplyFilter(ParameterizedQuery query, UserFilter filter) + { + query + .Is(nameof(UserRecord.Id), filter.Id) + .Is(nameof(UserRecord.Name), filter.Name) + ; + } + + private UserRecord Map(User source) + { + return new() + { + Id = source.Id, + Name = source.Name, + HashedPassword = source.HashedPassword, + HashedPasswordSalt = source.HashedPasswordSalt, + Roles = string.Join(',', source.Roles), + TenantId = source.TenantId + }; + } + + private User Map(UserRecord source) + { + return new() + { + Id = source.Id, + Name = source.Name, + HashedPassword = source.HashedPassword, + HashedPasswordSalt = source.HashedPasswordSalt, + Roles = source.Roles.Split(',', StringSplitOptions.RemoveEmptyEntries), + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Extensions/DapperWorkflowManagementFeatureExtensions.cs b/src/modules/Elsa.Dapper/Modules/Management/Extensions/DapperWorkflowManagementFeatureExtensions.cs new file mode 100644 index 0000000..2d5035f --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Extensions/DapperWorkflowManagementFeatureExtensions.cs @@ -0,0 +1,40 @@ +using Elsa.Dapper.Modules.Management.Features; +using Elsa.Workflows.Management.Features; +using JetBrains.Annotations; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extensions to various management related features. +/// +[PublicAPI] +public static class DapperWorkflowManagementFeatureExtensions +{ + /// + /// Sets up the EF Core persistence provider. + /// + public static WorkflowDefinitionsFeature UseDapper(this WorkflowDefinitionsFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } + + /// + /// Sets up the EF Core persistence provider. + /// + public static WorkflowInstancesFeature UseDapper(this WorkflowInstancesFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } + + /// + /// Sets up the Dapper persistence provider. + /// + public static WorkflowManagementFeature UseDapper(this WorkflowManagementFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowDefinitionPersistenceFeature.cs b/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowDefinitionPersistenceFeature.cs new file mode 100644 index 0000000..aed0b03 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowDefinitionPersistenceFeature.cs @@ -0,0 +1,41 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Features; +using Elsa.Dapper.Modules.Management.Records; +using Elsa.Dapper.Modules.Management.Stores; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows.Management.Features; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Modules.Management.Features; + +/// +/// Configures the feature with an Entity Framework Core persistence provider. +/// +[DependsOn(typeof(WorkflowManagementFeature))] +[DependsOn(typeof(DapperFeature))] +public class DapperWorkflowDefinitionPersistenceFeature : FeatureBase +{ + /// + public DapperWorkflowDefinitionPersistenceFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.WorkflowDefinitionStore = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + + Services.AddDapperStore("WorkflowDefinitions"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowInstancePersistenceFeature.cs b/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowInstancePersistenceFeature.cs new file mode 100644 index 0000000..83ba9c7 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowInstancePersistenceFeature.cs @@ -0,0 +1,28 @@ +using Elsa.Dapper.Features; +using Elsa.Dapper.Modules.Management.Stores; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows.Management.Features; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Modules.Management.Features; + +/// +/// Configures the feature with an Entity Framework Core persistence provider. +/// +[DependsOn(typeof(WorkflowManagementFeature))] +[DependsOn(typeof(DapperFeature))] +public class DapperWorkflowInstancePersistenceFeature : FeatureBase +{ + /// + public DapperWorkflowInstancePersistenceFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + Module.Configure(feature => { feature.WorkflowInstanceStore = sp => sp.GetRequiredService(); }); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowManagementPersistenceFeature.cs b/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowManagementPersistenceFeature.cs new file mode 100644 index 0000000..fa4d4f0 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Features/DapperWorkflowManagementPersistenceFeature.cs @@ -0,0 +1,44 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Features; +using Elsa.Dapper.Modules.Management.Records; +using Elsa.Dapper.Modules.Management.Stores; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows.Management.Features; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Modules.Management.Features; + +/// +/// Configures the and features with a Dapper persistence provider. +/// +[DependsOn(typeof(WorkflowManagementFeature))] +[DependsOn(typeof(WorkflowInstancesFeature))] +[DependsOn(typeof(WorkflowDefinitionsFeature))] +[DependsOn(typeof(DapperFeature))] +[PublicAPI] +public class DapperWorkflowManagementPersistenceFeature : FeatureBase +{ + /// + public DapperWorkflowManagementPersistenceFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + Module.Configure(feature => feature.WorkflowInstanceStore = sp => sp.GetRequiredService()); + Module.Configure(feature => feature.WorkflowDefinitionStore = sp => sp.GetRequiredService()); + } + + /// + public override void Apply() + { + base.Apply(); + + Services.AddDapperStore("WorkflowInstances"); + Services.AddDapperStore("WorkflowDefinitions"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Records/WorkflowDefinitionRecord.cs b/src/modules/Elsa.Dapper/Modules/Management/Records/WorkflowDefinitionRecord.cs new file mode 100644 index 0000000..0db52eb --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Records/WorkflowDefinitionRecord.cs @@ -0,0 +1,24 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Management.Records; + +internal class WorkflowDefinitionRecord : Record +{ + public string DefinitionId { get; set; } = default!; + public string? Name { get; set; } + public string? ToolVersion { get; set; } + public string? Description { get; set; } + public string? ProviderName { get; set; } + public string MaterializerName { get; set; } = default!; + public string? MaterializerContext { get; set; } + public string Props { get; set; } = default!; + public bool? UsableAsActivity { get; set; } + public string? StringData { get; set; } + public byte[]? BinaryData { get; set; } + public DateTimeOffset CreatedAt { get; set; } + public int Version { get; set; } = 1; + public bool IsLatest { get; set; } + public bool IsPublished { get; set; } + public bool IsReadonly { get; set; } + public bool IsSystem { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Records/WorkflowInstanceRecord.cs b/src/modules/Elsa.Dapper/Modules/Management/Records/WorkflowInstanceRecord.cs new file mode 100644 index 0000000..e238668 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Records/WorkflowInstanceRecord.cs @@ -0,0 +1,21 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Management.Records; + +internal class WorkflowInstanceRecord : Record +{ + public string DefinitionId { get; set; } = null!; + public string DefinitionVersionId { get; set; } = null!; + public int Version { get; set; } + public string WorkflowState { get; set; } = null!; + public string Status { get; set; } = null!; + public string SubStatus { get; set; } = null!; + public bool IsExecuting { get; set; } + public string? CorrelationId { get; set; } + public string? Name { get; set; } + public int IncidentCount { get; set; } + public bool IsSystem { get; set; } + public DateTimeOffset CreatedAt { get; set; } + public DateTimeOffset UpdatedAt { get; set; } + public DateTimeOffset? FinishedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Stores/DapperWorkflowDefinitionStore.cs b/src/modules/Elsa.Dapper/Modules/Management/Stores/DapperWorkflowDefinitionStore.cs new file mode 100644 index 0000000..a409c0d --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Stores/DapperWorkflowDefinitionStore.cs @@ -0,0 +1,276 @@ +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Management.Records; +using Elsa.Dapper.Services; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Filters; +using Elsa.Workflows.Management.Models; +using Elsa.Workflows.Memory; +using Elsa.Workflows.Models; +using JetBrains.Annotations; +using Newtonsoft.Json; + +namespace Elsa.Dapper.Modules.Management.Stores; + +/// +/// Provides a Dapper implementation of . +/// +[UsedImplicitly] +internal class DapperWorkflowDefinitionStore(Store store, IPayloadSerializer payloadSerializer) + : IWorkflowDefinitionStore +{ + /// + public async Task FindAsync(WorkflowDefinitionFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record == null ? null : Map(record); + } + + /// + public async Task FindAsync(WorkflowDefinitionFilter filter, WorkflowDefinitionOrder order, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return record == null ? null : Map(record); + } + + /// + public async Task> FindManyAsync(WorkflowDefinitionFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await FindManyAsync( + filter, + new WorkflowDefinitionOrder(x => x.CreatedAt, OrderDirection.Ascending), + pageArgs, + cancellationToken); + } + + /// + public async Task> FindManyAsync(WorkflowDefinitionFilter filter, WorkflowDefinitionOrder order, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + var page = await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return Map(page); + } + + /// + public async Task> FindManyAsync(WorkflowDefinitionFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return Map(records).ToList(); + } + + /// + public async Task> FindManyAsync(WorkflowDefinitionFilter filter, WorkflowDefinitionOrder order, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return Map(records).ToList(); + } + + /// + public async Task> FindSummariesAsync(WorkflowDefinitionFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await FindSummariesAsync( + filter, + new WorkflowDefinitionOrder(x => x.CreatedAt, OrderDirection.Ascending), + pageArgs, + cancellationToken); + } + + /// + public async Task> FindSummariesAsync(WorkflowDefinitionFilter filter, WorkflowDefinitionOrder order, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + } + + /// + public async Task> FindSummariesAsync(WorkflowDefinitionFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return records.ToList(); + } + + /// + public async Task> FindSummariesAsync(WorkflowDefinitionFilter filter, WorkflowDefinitionOrder order, CancellationToken cancellationToken = default) + { + return await store.FindManyAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + } + + /// + public async Task FindLastVersionAsync(WorkflowDefinitionFilter filter, CancellationToken cancellationToken) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), nameof(WorkflowDefinitionRecord.Version), OrderDirection.Descending, cancellationToken); + return record == null ? null : Map(record); + } + + /// + public async Task SaveAsync(WorkflowDefinition definition, CancellationToken cancellationToken = default) + { + var record = Map(definition); + await store.SaveAsync(record, cancellationToken); + } + + /// + public async Task SaveManyAsync(IEnumerable definitions, CancellationToken cancellationToken = default) + { + var records = definitions.Select(Map).ToList(); + await store.SaveManyAsync(records, cancellationToken); + } + + /// + public async Task DeleteAsync(WorkflowDefinitionFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + /// + public async Task AnyAsync(WorkflowDefinitionFilter filter, CancellationToken cancellationToken = default) + { + return await store.AnyAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + /// + public async Task CountDistinctAsync(CancellationToken cancellationToken = default) + { + return await store.CountAsync( + filter => filter.Count($"distinct {nameof(WorkflowDefinition.DefinitionId)}", store.TableName), + cancellationToken); + } + + /// + public async Task GetIsNameUnique(string name, string? definitionId = default, CancellationToken cancellationToken = default) + { + var exists = await store.AnyAsync(query => + { + query.Is(nameof(WorkflowDefinition.Name), name); + + if (definitionId != null) + query.IsNot(nameof(WorkflowDefinition.DefinitionId), definitionId); + }, cancellationToken); + + return !exists; + } + + private void ApplyFilter(ParameterizedQuery query, WorkflowDefinitionFilter filter) + { + var definitionId = filter.DefinitionId ?? filter.DefinitionHandle?.DefinitionId; + var versionOptions = filter.VersionOptions ?? filter.DefinitionHandle?.VersionOptions; + var id = filter.Id ?? filter.DefinitionHandle?.DefinitionVersionId; + + query + .Is(nameof(WorkflowDefinition.DefinitionId), definitionId) + .In(nameof(WorkflowDefinition.DefinitionId), filter.DefinitionIds) + .Is(nameof(WorkflowDefinition.Id), id) + .In(nameof(WorkflowDefinition.Id), filter.Ids) + .Is(versionOptions) + .Is(nameof(WorkflowDefinition.MaterializerName), filter.MaterializerName) + .Is(nameof(WorkflowDefinition.Name), filter.Name) + .In(nameof(WorkflowDefinition.Name), filter.Names) + .Is(nameof(WorkflowDefinition.Options.UsableAsActivity), filter.UsableAsActivity) + .Is(nameof(WorkflowDefinition.IsSystem), filter.IsSystem) + .Is(nameof(WorkflowDefinition.IsReadonly), filter.IsReadonly) + .WorkflowDefinitionSearchTerm(filter.SearchTerm); + } + + private Page Map(Page source) => new(Map(source.Items).ToList(), source.TotalCount); + private IEnumerable Map(IEnumerable records) => records.Select(Map); + + private WorkflowDefinition Map(WorkflowDefinitionRecord source) + { + var props = payloadSerializer.Deserialize(source.Props); + return new WorkflowDefinition + { + Id = source.Id, + DefinitionId = source.DefinitionId, + Version = source.Version, + Name = source.Name, + Description = source.Description, + IsPublished = source.IsPublished, + IsLatest = source.IsLatest, + IsReadonly = source.IsReadonly, + IsSystem = source.IsSystem, + CreatedAt = source.CreatedAt, + StringData = source.StringData, + Options = props.Options, + Variables = props.Variables, + Inputs = props.Inputs, + Outputs = props.Outputs, + Outcomes = props.Outcomes, + CustomProperties = props.CustomProperties, + MaterializerContext = source.MaterializerContext, + BinaryData = source.BinaryData, + MaterializerName = source.MaterializerName, + ProviderName = source.ProviderName, + TenantId = source.TenantId + }; + } + + private WorkflowDefinitionRecord Map(WorkflowDefinition source) + { + var props = new WorkflowDefinitionProps + { + Options = source.Options, + Variables = source.Variables, + Inputs = source.Inputs, + Outputs = source.Outputs, + Outcomes = source.Outcomes, + CustomProperties = source.CustomProperties + }; + + return new WorkflowDefinitionRecord + { + Id = source.Id, + DefinitionId = source.DefinitionId, + Version = source.Version, + Name = source.Name, + Description = source.Description, + IsPublished = source.IsPublished, + IsLatest = source.IsLatest, + CreatedAt = source.CreatedAt, + IsReadonly = source.IsReadonly, + IsSystem = source.IsSystem, + StringData = source.StringData, + Props = payloadSerializer.Serialize(props), + MaterializerName = source.MaterializerName, + UsableAsActivity = source.Options.UsableAsActivity, + ProviderName = source.ProviderName, + BinaryData = source.BinaryData, + MaterializerContext = source.MaterializerContext, + TenantId = source.TenantId + }; + } + + private class WorkflowDefinitionProps + { + [JsonConstructor] + public WorkflowDefinitionProps() + { + } + + public WorkflowDefinitionProps( + WorkflowOptions options, + ICollection variables, + ICollection inputs, + ICollection outputs, + ICollection outcomes, + IDictionary customProperties + ) + { + Options = options; + Variables = variables; + Inputs = inputs; + Outputs = outputs; + Outcomes = outcomes; + CustomProperties = customProperties; + } + + public WorkflowOptions Options { get; set; } = new(); + public ICollection Variables { get; set; } = new List(); + public ICollection Inputs { get; set; } = new List(); + public ICollection Outputs { get; set; } = new List(); + public ICollection Outcomes { get; set; } = new List(); + public IDictionary CustomProperties { get; set; } = new Dictionary(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Management/Stores/DapperWorkflowInstanceStore.cs b/src/modules/Elsa.Dapper/Modules/Management/Stores/DapperWorkflowInstanceStore.cs new file mode 100644 index 0000000..8c18734 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Management/Stores/DapperWorkflowInstanceStore.cs @@ -0,0 +1,262 @@ +using System.Diagnostics.CodeAnalysis; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Management.Records; +using Elsa.Dapper.Services; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Filters; +using Elsa.Workflows.Management.Models; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Management.Stores; + +/// +/// Provides a Dapper implementation of . +/// +[UsedImplicitly] +internal class DapperWorkflowInstanceStore(Store store, IWorkflowStateSerializer workflowStateSerializer) + : IWorkflowInstanceStore +{ + /// + [RequiresUnreferencedCode("Calls Elsa.Dapper.Modules.Management.Stores.DapperWorkflowInstanceStore.MapAsync(WorkflowInstanceRecord)")] + public async ValueTask FindAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record == null ? null : Map(record); + } + + /// + [RequiresUnreferencedCode("Calls Elsa.Dapper.Modules.Management.Stores.DapperWorkflowInstanceStore.FindManyAsync(WorkflowInstanceFilter, PageArgs, WorkflowInstanceOrder, CancellationToken)")] + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await FindManyAsync( + filter, + pageArgs, + new WorkflowInstanceOrder(x => x.CreatedAt, OrderDirection.Ascending), + cancellationToken); + } + + /// + [RequiresUnreferencedCode("Calls Elsa.Dapper.Modules.Management.Stores.DapperWorkflowInstanceStore.MapAsync(Page)")] + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + var page = await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return Map(page); + } + + /// + [RequiresUnreferencedCode("Calls Elsa.Dapper.Modules.Management.Stores.DapperWorkflowInstanceStore.MapAsync(IEnumerable)")] + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return Map(records).ToList(); + } + + /// + [RequiresUnreferencedCode("Calls Elsa.Dapper.Modules.Management.Stores.DapperWorkflowInstanceStore.MapAsync(IEnumerable)")] + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return Map(records).ToList(); + } + + /// + public async ValueTask CountAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + return await store.CountAsync(query => ApplyFilter(query, filter), cancellationToken); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await SummarizeManyAsync( + filter, + pageArgs, + new WorkflowInstanceOrder(x => x.CreatedAt, OrderDirection.Ascending), + cancellationToken); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + return await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + return await SummarizeManyAsync(filter, new WorkflowInstanceOrder(x => x.CreatedAt, OrderDirection.Ascending), cancellationToken); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + return await store.FindManyAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + } + + /// + public async ValueTask> FindManyIdsAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var items = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return items.Select(x => x.Id).ToList(); + } + + /// + public async ValueTask> FindManyIdsAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await FindManyIdsAsync( + filter, + pageArgs, + new WorkflowInstanceOrder(x => x.CreatedAt, OrderDirection.Ascending), + cancellationToken); + } + + /// + public async ValueTask> FindManyIdsAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + var page = await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + var ids = page.Items.Select(x => x.Id).ToList(); + return Page.Of(ids, page.TotalCount); + } + + /// + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + public async ValueTask SaveAsync(WorkflowInstance instance, CancellationToken cancellationToken = default) + { + var record = Map(instance); + await store.SaveAsync(record, cancellationToken); + } + + /// + public async ValueTask AddAsync(WorkflowInstance instance, CancellationToken cancellationToken = default) + { + var record = Map(instance); + await store.AddAsync(record, cancellationToken); + } + + /// + public async ValueTask UpdateAsync(WorkflowInstance instance, CancellationToken cancellationToken = default) + { + var record = Map(instance); + await store.UpdateAsync(record, cancellationToken); + } + + /// + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + public async ValueTask SaveManyAsync(IEnumerable instances, CancellationToken cancellationToken = default) + { + var records = Map(instances); + await store.SaveManyAsync(records, cancellationToken); + } + + /// + public async ValueTask DeleteAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + public async Task UpdateUpdatedTimestampAsync(string workflowInstanceId, DateTimeOffset value, CancellationToken cancellationToken = default) + { + var record = new WorkflowInstanceRecord + { + Id = workflowInstanceId, + UpdatedAt = value + }; + await store.UpdateAsync(record, [x => x.UpdatedAt], cancellationToken); + } + + private void ApplyFilter(ParameterizedQuery query, WorkflowInstanceFilter filter) + { + query + .Is(nameof(WorkflowInstance.Id), filter.Id) + .In(nameof(WorkflowInstance.Id), filter.Ids) + .Is(nameof(WorkflowInstance.DefinitionId), filter.DefinitionId) + .In(nameof(WorkflowInstance.DefinitionId), filter.DefinitionIds) + .Is(nameof(WorkflowInstance.DefinitionVersionId), filter.DefinitionVersionId) + .In(nameof(WorkflowInstance.DefinitionVersionId), filter.DefinitionVersionIds) + .In(nameof(WorkflowInstance.ParentWorkflowInstanceId), filter.ParentWorkflowInstanceIds) + .Is(nameof(WorkflowInstance.Status), filter.WorkflowStatus?.ToString()) + .Is(nameof(WorkflowInstance.SubStatus), filter.WorkflowSubStatus?.ToString()) + .Is(nameof(WorkflowInstance.Name), filter.Version) + .Is(nameof(WorkflowInstance.CorrelationId), filter.CorrelationId) + .In(nameof(WorkflowInstance.CorrelationId), filter.CorrelationIds) + .In(nameof(WorkflowInstance.Status), filter.WorkflowStatuses?.Select(x => x.ToString())) + .In(nameof(WorkflowInstance.SubStatus), filter.WorkflowSubStatuses?.Select(x => x.ToString())) + .Is(nameof(WorkflowInstance.IsExecuting), filter.IsExecuting) + .AndWorkflowInstanceSearchTerm(filter.SearchTerm); + } + + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + private Page Map(Page source) + { + var items = Map(source.Items).ToList(); + return Page.Of(items, source.TotalCount); + } + + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + private IEnumerable Map(IEnumerable source) + { + return source.Select(Map); + } + + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + private IEnumerable Map(IEnumerable source) + { + return source.Select(Map); + } + + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + private WorkflowInstance Map(WorkflowInstanceRecord source) + { + var workflowState = workflowStateSerializer.Deserialize(source.WorkflowState); + return new() + { + Id = source.Id, + DefinitionId = source.DefinitionId, + DefinitionVersionId = source.DefinitionVersionId, + Version = source.Version, + Name = source.Name, + IncidentCount = source.IncidentCount, + IsSystem = source.IsSystem, + WorkflowState = workflowState, + CreatedAt = source.CreatedAt, + UpdatedAt = source.UpdatedAt, + FinishedAt = source.FinishedAt, + Status = Enum.Parse(source.Status), + SubStatus = Enum.Parse(source.SubStatus), + IsExecuting = source.IsExecuting, + CorrelationId = source.CorrelationId, + TenantId = source.TenantId + }; + } + + [RequiresUnreferencedCode("Calls Elsa.Workflows.Contracts.IWorkflowStateSerializer.DeserializeAsync(String, CancellationToken)")] + private WorkflowInstanceRecord Map(WorkflowInstance source) + { + var workflowState = workflowStateSerializer.Serialize(source.WorkflowState); + return new() + { + Id = source.Id, + DefinitionId = source.DefinitionId, + DefinitionVersionId = source.DefinitionVersionId, + Version = source.Version, + Name = source.Name, + IncidentCount = source.IncidentCount, + IsSystem = source.IsSystem, + WorkflowState = workflowState, + CreatedAt = source.CreatedAt, + UpdatedAt = source.UpdatedAt, + FinishedAt = source.FinishedAt, + Status = source.Status.ToString(), + SubStatus = source.SubStatus.ToString(), + IsExecuting = source.IsExecuting, + CorrelationId = source.CorrelationId, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Extensions/DapperWorkflowManagementFeatureExtensions.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Extensions/DapperWorkflowManagementFeatureExtensions.cs new file mode 100644 index 0000000..423b2df --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Extensions/DapperWorkflowManagementFeatureExtensions.cs @@ -0,0 +1,22 @@ +using Elsa.Dapper.Modules.Runtime.Features; +using Elsa.Workflows.Runtime.Features; +using JetBrains.Annotations; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides extensions to the feature. +/// +[PublicAPI] +public static class DapperWorkflowRuntimeExtensions +{ + /// + /// Configures the to use the . + /// + public static WorkflowRuntimeFeature UseDapper(this WorkflowRuntimeFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Features/DapperWorkflowRuntimePersistenceFeature.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Features/DapperWorkflowRuntimePersistenceFeature.cs new file mode 100644 index 0000000..c07fd3b --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Features/DapperWorkflowRuntimePersistenceFeature.cs @@ -0,0 +1,56 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Features; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Modules.Runtime.Stores; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.KeyValues.Features; +using Elsa.Workflows.Runtime.Features; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dapper.Modules.Runtime.Features; + +/// +/// Configures the default workflow runtime to use Dapper persistence providers. +/// +[DependsOn(typeof(DapperFeature))] +[PublicAPI] +public class DapperWorkflowRuntimePersistenceFeature : FeatureBase +{ + /// + public DapperWorkflowRuntimePersistenceFeature(IModule module) : base(module) + { + } + + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.KeyValueStore = sp => sp.GetRequiredService(); + }); + Module.Configure(feature => + { + feature.TriggerStore = sp => sp.GetRequiredService(); + feature.BookmarkStore = sp => sp.GetRequiredService(); + feature.BookmarkQueueStore = sp => sp.GetRequiredService(); + feature.WorkflowExecutionLogStore = sp => sp.GetRequiredService(); + feature.ActivityExecutionLogStore = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + + Services.AddDapperStore("Triggers"); + Services.AddDapperStore("Bookmarks"); + Services.AddDapperStore("BookmarkQueueItems"); + Services.AddDapperStore("WorkflowExecutionLogRecords"); + Services.AddDapperStore("ActivityExecutionRecords"); + Services.AddDapperStore("KeyValues"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/ActivityExecutionRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/ActivityExecutionRecord.cs new file mode 100644 index 0000000..19c25c9 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/ActivityExecutionRecord.cs @@ -0,0 +1,84 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +/// +/// Represents a single workflow execution, associated with an individual activity instance. +/// +internal class ActivityExecutionRecordRecord : Record +{ + /// + /// Gets or sets the workflow instance ID. + /// + public string WorkflowInstanceId { get; set; } = null!; + + /// + /// Gets or sets the activity ID. + /// + public string ActivityId { get; set; } = null!; + + /// + /// Gets or sets the activity node ID. + /// + public string ActivityNodeId { get; set; } = null!; + + /// + /// The type of the activity. + /// + public string ActivityType { get; set; } = null!; + + /// + /// The version of the activity type. + /// + public int ActivityTypeVersion { get; set; } + + /// + /// The name of the activity. + /// + public string? ActivityName { get; set; } + + /// + /// The state of the activity at the time this record is created or last updated. + /// + public string? SerializedActivityState { get; set; } + + /// + /// Any additional payload associated with the log record. + /// + public string? SerializedPayload { get; set; } + + /// + /// Any outputs provided by the activity. + /// + public string? SerializedOutputs { get; set; } + + /// + /// Gets or sets the exception that occurred during the activity execution. + /// + public string? SerializedException { get; set; } + + /// + /// Any properties provided by the activity. + /// + public string? SerializedProperties { get; set; } + + /// + /// Gets or sets the time at which the activity execution began. + /// + public DateTimeOffset StartedAt { get; set; } + + /// + /// Gets or sets whether the activity has any bookmarks. + /// + public bool HasBookmarks { get; set; } + + /// + /// Gets or sets the status of the activity. + /// + public string Status { get; set; } = null!; + + /// + /// Gets or sets the time at which the activity execution completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/ActivityExecutionSummaryRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/ActivityExecutionSummaryRecord.cs new file mode 100644 index 0000000..228b82e --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/ActivityExecutionSummaryRecord.cs @@ -0,0 +1,59 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +/// +/// Represents a single workflow execution, associated with an individual activity instance. +/// +internal class ActivityExecutionSummaryRecord : Record +{ + /// + /// Gets or sets the workflow instance ID. + /// + public string WorkflowInstanceId { get; set; } = null!; + + /// + /// Gets or sets the activity ID. + /// + public string ActivityId { get; set; } = null!; + + /// + /// Gets or sets the activity node ID. + /// + public string ActivityNodeId { get; set; } = null!; + + /// + /// The type of the activity. + /// + public string ActivityType { get; set; } = null!; + + /// + /// The version of the activity type. + /// + public int ActivityTypeVersion { get; set; } + + /// + /// The name of the activity. + /// + public string? ActivityName { get; set; } + + /// + /// Gets or sets the time at which the activity execution began. + /// + public DateTimeOffset StartedAt { get; set; } + + /// + /// Gets or sets whether the activity has any bookmarks. + /// + public bool HasBookmarks { get; set; } + + /// + /// Gets or sets the status of the activity. + /// + public string Status { get; set; } = null!; + + /// + /// Gets or sets the time at which the activity execution completed. + /// + public DateTimeOffset? CompletedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/BookmarkQueueItemRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/BookmarkQueueItemRecord.cs new file mode 100644 index 0000000..a3be1d9 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/BookmarkQueueItemRecord.cs @@ -0,0 +1,14 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +internal class BookmarkQueueItemRecord : Record +{ + public string? WorkflowInstanceId { get; set; } + public string? BookmarkId { get; set; } + public string? StimulusHash { get; set; } + public string? ActivityInstanceId { get; set; } + public string? ActivityTypeName { get; set; } + public string? SerializedOptions { get; set; } + public DateTimeOffset CreatedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/KeyValuePairRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/KeyValuePairRecord.cs new file mode 100644 index 0000000..5a276a0 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/KeyValuePairRecord.cs @@ -0,0 +1,8 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +internal class KeyValuePairRecord : Record +{ + public string Value { get; set; } = null!; +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/StoredBookmarkRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/StoredBookmarkRecord.cs new file mode 100644 index 0000000..4040bdc --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/StoredBookmarkRecord.cs @@ -0,0 +1,15 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +internal class StoredBookmarkRecord : Record +{ + public string ActivityTypeName { get; set; } = null!; + public string Hash { get; set; } = null!; + public string WorkflowInstanceId { get; set; } = null!; + public string? CorrelationId { get; set; } + public string? ActivityInstanceId { get; set; } + public string? SerializedPayload { get; set; } + public string? SerializedMetadata { get; set; } + public DateTimeOffset CreatedAt { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/StoredTriggerRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/StoredTriggerRecord.cs new file mode 100644 index 0000000..537c556 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/StoredTriggerRecord.cs @@ -0,0 +1,13 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +internal class StoredTriggerRecord : Record +{ + public string WorkflowDefinitionId { get; set; } = null!; + public string WorkflowDefinitionVersionId { get; set; } = null!; + public string Name { get; set; } = null!; + public string ActivityId { get; set; } = null!; + public string? Hash { get; set; } + public string? SerializedPayload { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Records/WorkflowExecutionLogRecordRecord.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Records/WorkflowExecutionLogRecordRecord.cs new file mode 100644 index 0000000..5b2b5c7 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Records/WorkflowExecutionLogRecordRecord.cs @@ -0,0 +1,26 @@ +using Elsa.Dapper.Records; + +namespace Elsa.Dapper.Modules.Runtime.Records; + +internal class WorkflowExecutionLogRecordRecord : Record +{ + public string Id { get; set; } = null!; + public string WorkflowDefinitionId { get; set; } = null!; + public string WorkflowDefinitionVersionId { get; set; } = null!; + public string WorkflowInstanceId { get; set; } = null!; + public int WorkflowVersion { get; set; } + public string ActivityInstanceId { get; set; } = null!; + public string? ParentActivityInstanceId { get; set; } + public string ActivityId { get; set; } = null!; + public string ActivityType { get; set; } = null!; + public int ActivityTypeVersion { get; set; } + public string? ActivityName { get; set; } + public string ActivityNodeId { get; set; } = null!; + public DateTimeOffset Timestamp { get; set; } + public long Sequence { get; set; } + public string? EventName { get; set; } + public string? Message { get; set; } + public string? Source { get; set; } + public string? SerializedActivityState { get; set; } + public string? SerializedPayload { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperActivityExecutionRecordStore.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperActivityExecutionRecordStore.cs new file mode 100644 index 0000000..3787907 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperActivityExecutionRecordStore.cs @@ -0,0 +1,176 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Services; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.OrderDefinitions; +using Elsa.Workflows.State; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Runtime.Stores; + +/// +/// Implements the using Dapper. +/// +[UsedImplicitly] +internal class DapperActivityExecutionRecordStore(Store store, IPayloadSerializer payloadSerializer, ISafeSerializer safeSerializer) + : IActivityExecutionStore +{ + /// + public async Task SaveAsync(ActivityExecutionRecord record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.SaveAsync(mappedRecord, cancellationToken); + } + + /// + public async Task SaveManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var mappedRecords = records.Select(Map).ToList(); + await store.SaveManyAsync(mappedRecords, cancellationToken); + } + + /// + public async Task AddManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var mappedRecords = records.Select(Map).ToList(); + await store.AddManyAsync(mappedRecords, cancellationToken); + } + + /// + public async Task FindAsync(ActivityExecutionRecordFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record == null ? null : Map(record); + } + + /// + public async Task> FindManyAsync(ActivityExecutionRecordFilter filter, ActivityExecutionRecordOrder order, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return records.Select(Map).ToList(); + } + + /// + public async Task> FindManyAsync(ActivityExecutionRecordFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return records.Select(Map).ToList(); + } + + /// + public async Task> FindManySummariesAsync(ActivityExecutionRecordFilter filter, ActivityExecutionRecordOrder order, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return records.Select(MapSummary).ToList(); + } + + /// + public async Task> FindManySummariesAsync(ActivityExecutionRecordFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return records.Select(MapSummary).ToList(); + } + + /// + public async Task CountAsync(ActivityExecutionRecordFilter filter, CancellationToken cancellationToken = default) + { + return await store.CountAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + /// + public async Task DeleteManyAsync(ActivityExecutionRecordFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + private static void ApplyFilter(ParameterizedQuery query, ActivityExecutionRecordFilter filter) + { + query + .Is(nameof(ActivityExecutionRecordRecord.Id), filter.Id) + .In(nameof(ActivityExecutionRecordRecord.Id), filter.Ids) + .Is(nameof(ActivityExecutionRecordRecord.ActivityId), filter.ActivityId) + .In(nameof(ActivityExecutionRecordRecord.ActivityId), filter.ActivityIds) + .Is(nameof(ActivityExecutionRecordRecord.WorkflowInstanceId), filter.WorkflowInstanceId) + .In(nameof(ActivityExecutionRecordRecord.WorkflowInstanceId), filter.WorkflowInstanceIds); + + if (filter.Completed != null) + { + if (filter.Completed == true) + query.IsNotNull(nameof(ActivityExecutionRecordRecord.CompletedAt)); + else + query.IsNull(nameof(ActivityExecutionRecordRecord.CompletedAt)); + } + } + + private ActivityExecutionRecordRecord Map(ActivityExecutionRecord source) + { + return new() + { + Id = source.Id, + ActivityId = source.ActivityId, + ActivityNodeId = source.ActivityNodeId, + ActivityType = source.ActivityType, + ActivityName = source.ActivityName, + WorkflowInstanceId = source.WorkflowInstanceId, + CompletedAt = source.CompletedAt, + StartedAt = source.StartedAt, + HasBookmarks = source.HasBookmarks, + Status = source.Status.ToString(), + ActivityTypeVersion = source.ActivityTypeVersion, + SerializedActivityState = source.ActivityState?.Any() == true ? safeSerializer.Serialize(source.ActivityState) : null, + SerializedPayload = source.Payload?.Any() == true ? safeSerializer.Serialize(source.Payload) : null, + SerializedOutputs = source.Outputs?.Any() == true ? safeSerializer.Serialize(source.Outputs) : null, + SerializedException = source.Exception != null ? payloadSerializer.Serialize(source.Exception) : null, + SerializedProperties = source.Properties?.Any() == true ? safeSerializer.Serialize(source.Properties) : null, + TenantId = source.TenantId + }; + } + + private ActivityExecutionRecord Map(ActivityExecutionRecordRecord source) + { + return new() + { + Id = source.Id, + ActivityId = source.ActivityId, + ActivityNodeId = source.ActivityNodeId, + ActivityType = source.ActivityType, + ActivityName = source.ActivityName, + WorkflowInstanceId = source.WorkflowInstanceId, + CompletedAt = source.CompletedAt, + StartedAt = source.StartedAt, + HasBookmarks = source.HasBookmarks, + Status = Enum.Parse(source.Status), + ActivityTypeVersion = source.ActivityTypeVersion, + ActivityState = source.SerializedActivityState != null ? payloadSerializer.Deserialize>(source.SerializedActivityState) : null, + Payload = source.SerializedPayload != null ? safeSerializer.Deserialize>(source.SerializedPayload) : null, + Outputs = source.SerializedOutputs != null ? safeSerializer.Deserialize>(source.SerializedOutputs) : null, + Exception = source.SerializedException != null ? payloadSerializer.Deserialize(source.SerializedException) : null, + Properties = source.SerializedProperties != null ? safeSerializer.Deserialize>(source.SerializedProperties) : null, + TenantId = source.TenantId + }; + } + + private ActivityExecutionRecordSummary MapSummary(ActivityExecutionSummaryRecord source) + { + return new() + { + Id = source.Id, + ActivityId = source.ActivityId, + ActivityNodeId = source.ActivityNodeId, + ActivityType = source.ActivityType, + ActivityName = source.ActivityName, + WorkflowInstanceId = source.WorkflowInstanceId, + CompletedAt = source.CompletedAt, + StartedAt = source.StartedAt, + HasBookmarks = source.HasBookmarks, + Status = Enum.Parse(source.Status), + ActivityTypeVersion = source.ActivityTypeVersion, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperBookmarkQueueStore.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperBookmarkQueueStore.cs new file mode 100644 index 0000000..1c6152a --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperBookmarkQueueStore.cs @@ -0,0 +1,114 @@ +using Elsa.Common.Models; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Services; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.OrderDefinitions; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Runtime.Stores; + +/// +/// A Dapper-based implementation. +/// +[UsedImplicitly] +internal class DapperBookmarkQueueStore(Store store, IPayloadSerializer payloadSerializer) : IBookmarkQueueStore +{ + /// + public async Task SaveAsync(BookmarkQueueItem record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.SaveAsync(mappedRecord, cancellationToken); + } + + /// + public async Task AddAsync(BookmarkQueueItem record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.AddAsync(mappedRecord, cancellationToken); + } + + /// + public async Task FindAsync(BookmarkQueueFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record != null ? Map(record) : default; + } + + public async Task> FindManyAsync(BookmarkQueueFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return Map(records); + } + + public async Task> PageAsync(PageArgs pageArgs, BookmarkQueueItemOrder orderBy, CancellationToken cancellationToken = default) + { + var records = await store.ListAsync(pageArgs, orderBy.KeySelector.GetPropertyName(), orderBy.Direction, cancellationToken); + return Map(records); + } + + public async Task> PageAsync(PageArgs pageArgs, BookmarkQueueFilter filter, BookmarkQueueItemOrder orderBy, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, orderBy.KeySelector.GetPropertyName(), orderBy.Direction, cancellationToken); + return Map(records); + } + + /// + public async Task DeleteAsync(BookmarkQueueFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + private void ApplyFilter(ParameterizedQuery query, BookmarkQueueFilter filter) + { + query + .Is(nameof(BookmarkQueueItemRecord.WorkflowInstanceId), filter.WorkflowInstanceId) + .Is(nameof(BookmarkQueueItemRecord.BookmarkId), filter.BookmarkId) + .Is(nameof(BookmarkQueueItemRecord.StimulusHash), filter.BookmarkHash) + .Is(nameof(BookmarkQueueItemRecord.ActivityInstanceId), filter.ActivityInstanceId) + .Is(nameof(BookmarkQueueItemRecord.ActivityTypeName), filter.ActivityTypeName) + ; + } + + private Page Map(Page records) => new(Map(records.Items).ToList(), records.TotalCount); + private IEnumerable Map(IEnumerable source) => source.Select(Map); + private IEnumerable Map(IEnumerable source) => source.Select(Map); + + private BookmarkQueueItemRecord Map(BookmarkQueueItem source) + { + return new BookmarkQueueItemRecord + { + Id = source.Id, + WorkflowInstanceId = source.WorkflowInstanceId, + BookmarkId = source.BookmarkId, + StimulusHash = source.StimulusHash, + ActivityInstanceId = source.ActivityInstanceId, + ActivityTypeName = source.ActivityTypeName, + SerializedOptions = source.Options != null ? payloadSerializer.Serialize(source.Options) : default, + CreatedAt = source.CreatedAt, + TenantId = source.TenantId + }; + } + + private BookmarkQueueItem Map(BookmarkQueueItemRecord source) + { + return new BookmarkQueueItem + { + Id = source.Id, + WorkflowInstanceId = source.WorkflowInstanceId, + BookmarkId = source.BookmarkId, + StimulusHash = source.StimulusHash, + ActivityInstanceId = source.ActivityInstanceId, + ActivityTypeName = source.ActivityTypeName, + Options = source.SerializedOptions != null ? payloadSerializer.Deserialize(source.SerializedOptions) : default, + CreatedAt = source.CreatedAt, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperBookmarkStore.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperBookmarkStore.cs new file mode 100644 index 0000000..785fea3 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperBookmarkStore.cs @@ -0,0 +1,103 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Services; +using Elsa.Workflows; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Filters; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Runtime.Stores; + +/// +/// A Dapper-based implementation. +/// +[UsedImplicitly] +internal class DapperBookmarkStore(Store store, IPayloadSerializer payloadSerializer) : IBookmarkStore +{ + /// + public async ValueTask SaveAsync(StoredBookmark record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.SaveAsync(mappedRecord, cancellationToken); + } + + /// + public async ValueTask SaveManyAsync(IEnumerable records, CancellationToken cancellationToken) + { + var mappedRecords = Map(records); + await store.SaveManyAsync(mappedRecords, cancellationToken); + } + + /// + public async ValueTask FindAsync(BookmarkFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record != null ? Map(record) : default; + } + + /// + public async ValueTask> FindManyAsync(BookmarkFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), filter.TenantAgnostic, cancellationToken); + return Map(records); + } + + /// + public async ValueTask DeleteAsync(BookmarkFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + private void ApplyFilter(ParameterizedQuery query, BookmarkFilter filter) + { + query + .Is(nameof(StoredBookmarkRecord.Hash), filter.Hash) + .In(nameof(StoredBookmarkRecord.Hash), filter.Hashes) + .Is(nameof(StoredBookmarkRecord.WorkflowInstanceId), filter.WorkflowInstanceId) + .In(nameof(StoredBookmarkRecord.WorkflowInstanceId), filter.WorkflowInstanceIds) + .Is(nameof(StoredBookmarkRecord.CorrelationId), filter.CorrelationId) + .Is(nameof(StoredBookmarkRecord.ActivityTypeName), filter.Name) + .In(nameof(StoredBookmarkRecord.ActivityTypeName), filter.Names) + .Is(nameof(StoredBookmarkRecord.ActivityInstanceId), filter.ActivityInstanceId) + ; + } + + private IEnumerable Map(IEnumerable source) => source.Select(Map); + private IEnumerable Map(IEnumerable source) => source.Select(Map); + + private StoredBookmarkRecord Map(StoredBookmark source) + { + return new StoredBookmarkRecord + { + Id = source.Id, + WorkflowInstanceId = source.WorkflowInstanceId, + CorrelationId = source.CorrelationId, + ActivityInstanceId = source.ActivityInstanceId, + ActivityTypeName = source.Name, + Hash = source.Hash, + SerializedPayload = source.Payload != null ? payloadSerializer.Serialize(source.Payload) : default, + SerializedMetadata = source.Metadata != null ? payloadSerializer.Serialize(source.Metadata) : default, + CreatedAt = source.CreatedAt, + TenantId = source.TenantId + }; + } + + private StoredBookmark Map(StoredBookmarkRecord source) + { + return new StoredBookmark + { + Id = source.Id, + WorkflowInstanceId = source.WorkflowInstanceId, + CorrelationId = source.CorrelationId, + ActivityInstanceId = source.ActivityInstanceId, + Name = source.ActivityTypeName, + Hash = source.Hash, + Payload = source.SerializedPayload != null ? payloadSerializer.Deserialize(source.SerializedPayload) : default, + Metadata = source.SerializedMetadata != null ? payloadSerializer.Deserialize>(source.SerializedMetadata) : default, + CreatedAt = source.CreatedAt, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperTriggerStore.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperTriggerStore.cs new file mode 100644 index 0000000..c69ff95 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperTriggerStore.cs @@ -0,0 +1,130 @@ +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Services; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.OrderDefinitions; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Runtime.Stores; + +/// +/// Provides a Dapper implementation of . +/// +[UsedImplicitly] +internal class DapperTriggerStore(Store store, IPayloadSerializer payloadSerializer) : ITriggerStore +{ + /// + public async ValueTask SaveAsync(StoredTrigger record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.SaveAsync(mappedRecord, cancellationToken); + } + + /// + public async ValueTask SaveManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var mappedRecords = records.Select(Map); + await store.SaveManyAsync(mappedRecords, cancellationToken); + } + + /// + public async ValueTask FindAsync(TriggerFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record != null ? Map(record) : default; + } + + /// + public async ValueTask> FindManyAsync(TriggerFilter filter, CancellationToken cancellationToken = default) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return Map(records); + } + + public ValueTask> FindManyAsync(TriggerFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return FindManyAsync(filter, pageArgs, new StoredTriggerOrder(x => x.Id, OrderDirection.Ascending), cancellationToken); + } + + public async ValueTask> FindManyAsync(TriggerFilter filter, PageArgs pageArgs, StoredTriggerOrder order, CancellationToken cancellationToken = default) + { + var page = await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return Map(page); + } + + /// + public async ValueTask ReplaceAsync(IEnumerable removed, IEnumerable added, CancellationToken cancellationToken = default) + { + var filter = new TriggerFilter + { + Ids = removed.Select(r => r.Id).ToList() + }; + await DeleteManyAsync(filter, cancellationToken); + await SaveManyAsync(added, cancellationToken); + } + + /// + public async ValueTask DeleteManyAsync(TriggerFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + private void ApplyFilter(ParameterizedQuery query, TriggerFilter filter) + { + query + .Is(nameof(StoredTriggerRecord.Id), filter.Id) + .In(nameof(StoredTriggerRecord.Id), filter.Ids) + .Is(nameof(StoredTriggerRecord.WorkflowDefinitionId), filter.WorkflowDefinitionId) + .In(nameof(StoredTriggerRecord.WorkflowDefinitionId), filter.WorkflowDefinitionIds) + .Is(nameof(StoredTriggerRecord.WorkflowDefinitionVersionId), filter.WorkflowDefinitionVersionId) + .In(nameof(StoredTriggerRecord.WorkflowDefinitionVersionId), filter.WorkflowDefinitionVersionIds) + .Is(nameof(StoredTriggerRecord.Name), filter.Name) + .In(nameof(StoredTriggerRecord.Name), filter.Names) + .Is(nameof(StoredTriggerRecord.Hash), filter.Hash) + ; + } + + private Page Map(Page source) + { + return new(source.Items.Select(Map).ToList(), source.TotalCount); + } + + private IEnumerable Map(IEnumerable source) => source.Select(Map); + + private StoredTrigger Map(StoredTriggerRecord source) + { + return new StoredTrigger + { + Id = source.Id, + ActivityId = source.ActivityId, + Hash = source.Hash, + Name = source.Name, + WorkflowDefinitionId = source.WorkflowDefinitionId, + WorkflowDefinitionVersionId = source.WorkflowDefinitionVersionId, + Payload = source.SerializedPayload != null ? payloadSerializer.Deserialize(source.SerializedPayload) : default, + TenantId = source.TenantId + }; + } + + private StoredTriggerRecord Map(StoredTrigger source) + { + return new StoredTriggerRecord + { + Id = source.Id, + ActivityId = source.ActivityId, + Hash = source.Hash, + Name = source.Name, + WorkflowDefinitionId = source.WorkflowDefinitionId, + WorkflowDefinitionVersionId = source.WorkflowDefinitionVersionId, + SerializedPayload = source.Payload != null ? payloadSerializer.Serialize(source.Payload) : default, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperWorkflowExecutionLogStore.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperWorkflowExecutionLogStore.cs new file mode 100644 index 0000000..32d3db0 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/DapperWorkflowExecutionLogStore.cs @@ -0,0 +1,171 @@ +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Services; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.OrderDefinitions; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Runtime.Stores; + +/// +/// Implements the using Dapper. +/// +[UsedImplicitly] +internal class DapperWorkflowExecutionLogStore(Store store, IPayloadSerializer payloadSerializer) : IWorkflowExecutionLogStore +{ + /// + public async Task AddAsync(WorkflowExecutionLogRecord record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.AddAsync(mappedRecord, cancellationToken); + } + + /// + public async Task AddManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var mappedRecords = records.Select(Map); + await store.AddManyAsync(mappedRecords, cancellationToken); + } + + /// + public async Task SaveAsync(WorkflowExecutionLogRecord record, CancellationToken cancellationToken = default) + { + var mappedRecord = Map(record); + await store.SaveAsync(mappedRecord, cancellationToken); + } + + /// + public async Task SaveManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var mappedRecords = records.Select(Map); + await store.SaveManyAsync(mappedRecords, cancellationToken); + } + + /// + public async Task FindAsync(WorkflowExecutionLogRecordFilter filter, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record != null ? Map(record) : default; + } + + /// + public async Task FindAsync(WorkflowExecutionLogRecordFilter filter, WorkflowExecutionLogRecordOrder order, CancellationToken cancellationToken = default) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return record != null ? Map(record) : default; + } + + /// + public async Task> FindManyAsync(WorkflowExecutionLogRecordFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await FindManyAsync( + filter, + pageArgs, + new WorkflowExecutionLogRecordOrder(x => x.Timestamp, OrderDirection.Descending), + cancellationToken); + } + + /// + public async Task> FindManyAsync(WorkflowExecutionLogRecordFilter filter, PageArgs pageArgs, WorkflowExecutionLogRecordOrder order, CancellationToken cancellationToken = default) + { + var page = await store.FindManyAsync(q => ApplyFilter(q, filter), pageArgs, order.KeySelector.GetPropertyName(), order.Direction, cancellationToken); + return Map(page); + } + + /// + public async Task DeleteManyAsync(WorkflowExecutionLogRecordFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteAsync(q => ApplyFilter(q, filter), cancellationToken); + } + + private static void ApplyFilter(ParameterizedQuery query, WorkflowExecutionLogRecordFilter filter) + { + query + .Is(nameof(WorkflowExecutionLogRecordRecord.Id), filter.Id) + .In(nameof(WorkflowExecutionLogRecordRecord.Id), filter.Ids) + .Is(nameof(WorkflowExecutionLogRecordRecord.ParentActivityInstanceId), filter.ParentActivityInstanceId) + .Is(nameof(WorkflowExecutionLogRecordRecord.ActivityId), filter.ActivityId) + .In(nameof(WorkflowExecutionLogRecordRecord.ActivityId), filter.ActivityIds) + .Is(nameof(WorkflowExecutionLogRecordRecord.WorkflowInstanceId), filter.WorkflowInstanceId) + .In(nameof(WorkflowExecutionLogRecordRecord.WorkflowInstanceId), filter.WorkflowInstanceIds) + .Is(nameof(WorkflowExecutionLogRecordRecord.EventName), filter.EventName) + .In(nameof(WorkflowExecutionLogRecordRecord.ActivityId), filter.EventNames) + .IsNot(nameof(WorkflowExecutionLogRecordRecord.ActivityType), filter.ExcludeActivityType) + .NotIn(nameof(WorkflowExecutionLogRecordRecord.ActivityType), filter.ExcludeActivityTypes) + ; + } + + private Page Map(Page source) + { + return new(source.Items.Select(Map).ToList(), source.TotalCount); + } + + private WorkflowExecutionLogRecordRecord Map(WorkflowExecutionLogRecord source) + { + return new() + { + Id = source.Id, + WorkflowDefinitionId = source.WorkflowDefinitionId, + WorkflowDefinitionVersionId = source.WorkflowDefinitionVersionId, + WorkflowInstanceId = source.WorkflowInstanceId, + WorkflowVersion = source.WorkflowVersion, + ActivityInstanceId = source.ActivityInstanceId, + ParentActivityInstanceId = source.ParentActivityInstanceId, + ActivityId = source.ActivityId, + ActivityType = source.ActivityType, + ActivityTypeVersion = source.ActivityTypeVersion, + ActivityName = source.ActivityName, + ActivityNodeId = source.ActivityNodeId, + Timestamp = source.Timestamp, + Sequence = source.Sequence, + EventName = source.EventName, + Message = source.Message, + Source = source.Source, + SerializedPayload = ShouldSerializePayload(source) ? payloadSerializer.Serialize(source.Payload!) : null, + TenantId = source.TenantId + }; + } + + private bool ShouldSerializePayload(WorkflowExecutionLogRecord source) + { + return source.Payload switch + { + null => false, + IDictionary dictionary => dictionary.Count > 0, + _ => true + }; + } + + private WorkflowExecutionLogRecord Map(WorkflowExecutionLogRecordRecord source) + { + return new() + { + Id = source.Id, + WorkflowDefinitionId = source.WorkflowDefinitionId, + WorkflowDefinitionVersionId = source.WorkflowDefinitionVersionId, + WorkflowInstanceId = source.WorkflowInstanceId, + WorkflowVersion = source.WorkflowVersion, + ActivityInstanceId = source.ActivityInstanceId, + ParentActivityInstanceId = source.ParentActivityInstanceId, + ActivityId = source.ActivityId, + ActivityType = source.ActivityType, + ActivityTypeVersion = source.ActivityTypeVersion, + ActivityName = source.ActivityName, + ActivityNodeId = source.ActivityNodeId, + Timestamp = source.Timestamp, + Sequence = source.Sequence, + EventName = source.EventName, + Message = source.Message, + Source = source.Source, + Payload = source.SerializedPayload != null ? payloadSerializer.Deserialize(source.SerializedPayload) : null, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Modules/Runtime/Stores/KeyValueStore.cs b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/KeyValueStore.cs new file mode 100644 index 0000000..7323281 --- /dev/null +++ b/src/modules/Elsa.Dapper/Modules/Runtime/Stores/KeyValueStore.cs @@ -0,0 +1,72 @@ +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Modules.Runtime.Records; +using Elsa.Dapper.Services; +using Elsa.KeyValues.Contracts; +using Elsa.KeyValues.Entities; +using Elsa.KeyValues.Models; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Modules.Runtime.Stores; + +/// +/// A Dapper implementation of . +/// +[UsedImplicitly] +internal class DapperKeyValueStore(Store store) : IKeyValueStore +{ + /// + public Task SaveAsync(SerializedKeyValuePair keyValuePair, CancellationToken cancellationToken) + { + var record = Map(keyValuePair); + return store.SaveAsync(record, cancellationToken); + } + + /// + public async Task FindAsync(KeyValueFilter filter, CancellationToken cancellationToken) + { + var record = await store.FindAsync(q => ApplyFilter(q, filter), cancellationToken); + return record == null ? null : Map(record); + } + + /// + public async Task> FindManyAsync(KeyValueFilter filter, CancellationToken cancellationToken) + { + var records = await store.FindManyAsync(q => ApplyFilter(q, filter), cancellationToken); + return records.Select(Map); + } + + /// + public Task DeleteAsync(string key, CancellationToken cancellationToken) + { + return store.DeleteAsync(query => query.Is(nameof(KeyValuePairRecord.Id), key), cancellationToken); + } + + private void ApplyFilter(ParameterizedQuery query, KeyValueFilter filter) + { + query + .Is(nameof(KeyValuePairRecord.Id), filter.Key) + .In(nameof(KeyValuePairRecord.Id), filter.Keys) + .StartsWith(nameof(KeyValuePairRecord.Id), filter.StartsWith, filter.Key); + } + + private KeyValuePairRecord Map(SerializedKeyValuePair source) + { + return new() + { + Id = source.Id, + Value = source.SerializedValue, + TenantId = source.TenantId + }; + } + + private SerializedKeyValuePair Map(KeyValuePairRecord source) + { + return new() + { + Id = source.Id, + SerializedValue = source.Value, + TenantId = source.TenantId + }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Records/Record.cs b/src/modules/Elsa.Dapper/Records/Record.cs new file mode 100644 index 0000000..00fd535 --- /dev/null +++ b/src/modules/Elsa.Dapper/Records/Record.cs @@ -0,0 +1,7 @@ +namespace Elsa.Dapper.Records; + +public class Record +{ + public string Id { get; set; } = default!; + public string? TenantId { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Services/PostgreSqlDbConnectionProvider.cs b/src/modules/Elsa.Dapper/Services/PostgreSqlDbConnectionProvider.cs new file mode 100644 index 0000000..971145d --- /dev/null +++ b/src/modules/Elsa.Dapper/Services/PostgreSqlDbConnectionProvider.cs @@ -0,0 +1,48 @@ +using System.Data; +using Elsa.Dapper.Contracts; +using Elsa.Dapper.Dialects; +using JetBrains.Annotations; +using Npgsql; + +namespace Elsa.Dapper.Services; + +/// +/// Provides a PostgreSql connection to the database. +/// +[PublicAPI] +public class PostgreSqlDbConnectionProvider : IDbConnectionProvider +{ + private readonly string _connectionString = ""; + + /// + /// Initializes a new instance of the class. + /// + public PostgreSqlDbConnectionProvider() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The connection string to use. + public PostgreSqlDbConnectionProvider(string connectionString) + { + _connectionString = connectionString; + } + + + /// + public string GetConnectionString() => _connectionString; + + /// + public IDbConnection GetConnection() + { + return new NpgsqlConnection + { + ConnectionString = GetConnectionString() + }; + } + + /// + public ISqlDialect Dialect => new PostgreSqlDialect(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Services/SqlServerDbConnectionProvider.cs b/src/modules/Elsa.Dapper/Services/SqlServerDbConnectionProvider.cs new file mode 100644 index 0000000..f6d03a2 --- /dev/null +++ b/src/modules/Elsa.Dapper/Services/SqlServerDbConnectionProvider.cs @@ -0,0 +1,47 @@ +using System.Data; +using Elsa.Dapper.Contracts; +using Elsa.Dapper.Dialects; +using JetBrains.Annotations; +using Microsoft.Data.SqlClient; + +namespace Elsa.Dapper.Services; + +/// +/// Provides a SQLite connection to the database. +/// +[PublicAPI] +public class SqlServerDbConnectionProvider : IDbConnectionProvider +{ + private readonly string _connectionString = "Server=localhost;Database=Elsa;Trusted_Connection=True;"; + + /// + /// Initializes a new instance of the class. + /// + public SqlServerDbConnectionProvider() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The connection string to use. + public SqlServerDbConnectionProvider(string connectionString) + { + _connectionString = connectionString; + } + + /// + public string GetConnectionString() =>_connectionString; + + /// + public IDbConnection GetConnection() + { + return new SqlConnection + { + ConnectionString = GetConnectionString() + }; + } + + /// + public ISqlDialect Dialect => new SqlServerDialect(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Services/SqliteDbConnectionProvider.cs b/src/modules/Elsa.Dapper/Services/SqliteDbConnectionProvider.cs new file mode 100644 index 0000000..26e4aa7 --- /dev/null +++ b/src/modules/Elsa.Dapper/Services/SqliteDbConnectionProvider.cs @@ -0,0 +1,56 @@ +using System.Data; +using Dapper; +using Elsa.Dapper.Contracts; +using Elsa.Dapper.Dialects; +using Elsa.Dapper.TypeHandlers.Sqlite; +using JetBrains.Annotations; +using Microsoft.Data.Sqlite; + +namespace Elsa.Dapper.Services; + +/// +/// Provides a SQLite connection to the database. +/// +[PublicAPI] +public class SqliteDbConnectionProvider : IDbConnectionProvider +{ + private readonly string _connectionString = "Data Source=:memory:;Cache=Shared"; + + static SqliteDbConnectionProvider() + { + // See: https://learn.microsoft.com/en-us/dotnet/standard/data/sqlite/dapper-limitations#data-types + SqlMapper.AddTypeHandler(new DateTimeOffsetHandler()); + SqlMapper.AddTypeHandler(new TimeSpanHandler()); + } + + /// + /// Initializes a new instance of the class. + /// + public SqliteDbConnectionProvider() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The connection string to use. + public SqliteDbConnectionProvider(string connectionString) + { + _connectionString = connectionString; + } + + /// + public string GetConnectionString() => _connectionString; + + /// + public IDbConnection GetConnection() + { + return new SqliteConnection + { + ConnectionString = GetConnectionString() + }; + } + + /// + public ISqlDialect Dialect => new SqliteDialect(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/Services/Store.cs b/src/modules/Elsa.Dapper/Services/Store.cs new file mode 100644 index 0000000..1c77912 --- /dev/null +++ b/src/modules/Elsa.Dapper/Services/Store.cs @@ -0,0 +1,542 @@ +using System.Linq.Expressions; +using Dapper; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Common.Multitenancy; +using Elsa.Dapper.Contracts; +using Elsa.Dapper.Extensions; +using Elsa.Dapper.Models; +using Elsa.Dapper.Records; +using Elsa.Extensions; +using JetBrains.Annotations; + +namespace Elsa.Dapper.Services; + +/// +/// Provides a generic store using Dapper. +/// +[PublicAPI] +public class Store(IDbConnectionProvider dbConnectionProvider, ITenantAccessor tenantAccessor, string tableName, string primaryKey = "Id") + where T : notnull +{ + /// + /// The name of the table. + /// + public string TableName { get; } = tableName; + + /// + /// The name of the primary key column. + /// + public string PrimaryKey { get; } = primaryKey; + + /// + /// Finds a single record. + /// + /// The conditions to apply to the query. + /// The cancellation token. + /// The record, if found. + public async Task FindAsync(Action filter, CancellationToken cancellationToken = default) + { + return await FindAsync(filter, false, cancellationToken); + } + + /// + /// Finds a single record. + /// + /// The conditions to apply to the query. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// The record, if found. + public async Task FindAsync(Action filter, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + return await FindAsync(filter, null, null, tenantAgnostic, cancellationToken); + } + + /// + /// Finds a single record using the specified order key selector and order direction. + /// + /// The conditions to apply to the query. + /// The order key. + /// The order direction. + /// The cancellation token. + /// The record, if found. + public async Task FindAsync(Action filter, string orderKey, OrderDirection orderDirection, CancellationToken cancellationToken = default) + { + return await FindAsync(filter, orderKey, orderDirection, false, cancellationToken); + } + + /// + /// Finds a single record using the specified order key selector and order direction. + /// + /// The conditions to apply to the query. + /// The order key. + /// The order direction. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// The record, if found. + public async Task FindAsync(Action filter, string? orderKey = null, OrderDirection? orderDirection = null, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + var query = dbConnectionProvider.CreateQuery().From(TableName); + ApplyTenantFilter(query, tenantAgnostic); + filter(query); + + if (orderKey != null && orderDirection != null) + query = query.OrderBy(orderKey, orderDirection.Value); + + using var connection = dbConnectionProvider.GetConnection(); + return await query.FirstOrDefaultAsync(connection); + } + + /// + /// Returns a page of records. + /// + /// The page arguments. + /// The order key selector. + /// The order direction. + /// The cancellation token. + /// A page of records. + public async Task> ListAsync(PageArgs pageArgs, string orderKey, OrderDirection orderDirection, CancellationToken cancellationToken = default) + { + return await FindManyAsync(null, pageArgs, orderKey, orderDirection, false, cancellationToken); + } + + /// + /// Returns a page of records. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The order key selector. + /// The order direction. + /// The cancellation token. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, string orderKey, OrderDirection orderDirection, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, orderKey, orderDirection, false, cancellationToken); + } + + /// + /// Returns a page of records. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The order key selector. + /// The order direction. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, string orderKey, OrderDirection orderDirection, bool tenantAgnostic, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, orderKey, orderDirection, tenantAgnostic, cancellationToken); + } + + /// + /// Returns a page of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The fields by which to order the results. + /// The cancellation token. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, IEnumerable orderFields, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, orderFields, false, cancellationToken); + } + + /// + /// Returns a page of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The fields by which to order the results. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, IEnumerable orderFields, bool tenantAgnostic, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, orderFields, tenantAgnostic, cancellationToken); + } + + /// + /// Returns a page of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The order key selector. + /// The order direction. + /// The cancellation token. + /// The shape type. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, string orderKey, OrderDirection orderDirection, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, orderKey, orderDirection, false, cancellationToken); + } + + /// + /// Returns a page of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The order key selector. + /// The order direction. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// The shape type. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, string orderKey, OrderDirection orderDirection, bool tenantAgnostic, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, new[] + { + new OrderField(orderKey, orderDirection) + }, tenantAgnostic, cancellationToken); + } + + /// + /// Returns a page of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The fields by which to order the results. + /// The cancellation token. + /// The shape type. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, IEnumerable orderFields, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, pageArgs, orderFields, false, cancellationToken); + } + + /// + /// Returns a page of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The fields by which to order the results. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// The shape type. + /// A page of records. + public async Task> FindManyAsync(Action? filter, PageArgs pageArgs, IEnumerable orderFields, bool tenantAgnostic, CancellationToken cancellationToken = default) + { + var query = dbConnectionProvider.CreateQuery().From(TableName); + ApplyTenantFilter(query, tenantAgnostic); + filter?.Invoke(query); + query = query.OrderBy(orderFields.ToArray()).Page(pageArgs); + + var countQuery = dbConnectionProvider.CreateQuery().Count(TableName); + filter?.Invoke(countQuery); + + using var connection = dbConnectionProvider.GetConnection(); + var records = (await query.QueryAsync(connection)).ToList(); + var totalCount = await countQuery.SingleAsync(connection); + return Page.Of(records, totalCount); + } + + /// + /// Returns a set of records. + /// + /// The conditions to apply to the query. + /// The cancellation token. + /// A set of records. + public async Task> FindManyAsync(Action filter, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, false, cancellationToken); + } + + /// + /// Returns a set of records. + /// + /// The conditions to apply to the query. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// A set of records. + public async Task> FindManyAsync(Action filter, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, tenantAgnostic, cancellationToken); + } + + /// + /// Returns a set of records in the specified shape. + /// + /// The conditions to apply to the query. + /// The cancellation token. + /// The shape type. + /// A set of records. + public async Task> FindManyAsync(Action filter, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, false, cancellationToken); + } + + /// + /// Returns a set of records in the specified shape. + /// + /// The conditions to apply to the query. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// /// The shape type. + /// A set of records. + public async Task> FindManyAsync(Action filter, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + using var connection = dbConnectionProvider.GetConnection(); + var query = dbConnectionProvider.CreateQuery().From(TableName); + ApplyTenantFilter(query, tenantAgnostic); + filter(query); + return await query.QueryAsync(connection); + } + + /// + /// Returns a set of records, ordered by the specified key selector in the specified direction. + /// + /// The conditions to apply to the query. + /// The order key selector. + /// The order direction. + /// The cancellation token. + /// A set of records. + public async Task> FindManyAsync(Action filter, string orderKey, OrderDirection orderDirection, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, orderKey, orderDirection, false, cancellationToken); + } + + /// + /// Returns a set of records, ordered by the specified key selector in the specified direction. + /// + /// The conditions to apply to the query. + /// The order key selector. + /// The order direction. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// A set of records. + public async Task> FindManyAsync(Action filter, string orderKey, OrderDirection orderDirection, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, orderKey, orderDirection, tenantAgnostic, cancellationToken); + } + + /// + /// Returns a set of records in the specified shape, ordered by the specified key selector in the specified direction. + /// + /// The conditions to apply to the query. + /// The order key selector. + /// The order direction. + /// The cancellation token. + /// A set of records. + public async Task> FindManyAsync(Action filter, string orderKey, OrderDirection orderDirection, CancellationToken cancellationToken = default) + { + return await FindManyAsync(filter, orderKey, orderDirection, false, cancellationToken); + } + + /// + /// Returns a set of records in the specified shape, ordered by the specified key selector in the specified direction. + /// + /// The conditions to apply to the query. + /// The order key selector. + /// The order direction. + /// Whether to ignore the tenant filter. + /// The cancellation token. + /// A set of records. + public async Task> FindManyAsync(Action filter, string orderKey, OrderDirection orderDirection, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + using var connection = dbConnectionProvider.GetConnection(); + var query = dbConnectionProvider.CreateQuery().From(TableName); + ApplyTenantFilter(query, tenantAgnostic); + filter(query); + query = query.OrderBy(orderKey, orderDirection); + return await query.QueryAsync(connection); + } + + /// + /// Adds or updates the specified record. + /// + /// The record. + /// The cancellation token. + public async Task SaveAsync(T record, CancellationToken cancellationToken = default) + { + using var connection = dbConnectionProvider.GetConnection(); + SetTenantId(record); + var query = new ParameterizedQuery(dbConnectionProvider.Dialect).Upsert(TableName, PrimaryKey, record); + await query.ExecuteAsync(connection); + } + + /// + /// Adds or updates the specified records. + /// + /// The records. + /// The cancellation token. + public async Task SaveManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var recordsList = records.ToList(); + + if (!recordsList.Any()) + return; + + var query = new ParameterizedQuery(dbConnectionProvider.Dialect); + var currentIndex = 0; + + foreach (var record in recordsList) + { + var index = currentIndex; + SetTenantId(record); + query.Upsert(TableName, PrimaryKey, record, field => $"{field}_{index}"); + currentIndex++; + } + + using var connection = dbConnectionProvider.GetConnection(); + await query.ExecuteAsync(connection); + } + + /// + /// Adds the specified record. + /// + /// The record. + /// The cancellation token. + public async Task AddAsync(T record, CancellationToken cancellationToken = default) + { + using var connection = dbConnectionProvider.GetConnection(); + SetTenantId(record); + var query = new ParameterizedQuery(dbConnectionProvider.Dialect).Insert(TableName, record); + await query.ExecuteAsync(connection); + } + + /// + /// Adds the specified records. + /// + /// The records. + /// The cancellation token. + public async Task AddManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + var recordsList = records.ToList(); + + if (!recordsList.Any()) + return; + + var query = new ParameterizedQuery(dbConnectionProvider.Dialect); + var currentIndex = 0; + + foreach (var record in recordsList) + { + var index = currentIndex; + SetTenantId(record); + query.Insert(TableName, record, field => $"{field}_{index}"); + currentIndex++; + } + + using var connection = dbConnectionProvider.GetConnection(); + await query.ExecuteAsync(connection); + } + + /// + /// Updates the specified record. + /// + /// The record. + /// The cancellation token. + public async Task UpdateAsync(T record, CancellationToken cancellationToken = default) + { + using var connection = dbConnectionProvider.GetConnection(); + SetTenantId(record); + var query = new ParameterizedQuery(dbConnectionProvider.Dialect).Update(TableName, record, PrimaryKey); + await query.ExecuteAsync(connection); + } + + public async Task UpdateAsync(T record, Expression>[] props, CancellationToken cancellationToken = default) + { + using var connection = dbConnectionProvider.GetConnection(); + SetTenantId(record); + var fields = props.Select(x => x.GetPropertyName()).ToArray(); + var query = new ParameterizedQuery(dbConnectionProvider.Dialect).Update(TableName, record, PrimaryKey, fields); + await query.ExecuteAsync(connection); + } + + /// + /// Deletes all records matching the specified query. + /// + /// The conditions to apply to the query. + /// The cancellation token. + /// The number of records deleted. + public async Task DeleteAsync(Action filter, CancellationToken cancellationToken = default) + { + var query = dbConnectionProvider.CreateQuery().Delete(TableName); + filter(query); + + // If there are no conditions, we don't want to delete all records. + if (!query.Parameters.ParameterNames.Any()) + return 0; + + ApplyTenantFilter(query); + + using var connection = dbConnectionProvider.GetConnection(); + return await query.ExecuteAsync(connection); + } + + /// + /// Deletes all records matching the specified query. + /// + /// The conditions to apply to the query. + /// The page arguments. + /// The fields by which to order the results. + /// The primary key. + /// The cancellation token. + /// The number of records deleted. + public async Task DeleteAsync(Action filter, PageArgs pageArgs, IEnumerable orderFields, string primaryKey = "Id", CancellationToken cancellationToken = default) + { + var selectQuery = dbConnectionProvider.CreateQuery().From(TableName, primaryKey); + filter(selectQuery); + + // If there are no conditions, we don't want to delete all records. + if (!selectQuery.Parameters.ParameterNames.Any()) + return 0; + + ApplyTenantFilter(selectQuery, false); + selectQuery = selectQuery.OrderBy(orderFields.ToArray()).Page(pageArgs); + + var deleteQuery = dbConnectionProvider.CreateQuery().Delete(TableName, primaryKey, selectQuery); + using var connection = dbConnectionProvider.GetConnection(); + return await deleteQuery.ExecuteAsync(connection); + } + + /// + /// Returns true if any records match the specified query. + /// + /// The conditions to apply to the query. + /// The cancellation token. + /// true if any records match the specified query. + public async Task AnyAsync(Action filter, CancellationToken cancellationToken = default) + { + var query = dbConnectionProvider.CreateQuery().From(TableName, PrimaryKey); + ApplyTenantFilter(query, false); + filter(query); + using var connection = dbConnectionProvider.GetConnection(); + return await connection.QueryFirstOrDefaultAsync(query.Sql.ToString(), query.Parameters) != null; + } + + /// + /// Returns the number of records matching the specified query. + /// + /// The conditions to apply to the query. + /// The cancellation token. + /// The number of records matching the specified query. + public async Task CountAsync(Action filter, CancellationToken cancellationToken = default) + { + var countQuery = dbConnectionProvider.CreateQuery().Count(TableName); + ApplyTenantFilter(countQuery, false); + filter(countQuery); + using var connection = dbConnectionProvider.GetConnection(); + return await countQuery.SingleAsync(connection); + } + + private void ApplyTenantFilter(ParameterizedQuery query, bool tenantAgnostic = false) + { + if (tenantAgnostic) + return; + + var tenant = tenantAccessor.Tenant; + var tenantId = tenant?.Id; + query.Is(nameof(Record.TenantId), (object?)tenantId ?? DBNull.Value); + } + + private void SetTenantId(T record) + { + if (record is not Record recordWithTenant) + return; + + var tenant = tenantAccessor.Tenant; + var tenantId = tenant?.Id; + recordWithTenant.TenantId = tenantId; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/DateTimeOffsetHandler.cs b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/DateTimeOffsetHandler.cs new file mode 100644 index 0000000..19a0639 --- /dev/null +++ b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/DateTimeOffsetHandler.cs @@ -0,0 +1,9 @@ +namespace Elsa.Dapper.TypeHandlers.Sqlite; + +/// +/// Represents a SQLite type handler for . +/// +internal class DateTimeOffsetHandler : SqliteTypeHandler +{ + public override DateTimeOffset Parse(object value) => DateTimeOffset.Parse((string)value); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/GuidHandler.cs b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/GuidHandler.cs new file mode 100644 index 0000000..c1fe5af --- /dev/null +++ b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/GuidHandler.cs @@ -0,0 +1,9 @@ +namespace Elsa.Dapper.TypeHandlers.Sqlite; + +/// +/// Represents a SQLite type handler for . +/// +internal class GuidHandler : SqliteTypeHandler +{ + public override Guid Parse(object value) => Guid.Parse((string)value); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/SqliteTypeHandler.cs b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/SqliteTypeHandler.cs new file mode 100644 index 0000000..ee45fb4 --- /dev/null +++ b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/SqliteTypeHandler.cs @@ -0,0 +1,14 @@ +using System.Data; +using Dapper; + +namespace Elsa.Dapper.TypeHandlers.Sqlite; + +/// +/// Represents a SQLite type handler. +/// +/// The type of the value. +internal abstract class SqliteTypeHandler : SqlMapper.TypeHandler +{ + // Parameters are converted by Microsoft.Data.Sqlite + public override void SetValue(IDbDataParameter parameter, T value) => parameter.Value = value; +} \ No newline at end of file diff --git a/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/TimeSpanHandler.cs b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/TimeSpanHandler.cs new file mode 100644 index 0000000..d03f3f6 --- /dev/null +++ b/src/modules/Elsa.Dapper/TypeHandlers/Sqlite/TimeSpanHandler.cs @@ -0,0 +1,9 @@ +namespace Elsa.Dapper.TypeHandlers.Sqlite; + +/// +/// Represents a SQLite type handler for . +/// +internal class TimeSpanHandler : SqliteTypeHandler +{ + public override TimeSpan Parse(object value) => TimeSpan.Parse((string)value); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.cs b/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.cs new file mode 100644 index 0000000..e07f60a --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.cs @@ -0,0 +1,223 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.10.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaLexer.g4 by ANTLR 4.10.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +using System; +using System.IO; +using System.Text; +using Antlr4.Runtime; +using Antlr4.Runtime.Atn; +using Antlr4.Runtime.Misc; +using DFA = Antlr4.Runtime.Dfa.DFA; + +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.10.1")] +[System.CLSCompliant(false)] +public partial class ElsaLexer : Lexer { + protected static DFA[] decisionToDFA; + protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); + public const int + EQ=1, GREATER=2, INCREMENT=3, DECREMENT=4, NEW=5, VARIABLE=6, LET=7, IF=8, + THEN=9, ELSE=10, FOR=11, RETURN=12, VOID=13, FLOAT=14, INT=15, STRING=16, + OBJECT=17, EXPRESSION_MARKER=18, SYMBOL=19, COLON=20, SEMICOLON=21, COMMA=22, + PLUS=23, MINUS=24, STAR=25, EQUALS=26, NOT_EQUALS=27, GREATER_EQUALS=28, + LESS=29, LESS_EQUALS=30, LAMBDA=31, PARENTHESES_OPEN=32, PARENTHESES_CLOSE=33, + BRACKET_OPEN=34, BRACKET_CLOSE=35, CURLYBRACE_OPEN=36, CURLYBRACE_CLOSE=37, + EXCLAMATION=38, PIPE=39, PIPE_DBL=40, PERIOD=41, STRING_VAL=42, BACKTICKSTRING_VAL=43, + LINE_COMMENT=44, INTEGER_VAL=45, ID=46, WS=47, ESC=48; + public static string[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static string[] modeNames = { + "DEFAULT_MODE" + }; + + public static readonly string[] ruleNames = { + "EQ", "GREATER", "INCREMENT", "DECREMENT", "NEW", "VARIABLE", "LET", "IF", + "THEN", "ELSE", "FOR", "RETURN", "VOID", "FLOAT", "INT", "STRING", "OBJECT", + "EXPRESSION_MARKER", "SYMBOL", "COLON", "SEMICOLON", "COMMA", "PLUS", + "MINUS", "STAR", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS", "LESS_EQUALS", + "LAMBDA", "PARENTHESES_OPEN", "PARENTHESES_CLOSE", "BRACKET_OPEN", "BRACKET_CLOSE", + "CURLYBRACE_OPEN", "CURLYBRACE_CLOSE", "EXCLAMATION", "PIPE", "PIPE_DBL", + "PERIOD", "STRING_VAL", "BACKTICKSTRING_VAL", "LINE_COMMENT", "INTEGER_VAL", + "ID", "WS", "LETTER", "DIGIT", "ESC" + }; + + + public ElsaLexer(ICharStream input) + : this(input, Console.Out, Console.Error) { } + + public ElsaLexer(ICharStream input, TextWriter output, TextWriter errorOutput) + : base(input, output, errorOutput) + { + Interpreter = new LexerATNSimulator(this, _ATN, decisionToDFA, sharedContextCache); + } + + private static readonly string[] _LiteralNames = { + null, "'='", "'>'", "'++'", "'--'", "'new'", "'variable'", "'let'", "'if'", + "'then'", "'else'", "'for'", "'return'", "'void'", "'float'", "'int'", + "'string'", "'object'", "'expression'", null, "':'", "';'", "','", "'+'", + "'-'", "'*'", "'=='", "'!='", "'>='", "'<'", "'<='", "'=>'", "'('", "')'", + "'['", "']'", "'{'", "'}'", "'!'", "'|'", "'||'", "'.'", null, null, null, + null, null, null, "'\\|'" + }; + private static readonly string[] _SymbolicNames = { + null, "EQ", "GREATER", "INCREMENT", "DECREMENT", "NEW", "VARIABLE", "LET", + "IF", "THEN", "ELSE", "FOR", "RETURN", "VOID", "FLOAT", "INT", "STRING", + "OBJECT", "EXPRESSION_MARKER", "SYMBOL", "COLON", "SEMICOLON", "COMMA", + "PLUS", "MINUS", "STAR", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS", + "LESS_EQUALS", "LAMBDA", "PARENTHESES_OPEN", "PARENTHESES_CLOSE", "BRACKET_OPEN", + "BRACKET_CLOSE", "CURLYBRACE_OPEN", "CURLYBRACE_CLOSE", "EXCLAMATION", + "PIPE", "PIPE_DBL", "PERIOD", "STRING_VAL", "BACKTICKSTRING_VAL", "LINE_COMMENT", + "INTEGER_VAL", "ID", "WS", "ESC" + }; + public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); + + [NotNull] + public override IVocabulary Vocabulary + { + get + { + return DefaultVocabulary; + } + } + + public override string GrammarFileName { get { return "ElsaLexer.g4"; } } + + public override string[] RuleNames { get { return ruleNames; } } + + public override string[] ChannelNames { get { return channelNames; } } + + public override string[] ModeNames { get { return modeNames; } } + + public override int[] SerializedAtn { get { return _serializedATN; } } + + static ElsaLexer() { + decisionToDFA = new DFA[_ATN.NumberOfDecisions]; + for (int i = 0; i < _ATN.NumberOfDecisions; i++) { + decisionToDFA[i] = new DFA(_ATN.GetDecisionState(i), i); + } + } + private static int[] _serializedATN = { + 4,0,48,306,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, + 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21, + 7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28, + 7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35, + 7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42, + 7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49, + 7,49,1,0,1,0,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,5,1,5,1, + 5,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,8,1,8,1,8,1,8, + 1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1, + 11,1,11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1, + 14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1, + 18,1,18,1,19,1,19,1,20,1,20,1,21,1,21,1,22,1,22,1,23,1,23,1,24,1,24,1, + 25,1,25,1,25,1,26,1,26,1,26,1,27,1,27,1,27,1,28,1,28,1,29,1,29,1,29,1, + 30,1,30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1, + 36,1,37,1,37,1,38,1,38,1,39,1,39,1,39,1,40,1,40,1,41,1,41,1,41,1,41,5, + 41,249,8,41,10,41,12,41,252,9,41,1,41,1,41,1,42,1,42,1,42,1,42,5,42,260, + 8,42,10,42,12,42,263,9,42,1,42,1,42,1,43,1,43,1,43,1,43,5,43,271,8,43, + 10,43,12,43,274,9,43,1,43,3,43,277,8,43,1,43,1,43,1,43,1,43,1,44,4,44, + 284,8,44,11,44,12,44,285,1,45,1,45,1,45,5,45,291,8,45,10,45,12,45,294, + 9,45,1,46,1,46,1,46,1,46,1,47,1,47,1,48,1,48,1,49,1,49,1,49,3,250,261, + 272,0,50,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25, + 13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49, + 25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, + 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,0,97, + 0,99,48,1,0,4,4,0,36,36,43,43,61,62,96,96,3,0,9,10,13,13,32,32,3,0,65, + 90,95,95,97,122,1,0,48,57,312,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7, + 1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0, + 0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29, + 1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0, + 0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51, + 1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0, + 0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73, + 1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0, + 0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,99, + 1,0,0,0,1,101,1,0,0,0,3,103,1,0,0,0,5,105,1,0,0,0,7,108,1,0,0,0,9,111, + 1,0,0,0,11,115,1,0,0,0,13,124,1,0,0,0,15,128,1,0,0,0,17,131,1,0,0,0,19, + 136,1,0,0,0,21,141,1,0,0,0,23,145,1,0,0,0,25,152,1,0,0,0,27,157,1,0,0, + 0,29,163,1,0,0,0,31,167,1,0,0,0,33,174,1,0,0,0,35,181,1,0,0,0,37,192,1, + 0,0,0,39,194,1,0,0,0,41,196,1,0,0,0,43,198,1,0,0,0,45,200,1,0,0,0,47,202, + 1,0,0,0,49,204,1,0,0,0,51,206,1,0,0,0,53,209,1,0,0,0,55,212,1,0,0,0,57, + 215,1,0,0,0,59,217,1,0,0,0,61,220,1,0,0,0,63,223,1,0,0,0,65,225,1,0,0, + 0,67,227,1,0,0,0,69,229,1,0,0,0,71,231,1,0,0,0,73,233,1,0,0,0,75,235,1, + 0,0,0,77,237,1,0,0,0,79,239,1,0,0,0,81,242,1,0,0,0,83,244,1,0,0,0,85,255, + 1,0,0,0,87,266,1,0,0,0,89,283,1,0,0,0,91,287,1,0,0,0,93,295,1,0,0,0,95, + 299,1,0,0,0,97,301,1,0,0,0,99,303,1,0,0,0,101,102,5,61,0,0,102,2,1,0,0, + 0,103,104,5,62,0,0,104,4,1,0,0,0,105,106,5,43,0,0,106,107,5,43,0,0,107, + 6,1,0,0,0,108,109,5,45,0,0,109,110,5,45,0,0,110,8,1,0,0,0,111,112,5,110, + 0,0,112,113,5,101,0,0,113,114,5,119,0,0,114,10,1,0,0,0,115,116,5,118,0, + 0,116,117,5,97,0,0,117,118,5,114,0,0,118,119,5,105,0,0,119,120,5,97,0, + 0,120,121,5,98,0,0,121,122,5,108,0,0,122,123,5,101,0,0,123,12,1,0,0,0, + 124,125,5,108,0,0,125,126,5,101,0,0,126,127,5,116,0,0,127,14,1,0,0,0,128, + 129,5,105,0,0,129,130,5,102,0,0,130,16,1,0,0,0,131,132,5,116,0,0,132,133, + 5,104,0,0,133,134,5,101,0,0,134,135,5,110,0,0,135,18,1,0,0,0,136,137,5, + 101,0,0,137,138,5,108,0,0,138,139,5,115,0,0,139,140,5,101,0,0,140,20,1, + 0,0,0,141,142,5,102,0,0,142,143,5,111,0,0,143,144,5,114,0,0,144,22,1,0, + 0,0,145,146,5,114,0,0,146,147,5,101,0,0,147,148,5,116,0,0,148,149,5,117, + 0,0,149,150,5,114,0,0,150,151,5,110,0,0,151,24,1,0,0,0,152,153,5,118,0, + 0,153,154,5,111,0,0,154,155,5,105,0,0,155,156,5,100,0,0,156,26,1,0,0,0, + 157,158,5,102,0,0,158,159,5,108,0,0,159,160,5,111,0,0,160,161,5,97,0,0, + 161,162,5,116,0,0,162,28,1,0,0,0,163,164,5,105,0,0,164,165,5,110,0,0,165, + 166,5,116,0,0,166,30,1,0,0,0,167,168,5,115,0,0,168,169,5,116,0,0,169,170, + 5,114,0,0,170,171,5,105,0,0,171,172,5,110,0,0,172,173,5,103,0,0,173,32, + 1,0,0,0,174,175,5,111,0,0,175,176,5,98,0,0,176,177,5,106,0,0,177,178,5, + 101,0,0,178,179,5,99,0,0,179,180,5,116,0,0,180,34,1,0,0,0,181,182,5,101, + 0,0,182,183,5,120,0,0,183,184,5,112,0,0,184,185,5,114,0,0,185,186,5,101, + 0,0,186,187,5,115,0,0,187,188,5,115,0,0,188,189,5,105,0,0,189,190,5,111, + 0,0,190,191,5,110,0,0,191,36,1,0,0,0,192,193,7,0,0,0,193,38,1,0,0,0,194, + 195,5,58,0,0,195,40,1,0,0,0,196,197,5,59,0,0,197,42,1,0,0,0,198,199,5, + 44,0,0,199,44,1,0,0,0,200,201,5,43,0,0,201,46,1,0,0,0,202,203,5,45,0,0, + 203,48,1,0,0,0,204,205,5,42,0,0,205,50,1,0,0,0,206,207,5,61,0,0,207,208, + 5,61,0,0,208,52,1,0,0,0,209,210,5,33,0,0,210,211,5,61,0,0,211,54,1,0,0, + 0,212,213,5,62,0,0,213,214,5,61,0,0,214,56,1,0,0,0,215,216,5,60,0,0,216, + 58,1,0,0,0,217,218,5,60,0,0,218,219,5,61,0,0,219,60,1,0,0,0,220,221,5, + 61,0,0,221,222,5,62,0,0,222,62,1,0,0,0,223,224,5,40,0,0,224,64,1,0,0,0, + 225,226,5,41,0,0,226,66,1,0,0,0,227,228,5,91,0,0,228,68,1,0,0,0,229,230, + 5,93,0,0,230,70,1,0,0,0,231,232,5,123,0,0,232,72,1,0,0,0,233,234,5,125, + 0,0,234,74,1,0,0,0,235,236,5,33,0,0,236,76,1,0,0,0,237,238,5,124,0,0,238, + 78,1,0,0,0,239,240,5,124,0,0,240,241,5,124,0,0,241,80,1,0,0,0,242,243, + 5,46,0,0,243,82,1,0,0,0,244,250,5,34,0,0,245,246,5,92,0,0,246,249,5,34, + 0,0,247,249,9,0,0,0,248,245,1,0,0,0,248,247,1,0,0,0,249,252,1,0,0,0,250, + 251,1,0,0,0,250,248,1,0,0,0,251,253,1,0,0,0,252,250,1,0,0,0,253,254,5, + 34,0,0,254,84,1,0,0,0,255,261,5,96,0,0,256,257,5,92,0,0,257,260,5,34,0, + 0,258,260,9,0,0,0,259,256,1,0,0,0,259,258,1,0,0,0,260,263,1,0,0,0,261, + 262,1,0,0,0,261,259,1,0,0,0,262,264,1,0,0,0,263,261,1,0,0,0,264,265,5, + 96,0,0,265,86,1,0,0,0,266,267,5,47,0,0,267,268,5,47,0,0,268,272,1,0,0, + 0,269,271,9,0,0,0,270,269,1,0,0,0,271,274,1,0,0,0,272,273,1,0,0,0,272, + 270,1,0,0,0,273,276,1,0,0,0,274,272,1,0,0,0,275,277,5,13,0,0,276,275,1, + 0,0,0,276,277,1,0,0,0,277,278,1,0,0,0,278,279,5,10,0,0,279,280,1,0,0,0, + 280,281,6,43,0,0,281,88,1,0,0,0,282,284,3,97,48,0,283,282,1,0,0,0,284, + 285,1,0,0,0,285,283,1,0,0,0,285,286,1,0,0,0,286,90,1,0,0,0,287,292,3,95, + 47,0,288,291,3,95,47,0,289,291,3,97,48,0,290,288,1,0,0,0,290,289,1,0,0, + 0,291,294,1,0,0,0,292,290,1,0,0,0,292,293,1,0,0,0,293,92,1,0,0,0,294,292, + 1,0,0,0,295,296,7,1,0,0,296,297,1,0,0,0,297,298,6,46,0,0,298,94,1,0,0, + 0,299,300,7,2,0,0,300,96,1,0,0,0,301,302,7,3,0,0,302,98,1,0,0,0,303,304, + 5,92,0,0,304,305,5,124,0,0,305,100,1,0,0,0,10,0,248,250,259,261,272,276, + 285,290,292,1,6,0,0 + }; + + public static readonly ATN _ATN = + new ATNDeserializer().Deserialize(_serializedATN); + + +} diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.interp b/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.interp new file mode 100644 index 0000000..fbc6e3e --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.interp @@ -0,0 +1,163 @@ +token literal names: +null +'=' +'>' +'++' +'--' +'new' +'variable' +'let' +'if' +'then' +'else' +'for' +'return' +'void' +'float' +'int' +'string' +'object' +'expression' +null +':' +';' +',' +'+' +'-' +'*' +'==' +'!=' +'>=' +'<' +'<=' +'=>' +'(' +')' +'[' +']' +'{' +'}' +'!' +'|' +'||' +'.' +null +null +null +null +null +null +'\\|' + +token symbolic names: +null +EQ +GREATER +INCREMENT +DECREMENT +NEW +VARIABLE +LET +IF +THEN +ELSE +FOR +RETURN +VOID +FLOAT +INT +STRING +OBJECT +EXPRESSION_MARKER +SYMBOL +COLON +SEMICOLON +COMMA +PLUS +MINUS +STAR +EQUALS +NOT_EQUALS +GREATER_EQUALS +LESS +LESS_EQUALS +LAMBDA +PARENTHESES_OPEN +PARENTHESES_CLOSE +BRACKET_OPEN +BRACKET_CLOSE +CURLYBRACE_OPEN +CURLYBRACE_CLOSE +EXCLAMATION +PIPE +PIPE_DBL +PERIOD +STRING_VAL +BACKTICKSTRING_VAL +LINE_COMMENT +INTEGER_VAL +ID +WS +ESC + +rule names: +EQ +GREATER +INCREMENT +DECREMENT +NEW +VARIABLE +LET +IF +THEN +ELSE +FOR +RETURN +VOID +FLOAT +INT +STRING +OBJECT +EXPRESSION_MARKER +SYMBOL +COLON +SEMICOLON +COMMA +PLUS +MINUS +STAR +EQUALS +NOT_EQUALS +GREATER_EQUALS +LESS +LESS_EQUALS +LAMBDA +PARENTHESES_OPEN +PARENTHESES_CLOSE +BRACKET_OPEN +BRACKET_CLOSE +CURLYBRACE_OPEN +CURLYBRACE_CLOSE +EXCLAMATION +PIPE +PIPE_DBL +PERIOD +STRING_VAL +BACKTICKSTRING_VAL +LINE_COMMENT +INTEGER_VAL +ID +WS +LETTER +DIGIT +ESC + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 48, 306, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 249, 8, 41, 10, 41, 12, 41, 252, 9, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 260, 8, 42, 10, 42, 12, 42, 263, 9, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 271, 8, 43, 10, 43, 12, 43, 274, 9, 43, 1, 43, 3, 43, 277, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 4, 44, 284, 8, 44, 11, 44, 12, 44, 285, 1, 45, 1, 45, 1, 45, 5, 45, 291, 8, 45, 10, 45, 12, 45, 294, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 250, 261, 272, 0, 50, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 0, 97, 0, 99, 48, 1, 0, 4, 4, 0, 36, 36, 43, 43, 61, 62, 96, 96, 3, 0, 9, 10, 13, 13, 32, 32, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 312, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 1, 101, 1, 0, 0, 0, 3, 103, 1, 0, 0, 0, 5, 105, 1, 0, 0, 0, 7, 108, 1, 0, 0, 0, 9, 111, 1, 0, 0, 0, 11, 115, 1, 0, 0, 0, 13, 124, 1, 0, 0, 0, 15, 128, 1, 0, 0, 0, 17, 131, 1, 0, 0, 0, 19, 136, 1, 0, 0, 0, 21, 141, 1, 0, 0, 0, 23, 145, 1, 0, 0, 0, 25, 152, 1, 0, 0, 0, 27, 157, 1, 0, 0, 0, 29, 163, 1, 0, 0, 0, 31, 167, 1, 0, 0, 0, 33, 174, 1, 0, 0, 0, 35, 181, 1, 0, 0, 0, 37, 192, 1, 0, 0, 0, 39, 194, 1, 0, 0, 0, 41, 196, 1, 0, 0, 0, 43, 198, 1, 0, 0, 0, 45, 200, 1, 0, 0, 0, 47, 202, 1, 0, 0, 0, 49, 204, 1, 0, 0, 0, 51, 206, 1, 0, 0, 0, 53, 209, 1, 0, 0, 0, 55, 212, 1, 0, 0, 0, 57, 215, 1, 0, 0, 0, 59, 217, 1, 0, 0, 0, 61, 220, 1, 0, 0, 0, 63, 223, 1, 0, 0, 0, 65, 225, 1, 0, 0, 0, 67, 227, 1, 0, 0, 0, 69, 229, 1, 0, 0, 0, 71, 231, 1, 0, 0, 0, 73, 233, 1, 0, 0, 0, 75, 235, 1, 0, 0, 0, 77, 237, 1, 0, 0, 0, 79, 239, 1, 0, 0, 0, 81, 242, 1, 0, 0, 0, 83, 244, 1, 0, 0, 0, 85, 255, 1, 0, 0, 0, 87, 266, 1, 0, 0, 0, 89, 283, 1, 0, 0, 0, 91, 287, 1, 0, 0, 0, 93, 295, 1, 0, 0, 0, 95, 299, 1, 0, 0, 0, 97, 301, 1, 0, 0, 0, 99, 303, 1, 0, 0, 0, 101, 102, 5, 61, 0, 0, 102, 2, 1, 0, 0, 0, 103, 104, 5, 62, 0, 0, 104, 4, 1, 0, 0, 0, 105, 106, 5, 43, 0, 0, 106, 107, 5, 43, 0, 0, 107, 6, 1, 0, 0, 0, 108, 109, 5, 45, 0, 0, 109, 110, 5, 45, 0, 0, 110, 8, 1, 0, 0, 0, 111, 112, 5, 110, 0, 0, 112, 113, 5, 101, 0, 0, 113, 114, 5, 119, 0, 0, 114, 10, 1, 0, 0, 0, 115, 116, 5, 118, 0, 0, 116, 117, 5, 97, 0, 0, 117, 118, 5, 114, 0, 0, 118, 119, 5, 105, 0, 0, 119, 120, 5, 97, 0, 0, 120, 121, 5, 98, 0, 0, 121, 122, 5, 108, 0, 0, 122, 123, 5, 101, 0, 0, 123, 12, 1, 0, 0, 0, 124, 125, 5, 108, 0, 0, 125, 126, 5, 101, 0, 0, 126, 127, 5, 116, 0, 0, 127, 14, 1, 0, 0, 0, 128, 129, 5, 105, 0, 0, 129, 130, 5, 102, 0, 0, 130, 16, 1, 0, 0, 0, 131, 132, 5, 116, 0, 0, 132, 133, 5, 104, 0, 0, 133, 134, 5, 101, 0, 0, 134, 135, 5, 110, 0, 0, 135, 18, 1, 0, 0, 0, 136, 137, 5, 101, 0, 0, 137, 138, 5, 108, 0, 0, 138, 139, 5, 115, 0, 0, 139, 140, 5, 101, 0, 0, 140, 20, 1, 0, 0, 0, 141, 142, 5, 102, 0, 0, 142, 143, 5, 111, 0, 0, 143, 144, 5, 114, 0, 0, 144, 22, 1, 0, 0, 0, 145, 146, 5, 114, 0, 0, 146, 147, 5, 101, 0, 0, 147, 148, 5, 116, 0, 0, 148, 149, 5, 117, 0, 0, 149, 150, 5, 114, 0, 0, 150, 151, 5, 110, 0, 0, 151, 24, 1, 0, 0, 0, 152, 153, 5, 118, 0, 0, 153, 154, 5, 111, 0, 0, 154, 155, 5, 105, 0, 0, 155, 156, 5, 100, 0, 0, 156, 26, 1, 0, 0, 0, 157, 158, 5, 102, 0, 0, 158, 159, 5, 108, 0, 0, 159, 160, 5, 111, 0, 0, 160, 161, 5, 97, 0, 0, 161, 162, 5, 116, 0, 0, 162, 28, 1, 0, 0, 0, 163, 164, 5, 105, 0, 0, 164, 165, 5, 110, 0, 0, 165, 166, 5, 116, 0, 0, 166, 30, 1, 0, 0, 0, 167, 168, 5, 115, 0, 0, 168, 169, 5, 116, 0, 0, 169, 170, 5, 114, 0, 0, 170, 171, 5, 105, 0, 0, 171, 172, 5, 110, 0, 0, 172, 173, 5, 103, 0, 0, 173, 32, 1, 0, 0, 0, 174, 175, 5, 111, 0, 0, 175, 176, 5, 98, 0, 0, 176, 177, 5, 106, 0, 0, 177, 178, 5, 101, 0, 0, 178, 179, 5, 99, 0, 0, 179, 180, 5, 116, 0, 0, 180, 34, 1, 0, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 120, 0, 0, 183, 184, 5, 112, 0, 0, 184, 185, 5, 114, 0, 0, 185, 186, 5, 101, 0, 0, 186, 187, 5, 115, 0, 0, 187, 188, 5, 115, 0, 0, 188, 189, 5, 105, 0, 0, 189, 190, 5, 111, 0, 0, 190, 191, 5, 110, 0, 0, 191, 36, 1, 0, 0, 0, 192, 193, 7, 0, 0, 0, 193, 38, 1, 0, 0, 0, 194, 195, 5, 58, 0, 0, 195, 40, 1, 0, 0, 0, 196, 197, 5, 59, 0, 0, 197, 42, 1, 0, 0, 0, 198, 199, 5, 44, 0, 0, 199, 44, 1, 0, 0, 0, 200, 201, 5, 43, 0, 0, 201, 46, 1, 0, 0, 0, 202, 203, 5, 45, 0, 0, 203, 48, 1, 0, 0, 0, 204, 205, 5, 42, 0, 0, 205, 50, 1, 0, 0, 0, 206, 207, 5, 61, 0, 0, 207, 208, 5, 61, 0, 0, 208, 52, 1, 0, 0, 0, 209, 210, 5, 33, 0, 0, 210, 211, 5, 61, 0, 0, 211, 54, 1, 0, 0, 0, 212, 213, 5, 62, 0, 0, 213, 214, 5, 61, 0, 0, 214, 56, 1, 0, 0, 0, 215, 216, 5, 60, 0, 0, 216, 58, 1, 0, 0, 0, 217, 218, 5, 60, 0, 0, 218, 219, 5, 61, 0, 0, 219, 60, 1, 0, 0, 0, 220, 221, 5, 61, 0, 0, 221, 222, 5, 62, 0, 0, 222, 62, 1, 0, 0, 0, 223, 224, 5, 40, 0, 0, 224, 64, 1, 0, 0, 0, 225, 226, 5, 41, 0, 0, 226, 66, 1, 0, 0, 0, 227, 228, 5, 91, 0, 0, 228, 68, 1, 0, 0, 0, 229, 230, 5, 93, 0, 0, 230, 70, 1, 0, 0, 0, 231, 232, 5, 123, 0, 0, 232, 72, 1, 0, 0, 0, 233, 234, 5, 125, 0, 0, 234, 74, 1, 0, 0, 0, 235, 236, 5, 33, 0, 0, 236, 76, 1, 0, 0, 0, 237, 238, 5, 124, 0, 0, 238, 78, 1, 0, 0, 0, 239, 240, 5, 124, 0, 0, 240, 241, 5, 124, 0, 0, 241, 80, 1, 0, 0, 0, 242, 243, 5, 46, 0, 0, 243, 82, 1, 0, 0, 0, 244, 250, 5, 34, 0, 0, 245, 246, 5, 92, 0, 0, 246, 249, 5, 34, 0, 0, 247, 249, 9, 0, 0, 0, 248, 245, 1, 0, 0, 0, 248, 247, 1, 0, 0, 0, 249, 252, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 250, 248, 1, 0, 0, 0, 251, 253, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 253, 254, 5, 34, 0, 0, 254, 84, 1, 0, 0, 0, 255, 261, 5, 96, 0, 0, 256, 257, 5, 92, 0, 0, 257, 260, 5, 34, 0, 0, 258, 260, 9, 0, 0, 0, 259, 256, 1, 0, 0, 0, 259, 258, 1, 0, 0, 0, 260, 263, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 262, 264, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 264, 265, 5, 96, 0, 0, 265, 86, 1, 0, 0, 0, 266, 267, 5, 47, 0, 0, 267, 268, 5, 47, 0, 0, 268, 272, 1, 0, 0, 0, 269, 271, 9, 0, 0, 0, 270, 269, 1, 0, 0, 0, 271, 274, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 276, 1, 0, 0, 0, 274, 272, 1, 0, 0, 0, 275, 277, 5, 13, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 279, 5, 10, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 6, 43, 0, 0, 281, 88, 1, 0, 0, 0, 282, 284, 3, 97, 48, 0, 283, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 283, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 90, 1, 0, 0, 0, 287, 292, 3, 95, 47, 0, 288, 291, 3, 95, 47, 0, 289, 291, 3, 97, 48, 0, 290, 288, 1, 0, 0, 0, 290, 289, 1, 0, 0, 0, 291, 294, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 92, 1, 0, 0, 0, 294, 292, 1, 0, 0, 0, 295, 296, 7, 1, 0, 0, 296, 297, 1, 0, 0, 0, 297, 298, 6, 46, 0, 0, 298, 94, 1, 0, 0, 0, 299, 300, 7, 2, 0, 0, 300, 96, 1, 0, 0, 0, 301, 302, 7, 3, 0, 0, 302, 98, 1, 0, 0, 0, 303, 304, 5, 92, 0, 0, 304, 305, 5, 124, 0, 0, 305, 100, 1, 0, 0, 0, 10, 0, 248, 250, 259, 261, 272, 276, 285, 290, 292, 1, 6, 0, 0] \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.tokens b/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.tokens new file mode 100644 index 0000000..0d4fb8c --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaLexer.tokens @@ -0,0 +1,89 @@ +EQ=1 +GREATER=2 +INCREMENT=3 +DECREMENT=4 +NEW=5 +VARIABLE=6 +LET=7 +IF=8 +THEN=9 +ELSE=10 +FOR=11 +RETURN=12 +VOID=13 +FLOAT=14 +INT=15 +STRING=16 +OBJECT=17 +EXPRESSION_MARKER=18 +SYMBOL=19 +COLON=20 +SEMICOLON=21 +COMMA=22 +PLUS=23 +MINUS=24 +STAR=25 +EQUALS=26 +NOT_EQUALS=27 +GREATER_EQUALS=28 +LESS=29 +LESS_EQUALS=30 +LAMBDA=31 +PARENTHESES_OPEN=32 +PARENTHESES_CLOSE=33 +BRACKET_OPEN=34 +BRACKET_CLOSE=35 +CURLYBRACE_OPEN=36 +CURLYBRACE_CLOSE=37 +EXCLAMATION=38 +PIPE=39 +PIPE_DBL=40 +PERIOD=41 +STRING_VAL=42 +BACKTICKSTRING_VAL=43 +LINE_COMMENT=44 +INTEGER_VAL=45 +ID=46 +WS=47 +ESC=48 +'='=1 +'>'=2 +'++'=3 +'--'=4 +'new'=5 +'variable'=6 +'let'=7 +'if'=8 +'then'=9 +'else'=10 +'for'=11 +'return'=12 +'void'=13 +'float'=14 +'int'=15 +'string'=16 +'object'=17 +'expression'=18 +':'=20 +';'=21 +','=22 +'+'=23 +'-'=24 +'*'=25 +'=='=26 +'!='=27 +'>='=28 +'<'=29 +'<='=30 +'=>'=31 +'('=32 +')'=33 +'['=34 +']'=35 +'{'=36 +'}'=37 +'!'=38 +'|'=39 +'||'=40 +'.'=41 +'\\|'=48 diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaParser.cs b/src/modules/Elsa.Dsl/Abstractions/ElsaParser.cs new file mode 100644 index 0000000..2be6e17 --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaParser.cs @@ -0,0 +1,2196 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.10.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.10.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +using System; +using System.IO; +using System.Text; +using System.Diagnostics; +using System.Collections.Generic; +using Antlr4.Runtime; +using Antlr4.Runtime.Atn; +using Antlr4.Runtime.Misc; +using Antlr4.Runtime.Tree; +using DFA = Antlr4.Runtime.Dfa.DFA; + +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.10.1")] +[System.CLSCompliant(false)] +public partial class ElsaParser : Parser { + protected static DFA[] decisionToDFA; + protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); + public const int + EQ=1, GREATER=2, INCREMENT=3, DECREMENT=4, NEW=5, VARIABLE=6, LET=7, IF=8, + THEN=9, ELSE=10, FOR=11, RETURN=12, VOID=13, FLOAT=14, INT=15, STRING=16, + OBJECT=17, EXPRESSION_MARKER=18, SYMBOL=19, COLON=20, SEMICOLON=21, COMMA=22, + PLUS=23, MINUS=24, STAR=25, EQUALS=26, NOT_EQUALS=27, GREATER_EQUALS=28, + LESS=29, LESS_EQUALS=30, LAMBDA=31, PARENTHESES_OPEN=32, PARENTHESES_CLOSE=33, + BRACKET_OPEN=34, BRACKET_CLOSE=35, CURLYBRACE_OPEN=36, CURLYBRACE_CLOSE=37, + EXCLAMATION=38, PIPE=39, PIPE_DBL=40, PERIOD=41, STRING_VAL=42, BACKTICKSTRING_VAL=43, + LINE_COMMENT=44, INTEGER_VAL=45, ID=46, WS=47, ESC=48; + public const int + RULE_program = 0, RULE_object = 1, RULE_newObject = 2, RULE_varDecl = 3, + RULE_localVarDecl = 4, RULE_type = 5, RULE_expressionMarker = 6, RULE_expressionContent = 7, + RULE_methodCall = 8, RULE_funcCall = 9, RULE_args = 10, RULE_arg = 11, + RULE_block = 12, RULE_objectInitializer = 13, RULE_propertyList = 14, + RULE_property = 15, RULE_stat = 16, RULE_thenStat = 17, RULE_elseStat = 18, + RULE_expr = 19, RULE_exprList = 20; + public static readonly string[] ruleNames = { + "program", "object", "newObject", "varDecl", "localVarDecl", "type", "expressionMarker", + "expressionContent", "methodCall", "funcCall", "args", "arg", "block", + "objectInitializer", "propertyList", "property", "stat", "thenStat", "elseStat", + "expr", "exprList" + }; + + private static readonly string[] _LiteralNames = { + null, "'='", "'>'", "'++'", "'--'", "'new'", "'variable'", "'let'", "'if'", + "'then'", "'else'", "'for'", "'return'", "'void'", "'float'", "'int'", + "'string'", "'object'", "'expression'", null, "':'", "';'", "','", "'+'", + "'-'", "'*'", "'=='", "'!='", "'>='", "'<'", "'<='", "'=>'", "'('", "')'", + "'['", "']'", "'{'", "'}'", "'!'", "'|'", "'||'", "'.'", null, null, null, + null, null, null, "'\\|'" + }; + private static readonly string[] _SymbolicNames = { + null, "EQ", "GREATER", "INCREMENT", "DECREMENT", "NEW", "VARIABLE", "LET", + "IF", "THEN", "ELSE", "FOR", "RETURN", "VOID", "FLOAT", "INT", "STRING", + "OBJECT", "EXPRESSION_MARKER", "SYMBOL", "COLON", "SEMICOLON", "COMMA", + "PLUS", "MINUS", "STAR", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS", + "LESS_EQUALS", "LAMBDA", "PARENTHESES_OPEN", "PARENTHESES_CLOSE", "BRACKET_OPEN", + "BRACKET_CLOSE", "CURLYBRACE_OPEN", "CURLYBRACE_CLOSE", "EXCLAMATION", + "PIPE", "PIPE_DBL", "PERIOD", "STRING_VAL", "BACKTICKSTRING_VAL", "LINE_COMMENT", + "INTEGER_VAL", "ID", "WS", "ESC" + }; + public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); + + [NotNull] + public override IVocabulary Vocabulary + { + get + { + return DefaultVocabulary; + } + } + + public override string GrammarFileName { get { return "ElsaParser.g4"; } } + + public override string[] RuleNames { get { return ruleNames; } } + + public override int[] SerializedAtn { get { return _serializedATN; } } + + static ElsaParser() { + decisionToDFA = new DFA[_ATN.NumberOfDecisions]; + for (int i = 0; i < _ATN.NumberOfDecisions; i++) { + decisionToDFA[i] = new DFA(_ATN.GetDecisionState(i), i); + } + } + + public ElsaParser(ITokenStream input) : this(input, Console.Out, Console.Error) { } + + public ElsaParser(ITokenStream input, TextWriter output, TextWriter errorOutput) + : base(input, output, errorOutput) + { + Interpreter = new ParserATNSimulator(this, _ATN, decisionToDFA, sharedContextCache); + } + + public partial class ProgramContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public StatContext[] stat() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public StatContext stat(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] LINE_COMMENT() { return GetTokens(ElsaParser.LINE_COMMENT); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LINE_COMMENT(int i) { + return GetToken(ElsaParser.LINE_COMMENT, i); + } + public ProgramContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_program; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitProgram(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ProgramContext program() { + ProgramContext _localctx = new ProgramContext(Context, State); + EnterRule(_localctx, 0, RULE_program); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 46; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << VARIABLE) | (1L << LET) | (1L << IF) | (1L << FOR) | (1L << RETURN) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << CURLYBRACE_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << LINE_COMMENT) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + State = 44; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case NEW: + case VARIABLE: + case LET: + case IF: + case FOR: + case RETURN: + case EXPRESSION_MARKER: + case MINUS: + case PARENTHESES_OPEN: + case BRACKET_OPEN: + case CURLYBRACE_OPEN: + case EXCLAMATION: + case STRING_VAL: + case BACKTICKSTRING_VAL: + case INTEGER_VAL: + case ID: + { + State = 42; + stat(); + } + break; + case LINE_COMMENT: + { + State = 43; + Match(LINE_COMMENT); + } + break; + default: + throw new NoViableAltException(this); + } + } + State = 48; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ObjectContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ObjectInitializerContext objectInitializer() { + return GetRuleContext(0); + } + public ObjectContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_object; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitObject(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ObjectContext @object() { + ObjectContext _localctx = new ObjectContext(Context, State); + EnterRule(_localctx, 2, RULE_object); + try { + EnterOuterAlt(_localctx, 1); + { + State = 49; + Match(ID); + State = 51; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,2,Context) ) { + case 1: + { + State = 50; + objectInitializer(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class NewObjectContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NEW() { return GetToken(ElsaParser.NEW, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_OPEN() { return GetToken(ElsaParser.PARENTHESES_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_CLOSE() { return GetToken(ElsaParser.PARENTHESES_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LESS() { return GetToken(ElsaParser.LESS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TypeContext type() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GREATER() { return GetToken(ElsaParser.GREATER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ArgsContext args() { + return GetRuleContext(0); + } + public NewObjectContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_newObject; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitNewObject(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public NewObjectContext newObject() { + NewObjectContext _localctx = new NewObjectContext(Context, State); + EnterRule(_localctx, 4, RULE_newObject); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 53; + Match(NEW); + State = 54; + Match(ID); + State = 59; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==LESS) { + { + State = 55; + Match(LESS); + State = 56; + type(); + State = 57; + Match(GREATER); + } + } + + State = 61; + Match(PARENTHESES_OPEN); + State = 63; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + State = 62; + args(); + } + } + + State = 65; + Match(PARENTHESES_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class VarDeclContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VARIABLE() { return GetToken(ElsaParser.VARIABLE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLON() { return GetToken(ElsaParser.COLON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TypeContext type() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQ() { return GetToken(ElsaParser.EQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + public VarDeclContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_varDecl; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitVarDecl(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public VarDeclContext varDecl() { + VarDeclContext _localctx = new VarDeclContext(Context, State); + EnterRule(_localctx, 6, RULE_varDecl); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 67; + Match(VARIABLE); + State = 68; + Match(ID); + State = 71; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COLON) { + { + State = 69; + Match(COLON); + State = 70; + type(); + } + } + + State = 75; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==EQ) { + { + State = 73; + Match(EQ); + State = 74; + expr(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class LocalVarDeclContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LET() { return GetToken(ElsaParser.LET, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLON() { return GetToken(ElsaParser.COLON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TypeContext type() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQ() { return GetToken(ElsaParser.EQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + public LocalVarDeclContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_localVarDecl; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitLocalVarDecl(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public LocalVarDeclContext localVarDecl() { + LocalVarDeclContext _localctx = new LocalVarDeclContext(Context, State); + EnterRule(_localctx, 8, RULE_localVarDecl); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 77; + Match(LET); + State = 78; + Match(ID); + State = 81; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COLON) { + { + State = 79; + Match(COLON); + State = 80; + type(); + } + } + + State = 85; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==EQ) { + { + State = 83; + Match(EQ); + State = 84; + expr(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TypeContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VOID() { return GetToken(ElsaParser.VOID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FLOAT() { return GetToken(ElsaParser.FLOAT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INT() { return GetToken(ElsaParser.INT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode OBJECT() { return GetToken(ElsaParser.OBJECT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STRING() { return GetToken(ElsaParser.STRING, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + public TypeContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_type; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitType(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TypeContext type() { + TypeContext _localctx = new TypeContext(Context, State); + EnterRule(_localctx, 10, RULE_type); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 87; + _la = TokenStream.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << VOID) | (1L << FLOAT) | (1L << INT) | (1L << STRING) | (1L << OBJECT) | (1L << ID))) != 0)) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ExpressionMarkerContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXPRESSION_MARKER() { return GetToken(ElsaParser.EXPRESSION_MARKER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_OPEN() { return GetToken(ElsaParser.PARENTHESES_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA() { return GetToken(ElsaParser.COMMA, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContentContext expressionContent() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_CLOSE() { return GetToken(ElsaParser.PARENTHESES_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LAMBDA() { return GetToken(ElsaParser.LAMBDA, 0); } + public ExpressionMarkerContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_expressionMarker; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitExpressionMarker(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ExpressionMarkerContext expressionMarker() { + ExpressionMarkerContext _localctx = new ExpressionMarkerContext(Context, State); + EnterRule(_localctx, 12, RULE_expressionMarker); + try { + State = 99; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case EXPRESSION_MARKER: + EnterOuterAlt(_localctx, 1); + { + State = 89; + Match(EXPRESSION_MARKER); + State = 90; + Match(PARENTHESES_OPEN); + State = 91; + Match(ID); + State = 92; + Match(COMMA); + State = 93; + expressionContent(); + State = 94; + Match(PARENTHESES_CLOSE); + } + break; + case ID: + EnterOuterAlt(_localctx, 2); + { + State = 96; + Match(ID); + State = 97; + Match(LAMBDA); + State = 98; + expressionContent(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ExpressionContentContext : ParserRuleContext { + public ExpressionContentContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_expressionContent; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitExpressionContent(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ExpressionContentContext expressionContent() { + ExpressionContentContext _localctx = new ExpressionContentContext(Context, State); + EnterRule(_localctx, 14, RULE_expressionContent); + try { + int _alt; + EnterOuterAlt(_localctx, 1); + { + State = 104; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,10,Context); + while ( _alt!=1 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1+1 ) { + { + { + State = 101; + MatchWildcard(); + } + } + } + State = 106; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,10,Context); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class MethodCallContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PERIOD() { return GetToken(ElsaParser.PERIOD, 0); } + [System.Diagnostics.DebuggerNonUserCode] public FuncCallContext funcCall() { + return GetRuleContext(0); + } + public MethodCallContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_methodCall; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitMethodCall(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public MethodCallContext methodCall() { + MethodCallContext _localctx = new MethodCallContext(Context, State); + EnterRule(_localctx, 16, RULE_methodCall); + try { + EnterOuterAlt(_localctx, 1); + { + State = 107; + Match(ID); + State = 108; + Match(PERIOD); + State = 109; + funcCall(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class FuncCallContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_OPEN() { return GetToken(ElsaParser.PARENTHESES_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_CLOSE() { return GetToken(ElsaParser.PARENTHESES_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ArgsContext args() { + return GetRuleContext(0); + } + public FuncCallContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_funcCall; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitFuncCall(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public FuncCallContext funcCall() { + FuncCallContext _localctx = new FuncCallContext(Context, State); + EnterRule(_localctx, 18, RULE_funcCall); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 111; + Match(ID); + State = 112; + Match(PARENTHESES_OPEN); + State = 114; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + State = 113; + args(); + } + } + + State = 116; + Match(PARENTHESES_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ArgsContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ArgContext[] arg() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ArgContext arg(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(ElsaParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(ElsaParser.COMMA, i); + } + public ArgsContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_args; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitArgs(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ArgsContext args() { + ArgsContext _localctx = new ArgsContext(Context, State); + EnterRule(_localctx, 20, RULE_args); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 118; + arg(); + State = 123; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 119; + Match(COMMA); + State = 120; + arg(); + } + } + State = 125; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ArgContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionMarkerContext expressionMarker() { + return GetRuleContext(0); + } + public ArgContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_arg; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitArg(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ArgContext arg() { + ArgContext _localctx = new ArgContext(Context, State); + EnterRule(_localctx, 22, RULE_arg); + try { + State = 128; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,13,Context) ) { + case 1: + EnterOuterAlt(_localctx, 1); + { + State = 126; + expr(0); + } + break; + case 2: + EnterOuterAlt(_localctx, 2); + { + State = 127; + expressionMarker(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class BlockContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CURLYBRACE_OPEN() { return GetToken(ElsaParser.CURLYBRACE_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CURLYBRACE_CLOSE() { return GetToken(ElsaParser.CURLYBRACE_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public StatContext[] stat() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public StatContext stat(int i) { + return GetRuleContext(i); + } + public BlockContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_block; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitBlock(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public BlockContext block() { + BlockContext _localctx = new BlockContext(Context, State); + EnterRule(_localctx, 24, RULE_block); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 130; + Match(CURLYBRACE_OPEN); + State = 134; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << VARIABLE) | (1L << LET) | (1L << IF) | (1L << FOR) | (1L << RETURN) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << CURLYBRACE_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + { + State = 131; + stat(); + } + } + State = 136; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 137; + Match(CURLYBRACE_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ObjectInitializerContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CURLYBRACE_OPEN() { return GetToken(ElsaParser.CURLYBRACE_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CURLYBRACE_CLOSE() { return GetToken(ElsaParser.CURLYBRACE_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public PropertyListContext propertyList() { + return GetRuleContext(0); + } + public ObjectInitializerContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_objectInitializer; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitObjectInitializer(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ObjectInitializerContext objectInitializer() { + ObjectInitializerContext _localctx = new ObjectInitializerContext(Context, State); + EnterRule(_localctx, 26, RULE_objectInitializer); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 139; + Match(CURLYBRACE_OPEN); + State = 141; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==ID) { + { + State = 140; + propertyList(); + } + } + + State = 143; + Match(CURLYBRACE_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class PropertyListContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public PropertyContext[] property() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public PropertyContext property(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(ElsaParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(ElsaParser.COMMA, i); + } + public PropertyListContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_propertyList; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitPropertyList(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public PropertyListContext propertyList() { + PropertyListContext _localctx = new PropertyListContext(Context, State); + EnterRule(_localctx, 28, RULE_propertyList); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 145; + property(); + State = 150; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 146; + Match(COMMA); + State = 147; + property(); + } + } + State = 152; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class PropertyContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLON() { return GetToken(ElsaParser.COLON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + public PropertyContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_property; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitProperty(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public PropertyContext property() { + PropertyContext _localctx = new PropertyContext(Context, State); + EnterRule(_localctx, 30, RULE_property); + try { + EnterOuterAlt(_localctx, 1); + { + State = 153; + Match(ID); + State = 154; + Match(COLON); + State = 155; + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class StatContext : ParserRuleContext { + public StatContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_stat; } } + + public StatContext() { } + public virtual void CopyFrom(StatContext context) { + base.CopyFrom(context); + } + } + public partial class IfStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IF() { return GetToken(ElsaParser.IF, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode THEN() { return GetToken(ElsaParser.THEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ThenStatContext thenStat() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ELSE() { return GetToken(ElsaParser.ELSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ElseStatContext elseStat() { + return GetRuleContext(0); + } + public IfStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitIfStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class BlockStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public BlockContext block() { + return GetRuleContext(0); + } + public BlockStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitBlockStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class ExpressionStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON() { return GetToken(ElsaParser.SEMICOLON, 0); } + public ExpressionStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitExpressionStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class ObjectStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public ObjectContext @object() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON() { return GetToken(ElsaParser.SEMICOLON, 0); } + public ObjectStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitObjectStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class ReturnStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RETURN() { return GetToken(ElsaParser.RETURN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON() { return GetToken(ElsaParser.SEMICOLON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + public ReturnStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitReturnStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class VariableDeclarationStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public VarDeclContext varDecl() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON() { return GetToken(ElsaParser.SEMICOLON, 0); } + public VariableDeclarationStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitVariableDeclarationStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class AssignmentStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQ() { return GetToken(ElsaParser.EQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON() { return GetToken(ElsaParser.SEMICOLON, 0); } + public AssignmentStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitAssignmentStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class LocalVariableDeclarationStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public LocalVarDeclContext localVarDecl() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON() { return GetToken(ElsaParser.SEMICOLON, 0); } + public LocalVariableDeclarationStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitLocalVariableDeclarationStat(this); + else return visitor.VisitChildren(this); + } + } + public partial class ForStatContext : StatContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FOR() { return GetToken(ElsaParser.FOR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_OPEN() { return GetToken(ElsaParser.PARENTHESES_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQ() { return GetToken(ElsaParser.EQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] SEMICOLON() { return GetTokens(ElsaParser.SEMICOLON); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMICOLON(int i) { + return GetToken(ElsaParser.SEMICOLON, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_CLOSE() { return GetToken(ElsaParser.PARENTHESES_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public StatContext stat() { + return GetRuleContext(0); + } + public ForStatContext(StatContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitForStat(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public StatContext stat() { + StatContext _localctx = new StatContext(Context, State); + EnterRule(_localctx, 32, RULE_stat); + int _la; + try { + State = 200; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,19,Context) ) { + case 1: + _localctx = new ObjectStatContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 157; + @object(); + State = 158; + Match(SEMICOLON); + } + break; + case 2: + _localctx = new IfStatContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 160; + Match(IF); + State = 161; + expr(0); + State = 162; + Match(THEN); + State = 163; + thenStat(); + State = 166; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,17,Context) ) { + case 1: + { + State = 164; + Match(ELSE); + State = 165; + elseStat(); + } + break; + } + } + break; + case 3: + _localctx = new ForStatContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 168; + Match(FOR); + State = 169; + Match(PARENTHESES_OPEN); + State = 170; + Match(ID); + State = 171; + Match(EQ); + State = 172; + expr(0); + State = 173; + Match(SEMICOLON); + State = 174; + expr(0); + State = 175; + Match(SEMICOLON); + State = 176; + expr(0); + State = 177; + Match(PARENTHESES_CLOSE); + State = 178; + stat(); + } + break; + case 4: + _localctx = new ReturnStatContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 180; + Match(RETURN); + State = 182; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + State = 181; + expr(0); + } + } + + State = 184; + Match(SEMICOLON); + } + break; + case 5: + _localctx = new BlockStatContext(_localctx); + EnterOuterAlt(_localctx, 5); + { + State = 185; + block(); + } + break; + case 6: + _localctx = new VariableDeclarationStatContext(_localctx); + EnterOuterAlt(_localctx, 6); + { + State = 186; + varDecl(); + State = 187; + Match(SEMICOLON); + } + break; + case 7: + _localctx = new LocalVariableDeclarationStatContext(_localctx); + EnterOuterAlt(_localctx, 7); + { + State = 189; + localVarDecl(); + State = 190; + Match(SEMICOLON); + } + break; + case 8: + _localctx = new AssignmentStatContext(_localctx); + EnterOuterAlt(_localctx, 8); + { + State = 192; + expr(0); + State = 193; + Match(EQ); + State = 194; + expr(0); + State = 195; + Match(SEMICOLON); + } + break; + case 9: + _localctx = new ExpressionStatContext(_localctx); + EnterOuterAlt(_localctx, 9); + { + State = 197; + expr(0); + State = 198; + Match(SEMICOLON); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ThenStatContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public StatContext stat() { + return GetRuleContext(0); + } + public ThenStatContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_thenStat; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitThenStat(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ThenStatContext thenStat() { + ThenStatContext _localctx = new ThenStatContext(Context, State); + EnterRule(_localctx, 34, RULE_thenStat); + try { + EnterOuterAlt(_localctx, 1); + { + State = 202; + stat(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ElseStatContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public StatContext stat() { + return GetRuleContext(0); + } + public ElseStatContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_elseStat; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitElseStat(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ElseStatContext elseStat() { + ElseStatContext _localctx = new ElseStatContext(Context, State); + EnterRule(_localctx, 36, RULE_elseStat); + try { + EnterOuterAlt(_localctx, 1); + { + State = 204; + stat(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ExprContext : ParserRuleContext { + public ExprContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_expr; } } + + public ExprContext() { } + public virtual void CopyFrom(ExprContext context) { + base.CopyFrom(context); + } + } + public partial class NewObjectExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public NewObjectContext newObject() { + return GetRuleContext(0); + } + public NewObjectExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitNewObjectExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class SubtractExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MINUS() { return GetToken(ElsaParser.MINUS, 0); } + public SubtractExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitSubtractExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class IncrementExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INCREMENT() { return GetToken(ElsaParser.INCREMENT, 0); } + public IncrementExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitIncrementExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class ObjectExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ObjectContext @object() { + return GetRuleContext(0); + } + public ObjectExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitObjectExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class StringValueExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STRING_VAL() { return GetToken(ElsaParser.STRING_VAL, 0); } + public StringValueExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitStringValueExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class MultiplyExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STAR() { return GetToken(ElsaParser.STAR, 0); } + public MultiplyExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitMultiplyExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class ParenthesesExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_OPEN() { return GetToken(ElsaParser.PARENTHESES_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARENTHESES_CLOSE() { return GetToken(ElsaParser.PARENTHESES_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprListContext exprList() { + return GetRuleContext(0); + } + public ParenthesesExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitParenthesesExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class FunctionExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public FuncCallContext funcCall() { + return GetRuleContext(0); + } + public FunctionExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitFunctionExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class DecrementExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DECREMENT() { return GetToken(ElsaParser.DECREMENT, 0); } + public DecrementExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitDecrementExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class NegateExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MINUS() { return GetToken(ElsaParser.MINUS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + public NegateExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitNegateExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class MethodCallExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public MethodCallContext methodCall() { + return GetRuleContext(0); + } + public MethodCallExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitMethodCallExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class VariableExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(ElsaParser.ID, 0); } + public VariableExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitVariableExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class NotExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXCLAMATION() { return GetToken(ElsaParser.EXCLAMATION, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr() { + return GetRuleContext(0); + } + public NotExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitNotExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class IntegerValueExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INTEGER_VAL() { return GetToken(ElsaParser.INTEGER_VAL, 0); } + public IntegerValueExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitIntegerValueExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class AddExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PLUS() { return GetToken(ElsaParser.PLUS, 0); } + public AddExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitAddExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class ExpressionMarkerExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExpressionMarkerContext expressionMarker() { + return GetRuleContext(0); + } + public ExpressionMarkerExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitExpressionMarkerExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class BackTickStringValueExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BACKTICKSTRING_VAL() { return GetToken(ElsaParser.BACKTICKSTRING_VAL, 0); } + public BackTickStringValueExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitBackTickStringValueExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class BracketsExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BRACKET_OPEN() { return GetToken(ElsaParser.BRACKET_OPEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BRACKET_CLOSE() { return GetToken(ElsaParser.BRACKET_CLOSE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExprListContext exprList() { + return GetRuleContext(0); + } + public BracketsExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitBracketsExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class CompareExprContext : ExprContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQUALS() { return GetToken(ElsaParser.EQUALS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GREATER() { return GetToken(ElsaParser.GREATER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LESS() { return GetToken(ElsaParser.LESS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT_EQUALS() { return GetToken(ElsaParser.NOT_EQUALS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GREATER_EQUALS() { return GetToken(ElsaParser.GREATER_EQUALS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LESS_EQUALS() { return GetToken(ElsaParser.LESS_EQUALS, 0); } + public CompareExprContext(ExprContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitCompareExpr(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ExprContext expr() { + return expr(0); + } + + private ExprContext expr(int _p) { + ParserRuleContext _parentctx = Context; + int _parentState = State; + ExprContext _localctx = new ExprContext(Context, _parentState); + ExprContext _prevctx = _localctx; + int _startState = 38; + EnterRecursionRule(_localctx, 38, RULE_expr, _p); + int _la; + try { + int _alt; + EnterOuterAlt(_localctx, 1); + { + State = 230; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,22,Context) ) { + case 1: + { + _localctx = new FunctionExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + + State = 207; + funcCall(); + } + break; + case 2: + { + _localctx = new ExpressionMarkerExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 208; + expressionMarker(); + } + break; + case 3: + { + _localctx = new ObjectExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 209; + @object(); + } + break; + case 4: + { + _localctx = new NewObjectExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 210; + newObject(); + } + break; + case 5: + { + _localctx = new NegateExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 211; + Match(MINUS); + State = 212; + expr(13); + } + break; + case 6: + { + _localctx = new NotExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 213; + Match(EXCLAMATION); + State = 214; + expr(12); + } + break; + case 7: + { + _localctx = new IntegerValueExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 215; + Match(INTEGER_VAL); + } + break; + case 8: + { + _localctx = new StringValueExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 216; + Match(STRING_VAL); + } + break; + case 9: + { + _localctx = new BackTickStringValueExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 217; + Match(BACKTICKSTRING_VAL); + } + break; + case 10: + { + _localctx = new ParenthesesExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 218; + Match(PARENTHESES_OPEN); + State = 220; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + State = 219; + exprList(); + } + } + + State = 222; + Match(PARENTHESES_CLOSE); + } + break; + case 11: + { + _localctx = new BracketsExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 223; + Match(BRACKET_OPEN); + State = 225; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NEW) | (1L << EXPRESSION_MARKER) | (1L << MINUS) | (1L << PARENTHESES_OPEN) | (1L << BRACKET_OPEN) | (1L << EXCLAMATION) | (1L << STRING_VAL) | (1L << BACKTICKSTRING_VAL) | (1L << INTEGER_VAL) | (1L << ID))) != 0)) { + { + State = 224; + exprList(); + } + } + + State = 227; + Match(BRACKET_CLOSE); + } + break; + case 12: + { + _localctx = new MethodCallExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 228; + methodCall(); + } + break; + case 13: + { + _localctx = new VariableExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 229; + Match(ID); + } + break; + } + Context.Stop = TokenStream.LT(-1); + State = 250; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,24,Context); + while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( ParseListeners!=null ) + TriggerExitRuleEvent(); + _prevctx = _localctx; + { + State = 248; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,23,Context) ) { + case 1: + { + _localctx = new MultiplyExprContext(new ExprContext(_parentctx, _parentState)); + PushNewRecursionContext(_localctx, _startState, RULE_expr); + State = 232; + if (!(Precpred(Context, 11))) throw new FailedPredicateException(this, "Precpred(Context, 11)"); + State = 233; + Match(STAR); + State = 234; + expr(12); + } + break; + case 2: + { + _localctx = new AddExprContext(new ExprContext(_parentctx, _parentState)); + PushNewRecursionContext(_localctx, _startState, RULE_expr); + State = 235; + if (!(Precpred(Context, 10))) throw new FailedPredicateException(this, "Precpred(Context, 10)"); + State = 236; + Match(PLUS); + State = 237; + expr(11); + } + break; + case 3: + { + _localctx = new SubtractExprContext(new ExprContext(_parentctx, _parentState)); + PushNewRecursionContext(_localctx, _startState, RULE_expr); + State = 238; + if (!(Precpred(Context, 9))) throw new FailedPredicateException(this, "Precpred(Context, 9)"); + State = 239; + Match(MINUS); + State = 240; + expr(10); + } + break; + case 4: + { + _localctx = new CompareExprContext(new ExprContext(_parentctx, _parentState)); + PushNewRecursionContext(_localctx, _startState, RULE_expr); + State = 241; + if (!(Precpred(Context, 8))) throw new FailedPredicateException(this, "Precpred(Context, 8)"); + State = 242; + _la = TokenStream.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GREATER) | (1L << EQUALS) | (1L << NOT_EQUALS) | (1L << GREATER_EQUALS) | (1L << LESS) | (1L << LESS_EQUALS))) != 0)) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 243; + expr(9); + } + break; + case 5: + { + _localctx = new IncrementExprContext(new ExprContext(_parentctx, _parentState)); + PushNewRecursionContext(_localctx, _startState, RULE_expr); + State = 244; + if (!(Precpred(Context, 15))) throw new FailedPredicateException(this, "Precpred(Context, 15)"); + State = 245; + Match(INCREMENT); + } + break; + case 6: + { + _localctx = new DecrementExprContext(new ExprContext(_parentctx, _parentState)); + PushNewRecursionContext(_localctx, _startState, RULE_expr); + State = 246; + if (!(Precpred(Context, 14))) throw new FailedPredicateException(this, "Precpred(Context, 14)"); + State = 247; + Match(DECREMENT); + } + break; + } + } + } + State = 252; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,24,Context); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + UnrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public partial class ExprListContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ExprContext[] expr() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExprContext expr(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(ElsaParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(ElsaParser.COMMA, i); + } + public ExprListContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_exprList; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IElsaParserVisitor typedVisitor = visitor as IElsaParserVisitor; + if (typedVisitor != null) return typedVisitor.VisitExprList(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ExprListContext exprList() { + ExprListContext _localctx = new ExprListContext(Context, State); + EnterRule(_localctx, 40, RULE_exprList); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 253; + expr(0); + State = 258; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 254; + Match(COMMA); + State = 255; + expr(0); + } + } + State = 260; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public override bool Sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 19: return expr_sempred((ExprContext)_localctx, predIndex); + } + return true; + } + private bool expr_sempred(ExprContext _localctx, int predIndex) { + switch (predIndex) { + case 0: return Precpred(Context, 11); + case 1: return Precpred(Context, 10); + case 2: return Precpred(Context, 9); + case 3: return Precpred(Context, 8); + case 4: return Precpred(Context, 15); + case 5: return Precpred(Context, 14); + } + return true; + } + + private static int[] _serializedATN = { + 4,1,48,262,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7, + 7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14, + 2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,1,0,1,0,5, + 0,45,8,0,10,0,12,0,48,9,0,1,1,1,1,3,1,52,8,1,1,2,1,2,1,2,1,2,1,2,1,2,3, + 2,60,8,2,1,2,1,2,3,2,64,8,2,1,2,1,2,1,3,1,3,1,3,1,3,3,3,72,8,3,1,3,1,3, + 3,3,76,8,3,1,4,1,4,1,4,1,4,3,4,82,8,4,1,4,1,4,3,4,86,8,4,1,5,1,5,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,100,8,6,1,7,5,7,103,8,7,10,7,12, + 7,106,9,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9,3,9,115,8,9,1,9,1,9,1,10,1,10,1, + 10,5,10,122,8,10,10,10,12,10,125,9,10,1,11,1,11,3,11,129,8,11,1,12,1,12, + 5,12,133,8,12,10,12,12,12,136,9,12,1,12,1,12,1,13,1,13,3,13,142,8,13,1, + 13,1,13,1,14,1,14,1,14,5,14,149,8,14,10,14,12,14,152,9,14,1,15,1,15,1, + 15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,167,8,16,1,16, + 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16, + 183,8,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,16,3,16,201,8,16,1,17,1,17,1,18,1,18,1,19,1,19,1,19,1,19, + 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,221,8,19,1,19,1, + 19,1,19,3,19,226,8,19,1,19,1,19,1,19,3,19,231,8,19,1,19,1,19,1,19,1,19, + 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,5,19,249,8, + 19,10,19,12,19,252,9,19,1,20,1,20,1,20,5,20,257,8,20,10,20,12,20,260,9, + 20,1,20,1,104,1,38,21,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34, + 36,38,40,0,2,2,0,13,17,46,46,2,0,2,2,26,30,288,0,46,1,0,0,0,2,49,1,0,0, + 0,4,53,1,0,0,0,6,67,1,0,0,0,8,77,1,0,0,0,10,87,1,0,0,0,12,99,1,0,0,0,14, + 104,1,0,0,0,16,107,1,0,0,0,18,111,1,0,0,0,20,118,1,0,0,0,22,128,1,0,0, + 0,24,130,1,0,0,0,26,139,1,0,0,0,28,145,1,0,0,0,30,153,1,0,0,0,32,200,1, + 0,0,0,34,202,1,0,0,0,36,204,1,0,0,0,38,230,1,0,0,0,40,253,1,0,0,0,42,45, + 3,32,16,0,43,45,5,44,0,0,44,42,1,0,0,0,44,43,1,0,0,0,45,48,1,0,0,0,46, + 44,1,0,0,0,46,47,1,0,0,0,47,1,1,0,0,0,48,46,1,0,0,0,49,51,5,46,0,0,50, + 52,3,26,13,0,51,50,1,0,0,0,51,52,1,0,0,0,52,3,1,0,0,0,53,54,5,5,0,0,54, + 59,5,46,0,0,55,56,5,29,0,0,56,57,3,10,5,0,57,58,5,2,0,0,58,60,1,0,0,0, + 59,55,1,0,0,0,59,60,1,0,0,0,60,61,1,0,0,0,61,63,5,32,0,0,62,64,3,20,10, + 0,63,62,1,0,0,0,63,64,1,0,0,0,64,65,1,0,0,0,65,66,5,33,0,0,66,5,1,0,0, + 0,67,68,5,6,0,0,68,71,5,46,0,0,69,70,5,20,0,0,70,72,3,10,5,0,71,69,1,0, + 0,0,71,72,1,0,0,0,72,75,1,0,0,0,73,74,5,1,0,0,74,76,3,38,19,0,75,73,1, + 0,0,0,75,76,1,0,0,0,76,7,1,0,0,0,77,78,5,7,0,0,78,81,5,46,0,0,79,80,5, + 20,0,0,80,82,3,10,5,0,81,79,1,0,0,0,81,82,1,0,0,0,82,85,1,0,0,0,83,84, + 5,1,0,0,84,86,3,38,19,0,85,83,1,0,0,0,85,86,1,0,0,0,86,9,1,0,0,0,87,88, + 7,0,0,0,88,11,1,0,0,0,89,90,5,18,0,0,90,91,5,32,0,0,91,92,5,46,0,0,92, + 93,5,22,0,0,93,94,3,14,7,0,94,95,5,33,0,0,95,100,1,0,0,0,96,97,5,46,0, + 0,97,98,5,31,0,0,98,100,3,14,7,0,99,89,1,0,0,0,99,96,1,0,0,0,100,13,1, + 0,0,0,101,103,9,0,0,0,102,101,1,0,0,0,103,106,1,0,0,0,104,105,1,0,0,0, + 104,102,1,0,0,0,105,15,1,0,0,0,106,104,1,0,0,0,107,108,5,46,0,0,108,109, + 5,41,0,0,109,110,3,18,9,0,110,17,1,0,0,0,111,112,5,46,0,0,112,114,5,32, + 0,0,113,115,3,20,10,0,114,113,1,0,0,0,114,115,1,0,0,0,115,116,1,0,0,0, + 116,117,5,33,0,0,117,19,1,0,0,0,118,123,3,22,11,0,119,120,5,22,0,0,120, + 122,3,22,11,0,121,119,1,0,0,0,122,125,1,0,0,0,123,121,1,0,0,0,123,124, + 1,0,0,0,124,21,1,0,0,0,125,123,1,0,0,0,126,129,3,38,19,0,127,129,3,12, + 6,0,128,126,1,0,0,0,128,127,1,0,0,0,129,23,1,0,0,0,130,134,5,36,0,0,131, + 133,3,32,16,0,132,131,1,0,0,0,133,136,1,0,0,0,134,132,1,0,0,0,134,135, + 1,0,0,0,135,137,1,0,0,0,136,134,1,0,0,0,137,138,5,37,0,0,138,25,1,0,0, + 0,139,141,5,36,0,0,140,142,3,28,14,0,141,140,1,0,0,0,141,142,1,0,0,0,142, + 143,1,0,0,0,143,144,5,37,0,0,144,27,1,0,0,0,145,150,3,30,15,0,146,147, + 5,22,0,0,147,149,3,30,15,0,148,146,1,0,0,0,149,152,1,0,0,0,150,148,1,0, + 0,0,150,151,1,0,0,0,151,29,1,0,0,0,152,150,1,0,0,0,153,154,5,46,0,0,154, + 155,5,20,0,0,155,156,3,38,19,0,156,31,1,0,0,0,157,158,3,2,1,0,158,159, + 5,21,0,0,159,201,1,0,0,0,160,161,5,8,0,0,161,162,3,38,19,0,162,163,5,9, + 0,0,163,166,3,34,17,0,164,165,5,10,0,0,165,167,3,36,18,0,166,164,1,0,0, + 0,166,167,1,0,0,0,167,201,1,0,0,0,168,169,5,11,0,0,169,170,5,32,0,0,170, + 171,5,46,0,0,171,172,5,1,0,0,172,173,3,38,19,0,173,174,5,21,0,0,174,175, + 3,38,19,0,175,176,5,21,0,0,176,177,3,38,19,0,177,178,5,33,0,0,178,179, + 3,32,16,0,179,201,1,0,0,0,180,182,5,12,0,0,181,183,3,38,19,0,182,181,1, + 0,0,0,182,183,1,0,0,0,183,184,1,0,0,0,184,201,5,21,0,0,185,201,3,24,12, + 0,186,187,3,6,3,0,187,188,5,21,0,0,188,201,1,0,0,0,189,190,3,8,4,0,190, + 191,5,21,0,0,191,201,1,0,0,0,192,193,3,38,19,0,193,194,5,1,0,0,194,195, + 3,38,19,0,195,196,5,21,0,0,196,201,1,0,0,0,197,198,3,38,19,0,198,199,5, + 21,0,0,199,201,1,0,0,0,200,157,1,0,0,0,200,160,1,0,0,0,200,168,1,0,0,0, + 200,180,1,0,0,0,200,185,1,0,0,0,200,186,1,0,0,0,200,189,1,0,0,0,200,192, + 1,0,0,0,200,197,1,0,0,0,201,33,1,0,0,0,202,203,3,32,16,0,203,35,1,0,0, + 0,204,205,3,32,16,0,205,37,1,0,0,0,206,207,6,19,-1,0,207,231,3,18,9,0, + 208,231,3,12,6,0,209,231,3,2,1,0,210,231,3,4,2,0,211,212,5,24,0,0,212, + 231,3,38,19,13,213,214,5,38,0,0,214,231,3,38,19,12,215,231,5,45,0,0,216, + 231,5,42,0,0,217,231,5,43,0,0,218,220,5,32,0,0,219,221,3,40,20,0,220,219, + 1,0,0,0,220,221,1,0,0,0,221,222,1,0,0,0,222,231,5,33,0,0,223,225,5,34, + 0,0,224,226,3,40,20,0,225,224,1,0,0,0,225,226,1,0,0,0,226,227,1,0,0,0, + 227,231,5,35,0,0,228,231,3,16,8,0,229,231,5,46,0,0,230,206,1,0,0,0,230, + 208,1,0,0,0,230,209,1,0,0,0,230,210,1,0,0,0,230,211,1,0,0,0,230,213,1, + 0,0,0,230,215,1,0,0,0,230,216,1,0,0,0,230,217,1,0,0,0,230,218,1,0,0,0, + 230,223,1,0,0,0,230,228,1,0,0,0,230,229,1,0,0,0,231,250,1,0,0,0,232,233, + 10,11,0,0,233,234,5,25,0,0,234,249,3,38,19,12,235,236,10,10,0,0,236,237, + 5,23,0,0,237,249,3,38,19,11,238,239,10,9,0,0,239,240,5,24,0,0,240,249, + 3,38,19,10,241,242,10,8,0,0,242,243,7,1,0,0,243,249,3,38,19,9,244,245, + 10,15,0,0,245,249,5,3,0,0,246,247,10,14,0,0,247,249,5,4,0,0,248,232,1, + 0,0,0,248,235,1,0,0,0,248,238,1,0,0,0,248,241,1,0,0,0,248,244,1,0,0,0, + 248,246,1,0,0,0,249,252,1,0,0,0,250,248,1,0,0,0,250,251,1,0,0,0,251,39, + 1,0,0,0,252,250,1,0,0,0,253,258,3,38,19,0,254,255,5,22,0,0,255,257,3,38, + 19,0,256,254,1,0,0,0,257,260,1,0,0,0,258,256,1,0,0,0,258,259,1,0,0,0,259, + 41,1,0,0,0,260,258,1,0,0,0,26,44,46,51,59,63,71,75,81,85,99,104,114,123, + 128,134,141,150,166,182,200,220,225,230,248,250,258 + }; + + public static readonly ATN _ATN = + new ATNDeserializer().Deserialize(_serializedATN); + + +} diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaParser.interp b/src/modules/Elsa.Dsl/Abstractions/ElsaParser.interp new file mode 100644 index 0000000..1c4963d --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaParser.interp @@ -0,0 +1,128 @@ +token literal names: +null +'=' +'>' +'++' +'--' +'new' +'variable' +'let' +'if' +'then' +'else' +'for' +'return' +'void' +'float' +'int' +'string' +'object' +'expression' +null +':' +';' +',' +'+' +'-' +'*' +'==' +'!=' +'>=' +'<' +'<=' +'=>' +'(' +')' +'[' +']' +'{' +'}' +'!' +'|' +'||' +'.' +null +null +null +null +null +null +'\\|' + +token symbolic names: +null +EQ +GREATER +INCREMENT +DECREMENT +NEW +VARIABLE +LET +IF +THEN +ELSE +FOR +RETURN +VOID +FLOAT +INT +STRING +OBJECT +EXPRESSION_MARKER +SYMBOL +COLON +SEMICOLON +COMMA +PLUS +MINUS +STAR +EQUALS +NOT_EQUALS +GREATER_EQUALS +LESS +LESS_EQUALS +LAMBDA +PARENTHESES_OPEN +PARENTHESES_CLOSE +BRACKET_OPEN +BRACKET_CLOSE +CURLYBRACE_OPEN +CURLYBRACE_CLOSE +EXCLAMATION +PIPE +PIPE_DBL +PERIOD +STRING_VAL +BACKTICKSTRING_VAL +LINE_COMMENT +INTEGER_VAL +ID +WS +ESC + +rule names: +program +object +newObject +varDecl +localVarDecl +type +expressionMarker +expressionContent +methodCall +funcCall +args +arg +block +objectInitializer +propertyList +property +stat +thenStat +elseStat +expr +exprList + + +atn: +[4, 1, 48, 262, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 1, 0, 1, 0, 5, 0, 45, 8, 0, 10, 0, 12, 0, 48, 9, 0, 1, 1, 1, 1, 3, 1, 52, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 60, 8, 2, 1, 2, 1, 2, 3, 2, 64, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 72, 8, 3, 1, 3, 1, 3, 3, 3, 76, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 82, 8, 4, 1, 4, 1, 4, 3, 4, 86, 8, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 100, 8, 6, 1, 7, 5, 7, 103, 8, 7, 10, 7, 12, 7, 106, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 115, 8, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 5, 10, 122, 8, 10, 10, 10, 12, 10, 125, 9, 10, 1, 11, 1, 11, 3, 11, 129, 8, 11, 1, 12, 1, 12, 5, 12, 133, 8, 12, 10, 12, 12, 12, 136, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 142, 8, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 149, 8, 14, 10, 14, 12, 14, 152, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 167, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 183, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 201, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 221, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 226, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 231, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 249, 8, 19, 10, 19, 12, 19, 252, 9, 19, 1, 20, 1, 20, 1, 20, 5, 20, 257, 8, 20, 10, 20, 12, 20, 260, 9, 20, 1, 20, 1, 104, 1, 38, 21, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 0, 2, 2, 0, 13, 17, 46, 46, 2, 0, 2, 2, 26, 30, 288, 0, 46, 1, 0, 0, 0, 2, 49, 1, 0, 0, 0, 4, 53, 1, 0, 0, 0, 6, 67, 1, 0, 0, 0, 8, 77, 1, 0, 0, 0, 10, 87, 1, 0, 0, 0, 12, 99, 1, 0, 0, 0, 14, 104, 1, 0, 0, 0, 16, 107, 1, 0, 0, 0, 18, 111, 1, 0, 0, 0, 20, 118, 1, 0, 0, 0, 22, 128, 1, 0, 0, 0, 24, 130, 1, 0, 0, 0, 26, 139, 1, 0, 0, 0, 28, 145, 1, 0, 0, 0, 30, 153, 1, 0, 0, 0, 32, 200, 1, 0, 0, 0, 34, 202, 1, 0, 0, 0, 36, 204, 1, 0, 0, 0, 38, 230, 1, 0, 0, 0, 40, 253, 1, 0, 0, 0, 42, 45, 3, 32, 16, 0, 43, 45, 5, 44, 0, 0, 44, 42, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 1, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 51, 5, 46, 0, 0, 50, 52, 3, 26, 13, 0, 51, 50, 1, 0, 0, 0, 51, 52, 1, 0, 0, 0, 52, 3, 1, 0, 0, 0, 53, 54, 5, 5, 0, 0, 54, 59, 5, 46, 0, 0, 55, 56, 5, 29, 0, 0, 56, 57, 3, 10, 5, 0, 57, 58, 5, 2, 0, 0, 58, 60, 1, 0, 0, 0, 59, 55, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, 63, 5, 32, 0, 0, 62, 64, 3, 20, 10, 0, 63, 62, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 66, 5, 33, 0, 0, 66, 5, 1, 0, 0, 0, 67, 68, 5, 6, 0, 0, 68, 71, 5, 46, 0, 0, 69, 70, 5, 20, 0, 0, 70, 72, 3, 10, 5, 0, 71, 69, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 75, 1, 0, 0, 0, 73, 74, 5, 1, 0, 0, 74, 76, 3, 38, 19, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 7, 1, 0, 0, 0, 77, 78, 5, 7, 0, 0, 78, 81, 5, 46, 0, 0, 79, 80, 5, 20, 0, 0, 80, 82, 3, 10, 5, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 84, 5, 1, 0, 0, 84, 86, 3, 38, 19, 0, 85, 83, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 9, 1, 0, 0, 0, 87, 88, 7, 0, 0, 0, 88, 11, 1, 0, 0, 0, 89, 90, 5, 18, 0, 0, 90, 91, 5, 32, 0, 0, 91, 92, 5, 46, 0, 0, 92, 93, 5, 22, 0, 0, 93, 94, 3, 14, 7, 0, 94, 95, 5, 33, 0, 0, 95, 100, 1, 0, 0, 0, 96, 97, 5, 46, 0, 0, 97, 98, 5, 31, 0, 0, 98, 100, 3, 14, 7, 0, 99, 89, 1, 0, 0, 0, 99, 96, 1, 0, 0, 0, 100, 13, 1, 0, 0, 0, 101, 103, 9, 0, 0, 0, 102, 101, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 15, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 108, 5, 46, 0, 0, 108, 109, 5, 41, 0, 0, 109, 110, 3, 18, 9, 0, 110, 17, 1, 0, 0, 0, 111, 112, 5, 46, 0, 0, 112, 114, 5, 32, 0, 0, 113, 115, 3, 20, 10, 0, 114, 113, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 5, 33, 0, 0, 117, 19, 1, 0, 0, 0, 118, 123, 3, 22, 11, 0, 119, 120, 5, 22, 0, 0, 120, 122, 3, 22, 11, 0, 121, 119, 1, 0, 0, 0, 122, 125, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 21, 1, 0, 0, 0, 125, 123, 1, 0, 0, 0, 126, 129, 3, 38, 19, 0, 127, 129, 3, 12, 6, 0, 128, 126, 1, 0, 0, 0, 128, 127, 1, 0, 0, 0, 129, 23, 1, 0, 0, 0, 130, 134, 5, 36, 0, 0, 131, 133, 3, 32, 16, 0, 132, 131, 1, 0, 0, 0, 133, 136, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 137, 1, 0, 0, 0, 136, 134, 1, 0, 0, 0, 137, 138, 5, 37, 0, 0, 138, 25, 1, 0, 0, 0, 139, 141, 5, 36, 0, 0, 140, 142, 3, 28, 14, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 144, 5, 37, 0, 0, 144, 27, 1, 0, 0, 0, 145, 150, 3, 30, 15, 0, 146, 147, 5, 22, 0, 0, 147, 149, 3, 30, 15, 0, 148, 146, 1, 0, 0, 0, 149, 152, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 29, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 153, 154, 5, 46, 0, 0, 154, 155, 5, 20, 0, 0, 155, 156, 3, 38, 19, 0, 156, 31, 1, 0, 0, 0, 157, 158, 3, 2, 1, 0, 158, 159, 5, 21, 0, 0, 159, 201, 1, 0, 0, 0, 160, 161, 5, 8, 0, 0, 161, 162, 3, 38, 19, 0, 162, 163, 5, 9, 0, 0, 163, 166, 3, 34, 17, 0, 164, 165, 5, 10, 0, 0, 165, 167, 3, 36, 18, 0, 166, 164, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 201, 1, 0, 0, 0, 168, 169, 5, 11, 0, 0, 169, 170, 5, 32, 0, 0, 170, 171, 5, 46, 0, 0, 171, 172, 5, 1, 0, 0, 172, 173, 3, 38, 19, 0, 173, 174, 5, 21, 0, 0, 174, 175, 3, 38, 19, 0, 175, 176, 5, 21, 0, 0, 176, 177, 3, 38, 19, 0, 177, 178, 5, 33, 0, 0, 178, 179, 3, 32, 16, 0, 179, 201, 1, 0, 0, 0, 180, 182, 5, 12, 0, 0, 181, 183, 3, 38, 19, 0, 182, 181, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 201, 5, 21, 0, 0, 185, 201, 3, 24, 12, 0, 186, 187, 3, 6, 3, 0, 187, 188, 5, 21, 0, 0, 188, 201, 1, 0, 0, 0, 189, 190, 3, 8, 4, 0, 190, 191, 5, 21, 0, 0, 191, 201, 1, 0, 0, 0, 192, 193, 3, 38, 19, 0, 193, 194, 5, 1, 0, 0, 194, 195, 3, 38, 19, 0, 195, 196, 5, 21, 0, 0, 196, 201, 1, 0, 0, 0, 197, 198, 3, 38, 19, 0, 198, 199, 5, 21, 0, 0, 199, 201, 1, 0, 0, 0, 200, 157, 1, 0, 0, 0, 200, 160, 1, 0, 0, 0, 200, 168, 1, 0, 0, 0, 200, 180, 1, 0, 0, 0, 200, 185, 1, 0, 0, 0, 200, 186, 1, 0, 0, 0, 200, 189, 1, 0, 0, 0, 200, 192, 1, 0, 0, 0, 200, 197, 1, 0, 0, 0, 201, 33, 1, 0, 0, 0, 202, 203, 3, 32, 16, 0, 203, 35, 1, 0, 0, 0, 204, 205, 3, 32, 16, 0, 205, 37, 1, 0, 0, 0, 206, 207, 6, 19, -1, 0, 207, 231, 3, 18, 9, 0, 208, 231, 3, 12, 6, 0, 209, 231, 3, 2, 1, 0, 210, 231, 3, 4, 2, 0, 211, 212, 5, 24, 0, 0, 212, 231, 3, 38, 19, 13, 213, 214, 5, 38, 0, 0, 214, 231, 3, 38, 19, 12, 215, 231, 5, 45, 0, 0, 216, 231, 5, 42, 0, 0, 217, 231, 5, 43, 0, 0, 218, 220, 5, 32, 0, 0, 219, 221, 3, 40, 20, 0, 220, 219, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 231, 5, 33, 0, 0, 223, 225, 5, 34, 0, 0, 224, 226, 3, 40, 20, 0, 225, 224, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 231, 5, 35, 0, 0, 228, 231, 3, 16, 8, 0, 229, 231, 5, 46, 0, 0, 230, 206, 1, 0, 0, 0, 230, 208, 1, 0, 0, 0, 230, 209, 1, 0, 0, 0, 230, 210, 1, 0, 0, 0, 230, 211, 1, 0, 0, 0, 230, 213, 1, 0, 0, 0, 230, 215, 1, 0, 0, 0, 230, 216, 1, 0, 0, 0, 230, 217, 1, 0, 0, 0, 230, 218, 1, 0, 0, 0, 230, 223, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 230, 229, 1, 0, 0, 0, 231, 250, 1, 0, 0, 0, 232, 233, 10, 11, 0, 0, 233, 234, 5, 25, 0, 0, 234, 249, 3, 38, 19, 12, 235, 236, 10, 10, 0, 0, 236, 237, 5, 23, 0, 0, 237, 249, 3, 38, 19, 11, 238, 239, 10, 9, 0, 0, 239, 240, 5, 24, 0, 0, 240, 249, 3, 38, 19, 10, 241, 242, 10, 8, 0, 0, 242, 243, 7, 1, 0, 0, 243, 249, 3, 38, 19, 9, 244, 245, 10, 15, 0, 0, 245, 249, 5, 3, 0, 0, 246, 247, 10, 14, 0, 0, 247, 249, 5, 4, 0, 0, 248, 232, 1, 0, 0, 0, 248, 235, 1, 0, 0, 0, 248, 238, 1, 0, 0, 0, 248, 241, 1, 0, 0, 0, 248, 244, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 249, 252, 1, 0, 0, 0, 250, 248, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 39, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 253, 258, 3, 38, 19, 0, 254, 255, 5, 22, 0, 0, 255, 257, 3, 38, 19, 0, 256, 254, 1, 0, 0, 0, 257, 260, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 41, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 26, 44, 46, 51, 59, 63, 71, 75, 81, 85, 99, 104, 114, 123, 128, 134, 141, 150, 166, 182, 200, 220, 225, 230, 248, 250, 258] \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaParser.tokens b/src/modules/Elsa.Dsl/Abstractions/ElsaParser.tokens new file mode 100644 index 0000000..0d4fb8c --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaParser.tokens @@ -0,0 +1,89 @@ +EQ=1 +GREATER=2 +INCREMENT=3 +DECREMENT=4 +NEW=5 +VARIABLE=6 +LET=7 +IF=8 +THEN=9 +ELSE=10 +FOR=11 +RETURN=12 +VOID=13 +FLOAT=14 +INT=15 +STRING=16 +OBJECT=17 +EXPRESSION_MARKER=18 +SYMBOL=19 +COLON=20 +SEMICOLON=21 +COMMA=22 +PLUS=23 +MINUS=24 +STAR=25 +EQUALS=26 +NOT_EQUALS=27 +GREATER_EQUALS=28 +LESS=29 +LESS_EQUALS=30 +LAMBDA=31 +PARENTHESES_OPEN=32 +PARENTHESES_CLOSE=33 +BRACKET_OPEN=34 +BRACKET_CLOSE=35 +CURLYBRACE_OPEN=36 +CURLYBRACE_CLOSE=37 +EXCLAMATION=38 +PIPE=39 +PIPE_DBL=40 +PERIOD=41 +STRING_VAL=42 +BACKTICKSTRING_VAL=43 +LINE_COMMENT=44 +INTEGER_VAL=45 +ID=46 +WS=47 +ESC=48 +'='=1 +'>'=2 +'++'=3 +'--'=4 +'new'=5 +'variable'=6 +'let'=7 +'if'=8 +'then'=9 +'else'=10 +'for'=11 +'return'=12 +'void'=13 +'float'=14 +'int'=15 +'string'=16 +'object'=17 +'expression'=18 +':'=20 +';'=21 +','=22 +'+'=23 +'-'=24 +'*'=25 +'=='=26 +'!='=27 +'>='=28 +'<'=29 +'<='=30 +'=>'=31 +'('=32 +')'=33 +'['=34 +']'=35 +'{'=36 +'}'=37 +'!'=38 +'|'=39 +'||'=40 +'.'=41 +'\\|'=48 diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaParserBaseVisitor.cs b/src/modules/Elsa.Dsl/Abstractions/ElsaParserBaseVisitor.cs new file mode 100644 index 0000000..bb9e249 --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaParserBaseVisitor.cs @@ -0,0 +1,535 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.10.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.10.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +using Antlr4.Runtime.Misc; +using Antlr4.Runtime.Tree; +using IToken = Antlr4.Runtime.IToken; +using ParserRuleContext = Antlr4.Runtime.ParserRuleContext; + +/// +/// This class provides an empty implementation of , +/// which can be extended to create a visitor which only needs to handle a subset +/// of the available methods. +/// +/// The return type of the visit operation. +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.10.1")] +[System.Diagnostics.DebuggerNonUserCode] +[System.CLSCompliant(false)] +public partial class ElsaParserBaseVisitor : AbstractParseTreeVisitor, IElsaParserVisitor { + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitProgram([NotNull] ElsaParser.ProgramContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitObject([NotNull] ElsaParser.ObjectContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNewObject([NotNull] ElsaParser.NewObjectContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitVarDecl([NotNull] ElsaParser.VarDeclContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitLocalVarDecl([NotNull] ElsaParser.LocalVarDeclContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitType([NotNull] ElsaParser.TypeContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExpressionMarker([NotNull] ElsaParser.ExpressionMarkerContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExpressionContent([NotNull] ElsaParser.ExpressionContentContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitMethodCall([NotNull] ElsaParser.MethodCallContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFuncCall([NotNull] ElsaParser.FuncCallContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitArgs([NotNull] ElsaParser.ArgsContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitArg([NotNull] ElsaParser.ArgContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBlock([NotNull] ElsaParser.BlockContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitObjectInitializer([NotNull] ElsaParser.ObjectInitializerContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitPropertyList([NotNull] ElsaParser.PropertyListContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitProperty([NotNull] ElsaParser.PropertyContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the objectStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitObjectStat([NotNull] ElsaParser.ObjectStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ifStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIfStat([NotNull] ElsaParser.IfStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the forStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitForStat([NotNull] ElsaParser.ForStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the returnStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitReturnStat([NotNull] ElsaParser.ReturnStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the blockStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBlockStat([NotNull] ElsaParser.BlockStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the variableDeclarationStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitVariableDeclarationStat([NotNull] ElsaParser.VariableDeclarationStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the localVariableDeclarationStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitLocalVariableDeclarationStat([NotNull] ElsaParser.LocalVariableDeclarationStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the assignmentStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAssignmentStat([NotNull] ElsaParser.AssignmentStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the expressionStat + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExpressionStat([NotNull] ElsaParser.ExpressionStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitThenStat([NotNull] ElsaParser.ThenStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitElseStat([NotNull] ElsaParser.ElseStatContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the newObjectExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNewObjectExpr([NotNull] ElsaParser.NewObjectExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the subtractExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSubtractExpr([NotNull] ElsaParser.SubtractExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the incrementExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIncrementExpr([NotNull] ElsaParser.IncrementExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the objectExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitObjectExpr([NotNull] ElsaParser.ObjectExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the stringValueExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitStringValueExpr([NotNull] ElsaParser.StringValueExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the multiplyExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitMultiplyExpr([NotNull] ElsaParser.MultiplyExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the parenthesesExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParenthesesExpr([NotNull] ElsaParser.ParenthesesExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the functionExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFunctionExpr([NotNull] ElsaParser.FunctionExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the decrementExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDecrementExpr([NotNull] ElsaParser.DecrementExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the negateExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNegateExpr([NotNull] ElsaParser.NegateExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the methodCallExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitMethodCallExpr([NotNull] ElsaParser.MethodCallExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the variableExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitVariableExpr([NotNull] ElsaParser.VariableExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the notExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNotExpr([NotNull] ElsaParser.NotExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the integerValueExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIntegerValueExpr([NotNull] ElsaParser.IntegerValueExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the addExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAddExpr([NotNull] ElsaParser.AddExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the expressionMarkerExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExpressionMarkerExpr([NotNull] ElsaParser.ExpressionMarkerExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the backTickStringValueExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBackTickStringValueExpr([NotNull] ElsaParser.BackTickStringValueExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the bracketsExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBracketsExpr([NotNull] ElsaParser.BracketsExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the compareExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCompareExpr([NotNull] ElsaParser.CompareExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExprList([NotNull] ElsaParser.ExprListContext context) { return VisitChildren(context); } +} diff --git a/src/modules/Elsa.Dsl/Abstractions/ElsaParserVisitor.cs b/src/modules/Elsa.Dsl/Abstractions/ElsaParserVisitor.cs new file mode 100644 index 0000000..64fc7b3 --- /dev/null +++ b/src/modules/Elsa.Dsl/Abstractions/ElsaParserVisitor.cs @@ -0,0 +1,344 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.10.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from C:/Projects/Elsa/v3/src/dsl/Elsa.Dsl/Dsl\ElsaParser.g4 by ANTLR 4.10.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +using Antlr4.Runtime.Misc; +using Antlr4.Runtime.Tree; +using IToken = Antlr4.Runtime.IToken; + +/// +/// This interface defines a complete generic visitor for a parse tree produced +/// by . +/// +/// The return type of the visit operation. +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.10.1")] +[System.CLSCompliant(false)] +public interface IElsaParserVisitor : IParseTreeVisitor { + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitProgram([NotNull] ElsaParser.ProgramContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitObject([NotNull] ElsaParser.ObjectContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitNewObject([NotNull] ElsaParser.NewObjectContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitVarDecl([NotNull] ElsaParser.VarDeclContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitLocalVarDecl([NotNull] ElsaParser.LocalVarDeclContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitType([NotNull] ElsaParser.TypeContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitExpressionMarker([NotNull] ElsaParser.ExpressionMarkerContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitExpressionContent([NotNull] ElsaParser.ExpressionContentContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitMethodCall([NotNull] ElsaParser.MethodCallContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitFuncCall([NotNull] ElsaParser.FuncCallContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitArgs([NotNull] ElsaParser.ArgsContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitArg([NotNull] ElsaParser.ArgContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitBlock([NotNull] ElsaParser.BlockContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitObjectInitializer([NotNull] ElsaParser.ObjectInitializerContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitPropertyList([NotNull] ElsaParser.PropertyListContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitProperty([NotNull] ElsaParser.PropertyContext context); + /// + /// Visit a parse tree produced by the objectStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitObjectStat([NotNull] ElsaParser.ObjectStatContext context); + /// + /// Visit a parse tree produced by the ifStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitIfStat([NotNull] ElsaParser.IfStatContext context); + /// + /// Visit a parse tree produced by the forStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitForStat([NotNull] ElsaParser.ForStatContext context); + /// + /// Visit a parse tree produced by the returnStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitReturnStat([NotNull] ElsaParser.ReturnStatContext context); + /// + /// Visit a parse tree produced by the blockStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBlockStat([NotNull] ElsaParser.BlockStatContext context); + /// + /// Visit a parse tree produced by the variableDeclarationStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitVariableDeclarationStat([NotNull] ElsaParser.VariableDeclarationStatContext context); + /// + /// Visit a parse tree produced by the localVariableDeclarationStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitLocalVariableDeclarationStat([NotNull] ElsaParser.LocalVariableDeclarationStatContext context); + /// + /// Visit a parse tree produced by the assignmentStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAssignmentStat([NotNull] ElsaParser.AssignmentStatContext context); + /// + /// Visit a parse tree produced by the expressionStat + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitExpressionStat([NotNull] ElsaParser.ExpressionStatContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitThenStat([NotNull] ElsaParser.ThenStatContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitElseStat([NotNull] ElsaParser.ElseStatContext context); + /// + /// Visit a parse tree produced by the newObjectExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNewObjectExpr([NotNull] ElsaParser.NewObjectExprContext context); + /// + /// Visit a parse tree produced by the subtractExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitSubtractExpr([NotNull] ElsaParser.SubtractExprContext context); + /// + /// Visit a parse tree produced by the incrementExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitIncrementExpr([NotNull] ElsaParser.IncrementExprContext context); + /// + /// Visit a parse tree produced by the objectExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitObjectExpr([NotNull] ElsaParser.ObjectExprContext context); + /// + /// Visit a parse tree produced by the stringValueExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitStringValueExpr([NotNull] ElsaParser.StringValueExprContext context); + /// + /// Visit a parse tree produced by the multiplyExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitMultiplyExpr([NotNull] ElsaParser.MultiplyExprContext context); + /// + /// Visit a parse tree produced by the parenthesesExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParenthesesExpr([NotNull] ElsaParser.ParenthesesExprContext context); + /// + /// Visit a parse tree produced by the functionExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitFunctionExpr([NotNull] ElsaParser.FunctionExprContext context); + /// + /// Visit a parse tree produced by the decrementExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDecrementExpr([NotNull] ElsaParser.DecrementExprContext context); + /// + /// Visit a parse tree produced by the negateExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNegateExpr([NotNull] ElsaParser.NegateExprContext context); + /// + /// Visit a parse tree produced by the methodCallExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitMethodCallExpr([NotNull] ElsaParser.MethodCallExprContext context); + /// + /// Visit a parse tree produced by the variableExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitVariableExpr([NotNull] ElsaParser.VariableExprContext context); + /// + /// Visit a parse tree produced by the notExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNotExpr([NotNull] ElsaParser.NotExprContext context); + /// + /// Visit a parse tree produced by the integerValueExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitIntegerValueExpr([NotNull] ElsaParser.IntegerValueExprContext context); + /// + /// Visit a parse tree produced by the addExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAddExpr([NotNull] ElsaParser.AddExprContext context); + /// + /// Visit a parse tree produced by the expressionMarkerExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitExpressionMarkerExpr([NotNull] ElsaParser.ExpressionMarkerExprContext context); + /// + /// Visit a parse tree produced by the backTickStringValueExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBackTickStringValueExpr([NotNull] ElsaParser.BackTickStringValueExprContext context); + /// + /// Visit a parse tree produced by the bracketsExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBracketsExpr([NotNull] ElsaParser.BracketsExprContext context); + /// + /// Visit a parse tree produced by the compareExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitCompareExpr([NotNull] ElsaParser.CompareExprContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitExprList([NotNull] ElsaParser.ExprListContext context); +} diff --git a/src/modules/Elsa.Dsl/AssemblyInfo.cs b/src/modules/Elsa.Dsl/AssemblyInfo.cs new file mode 100644 index 0000000..4e7f120 --- /dev/null +++ b/src/modules/Elsa.Dsl/AssemblyInfo.cs @@ -0,0 +1 @@ +[assembly: CLSCompliant(false)] \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Contracts/IDslEngine.cs b/src/modules/Elsa.Dsl/Contracts/IDslEngine.cs new file mode 100644 index 0000000..6290107 --- /dev/null +++ b/src/modules/Elsa.Dsl/Contracts/IDslEngine.cs @@ -0,0 +1,14 @@ +using Elsa.Workflows.Activities; + +namespace Elsa.Dsl.Contracts; + +/// +/// Represents a DSL engine that parse a workflow definition script into a instance. +/// +public interface IDslEngine +{ + /// + /// Parses the specified script into a instance. + /// + Task ParseAsync(string script, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Contracts/IFunctionActivityRegistry.cs b/src/modules/Elsa.Dsl/Contracts/IFunctionActivityRegistry.cs new file mode 100644 index 0000000..ddfb104 --- /dev/null +++ b/src/modules/Elsa.Dsl/Contracts/IFunctionActivityRegistry.cs @@ -0,0 +1,33 @@ +using Elsa.Dsl.Models; +using Elsa.Workflows; + +namespace Elsa.Dsl.Contracts; + +/// +/// Provides a registry for mapping functions to activities that can be invoked from a DSL script. +/// +public interface IFunctionActivityRegistry +{ + /// + /// Registers a function that is mapped to an activity that can be invoked from a DSL script. + /// + /// The name of the function. + /// The name of the activity type. + /// The names of the properties that are mapped to the function arguments. + /// An optional action that can be used to configure the activity. + void RegisterFunction(string functionName, string activityTypeName, IEnumerable? propertyNames = default, Action? configure = default); + + /// + /// Registers a function that is mapped to an activity that can be invoked from a DSL script. + /// + /// The descriptor that describes the function. + void RegisterFunction(FunctionActivityDescriptor descriptor); + + /// + /// Resolves a function to an activity that can be invoked from a DSL script. + /// + /// The name of the function. + /// The arguments that are passed to the function. + /// An activity that can be invoked from a DSL script. + Task ResolveFunctionAsync(string functionName, IEnumerable? arguments = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Contracts/ITypeSystem.cs b/src/modules/Elsa.Dsl/Contracts/ITypeSystem.cs new file mode 100644 index 0000000..7b9d3a8 --- /dev/null +++ b/src/modules/Elsa.Dsl/Contracts/ITypeSystem.cs @@ -0,0 +1,9 @@ +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Contracts; + +public interface ITypeSystem +{ + void Register(TypeDescriptor descriptor); + TypeDescriptor? ResolveTypeName(string typeName); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/ElsaLexer.g4 b/src/modules/Elsa.Dsl/Dsl/ElsaLexer.g4 new file mode 100644 index 0000000..7978294 --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/ElsaLexer.g4 @@ -0,0 +1,54 @@ +lexer grammar ElsaLexer; + +EQ : '='; +GREATER : '>'; +INCREMENT : '++'; +DECREMENT : '--'; +NEW : 'new'; +VARIABLE : 'variable'; +LET : 'let'; +IF : 'if'; +THEN : 'then'; +ELSE : 'else'; +FOR : 'for'; +RETURN : 'return'; +VOID : 'void'; +FLOAT : 'float'; +INT : 'int'; +STRING : 'string'; +OBJECT : 'object'; +EXPRESSION_MARKER : 'expression'; +SYMBOL : [=>$+`]; +COLON : ':'; +SEMICOLON : ';'; +COMMA : ','; +PLUS : '+'; +MINUS : '-'; +STAR : '*'; +EQUALS : '=='; +NOT_EQUALS : '!='; +GREATER_EQUALS : '>='; +LESS : '<'; +LESS_EQUALS : '<='; +LAMBDA : '=>'; +PARENTHESES_OPEN : '('; +PARENTHESES_CLOSE : ')'; +BRACKET_OPEN : '['; +BRACKET_CLOSE : ']'; +CURLYBRACE_OPEN : '{'; +CURLYBRACE_CLOSE : '}'; +EXCLAMATION : '!'; +PIPE : '|'; +PIPE_DBL : '||'; +PERIOD : '.'; +STRING_VAL : '"' ('\\"' | .)*? '"'; +BACKTICKSTRING_VAL : '`' ('\\"' | .)*? '`'; +LINE_COMMENT : '//' .*? '\r'? '\n' -> skip; +INTEGER_VAL : DIGIT+; +ID : LETTER (LETTER | DIGIT)*; +WS : [ \t\r\n] -> skip; + +fragment LETTER : [a-zA-Z_]; +fragment DIGIT : [0-9]; + +ESC : '\\|'; \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/ElsaParser.g4 b/src/modules/Elsa.Dsl/Dsl/ElsaParser.g4 new file mode 100644 index 0000000..4c5e0c8 --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/ElsaParser.g4 @@ -0,0 +1,121 @@ +parser grammar ElsaParser; + +options { tokenVocab = ElsaLexer; } + +program + : (stat | LINE_COMMENT)* + ; + +object + : ID objectInitializer? + ; + +newObject + : NEW ID ('<' type '>')? '(' args? ')' + ; + +varDecl + : VARIABLE ID (':' type)? (EQ expr)? + ; + +localVarDecl + : 'let' ID (':' type)? (EQ expr)? + ; + +type + : VOID + | FLOAT + | INT + | OBJECT + | STRING + | ID + ; + +expressionMarker + : EXPRESSION_MARKER '(' ID ',' expressionContent ')' + | ID '=>' expressionContent + ; + +expressionContent + : .*? + ; + +methodCall + : ID '.' funcCall + ; + +funcCall + : ID '(' args? ')' + ; + +args + : arg (',' arg)* + ; + +arg + : expr + | expressionMarker + ; + +block + : '{' stat* '}' + ; + +objectInitializer + : '{' propertyList? '}' + ; + +propertyList + : property (',' property)* + ; + +property + : ID ':' expr + ; + +stat + : object ';' #objectStat + | 'if' expr 'then' thenStat ('else' elseStat)? #ifStat + | 'for' '(' ID '=' expr ';' expr ';' expr ')' stat #forStat + | 'return' expr? ';' #returnStat + | block #blockStat + | varDecl ';' #variableDeclarationStat + | localVarDecl ';' #localVariableDeclarationStat + | expr '=' expr ';' #assignmentStat + | expr ';' #expressionStat + ; + +thenStat + : stat + ; + +elseStat + : stat + ; + +expr + : funcCall #functionExpr + | expressionMarker #expressionMarkerExpr + | object #objectExpr + | newObject #newObjectExpr + | expr '++' #incrementExpr + | expr '--' #decrementExpr + | '-' expr #negateExpr + | '!' expr #notExpr + | expr '*' expr #multiplyExpr + | expr '+' expr #addExpr + | expr '-' expr #subtractExpr + | expr ('==' | '>' | '<' | '!=' | '>=' | '<=') expr #compareExpr + | INTEGER_VAL #integerValueExpr + | STRING_VAL #stringValueExpr + | BACKTICKSTRING_VAL #backTickStringValueExpr + | '(' exprList? ')' #parenthesesExpr + | '[' exprList? ']' #bracketsExpr + | methodCall #methodCallExpr + | ID #variableExpr + ; + +exprList + : expr (',' expr)* + ; + \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/For.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/For.elsa new file mode 100644 index 0000000..c0ece8f --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/For.elsa @@ -0,0 +1,9 @@ +variable start: int = 1; +variable end: int = read(); + +print(js => `Counting numbers from ${start} to ${end}:`); + +for(i = start; i < end; i++) +{ + print(js => `Current value: ${i}`); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/Full.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/Full.elsa new file mode 100644 index 0000000..fd9602b --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/Full.elsa @@ -0,0 +1,40 @@ +// Triggers when HTTP request comes in. +trigger HttpTrigger +{ + Path: "/hello-world", + SupportedMethods: ["GET", "POST"] +}; + +// Triggers every 1 minute. +trigger TimerTrigger +{ + Interval: "0:00:01:00" +}; + +{ + // If + print("What's your age?"); + variable age = ReadLine; + + if age > 16 then + { + print("Enjoy your driver's license!"); + delay(5000); + print("But be careful!"); + } + else + print("Enjoy your bicycle!"); + + print("Goodbye."); + + // For + variable start: int = 1; + variable end: int = 3; + + print(context => $"Counting numbers from {start.Get(context)} to {end.Get(context)}"); + + for(i = start; i < end; i++) + { + print(context => "Current value: ${i}"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/Greeting.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/Greeting.elsa new file mode 100644 index 0000000..e17dfc9 --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/Greeting.elsa @@ -0,0 +1,7 @@ +{ + let name: string; + + print("Hi! What's your name?"); + read(name); + print("Nice to meet you, {name.Get(context)}!"); +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/HelloGoodbye.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/HelloGoodbye.elsa new file mode 100644 index 0000000..a321f86 --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/HelloGoodbye.elsa @@ -0,0 +1,4 @@ +{ + WriteLine "Hello World" + WriteLine "Goodbye cruel World" +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/HelloWorld.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/HelloWorld.elsa new file mode 100644 index 0000000..2f2b4ad --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/HelloWorld.elsa @@ -0,0 +1 @@ +WriteLine "Hello World"; \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/HttpTrigger.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/HttpTrigger.elsa new file mode 100644 index 0000000..8960629 --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/HttpTrigger.elsa @@ -0,0 +1,14 @@ +// Triggers when HTTP request comes in. +trigger HttpTrigger +{ + Path: "/hello-world", + SupportedMethods: ["GET", "POST"] +}; + +// Triggers every 1 minute. +trigger TimerTrigger +{ + Interval: "0:00:01:00" +}; + +WriteLine("Hello World!"); \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/If.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/If.elsa new file mode 100644 index 0000000..81b12c0 --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/If.elsa @@ -0,0 +1,14 @@ +print("What's your age?"); +variable age = ReadLine; + +if age > 16 then +{ + print("Enjoy your driver's license!"); + // delay(5000); + // await signal + print("But be careful!"); +} +else + print("Enjoy your bicycle!"); + +print("Goodbye."); \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Dsl/Samples/Scratchpad.elsa b/src/modules/Elsa.Dsl/Dsl/Samples/Scratchpad.elsa new file mode 100644 index 0000000..7444bbb --- /dev/null +++ b/src/modules/Elsa.Dsl/Dsl/Samples/Scratchpad.elsa @@ -0,0 +1,10 @@ +Sequence { + Activities: [ + WriteLine { Text:"writeLine1" }, + Sequence { + Activities: [ + WriteLine { Text:"writeLine2" } + ] + } + ] +}; \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Elsa.Dsl.csproj b/src/modules/Elsa.Dsl/Elsa.Dsl.csproj new file mode 100644 index 0000000..ebf8739 --- /dev/null +++ b/src/modules/Elsa.Dsl/Elsa.Dsl.csproj @@ -0,0 +1,19 @@ + + + + + Provides a custom DSL to write workflows with in a syntax similar to JavaScript but with native keywords translating to workflow functionality. + For example if/else would translate to the If activity. Very cool, but also very experimental ;) + + elsa, module, scripting, dsl, antlr4 + + + + + + + + + + + diff --git a/src/modules/Elsa.Dsl/Elsa.Dsl.csproj.DotSettings b/src/modules/Elsa.Dsl/Elsa.Dsl.csproj.DotSettings new file mode 100644 index 0000000..06d2f1f --- /dev/null +++ b/src/modules/Elsa.Dsl/Elsa.Dsl.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Extensions/DependencyInjectionExtensions.cs b/src/modules/Elsa.Dsl/Extensions/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..44e1888 --- /dev/null +++ b/src/modules/Elsa.Dsl/Extensions/DependencyInjectionExtensions.cs @@ -0,0 +1,14 @@ +using Elsa.Dsl.Features; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +public static class ModuleExtensions +{ + public static IModule UseDsl(this IModule configuration, Action? configure = default) + { + configuration.Configure(configure); + return configuration; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Extensions/ListConverter.cs b/src/modules/Elsa.Dsl/Extensions/ListConverter.cs new file mode 100644 index 0000000..ab3ed4a --- /dev/null +++ b/src/modules/Elsa.Dsl/Extensions/ListConverter.cs @@ -0,0 +1,18 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +public static class ListConverter +{ + public static T ConvertTo(this IEnumerable items) where T : IEnumerable => (T)ConvertTo(items, typeof(T)); + + public static object ConvertTo(this IEnumerable items, Type type) + { + var containedType = type.GenericTypeArguments.First(); + var enumerableType = typeof(Enumerable); + var castMethod = enumerableType.GetMethod(nameof(Enumerable.Cast))!.MakeGenericMethod(containedType); + var toListMethod = enumerableType.GetMethod(nameof(Enumerable.ToList))!.MakeGenericMethod(containedType); + var castedItems = castMethod.Invoke(null, new object?[] { items }); + + return toListMethod.Invoke(null!, new[] { castedItems })!; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Extensions/TypeSystemExtensions.cs b/src/modules/Elsa.Dsl/Extensions/TypeSystemExtensions.cs new file mode 100644 index 0000000..cf39b62 --- /dev/null +++ b/src/modules/Elsa.Dsl/Extensions/TypeSystemExtensions.cs @@ -0,0 +1,42 @@ +using Elsa.Dsl.Contracts; +using Elsa.Workflows; +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Extensions; + +public static class TypeSystemExtensions +{ + public static TypeDescriptor Register(this ITypeSystem typeSystem, string? typeName = default) => typeSystem.Register(typeName ?? typeof(T).Name, typeof(T)); + + public static TypeDescriptor Register(this ITypeSystem typeSystem, string typeName, Type type) + { + var kind = GetKind(type); + var descriptor = new TypeDescriptor(typeName, type, kind); + typeSystem.Register(descriptor); + return descriptor; + } + + private static TypeKind GetKind(Type type) + { + var kind = TypeKind.Unknown; + var isActivity = typeof(IActivity).IsAssignableFrom(type); + var isTrigger = typeof(IEventGenerator).IsAssignableFrom(type); + var isPrimitive = type.IsPrimitive; + var isObject = type.IsClass || type.IsValueType; + + if (isActivity || isTrigger) + { + if (isActivity) + kind |= TypeKind.Activity; + + if (isTrigger) + kind |= TypeKind.Trigger; + } + else if (isPrimitive) + kind = TypeKind.Primitive; + else if(isObject) + kind = TypeKind.Object; + + return kind; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Features/DslFeature.cs b/src/modules/Elsa.Dsl/Features/DslFeature.cs new file mode 100644 index 0000000..8c3b99e --- /dev/null +++ b/src/modules/Elsa.Dsl/Features/DslFeature.cs @@ -0,0 +1,23 @@ +using Elsa.Dsl.Contracts; +using Elsa.Dsl.Services; +using Elsa.Expressions.Features; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Dsl.Features; + +/// +[DependsOn(typeof(ExpressionsFeature))] +public class DslFeature(IModule module) : FeatureBase(module) +{ + /// + public override void Configure() + { + Services + .AddScoped() + .AddScoped() + .AddScoped(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/FodyWeavers.xml b/src/modules/Elsa.Dsl/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Dsl/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitArgs.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitArgs.cs new file mode 100644 index 0000000..434fd92 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitArgs.cs @@ -0,0 +1,23 @@ +using Antlr4.Runtime.Tree; +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitArgs(ElsaParser.ArgsContext context) + { + var args = context.arg(); + + var argValues = args.Select(x => + { + Visit(x); + var childContext = x.expr() ?? (IParseTree)x.expressionMarker(); + return _expressionValue.Get(childContext); + }).ToList(); + + _argValues.Put(context, argValues); + + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitBlockStatement.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitBlockStatement.cs new file mode 100644 index 0000000..219ce25 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitBlockStatement.cs @@ -0,0 +1,39 @@ +using Elsa.Workflows; +using Elsa.Workflows.Activities; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitBlockStat(ElsaParser.BlockStatContext context) + { + VisitChildren(context); + + var value = _expressionValue.Get(context.block()); + _expressionValue.Put(context, value); + + return DefaultResult; + } + + public override IWorkflowBuilder VisitBlock(ElsaParser.BlockContext context) + { + var sequence = new Sequence(); + _containerStack.Push(sequence); + + var statements = context.stat(); + + var values = statements.Select(x => + { + Visit(x); + return _expressionValue.Get(x); + }).ToList(); + + var activities = values.OfType().ToList(); + sequence.Activities = activities; + + _containerStack.Pop(); + _expressionValue.Put(context, sequence); + + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitBrackets.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitBrackets.cs new file mode 100644 index 0000000..677912f --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitBrackets.cs @@ -0,0 +1,28 @@ +using Elsa.Expressions.Helpers; +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + /// + public override IWorkflowBuilder VisitBracketsExpr(ElsaParser.BracketsExprContext context) + { + var propertyType = _expressionType.Get(context.Parent); + var targetElementType = propertyType?.GetGenericArguments().First() ?? typeof(object); + var contents = context.exprList().expr(); + + var items = contents.Select(x => + { + Visit(x); + var stringContext = x.GetChild(0) ?? x; + return _expressionValue.Get(stringContext); + }).ToList(); + + var stronglyTypedListType = targetElementType; + var stronglyTypedList = items.ConvertTo(stronglyTypedListType); + + _expressionValue.Put(context, stronglyTypedList); + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitExternalExpression.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitExternalExpression.cs new file mode 100644 index 0000000..1b783cd --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitExternalExpression.cs @@ -0,0 +1,24 @@ +using Elsa.Expressions.Models; +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitExpressionMarker(ElsaParser.ExpressionMarkerContext context) + { + // var language = context.ID(); + // var expressionContent = context.expressionContent().GetText(); + // + // // TODO: Determine actual expression type based on specified language. + // var expression = new JavaScriptExpression(expressionContent); + // var expressionReference = new JavaScriptExpressionBlockReference(expression); + // var externalReference = new ExternalExpressionReference(expression, expressionReference); + // _expressionValue.Put(context, externalReference); + // _expressionValue.Put(context.Parent, externalReference); + + return DefaultResult; + } +} + +public record ExternalExpressionReference(Expression Expression, MemoryBlockReference BlockReference); \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitFile.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitFile.cs new file mode 100644 index 0000000..146cb39 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitFile.cs @@ -0,0 +1,38 @@ +using Elsa.Workflows; +using Elsa.Workflows.Activities; + +namespace Elsa.Dsl.Interpreters; + +/// +public partial class WorkflowDefinitionBuilderInterpreter +{ + /// + public override IWorkflowBuilder VisitProgram(ElsaParser.ProgramContext context) + { + var stats = context.stat(); + var rootSequence = new Sequence(); + + // Push a sequence to allow multiple activities declared in sequence. + _containerStack.Push(rootSequence); + + // Interpret child nodes. + VisitChildren(context); + + // Extract activities from child nodes. + var activities = stats.Select(x => _expressionValue.Get(x) as IActivity).Where(x => x != null).Select(x => x!).ToList(); + + if (activities.Count == 1) + { + // We only have one activity, so we can use it as the root and discard the root sequence. + _workflowBuilder.Root = activities.Single(); + } + else + { + // Assign the collected child activities to the root sequence. + rootSequence.Activities = activities.ToList(); + _workflowBuilder.Root = rootSequence; + } + + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitFunction.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitFunction.cs new file mode 100644 index 0000000..6fcb4e4 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitFunction.cs @@ -0,0 +1,35 @@ +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitExpressionStat(ElsaParser.ExpressionStatContext context) + { + VisitChildren(context); + var expressionValue = _expressionValue.Get(context.expr()); + _expressionValue.Put(context, expressionValue); + return DefaultResult; + } + + public override IWorkflowBuilder VisitFunctionExpr(ElsaParser.FunctionExprContext context) + { + VisitChildren(context); + var expressionValue = _expressionValue.Get(context.funcCall()); + _expressionValue.Put(context, expressionValue); + return DefaultResult; + } + + public override IWorkflowBuilder VisitFuncCall(ElsaParser.FuncCallContext context) + { + VisitChildren(context); + + var functionName = context.ID().GetText(); + var argsNode = context.args(); + var args = argsNode != null ? _argValues.Get(context.args()) : default; + var activity = _functionActivityRegistry.ResolveFunctionAsync(functionName, args).GetAwaiter().GetResult(); + + _expressionValue.Put(context, activity); + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitIfStatement.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitIfStatement.cs new file mode 100644 index 0000000..945d1fb --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitIfStatement.cs @@ -0,0 +1,33 @@ +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitIfStat(ElsaParser.IfStatContext context) + { + // var ifActivity = new If(); + // var conditionExpr = context.expr().GetText(); + // + // var javaScriptExpression = new JavaScriptExpression(conditionExpr); + // ifActivity.Condition = new Input(javaScriptExpression, new JavaScriptExpressionBlockReference(javaScriptExpression)); + // + // var thenStat = context.thenStat().stat(); + // var elseStat = context.elseStat()?.stat(); + // + // Visit(thenStat); + // + // var thenActivity = _expressionValue.Get(thenStat); + // ifActivity.Then = (IActivity?)thenActivity; + // + // if (elseStat != null) + // { + // Visit(elseStat); + // var elseActivity = _expressionValue.Get(elseStat); + // ifActivity.Else = (IActivity?)elseActivity; + // } + // + // _expressionValue.Put(context, ifActivity); + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitLocalVariable.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitLocalVariable.cs new file mode 100644 index 0000000..f1d9d49 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitLocalVariable.cs @@ -0,0 +1,27 @@ +using Elsa.Dsl.Models; +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitLocalVarDecl(ElsaParser.LocalVarDeclContext context) + { + var variableName = context.ID().GetText(); + var variableType = context.type()?.ID().GetText(); + + VisitChildren(context); + + var value = _expressionValue.Get(context.expr()); + + var variable = new DefinedVariable + { + Identifier = variableName, + Value = value + }; + + _definedVariables[variableName] = variable; + + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitNewObject.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitNewObject.cs new file mode 100644 index 0000000..cb67dbd --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitNewObject.cs @@ -0,0 +1,52 @@ +using Elsa.Workflows; +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitNewObjectExpr(ElsaParser.NewObjectExprContext context) + { + VisitChildren(context); + + var value = _expressionValue.Get(context.newObject()); + _expressionValue.Put(context, value); + + return DefaultResult; + } + + public override IWorkflowBuilder VisitNewObject(ElsaParser.NewObjectContext context) + { + var objectTypeName = context.ID().GetText(); + var typeArg = context.type()?.GetText(); + TypeDescriptor? typeArgTypeDescriptor = default; + + if (typeArg != null) + { + objectTypeName = $"{objectTypeName}<>"; + typeArgTypeDescriptor = _typeSystem.ResolveTypeName(typeArg) ?? throw new Exception($"Cannot use type {typeArg} as type argument because it was not found in the type system."); + } + + var typeDescriptor = _typeSystem.ResolveTypeName(objectTypeName); + + if (typeDescriptor == null) + throw new Exception($"Could not instantiate type {objectTypeName} because it was not found in the type system."); + + VisitChildren(context); + + var argValues = _argValues.Get(context.args()).ToArray(); + var objectType = typeDescriptor.Type; + + if (typeArgTypeDescriptor != null) + { + var objectTypeArg = typeArgTypeDescriptor.Type; + objectType = objectType.MakeGenericType(objectTypeArg); + } + + var objectInstance = Activator.CreateInstance(objectType, argValues); + + _expressionValue.Put(context, objectInstance); + + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitObject.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitObject.cs new file mode 100644 index 0000000..54634c4 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitObject.cs @@ -0,0 +1,91 @@ +using System.Text.Json; +using Elsa.Workflows; +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + /// + public override IWorkflowBuilder VisitObjectExpr(ElsaParser.ObjectExprContext context) + { + VisitChildren(context); + var value = _expressionValue.Get(context.@object()); + _expressionValue.Put(context, value); + + return DefaultResult; + } + + /// + public override IWorkflowBuilder VisitObjectStat(ElsaParser.ObjectStatContext context) + { + VisitChildren(context); + var value = _expressionValue.Get(context.@object()); + _expressionValue.Put(context, value); + + return DefaultResult; + } + + /// + public override IWorkflowBuilder VisitObject(ElsaParser.ObjectContext context) + { + var @object = GetObjectAsync(context).GetAwaiter().GetResult(); + + _object.Put(context, @object); + _expressionValue.Put(context, @object); + VisitChildren(context); + + return DefaultResult; + } + + private async Task GetObjectAsync(ElsaParser.ObjectContext context) + { + var objectTypeName = context.ID().GetText(); + + // First, check if the symbol matches an activity type. + var activityDescriptor = await _activityRegistryLookup.FindAsync(x => x.Name == objectTypeName); + + if (activityDescriptor != null) + { + // TODO: Refactor this to remove the dependency on JsonElement and JsonSerializerOptions. + // This limits the ability to use this class in other contexts, such as constructing activities from the DSL. + var jsonElement = JsonSerializer.Deserialize("{}"); + var ctorArgs = new ActivityConstructorContext(activityDescriptor, jsonElement, new JsonSerializerOptions()); + return activityDescriptor.Constructor(ctorArgs); + } + + var objectTypeDescriptor = _typeSystem.ResolveTypeName(objectTypeName); + + if (objectTypeDescriptor == null) + { + // Perhaps this is a variable reference? + if (_definedVariables.TryGetValue(objectTypeName, out var definedVariable)) + { + _expressionValue.Put(context, definedVariable.Value); + return DefaultResult; + } + + // Or a workflow variable? + var workflowVariableQuery = + from container in _containerStack + from variable in container.Variables + where variable.Name == objectTypeName + select variable; + + var workflowVariable = workflowVariableQuery.FirstOrDefault(); + + if (workflowVariable != null) + { + _expressionValue.Put(context, workflowVariable); + return DefaultResult; + } + + throw new Exception($"Unknown type: {objectTypeName}"); + } + + var objectType = objectTypeDescriptor.Type; + var @object = Activator.CreateInstance(objectType)!; + + return @object; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitProperty.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitProperty.cs new file mode 100644 index 0000000..cf3710d --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitProperty.cs @@ -0,0 +1,65 @@ +using System.Reflection; +using Elsa.Expressions.Helpers; +using Elsa.Expressions.Models; +using Elsa.Workflows; +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + /// + public override IWorkflowBuilder VisitProperty(ElsaParser.PropertyContext context) + { + var @object = _object.Get(context.Parent.Parent.Parent); + var objectType = @object.GetType(); + var propertyName = context.ID().GetText(); + var propertyInfo = objectType.GetProperty(propertyName); + + if (propertyInfo == null) + throw new Exception($"Type {objectType.Name} does not have a public property named {propertyName}."); + + _expressionType.Put(context, propertyInfo.PropertyType); + VisitChildren(context); + + var propertyValue = _expressionValue.Get(context.expr()); + var propertyType = propertyInfo.PropertyType; + var parsedPropertyValue = typeof(Input).IsAssignableFrom(propertyType) ? propertyValue : propertyValue.ConvertTo(propertyType); + SetPropertyValue(@object, propertyInfo, parsedPropertyValue); + + return DefaultResult; + } + + private void SetPropertyValue(object target, PropertyInfo propertyInfo, object? value) + { + if (typeof(Input).IsAssignableFrom(propertyInfo.PropertyType)) + value = CreateInputValue(propertyInfo, value); + + propertyInfo.SetValue(target, value, null); + } + + private Input CreateInputValue(PropertyInfo propertyInfo, object? propertyValue) + { + var underlyingType = propertyInfo.PropertyType.GetGenericArguments().First(); + var parsedPropertyValue = propertyValue.ConvertTo(underlyingType); + var propertyValueType = parsedPropertyValue?.GetType(); + var inputType = typeof(Input<>).MakeGenericType(underlyingType); + + if (propertyValueType != null) + { + // Create a literal value. + var literalType = typeof(Literal<>).MakeGenericType(underlyingType); + var hasCtorWithSpecifiedType = inputType.GetConstructors().Any(x => x.GetParameters().Any(y => y.ParameterType.IsAssignableFrom(literalType))); + + if (hasCtorWithSpecifiedType) + { + var literalValue = Activator.CreateInstance(literalType, parsedPropertyValue)!; + return (Input)Activator.CreateInstance(inputType, literalValue)!; + } + } + + return parsedPropertyValue is ExternalExpressionReference externalExpressionReference + ? (Input)Activator.CreateInstance(inputType, externalExpressionReference.Expression, externalExpressionReference.BlockReference)! + : (Input)Activator.CreateInstance(inputType, parsedPropertyValue)!; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitStringValue.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitStringValue.cs new file mode 100644 index 0000000..03f6f3a --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitStringValue.cs @@ -0,0 +1,20 @@ +using Elsa.Workflows; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitStringValueExpr(ElsaParser.StringValueExprContext context) + { + var value = context.GetText().Trim('\"'); + _expressionValue.Put(context, value); + return DefaultResult; + } + + public override IWorkflowBuilder VisitBackTickStringValueExpr(ElsaParser.BackTickStringValueExprContext context) + { + var value = context.GetText().Trim('\"'); + _expressionValue.Put(context, value); + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitWorkflowVariable.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitWorkflowVariable.cs new file mode 100644 index 0000000..2e30a27 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/VisitWorkflowVariable.cs @@ -0,0 +1,50 @@ +using Elsa.Workflows; +using Elsa.Workflows.Memory; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter +{ + public override IWorkflowBuilder VisitVariableDeclarationStat(ElsaParser.VariableDeclarationStatContext context) + { + VisitChildren(context); + var expressionValue = _expressionValue.Get(context.varDecl()); + _expressionValue.Put(context, expressionValue); + return DefaultResult; + } + + public override IWorkflowBuilder VisitVarDecl(ElsaParser.VarDeclContext context) + { + var workflowVariableName = context.ID().GetText(); + + VisitChildren(context); + + var initExpr = context.expr(); + var workflowVariableValue = initExpr != null ? _expressionValue.Get(initExpr) : default; + + var workflowVariable = new Variable + { + Name = workflowVariableName + }; + + if (workflowVariableValue is IActivity activity) + { + // When an activity is assigned to a workflow variable, what we really are doing is setting the variable to the activity's output. + var activityType = activity.GetType(); + var outputProperty = activityType.GetProperties().FirstOrDefault(x => x.Name == "Result"); + + if (outputProperty == null) + throw new Exception("Cannot assign output of an activity that does not have an Output property."); + + var outputValue = Activator.CreateInstance(outputProperty.PropertyType, workflowVariable, default); + outputProperty.SetValue(activity, outputValue); + + _expressionValue.Put(context, activity); + } + + var currentContainer = _containerStack.Peek(); + currentContainer.Variables.Add(workflowVariable); + + return DefaultResult; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/WorkflowDefinitionBuilderInterpreter.cs b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/WorkflowDefinitionBuilderInterpreter.cs new file mode 100644 index 0000000..3c7a099 --- /dev/null +++ b/src/modules/Elsa.Dsl/Interpreters/WorkflowDefinitionBuilderInterpreter/WorkflowDefinitionBuilderInterpreter.cs @@ -0,0 +1,37 @@ +using Antlr4.Runtime.Tree; +using Elsa.Dsl.Contracts; +using Elsa.Dsl.Models; +using Elsa.Workflows; +using Elsa.Workflows.Activities; + +namespace Elsa.Dsl.Interpreters; + +public partial class WorkflowDefinitionBuilderInterpreter : ElsaParserBaseVisitor +{ + private readonly ITypeSystem _typeSystem; + private readonly IActivityRegistryLookupService _activityRegistryLookup; + private readonly IFunctionActivityRegistry _functionActivityRegistry; + private readonly IWorkflowBuilder _workflowBuilder; + private readonly ParseTreeProperty _object = new(); + private readonly ParseTreeProperty _expressionValue = new(); + private readonly ParseTreeProperty> _argValues = new(); + private readonly ParseTreeProperty _expressionType = new(); + private readonly IDictionary _definedVariables = new Dictionary(); + private readonly Stack _containerStack = new(); + + /// + public WorkflowDefinitionBuilderInterpreter( + ITypeSystem typeSystem, + IActivityRegistryLookupService activityRegistryLookup, + IFunctionActivityRegistry functionActivityRegistry, + IWorkflowBuilderFactory workflowBuilderFactory) + { + _typeSystem = typeSystem; + _activityRegistryLookup = activityRegistryLookup; + _functionActivityRegistry = functionActivityRegistry; + _workflowBuilder = workflowBuilderFactory.CreateBuilder(); + } + + /// + protected override IWorkflowBuilder DefaultResult => _workflowBuilder; +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Models/DefinedVariable.cs b/src/modules/Elsa.Dsl/Models/DefinedVariable.cs new file mode 100644 index 0000000..0230de6 --- /dev/null +++ b/src/modules/Elsa.Dsl/Models/DefinedVariable.cs @@ -0,0 +1,8 @@ +namespace Elsa.Dsl.Models; + +public class DefinedVariable +{ + public string Identifier { get; set; } = default!; + public Type Type { get; set; } = default!; + public object? Value { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Models/FunctionActivityDescriptor.cs b/src/modules/Elsa.Dsl/Models/FunctionActivityDescriptor.cs new file mode 100644 index 0000000..9b80da4 --- /dev/null +++ b/src/modules/Elsa.Dsl/Models/FunctionActivityDescriptor.cs @@ -0,0 +1,12 @@ +using Elsa.Workflows; + +namespace Elsa.Dsl.Models; + +/// +/// Describes a function that is mapped to an activity that can be invoked from a DSL script. +/// +/// The name of the function. +/// The name of the activity type. +/// The names of the properties that are mapped to the function arguments. +/// An optional action that can be used to configure the activity. +public record FunctionActivityDescriptor(string FunctionName, string ActivityTypeName, IEnumerable? PropertyNames = default, Action? Configure = default); \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Models/WorkflowDefinitionInterpreterSettings.cs b/src/modules/Elsa.Dsl/Models/WorkflowDefinitionInterpreterSettings.cs new file mode 100644 index 0000000..bfd2696 --- /dev/null +++ b/src/modules/Elsa.Dsl/Models/WorkflowDefinitionInterpreterSettings.cs @@ -0,0 +1,5 @@ +namespace Elsa.Dsl.Models; + +public class WorkflowDefinitionInterpreterSettings +{ +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Services/DslEngine.cs b/src/modules/Elsa.Dsl/Services/DslEngine.cs new file mode 100644 index 0000000..96b0bfd --- /dev/null +++ b/src/modules/Elsa.Dsl/Services/DslEngine.cs @@ -0,0 +1,52 @@ +using Antlr4.Runtime; +using Elsa.Dsl.Contracts; +using Elsa.Dsl.Interpreters; +using Elsa.Workflows; +using Elsa.Workflows.Activities; + +namespace Elsa.Dsl.Services; + +/// +public class DslEngine : IDslEngine +{ + private readonly ITypeSystem _typeSystem; + private readonly IActivityRegistryLookupService _activityRegistryLookup; + private readonly IFunctionActivityRegistry _functionActivityRegistry; + private readonly IWorkflowBuilderFactory _workflowBuilderFactory; + + /// + /// Initializes a new instance of the class. + /// + public DslEngine( + ITypeSystem typeSystem, + IActivityRegistryLookupService activityRegistryLookup, + IFunctionActivityRegistry functionActivityRegistry, + IWorkflowBuilderFactory workflowBuilderFactory) + { + _typeSystem = typeSystem; + _activityRegistryLookup = activityRegistryLookup; + _functionActivityRegistry = functionActivityRegistry; + _workflowBuilderFactory = workflowBuilderFactory; + } + + /// + public async Task ParseAsync(string script, CancellationToken cancellationToken = default) + { + var stream = CharStreams.fromString(script); + var lexer = new ElsaLexer(stream); + var tokens = new CommonTokenStream(lexer); + var parser = new ElsaParser(tokens); + var tree = parser.program(); + + var interpreter = new WorkflowDefinitionBuilderInterpreter( + _typeSystem, + _activityRegistryLookup, + _functionActivityRegistry, + _workflowBuilderFactory); + + var workflowBuilder = interpreter.Visit(tree); + var workflow = await workflowBuilder.BuildWorkflowAsync(cancellationToken); + + return workflow; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Services/FunctionActivityRegistry.cs b/src/modules/Elsa.Dsl/Services/FunctionActivityRegistry.cs new file mode 100644 index 0000000..7178522 --- /dev/null +++ b/src/modules/Elsa.Dsl/Services/FunctionActivityRegistry.cs @@ -0,0 +1,139 @@ +using System.Text.Json; +using Elsa.Dsl.Contracts; +using Elsa.Dsl.Interpreters; +using Elsa.Dsl.Models; +using Elsa.Expressions.Helpers; +using Elsa.Expressions.Models; +using Elsa.Workflows; +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Services; + +/// +public class FunctionActivityRegistry : IFunctionActivityRegistry +{ + private readonly IActivityRegistryLookupService _activityRegistryLookup; + private readonly IDictionary _dictionary = new Dictionary(); + + /// + /// Creates a new instance of the class. + /// + public FunctionActivityRegistry(IActivityRegistryLookupService activityRegistryLookup) + { + _activityRegistryLookup = activityRegistryLookup; + } + + /// + public void RegisterFunction(string functionName, string activityTypeName, IEnumerable? propertyNames = default, Action? configure = default) + { + var descriptor = new FunctionActivityDescriptor(functionName, activityTypeName, propertyNames, configure); + RegisterFunction(descriptor); + } + + /// + public void RegisterFunction(FunctionActivityDescriptor descriptor) + { + _dictionary.Add(descriptor.FunctionName, descriptor); + } + + /// + public async Task ResolveFunctionAsync(string functionName, IEnumerable? arguments = default) + { + if (!_dictionary.TryGetValue(functionName, out var descriptor)) + throw new Exception($"Could not resolve function {functionName}. Did you forget to register it?"); + + var activityDescriptor = await _activityRegistryLookup.FindAsync(x => x.Name == descriptor.ActivityTypeName || x.TypeName == descriptor.ActivityTypeName); + + if (activityDescriptor == null) + throw new Exception($"Could not find activity descriptor for activity type {descriptor.ActivityTypeName}"); + + var propertyNameList = descriptor.PropertyNames?.ToList() ?? new List(); + var propertyDescriptors = activityDescriptor.Inputs.Cast().Concat(activityDescriptor.Outputs).ToList(); + + var properties = propertyNameList + .Select(propertyName => propertyDescriptors.FirstOrDefault(x => x.Name == propertyName)) + .Where(x => x != null) + .Select(x => x!) + .ToList(); + + var dummyJsonElement = JsonDocument.Parse("{}").RootElement; + var constructorContext = new ActivityConstructorContext(activityDescriptor, dummyJsonElement, new JsonSerializerOptions()); + var activity = activityDescriptor.Constructor(constructorContext); + + // Apply each argument in order of the described properties. + var index = 0; + + if (arguments != null) + foreach (var argument in arguments) + { + var property = properties[index++]; + SetPropertyValue(activity, property, argument); + } + + descriptor.Configure?.Invoke(activity); + return activity; + } + + private void SetPropertyValue(IActivity target, PropertyDescriptor propertyDescriptor, object? value) + { + value = propertyDescriptor switch + { + InputDescriptor inputDescriptor => CreateInputValue(inputDescriptor, value), + OutputDescriptor outputDescriptor => CreateOutputValue(outputDescriptor, value), + _ => value + }; + + propertyDescriptor.ValueSetter(target, value); + } + + private Input CreateInputValue(InputDescriptor inputDescriptor, object? propertyValue) + { + if (propertyValue is Input input) + return input; + + var underlyingType = inputDescriptor.Type; + var parsedPropertyValue = propertyValue.ConvertTo(underlyingType); + var propertyValueType = parsedPropertyValue?.GetType(); + var inputType = typeof(Input<>).MakeGenericType(underlyingType); + + if (parsedPropertyValue is ExternalExpressionReference externalExpressionReference) + return (Input)Activator.CreateInstance(inputType, externalExpressionReference.Expression, externalExpressionReference.BlockReference)!; + + if (propertyValueType != null) + { + // Create a literal value. + var literalType = typeof(Literal<>).MakeGenericType(underlyingType); + var hasCtorWithSpecifiedType = inputType.GetConstructors().Any(x => x.GetParameters().Any(y => y.ParameterType.IsAssignableFrom(literalType))); + + if (hasCtorWithSpecifiedType) + { + var literalValue = Activator.CreateInstance(literalType, parsedPropertyValue)!; + return (Input)Activator.CreateInstance(inputType, literalValue)!; + } + } + + return (Input)Activator.CreateInstance(inputType, parsedPropertyValue)!; + } + + private Output CreateOutputValue(OutputDescriptor outputDescriptor, object? propertyValue) + { + if (propertyValue is Output output) + return output; + + var underlyingType = outputDescriptor.Type; + var propertyValueType = propertyValue?.GetType(); + var outputType = typeof(Output<>).MakeGenericType(underlyingType); + + if (propertyValueType != null) + { + var hasCtorWithSpecifiedType = outputType.GetConstructors().Any(x => x.GetParameters().Any(y => y.ParameterType.IsAssignableFrom(propertyValueType))); + + if (hasCtorWithSpecifiedType) + return (Output)Activator.CreateInstance(outputType, propertyValue, null)!; + } + + var convertedValue = propertyValue.ConvertTo(underlyingType); + + return (Output)Activator.CreateInstance(outputType, convertedValue)!; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Dsl/Services/TypeSystem.cs b/src/modules/Elsa.Dsl/Services/TypeSystem.cs new file mode 100644 index 0000000..0039660 --- /dev/null +++ b/src/modules/Elsa.Dsl/Services/TypeSystem.cs @@ -0,0 +1,19 @@ +using Elsa.Dsl.Contracts; +using Elsa.Workflows.Models; + +namespace Elsa.Dsl.Services; + +public class TypeSystem : ITypeSystem +{ + private readonly IDictionary _typeNameLookup = new Dictionary(); + private readonly IDictionary _typeLookup = new Dictionary(); + + public void Register(TypeDescriptor descriptor) + { + _typeNameLookup[descriptor.Name] = descriptor; + _typeLookup[descriptor.Type] = descriptor; + } + + public TypeDescriptor? ResolveTypeName(string typeName) => _typeNameLookup.TryGetValue(typeName, out var descriptor) ? descriptor : default; + public TypeDescriptor? ResolveType(Type type) => _typeLookup.TryGetValue(type, out var descriptor) ? descriptor : default; +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Common/ElasticStore.cs b/src/modules/Elsa.Elasticsearch/Common/ElasticStore.cs new file mode 100644 index 0000000..45cffee --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Common/ElasticStore.cs @@ -0,0 +1,127 @@ +using Elastic.Clients.Elasticsearch; +using Elsa.Common.Models; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; +using Exception = System.Exception; + +namespace Elsa.Elasticsearch.Common; + +/// +/// A thin wrapper around for easy re-usability. +/// +/// The document type. +[PublicAPI] +public class ElasticStore where T : class +{ + private readonly ElasticsearchClient _elasticClient; + private readonly ILogger _logger; + + /// + /// Constructor. + /// + public ElasticStore(ElasticsearchClient elasticClient, ILogger> logger) + { + _elasticClient = elasticClient; + _logger = logger; + } + + /// + /// Searches the index using the specified search descriptor. + /// + public async Task> SearchAsync(Action> search, CancellationToken cancellationToken = default) + { + var page = PageArgs.FromPage(0, 1000); + var collectedItems = new List(); + + while(true) + { + var result = await SearchAsync(search, page, cancellationToken); + + collectedItems.AddRange(result.Items); + + if (result.Items.Count < page.PageSize) + break; + + page = page.Next(); + } + + return collectedItems; + } + + /// + /// Searches the index using the specified search descriptor. + /// + public async Task> SearchAsync(Action> search, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + search += s => s.From(pageArgs.Offset); + search += s => s.Size(pageArgs.Limit); + + var response = await _elasticClient.SearchAsync(search, cancellationToken); + + if (!response.IsSuccess()) + throw new Exception(response.DebugInformation); + + return new Page(response.Hits.Select(hit => hit.Source).ToList()!, response.Total); + } + + /// + /// Counts the number of documents matching the given search descriptor. + /// + public async Task CountAsync(Action> countRequest, CancellationToken cancellationToken = default) + { + var response = await _elasticClient.CountAsync(countRequest, cancellationToken); + + if (!response.IsSuccess()) + throw new Exception($"Failed to get count from Elasticsearch: {response.DebugInformation}"); + + return response.Count; + } + + /// + /// Stores the specified document in the index. + /// + public async Task SaveAsync(T document, CancellationToken cancellationToken) + { + var response = await _elasticClient.IndexAsync(document, cancellationToken); + + if (!response.IsSuccess()) + throw new Exception($"Failed to save data in Elasticsearch: {response.ElasticsearchServerError}"); + } + + /// + /// Stores the specified documents in the index. + /// + public async Task SaveManyAsync(IEnumerable documents, CancellationToken cancellationToken) + { + var response = await _elasticClient.IndexManyAsync(documents, cancellationToken); + + if (!response.IsSuccess()) + throw new Exception($"Failed to save data in Elasticsearch: {response.ElasticsearchServerError}"); + } + + /// + /// Deletes the specified set of documents from the index. + /// + public async Task DeleteManyAsync(IEnumerable documents, CancellationToken cancellationToken) + { + var response = await _elasticClient.BulkAsync(b => b.DeleteMany(documents), cancellationToken); + + if (!response.IsSuccess()) + throw new Exception(response.DebugInformation); + + return response.Items.Count(i => i.IsValid); + } + + /// + /// Deletes the documents matching the specified query. + /// + public async Task DeleteByQueryAsync(Action> query, CancellationToken cancellationToken) + { + var response = await _elasticClient.DeleteByQueryAsync(Indices.All, query, cancellationToken); + + if (!response.IsSuccess()) + throw new Exception(response.DebugInformation); + + return response.Deleted ?? 0; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Common/IndexConfiguration.cs b/src/modules/Elsa.Elasticsearch/Common/IndexConfiguration.cs new file mode 100644 index 0000000..63dd17d --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Common/IndexConfiguration.cs @@ -0,0 +1,23 @@ +using Elastic.Clients.Elasticsearch; +using Elsa.Elasticsearch.Contracts; +using Elsa.Elasticsearch.Strategies; + +namespace Elsa.Elasticsearch.Common; + +/// +/// A convenience base class for document type configurations. +/// +public abstract class IndexConfiguration : IIndexConfiguration +{ + /// + public Type DocumentType => typeof(T); + + /// + public virtual IIndexNamingStrategy IndexNamingStrategy => new DefaultNaming(); + + /// + public abstract void ConfigureClientSettings(ElasticsearchClientSettings settings); + + /// + public virtual ValueTask ConfigureClientAsync(ElasticsearchClient client, CancellationToken cancellationToken) => ValueTask.CompletedTask; +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Common/PersistenceFeatureBase.cs b/src/modules/Elsa.Elasticsearch/Common/PersistenceFeatureBase.cs new file mode 100644 index 0000000..5c99abd --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Common/PersistenceFeatureBase.cs @@ -0,0 +1,34 @@ +using Elsa.Elasticsearch.Contracts; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Elasticsearch.Common; + +/// +/// Base class for features that configure Elasticsearch persistence. +/// +public abstract class ElasticPersistenceFeatureBase : FeatureBase +{ + /// + protected ElasticPersistenceFeatureBase(IModule module) : base(module) + { + } + + /// + /// Registers an . + /// + /// The entity type of the store. + /// The type of the store. + protected void AddStore() where TModel : class where TStore : class + { + Services + .AddScoped>() + .AddScoped(); + } + + /// + /// Registers an . + /// + protected void AddIndexConfiguration(Func> configuration) => Services.AddScoped(configuration); +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Contracts/IIndexConfiguration.cs b/src/modules/Elsa.Elasticsearch/Contracts/IIndexConfiguration.cs new file mode 100644 index 0000000..02ca615 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Contracts/IIndexConfiguration.cs @@ -0,0 +1,39 @@ +using Elastic.Clients.Elasticsearch; + +namespace Elsa.Elasticsearch.Contracts; + +/// +/// Implement this interface to get a chance to configure some aspect of Elasticsearch, such as index mappings. +/// +public interface IIndexConfiguration +{ + /// + /// The document type to configure. + /// + Type DocumentType { get; } + + /// + /// The index naming strategy to use for rollovers. + /// + IIndexNamingStrategy IndexNamingStrategy { get; } + + /// + /// Invoked by the system to configure . + /// + /// The settings to configure. + void ConfigureClientSettings(ElasticsearchClientSettings settings); + + /// + /// Invoked by the system to configure the . + /// + /// The to configure. + /// A cancellation token. + ValueTask ConfigureClientAsync(ElasticsearchClient client, CancellationToken cancellationToken); +} + +/// +/// Implement this interface to get a chance to configure some aspect of Elasticsearch, such as index mappings. +/// +public interface IIndexConfiguration : IIndexConfiguration +{ +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Contracts/IIndexNamingStrategy.cs b/src/modules/Elsa.Elasticsearch/Contracts/IIndexNamingStrategy.cs new file mode 100644 index 0000000..d0aabec --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Contracts/IIndexNamingStrategy.cs @@ -0,0 +1,12 @@ +namespace Elsa.Elasticsearch.Contracts; + +/// +/// Represents a naming strategy to use when creating an index name from an alias. +/// +public interface IIndexNamingStrategy +{ + /// + /// Returns an index name from the specified alias. + /// + string GenerateName(string aliasName); +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Elsa.Elasticsearch.csproj b/src/modules/Elsa.Elasticsearch/Elsa.Elasticsearch.csproj new file mode 100644 index 0000000..0759c22 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Elsa.Elasticsearch.csproj @@ -0,0 +1,19 @@ + + + + + Provides Elasticsearch implementation for workflow state persistence. + + elsa module elasticsearch + + + + + + + + + + + + diff --git a/src/modules/Elsa.Elasticsearch/Extensions/ElasticExtensions.cs b/src/modules/Elsa.Elasticsearch/Extensions/ElasticExtensions.cs new file mode 100644 index 0000000..1dc8595 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Extensions/ElasticExtensions.cs @@ -0,0 +1,18 @@ +using Elastic.Clients.Elasticsearch; +using Elastic.Transport; +using Elsa.Elasticsearch.Options; + +namespace Elsa.Elasticsearch.Extensions; + +internal static class ElasticExtensions +{ + public static ElasticsearchClientSettings ConfigureAuthentication(this ElasticsearchClientSettings settings, ElasticsearchOptions options) + { + if (!string.IsNullOrEmpty(options.ApiKey)) + settings.Authentication(new ApiKey(options.ApiKey)); + else if (!string.IsNullOrEmpty(options.Username) && !string.IsNullOrEmpty(options.Password)) + settings.Authentication(new BasicAuthentication(options.Username, options.Password)); + + return settings; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Elasticsearch/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..15718ee --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Extensions/ModuleExtensions.cs @@ -0,0 +1,26 @@ +using Elsa.Elasticsearch.Features; +using Elsa.Elasticsearch.Options; +using Elsa.Features.Services; +using JetBrains.Annotations; + +namespace Elsa.Elasticsearch.Extensions; + +/// +/// Extends to configure the feature. +/// +[PublicAPI] +public static class ModuleExtensions +{ + /// + /// Enables the feature. + /// + public static IModule UseElasticsearch( + this IModule module, + Action options, + Action? configure = default) + { + configure += f => f.Options += options; + module.Configure(configure); + return module; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Features/ElasticsearchFeature.cs b/src/modules/Elsa.Elasticsearch/Features/ElasticsearchFeature.cs new file mode 100644 index 0000000..9c8ed0a --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Features/ElasticsearchFeature.cs @@ -0,0 +1,48 @@ +using Elastic.Clients.Elasticsearch; +using Elsa.Elasticsearch.Contracts; +using Elsa.Elasticsearch.Extensions; +using Elsa.Elasticsearch.Options; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace Elsa.Elasticsearch.Features; + +/// +/// Configures Elasticsearch. +/// +public class ElasticsearchFeature : FeatureBase +{ + /// + public ElasticsearchFeature(IModule module) : base(module) + { + } + + /// + /// A delegate that configures Elasticsearch. + /// + public Action Options { get; set; } = _ => { }; + + /// + public override void Apply() + { + Services.Configure(Options); + Services.AddScoped(sp => new ElasticsearchClient(GetSettings(sp))); + } + + private static ElasticsearchClientSettings GetSettings(IServiceProvider serviceProvider) + { + var options = serviceProvider.GetRequiredService>().Value; + var configuration = serviceProvider.GetRequiredService(); + var configs = serviceProvider.GetServices(); + var url = configuration.GetConnectionString(options.Endpoint) ?? options.Endpoint; + var settings = new ElasticsearchClientSettings(new Uri(url)).ConfigureAuthentication(options); + + foreach (var config in configs) + config.ConfigureClientSettings(settings); + + return settings; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/FodyWeavers.xml b/src/modules/Elsa.Elasticsearch/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Management/ElasticWorkflowInstanceFeature.cs b/src/modules/Elsa.Elasticsearch/Modules/Management/ElasticWorkflowInstanceFeature.cs new file mode 100644 index 0000000..3c7294a --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Management/ElasticWorkflowInstanceFeature.cs @@ -0,0 +1,46 @@ +using Elsa.Elasticsearch.Common; +using Elsa.Elasticsearch.Contracts; +using Elsa.Elasticsearch.Features; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Features; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Elasticsearch.Modules.Management; + +/// +/// Configures the feature with Elasticsearch. +/// +[DependsOn(typeof(WorkflowManagementFeature))] +[DependsOn(typeof(ElasticsearchFeature))] +public class ElasticWorkflowInstanceFeature : ElasticPersistenceFeatureBase +{ + /// + public ElasticWorkflowInstanceFeature(IModule module) : base(module) + { + } + + /// + /// A delegate that creates an instance of a concrete implementation if for . + /// + public Func> IndexConfiguration { get; set; } = sp => ActivatorUtilities.CreateInstance(sp); + + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.WorkflowInstanceStore = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + + AddStore(); + AddIndexConfiguration(IndexConfiguration); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Management/Extensions.cs b/src/modules/Elsa.Elasticsearch/Modules/Management/Extensions.cs new file mode 100644 index 0000000..93e1d58 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Management/Extensions.cs @@ -0,0 +1,20 @@ +using Elsa.Workflows.Management.Features; +using JetBrains.Annotations; + +namespace Elsa.Elasticsearch.Modules.Management; + +/// +/// Extends the feature. +/// +[PublicAPI] +public static class Extensions +{ + /// + /// Configures the to use the . + /// + public static WorkflowInstancesFeature UseElasticsearch(this WorkflowInstancesFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Management/WorkflowInstanceConfiguration.cs b/src/modules/Elsa.Elasticsearch/Modules/Management/WorkflowInstanceConfiguration.cs new file mode 100644 index 0000000..0891cfc --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Management/WorkflowInstanceConfiguration.cs @@ -0,0 +1,40 @@ +using Elastic.Clients.Elasticsearch; +using Elastic.Clients.Elasticsearch.IndexManagement; +using Elsa.Elasticsearch.Common; +using Elsa.Elasticsearch.Options; +using Elsa.Workflows.Management.Entities; +using Microsoft.Extensions.Options; + +namespace Elsa.Elasticsearch.Modules.Management; + +/// +/// Configures Elasticsearch with mappings for . +/// +public class WorkflowInstanceConfiguration : IndexConfiguration +{ + private readonly ElasticsearchOptions _options; + + /// + public WorkflowInstanceConfiguration(IOptions options) + { + _options = options.Value; + } + + /// + public override void ConfigureClientSettings(ElasticsearchClientSettings settings) + { + var alias = _options.GetIndexNameFor(); + var indexName = IndexNamingStrategy.GenerateName(alias); + settings.DefaultMappingFor(m => m.IndexName(indexName)); + } + + /// + public override async ValueTask ConfigureClientAsync(ElasticsearchClient client, CancellationToken cancellationToken) + { + var alias = _options.GetIndexNameFor(); + var indexName = IndexNamingStrategy.GenerateName(alias); + var descriptor = new CreateIndexRequestDescriptor(indexName); + descriptor.Mappings(m => m.Properties(p => p.Flattened(d => d.WorkflowState.Properties))); + await client.Indices.CreateAsync(descriptor, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Management/WorkflowInstanceStore.cs b/src/modules/Elsa.Elasticsearch/Modules/Management/WorkflowInstanceStore.cs new file mode 100644 index 0000000..e5f345e --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Management/WorkflowInstanceStore.cs @@ -0,0 +1,227 @@ +using Elastic.Clients.Elasticsearch; +using Elastic.Clients.Elasticsearch.QueryDsl; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Elasticsearch.Common; +using Elsa.Extensions; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Management.Filters; +using Elsa.Workflows.Management.Models; +using Humanizer; + +namespace Elsa.Elasticsearch.Modules.Management; + +/// +/// Stores and retrieves workflow instances from Elasticsearch. +/// +public class ElasticWorkflowInstanceStore : IWorkflowInstanceStore +{ + private readonly ElasticStore _store; + + /// + /// Constructor. + /// + public ElasticWorkflowInstanceStore(ElasticStore store) + { + _store = store; + } + + /// + public async ValueTask FindAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var result = await _store.SearchAsync(d => Filter(d, filter), PageArgs.FromRange(0, 1), cancellationToken); + return result.Items.FirstOrDefault(); + } + + /// + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await _store.SearchAsync(d => Filter(d, filter), pageArgs, cancellationToken); + } + + /// + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + return await _store.SearchAsync(d => Sort(Filter(d, filter), order), pageArgs, cancellationToken); + } + + /// + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + return await _store.SearchAsync(d => Filter(d, filter), cancellationToken); + } + + /// + public async ValueTask> FindManyAsync(WorkflowInstanceFilter filter, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + return await _store.SearchAsync(d => Sort(Filter(d, filter), order), cancellationToken); + } + + /// + public async ValueTask CountAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + return await _store.CountAsync(d => Filter(d, filter), cancellationToken); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => Summarize(Filter(d, filter)), pageArgs, cancellationToken); + var summaries = results.Items.Select(WorkflowInstanceSummary.FromInstance).ToList(); + return new(summaries, results.TotalCount); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => Summarize(Sort(Filter(d, filter), order)), pageArgs, cancellationToken); + var summaries = results.Items.Select(WorkflowInstanceSummary.FromInstance).ToList(); + return new(summaries, results.TotalCount); + } + + /// + public async ValueTask> FindManyIdsAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => SelectId(Filter(d, filter)), cancellationToken); + return results.Select(x => x.Id).ToList(); + } + + /// + public async ValueTask> FindManyIdsAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => SelectId(Filter(d, filter)), pageArgs, cancellationToken); + return new(results.Items.Select(x => x.Id).ToList(), results.TotalCount); + } + + /// + public async ValueTask> FindManyIdsAsync(WorkflowInstanceFilter filter, PageArgs pageArgs, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => SelectId(Sort(Filter(d, filter), order)), pageArgs, cancellationToken); + return new(results.Items.Select(x => x.Id).ToList(), results.TotalCount); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => Summarize(Filter(d, filter)), cancellationToken); + return results.Select(WorkflowInstanceSummary.FromInstance).ToList(); + } + + /// + public async ValueTask> SummarizeManyAsync(WorkflowInstanceFilter filter, WorkflowInstanceOrder order, CancellationToken cancellationToken = default) + { + var results = await _store.SearchAsync(d => Summarize(Sort(Filter(d, filter), order)), cancellationToken); + return results.Select(WorkflowInstanceSummary.FromInstance).ToList(); + } + + /// + public async ValueTask SaveAsync(WorkflowInstance instance, CancellationToken cancellationToken = default) + { + await _store.SaveAsync(instance, cancellationToken); + } + + /// + public async ValueTask AddAsync(WorkflowInstance instance, CancellationToken cancellationToken = default) + { + await _store.SaveAsync(instance, cancellationToken); + } + + public async ValueTask UpdateAsync(WorkflowInstance instance, CancellationToken cancellationToken = default) + { + await _store.SaveAsync(instance, cancellationToken); + } + + /// + public async ValueTask SaveManyAsync(IEnumerable instances, CancellationToken cancellationToken = default) + { + await _store.SaveManyAsync(instances, cancellationToken); + } + + /// + public async ValueTask DeleteAsync(WorkflowInstanceFilter filter, CancellationToken cancellationToken = default) + { + return await _store.DeleteByQueryAsync(d => Filter(d, filter), cancellationToken); + } + + public Task UpdateUpdatedTimestampAsync(string workflowInstanceId, DateTimeOffset value, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + private static SearchRequestDescriptor Sort(SearchRequestDescriptor descriptor, WorkflowInstanceOrder order) + { + var sortDescriptor = new SortOptionsDescriptor(); + var propName = order.KeySelector.GetPropertyName().Camelize(); + var sortOrder = order.Direction == OrderDirection.Ascending ? SortOrder.Asc : SortOrder.Desc; + sortDescriptor.Field(propName, f => f.Order(sortOrder)); + + descriptor.Sort(sortDescriptor); + return descriptor; + } + + private static SearchRequestDescriptor Filter(SearchRequestDescriptor descriptor, WorkflowInstanceFilter filter) + { + return descriptor.Query(query => Filter(query, filter)); + } + + private static CountRequestDescriptor Filter(CountRequestDescriptor descriptor, WorkflowInstanceFilter filter) + { + return descriptor.Query(query => Filter(query, filter)); + } + + private static DeleteByQueryRequestDescriptor Filter(DeleteByQueryRequestDescriptor descriptor, WorkflowInstanceFilter filter) + { + return descriptor.Query(query => Filter(query, filter)); + } + + private static QueryDescriptor Filter(QueryDescriptor descriptor, WorkflowInstanceFilter filter) + { + if (!string.IsNullOrWhiteSpace(filter.Id)) descriptor = descriptor.Match(m => m.Field(f => f.Id).Query(filter.Id)); + if (!string.IsNullOrWhiteSpace(filter.DefinitionId)) descriptor = descriptor.Match(m => m.Field(f => f.DefinitionId).Query(filter.DefinitionId)); + if (!string.IsNullOrWhiteSpace(filter.DefinitionVersionId)) descriptor = descriptor.Match(m => m.Field(f => f.DefinitionVersionId).Query(filter.DefinitionVersionId)); + + // TODO: filter by IDs + // TODO: filter by DefinitionIDs + // TODO: filter by DefinitionVersionIDs + // TODO: filter by ParentWorkflowInstanceIds + // TODO: filter by CorrelationIDs + // TODO: filter by WorkflowStatuses + // TODO: filter by WorkflowSubStatuses + + if (filter.Version != null) descriptor = descriptor.Match(m => m.Field(f => f.Version).Query(filter.Version.ToString()!)); + if (!string.IsNullOrWhiteSpace(filter.CorrelationId)) descriptor = descriptor.Match(m => m.Field(f => f.CorrelationId).Query(filter.CorrelationId)); + if (filter.WorkflowStatus != null) descriptor = descriptor.Match(m => m.Field(f => f.Status).Query(filter.WorkflowStatus.ToString()!)); + if (filter.WorkflowSubStatus != null) descriptor = descriptor.Match(m => m.Field(f => f.SubStatus).Query(filter.WorkflowSubStatus.ToString()!)); + + if (string.IsNullOrWhiteSpace(filter.SearchTerm)) + return descriptor.MatchAll(new MatchAllQuery()); + + return descriptor + .QueryString(c => c + .Query(filter.SearchTerm)); + } + + private static SearchRequestDescriptor Summarize(SearchRequestDescriptor descriptor) + { + return descriptor.Fields( + field => field.Field(f => f.Id), + field => field.Field(f => f.DefinitionId), + field => field.Field(f => f.Status), + field => field.Field(f => f.SubStatus), + field => field.Field(f => f.Version), + field => field.Field(f => f.CorrelationId), + field => field.Field(f => f.Version), + field => field.Field(f => f.Name), + field => field.Field(f => f.CreatedAt), + field => field.Field(f => f.FinishedAt), + field => field.Field(f => f.DefinitionVersionId), + field => field.Field(f => f.UpdatedAt) + ); + } + + private static SearchRequestDescriptor SelectId(SearchRequestDescriptor descriptor) + { + return descriptor.Fields(field => field.Field(f => f.Id)); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Runtime/ElasticExecutionLogRecordFeature.cs b/src/modules/Elsa.Elasticsearch/Modules/Runtime/ElasticExecutionLogRecordFeature.cs new file mode 100644 index 0000000..2ad2d6b --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Runtime/ElasticExecutionLogRecordFeature.cs @@ -0,0 +1,46 @@ +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Features; +using Elsa.Elasticsearch.Common; +using Elsa.Elasticsearch.Contracts; +using Elsa.Elasticsearch.Features; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Elasticsearch.Modules.Runtime; + +/// +/// Configures the feature with Elasticsearch persistence. +/// +[DependsOn(typeof(WorkflowRuntimeFeature))] +[DependsOn(typeof(ElasticsearchFeature))] +public class ElasticExecutionLogRecordFeature : ElasticPersistenceFeatureBase +{ + /// + public ElasticExecutionLogRecordFeature(IModule module) : base(module) + { + } + + /// + /// A delegate that creates an instance of a concrete implementation if for . + /// + public Func> IndexConfiguration { get; set; } = sp => ActivatorUtilities.CreateInstance(sp); + + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.WorkflowExecutionLogStore = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + + AddStore(); + AddIndexConfiguration(IndexConfiguration); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Runtime/ExecutionLogConfiguration.cs b/src/modules/Elsa.Elasticsearch/Modules/Runtime/ExecutionLogConfiguration.cs new file mode 100644 index 0000000..f3e8dcc --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Runtime/ExecutionLogConfiguration.cs @@ -0,0 +1,23 @@ +using Elastic.Clients.Elasticsearch; +using Elsa.Elasticsearch.Common; +using Elsa.Elasticsearch.Options; +using Elsa.Workflows.Runtime.Entities; +using Microsoft.Extensions.Options; + +namespace Elsa.Elasticsearch.Modules.Runtime; + +/// +/// Configures Elasticsearch with mappings for . +/// +public class ExecutionLogConfiguration : IndexConfiguration +{ + private readonly ElasticsearchOptions _options; + + /// + public ExecutionLogConfiguration(IOptions options) => _options = options.Value; + + /// + public override void ConfigureClientSettings(ElasticsearchClientSettings settings) => + settings.DefaultMappingFor(m => m + .IndexName(_options.GetIndexNameFor())); +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Runtime/Extensions.cs b/src/modules/Elsa.Elasticsearch/Modules/Runtime/Extensions.cs new file mode 100644 index 0000000..2c92e7f --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Runtime/Extensions.cs @@ -0,0 +1,18 @@ +using Elsa.Workflows.Runtime.Features; + +namespace Elsa.Elasticsearch.Modules.Runtime; + +/// +/// Provides extensions to the feature. +/// +public static class Extensions +{ + /// + /// Configures the to use the . + /// + public static WorkflowRuntimeFeature UseElasticsearch(this WorkflowRuntimeFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Modules/Runtime/WorkflowExecutionLogStore.cs b/src/modules/Elsa.Elasticsearch/Modules/Runtime/WorkflowExecutionLogStore.cs new file mode 100644 index 0000000..7addf88 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Modules/Runtime/WorkflowExecutionLogStore.cs @@ -0,0 +1,110 @@ +using Elastic.Clients.Elasticsearch; +using Elastic.Clients.Elasticsearch.QueryDsl; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Elasticsearch.Common; +using Elsa.Elasticsearch.Shared.Models; +using Elsa.Extensions; +using Elsa.Workflows.Runtime; +using Elsa.Workflows.Runtime.Entities; +using Elsa.Workflows.Runtime.Filters; +using Elsa.Workflows.Runtime.OrderDefinitions; +using JetBrains.Annotations; + +namespace Elsa.Elasticsearch.Modules.Runtime; + +/// +/// Store and retrieves objects from an Elasticsearch. +/// +[UsedImplicitly] +public class ElasticWorkflowExecutionLogStore(ElasticStore store) : IWorkflowExecutionLogStore +{ + /// + public async Task AddAsync(WorkflowExecutionLogRecord record, CancellationToken cancellationToken = default) + { + await store.SaveAsync(record, cancellationToken); + } + + /// + public async Task AddManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + await store.SaveManyAsync(records, cancellationToken); + } + + /// + public async Task SaveAsync(WorkflowExecutionLogRecord record, CancellationToken cancellationToken = default) + { + await store.SaveAsync(record, cancellationToken); + } + + /// + public async Task SaveManyAsync(IEnumerable records, CancellationToken cancellationToken = default) + { + await store.SaveManyAsync(records, cancellationToken); + } + + /// + public async Task FindAsync(WorkflowExecutionLogRecordFilter filter, CancellationToken cancellationToken = default) + { + var result = await store.SearchAsync(d => Filter(d, filter), PageArgs.FromRange(0, 1), cancellationToken); + return result.Items.FirstOrDefault(); + } + + /// + public async Task FindAsync(WorkflowExecutionLogRecordFilter filter, WorkflowExecutionLogRecordOrder order, CancellationToken cancellationToken = default) + { + var result = await store.SearchAsync(d => Sort(Filter(d, filter), order), PageArgs.FromRange(0, 1), cancellationToken); + return result.Items.FirstOrDefault(); + } + + /// + public async Task> FindManyAsync(WorkflowExecutionLogRecordFilter filter, PageArgs pageArgs, CancellationToken cancellationToken = default) + { + return await store.SearchAsync(d => Filter(d, filter), pageArgs, cancellationToken); + } + + /// + public async Task> FindManyAsync(WorkflowExecutionLogRecordFilter filter, PageArgs pageArgs, WorkflowExecutionLogRecordOrder order, CancellationToken cancellationToken = default) + { + return await store.SearchAsync(d => Sort(Filter(d, filter), order), pageArgs, cancellationToken); + } + + /// + public async Task DeleteManyAsync(WorkflowExecutionLogRecordFilter filter, CancellationToken cancellationToken = default) + { + return await store.DeleteByQueryAsync(d => Filter(d, filter), cancellationToken); + } + + private static SearchRequestDescriptor Sort(SearchRequestDescriptor descriptor, WorkflowExecutionLogRecordOrder order) + { + var propName = order.KeySelector.GetProperty()!.Name; + var orderField = new OrderField(propName, order.Direction); + return Sort(descriptor, orderField); + } + + private static SearchRequestDescriptor Sort(SearchRequestDescriptor descriptor, params OrderField[] orderFields) + { + var sortDescriptor = new SortOptionsDescriptor(); + + foreach (var orderField in orderFields) + { + var sortOrder = orderField.Direction == OrderDirection.Ascending ? SortOrder.Asc : SortOrder.Desc; + sortDescriptor.Field(orderField.Field, f => f.Order(sortOrder)); + } + + descriptor.Sort(sortDescriptor); + return descriptor; + } + + private static SearchRequestDescriptor Filter(SearchRequestDescriptor descriptor, WorkflowExecutionLogRecordFilter filter) => descriptor.Query(query => Filter(query, filter)); + private static DeleteByQueryRequestDescriptor Filter(DeleteByQueryRequestDescriptor descriptor, WorkflowExecutionLogRecordFilter filter) => descriptor.Query(query => Filter(query, filter)); + + private static QueryDescriptor Filter(QueryDescriptor descriptor, WorkflowExecutionLogRecordFilter filter) + { + if (!string.IsNullOrWhiteSpace(filter.WorkflowInstanceId)) descriptor = descriptor.Match(m => m.Field(f => f.WorkflowInstanceId).Query(filter.WorkflowInstanceId)); + if (!string.IsNullOrWhiteSpace(filter.ActivityId)) descriptor = descriptor.Match(m => m.Field(f => f.ActivityId).Query(filter.ActivityId)); + if (!string.IsNullOrWhiteSpace(filter.EventName)) descriptor = descriptor.Match(m => m.Field(f => f.EventName).Query(filter.EventName)); + + return descriptor; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Options/ElasticsearchOptions.cs b/src/modules/Elsa.Elasticsearch/Options/ElasticsearchOptions.cs new file mode 100644 index 0000000..e7f18a6 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Options/ElasticsearchOptions.cs @@ -0,0 +1,46 @@ +using Humanizer; +using JetBrains.Annotations; + +namespace Elsa.Elasticsearch.Options; + +/// +/// Contains Elasticsearch settings. +/// +[PublicAPI] +public class ElasticsearchOptions +{ + /// + /// The URL of the Elasticsearch server or the name of a connection string that in turn stores the URL. + /// + public string Endpoint { get; set; } = default!; + + /// + /// The username to use when connecting with the Elasticsearch server. + /// + public string? Username { get; set; } + + /// + /// The password to use when connecting with the Elasticsearch server. + /// + public string? Password { get; set; } + + /// + /// The API key to use when connecting with the Elasticsearch server. + /// + public string? ApiKey { get; set; } + + /// + /// A map between type and index name to use. When no index name is configured for a given type, the name of the type is used. + /// + public IDictionary IndexNameMappings { get; set; } = new Dictionary(); + + /// + /// Returns an index name for the specified document type. If no mapping was found, the simple name of the type is used. + /// + public string GetIndexNameFor() => GetIndexNameFor(typeof(T)); + + /// + /// Returns an index name for the specified document type. If no mapping was found, the simple name of the type is used. + /// + public string GetIndexNameFor(Type documentType) => IndexNameMappings.TryGetValue(documentType, out var index) ? index : documentType.Name.Dasherize(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Shared/Models/OrderField.cs b/src/modules/Elsa.Elasticsearch/Shared/Models/OrderField.cs new file mode 100644 index 0000000..9de2878 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Shared/Models/OrderField.cs @@ -0,0 +1,10 @@ +using Elsa.Common.Entities; + +namespace Elsa.Elasticsearch.Shared.Models; + +/// +/// Represents a field by which to order. +/// +/// The field. +/// The direction. +public record OrderField(string Field, OrderDirection Direction); \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Strategies/DefaultNaming.cs b/src/modules/Elsa.Elasticsearch/Strategies/DefaultNaming.cs new file mode 100644 index 0000000..4736d7b --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Strategies/DefaultNaming.cs @@ -0,0 +1,13 @@ +using Elsa.Elasticsearch.Contracts; +using Humanizer; + +namespace Elsa.Elasticsearch.Strategies; + +/// +/// Returns the alias as the name for the index. +/// +public class DefaultNaming : IIndexNamingStrategy +{ + /// + public string GenerateName(string aliasName) => aliasName.Kebaberize(); +} \ No newline at end of file diff --git a/src/modules/Elsa.Elasticsearch/Strategies/YearAndMonthNaming.cs b/src/modules/Elsa.Elasticsearch/Strategies/YearAndMonthNaming.cs new file mode 100644 index 0000000..bcae989 --- /dev/null +++ b/src/modules/Elsa.Elasticsearch/Strategies/YearAndMonthNaming.cs @@ -0,0 +1,33 @@ +using Elsa.Common; +using Elsa.Elasticsearch.Contracts; +using Humanizer; +using JetBrains.Annotations; + +namespace Elsa.Elasticsearch.Strategies; + +/// +/// Returns an index name based on the specified alias, current year and month. +/// +[PublicAPI] +public class YearAndMonthNaming : IIndexNamingStrategy +{ + private readonly ISystemClock _systemClock; + + /// + /// Constructor. + /// + public YearAndMonthNaming(ISystemClock systemClock) + { + _systemClock = systemClock; + } + + /// + public string GenerateName(string aliasName) + { + var now = _systemClock.UtcNow; + var month = now.ToString("MM"); + var year = now.Year; + + return aliasName.Kebaberize() + "-" + year + "-" + month; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Activities/SendEmail.cs b/src/modules/Elsa.Email/Activities/SendEmail.cs new file mode 100644 index 0000000..f761a1e --- /dev/null +++ b/src/modules/Elsa.Email/Activities/SendEmail.cs @@ -0,0 +1,254 @@ +using System.Collections; +using System.Dynamic; +using System.Runtime.CompilerServices; +using System.Text; +using System.Text.Json; +using Elsa.Email.Contracts; +using Elsa.Email.Models; +using Elsa.Email.Options; +using Elsa.Extensions; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.UIHints; +using Elsa.Workflows.Models; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using MimeKit; + +namespace Elsa.Email.Activities; + +/// +/// Send an email message. +/// +[Activity("Elsa", "Email", "Send an email message.", Kind = ActivityKind.Task)] +public class SendEmail : Activity +{ + /// + public SendEmail([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line) + { + } + + /// + /// The sender's email address. + /// + [Input(Description = "The sender's email address.")] + public Input From { get; set; } = null!; + + /// + /// The recipients email addresses. + /// + [Input(Description = "The recipients email addresses.", UIHint = InputUIHints.MultiText)] + public Input> To { get; set; } = null!; + + /// + /// The CC recipient email addresses. + /// + [Input( + Description = "The CC recipient email addresses.", + UIHint = InputUIHints.MultiText, + Category = "More")] + public Input> Cc { get; set; } = null!; + + /// + /// The BCC recipients email addresses. + /// + [Input( + Description = "The BCC recipients email addresses.", + UIHint = InputUIHints.MultiText, + Category = "More")] + public Input> Bcc { get; set; } = null!; + + /// + /// The subject of the email message. + /// + [Input(Description = "The subject of the email message.")] + public Input Subject { get; set; } = null!; + + /// + /// The attachments to send with the email message. + /// + [Input( + Description = "The attachments to send with the email message. Can be (an array of) a fully-qualified file path, URL, stream, byte array or instances of EmailAttachment.", + UIHint = InputUIHints.MultiLine + )] + public Input Attachments { get; set; } = null!; + + /// + /// The body of the email message. + /// + [Input( + Description = "The body of the email message.", + UIHint = InputUIHints.MultiLine + )] + public Input Body { get; set; } = null!; + + /// + /// The activity to execute when an error occurs while trying to send the email. + /// + [Port] public IActivity? Error { get; set; } + + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var cancellationToken = context.CancellationToken; + var message = new MimeMessage(); + var options = context.GetRequiredService>().Value; + var from = string.IsNullOrWhiteSpace(From.GetOrDefault(context)) ? options.DefaultSender : From.Get(context)!; + + message.Sender = MailboxAddress.Parse(from); + message.From.Add(MailboxAddress.Parse(from)); + message.Subject = Subject.GetOrDefault(context) ?? ""; + + var bodyBuilder = new BodyBuilder + { + HtmlBody = Body.GetOrDefault(context) + }; + await AddAttachmentsAsync(context, bodyBuilder, cancellationToken); + + message.Body = bodyBuilder.ToMessageBody(); + + SetRecipientsEmailAddresses(message.To, GetAddresses(context, To)); + SetRecipientsEmailAddresses(message.Cc, GetAddresses(context, Cc)); + SetRecipientsEmailAddresses(message.Bcc, GetAddresses(context, Bcc)); + + var smtpService = context.GetRequiredService(); + var logger = context.GetRequiredService>(); + + try + { + await smtpService.SendAsync(message, context.CancellationToken); + await context.CompleteActivityAsync(); + } + catch (Exception e) + { + logger.LogWarning(e, "Error while sending email message"); + context.AddExecutionLogEntry("Error", e.Message, payload: new + { + e.StackTrace + }); + await context.ScheduleActivityAsync(Error, OnErrorCompletedAsync); + } + } + + private async ValueTask OnErrorCompletedAsync(ActivityCompletedContext context) => await context.TargetContext.CompleteActivityAsync(); + + private static ICollection GetAddresses(ActivityExecutionContext context, Input> input) + { + return input.GetOrDefault(context) ?? new List(0); + } + + private async Task AddAttachmentsAsync(ActivityExecutionContext context, BodyBuilder bodyBuilder, CancellationToken cancellationToken) + { + var attachments = Attachments.GetOrDefault(context); + + if (attachments == null || attachments is string s && string.IsNullOrWhiteSpace(s)) + return; + + var index = 0; + var attachmentObjects = InterpretAttachmentsModel(attachments); + + foreach (var attachmentObject in attachmentObjects) + { + switch (attachmentObject) + { + case Uri url: + await AttachOnlineFileAsync(context, bodyBuilder, url, cancellationToken); + break; + case string path when path?.Contains("://") == true: + await AttachOnlineFileAsync(context, bodyBuilder, new Uri(path), cancellationToken); + break; + case string path when !string.IsNullOrWhiteSpace(path): + await AttachLocalFileAsync(bodyBuilder, path, cancellationToken); + break; + case byte[] bytes: + { + var fileName = $"Attachment-{++index}"; + bodyBuilder.Attachments.Add(fileName, bytes, ContentType.Parse("application/binary")); + break; + } + case Stream stream: + { + var fileName = $"Attachment-{++index}"; + await bodyBuilder.Attachments.AddAsync(fileName, stream, ContentType.Parse("application/binary"), cancellationToken); + break; + } + case EmailAttachment emailAttachment: + { + var fileName = emailAttachment.FileName ?? $"Attachment-{++index}"; + var contentType = emailAttachment.ContentType ?? "application/binary"; + var parsedContentType = ContentType.Parse(contentType); + + if (emailAttachment.Content is byte[] bytes) + bodyBuilder.Attachments.Add(fileName, bytes, parsedContentType); + + else if (emailAttachment.Content is Stream stream) + await bodyBuilder.Attachments.AddAsync(fileName, stream, parsedContentType, cancellationToken); + + break; + } + case ExpandoObject expandoObject: + { + var dictionary = new Dictionary(expandoObject, StringComparer.OrdinalIgnoreCase); + var fileName = dictionary.GetValue("FileName") ?? $"Attachment-{++index}"; + var contentType = dictionary.GetValue("ContentType") ?? "application/binary"; + var parsedContentType = ContentType.Parse(contentType); + var content = dictionary.GetValue("Content"); + + if (content is byte[] bytes) + bodyBuilder.Attachments.Add(fileName, bytes, parsedContentType); + + else if (content is Stream stream) + await bodyBuilder.Attachments.AddAsync(fileName, stream, parsedContentType, cancellationToken); + + break; + } + default: + { + var json = JsonSerializer.Serialize(attachmentObject); + var fileName = $"Attachment-{++index}"; + bodyBuilder.Attachments.Add(fileName, Encoding.UTF8.GetBytes(json), ContentType.Parse("application/json")); + break; + } + } + } + } + + private async Task AttachLocalFileAsync(BodyBuilder bodyBuilder, string path, CancellationToken cancellationToken) => await bodyBuilder.Attachments.AddAsync(path, cancellationToken); + + private async Task AttachOnlineFileAsync(ActivityExecutionContext context, BodyBuilder bodyBuilder, Uri url, CancellationToken cancellationToken) + { + var fileName = Path.GetFileName(url.LocalPath); + var downloader = context.GetRequiredService(); + var response = await downloader.DownloadAsync(url, cancellationToken); + var contentStream = await response.Content.ReadAsStreamAsync(cancellationToken); + var contentType = response.Content.Headers.ContentType?.MediaType ?? "application/binary"; + await bodyBuilder.Attachments.AddAsync(fileName, contentStream, ContentType.Parse(contentType), cancellationToken); + } + + private IEnumerable InterpretAttachmentsModel(object attachments) + { + if (attachments is byte[] bytes) + return new[] + { + bytes + }; + + return attachments is string text + ? new[] + { + text + } + : attachments as IEnumerable ?? new[] + { + attachments + }; + } + + private void SetRecipientsEmailAddresses(InternetAddressList list, IEnumerable? addresses) + { + if (addresses == null) + return; + + list.AddRange(addresses.Select(MailboxAddress.Parse)); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Contracts/IDownloader.cs b/src/modules/Elsa.Email/Contracts/IDownloader.cs new file mode 100644 index 0000000..95fef9d --- /dev/null +++ b/src/modules/Elsa.Email/Contracts/IDownloader.cs @@ -0,0 +1,12 @@ +namespace Elsa.Email.Contracts; + +/// +/// Download files from the Internet. +/// +public interface IDownloader +{ + /// + /// Download whatever is returned at the specified URL. + /// + Task DownloadAsync(Uri url, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Contracts/ISmtpService.cs b/src/modules/Elsa.Email/Contracts/ISmtpService.cs new file mode 100644 index 0000000..ed956b8 --- /dev/null +++ b/src/modules/Elsa.Email/Contracts/ISmtpService.cs @@ -0,0 +1,14 @@ +using MimeKit; + +namespace Elsa.Email.Contracts; + +/// +/// Use this service to send emails. +/// +public interface ISmtpService +{ + /// + /// Send the specified . + /// + Task SendAsync(MimeMessage message, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Elsa.Email.csproj b/src/modules/Elsa.Email/Elsa.Email.csproj new file mode 100644 index 0000000..3a3c6cc --- /dev/null +++ b/src/modules/Elsa.Email/Elsa.Email.csproj @@ -0,0 +1,20 @@ + + + + + Provides a SendEmail activity that lets you send emails from a workflow. + + elsa module activities email + + + + + + + + + + + + + diff --git a/src/modules/Elsa.Email/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Email/Extensions/ModuleExtensions.cs new file mode 100644 index 0000000..0642bec --- /dev/null +++ b/src/modules/Elsa.Email/Extensions/ModuleExtensions.cs @@ -0,0 +1,20 @@ +using Elsa.Email.Features; +using Elsa.Features.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Extensions; + +/// +/// Provides methods to install and configure email related features. +/// +public static class ModuleExtensions +{ + /// + /// Adds the feature to the system. + /// + public static IModule UseEmail(this IModule configuration, Action? configure = default) + { + configuration.Configure(configure); + return configuration; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Features/EmailFeature.cs b/src/modules/Elsa.Email/Features/EmailFeature.cs new file mode 100644 index 0000000..c77e45e --- /dev/null +++ b/src/modules/Elsa.Email/Features/EmailFeature.cs @@ -0,0 +1,51 @@ +using Elsa.Email.Contracts; +using Elsa.Email.Options; +using Elsa.Email.Services; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Email.Features; + +/// +/// Setup email features. +/// +public class EmailFeature : FeatureBase +{ + /// + public EmailFeature(IModule module) : base(module) + { + } + + /// + /// Set a callback to configure . + /// + public Action ConfigureOptions { get; set; } = _ => { }; + + /// + /// Gets or sets a callback for configuring the implementation. + /// + public Func SmtpService { get; set; } = sp => sp.GetRequiredService(); + + /// + /// Gets or sets a callback for configuring the HTTP client use by the default implementation of . + /// + public Action ConfigureDownloaderHttpClient { get; set; } = (_, _) => { }; + + /// + public override void Configure() + { + Module.AddActivitiesFrom(); + } + + /// + public override void Apply() + { + Services + .Configure(ConfigureOptions) + .AddScoped() + .AddScoped(SmtpService) + .AddHttpClient(ConfigureDownloaderHttpClient); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/FodyWeavers.xml b/src/modules/Elsa.Email/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.Email/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.Email/Models/EmailAttachment.cs b/src/modules/Elsa.Email/Models/EmailAttachment.cs new file mode 100644 index 0000000..f30ab2b --- /dev/null +++ b/src/modules/Elsa.Email/Models/EmailAttachment.cs @@ -0,0 +1,9 @@ +namespace Elsa.Email.Models; + +/// +/// Represents an email attachment. +/// +/// The content of the attachment. +/// The name of the attachment. +/// The content type of the attachment. +public record EmailAttachment(object Content, string? FileName, string? ContentType); \ No newline at end of file diff --git a/src/modules/Elsa.Email/Options/SmtpEncryptionMethod.cs b/src/modules/Elsa.Email/Options/SmtpEncryptionMethod.cs new file mode 100644 index 0000000..053b6af --- /dev/null +++ b/src/modules/Elsa.Email/Options/SmtpEncryptionMethod.cs @@ -0,0 +1,22 @@ +namespace Elsa.Email.Options; + +/// +/// Represents the encryption method to use when connecting to an SMTP server. +/// +public enum SmtpEncryptionMethod +{ + /// + /// No encryption. + /// + None = 0, + + /// + /// SSL/TLS encryption. + /// + SslTlS = 1, + + /// + /// STARTTLS encryption. + /// + StartTls = 2 +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Options/SmtpOptions.cs b/src/modules/Elsa.Email/Options/SmtpOptions.cs new file mode 100644 index 0000000..4201ae0 --- /dev/null +++ b/src/modules/Elsa.Email/Options/SmtpOptions.cs @@ -0,0 +1,44 @@ +using MailKit.Security; + +namespace Elsa.Email.Options; + +/// +/// Options to configure the SMTP client with. +/// +public class SmtpOptions +{ + /// + /// The default sender address when no sender is specified while sending emails. + /// + public string DefaultSender { get; set; } = default!; + + /// + /// The SMTP server IP address or hostname. + /// + public string? Host { get; set; } + + /// + /// The SMTP server port + /// + public int Port { get; set; } = 25; + + /// + /// Secure socket options. + /// + public SecureSocketOptions SecureSocketOptions { get; set; } = SecureSocketOptions.Auto; + + /// + /// True if the SMTP host requires credentials. + /// + public bool RequireCredentials { get; set; } + + /// + /// The username to authenticate with. + /// + public string? UserName { get; set; } + + /// + /// The password to authenticate with. + /// + public string? Password { get; set; } +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Services/DefaultDownloader.cs b/src/modules/Elsa.Email/Services/DefaultDownloader.cs new file mode 100644 index 0000000..80dfefc --- /dev/null +++ b/src/modules/Elsa.Email/Services/DefaultDownloader.cs @@ -0,0 +1,24 @@ +using Elsa.Email.Contracts; + +namespace Elsa.Email.Services; + +/// +/// Download files from the Internet. +/// +public class DefaultDownloader : IDownloader +{ + private readonly HttpClient _httpClient; + + /// + /// Constructor. + /// + public DefaultDownloader(HttpClient httpClient) + { + _httpClient = httpClient; + } + + /// + /// Download whatever is returned at the specified URL. + /// + public async Task DownloadAsync(Uri url, CancellationToken cancellationToken = default) => await _httpClient.GetAsync(url, cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.Email/Services/MailKitSmtpService.cs b/src/modules/Elsa.Email/Services/MailKitSmtpService.cs new file mode 100644 index 0000000..d62042e --- /dev/null +++ b/src/modules/Elsa.Email/Services/MailKitSmtpService.cs @@ -0,0 +1,73 @@ +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; +using Elsa.Email.Contracts; +using Elsa.Email.Options; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using MimeKit; +using SmtpClient = MailKit.Net.Smtp.SmtpClient; + +namespace Elsa.Email.Services; + +/// +/// A MailKit implementation of . +/// +public class MailKitSmtpService : ISmtpService +{ + private readonly SmtpOptions _options; + private readonly ILogger _logger; + + /// + /// Constructor. + /// + public MailKitSmtpService( + IOptions options, + ILogger logger + ) + { + _options = options.Value; + _logger = logger; + } + + /// + /// Sends the specified message. + /// + public async Task SendAsync(MimeMessage message, CancellationToken cancellationToken) => await SendMessage(message, cancellationToken); + + private async Task SendMessage(MimeMessage message, CancellationToken cancellationToken) + { + using var client = new SmtpClient(); + client.ServerCertificateValidationCallback = CertificateValidationCallback; + + await client.ConnectAsync(_options.Host, _options.Port, _options.SecureSocketOptions, cancellationToken); + + if (_options.RequireCredentials) + await client.AuthenticateAsync(_options.UserName ?? "", _options.Password ?? "", cancellationToken); + + await client.SendAsync(message, cancellationToken); + await client.DisconnectAsync(true, cancellationToken); + } + + private bool CertificateValidationCallback(object sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors) + { + if (sslPolicyErrors == SslPolicyErrors.None) + return true; + + _logger.LogError( + "SMTP Server's certificate {CertificateSubject} issued by {CertificateIssuer} with thumbprint {CertificateThumbprint} and expiration date {CertificateExpirationDate} is considered invalid with {SslPolicyErrors} policy errors", + certificate?.Subject, + certificate?.Issuer, + certificate?.GetCertHashString(), + certificate?.GetExpirationDateString(), + sslPolicyErrors); + + if (!sslPolicyErrors.HasFlag(SslPolicyErrors.RemoteCertificateChainErrors) || chain?.ChainStatus == null) + return false; + + foreach (var chainStatus in chain.ChainStatus) + _logger.LogError("Status: {Status} - {StatusInformation}", chainStatus.Status, chainStatus.StatusInformation); + + return false; + } + +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Abstractions/DesignTimeDbContextFactoryBase.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Abstractions/DesignTimeDbContextFactoryBase.cs new file mode 100644 index 0000000..df23d65 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Abstractions/DesignTimeDbContextFactoryBase.cs @@ -0,0 +1,37 @@ +using System.CommandLine; +using System.CommandLine.Parsing; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore.Abstractions; + +/// +/// A design-time factory base class that can be inherited from by provider-specific implementations. +/// +public abstract class DesignTimeDbContextFactoryBase : IDesignTimeDbContextFactory where TDbContext : DbContext +{ + /// + public TDbContext CreateDbContext(string[] args) + { + var builder = new DbContextOptionsBuilder(); + var connectionStringOption = new Option("--connectionString", "Specifies the connection string."); + var command = new RootCommand(); + + command.AddOption(connectionStringOption); + + var parser = new Parser(command); + var parseResult = parser.Parse(args); + var connectionString = parseResult.GetValueForOption(connectionStringOption) ?? "Data Source=local"; + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + + ConfigureBuilder(builder, connectionString); + + return (TDbContext)ActivatorUtilities.CreateInstance(serviceProvider, typeof(TDbContext), builder.Options); + } + + /// + /// Implement this to configure the . + /// + protected abstract void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/CommonPersistenceFeature.cs b/src/modules/Elsa.EntityFrameworkCore.Common/CommonPersistenceFeature.cs new file mode 100644 index 0000000..835574f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/CommonPersistenceFeature.cs @@ -0,0 +1,17 @@ +using Elsa.EntityFrameworkCore.EntityHandlers; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore; + +/// +public class CommonPersistenceFeature(IModule module) : FeatureBase(module) +{ + /// + public override void Apply() + { + Services.AddScoped(); + Services.AddScoped(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Constants.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Constants.cs new file mode 100644 index 0000000..a17a118 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Constants.cs @@ -0,0 +1,12 @@ +namespace Elsa.EntityFrameworkCore; + +/// +/// Constants. +/// +public class Constants +{ + /// + /// Default connection string for SQLite. + /// + public const string DefaultConnectionString = "Data Source=elsa.sqlite.db;Cache=Shared;"; +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IDbExceptionHandler.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IDbExceptionHandler.cs new file mode 100644 index 0000000..c0dc5ae --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IDbExceptionHandler.cs @@ -0,0 +1,15 @@ +namespace Elsa.EntityFrameworkCore; + +/// +/// Defines the contract for an exception handler in a database context. +/// +/// +/// Implementing this interface allows for customized handling of exceptions that occur during database operations. +/// +public interface IDbExceptionHandler +{ + /// + /// Handles the given exception that occurs during database operations. + /// + public Task HandleAsync(DbUpdateExceptionContext context); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IElsaDbContextSchema.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IElsaDbContextSchema.cs new file mode 100644 index 0000000..6e36735 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IElsaDbContextSchema.cs @@ -0,0 +1,12 @@ +namespace Elsa.EntityFrameworkCore; + +/// +/// Interface to provide custom Elsa Db Context Schema in Migration +/// +public interface IElsaDbContextSchema +{ + /// + /// Name of the Schema + /// + public string Schema { get; } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IEntityModelCreatingHandler.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IEntityModelCreatingHandler.cs new file mode 100644 index 0000000..ab51dd7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IEntityModelCreatingHandler.cs @@ -0,0 +1,15 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Represents handler for entity model creation. +/// +public interface IEntityModelCreatingHandler +{ + /// + /// Handles the entity model being created. + /// + void Handle(ElsaDbContextBase dbContext, ModelBuilder modelBuilder, IMutableEntityType entityType); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IEntitySavingHandler.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IEntitySavingHandler.cs new file mode 100644 index 0000000..0aa979b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Contracts/IEntitySavingHandler.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore.ChangeTracking; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Represents handler for entities before saving changes. +/// +public interface IEntitySavingHandler +{ + /// + /// Handles the entity before saving changes. + /// + ValueTask HandleAsync(ElsaDbContextBase dbContext, EntityEntry entry, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Converters/JsonValueConverter.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Converters/JsonValueConverter.cs new file mode 100644 index 0000000..14f8e5a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Converters/JsonValueConverter.cs @@ -0,0 +1,6 @@ +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Elsa.EntityFrameworkCore.Converters; + +public class JsonValueConverter() : ValueConverter(v => JsonValueConverterHelper.Serialize(v), v => JsonValueConverterHelper.Deserialize(v)) + where T : class; \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Converters/PrimitiveDictionaryConverter.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Converters/PrimitiveDictionaryConverter.cs new file mode 100644 index 0000000..6f693cf --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Converters/PrimitiveDictionaryConverter.cs @@ -0,0 +1,69 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Elsa.EntityFrameworkCore.Converters; + +public class PrimitiveDictionaryConverter : JsonConverter> +{ + public override IDictionary Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.StartObject) + throw new JsonException("Expected start of object."); + + var dictionary = new Dictionary(); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + return dictionary; + + var key = reader.GetString()!; + reader.Read(); + var value = ReadValue(ref reader, options); + dictionary.Add(key, value); + } + + throw new JsonException("Expected end of object."); + } + + private object ReadValue(ref Utf8JsonReader reader, JsonSerializerOptions options) + { + switch (reader.TokenType) + { + case JsonTokenType.String: + return reader.GetString()!; + case JsonTokenType.Number: + if (reader.TryGetInt64(out var l)) + return l; + return reader.GetDouble(); + case JsonTokenType.True: + return true; + case JsonTokenType.False: + return false; + case JsonTokenType.Null: + return null!; + case JsonTokenType.StartObject: + return JsonSerializer.Deserialize>(ref reader, options)!; + case JsonTokenType.StartArray: + return JsonSerializer.Deserialize>(ref reader, options)!; + default: + using (var document = JsonDocument.ParseValue(ref reader)) + { + return document.RootElement.Clone().ToString(); + } + } + } + + public override void Write(Utf8JsonWriter writer, IDictionary value, JsonSerializerOptions options) + { + writer.WriteStartObject(); + + foreach (var kvp in value) + { + writer.WritePropertyName(kvp.Key); + JsonSerializer.Serialize(writer, kvp.Value, options); + } + + writer.WriteEndObject(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/CustomDbContextOptionsExtensionInfo.cs b/src/modules/Elsa.EntityFrameworkCore.Common/CustomDbContextOptionsExtensionInfo.cs new file mode 100644 index 0000000..92b461b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/CustomDbContextOptionsExtensionInfo.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Contains options for configuring Elsa's Entity Framework Core integration. +/// +public class CustomDbContextOptionsExtensionInfo : DbContextOptionsExtensionInfo +{ + /// + public CustomDbContextOptionsExtensionInfo(IDbContextOptionsExtension extension) + : base(extension) + { + } + + /// + public override bool IsDatabaseProvider => false; + + /// + public override string LogFragment => ""; + + /// + public override int GetServiceProviderHashCode() + { + // Return a unique hash code for your custom extension + return 0; + } + + /// + public override void PopulateDebugInfo(IDictionary debugInfo) + { + } + + /// + public override bool ShouldUseSameServiceProvider(DbContextOptionsExtensionInfo other) + { + return true; + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/DbSchemaAwareMigrationAssembly.cs b/src/modules/Elsa.EntityFrameworkCore.Common/DbSchemaAwareMigrationAssembly.cs new file mode 100644 index 0000000..dc99451 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/DbSchemaAwareMigrationAssembly.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Migrations.Internal; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Class That enable Schema change for Migration +/// +public class DbSchemaAwareMigrationAssembly( + ICurrentDbContext currentContext, + IDbContextOptions options, + IMigrationsIdGenerator idGenerator, + IDiagnosticsLogger logger) + : MigrationsAssembly(currentContext, options, idGenerator, logger) +{ + private readonly DbContext _context = currentContext.Context; + + public override Migration CreateMigration(TypeInfo migrationClass, string activeProvider) + { + if (activeProvider == null) + throw new ArgumentNullException(nameof(activeProvider)); + + var hasCtorWithSchema = migrationClass.GetConstructor([typeof(IElsaDbContextSchema)]) != null; + + if (hasCtorWithSchema && _context is IElsaDbContextSchema schema) + { + var instance = (Migration)Activator.CreateInstance(migrationClass.AsType(), schema)!; + instance.ActiveProvider = activeProvider; + return instance; + } + + return base.CreateMigration(migrationClass, activeProvider); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/DbUpdateExceptionContext.cs b/src/modules/Elsa.EntityFrameworkCore.Common/DbUpdateExceptionContext.cs new file mode 100644 index 0000000..b9a8ffd --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/DbUpdateExceptionContext.cs @@ -0,0 +1,3 @@ +namespace Elsa.EntityFrameworkCore; + +public record DbUpdateExceptionContext(Exception Exception, CancellationToken CancellationToken); \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj b/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj new file mode 100644 index 0000000..3454db9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj @@ -0,0 +1,26 @@ + + + + + Provides common Entity Framework Core types for implementing EF Core persistence of varipus ELsa modules. + + elsa module persistence efcore + Elsa.EntityFrameworkCore + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj.DotSettings b/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj.DotSettings new file mode 100644 index 0000000..127787e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs new file mode 100644 index 0000000..a1f9dcb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs @@ -0,0 +1,101 @@ +using Elsa.Common.Entities; +using Elsa.Common.Multitenancy; +using Elsa.Extensions; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore; + +/// +/// An optional base class to implement with some opinions on certain converters to install for certain DB providers. +/// +public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema +{ + private static readonly ISet ModifiedEntityStates = new HashSet + { + EntityState.Added, + EntityState.Modified, + }; + + protected IServiceProvider ServiceProvider { get; } + private readonly ElsaDbContextOptions? elsaDbContextOptions; + public string? TenantId { get; set; } + + /// + /// The default schema used by Elsa. + /// + public static string ElsaSchema { get; set; } = "Elsa"; + + /// + public string Schema { get; } + + /// + /// The table used to store the migrations history. + /// + public static string MigrationsHistoryTable { get; set; } = "__EFMigrationsHistory"; + + /// + /// Initializes a new instance of the class. + /// + protected ElsaDbContextBase(DbContextOptions options, IServiceProvider serviceProvider) : base(options) + { + ServiceProvider = serviceProvider; + elsaDbContextOptions = options.FindExtension()?.Options; + + // ReSharper disable once VirtualMemberCallInConstructor + Schema = !string.IsNullOrWhiteSpace(elsaDbContextOptions?.SchemaName) ? elsaDbContextOptions.SchemaName : ElsaSchema; + + var tenantAccessor = serviceProvider.GetService(); + var tenantId = tenantAccessor?.Tenant?.Id; + + if (!string.IsNullOrWhiteSpace(tenantId)) + TenantId = tenantId.NullIfEmpty(); + } + + /// + public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) + { + await OnBeforeSavingAsync(cancellationToken); + return await base.SaveChangesAsync(cancellationToken); + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + if (!string.IsNullOrWhiteSpace(Schema)) + modelBuilder.HasDefaultSchema(Schema); + + var additionalConfigurations = elsaDbContextOptions?.GetModelConfigurations(this); + + additionalConfigurations?.Invoke(modelBuilder); + + using var scope = ServiceProvider.CreateScope(); + var entityTypeHandlers = scope.ServiceProvider.GetServices().ToList(); + + foreach (var entityType in modelBuilder.Model.GetEntityTypes().ToList()) + { + foreach (var handler in entityTypeHandlers) + handler.Handle(this, modelBuilder, entityType); + } + } + + private async Task OnBeforeSavingAsync(CancellationToken cancellationToken) + { + using var scope = ServiceProvider.CreateScope(); + var handlers = scope.ServiceProvider.GetServices().ToList(); + foreach (var entry in ChangeTracker.Entries().Where(IsModifiedEntity)) + { + foreach (var handler in handlers) + await handler.HandleAsync(this, entry, cancellationToken); + } + } + + /// + /// Determine if an entity was modified. + /// + private bool IsModifiedEntity(EntityEntry entityEntry) + { + return ModifiedEntityStates.Contains(entityEntry.State) && entityEntry.Entity is Entity; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptions.cs new file mode 100644 index 0000000..cd6af72 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptions.cs @@ -0,0 +1,52 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Provides options for configuring Elsa's Entity Framework Core integration. +/// +[PublicAPI] +public class ElsaDbContextOptions +{ + /// + /// The schema used by Elsa. + /// + public string? SchemaName { get; set; } + + /// + /// The table used to store the migrations history. + /// + public string? MigrationsHistoryTableName { get; set; } + + /// + /// The assembly name containing the migrations. + /// + public string? MigrationsAssemblyName { get; set; } + + public IDictionary> ProviderSpecificConfigurations { get; set; } = new Dictionary>(); + + public void ConfigureModel(Action configure) where TDbContext : DbContext + { + ConfigureModel(typeof(TDbContext), configure); + } + + public void ConfigureModel(Type dbContextType, Action configure) + { + if (!ProviderSpecificConfigurations.TryGetValue(dbContextType, out var configurations)) + ProviderSpecificConfigurations[dbContextType] = configurations = _ => { }; + + configurations += configure; + ProviderSpecificConfigurations[dbContextType] = configurations; + } + + public Action GetModelConfigurations(DbContext dbContext) + { + return GetModelConfigurations(dbContext.GetType()); + } + + public Action GetModelConfigurations(Type dbContextType) + { + return ProviderSpecificConfigurations.TryGetValue(dbContextType, out var providerConfigurations) ? providerConfigurations : _ => { }; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptionsExtension.cs b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptionsExtension.cs new file mode 100644 index 0000000..3bd867e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptionsExtension.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Provides options for configuring Elsa's Entity Framework Core integration. +/// +public class ElsaDbContextOptionsExtension : IDbContextOptionsExtension +{ + /// + /// Initializes a new instance of the class. + /// + /// The options. + public ElsaDbContextOptionsExtension(ElsaDbContextOptions? options) + { + Options = options; + } + + /// + /// Gets the options. + /// + public ElsaDbContextOptions? Options { get; } + + /// + public DbContextOptionsExtensionInfo Info => new CustomDbContextOptionsExtensionInfo(this); + + /// + public void ApplyServices(IServiceCollection services) + { + } + + /// + public void Validate(IDbContextOptions options) + { + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptionsExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptionsExtensions.cs new file mode 100644 index 0000000..c10481f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextOptionsExtensions.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Provides options for configuring Elsa's Entity Framework Core integration. +/// +public static class ElsaDbContextOptionsExtensions +{ + /// + /// Installs a custom extension for Elsa's Entity Framework Core integration. + /// + /// The options builder to install the extension on. + /// The options to install. + public static DbContextOptionsBuilder UseElsaDbContextOptions(this DbContextOptionsBuilder optionsBuilder, ElsaDbContextOptions? options) + { + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(new ElsaDbContextOptionsExtension(options)); + optionsBuilder.ReplaceService(); + return optionsBuilder; + } + + public static string GetMigrationsAssemblyName(this ElsaDbContextOptions? options, Assembly migrationsAssembly) => options?.MigrationsAssemblyName ?? migrationsAssembly.GetName().Name!; + public static string GetMigrationsHistoryTableName(this ElsaDbContextOptions? options) => options?.MigrationsHistoryTableName ?? ElsaDbContextBase.MigrationsHistoryTable; + public static string GetSchemaName(this ElsaDbContextOptions? options) => options?.SchemaName ?? ElsaDbContextBase.ElsaSchema; +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/ApplyTenantId.cs b/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/ApplyTenantId.cs new file mode 100644 index 0000000..b55f9af --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/ApplyTenantId.cs @@ -0,0 +1,20 @@ +using Elsa.Common.Entities; +using Elsa.Extensions; +using Microsoft.EntityFrameworkCore.ChangeTracking; + +namespace Elsa.EntityFrameworkCore.EntityHandlers; + +/// +/// Represents a handler for applying the tenant ID to an entity before saving changes. +/// +public class ApplyTenantId : IEntitySavingHandler +{ + /// + public ValueTask HandleAsync(ElsaDbContextBase dbContext, EntityEntry entry, CancellationToken cancellationToken = default) + { + if (entry.Entity is Entity entity) + entity.TenantId = dbContext.TenantId.NullIfEmpty(); + + return default; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs b/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs new file mode 100644 index 0000000..f4522d7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs @@ -0,0 +1,44 @@ +using System.Linq.Expressions; +using Elsa.Common.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; + +namespace Elsa.EntityFrameworkCore.EntityHandlers; + +/// +/// Represents a class that applies a filter to set the TenantId for entities. +/// +public class SetTenantIdFilter : IEntityModelCreatingHandler +{ + /// + public void Handle(ElsaDbContextBase dbContext, ModelBuilder modelBuilder, IMutableEntityType entityType) + { + if (!typeof(Entity).IsAssignableFrom(entityType.ClrType)) + return; + + modelBuilder + .Entity(entityType.ClrType) + .HasQueryFilter(CreateTenantFilterExpression(dbContext, entityType.ClrType)); + } + + private LambdaExpression CreateTenantFilterExpression(ElsaDbContextBase dbContext, Type clrType) + { + var parameter = Expression.Parameter(clrType, "e"); + + // e => EF.Property(e, "TenantId") == this.TenantId + var tenantIdProperty = Expression.Call( + typeof(EF), + nameof(EF.Property), + [typeof(string)], + parameter, + Expression.Constant("TenantId")); + + var tenantIdOnContext = Expression.Property( + Expression.Constant(dbContext), + nameof(ElsaDbContextBase.TenantId)); + + var body = Expression.Equal(tenantIdProperty, tenantIdOnContext); + + return Expression.Lambda(body, parameter); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/EntityStore.cs b/src/modules/Elsa.EntityFrameworkCore.Common/EntityStore.cs new file mode 100644 index 0000000..4e12d46 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/EntityStore.cs @@ -0,0 +1,43 @@ +using Elsa.Common.Entities; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.EntityFrameworkCore; + +/// +/// A generic repository class around EF Core for accessing entities that inherit from . +/// +/// The type of the database context. +/// The type of the entity. +public class EntityStore(IDbContextFactory dbContextFactory, IServiceProvider serviceProvider) + : Store(dbContextFactory, serviceProvider) where TDbContext : DbContext where TEntity : Entity, new() +{ + /// + /// Saves the entity. + /// + /// The entity to save. + /// The cancellation token. + public async Task SaveAsync(TEntity entity, CancellationToken cancellationToken = default) => await SaveAsync(entity, null, cancellationToken); + + /// + /// Saves the entity. + /// + /// The entity to save. + /// The callback to invoke before saving the entity. + /// The cancellation token. + public async Task SaveAsync(TEntity entity, Func? onSaving, CancellationToken cancellationToken = default) => await SaveAsync(entity, x => x.Id, onSaving, cancellationToken); + + /// + /// Saves the specified entities. + /// + /// The entities to save. + /// The cancellation token. + public async Task SaveManyAsync(IEnumerable entities, CancellationToken cancellationToken = default) => await SaveManyAsync(entities, default, cancellationToken); + + /// + /// Saves the specified entities. + /// + /// The entities to save. + /// The callback to invoke before saving the entities. + /// The cancellation token. + public async Task SaveManyAsync(IEnumerable entities, Func? onSaving = default, CancellationToken cancellationToken = default) => await SaveManyAsync(entities, x => x.Id, onSaving, cancellationToken); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/BulkUpsertExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/BulkUpsertExtensions.cs new file mode 100644 index 0000000..076b685 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/BulkUpsertExtensions.cs @@ -0,0 +1,403 @@ +using System.Text; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using System.Linq.Expressions; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extension methods to perform bulk upsert operations for entities +/// in an Entity Framework Core context, supporting multiple database providers. +/// +public static class BulkUpsertExtensions +{ + /// + /// Performs a bulk upsert operation on a list of entities in the specified database context using a key selector. + /// + /// The type of the database context. + /// The type of the entity being upserted. + /// The database context where the bulk upsert operation will be executed. + /// The list of entities to be upserted. + /// An expression used to determine the key for upsert operations. + /// A token to observe while waiting for the operation to complete. + public static async Task BulkUpsertAsync( + this TDbContext dbContext, + IList entities, + Expression> keySelector, + CancellationToken cancellationToken = default) + where TDbContext : DbContext + where TEntity : class, new() + { + await BulkUpsertAsync(dbContext, entities, keySelector, 50, cancellationToken); + } + + /// + /// Performs a bulk upsert operation on a list of entities in the specified database context using a key selector and optional batch size. + /// + /// The type of the database context. + /// The type of the entity being upserted. + /// The database context where the bulk upsert operation will be executed. + /// The list of entities to be upserted. + /// An expression used to determine the key for upsert operations. + /// The size of each batch for processing the upsert operation. Defaults to 50. + /// A token to observe while waiting for the operation to complete. + /// Thrown if the database provider for the context is not supported. + public static async Task BulkUpsertAsync( + this TDbContext dbContext, + IList entities, + Expression> keySelector, + int batchSize = 50, + CancellationToken cancellationToken = default) + where TDbContext : DbContext + where TEntity : class, new() + { + if (entities.Count == 0) + return; + + // Identify the current provider (e.g., "Microsoft.EntityFrameworkCore.SqlServer") + var providerName = dbContext.Database.ProviderName?.ToLowerInvariant() ?? string.Empty; + + // Determine the method for generating SQL based on the provider + Func, Expression>, (string, object[])> generateSql = providerName switch + { + var pn when pn.Contains("sqlserver") => GenerateSqlServerUpsert, + var pn when pn.Contains("sqlite") => GenerateSqliteUpsert, + var pn when pn.Contains("postgres") => GeneratePostgresUpsert, + var pn when pn.Contains("mysql") => GenerateMySqlUpsert, + var pn when pn.Contains("oracle") => GenerateOracleUpsert, + _ => throw new NotSupportedException($"Provider '{providerName}' is not supported.") + }; + + // Loop through batched entities + foreach (var batch in entities.Chunk(batchSize)) + { + // Generate SQL and parameters + var (sql, parameters) = generateSql(dbContext, batch, keySelector); + + await dbContext.Database.ExecuteSqlRawAsync(sql, parameters, cancellationToken); + } + } + + private static (string, object[]) GenerateSqlServerUpsert( + DbContext dbContext, + IList entities, + Expression> keySelector) + where TEntity : class + { + var entityType = dbContext.Model.FindEntityType(typeof(TEntity))!; + var tableName = $"[{entityType.GetSchema()}].[{entityType.GetTableName()}]"; + var storeObject = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema()); + var props = entityType.GetProperties().ToList(); + var keyProp = entityType.FindProperty(keySelector.GetMemberAccess().Name)!; + var keyColumnName = $"[{keyProp.GetColumnName(storeObject)}]"; + var columnNames = props + .Select(p => $"[{p.GetColumnName(storeObject)}]") + .ToList(); + + var mergeSql = new StringBuilder(); + mergeSql.AppendLine($"MERGE {tableName} AS Target"); + mergeSql.AppendLine("USING (VALUES"); + + var parameters = new List(); + var parameterCount = 0; + + for (var i = 0; i < entities.Count; i++) + { + var entity = entities[i]; + var values = new List(); + + foreach (var property in props) + { + var paramName = $"{{{parameterCount++}}}"; + + // If it's a shadow property, retrieve value via Entry(..).Property(..) + object? value = property.IsShadowProperty() + ? dbContext.Entry(entity).Property(property.Name).CurrentValue + : property.PropertyInfo?.GetValue(entity); + + var converter = property.GetTypeMapping().Converter; + if (converter != null) + value = converter.ConvertToProvider(value)!; + + // Explicitly cast null values for varbinary columns + if (property.GetColumnType().StartsWith("varbinary", StringComparison.OrdinalIgnoreCase) && value is null) + values.Add("CAST(NULL AS varbinary(max))"); // Explicitly cast null + else + values.Add(paramName); + + parameters.Add(value!); + } + + var line = $"({string.Join(", ", values)}){(i < entities.Count - 1 ? "," : string.Empty)}"; + mergeSql.AppendLine(line); + } + + mergeSql.AppendLine($") AS Source ({string.Join(", ", columnNames)})"); + mergeSql.AppendLine($"ON Target.{keyColumnName} = Source.{keyColumnName}"); + mergeSql.AppendLine("WHEN MATCHED THEN"); + mergeSql.AppendLine($" UPDATE SET {string.Join(", ", columnNames.Where(c => c != keyColumnName).Select(c => $"Target.{c} = Source.{c}"))}"); + mergeSql.AppendLine("WHEN NOT MATCHED THEN"); + mergeSql.AppendLine($" INSERT ({string.Join(", ", columnNames)})"); + mergeSql.AppendLine($" VALUES ({string.Join(", ", columnNames.Select(c => $"Source.{c}"))});"); + + return (mergeSql.ToString(), parameters.ToArray()); + } + + private static (string, object[]) GenerateSqliteUpsert( + DbContext dbContext, + IList entities, + Expression> keySelector) + where TEntity : class + { + var entityType = dbContext.Model.FindEntityType(typeof(TEntity))!; + var tableName = entityType.GetTableName(); + var storeObject = StoreObjectIdentifier.Table(tableName!, entityType.GetSchema()); + var props = entityType.GetProperties().ToList(); + var keyProp = entityType.FindProperty(keySelector.GetMemberAccess().Name)!; + var keyColumnName = keyProp.GetColumnName(storeObject); + var columnNames = props + .Select(p => p.GetColumnName(storeObject)!) + .ToList(); + + var sb = new StringBuilder(); + var parameters = new List(); + var parameterCount = 0; + + sb.Append($"INSERT INTO \"{tableName}\" ({string.Join(", ", columnNames.Select(c => $"\"{c}\""))}) VALUES "); + + for (var i = 0; i < entities.Count; i++) + { + var entity = entities[i]; + var placeholders = new List(); + + foreach (var property in props) + { + var paramName = $"{{{parameterCount++}}}"; + + object? value = property.IsShadowProperty() + ? dbContext.Entry(entity).Property(property.Name).CurrentValue + : property.PropertyInfo?.GetValue(entity); + + var converter = property.GetTypeMapping().Converter; + if (converter != null) + value = converter.ConvertToProvider(value); + + placeholders.Add(paramName); + parameters.Add(value); + } + + sb.Append($"({string.Join(", ", placeholders)})"); + if (i < entities.Count - 1) + sb.Append(", "); + } + + sb.AppendLine(); + sb.AppendLine($"ON CONFLICT(\"{keyColumnName}\") DO UPDATE SET"); + + var updateAssignments = columnNames + .Where(c => c != keyColumnName) + .Select(c => $"\"{c}\"=excluded.\"{c}\""); + + sb.AppendLine(string.Join(", ", updateAssignments) + ";"); + + return (sb.ToString(), parameters.ToArray()); + } + + private static (string, object[]) GeneratePostgresUpsert( + DbContext dbContext, + IList entities, + Expression> keySelector) + where TEntity : class + { + var entityType = dbContext.Model.FindEntityType(typeof(TEntity))!; + var tableName = entityType.GetTableName(); + var storeObject = StoreObjectIdentifier.Table(tableName!, entityType.GetSchema()); + + var props = entityType.GetProperties().ToList(); + + var keyProp = entityType.FindProperty(keySelector.GetMemberAccess().Name)!; + var keyColumnName = keyProp.GetColumnName(storeObject); + var columnNames = props + .Select(p => p.GetColumnName(storeObject)!) + .ToList(); + + var sb = new StringBuilder(); + var parameters = new List(); + var parameterCount = 0; + + sb.Append($"INSERT INTO \"{storeObject.Schema}\".\"{storeObject.Name}\" ({string.Join(", ", columnNames.Select(c => $"\"{c}\""))}) VALUES "); + + for (var i = 0; i < entities.Count; i++) + { + var entity = entities[i]; + var placeholders = new List(); + + foreach (var property in props) + { + var paramName = $"{{{parameterCount++}}}"; + + object? value = property.IsShadowProperty() + ? dbContext.Entry(entity).Property(property.Name).CurrentValue + : property.PropertyInfo?.GetValue(entity); + + var converter = property.GetTypeMapping().Converter; + if (converter != null) + value = converter.ConvertToProvider(value); + + placeholders.Add(paramName); + parameters.Add(value); + } + + sb.Append($"({string.Join(", ", placeholders)})"); + if (i < entities.Count - 1) + sb.Append(", "); + } + + sb.AppendLine(); + sb.AppendLine($"ON CONFLICT (\"{keyColumnName}\") DO UPDATE SET"); + + var updateAssignments = columnNames + .Where(c => c != keyColumnName) + .Select(c => $"\"{c}\" = EXCLUDED.\"{c}\""); + + sb.AppendLine(string.Join(", ", updateAssignments) + ";"); + + return (sb.ToString(), parameters.ToArray()); + } + + private static (string, object[]) GenerateMySqlUpsert( + DbContext dbContext, + IList entities, + Expression> keySelector) + where TEntity : class + { + var entityType = dbContext.Model.FindEntityType(typeof(TEntity))!; + var tableName = entityType.GetTableName(); + var storeObject = StoreObjectIdentifier.Table(tableName!, entityType.GetSchema()); + + var props = entityType.GetProperties().ToList(); + + var keyProp = entityType.FindProperty(keySelector.GetMemberAccess().Name)!; + var keyColumnName = keyProp.GetColumnName(storeObject); + var columnNames = props + .Select(p => p.GetColumnName(storeObject)!) + .ToList(); + + var sb = new StringBuilder(); + var parameters = new List(); + var parameterCount = 0; + + sb.Append($"INSERT INTO `{tableName}` ({string.Join(", ", columnNames.Select(c => $"`{c}`"))}) VALUES "); + + for (var i = 0; i < entities.Count; i++) + { + var entity = entities[i]; + var placeholders = new List(); + + foreach (var property in props) + { + var paramName = $"{{{parameterCount++}}}"; + + object? value = property.IsShadowProperty() + ? dbContext.Entry(entity).Property(property.Name).CurrentValue + : property.PropertyInfo?.GetValue(entity); + + var converter = property.GetTypeMapping().Converter; + if (converter != null) + value = converter.ConvertToProvider(value); + + placeholders.Add(paramName); + parameters.Add(value); + } + + sb.Append($"({string.Join(", ", placeholders)})"); + if (i < entities.Count - 1) + sb.Append(", "); + } + + sb.AppendLine(); + sb.AppendLine("ON DUPLICATE KEY UPDATE"); + + var updateAssignments = columnNames + .Where(c => c != keyColumnName) + .Select(c => $"`{c}` = VALUES(`{c}`)"); + + sb.AppendLine(string.Join(", ", updateAssignments) + ";"); + + return (sb.ToString(), parameters.ToArray()); + } + + private static (string, object[]) GenerateOracleUpsert( + DbContext dbContext, + IList entities, + Expression> keySelector) + where TEntity : class + { + var entityType = dbContext.Model.FindEntityType(typeof(TEntity))!; + var schema = entityType.GetSchema(); + var tableName = entityType.GetTableName(); + var storeObject = StoreObjectIdentifier.Table(tableName!, schema); + var fullName = !string.IsNullOrEmpty(schema) ? $"{schema}.{tableName}" : tableName; + + var props = entityType.GetProperties().ToList(); + + var keyProp = entityType.FindProperty(keySelector.GetMemberAccess().Name)!; + var keyColumnName = keyProp.GetColumnName(storeObject); + + var columnNames = props + .Select(p => p.GetColumnName(storeObject)!) + .ToList(); + + var sb = new StringBuilder(); + var parameters = new List(); + var parameterCount = 0; + + sb.AppendLine($"MERGE INTO {fullName} Target"); + sb.AppendLine("USING (SELECT"); + + for (var i = 0; i < entities.Count; i++) + { + var entity = entities[i]; + var lineParts = new List(); + + foreach (var property in props) + { + var paramName = $"{{{parameterCount++}}}"; + + object? value = property.IsShadowProperty() + ? dbContext.Entry(entity).Property(property.Name).CurrentValue + : property.PropertyInfo?.GetValue(entity); + + var converter = property.GetTypeMapping().Converter; + if (converter != null) + value = converter.ConvertToProvider(value); + + parameters.Add(value); + + // Oracle aliases must match the column name + var alias = property.GetColumnName(storeObject); + lineParts.Add($"{paramName} AS {alias}"); + } + + // Comma if not last + var suffix = (i < entities.Count - 1) ? " FROM DUAL UNION ALL SELECT" : " FROM DUAL"; + sb.AppendLine(string.Join(", ", lineParts) + suffix); + } + + sb.AppendLine($") Source ON (Target.{keyColumnName} = Source.{keyColumnName})"); + sb.AppendLine("WHEN MATCHED THEN UPDATE SET"); + + var updateSetClauses = columnNames + .Where(c => c != keyColumnName) + .Select(c => $"Target.{c} = Source.{c}"); + + sb.AppendLine(string.Join(", ", updateSetClauses)); + sb.AppendLine("WHEN NOT MATCHED THEN"); + sb.AppendLine($"INSERT ({string.Join(", ", columnNames)})"); + sb.AppendLine($"VALUES ({string.Join(", ", columnNames.Select(c => $"Source.{c}"))});"); + + return (sb.ToString(), parameters.ToArray()); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/DatabaseFacadeExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/DatabaseFacadeExtensions.cs new file mode 100644 index 0000000..f4fe914 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/DatabaseFacadeExtensions.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Extension methods for the DatabaseFacade class. +/// +public static class DatabaseFacadeExtensions +{ + /// + /// Returns true if the database provider is MySql. + /// + public static bool IsMySql(this DatabaseFacade database) => database.ProviderName == "Pomelo.EntityFrameworkCore.MySql"; + + /// + /// Returns true if the database provider is Oracle. + /// + public static bool IsOracle(this DatabaseFacade database) => database.ProviderName == "Oracle.EntityFrameworkCore"; + + /// + /// Returns true if the database provider is Postgres. + /// + public static bool IsPostgres(this DatabaseFacade database) => database.ProviderName == "Npgsql.EntityFrameworkCore.PostgreSQL"; +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/ExpressionExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/ExpressionExtensions.cs new file mode 100644 index 0000000..d58a320 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/ExpressionExtensions.cs @@ -0,0 +1,59 @@ +using System.Linq.Expressions; +using Elsa.Extensions; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extension methods for objects. +/// +public static class ExpressionExtensions +{ + /// + /// Builds an expression that checks if the specified property is contained in the specified list of entities. + /// + /// The key selector. + /// The entities. + /// The type of the entity. + /// The expression. + public static Expression> BuildContainsExpression(this Expression> keySelector, IEnumerable entities) where TEntity : class + { + var compiledKeySelector = keySelector.Compile(); + var list = entities.Select(compiledKeySelector).ToList(); + var property = keySelector.GetProperty()!; + var param = Expression.Parameter(typeof(TEntity)); + + var body = Expression.Call( + typeof(Enumerable), + "Contains", + new[] {compiledKeySelector.Method.ReturnType}, + Expression.Constant(list), Expression.Property(param, property)); + + return Expression.Lambda>(body, param); + } + + /// + /// Builds an expression that checks if the specified property is equal to the specified entity's property. + /// + /// The key selector. + /// The entity. + /// The type of the entity. + /// The expression. + public static Expression> BuildEqualsExpression(this Expression> keySelector, TEntity entity) + { + var keyName = keySelector.GetProperty()!.Name; + + // Define parameters for the lambda expression + var parameter = Expression.Parameter(typeof(TEntity), "x"); + var keySelectorLambda = Expression.Lambda>(Expression.Property(parameter, keyName), parameter); + + // Build the expression that compares the keys + var entityKey = keySelectorLambda.Compile()(entity); + var comparison = Expression.Equal(keySelectorLambda.Body, Expression.Constant(entityKey)); + + // Create the final lambda expression that can be used in AnyAsync + var lambda = Expression.Lambda>(comparison, parameter); + + return lambda; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/PropertyBuilderExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/PropertyBuilderExtensions.cs new file mode 100644 index 0000000..3285ae3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/PropertyBuilderExtensions.cs @@ -0,0 +1,21 @@ +using Elsa.EntityFrameworkCore.Converters; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.EntityFrameworkCore.Extensions; + +public static class PropertyBuilderExtensions { + + /// + /// Serializes field as JSON blob in database. + /// + public static PropertyBuilder HasJsonValueConversion(this PropertyBuilder propertyBuilder) where T : class { + + propertyBuilder + .HasConversion(new JsonValueConverter()) + .Metadata.SetValueComparer(new JsonValueComparer()); + + return propertyBuilder; + + } + +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs new file mode 100644 index 0000000..11171ac --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs @@ -0,0 +1,51 @@ +using System.Linq.Expressions; +using Elsa.Common.Models; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to . +/// +[PublicAPI] +public static class QueryableExtensions +{ + /// + /// Inserts a list of entities in bulk. + /// + public static async Task BulkInsertAsync(this TDbContext dbContext, IList entities, CancellationToken cancellationToken = default) where TDbContext : DbContext where TEntity : class, new() + { + var set = dbContext.Set(); + + if (entities.Any()) + await set.AddRangeAsync(entities, cancellationToken); + + await dbContext.SaveChangesAsync(cancellationToken); + } + + /// + /// Returns a paged result from the specified query. + /// + public static async Task> PaginateAsync(this IQueryable queryable, Expression> projection, PageArgs? pageArgs = default) + { + var count = await queryable.CountAsync(); + if (pageArgs?.Offset != null) queryable = queryable.Skip(pageArgs.Offset.Value); + if (pageArgs?.Limit != null) queryable = queryable.Take(pageArgs.Limit.Value); + var results = await queryable.Select(projection).ToListAsync(); + return Page.Of(results, count); + } + + /// + /// Returns a paged result from the specified query. + /// + public static async Task> PaginateAsync(this IQueryable queryable, PageArgs? pageArgs = default) + { + var count = await queryable.CountAsync(); + if (pageArgs?.Offset != null) queryable = queryable.Skip(pageArgs.Offset.Value); + if (pageArgs?.Limit != null) queryable = queryable.Take(pageArgs.Limit.Value); + var results = await queryable.ToListAsync(); + return Page.Of(results, count); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/TenantExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/TenantExtensions.cs new file mode 100644 index 0000000..94a8036 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/TenantExtensions.cs @@ -0,0 +1,11 @@ +using Elsa.Common.Multitenancy; + +namespace Elsa.EntityFrameworkCore.Extensions; + +public static class TenantExtensions +{ + public static string? GetConnectionString(this Tenant tenant, string name) + { + return tenant.Configuration.GetSection("ConnectionStrings")[name]; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.Common/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/JsonValueComparer.cs b/src/modules/Elsa.EntityFrameworkCore.Common/JsonValueComparer.cs new file mode 100644 index 0000000..5986d7e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/JsonValueComparer.cs @@ -0,0 +1,57 @@ +using System.Text.Json; +using Microsoft.EntityFrameworkCore.ChangeTracking; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Compares two objects. +/// Required to make EF Core change tracking work for complex value converted objects. +/// +/// +/// For objects that implement and , +/// those implementations will be used for cloning and equality. +/// For plain objects, fall back to deep equality comparison using JSON serialization +/// (safe, but inefficient). +/// +public class JsonValueComparer : ValueComparer { + + private static string Json(T instance) { + return JsonSerializer.Serialize(instance); + } + + private static T DoGetSnapshot(T instance) { + + if (instance is ICloneable cloneable) + return (T)cloneable.Clone(); + + var result = (T)JsonSerializer.Deserialize(Json(instance)); + return result; + + } + + private static int DoGetHashCode(T instance) { + + if (instance is IEquatable) + return instance.GetHashCode(); + + return Json(instance).GetHashCode(); + + } + + private static bool DoEquals(T left, T right) { + + if (left is IEquatable equatable) + return equatable.Equals(right); + + var result = Json(left).Equals(Json(right)); + return result; + + } + + public JsonValueComparer() : base( + (t1, t2) => DoEquals(t1, t2), + t => DoGetHashCode(t), + t => DoGetSnapshot(t)) { + } + +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/JsonValueConverterHelper.cs b/src/modules/Elsa.EntityFrameworkCore.Common/JsonValueConverterHelper.cs new file mode 100644 index 0000000..b2b69ae --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/JsonValueConverterHelper.cs @@ -0,0 +1,25 @@ +using System.Text.Json; +using Elsa.EntityFrameworkCore.Converters; +using Elsa.Extensions; + +namespace Elsa.EntityFrameworkCore; + +internal static class JsonValueConverterHelper +{ + private static readonly JsonSerializerOptions JsonSerializerOptions = CreateJsonSerializerOptions(); + + public static T Deserialize(string json) where T : class + { + return (string.IsNullOrWhiteSpace(json) ? null : JsonSerializer.Deserialize(json, JsonSerializerOptions))!; + } + + public static string Serialize(T obj) where T : class + { + return (obj == null ? null : JsonSerializer.Serialize(obj, JsonSerializerOptions))!; + } + + private static JsonSerializerOptions CreateJsonSerializerOptions() + { + return new JsonSerializerOptions().WithConverters(new PrimitiveDictionaryConverter()); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/MigrationOptions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/MigrationOptions.cs new file mode 100644 index 0000000..0ff4cb7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/MigrationOptions.cs @@ -0,0 +1,14 @@ +namespace Elsa.EntityFrameworkCore; + +public class MigrationOptions +{ + /// + /// Gets or sets a collection that determines whether Entity Framework Core migrations + /// should be executed for specific DbContext types. + /// + /// + /// The key is the DbContext type, and the value is a boolean indicating whether migrations + /// should be applied for that specific context (true to apply, false to skip). + /// + public IDictionary RunMigrations { get; set; } = new Dictionary(); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/PersistenceFeatureBase.cs b/src/modules/Elsa.EntityFrameworkCore.Common/PersistenceFeatureBase.cs new file mode 100644 index 0000000..c6620ab --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/PersistenceFeatureBase.cs @@ -0,0 +1,101 @@ +using Elsa.Common.Entities; +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Base class for features that require Entity Framework Core. +/// +/// The type of the database context. +/// The type of the feature. +[DependsOn(typeof(CommonPersistenceFeature))] +public abstract class PersistenceFeatureBase(IModule module) : FeatureBase(module) + where TDbContext : ElsaDbContextBase +{ + /// + /// Gets or sets a value indicating whether to use context pooling. + /// + public virtual bool UseContextPooling { get; set; } + + /// + /// Gets or sets a value indicating whether to run migrations. + /// + public virtual bool RunMigrations { get; set; } = true; + + /// + /// Gets or sets the lifetime of the . Defaults to . + /// + public ServiceLifetime DbContextFactoryLifetime { get; set; } = ServiceLifetime.Scoped; + + /// + /// Gets or sets the callback used to configure the . + /// + public virtual Action DbContextOptionsBuilder { get; set; } = null!; + + public override void ConfigureHostedServices() + { + ConfigureMigrations(); + } + + /// + public override void Apply() + { + if (DbContextOptionsBuilder == null) + throw new InvalidOperationException("The DbContextOptionsBuilder must be configured."); + + Action setup = (sp, opts) => + { + opts.ConfigureWarnings(w => w.Ignore(RelationalEventId.PendingModelChangesWarning)); + DbContextOptionsBuilder(sp, opts); + }; + + if (UseContextPooling) + Services.AddPooledDbContextFactory(setup); + else + Services.AddDbContextFactory(setup, DbContextFactoryLifetime); + + Services.Decorate, TenantAwareDbContextFactory>(); + + Services.Configure(options => + { + options.RunMigrations[typeof(TDbContext)] = RunMigrations; + }); + } + + protected virtual void ConfigureMigrations() + { + Services.AddStartupTask>(); + } + + /// + /// Adds a store to the service collection. + /// + /// The type of the entity. + /// The type of the store. + protected void AddStore() where TEntity : class, new() where TStore : class + { + Services + .AddScoped>() + .AddScoped() + ; + } + + /// + /// Adds an entity store to the service collection. + /// + /// The type of the entity. + /// The type of the store. + protected void AddEntityStore() where TEntity : Entity, new() where TStore : class + { + Services + .AddScoped>() + .AddScoped() + ; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/RunMigrationsHostedService.cs b/src/modules/Elsa.EntityFrameworkCore.Common/RunMigrationsHostedService.cs new file mode 100644 index 0000000..9bd0f1a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/RunMigrationsHostedService.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Executes EF Core migrations using the specified type. +/// +public class RunMigrationsHostedService : IHostedService where TDbContext : DbContext +{ + private readonly IServiceScopeFactory _scopeFactory; + + /// + /// Initializes a new instance of the class. + /// + public RunMigrationsHostedService(IServiceScopeFactory scopeFactory) + { + _scopeFactory = scopeFactory; + } + + /// + public async Task StartAsync(CancellationToken cancellationToken) + { + using var scope = _scopeFactory.CreateScope(); + var dbContextFactory = scope.ServiceProvider.GetRequiredService>(); + await using var dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken); + await dbContext.Database.MigrateAsync(cancellationToken); + } + + /// + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/RunMigrationsStartupTask.cs b/src/modules/Elsa.EntityFrameworkCore.Common/RunMigrationsStartupTask.cs new file mode 100644 index 0000000..0a37bc5 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/RunMigrationsStartupTask.cs @@ -0,0 +1,28 @@ +using Elsa.Common; +using Elsa.Common.RecurringTasks; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; + +namespace Elsa.EntityFrameworkCore; + +/// +/// Executes EF Core migrations using the specified type. +/// +[UsedImplicitly] +[SingleNodeTask] +[Order(-100)] +public class RunMigrationsStartupTask(IDbContextFactory dbContextFactory, IOptions options) : IStartupTask where TDbContext : DbContext +{ + /// + public async Task ExecuteAsync(CancellationToken cancellationToken) + { + bool shouldRunMigrations = false; + options.Value.RunMigrations.TryGetValue(typeof(TDbContext), out shouldRunMigrations); + if (!shouldRunMigrations) + return; + + var dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken); + await dbContext.Database.MigrateAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Store.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Store.cs new file mode 100644 index 0000000..021072f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Store.cs @@ -0,0 +1,628 @@ +using System.Linq.Expressions; +using Elsa.Common.Entities; +using Elsa.Common.Models; +using Elsa.Common.Multitenancy; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.Extensions; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Open.Linq.AsyncExtensions; + +namespace Elsa.EntityFrameworkCore; + +/// +/// A generic repository class around EF Core for accessing entities. +/// +/// The type of the database context. +/// The type of the entity. +[PublicAPI] +public class Store(IDbContextFactory dbContextFactory, IServiceProvider serviceProvider) where TDbContext : DbContext where TEntity : class, new() +{ + // ReSharper disable once StaticMemberInGenericType + // Justification: This is a static member that is used to ensure that only one thread can access the database for TEntity at a time. + private static readonly SemaphoreSlim Semaphore = new(1, 1); + + /// + /// Creates a new instance of the database context. + /// + /// The cancellation token. + /// The database context. + public async Task CreateDbContextAsync(CancellationToken cancellationToken = default) => await dbContextFactory.CreateDbContextAsync(cancellationToken); + + /// + /// Adds the specified entity. + /// + /// The entity to add. + /// The cancellation token. + public async Task AddAsync(TEntity entity, CancellationToken cancellationToken = default) + { + await AddAsync(entity, null, cancellationToken); + } + + /// + /// Adds the specified entity. + /// + /// The entity to add. + /// The callback to invoke before adding the entity. + /// The cancellation token. + public async Task AddAsync(TEntity entity, Func? onAdding, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + + if (onAdding != null) + await onAdding(dbContext, entity, cancellationToken); + + var set = dbContext.Set(); + await set.AddAsync(entity, cancellationToken); + await dbContext.SaveChangesAsync(cancellationToken); + } + + /// + /// Adds the specified entities. + /// + /// The entities to save. + /// The cancellation token. + public async Task AddManyAsync( + IEnumerable entities, + CancellationToken cancellationToken = default) + { + await AddManyAsync(entities, null, cancellationToken); + } + + /// + /// Adds the specified entities. + /// + /// The entities to save. + /// The callback to invoke before saving the entity. + /// The cancellation token. + public async Task AddManyAsync( + IEnumerable entities, + Func? onSaving = null, + CancellationToken cancellationToken = default) + { + var entityList = entities.ToList(); + + if (entityList.Count == 0) + return; + + await using var dbContext = await CreateDbContextAsync(cancellationToken); + + if (onSaving != null) + { + var savingTasks = entityList.Select(entity => onSaving(dbContext, entity, cancellationToken).AsTask()).ToList(); + await Task.WhenAll(savingTasks); + } + + await dbContext.BulkInsertAsync(entityList, cancellationToken); + } + + /// + /// Saves the entity. + /// + /// The entity to save. + /// The key selector to get the primary key property. + /// The cancellation token. + public async Task SaveAsync(TEntity entity, Expression> keySelector, CancellationToken cancellationToken = default) => await SaveAsync(entity, keySelector, null, cancellationToken); + + /// + /// Saves the entity. + /// + /// The entity to save. + /// The key selector to get the primary key property. + /// The callback to invoke before saving the entity. + /// The cancellation token. + public async Task SaveAsync(TEntity entity, Expression> keySelector, Func? onSaving, CancellationToken cancellationToken = default) + { + await Semaphore.WaitAsync(cancellationToken); // Asynchronous wait + + try + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + + if (onSaving != null) + await onSaving(dbContext, entity, cancellationToken); + + var set = dbContext.Set(); + var lambda = keySelector.BuildEqualsExpression(entity); + var exists = await set.AnyAsync(lambda, cancellationToken); + set.Entry(entity).State = exists ? EntityState.Modified : EntityState.Added; + await dbContext.SaveChangesAsync(cancellationToken); + } + catch (Exception ex) + { + var handler = serviceProvider.GetService(); + + if (handler != null) + { + var context = new DbUpdateExceptionContext(ex, cancellationToken); + await handler.HandleAsync(context); + } + + throw; + } + finally + { + Semaphore.Release(); + } + } + + /// + /// Saves the specified entities. + /// + /// The entities to save. + /// The key selector to get the primary key property. + /// The cancellation token. + public async Task SaveManyAsync(IEnumerable entities, Expression> keySelector, CancellationToken cancellationToken = default) => await SaveManyAsync(entities, keySelector, null, cancellationToken); + + /// + /// Saves the specified entities. + /// + /// The entities to save. + /// The key selector to get the primary key property. + /// The callback to invoke before saving the entity. + /// The cancellation token. + public async Task SaveManyAsync( + IEnumerable entities, + Expression> keySelector, + Func? onSaving = null, + CancellationToken cancellationToken = default) + { + var entityList = entities.ToList(); + + if (entityList.Count == 0) + return; + + await using var dbContext = await CreateDbContextAsync(cancellationToken); + + if (onSaving != null) + { + var savingTasks = entityList.Select(entity => onSaving(dbContext, entity, cancellationToken).AsTask()).ToList(); + await Task.WhenAll(savingTasks); + } + + // When doing a custom SQL query (Bulk Upsert), none of the installed query filters will be applied. Hence, we are assigning the current tenant ID explicitly. + var tenantId = serviceProvider.GetRequiredService().Tenant?.Id.NullIfEmpty(); + foreach (var entity in entityList) + { + if (entity is Entity entityWithTenant) + entityWithTenant.TenantId = tenantId; + } + + try + { + await dbContext.BulkUpsertAsync(entityList, keySelector, cancellationToken); + } + catch (Exception ex) + { + var handler = serviceProvider.GetService(); + + if (handler != null) + { + var context = new DbUpdateExceptionContext(ex, cancellationToken); + await handler.HandleAsync(context); + } + + throw; + } + } + + /// + /// Updates the entity. + /// + /// The entity to update. + /// The cancellation token. + public Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default) + { + return UpdateAsync(entity, null, cancellationToken); + } + + /// + /// Updates the entity. + /// + /// The entity to update. + /// The callback to invoke before saving the entity. + /// The cancellation token. + public async Task UpdateAsync(TEntity entity, Func? onSaving, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + + if (onSaving != null) + await onSaving(dbContext, entity, cancellationToken); + + var set = dbContext.Set(); + set.Entry(entity).State = EntityState.Modified; + await dbContext.SaveChangesAsync(cancellationToken); + } + + /// + /// Updates specific properties of an entity in the database. + /// + /// The entity to update. + /// An array of expressions indicating the properties to update. + /// The cancellation token. + /// A task that represents the asynchronous operation. + public async Task UpdatePartialAsync(TEntity entity, Expression>[] properties, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + dbContext.Attach(entity); + + foreach (var property in properties) + dbContext.Entry(entity).Property(property).IsModified = true; + + await dbContext.SaveChangesAsync(cancellationToken); + } + + /// + /// Finds the entity matching the specified predicate. + /// + /// The predicate to use. + /// The cancellation token. + /// The entity if found, otherwise null. + public async Task FindAsync(Expression> predicate, CancellationToken cancellationToken = default) => await FindAsync(predicate, null, cancellationToken); + + /// + /// Finds the entity matching the specified predicate. + /// + /// The predicate to use. + /// A callback to run after the entity is loaded + /// The cancellation token. + /// + public async Task FindAsync(Expression> predicate, Func? onLoading = null, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + var entity = await set.FirstOrDefaultAsync(predicate, cancellationToken); + + if (entity == null) + return null; + + if (onLoading != null) + entity = onLoading.Invoke(dbContext, entity); + + return entity; + } + + /// + /// Finds a single entity using a query + /// + /// The query to use + /// A callback to run after the entity is loaded + /// The cancellation token + /// The entity if found, otherwise null + public async Task FindAsync(Func, IQueryable> query, Func? onLoading = null, CancellationToken cancellationToken = default) + { + return await FindAsync(query, onLoading, false, cancellationToken); + } + + /// + /// Finds a single entity using a query + /// + /// The query to use + /// A callback to run after the entity is loaded + /// Define is the request should be tenant agnostic or not + /// The cancellation token + /// The entity if found, otherwise null + public async Task FindAsync(Func, IQueryable> query, Func? onLoading = null, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + return await QueryAsync(query, onLoading, tenantAgnostic, cancellationToken).FirstOrDefault(); + } + + /// + /// Finds a single entity using a query + /// + /// The query to use + /// The cancellation token + /// The entity if found, otherwise null + public async Task FindAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) + { + return await FindAsync(query, false, cancellationToken); + } + + /// + /// Finds a single entity using a query + /// + /// The query to use + /// Define is the request should be tenant agnostic or not + /// The cancellation token + /// The entity if found, otherwise null + public async Task FindAsync(Func, IQueryable> query, bool tenantAgnostic = false, CancellationToken cancellationToken = default) + { + return await QueryAsync(query, tenantAgnostic, cancellationToken).FirstOrDefault(); + } + + /// + /// Finds a list of entities using a query + /// + public async Task> FindManyAsync(Expression> predicate, CancellationToken cancellationToken = default) => await FindManyAsync(predicate, null, cancellationToken); + + /// + /// Finds a list of entities using a query + /// + public async Task> FindManyAsync(Expression> predicate, Action? onLoading = null, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + var entities = await set.Where(predicate).ToListAsync(cancellationToken); + + if (onLoading != null) + foreach (var entity in entities) + onLoading(dbContext, entity); + + return entities; + } + + /// + /// Finds a list of entities using a query + /// + public async Task> FindManyAsync( + Expression> predicate, + Expression> orderBy, + OrderDirection orderDirection = OrderDirection.Ascending, + PageArgs? pageArgs = null, + CancellationToken cancellationToken = default) => + await FindManyAsync(predicate, orderBy, orderDirection, pageArgs, null, cancellationToken); + + /// + /// Returns a list of entities using a query + /// + public async Task> FindManyAsync( + Expression>? predicate, + Expression>? orderBy, + OrderDirection orderDirection = OrderDirection.Ascending, + PageArgs? pageArgs = null, + Func? onLoading = null, + CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + + if (predicate != null) + set = set.Where(predicate); + + if (orderBy != null) + set = orderDirection switch + { + OrderDirection.Ascending => set.OrderBy(orderBy), + OrderDirection.Descending => set.OrderByDescending(orderBy), + _ => set.OrderBy(orderBy) + }; + + var page = await set.PaginateAsync(pageArgs); + + if (onLoading != null) + page = page with + { + Items = page.Items.Select(x => onLoading(dbContext, x)!).ToList() + }; + + return page; + } + + public Task> ListAsync(CancellationToken cancellationToken = default) + { + return ListAsync(null, cancellationToken); + } + + public async Task> ListAsync(Action? onLoading = null, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + var entities = await set.ToListAsync(cancellationToken); + + if (onLoading != null) + foreach (var entity in entities) + onLoading(dbContext, entity); + + return entities; + } + + /// + /// Finds a single entity using a query. + /// + /// True if the entity was found, otherwise false. + public async Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set(); + set.Attach(entity).State = EntityState.Deleted; + return await dbContext.SaveChangesAsync(cancellationToken) == 1; + } + + /// + /// Deletes entities using a predicate. + /// + /// The number of entities deleted. + public async Task DeleteWhereAsync(Expression> predicate, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + return await set.Where(predicate).ExecuteDeleteAsync(cancellationToken); + } + + /// + /// Deletes entities using a query. + /// + /// The number of entities deleted. + public async Task DeleteWhereAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + var queryable = query(set.AsQueryable()); + return await queryable.ExecuteDeleteAsync(cancellationToken); + } + + /// + /// Queries the database using a query. + /// + public async Task> QueryAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) + { + return await QueryAsync(query, null, false, cancellationToken); + } + + /// + /// Queries the database using a query. + /// + public async Task> QueryAsync(Func, IQueryable> query, bool tenantAgnostic, CancellationToken cancellationToken = default) + { + return await QueryAsync(query, null, tenantAgnostic, cancellationToken); + } + + /// + /// Queries the database using a query and a selector. + /// + public async Task> QueryAsync(Func, IQueryable> query, Func? onLoading = null, CancellationToken cancellationToken = default) + { + return await QueryAsync(query, onLoading, false, cancellationToken); + } + + /// + /// Queries the database using a query and a selector. + /// + public async Task> QueryAsync(Func, IQueryable> query, Func? onLoading = null, bool ignoreQueryFilters = false, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var asNoTracking = onLoading == null; + var set = asNoTracking ? dbContext.Set().AsNoTracking() : dbContext.Set(); + var queryable = query(set.AsQueryable()); + + if (ignoreQueryFilters) + queryable = queryable.IgnoreQueryFilters(); + + var entities = await queryable.ToListAsync(cancellationToken); + + if (onLoading != null) + { + var loadingTasks = entities.Select(entity => onLoading(dbContext, entity, cancellationToken).AsTask()).ToList(); + await Task.WhenAll(loadingTasks); + } + + return entities; + } + + /// + /// Queries the database using a query and a selector. + /// + public async Task> QueryAsync(Func, IQueryable> query, Expression> selector, CancellationToken cancellationToken = default) + { + return await QueryAsync(query, selector, false, cancellationToken); + } + + /// + /// Queries the database using a query and a selector. + /// + public async Task> QueryAsync(Func, IQueryable> query, Expression> selector, bool ignoreQueryFilters = false, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + var queryable = query(set.AsQueryable()); + + if (ignoreQueryFilters) + queryable = queryable.IgnoreQueryFilters(); + + queryable = query(queryable); + return await queryable.Select(selector).ToListAsync(cancellationToken); + } + + /// + /// Counts the number of entities matching a query. + /// + public async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) + { + return await CountAsync(query, false, cancellationToken); + } + + /// + /// Counts the number of entities matching a query. + /// + public async Task CountAsync(Func, IQueryable> query, bool ignoreQueryFilters = false, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + var queryable = query(set.AsQueryable()); + + if (ignoreQueryFilters) + queryable = queryable.IgnoreQueryFilters(); + + queryable = query(queryable); + return await queryable.LongCountAsync(cancellationToken: cancellationToken); + } + + /// + /// Checks if any entities exist. + /// + public async Task AnyAsync(Expression> predicate, CancellationToken cancellationToken = default) + { + return await AnyAsync(predicate, false, cancellationToken); + } + + /// + /// Checks if any entities exist. + /// + public async Task AnyAsync(Expression> predicate, bool ignoreQueryFilters = false, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var set = dbContext.Set().AsNoTracking(); + return await set.AnyAsync(predicate, cancellationToken); + } + + /// + /// Counts the number of entities matching a predicate. + /// + /// The predicate. + /// The cancellation token. + public async Task CountAsync(Expression> predicate, CancellationToken cancellationToken = default) + { + return await CountAsync(predicate, false, cancellationToken); + } + + /// + /// Counts the number of entities matching a predicate. + /// + /// The predicate. + /// Whether to ignore query filters. + /// The cancellation token. + public async Task CountAsync(Expression> predicate, bool ignoreQueryFilters = false, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var queryable = dbContext.Set().AsNoTracking(); + + if (ignoreQueryFilters) + queryable = queryable.IgnoreQueryFilters(); + + return await queryable.CountAsync(predicate, cancellationToken); + } + + /// + /// Counts the distinct number of entities matching a predicate. + /// + /// The predicate. + /// The property selector to distinct by. + /// The cancellation token. + public async Task CountAsync(Expression> predicate, Expression> propertySelector, CancellationToken cancellationToken = default) + { + return await CountAsync(predicate, propertySelector, false, cancellationToken); + } + + /// + /// Counts the distinct number of entities matching a predicate. + /// + /// The predicate. + /// The property selector to distinct by. + /// Whether to ignore query filters. + /// The cancellation token. + public async Task CountAsync(Expression> predicate, Expression> propertySelector, bool ignoreQueryFilters = false, CancellationToken cancellationToken = default) + { + await using var dbContext = await CreateDbContextAsync(cancellationToken); + var queryable = dbContext.Set().AsNoTracking(); + + if (ignoreQueryFilters) + queryable = queryable.IgnoreQueryFilters(); + + return await queryable + .Where(predicate) + .Select(propertySelector) + .Distinct() + .CountAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/TenantAwareDbContextFactory.cs b/src/modules/Elsa.EntityFrameworkCore.Common/TenantAwareDbContextFactory.cs new file mode 100644 index 0000000..710ae0b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Common/TenantAwareDbContextFactory.cs @@ -0,0 +1,37 @@ +using Elsa.Common.Multitenancy; +using Elsa.Extensions; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.EntityFrameworkCore; + +/// +/// A factory class that wraps and extends the functionality of an existing +/// to provide multi-tenancy support. This ensures that the created DbContext instances are aware of the current tenant context. +/// +[UsedImplicitly] +public class TenantAwareDbContextFactory( + IDbContextFactory decoratedFactory, + ITenantAccessor tenantAccessor) : IDbContextFactory + where TDbContext : DbContext +{ + public TDbContext CreateDbContext() + { + var context = decoratedFactory.CreateDbContext(); + SetTenantId(context); + return context; + } + + public async Task CreateDbContextAsync(CancellationToken cancellationToken = default) + { + var context = await decoratedFactory.CreateDbContextAsync(cancellationToken); + SetTenantId(context); + return context; + } + + private void SetTenantId(TDbContext context) + { + if (context is ElsaDbContextBase elsaContext) + elsaContext.TenantId = tenantAccessor.Tenant?.Id.NullIfEmpty(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/DbContextFactories.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/DbContextFactories.cs new file mode 100644 index 0000000..8fbca19 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/DbContextFactories.cs @@ -0,0 +1,40 @@ +using Elsa.EntityFrameworkCore.Abstractions; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Elsa.EntityFrameworkCore.Modules.Identity; +using Elsa.EntityFrameworkCore.Modules.Labels; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Modules.Tenants; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Elsa.EntityFrameworkCore.MySql; + +[UsedImplicitly] +public class IdentityDbContextFactory : MySqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class ManagementDbContextFactory : MySqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class RuntimeDbContextFactory : MySqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class LabelsDbContextFactory : MySqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class AlterationsDbContextFactories : MySqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class TenantsDbContextFactories : MySqlDesignTimeDbContextFactory; + +public class MySqlDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase where TDbContext : DbContext +{ + protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) + { + builder.UseElsaMySql(GetType().Assembly, connectionString, serverVersion: ServerVersion.Parse("9.0.0")); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/DbContextOptionsBuilder.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/DbContextOptionsBuilder.cs new file mode 100644 index 0000000..403d09f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/DbContextOptionsBuilder.cs @@ -0,0 +1,39 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Pomelo.EntityFrameworkCore.MySql.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Contains extension methods for . +/// +public static class DbContextOptionsBuilderExtensions +{ + /// + /// Configures Entity Framework Core with MySQL. + /// + public static DbContextOptionsBuilder UseElsaMySql(this DbContextOptionsBuilder builder, + Assembly migrationsAssembly, + string connectionString, + ElsaDbContextOptions? options = null, + ServerVersion? serverVersion = null, + Action? configure = null) => + builder + .UseElsaDbContextOptions(options) + .UseMySql(connectionString, serverVersion ?? ServerVersion.AutoDetect(connectionString), db => + { + db + .MigrationsAssembly(options.GetMigrationsAssemblyName(migrationsAssembly)) + .MigrationsHistoryTable(options.GetMigrationsHistoryTableName(), options.GetSchemaName()) + .SchemaBehavior(MySqlSchemaBehavior.Ignore) + .EnablePrimitiveCollectionsSupport() +#if NET9_0 + .TranslateParameterizedCollectionsToConstants() +#endif + ; + + configure?.Invoke(db); + }); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj b/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj new file mode 100644 index 0000000..97efa0a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj @@ -0,0 +1,20 @@ + + + + net8.0;net9.0 + + Provides MySQL EF Core migrations for various modules. + + elsa module persistence efcore mysql + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.MySql/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20231015122151_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20231015122151_Initial.Designer.cs new file mode 100644 index 0000000..9dcb708 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20231015122151_Initial.Designer.cs @@ -0,0 +1,119 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20231015122151_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedLog") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedAlterations") + .HasColumnType("longtext"); + + b.Property("SerializedWorkflowInstanceIds") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20231015122151_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20231015122151_Initial.cs new file mode 100644 index 0000000..7af01b4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20231015122151_Initial.cs @@ -0,0 +1,144 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AlterationJobs", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + PlanId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowInstanceId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Status = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + StartedAt = table.Column(type: "datetime(6)", nullable: true), + CompletedAt = table.Column(type: "datetime(6)", nullable: true), + SerializedLog = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationJobs", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AlterationPlans", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Status = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + StartedAt = table.Column(type: "datetime(6)", nullable: true), + CompletedAt = table.Column(type: "datetime(6)", nullable: true), + SerializedAlterations = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedWorkflowInstanceIds = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationPlans", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CompletedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CreatedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_PlanId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "PlanId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_StartedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_Status", + schema: _schema.Schema, + table: "AlterationJobs", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_WorkflowInstanceId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CompletedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CreatedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_StartedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_Status", + schema: _schema.Schema, + table: "AlterationPlans", + column: "Status"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AlterationJobs", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "AlterationPlans", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240329200618_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240329200618_V3_1.Designer.cs new file mode 100644 index 0000000..df3478e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240329200618_V3_1.Designer.cs @@ -0,0 +1,121 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240329200618_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedLog") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedAlterations") + .HasColumnType("longtext"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240329200618_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240329200618_V3_1.cs new file mode 100644 index 0000000..56b1865 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240329200618_V3_1.cs @@ -0,0 +1,78 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceIds", + schema: _schema.Schema, + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceFilter"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationPlans", + type: "varchar(255)", + nullable: false, + oldClrType: typeof(int), + oldType: "int") + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationJobs", + type: "varchar(255)", + nullable: false, + oldClrType: typeof(int), + oldType: "int") + .Annotation("MySql:CharSet", "utf8mb4"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceFilter", + schema: _schema.Schema, + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceIds"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationPlans", + type: "int", + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(255)") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationJobs", + type: "int", + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(255)") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240610184517_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240610184517_V3_2.Designer.cs new file mode 100644 index 0000000..ed6e592 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240610184517_V3_2.Designer.cs @@ -0,0 +1,121 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240610184517_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedLog") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedAlterations") + .HasColumnType("longtext"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240610184517_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240610184517_V3_2.cs new file mode 100644 index 0000000..ca40010 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20240610184517_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20241212211458_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20241212211458_V3_3.Designer.cs new file mode 100644 index 0000000..3084a0e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20241212211458_V3_3.Designer.cs @@ -0,0 +1,133 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20241212211458_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedLog") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedAlterations") + .HasColumnType("longtext"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20241212211458_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20241212211458_V3_3.cs new file mode 100644 index 0000000..f2547a3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20241212211458_V3_3.cs @@ -0,0 +1,74 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans"); + + migrationBuilder.DropIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationPlans"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationJobs"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20250222190805_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20250222190805_V3_4.Designer.cs new file mode 100644 index 0000000..0ce162a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20250222190805_V3_4.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20250222190805_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedLog") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedAlterations") + .HasColumnType("longtext"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20250222190805_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20250222190805_V3_4.cs new file mode 100644 index 0000000..4d8fdcb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/20250222190805_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..e19481a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs @@ -0,0 +1,133 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + partial class AlterationsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedLog") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedAlterations") + .HasColumnType("longtext"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20231015122238_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20231015122238_Initial.Designer.cs new file mode 100644 index 0000000..aa2f7e6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20231015122238_Initial.Designer.cs @@ -0,0 +1,128 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20231015122238_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20231015122238_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20231015122238_Initial.cs new file mode 100644 index 0000000..5d4f314 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20231015122238_Initial.cs @@ -0,0 +1,138 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Applications", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ClientId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + HashedClientSecret = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + HashedClientSecretSalt = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + HashedApiKey = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + HashedApiKeySalt = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Roles = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Applications", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Roles", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Permissions = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Roles", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Users", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + HashedPassword = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + HashedPasswordSalt = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Roles = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_Application_ClientId", + schema: _schema.Schema, + table: "Applications", + column: "ClientId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Application_Name", + schema: _schema.Schema, + table: "Applications", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Role_Name", + schema: _schema.Schema, + table: "Roles", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_User_Name", + schema: _schema.Schema, + table: "Users", + column: "Name", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Applications", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Roles", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Users", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240329200746_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240329200746_V3_1.Designer.cs new file mode 100644 index 0000000..faaf237 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240329200746_V3_1.Designer.cs @@ -0,0 +1,128 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240329200746_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240329200746_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240329200746_V3_1.cs new file mode 100644 index 0000000..36999aa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240329200746_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240610184903_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240610184903_V3_2.Designer.cs new file mode 100644 index 0000000..e25e181 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240610184903_V3_2.Designer.cs @@ -0,0 +1,128 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240610184903_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240610184903_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240610184903_V3_2.cs new file mode 100644 index 0000000..d514c41 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20240610184903_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20241212211827_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20241212211827_V3_3.Designer.cs new file mode 100644 index 0000000..b7dc0ea --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20241212211827_V3_3.Designer.cs @@ -0,0 +1,146 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20241212211827_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20241212211827_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20241212211827_V3_3.cs new file mode 100644 index 0000000..3c9a401 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20241212211827_V3_3.cs @@ -0,0 +1,98 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Users", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Roles", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Applications", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles"); + + migrationBuilder.DropIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Users"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Roles"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Applications"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20250222190914_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20250222190914_V3_4.Designer.cs new file mode 100644 index 0000000..5827398 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20250222190914_V3_4.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20250222190914_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20250222190914_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20250222190914_V3_4.cs new file mode 100644 index 0000000..861eb93 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/20250222190914_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..072a78c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs @@ -0,0 +1,146 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + partial class IdentityElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20231015122253_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20231015122253_Initial.Designer.cs new file mode 100644 index 0000000..a644c44 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20231015122253_Initial.Designer.cs @@ -0,0 +1,82 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20231015122253_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Color") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20231015122253_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20231015122253_Initial.cs new file mode 100644 index 0000000..e6a8bfe --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20231015122253_Initial.cs @@ -0,0 +1,98 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Labels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + NormalizedName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Description = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Color = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Labels", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowDefinitionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowDefinitionVersionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + LabelId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitionLabels", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_LabelId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "LabelId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionVersionId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Labels", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240329200817_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240329200817_V3_1.Designer.cs new file mode 100644 index 0000000..d1b0b49 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240329200817_V3_1.Designer.cs @@ -0,0 +1,82 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240329200817_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Color") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240329200817_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240329200817_V3_1.cs new file mode 100644 index 0000000..c6ee183 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240329200817_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240610184957_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240610184957_V3_2.Designer.cs new file mode 100644 index 0000000..cdd9a69 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240610184957_V3_2.Designer.cs @@ -0,0 +1,82 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240610184957_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Color") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240610184957_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240610184957_V3_2.cs new file mode 100644 index 0000000..290adf1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20240610184957_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20241212211953_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20241212211953_V3_3.Designer.cs new file mode 100644 index 0000000..76d0f08 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20241212211953_V3_3.Designer.cs @@ -0,0 +1,91 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20241212211953_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Color") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20241212211953_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20241212211953_V3_3.cs new file mode 100644 index 0000000..971d8f3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20241212211953_V3_3.cs @@ -0,0 +1,63 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Labels", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Labels"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20250222190940_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20250222190940_V3_4.Designer.cs new file mode 100644 index 0000000..fb9154c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20250222190940_V3_4.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20250222190940_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Color") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20250222190940_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20250222190940_V3_4.cs new file mode 100644 index 0000000..0ddeaf1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/20250222190940_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..fb3703a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs @@ -0,0 +1,91 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + partial class LabelsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Color") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20231015122223_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20231015122223_Initial.Designer.cs new file mode 100644 index 0000000..298abc2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20231015122223_Initial.Designer.cs @@ -0,0 +1,193 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20231015122223_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BinaryData") + .HasColumnType("longblob"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsLatest") + .HasColumnType("tinyint(1)"); + + b.Property("IsPublished") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadonly") + .HasColumnType("tinyint(1)"); + + b.Property("MaterializerContext") + .HasColumnType("longtext"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ProviderName") + .HasColumnType("longtext"); + + b.Property("StringData") + .HasColumnType("longtext"); + + b.Property("ToolVersion") + .HasColumnType("longtext"); + + b.Property("UsableAsActivity") + .HasColumnType("tinyint(1)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FinishedAt") + .HasColumnType("datetime(6)"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20231015122223_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20231015122223_Initial.cs new file mode 100644 index 0000000..9e5f3e4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20231015122223_Initial.cs @@ -0,0 +1,219 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitions", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DefinitionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Description = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ToolVersion = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ProviderName = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + MaterializerName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + MaterializerContext = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + StringData = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + BinaryData = table.Column(type: "longblob", nullable: true), + IsReadonly = table.Column(type: "tinyint(1)", nullable: false), + Data = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + UsableAsActivity = table.Column(type: "tinyint(1)", nullable: true), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + Version = table.Column(type: "int", nullable: false), + IsLatest = table.Column(type: "tinyint(1)", nullable: false), + IsPublished = table.Column(type: "tinyint(1)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "WorkflowInstances", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DefinitionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DefinitionVersionId = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Version = table.Column(type: "int", nullable: false), + Status = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + SubStatus = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CorrelationId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + IncidentCount = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + UpdatedAt = table.Column(type: "datetime(6)", nullable: false), + FinishedAt = table.Column(type: "datetime(6)", nullable: true), + Data = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInstances", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + columns: new[] { "DefinitionId", "Version" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsLatest", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsLatest"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsPublished", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsPublished"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Name", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_UsableAsActivity", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "UsableAsActivity"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Version"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "DefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FinishedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "FinishedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Name", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus", "DefinitionId", "Version" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "SubStatus"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "SubStatus", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_UpdatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "UpdatedAt"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "WorkflowDefinitions", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInstances", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240329200720_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240329200720_V3_1.Designer.cs new file mode 100644 index 0000000..0828c2c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240329200720_V3_1.Designer.cs @@ -0,0 +1,211 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240329200720_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BinaryData") + .HasColumnType("longblob"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsLatest") + .HasColumnType("tinyint(1)"); + + b.Property("IsPublished") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadonly") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("MaterializerContext") + .HasColumnType("longtext"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ProviderName") + .HasColumnType("longtext"); + + b.Property("StringData") + .HasColumnType("longtext"); + + b.Property("ToolVersion") + .HasColumnType("longtext"); + + b.Property("UsableAsActivity") + .HasColumnType("tinyint(1)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FinishedAt") + .HasColumnType("datetime(6)"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("longtext"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240329200720_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240329200720_V3_1.cs new file mode 100644 index 0000000..e4fa114 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240329200720_V3_1.cs @@ -0,0 +1,100 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DataCompressionAlgorithm", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ParentWorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsSystem"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsSystem"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "DataCompressionAlgorithm", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "ParentWorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240610184802_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240610184802_V3_2.Designer.cs new file mode 100644 index 0000000..164db5f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240610184802_V3_2.Designer.cs @@ -0,0 +1,211 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240610184802_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BinaryData") + .HasColumnType("longblob"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsLatest") + .HasColumnType("tinyint(1)"); + + b.Property("IsPublished") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadonly") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("MaterializerContext") + .HasColumnType("longtext"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ProviderName") + .HasColumnType("longtext"); + + b.Property("StringData") + .HasColumnType("longtext"); + + b.Property("ToolVersion") + .HasColumnType("longtext"); + + b.Property("UsableAsActivity") + .HasColumnType("tinyint(1)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FinishedAt") + .HasColumnType("datetime(6)"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("longtext"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240610184802_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240610184802_V3_2.cs new file mode 100644 index 0000000..523fc6f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20240610184802_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20241212211732_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20241212211732_V3_3.Designer.cs new file mode 100644 index 0000000..660aba8 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20241212211732_V3_3.Designer.cs @@ -0,0 +1,223 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20241212211732_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BinaryData") + .HasColumnType("longblob"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsLatest") + .HasColumnType("tinyint(1)"); + + b.Property("IsPublished") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadonly") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("MaterializerContext") + .HasColumnType("longtext"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ProviderName") + .HasColumnType("longtext"); + + b.Property("StringData") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("ToolVersion") + .HasColumnType("longtext"); + + b.Property("UsableAsActivity") + .HasColumnType("tinyint(1)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FinishedAt") + .HasColumnType("datetime(6)"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("longtext"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20241212211732_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20241212211732_V3_3.cs new file mode 100644 index 0000000..0b6c649 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20241212211732_V3_3.cs @@ -0,0 +1,74 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20250222190852_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20250222190852_V3_4.Designer.cs new file mode 100644 index 0000000..9df8562 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20250222190852_V3_4.Designer.cs @@ -0,0 +1,232 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20250222190852_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BinaryData") + .HasColumnType("longblob"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsLatest") + .HasColumnType("tinyint(1)"); + + b.Property("IsPublished") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadonly") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("MaterializerContext") + .HasColumnType("longtext"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ProviderName") + .HasColumnType("longtext"); + + b.Property("StringData") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("ToolVersion") + .HasColumnType("longtext"); + + b.Property("UsableAsActivity") + .HasColumnType("tinyint(1)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FinishedAt") + .HasColumnType("datetime(6)"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsExecuting") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("longtext"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20250222190852_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20250222190852_V3_4.cs new file mode 100644 index 0000000..f923447 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/20250222190852_V3_4.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsExecuting"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..80dfe24 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs @@ -0,0 +1,229 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + partial class ManagementElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BinaryData") + .HasColumnType("longblob"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsLatest") + .HasColumnType("tinyint(1)"); + + b.Property("IsPublished") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadonly") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("MaterializerContext") + .HasColumnType("longtext"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ProviderName") + .HasColumnType("longtext"); + + b.Property("StringData") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("ToolVersion") + .HasColumnType("longtext"); + + b.Property("UsableAsActivity") + .HasColumnType("tinyint(1)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FinishedAt") + .HasColumnType("datetime(6)"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsExecuting") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("longtext"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20231024160940_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20231024160940_Initial.Designer.cs new file mode 100644 index 0000000..3760de1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20231024160940_Initial.Designer.cs @@ -0,0 +1,385 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20231024160940_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20231024160940_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20231024160940_Initial.cs new file mode 100644 index 0000000..cf3eb69 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20231024160940_Initial.cs @@ -0,0 +1,489 @@ +using Elsa.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowInstanceId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityNodeId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityType = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityTypeVersion = table.Column(type: "int", nullable: false), + ActivityName = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + StartedAt = table.Column(type: "datetime(6)", nullable: false), + HasBookmarks = table.Column(type: "tinyint(1)", nullable: false), + Status = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CompletedAt = table.Column(type: "datetime(6)", nullable: true), + SerializedActivityState = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedException = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedOutputs = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedPayload = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_ActivityExecutionRecords", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Bookmarks", + schema: _schema.Schema, + columns: table => new + { + BookmarkId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityTypeName = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Hash = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowInstanceId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityInstanceId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CorrelationId = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + SerializedMetadata = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedPayload = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.BookmarkId); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Triggers", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowDefinitionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowDefinitionVersionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityId = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Hash = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedPayload = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Triggers", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowDefinitionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowDefinitionVersionId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowInstanceId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowVersion = table.Column(type: "int", nullable: false), + ActivityInstanceId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ParentActivityInstanceId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityType = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityTypeVersion = table.Column(type: "int", nullable: false), + ActivityName = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityNodeId = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Timestamp = table.Column(type: "datetime(6)", nullable: false), + Sequence = table.Column(type: "bigint", nullable: false), + EventName = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Message = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Source = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedActivityState = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedPayload = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityTypeName = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Hash = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowInstanceId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CorrelationId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityInstanceId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + ExpiresAt = table.Column(type: "datetime(6)", nullable: false), + SerializedBookmarkPayload = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedInput = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInboxMessages", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityName", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityNodeId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_CompletedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_HasBookmarks", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "HasBookmarks"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_StartedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_Status", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_CreatedAt", + schema: _schema.Schema, + table: "Bookmarks", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Hash", + schema: _schema.Schema, + table: "Bookmarks", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Hash", + schema: _schema.Schema, + table: "Triggers", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Name", + schema: _schema.Schema, + table: "Triggers", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityNodeId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_EventName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "EventName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ParentActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ParentActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Sequence"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Timestamp"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "Timestamp", "Sequence" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityTypeName", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ExpiresAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ExpiresAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_Hash", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Bookmarks", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Triggers", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240329200651_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240329200651_V3_1.Designer.cs new file mode 100644 index 0000000..128d958 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240329200651_V3_1.Designer.cs @@ -0,0 +1,405 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240329200651_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("varchar(255)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("SerializedProperties") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240329200651_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240329200651_V3_1.cs new file mode 100644 index 0000000..0092d23 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240329200651_V3_1.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + /// + public partial class V3_1 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_1(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "SerializedActivityStateCompressionAlgorithm", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "SerializedProperties", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "KeyValuePairs", + schema: _schema.Schema, + columns: table => new + { + Key = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + SerializedValue = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_KeyValuePairs", x => x.Key); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "KeyValuePairs", + schema: _schema.Schema); + + migrationBuilder.DropColumn( + name: "SerializedActivityStateCompressionAlgorithm", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedProperties", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240610184652_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240610184652_V3_2.Designer.cs new file mode 100644 index 0000000..1121249 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240610184652_V3_2.Designer.cs @@ -0,0 +1,405 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240610184652_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("varchar(255)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("SerializedProperties") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240610184652_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240610184652_V3_2.cs new file mode 100644 index 0000000..9787836 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20240610184652_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + /// + public partial class V3_2 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_2(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250116192733_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250116192733_V3_3.Designer.cs new file mode 100644 index 0000000..cd2cae3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250116192733_V3_3.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250116192733_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("SerializedProperties") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .HasColumnType("varchar(255)"); + + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedOptions") + .HasColumnType("longtext"); + + b.Property("StimulusHash") + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250116192733_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250116192733_V3_3.cs new file mode 100644 index 0000000..d1dc13b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250116192733_V3_3.cs @@ -0,0 +1,267 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "Key", + schema: _schema.Schema, + table: "KeyValuePairs", + newName: "Id"); + + migrationBuilder.RenameColumn( + name: "BookmarkId", + schema: _schema.Schema, + table: "Bookmarks", + newName: "Id"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Triggers", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Bookmarks", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "BookmarkQueueItems", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + WorkflowInstanceId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CorrelationId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + BookmarkId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + StimulusHash = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityInstanceId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ActivityTypeName = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + SerializedOptions = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + TenantId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_BookmarkQueueItems", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityTypeName", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_BookmarkId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "BookmarkId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CorrelationId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CreatedAt", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_StimulusHash", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "StimulusHash"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_TenantId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_WorkflowInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BookmarkQueueItems", + schema: _schema.Schema); + + migrationBuilder.DropIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers"); + + migrationBuilder.DropIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInboxMessages"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Triggers"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "KeyValuePairs"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.RenameColumn( + name: "Id", + schema: _schema.Schema, + table: "KeyValuePairs", + newName: "Key"); + + migrationBuilder.RenameColumn( + name: "Id", + schema: _schema.Schema, + table: "Bookmarks", + newName: "BookmarkId"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250222190829_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250222190829_V3_4.Designer.cs new file mode 100644 index 0000000..30bd340 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250222190829_V3_4.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250222190829_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("SerializedProperties") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .HasColumnType("varchar(255)"); + + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedOptions") + .HasColumnType("longtext"); + + b.Property("StimulusHash") + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250222190829_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250222190829_V3_4.cs new file mode 100644 index 0000000..6ffc469 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250222190829_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250530104505_V3_5.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250530104505_V3_5.Designer.cs new file mode 100644 index 0000000..09e8354 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250530104505_V3_5.Designer.cs @@ -0,0 +1,506 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250530104505_V3_5")] + partial class V3_5 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("AggregateFaultCount") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("SerializedProperties") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .HasColumnType("varchar(255)"); + + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedOptions") + .HasColumnType("longtext"); + + b.Property("StimulusHash") + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250530104505_V3_5.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250530104505_V3_5.cs new file mode 100644 index 0000000..a593318 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/20250530104505_V3_5.cs @@ -0,0 +1,129 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + /// + public partial class V3_5 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_5(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "varchar(255)", + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(255)") + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks", + type: "varchar(255)", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash", "WorkflowInstanceId" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.UpdateData( + schema: _schema.Schema, + table: "Triggers", + keyColumn: "Name", + keyValue: null, + column: "Name", + value: ""); + + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "varchar(255)", + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(255)", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..23d9e21 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs @@ -0,0 +1,503 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + partial class RuntimeElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("AggregateFaultCount") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetime(6)"); + + b.Property("HasBookmarks") + .HasColumnType("tinyint(1)"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("longtext"); + + b.Property("SerializedException") + .HasColumnType("longtext"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedOutputs") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("SerializedProperties") + .HasColumnType("longtext"); + + b.Property("StartedAt") + .HasColumnType("datetime(6)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .HasColumnType("varchar(255)"); + + b.Property("BookmarkId") + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedOptions") + .HasColumnType("longtext"); + + b.Property("StimulusHash") + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("SerializedMetadata") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Hash") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityName") + .HasColumnType("varchar(255)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("varchar(255)"); + + b.Property("Message") + .HasColumnType("longtext"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("longtext"); + + b.Property("SerializedPayload") + .HasColumnType("longtext"); + + b.Property("Source") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.Property("Timestamp") + .HasColumnType("datetime(6)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ActivityInstanceId") + .HasColumnType("varchar(255)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CorrelationId") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAt") + .HasColumnType("datetime(6)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("longtext"); + + b.Property("SerializedInput") + .HasColumnType("longtext"); + + b.Property("TenantId") + .HasColumnType("longtext"); + + b.Property("WorkflowInstanceId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20241212212121_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20241212212121_V3_3.Designer.cs new file mode 100644 index 0000000..0b4a1b4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20241212212121_V3_3.Designer.cs @@ -0,0 +1,54 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20241212212121_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20241212212121_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20241212212121_V3_3.cs new file mode 100644 index 0000000..a33332d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20241212212121_V3_3.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Tenants +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: "Elsa"); + + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "Tenants", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Name = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Configuration = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + TenantId = table.Column(type: "varchar(255)", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_Tenants", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Name", + schema: _schema.Schema, + table: "Tenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_TenantId", + schema: _schema.Schema, + table: "Tenants", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Tenants", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20250222191006_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20250222191006_V3_4.Designer.cs new file mode 100644 index 0000000..e965924 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20250222191006_V3_4.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20250222191006_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20250222191006_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20250222191006_V3_4.cs new file mode 100644 index 0000000..b66b5f1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/20250222191006_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Tenants +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..cec5ae0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs @@ -0,0 +1,54 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.MySql.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + partial class TenantsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/MySqlProvidersExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.MySql/MySqlProvidersExtensions.cs new file mode 100644 index 0000000..09ee321 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/MySqlProvidersExtensions.cs @@ -0,0 +1,59 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to configure EF Core to use MySQL. +/// +public static class MySqlProvidersExtensions +{ + private static Assembly Assembly => typeof(MySqlProvidersExtensions).Assembly; + + public static TFeature UseMySql(this PersistenceFeatureBase feature, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseMySql(Assembly, connectionString, options, configure); + } + + public static TFeature UseMySql(this PersistenceFeatureBase feature, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null + ) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseMySql(Assembly, connectionStringFunc, options, configure); + } + + public static TFeature UseMySql(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null + ) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseMySql(migrationsAssembly, _ => connectionString, options, configure); + } + + public static TFeature UseMySql(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null + ) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + feature.DbContextOptionsBuilder = (sp, db) => db.UseElsaMySql(migrationsAssembly, connectionStringFunc(sp), options, configure: configure); + return (TFeature)feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Configurations/Management.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Configurations/Management.cs new file mode 100644 index 0000000..6f9d6e1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Configurations/Management.cs @@ -0,0 +1,26 @@ +using Elsa.Workflows.Management.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.EntityFrameworkCore.Oracle.Configurations; + +internal class Management : IEntityTypeConfiguration, IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + // In order to use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + builder.Property("StringData").HasColumnType("NCLOB"); + builder.Property("Data").HasColumnType("NCLOB"); + builder.Property(x => x.Description).HasColumnType("NCLOB"); + builder.Property(x => x.MaterializerContext).HasColumnType("NCLOB"); + builder.Property(x => x.BinaryData).HasColumnType("BLOB"); + } + + public void Configure(EntityTypeBuilder builder) + { + // In order to use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + builder.Property("Data").HasColumnType("NCLOB"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Configurations/Runtime.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Configurations/Runtime.cs new file mode 100644 index 0000000..20eecc6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Configurations/Runtime.cs @@ -0,0 +1,63 @@ +using Elsa.Workflows.Runtime.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.EntityFrameworkCore.Oracle.Configurations; + +public class Runtime : + IEntityTypeConfiguration, + IEntityTypeConfiguration, + IEntityTypeConfiguration, + IEntityTypeConfiguration, + IEntityTypeConfiguration +{ + /// + public void Configure(EntityTypeBuilder builder) + { + // To use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + builder.Property("SerializedActivityState").HasColumnType("NCLOB"); + builder.Property("SerializedException").HasColumnType("NCLOB"); + builder.Property("SerializedPayload").HasColumnType("NCLOB"); + builder.Property("SerializedOutputs").HasColumnType("NCLOB"); + builder.Property("SerializedProperties").HasColumnType("NCLOB"); + } + + /// + public void Configure(EntityTypeBuilder builder) + { + // To use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + // modelBuilder.Entity().Ignore(x => x.Payload); + // modelBuilder.Entity().Ignore(x => x.Metadata); + builder.Property("SerializedPayload").HasColumnType("NCLOB"); + builder.Property("SerializedMetadata").HasColumnType("NCLOB"); + } + + /// + public void Configure(EntityTypeBuilder builder) + { + // To use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + builder.Property("SerializedPayload").HasColumnType("NCLOB"); + } + + /// + public void Configure(EntityTypeBuilder builder) + { + // To use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + builder.Property("SerializedActivityState").HasColumnType("NCLOB"); + builder.Property("SerializedPayload").HasColumnType("NCLOB"); + } + + public void Configure(EntityTypeBuilder builder) + { + // To use data more than 2000 char we have to use NCLOB. + // In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000). + builder.Ignore(x => x.Input); + builder.Ignore(x => x.BookmarkPayload); + builder.Property("SerializedInput").HasColumnType("NCLOB"); + builder.Property("SerializedBookmarkPayload").HasColumnType("NCLOB"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextFactories.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextFactories.cs new file mode 100644 index 0000000..d2fa8f2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextFactories.cs @@ -0,0 +1,41 @@ +using Elsa.EntityFrameworkCore.Abstractions; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Elsa.EntityFrameworkCore.Modules.Identity; +using Elsa.EntityFrameworkCore.Modules.Labels; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Modules.Tenants; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Elsa.EntityFrameworkCore.Oracle; + +[UsedImplicitly] +public class IdentityDbContextFactory : OracleDesignTimeDbContextFactory; + +[UsedImplicitly] +public class ManagementDbContextFactory : OracleDesignTimeDbContextFactory; + +[UsedImplicitly] +public class RuntimeDbContextFactory : OracleDesignTimeDbContextFactory; + +[UsedImplicitly] +public class LabelsDbContextFactory : OracleDesignTimeDbContextFactory; + +[UsedImplicitly] +public class AlterationsDbContextFactories : OracleDesignTimeDbContextFactory; + +[UsedImplicitly] +public class TenantsDbContextFactories : OracleDesignTimeDbContextFactory; + +public class OracleDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase where TDbContext : DbContext +{ + protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) + { + var options = new ElsaDbContextOptions().Configure(); + builder.UseElsaOracle(GetType().Assembly, connectionString, options); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextOptionsBuilder.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextOptionsBuilder.cs new file mode 100644 index 0000000..f351339 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextOptionsBuilder.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Oracle.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Contains extension methods for . +/// +public static class DbContextOptionsBuilderExtensions +{ + /// + /// Configures Entity Framework Core with Oracle. + /// + public static DbContextOptionsBuilder UseElsaOracle(this DbContextOptionsBuilder builder, Assembly migrationsAssembly, string connectionString, ElsaDbContextOptions? options = null, Action? configure = null) => + builder + .UseElsaDbContextOptions(options) + .UseOracle(connectionString, db => + { + db + .MigrationsAssembly(options.GetMigrationsAssemblyName(migrationsAssembly)) + .MigrationsHistoryTable(options.GetMigrationsHistoryTableName(), options.GetSchemaName()); + + configure?.Invoke(db); + }); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Elsa.EntityFrameworkCore.Oracle.csproj b/src/modules/Elsa.EntityFrameworkCore.Oracle/Elsa.EntityFrameworkCore.Oracle.csproj new file mode 100644 index 0000000..c4ecf67 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Elsa.EntityFrameworkCore.Oracle.csproj @@ -0,0 +1,24 @@ + + + + + Provides Oracle EF Core migrations for various modules. + + elsa module persistence efcore oracle + + + + + + + + + + + + + + + + + diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.Oracle/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250131233442_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250131233442_V3_3.Designer.cs new file mode 100644 index 0000000..c16d8aa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250131233442_V3_3.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20250131233442_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedLog") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedAlterations") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250131233442_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250131233442_V3_3.cs new file mode 100644 index 0000000..fb7daa4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250131233442_V3_3.cs @@ -0,0 +1,149 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "AlterationJobs", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + PlanId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + Status = table.Column(type: "NVARCHAR2(450)", nullable: false), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + StartedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + CompletedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + SerializedLog = table.Column(type: "NVARCHAR2(2000)", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationJobs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AlterationPlans", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + Status = table.Column(type: "NVARCHAR2(450)", nullable: false), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + StartedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + CompletedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + SerializedAlterations = table.Column(type: "NVARCHAR2(2000)", nullable: true), + SerializedWorkflowInstanceFilter = table.Column(type: "NVARCHAR2(2000)", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationPlans", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CompletedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CreatedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_PlanId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "PlanId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_StartedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_Status", + schema: _schema.Schema, + table: "AlterationJobs", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_WorkflowInstanceId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CompletedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CreatedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_StartedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_Status", + schema: _schema.Schema, + table: "AlterationPlans", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AlterationJobs", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "AlterationPlans", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250222190824_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250222190824_V3_4.Designer.cs new file mode 100644 index 0000000..0acce6a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250222190824_V3_4.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20250222190824_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedLog") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedAlterations") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250222190824_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250222190824_V3_4.cs new file mode 100644 index 0000000..f3ddbfa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20250222190824_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..617db12 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs @@ -0,0 +1,133 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + partial class AlterationsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedLog") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedAlterations") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250131233455_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250131233455_V3_3.Designer.cs new file mode 100644 index 0000000..9b9a8c1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250131233455_V3_3.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20250131233455_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250131233455_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250131233455_V3_3.cs new file mode 100644 index 0000000..37d23e3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250131233455_V3_3.cs @@ -0,0 +1,139 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + _schema.Schema); + + migrationBuilder.CreateTable( + name: "Applications", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + ClientId = table.Column(type: "NVARCHAR2(450)", nullable: false), + HashedClientSecret = table.Column(type: "NVARCHAR2(2000)", nullable: false), + HashedClientSecretSalt = table.Column(type: "NVARCHAR2(2000)", nullable: false), + Name = table.Column(type: "NVARCHAR2(450)", nullable: false), + HashedApiKey = table.Column(type: "NVARCHAR2(2000)", nullable: false), + HashedApiKeySalt = table.Column(type: "NVARCHAR2(2000)", nullable: false), + Roles = table.Column(type: "NVARCHAR2(2000)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Applications", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Roles", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + Name = table.Column(type: "NVARCHAR2(450)", nullable: false), + Permissions = table.Column(type: "NVARCHAR2(2000)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Roles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + Name = table.Column(type: "NVARCHAR2(450)", nullable: false), + HashedPassword = table.Column(type: "NVARCHAR2(2000)", nullable: false), + HashedPasswordSalt = table.Column(type: "NVARCHAR2(2000)", nullable: false), + Roles = table.Column(type: "NVARCHAR2(2000)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Application_ClientId", + schema: _schema.Schema, + table: "Applications", + column: "ClientId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Application_Name", + schema: _schema.Schema, + table: "Applications", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Role_Name", + schema: _schema.Schema, + table: "Roles", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_User_Name", + schema: _schema.Schema, + table: "Users", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Applications", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Roles", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Users", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250222190935_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250222190935_V3_4.Designer.cs new file mode 100644 index 0000000..ba2eb71 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250222190935_V3_4.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20250222190935_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250222190935_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250222190935_V3_4.cs new file mode 100644 index 0000000..8ccbf87 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20250222190935_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..aabcce6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs @@ -0,0 +1,146 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + partial class IdentityElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250131233459_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250131233459_V3_3.Designer.cs new file mode 100644 index 0000000..8f95ac0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250131233459_V3_3.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20250131233459_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Color") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Description") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250131233459_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250131233459_V3_3.cs new file mode 100644 index 0000000..4144715 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250131233459_V3_3.cs @@ -0,0 +1,94 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + _schema.Schema); + + migrationBuilder.CreateTable( + name: "Labels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + Name = table.Column(type: "NVARCHAR2(2000)", nullable: false), + NormalizedName = table.Column(type: "NVARCHAR2(2000)", nullable: false), + Description = table.Column(type: "NVARCHAR2(2000)", nullable: true), + Color = table.Column(type: "NVARCHAR2(2000)", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(2000)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Labels", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowDefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + LabelId = table.Column(type: "NVARCHAR2(450)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitionLabels", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_LabelId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "LabelId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionVersionId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Labels", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250222191001_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250222191001_V3_4.Designer.cs new file mode 100644 index 0000000..5060672 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250222191001_V3_4.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20250222191001_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Color") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Description") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250222191001_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250222191001_V3_4.cs new file mode 100644 index 0000000..353c995 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20250222191001_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..6d050f7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs @@ -0,0 +1,91 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + partial class LabelsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Color") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Description") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250131233451_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250131233451_V3_3.Designer.cs new file mode 100644 index 0000000..1e05309 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250131233451_V3_3.Designer.cs @@ -0,0 +1,226 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20250131233451_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Description") + .HasColumnType("NCLOB"); + + b.Property("IsLatest") + .HasColumnType("BOOLEAN"); + + b.Property("IsPublished") + .HasColumnType("BOOLEAN"); + + b.Property("IsReadonly") + .HasColumnType("BOOLEAN"); + + b.Property("IsSystem") + .HasColumnType("BOOLEAN"); + + b.Property("MaterializerContext") + .HasColumnType("NCLOB"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ProviderName") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StringData") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ToolVersion") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("UsableAsActivity") + .HasColumnType("BOOLEAN"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("FinishedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("IncidentCount") + .HasColumnType("NUMBER(10)"); + + b.Property("IsSystem") + .HasColumnType("BOOLEAN"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("UpdatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250131233451_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250131233451_V3_3.cs new file mode 100644 index 0000000..aa899af --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250131233451_V3_3.cs @@ -0,0 +1,229 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitions", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + DefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + Name = table.Column(type: "NVARCHAR2(450)", nullable: true), + Description = table.Column(type: "NCLOB", nullable: true), + ToolVersion = table.Column(type: "NVARCHAR2(2000)", nullable: true), + ProviderName = table.Column(type: "NVARCHAR2(2000)", nullable: true), + MaterializerName = table.Column(type: "NVARCHAR2(2000)", nullable: false), + MaterializerContext = table.Column(type: "NCLOB", nullable: true), + StringData = table.Column(type: "NCLOB", nullable: true), + BinaryData = table.Column(type: "BLOB", nullable: true), + IsReadonly = table.Column(type: "BOOLEAN", nullable: false), + IsSystem = table.Column(type: "BOOLEAN", nullable: false), + Data = table.Column(type: "NCLOB", nullable: true), + UsableAsActivity = table.Column(type: "BOOLEAN", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + Version = table.Column(type: "NUMBER(10)", nullable: false), + IsLatest = table.Column(type: "BOOLEAN", nullable: false), + IsPublished = table.Column(type: "BOOLEAN", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInstances", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + DefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + DefinitionVersionId = table.Column(type: "NVARCHAR2(2000)", nullable: false), + Version = table.Column(type: "NUMBER(10)", nullable: false), + ParentWorkflowInstanceId = table.Column(type: "NVARCHAR2(2000)", nullable: true), + Status = table.Column(type: "NVARCHAR2(450)", nullable: false), + SubStatus = table.Column(type: "NVARCHAR2(450)", nullable: false), + CorrelationId = table.Column(type: "NVARCHAR2(450)", nullable: true), + Name = table.Column(type: "NVARCHAR2(450)", nullable: true), + IncidentCount = table.Column(type: "NUMBER(10)", nullable: false), + IsSystem = table.Column(type: "BOOLEAN", nullable: false), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + UpdatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + FinishedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + Data = table.Column(type: "NCLOB", nullable: true), + DataCompressionAlgorithm = table.Column(type: "NVARCHAR2(2000)", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInstances", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + columns: new[] { "DefinitionId", "Version" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsLatest", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsLatest"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsPublished", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsPublished"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsSystem"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Name", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_UsableAsActivity", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "UsableAsActivity"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Version"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "DefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FinishedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "FinishedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsSystem"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Name", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus", "DefinitionId", "Version" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "SubStatus"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "SubStatus", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_UpdatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "UpdatedAt"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "WorkflowDefinitions", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInstances", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250222190910_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250222190910_V3_4.Designer.cs new file mode 100644 index 0000000..a3df0a8 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250222190910_V3_4.Designer.cs @@ -0,0 +1,232 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20250222190910_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Description") + .HasColumnType("NCLOB"); + + b.Property("IsLatest") + .HasColumnType("BOOLEAN"); + + b.Property("IsPublished") + .HasColumnType("BOOLEAN"); + + b.Property("IsReadonly") + .HasColumnType("BOOLEAN"); + + b.Property("IsSystem") + .HasColumnType("BOOLEAN"); + + b.Property("MaterializerContext") + .HasColumnType("NCLOB"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ProviderName") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StringData") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ToolVersion") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("UsableAsActivity") + .HasColumnType("BOOLEAN"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("FinishedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("IncidentCount") + .HasColumnType("NUMBER(10)"); + + b.Property("IsExecuting") + .HasColumnType("BOOLEAN"); + + b.Property("IsSystem") + .HasColumnType("BOOLEAN"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("UpdatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250222190910_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250222190910_V3_4.cs new file mode 100644 index 0000000..8cda7f4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20250222190910_V3_4.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "BOOLEAN", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsExecuting"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..e4d7a7b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs @@ -0,0 +1,229 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + partial class ManagementElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Description") + .HasColumnType("NCLOB"); + + b.Property("IsLatest") + .HasColumnType("BOOLEAN"); + + b.Property("IsPublished") + .HasColumnType("BOOLEAN"); + + b.Property("IsReadonly") + .HasColumnType("BOOLEAN"); + + b.Property("IsSystem") + .HasColumnType("BOOLEAN"); + + b.Property("MaterializerContext") + .HasColumnType("NCLOB"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ProviderName") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StringData") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ToolVersion") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("UsableAsActivity") + .HasColumnType("BOOLEAN"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("FinishedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("IncidentCount") + .HasColumnType("NUMBER(10)"); + + b.Property("IsExecuting") + .HasColumnType("BOOLEAN"); + + b.Property("IsSystem") + .HasColumnType("BOOLEAN"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("UpdatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250131233446_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250131233446_V3_3.Designer.cs new file mode 100644 index 0000000..d7fd035 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250131233446_V3_3.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250131233446_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("HasBookmarks") + .HasColumnType("BOOLEAN"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedException") + .HasColumnType("NCLOB"); + + b.Property("SerializedOutputs") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedProperties") + .HasColumnType("NCLOB"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BookmarkId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedOptions") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StimulusHash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Hash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("EventName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Message") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Sequence") + .HasColumnType("NUMBER(19)"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("Source") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Timestamp") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("ExpiresAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedInput") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250131233446_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250131233446_V3_3.cs new file mode 100644 index 0000000..c470348 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250131233446_V3_3.cs @@ -0,0 +1,563 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityNodeId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityType = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityTypeVersion = table.Column(type: "NUMBER(10)", nullable: false), + ActivityName = table.Column(type: "NVARCHAR2(450)", nullable: true), + StartedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + HasBookmarks = table.Column(type: "BOOLEAN", nullable: false), + Status = table.Column(type: "NVARCHAR2(450)", nullable: false), + CompletedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + SerializedActivityState = table.Column(type: "NCLOB", nullable: true), + SerializedActivityStateCompressionAlgorithm = table.Column(type: "NVARCHAR2(2000)", nullable: true), + SerializedException = table.Column(type: "NCLOB", nullable: true), + SerializedOutputs = table.Column(type: "NCLOB", nullable: true), + SerializedPayload = table.Column(type: "NCLOB", nullable: true), + SerializedProperties = table.Column(type: "NCLOB", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ActivityExecutionRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "BookmarkQueueItems", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: true), + CorrelationId = table.Column(type: "NVARCHAR2(450)", nullable: true), + BookmarkId = table.Column(type: "NVARCHAR2(450)", nullable: true), + StimulusHash = table.Column(type: "NVARCHAR2(450)", nullable: true), + ActivityInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: true), + ActivityTypeName = table.Column(type: "NVARCHAR2(450)", nullable: true), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + SerializedOptions = table.Column(type: "NVARCHAR2(2000)", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BookmarkQueueItems", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Bookmarks", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityTypeName = table.Column(type: "NVARCHAR2(450)", nullable: false), + Hash = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: true), + CorrelationId = table.Column(type: "NVARCHAR2(2000)", nullable: true), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + SerializedMetadata = table.Column(type: "NCLOB", nullable: true), + SerializedPayload = table.Column(type: "NCLOB", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "KeyValuePairs", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + SerializedValue = table.Column(type: "NVARCHAR2(2000)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_KeyValuePairs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Triggers", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowDefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + Name = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityId = table.Column(type: "NVARCHAR2(2000)", nullable: false), + Hash = table.Column(type: "NVARCHAR2(450)", nullable: true), + SerializedPayload = table.Column(type: "NCLOB", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Triggers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowDefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowVersion = table.Column(type: "NUMBER(10)", nullable: false), + ActivityInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ParentActivityInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: true), + ActivityId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityType = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityTypeVersion = table.Column(type: "NUMBER(10)", nullable: false), + ActivityName = table.Column(type: "NVARCHAR2(450)", nullable: true), + ActivityNodeId = table.Column(type: "NVARCHAR2(450)", nullable: false), + Timestamp = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + Sequence = table.Column(type: "NUMBER(19)", nullable: false), + EventName = table.Column(type: "NVARCHAR2(450)", nullable: true), + Message = table.Column(type: "NVARCHAR2(2000)", nullable: true), + Source = table.Column(type: "NVARCHAR2(2000)", nullable: true), + SerializedActivityState = table.Column(type: "NCLOB", nullable: true), + SerializedPayload = table.Column(type: "NCLOB", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityTypeName = table.Column(type: "NVARCHAR2(450)", nullable: false), + Hash = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: true), + CorrelationId = table.Column(type: "NVARCHAR2(450)", nullable: true), + ActivityInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: true), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + ExpiresAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + SerializedBookmarkPayload = table.Column(type: "NCLOB", nullable: true), + SerializedInput = table.Column(type: "NCLOB", nullable: true), + TenantId = table.Column(type: "NVARCHAR2(2000)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInboxMessages", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityName", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityNodeId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_CompletedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_HasBookmarks", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "HasBookmarks"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_StartedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_Status", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityTypeName", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_BookmarkId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "BookmarkId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CorrelationId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CreatedAt", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_StimulusHash", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "StimulusHash"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_TenantId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_WorkflowInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_CreatedAt", + schema: _schema.Schema, + table: "Bookmarks", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Hash", + schema: _schema.Schema, + table: "Bookmarks", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Hash", + schema: _schema.Schema, + table: "Triggers", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Name", + schema: _schema.Schema, + table: "Triggers", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityNodeId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_EventName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "EventName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ParentActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ParentActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Sequence"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Timestamp"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "Timestamp", "Sequence" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityTypeName", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ExpiresAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ExpiresAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_Hash", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "BookmarkQueueItems", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Bookmarks", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "KeyValuePairs", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Triggers", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250222190848_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250222190848_V3_4.Designer.cs new file mode 100644 index 0000000..cdc6ccb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250222190848_V3_4.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250222190848_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("HasBookmarks") + .HasColumnType("BOOLEAN"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedException") + .HasColumnType("NCLOB"); + + b.Property("SerializedOutputs") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedProperties") + .HasColumnType("NCLOB"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BookmarkId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedOptions") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StimulusHash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Hash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("EventName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Message") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Sequence") + .HasColumnType("NUMBER(19)"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("Source") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Timestamp") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("ExpiresAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedInput") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250222190848_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250222190848_V3_4.cs new file mode 100644 index 0000000..bc45640 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250222190848_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250530105102_V3_5.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250530105102_V3_5.Designer.cs new file mode 100644 index 0000000..47c4997 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250530105102_V3_5.Designer.cs @@ -0,0 +1,506 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250530105102_V3_5")] + partial class V3_5 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("AggregateFaultCount") + .HasColumnType("NUMBER(10)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("HasBookmarks") + .HasColumnType("BOOLEAN"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedException") + .HasColumnType("NCLOB"); + + b.Property("SerializedMetadata") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedOutputs") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedProperties") + .HasColumnType("NCLOB"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BookmarkId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedOptions") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StimulusHash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Hash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("EventName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Message") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Sequence") + .HasColumnType("NUMBER(19)"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("Source") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Timestamp") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("ExpiresAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedInput") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250530105102_V3_5.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250530105102_V3_5.cs new file mode 100644 index 0000000..3c188df --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/20250530105102_V3_5.cs @@ -0,0 +1,116 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + /// + public partial class V3_5 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_5(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "NVARCHAR2(450)", + nullable: true, + oldClrType: typeof(string), + oldType: "NVARCHAR2(450)"); + + migrationBuilder.AddColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks", + type: "NVARCHAR2(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "NUMBER(10)", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "NVARCHAR2(2000)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash", "WorkflowInstanceId" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "NVARCHAR2(450)", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "NVARCHAR2(450)", + oldNullable: true); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..edbdd4c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs @@ -0,0 +1,503 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + partial class RuntimeElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("AggregateFaultCount") + .HasColumnType("NUMBER(10)"); + + b.Property("CompletedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("HasBookmarks") + .HasColumnType("BOOLEAN"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedException") + .HasColumnType("NCLOB"); + + b.Property("SerializedMetadata") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("SerializedOutputs") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedProperties") + .HasColumnType("NCLOB"); + + b.Property("StartedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Status") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("BookmarkId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("SerializedOptions") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("StimulusHash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Hash") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("NUMBER(10)"); + + b.Property("EventName") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Message") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Sequence") + .HasColumnType("NUMBER(19)"); + + b.Property("SerializedActivityState") + .HasColumnType("NCLOB"); + + b.Property("SerializedPayload") + .HasColumnType("NCLOB"); + + b.Property("Source") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Timestamp") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("ExpiresAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("NCLOB"); + + b.Property("SerializedInput") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250131233503_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250131233503_V3_3.Designer.cs new file mode 100644 index 0000000..447cd1e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250131233503_V3_3.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20250131233503_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250131233503_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250131233503_V3_3.cs new file mode 100644 index 0000000..1860609 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250131233503_V3_3.cs @@ -0,0 +1,60 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Tenants +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "Tenants", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + Name = table.Column(type: "NVARCHAR2(450)", nullable: false), + Configuration = table.Column(type: "NVARCHAR2(2000)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Tenants", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Name", + schema: _schema.Schema, + table: "Tenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_TenantId", + schema: _schema.Schema, + table: "Tenants", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Tenants", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250222191027_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250222191027_V3_4.Designer.cs new file mode 100644 index 0000000..9c77560 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250222191027_V3_4.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20250222191027_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250222191027_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250222191027_V3_4.cs new file mode 100644 index 0000000..d5d0cbc --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/20250222191027_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Tenants +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..7904152 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs @@ -0,0 +1,54 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + partial class TenantsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/OracleProvidersExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/OracleProvidersExtensions.cs new file mode 100644 index 0000000..8d800c5 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/OracleProvidersExtensions.cs @@ -0,0 +1,87 @@ +using System.Reflection; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Oracle.Configurations; +using Elsa.Workflows.Management.Entities; +using Elsa.Workflows.Runtime.Entities; +using JetBrains.Annotations; +using Oracle.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to configure EF Core to use Oracle. +/// +[PublicAPI] +public static class OracleProvidersExtensions +{ + private static Assembly Assembly => typeof(OracleProvidersExtensions).Assembly; + + public static TFeature UseOracle(this PersistenceFeatureBase feature, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseOracle(Assembly, connectionString, options, configure); + } + + public static TFeature UseOracle(this PersistenceFeatureBase feature, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null + ) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseOracle(Assembly, connectionStringFunc, options, configure); + } + + public static TFeature UseOracle(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null + ) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseOracle(migrationsAssembly, _ => connectionString, options, configure); + } + + public static TFeature UseOracle(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null + ) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + options ??= new(); + options.Configure(); + feature.DbContextOptionsBuilder = (sp, db) => db.UseElsaOracle(migrationsAssembly, connectionStringFunc(sp), options, configure: configure); + return (TFeature)feature; + } + + public static ElsaDbContextOptions Configure(this ElsaDbContextOptions options) + { + var management = new Management(); + var runtime = new Runtime(); + + options.ConfigureModel(modelBuilder => modelBuilder + .ApplyConfiguration(management) + .ApplyConfiguration(management)); + + options.ConfigureModel(modelBuilder => modelBuilder + .ApplyConfiguration(runtime) + .ApplyConfiguration(runtime) + .ApplyConfiguration(runtime) + .ApplyConfiguration(runtime) + .ApplyConfiguration(runtime)); + + return options; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/DbContextFactories.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/DbContextFactories.cs new file mode 100644 index 0000000..dfe77cf --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/DbContextFactories.cs @@ -0,0 +1,40 @@ +using Elsa.EntityFrameworkCore.Abstractions; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Elsa.EntityFrameworkCore.Modules.Identity; +using Elsa.EntityFrameworkCore.Modules.Labels; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Modules.Tenants; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Elsa.EntityFrameworkCore.PostgreSql; + +[UsedImplicitly] +public class IdentityDbContextFactory : PostgreSqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class ManagementDbContextFactory : PostgreSqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class RuntimeDbContextFactory : PostgreSqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class LabelsDbContextFactory : PostgreSqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class AlterationsDbContextFactories : PostgreSqlDesignTimeDbContextFactory; + +[UsedImplicitly] +public class TenantsDbContextFactories : PostgreSqlDesignTimeDbContextFactory; + +public class PostgreSqlDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase where TDbContext : DbContext +{ + protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) + { + builder.UseElsaPostgreSql(GetType().Assembly, connectionString); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/DbContextOptionsBuilder.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/DbContextOptionsBuilder.cs new file mode 100644 index 0000000..20d2fd2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/DbContextOptionsBuilder.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Contains extension methods for . +/// +public static class DbContextOptionsBuilderExtensions +{ + /// + /// Configures Entity Framework Core with PostgreSQL. + /// + public static DbContextOptionsBuilder UseElsaPostgreSql(this DbContextOptionsBuilder builder, Assembly migrationsAssembly, string connectionString, ElsaDbContextOptions? options = default, Action? configure = default) => + builder + .UseElsaDbContextOptions(options) + .UseNpgsql(connectionString, db => + { + db + .MigrationsAssembly(options.GetMigrationsAssemblyName(migrationsAssembly)) + .MigrationsHistoryTable(options.GetMigrationsHistoryTableName(), options.GetSchemaName()); + + configure?.Invoke(db); + }); + +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Elsa.EntityFrameworkCore.PostgreSql.csproj b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Elsa.EntityFrameworkCore.PostgreSql.csproj new file mode 100644 index 0000000..e0f1c22 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Elsa.EntityFrameworkCore.PostgreSql.csproj @@ -0,0 +1,19 @@ + + + + + Provides PostgreSQL EF Core migrations for various modules. + + elsa module persistence efcore postgresql + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Handlers/DbExceptionTransformer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Handlers/DbExceptionTransformer.cs new file mode 100644 index 0000000..ea78b50 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Handlers/DbExceptionTransformer.cs @@ -0,0 +1,22 @@ +using Elsa.Workflows.Exceptions; +using JetBrains.Annotations; +using Npgsql; + +namespace Elsa.EntityFrameworkCore.PostgreSql.Handlers; + +/// +/// Transforms database exceptions encountered when using a postgreSQL database into more generic exceptions. +/// +[UsedImplicitly] +public class DbExceptionTransformer : IDbExceptionHandler +{ + public Task HandleAsync(DbUpdateExceptionContext context) + { + var exception = context.Exception; + + if (exception.InnerException is PostgresException { SqlState: "23505" }) + throw new UniqueKeyConstraintViolationException("Unable to save data", exception); + + throw new DataProcessingException("Unable to save data", exception); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/MigrationHelper.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/MigrationHelper.cs new file mode 100644 index 0000000..3bf44d1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/MigrationHelper.cs @@ -0,0 +1,85 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Elsa.EntityFrameworkCore.PostgreSql; + +public static class MigrationHelper +{ + public static void AlterColumnDateTime(MigrationBuilder migrationBuilder, IElsaDbContextSchema schema, string tableName, string columnName, bool nullable) + { + migrationBuilder.AddColumn( + name: $"{columnName}Temp", + schema: schema.Schema, + table: tableName, + type: "timestamptz", + nullable: true); + + migrationBuilder.Sql( + $""" + UPDATE "{schema.Schema}"."{tableName}" + SET "{columnName}Temp" = to_timestamp("{columnName}", 'YYYY-MM-DD HH24:MI:SS.US') AT TIME ZONE 'UTC' + WHERE "{columnName}" IS NOT NULL + """); + + migrationBuilder.DropColumn( + name: columnName, + schema: schema.Schema, + table: tableName); + + migrationBuilder.RenameColumn( + name: $"{columnName}Temp", + schema: schema.Schema, + table: tableName, + newName: columnName); + + migrationBuilder.AlterColumn( + name: columnName, + schema: schema.Schema, + table: tableName, + type: "timestamptz", + nullable: nullable, + oldClrType: typeof(DateTimeOffset), + oldNullable: nullable); + } + + public static void AlterColumnBoolean(MigrationBuilder migrationBuilder, IElsaDbContextSchema schema, string tableName, string columnName, bool nullable) + { + // Step 1: Add a new temporary nullable column + migrationBuilder.AddColumn( + name: $"{columnName}Temp", + schema: schema.Schema, + table: tableName, + type: "boolean", + nullable: nullable); + + // Step 2: Update the temporary column with converted values from the original column + migrationBuilder.Sql( + $""" + UPDATE "{schema.Schema}"."{tableName}" + SET "{columnName}Temp" = CASE WHEN "{columnName}" = 1 THEN TRUE ELSE FALSE END + WHERE "{columnName}" IS NOT NULL + """); + + // Step 3: Drop the original column + migrationBuilder.DropColumn( + name: columnName, + schema: schema.Schema, + table: tableName); + + // Step 4: Rename the temporary column to the original column name + migrationBuilder.RenameColumn( + name: $"{columnName}Temp", + schema: schema.Schema, + table: tableName, + newName: columnName); + + // Step 5: Alter the new column to be non-nullable + migrationBuilder.AlterColumn( + name: columnName, + schema: schema.Schema, + table: tableName, + type: "boolean", + nullable: nullable, + oldClrType: typeof(bool), + oldNullable: true); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20231015122203_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20231015122203_Initial.Designer.cs new file mode 100644 index 0000000..1680ce7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20231015122203_Initial.Designer.cs @@ -0,0 +1,122 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20231015122203_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedLog") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedAlterations") + .HasColumnType("text"); + + b.Property("SerializedWorkflowInstanceIds") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20231015122203_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20231015122203_Initial.cs new file mode 100644 index 0000000..56afae7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20231015122203_Initial.cs @@ -0,0 +1,132 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "AlterationJobs", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + PlanId = table.Column(type: "text", nullable: false), + WorkflowInstanceId = table.Column(type: "text", nullable: false), + Status = table.Column(type: "integer", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + StartedAt = table.Column(type: "timestamp with time zone", nullable: true), + CompletedAt = table.Column(type: "timestamp with time zone", nullable: true), + SerializedLog = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationJobs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AlterationPlans", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Status = table.Column(type: "integer", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + StartedAt = table.Column(type: "timestamp with time zone", nullable: true), + CompletedAt = table.Column(type: "timestamp with time zone", nullable: true), + SerializedAlterations = table.Column(type: "text", nullable: true), + SerializedWorkflowInstanceIds = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationPlans", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CompletedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CreatedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_PlanId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "PlanId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_StartedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_Status", + schema: _schema.Schema, + table: "AlterationJobs", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_WorkflowInstanceId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CompletedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CreatedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_StartedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_Status", + schema: _schema.Schema, + table: "AlterationPlans", + column: "Status"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AlterationJobs", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "AlterationPlans", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240329200643_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240329200643_V3_1.Designer.cs new file mode 100644 index 0000000..337987f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240329200643_V3_1.Designer.cs @@ -0,0 +1,124 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240329200643_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedLog") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedAlterations") + .HasColumnType("text"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240329200643_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240329200643_V3_1.cs new file mode 100644 index 0000000..ccb181c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240329200643_V3_1.cs @@ -0,0 +1,74 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceIds", + schema: _schema.Schema, + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceFilter"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationPlans", + type: "text", + nullable: false, + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationJobs", + type: "text", + nullable: false, + oldClrType: typeof(int), + oldType: "integer"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceFilter", + schema: _schema.Schema, + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceIds"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationPlans", + type: "integer", + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationJobs", + type: "integer", + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240610184626_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240610184626_V3_2.Designer.cs new file mode 100644 index 0000000..19292f0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240610184626_V3_2.Designer.cs @@ -0,0 +1,124 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240610184626_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedLog") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedAlterations") + .HasColumnType("text"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240610184626_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240610184626_V3_2.cs new file mode 100644 index 0000000..28f51ff --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20240610184626_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20241212211604_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20241212211604_V3_3.Designer.cs new file mode 100644 index 0000000..7637559 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20241212211604_V3_3.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20241212211604_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedLog") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedAlterations") + .HasColumnType("text"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20241212211604_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20241212211604_V3_3.cs new file mode 100644 index 0000000..1569247 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20241212211604_V3_3.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans"); + + migrationBuilder.DropIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationPlans"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationJobs"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20250222190820_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20250222190820_V3_4.Designer.cs new file mode 100644 index 0000000..04e5d99 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20250222190820_V3_4.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20250222190820_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedLog") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedAlterations") + .HasColumnType("text"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20250222190820_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20250222190820_V3_4.cs new file mode 100644 index 0000000..1856fbf --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/20250222190820_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..f77b90c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs @@ -0,0 +1,133 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + partial class AlterationsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedLog") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedAlterations") + .HasColumnType("text"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20231015122250_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20231015122250_Initial.Designer.cs new file mode 100644 index 0000000..c180e54 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20231015122250_Initial.Designer.cs @@ -0,0 +1,131 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20231015122250_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20231015122250_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20231015122250_Initial.cs new file mode 100644 index 0000000..67020c9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20231015122250_Initial.cs @@ -0,0 +1,116 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "Applications", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + ClientId = table.Column(type: "text", nullable: false), + HashedClientSecret = table.Column(type: "text", nullable: false), + HashedClientSecretSalt = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + HashedApiKey = table.Column(type: "text", nullable: false), + HashedApiKeySalt = table.Column(type: "text", nullable: false), + Roles = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Applications", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Roles", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + Permissions = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Roles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + HashedPassword = table.Column(type: "text", nullable: false), + HashedPasswordSalt = table.Column(type: "text", nullable: false), + Roles = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Application_ClientId", + schema: _schema.Schema, + table: "Applications", + column: "ClientId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Application_Name", + schema: _schema.Schema, + table: "Applications", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Role_Name", + schema: _schema.Schema, + table: "Roles", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_User_Name", + schema: _schema.Schema, + table: "Users", + column: "Name", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Applications", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Roles", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Users", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240329200810_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240329200810_V3_1.Designer.cs new file mode 100644 index 0000000..d287259 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240329200810_V3_1.Designer.cs @@ -0,0 +1,131 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240329200810_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240329200810_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240329200810_V3_1.cs new file mode 100644 index 0000000..f6f30f7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240329200810_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240610184941_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240610184941_V3_2.Designer.cs new file mode 100644 index 0000000..1b341e0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240610184941_V3_2.Designer.cs @@ -0,0 +1,131 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240610184941_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240610184941_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240610184941_V3_2.cs new file mode 100644 index 0000000..d06fe1b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20240610184941_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20241212211900_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20241212211900_V3_3.Designer.cs new file mode 100644 index 0000000..29c5e3a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20241212211900_V3_3.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20241212211900_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20241212211900_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20241212211900_V3_3.cs new file mode 100644 index 0000000..67cc997 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20241212211900_V3_3.cs @@ -0,0 +1,95 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Users", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Roles", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Applications", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles"); + + migrationBuilder.DropIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Users"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Roles"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Applications"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20250222190930_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20250222190930_V3_4.Designer.cs new file mode 100644 index 0000000..99defc0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20250222190930_V3_4.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20250222190930_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20250222190930_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20250222190930_V3_4.cs new file mode 100644 index 0000000..74e6d8a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/20250222190930_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..9b7328e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs @@ -0,0 +1,146 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + partial class IdentityElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20231015122304_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20231015122304_Initial.Designer.cs new file mode 100644 index 0000000..c16ca36 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20231015122304_Initial.Designer.cs @@ -0,0 +1,85 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20231015122304_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Color") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20231015122304_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20231015122304_Initial.cs new file mode 100644 index 0000000..e49d4ca --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20231015122304_Initial.cs @@ -0,0 +1,84 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "Labels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + NormalizedName = table.Column(type: "text", nullable: false), + Description = table.Column(type: "text", nullable: true), + Color = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Labels", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + WorkflowDefinitionId = table.Column(type: "text", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "text", nullable: false), + LabelId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitionLabels", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_LabelId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "LabelId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionVersionId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Labels", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240329200841_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240329200841_V3_1.Designer.cs new file mode 100644 index 0000000..4d06c6a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240329200841_V3_1.Designer.cs @@ -0,0 +1,85 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240329200841_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Color") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240329200841_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240329200841_V3_1.cs new file mode 100644 index 0000000..84c472b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240329200841_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240610185037_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240610185037_V3_2.Designer.cs new file mode 100644 index 0000000..280ac5e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240610185037_V3_2.Designer.cs @@ -0,0 +1,85 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240610185037_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Color") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240610185037_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240610185037_V3_2.cs new file mode 100644 index 0000000..e41d8e4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20240610185037_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20241212212046_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20241212212046_V3_3.Designer.cs new file mode 100644 index 0000000..73348b8 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20241212212046_V3_3.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20241212212046_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Color") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20241212212046_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20241212212046_V3_3.cs new file mode 100644 index 0000000..0f84786 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20241212212046_V3_3.cs @@ -0,0 +1,61 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Labels", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Labels"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20250222190956_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20250222190956_V3_4.Designer.cs new file mode 100644 index 0000000..c9675b5 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20250222190956_V3_4.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20250222190956_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Color") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20250222190956_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20250222190956_V3_4.cs new file mode 100644 index 0000000..a7981ca --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/20250222190956_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..325f9fe --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs @@ -0,0 +1,91 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + partial class LabelsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Color") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20231015122234_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20231015122234_Initial.Designer.cs new file mode 100644 index 0000000..d6beea7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20231015122234_Initial.Designer.cs @@ -0,0 +1,196 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20231015122234_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BinaryData") + .HasColumnType("bytea"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("IsLatest") + .HasColumnType("boolean"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("IsReadonly") + .HasColumnType("boolean"); + + b.Property("MaterializerContext") + .HasColumnType("text"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProviderName") + .HasColumnType("text"); + + b.Property("StringData") + .HasColumnType("text"); + + b.Property("ToolVersion") + .HasColumnType("text"); + + b.Property("UsableAsActivity") + .HasColumnType("boolean"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("FinishedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("IncidentCount") + .HasColumnType("integer"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20231015122234_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20231015122234_Initial.cs new file mode 100644 index 0000000..70940f2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20231015122234_Initial.cs @@ -0,0 +1,196 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitions", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + DefinitionId = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: true), + Description = table.Column(type: "text", nullable: true), + ToolVersion = table.Column(type: "text", nullable: true), + ProviderName = table.Column(type: "text", nullable: true), + MaterializerName = table.Column(type: "text", nullable: false), + MaterializerContext = table.Column(type: "text", nullable: true), + StringData = table.Column(type: "text", nullable: true), + BinaryData = table.Column(type: "bytea", nullable: true), + IsReadonly = table.Column(type: "boolean", nullable: false), + Data = table.Column(type: "text", nullable: true), + UsableAsActivity = table.Column(type: "boolean", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + Version = table.Column(type: "integer", nullable: false), + IsLatest = table.Column(type: "boolean", nullable: false), + IsPublished = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInstances", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + DefinitionId = table.Column(type: "text", nullable: false), + DefinitionVersionId = table.Column(type: "text", nullable: false), + Version = table.Column(type: "integer", nullable: false), + Status = table.Column(type: "text", nullable: false), + SubStatus = table.Column(type: "text", nullable: false), + CorrelationId = table.Column(type: "text", nullable: true), + Name = table.Column(type: "text", nullable: true), + IncidentCount = table.Column(type: "integer", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false), + FinishedAt = table.Column(type: "timestamp with time zone", nullable: true), + Data = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInstances", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + columns: new[] { "DefinitionId", "Version" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsLatest", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsLatest"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsPublished", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsPublished"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Name", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_UsableAsActivity", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "UsableAsActivity"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Version"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "DefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FinishedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "FinishedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Name", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus", "DefinitionId", "Version" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "SubStatus"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "SubStatus", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_UpdatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "UpdatedAt"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "WorkflowDefinitions", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInstances", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240329200740_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240329200740_V3_1.Designer.cs new file mode 100644 index 0000000..2aee77f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240329200740_V3_1.Designer.cs @@ -0,0 +1,214 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240329200740_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BinaryData") + .HasColumnType("bytea"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("IsLatest") + .HasColumnType("boolean"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("IsReadonly") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("MaterializerContext") + .HasColumnType("text"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProviderName") + .HasColumnType("text"); + + b.Property("StringData") + .HasColumnType("text"); + + b.Property("ToolVersion") + .HasColumnType("text"); + + b.Property("UsableAsActivity") + .HasColumnType("boolean"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("FinishedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("IncidentCount") + .HasColumnType("integer"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("text"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240329200740_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240329200740_V3_1.cs new file mode 100644 index 0000000..dcc4b0e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240329200740_V3_1.cs @@ -0,0 +1,98 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DataCompressionAlgorithm", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ParentWorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsSystem"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsSystem"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "DataCompressionAlgorithm", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "ParentWorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240610184839_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240610184839_V3_2.Designer.cs new file mode 100644 index 0000000..8484325 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240610184839_V3_2.Designer.cs @@ -0,0 +1,214 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240610184839_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BinaryData") + .HasColumnType("bytea"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("IsLatest") + .HasColumnType("boolean"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("IsReadonly") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("MaterializerContext") + .HasColumnType("text"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProviderName") + .HasColumnType("text"); + + b.Property("StringData") + .HasColumnType("text"); + + b.Property("ToolVersion") + .HasColumnType("text"); + + b.Property("UsableAsActivity") + .HasColumnType("boolean"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("FinishedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("IncidentCount") + .HasColumnType("integer"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("text"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240610184839_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240610184839_V3_2.cs new file mode 100644 index 0000000..5ca565d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20240610184839_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20241212211805_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20241212211805_V3_3.Designer.cs new file mode 100644 index 0000000..b24d641 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20241212211805_V3_3.Designer.cs @@ -0,0 +1,226 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20241212211805_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BinaryData") + .HasColumnType("bytea"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("IsLatest") + .HasColumnType("boolean"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("IsReadonly") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("MaterializerContext") + .HasColumnType("text"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProviderName") + .HasColumnType("text"); + + b.Property("StringData") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("ToolVersion") + .HasColumnType("text"); + + b.Property("UsableAsActivity") + .HasColumnType("boolean"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("FinishedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("IncidentCount") + .HasColumnType("integer"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("text"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20241212211805_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20241212211805_V3_3.cs new file mode 100644 index 0000000..c423fd7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20241212211805_V3_3.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20250222190906_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20250222190906_V3_4.Designer.cs new file mode 100644 index 0000000..663e348 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20250222190906_V3_4.Designer.cs @@ -0,0 +1,232 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20250222190906_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BinaryData") + .HasColumnType("bytea"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("IsLatest") + .HasColumnType("boolean"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("IsReadonly") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("MaterializerContext") + .HasColumnType("text"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProviderName") + .HasColumnType("text"); + + b.Property("StringData") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("ToolVersion") + .HasColumnType("text"); + + b.Property("UsableAsActivity") + .HasColumnType("boolean"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("FinishedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("IncidentCount") + .HasColumnType("integer"); + + b.Property("IsExecuting") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("text"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20250222190906_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20250222190906_V3_4.cs new file mode 100644 index 0000000..c9038ff --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/20250222190906_V3_4.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsExecuting"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..41be03c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs @@ -0,0 +1,229 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + partial class ManagementElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BinaryData") + .HasColumnType("bytea"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("IsLatest") + .HasColumnType("boolean"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("IsReadonly") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("MaterializerContext") + .HasColumnType("text"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProviderName") + .HasColumnType("text"); + + b.Property("StringData") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("ToolVersion") + .HasColumnType("text"); + + b.Property("UsableAsActivity") + .HasColumnType("boolean"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Data") + .HasColumnType("text"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("FinishedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("IncidentCount") + .HasColumnType("integer"); + + b.Property("IsExecuting") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("text"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20231024160952_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20231024160952_Initial.Designer.cs new file mode 100644 index 0000000..8f36741 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20231024160952_Initial.Designer.cs @@ -0,0 +1,388 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20231024160952_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20231024160952_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20231024160952_Initial.cs new file mode 100644 index 0000000..8412c64 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20231024160952_Initial.cs @@ -0,0 +1,432 @@ +using Elsa.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + WorkflowInstanceId = table.Column(type: "text", nullable: false), + ActivityId = table.Column(type: "text", nullable: false), + ActivityNodeId = table.Column(type: "text", nullable: false), + ActivityType = table.Column(type: "text", nullable: false), + ActivityTypeVersion = table.Column(type: "integer", nullable: false), + ActivityName = table.Column(type: "text", nullable: true), + StartedAt = table.Column(type: "timestamp with time zone", nullable: false), + HasBookmarks = table.Column(type: "boolean", nullable: false), + Status = table.Column(type: "text", nullable: false), + CompletedAt = table.Column(type: "timestamp with time zone", nullable: true), + SerializedActivityState = table.Column(type: "text", nullable: true), + SerializedException = table.Column(type: "text", nullable: true), + SerializedOutputs = table.Column(type: "text", nullable: true), + SerializedPayload = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ActivityExecutionRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Bookmarks", + schema: _schema.Schema, + columns: table => new + { + BookmarkId = table.Column(type: "text", nullable: false), + ActivityTypeName = table.Column(type: "text", nullable: false), + Hash = table.Column(type: "text", nullable: false), + WorkflowInstanceId = table.Column(type: "text", nullable: false), + ActivityInstanceId = table.Column(type: "text", nullable: true), + CorrelationId = table.Column(type: "text", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + SerializedMetadata = table.Column(type: "text", nullable: true), + SerializedPayload = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.BookmarkId); + }); + + migrationBuilder.CreateTable( + name: "Triggers", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + WorkflowDefinitionId = table.Column(type: "text", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + ActivityId = table.Column(type: "text", nullable: false), + Hash = table.Column(type: "text", nullable: true), + SerializedPayload = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Triggers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + WorkflowDefinitionId = table.Column(type: "text", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "text", nullable: false), + WorkflowInstanceId = table.Column(type: "text", nullable: false), + WorkflowVersion = table.Column(type: "integer", nullable: false), + ActivityInstanceId = table.Column(type: "text", nullable: false), + ParentActivityInstanceId = table.Column(type: "text", nullable: true), + ActivityId = table.Column(type: "text", nullable: false), + ActivityType = table.Column(type: "text", nullable: false), + ActivityTypeVersion = table.Column(type: "integer", nullable: false), + ActivityName = table.Column(type: "text", nullable: true), + ActivityNodeId = table.Column(type: "text", nullable: false), + Timestamp = table.Column(type: "timestamp with time zone", nullable: false), + Sequence = table.Column(type: "bigint", nullable: false), + EventName = table.Column(type: "text", nullable: true), + Message = table.Column(type: "text", nullable: true), + Source = table.Column(type: "text", nullable: true), + SerializedActivityState = table.Column(type: "text", nullable: true), + SerializedPayload = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + ActivityTypeName = table.Column(type: "text", nullable: false), + Hash = table.Column(type: "text", nullable: false), + WorkflowInstanceId = table.Column(type: "text", nullable: true), + CorrelationId = table.Column(type: "text", nullable: true), + ActivityInstanceId = table.Column(type: "text", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + ExpiresAt = table.Column(type: "timestamp with time zone", nullable: false), + SerializedBookmarkPayload = table.Column(type: "text", nullable: true), + SerializedInput = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInboxMessages", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityName", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityNodeId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_CompletedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_HasBookmarks", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "HasBookmarks"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_StartedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_Status", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_CreatedAt", + schema: _schema.Schema, + table: "Bookmarks", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Hash", + schema: _schema.Schema, + table: "Bookmarks", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Hash", + schema: _schema.Schema, + table: "Triggers", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Name", + schema: _schema.Schema, + table: "Triggers", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityNodeId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_EventName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "EventName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ParentActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ParentActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Sequence"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Timestamp"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "Timestamp", "Sequence" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityTypeName", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ExpiresAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ExpiresAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_Hash", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Bookmarks", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Triggers", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240329200711_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240329200711_V3_1.Designer.cs new file mode 100644 index 0000000..ff9ba2d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240329200711_V3_1.Designer.cs @@ -0,0 +1,408 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240329200711_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("text"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("SerializedProperties") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240329200711_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240329200711_V3_1.cs new file mode 100644 index 0000000..821d29f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240329200711_V3_1.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + /// + public partial class V3_1 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_1(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "SerializedActivityStateCompressionAlgorithm", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "SerializedProperties", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "text", + nullable: true); + + migrationBuilder.CreateTable( + name: "KeyValuePairs", + schema: _schema.Schema, + columns: table => new + { + Key = table.Column(type: "text", nullable: false), + SerializedValue = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_KeyValuePairs", x => x.Key); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "KeyValuePairs", + schema: _schema.Schema); + + migrationBuilder.DropColumn( + name: "SerializedActivityStateCompressionAlgorithm", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedProperties", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240610184748_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240610184748_V3_2.Designer.cs new file mode 100644 index 0000000..c9cd11a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240610184748_V3_2.Designer.cs @@ -0,0 +1,408 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240610184748_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("text"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("SerializedProperties") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240610184748_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240610184748_V3_2.cs new file mode 100644 index 0000000..d61e4ae --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20240610184748_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + /// + public partial class V3_2 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_2(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250116192950_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250116192950_V3_3.Designer.cs new file mode 100644 index 0000000..05fe774 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250116192950_V3_3.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250116192950_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("SerializedProperties") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .HasColumnType("text"); + + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedOptions") + .HasColumnType("text"); + + b.Property("StimulusHash") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250116192950_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250116192950_V3_3.cs new file mode 100644 index 0000000..f9b7938 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250116192950_V3_3.cs @@ -0,0 +1,251 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "Key", + schema: _schema.Schema, + table: "KeyValuePairs", + newName: "Id"); + + migrationBuilder.RenameColumn( + name: "BookmarkId", + schema: _schema.Schema, + table: "Bookmarks", + newName: "Id"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Triggers", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Bookmarks", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "text", + nullable: true); + + migrationBuilder.CreateTable( + name: "BookmarkQueueItems", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + WorkflowInstanceId = table.Column(type: "text", nullable: true), + CorrelationId = table.Column(type: "text", nullable: true), + BookmarkId = table.Column(type: "text", nullable: true), + StimulusHash = table.Column(type: "text", nullable: true), + ActivityInstanceId = table.Column(type: "text", nullable: true), + ActivityTypeName = table.Column(type: "text", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + SerializedOptions = table.Column(type: "text", nullable: true), + TenantId = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BookmarkQueueItems", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityTypeName", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_BookmarkId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "BookmarkId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CorrelationId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CreatedAt", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_StimulusHash", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "StimulusHash"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_TenantId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_WorkflowInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BookmarkQueueItems", + schema: _schema.Schema); + + migrationBuilder.DropIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers"); + + migrationBuilder.DropIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInboxMessages"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Triggers"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "KeyValuePairs"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.RenameColumn( + name: "Id", + schema: _schema.Schema, + table: "KeyValuePairs", + newName: "Key"); + + migrationBuilder.RenameColumn( + name: "Id", + schema: _schema.Schema, + table: "Bookmarks", + newName: "BookmarkId"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250222190844_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250222190844_V3_4.Designer.cs new file mode 100644 index 0000000..16e0b57 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250222190844_V3_4.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250222190844_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("SerializedProperties") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .HasColumnType("text"); + + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedOptions") + .HasColumnType("text"); + + b.Property("StimulusHash") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250222190844_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250222190844_V3_4.cs new file mode 100644 index 0000000..6c834fa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250222190844_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250530104953_V3_5.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250530104953_V3_5.Designer.cs new file mode 100644 index 0000000..a902f8d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250530104953_V3_5.Designer.cs @@ -0,0 +1,506 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250530104953_V3_5")] + partial class V3_5 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("AggregateFaultCount") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("SerializedProperties") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .HasColumnType("text"); + + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedOptions") + .HasColumnType("text"); + + b.Property("StimulusHash") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250530104953_V3_5.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250530104953_V3_5.cs new file mode 100644 index 0000000..c92b9fd --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/20250530104953_V3_5.cs @@ -0,0 +1,116 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + /// + public partial class V3_5 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_5(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AddColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "integer", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash", "WorkflowInstanceId" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..a65fd1b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs @@ -0,0 +1,503 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + partial class RuntimeElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("AggregateFaultCount") + .HasColumnType("integer"); + + b.Property("CompletedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("HasBookmarks") + .HasColumnType("boolean"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("text"); + + b.Property("SerializedException") + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedOutputs") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("SerializedProperties") + .HasColumnType("text"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .HasColumnType("text"); + + b.Property("BookmarkId") + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SerializedOptions") + .HasColumnType("text"); + + b.Property("StimulusHash") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("SerializedMetadata") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Hash") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityName") + .HasColumnType("text"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ActivityTypeVersion") + .HasColumnType("integer"); + + b.Property("EventName") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("text"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("text"); + + b.Property("SerializedPayload") + .HasColumnType("text"); + + b.Property("Source") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("WorkflowVersion") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ActivityInstanceId") + .HasColumnType("text"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorrelationId") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("text"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("text"); + + b.Property("SerializedInput") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.Property("WorkflowInstanceId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20241212212210_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20241212212210_V3_3.Designer.cs new file mode 100644 index 0000000..6dc5140 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20241212212210_V3_3.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20241212212210_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20241212212210_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20241212212210_V3_3.cs new file mode 100644 index 0000000..6b0ed9d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20241212212210_V3_3.cs @@ -0,0 +1,60 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Tenants +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: "Elsa"); + + migrationBuilder.CreateTable( + name: "Tenants", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + Configuration = table.Column(type: "text", nullable: false), + TenantId = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Tenants", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Name", + schema: _schema.Schema, + table: "Tenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_TenantId", + schema: _schema.Schema, + table: "Tenants", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Tenants", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20250222191022_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20250222191022_V3_4.Designer.cs new file mode 100644 index 0000000..690ac42 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20250222191022_V3_4.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20250222191022_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20250222191022_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20250222191022_V3_4.cs new file mode 100644 index 0000000..8974eaa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/20250222191022_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Tenants +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..4c78037 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs @@ -0,0 +1,54 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.PostgreSql.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + partial class TenantsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs new file mode 100644 index 0000000..713860f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs @@ -0,0 +1,56 @@ +using System.Reflection; +using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to configure EF Core to use PostgreSQL. +/// +public static class PostgreSqlProvidersExtensions +{ + private static Assembly Assembly => typeof(PostgreSqlProvidersExtensions).Assembly; + + public static TFeature UsePostgreSql(this PersistenceFeatureBase feature, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UsePostgreSql(Assembly, connectionString, options, configure); + } + + public static TFeature UsePostgreSql(this PersistenceFeatureBase feature, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UsePostgreSql(Assembly, connectionStringFunc, options, configure); + } + + public static TFeature UsePostgreSql(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UsePostgreSql(migrationsAssembly, _ => connectionString, options, configure); + } + + public static TFeature UsePostgreSql(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + feature.DbContextOptionsBuilder = (sp, db) => db.UseElsaPostgreSql(migrationsAssembly, connectionStringFunc(sp), options, configure: configure); + return (TFeature)feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/DbContextFactories.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/DbContextFactories.cs new file mode 100644 index 0000000..389dfea --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/DbContextFactories.cs @@ -0,0 +1,40 @@ +using Elsa.EntityFrameworkCore.Abstractions; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Elsa.EntityFrameworkCore.Modules.Identity; +using Elsa.EntityFrameworkCore.Modules.Labels; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Modules.Tenants; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Elsa.EntityFrameworkCore.SqlServer; + +[UsedImplicitly] +public class IdentityDbContextFactory : SqlServerDesignTimeDbContextFactory; + +[UsedImplicitly] +public class ManagementDbContextFactory : SqlServerDesignTimeDbContextFactory; + +[UsedImplicitly] +public class RuntimeDbContextFactory : SqlServerDesignTimeDbContextFactory; + +[UsedImplicitly] +public class LabelsDbContextFactory : SqlServerDesignTimeDbContextFactory; + +[UsedImplicitly] +public class AlterationsDbContextFactories : SqlServerDesignTimeDbContextFactory; + +[UsedImplicitly] +public class TenantsDbContextFactories : SqlServerDesignTimeDbContextFactory; + +public class SqlServerDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase where TDbContext : DbContext +{ + protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) + { + builder.UseElsaSqlServer(GetType().Assembly, connectionString); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/DbContextOptionsBuilderExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/DbContextOptionsBuilderExtensions.cs new file mode 100644 index 0000000..437a7e0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/DbContextOptionsBuilderExtensions.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Contains extension methods for . +/// +public static class DbContextOptionsBuilderExtensions +{ + /// + /// Configures Entity Framework Core with SQL Server. + /// + public static DbContextOptionsBuilder UseElsaSqlServer(this DbContextOptionsBuilder builder, Assembly migrationsAssembly, string connectionString, ElsaDbContextOptions? options = default, Action? configure = default) => + builder + .UseElsaDbContextOptions(options) + .UseSqlServer(connectionString, db => + { + db + .MigrationsAssembly(options.GetMigrationsAssemblyName(migrationsAssembly)) + .MigrationsHistoryTable(options.GetMigrationsHistoryTableName(), options.GetSchemaName()); + + configure?.Invoke(db); + }); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Elsa.EntityFrameworkCore.SqlServer.csproj b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Elsa.EntityFrameworkCore.SqlServer.csproj new file mode 100644 index 0000000..6ef2fdb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Elsa.EntityFrameworkCore.SqlServer.csproj @@ -0,0 +1,19 @@ + + + + + Provides SQL Server EF Core migrations for various modules. + + elsa module persistence efcore sqlserver + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.SqlServer/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20231015122155_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20231015122155_Initial.Designer.cs new file mode 100644 index 0000000..84e0a38 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20231015122155_Initial.Designer.cs @@ -0,0 +1,122 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20231015122155_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedLog") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedAlterations") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedWorkflowInstanceIds") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20231015122155_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20231015122155_Initial.cs new file mode 100644 index 0000000..704f26e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20231015122155_Initial.cs @@ -0,0 +1,132 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "AlterationJobs", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + PlanId = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "nvarchar(450)", nullable: false), + Status = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + StartedAt = table.Column(type: "datetimeoffset", nullable: true), + CompletedAt = table.Column(type: "datetimeoffset", nullable: true), + SerializedLog = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationJobs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AlterationPlans", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + Status = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + StartedAt = table.Column(type: "datetimeoffset", nullable: true), + CompletedAt = table.Column(type: "datetimeoffset", nullable: true), + SerializedAlterations = table.Column(type: "nvarchar(max)", nullable: true), + SerializedWorkflowInstanceIds = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationPlans", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CompletedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CreatedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_PlanId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "PlanId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_StartedAt", + schema: _schema.Schema, + table: "AlterationJobs", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_Status", + schema: _schema.Schema, + table: "AlterationJobs", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_WorkflowInstanceId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CompletedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CreatedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_StartedAt", + schema: _schema.Schema, + table: "AlterationPlans", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_Status", + schema: _schema.Schema, + table: "AlterationPlans", + column: "Status"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AlterationJobs", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "AlterationPlans", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240329200626_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240329200626_V3_1.Designer.cs new file mode 100644 index 0000000..4d9c32a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240329200626_V3_1.Designer.cs @@ -0,0 +1,124 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240329200626_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedLog") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedAlterations") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240329200626_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240329200626_V3_1.cs new file mode 100644 index 0000000..6da00c1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240329200626_V3_1.cs @@ -0,0 +1,74 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceIds", + schema: _schema.Schema, + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceFilter"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationPlans", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(int), + oldType: "int"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationJobs", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(int), + oldType: "int"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceFilter", + schema: _schema.Schema, + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceIds"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationPlans", + type: "int", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "Status", + schema: _schema.Schema, + table: "AlterationJobs", + type: "int", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240610184545_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240610184545_V3_2.Designer.cs new file mode 100644 index 0000000..bc6ee01 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240610184545_V3_2.Designer.cs @@ -0,0 +1,124 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240610184545_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedLog") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedAlterations") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240610184545_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240610184545_V3_2.cs new file mode 100644 index 0000000..7aa2f7e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20240610184545_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20241212211525_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20241212211525_V3_3.Designer.cs new file mode 100644 index 0000000..afe651c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20241212211525_V3_3.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20241212211525_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedLog") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedAlterations") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20241212211525_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20241212211525_V3_3.cs new file mode 100644 index 0000000..02d8ae9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20241212211525_V3_3.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AlterationPlan_TenantId", + schema: _schema.Schema, + table: "AlterationPlans"); + + migrationBuilder.DropIndex( + name: "IX_AlterationJob_TenantId", + schema: _schema.Schema, + table: "AlterationJobs"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationPlans"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "AlterationJobs"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20250222190810_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20250222190810_V3_4.Designer.cs new file mode 100644 index 0000000..fa0c59b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20250222190810_V3_4.Designer.cs @@ -0,0 +1,136 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20250222190810_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedLog") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedAlterations") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20250222190810_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20250222190810_V3_4.cs new file mode 100644 index 0000000..6d0ee82 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/20250222190810_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..1f21554 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs @@ -0,0 +1,133 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + partial class AlterationsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedLog") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedAlterations") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20231015122242_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20231015122242_Initial.Designer.cs new file mode 100644 index 0000000..5eb6352 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20231015122242_Initial.Designer.cs @@ -0,0 +1,131 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20231015122242_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20231015122242_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20231015122242_Initial.cs new file mode 100644 index 0000000..9f559f2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20231015122242_Initial.cs @@ -0,0 +1,116 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "Applications", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + ClientId = table.Column(type: "nvarchar(450)", nullable: false), + HashedClientSecret = table.Column(type: "nvarchar(max)", nullable: false), + HashedClientSecretSalt = table.Column(type: "nvarchar(max)", nullable: false), + Name = table.Column(type: "nvarchar(450)", nullable: false), + HashedApiKey = table.Column(type: "nvarchar(max)", nullable: false), + HashedApiKeySalt = table.Column(type: "nvarchar(max)", nullable: false), + Roles = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Applications", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Roles", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(450)", nullable: false), + Permissions = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Roles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(450)", nullable: false), + HashedPassword = table.Column(type: "nvarchar(max)", nullable: false), + HashedPasswordSalt = table.Column(type: "nvarchar(max)", nullable: false), + Roles = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Application_ClientId", + schema: _schema.Schema, + table: "Applications", + column: "ClientId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Application_Name", + schema: _schema.Schema, + table: "Applications", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Role_Name", + schema: _schema.Schema, + table: "Roles", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_User_Name", + schema: _schema.Schema, + table: "Users", + column: "Name", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Applications", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Roles", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Users", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240329200753_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240329200753_V3_1.Designer.cs new file mode 100644 index 0000000..0322db1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240329200753_V3_1.Designer.cs @@ -0,0 +1,131 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240329200753_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240329200753_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240329200753_V3_1.cs new file mode 100644 index 0000000..651a17c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240329200753_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240610184919_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240610184919_V3_2.Designer.cs new file mode 100644 index 0000000..0ba11aa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240610184919_V3_2.Designer.cs @@ -0,0 +1,131 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240610184919_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240610184919_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240610184919_V3_2.cs new file mode 100644 index 0000000..f174820 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20240610184919_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20241212211838_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20241212211838_V3_3.Designer.cs new file mode 100644 index 0000000..1e25ad1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20241212211838_V3_3.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20241212211838_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20241212211838_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20241212211838_V3_3.cs new file mode 100644 index 0000000..52d7f27 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20241212211838_V3_3.cs @@ -0,0 +1,95 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Users", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Roles", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Applications", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_User_TenantId", + schema: _schema.Schema, + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_Role_TenantId", + schema: _schema.Schema, + table: "Roles"); + + migrationBuilder.DropIndex( + name: "IX_Application_TenantId", + schema: _schema.Schema, + table: "Applications"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Users"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Roles"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Applications"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20250222190919_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20250222190919_V3_4.Designer.cs new file mode 100644 index 0000000..f5e7d9e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20250222190919_V3_4.Designer.cs @@ -0,0 +1,149 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20250222190919_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20250222190919_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20250222190919_V3_4.cs new file mode 100644 index 0000000..b904555 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/20250222190919_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..5e2d202 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs @@ -0,0 +1,146 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + partial class IdentityElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20231015122257_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20231015122257_Initial.Designer.cs new file mode 100644 index 0000000..a6ab2f4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20231015122257_Initial.Designer.cs @@ -0,0 +1,85 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20231015122257_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20231015122257_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20231015122257_Initial.cs new file mode 100644 index 0000000..a92d858 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20231015122257_Initial.cs @@ -0,0 +1,84 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "Labels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(max)", nullable: false), + NormalizedName = table.Column(type: "nvarchar(max)", nullable: false), + Description = table.Column(type: "nvarchar(max)", nullable: true), + Color = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Labels", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowDefinitionId = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "nvarchar(450)", nullable: false), + LabelId = table.Column(type: "nvarchar(450)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitionLabels", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_LabelId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "LabelId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionVersionId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Labels", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240329200825_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240329200825_V3_1.Designer.cs new file mode 100644 index 0000000..3371003 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240329200825_V3_1.Designer.cs @@ -0,0 +1,85 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240329200825_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240329200825_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240329200825_V3_1.cs new file mode 100644 index 0000000..d7253cb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240329200825_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240610185009_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240610185009_V3_2.Designer.cs new file mode 100644 index 0000000..0667dd0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240610185009_V3_2.Designer.cs @@ -0,0 +1,85 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240610185009_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240610185009_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240610185009_V3_2.cs new file mode 100644 index 0000000..ef6e41c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20240610185009_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20241212212012_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20241212212012_V3_3.Designer.cs new file mode 100644 index 0000000..56bff0b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20241212212012_V3_3.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20241212212012_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20241212212012_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20241212212012_V3_3.cs new file mode 100644 index 0000000..9458058 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20241212212012_V3_3.cs @@ -0,0 +1,61 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Labels", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "WorkflowDefinitionLabel_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Labels"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20250222190946_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20250222190946_V3_4.Designer.cs new file mode 100644 index 0000000..23bf0ba --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20250222190946_V3_4.Designer.cs @@ -0,0 +1,94 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20250222190946_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20250222190946_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20250222190946_V3_4.cs new file mode 100644 index 0000000..ff83e29 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/20250222190946_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..b648cd2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs @@ -0,0 +1,91 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + partial class LabelsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20231015122227_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20231015122227_Initial.Designer.cs new file mode 100644 index 0000000..cc99eca --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20231015122227_Initial.Designer.cs @@ -0,0 +1,196 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20231015122227_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("BinaryData") + .HasColumnType("varbinary(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsLatest") + .HasColumnType("bit"); + + b.Property("IsPublished") + .HasColumnType("bit"); + + b.Property("IsReadonly") + .HasColumnType("bit"); + + b.Property("MaterializerContext") + .HasColumnType("nvarchar(max)"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderName") + .HasColumnType("nvarchar(max)"); + + b.Property("StringData") + .HasColumnType("nvarchar(max)"); + + b.Property("ToolVersion") + .HasColumnType("nvarchar(max)"); + + b.Property("UsableAsActivity") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinishedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20231015122227_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20231015122227_Initial.cs new file mode 100644 index 0000000..cf5234c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20231015122227_Initial.cs @@ -0,0 +1,196 @@ + +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitions", + schema: _schema.Schema , + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + DefinitionId = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(450)", nullable: true), + Description = table.Column(type: "nvarchar(max)", nullable: true), + ToolVersion = table.Column(type: "nvarchar(max)", nullable: true), + ProviderName = table.Column(type: "nvarchar(max)", nullable: true), + MaterializerName = table.Column(type: "nvarchar(max)", nullable: false), + MaterializerContext = table.Column(type: "nvarchar(max)", nullable: true), + StringData = table.Column(type: "nvarchar(max)", nullable: true), + BinaryData = table.Column(type: "varbinary(max)", nullable: true), + IsReadonly = table.Column(type: "bit", nullable: false), + Data = table.Column(type: "nvarchar(max)", nullable: true), + UsableAsActivity = table.Column(type: "bit", nullable: true), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + Version = table.Column(type: "int", nullable: false), + IsLatest = table.Column(type: "bit", nullable: false), + IsPublished = table.Column(type: "bit", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInstances", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + DefinitionId = table.Column(type: "nvarchar(450)", nullable: false), + DefinitionVersionId = table.Column(type: "nvarchar(max)", nullable: false), + Version = table.Column(type: "int", nullable: false), + Status = table.Column(type: "nvarchar(450)", nullable: false), + SubStatus = table.Column(type: "nvarchar(450)", nullable: false), + CorrelationId = table.Column(type: "nvarchar(450)", nullable: true), + Name = table.Column(type: "nvarchar(450)", nullable: true), + IncidentCount = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + UpdatedAt = table.Column(type: "datetimeoffset", nullable: false), + FinishedAt = table.Column(type: "datetimeoffset", nullable: true), + Data = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInstances", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + columns: new[] { "DefinitionId", "Version" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsLatest", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsLatest"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsPublished", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsPublished"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Name", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_UsableAsActivity", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "UsableAsActivity"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Version", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "Version"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "DefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FinishedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "FinishedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Name", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus", "DefinitionId", "Version" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "SubStatus"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus_DefinitionId", + schema: _schema.Schema, + table: "WorkflowInstances", + columns: new[] { "SubStatus", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_UpdatedAt", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "UpdatedAt"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "WorkflowDefinitions", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInstances", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240329200727_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240329200727_V3_1.Designer.cs new file mode 100644 index 0000000..a23cc5b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240329200727_V3_1.Designer.cs @@ -0,0 +1,214 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240329200727_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("BinaryData") + .HasColumnType("varbinary(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsLatest") + .HasColumnType("bit"); + + b.Property("IsPublished") + .HasColumnType("bit"); + + b.Property("IsReadonly") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("MaterializerContext") + .HasColumnType("nvarchar(max)"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderName") + .HasColumnType("nvarchar(max)"); + + b.Property("StringData") + .HasColumnType("nvarchar(max)"); + + b.Property("ToolVersion") + .HasColumnType("nvarchar(max)"); + + b.Property("UsableAsActivity") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinishedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240329200727_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240329200727_V3_1.cs new file mode 100644 index 0000000..4ab3277 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240329200727_V3_1.cs @@ -0,0 +1,98 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DataCompressionAlgorithm", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ParentWorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsSystem"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "IsSystem"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "DataCompressionAlgorithm", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "ParentWorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240610184814_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240610184814_V3_2.Designer.cs new file mode 100644 index 0000000..fd6cb59 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240610184814_V3_2.Designer.cs @@ -0,0 +1,214 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240610184814_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("BinaryData") + .HasColumnType("varbinary(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsLatest") + .HasColumnType("bit"); + + b.Property("IsPublished") + .HasColumnType("bit"); + + b.Property("IsReadonly") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("MaterializerContext") + .HasColumnType("nvarchar(max)"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderName") + .HasColumnType("nvarchar(max)"); + + b.Property("StringData") + .HasColumnType("nvarchar(max)"); + + b.Property("ToolVersion") + .HasColumnType("nvarchar(max)"); + + b.Property("UsableAsActivity") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinishedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240610184814_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240610184814_V3_2.cs new file mode 100644 index 0000000..a2bab76 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20240610184814_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20241212211744_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20241212211744_V3_3.Designer.cs new file mode 100644 index 0000000..9f8d0cb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20241212211744_V3_3.Designer.cs @@ -0,0 +1,226 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20241212211744_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("BinaryData") + .HasColumnType("varbinary(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsLatest") + .HasColumnType("bit"); + + b.Property("IsPublished") + .HasColumnType("bit"); + + b.Property("IsReadonly") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("MaterializerContext") + .HasColumnType("nvarchar(max)"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderName") + .HasColumnType("nvarchar(max)"); + + b.Property("StringData") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("ToolVersion") + .HasColumnType("nvarchar(max)"); + + b.Property("UsableAsActivity") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinishedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20241212211744_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20241212211744_V3_3.cs new file mode 100644 index 0000000..48d2062 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20241212211744_V3_3.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_TenantId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20250222190857_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20250222190857_V3_4.Designer.cs new file mode 100644 index 0000000..e46a734 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20250222190857_V3_4.Designer.cs @@ -0,0 +1,232 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20250222190857_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("BinaryData") + .HasColumnType("varbinary(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsLatest") + .HasColumnType("bit"); + + b.Property("IsPublished") + .HasColumnType("bit"); + + b.Property("IsReadonly") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("MaterializerContext") + .HasColumnType("nvarchar(max)"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderName") + .HasColumnType("nvarchar(max)"); + + b.Property("StringData") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("ToolVersion") + .HasColumnType("nvarchar(max)"); + + b.Property("UsableAsActivity") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinishedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsExecuting") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20250222190857_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20250222190857_V3_4.cs new file mode 100644 index 0000000..e09db23 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/20250222190857_V3_4.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsExecuting"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..5bbe0d3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs @@ -0,0 +1,229 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + partial class ManagementElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("BinaryData") + .HasColumnType("varbinary(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsLatest") + .HasColumnType("bit"); + + b.Property("IsPublished") + .HasColumnType("bit"); + + b.Property("IsReadonly") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("MaterializerContext") + .HasColumnType("nvarchar(max)"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderName") + .HasColumnType("nvarchar(max)"); + + b.Property("StringData") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("ToolVersion") + .HasColumnType("nvarchar(max)"); + + b.Property("UsableAsActivity") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FinishedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IncidentCount") + .HasColumnType("int"); + + b.Property("IsExecuting") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20231024160944_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20231024160944_Initial.Designer.cs new file mode 100644 index 0000000..fc51ee6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20231024160944_Initial.Designer.cs @@ -0,0 +1,388 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20231024160944_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20231024160944_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20231024160944_Initial.cs new file mode 100644 index 0000000..85ae54f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20231024160944_Initial.cs @@ -0,0 +1,432 @@ +using Elsa.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + /// + public partial class Initial : Migration + { + private readonly IElsaDbContextSchema _schema; + public Initial(IElsaDbContextSchema schema) + { + _schema = schema ?? throw new ArgumentNullException(nameof(schema)); + } + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.CreateTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "nvarchar(450)", nullable: false), + ActivityId = table.Column(type: "nvarchar(450)", nullable: false), + ActivityNodeId = table.Column(type: "nvarchar(450)", nullable: false), + ActivityType = table.Column(type: "nvarchar(450)", nullable: false), + ActivityTypeVersion = table.Column(type: "int", nullable: false), + ActivityName = table.Column(type: "nvarchar(450)", nullable: true), + StartedAt = table.Column(type: "datetimeoffset", nullable: false), + HasBookmarks = table.Column(type: "bit", nullable: false), + Status = table.Column(type: "nvarchar(450)", nullable: false), + CompletedAt = table.Column(type: "datetimeoffset", nullable: true), + SerializedActivityState = table.Column(type: "nvarchar(max)", nullable: true), + SerializedException = table.Column(type: "nvarchar(max)", nullable: true), + SerializedOutputs = table.Column(type: "nvarchar(max)", nullable: true), + SerializedPayload = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ActivityExecutionRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Bookmarks", + schema: _schema.Schema, + columns: table => new + { + BookmarkId = table.Column(type: "nvarchar(450)", nullable: false), + ActivityTypeName = table.Column(type: "nvarchar(450)", nullable: false), + Hash = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "nvarchar(450)", nullable: false), + ActivityInstanceId = table.Column(type: "nvarchar(450)", nullable: true), + CorrelationId = table.Column(type: "nvarchar(max)", nullable: true), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + SerializedMetadata = table.Column(type: "nvarchar(max)", nullable: true), + SerializedPayload = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.BookmarkId); + }); + + migrationBuilder.CreateTable( + name: "Triggers", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowDefinitionId = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(450)", nullable: false), + ActivityId = table.Column(type: "nvarchar(max)", nullable: false), + Hash = table.Column(type: "nvarchar(450)", nullable: true), + SerializedPayload = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Triggers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowDefinitionId = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowVersion = table.Column(type: "int", nullable: false), + ActivityInstanceId = table.Column(type: "nvarchar(450)", nullable: false), + ParentActivityInstanceId = table.Column(type: "nvarchar(450)", nullable: true), + ActivityId = table.Column(type: "nvarchar(450)", nullable: false), + ActivityType = table.Column(type: "nvarchar(450)", nullable: false), + ActivityTypeVersion = table.Column(type: "int", nullable: false), + ActivityName = table.Column(type: "nvarchar(450)", nullable: true), + ActivityNodeId = table.Column(type: "nvarchar(450)", nullable: false), + Timestamp = table.Column(type: "datetimeoffset", nullable: false), + Sequence = table.Column(type: "bigint", nullable: false), + EventName = table.Column(type: "nvarchar(450)", nullable: true), + Message = table.Column(type: "nvarchar(max)", nullable: true), + Source = table.Column(type: "nvarchar(max)", nullable: true), + SerializedActivityState = table.Column(type: "nvarchar(max)", nullable: true), + SerializedPayload = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + ActivityTypeName = table.Column(type: "nvarchar(450)", nullable: false), + Hash = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "nvarchar(450)", nullable: true), + CorrelationId = table.Column(type: "nvarchar(450)", nullable: true), + ActivityInstanceId = table.Column(type: "nvarchar(450)", nullable: true), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + ExpiresAt = table.Column(type: "datetimeoffset", nullable: false), + SerializedBookmarkPayload = table.Column(type: "nvarchar(max)", nullable: true), + SerializedInput = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInboxMessages", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityName", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityNodeId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_CompletedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_HasBookmarks", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "HasBookmarks"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_StartedAt", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_Status", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName", + schema: _schema.Schema, + table: "Bookmarks", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_CreatedAt", + schema: _schema.Schema, + table: "Bookmarks", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Hash", + schema: _schema.Schema, + table: "Bookmarks", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Hash", + schema: _schema.Schema, + table: "Triggers", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Name", + schema: _schema.Schema, + table: "Triggers", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "Triggers", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityNodeId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityTypeVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_EventName", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "EventName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ParentActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "ParentActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Sequence"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "Timestamp"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp_Sequence", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + columns: new[] { "Timestamp", "Sequence" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowVersion", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "WorkflowVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityTypeName", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CorrelationId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CreatedAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ExpiresAt", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "ExpiresAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_Hash", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_WorkflowInstanceId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Bookmarks", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "Triggers", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema); + + migrationBuilder.DropTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240329200657_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240329200657_V3_1.Designer.cs new file mode 100644 index 0000000..2c345fd --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240329200657_V3_1.Designer.cs @@ -0,0 +1,408 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240329200657_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240329200657_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240329200657_V3_1.cs new file mode 100644 index 0000000..342469e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240329200657_V3_1.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + /// + public partial class V3_1 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_1(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "SerializedActivityStateCompressionAlgorithm", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "SerializedProperties", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.CreateTable( + name: "KeyValuePairs", + schema: _schema.Schema, + columns: table => new + { + Key = table.Column(type: "nvarchar(450)", nullable: false), + SerializedValue = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_KeyValuePairs", x => x.Key); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "KeyValuePairs", + schema: _schema.Schema); + + migrationBuilder.DropColumn( + name: "SerializedActivityStateCompressionAlgorithm", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedProperties", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240610184719_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240610184719_V3_2.Designer.cs new file mode 100644 index 0000000..4112cb9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240610184719_V3_2.Designer.cs @@ -0,0 +1,408 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240610184719_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240610184719_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240610184719_V3_2.cs new file mode 100644 index 0000000..4f0f4c3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20240610184719_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + /// + public partial class V3_2 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_2(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250116192837_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250116192837_V3_3.Designer.cs new file mode 100644 index 0000000..6f59df1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250116192837_V3_3.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250116192837_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("nvarchar(450)"); + + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedOptions") + .HasColumnType("nvarchar(max)"); + + b.Property("StimulusHash") + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250116192837_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250116192837_V3_3.cs new file mode 100644 index 0000000..ea7495e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250116192837_V3_3.cs @@ -0,0 +1,251 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "Key", + schema: _schema.Schema, + table: "KeyValuePairs", + newName: "Id"); + + migrationBuilder.RenameColumn( + name: "BookmarkId", + schema: _schema.Schema, + table: "Bookmarks", + newName: "Id"); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInboxMessages", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Triggers", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Bookmarks", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.CreateTable( + name: "BookmarkQueueItems", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "nvarchar(450)", nullable: true), + CorrelationId = table.Column(type: "nvarchar(450)", nullable: true), + BookmarkId = table.Column(type: "nvarchar(450)", nullable: true), + StimulusHash = table.Column(type: "nvarchar(450)", nullable: true), + ActivityInstanceId = table.Column(type: "nvarchar(450)", nullable: true), + ActivityTypeName = table.Column(type: "nvarchar(450)", nullable: true), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false), + SerializedOptions = table.Column(type: "nvarchar(max)", nullable: true), + TenantId = table.Column(type: "nvarchar(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BookmarkQueueItems", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityTypeName", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_BookmarkId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "BookmarkId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CorrelationId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CreatedAt", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_StimulusHash", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "StimulusHash"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_TenantId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_WorkflowInstanceId", + schema: _schema.Schema, + table: "BookmarkQueueItems", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BookmarkQueueItems", + schema: _schema.Schema); + + migrationBuilder.DropIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropIndex( + name: "IX_StoredTrigger_TenantId", + schema: _schema.Schema, + table: "Triggers"); + + migrationBuilder.DropIndex( + name: "IX_SerializedKeyValuePair_TenantId", + schema: _schema.Schema, + table: "KeyValuePairs"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_TenantId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_ActivityExecutionRecord_TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowInboxMessages"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Triggers"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "KeyValuePairs"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.RenameColumn( + name: "Id", + schema: _schema.Schema, + table: "KeyValuePairs", + newName: "Key"); + + migrationBuilder.RenameColumn( + name: "Id", + schema: _schema.Schema, + table: "Bookmarks", + newName: "BookmarkId"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250222190834_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250222190834_V3_4.Designer.cs new file mode 100644 index 0000000..c417380 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250222190834_V3_4.Designer.cs @@ -0,0 +1,492 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250222190834_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("nvarchar(450)"); + + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedOptions") + .HasColumnType("nvarchar(max)"); + + b.Property("StimulusHash") + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250222190834_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250222190834_V3_4.cs new file mode 100644 index 0000000..a63ec7d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250222190834_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250530104711_V3_5.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250530104711_V3_5.Designer.cs new file mode 100644 index 0000000..9481ef2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250530104711_V3_5.Designer.cs @@ -0,0 +1,506 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250530104711_V3_5")] + partial class V3_5 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("AggregateFaultCount") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("nvarchar(450)"); + + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedOptions") + .HasColumnType("nvarchar(max)"); + + b.Property("StimulusHash") + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250530104711_V3_5.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250530104711_V3_5.cs new file mode 100644 index 0000000..45523b6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/20250530104711_V3_5.cs @@ -0,0 +1,116 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + /// + public partial class V3_5 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_5(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "nvarchar(450)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AddColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.AddColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash", "WorkflowInstanceId" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "nvarchar(450)", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "nvarchar(450)", + oldNullable: true); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..3e2f6ee --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs @@ -0,0 +1,503 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + partial class RuntimeElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("AggregateFaultCount") + .HasColumnType("int"); + + b.Property("CompletedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HasBookmarks") + .HasColumnType("bit"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedException") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedOutputs") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("StartedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .HasColumnType("nvarchar(450)"); + + b.Property("BookmarkId") + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("SerializedOptions") + .HasColumnType("nvarchar(max)"); + + b.Property("StimulusHash") + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedMetadata") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityName") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeVersion") + .HasColumnType("int"); + + b.Property("EventName") + .HasColumnType("nvarchar(450)"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("Sequence") + .HasColumnType("bigint"); + + b.Property("SerializedActivityState") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("Source") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.Property("Timestamp") + .HasColumnType("datetimeoffset"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("WorkflowVersion") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityInstanceId") + .HasColumnType("nvarchar(450)"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedInput") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkflowInstanceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20241212212138_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20241212212138_V3_3.Designer.cs new file mode 100644 index 0000000..294cef9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20241212212138_V3_3.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20241212212138_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "7.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20241212212138_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20241212212138_V3_3.cs new file mode 100644 index 0000000..3b72b2b --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20241212212138_V3_3.cs @@ -0,0 +1,60 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Tenants +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: "Elsa"); + + migrationBuilder.CreateTable( + name: "Tenants", + schema: _schema.Schema, + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(450)", nullable: false), + Configuration = table.Column(type: "nvarchar(max)", nullable: false), + TenantId = table.Column(type: "nvarchar(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Tenants", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Name", + schema: _schema.Schema, + table: "Tenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_TenantId", + schema: _schema.Schema, + table: "Tenants", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Tenants", + schema: _schema.Schema); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20250222191011_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20250222191011_V3_4.Designer.cs new file mode 100644 index 0000000..674b732 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20250222191011_V3_4.Designer.cs @@ -0,0 +1,57 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20250222191011_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20250222191011_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20250222191011_V3_4.cs new file mode 100644 index 0000000..d0f2bfe --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/20250222191011_V3_4.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Tenants +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..b807793 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs @@ -0,0 +1,54 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.SqlServer.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + partial class TenantsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("TenantId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs new file mode 100644 index 0000000..32b18e1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs @@ -0,0 +1,56 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to configure EF Core to use SQL Server. +/// +public static class SqlServerProvidersExtensions +{ + private static Assembly Assembly => typeof(SqlServerProvidersExtensions).Assembly; + + public static TFeature UseSqlServer(this PersistenceFeatureBase feature, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseSqlServer(Assembly, connectionString, options, configure); + } + + public static TFeature UseSqlServer(this PersistenceFeatureBase feature, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseSqlServer(Assembly, connectionStringFunc, options, configure); + } + + public static TFeature UseSqlServer(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + string connectionString, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseSqlServer(migrationsAssembly, _ => connectionString, options, configure); + } + + public static TFeature UseSqlServer(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + feature.DbContextOptionsBuilder = (sp, db) => db.UseElsaSqlServer(migrationsAssembly, connectionStringFunc(sp), options, configure); + return (TFeature)feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/DbContextFactories.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/DbContextFactories.cs new file mode 100644 index 0000000..3b73dee --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/DbContextFactories.cs @@ -0,0 +1,40 @@ +using Elsa.EntityFrameworkCore.Abstractions; +using Elsa.EntityFrameworkCore.Extensions; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Elsa.EntityFrameworkCore.Modules.Identity; +using Elsa.EntityFrameworkCore.Modules.Labels; +using Elsa.EntityFrameworkCore.Modules.Management; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Elsa.EntityFrameworkCore.Modules.Tenants; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Elsa.EntityFrameworkCore.Sqlite; + +[UsedImplicitly] +public class IdentityDbContextFactory : SqliteDesignTimeDbContextFactory; + +[UsedImplicitly] +public class ManagementDbContextFactory : SqliteDesignTimeDbContextFactory; + +[UsedImplicitly] +public class RuntimeDbContextFactory : SqliteDesignTimeDbContextFactory; + +[UsedImplicitly] +public class LabelsDbContextFactory : SqliteDesignTimeDbContextFactory; + +[UsedImplicitly] +public class AlterationsDbContextFactories : SqliteDesignTimeDbContextFactory; + +[UsedImplicitly] +public class TenantsDbContextFactories : SqliteDesignTimeDbContextFactory; + +public class SqliteDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase where TDbContext : DbContext +{ + protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) + { + builder.UseElsaSqlite(GetType().Assembly, connectionString); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/DbContextOptionsBuilderExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/DbContextOptionsBuilderExtensions.cs new file mode 100644 index 0000000..dc3c386 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/DbContextOptionsBuilderExtensions.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Contains extension methods for . +/// +public static class DbContextOptionsBuilderExtensions +{ + /// + /// Configures Entity Framework Core with SQLite. + /// + public static DbContextOptionsBuilder UseElsaSqlite(this DbContextOptionsBuilder builder, Assembly migrationsAssembly, string connectionString = Constants.DefaultConnectionString, ElsaDbContextOptions? options = default, Action? configure = default) => + builder + .UseElsaDbContextOptions(options) + .UseSqlite(connectionString, db => + { + db + .MigrationsAssembly(options.GetMigrationsAssemblyName(migrationsAssembly)) + .MigrationsHistoryTable(options.GetMigrationsHistoryTableName(), options.GetSchemaName()); + + configure?.Invoke(db); + }); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Elsa.EntityFrameworkCore.Sqlite.csproj b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Elsa.EntityFrameworkCore.Sqlite.csproj new file mode 100644 index 0000000..7b7edfa --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Elsa.EntityFrameworkCore.Sqlite.csproj @@ -0,0 +1,20 @@ + + + + + Provides SQLite EF Core migrations for various modules. + + elsa module persistence efcore sqlite + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.Sqlite/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20231015122159_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20231015122159_Initial.Designer.cs new file mode 100644 index 0000000..2edc7c9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20231015122159_Initial.Designer.cs @@ -0,0 +1,117 @@ +// +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20231015122159_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.11"); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedLog") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("INTEGER"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedAlterations") + .HasColumnType("TEXT"); + + b.Property("SerializedWorkflowInstanceIds") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20231015122159_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20231015122159_Initial.cs new file mode 100644 index 0000000..d9ff77d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20231015122159_Initial.cs @@ -0,0 +1,109 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AlterationJobs", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + PlanId = table.Column(type: "TEXT", nullable: false), + WorkflowInstanceId = table.Column(type: "TEXT", nullable: false), + Status = table.Column(type: "INTEGER", nullable: false), + CreatedAt = table.Column(type: "TEXT", nullable: false), + StartedAt = table.Column(type: "TEXT", nullable: true), + CompletedAt = table.Column(type: "TEXT", nullable: true), + SerializedLog = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationJobs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AlterationPlans", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Status = table.Column(type: "INTEGER", nullable: false), + CreatedAt = table.Column(type: "TEXT", nullable: false), + StartedAt = table.Column(type: "TEXT", nullable: true), + CompletedAt = table.Column(type: "TEXT", nullable: true), + SerializedAlterations = table.Column(type: "TEXT", nullable: true), + SerializedWorkflowInstanceIds = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AlterationPlans", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CompletedAt", + table: "AlterationJobs", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_CreatedAt", + table: "AlterationJobs", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_PlanId", + table: "AlterationJobs", + column: "PlanId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_StartedAt", + table: "AlterationJobs", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_Status", + table: "AlterationJobs", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_WorkflowInstanceId", + table: "AlterationJobs", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CompletedAt", + table: "AlterationPlans", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_CreatedAt", + table: "AlterationPlans", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_StartedAt", + table: "AlterationPlans", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_Status", + table: "AlterationPlans", + column: "Status"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AlterationJobs"); + + migrationBuilder.DropTable( + name: "AlterationPlans"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240329200634_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240329200634_V3_1.Designer.cs new file mode 100644 index 0000000..47bab0e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240329200634_V3_1.Designer.cs @@ -0,0 +1,119 @@ +// +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240329200634_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedLog") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedAlterations") + .HasColumnType("TEXT"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240329200634_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240329200634_V3_1.cs new file mode 100644 index 0000000..c0aa49c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240329200634_V3_1.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceIds", + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceFilter"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "AlterationPlans", + type: "TEXT", + nullable: false, + oldClrType: typeof(int), + oldType: "INTEGER"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "AlterationJobs", + type: "TEXT", + nullable: false, + oldClrType: typeof(int), + oldType: "INTEGER"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "SerializedWorkflowInstanceFilter", + table: "AlterationPlans", + newName: "SerializedWorkflowInstanceIds"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "AlterationPlans", + type: "INTEGER", + nullable: false, + oldClrType: typeof(string), + oldType: "TEXT"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "AlterationJobs", + type: "INTEGER", + nullable: false, + oldClrType: typeof(string), + oldType: "TEXT"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240610184608_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240610184608_V3_2.Designer.cs new file mode 100644 index 0000000..74f9a7f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240610184608_V3_2.Designer.cs @@ -0,0 +1,119 @@ +// +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20240610184608_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedLog") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedAlterations") + .HasColumnType("TEXT"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.ToTable("AlterationPlans"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240610184608_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240610184608_V3_2.cs new file mode 100644 index 0000000..f779303 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20240610184608_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20241212211547_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20241212211547_V3_3.Designer.cs new file mode 100644 index 0000000..a4b55f6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20241212211547_V3_3.Designer.cs @@ -0,0 +1,130 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20241212211547_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedLog") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedAlterations") + .HasColumnType("TEXT"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20241212211547_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20241212211547_V3_3.cs new file mode 100644 index 0000000..2400207 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20241212211547_V3_3.cs @@ -0,0 +1,64 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + table: "AlterationPlans", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "AlterationJobs", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AlterationPlan_TenantId", + table: "AlterationPlans", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_AlterationJob_TenantId", + table: "AlterationJobs", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AlterationPlan_TenantId", + table: "AlterationPlans"); + + migrationBuilder.DropIndex( + name: "IX_AlterationJob_TenantId", + table: "AlterationJobs"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "AlterationPlans"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "AlterationJobs"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20250222190815_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20250222190815_V3_4.Designer.cs new file mode 100644 index 0000000..d95253e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20250222190815_V3_4.Designer.cs @@ -0,0 +1,132 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + [Migration("20250222190815_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedLog") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedAlterations") + .HasColumnType("TEXT"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20250222190815_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20250222190815_V3_4.cs new file mode 100644 index 0000000..3631eb1 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/20250222190815_V3_4.cs @@ -0,0 +1,49 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.RenameTable( + name: "AlterationPlans", + newName: "AlterationPlans", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "AlterationJobs", + newName: "AlterationJobs", + newSchema: _schema.Schema); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameTable( + name: "AlterationPlans", + schema: _schema.Schema, + newName: "AlterationPlans"); + + migrationBuilder.RenameTable( + name: "AlterationJobs", + schema: _schema.Schema, + newName: "AlterationJobs"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..38cc74d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs @@ -0,0 +1,129 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Alterations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Alterations +{ + [DbContext(typeof(AlterationsElsaDbContext))] + partial class AlterationsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("PlanId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedLog") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationJob_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationJob_CreatedAt"); + + b.HasIndex("PlanId") + .HasDatabaseName("IX_AlterationJob_PlanId"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationJob_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationJob_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationJob_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId"); + + b.ToTable("AlterationJobs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedAlterations") + .HasColumnType("TEXT"); + + b.Property("SerializedWorkflowInstanceFilter") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_AlterationPlan_CompletedAt"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_AlterationPlan_CreatedAt"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_AlterationPlan_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_AlterationPlan_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_AlterationPlan_TenantId"); + + b.ToTable("AlterationPlans", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20231015122246_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20231015122246_Initial.Designer.cs new file mode 100644 index 0000000..e27d1ab --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20231015122246_Initial.Designer.cs @@ -0,0 +1,125 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20231015122246_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.11"); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20231015122246_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20231015122246_Initial.cs new file mode 100644 index 0000000..e78e031 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20231015122246_Initial.cs @@ -0,0 +1,97 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Applications", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + ClientId = table.Column(type: "TEXT", nullable: false), + HashedClientSecret = table.Column(type: "TEXT", nullable: false), + HashedClientSecretSalt = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + HashedApiKey = table.Column(type: "TEXT", nullable: false), + HashedApiKeySalt = table.Column(type: "TEXT", nullable: false), + Roles = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Applications", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Roles", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + Permissions = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Roles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + HashedPassword = table.Column(type: "TEXT", nullable: false), + HashedPasswordSalt = table.Column(type: "TEXT", nullable: false), + Roles = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Application_ClientId", + table: "Applications", + column: "ClientId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Application_Name", + table: "Applications", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Role_Name", + table: "Roles", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_User_Name", + table: "Users", + column: "Name", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Applications"); + + migrationBuilder.DropTable( + name: "Roles"); + + migrationBuilder.DropTable( + name: "Users"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240329200800_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240329200800_V3_1.Designer.cs new file mode 100644 index 0000000..833c23e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240329200800_V3_1.Designer.cs @@ -0,0 +1,125 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240329200800_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240329200800_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240329200800_V3_1.cs new file mode 100644 index 0000000..6e2aa0f --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240329200800_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240610184930_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240610184930_V3_2.Designer.cs new file mode 100644 index 0000000..d94c085 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240610184930_V3_2.Designer.cs @@ -0,0 +1,125 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20240610184930_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.ToTable("Applications"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Permissions"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.ToTable("Roles"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.ToTable("Users"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240610184930_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240610184930_V3_2.cs new file mode 100644 index 0000000..3c43a28 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20240610184930_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20241212211850_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20241212211850_V3_3.Designer.cs new file mode 100644 index 0000000..603cee5 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20241212211850_V3_3.Designer.cs @@ -0,0 +1,143 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20241212211850_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20241212211850_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20241212211850_V3_3.cs new file mode 100644 index 0000000..0299c55 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20241212211850_V3_3.cs @@ -0,0 +1,83 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + table: "Users", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "Roles", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "Applications", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_User_TenantId", + table: "Users", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Role_TenantId", + table: "Roles", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Application_TenantId", + table: "Applications", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_User_TenantId", + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_Role_TenantId", + table: "Roles"); + + migrationBuilder.DropIndex( + name: "IX_Application_TenantId", + table: "Applications"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Roles"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Applications"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20250222190924_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20250222190924_V3_4.Designer.cs new file mode 100644 index 0000000..0a23ff8 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20250222190924_V3_4.Designer.cs @@ -0,0 +1,145 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + [Migration("20250222190924_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20250222190924_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20250222190924_V3_4.cs new file mode 100644 index 0000000..2220186 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/20250222190924_V3_4.cs @@ -0,0 +1,60 @@ +using Elsa.Extensions; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Users", + newName: "Users", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Roles", + newName: "Roles", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Applications", + newName: "Applications", + newSchema: _schema.Schema); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameTable( + name: "Users", + schema: _schema.Schema, + newName: "Users"); + + migrationBuilder.RenameTable( + name: "Roles", + schema: _schema.Schema, + newName: "Roles"); + + migrationBuilder.RenameTable( + name: "Applications", + schema: _schema.Schema, + newName: "Applications"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..3fa637d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs @@ -0,0 +1,142 @@ +// +using Elsa.EntityFrameworkCore.Modules.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Identity +{ + [DbContext(typeof(IdentityElsaDbContext))] + partial class IdentityElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Identity.Entities.Application", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedApiKeySalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecret") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedClientSecretSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ClientId") + .IsUnique() + .HasDatabaseName("IX_Application_ClientId"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Application_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Application_TenantId"); + + b.ToTable("Applications", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.Role", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Permissions"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_Role_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Role_TenantId"); + + b.ToTable("Roles", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Identity.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HashedPasswordSalt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("Roles"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("IX_User_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_User_TenantId"); + + b.ToTable("Users", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20231015122301_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20231015122301_Initial.Designer.cs new file mode 100644 index 0000000..34b5776 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20231015122301_Initial.Designer.cs @@ -0,0 +1,79 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20231015122301_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.11"); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Labels"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20231015122301_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20231015122301_Initial.cs new file mode 100644 index 0000000..cffbc52 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20231015122301_Initial.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Labels", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + NormalizedName = table.Column(type: "TEXT", nullable: false), + Description = table.Column(type: "TEXT", nullable: true), + Color = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Labels", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitionLabels", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + WorkflowDefinitionId = table.Column(type: "TEXT", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "TEXT", nullable: false), + LabelId = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitionLabels", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_LabelId", + table: "WorkflowDefinitionLabels", + column: "LabelId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionId", + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_WorkflowDefinitionVersionId", + table: "WorkflowDefinitionLabels", + column: "WorkflowDefinitionVersionId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Labels"); + + migrationBuilder.DropTable( + name: "WorkflowDefinitionLabels"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240329200834_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240329200834_V3_1.Designer.cs new file mode 100644 index 0000000..0a36316 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240329200834_V3_1.Designer.cs @@ -0,0 +1,79 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240329200834_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Labels"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240329200834_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240329200834_V3_1.cs new file mode 100644 index 0000000..1f8f234 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240329200834_V3_1.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240610185018_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240610185018_V3_2.Designer.cs new file mode 100644 index 0000000..45554fb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240610185018_V3_2.Designer.cs @@ -0,0 +1,79 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20240610185018_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Labels"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240610185018_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240610185018_V3_2.cs new file mode 100644 index 0000000..73bcf04 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20240610185018_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20241212212030_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20241212212030_V3_3.Designer.cs new file mode 100644 index 0000000..5859543 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20241212212030_V3_3.Designer.cs @@ -0,0 +1,88 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20241212212030_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Labels"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20241212212030_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20241212212030_V3_3.cs new file mode 100644 index 0000000..6075de0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20241212212030_V3_3.cs @@ -0,0 +1,55 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + table: "WorkflowDefinitionLabels", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "Labels", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateIndex( + name: "WorkflowDefinitionLabel_TenantId", + table: "WorkflowDefinitionLabels", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "WorkflowDefinitionLabel_TenantId", + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "WorkflowDefinitionLabels"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Labels"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20250222190951_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20250222190951_V3_4.Designer.cs new file mode 100644 index 0000000..6d2cb97 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20250222190951_V3_4.Designer.cs @@ -0,0 +1,90 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + [Migration("20250222190951_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20250222190951_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20250222190951_V3_4.cs new file mode 100644 index 0000000..8ca5e24 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/20250222190951_V3_4.cs @@ -0,0 +1,49 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.RenameTable( + name: "WorkflowDefinitionLabels", + newName: "WorkflowDefinitionLabels", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Labels", + newName: "Labels", + newSchema: _schema.Schema); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameTable( + name: "WorkflowDefinitionLabels", + schema: _schema.Schema, + newName: "WorkflowDefinitionLabels"); + + migrationBuilder.RenameTable( + name: "Labels", + schema: _schema.Schema, + newName: "Labels"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..50e82e7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs @@ -0,0 +1,87 @@ +// +using Elsa.EntityFrameworkCore.Modules.Labels; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Labels +{ + [DbContext(typeof(LabelsElsaDbContext))] + partial class LabelsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Labels.Entities.Label", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Labels", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("LabelId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LabelId") + .HasDatabaseName("WorkflowDefinitionLabel_LabelId"); + + b.HasIndex("TenantId") + .HasDatabaseName("WorkflowDefinitionLabel_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId"); + + b.ToTable("WorkflowDefinitionLabels", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20231015122231_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20231015122231_Initial.Designer.cs new file mode 100644 index 0000000..41c6a5c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20231015122231_Initial.Designer.cs @@ -0,0 +1,193 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20231015122231_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.11"); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("IsLatest") + .HasColumnType("INTEGER"); + + b.Property("IsPublished") + .HasColumnType("INTEGER"); + + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + + b.Property("MaterializerContext") + .HasColumnType("TEXT"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProviderName") + .HasColumnType("TEXT"); + + b.Property("StringData") + .HasColumnType("TEXT"); + + b.Property("ToolVersion") + .HasColumnType("TEXT"); + + b.Property("UsableAsActivity") + .HasColumnType("INTEGER"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FinishedAt") + .HasColumnType("TEXT"); + + b.Property("IncidentCount") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20231015122231_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20231015122231_Initial.cs new file mode 100644 index 0000000..da07029 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20231015122231_Initial.cs @@ -0,0 +1,165 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "WorkflowDefinitions", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + DefinitionId = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + Description = table.Column(type: "TEXT", nullable: true), + ToolVersion = table.Column(type: "TEXT", nullable: true), + ProviderName = table.Column(type: "TEXT", nullable: true), + MaterializerName = table.Column(type: "TEXT", nullable: false), + MaterializerContext = table.Column(type: "TEXT", nullable: true), + StringData = table.Column(type: "TEXT", nullable: true), + BinaryData = table.Column(type: "BLOB", nullable: true), + IsReadonly = table.Column(type: "INTEGER", nullable: false), + Data = table.Column(type: "TEXT", nullable: true), + UsableAsActivity = table.Column(type: "INTEGER", nullable: true), + CreatedAt = table.Column(type: "TEXT", nullable: false), + Version = table.Column(type: "INTEGER", nullable: false), + IsLatest = table.Column(type: "INTEGER", nullable: false), + IsPublished = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInstances", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + DefinitionId = table.Column(type: "TEXT", nullable: false), + DefinitionVersionId = table.Column(type: "TEXT", nullable: false), + Version = table.Column(type: "INTEGER", nullable: false), + Status = table.Column(type: "TEXT", nullable: false), + SubStatus = table.Column(type: "TEXT", nullable: false), + CorrelationId = table.Column(type: "TEXT", nullable: true), + Name = table.Column(type: "TEXT", nullable: true), + IncidentCount = table.Column(type: "INTEGER", nullable: false), + CreatedAt = table.Column(type: "TEXT", nullable: false), + UpdatedAt = table.Column(type: "TEXT", nullable: false), + FinishedAt = table.Column(type: "TEXT", nullable: true), + Data = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInstances", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_DefinitionId_Version", + table: "WorkflowDefinitions", + columns: new[] { "DefinitionId", "Version" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsLatest", + table: "WorkflowDefinitions", + column: "IsLatest"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsPublished", + table: "WorkflowDefinitions", + column: "IsPublished"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Name", + table: "WorkflowDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_UsableAsActivity", + table: "WorkflowDefinitions", + column: "UsableAsActivity"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Version", + table: "WorkflowDefinitions", + column: "Version"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CorrelationId", + table: "WorkflowInstances", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CreatedAt", + table: "WorkflowInstances", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_DefinitionId", + table: "WorkflowInstances", + column: "DefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FinishedAt", + table: "WorkflowInstances", + column: "FinishedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Name", + table: "WorkflowInstances", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status", + table: "WorkflowInstances", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_DefinitionId", + table: "WorkflowInstances", + columns: new[] { "Status", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus", + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version", + table: "WorkflowInstances", + columns: new[] { "Status", "SubStatus", "DefinitionId", "Version" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus", + table: "WorkflowInstances", + column: "SubStatus"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_SubStatus_DefinitionId", + table: "WorkflowInstances", + columns: new[] { "SubStatus", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_UpdatedAt", + table: "WorkflowInstances", + column: "UpdatedAt"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "WorkflowDefinitions"); + + migrationBuilder.DropTable( + name: "WorkflowInstances"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240329200734_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240329200734_V3_1.Designer.cs new file mode 100644 index 0000000..9cc7d53 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240329200734_V3_1.Designer.cs @@ -0,0 +1,211 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240329200734_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("IsLatest") + .HasColumnType("INTEGER"); + + b.Property("IsPublished") + .HasColumnType("INTEGER"); + + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MaterializerContext") + .HasColumnType("TEXT"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProviderName") + .HasColumnType("TEXT"); + + b.Property("StringData") + .HasColumnType("TEXT"); + + b.Property("ToolVersion") + .HasColumnType("TEXT"); + + b.Property("UsableAsActivity") + .HasColumnType("INTEGER"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FinishedAt") + .HasColumnType("TEXT"); + + b.Property("IncidentCount") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240329200734_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240329200734_V3_1.cs new file mode 100644 index 0000000..deaad85 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240329200734_V3_1.cs @@ -0,0 +1,86 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + /// + public partial class V3_1 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_1(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DataCompressionAlgorithm", + table: "WorkflowInstances", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsSystem", + table: "WorkflowInstances", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ParentWorkflowInstanceId", + table: "WorkflowInstances", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsSystem", + table: "WorkflowDefinitions", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsSystem", + table: "WorkflowInstances", + column: "IsSystem"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsSystem", + table: "WorkflowDefinitions", + column: "IsSystem"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsSystem", + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_IsSystem", + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "DataCompressionAlgorithm", + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "ParentWorkflowInstanceId", + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsSystem", + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240610184829_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240610184829_V3_2.Designer.cs new file mode 100644 index 0000000..e04c4c9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240610184829_V3_2.Designer.cs @@ -0,0 +1,211 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20240610184829_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("IsLatest") + .HasColumnType("INTEGER"); + + b.Property("IsPublished") + .HasColumnType("INTEGER"); + + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MaterializerContext") + .HasColumnType("TEXT"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProviderName") + .HasColumnType("TEXT"); + + b.Property("StringData") + .HasColumnType("TEXT"); + + b.Property("ToolVersion") + .HasColumnType("TEXT"); + + b.Property("UsableAsActivity") + .HasColumnType("INTEGER"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FinishedAt") + .HasColumnType("TEXT"); + + b.Property("IncidentCount") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240610184829_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240610184829_V3_2.cs new file mode 100644 index 0000000..003ae48 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20240610184829_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + /// + public partial class V3_2 : Migration + { + private readonly IElsaDbContextSchema _schema; + + /// + public V3_2(IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20241212211754_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20241212211754_V3_3.Designer.cs new file mode 100644 index 0000000..15de8d8 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20241212211754_V3_3.Designer.cs @@ -0,0 +1,220 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20241212211754_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("IsLatest") + .HasColumnType("INTEGER"); + + b.Property("IsPublished") + .HasColumnType("INTEGER"); + + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MaterializerContext") + .HasColumnType("TEXT"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProviderName") + .HasColumnType("TEXT"); + + b.Property("StringData") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("ToolVersion") + .HasColumnType("TEXT"); + + b.Property("UsableAsActivity") + .HasColumnType("INTEGER"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FinishedAt") + .HasColumnType("TEXT"); + + b.Property("IncidentCount") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20241212211754_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20241212211754_V3_3.cs new file mode 100644 index 0000000..56d8890 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20241212211754_V3_3.cs @@ -0,0 +1,64 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + table: "WorkflowInstances", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "WorkflowDefinitions", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_TenantId", + table: "WorkflowInstances", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_TenantId", + table: "WorkflowDefinitions", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_TenantId", + table: "WorkflowInstances"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowDefinition_TenantId", + table: "WorkflowDefinitions"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20250222190901_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20250222190901_V3_4.Designer.cs new file mode 100644 index 0000000..2a4ecb0 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20250222190901_V3_4.Designer.cs @@ -0,0 +1,228 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + [Migration("20250222190901_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("IsLatest") + .HasColumnType("INTEGER"); + + b.Property("IsPublished") + .HasColumnType("INTEGER"); + + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MaterializerContext") + .HasColumnType("TEXT"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProviderName") + .HasColumnType("TEXT"); + + b.Property("StringData") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("ToolVersion") + .HasColumnType("TEXT"); + + b.Property("UsableAsActivity") + .HasColumnType("INTEGER"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FinishedAt") + .HasColumnType("TEXT"); + + b.Property("IncidentCount") + .HasColumnType("INTEGER"); + + b.Property("IsExecuting") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20250222190901_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20250222190901_V3_4.cs new file mode 100644 index 0000000..9d6bded --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/20250222190901_V3_4.cs @@ -0,0 +1,73 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.RenameTable( + name: "WorkflowInstances", + newName: "WorkflowInstances", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "WorkflowDefinitions", + newName: "WorkflowDefinitions", + newSchema: _schema.Schema); + + migrationBuilder.AddColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances", + column: "IsExecuting"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_WorkflowInstance_IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.DropColumn( + name: "IsExecuting", + schema: _schema.Schema, + table: "WorkflowInstances"); + + migrationBuilder.RenameTable( + name: "WorkflowInstances", + schema: _schema.Schema, + newName: "WorkflowInstances"); + + migrationBuilder.RenameTable( + name: "WorkflowDefinitions", + schema: _schema.Schema, + newName: "WorkflowDefinitions"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..b06b4e2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs @@ -0,0 +1,225 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Management; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Management +{ + [DbContext(typeof(ManagementElsaDbContext))] + partial class ManagementElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BinaryData") + .HasColumnType("BLOB"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("IsLatest") + .HasColumnType("INTEGER"); + + b.Property("IsPublished") + .HasColumnType("INTEGER"); + + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MaterializerContext") + .HasColumnType("TEXT"); + + b.Property("MaterializerName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProviderName") + .HasColumnType("TEXT"); + + b.Property("StringData") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("ToolVersion") + .HasColumnType("TEXT"); + + b.Property("UsableAsActivity") + .HasColumnType("INTEGER"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("IsLatest") + .HasDatabaseName("IX_WorkflowDefinition_IsLatest"); + + b.HasIndex("IsPublished") + .HasDatabaseName("IX_WorkflowDefinition_IsPublished"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowDefinition_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("UsableAsActivity") + .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version"); + + b.ToTable("WorkflowDefinitions", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DataCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FinishedAt") + .HasColumnType("TEXT"); + + b.Property("IncidentCount") + .HasColumnType("INTEGER"); + + b.Property("IsExecuting") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ParentWorkflowInstanceId") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Version") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("IsExecuting") + .HasDatabaseName("IX_WorkflowInstance_IsExecuting"); + + b.HasIndex("IsSystem") + .HasDatabaseName("IX_WorkflowInstance_IsSystem"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("Status") + .HasDatabaseName("IX_WorkflowInstance_Status"); + + b.HasIndex("SubStatus") + .HasDatabaseName("IX_WorkflowInstance_SubStatus"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("UpdatedAt") + .HasDatabaseName("IX_WorkflowInstance_UpdatedAt"); + + b.HasIndex("Status", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId"); + + b.HasIndex("Status", "SubStatus") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus"); + + b.HasIndex("SubStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId"); + + b.HasIndex("Status", "SubStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20231024160948_Initial.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20231024160948_Initial.Designer.cs new file mode 100644 index 0000000..3d44652 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20231024160948_Initial.Designer.cs @@ -0,0 +1,386 @@ +// +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20231024160948_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.11"); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20231024160948_Initial.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20231024160948_Initial.cs new file mode 100644 index 0000000..d8f72fb --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20231024160948_Initial.cs @@ -0,0 +1,368 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ActivityExecutionRecords", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + WorkflowInstanceId = table.Column(type: "TEXT", nullable: false), + ActivityId = table.Column(type: "TEXT", nullable: false), + ActivityNodeId = table.Column(type: "TEXT", nullable: false), + ActivityType = table.Column(type: "TEXT", nullable: false), + ActivityTypeVersion = table.Column(type: "INTEGER", nullable: false), + ActivityName = table.Column(type: "TEXT", nullable: true), + StartedAt = table.Column(type: "TEXT", nullable: false), + HasBookmarks = table.Column(type: "INTEGER", nullable: false), + Status = table.Column(type: "TEXT", nullable: false), + CompletedAt = table.Column(type: "TEXT", nullable: true), + SerializedActivityState = table.Column(type: "TEXT", nullable: true), + SerializedException = table.Column(type: "TEXT", nullable: true), + SerializedOutputs = table.Column(type: "TEXT", nullable: true), + SerializedPayload = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ActivityExecutionRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Bookmarks", + columns: table => new + { + BookmarkId = table.Column(type: "TEXT", nullable: false), + ActivityTypeName = table.Column(type: "TEXT", nullable: false), + Hash = table.Column(type: "TEXT", nullable: false), + WorkflowInstanceId = table.Column(type: "TEXT", nullable: false), + ActivityInstanceId = table.Column(type: "TEXT", nullable: true), + CorrelationId = table.Column(type: "TEXT", nullable: true), + CreatedAt = table.Column(type: "TEXT", nullable: false), + SerializedMetadata = table.Column(type: "TEXT", nullable: true), + SerializedPayload = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.BookmarkId); + }); + + migrationBuilder.CreateTable( + name: "Triggers", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + WorkflowDefinitionId = table.Column(type: "TEXT", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + ActivityId = table.Column(type: "TEXT", nullable: false), + Hash = table.Column(type: "TEXT", nullable: true), + SerializedPayload = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Triggers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowExecutionLogRecords", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + WorkflowDefinitionId = table.Column(type: "TEXT", nullable: false), + WorkflowDefinitionVersionId = table.Column(type: "TEXT", nullable: false), + WorkflowInstanceId = table.Column(type: "TEXT", nullable: false), + WorkflowVersion = table.Column(type: "INTEGER", nullable: false), + ActivityInstanceId = table.Column(type: "TEXT", nullable: false), + ParentActivityInstanceId = table.Column(type: "TEXT", nullable: true), + ActivityId = table.Column(type: "TEXT", nullable: false), + ActivityType = table.Column(type: "TEXT", nullable: false), + ActivityTypeVersion = table.Column(type: "INTEGER", nullable: false), + ActivityName = table.Column(type: "TEXT", nullable: true), + ActivityNodeId = table.Column(type: "TEXT", nullable: false), + Timestamp = table.Column(type: "TEXT", nullable: false), + Sequence = table.Column(type: "INTEGER", nullable: false), + EventName = table.Column(type: "TEXT", nullable: true), + Message = table.Column(type: "TEXT", nullable: true), + Source = table.Column(type: "TEXT", nullable: true), + SerializedActivityState = table.Column(type: "TEXT", nullable: true), + SerializedPayload = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInboxMessages", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + ActivityTypeName = table.Column(type: "TEXT", nullable: false), + Hash = table.Column(type: "TEXT", nullable: false), + WorkflowInstanceId = table.Column(type: "TEXT", nullable: true), + CorrelationId = table.Column(type: "TEXT", nullable: true), + ActivityInstanceId = table.Column(type: "TEXT", nullable: true), + CreatedAt = table.Column(type: "TEXT", nullable: false), + ExpiresAt = table.Column(type: "TEXT", nullable: false), + SerializedBookmarkPayload = table.Column(type: "TEXT", nullable: true), + SerializedInput = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInboxMessages", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityId", + table: "ActivityExecutionRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityName", + table: "ActivityExecutionRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityNodeId", + table: "ActivityExecutionRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType", + table: "ActivityExecutionRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion", + table: "ActivityExecutionRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_ActivityTypeVersion", + table: "ActivityExecutionRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_CompletedAt", + table: "ActivityExecutionRecords", + column: "CompletedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_HasBookmarks", + table: "ActivityExecutionRecords", + column: "HasBookmarks"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_StartedAt", + table: "ActivityExecutionRecords", + column: "StartedAt"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_Status", + table: "ActivityExecutionRecords", + column: "Status"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_WorkflowInstanceId", + table: "ActivityExecutionRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityInstanceId", + table: "Bookmarks", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName", + table: "Bookmarks", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash", + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId", + table: "Bookmarks", + columns: new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_CreatedAt", + table: "Bookmarks", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Hash", + table: "Bookmarks", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_WorkflowInstanceId", + table: "Bookmarks", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Hash", + table: "Triggers", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_Name", + table: "Triggers", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionId", + table: "Triggers", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_WorkflowDefinitionVersionId", + table: "Triggers", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityId", + table: "WorkflowExecutionLogRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityInstanceId", + table: "WorkflowExecutionLogRecords", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityName", + table: "WorkflowExecutionLogRecords", + column: "ActivityName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityNodeId", + table: "WorkflowExecutionLogRecords", + column: "ActivityNodeId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType", + table: "WorkflowExecutionLogRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion", + table: "WorkflowExecutionLogRecords", + columns: new[] { "ActivityType", "ActivityTypeVersion" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityTypeVersion", + table: "WorkflowExecutionLogRecords", + column: "ActivityTypeVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_EventName", + table: "WorkflowExecutionLogRecords", + column: "EventName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ParentActivityInstanceId", + table: "WorkflowExecutionLogRecords", + column: "ParentActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Sequence", + table: "WorkflowExecutionLogRecords", + column: "Sequence"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp", + table: "WorkflowExecutionLogRecords", + column: "Timestamp"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp_Sequence", + table: "WorkflowExecutionLogRecords", + columns: new[] { "Timestamp", "Sequence" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionId", + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId", + table: "WorkflowExecutionLogRecords", + column: "WorkflowDefinitionVersionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId", + table: "WorkflowExecutionLogRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowVersion", + table: "WorkflowExecutionLogRecords", + column: "WorkflowVersion"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityInstanceId", + table: "WorkflowInboxMessages", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ActivityTypeName", + table: "WorkflowInboxMessages", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CorrelationId", + table: "WorkflowInboxMessages", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_CreatedAt", + table: "WorkflowInboxMessages", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_ExpiresAt", + table: "WorkflowInboxMessages", + column: "ExpiresAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_Hash", + table: "WorkflowInboxMessages", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInboxMessage_WorkflowInstanceId", + table: "WorkflowInboxMessages", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ActivityExecutionRecords"); + + migrationBuilder.DropTable( + name: "Bookmarks"); + + migrationBuilder.DropTable( + name: "Triggers"); + + migrationBuilder.DropTable( + name: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropTable( + name: "WorkflowInboxMessages"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240329200705_V3_1.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240329200705_V3_1.Designer.cs new file mode 100644 index 0000000..a101dd2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240329200705_V3_1.Designer.cs @@ -0,0 +1,406 @@ +// +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240329200705_V3_1")] + partial class V3_1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedProperties") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240329200705_V3_1.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240329200705_V3_1.cs new file mode 100644 index 0000000..c6e73b5 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240329200705_V3_1.cs @@ -0,0 +1,61 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + /// + public partial class V3_1 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_1(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "SerializedActivityStateCompressionAlgorithm", + table: "ActivityExecutionRecords", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "SerializedProperties", + table: "ActivityExecutionRecords", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateTable( + name: "KeyValuePairs", + columns: table => new + { + Key = table.Column(type: "TEXT", nullable: false), + SerializedValue = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_KeyValuePairs", x => x.Key); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "KeyValuePairs"); + + migrationBuilder.DropColumn( + name: "SerializedActivityStateCompressionAlgorithm", + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedProperties", + table: "ActivityExecutionRecords"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240610184731_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240610184731_V3_2.Designer.cs new file mode 100644 index 0000000..1408fee --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240610184731_V3_2.Designer.cs @@ -0,0 +1,406 @@ +// +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20240610184731_V3_2")] + partial class V3_2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Key"); + + b.ToTable("KeyValuePairs"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedProperties") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("BookmarkId"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240610184731_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240610184731_V3_2.cs new file mode 100644 index 0000000..d84cfc4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20240610184731_V3_2.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + /// + public partial class V3_2 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_2(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250116192907_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250116192907_V3_3.Designer.cs new file mode 100644 index 0000000..d92a851 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250116192907_V3_3.Designer.cs @@ -0,0 +1,486 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250116192907_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.11"); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedProperties") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .HasColumnType("TEXT"); + + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedOptions") + .HasColumnType("TEXT"); + + b.Property("StimulusHash") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250116192907_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250116192907_V3_3.cs new file mode 100644 index 0000000..4316a24 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250116192907_V3_3.cs @@ -0,0 +1,215 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "Key", + table: "KeyValuePairs", + newName: "Id"); + + migrationBuilder.RenameColumn( + name: "BookmarkId", + table: "Bookmarks", + newName: "Id"); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "WorkflowInboxMessages", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "WorkflowExecutionLogRecords", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "Triggers", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "KeyValuePairs", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "Bookmarks", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + table: "ActivityExecutionRecords", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateTable( + name: "BookmarkQueueItems", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + WorkflowInstanceId = table.Column(type: "TEXT", nullable: true), + CorrelationId = table.Column(type: "TEXT", nullable: true), + BookmarkId = table.Column(type: "TEXT", nullable: true), + StimulusHash = table.Column(type: "TEXT", nullable: true), + ActivityInstanceId = table.Column(type: "TEXT", nullable: true), + ActivityTypeName = table.Column(type: "TEXT", nullable: true), + CreatedAt = table.Column(type: "TEXT", nullable: false), + SerializedOptions = table.Column(type: "TEXT", nullable: true), + TenantId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BookmarkQueueItems", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + table: "WorkflowExecutionLogRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredTrigger_TenantId", + table: "Triggers", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_SerializedKeyValuePair_TenantId", + table: "KeyValuePairs", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_TenantId", + table: "Bookmarks", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityExecutionRecord_TenantId", + table: "ActivityExecutionRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityInstanceId", + table: "BookmarkQueueItems", + column: "ActivityInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_ActivityTypeName", + table: "BookmarkQueueItems", + column: "ActivityTypeName"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_BookmarkId", + table: "BookmarkQueueItems", + column: "BookmarkId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CorrelationId", + table: "BookmarkQueueItems", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_CreatedAt", + table: "BookmarkQueueItems", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_StimulusHash", + table: "BookmarkQueueItems", + column: "StimulusHash"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_TenantId", + table: "BookmarkQueueItems", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_BookmarkQueueItem_WorkflowInstanceId", + table: "BookmarkQueueItems", + column: "WorkflowInstanceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BookmarkQueueItems"); + + migrationBuilder.DropIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropIndex( + name: "IX_StoredTrigger_TenantId", + table: "Triggers"); + + migrationBuilder.DropIndex( + name: "IX_SerializedKeyValuePair_TenantId", + table: "KeyValuePairs"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_TenantId", + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_ActivityExecutionRecord_TenantId", + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "WorkflowInboxMessages"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "WorkflowExecutionLogRecords"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Triggers"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "KeyValuePairs"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "ActivityExecutionRecords"); + + migrationBuilder.RenameColumn( + name: "Id", + table: "KeyValuePairs", + newName: "Key"); + + migrationBuilder.RenameColumn( + name: "Id", + table: "Bookmarks", + newName: "BookmarkId"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250222190839_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250222190839_V3_4.Designer.cs new file mode 100644 index 0000000..f068516 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250222190839_V3_4.Designer.cs @@ -0,0 +1,488 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250222190839_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedProperties") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .HasColumnType("TEXT"); + + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedOptions") + .HasColumnType("TEXT"); + + b.Property("StimulusHash") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250222190839_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250222190839_V3_4.cs new file mode 100644 index 0000000..afcbe9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250222190839_V3_4.cs @@ -0,0 +1,99 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.RenameTable( + name: "WorkflowInboxMessages", + newName: "WorkflowInboxMessages", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "WorkflowExecutionLogRecords", + newName: "WorkflowExecutionLogRecords", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Triggers", + newName: "Triggers", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "KeyValuePairs", + newName: "KeyValuePairs", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Bookmarks", + newName: "Bookmarks", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "BookmarkQueueItems", + newName: "BookmarkQueueItems", + newSchema: _schema.Schema); + + migrationBuilder.RenameTable( + name: "ActivityExecutionRecords", + newName: "ActivityExecutionRecords", + newSchema: _schema.Schema); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameTable( + name: "WorkflowInboxMessages", + schema: _schema.Schema, + newName: "WorkflowInboxMessages"); + + migrationBuilder.RenameTable( + name: "WorkflowExecutionLogRecords", + schema: _schema.Schema, + newName: "WorkflowExecutionLogRecords"); + + migrationBuilder.RenameTable( + name: "Triggers", + schema: _schema.Schema, + newName: "Triggers"); + + migrationBuilder.RenameTable( + name: "KeyValuePairs", + schema: _schema.Schema, + newName: "KeyValuePairs"); + + migrationBuilder.RenameTable( + name: "Bookmarks", + schema: _schema.Schema, + newName: "Bookmarks"); + + migrationBuilder.RenameTable( + name: "BookmarkQueueItems", + schema: _schema.Schema, + newName: "BookmarkQueueItems"); + + migrationBuilder.RenameTable( + name: "ActivityExecutionRecords", + schema: _schema.Schema, + newName: "ActivityExecutionRecords"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250530104854_V3_5.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250530104854_V3_5.Designer.cs new file mode 100644 index 0000000..103f351 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250530104854_V3_5.Designer.cs @@ -0,0 +1,502 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + [Migration("20250530104854_V3_5")] + partial class V3_5 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5"); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("AggregateFaultCount") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedProperties") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .HasColumnType("TEXT"); + + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedOptions") + .HasColumnType("TEXT"); + + b.Property("StimulusHash") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250530104854_V3_5.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250530104854_V3_5.cs new file mode 100644 index 0000000..32d771e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/20250530104854_V3_5.cs @@ -0,0 +1,116 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + /// + public partial class V3_5 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_5(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "TEXT", + nullable: true, + oldClrType: typeof(string), + oldType: "TEXT"); + + migrationBuilder.AddColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "INTEGER", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks", + columns: new[] { "Name", "Hash", "WorkflowInstanceId" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropIndex( + name: "IX_StoredBookmark_Name_Hash_WorkflowInstanceId", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "Name", + schema: _schema.Schema, + table: "Bookmarks"); + + migrationBuilder.DropColumn( + name: "AggregateFaultCount", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.DropColumn( + name: "SerializedMetadata", + schema: _schema.Schema, + table: "ActivityExecutionRecords"); + + migrationBuilder.AlterColumn( + name: "Name", + schema: _schema.Schema, + table: "Triggers", + type: "TEXT", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "TEXT", + oldNullable: true); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..241f744 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Runtime/RuntimeElsaDbContextModelSnapshot.cs @@ -0,0 +1,499 @@ +// +using System; +using Elsa.EntityFrameworkCore.Modules.Runtime; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Runtime +{ + [DbContext(typeof(RuntimeElsaDbContext))] + partial class RuntimeElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "9.0.5"); + + modelBuilder.Entity("Elsa.KeyValues.Entities.SerializedKeyValuePair", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("SerializedValue") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "TenantId" }, "IX_SerializedKeyValuePair_TenantId"); + + b.ToTable("KeyValuePairs", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.ActivityExecutionRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("AggregateFaultCount") + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("HasBookmarks") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedActivityStateCompressionAlgorithm") + .HasColumnType("TEXT"); + + b.Property("SerializedException") + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedOutputs") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedProperties") + .HasColumnType("TEXT"); + + b.Property("StartedAt") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityTypeVersion"); + + b.HasIndex("CompletedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_CompletedAt"); + + b.HasIndex("HasBookmarks") + .HasDatabaseName("IX_ActivityExecutionRecord_HasBookmarks"); + + b.HasIndex("StartedAt") + .HasDatabaseName("IX_ActivityExecutionRecord_StartedAt"); + + b.HasIndex("Status") + .HasDatabaseName("IX_ActivityExecutionRecord_Status"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_ActivityExecutionRecord_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_ActivityExecutionRecord_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_ActivityExecutionRecord_ActivityType_ActivityTypeVersion"); + + b.ToTable("ActivityExecutionRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.BookmarkQueueItem", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .HasColumnType("TEXT"); + + b.Property("BookmarkId") + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("SerializedOptions") + .HasColumnType("TEXT"); + + b.Property("StimulusHash") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_BookmarkQueueItem_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_BookmarkQueueItem_ActivityTypeName"); + + b.HasIndex(new[] { "BookmarkId" }, "IX_BookmarkQueueItem_BookmarkId"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_BookmarkQueueItem_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_BookmarkQueueItem_CreatedAt"); + + b.HasIndex(new[] { "StimulusHash" }, "IX_BookmarkQueueItem_StimulusHash"); + + b.HasIndex(new[] { "TenantId" }, "IX_BookmarkQueueItem_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_BookmarkQueueItem_WorkflowInstanceId"); + + b.ToTable("BookmarkQueueItems", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredBookmark", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("SerializedMetadata") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_StoredBookmark_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_StoredBookmark_ActivityTypeName"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash" }, "IX_StoredBookmark_ActivityTypeName_Hash"); + + b.HasIndex(new[] { "ActivityTypeName", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_ActivityTypeName_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_StoredBookmark_CreatedAt"); + + b.HasIndex(new[] { "Hash" }, "IX_StoredBookmark_Hash"); + + b.HasIndex(new[] { "Name" }, "IX_StoredBookmark_Name"); + + b.HasIndex(new[] { "Name", "Hash" }, "IX_StoredBookmark_Name_Hash"); + + b.HasIndex(new[] { "Name", "Hash", "WorkflowInstanceId" }, "IX_StoredBookmark_Name_Hash_WorkflowInstanceId"); + + b.HasIndex(new[] { "TenantId" }, "IX_StoredBookmark_TenantId"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_StoredBookmark_WorkflowInstanceId"); + + b.ToTable("Bookmarks", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.StoredTrigger", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Hash") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_StoredTrigger_Hash"); + + b.HasIndex("Name") + .HasDatabaseName("IX_StoredTrigger_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_StoredTrigger_TenantId"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_StoredTrigger_WorkflowDefinitionVersionId"); + + b.ToTable("Triggers", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityName") + .HasColumnType("TEXT"); + + b.Property("ActivityNodeId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ActivityTypeVersion") + .HasColumnType("INTEGER"); + + b.Property("EventName") + .HasColumnType("TEXT"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ParentActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("Sequence") + .HasColumnType("INTEGER"); + + b.Property("SerializedActivityState") + .HasColumnType("TEXT"); + + b.Property("SerializedPayload") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("Timestamp") + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowDefinitionVersionId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("WorkflowVersion") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityInstanceId"); + + b.HasIndex("ActivityName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityName"); + + b.HasIndex("ActivityNodeId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityNodeId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityTypeVersion"); + + b.HasIndex("EventName") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_EventName"); + + b.HasIndex("ParentActivityInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ParentActivityInstanceId"); + + b.HasIndex("Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Sequence"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowDefinitionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionId"); + + b.HasIndex("WorkflowDefinitionVersionId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowDefinitionVersionId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.HasIndex("WorkflowVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowVersion"); + + b.HasIndex("ActivityType", "ActivityTypeVersion") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType_ActivityTypeVersion"); + + b.HasIndex("Timestamp", "Sequence") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp_Sequence"); + + b.ToTable("WorkflowExecutionLogRecords", "Elsa"); + }); + + modelBuilder.Entity("Elsa.Workflows.Runtime.Entities.WorkflowInboxMessage", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActivityInstanceId") + .HasColumnType("TEXT"); + + b.Property("ActivityTypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("CorrelationId") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SerializedBookmarkPayload") + .HasColumnType("TEXT"); + + b.Property("SerializedInput") + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.Property("WorkflowInstanceId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "ActivityInstanceId" }, "IX_WorkflowInboxMessage_ActivityInstanceId"); + + b.HasIndex(new[] { "ActivityTypeName" }, "IX_WorkflowInboxMessage_ActivityTypeName"); + + b.HasIndex(new[] { "CorrelationId" }, "IX_WorkflowInboxMessage_CorrelationId"); + + b.HasIndex(new[] { "CreatedAt" }, "IX_WorkflowInboxMessage_CreatedAt"); + + b.HasIndex(new[] { "ExpiresAt" }, "IX_WorkflowInboxMessage_ExpiresAt"); + + b.HasIndex(new[] { "Hash" }, "IX_WorkflowInboxMessage_Hash"); + + b.HasIndex(new[] { "WorkflowInstanceId" }, "IX_WorkflowInboxMessage_WorkflowInstanceId"); + + b.ToTable("WorkflowInboxMessages", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20241212212154_V3_3.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20241212212154_V3_3.Designer.cs new file mode 100644 index 0000000..c37d1f2 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20241212212154_V3_3.Designer.cs @@ -0,0 +1,51 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20241212212154_V3_3")] + partial class V3_3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20241212212154_V3_3.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20241212212154_V3_3.cs new file mode 100644 index 0000000..055d068 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20241212212154_V3_3.cs @@ -0,0 +1,53 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Tenants +{ + /// + public partial class V3_3 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Tenants", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + Configuration = table.Column(type: "TEXT", nullable: false), + TenantId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Tenants", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Name", + table: "Tenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_TenantId", + table: "Tenants", + column: "TenantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Tenants"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20250222191016_V3_4.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20250222191016_V3_4.Designer.cs new file mode 100644 index 0000000..ee26859 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20250222191016_V3_4.Designer.cs @@ -0,0 +1,53 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + [Migration("20250222191016_V3_4")] + partial class V3_4 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20250222191016_V3_4.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20250222191016_V3_4.cs new file mode 100644 index 0000000..b1b30db --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/20250222191016_V3_4.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Tenants +{ + /// + public partial class V3_4 : Migration + { + private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; + + /// + public V3_4(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) + { + _schema = schema; + } + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: _schema.Schema); + + migrationBuilder.RenameTable( + name: "Tenants", + newName: "Tenants", + newSchema: _schema.Schema); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameTable( + name: "Tenants", + schema: _schema.Schema, + newName: "Tenants"); + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs new file mode 100644 index 0000000..9fff983 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/Migrations/Tenants/TenantsElsaDbContextModelSnapshot.cs @@ -0,0 +1,50 @@ +// +using Elsa.EntityFrameworkCore.Modules.Tenants; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elsa.EntityFrameworkCore.Sqlite.Migrations.Tenants +{ + [DbContext(typeof(TenantsElsaDbContext))] + partial class TenantsElsaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("ProductVersion", "8.0.12"); + + modelBuilder.Entity("Elsa.Common.Multitenancy.Tenant", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TenantId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Tenant_TenantId"); + + b.ToTable("Tenants", "Elsa"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/SetupForSqlite.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/SetupForSqlite.cs new file mode 100644 index 0000000..8d60ac9 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/SetupForSqlite.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Elsa.EntityFrameworkCore.Sqlite; + +/// +/// Represents a class that handles entity model creation for SQLite databases. +/// +public class SetupForSqlite : IEntityModelCreatingHandler +{ + /// + public void Handle(ElsaDbContextBase dbContext, ModelBuilder modelBuilder, IMutableEntityType entityType) + { + if(!dbContext.Database.IsSqlite()) + return; + + // SQLite does not have proper support for DateTimeOffset via Entity Framework Core, see the limitations + // here: https://docs.microsoft.com/en-us/ef/core/providers/sqlite/limitations#query-limitations + var properties = entityType.ClrType.GetProperties().Where(p => p.PropertyType == typeof(DateTimeOffset) || p.PropertyType == typeof(DateTimeOffset?)); + + foreach (var property in properties) + { + modelBuilder + .Entity(entityType.Name) + .Property(property.Name) + .HasConversion(new DateTimeOffsetToStringConverter()); + } + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs new file mode 100644 index 0000000..561b354 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs @@ -0,0 +1,76 @@ +using System.Reflection; +using Elsa.EntityFrameworkCore.EntityHandlers; +using Elsa.EntityFrameworkCore.Sqlite; +using Elsa.Extensions; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +// ReSharper disable once CheckNamespace +namespace Elsa.EntityFrameworkCore.Extensions; + +/// +/// Provides extensions to configure EF Core to use Sqlite. +/// +public static class SqliteProvidersExtensions +{ + private static Assembly Assembly => typeof(SqliteProvidersExtensions).Assembly; + + /// + /// Configures the feature to use Sqlite. + /// + public static TFeature UseSqlite(this PersistenceFeatureBase feature, + string? connectionString = null, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseSqlite(Assembly, connectionString, options, configure); + } + + /// + /// Configures the feature to use Sqlite. + /// + public static TFeature UseSqlite(this PersistenceFeatureBase feature, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + return feature.UseSqlite(Assembly, connectionStringFunc, options, configure); + } + + /// + /// Configures the feature to use Sqlite. + /// + public static TFeature UseSqlite(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + string? connectionString = null, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + connectionString ??= "Data Source=elsa.sqlite.db;Cache=Shared;"; + return feature.UseSqlite(migrationsAssembly, _ => connectionString, options, configure); + } + + /// + /// Configures the feature to use Sqlite. + /// + public static TFeature UseSqlite(this PersistenceFeatureBase feature, + Assembly migrationsAssembly, + Func connectionStringFunc, + ElsaDbContextOptions? options = null, + Action? configure = null) + where TDbContext : ElsaDbContextBase + where TFeature : PersistenceFeatureBase + { + + feature.Module.Services.TryAddScopedImplementation(); + feature.DbContextOptionsBuilder = (sp, db) => db.UseElsaSqlite(migrationsAssembly, connectionStringFunc(sp), options, configure: configure); + return (TFeature)feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Elsa.EntityFrameworkCore.csproj b/src/modules/Elsa.EntityFrameworkCore/Elsa.EntityFrameworkCore.csproj new file mode 100644 index 0000000..8a9b190 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Elsa.EntityFrameworkCore.csproj @@ -0,0 +1,24 @@ + + + + + Provides Entity Framework Core implementations of various abstractions from various modules. + + elsa module persistence efcore + + + + + + + + + + + + + + + + + diff --git a/src/modules/Elsa.EntityFrameworkCore/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000..00e1d9a --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/AlterationJobStore.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/AlterationJobStore.cs new file mode 100644 index 0000000..7f185a8 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/AlterationJobStore.cs @@ -0,0 +1,79 @@ +using System.Text.Json; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Filters; +using Elsa.Alterations.Core.Models; +using Open.Linq.AsyncExtensions; + +namespace Elsa.EntityFrameworkCore.Modules.Alterations; + +/// +/// An EF Core implementation of . +/// +public class EFCoreAlterationJobStore : IAlterationJobStore +{ + private readonly EntityStore _store; + + /// + /// Constructor. + /// + public EFCoreAlterationJobStore(EntityStore store) + { + _store = store; + } + + /// + public async Task SaveAsync(AlterationJob record, CancellationToken cancellationToken = default) + { + await _store.SaveAsync(record, OnSaveAsync, cancellationToken); + } + + /// + public async Task SaveManyAsync(IEnumerable jobs, CancellationToken cancellationToken = default) + { + await _store.SaveManyAsync(jobs, OnSaveAsync, cancellationToken); + } + + /// + public async Task FindAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + return await _store.FindAsync(filter.Apply, OnLoadAsync, cancellationToken); + } + + /// + public async Task> FindManyAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + return await _store.QueryAsync(filter.Apply, OnLoadAsync, cancellationToken).ToList(); + } + + /// + public async Task> FindManyIdsAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + return await _store.QueryAsync(filter.Apply, x => x.Id, cancellationToken); + } + + /// + public async Task CountAsync(AlterationJobFilter filter, CancellationToken cancellationToken = default) + { + return await _store.CountAsync(queryable => Filter(queryable, filter), cancellationToken); + } + + private static ValueTask OnSaveAsync(AlterationsElsaDbContext elsaDbContext, AlterationJob entity, CancellationToken cancellationToken) + { + elsaDbContext.Entry(entity).Property("SerializedLog").CurrentValue = JsonSerializer.Serialize(entity.Log); + return default; + } + + private static ValueTask OnLoadAsync(AlterationsElsaDbContext elsaDbContext, AlterationJob? entity, CancellationToken cancellationToken) + { + if (entity is null) + return default; + + var logJson = elsaDbContext.Entry(entity).Property("SerializedLog").CurrentValue; + entity.Log = JsonSerializer.Deserialize(logJson)!; + + return default; + } + + private static IQueryable Filter(IQueryable queryable, AlterationJobFilter filter) => filter.Apply(queryable); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/AlterationPlanStore.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/AlterationPlanStore.cs new file mode 100644 index 0000000..7c8836e --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/AlterationPlanStore.cs @@ -0,0 +1,66 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using Elsa.Alterations.Core.Contracts; +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Filters; +using Elsa.Alterations.Core.Models; + +namespace Elsa.EntityFrameworkCore.Modules.Alterations; + +/// +/// An EF Core implementation of . +/// +public class EFCoreAlterationPlanStore : IAlterationPlanStore +{ + private readonly EntityStore _store; + private readonly IAlterationSerializer _alterationSerializer; + + /// + /// Constructor. + /// + public EFCoreAlterationPlanStore(EntityStore store, IAlterationSerializer alterationSerializer) + { + _store = store; + _alterationSerializer = alterationSerializer; + } + + /// + public async Task SaveAsync(AlterationPlan record, CancellationToken cancellationToken = default) + { + await _store.SaveAsync(record, OnSaveAsync, cancellationToken); + } + + /// + [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.Deserialize(String, JsonSerializerOptions)")] + public async Task FindAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default) + { + return await _store.FindAsync(filter.Apply, OnLoadAsync, cancellationToken); + } + + /// + public async Task CountAsync(AlterationPlanFilter filter, CancellationToken cancellationToken = default) + { + return await _store.CountAsync(filter.Apply, cancellationToken); + } + + private ValueTask OnSaveAsync(AlterationsElsaDbContext elsaDbContext, AlterationPlan entity, CancellationToken cancellationToken) + { + elsaDbContext.Entry(entity).Property("SerializedAlterations").CurrentValue = _alterationSerializer.SerializeMany(entity.Alterations); + elsaDbContext.Entry(entity).Property("SerializedWorkflowInstanceFilter").CurrentValue = JsonSerializer.Serialize(entity.WorkflowInstanceFilter); + return default; + } + + [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.Deserialize(String, JsonSerializerOptions)")] + private ValueTask OnLoadAsync(AlterationsElsaDbContext elsaDbContext, AlterationPlan? entity, CancellationToken cancellationToken) + { + if (entity is null) + return default; + + var alterationsJson = elsaDbContext.Entry(entity).Property("SerializedAlterations").CurrentValue; + var workflowInstanceFilterJson = elsaDbContext.Entry(entity).Property("SerializedWorkflowInstanceFilter").CurrentValue; + entity.Alterations = _alterationSerializer.DeserializeMany(alterationsJson).ToList(); + entity.WorkflowInstanceFilter = JsonSerializer.Deserialize(workflowInstanceFilterJson)!; + + return default; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Configurations.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Configurations.cs new file mode 100644 index 0000000..16eb4c7 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Configurations.cs @@ -0,0 +1,41 @@ +using Elsa.Alterations.Core.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.EntityFrameworkCore.Modules.Alterations; + +/// +/// EF Core configuration for various entity types. +/// +public class Configurations : IEntityTypeConfiguration, IEntityTypeConfiguration +{ + /// + public void Configure(EntityTypeBuilder builder) + { + builder.Ignore(x => x.Alterations); + builder.Ignore(x => x.WorkflowInstanceFilter); + builder.Property("SerializedAlterations"); + builder.Property("SerializedWorkflowInstanceFilter"); + builder.Property(x => x.Status).HasConversion(); + builder.HasIndex(x => x.Status).HasDatabaseName($"IX_{nameof(AlterationPlan)}_{nameof(AlterationPlan.Status)}"); + builder.HasIndex(x => x.CreatedAt).HasDatabaseName($"IX_{nameof(AlterationPlan)}_{nameof(AlterationPlan.CreatedAt)}"); + builder.HasIndex(x => x.StartedAt).HasDatabaseName($"IX_{nameof(AlterationPlan)}_{nameof(AlterationPlan.StartedAt)}"); + builder.HasIndex(x => x.CompletedAt).HasDatabaseName($"IX_{nameof(AlterationPlan)}_{nameof(AlterationPlan.CompletedAt)}"); + builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(AlterationPlan)}_{nameof(AlterationPlan.TenantId)}"); + } + + /// + public void Configure(EntityTypeBuilder builder) + { + builder.Ignore(x => x.Log); + builder.Property("SerializedLog"); + builder.Property(x => x.Status).HasConversion(); + builder.HasIndex(x => x.PlanId).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.PlanId)}"); + builder.HasIndex(x => x.WorkflowInstanceId).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.WorkflowInstanceId)}"); + builder.HasIndex(x => x.Status).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.Status)}"); + builder.HasIndex(x => x.CreatedAt).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.CreatedAt)}"); + builder.HasIndex(x => x.StartedAt).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.StartedAt)}"); + builder.HasIndex(x => x.CompletedAt).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.CompletedAt)}"); + builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(AlterationJob)}_{nameof(AlterationJob.TenantId)}"); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/DbContext.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/DbContext.cs new file mode 100644 index 0000000..6043382 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/DbContext.cs @@ -0,0 +1,42 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Core.Models; +using Elsa.Workflows.Management.Models; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.EntityFrameworkCore.Modules.Alterations; + +/// +/// DB context for the runtime module. +/// +[UsedImplicitly] +public class AlterationsElsaDbContext : ElsaDbContextBase +{ + /// + public AlterationsElsaDbContext(DbContextOptions options, IServiceProvider serviceProvider) : base(options, serviceProvider) + { + } + + /// + /// The alteration plans. + /// + public DbSet AlterationPlans { get; set; } = default!; + + /// + /// The alteration jobs. + /// + public DbSet AlterationJobs { get; set; } = default!; + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Ignore(); + modelBuilder.Ignore(); + modelBuilder.Ignore(); + + var configuration = new Configurations(); + modelBuilder.ApplyConfiguration(configuration); + modelBuilder.ApplyConfiguration(configuration); + base.OnModelCreating(modelBuilder); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Extensions.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Extensions.cs new file mode 100644 index 0000000..02be5e4 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Extensions.cs @@ -0,0 +1,20 @@ +using Elsa.Alterations.Features; +using JetBrains.Annotations; + +namespace Elsa.EntityFrameworkCore.Modules.Alterations; + +/// +/// Provides extensions to the feature. +/// +[PublicAPI] +public static class Extensions +{ + /// + /// Configures the to use EF Core persistence providers. + /// + public static AlterationsFeature UseEntityFrameworkCore(this AlterationsFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Feature.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Feature.cs new file mode 100644 index 0000000..de79b78 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/Feature.cs @@ -0,0 +1,32 @@ +using Elsa.Alterations.Core.Entities; +using Elsa.Alterations.Features; +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore.Modules.Alterations; + +/// +/// Configures the default workflow runtime to use EF Core persistence providers. +/// +[DependsOn(typeof(AlterationsFeature))] +public class EFCoreAlterationsPersistenceFeature(IModule module) : PersistenceFeatureBase(module) +{ + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.AlterationPlanStoreFactory = sp => sp.GetRequiredService(); + feature.AlterationJobStoreFactory = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + AddEntityStore(); + AddEntityStore(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/ApplicationStore.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/ApplicationStore.cs new file mode 100644 index 0000000..cef3e5d --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/ApplicationStore.cs @@ -0,0 +1,41 @@ +using Elsa.Identity.Contracts; +using Elsa.Identity.Entities; +using Elsa.Identity.Models; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +/// +/// An EF Core implementation of . +/// +public class EFCoreApplicationStore : IApplicationStore +{ + private readonly EntityStore _applicationStore; + + /// + /// Initializes a new instance of . + /// + public EFCoreApplicationStore(EntityStore applicationStore) + { + _applicationStore = applicationStore; + } + + /// + public async Task SaveAsync(Application application, CancellationToken cancellationToken = default) + { + await _applicationStore.SaveAsync(application, cancellationToken); + } + + /// + public async Task DeleteAsync(ApplicationFilter filter, CancellationToken cancellationToken = default) + { + await _applicationStore.DeleteWhereAsync(query => Filter(query, filter), cancellationToken); + } + + /// + public async Task FindAsync(ApplicationFilter filter, CancellationToken cancellationToken = default) + { + return await _applicationStore.FindAsync(query => Filter(query, filter), cancellationToken); + } + + private static IQueryable Filter(IQueryable query, ApplicationFilter filter) => filter.Apply(query); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/Configurations.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/Configurations.cs new file mode 100644 index 0000000..ac15f24 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/Configurations.cs @@ -0,0 +1,40 @@ +using System.Linq.Expressions; +using Elsa.Identity.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +internal class Configurations : IEntityTypeConfiguration, IEntityTypeConfiguration, IEntityTypeConfiguration +{ + private static Expression, string>> StringCollectionToStringConverter => v => string.Join(",", v); + private static Expression>> StringToStringCollectionConverter => v => v.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList(); + + private static readonly ValueComparer> StringCollectionComparer = new( + (c1, c2) => c1!.SequenceEqual(c2!), + c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), + c => c.ToList()); + + public void Configure(EntityTypeBuilder builder) + { + builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(User)}_{nameof(User.Name)}").IsUnique(); + builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(User)}_{nameof(User.TenantId)}"); + builder.Property(x => x.Roles).HasColumnName("Roles").HasConversion(StringCollectionToStringConverter, StringToStringCollectionConverter).IsRequired().Metadata.SetValueComparer(StringCollectionComparer); + } + + public void Configure(EntityTypeBuilder builder) + { + builder.HasIndex(x => x.ClientId).HasDatabaseName($"IX_{nameof(Application)}_{nameof(Application.ClientId)}").IsUnique(); + builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(Application)}_{nameof(Application.Name)}").IsUnique(); + builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(Application)}_{nameof(Application.TenantId)}"); + builder.Property(x => x.Roles).HasColumnName("Roles").HasConversion(StringCollectionToStringConverter, StringToStringCollectionConverter).IsRequired().Metadata.SetValueComparer(StringCollectionComparer); + } + + public void Configure(EntityTypeBuilder builder) + { + builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(Role)}_{nameof(Role.Name)}").IsUnique(); + builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(Role)}_{nameof(Role.TenantId)}"); + builder.Property(x => x.Permissions).HasColumnName("Permissions").HasConversion(StringCollectionToStringConverter, StringToStringCollectionConverter).IsRequired().Metadata.SetValueComparer(StringCollectionComparer); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/DbContext.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/DbContext.cs new file mode 100644 index 0000000..21e5a43 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/DbContext.cs @@ -0,0 +1,41 @@ +using Elsa.Identity.Entities; +using Microsoft.EntityFrameworkCore; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +/// +/// The database context for the Identity module. +/// +public class IdentityElsaDbContext : ElsaDbContextBase +{ + /// + public IdentityElsaDbContext(DbContextOptions options, IServiceProvider serviceProvider) : base(options, serviceProvider) + { + } + + /// + /// The users. + /// + public DbSet Users { get; set; } = default!; + + /// + /// The applications. + /// + public DbSet Applications { get; set; } = default!; + + /// + /// The roles. + /// + public DbSet Roles { get; set; } = default!; + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var config = new Configurations(); + modelBuilder.ApplyConfiguration(config); + modelBuilder.ApplyConfiguration(config); + modelBuilder.ApplyConfiguration(config); + + base.OnModelCreating(modelBuilder); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/Feature.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/Feature.cs new file mode 100644 index 0000000..c756dc3 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/Feature.cs @@ -0,0 +1,36 @@ +using Elsa.Features.Attributes; +using Elsa.Features.Services; +using Elsa.Identity.Entities; +using Elsa.Identity.Features; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +/// +/// Configures the feature with Entity Framework Core persistence providers. +/// +[DependsOn(typeof(IdentityFeature))] +[PublicAPI] +public class EFCoreIdentityPersistenceFeature(IModule module) : PersistenceFeatureBase(module) +{ + /// + public override void Configure() + { + Module.Configure(feature => + { + feature.UserStore = sp => sp.GetRequiredService(); + feature.ApplicationStore = sp => sp.GetRequiredService(); + feature.RoleStore = sp => sp.GetRequiredService(); + }); + } + + /// + public override void Apply() + { + base.Apply(); + AddEntityStore(); + AddEntityStore(); + AddEntityStore(); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/IdentityFeatureExtensions.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/IdentityFeatureExtensions.cs new file mode 100644 index 0000000..5704267 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/IdentityFeatureExtensions.cs @@ -0,0 +1,18 @@ +using Elsa.Identity.Features; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +/// +/// Provides extensions for +/// +public static class IdentityFeatureExtensions +{ + /// + /// Sets up the EF Core persistence provider for the User, Application and Role stores. + /// + public static IdentityFeature UseEntityFrameworkCore(this IdentityFeature feature, Action? configure = default) + { + feature.Module.Configure(configure); + return feature; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/RoleStore.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/RoleStore.cs new file mode 100644 index 0000000..4f5e0d6 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/RoleStore.cs @@ -0,0 +1,54 @@ +using Elsa.Identity.Contracts; +using Elsa.Identity.Entities; +using Elsa.Identity.Models; +using Open.Linq.AsyncExtensions; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +/// +/// An EF Core implementation of . +/// +public class EFCoreRoleStore : IRoleStore +{ + private readonly EntityStore _applicationStore; + + /// + /// Initializes a new instance of . + /// + public EFCoreRoleStore(EntityStore applicationStore) + { + _applicationStore = applicationStore; + } + + /// + public async Task SaveAsync(Role application, CancellationToken cancellationToken = default) + { + await _applicationStore.SaveAsync(application, cancellationToken); + } + + /// + public async Task AddAsync(Role role, CancellationToken cancellationToken = default) + { + await _applicationStore.AddAsync(role, cancellationToken); + } + + /// + public async Task DeleteAsync(RoleFilter filter, CancellationToken cancellationToken = default) + { + await _applicationStore.DeleteWhereAsync(query => Filter(query, filter), cancellationToken); + } + + /// + public async Task FindAsync(RoleFilter filter, CancellationToken cancellationToken = default) + { + return await _applicationStore.FindAsync(query => Filter(query, filter), cancellationToken); + } + + /// + public async Task> FindManyAsync(RoleFilter filter, CancellationToken cancellationToken = default) + { + return await _applicationStore.QueryAsync(queryable => Filter(queryable, filter), cancellationToken).ToList(); + } + + private static IQueryable Filter(IQueryable query, RoleFilter filter) => filter.Apply(query); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/UserStore.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/UserStore.cs new file mode 100644 index 0000000..882599c --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Identity/UserStore.cs @@ -0,0 +1,31 @@ +using Elsa.Identity.Contracts; +using Elsa.Identity.Entities; +using Elsa.Identity.Models; + +namespace Elsa.EntityFrameworkCore.Modules.Identity; + +/// +/// An EF Core implementation of . +/// +public class EFCoreUserStore(EntityStore userStore) : IUserStore +{ + /// + public async Task SaveAsync(User user, CancellationToken cancellationToken = default) + { + await userStore.SaveAsync(user, cancellationToken); + } + + /// + public async Task DeleteAsync(UserFilter filter, CancellationToken cancellationToken = default) + { + await userStore.DeleteWhereAsync(query => Filter(query, filter), cancellationToken); + } + + /// + public async Task FindAsync(UserFilter filter, CancellationToken cancellationToken = default) + { + return await userStore.FindAsync(query => Filter(query, filter), cancellationToken); + } + + private static IQueryable Filter(IQueryable query, UserFilter filter) => filter.Apply(query); +} \ No newline at end of file diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Labels/Configurations.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Labels/Configurations.cs new file mode 100644 index 0000000..b20ea10 --- /dev/null +++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Labels/Configurations.cs @@ -0,0 +1,20 @@ +using Elsa.Labels.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Elsa.EntityFrameworkCore.Modules.Labels; + +public class Configurations : IEntityTypeConfiguration